@constellation-network/node-pilot 0.0.7 → 0.0.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (96) hide show
  1. package/README.md +26 -18
  2. package/bin/dev.js +1 -6
  3. package/bin/run.js +1 -1
  4. package/dist/base-command.d.ts +9 -0
  5. package/dist/base-command.js +20 -0
  6. package/dist/checks/check-dependencies.d.ts +1 -0
  7. package/dist/checks/check-dependencies.js +44 -0
  8. package/dist/checks/check-hardware.js +3 -3
  9. package/dist/checks/check-initial-setup.js +6 -4
  10. package/dist/checks/check-layers.js +7 -7
  11. package/dist/checks/check-network.d.ts +3 -0
  12. package/dist/checks/check-network.js +92 -9
  13. package/dist/checks/check-node-ctl.d.ts +5 -0
  14. package/dist/checks/check-node-ctl.js +88 -0
  15. package/dist/checks/check-project.js +33 -13
  16. package/dist/checks/check-wallet.d.ts +3 -0
  17. package/dist/checks/check-wallet.js +37 -0
  18. package/dist/clm.d.ts +1 -0
  19. package/dist/clm.js +4 -1
  20. package/dist/commands/config/get.d.ts +6 -0
  21. package/dist/commands/config/get.js +57 -11
  22. package/dist/commands/config/set.d.ts +0 -1
  23. package/dist/commands/config/set.js +13 -11
  24. package/dist/commands/config.js +17 -22
  25. package/dist/commands/info.js +3 -2
  26. package/dist/commands/logs.d.ts +2 -1
  27. package/dist/commands/logs.js +12 -6
  28. package/dist/commands/restart.d.ts +5 -2
  29. package/dist/commands/restart.js +25 -5
  30. package/dist/commands/shutdown.js +3 -3
  31. package/dist/commands/status.js +8 -0
  32. package/dist/commands/test.d.ts +1 -0
  33. package/dist/commands/test.js +35 -5
  34. package/dist/config-store.d.ts +50 -34
  35. package/dist/config-store.js +80 -32
  36. package/dist/helpers/config-helper.js +2 -2
  37. package/dist/helpers/env-templates.d.ts +4 -3
  38. package/dist/helpers/env-templates.js +28 -20
  39. package/dist/helpers/key-file-helper.d.ts +2 -0
  40. package/dist/helpers/key-file-helper.js +52 -17
  41. package/dist/helpers/project-helper.d.ts +3 -2
  42. package/dist/helpers/project-helper.js +86 -35
  43. package/dist/helpers/prompt-helper.d.ts +0 -2
  44. package/dist/helpers/prompt-helper.js +15 -66
  45. package/dist/services/archiver-service.d.ts +17 -0
  46. package/dist/services/archiver-service.js +104 -0
  47. package/dist/services/cluster-service.d.ts +10 -5
  48. package/dist/services/cluster-service.js +46 -36
  49. package/dist/services/docker-service.d.ts +9 -0
  50. package/dist/services/docker-service.js +53 -0
  51. package/dist/services/fastforward-service.js +12 -6
  52. package/dist/services/get-random-node.d.ts +2 -0
  53. package/dist/services/get-random-node.js +16 -0
  54. package/dist/{helpers/github-helper.d.ts → services/github-service.d.ts} +1 -1
  55. package/dist/{helpers/github-helper.js → services/github-service.js} +1 -1
  56. package/dist/services/node-service.d.ts +4 -0
  57. package/dist/services/node-service.js +29 -14
  58. package/dist/services/shell-service.d.ts +3 -1
  59. package/dist/services/shell-service.js +32 -6
  60. package/dist/test.d.ts +1 -0
  61. package/dist/test.js +50 -0
  62. package/dist/types.d.ts +42 -3
  63. package/install-dependencies.sh +98 -0
  64. package/oclif.manifest.json +31 -4
  65. package/package.json +12 -8
  66. package/projects/hypergraph/Dockerfile +27 -18
  67. package/projects/hypergraph/docker-compose.yml +14 -12
  68. package/projects/hypergraph/networks/integrationnet/gl0.env +4 -0
  69. package/projects/hypergraph/networks/integrationnet/gl1.env +4 -0
  70. package/projects/hypergraph/networks/integrationnet/network.env +8 -0
  71. package/projects/hypergraph/networks/integrationnet/source-nodes.env +9 -0
  72. package/projects/hypergraph/networks/mainnet/gl0.env +4 -0
  73. package/projects/hypergraph/networks/mainnet/gl1.env +4 -0
  74. package/projects/hypergraph/networks/mainnet/network.env +8 -0
  75. package/projects/hypergraph/networks/mainnet/source-nodes.env +9 -0
  76. package/projects/hypergraph/networks/testnet/gl0.env +5 -0
  77. package/projects/hypergraph/networks/testnet/gl1.env +4 -0
  78. package/projects/hypergraph/networks/testnet/network.env +8 -0
  79. package/projects/hypergraph/networks/testnet/source-nodes.env +9 -0
  80. package/projects/hypergraph/scripts/check-version.sh +31 -0
  81. package/projects/hypergraph/scripts/docker-build.sh +12 -1
  82. package/projects/hypergraph/scripts/install-dependencies.sh +3 -3
  83. package/projects/hypergraph/scripts/install.sh +34 -31
  84. package/projects/hypergraph/seedlist +268 -0
  85. package/scripts/autoheal.sh +8 -0
  86. package/scripts/services/io.constellationnetwork.nodepilot.Updater.plist +16 -0
  87. package/scripts/services/node-pilot-autoheal.service +14 -0
  88. package/scripts/services/node-pilot-updater-hypergraph.service +15 -0
  89. package/scripts/updater.sh +13 -0
  90. package/dist/helpers/docker-helper.d.ts +0 -7
  91. package/dist/helpers/docker-helper.js +0 -37
  92. package/projects/hypergraph/layers/gl1.env +0 -3
  93. package/projects/hypergraph/networks/integrationnet.env +0 -9
  94. package/projects/hypergraph/networks/mainnet.env +0 -8
  95. package/projects/hypergraph/networks/testnet.env +0 -9
  96. package/projects/scripts/docker-cleanup.sh +0 -64
@@ -0,0 +1,4 @@
1
+ CL_LB=https://l0-lb-mainnet.constellationnetwork.io
2
+ CL_PUBLIC_HTTP_PORT=9000
3
+ CL_P2P_HTTP_PORT=9001
4
+ CL_CLI_HTTP_PORT=9002
@@ -0,0 +1,4 @@
1
+ CL_LB=https://l1-lb-mainnet.constellationnetwork.io
2
+ CL_PUBLIC_HTTP_PORT=9010
3
+ CL_P2P_HTTP_PORT=9011
4
+ CL_CLI_HTTP_PORT=9012
@@ -0,0 +1,8 @@
1
+ CL_APP_ENV=mainnet
2
+ CL_COLLATERAL=25000000000000
3
+ CL_L0_PEER_HTTP_PORT=9000
4
+ CL_L0_PEER_HTTP_HOST=52.53.46.33
5
+ CL_L0_PEER_ID=e0c1ee6ec43510f0e16d2969a7a7c074a5c8cdb477c074fe9c32a9aad8cbc8ff1dff60bb81923e0db437d2686a9b65b86c403e6a21fa32b6acc4e61be4d70925
6
+ #CL_GLOBAL_L0_PEER_HTTP_PORT=9000
7
+ #CL_GLOBAL_L0_PEER_HOST=52.53.46.33
8
+ #CL_GLOBAL_L0_PEER_ID=e0c1ee6ec43510f0e16d2969a7a7c074a5c8cdb477c074fe9c32a9aad8cbc8ff1dff60bb81923e0db437d2686a9b65b86c403e6a21fa32b6acc4e61be4d70925
@@ -0,0 +1,9 @@
1
+ SOURCE_NODE_1_PORT=9000
2
+ SOURCE_NODE_1_HOST=52.53.46.33
3
+ SOURCE_NODE_1_ID=e0c1ee6ec43510f0e16d2969a7a7c074a5c8cdb477c074fe9c32a9aad8cbc8ff1dff60bb81923e0db437d2686a9b65b86c403e6a21fa32b6acc4e61be4d70925
4
+ SOURCE_NODE_2_PORT=9000
5
+ SOURCE_NODE_2_HOST=54.215.18.98
6
+ SOURCE_NODE_2_ID=629880a5b8d4cc6d12aec26f24230a463825c429723153aeaff29475b29e39d2406af0f8b034ba7798ae598dbd5f513d642bcbbeef088290abeadac61a0445d6
7
+ SOURCE_NODE_3_PORT=9000
8
+ SOURCE_NODE_3_HOST=54.151.19.111
9
+ SOURCE_NODE_3_ID=710b3dc521b805aea7a798d61f5d4dae39601124f1f34fac9738a78047adeff60931ba522250226b87a2194d3b7d39da8d2cbffa35d6502c70f1a7e97132a4b0
@@ -0,0 +1,5 @@
1
+ CL_LB=https://l0-lb-testnet.constellationnetwork.io
2
+ CL_PUBLIC_HTTP_PORT=9000
3
+ CL_P2P_HTTP_PORT=9001
4
+ CL_CLI_HTTP_PORT=9002
5
+
@@ -0,0 +1,4 @@
1
+ CL_LB=https://l1-lb-testnet.constellationnetwork.io
2
+ CL_PUBLIC_HTTP_PORT=9010
3
+ CL_P2P_HTTP_PORT=9011
4
+ CL_CLI_HTTP_PORT=9012
@@ -0,0 +1,8 @@
1
+ CL_APP_ENV=testnet
2
+ CL_COLLATERAL=0
3
+ CL_L0_PEER_HTTP_PORT=9000
4
+ CL_L0_PEER_HTTP_HOST=52.8.132.193
5
+ CL_L0_PEER_ID=e2f4496e5872682d7a55aa06e507a58e96b5d48a5286bfdff7ed780fa464d9e789b2760ecd840f4cb3ee6e1c1d81b2ee844c88dbebf149b1084b7313eb680714
6
+ #CL_GLOBAL_L0_PEER_HTTP_PORT=9000
7
+ #CL_GLOBAL_L0_PEER_HOST=52.8.132.193
8
+ #CL_GLOBAL_L0_PEER_ID=e2f4496e5872682d7a55aa06e507a58e96b5d48a5286bfdff7ed780fa464d9e789b2760ecd840f4cb3ee6e1c1d81b2ee844c88dbebf149b1084b7313eb680714
@@ -0,0 +1,9 @@
1
+ SOURCE_NODE_1_PORT=9000
2
+ SOURCE_NODE_1_HOST=52.8.132.193
3
+ SOURCE_NODE_1_ID=e2f4496e5872682d7a55aa06e507a58e96b5d48a5286bfdff7ed780fa464d9e789b2760ecd840f4cb3ee6e1c1d81b2ee844c88dbebf149b1084b7313eb680714
4
+ SOURCE_NODE_2_PORT=9000
5
+ SOURCE_NODE_2_HOST=13.57.110.45
6
+ SOURCE_NODE_2_ID=3458a688925a4bd89f2ac2c695362e44d2e0c2903bdbb41b341a4d39283b22d8c85b487bd33cc5d36dbe5e31b5b00a10a6eab802718ead4ed7192ade5a5d1941
7
+ SOURCE_NODE_3_PORT=9000
8
+ SOURCE_NODE_3_HOST=54.153.23.79
9
+ SOURCE_NODE_3_ID=46daea11ca239cb8c0c8cdeb27db9dbe9c03744908a8a389a60d14df2ddde409260a93334d74957331eec1af323f458b12b3a6c3b8e05885608aae7e3a77eac7
@@ -0,0 +1,31 @@
1
+ #!/usr/bin/env bash
2
+
3
+ SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )
4
+ OUTPUT_DIR="$SCRIPT_DIR/../dist" # Directory to save the downloaded assets
5
+
6
+ # load the version from the version file
7
+ if [ -f "$OUTPUT_DIR/version.sh" ]; then
8
+ source "$OUTPUT_DIR/version.sh"
9
+ else
10
+ echo "No version file found."
11
+ exit 1;
12
+ fi
13
+
14
+ if [ -n "${NODE_URL:-}" ]; then
15
+ LB_HTTP="$NODE_URL"
16
+ else
17
+ LB_HTTP="https://l0-lb-$INSTALLED_NETWORK_TYPE.constellationnetwork.io"
18
+ fi
19
+
20
+ echo "Checking version at $LB_HTTP"
21
+ # Check network version
22
+ # Resolve the load balancer URL based on the network and get the release tag
23
+ CLUSTER_NETWORK_VERSION=$(curl -s $LB_HTTP/node/info | jq -r '.version')
24
+
25
+ if [ "$INSTALLED_NETWORK_VERSION" != "$CLUSTER_NETWORK_VERSION" ]; then
26
+ echo "Installed version: $INSTALLED_NETWORK_VERSION"
27
+ echo "Cluster version: $CLUSTER_NETWORK_VERSION"
28
+ exit 1
29
+ fi
30
+
31
+ echo "Version: $INSTALLED_NETWORK_VERSION"
@@ -4,4 +4,15 @@ SCRIPT_DIR="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)"
4
4
  # --- build image ---
5
5
  DOCKER_IMAGE_VERSION="${DOCKER_IMAGE_VERSION:-test}"
6
6
  echo "Building tessellation image: constellationnetwork/tessellation:$DOCKER_IMAGE_VERSION"
7
- docker build -t "constellationnetwork/tessellation:$DOCKER_IMAGE_VERSION" -f "$SCRIPT_DIR/../Dockerfile" .
7
+
8
+ # if DEBUG is true use --no-cache argument
9
+ if [ "$DEBUG" = "true" ]; then
10
+ echo "Debug mode is on, building without cache"
11
+ docker build --no-cache -t "constellationnetwork/tessellation:$DOCKER_IMAGE_VERSION" -f "$SCRIPT_DIR/../Dockerfile" .
12
+ exit $?
13
+ fi
14
+ else
15
+ docker build -t "constellationnetwork/tessellation:$DOCKER_IMAGE_VERSION" -f "$SCRIPT_DIR/../Dockerfile" .
16
+ fi
17
+
18
+ # docker build --no-cache -t "constellationnetwork/tessellation:test" -f Dockerfile .
@@ -1,4 +1,4 @@
1
- #!/scripts/bash
1
+ #!/usr/bin/env bash
2
2
 
3
3
  # Break on any error
4
4
  set -e
@@ -270,7 +270,7 @@ check_node() {
270
270
  Linux)
271
271
  echo "Installing Node.js using nvm..."
272
272
  # NPM
273
- curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.35.3/install.sh | bash
273
+ curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.3/install.sh | bash
274
274
 
275
275
  # Load nvm without needing to open a new terminal
276
276
  export NVM_DIR="$HOME/.nvm"
@@ -278,7 +278,7 @@ check_node() {
278
278
  [ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" # This loads nvm bash_completion
279
279
 
280
280
  # Install node
281
- nvm install node
281
+ nvm install 22
282
282
 
283
283
  # Verify installation
284
284
  echo "Node version: $(node -v)"
@@ -13,17 +13,15 @@ require() {
13
13
  command -v "$cmd" >/dev/null 2>&1 || { echo "Error: '$cmd' is required"; exit 1; }
14
14
  }
15
15
 
16
- require curl
17
- require jq
18
-
19
16
  NETWORK="${1:-}"
20
- [[ -z "${NETWORK}" ]] && { echo "No network specified."; usage; }
21
17
 
22
- case "$NETWORK" in
23
- mainnet|testnet|integrationnet) ;;
24
- intnet) NETWORK="integrationnet" ;;
25
- *) echo "Invalid network: $NETWORK"; usage ;;
26
- esac
18
+ if [ -n "$NETWORK" ]; then
19
+ case "$NETWORK" in
20
+ mainnet|testnet|integrationnet) ;;
21
+ intnet) NETWORK="integrationnet" ;;
22
+ *) echo "Invalid network: $NETWORK"; usage ;;
23
+ esac
24
+ fi
27
25
 
28
26
  SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )
29
27
 
@@ -33,33 +31,38 @@ ASSETS=("cl-node.jar" "cl-dag-l1.jar" "cl-keytool.jar" "cl-wallet.jar" "mainnet-
33
31
  ASSET_NAMES=("gl0.jar" "gl1.jar" "keytool.jar" "wallet.jar" "seedlist")
34
32
  OUTPUT_DIR="$SCRIPT_DIR/../dist" # Directory to save the downloaded assets
35
33
 
36
-
37
-
38
34
  # load the version from the version file
39
35
  if [ -f "$OUTPUT_DIR/version.sh" ]; then
40
36
  source "$OUTPUT_DIR/version.sh"
41
- # if argument NETWORK is different from current RELEASE_NETWORK, force download of latest release
42
- if [ -n "$NETWORK" ] && [ "$NETWORK" != "$RELEASE_NETWORK_TYPE" ]; then
43
- echo "Changing network from $RELEASE_NETWORK_TYPE to $NETWORK"
44
- RELEASE_NETWORK_TYPE=""
37
+ # if argument NETWORK is different from current INSTALLED_NETWORK, force download of latest release
38
+ if [ -n "$NETWORK" ] && [ "$NETWORK" != "$INSTALLED_NETWORK_TYPE" ]; then
39
+ echo "Changing network from $INSTALLED_NETWORK_TYPE to $NETWORK"
40
+ INSTALLED_NETWORK_TYPE=""
45
41
  rm -rf $OUTPUT_DIR
46
42
  else
47
- NETWORK="$RELEASE_NETWORK_TYPE"
43
+ NETWORK="$INSTALLED_NETWORK_TYPE"
48
44
  fi
49
45
  else
46
+ [[ -z "${NETWORK}" ]] && { echo "No network specified."; usage; }
50
47
  bash "$SCRIPT_DIR/install-dependencies.sh"
51
- RELEASE_NETWORK_TYPE=""
48
+ INSTALLED_NETWORK_TYPE=""
52
49
  fi
53
50
 
51
+ require curl
52
+ require jq
53
+
54
+ if [ -n "${NODE_URL:-}" ]; then
55
+ LB_HTTP="$NODE_URL"
56
+ else
57
+ LB_HTTP="https://l0-lb-$NETWORK.constellationnetwork.io"
58
+ fi
54
59
  # Check network version
55
60
  # Resolve the load balancer URL based on the network and get the release tag
56
- LB_HTTP="https://l0-lb-$NETWORK.constellationnetwork.io"
57
- RELEASE=$(curl -s $LB_HTTP/node/info | jq -r '.version')
58
- RELEASE_TAG="v$RELEASE"
61
+ CLUSTER_NETWORK_VERSION=$(curl -s $LB_HTTP/node/info | jq -r '.version')
59
62
 
60
- if [ -n "$RELEASE_NETWORK_TYPE" ] && [ "$RELEASE" != "$RELEASE_NETWORK_VERSION" ]; then
61
- echo "Current release version ($RELEASE) is different from the version in the version file ($RELEASE_NETWORK_VERSION)."
62
- RELEASE_NETWORK_TYPE=""
63
+ if [ -n "$INSTALLED_NETWORK_TYPE" ] && [ "$CLUSTER_NETWORK_VERSION" != "$INSTALLED_NETWORK_VERSION" ]; then
64
+ echo "Current release version ($CLUSTER_NETWORK_VERSION) is different from the version in the version file ($INSTALLED_NETWORK_VERSION)."
65
+ INSTALLED_NETWORK_TYPE=""
63
66
  rm -rf $OUTPUT_DIR
64
67
  fi
65
68
 
@@ -68,19 +71,19 @@ mkdir -p "$OUTPUT_DIR"
68
71
 
69
72
  NETWORK_UC=$(echo "$NETWORK" | tr '[:lower:]' '[:upper:]')
70
73
 
71
- if [ -n "$RELEASE_NETWORK_TYPE" ]; then
72
- echo "Already using the latest release $NETWORK_UC :: $RELEASE"
74
+ if [ -n "$INSTALLED_NETWORK_TYPE" ]; then
75
+ echo "Already using the latest release $NETWORK_UC :: $CLUSTER_NETWORK_VERSION"
73
76
  exit 0
74
77
  fi
75
78
 
76
- echo "Installing latest release: $NETWORK_UC :: $RELEASE"
79
+ echo "Installing latest release: $NETWORK_UC :: $CLUSTER_NETWORK_VERSION"
77
80
 
78
81
 
79
82
  # Resolve the tessellation release download URL based on the network
80
83
  if [ "$NETWORK" == "testnet" ]; then
81
- DOWNLOAD_URL_PREFIX="https://constellationlabs-dag.s3.us-west-1.amazonaws.com/testnet/tessellation/$RELEASE"
84
+ DOWNLOAD_URL_PREFIX="https://constellationlabs-dag.s3.us-west-1.amazonaws.com/testnet/tessellation/$CLUSTER_NETWORK_VERSION"
82
85
  else
83
- DOWNLOAD_URL_PREFIX="https://github.com/Constellation-Labs/tessellation/releases/download/$RELEASE_TAG"
86
+ DOWNLOAD_URL_PREFIX="https://github.com/Constellation-Labs/tessellation/releases/download/v$CLUSTER_NETWORK_VERSION"
84
87
  fi
85
88
 
86
89
  DOWNLOAD_URL="$DOWNLOAD_URL_PREFIX/${ASSETS[0]}"
@@ -100,7 +103,7 @@ download_asset() {
100
103
 
101
104
  # Download the asset
102
105
  echo "$ASSET_NAME -> $OUTPUT_NAME"
103
- curl -s -L -H "Accept: application/octet-stream" -o "$OUTPUT_DIR/$OUTPUT_NAME" "$DOWNLOAD_URL"
106
+ curl -# -L -H "Accept: application/octet-stream" -o "$OUTPUT_DIR/$OUTPUT_NAME" "$DOWNLOAD_URL"
104
107
 
105
108
  if [ $? -ne 0 ]; then
106
109
  echo "Failed to download asset '$ASSET_NAME'."
@@ -139,8 +142,8 @@ write_version_file() {
139
142
  local tmp
140
143
  tmp="$(mktemp "${OUTPUT_DIR}/version.sh.XXXX")"
141
144
  {
142
- echo "RELEASE_NETWORK_TYPE=\"${NETWORK}\""
143
- echo "RELEASE_NETWORK_VERSION=\"${RELEASE}\""
145
+ echo "INSTALLED_NETWORK_TYPE=\"${NETWORK}\""
146
+ echo "INSTALLED_NETWORK_VERSION=\"${CLUSTER_NETWORK_VERSION}\""
144
147
  } > "$tmp"
145
148
  chmod 0644 "$tmp"
146
149
  mv "$tmp" "${OUTPUT_DIR}/version.sh"
@@ -0,0 +1,268 @@
1
+ e2f4496e5872682d7a55aa06e507a58e96b5d48a5286bfdff7ed780fa464d9e789b2760ecd840f4cb3ee6e1c1d81b2ee844c88dbebf149b1084b7313eb680714
2
+ 3458a688925a4bd89f2ac2c695362e44d2e0c2903bdbb41b341a4d39283b22d8c85b487bd33cc5d36dbe5e31b5b00a10a6eab802718ead4ed7192ade5a5d1941
3
+ 46daea11ca239cb8c0c8cdeb27db9dbe9c03744908a8a389a60d14df2ddde409260a93334d74957331eec1af323f458b12b3a6c3b8e05885608aae7e3a77eac7
4
+ d88c385bc09ddb8e26c5d90b3163e78455b75aab0eaf7b13476742c3a9158d7e36502f67c63b9901daf135b6326421bf3f5708245410268e3dae95cb9d2993b8
5
+ 4f64d22f4ebf58196b03902935b28456cf181f8b7f8f1d48c9b4b3b7fe0664a8d53de407fa6fe0911a6c6878592cf4fb92e88ea45a3ab149633210e89717aa5e
6
+ 49967c5753f24a43dc039ff4eb02dfc1000afafaed49799103fc524db064b9f3f62018b2ad504471ccee0b14cf67df4201a753a0034ac4d42c87a97571b51691
7
+ dd497fc62017718857d05b339a53e0c952ddca12b33d4e6c995f4aa1f9b6b2143f8c9e70833051961e2543eb4be46626bda217630f3cb798a2e030bc1acf06bd
8
+ 586dde326faa3dfc4eb9a2387784d0a72e9737fa24af145fad138a01d2482a08f534bb9ec431e32ba2c9d9bc0bad48af6d18ae720226a97ce82c7334671009d4
9
+ b40b7bf2ae6342f4f3acc209d44d35f659f309c08e214e30ec9ee8fbae8e44e643285abe1aa760224f8de773ba5c685e668eb7b52028e8c1497131bcf4bced70
10
+ f6ffd1034a935e1026578d6f4abd960a6542aa3fe47a5bccdb27e3ea8b3d7659c79ecfd58261b2cd93d4f062fad6083d870104183ec4cd25e6c27161336f57a3
11
+ 32fe3abb12a1ae65c54462c43b6345443d2d54392b2a223409ab2ff5a6b8b9a70322ada7991d8a026ab61a2f901e00ec1e8b4da082369b0f83dbc1d33bfdb14b
12
+ 186d39dda7f1ee82b189d10fa13d4a895cfc6e14f6569583ff604bbacb03f8fe6ad476a98ed7c6afd2870d9d7dd299c201d4c50c7bf3069bbc4f8b9088d4ff05
13
+ 2b788d55f19d80d481f9e1eee6a198309ca10920129552c3d8f9762699a0cb7c18c1f235aae9092c0d74f6896016abbfbc347a75a72e0c05851920d14531295b
14
+ aa5456ed7af64cbe6b2b92df8986c5d15f3a67fca0f1093c5a9505d16e8fa6aa922e9ac7d23b1e997043b5630509e1a382a2b83e4871230aa59e510264cb8ba2
15
+ ea48bf28a9dabd276ee29743f4233d0dbd809131800d410f5be300e119dc2fb6388f2c5fe99ec35071048f51db0d38dd4bc2ae5e0ba20afd09a20aeebf497ef3
16
+ d6626c32cb178edf0b2e2939afea9977300fd73b1cfb97d397be3d7952bb58ac2d6939d414df50bf21ac578e4e9b9ae8364f0580eb523d4e55ca8485598d1f8b
17
+ 4833ba1860577acaa4f37279c9d6021fb5ab570cd42135b4093d0e4da26376c70d4a8c68eb7360fef1a47cbfa71c1b91978510839f4e588287d5c4ccd5ca62cf
18
+ 59b999cd4900944dd4ba721b3319e0b0cd363da3e4ccb523ab5e2b37670e24010f3eeeefcc9aa048ef5105a1c8277177793911f4cf3cf6177edad6490e56b0c5
19
+ c931d89f84f3f36151d56111d70953290c036c79a6c41393c3921f7c920e866bdbdb3ca5aed0355ea6bdfd26a046a4cb8b6d17d9c581121bf91077346a69d816
20
+ df7194da5b728aff5410b5f8123287d10f8f02d4ab69c37768d7577499d6a134c5b1655ed0b3a2c623dd99f48dbdcb3c19cb852a3e6de3d3f2bdd6e12c51a748
21
+ d4542ea363df2d9bb6799bcec98498404a8fd043631934ca9c3d2d1d73119f36b16e3edb38383faea6553a7088078ad358143ae71dee3ec86d17b84dcca5eb89
22
+ 153cfc2b70c6781c61026459df5b650357d6cbf1f1383cde73f23e9509f6e49535d602ea3c77f386a35b2a3a557d06b6d2125fc7a4fa6a633cf05621f2856a8c
23
+ 71d9411dc4297b810a2b3997e991bbcde3391dde2165aa0b90c9938da0ef5fb4acc22672adf0030b71f6bd89401fad656d7ee707161e1c759cb7ddd12e8a02ea
24
+ bd42ea173c96962374055a9730bd08ec8c5ceee32ead718b4e9187a7012e943803af8d282559dcb47a1fb311c6c4e80f6c48a86db293175caa7c6c0d3382ec6c
25
+ a107a468eb5968c579c2570774f707740190f2e53d78eb8dfcbe40a51101f07cc3fb9981db313208f51fa146ee225cfeb99b4c342adb98a1d2455e2175d96ad1
26
+ 0a81f11f842ebeb0fa2b1818df70c8636f8f7eca6c6917063455369d34191c1028f18edfd2b2cf7ea5fcf47d0a54d9768c46c24ba1385a8d268f660042ae9ed5
27
+ e7a0f74215bf8a96da6e7f45ff068e80dc2a0937538333cf8bc08003a202bc4cbc8ae9c60863caa6bd4c1d4d7257538b61c11df02bb8f2e48cac1c308eac6eaf
28
+ a0967738784c738106119febc79d94a7e6ba083c570b8289b52371df8692897e45c2dd58edaffc9b0589b603c0321d72ad548dda4f68eb382dc5671dc311db44
29
+ 85e157f1b238bf19cb42a5da8f1efaa29a5f43cf9847ce642cb87f180b19ed330d41cd359ed2033f21803aaee6e2e5be0a0ddf689e9c96c53d811e7fac72171b
30
+ 77bafac645580ccd8ba87b489a3b7da7f141ff0a3c684369d0701c53b9fd17bcdf3aeb4519358c3ba3cc307594a24480445ec5add230dc3809d56a942d6a3b87
31
+ 2a402a5c7b09e0910450f4af48fd9fa45e6cf3f44c88047e74154a37aa53f14111cfee0d7899d98a11fee16c828a203a7aedce5963ab93b0f227c51ac50d8fee
32
+ 1698fff95585add5787f3e39ca577fa12155f587b28b0fd039498001616011913c89f8e3014d930505608b65b9fedc046ff85622dd175bd27bde3f7415cb2f08
33
+ 1f1e8c7b87ced63edb417c330a1a6669b87eaa64d3a0b920c54afb9f7efef37a7250c68f9ecb449fd864af2eeaf616ba0e26cb67c79b56db09c984b780d8cf50
34
+ 625f9a6b791f953006633cf82341c2bf68cfbbe5c52a2b80449a383174ecffbbc071e662c51391629d71b2e8720095315c43a524009a07afc225c2c21b134467
35
+ e52a6d1d30a9438d1b34dbb725c02c4f742adf3988e5f98ccf4f4ac45f630e81635a0c09676f1d0137d725013166c67314d46638adcc4962f1f5b0d8a9f2d8fc
36
+ 562007dfb1c1a5748fa3a8d903ab6ec2e9b16c6f9514eb649fe50c3a434b8fdf8ed1c89f3223cea97fc3e9cd71f77858aea182243e88a0bf396cdbcbea0c432f
37
+ 45fd9f7489f0b135f5f65c03a67fa181db67357818b0fece3b253f7934df7fe86e5111383d156a64e031eda064e1d5bb021bdf7c2e82489adc67120e172de7a0
38
+ de599d4c13506d504b325d35844a19bc5de5bd2655d4f9924fa4be5be33c852404abdc1ec976165141f68bae9840e1440b9a9c48c2d91843c63579a14dbeaa95
39
+ 32df167fb07a60d5a7e0ae37d554c6ec6b58efc95b8a9974b4de708074e531e49dd5f0a88fe758fd5405c8db5d5b505f913e376686cce772da19ab2e46128caf
40
+ fc71ed4d9b40835b831dd1380a22cf8a0884ab042502dda77c3432b6cc134436b2df85ba1a9705d50fd95debb50184e7a7999e7f70416b24e99cbfabf32fdf01
41
+ a31b0b988ac2e964b1545598c7e7bd48c6e18650314f3b1afc991e74e835a92b7ed477144ecbf83b17310c015745acb70fcd701f1d166c081a13d338bbe20eb6
42
+ 92442cdbdf91c4244f8e1d3d20729223abb9dda398e1d73affa2af6f889e60d6f80761e97259665161fc262f93ce67f2a94cf8c4ff65a0ff5f369d3f49eb2e87
43
+ 03620bc96fedba75e379fc1bf3157d1f5d53e5020c4793da2c78a159338050a56ef4c01bfc772612c1d0571868d649adfbd3129975455f2f36375f5651a31d3b
44
+ 28d023de73edadd0a0121096513b3d4076d43c6fc4fae14c902eb462a66abb60003ac4b956609ca879c6a7b8450e7a5a1979e3437da8f0dc53ab629534918287
45
+ 7776e747cc6b0f2ae1343e41327f477e9e28adc95dabf632e7bacadfacbe08acbfc12602a8e2e68a4822e257ebcd161d1278351f9ab0e3a56b81176efca3e4a9
46
+ 1b5408bd0e32da4567bc0b9793a602f9d5a768ae29706c778e19638e827de65a34bc8606ec7939c1f01348e22d8bf22cba1961ac23837c2d509ca22323da8a57
47
+ b59af2e299231ddcce7683f07e98f0a091b7a9a5a3b2a03ce39489fc882c040f8a341602b001334bf59d633350e55d8989c3e0a1dd47da9851813df18aefbd80
48
+ 557ff8226c4ae609d024a3bd5373b273ed3e4b439aacdb131917b69e913a0c6e2935089814b0235ed14106df85a317aaab4af520032c842ff71d6093ef271de9
49
+ 7afc0f243736cd9d194a46174a91e5579ba6f5115dac5594d23df3afed79c20dcd41de26dc5394705b6715e0ff112ffb7a5b07b3b31a89a8c1808e9c891949f0
50
+ cdb4ad40280807d5022d9a623de12b698e28cd34826b32a06bef9aeacfef1bd58eda664821824a9dc94193e666c9d1efa52195774e21ec92e53c37100cb55236
51
+ 92a997d33992e405ea85be563824b43a47232c8ad011c704d5ea6db3c18c217d465a1f1be42eb94e2a59e4dd7dd16bdebcd30f2b1e422bbdc35ef17fad9eb7bd
52
+ e8c7bdbd6362521a2d79cf61f0cb92ff31d4cefe7fb7d9d3f71d457dfcb4e59598436db10f8a89e7d8a1e7686d73c48c230bf93fe42931334075eb1b16c40398
53
+ 4ecdce5572ac576fd5db520f5f8af4f824617931066b10360513f6d93a9016228f4279c74b794ece02f895c05dbef795c6f0538c9a46c3441285b4e4e34c7485
54
+ 90e817a4a031c46d99eebd291530907e1d3855eda8d62f5b079c08fd9fd1e4a098ca3e7c7e9a971322c8b219aa0dd00f1bcfee8b4432e52de7fbec09f715d5b9
55
+ 14e936fcc41d62faf42da7b87ebbbdfac24b040c4c86fb0d6a880a6c8f337eef3bede2d37aa7007ad69df55a523ff6f9f4821f7601613a241a284fb0956a38f4
56
+ 9aa906e7ce99e972833fc231fcadee444e576030a1eb2b5bc749d805eabc12aa1f84a89af4d694238b71127456a790fb5c4eff22fc80e44a8310731a35c46f22
57
+ 070a0de46e6552210027ca7b1de995bc83bae0140c97085a9983e4d184749c56535deea5f0e794d6d42e4fd0fc89d85610063165907b4591e63a7b7929308c34
58
+ 1b1be3b9d6cbe48140e1af80eae49e1817b1eb9736648c79bf28e720c6876803f7fcf7eae7978c3541bda3690058cea1571afa1d20e390c8b622bfbd822369eb
59
+ 9b99453d173b675850cb1b576c4cdd993f76e66c1fab473ea89b1f0668f39aa1f5cc743cacdaeb4faeaf06c34ec897ca0b5b18b7025ae319f461e24364209e18
60
+ f6f76ca647393d431cc33036922a86b890525894b94ee5d17929456d324b2430c157d72a3856690e210230a37fb8d38701d7981d4eea4720713a32e03193b6d8
61
+ f730d9d174281cc76b51aa9f1d309535de05334fc9571e756b8d3c164813bd9d4bb46ba2392ce56404d1c912250beb75550fada082d593790726bb9011796306
62
+ 3a3c367eaffa5bb3c4b35404e95983c73c522d166010784cc8d69ee9cc9c415c11534d331b70fceb7d445c96dcf62021bb8d7762a81506a0b616c45a32f00055
63
+ a1f3d2377e0ded8a3a89d4e15ed5f2cc846a8c4ad075607ad1b1f2a9eddac2efd813bb2bab1633d5b697a73bc6a92e8a3e8b2c387e992ec2f6402e8823f35d4a
64
+ 76a5550f9adc0c452bc1924deeac9b519ef339d0874b9263f27f5730ba49eb361ead947d01a3e1a353c79a3bf3376f4064ad2c9850ce1cc5fb332b2004d76c7a
65
+ b5f4c9554216ee7ae37a25ebeb16847433433aef90fd7f93c30975c7dc682046fa1d693d4ba89e4f7b9b2d308c6297cc61d117e87b7afc5a5be6f4815fd60c06
66
+ 29b0dc8d310b0403db818db2da8d187127cdce14a825d3176534b03537e8573eaff0f95366617074996322d64f52b7a62e2737d77f7fbc888accbf4b98f7f651
67
+ 96bc994767591fccfcbdd89cabdab889a8f7e4c6bdef11a76096707c2aad48da83414cd7a6f14286860cb38fd38267f4b7bd843f8d4f961a003a3ccb01fc1e59
68
+ 866f5369e16c0a2fdc6f257033c5f09f482ae780d5113c793ba0f501e09cff0e401666a94da9bb42fde5fd64a0a18229ceed6482dbe6fe10b77d9572a34c9dbe
69
+ f318cbd41876806bd750a2478460d76da78876c7f3acdcba4adfd746e00ee2683c7537de3e183dce6ea8ac6747fd09e515cfcd74ff07f287e0b634bb696cbf61
70
+ 4d5fcfb9b707bf0993722f7109fcee0035f9202a6f9dc6bef47b3e11cf6056ea122ec7a426ff32ec85b98ff76a785d46ddcfcb5d39f42d047780d7920c285bde
71
+ 71ded58853d8940a63c7d24edc73c549a52673fa190764d2b800af1dc2c09a975257b7a8b3bd3094243c77597e0e7d42049ceb15dc4f2328c627c35926668ee7
72
+ 31a705b94d4f93bb22dad0696c398f5e057dcdd6c225fc7906ddd2f2893e884bb2951298ffc28d849fd53ebdd964eb58df695dedac35e01292982bdb0e4849ee
73
+ 934bd3adde8b077ab7533dd8ef81ca009982da91f717f327f7eb52325619269f29cc93c1be24d37eeb5ed9e2d258a08ee989bb440bda2bafef21f4e50885ea76
74
+ 10787581548d954bd8b557ef8332562d376f1cc6717a016b0ce39dbd582c1a30c9f622d60477cddcd21f06a697880791fa4a0e558c1d5be8c7d3407e26c76bd7
75
+ b1e2fe52930fd58d46b68f86e972d6ffed0f96bd3fd5546c54e6a8f24d6b7c1e7bc4e12852c1b36dbc04ca0817a90d433b7fb3eae2a3ceeabdd53cab6507d2ea
76
+ 1bee0bdbae4163e098ca6d684ded1ffc065bca1f9f9cc1c8a1bfa81025116a86b4945553e50acb63ca22cadc94ad88fe24dcc42876f25fb6d0f34a89744b4028
77
+ 2bc31a889107ad8ad7405cdd9b1f0621244bd574c8b85e9f8000e494d5020e7370ce24a7ea641543148d75bb7b11d336d66c43bf763885854b87acd28d1124de
78
+ 34a127d8c68cc342b5212d676a9ae77e968c73545a5c679dc6e19684f0690352921fa6b812882e420f89c68e7c891e556c94989d0eebf3315ebad03944662a5c
79
+ dde8bac2deea909cc52689d4f9558a0116208c79457d184bb1aa3e42a7cfb2e7f6ba7bcd30beb71d4bae7710b34f777867970a4ca6294225b847695e91a2f7a7
80
+ f68671f189746a8403be273e9c291d6653efb980e41d68def96fc59cb2b0af69e4d017c77123913d47168bb70860b2d152991afaa12f7d4c91636eedfcec877c
81
+ afb4bd0e56aa44ac9352670ba7f2f3f71d207a9be5dcd2b415c9e3af869d29db6748fd06f7c4cd97ac5bf20e41ef8c272364bbc13ea05890bff9c8fb8ef4b550
82
+ 70b9c9c0c2cefdd3fa7131de0f2a7dd7858bce0613cc52bc30ff7648f6bcb3842b8383228346fb2eb7cf7565ea8617e1a8c6283b6708888a29d57aef0748216d
83
+ b7b0c4a335a7362899f8f3b33df47a8ada55834b7c1fe48b1b5af7da34518ce53cc031a9b0091ed239c89980a5b6480d6691178543153ecb40766a51bbd9356f
84
+ fe56dcf085dcabf63219a467f2f18ebcf86db9fe7179f61e0a707888783061ca2cab802c88f654f032d9dea40370145701a7880039c5a796a616d8bb59c47287
85
+ e2458fb3306cc7737b16d3aa96baf197b53fe95138968d58b10293fb9c6ac1b7b2d6e7593eb045258ff1b766f8c299093396b91deb3fb8874fe1636e25e76023
86
+ 1bcf21b5d50b15e0e640bbfe47645d94212f2189def14a70ed3a20a28afcf4c611b7feb8839973b7aac21d661e4b419b75610f50bf8b6e12a316b9d8d4221589
87
+ 3122ec0a9107223e55e06205499f9e50e76d14edccd3fd219bbd48b42a43e55dc2c883837b5a17e1e71d21ece2ddb3c1bfe19d9edc259c4a416de3e2e7332380
88
+ f64159a4cbc53efe82345176f3255112e193453ba2ffea171936b496b74b8751ce54d1e847707e5e641be1631bb8a2d74aa92f43ff3491c8caac43a1e5df6343
89
+ 89d6b7f7518daf163f45e8fa97509dbebb275fc9af806470592e2df487af268f96bd00d4d11caeb6877ce80bd41d20225d9a15874b087f096ec667cffc0cd238
90
+ 9fd3ee46488fff38a828b8a2bc3ef6942014b82b403af4e013957dac722344fe54d4d8b8af0398ae4e756d58eb28392d29114ab44804013ef79899c9ab163ae5
91
+ 4ea70b615a9ad00a57acb4290159dd11f3c86bbcd0fd1ab203b6b448c5baff06a9a80dcffcdb94749f6c4013f00576dbd009e6be5a34621ebb483203295777d9
92
+ 1b9abcf35398c95428b2d47f5bfa2ce21816a837f52b562e53b283f8b00cc49761ffbf7fd25e050e8e1a60dc2e490c3dfc053bc595a1e2f002c6df5cadba93d4
93
+ 7b6169dca70dadb7a7e01b32756b781744f2ba0f4f1d8116bd5061dc2c13888a004a302698988c46cf6c3f7c0255961b04ff60d03ca6a0d15034cc8b7a857fb8
94
+ 643ce6cefb737fcf6131830e2275bf65e65b830aa2287e61032644119f72c4a88220ebe35e30ed1a383432abeb3554985b7358ef6f44f9107fcb5c0212ba273a
95
+ 39427dca334a801eebd06fff8bfae59a1d1bebdef78eda1ef7baff0ced24e4149de7963d70e1827ba2e53e37f639ef294a6c903969b19fa37b6799ee3dfe262a
96
+ 7afa05174a3fafe5d350644c584fbb3d00826dc76335ac953651bc0bd68f230ac131f8d9774bb558d2fbdc1cee66fc3acc3240683217ce638fe6e5a229271cc6
97
+ fced2fdb7a089ff569fe34bd46c672cdc9bd9fb647f1d6db804402b60d4186f4367003c008636f1b9f14cbf025ba10513e6c673c50459f0706d7f33f7b875664
98
+ f55c4d88a3dbdd3292d057ec2c6adc0b1a3e315418798418ce1939698d2d52cdbf11967ac4edfb6f4f36e0e70e01a21530006f53951599a70e2a54404691e4e1
99
+ 6382a24ebb80a8202fe77baad81cc9f09002fbf229d9bf0189e12de7a9d6c446a9be551ccee30398fe898f83e1373004c3de7f092af1f46d4dbdafb8cc34e752
100
+ 1df54a54c32b805ee125fce24a2a65dcab623a64bc24c1b2a18b96ccd4b6e637163c227a57a170f3af0f527e93aa48b15c7ecef2e9716403c5a0017b2c84b50d
101
+ 9612bb6471baf8117fe47d60e6241a360b14bbfd679ae19e2c05fc6633461722d992134d5ffbc77015dca5488f296fb411684f3a4c8b6fc9c9f5dc867055f50f
102
+ 819c2393fb6a791c7923535ab04b5110b23b935e17cd480654f586f1c8cc46eca02836ca7127bbd68d7f1d26393bd711f9ec70317e6147816f69d0c0886d74ab
103
+ 57517cd838a7ea52f2b58c70fb812049f200c6a2c071a2d4860af8b873b8376221ee29e9b1a020b79bc26ce6028f5597be568610abbfa6fce2c5dfa06527ab35
104
+ 6833e2347a019c45d4c6e02e49330ac65a5add58309bf6de4784cbb8aee3cceebf3ecca3abfed3f0b9383a4697b3979ae5addb36f16abf4d1b63fdca95cc68ac
105
+ 45cd9d2bc61385a91826d0780893ce85e4c6b19f48142d512757b28102b79da540ee9e71171f6efad679531bd1db67d74b07e9a395730f5f5c510e11f805cc66
106
+ 55d58805b882720503e3c4469936cf9ec7a2d28a81ebb0ec51ffb302d24a470e63eb7a77b5641ccef703a03dca0e0f38403ae4aebcd20a32f5a0c3cdc6aa430f
107
+ 23e671e00ce7bde8654df77506418076bfdd4a622b3e47454466ef44911226017591c978a14406a66744050599c4473a3d61b0096e3aab23a86547fc89bc0f85
108
+ 6cd4e9cd59a862722e29d27bf6163b232eaffe34ab53876af2ac8303614b2ff8d13598a3fb5993872c0bf91e98a608a2842e55ada1397ff0780ba06d53ee5db4
109
+ 8a8ed5e9be3c71a7aa64315a5ecb32dacb4b17c8800f7e4f48c8a4f4bbdf41034e1acff4a7af861199a35f7a7dcdb0844dbdd195e1085e0ed7cd38bb02037eda
110
+ 0bf1800320b5033920028c165256eb0cafcdd29a33e0190a77569940e25fd8efcbe41cca489e4fc275b129c928a552033927617d87681bfff03d035bf723b16c
111
+ f8251de0bab949565668c83c5b3f9122b64229a488abe1b2a919aad74b24e8e6764cd59cfa633f3310e828e0a2ec1335f93e21ac1669954f10ca033bbf675e4f
112
+ 73316e9cf251b0caef199fe9dadde80be837904d252bbad3b56ed9e478744edfeb36281574b8e3e9d9757861e7b1dbe0c12e3e59b849eef1099e6b5efc6c6e50
113
+ cd6362aeee3ffb3b209bb3f1459848624e8bd9e66cb22e82a8cb7c08d02a833e74e3becc1fce804b1233773e24baf178f17e2c9611c39758abe8cb2ad4d20558
114
+ b75aba5c7658dda12b287ba2617192913d2b0ea516f9a1b4e4888c44260ca01aa3db848a8064f94f20c51496b5c2e1b4e100064dc4976af1a1e765921300e649
115
+ 0407a91f44e86efe548108defcbd2fda4b974a90faf13e4465482edcbf550297d89e81c0c69ed7fbdddb3623a940ec21b73aee5dd21ddff4d9ce047731f94e0d
116
+ 2c03a2651b41b73f0ce3901646d23ad90799b21c8b02232f41177a4e6d918bec0bdaa260c705aa6979c3797d0884b89760bc15bcdc11de27e42f621da32e22b8
117
+ 9b061922e862f42c273b0218e17b1e92e196e93de83b497db8897895e1e8067f83cbead903e5f5656f10caa544ccdd0a3272e4308f37580d4206ea66d95b579e
118
+ 6239f0666c12017445ab0e3402f108cf1467b83d828c3cc841f210679d23b2b3a5064169daac0f81d03841663e7e0b524e16fd99095e726b216bc3469420b7ef
119
+ 78d4b77f925e5bf3656700d24de51e02e8b1af71a8797bbc57dbc455fa8fb3a6f82c8da4d13bef99c45962873172938d04b533238e0e990479fa103e8b0bc45b
120
+ c76cc7e27f5e8bbb3473dd068d078534baa401c6ccb5a550ed3347848d24f1358c37294bbe4cba351591edd2e4564e9bb18a8944de8d23198404448ac1f40fa0
121
+ d741b547225b6ba6f1ba38be192ab7550b7610ef54e7fee88a9666b79a12a6741d1565241fba5c2a812be66edd878824f927a42430ffba48fa0bd0264a5483bf
122
+ a2496d09b7325f7e96d0f774c8fd45670779ec0614b672db23d2cf8342c13aaa6a64146996f8aed365eb12412c9b39f2eade3e45f610464212b8f69a660271d5
123
+ 49496e22cffa3314958aa12fc16c658ce5ed0a8da032823a6100c39d7ef5198221888350c1d40cd35c8892d779e9d50b4c8a0f542168c6a586967b1c6dd5b153
124
+ 426ce54802e51f5c85e749ea410585de2ae793cca524e4eacd8738402c9b72922e453ac36cb9d474461ce6ac67aeea014c85e12abe92ba6a734bb72205c5a8db
125
+ 113b7aec4e8800c1a68aaf7256a19cb87c12bd78f9295386eb62a60279ef831030b265869e1efbf07bf04d1882714202adc7ae4afe02bae65c1c8624265e722f
126
+ 728bcbb1a6aab6215b260357af91c77b916e1fd0ef6f5836e4171ab38d2dea45587ff4e827b90ea0c6e3fb852d196aaec1a33b33863cee65a5706ec7fdab2d78
127
+ 49ff51978d2bc23f97b0bea4484ca9ff73ebe52a8894da4bfd4edff6dc403814f2c623b826ef66ee0f08aef8955293974376f6ce80129c2bdfec145b9c68bf88
128
+ 5c3f3d810d6d1d3152695799403536a2f6290de81838615a49f229251fafedd19ee60f478cac8260b5a1ae8cfbf73cf1f296c25f080ccf7c9d352c2cfd94f892
129
+ d62b6ee84dee9d038ae9ade057da3bfaac593ca295323b1f6b4446ed31c9660c4375b7692420373bde87e8128c6acee6de698f95058301565783fb20ba3a29f2
130
+ 615b72d69facdbd915b234771cd4ffe49692a573f7ac05fd212701afe9b703eb8ab2ab117961f819e6d5eaf5ad073456cf56a0422c67b17606d95f50460a919d
131
+ d9bed1a5f05edb8902d3058237b33fc7de1976d1e340ad3a8f31e073cbac34db96b0cd0053e319a4f7fa547f954574a3d262df70cc6df8d8c8007fc6bbf82a51
132
+ 5fc1c52b33fb93aded7997ddbbd64b285959845ea529faab55a0bd1184d48b0a4bc778d9ef2487a552e82638320b8853810b6bcc3fc5b2257e34d5ceb4b80e19
133
+ 4a3953b25132e1abf795b8aa380cdaa1f9f3188637b4ee3e2ca3b4ba093a91f417a12e164d79193dc25758ca0d81d2911f9c554e94998d3db7cedb905e35a90d
134
+ c8e2a692fff1f12b4a658e2d3019c2e67f0259d308c7733cfdea9839775b28ff692a207570da95f0c7d5516532018b95d7695809937306478ec88598ea99eccf
135
+ af551ff46a7a6c577bc7d2823a98c2a9d04fade3a3fdca957bbfc871fe7538a7b1b7f3a9950b6ba38f4c3ff729c447d473c8028e1b5e186a1e865a8c72a60559
136
+ d7494f3fb3248b037f06e59c4e4d50f19be0b4f37946470724d807a4dd1f04e0878843f3a368912fafe90683052235f5082ea4b064f7e0a4cda8feb9c59c0831
137
+ 0388667180d549c8e36ab0a459f57f8059f402f9d0086ecb6f39ff1ef4409e901c404ad1819b432b9f7cca97bf735f3d76fe9fa6b873ea2d0e7e83d19ae21e4d
138
+ 31fd863de2e34cb7d4383b012d665d60efeb6cbf40ae1b5088708f2a9a5f5a34b405b0acac136588a90d576d8d97a2bc3a5b91365d5fe28a3d8fb60abd314e25
139
+ f83b7b54c255f53efa1b14a5f317b019eb6d33937d7112fd38991187a01bf77d3f9561449bde65760aaf3d08fb68939d4349867b430152a19796b22c02f1dda7
140
+ 84f9dcb8d8ee3b3e37fbe0585653074d8ef5534ec2555af2f47253d85cade6e4a847093f9bb1d85de9c1da9b48d204d55244693a1a47c84950fab7b84d86ac16
141
+ 2f799c55d8e273db207a528e22187cb6458d79175414fedd9b87fc648b80f253d2ce532d021ad3a43fdfc960ad7212f03ffed1eadf011eddb4532463d67ca5f0
142
+ b29e5b9e7acb1950f4a85a6084cc9778196b5efeef4b2ae030ccb8b1440fcdf9fa6d4ff1f1c8bc12a0c67219883bd673d07a1f35c1c1367df3f3f89a1df60559
143
+ 8dd8e9b7a07f48e27508431756d2558b3f66a6ad4869a9e133a624712919a8ed4fefc1e9612c79362c52c81ca0a389214da213fe8194d56a63fd1c67f993c3f0
144
+ 003a68d1beedcfa3cbda378b48a620b81aec7735a04f90693ee99adccb547c2b0b9863455ee7d0bec5133095fbd357048da73c4bc19531b8938375f1990a887e
145
+ 2872882e97a8e546e8e897038c2baffeba1ec5fce8901bdc92ff8fff70a413feaf1de1906ada57f729d921ba8576c0afddc02ef7f223f8fdf16cdd91a2541227
146
+ ba0bbc944d1c5b866245338ed74ed8db8d2b7a7107ab40260a0e161d70a5b04ba53e4ca02b9fe4decbe0bf948e4be0688dde08a6e0e7ba523711adaaeffcf91c
147
+ fc10de13c0aa4f01d48263e38a289bbfe419b921593b7d37b583b0a31452f27a92de4aacbde92e79f8c71721e22a20a6e04252c61879821d613edd94d22a0f15
148
+ a8994e11b8a84b9bfc9bf87982f18b213b6caf02355d4ad606c8dd3b164a0ef605e17f94beca2619c784b5b0f7fdcb35aed45e50ea01afdbd27a90cf1c2eb5f1
149
+ a5c3a5d24e67d26990167ca5f85a5a94061bd25aff7fe4f36dffab1346f46b9c5f059bc1ff9f051075f2e3cafbdb3775c2bae784bc5cde5adb970deb07a8d3a4
150
+ d88ddd9a98d097a386c712a38a4fcbc4e55c26c5cd75648e83ff1702bd820207cf581da06323a237b2b4f9cad46424b4e309801d1dc334ca328e98d058d22c3e
151
+ ce30cf23f71a9f0b0f5a5c5fe678dc6a4923369666732d579b80db06731f97201a42748a32074bc75dd6e81e43a6b5bfad8c42ecbe832f087a34b7d00dd17a3a
152
+ 0cb9294a7a3304653927f251ce7ab9541e2a066f81734ffae570ac5bb8fcb7a7c71074421d756ea43426b448b102345f9b9122f9d7107b01b18b3861745dcb31
153
+ ec5d822e97422e0c55841e891301351e8d29b7ef237da23a18f517f56b12cec2497599cbaaa51c25623427ea46ed3c6854dafd8a52362e87ac8e502d3dcc5eb8
154
+ ade6b9501a243a5fe53d683b23fa8ff041d0be3324a40822e03302f9d3959b587964f80164341225a621c6d8783160422e753734013f06221c3d25a85f5dc647
155
+ 2981e43256edc9fc93723c068b0815d68aa714be7c8f8d8d4dd397d4dc28271863a21a78a6e7f9254a8c02c347d9a38fc776b00680cad91a0ed5fcbbdbcfe76c
156
+ 955176c033c51aa4be4e61978c4c9fb5a5b630c22eab246e4739a90818af8773eeda09c03cf9f66231975873e41e9f6233c0f76c650214f486054d7ff3c22f2f
157
+ 2a9e74a9c79e2044915c1ab5b7f18d461ccb0060473a1ac9d5a3f9b19b8611ba92518dad1364e6f4f3221c993a0132bdcb24ba8910df54dd730a6a6608951a15
158
+ 320907ff40bd50373fa8bbf81c4f4aec953f723b74d2dffccfd23c4b3f1c1612f1b1c3ba1f8a6f8d79b22f5329d23dd976e8e4f467182b78639f1d25f3e05ccf
159
+ 60869d732d411be072898b7abd062fd7a04413b6ffedbd14f34edc7b3498d6d5b11c77f8d9a79f7ce03a614d3ace1351dcc990bd195e24ddd0f74d37d9bdf78c
160
+ d92b944faf967310758253b4fc6aa18161cb60435019f5420dfe4af010458ed7c9b7106c6069b74cc2adf1b85aa773336e81585bea75826d0d23958e9f07c6eb
161
+ 4ba2797d0eff22f350540e067ec468b3df814b56a83c0ad3a5e02e4c143a85a6582759c698c464a7886c360912dff33fef9c2bb198686029f40aa30c1e2e957f
162
+ a2fc3a20053a78e4bdcbbbd9b8ff84bed35c764a457172da7fbd9f0448767a61ea2f4d1be165b4653a83167789c0dc772d1484f5afd678c41ae1417353a3dcc5
163
+ 6262354d82b8b4280037df5d01e2f63f044da18389aa069f6168342b53d9d1eae0134fd28c2d02d313d0a3aba6fc9312d6c35038b5ee6ebc8d48f7ade751ad4c
164
+ 14333ce45b59571b12abcb28854663540b64f5e2ac0b5320dcc8511e40fd0f0aa2248869ffce8c035af5e29412dda94fe70d262c0a3bfb1e250d159a388682e6
165
+ f3394033a420c80e82dd88ec54cc847d50457b85dce4b8ddfbc164f2227120c1c045c80d32de035a42bfe32ccf47eb6f81f81f2357bb3f6b0cfe93f23bb98e34
166
+ ff7284b0d0cf801f173c37a4b73de28d1f9d49a72c8d35ca4828e02a8e8787b6ea74f730cbc41d849e17cda8052cf81c7520d9cf56022f9342c29958876afdac
167
+ f449f9ddc44f26c627f50206d4ee84240db005d40c8e7f1e8012d8f6bb170ffd898f9cae855f02d46a6111d8e330635ac1bbc545ec21c318ad3810350027d1aa
168
+ a7565e5a3d090d747faa4cfaf5e268c1824e314d29ec5e306e0d9ce9dc6fe19cde994763a610796f2ce6af17d4183bf18fbddecdd9783441cc7c97d7a32bbd6a
169
+ 751a7706166e8dd704267c29ed4e649175b9d88efa2cb1c638b3483acdb5c9c97348bc9b8babf85850dc5cf9c90ec7336dd1b80be451fb24c2013828c49a7f6e
170
+ 3b7b13435de93c0bf15860cf43c1f4c8d89f27f42d9038fc36ad6ec075f9f488c7ffbc85de6b769fddcbfc273e668444b3cf0a18ef954736ad0547c03c0e53c4
171
+ 4084bb8217a0ba4a07a3e30a78b1dd3d7a3aedfff0911cdff21a94b825512e647e12cb5c517b36870ed455a84c70df1b36b0cbfd7e2d21d1fb3dfcc616d03668
172
+ b6229374ebedaa6f38400b84b4b3537a39c0ac8f9217b348d39e7e7a9e32fdb9e6ddb11736b4f9e126fc609287be2dab32fc31433dcc497452982da9bf442bc9
173
+ 43fb1fea413473b1e462135ab9cd8154e6fbd3b41aeb5293c2dd738f116795c8fcb6abf6efad8802e88c413cc1a3da371e5412a1d30a80a1b1a4e2eb7af261ae
174
+ e8b5e06133c6a6f20d4b69dd415047805858cf01bf3189dcee55b810bb317f513fbe25a0c2ce2b34185791797af6513cdecee569b3d83c09e5217cde87a7a110
175
+ fbf5a151d5665120dfd2afe5c23aed3e9b3161091ed971cc9787c70e73878a478439923f855a3892e928f7b454b084faa10593f01bc24811f3f836e12a779ede
176
+ b28eba3d350df62f7fe18b3591c0d6ef7774c8f09ed06d4070ba7686d77721978de3e8fb7adea32255dceb396c7eb35085bcc0ec05c8342fbe21551035612525
177
+ dc579d3d9a1e8303ecea887d59bfd95214056c224100d7146d344ca819b5345ad260d833b00b726ce0a86b488bdc22744d544802a3cd9572ce1b43211b4092ea
178
+ cbe9d154f3a499e934b5e631de2c9c2d2ff6c094b34bb3fb4176f3df34600d0a771ea7d4e034f831c27d345d97b3e3ace2eae5d392e03be54e140e4c69cfbfc8
179
+ 69e10377449ef55c7648a6cc021b8da7178137ce172a284d38627abfe5b1e28b6f7567e8a69e7284bc23a6e750c25dc7ed80ef241b0e3c242d0ce5d6208b76ff
180
+ 5f2fafb952b50796a79a0e806ea8a36b0e9f8bf7e28054f77af4dc57b3c9c9e1f830752940f87ccd6203c7fb96d568a2d127bdfb2cf575e4177ef3440e9bcbf4
181
+ 2f0e16a9b4d201a4c248dde3ada90725126222637da0f705b2d1610bcc7161b018f859cbe5fe81c59b5addbd170f53494fdc68133918c31cbd2a1ea22498135a
182
+ 8745f0c4f4869d5be82f31885936774bf31155024f883babedd94b042afcaf293867f6818a9c470b6cf6c3d291ff2e6e94febbde222f14b75e60cee351926e87
183
+ 9037974d44f664a9e3beab3ac359307967d8b4db394d6729cdbbe2c6b585354df00c363c25177ca4682fdfba065ebb239e5a9cf2b7d527d45e8d22be4a78deb5
184
+ 6c6cad88ec86ad06e2c19ec3e4926a6a2e2928525fb4c49de0ae6a304ed0da52d74e2c56325616a1175bc607113f9f934b5844c3e7d9179a99b2f7681f26327b
185
+ ccb9b8878cc187586702a7913a86b86acf18bd45dd39b64e3320b5034d1618f9f6326590e1e035c10300d775e50606f4fc07b89dbd4cbf8ff7ce2caa61f878a7
186
+ 3871620aa627a1623946979860c63bd42b728aabe5809665ba4cb21f2999049cb3a5576689f49e54761e93f49e5aa288e3617bc7571fc4bcf80d6a3491a30170
187
+ 2222f05d89c2de5ade1e2e20729f9e2dd722bd0772b20d2116c09c7db902d36ef132f5a7819cf65f47798694b551ca19b496a3998f60c25f8b0d2aa7ef24a5e9
188
+ 46e51ceac51aa980b3b1b746dbcf9c3afb65f4941c223400fa8063e7275091e11ee0d12955408aaf02d08ea6d477f9876cc20e3fe1a09d913d5a34c9048ca76d
189
+ f8c8cfd1cc71de6c781616e7b1cdc578a9cd2bf392bf07dc1eb41e72472911c347ec1484c2fde3d203b69fc10f0adc2742032250e2ad0005a9d3c63e33b48805
190
+ 38a139e0c3e4606ffb3328a9a9d9490cb0948a8bad538a7ba4e63e5d067fb404640d1646878a808b42d29e5485924bb3ccab84d922196e599c37ba9a9be0da77
191
+ 934a9d8838ff3cdf3aac5bea71917df81534de7ff405bab05acf410bf8262037b00b4066188b95d1647d0f0934ec4f5a42a6bb150d41b37f4ca9d6ebde7d6ab6
192
+ bbc302dd221bc357a9595988f68c0a06836e4cdb753c4ae4befc9e26fffe8d714b22219deabf08a270c46cac7136c7ccde948a3e7662df3f49938270e667a2f5
193
+ 965de9c480cac7169a45acd3fbf19d5fcecb0d679211f61366fe25f8f1d30fc01442b16b0afa8cee31b7601022b579771eb69443208e93c470787f303882b5ce
194
+ 1f3d00a0aa002b0fd98b78a726e7d2d8fee93cde0a49ad8e7d1ec580ea2f758c717cfc82defe67eac42702dcaedf241a842ee2aa9a023377d0fc24508cd77c8f
195
+ 4292915521facd7d3116ba367a4e1817160d7b19bb3290ab5710d24f33cf73fc959359feaf99099657a16fea6d5c330e7a1638f67d5f2029ba23cf7f23fe0e68
196
+ a0713c93e72a4f560aac1bb4d3336b0aa8ea7aff93bf15b91fdbe03a30f478195c682467b1f16bcd327c456eb2dbbf0a2a06a12a4101563612529d708d6e10d6
197
+ b42a086d1ceb030f02489e6904786cbe3e10859ed9823c79f95d0060d3532702e93cbe10014974bcdb860a818e2b0c0aeafd6702565423e374846e93bd8a6f9e
198
+ 1d9e854801a1efb6662b0dc269bacc82c66b2158126f572229abe42533a9ff35e26150066a401c9d56bf43edd6d5d72cc19a56b312485d644945b6521cce5b39
199
+ 041855d1b7d73f0906314abc3231a750d62910e24761fbd50ad4be887d708bf48fd958f6ec88aa7851dd645fbfc98a22219e1bb9db28bcbca05ef53529062516
200
+ 5e128ec2e99219deb9613f7871bcafc83ca1352d94f804ed3b1305a200b3ead31a48747d02e3faaa50e389bc97fdb77b3b80a2adcf802656aa17b43fbcbfa0b5
201
+ ac3e2f7d9d23f907666c95e419526d2a866fd5456f35224ea1e0e1dc7076f45dbf64298077b741d78b45bc9f9a361e7d31d884f907411af8f80d6a2e1b7a971a
202
+ 643ea6c216727cf509204e231f97182897032fc4b5037605a83dabc07f56879b743a5118e61fa6a74d5b7a64e504c076a363e5e2787b3e4bf5c9ed4777dc4795
203
+ 14947c0459627713d02d5fba67429236caf9cc26401ec4bba92384cbc6569f6f8a434afb1b1cd206b5f980ab37c0ca20cc483cecbb58686f831276efce30b35a
204
+ e52a1f715a69e8d98f38575f4b9c4b2fb2c68e59e635094a13ac7c6704e9241ba540be586b310bb1179ed0f1c71961fe4586636df81e7bd4cf5045bb74ec4b27
205
+ 5c1a00e94eb632a734b444835ff125e73d80a29dac170dd9a0963b1ea0c5223681d4fa7ce489dd64963064298cd80e91f6f0540fa56e042fe1926720c578daf1
206
+ 2a7d0ec4b5fe6bac4cd7ebd39bc725c2c797fd1b29bbd246a4f3a3887de6482b3b774af7352903df1c9c32f559459f7f1fa7e116fb509e0499f8bf39e4e47b0e
207
+ 074d9710028e7f0324848ceabf2945b9a9441a584c033933804c9559184a64dd67411f2b9679daa01b280ff53ca01c5ceef6a1474f64e5b97d737f2ecc732196
208
+ 3f4644fab775bdc5f4a54ac4f2e6ec0cdc0318f462565e518b04d8f121f20f6d053d8966ba8093d638a0c036c87d4d03bf44c81783eb9c092790892d36c59314
209
+ 135de5b0eeed1c006fb424b3870e8f2e43209e34421dfd35e0b389171b7da1825ae29d311b93420a677213dbae41b5537d06ea9727fd9244c9af6ea4db501d7f
210
+ 65f85a29308c80ff2a353c1d514f698d0566fb514fba6f48631b419ac2ff495e70988035a58a755087116d1a9654b41478261b8ce36bbced65e12456de213166
211
+ ca26721a90a7de8cc33d84707cb977d05538ef21ba114e17164afe2139239b655415de505cfae7dcf53d1c884560f05bebf6c63c99cae3804fb9b863cef669e5
212
+ b41aac4d367044b3b2cbb3249188921207dc181eaa7bf3b30f666c2209bca22feb305db724cc8444a1a11e9a97aade5c135f2a0b829a6f651e055ccfee36f438
213
+ b79572e1c1d1775401f5e531c0ea0aa875d53fb32ee325a5ee04b10e5b9aa50e69d49a4656def67d9ed5c404554655378630361b3be456f8e942d20db3654065
214
+ 021d126e817fbce4d7092b5f759c29ef95aafc6c136f29baf834cd051285c430f3d5f51296bc21318d6d3206b3f96083fb4f4fed9e1989655143717ee119bb84
215
+ 18d004e6ca93743313ecafd3f060020540065c38a7c13e5479f31b289ace4d3ff68011b10606b46e6af204775a1caf60ac1e8ccfcf26f756deff9748cdd2a2b9
216
+ c54b0ef4a8e3f0dcfba890a01ab206cf91017b8c877be150b8915e3fc9d6508acccd7a488ba44741c39526d167f8812997409a40dc9ce85dd8e98ce9f4d09f86
217
+ 3d865050cea8295b1d2b6666281f99298ebbbfd2400015bcea222787ce6f4ce44aa49b3a42970fcfbe73b4a00f198c89174bae3adc384449c41d716a8db04faa
218
+ 54385490ae3137341b584a14862004b59bab380425ac1d3b96ac9220a7f34abd53c315c463ea065a1987aa75102ed79d1a77129844772b6bf033437b7c106700
219
+ 820092fb9a0159ca7109cc7d03bf1fd4557e8b64672eae648d286e279cf6d764fdbfe763a99005019593cb017374adc3317fdd678c1c1a9653c15303821c71b6
220
+ e95e16342c5a5c26bb8ee33e7514cf224303849793392e30e3e1c29fcad69eaae3d9a5bf11e683401c749b061e0f515198f0011c5c234795851def26c4bb382c
221
+ 405515d8640468233ea736be6a554b4de3fea5cc47d1129a4f8124d31a9653a6787a0797dd1c6d4102f8d8af079c4978ea330a0e0c8df78d87d93d4d28ba9590
222
+ 89ce6502b8753b66591caf307d03957608271cd5b0c48cfddb81cdf37d8717501e430e069f38ed43b99792ec3904b86c4c0b14a3312b1f04923959ac1db30bac
223
+ 83b6115ec7c1a0cb7974e0dff276d704e00ca028ae1510a4d7158a51318326636ad2fb9e79839b922c4e5163f649e935f29a361b25406e5eb9485287fd891c0a
224
+ 0021536fae07263fba6da1d904b2ad1bf81dfd7dd3a2308057bfd47314c0df68a428ea8898b56aa986c37206abe6639ecec4ae6c4213e02fa9781cf053fceb8e
225
+ 971c967493295e3786dfc15a7968528ba0f19b603981c770eaf19bf5f18ebf9fdfb4d7c33f7d4e0228a1883bf0acd5bb317abacaaeb88c7dfb5f5077a7815ac1
226
+ b2e56899049e29c69d747ec0c4541ef441279fb37d1d7445b42deba682b6877c1d020157aee18f3339f64344e985b1dd0bfe3b8650d82a6c17044ca5d5fa2776
227
+ ced74c22b80d564806859ffc1c654b347716e5e7a675209964364f9678ddbe23a5418b8d748755419dd3b7612ad1a87e20e20d4234eef52983e9682bde05a784
228
+ 3ee1ac7b4efd5964d6357af25f7885277c8934b812b273b68e9ad925718601b058a149f343466086b30669f96001c8ec1df6b20c2c7b3bffaa64907e2758a37f
229
+ a108664201cae053126908dd01a847522cea7fff121232a9916ea27879a3eb0296f37adc960b9b51ee64169dc34a63092ed0e66ab20d8f171a83592cf32ddd27
230
+ ad8aa7f252817f84d0dce1b30459f4c4c7a05ce74c39db6ebefa9ce87abef3ba1b806537a5c11ecdd39e9022aedace9668fbddb9c2438c43531918dc5b09a8be
231
+ 597212c2c31e9403f0450d67d9d2b860efddd6e64ee23cc34b06157eccb4affe1d21dc97811641746f4da019e825c0c15dba5648b456bb60e574b5033b423b38
232
+ 24d4f3fb931057f20062abf07237154623198c07f170212a7b7f59426cdfbbd850c53655610d048d2882a4e493174a6d8891150cd248e47355bb439ce22a7f1c
233
+ 887908a6761cd399d3d8aaff6376feabd5572936d2c6996259231a5cd8c79313f1ae61aee301b3cba3dc1f190f3113d778af3eba10073a257486454ccbe6949c
234
+ 591dae2eeb6cf071f076166481be4fc607f09688f8b67f792c21e226097f86365c74b3941e2cac66768d24981dd174f5fd905b4dae45b40f260b2f0b8a942cee
235
+ dfe4d0fccf85ac614c8869c825ab5e4034077108cd11740e64ab722037cd3cb8190a65f5a5710e3a9854f80537941e8f549e4ee6b81cd5e28d4275a497cbc5c2
236
+ d79af4183ba21fcfa36b479140ecf579ed1c206a32c04a40929bc30e75d9859f7d6746e43b145f5e9b12a41295146d796771a4f49f926d8b899c42499d9b9801
237
+ 618f84cf8688d8fc8423301eb9fb043abfd81ac0464e284148f27043ef8564e58b59d2c17d8e4811ad1b86ae3aa267c80a391f2480bb060165dcf3ce30cb3f37
238
+ cb38c6321f501af4886440d5e18d6d41df19f41036b8070e0b8eeb455015d8dda9bcd9687ff88732284e357ac67810ec8ac6a574bc3ca9b4f05ab8a1ad0b2609
239
+ 71c79a1c5259a6269d15a06a465941288331052fff1b7b95c0aee5c46305bf12dd539dc2731a852a78de63eb42a541cea463a0dd90684977f1a25ce8f26236cf
240
+ 62707103402e34f4bebfa9a3fea85dd9fdd40d3af8c3c4a4a6f165eeee5d6d04688c076f773e9ae47ef994119cc95498151487027fcc4e08567603ea8a9311c4
241
+ 3bc1107110135314892364784dc875963502d5d490534f1d57b76ad28f141738c53ab69651c9814ec80f407b54b07eaaf236560f35c28cc340f6b54279846498
242
+ 2635953b027e4eec860beb9c2058a0383081dea68a616b70013c33314e947aba2ef4682a52ee1b7a0903f204bc68d8b5fe60fc98a8bbdd6320c4249e35bd0511
243
+ 18757980c20436ca72cb33c3035b778a3f9d52d3e9dbe123a16fb7b98100f24a4266c4c73a9ceb56109dd16fb33a37cafd6f0776affb759326731897fa33bc65
244
+ 81fc2ea75bf822b5a4b35ffc4cda20a4689841fddfe19ac0b914aae745b6ed61823b3423b54cf245fd6abbe2138fa5f421bfa62a2397660344ac0d7c087f3971
245
+ dd03ae459e2ee183770e06ced6d0c837ff70202af083c4a2058976f3836cddad5c529cb34de936fb461690dc3337abf9895ec058c420bd98768fd3ad7c5d21e6
246
+ 299f971f6a0705b60e3fa1a2f87d47e5f15882e9650e50e1fbd74c2272995112b91b91577a21903a75a4f8fcab79ba6986bcceec6f613dd757f2f1548ab38dc1
247
+ b19cfdd3877948900f2df4da425774ae08db4ad1ae869fce8cf626515b1b409d3c3a52df911bb40ddc0e2364d9940e8e9edd1d2b1d2e2f79785ebbf175c0deb0
248
+ 6cae58420b20abc5711544de38f7f568fc420c21f27e6e7ebe5ef77aef3dcbda604859d80a8c0be7f88c9a1d6b1f40476afe425364cc3c8174e88c688519a152
249
+ e44073ee45037c994dcf97092ea6ab4aada56c92e02eb57063d6dd1cc24ae3502c4c4ec96ed25fbc5a86ee8ab9f981983487f463f770fc6efb107d1981ff080e
250
+ 25fb2d5802b6300c0e22e86ee45baf7f080fd7e5416b03bc21363d1e0b4d2115e02f09be7bdc1ebda16eda327db17f81751fa5605ff52fff896484773f0033a3
251
+ 139f984b89b2a7db67553e0d0759314266730b8933fe2790d49c65e31315d8a272c342bd6fd9b00aafd30027b56eac80d619d21eddede48d11b52eb5d622b11c
252
+ aa82f3f00efababda29265fae705202b7650f030ae9de3c000830424a66b3e2f136e653859813ede93168c8480f5ba0dd28cf188175f766feffc63399abceeed
253
+ 033f7a98bc68c97cc91f906cca49bfd600e1d9cfc510f386bf46f7950cd67478c459c505ce283ec5ec11910b319982f978fd4438de660edff5d7b23e342a4f76
254
+ 282deaafc1a71f828a9ec9e4500055f5cea7632d7b435bd3b206c3f06a7b551cbea09c5d2c6143e9c1825fc7a5b82f36752a822770dc2ee68eb06895347f0ffe
255
+ 0abdc87966b4add2d0a14f798f9050f024f208d0e7cdd6f1274c3a6e9043237af7341259051da1a194071a4778134f5696a7a4468ba006b72b0f757c16491215
256
+ 9be0302c25b992ef7d7bb3b77c33e45c5e24a3a7ef2c01b17379300f244fe4a6cfeb1631e1c65756c9085bf296342b26e42c0ca737ff73500f83699ca55f1b9c
257
+ a55681dbad19c1d87f29002b8ff86d10ce9600973d46aa5f29274c1165edd860ca8eb0cc32745b213ae979bceccb6a42687feae0672b2c2ee5dbcee4a8fd36ba
258
+ 74d462ed9aaf2feb1e3ba3baca546902ba665bf7c58b8fa55d8b749cb7f5dc6f60dcd48869ad33219c06fa3ce891d40e27e3b17cd01c0a04361bea7743f84429
259
+ ac22c73898a4aaf412eba1a03c4d207f9782c44a7d168609e89e08b41629901fdc3a76219277c9106822b2ca15fc7c5f397d8af8a8c63562bc42aacb7986f56d
260
+ 1498aaee3c8da9ddea3245b7214f04abee59edadb413bda8625d5ea92a28f526b65d9fb6a32db417ae9c84fe7ade54ccae15b879ea7b39dd28aa6982bb4319d9
261
+ 5ccfc97d3e7904174150b63ce91280ae53dea3a41d5ebab91ec96cfbec4bb8affb59a6510eb09cf961cfe352d84a349bf495938e030df33b71e935c815fa2aea
262
+ f4047e96c6cf431366595310109ce6d55599c6434f92600745c48e90e06b163f2950d655a4541191b6791883349bee1648b70b4ce7aaff1191bab0863f228103
263
+ 9444056736f3011d8ff4e801c8dd06836dd7a3ad80716adf298b9d76a444f60946cb597e472e821002a431378c3857c5474e988a67eb5f4018fdc00cbdb7b1ee
264
+ fa29bab370522d28fdbe1fdf7f0d35b5f7ed844da82a5a530b8a845fab52a024d25e8e2f2d47b9e9efa13746aad118d4e571a2c876d46e75ce04ab9299d878bc
265
+ 7cbe1d4a7387c52b48e7821958515a4e7ff1e5caf3d2b9233aaedd9b04235cffd9acf20870fcf80a08183c4f5a7e53ba14aee90cbbed73b232b007a1f1cbb827
266
+ cee3474609363d37563d036f33772399cde2a01da024a44e3df4fefeb63d60a822d0e2d463ad13dbf8b5a7cadd93794ac5d3dc8cd503433079fd93030012202b
267
+ 854170d49e7668a45c701115630e364ed3f153b2063562da675df569122dd278f7ebdcaa547b40dd0a3d2ada886a71740ffe6721241efdc34fb438babe2d556e
268
+ e1f5e3deb024dff2c0ec095ed380f85ac07c8d62a4ab72417d07a9bfd59fee9be2c0ffae3fefa7292dc2dd94586c96493bd67a725f75927355d26af931dc4d74
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env bash
2
+ # This script monitors Docker containers and restarts any that are unhealthy.
3
+
4
+ unhealthy_containers=$(docker ps -q --filter health=unhealthy)
5
+ if [ -n "$unhealthy_containers" ]; then
6
+ echo "Restarting unhealthy containers: $unhealthy_containers"
7
+ docker restart $unhealthy_containers
8
+ fi
@@ -0,0 +1,16 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
3
+ <plist version="1.0">
4
+ <dict>
5
+ <key>Label</key>
6
+ <string>io.constellationnetwork.nodepilot.Updater</string>
7
+ <key>ProgramArguments</key>
8
+ <array>
9
+ <string>/Users/ffox/.node-pilot/scripts/updater.sh</string>
10
+ </array>
11
+ <key>StartInterval</key>
12
+ <integer>300</integer>
13
+ <key>RunAtLoad</key>
14
+ <boolean>true</boolean>
15
+ </dict>
16
+ </plist>
@@ -0,0 +1,14 @@
1
+ [Unit]
2
+ Description=Constellation node pilot docker container auto heal service
3
+ After=multi-user.target
4
+
5
+ [Service]
6
+ Type=simple
7
+ User=ubuntu
8
+ ExecStart=/home/ubuntu/.node-pilot/scripts/autoheal.sh
9
+ Restart=always
10
+ RestartSec=15s
11
+ ExecStop=/bin/true
12
+
13
+ [Install]
14
+ WantedBy=multi-user.target
@@ -0,0 +1,15 @@
1
+ [Unit]
2
+ Description=Constellation Node Pilot Updater Service
3
+ After=multi-user.target
4
+
5
+ [Service]
6
+ Type=simple
7
+ User=ubuntu
8
+ ExecStart=/home/ubuntu/.node-pilot/scripts/updater.sh
9
+ Environment="PROJECT=hypergraph"
10
+ Restart=always
11
+ RestartSec=1m
12
+ ExecStop=/bin/true
13
+
14
+ [Install]
15
+ WantedBy=multi-user.target
@@ -0,0 +1,13 @@
1
+ #PROJECT="hypergraph"
2
+ #: "${PROJECT:=''}"
3
+ #if [ -z "$PROJECT" ]; then
4
+ # echo "Error: PROJECT environment variable is not set."
5
+ # exit 1
6
+ #fi
7
+ mkdir -p ~/.node-pilot/logs
8
+ echo "Check for network update for '$PROJECT' at $(date "+%b %d %H:%M:%S")" >> ~/.node-pilot/logs/updater.log
9
+ ~/.node-pilot/$PROJECT/scripts/check-version.sh >> ~/.node-pilot/logs/updater.log 2>&1
10
+ exit_code=${PIPESTATUS[0]}
11
+ if [ $exit_code -ne 0 ]; then
12
+ cpilot restart --project $PROJECT >> ~/.node-pilot/logs/updater.log 2>&1
13
+ fi