aboutsummaryrefslogtreecommitdiffstats
path: root/resources/tools/testbed-setup/ansible
diff options
context:
space:
mode:
authorpmikus <pmikus@cisco.com>2020-05-22 14:46:43 +0000
committerPeter Mikus <pmikus@cisco.com>2020-05-22 14:52:10 +0000
commit216073ac4b05619d9e9fc73131075597196af753 (patch)
tree3d5976c760a434c346575be598a1362a1a0f664e /resources/tools/testbed-setup/ansible
parentae80dfa4c98049d96163b6ad3d67221a7851ba4b (diff)
Infra: Ansible Nomad II
Signed-off-by: pmikus <pmikus@cisco.com> Change-Id: Iaa5c02d14223b578c316f48e31a0b3613303eecf
Diffstat (limited to 'resources/tools/testbed-setup/ansible')
-rw-r--r--resources/tools/testbed-setup/ansible/inventories/lf_inventory/host_vars/10.30.51.28.yaml15
-rw-r--r--resources/tools/testbed-setup/ansible/inventories/lf_inventory/host_vars/10.30.51.29.yaml11
-rw-r--r--resources/tools/testbed-setup/ansible/inventories/lf_inventory/host_vars/10.30.51.30.yaml16
-rw-r--r--resources/tools/testbed-setup/ansible/roles/nomad/defaults/main.yaml22
-rw-r--r--resources/tools/testbed-setup/ansible/roles/nomad/tasks/main.yaml14
-rw-r--r--resources/tools/testbed-setup/ansible/roles/nomad/templates/base.hcl.j213
-rw-r--r--resources/tools/testbed-setup/ansible/roles/nomad/templates/client.hcl.j22
-rw-r--r--resources/tools/testbed-setup/ansible/roles/nomad/templates/nomad_systemd.service.j23
-rw-r--r--resources/tools/testbed-setup/ansible/roles/nomad/templates/server.hcl.j216
-rw-r--r--resources/tools/testbed-setup/ansible/roles/nomad/templates/tls.hcl.j212
-rw-r--r--resources/tools/testbed-setup/ansible/roles/user_add/tasks/main.yaml1
-rw-r--r--resources/tools/testbed-setup/ansible/vault.yml893
12 files changed, 575 insertions, 443 deletions
diff --git a/resources/tools/testbed-setup/ansible/inventories/lf_inventory/host_vars/10.30.51.28.yaml b/resources/tools/testbed-setup/ansible/inventories/lf_inventory/host_vars/10.30.51.28.yaml
index aca60b645e..9aaf2077d2 100644
--- a/resources/tools/testbed-setup/ansible/inventories/lf_inventory/host_vars/10.30.51.28.yaml
+++ b/resources/tools/testbed-setup/ansible/inventories/lf_inventory/host_vars/10.30.51.28.yaml
@@ -3,7 +3,8 @@
hostname: "s41-nomad"
inventory_cimc_hostname: '10.30.50.28'
-# User managmeent.
+
+# User management.
users:
- username: localadmin
groups: [adm, sudo]
@@ -17,8 +18,15 @@ users:
- "ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAQEAgObJFDIMmPwQhhkjAynvlbwpM5yeSewyaE7vTLaFf4uFz4vmsE2hFf6B2xXHUGLVwoVfk91UeK7LOGrdDpoDDHzvPZXj5NmZI+WiWax5y2pQZNkcSZws0ENCeEc4hPwc4veJ1JmhokF4Bsmu14HyFMaFUhM8897jtJwsh+9fLA/no0iPGaQqEtRUQhkV+P4jCEPoY0qdRZAzVw/rY4EGAMhsJe3EJmyj63OfrrkG3+hvSLFo5pDxHQr3pZd/c6ukI7xMef48PosAvGCm3oxzb/Gu9PZIGuHLczY+tCnzCkY7MO7E+IWgjXrUAfYwSWz8XmFmA9LLe26DT5jkcK8hGQ== pmikus@cisco.com"
# Nomad settings.
+nomad_certificates:
+ - src: "{{ vault_s41_nomad_ca_file }}"
+ dest: "{{ nomad_ca_file }}"
+ - src: "{{ vault_s41_nomad_cert_file }}"
+ dest: "{{ nomad_cert_file }}"
+ - src: "{{ vault_s41_nomad_key_file }}"
+ dest: "{{ nomad_key_file }}"
nomad_datacenter: "yul1"
-nomad_name: "s40-nomad-{{ ansible_architecture }}"
+nomad_name: "s41-nomad-{{ ansible_architecture }}"
nomad_node_role: "client"
nomad_node_class: "builder"
nomad_options:
@@ -26,4 +34,5 @@ nomad_options:
docker.cleanup.image: false
docker.privileged.enabled: true
driver.whitelist: "docker,raw_exec,exec"
-nomad_servers: "\"10.30.51.32:4647\", \"10.30.51.33:4647\""
+ fingerprint.network.disallow_link_local: true
+nomad_servers: [ "10.30.51.32:4647", "10.30.51.33:4647" ]
diff --git a/resources/tools/testbed-setup/ansible/inventories/lf_inventory/host_vars/10.30.51.29.yaml b/resources/tools/testbed-setup/ansible/inventories/lf_inventory/host_vars/10.30.51.29.yaml
index 2eb2dfc88c..ca2c7ff5a6 100644
--- a/resources/tools/testbed-setup/ansible/inventories/lf_inventory/host_vars/10.30.51.29.yaml
+++ b/resources/tools/testbed-setup/ansible/inventories/lf_inventory/host_vars/10.30.51.29.yaml
@@ -4,7 +4,7 @@
hostname: "s39-nomad"
inventory_cimc_hostname: "10.30.50.29"
-# User managmeent.
+# User management.
users:
- username: localadmin
groups: [adm, sudo]
@@ -18,6 +18,13 @@ users:
- "ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAQEAgObJFDIMmPwQhhkjAynvlbwpM5yeSewyaE7vTLaFf4uFz4vmsE2hFf6B2xXHUGLVwoVfk91UeK7LOGrdDpoDDHzvPZXj5NmZI+WiWax5y2pQZNkcSZws0ENCeEc4hPwc4veJ1JmhokF4Bsmu14HyFMaFUhM8897jtJwsh+9fLA/no0iPGaQqEtRUQhkV+P4jCEPoY0qdRZAzVw/rY4EGAMhsJe3EJmyj63OfrrkG3+hvSLFo5pDxHQr3pZd/c6ukI7xMef48PosAvGCm3oxzb/Gu9PZIGuHLczY+tCnzCkY7MO7E+IWgjXrUAfYwSWz8XmFmA9LLe26DT5jkcK8hGQ== pmikus@cisco.com"
# Nomad settings.
+nomad_certificates:
+ - src: "{{ vault_s39_nomad_ca_file }}"
+ dest: "{{ nomad_ca_file }}"
+ - src: "{{ vault_s39_nomad_cert_file }}"
+ dest: "{{ nomad_cert_file }}"
+ - src: "{{ vault_s39_nomad_key_file }}"
+ dest: "{{ nomad_key_file }}"
nomad_datacenter: "yul1"
nomad_name: "s39-nomad-{{ ansible_architecture }}"
nomad_node_role: "client"
@@ -27,4 +34,4 @@ nomad_options:
docker.cleanup.image: false
docker.privileged.enabled: true
driver.whitelist: "docker,raw_exec,exec"
-nomad_servers: "\"10.30.51.32:4647\", \"10.30.51.33:4647\""
+nomad_servers: [ "10.30.51.32:4647", "10.30.51.33:4647" ]
diff --git a/resources/tools/testbed-setup/ansible/inventories/lf_inventory/host_vars/10.30.51.30.yaml b/resources/tools/testbed-setup/ansible/inventories/lf_inventory/host_vars/10.30.51.30.yaml
index 3aed1c8b52..fe96d08bc0 100644
--- a/resources/tools/testbed-setup/ansible/inventories/lf_inventory/host_vars/10.30.51.30.yaml
+++ b/resources/tools/testbed-setup/ansible/inventories/lf_inventory/host_vars/10.30.51.30.yaml
@@ -4,7 +4,7 @@
hostname: "s40-nomad"
inventory_cimc_hostname: '10.30.50.30'
-# User managmeent.
+# User management.
users:
- username: localadmin
groups: [adm, sudo]
@@ -18,7 +18,15 @@ users:
- "ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAQEAgObJFDIMmPwQhhkjAynvlbwpM5yeSewyaE7vTLaFf4uFz4vmsE2hFf6B2xXHUGLVwoVfk91UeK7LOGrdDpoDDHzvPZXj5NmZI+WiWax5y2pQZNkcSZws0ENCeEc4hPwc4veJ1JmhokF4Bsmu14HyFMaFUhM8897jtJwsh+9fLA/no0iPGaQqEtRUQhkV+P4jCEPoY0qdRZAzVw/rY4EGAMhsJe3EJmyj63OfrrkG3+hvSLFo5pDxHQr3pZd/c6ukI7xMef48PosAvGCm3oxzb/Gu9PZIGuHLczY+tCnzCkY7MO7E+IWgjXrUAfYwSWz8XmFmA9LLe26DT5jkcK8hGQ== pmikus@cisco.com"
# Nomad settings.
+nomad_certificates:
+ - src: "{{ vault_s40_nomad_ca_file }}"
+ dest: "{{ nomad_ca_file }}"
+ - src: "{{ vault_s40_nomad_cert_file }}"
+ dest: "{{ nomad_cert_file }}"
+ - src: "{{ vault_s40_nomad_key_file }}"
+ dest: "{{ nomad_key_file }}"
nomad_datacenter: "yul1"
+nomad_encrypt: "Y4T+5JGx1C3l2NFBBvkTWQ=="
nomad_name: "s40-nomad-{{ ansible_architecture }}"
nomad_node_role: "both"
nomad_node_class: "builder"
@@ -27,4 +35,8 @@ nomad_options:
docker.cleanup.image: false
docker.privileged.enabled: true
driver.whitelist: "docker,raw_exec,exec"
-nomad_servers: "\"10.30.51.32:4647\", \"10.30.51.33:4647\""
+ fingerprint.network.disallow_link_local: true
+nomad_retry_servers: [ "10.30.51.32", "10.30.51.33" ]
+nomad_servers: [ "10.30.51.32:4647", "10.30.51.33:4647" ]
+
+
diff --git a/resources/tools/testbed-setup/ansible/roles/nomad/defaults/main.yaml b/resources/tools/testbed-setup/ansible/roles/nomad/defaults/main.yaml
index ad8b36ee66..0efbc6af5a 100644
--- a/resources/tools/testbed-setup/ansible/roles/nomad/defaults/main.yaml
+++ b/resources/tools/testbed-setup/ansible/roles/nomad/defaults/main.yaml
@@ -64,7 +64,7 @@ nomad_name: "{{ inventory_hostname }}"
nomad_region: "global"
nomad_syslog_enable: true
-# Conf - base.hcl (TLS)
+# Conf - tls.hcl
nomad_ca_file: "{{ nomad_ssl_dir }}/ca.pem"
nomad_cert_file: "{{ nomad_ssl_dir }}/nomad.pem"
nomad_http: false
@@ -84,20 +84,10 @@ nomad_no_host_uuid: true
nomad_options: {}
nomad_servers: []
+# Conf - server.hcl
+nomad_bootstrap_expect: 2
+nomad_encrypt: ""
+nomad_retry_join: true
+
# Conf - custom.hcl
# empty
-
-# Conf - server.hcl
-#nomad_retry_max: 0
-#nomad_retry_join: false
-#nomad_retry_interval: "30s"
-#nomad_rejoin_after_leave: false
-#nomad_enabled_schedulers:
-# - service
-# - batch
-# - system
-#nomad_num_schedulers: "{{ ansible_processor_vcpus }}"
-#nomad_node_gc_threshold: "24h"
-#nomad_job_gc_threshold: "4h"
-#nomad_eval_gc_threshold: "1h"
-#nomad_encrypt: ""
diff --git a/resources/tools/testbed-setup/ansible/roles/nomad/tasks/main.yaml b/resources/tools/testbed-setup/ansible/roles/nomad/tasks/main.yaml
index 9093afd08e..fa95d645fd 100644
--- a/resources/tools/testbed-setup/ansible/roles/nomad/tasks/main.yaml
+++ b/resources/tools/testbed-setup/ansible/roles/nomad/tasks/main.yaml
@@ -127,6 +127,16 @@
tags:
- nomad-conf
+- name: Conf - TLS Configuration
+ template:
+ src: tls.hcl.j2
+ dest: "{{ nomad_config_dir }}/tls.hcl"
+ owner: "{{ nomad_user }}"
+ group: "{{ nomad_group }}"
+ mode: 0644
+ tags:
+ - nomad-conf
+
- name: Conf - Custom Configuration
template:
src: custom.json.j2
@@ -158,7 +168,7 @@
owner: "root"
group: "root"
mode: 0644
- notify:
- - "Restart Nomad"
+# notify:
+# - "Restart Nomad"
tags:
- nomad-conf
diff --git a/resources/tools/testbed-setup/ansible/roles/nomad/templates/base.hcl.j2 b/resources/tools/testbed-setup/ansible/roles/nomad/templates/base.hcl.j2
index 0e2b60c6d4..7badecf9e0 100644
--- a/resources/tools/testbed-setup/ansible/roles/nomad/templates/base.hcl.j2
+++ b/resources/tools/testbed-setup/ansible/roles/nomad/templates/base.hcl.j2
@@ -9,16 +9,3 @@ enable_syslog = {{ nomad_syslog_enable | bool | lower }}
enable_debug = {{ nomad_enable_debug | bool | lower }}
disable_update_check = {{ nomad_disable_update_check | bool | lower }}
log_level = "{{ nomad_log_level }}"
-
-{% if ( nomad_ca_file ) and
- ( nomad_cert_file ) and
- ( nomad_key_file )
-%}
-tls {
- http = {{ nomad_http | bool | lower }}
- rpc = {{ nomad_rpc | bool | lower }}
- ca_file = "{{ nomad_ca_file }}"
- cert_file = "{{ nomad_cert_file }}"
- key_file = "{{ nomad_key_file }}"
-}
-{% endif %}
diff --git a/resources/tools/testbed-setup/ansible/roles/nomad/templates/client.hcl.j2 b/resources/tools/testbed-setup/ansible/roles/nomad/templates/client.hcl.j2
index 91fd1c947f..c097d214a5 100644
--- a/resources/tools/testbed-setup/ansible/roles/nomad/templates/client.hcl.j2
+++ b/resources/tools/testbed-setup/ansible/roles/nomad/templates/client.hcl.j2
@@ -4,7 +4,7 @@ client {
node_class = "{{ nomad_node_class }}"
{% if nomad_servers -%}
- servers = [ {{ nomad_servers }} ]
+ servers = [ {% for ip_port in nomad_servers -%} "{{ ip_port }}" {% if not loop.last %},{% endif %}{%- endfor -%} ]
{% endif %}
{% if nomad_options -%}
diff --git a/resources/tools/testbed-setup/ansible/roles/nomad/templates/nomad_systemd.service.j2 b/resources/tools/testbed-setup/ansible/roles/nomad/templates/nomad_systemd.service.j2
index d0beed24b8..7652983417 100644
--- a/resources/tools/testbed-setup/ansible/roles/nomad/templates/nomad_systemd.service.j2
+++ b/resources/tools/testbed-setup/ansible/roles/nomad/templates/nomad_systemd.service.j2
@@ -1,5 +1,6 @@
[Unit]
-Description=nomad agent
+Description=Nomad Service
+Documentation=https://www.nomadproject.io/docs/index.html
Wants=network.target
After=nomad.service
diff --git a/resources/tools/testbed-setup/ansible/roles/nomad/templates/server.hcl.j2 b/resources/tools/testbed-setup/ansible/roles/nomad/templates/server.hcl.j2
index c28a43c5d2..b581de9ad0 100644
--- a/resources/tools/testbed-setup/ansible/roles/nomad/templates/server.hcl.j2
+++ b/resources/tools/testbed-setup/ansible/roles/nomad/templates/server.hcl.j2
@@ -1,4 +1,16 @@
server {
- enabled = false
- encrypt = "Y4T+5JGx1C3l2NFBBvkTWQ=="
+ enabled = {{ nomad_node_server | bool | lower }}
+
+ {% if nomad_node_server | bool -%}
+ bootstrap_expect = {{ nomad_bootstrap_expect }}
+ {%- endif %}
+
+ encrypt = "{{ nomad_encrypt }}"
+
+ {% if nomad_retry_join | bool -%}
+ server_join {
+ retry_join = [ {% for ip_port in nomad_retry_servers -%} "{{ ip_port }}" {% if not loop.last %},{% endif %}{%- endfor -%} ]
+ }
+ {%- endif %}
+
}
diff --git a/resources/tools/testbed-setup/ansible/roles/nomad/templates/tls.hcl.j2 b/resources/tools/testbed-setup/ansible/roles/nomad/templates/tls.hcl.j2
new file mode 100644
index 0000000000..650765f1b1
--- /dev/null
+++ b/resources/tools/testbed-setup/ansible/roles/nomad/templates/tls.hcl.j2
@@ -0,0 +1,12 @@
+{% if ( nomad_ca_file ) and
+ ( nomad_cert_file ) and
+ ( nomad_key_file )
+%}
+tls {
+ http = {{ nomad_http | bool | lower }}
+ rpc = {{ nomad_rpc | bool | lower }}
+ ca_file = "{{ nomad_ca_file }}"
+ cert_file = "{{ nomad_cert_file }}"
+ key_file = "{{ nomad_key_file }}"
+}
+{% endif %}
diff --git a/resources/tools/testbed-setup/ansible/roles/user_add/tasks/main.yaml b/resources/tools/testbed-setup/ansible/roles/user_add/tasks/main.yaml
index 8323284261..f980aff84d 100644
--- a/resources/tools/testbed-setup/ansible/roles/user_add/tasks/main.yaml
+++ b/resources/tools/testbed-setup/ansible/roles/user_add/tasks/main.yaml
@@ -6,7 +6,6 @@
append: "{{ item.append | default(omit) }}"
createhome: "{{ 'yes' if users_create_homedirs else 'no' }}"
generate_ssh_key: "{{ item.generate_ssh_key | default(omit) }}"
- group: "{{ item.group | default(item.username) }}"
groups: "{{ item.groups | join(',') if 'groups' in item else '' }}"
name: "{{ item.username }}"
password: "{{ item.password if item.password is defined else '!' }}"
diff --git a/resources/tools/testbed-setup/ansible/vault.yml b/resources/tools/testbed-setup/ansible/vault.yml
index c2dfbc9476..fd95965595 100644
--- a/resources/tools/testbed-setup/ansible/vault.yml
+++ b/resources/tools/testbed-setup/ansible/vault.yml
@@ -1,401 +1,494 @@
$ANSIBLE_VAULT;1.1;AES256
-37383464316330306537633837623331383864353039623636613630623538346261306366316563
-6566663934656231656464396231336633393361323332640a663864623739376637303066393665
-35343837306337653834396663666139363535313662376262366463316435666261303662316230
-3830336532363861330a306138313961343931383438363663323162356166636461306234303165
-64656563613034333139633234326165323231346366323030663137393330396231666531656539
-34326263666435656534643664396661366330383466653334323239653533346266363866633436
-30633134313436623631346139393737393266386139653665306261643732383165363364346264
-31336161633530653731633530366633663161356539663563643633666361626531333639303134
-65393665383265323632366335316166653935323632366662613133323130363665663835393236
-32316530663333353436376637336534333431303739653535623766313236373261316339646632
-66333735366363333934353464343366343661396632353932396564646435613033623030646331
-37346137663765616231376266373764613331663131643266336538386262643762383533666665
-36663237386363326234623266643465306366353863303564346632353237636462376663343938
-65643566396639646566626330376138663830643434636133363637616635623733383930663564
-38303863336339303861303339363433306331396466343434323763336165666434316633363731
-30336234343166643964663362363930363331336436393863646464346431663262623731333532
-34336130333861356238346565336338663339653461386566383036613139363562356532666562
-32303331626536386263653232623230316262633632626462323034343136636137666662313962
-65613462643932636363343635643534353664386333313363396261646563653836636638653134
-32303239643032626136373833643838613862646538633234333062653063643962373132653330
-37646633303337333561333832393661313333633139396662663036613565343365316431633162
-64373462656362373161356332383033666261333861333637323436666432363663396163373534
-61343630623637313937616137666363643933633261383163643535396139386336623235353261
-38373263653637393130303762383738386339633162303137643332333137363338306132383566
-65623839653739316538613961376138336437663466343836643762653762373036316234393564
-37613565303233626139336236646265356337383436363664613935333064643064663261356435
-61316663373939303038633434663833393638393732343836333334323634646430646361626139
-31636364613762363937663763333339353263333530643761376631313861646330633366623763
-38313633373736613939396635666232373163313239633336663636353261393731383364316265
-62386365303761646339383434663331306364666263666532353836613161393532646538333362
-34623963653866613365323632323332323432353437336362366238316239663563616535326264
-30363132613339613933356634366237303064653235633039656239313738346436383738353030
-62616237386536333663376538353839626137343338626334373634663339303864373564636435
-31316133643962306434323234316532376562363133333164663237313164633633663236373334
-33613131656239336338623636373334363130346363366436626237366662326263646630663564
-31353762373430626330353836643266383433393064636264623234636264306331306264623266
-38643737323263663836393261643962333762363932363832623531623866623766646166373565
-66306535366230633366366437393536356130636433613264326163303663316332663135323966
-35383662336537663464653135336638626530306139363665343631656565653161346634316132
-62336634336666383335303930623837643638666364633464303536623634666636373961326366
-37326234353336646533346631353166303132633835346361393337316433386330373931323962
-31663830643664613631663561333638336635333636663937323038313830303163393364383438
-32346434653732653630316531646334646664346330663762353135336462643431623665346633
-65633539333935633465653861316336343339346138383565373830626630326564366661393832
-30303930343735616463613166333636396665666262616332646135613731346330623139616666
-34623861643162393062613537643064633532313234653535643436623632326537343866616164
-66626631353539666438316663323765353035396666373236636235373566356561663331633334
-31646337343061663565373461613761663437313338303464313866643737353162303863333837
-31666535653137363461636331356331666535643339666135303232626631613132366230393333
-34653131626461393236666338363262376133353535323165303531653535653732336235386232
-61386238633064623230316465376233353236346465613731653437323835333136313165643262
-62633065356131396530383263343838303331383836303261343763396635343234666664636531
-65643138333831666432383937336265376566333862623363386163333464363961353430336239
-38633664623464326163656134393364656238323139343038356662363766633333613065346461
-65616565646262313766363064613333666135373263643566343435343032653964626566323962
-34623633623938373837653062376362373431663937643833633563663538386561343863366236
-35663033356265393465633934346436356561653136333835346339353236343638316430623434
-31616431366633393031353433303365656438343635363634366361383030633133346264356261
-61656530313932303434306532373930366135636633373736623664386639353763333634653531
-61613461373732616333383965323063313039383832616361323336643230633765353062376633
-32633735376534316262316265393465616231303634656539343261633533313263323262323536
-32353039613164323761386235623664353162653338313962303465663534623762353238653634
-36633734666532623436353033663030633437626131663639376364333364343263326163636437
-35343535336232613861363334653262633936383138313937346236343538313237323230626465
-32613439613464313432653861613564353838386137353964323761306636383061363532346232
-62643735633939343064333162303764353533353562363938353363313266613231653964303330
-36396533323435653765373564316661633066373363323633343234653165623266393730333032
-38353334353030396165616263336335643463343565343762646665326636656232656166373665
-30346165366331386430656637633063666663623362663633643564323933376633623733313038
-65303338313161316431636563623335366531613862363930396536616161636132353930303035
-36326532653966653766366338356562323036343637376362313133313039646533333264356663
-39343464616435666330316361613835626639643333376465393931653732636636326266316463
-63326233633362636666313730353030653531613266653734633163613937643462656138346537
-66646434313332336436363633346438313866373837623838303238633233653134363465623130
-37633838653061626430313934666561323361366365613766373232323663643337333735333631
-30653534616230306139343530666665663962326263323465363035363932323735376636633639
-64343136303366313465666363666435356139366537336231326665386130643532353864383663
-66316232633463333739663537343837653835633363653737386262316538306564353363366238
-61653665346139316137306136363666396461646561383233313436353065333864333162353765
-66663936376535326236336261326235343734626139376136373762306465396232313538393633
-39356137643433666461306534343030626235306366393662306232633930633735646335333538
-64613037303939333630636135316465666335316233323363623730323938313065626466363430
-64383037316234343066636337616466303261323166396665373466303465356136313861623163
-39396532323832613461383831663139656339393932323232663639643339373961613539646565
-38306162396163626531346265333066343462633161326666346430356662306665663539356632
-63346662396337363036353261343035646332303062366334353438303136366538613032643632
-34316335383537333165386561303536396630386535313231363537303533346133343964343135
-33653831323032653838306231323862613734396464663161363764346238646237643365643664
-65313065613330363161303864663164626563376331313165393236376531343962383139333830
-65613631656233383261613861373538633230653436353962333162663165313264636135323330
-64363461323730316634313766636533363131383238616363366431633330376333303737663966
-30316163336361626133373165346231613461626535333432653835616664313536653863386430
-34393238396366303438653831376634653839396531313936663230373336386137313934666563
-34383030623739656634386632303033316133333734656364613131353230343639373630313138
-39373830633161656265633032353538343331663535306535326134646664393736623563393563
-30663036643037636261613633636439646637333230383237653238373264353134333838333839
-35366239616339353031623565613237366230663732633530636266393965316130353036383064
-39623238626337366437396630653764376133323130323234376561303734313732303865323830
-64643161306233633766613231346365653766666132616466326534383862333162666437626237
-66623234616266373139633635333931313631356138386431663563633833316138346633383137
-35343334383337626635306664386239653764373138386563333061626435356338323761336331
-66393430636133396662326666303832336162366166326436353834613034663639323531393738
-65356137373334353837663234383338323634306162323533353930303762646639323639366231
-33336533393731313431306165653963303736393264323136616437386661396438623237373165
-32646337336539356431336530373566656631626161313864306138613933663436333966636236
-63373530343337363334656637363436323039393336633736653537366265626237343434313834
-62303537663436306538356638323330386265626563333638353661336530363136373236343033
-39363165383464336661626632313866383037643332393265316632313435383333626239356332
-66343863366634643836636432656630313639393764346639333236376232353436663362363761
-61626637323865656431333830343239636536653538313432393235323563656539666532306433
-66643730613237613936383863336638303064356437326536373764326230363439396332366136
-39623762326638623365383064313861643933373564663134636638343166643839393363626561
-62663466303732613932626236393131663730643166613964376639656433333835333130633830
-30363634323961383765656137343663383633666233393230353032633064393062326539306537
-38663365623263343262326238636331333034303533633931353335656363633866663162373735
-62376435336531653230653033636235623864303438626130623464653838663261353338366233
-66323865363436383861663735616335353337333462336265656134633036616130613031333139
-37346433653337303164376664643431636638333336623832376463373061386263346439366236
-65653163363964386663373836653566633632393632663931336332343330626539323963346332
-62623865383434326333373532383063313335316131353262653031626664323332363162383730
-61613463383263333264363466623836306233653064633637343736393437633733613434636261
-37393962633265623432636661323739326462313339326266313736636130376431656530356236
-36373531343964316661633164313164316231386366626462626164303361623833303937343961
-36353834323931323361393433313633333866623435303931346665306134623435616235343365
-65396462636237353832313562393831363733393566613233396661623434323763623930316137
-65316434313935393932326332373132313938633237326566636437623763616131343237383338
-64356164373737383436373733616461343035333130356362313334393861346166326532663539
-34636161323862636435343663366662306436316463333331326332326236323066343430396664
-31653363366330303737323063373939626662356433623139626432363866366465633165353832
-66616163313433633266373738643963323438313832316238616464373432353434663431653833
-37663734356539333735373666393836363332316538663330336136333262363262653961336536
-34313636336434646663366163666365386362363835376361653361333437323331313863663837
-30333832333435643630653438633465663033343662313236306632643435323332363663373339
-63613031653261636630383166393033396665363333393238333438323137613435336430626461
-34613434363733363933343431363864643562383932663162303361663965323035386135303134
-62303935396432343466656662393332396136323363633362666530383962366232366365646263
-66303766626565333037336364363934663965366565663839396530646132646239626165663563
-61353461373565333232343763653461353362383536383035616562643465346262333835303330
-38396363396662313734356337363535343562623163303532383361656565626465623633343538
-32626664333461326137393036313666353832623264333238663135643033343861313737613632
-35363832306363626535316564326330393032306531333836323361656462303137323765663737
-64613230356433366561333636363630663435366234313730376538613134393765303438316364
-33366535316366343833393238303239376662356231656138306664323930383139393434383836
-34613130363265366561633030613862376338373730653561623236636232333535626335346138
-63613638363565623837386261623838363539363062316336303335383836386565343963356439
-34343562353765316365336564323434666639313634393332633765613061636665383965303830
-34656466656165336662663231663361303166393736323461333031613433613532346433343565
-38366632653666643038633634366537346235303866386235356661336235646665306335303561
-34613561623336313739633764666661616130383537396566613433366166316130663735636265
-36376436346461346331383361353462376633623063313334363130653930663032373531323835
-63303564366536613330376136643130663762366231366162323538363432633834306365313333
-66636337623739623132373137643531356162353231636365386533643337366661316666653838
-35393635313036323233656136393231396633316531646265626562363964383464623532663437
-39336434373562363165363230323064393738656338383633366166623963366630663932343039
-32613866346563313835366534626433613633383132393763343037623066393965666634363366
-66333261363762303732626134366335363933303162373733653266316338626330613833366636
-31613832343836363038353433343338333262313164343034303738303661623964633830363462
-30303339636534633034323331303864373132353838613939643734346661636166346334653034
-39303063356634333332356638616364373362653034396139356139376566326338663236336332
-35376330623237386434633963306238346361323236336565393964373964633336333334316163
-37636636306531323131393334396537646662393334613766393837326566363964316434653838
-39383738356234383232613132316164656535393637623139656434363862366264366237396533
-30383161613439313335396531353264343066383662616239343165623236313736373861366465
-30626464303634393539353763633333386463316266643763313363326462306136343164313839
-61393963313433396663306435653134363038616161373632623732333939336261313464356161
-36326638343963613566646435653731643761346533333337353766323534616535346335313964
-34663330626532613432343362306630383663333531383961613562366334623836626361363966
-65353136393932343264323533356330383937303435303830336538653634666439323833303932
-35363431343339303961393237326130643861326134633466343537396638646139363034616661
-35613033383565303036306138663733653839376638333063306365393735353235626562373932
-30343964386633633731633038393834373233393562393933636634613832353631323831393062
-64303236326463373766653334663063333039633335613134353238386165656332353166666361
-37313063366333323730303664616530393962633036656462376463663034663566393934616430
-32303363303833643232353463663937633938383465653030333362306266616465363062343334
-37366664616333346134353839343136356266356135316336373361343166613963333631306130
-33663235356331616236383038363164326430323530663432666134353035623665626539363962
-64336164653661636139636263393264313437313739313763356135333766646335626539613738
-37656333343462376538323836663437306333636637396430373036303965323137653165343436
-37616533626431353764306633386331386637366464333437356134646262396535653837313561
-66303064366533353238663530353266636631363730623034633862306538396464353332613063
-30303336313435616430396361383166663433633137356539393265343833333535636565353466
-66333665646135616361636265366165653865346136306436303131376265306566666465303835
-33303237336134396562366434323862323762383139376561353865363866306538316238633435
-35366431316333396135373830636665386461643235393732623263636331643234666137336461
-63613462663836336161366364373437356232306134356432323162636565333837613733373536
-38303432313337346431376364303464333339623134343330313630666635313162303466316262
-35643236316465653538653261323131323739343032646339663463343365366235636338363763
-39666130383562333439306466653435313766663238386231383962626566636533333265376133
-30326464643232323262373732393663343930393265373532356139333230313637653531393338
-61383334656539353738393832316239306265313931383666363532363136386230613537336661
-35323234366639343730623732353433633137656563306161616463323432303061353365383632
-66643732363165653138633638323039306531646362353131336133663964396361323830623236
-33643733613436383331316136353462366166653236373632656162663138643337666436656530
-64633833393538393333623465396232653330613562323562636539313166613664336236646363
-62343236366466363633653766373364343762306439656262366430366139343937376637643538
-35336330383730393738333165313663323564333134333436316131633936643035303838386262
-37306632643732343734613334353463383362646364333861363935303262656634373737326431
-36386466663633646438383364336634306532656234356334393161623264383336663233386634
-36306636623035613532336562343461633166313262633434393636666362366566316566366532
-37616362653364376165373764656263316630343861326131343636383965386666613165346264
-38363338373334393536393165316337333230656664336332646635633237333835343837363263
-31623231336263363036336331383936613232356138313830336439353932326437373935306434
-33633138663631323566393130366632303033643236373134383838333432643736323265373434
-30336433383439353662653438393231316565393663656338633564346661343838366231336666
-65363735383663323732393639303834623962353230346530393532323761656634363131383230
-66306261663538633938313363643636616232366532366435323833626535396138353233306462
-66646434373835333631353932626436616665313163356235333165393432353864653262636466
-33313864363563623666363733316261303233623331353935303538336439336361383732383036
-62333830383966643964326339663437303664326266323266353331623364303231646161376638
-63346138343462313033663466613162343263383633343962383764316336343336636335653164
-66316363396336306330363937316362393863383934303837316561333138306139653333333434
-33356261613838383634633733326234303736366163316638363539653738383462393636646437
-62316236373439363735393566353065636633653534383665363433333235333833356138363566
-32363430393563346239396264343162663233326134643964626662386231316566363565313566
-62376462346166613934396238646263643431623132313566383538323336336162636439613135
-35643266313264356135373262363766613765653735333634313835393861383163353234663738
-32646237643664626266356331613932383034333038366230356266633231353930326161313537
-33666663616565346639396436326530356539356464383232333863393932306463333131336633
-36376530313865373062303638333364393964666662623062396636313234643937373332393061
-32663565313361386232643831373834346436373063633734623136613337336561346238333233
-61376562376234666639616662316237613965336539633438313833396632353166656664376630
-31353266386439376263656235643463396133343933656364646664373262643365353634363635
-65396663653961326463653833323263636363306666653632306637383531383431376364656530
-34346462373330336434326338346462323734366235656630373666383336396234363965343630
-30376330323562643137326562616338376537623334396462313764356363356337393834626632
-65363735383565626636306237343161653334656233653464306164376666353830303537386264
-63366430396635633639363031303464326435303138376561333338653564383065313865623664
-61346664646639353035643437626235643432656663323364343338323961623837326663396135
-39616265633933313465363331613137333563373434616236326231303331303735383330613532
-66343366666234313238626535633666363761666337653339616635643263623435386265643261
-38306239643230653836656134646263646265323936326462653337343066613163383062356336
-34356530646139636631656338613331353131353830626365633532653464386365323762326334
-63653531643763616162623431353535333665353733643935313737343638323565393735353637
-30616538343332343461343833343030336365333566623964333830343465383664316135643364
-65366230373837346130653864636237303464376537373632666236356539383736326166663461
-65626661616235653538653062326264666265623739336566316236643963656464653237326265
-34623537336337643266383438626233663733313435303736316163653536326436656638333431
-37316639313965306235346431613536383366613362636266363563373766633063633961616332
-61633138373939626234333264393438393337636364636233643932376466393661333532396333
-30373931613938623931613036623336636638316461643438613963643462663337383630643932
-66386366353239396234383736333331643961663136623438333164656565393537613765343161
-64633235396661363534643963393564323932616133623737396132613862373639383064393232
-65363363336132383966656635313033303034306532666230326234376437316239393035646663
-39386230623639353934326533303864633863356436626135613139346439336131396639396261
-63363664333866356163666637663732373237383431306634356166303732326132633463313063
-62386432336361663237333963636533633565613538633334306434633239383932343365656435
-35386161646637363234343739623230343765323131653861303438393466613635333535343465
-37313761663637303039343762653861396337363132633535363866376637313263326432643434
-66363932333735613462343331303939336539313530373730633835356466356561336339306564
-32383031383931613266643538313534643334613331623438313130353438383133336238373237
-33633561653865633931353664323865333965633363666531363931623737346336376636626133
-33373566663262363735353933396563356165663962663036373461333131636563306365363731
-37633339356263366335303930373530623938373232393365663433613836303837306330643634
-34313631623336633161313830306633616537333137313237363266383934646133633835353232
-36353935363765366262363061363131313063613930376631613435313339353662313632356564
-30313064336439663837376437393738643339643166366335383131656233353263633035383233
-66366161393232316361306332353435653764373064383462333137313532316166393339333435
-30343062386530363835386530316634633934323239326161376530616131663937646339353437
-36623334386438363839363161323166313338353037333234613939613762313762663761636530
-64643830353561653732303332376233343535353832333632373864616334313566626238656366
-65323233363661643339363133303930306432663861353264373435623237626130383232313434
-61356263303433373566373864616537616431383037306230356139666436633439376237626531
-34633362303566626261346237353036626261623964353563336566316266623664343866386238
-64353536326534613539396136366338303230306236373531383935323230633938303438376664
-30636238633430626563303031363665616433386162366331343439333034643537303135653532
-36636238366261313331663065656233353463643062373132376637353935626365633635363366
-64656635373233353131653430633131346132353265383334383230333630383338313365356331
-38383663313461303639613963356134366665356634346630626361653966396239376334356335
-65343530636230353061343063623162616661636430653234656433626161346133316138373033
-38383731376562633539396261626637653337373232626638643836613563326664333165653231
-36353466613937623832353038323034623935333438656661323232373031653834636539326632
-61393137636265343337336564323763383435343730666439623536323364613332343962393433
-30356264323461326565393437343037616630653237363434623831626437663937646235373066
-38396164643934356636323065393937393265613464393738303735376537646232333333373165
-34346535396634346338376564353239623434303835306230343730613335643235306534383565
-37666234363031363463633039366639616161343032653063303234336432343839336433323830
-38316237646632303761656633306665393361376330393839663432353439303730313335653365
-61343161646364393332316534353135366639313063393137303239383332376362303131353566
-61376130313739346566643433353362386164393034333161633834386538366563316534636436
-38636136306239633038393037643865363337393164633066326463613466383937663232306433
-36366136376235383935323761323362356561313731356262653364343265323938633464333134
-35623237343466306530313834356130376635396163373365613734373161663964633535663362
-39313338626662343231366462646633613136616464373736383339316561383765333463333436
-30363535336363386239626161663939346639643061663861346130373535313234616636323965
-37346465303532306434303662623164363830363633326238343565646331636636636437393536
-61633539376437623434616366346439616266343666653566633664646230316239313866333162
-37306665633434663064383430363361656432656361633431633931646637376561333164643165
-36303039323239363865323737626636343364323932306366626336363234346635656330643734
-64643133303539393061366236346436663966323265353539316166353861333635663530366563
-65646132333035666163303562356438333735663863613738653232613739323432633165333964
-65613834653865376332303566386237343334326438353138316532396232613031393764393139
-35323966636633323764356135613539393066326430353631353964636563643132326137653033
-65616339363861316132316338356230363538663765353063323334366465313362373139333233
-36396432376131626666653335336637396363633266323630636632363665366533636634623861
-66623736623433316138376364636463643063316532396533326137336564323933616363616338
-62323761383036383734303035656432663765303638656264373235313937653132366330636639
-62623437333838303536383437333237343562366237316534643336383161626532353262316461
-61383632326536343631666535396661613233346265373063376562333162666135393265343666
-32373532333465646233616237653561313739366462313832383431313430306134396533643737
-62356262626137646566396262643334343664613932663033366233313662313033323836343565
-34366534633739633131376330373431346232373739343634383836313233343936336366313035
-38376434613865616636376565343065343832313834343030653463386261323766303232313636
-39643935663063613865646131363531363533333365326635396161313334383230623266313162
-33333837373038623636313965623131383162303338623630343632616161333232306131383035
-66336165613862383235386330616334316139626336326262306264643461643261613038346333
-32636435353465653065326430353835333633643362303464383935353964363237616563663338
-34613361646437373939323633346233373735326363653861313661316362393832653133383162
-32323665653662616631346335386363646231616639653533363936653535346530373338663336
-31393236303761323335303038623939303434353865303830626436343237666535646161623866
-36323132376536336239306166363330313730626530313932316662373535313334393234346235
-33313564363434393537613261333831393133353662346631303738363430353565353666366235
-65353665363438356136393936646639353332623031616439303839613266373266663266373562
-65363134323962613837663435323966343965373738376330623039396663356336616664313139
-38373763333362633766303436396239633761323032393837376237313161643232373461313163
-62646531303066303138346136346536313264356330396332303366383963333834396535643136
-30623661643438383234393862353464313365313562393132626334633364613366656361316237
-34353335356433656538303538376337316436326461613130316630363132656534346462303330
-63356330376566363831386232626262313139326364353866643530656336623134336662393065
-33666636646462366635353630623065326161313831303933316362646137393538336537623161
-66353661303034373036386436383562323331666334396236346334313932346338343634633431
-39623330653765303231383439393434616338343739386536646435343764616366306335316338
-61396563306532306131663863316236346531623264376132643731613532613531333265666438
-30643134643837633966366139313138663334636438366433616466396561373731333763393436
-37643230623563303532333262333031626633396636353332323562303762346236653561356135
-62303637633466666130636431336230333733613061326263383338323664326662616561393033
-34303231343735643564636364373336666136336465393037663863366537663266343563643436
-33336432613839346266636366373463663563356336633538643963636431323261303361323834
-39616365396335303238666533366233663461393837646265396433626464323863373463366439
-63643930616361366632333462613731363065306366386234353335653563393131336339383633
-31656631633933616637643439393737643862303063363231326231633834376138613766373565
-65393161613733353039656162323136653565306438376166326639323030316366623065626134
-36303736346638323732663539336263616536346233376363383130333832616635666138376432
-34303437373837666133623963393836346165343736656539633736616531613936386264643137
-63663839363932633961386363383865643132386130636433306166343463383636396639316664
-35326462663132346261626231383365356339346466376133336664333164346434663162633735
-33663230336138306365636265373462313962393037363864313161343364306332313735663938
-64663164643563346532643335313862653438666330363839346362353236363430656465386164
-31373461316534323036383562353035363532616366356262323033613237323334623665356430
-64663537643861383636353336626563396338386436383837633566646530356633643938366364
-65356230316261363633363566343633663631316563636364633661383163353633623933613764
-31373031376165616332373239353065616663386136303639663034386334643265336435353332
-33363836356639343336636332363662633764353532353266386139626566373239666339376638
-38323037366536306634636366336438656565383162623236646331336565363065313136623539
-39643036616465663734306239373965656361303039663337356630313439636661346531363561
-38656266323230653166313164323066323632336433343336346234653061646663306531396132
-62636466306465386530353066336439336162663562356233366630383738623732323339653036
-39306536323531343961616164343636626266633763376662396138363130313038356539646561
-64633362356332656637643339373831373935306564356533626338643433646537313564336235
-33316366343834343332306633353363366432643138343839646335653536373238316339353335
-34633731363833346438666564333733333034363766633831346539343238623165356563353934
-38396539356461636536633366326231366364356666623965306234346238353834663233376236
-66366630376537653563316263346330616634316466373861393736303661373338393066326132
-32386337363064333462396535356662323161313437653232623932613265383530303330613535
-62616135363866363664616130663738613130303866373661396261346362323262623239333135
-63373330316535613166326538366664393565653761366536656266656362323838396261623261
-37393534333262643663313233666335623835333135306539353034333733626163393631333037
-61386665366233333032656331656264636539353034643634663533613038323364613233343034
-35346636373263336266303864306635343064663062313730383661376137613331316634383838
-64303461613961656631626236383330316663326231306261336563303638326163333064643738
-38396465643934653237323864633931653537366163353136313766323831323066643962306335
-62323965613466356632636530383838363935643236626362316631653839626461313736656138
-62393761393231366564386231323731313064396135343966373736353936333065636639623863
-39323431383635366237613661656437653937666631326366626539346234326435366464616231
-63613435373665353462653862646232316238393233386537623630396661623136326666303337
-34366237313761616162336139343935613537643164333465303865313361666432633565306130
-35613036343638643337366530373365393137396438396261656133393830636137343938326634
-30356662616330343864333032613037333062333538376263623933376339393465356534343339
-31663363633839363132303531653035383835393665636466653836313635386364386263623063
-39396133373439616434323631653534373163633261613432303035383235303739383138613465
-35303561633761616363663961613161663435303936313461396435376432343239613330616530
-39666534356437306536363462656535326337313433623334623963396337646530663961656464
-30646162653139336533623365343961316338326435653562316639326539333862373732346563
-31353265383738393531373539353039343339353134396439623636623738616564363934623063
-62363736326331633232376465363361636533313335373661613933313662383761616237633837
-61373364616462336530366264306665313565353134323538353332343261323863653834303832
-62616132386437386237356232373334356661383262386238613334613462343537333764326338
-35306464316630353837353462663061646139366533623036363461303232623830383633643534
-35336234326261656265623138356461396638356338373466366563393932633137623132303136
-33326336666439626233323961353563623764663332646165306335373938363738663939396132
-66636433313665333737306362326236366161343236643036636239333630373238353139373431
-39613235346632326133333465633138633531613233376430383030363764656538613831663331
-66396630363330366462633939623564366165396137373232373937313132313763626336373936
-63313262336465303634353066303864663035393435663863306366353365346435373862363738
-64316264366332363563306164343466646132616530636664643762386439646562373761656335
-37356239373265336630386636623733653537356662653066643338373735653339326231306230
-65353433363961363437303332373537343134356663383165623135393664373539633432636335
-61643831346234636661303833626265363831343762373933363337643635643532376635393766
-37326466376639663663616534633662336635633431396633313336643863646238373735636137
-64303861353763343463333530326432613533383565616536303035613133653566656262363739
-31383936666132613962333837353839316264376666313862626635313831346432373165326135
-39363231636634343765653039643933373161313965663130383165363835346137616432383937
-30363665633766636662343639636236376262333839383631643264333233393432616466633438
-66646238373933363435363362353730643763396662303534316266643130313332356163376631
-36663766636430356631613131656132396232313136646339393232623331623961313763343431
-38656239666465613566363037323963393931356239633130636666616139323462623835326537
-31353431323630623139356134663333333261333939343131633163306161653435323737613761
-64393466363039633632313533616338636335333134323230346364353139356533343135373765
-66343166393838643439306564663234623362313433613163323237353166626563363666373838
-36386432333335326665353435306132346434623230316234383537353263613638333935626431
-61663839663563303133
+36353431653863316330346433653430356332333666303435623562313930323864353038333331
+6135373262303030363431383134623539653933353630300a633662323839303764653833333062
+32366331333935323831396331313635663334663532613664633534633864646132313166333863
+6231306130336163660a383562643562343161336336303536633666353536646566306565626464
+65336337643437306664646231383530393836363061653639366665366361383163316235646230
+62316535353331623864386264646533393263326566626530353932323032313438363636393662
+62373937623162663235333430383334353035346333333135313864396263353631353563613238
+33623933366239343739323166323664626333313266633635633434383335303464353832336264
+36376235653465623430323634303135633833316565613161626638616463643462643662313830
+38653933353239393963396666313066396336613265303638633365626461373662623566636361
+37323762323663383561376233386639303639353835336335316539333638623438356364373061
+66303362653439383266373238643762376330396161636231386434653538353564633638313663
+38646539623438643934393562613138656262646539333735653932343530333863316339633465
+33336663633439363839393764306264343064613235333232616161366661646262383934623363
+36333937613034303131666636376137373536626665653737633130623331386265316536386134
+31376531303432643762663262383834343230633865343764636138326664393366396339343439
+31396437323836626138653137353537303836346563393938626265363164373732343635336435
+37666364643536333230663264313161363763353738323530373865396166643235313430346239
+38373637383631353232303561643238646636633032323039316464663864343264353638363464
+36313838383261303434363766333265376461616437356633383262636230333437336532323434
+32656665323430356338323866336332353237613638613330333130326665613135646238336234
+39646339646537646230623738356335343762303562396464383135386237363033626337353266
+36313939656161353737653630343636376137376637653834383537656235313438323636346463
+35383139376461346331373638313437653865613462646339626639633730666532313633326533
+32613965353838303835363463333363333735393765633237623964616365633264653730653563
+63373362336132313063356631646131663638383162646339306633356633396366383233363162
+64306364393833316132343063346531373265353333643263353130386232356364373366363465
+61363031356664343032363538323138663738353935323663323733313062303134363233326535
+31326461646463316561383832653731366165663837353266343935323665353065326137643066
+33636563386531326564333834386531643238303163336365306338333037326333353666643765
+35643365656630333164313936636432656531323564316266613161623739383937303464363239
+62336362643564656161386265303730643235343135323439656466383861646335373532383433
+66653661376631333436643239663730353532373837656630623665363734623132313138373939
+32346332633563636665343364623963623234373062346565333462306334363566666334656235
+30366430663264373330316565393434303966656430373633633336383339326635313539633532
+34663635383632396264333534653866303064303438316464646262333837343462633137363535
+34373465666362323130396633653036393834353232373833396435376535303037393133383563
+37633866353139653733366532666666373962306139366233323735383961306232356233393061
+36343163356339366634366562336236633937653039343062663032636530616666303739336535
+34366537326261623462623064373235656666386635623038616662343061646464333139633134
+36616361313630623438333861653535323464303533653961353631303031386136373965366334
+36646337373663366335636339643732303461343738396162663938343064353832323731643634
+39613862346531616164656332313466383133366162376235306565646238613637653335303463
+34326133353436646239643133316534623962323934363239383533373561343037623864666561
+30303063633431613830623434373135336561666135613032663662363738653464653138363330
+30653464313038363863323432353033633866616164346461653031313336306362393833656261
+34313436326561376330656462616431393637396632393165383630653437623562613863363161
+66303339376631313832353866323232666466633432326166376333313737656636313236336335
+64666139316338303630316635363330363234373663306234326535643838393933356235386330
+33383566393630636139646137386137633062663837656431313237666533336135636466356262
+64646161343162663735636131316635636463363735333661323939353765656134396338353132
+62393462313364386135373833663964623135343739633037336536373439353233316266333365
+63643065373762303965653661376334333135316362376430366166323635663966353630346163
+64633039356564666334383330653661383062346361653066363636383939363466646537623165
+62356436373430653530373630363736343139386434643364656164393938353666376535336336
+61346161333766363936303139393335346361613036393337646464386166396336383938303161
+31353030333466303865613066393237393837636265376333316666346139643565323839323931
+62363032646636653539653561343161336664373137643630303432653335353165313432303362
+39626138376335656630666438356235653135346437666166313964633762626234636632346130
+39363463376432653231613434633961343135313737666330613266346436323636633531373064
+62366665616561303839373837633538376466653133343037386563616530313161333937343066
+64633537393237666338663935366439353538613738316333663862646333666636633236396433
+35366465666261316130316537323034386565643432313264316264333863393163326561393562
+37313437386132623333623066663737623936373534373263326233623132316363383464663939
+62383637303830356234343864303161396135363233373332376238343630303539376131323362
+62633534643037303665643831323431633366373334376236316230653935396532313566323033
+30613061383331356461363933633762363439613138326632353065316465643461623762636439
+32366563643462353535373632353234383634636438653038626337313931633962316663366632
+38323162383234373232353964333730616239626463353233343361616231313138666265363238
+34333036333762633732343338373131313931653531303664323035613762626532313835363839
+34303530663639363965633234663861633139636534313163626165373337656330373666623561
+32653632613032333633336232383634616330656233383330303861373037643938323664613539
+37326132326566613266613838646235353537373438336431646433303262623036306133386533
+65376363653565353034346364633532366237643461653632356334656538666561366435656130
+37623937373863383830623766623462613638386161303338386466396564393039663361393838
+33326336623934643738396330643461386532393638373031646131333036653965303134393165
+31356632633638386233626562333266643035613061303164303236306664356633633630636634
+65353364353765346266623666326461396662316333363866383661333632303333623035373035
+66376237616265313034343337346563333461346338346266393933353034363662303533393134
+30376462396630333563633162363666393964333266366134643039343130633662343331636230
+33306437346637623731636361663931663762363263386230333237376234353837336265343465
+64343862613265653165633338373364353938336665393261316536663033643039376235653734
+64313361316536623762373864656336323730333230313536643930313038306539353063343530
+61333133313536303337643132363862346334323032336565313766623836633464376538656339
+31323365646430363230316139663937623837303031363766626334383766376462393234656535
+63303631373664393830323433326162306264373062366530346266393633646430373439346130
+65306265656238376239663337396533376337376438313736356365626566356566363466383762
+37373731393234393230626364383331323162333464383066623336306130343434383330636339
+65666633346266663962633564363862363737643733646433333239613837633531393564303232
+65316532643963613131366262316561396239323732383436376131363566663466306632306238
+66356566623761623664663066666466313238643031353433633135356238633366663536366563
+38303734383530663636326662626233373132313866613563366639303862313033313732646661
+62306462643065393563663938386537626133356263386365336663396165613664353461313465
+36303132653631646437303437393737383736316462613332656534646664613062623034363035
+64326265656166323966636163626230653738336366303237313139316338343530343461616561
+38623239616562656364633462623836313361383133393236373233356136353830633138656366
+61393238333931346436303735323534356331636366616531646632383237616131343963393430
+30333163353131643166643765656364623637646135323036613130303661326465373864333265
+31333030653437333130383939363532383336396166653136613665663338626136373463336632
+34613530646261616138646134363630303031616337653034613165623535343432393063633562
+62333938373730373762666164333533333964343833313165346162386566353162653530633163
+33356533303964646635646435346534363439373931643933653331393936323331353866363933
+32383139666161626430323132386263333438303731323636313362396133376438313839643763
+61643734333663626535666634366664663135613766616233663334303466336338373735306163
+35346533613332373261393835303935336232383331393937383666353736306365613439343034
+66613237653664303538653031393962346530623333666362643564646432633139346262643434
+66623837383932653262326266623435353939666334376465633938353335383534616363333534
+33643239636339366230343536613962343638613038313238336362346161346238373035396133
+38326332386361636563333234623737386166626466363936366533666361663631313165306639
+38336530363935343237356665623766653166373465356162373334316335623233613864356632
+33383132653066623734393638646163313634613736313364386331616565663037623064306334
+36326464336438623863396565653331323532343037333033386135373735666231326335383363
+63383238373930366436306563636138626262323937613538316639333530376337356565383436
+36653566363838663235663034643637363238393361323235633363393734623135316230633861
+36323337333837616661613139626362663064343530366530353266373865343136613961353361
+64336231623234643533356262343330396330333138316466656130306433323133306139393165
+63663135623531373732336439306363646263326663653431363662646566343135383336653933
+35346332373237373162613335623164333261663165653030383761633439636330613135636162
+36356236353266303435363238333539363735313933353131333638376533623937626334333033
+62373436663736353637363466303131316562653633386463653632356636303731376533373337
+62303763666535663832623837393662653533376234396337613262343762386163636636353231
+33336431656563333164653431326638613438623936646465616632633530643238373833353338
+61363364343962393238633863306363343331336436363835316163323838306433633366343032
+65376131323735343337666533396130343939303364363338343034656663303037353164663166
+38633834643033323635633263636433653265633862383539386637366536343335323136663164
+62326131636334323234643332663731656562363761623739346662383130336332636664353530
+64626430313936383963646531336633613531303032626437323531666363616339396135646664
+35353965616133666233633965316261383263613765626232326565353164326137643066316339
+32343162326536333830333832366631613861356361643434306262383264396563666135393735
+66623038396662646163363030336236626438366363376434653631376238383632326539633838
+33343134613164363238363133653038643133363038623962616634363563316236313961613435
+34363662666366346662366464326438396530313934656238393662376233366233646163323835
+34623762616138633439663038393631643839353563306335643037323937633862346630326563
+66616664636232393238343433333837313261666339366232613062313630326564316130333136
+64383963616637346130363738343564633833613837626431363334656665393038636534346663
+33353863663138336463386330323938356637393537376265616666616433353939306239323464
+31333132663461656561653165376533616131366165613564643263356132643030356134333733
+30366136633766363832393739626634313164303961356234656165623362353164343332663136
+33346535613933663931356134666131393762663932613234313931613239396261363766656466
+31316134356431313732313463666639393136353036376261666437613736383038333836636435
+31326634613063633063343431316265623961326163303437356136306234336533303633653966
+32376239343861663138633030653663316464623238333236336331346364393464323631383466
+39336338643838303564386261633662333833363430363434396532633335303162353837623036
+31316233343564386464336533646234656236626538323231373130656666346666336237656364
+39666234343261653235636534353538396465626264306437636366356666363736383461326166
+30646436613562326561346238643166663462623236356438376663646635326136346165373331
+32613332666638303939313761653336393765343835663162336165666630356665343865623531
+62323334643036383434633261393232316431643265613536636465303538343261363737656466
+66393766623539376163303364383665376365316131373831666239613361623463613636366433
+38383835653533366463666236393164623432323164623736626665376461383534393062386233
+37613261343433633963353733653838363836373261383163313238306565646536383262393132
+66343935323237333733316631633630303061376632353637653133346139643665663032633263
+35353662373066323239336366663164333833376163666265333831383763663033343461306265
+34383130653565313139626263373662633137353839666164613937323730616565336464663233
+38643064343264613938316632316261313237633661356439626338393335383463643739663036
+37316361626536316166643337613030353263643364643731353666346338633938356164363436
+64333133363738363132663234353930323263396437393265633634653436653661636666623361
+36626631383735333164343035633739666439656261393731323730613133343364343065633561
+39633733653562303962613130383765636231396434623835633065626533366130313234393765
+39626634396161333539653237656231396561636663346333636139303836356635663831326666
+34343038383962376230393438663238613430643031346636356136653763666435376634616538
+63386334653934353066626332613330383266653337393163373334343839613335313232386237
+33363665333963613063396232373931613064353339656632336462383334366432333239663032
+38616136323166326632616437326538373534353131383339626332383865313061623563663536
+33326363326138623032343330653439306461313436336131383835306461616234316536646263
+65623138616435383164646231663466313930326237336561623637626663353936386363613530
+65396534623363323235333566333331616133313231666232393938336561646239323438373737
+30653537663430313639333566663032336664613038363564633435633237353330613430366365
+64623064363231386631646463353566646537656439396139393632373939336237653337623461
+34376231643965653134316565626630636437376232366430376437333338393762356464623431
+33383965643537333436643137643339373237356435363066643732663866623239336530383837
+32346234373139636534613835363065303964656432373835356237376266386135353161326338
+33633934303665366565653764386565333966633739303235643339326130663635393135643533
+39313432383963306338353866393932633563613339616166383436613366336236663931323332
+37323831313061353062373963393035396330653165313136613862353364653136633132373035
+37633937633764383734313138643335393561313035376631363961333435636535323161346661
+64653339666364353066636366613333633336616239663838306230623663343737343862373062
+31373765366666363265376465336362643634356539366665343861356464393166396537383338
+36326361386437303231386332326539663030333134346437636630626162633863313461613639
+33643538373933613638383435326634313061653864343031653230626332326361333361646336
+62393839356366323632343065626361373134623133646161326632666435336163393932383939
+35313166333439656164346637376336613362303730366137383933366434646333393237663930
+37643665643364343331626335666233363564363664653966346133616531323938393136656132
+64353539333430636135316137636661356234383032613862623236653232333332336462323966
+64383662343339333834333462613635326331363037333630643232366336356463623734313335
+37653661613264626333393638336666303239653634393564363564643761396534393531323666
+38303630663636383134303534653839313265623635346536396536623266313637386537383135
+39663962393739663938366332653138303830393764633861363166343231336132643830316563
+61396366633937346139343063333661363865343638613734636363633134326537363961646538
+33353335613936626338353836373935656630373064626234633265393661366336323531346431
+33633963663665623539656130346262636464316666323261373163373531636135613936373364
+32323436353839653836343732303463333031313435333939373337393563653532383861366261
+66643934663938386562376534383534636566376163303831666437633733393838396233373166
+31653235343537653039353033346637326638393535306339306564616666613666373437393638
+63623335653137393037643964623837393666373532313666363638313733303837386166313765
+66363262333566333039343238323463313865313665343466626666333535303965353332666134
+37373134313439333231376361363136646138323439626265313463663936323637313663623564
+31393964663134386532316661316539376531336562626566323032343761393031653734346466
+39306334393433313333363434623032646532353166353031376532346233376364353039343339
+62303831356261396661653933643432383165356265336133633161626230653937663262386564
+61353033663837656563666265646237393234376134306461323934386537643761333138376531
+64666163303835376463346336353634663261653365336136323762323836336561663965303662
+36326333653734383961646232616131613434306239343931333334343039623937323334346337
+37323164636536356566643831363130396435613037333765316163633934383639313633363561
+31353162363234373133616133356661633666356530353564346338386464313035623363613838
+39363739656135626163616336303134393965333666373238366432666563306338393635393235
+31636331346433316635636437666533656238313031663730613566356634393431646235343939
+34383031326437663730306333653063333033656665383362346630346466323336353234376363
+63303937613963353562633531363330316662353766353934353230363632323039343166383239
+35373037313463306637343530323436616334653062326363363230333434393966313865623966
+36393332356638663963623130373263333737623734623339643665303232653034323663346438
+33653462373936303335383237323238646331643936353865363937323738376331333139373434
+33313734356539396338623438333136613430656632396333373536353364326631313530366461
+39303266333330626663303733383334386665366138646465633361316566366238323332333439
+66373361376463633538353665633161356634653265316136663736306562643366306663303564
+65363537303636646533333361333061623961633136633966373236326337393131663933383862
+35396230613538666632306434306364643736643265633564353438336465653433333630663631
+30626237653033643333323131316237353135363965353138396432316166326335326164303930
+62616466343665366363363861666539636439306537366231666165396239666539636531626432
+32393037386334666461316333306137363064366164336138633736623637613465376236333037
+37383732396232626430623233663739393738323433616531343765396234386365663837373366
+39353838326232363262396663396162646138306239303930313930386366363134373365313437
+62333431313233366161663731326165653537316331613761343831363231363161616231363530
+64373534363137353135323466663164333833336362643932383463326133656633323838323565
+36376331323537646234396366613264323934353632383936636332343130326335383730656435
+39306432326163613632363037376537353832613635353866376635613432636331336537356265
+63393830613461303239393131353631356139366431376665666238663038323737646164646262
+36366338623264613039326533303530353261363830663261666365646265393036636534636562
+33393939343539333837366464616261383638323139636136356137303338373938633764613463
+33623032643366343266323662666166386430343031373333346331336139386332373134636263
+64326634383130656361303535633332346631643262633961653632663931616165363239383231
+36396239663235643730366134353237323366613664623634386537633162316635323839323639
+33343039636332306630313532373137633664383962313361613763356535386665393637326165
+38376665653632313232656234393234643537326466373137326633646432396636313338303464
+62343965326537396533383935303436663838633863663064356639353830346136343031343831
+39656466643134336438663934636237306563333434323333326438633630353737393336663930
+61393138346438666239353339313462343135613133373466633965663836383765643562323461
+35623331633862623334666631386465366335373135626433623234663961613464346332633861
+37353562343265383438323039313362326234333736386665633265636466656233363763653630
+32636637663730663162613064306565623836376339643535353266363863363862363863623962
+37646536336663323532626634376366383764643330653861363161373538306135373838663764
+62366361616534383731353564306432396534386433653631303837386633626330363261383763
+30326162346137613732303634653533373363633763363762663037623139616535626566393964
+35363638386432393935656263336164386537616462653330343838646461363935353638313534
+36633237623234343638373562613939343736626465653938306364303232656261653234616139
+64663431633837636534353432323338313137353763623533363435343066666339623036323963
+38623739616464333335633362353936653937613735373033643463363532386561366532323338
+66643039623438323265663537353138353765623932343661643439313465313137666461366330
+33333836616235363430303934616232366330343239393538303762636662613234303834613261
+36383766663962356662646234663336373337333832393533373639376633366432303339333435
+33316430663234616334396634396533643739373536666636383365663933363731663634373935
+34343934306331323661386265626264636262326539383633303039386362303663623935646163
+65363537613462633438393864373764333838316430316463373230633866336236366536613130
+63333832326334383935363530353963626538613063663061313235396335353465346364336132
+65343832666237366138316463353232633336623030383061303836643561393038343233383434
+64346661373933623732356531643632616339306533383738666662396261626138643333383532
+66356235306333613765633037363162376564343766616139333534636333386332363261663933
+61613236636263303731386235356233656166396261313232333961663039383037613965343935
+31656332346539343830656634353539653636633333316564663432316339623866613165663762
+36333062633361323061623633366264326661396535636531663964393539613435643365376363
+64373432323630633832376135663066646130326436626162343534323133313066373062633866
+64313237363035623861343762333734313731643931396364643533653339363363326532376564
+34636334396365623732333037636435316339303538363836623861656436663831656266393334
+61383736613263373330396666373732386431396236616334663939343866663133336130386338
+61303634313032653961646437623166373637363562363866646431653539643738386634303131
+34363633333362333033653533663932373064313632613635613263356636383235613539376662
+34636230363738346637656561326465336631336264666338353331646439343330366262313338
+34656466653630323131323337383234343933383139646436386662353239633236623035646164
+61303737376634646435643439346435336561376632333065663863613964633230613834663336
+39393935643639643939636232643934613639656136636566313437333565313163333863666163
+31376339643133643334613238343261373066373566323262336363386231636537346634613362
+36383063323135313766383163393230663639656161376137376539356333643866303630323738
+38316361356666363534363936343163663766396634303663393063303139313661626138653634
+38643562633033343234626435656435646436633831646661343261643232613064633234626537
+66376639393533353064303538353863383638396333623363363535383566616334303034303332
+61366231386332376265373434356363303966313738356562366634323935396263633335313230
+34333361613066623664383534383163626339356539353666363265343065376236643636373263
+63313266316435323839333261366339386663346438656264316566336563623231613339333262
+38633266373831333136393166326332346538353339326661376137343965333338666437306134
+32323263323830626435663731643236366363616661386132353932353063336338353163626239
+33376363363532363631393231326633343666633832623839383934623739613539633332663366
+66396634316439323938666132616663643735346362653963323131343564346635323665653336
+31363235633566646138396431666461333037336437333962643963656461383835636139663662
+65373735656236356331323636306135626164353861396239633061326462393434653132323335
+65313663636130366436303632346235646363646531646239653134383431336562633064313230
+37353364663934363463396433623534366239333335613831633636323733666131613539633138
+36396138356465623230343362393061323362346533663433623636323963666630306131613463
+34643662333736636235633261663438653136336264356631363835366563303065353965346430
+31653566653733353263353430613135643038336133376263333562343861646366636465623935
+61633632623066353333623239366633363161336465343830376536653733616266643665613232
+36636436656366313961653465386365663165343531396536633037633865636133306364663539
+65386533376437656161663532653431666165633863623731643762356236333831343731373036
+35303164323035323439663963396361373063373536613363626334616138396430373964373933
+33636430306163643934666161386330383130633863386461663265653362326664356134623761
+34303864313930333265663031626563626138616334653836623231353835616562313366653462
+33363833663732376636386431303437363530323033346633336234646534663035326363313862
+64363133333834313836376362626632303333366331616262366538636662623633333334643532
+32636339396634643232363566633435323439623264643662303134303238303365353133366130
+34393937306235356637313538633130326434313231393362613965643263353431653830363363
+66666631616637383937376630343331363032623835616434643065356636373434343632343266
+38363763363364383830633538363031343632373136396261356666386635313237353935323539
+34613935633765386266373039366363663161373465396232353938336236393135306336363963
+64613134373834616637303435616139653531643736393937333163613831313864323837333332
+62663938356536656164306438346234636235343262323239636237366461353638663339336562
+36333232376565633436643261373638313034383634376632303832656535326636346531303037
+62656530646566303737373633373631376231316163376266666561303338343037336235643063
+64363462373663626137373531623539646536616133666631313837366364353763343463376637
+36626131383430333635616565613538613334363565613134373234326136633733356561626437
+63376634636339306661663933323637653138323638653731333332663634346633386537376634
+65353237393162643634316465333563653964343261373334643739356461363762656331373663
+35656463393965383964636362383339656261643933656130383262373763366230386466303738
+63663162656262626461663564346132353366303239653661343562333734343364626166336138
+66633631376439643831323566346132623734616134323562323531363138393162393232343661
+63376232323662306665396435386461363433303062313731373130663236353736316165353364
+39333933343465376538323164356339346463323765323064356433396233663031623261343664
+38346538663639313633393465343634333532333938316632663765613335616639653934653733
+37666338623437303266623931383363396330356237313139653230653462353931303636613166
+36343237306136616664303564656135343962633061643635333966616664373964646532313630
+37346166646431383737323165343434316330376431633831626266373163383065373466653039
+39313230616330353865303132373832643534633737363537646432346137653534623030373830
+36306339613534346666653964393861383831333633646161333832326531653731313563303230
+30313736353166303533653262333530646463626333316561346432663432316635613834646133
+39343331376331323461613864326338303165653464373132333237613234663531646565366634
+31623166396161353332636438623939613235353233343961653962373965373437616137643730
+64393139363264643738373036313838626631343763623964616136633437653736626334326336
+38643138383765663039353939303863643661333730323338333164633465393163376563323836
+34316239613765316631633861613665623430303662636330633239653132363964636663323462
+36363434316437643166373839626364376333353936376162363664633563363464363761313164
+61323534643964396463663135366630663866653935656161356165643132303962646564356164
+35626338663862666236326361663431376563613831663530323638313862323737343131626432
+65396533613430373066373537666233633936613632313234663730363535626538383530303733
+34646164386461346637316165613536663932616463363563663163316536383939626139383831
+35373965663733666634303430336239396235316463646133636139646166363234313632623163
+39303763656138643731303261393663333737633761376566373631663266633733663764623731
+65353865643932326433316339383932333964313462643835636531356435343130666566353631
+37353632323534363833626139663662383366383330643866336438333230323866323734666266
+61353831303837666339303362396432616665366461316266633036353961363261643133353065
+66323664373431643938343663666662633837353063356639653737373463386630663562323665
+61626335313231653830633366336264346539303630636334633037666264636164656366383661
+36353631356336643135636233316136333863393539313730623036303038626266313265363636
+63646365353232643965303931343033303236336532633236303834343663663135663339653030
+35633732333230383262663731656239346166316430376536356238383834393930373935373362
+36326530613338373466353331366561343636303038313037326431613262366566383135313832
+32653836633361386265663531656638373337663032323961346334333834393362326337336263
+61613666396565333235646634383330626134356532356133363531663731363331383533343738
+61653065326539393034393035363231626632363330616663383964653066373836363666333430
+61313865353464666435623031333063613465366637303065653762616664626163646436376561
+34623136646437643437323136366364343065316438346261323564356634616431363465623034
+30353238303436653738616232643634316631616466336333396438346133313961306236643139
+37373561363831393664376165636666396435386332303335636262306434353663366465313563
+66316663356264373530313136343531323261396634393438663162373734646466306339653562
+66333564656663333931396434336562663262383737613335366166383938643033366261616262
+33326537326433306161373062343637633331326638306666376336366463613864353565333062
+33633437363163633638373433343737386332386632333066366332623635653066326566313536
+31666236636462633133333335656435393534343335626636383730313462356262393962613630
+32333738366136366461663937366638313330343133366266366134346164353231663239333363
+37353166663932653365633635386263373363666530393439366430623864383630633539353232
+34366564383934323566663166616334616265653534303231613731356466393433643534653465
+63366330636361646263646563363963633362303139306564396666313864653064663764383331
+38653230613236636533636666346132613261623233333034346262613236353831656461346662
+65366636636537393331313531613964393263333566373331653232626530333332303232363761
+33633063613236333936326532316362306562653736303763323934396164363364613739323830
+38626233393563333232323931643564636434653036626266626365353135373439396563613033
+37306439363637336338636137663436653661306533386534323232653935663636326666356231
+38323761333238306565666362616635373339373430626564646264376262333733303861316661
+34366665626565656239643938666535303363373335316234303634323866373064313566396565
+61383366633264383237386236316463653534663834666234623638653233336565613830396263
+31396664646133393131646334393433633936396337333666323965373336323662646630306365
+38666361646333613462333031346434393035656437393932326231313739643337626131353462
+33373135336661343362386563643965616239653434653230323364386334396430323230396465
+36323030616535343833613534633933646135643265343763393039303664393336663665316631
+32626564646337326433616433656433626266323066626634643565396138353339303730303437
+64646331393339653130626132323136383132373763306461616433633735393338646165646261
+33643136656437303665373966356565363464623233353635633333393333623434646665313466
+61383836363439353064376363643464323230363336376438323437306562666336393766393434
+34656333316538313332393761353030376165353332396131666136376636323664313161316335
+30623330313635326437306366353234366231346364313235356161356233636561336564376166
+63613337643366666638383263306261396163386132386664626565323238623539653163373436
+34376562623536656137613466346237613735313239373439636338356637643162663633633832
+61303739626136383033306364653962333738393133656634393862323631646561646562643433
+66613862643137653731366363313439316232383364643038633230346264666432346334316362
+31393361373235636434326633393532646334333433306363303833383434376263636461363439
+34343733386165333365383737376465353631393333646461613030303561376662393833386263
+64346134633564353764306635303439393639313331613132613865613634623135623665343932
+61326433386230393830373838363534623333653535656365643335636239626463366335376439
+64373765626436353838663838663964623737363334323631356132366139646232323465333130
+64316130636663316537373962333539653637363165616237333837316330306534303731616337
+33336565353934363763306437646138656232366662613235353366343031663836613135396333
+37636130343531613536333462616163623435383336306437393139663464616165626464363331
+66386161383736393635396435383237313830373638353762393265376435356631333932303531
+62346234333764643539353465316363326632643034393739383736373532346438333536646534
+31303933313031373030313734333561646139353730303862386363663434646234383739333630
+35396338366536336631643439346264636361643065393730393062666431303534303130343139
+34656138626631396565333137366238396430643839353337313632396136313835306661613339
+62643666666532343031343538373462396537626335663461376265353762363331393636666562
+33366564323963333866343963333038313332396166636636323764623035303133613533393563
+35363930343035663865363130346234383532323930663736333835373135343138343531643636
+37353431333132613362383733363936613838613733326535326231393834353931616265623066
+65626539313831336464366462616263633066353736323531383163336532663536323435343030
+38373635643135333739376564396339316135343265646332653938396339626662653430313337
+37336630393263373232623735623162363661623864386361666237316330633031323836363034
+34376331646436313263626434376431393337353630626564616438623539323164373137623466
+63323265623962653731316663363135336430316562336537653730366665633039633538323933
+35643539663062643134373364653835393031393763303564346234393732313237616137363965
+63663832313438376462626437663138343762323436653732353932383834666134616665383463
+31363330306366663763323166663436643965306635663863333863333531353961623963636332
+34343933356361313166353932316432396665343739393238396663616462363865653034633464
+62633438326563346132376438356265353563303534303538666532313530303362636434643735
+35613136663239646230323435323365646232333862306130353831313766653735386333616566
+32363131323535643637663839343365363231343933613537373430633735663633303331663765
+37313165633163656136353764363336346363663030333061393939616539643233303966366566
+34343466646561323531623564633335663234313662623736633234636337663863303834656436
+32313234623364383932393239393261623961363537333734393434626234653562316130353530
+63303065636536666330313832623732373138353365666364303335396466343637323635316465
+38653962343037616665386334643932613531376461346536346362326633643036366465653036
+65316432373863633233653739653730393862653035376563383835393861326135363936333561
+36643435326465366431316332623534326134613632663536643262376464373339333233666161
+62326339313863633631626463636237663866653464356465336534616164316132386239316664
+31366331613732323132393966666463393132373735633634366666386233306639323933343335
+39353932353237346137633830623734633033626533313630356432663038646138313835626635
+32386562633566343065346439633838383631646132363762336631373934356431623365313337
+36633062653232303632316161393532633938323661653237646335393062666562663338663165
+39623230636264303337303861393863643864383936396161353630326531376237386265313031
+35663563633135393638626134353861346235313139383139616634633965616662646363333861
+38396466343232393639663164633939346630356534353030616233356139623362343563656437
+32356431356637356236376534336231333030626236383530383664613637656665313836653833
+38373461636234623332383864346231343430343961333062323538303461343739393638303534
+66333336326362363564343339343038326633653062626131336537376131643238613831616164
+36393931333166653131653339303139356330336237303630326331316265623737326337333266
+38373837633464313736646633353531613739653439626631616233363663326463323637643533
+66636562633461336630346162383838646332626365343337396463653863326666613338333030
+35376432613832303466376236366364326464376465633166613538303264353533626435343164
+32613539386533366336376363633634636233636332643237336564666161336332333939363939
+63613161373063303362613335393837373461623835396331303035383166366462633364633230
+66306430323033336361396163376262663134383161303062383963613832613631333363333537
+65666335633361343930303136383764353831343935653861626435323333346436653638656337
+35323161393436343964633164383831323333626136353239346664616434316262346133613535
+65373835646634376432363766333336653637313132663866383031356134636164346361336630
+62333130343365376364613739666634376639376362346665393033323061326135396132653333
+31656333616365646333326563626134333035323865633961633331643336376239333633613832
+34656134363035366431396165646663623465613633616234346336663364343566633530303339
+38663563626466656432323036363138656139373231643565333563306138366166656130616261
+37373937623634363861663861306533353265343037343037656339353361343733366131323362
+38353763376163663630363839353730313665633965643061373962363931393735643937303035
+64366531623234356364626466666266616331353839393666363666356333326331636338623430
+64613163613233333534333564376661376538373061633538356638653834336164323764633936
+37656162316163333761643938366263613933356135393364383864396165313934326631393432
+62306434376162396333343337333735396437333333363663363261656365363138623561373365
+38633733313135303035663639366338623831393639323939336363323835353932353837323366
+39353662633166623236663463636634333161323230633862303235623439346130333333333634
+37383262643763643062386336306636623234393837623039383033333638373438656631613037
+65323737616339656133313362386632653861663637373232373432316138646434353934323935
+33356239333833316332343264316664336563393461396664313136383434353361363764343534
+31616334346364616235653266626538336561373736636531386230343765646466643461383838
+32356536663237653564343934396461356238626336373965346437376433376332383332646262
+35643264333938323930383761353533333265623631636438366665643964396563653933636638
+35343736376630386331646237616663313135376134313135663936326463616230636230626336
+34393133643539653536386536633061363366396238346465316363343032656533396664396239
+62633438346366633864396437396663376361623766373333616665633061646664626236663665
+31313665383330366165336563663930376166643638373534663661613934393162356132383262
+31613066363335356561383638343136303965303234666131666136336432643766346337393930
+38373763656338343865653135343364656563383037616565396264323233303134656234366235
+65663164303134653639663062393530333135326561363438316166626238636338396264623538
+34306333326538373539633530363830666139666231386131653339393736306339363166343033
+61373765653762323739653764373062393137313036373634643331626237656162633436343239
+36323161356135323363303766323431633831303537653239636564373033663161303961626463
+62386564383365353563303666326535663965386363343434363863313936663937396130356534
+34633132613437323834393334666563346461613362653964313032313635623330396565333162
+63383531373638653464313035313435333861646635396562343866616266323033306338633361
+30646332363933313534333366313033303561373131323933393639353335343037653633633537
+64633835363931333638393032303566386336343563326230656537613539626330653230393465
+66373730356562316337613630653766353934353030373735383662636536333832626337613563
+63326635633666636563363339303863333837353863333666323266383065656564316462363432
+35653665396239373861323265303364393865353435623235636164636634346234653736346430
+31666661393565616161633933313666353034346235383566353639313733656461623831316465
+65343936306431666463396566653765323464353461343965393363613132383132356161333639
+36363134303765383630626238643439623430333236623665303366396662646535343233306130
+37663263356362636436306262633766636330363435646566353331643935393862343434343738
+38623637316239613030656434303739643262376230373464623561663366326564613931643632
+64326633366665396536616333303832633836303366353039386333636330353165343437386237
+33396333396434613832333265333136343134363261636565643637393962393265306437306236
+61643662643130316137313233366336633232333130346537366431363733633530316139356161
+62393233613034303938303637323036363166666130363665623931643532656231626339626664
+37396666353065333864373531386132323266333762633661343434633734353334666139343463
+30636432646665636130633337336636366234356631666361353163666432356666393263666162
+63303332333232383563636365663961613565323035366239383661336161373239306438613638
+64353461323435336362666331656337636133626630316531373561303863353431343162306537
+30623534363830643563336637373032633764616331303930653562323239336231333762326132
+38353339346564363430643063386132633161303037353331373866313366313665306232323231
+65386163393132626262343335353636663837386132643161656365626161343730623266616639
+31663533343266326437613165343838636535333137346366386138633561633537623066316239
+65613665306434343466393932643237616638356630613864363637646361363266643931663631
+66313463316266363833636136343934616339303634643134316563343666663031