Broken/Missing Medium URL Redirections #64

Open
opened 2024-09-05 14:30:09 +05:30 by FranklyFlawless · 8 comments

Hello,

I have attempted to deploy a LibMedium instance with limited success. However, none of the URLs are being redirected properly, instead resulting in a blank page instead. Here is the config/default.toml contents, which currently lacks clear documentation:

debug = false
source_code = "https://git.batsense.net/realaravinth/libmedium"
#cache = "/var/lib/libmedium"

[server]
# The port at which you want authentication to listen to
# takes a number, choose from 1000-10000 if you dont know what you are doing
port = 7000
#IP address. Enter 0.0.0.0 to listen on all availale addresses
ip= "0.0.0.0" 
# enter your hostname, eg: example.com
domain = "libmedium.franklyflawless.org"
allow_registration = false
proxy_has_tls = true
#workers = 2

Additionally, here is the truncated Caddyfile contents:

https://libmedium.franklyflawless.org {
	reverse_proxy localhost:8082
	log {
		output discard
	}
}

Command:

docker run -d \
  -v ./config/default.toml:/etc/libmedium/config.toml \
  -p 8082:7000 \
  --restart always \
  --name libmedium \
  realaravinth/libmedium

I have previously deployed a Scribe instance using the unofficial community Docker instructions, but its SourceHut repository is unmaintained, so I want to switch to deploying a LibMedium instance instead.

Frank

Hello, I have attempted to deploy a LibMedium instance with limited success. However, none of the URLs are being redirected properly, instead resulting in a blank page instead. Here is the `config/default.toml` contents, which currently lacks clear documentation: ``` debug = false source_code = "https://git.batsense.net/realaravinth/libmedium" #cache = "/var/lib/libmedium" [server] # The port at which you want authentication to listen to # takes a number, choose from 1000-10000 if you dont know what you are doing port = 7000 #IP address. Enter 0.0.0.0 to listen on all availale addresses ip= "0.0.0.0" # enter your hostname, eg: example.com domain = "libmedium.franklyflawless.org" allow_registration = false proxy_has_tls = true #workers = 2 ``` Additionally, here is the truncated Caddyfile contents: ``` https://libmedium.franklyflawless.org { reverse_proxy localhost:8082 log { output discard } } ``` Command: ``` docker run -d \ -v ./config/default.toml:/etc/libmedium/config.toml \ -p 8082:7000 \ --restart always \ --name libmedium \ realaravinth/libmedium ``` I have previously deployed a Scribe instance using the unofficial community Docker instructions, but its SourceHut repository is unmaintained, so I want to switch to deploying a LibMedium instance instead. Frank
Owner

Hi, can you please share the container logs?

I'm guessing it has something to do with Cloudflare captcha protection. medium.com API, which libmedium uses, is behind Cloudflare captcha wall. Libmedium doesn't work when the captcha is tripped. There's an open issue here.

aside: I love your nick and domain :)

Hi, can you please share the container logs? I'm guessing it has something to do with Cloudflare captcha protection. medium.com API, which libmedium uses, is behind Cloudflare captcha wall. Libmedium doesn't work when the captcha is tripped. There's an open issue [here](https://github.com/realaravinth/libmedium/issues/22). aside: I love your nick and domain :)

Executing docker logs libmedium produces the following output:

 INFO  libmedium > libmedium: .
For more information, see: https://git.batsense.net/realaravinth/libmedium
Build info:
Version: 0.1.0 commit: 8bddddea2c129e09ac8011bddc5a75c01adad12b
 WARN  libmedium::settings > couldn't interpret PORT: environment variable not found
Starting server on: http://0.0.0.0:7000
 INFO  actix_server::builder > starting 8 workers
 INFO  actix_server::server  > Actix runtime found; starting in Actix runtime
 INFO  actix_web::middleware::logger > 172.17.0.1 "GET / HTTP/1.1" 200 1255 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:126.0) Gecko/20100101 Firefox/126.0" 0.001194
thread 'actix-rt|system:0|arbiter:0' panicked at src/data.rs:182:22:
called `Result::unwrap()` on an `Err` value: reqwest::Error { kind: Decode, source: Error("expected value", line: 1, column: 1) }
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
thread 'actix-rt|system:0|arbiter:1' panicked at src/data.rs:182:22:
called `Result::unwrap()` on an `Err` value: reqwest::Error { kind: Decode, source: Error("expected value", line: 1, column: 1) }
thread 'actix-rt|system:0|arbiter:2' panicked at src/data.rs:157:22:
called `Result::unwrap()` on an `Err` value: reqwest::Error { kind: Decode, source: Error("expected value", line: 1, column: 1) }
thread 'actix-rt|system:0|arbiter:3' panicked at src/data.rs:157:22:
called `Result::unwrap()` on an `Err` value: reqwest::Error { kind: Decode, source: Error("expected value", line: 1, column: 1) }
thread 'actix-rt|system:0|arbiter:4' panicked at src/data.rs:182:22:
called `Result::unwrap()` on an `Err` value: reqwest::Error { kind: Decode, source: Error("expected value", line: 1, column: 1) }
thread 'actix-rt|system:0|arbiter:5' panicked at src/data.rs:182:22:
called `Result::unwrap()` on an `Err` value: reqwest::Error { kind: Decode, source: Error("expected value", line: 1, column: 1) }
thread 'actix-rt|system:0|arbiter:6' panicked at src/data.rs:157:22:
called `Result::unwrap()` on an `Err` value: reqwest::Error { kind: Decode, source: Error("expected value", line: 1, column: 1) }
thread 'actix-rt|system:0|arbiter:7' panicked at src/data.rs:182:22:
called `Result::unwrap()` on an `Err` value: reqwest::Error { kind: Decode, source: Error("expected value", line: 1, column: 1) }
 INFO  actix_web::middleware::logger > 172.17.0.1 "GET /api/v1/meta HTTP/1.1" 404 0 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:126.0) Gecko/20100101 Firefox/126.0" 0.000118
thread 'actix-rt|system:0|arbiter:0' panicked at src/data.rs:182:22:
called `Result::unwrap()` on an `Err` value: reqwest::Error { kind: Decode, source: Error("expected value", line: 1, column: 1) }
thread 'actix-rt|system:0|arbiter:1' panicked at src/data.rs:182:22:
called `Result::unwrap()` on an `Err` value: reqwest::Error { kind: Decode, source: Error("expected value", line: 1, column: 1) }
 INFO  actix_web::middleware::logger > 172.17.0.1 "GET /api/v1/build HTTP/1.1" 404 0 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:126.0) Gecko/20100101 Firefox/126.0" 0.000298
thread 'actix-rt|system:0|arbiter:2' panicked at src/data.rs:182:22:
called `Result::unwrap()` on an `Err` value: reqwest::Error { kind: Decode, source: Error("expected value", line: 1, column: 1) }
thread 'actix-rt|system:0|arbiter:3' panicked at src/data.rs:182:22:
called `Result::unwrap()` on an `Err` value: reqwest::Error { kind: Decode, source: Error("expected value", line: 1, column: 1) }
 INFO   actix_web::middleware::logger > 172.17.0.1 "GET /api/v1/meta/build HTTP/1.1" 200 80 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:126.0) Gecko/20100101 Firefox/126.0" 0.000614
thread 'actix-rt|system:0|arbiter:4' panicked at src/data.rs:182:22:
called `Result::unwrap()` on an `Err` value: reqwest::Error { kind: Decode, source: Error("expected value", line: 1, column: 1) }
thread 'actix-rt|system:0|arbiter:5' panicked at src/data.rs:182:22:
called `Result::unwrap()` on an `Err` value: reqwest::Error { kind: Decode, source: Error("expected value", line: 1, column: 1) }
 INFO  actix_web::middleware::logger > 172.17.0.1 "GET /api/v1/meta/health HTTP/1.1" 404 0 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:126.0) Gecko/20100101 Firefox/126.0" 0.000185
thread 'actix-rt|system:0|arbiter:6' panicked at src/data.rs:182:22:
called `Result::unwrap()` on an `Err` value: reqwest::Error { kind: Decode, source: Error("expected value", line: 1, column: 1) }
thread 'actix-rt|system:0|arbiter:7' panicked at src/data.rs:182:22:
called `Result::unwrap()` on an `Err` value: reqwest::Error { kind: Decode, source: Error("expected value", line: 1, column: 1) }
 INFO  actix_web::middleware::logger > 172.17.0.1 "GET /api/v1/meta/build HTTP/1.1" 200 80 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:126.0) Gecko/20100101 Firefox/126.0" 0.000381
thread 'actix-rt|system:0|arbiter:0' panicked at src/data.rs:182:22:
called `Result::unwrap()` on an `Err` value: reqwest::Error { kind: Decode, source: Error("expected value", line: 1, column: 1) }
thread 'actix-rt|system:0|arbiter:1' panicked at src/data.rs:182:22:
called `Result::unwrap()` on an `Err` value: reqwest::Error { kind: Decode, source: Error("expected value", line: 1, column: 1) }
 INFO  actix_web::middleware::logger > 172.17.0.1 "GET / HTTP/1.1" 200 1255 "-" "Mozilla/5.0 (X11; Linux aarch64; Mobile; rv:115.0) Gecko/20100101 Firefox/115.0" 0.000853
thread 'actix-rt|system:0|arbiter:2' panicked at src/data.rs:157:22:
called `Result::unwrap()` on an `Err` value: reqwest::Error { kind: Decode, source: Error("expected value", line: 1, column: 1) }
thread 'actix-rt|system:0|arbiter:3' panicked at src/data.rs:157:22:
called `Result::unwrap()` on an `Err` value: reqwest::Error { kind: Decode, source: Error("expected value", line: 1, column: 1) }
thread 'actix-rt|system:0|arbiter:4' panicked at src/data.rs:157:22:
called `Result::unwrap()` on an `Err` value: reqwest::Error { kind: Decode, source: Error("expected value", line: 1, column: 1) }
Executing `docker logs libmedium` produces the following output: ``` INFO libmedium > libmedium: . For more information, see: https://git.batsense.net/realaravinth/libmedium Build info: Version: 0.1.0 commit: 8bddddea2c129e09ac8011bddc5a75c01adad12b WARN libmedium::settings > couldn't interpret PORT: environment variable not found Starting server on: http://0.0.0.0:7000 INFO actix_server::builder > starting 8 workers INFO actix_server::server > Actix runtime found; starting in Actix runtime INFO actix_web::middleware::logger > 172.17.0.1 "GET / HTTP/1.1" 200 1255 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:126.0) Gecko/20100101 Firefox/126.0" 0.001194 thread 'actix-rt|system:0|arbiter:0' panicked at src/data.rs:182:22: called `Result::unwrap()` on an `Err` value: reqwest::Error { kind: Decode, source: Error("expected value", line: 1, column: 1) } note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace thread 'actix-rt|system:0|arbiter:1' panicked at src/data.rs:182:22: called `Result::unwrap()` on an `Err` value: reqwest::Error { kind: Decode, source: Error("expected value", line: 1, column: 1) } thread 'actix-rt|system:0|arbiter:2' panicked at src/data.rs:157:22: called `Result::unwrap()` on an `Err` value: reqwest::Error { kind: Decode, source: Error("expected value", line: 1, column: 1) } thread 'actix-rt|system:0|arbiter:3' panicked at src/data.rs:157:22: called `Result::unwrap()` on an `Err` value: reqwest::Error { kind: Decode, source: Error("expected value", line: 1, column: 1) } thread 'actix-rt|system:0|arbiter:4' panicked at src/data.rs:182:22: called `Result::unwrap()` on an `Err` value: reqwest::Error { kind: Decode, source: Error("expected value", line: 1, column: 1) } thread 'actix-rt|system:0|arbiter:5' panicked at src/data.rs:182:22: called `Result::unwrap()` on an `Err` value: reqwest::Error { kind: Decode, source: Error("expected value", line: 1, column: 1) } thread 'actix-rt|system:0|arbiter:6' panicked at src/data.rs:157:22: called `Result::unwrap()` on an `Err` value: reqwest::Error { kind: Decode, source: Error("expected value", line: 1, column: 1) } thread 'actix-rt|system:0|arbiter:7' panicked at src/data.rs:182:22: called `Result::unwrap()` on an `Err` value: reqwest::Error { kind: Decode, source: Error("expected value", line: 1, column: 1) } INFO actix_web::middleware::logger > 172.17.0.1 "GET /api/v1/meta HTTP/1.1" 404 0 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:126.0) Gecko/20100101 Firefox/126.0" 0.000118 thread 'actix-rt|system:0|arbiter:0' panicked at src/data.rs:182:22: called `Result::unwrap()` on an `Err` value: reqwest::Error { kind: Decode, source: Error("expected value", line: 1, column: 1) } thread 'actix-rt|system:0|arbiter:1' panicked at src/data.rs:182:22: called `Result::unwrap()` on an `Err` value: reqwest::Error { kind: Decode, source: Error("expected value", line: 1, column: 1) } INFO actix_web::middleware::logger > 172.17.0.1 "GET /api/v1/build HTTP/1.1" 404 0 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:126.0) Gecko/20100101 Firefox/126.0" 0.000298 thread 'actix-rt|system:0|arbiter:2' panicked at src/data.rs:182:22: called `Result::unwrap()` on an `Err` value: reqwest::Error { kind: Decode, source: Error("expected value", line: 1, column: 1) } thread 'actix-rt|system:0|arbiter:3' panicked at src/data.rs:182:22: called `Result::unwrap()` on an `Err` value: reqwest::Error { kind: Decode, source: Error("expected value", line: 1, column: 1) } INFO actix_web::middleware::logger > 172.17.0.1 "GET /api/v1/meta/build HTTP/1.1" 200 80 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:126.0) Gecko/20100101 Firefox/126.0" 0.000614 thread 'actix-rt|system:0|arbiter:4' panicked at src/data.rs:182:22: called `Result::unwrap()` on an `Err` value: reqwest::Error { kind: Decode, source: Error("expected value", line: 1, column: 1) } thread 'actix-rt|system:0|arbiter:5' panicked at src/data.rs:182:22: called `Result::unwrap()` on an `Err` value: reqwest::Error { kind: Decode, source: Error("expected value", line: 1, column: 1) } INFO actix_web::middleware::logger > 172.17.0.1 "GET /api/v1/meta/health HTTP/1.1" 404 0 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:126.0) Gecko/20100101 Firefox/126.0" 0.000185 thread 'actix-rt|system:0|arbiter:6' panicked at src/data.rs:182:22: called `Result::unwrap()` on an `Err` value: reqwest::Error { kind: Decode, source: Error("expected value", line: 1, column: 1) } thread 'actix-rt|system:0|arbiter:7' panicked at src/data.rs:182:22: called `Result::unwrap()` on an `Err` value: reqwest::Error { kind: Decode, source: Error("expected value", line: 1, column: 1) } INFO actix_web::middleware::logger > 172.17.0.1 "GET /api/v1/meta/build HTTP/1.1" 200 80 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:126.0) Gecko/20100101 Firefox/126.0" 0.000381 thread 'actix-rt|system:0|arbiter:0' panicked at src/data.rs:182:22: called `Result::unwrap()` on an `Err` value: reqwest::Error { kind: Decode, source: Error("expected value", line: 1, column: 1) } thread 'actix-rt|system:0|arbiter:1' panicked at src/data.rs:182:22: called `Result::unwrap()` on an `Err` value: reqwest::Error { kind: Decode, source: Error("expected value", line: 1, column: 1) } INFO actix_web::middleware::logger > 172.17.0.1 "GET / HTTP/1.1" 200 1255 "-" "Mozilla/5.0 (X11; Linux aarch64; Mobile; rv:115.0) Gecko/20100101 Firefox/115.0" 0.000853 thread 'actix-rt|system:0|arbiter:2' panicked at src/data.rs:157:22: called `Result::unwrap()` on an `Err` value: reqwest::Error { kind: Decode, source: Error("expected value", line: 1, column: 1) } thread 'actix-rt|system:0|arbiter:3' panicked at src/data.rs:157:22: called `Result::unwrap()` on an `Err` value: reqwest::Error { kind: Decode, source: Error("expected value", line: 1, column: 1) } thread 'actix-rt|system:0|arbiter:4' panicked at src/data.rs:157:22: called `Result::unwrap()` on an `Err` value: reqwest::Error { kind: Decode, source: Error("expected value", line: 1, column: 1) } ```
Owner

Thank you! It looks like Cloudflare is being tripped. When you have the chance, can you please run this command on the machine running libmedium and share its output?

curl -vv --location 'https://medium.com/_/graphql' \
--header 'Content-Type: application/json' \
--data '{"query":"      query {\n        post(id:\"7158b1cdd50c\") {\n          title\n          createdAt\n readingTime\n          creator {\n            id\n name\n            imageId\n          }\n          content {\n            bodyModel {\n              paragraphs {\n                text\n                type\n href\n                layout\n                markups {\n                  title\n type\n                  href\n userId\n                  start\n end\n                  anchorType\n }\n                iframe {\n                  mediaResource {\n                    id\n href\n                    iframeSrc\n iframeWidth\n                    iframeHeight\n }\n                }\n                metadata {\n id\n                  originalWidth\n originalHeight\n                }\n              }\n }\n          }\n        }\n      }\n","variables":{}}'

It's the HTTP request that libmedium makes to medium.com to fetch posts. If cloudflare is being tripped, then we should see the captcha page instead of a GrahpQL response.

Thank you! It looks like Cloudflare is being tripped. When you have the chance, can you please run this command on the machine running libmedium and share its output? ``` curl -vv --location 'https://medium.com/_/graphql' \ --header 'Content-Type: application/json' \ --data '{"query":" query {\n post(id:\"7158b1cdd50c\") {\n title\n createdAt\n readingTime\n creator {\n id\n name\n imageId\n }\n content {\n bodyModel {\n paragraphs {\n text\n type\n href\n layout\n markups {\n title\n type\n href\n userId\n start\n end\n anchorType\n }\n iframe {\n mediaResource {\n id\n href\n iframeSrc\n iframeWidth\n iframeHeight\n }\n }\n metadata {\n id\n originalWidth\n originalHeight\n }\n }\n }\n }\n }\n }\n","variables":{}}' ``` It's the HTTP request that libmedium makes to medium.com to fetch posts. If cloudflare is being tripped, then we should see the captcha page instead of a GrahpQL response.

Output:

*   Trying 162.159.152.4:443...
* Connected to medium.com (162.159.152.4) port 443 (#0)
* ALPN: offers h2,http/1.1
* TLSv1.3 (OUT), TLS handshake, Client hello (1):
*  CAfile: /etc/ssl/certs/ca-certificates.crt
*  CApath: /etc/ssl/certs
* TLSv1.3 (IN), TLS handshake, Server hello (2):
* TLSv1.3 (IN), TLS handshake, Encrypted Extensions (8):
* TLSv1.3 (IN), TLS handshake, Certificate (11):
* TLSv1.3 (IN), TLS handshake, CERT verify (15):
* TLSv1.3 (IN), TLS handshake, Finished (20):
* TLSv1.3 (OUT), TLS change cipher, Change cipher spec (1):
* TLSv1.3 (OUT), TLS handshake, Finished (20):
* SSL connection using TLSv1.3 / TLS_AES_256_GCM_SHA384
* ALPN: server accepted h2
* Server certificate:
*  subject: C=US; ST=California; L=San Francisco; O=Cloudflare, Inc.; CN=medium.com
*  start date: Feb 16 00:00:00 2024 GMT
*  expire date: Dec 31 23:59:59 2024 GMT
*  subjectAltName: host "medium.com" matched cert's "medium.com"
*  issuer: C=US; O=Cloudflare, Inc.; CN=Cloudflare Inc ECC CA-3
*  SSL certificate verify ok.
* using HTTP/2
* h2h3 [:method: POST]
* h2h3 [:path: /_/graphql]
* h2h3 [:scheme: https]
* h2h3 [:authority: medium.com]
* h2h3 [user-agent: curl/7.88.1]
* h2h3 [accept: */*]
* h2h3 [content-type: application/json]
* h2h3 [content-length: 865]
* Using Stream ID: 1 (easy handle 0x5607e57cc7f0)
> POST /_/graphql HTTP/2
> Host: medium.com
> user-agent: curl/7.88.1
> accept: */*
> content-type: application/json
> content-length: 865
> 
* We are completely uploaded and fine
* TLSv1.3 (IN), TLS handshake, Newsession Ticket (4):
* TLSv1.3 (IN), TLS handshake, Newsession Ticket (4):
* old SSL session ID is stale, removing
< HTTP/2 403 
< date: Thu, 05 Sep 2024 09:36:10 GMT
< content-type: text/html; charset=UTF-8
< content-length: 17224
< accept-ch: Sec-CH-UA-Bitness, Sec-CH-UA-Arch, Sec-CH-UA-Full-Version, Sec-CH-UA-Mobile, Sec-CH-UA-Model, Sec-CH-UA-Platform-Version, Sec-CH-UA-Full-Version-List, Sec-CH-UA-Platform, Sec-CH-UA, UA-Bitness, UA-Arch, UA-Full-Version, UA-Mobile, UA-Model, UA-Platform-Version, UA-Platform, UA
< critical-ch: Sec-CH-UA-Bitness, Sec-CH-UA-Arch, Sec-CH-UA-Full-Version, Sec-CH-UA-Mobile, Sec-CH-UA-Model, Sec-CH-UA-Platform-Version, Sec-CH-UA-Full-Version-List, Sec-CH-UA-Platform, Sec-CH-UA, UA-Bitness, UA-Arch, UA-Full-Version, UA-Mobile, UA-Model, UA-Platform-Version, UA-Platform, UA
< cross-origin-embedder-policy: require-corp
< cross-origin-opener-policy: same-origin
< cross-origin-resource-policy: same-origin
< origin-agent-cluster: ?1
< permissions-policy: accelerometer=(),autoplay=(),browsing-topics=(),camera=(),clipboard-read=(),clipboard-write=(),geolocation=(),gyroscope=(),hid=(),interest-cohort=(),magnetometer=(),microphone=(),payment=(),publickey-credentials-get=(),screen-wake-lock=(),serial=(),sync-xhr=(),usb=()
< referrer-policy: same-origin
< x-content-options: nosniff
< x-frame-options: SAMEORIGIN
< cf-mitigated: challenge
< cf-chl-out: ZZeZRvMad/vm/dCfilJl4MhM9q8S1RE6uVNSwIaLQr+9Xg1y3kePgK+zyVUd6Qclxo7guVGoKqjGhrgaNGG1YT5UKUbjkiGN1A/hF23qVpGo1v45V4X2RFJ0M4+La9tbT7Q+BCpGPSrCqanO31l+SA==$+7WcKQ+s2hYwgW0is+11cw==
< cache-control: private, max-age=0, no-store, no-cache, must-revalidate, post-check=0, pre-check=0
< expires: Thu, 01 Jan 1970 00:00:01 GMT
< strict-transport-security: max-age=15552000; includeSubDomains; preload
< x-content-type-options: nosniff
< server: cloudflare
< cf-ray: 8be53bc2ccc6aabd-YYZ
< alt-svc: h3=":443"; ma=864
<
<!DOCTYPE html><html lang="en-US"><head><title>Just a moment...</title><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=Edge"><meta name="robots" content="noindex,nofollow"><meta name="viewport" content="width=device-width,initial-scale=1"><style>*{box-sizing:border-box;margin:0;padding:0}html{line-height:1.15;-webkit-text-size-adjust:100%;color:#313131}button,html{font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji}body{display:flex;flex-direction:column;height:100vh;min-height:100vh}body.no-js .loading-spinner{visibility:hidden}body.theme-dark{background-color:#222;color:#d9d9d9}body.theme-dark a{color:#fff}body.theme-dark a:hover{color:#ee730a;text-decoration:underline}body.theme-dark .lds-ring div{border-color:#999 transparent transparent}body.theme-dark .font-red{color:#b20f03}body.theme-dark .pow-button{background-color:#4693ff;color:#1d1d1d}body.theme-dark #challenge-success-text{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIzMiIgaGVpZ2h0PSIzMiIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI2IDI2Ij48cGF0aCBmaWxsPSIjZDlkOWQ5IiBkPSJNMTMgMGExMyAxMyAwIDEgMCAwIDI2IDEzIDEzIDAgMCAwIDAtMjZtMCAyNGExMSAxMSAwIDEgMSAwLTIyIDExIDExIDAgMCAxIDAgMjIiLz48cGF0aCBmaWxsPSIjZDlkOWQ5IiBkPSJtMTAuOTU1IDE2LjA1NS0zLjk1LTQuMTI1LTEuNDQ1IDEuMzg1IDUuMzcgNS42MSA5LjQ5NS05LjYtMS40Mi0xLjQwNXoiLz48L3N2Zz4=)}body.theme-dark #challenge-error-text{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIzMiIgaGVpZ2h0PSIzMiIgZmlsbD0ibm9uZSI+PHBhdGggZmlsbD0iI0IyMEYwMyIgZD0iTTE2IDNhMTMgMTMgMCAxIDAgMTMgMTNBMTMuMDE1IDEzLjAxNSAwIDAgMCAxNiAzbTAgMjRhMTEgMTEgMCAxIDEgMTEtMTEgMTEuMDEgMTEuMDEgMCAwIDEtMTEgMTEiLz48cGF0aCBmaWxsPSIjQjIwRjAzIiBkPSJNMTcuMDM4IDE4LjYxNUgxNC44N0wxNC41NjMgOS41aDIuNzgzem0tMS4wODQgMS40MjdxLjY2IDAgMS4wNTcuMzg4LjQwNy4zODkuNDA3Ljk5NCAwIC41OTYtLjQwNy45ODQtLjM5Ny4zOS0xLjA1Ny4zODktLjY1IDAtMS4wNTYtLjM4OS0uMzk4LS4zODktLjM5OC0uOTg0IDAtLjU5Ny4zOTgtLjk4NS40MDYtLjM5NyAxLjA1Ni0uMzk3Ii8+PC9zdmc+)}body.theme-light{background-color:#fff;color:#313131}body.theme-light a{color:#0051c3}body.theme-light a:hover{color:#ee730a;text-decoration:underline}body.theme-light .lds-ring div{border-color:#595959 transparent transparent}body.theme-light .font-red{color:#fc574a}body.theme-light .pow-button{background-color:#003681;border-color:#003681;color:#fff}body.theme-light #challenge-success-text{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIzMiIgaGVpZ2h0PSIzMiIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI2IDI2Ij48cGF0aCBmaWxsPSIjMzEzMTMxIiBkPSJNMTMgMGExMyAxMyAwIDEgMCAwIDI2IDEzIDEzIDAgMCAwIDAtMjZtMCAyNGExMSAxMSAwIDEgMSAwLTIyIDExIDExIDAgMCAxIDAgMjIiLz48cGF0aCBmaWxsPSIjMzEzMTMxIiBkPSJtMTAuOTU1IDE2LjA1NS0zLjk1LTQuMTI1LTEuNDQ1IDEuMzg1IDUuMzcgNS42MSA5LjQ5NS05LjYtMS40Mi0xLjQwNXoiLz48L3N2Zz4=)}body.theme-light #challenge-error-text{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIzMiIgaGVpZ2h0PSIzMiIgZmlsbD0ibm9uZSI+PHBhdGggZmlsbD0iI2ZjNTc0YSIgZD0iTTE2IDNhMTMgMTMgMCAxIDAgMTMgMTNBMTMuMDE1IDEzLjAxNSAwIDAgMCAxNiAzbTAgMjRhMTEgMTEgMCAxIDEgMTEtMTEgMTEuMDEgMTEuMDEgMCAwIDEtMTEgMTEiLz48cGF0aCBmaWxsPSIjZmM1NzRhIiBkPSJNMTcuMDM4IDE4LjYxNUgxNC44N0wxNC41NjMgOS41aDIuNzgzem0tMS4wODQgMS40MjdxLjY2IDAgMS4wNTcuMzg4LjQwNy4zODkuNDA3Ljk5NCAwIC41OTYtLjQwNy45ODQtLjM5Ny4zOS0xLjA1Ny4zODktLjY1IDAtMS4wNTYtLjM4OS0uMzk4LS4zODktLjM5OC0uOTg0IDAtLjU5Ny4zOTgtLjk4NS40MDYtLjM5NyAxLjA1Ni0uMzk3Ii8+PC9zdmc+)}body.theme-light.feedback-report{border:1px solid #959595}body.feedback-report{border-radius:5px}a{background-color:transparent;color:#0051c3;text-decoration:none;transition:color .15s ease}a:hover{color:#ee730a;text-decoration:underline}.main-content{margin:8rem auto;max-width:60rem;padding-left:1.5rem;padding-right:1.5rem;width:100%}.main-content .spacer{margin:2rem 0}.main-content .loading-spinner{height:76.391px}.feedback-content{align-content:space-between;display:inline-grid;height:100vh;margin:0;padding:0}.feedback-content .spacer{margin:0}.heading-favicon{height:2rem;margin-right:.5rem;width:2rem}@media (width <= 720px){.main-content{margin-top:4rem}.heading-favicon{height:1.5rem;width:1.5rem}.feedback-content{margin-top:0}}.main-wrapper{align-items:center;display:flex;flex:1;flex-direction:column}.feedback-report .main-wrapper{min-height:100vh}.font-red{color:#b20f03}.h1{font-size:2.5rem;font-weight:500;line-height:3.75rem}.h2{font-weight:500}.core-msg,.h2{font-size:1.5rem;line-height:2.25rem}.body-text,.core-msg{font-weight:400}.body-text{font-size:1rem;line-height:1.25rem}@media (width <= 720px){.h1{font-size:1.5rem;line-height:1.75rem}.h2{font-size:1.25rem}.core-msg,.h2{line-height:1.5rem}.core-msg{font-size:1rem}}#challenge-error-text{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIzMiIgaGVpZ2h0PSIzMiIgZmlsbD0ibm9uZSI+PHBhdGggZmlsbD0iI2ZjNTc0YSIgZD0iTTE2IDNhMTMgMTMgMCAxIDAgMTMgMTNBMTMuMDE1IDEzLjAxNSAwIDAgMCAxNiAzbTAgMjRhMTEgMTEgMCAxIDEgMTEtMTEgMTEuMDEgMTEuMDEgMCAwIDEtMTEgMTEiLz48cGF0aCBmaWxsPSIjZmM1NzRhIiBkPSJNMTcuMDM4IDE4LjYxNUgxNC44N0wxNC41NjMgOS41aDIuNzgzem0tMS4wODQgMS40MjdxLjY2IDAgMS4wNTcuMzg4LjQwNy4zODkuNDA3Ljk5NCAwIC41OTYtLjQwNy45ODQtLjM5Ny4zOS0xLjA1Ny4zODktLjY1IDAtMS4wNTYtLjM4OS0uMzk4LS4zODktLjM5OC0uOTg0IDAtLjU5Ny4zOTgtLjk4NS40MDYtLjM5NyAxLjA1Ni0uMzk3Ii8+PC9zdmc+);padding-left:34px}#challenge-error-text,#challenge-success-text{background-repeat:no-repeat;background-size:contain}#challenge-success-text{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIzMiIgaGVpZ2h0PSIzMiIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI2IDI2Ij48cGF0aCBmaWxsPSIjMzEzMTMxIiBkPSJNMTMgMGExMyAxMyAwIDEgMCAwIDI2IDEzIDEzIDAgMCAwIDAtMjZtMCAyNGExMSAxMSAwIDEgMSAwLTIyIDExIDExIDAgMCAxIDAgMjIiLz48cGF0aCBmaWxsPSIjMzEzMTMxIiBkPSJtMTAuOTU1IDE2LjA1NS0zLjk1LTQuMTI1LTEuNDQ1IDEuMzg1IDUuMzcgNS42MSA5LjQ5NS05LjYtMS40Mi0xLjQwNXoiLz48L3N2Zz4=);padding-left:42px}.text-center{text-align:center}.pow-button{background-color:#0051c3;border:.063rem solid #0051c3;border-radius:.313rem;color:#fff;font-size:.875rem;line-height:1.313rem;margin:2rem 0;padding:.375rem 1rem;transition-duration:.2s;transition-property:background-color,border-color,color;transition-timing-function:ease}.pow-button:hover{background-color:#003681;border-color:#003681;color:#fff;cursor:pointer}.footer{font-size:.75rem;line-height:1.125rem;margin:0 auto;max-width:60rem;padding-left:1.5rem;padding-right:1.5rem;width:100%}.footer-inner{border-top:1px solid #d9d9d9;padding-bottom:1rem;padding-top:1rem}.clearfix:after{clear:both;content:"";display:table}.clearfix .column{float:left;padding-right:1.5rem;width:50%}.diagnostic-wrapper{margin-bottom:.5rem}.footer .ray-id{text-align:center}.footer .ray-id code{font-family:monaco,courier,monospace}.core-msg,.zone-name-title{overflow-wrap:break-word}@media (width <= 720px){.diagnostic-wrapper{display:flex;flex-wrap:wrap;justify-content:center}.clearfix:after{clear:none;content:none;display:initial;text-align:center}.column{padding-bottom:2rem}.clearfix .column{float:none;padding:0;width:auto;word-break:keep-all}.zone-name-title{margin-bottom:1rem}}.loading-spinner{height:76.391px}.lds-ring{display:inline-block;position:relative}.lds-ring,.lds-ring div{height:1.875rem;width:1.875rem}.lds-ring div{animation:lds-ring 1.2s cubic-bezier(.5,0,.5,1) infinite;border:.3rem solid transparent;border-radius:50%;border-top-color:#313131;box-sizing:border-box;display:block;position:absolute}.lds-ring div:first-child{animation-delay:-.45s}.lds-ring div:nth-child(2){animation-delay:-.3s}.lds-ring div:nth-child(3){animation-delay:-.15s}@keyframes lds-ring{0%{transform:rotate(0)}to{transform:rotate(1turn)}}@media screen and (-ms-high-contrast:active),,screen and (-ms-high-contrast:none){.main-wrapper,body{display:block}}.rtl .heading-favicon{margin-left:.5rem;margin-right:0}.rtl #challenge-success-text{background-position:100%;padding-left:0;padding-right:42px}.rtl #challenge-error-text{background-position:100%;padding-left:0;padding-right:34px}.challenge-content .spacer{margin:2rem 0}.challenge-content .loading-spinner{height:76.391px}@media (prefers-color-scheme:dark){body{background-color:#222;color:#d9d9d9}body a{color:#fff}body a:hover{color:#ee730a;text-decoration:underline}body .lds-ring div{border-color:#999 transparent transparent}body .font-red{color:#b20f03}body .pow-button{background-color:#4693ff;color:#1d1d1d}body #challenge-success-text{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIzMiIgaGVpZ2h0PSIzMiIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI2IDI2Ij48cGF0aCBmaWxsPSIjZDlkOWQ5IiBkPSJNMTMgMGExMyAxMyAwIDEgMCAwIDI2IDEzIDEzIDAgMCAwIDAtMjZtMCAyNGExMSAxMSAwIDEgMSAwLTIyIDExIDExIDAgMCAxIDAgMjIiLz48cGF0aCBmaWxsPSIjZDlkOWQ5IiBkPSJtMTAuOTU1IDE2LjA1NS0zLjk1LTQuMTI1LTEuNDQ1IDEuMzg1IDUuMzcgNS42MSA5LjQ5NS05LjYtMS40Mi0xLjQwNXoiLz48L3N2Zz4=)}body #challenge-error-text{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIzMiIgaGVpZ2h0PSIzMiIgZmlsbD0ibm9uZSI+PHBhdGggZmlsbD0iI0IyMEYwMyIgZD0iTTE2IDNhMTMgMTMgMCAxIDAgMTMgMTNBMTMuMDE1IDEzLjAxNSAwIDAgMCAxNiAzbTAgMjRhMTEgMTEgMCAxIDEgMTEtMTEgMTEuMDEgMTEuMDEgMCAwIDEtMTEgMTEiLz48cGF0aCBmaWxsPSIjQjIwRjAzIiBkPSJNMTcuMDM4IDE4LjYxNUgxNC44N0wxNC41NjMgOS41aDIuNzgzem0tMS4wODQgMS40MjdxLjY2IDAgMS4wNTcuMzg4LjQwNy4zODkuNDA3Ljk5NCAwIC41OTYtLjQwNy45ODQtLjM5Ny4zOS0xLjA1Ny4zODktLjY1IDAtMS4wNTYtLjM4OS0uMzk4LS4zODktLjM5OC0uOTg0IDAtLjU5Ny4zOTgtLjk4NS40MDYtLjM5NyAxLjA1Ni0uMzk3Ii8+PC9zdmc+)}}</style><meta http-equiv="refresh" content="390"></head><body class="no-js"><div class="main-wrapper" role="main"><div class="main-content"><noscript><div id="challenge-error-title"><div class="h2"><span id="challenge-error-text">Enable JavaScript and cookies to continue</span></div></div></noscript></div></div><script>(function(){window._cf_chl_opt={cvId: '3',cZone: "medium.com",cType: 'managed',cNounce: '20546',cRay: '8be53bc2ccc6aabd',cHash: '89d69089f492f51',cUPMDTk: "\/_\/graphql?__cf_chl_tk=RIHk9Sqx26bPGpU1xjMurTKHkh5Ul7cubCChCTCkuIk-1725528970-0.0.1.1-4777",cFPWv: 'b',cTTimeMs: '1000',cMTimeMs: '390000',cTplV: 5,cTplB: 'cf',cK: "",fa: "\/_\/graphql?__cf_chl_f_tk=RIHk9Sqx26bPGpU1xjMurTKHkh5Ul7cubCChCTCkuIk-1725528970-0.0.1.1-4777",md: "yC868oUYPNTEI7jN0scgC_c.tfE4IC9sbyPSonSZSP4-1725528970-1.1.1.1-2fVARpgDJiDOVPsLrlpLoLcVJL2d.mUze1uW.2Isa9zJ5p0uHZQRNoi2hNl4Z8_LM4mlPv6JMRMovHhfjJloi20hDktSFE45_4GRsxN_8jn1PQWV8m7FiVdQ_s_N4XiAJ3AlI5gQWC.YdqRjB4PAC3UE2KUaBzOKLaFvmTi7b8lyuP8kXlCqo7jUzxenH0YZMN5Y_v9phR6Qd7LDGqJlcP9xnkC_Hdjkkti8eboiKnUWQN8.kCVB3CQCS3kvopZ91OApgr.rLtHvtr4Q6qJG.2Uef.4vAu23xBe7szCfjmSLzukawRZh43x4JfhbQLwkGKyHRMaP.fi8AmXTL4jU8F8m534I4imBqNJMmfQ_VEz638YXEmIgbZLmsszSRkekVEsEoP5n40uf9rrEorUx7ypgE5eOQEpXCwoU20fR0LzE.PG3JhTyjHeUuu_5lHQexXGR4RIOtMrG61ZNSkoe6cSozJy5mRam_0sPt7Tsx9_1XiLVN.HP2hbSixQV935_6c9RBnSMR5H48Q2uCxvBMfeYaF.C4eFQDp.XoZljDHW4RabLxYCaLFLz_LPWO1wKHHXlKAO.UUQGXYKjzd.QjmYTYq4Et_T9xwGZOuZJLQvFu8Pt76_PwxCNjt0BJy8ZUrrKfPMtPdm1fsSqsRQGfmAloAHiYSwfzWww1H.P7XJhIU6t1y_hnNcqF0lw7rA6WdtPUG392KBPie1uML1rRG6AMM7c410ew343rf2Grj3CoVbGgGslc_qhpTw0Fni4q6iztjS.zLDI8wpMaelz3fZxDbDchOdtdZfWRJz3rD_TzRx8izRqObpiyK4m0UXDnnJwjlr_PuYqVDihkdiIk_LgfanshI1m58PMw8dhrNlF7wQn4uvb.kkVEKKgRJ2T5kiZUmZ6MbOnKCQHuveEwngWcc2oDyJ2x4KNfZ05DsMfBpQI3AkRvYg8Ltgw8OwtWEFo.x2FJ3e9FQLxXOHz69rg93U4NPucg8LhY_uZTDJiKI3.aOuXwFN7zYp3RHCRVTz5dGBhjs2GumCyPjVtML2MtmFVhC_juDvAHNYP8lcMcX0iKr_UEeWOWfvoK3M1UtgrOzk9mMMTe5omTjcZtO2kej3RpK7jGa3yYHj_gHYeVoIC7wdMwaWwBV6oJ5FiUcCJW924U_4giIOZX573xh6.wRb2lsR15ezsXlM9Hzqvx5c_9ugSskBHrwtIY1_ZPNdnP7Xs6B7LNv1iDP7yZ4AEelo3jP.mm5AgmnB4o2sQcO19Qy6ua2QyO3irr3QE.39Tb9kLxgva3vEIQm4XAEGOqebm7IuUmZbhEo2njOdJWTHnAHrTWmE5EHzWGln7sCZRpbCt89Y4G137xgQch7VcFWd7flK3JRHkhBpizt5uYdRST0UgkfoizwLuaqNBkd8rx1ayjUTmqfC7ifHfM6ftyFHpOUkaTsX6t.dMZ0TTXe_QCTjQ11TsTQRmV6nTeRXoLunnGWd9K4oVBZdxb3EZYkb2oXm_MYAiB4nAGl5H95nZ4BYfvNiaTh07o81eaO7.gBVEFsxr9nQQHpe2CsMdzRDtYTCm9NFrrPzJqSuKeInzM.uJzDFYgfrq7LwxWA41xU8uEPPtk_FQpr4Z1ziQ5wGTg89LoX0PA0KutEZD4LJZ3e1vcfbEcRAfjdS3GeJkkIIOUoOgnVzDn7M66b6yxmkGAnIISlfrj_BeAijow_cwBbyhK0uBBFS6tbzyX7JzL7gMQIltS_CynvkJjiM4CEHj686f2JgsjGu8qHfU2nYnt2rhCUjrHXxW3ljQNgx9ebJDJxCub4A.JJB8ssXPEPlN8TmRahQ7nhMkaLJYHavggdm0hwVA4BMBG8X8C3x4fx7aDSwRRonFmxaDkLezM7P31bal1JjAmjVuzqegjvwfiqMmb7nNwigPaoBM0HxtTL6MY3t5bVdddsXSpQ4kJCY3vqZr7PaWUCIEg9oH6BLpjgOShY8TNbW3oWeQejizLcDnqIbBvBi_IKdBYK6_kSH4N.8xvgOq3AXMYSU",mdrd: "7lWgBb1Kb4Gz1_15EaQ27Sy_6aXWDOJbbCH0DkKJkMs-1725528970-1.1.1.1-CWF5isJfchaMS0PYmTPaq2ayNON0CyoL6l.LWLW5bPFujW66TKESQxwqIAfRvcTtytzUl2jQ0ZcDQoNDDD.RYVef6ytmYyVUCcxhHJIqJ.k6XCBvgR_wfw4kzHilSFMpV13odCFu.FPoRpuIFAHGPMwcw3Qxs2PyeIcN0r134.qutiZC6Lbb47JppQhvaE3tDZ7LY0R0UDB91Msc4vB0SumI9pFfE.3cwZjOcwwFO6hRl1EDGqQofvoOKv9UhMiSn0aLWppqZ1bST8Cb3ZL_PWd37mwqA7nSZdRQPAYNXsi6bwdgpqMWV3vxNKTP2DG6m2jfF_INBOu2_hx_XI91fHoyHWqBJvN.CezRwYSy76H6Xl6iUcsy_xYtpQ88UEaGlI3c2pN.fLsA.qK4zuxszslYKPAo_oCMaya_5.uVM3YLB4XdUWMkA7aLC9RR.LTohu8gV1QQUd4Pu8OTicmWdPgSbbWl5MxXLR068ofRG76UQgbpUvG01cRqPlRH3knHVsQMgDoGyrNk2wt1h6zzyG87rFHgDF_nmTX3M_VGhJESUtio8nx7zRLyd92snV6wU_omF_UntFQtfgtA.RdBT8zYYphRvOWvYTTet0.Dfte8.DZi0fH52x6ReWxoABKv4H_canr4HLeX0UzD43Bp2KU4YEUkXrJpNpYmU47QZO7Rq3qJse5BVkH4XQj4lg0A5ROzDTcP2n5cG6p33eQcyoMbWn4vkJCP70qWWsSk4Gi84KXqFlnd2TfvIad4nQCfDyJBpXu8LmL1SVVnj9rIv81NnYHhCkv3_cCaJ4KZ1vphoZ3sUvf1SYmcr0LJYM6_0gIo2uK8e5yd.TORlCWS7bXdszrcL1j5fVy61VtjMTeX7Bnt_UVxrh4sH3WwjBz__4zst3xNzUzzYu_.4iGF5C4D..sycaX2HPXGvJCe2n5aJbLXJkTFWOgxNG76OFF.7IFp_7D39Y3dZR9hn5ADZiVn8dpI7XOUXoGeCJo7ePo9tSI4x.n8nI7kMZLwTaDjLjTF9as05Dj5zvqb_pUh.zkZI1Kz1gjVNDMoxqllZrk94lrL2pZMdBpAmA5Q9RN.qVMmlvCWEbXH5Cj2ehuHmawK1b6UK3CvrrI_t3ftd9wvJvrExXr4OKEbzqhgpLK1.yGDD_s9KyMt3MZfge8qs4WvCL3bV46hSXnRSI3i7dVWrydOScF3nu.rhGPVxlVYB_yBeqzX2kq2I40Lz0Ln6nkkEelXBbZ85OhHXmmLZk0Ml8H6d__lgz9Bn5t9.fGmsewaR6vbiyp8bazJe2zM4A0PInHLg6SscgBBByelnFmFYeJ4h_lJ2_6r7UM_QotidPww0RwfMC.3vhmg03A.nrI1wye2MFv3sM6V3yC9IiPm9rpM2Fnv25JKwZVsfCWVXyNhCoqqwBNuE4pyJeesSFkosoSmpv4YOWK3Tb4qPm8.fYzpaTOS8YzZI616u9aaRtVtoqefeOvk.qCualqxv.VHIvbGOYLTzq.SxCBvX5vq2hO_V1tDmRNTW7V6JTQADYuZbUxJrj5PK_YfbX0muNErrXPM2yHXXqUOaHAMMA96JFxisqSo5OYweaJoTfLAUTCv0GXt_GgxoUSelUIcoSMRPGnhlvr9BiB1_TuCpfprJ39E0mgYny4f4AXolLAs15RTQavJoS7sKghVhhK1anuylQwCCpXQ1SkSaxOixUPk8QAzVYhmQQKoaC0W9BD5t5HHF_n8ReAPpFi0ozGE70LraC_0GdLVYh_JjAhtBcr6EpFUmhU2AVK44ifd0fauoBjmS4g0KWO1YEisNXn_b2BL.Zkkd_U7ORE3ujjDqtJL6Lk_XcUQsoq2cBFnxO8jLr7Oj2oXl_5lAbTP4olDKszkt6h4O_7gNF9Oj4cnYFPxMuXoJx8KvJyrkYltMJ370NgaA1naPbwnMc4YYTbbuQqjdjUe5QtU5aFBUmKq.k66LrvRviYiNjpdDzkciQVQb_um6PA.jFNVgK4HsPDU4uxUNudbX5Wn1fU5OefaCGGkzx96iSZSXxhMwTnq4nP8.GFktngE6wiZzwfMLnejj1tIjI7210a8lP84bK0Eju2yo82jtxGscjsuR0XtsjGkvelzrjJrJLcHfG28j5G0qfqpNkEXbBlEeIUDzTJpwOMd.q6srOF70s.FJv.wCZ0WPLiSkGYC6LxJLzjYmvyZfGlSQqjNWLxRTorn8XQkTX4uXWdxw51gY1n6MUN6Qz_0yx.uhJMsEFQACdI6_zOmV5AHs_drd4ELSVNlNXIocOGLa1syBpIAu.jXXli22hoMf7gsfKCBxPtzdmmGZg7.y_tjztt52At94BLxOWbEmCT3Kto8CsQ6z29ZdrPXNYlGyxt._M._WzKSsP4vNZ.ghYztMzhwcKuIIDIUnF5lBlzkB53JAkK1vGD0tOIBDDvVfxmRXgKKZ.12I8qxeWvGlXwkyhw1MRgyciPeaYne3nSlbO3xts0g6.HqOyTU_a79nnpHxkF3BvkVUS4bc1L7tLjtghQXZ1mh6N28mJBojm2rMm7ombK1Uq7hpij0M79ak84JbjSgpJP3GyQcezLkAJGNODB85ut1ZyFg53sP9XE0G7gUQrToi_YMMxUmLP8T",cRq: {ru: 'aHR0cHM6Ly9tZWRpdW0uY29tL18vZ3JhcGhxbA==',ra: 'Y3VybC83Ljg4LjE=',d: 'gdJ/8+Sk3/3ynWV2ZBAg5kqeIwgTdnaOFhM/2g4++hLV7KFjpoQvr0DctkXW1QQ0I6n8h9lBr/Kt7V4BMPzsxsALA8B1cgn8DXtCsf8vF3Cv3xbavGl0r7SqCnYQiYhqIW3jMB2AgCozykbztyZc7Uv47Zi8xPv0zFPXS9uMb44iTMkIF01/VW8qFeHadlVvu79AY78PL9sIRvc51/EnCNlBCDDDEStad2Kcxth8AWngZ1UKxD57UbBhkGwF903y9ijTAL7vXknqGJ7oymeUIcN1bk2V4NWDcC/2pJs2nVKFSnvwmnHcCpx10azhvIRYWLLArhdqFWkw99zYsMxSaEWpn1oKgdydgaf40w5jX0bbJ2d/nNHuLap/0tF00HBif0h15W3/JIDsXTwbN/I9d/7aR4qBm0DrypZBq5ux+Kdc/34dIfKZBRActXz9Q5k/QVO8IoKobt4isCyMrhxd9KFljh3xX1HtB9OF8QeqW4Qk6Y+0Ns6MPo9zc/XzSgvTknDTH3Hpb2ZOXeD5ldmNZQPaiA9+q29ur47uJYFIWUvcnb6gtD5ibRXqh1ZxxPyGhnlC5JI+ONVfCnaznB41cw==',t: 'MTcyNTUyODk3MC4wMDAwMDA=',cT: Math.floor(Date.now() / 1000),m: 'vYwdR87sqKHKyTzojSWIefSmVPWNchgTi+DbadGrAOQ=',i1: 'KAp6ecLxzxF0KKAtW/ViXw==',i2: 'cNLPwRJK9sSvhUJJ3TAPbA==',zh: 'Ycgpu9r177LxjbQGFsmz/e0ei9K/7m7t1CDoKCYIB7I=',uh: 'lX+4ytSWIAYmrLLYT6PFt6+dDmxcA8mUI2GojLU4YNU=',hh: 'YvLLNAANQRqbdRleAht8yWR4w9yWVhTbCiWB1al3UhY=',}};var cpo = document.createElement('scrip* Connection #0 to host medium.com left intact
t');cpo.src = '/cdn-cgi/challenge-platform/h/b/orchestrate/chl_page/v1?ray=8be53bc2ccc6aabd';window._cf_chl_opt.cOgUHash = location.hash === '' && location.href.indexOf('#') !== -1 ? '#' : location.hash;window._cf_chl_opt.cOgUQuery = location.search === '' && location.href.slice(0, location.href.length - window._cf_chl_opt.cOgUHash.length).indexOf('?') !== -1 ? '?' : location.search;if (window.history && window.history.replaceState) {var ogU = location.pathname + window._cf_chl_opt.cOgUQuery + window._cf_chl_opt.cOgUHash;history.replaceState(null, null, "\/_\/graphql?__cf_chl_rt_tk=RIHk9Sqx26bPGpU1xjMurTKHkh5Ul7cubCChCTCkuIk-1725528970-0.0.1.1-4777" + window._cf_chl_opt.cOgUHash);cpo.onload = function() {history.replaceState(null, null, ogU);}}document.getElementsByTagName('head')[0].append
Output: ``` * Trying 162.159.152.4:443... * Connected to medium.com (162.159.152.4) port 443 (#0) * ALPN: offers h2,http/1.1 * TLSv1.3 (OUT), TLS handshake, Client hello (1): * CAfile: /etc/ssl/certs/ca-certificates.crt * CApath: /etc/ssl/certs * TLSv1.3 (IN), TLS handshake, Server hello (2): * TLSv1.3 (IN), TLS handshake, Encrypted Extensions (8): * TLSv1.3 (IN), TLS handshake, Certificate (11): * TLSv1.3 (IN), TLS handshake, CERT verify (15): * TLSv1.3 (IN), TLS handshake, Finished (20): * TLSv1.3 (OUT), TLS change cipher, Change cipher spec (1): * TLSv1.3 (OUT), TLS handshake, Finished (20): * SSL connection using TLSv1.3 / TLS_AES_256_GCM_SHA384 * ALPN: server accepted h2 * Server certificate: * subject: C=US; ST=California; L=San Francisco; O=Cloudflare, Inc.; CN=medium.com * start date: Feb 16 00:00:00 2024 GMT * expire date: Dec 31 23:59:59 2024 GMT * subjectAltName: host "medium.com" matched cert's "medium.com" * issuer: C=US; O=Cloudflare, Inc.; CN=Cloudflare Inc ECC CA-3 * SSL certificate verify ok. * using HTTP/2 * h2h3 [:method: POST] * h2h3 [:path: /_/graphql] * h2h3 [:scheme: https] * h2h3 [:authority: medium.com] * h2h3 [user-agent: curl/7.88.1] * h2h3 [accept: */*] * h2h3 [content-type: application/json] * h2h3 [content-length: 865] * Using Stream ID: 1 (easy handle 0x5607e57cc7f0) > POST /_/graphql HTTP/2 > Host: medium.com > user-agent: curl/7.88.1 > accept: */* > content-type: application/json > content-length: 865 > * We are completely uploaded and fine * TLSv1.3 (IN), TLS handshake, Newsession Ticket (4): * TLSv1.3 (IN), TLS handshake, Newsession Ticket (4): * old SSL session ID is stale, removing < HTTP/2 403 < date: Thu, 05 Sep 2024 09:36:10 GMT < content-type: text/html; charset=UTF-8 < content-length: 17224 < accept-ch: Sec-CH-UA-Bitness, Sec-CH-UA-Arch, Sec-CH-UA-Full-Version, Sec-CH-UA-Mobile, Sec-CH-UA-Model, Sec-CH-UA-Platform-Version, Sec-CH-UA-Full-Version-List, Sec-CH-UA-Platform, Sec-CH-UA, UA-Bitness, UA-Arch, UA-Full-Version, UA-Mobile, UA-Model, UA-Platform-Version, UA-Platform, UA < critical-ch: Sec-CH-UA-Bitness, Sec-CH-UA-Arch, Sec-CH-UA-Full-Version, Sec-CH-UA-Mobile, Sec-CH-UA-Model, Sec-CH-UA-Platform-Version, Sec-CH-UA-Full-Version-List, Sec-CH-UA-Platform, Sec-CH-UA, UA-Bitness, UA-Arch, UA-Full-Version, UA-Mobile, UA-Model, UA-Platform-Version, UA-Platform, UA < cross-origin-embedder-policy: require-corp < cross-origin-opener-policy: same-origin < cross-origin-resource-policy: same-origin < origin-agent-cluster: ?1 < permissions-policy: accelerometer=(),autoplay=(),browsing-topics=(),camera=(),clipboard-read=(),clipboard-write=(),geolocation=(),gyroscope=(),hid=(),interest-cohort=(),magnetometer=(),microphone=(),payment=(),publickey-credentials-get=(),screen-wake-lock=(),serial=(),sync-xhr=(),usb=() < referrer-policy: same-origin < x-content-options: nosniff < x-frame-options: SAMEORIGIN < cf-mitigated: challenge < cf-chl-out: ZZeZRvMad/vm/dCfilJl4MhM9q8S1RE6uVNSwIaLQr+9Xg1y3kePgK+zyVUd6Qclxo7guVGoKqjGhrgaNGG1YT5UKUbjkiGN1A/hF23qVpGo1v45V4X2RFJ0M4+La9tbT7Q+BCpGPSrCqanO31l+SA==$+7WcKQ+s2hYwgW0is+11cw== < cache-control: private, max-age=0, no-store, no-cache, must-revalidate, post-check=0, pre-check=0 < expires: Thu, 01 Jan 1970 00:00:01 GMT < strict-transport-security: max-age=15552000; includeSubDomains; preload < x-content-type-options: nosniff < server: cloudflare < cf-ray: 8be53bc2ccc6aabd-YYZ < alt-svc: h3=":443"; ma=864 < <!DOCTYPE html><html lang="en-US"><head><title>Just a moment...</title><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=Edge"><meta name="robots" content="noindex,nofollow"><meta name="viewport" content="width=device-width,initial-scale=1"><style>*{box-sizing:border-box;margin:0;padding:0}html{line-height:1.15;-webkit-text-size-adjust:100%;color:#313131}button,html{font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji}body{display:flex;flex-direction:column;height:100vh;min-height:100vh}body.no-js .loading-spinner{visibility:hidden}body.theme-dark{background-color:#222;color:#d9d9d9}body.theme-dark a{color:#fff}body.theme-dark a:hover{color:#ee730a;text-decoration:underline}body.theme-dark .lds-ring div{border-color:#999 transparent transparent}body.theme-dark .font-red{color:#b20f03}body.theme-dark .pow-button{background-color:#4693ff;color:#1d1d1d}body.theme-dark #challenge-success-text{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIzMiIgaGVpZ2h0PSIzMiIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI2IDI2Ij48cGF0aCBmaWxsPSIjZDlkOWQ5IiBkPSJNMTMgMGExMyAxMyAwIDEgMCAwIDI2IDEzIDEzIDAgMCAwIDAtMjZtMCAyNGExMSAxMSAwIDEgMSAwLTIyIDExIDExIDAgMCAxIDAgMjIiLz48cGF0aCBmaWxsPSIjZDlkOWQ5IiBkPSJtMTAuOTU1IDE2LjA1NS0zLjk1LTQuMTI1LTEuNDQ1IDEuMzg1IDUuMzcgNS42MSA5LjQ5NS05LjYtMS40Mi0xLjQwNXoiLz48L3N2Zz4=)}body.theme-dark #challenge-error-text{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIzMiIgaGVpZ2h0PSIzMiIgZmlsbD0ibm9uZSI+PHBhdGggZmlsbD0iI0IyMEYwMyIgZD0iTTE2IDNhMTMgMTMgMCAxIDAgMTMgMTNBMTMuMDE1IDEzLjAxNSAwIDAgMCAxNiAzbTAgMjRhMTEgMTEgMCAxIDEgMTEtMTEgMTEuMDEgMTEuMDEgMCAwIDEtMTEgMTEiLz48cGF0aCBmaWxsPSIjQjIwRjAzIiBkPSJNMTcuMDM4IDE4LjYxNUgxNC44N0wxNC41NjMgOS41aDIuNzgzem0tMS4wODQgMS40MjdxLjY2IDAgMS4wNTcuMzg4LjQwNy4zODkuNDA3Ljk5NCAwIC41OTYtLjQwNy45ODQtLjM5Ny4zOS0xLjA1Ny4zODktLjY1IDAtMS4wNTYtLjM4OS0uMzk4LS4zODktLjM5OC0uOTg0IDAtLjU5Ny4zOTgtLjk4NS40MDYtLjM5NyAxLjA1Ni0uMzk3Ii8+PC9zdmc+)}body.theme-light{background-color:#fff;color:#313131}body.theme-light a{color:#0051c3}body.theme-light a:hover{color:#ee730a;text-decoration:underline}body.theme-light .lds-ring div{border-color:#595959 transparent transparent}body.theme-light .font-red{color:#fc574a}body.theme-light .pow-button{background-color:#003681;border-color:#003681;color:#fff}body.theme-light #challenge-success-text{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIzMiIgaGVpZ2h0PSIzMiIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI2IDI2Ij48cGF0aCBmaWxsPSIjMzEzMTMxIiBkPSJNMTMgMGExMyAxMyAwIDEgMCAwIDI2IDEzIDEzIDAgMCAwIDAtMjZtMCAyNGExMSAxMSAwIDEgMSAwLTIyIDExIDExIDAgMCAxIDAgMjIiLz48cGF0aCBmaWxsPSIjMzEzMTMxIiBkPSJtMTAuOTU1IDE2LjA1NS0zLjk1LTQuMTI1LTEuNDQ1IDEuMzg1IDUuMzcgNS42MSA5LjQ5NS05LjYtMS40Mi0xLjQwNXoiLz48L3N2Zz4=)}body.theme-light #challenge-error-text{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIzMiIgaGVpZ2h0PSIzMiIgZmlsbD0ibm9uZSI+PHBhdGggZmlsbD0iI2ZjNTc0YSIgZD0iTTE2IDNhMTMgMTMgMCAxIDAgMTMgMTNBMTMuMDE1IDEzLjAxNSAwIDAgMCAxNiAzbTAgMjRhMTEgMTEgMCAxIDEgMTEtMTEgMTEuMDEgMTEuMDEgMCAwIDEtMTEgMTEiLz48cGF0aCBmaWxsPSIjZmM1NzRhIiBkPSJNMTcuMDM4IDE4LjYxNUgxNC44N0wxNC41NjMgOS41aDIuNzgzem0tMS4wODQgMS40MjdxLjY2IDAgMS4wNTcuMzg4LjQwNy4zODkuNDA3Ljk5NCAwIC41OTYtLjQwNy45ODQtLjM5Ny4zOS0xLjA1Ny4zODktLjY1IDAtMS4wNTYtLjM4OS0uMzk4LS4zODktLjM5OC0uOTg0IDAtLjU5Ny4zOTgtLjk4NS40MDYtLjM5NyAxLjA1Ni0uMzk3Ii8+PC9zdmc+)}body.theme-light.feedback-report{border:1px solid #959595}body.feedback-report{border-radius:5px}a{background-color:transparent;color:#0051c3;text-decoration:none;transition:color .15s ease}a:hover{color:#ee730a;text-decoration:underline}.main-content{margin:8rem auto;max-width:60rem;padding-left:1.5rem;padding-right:1.5rem;width:100%}.main-content .spacer{margin:2rem 0}.main-content .loading-spinner{height:76.391px}.feedback-content{align-content:space-between;display:inline-grid;height:100vh;margin:0;padding:0}.feedback-content .spacer{margin:0}.heading-favicon{height:2rem;margin-right:.5rem;width:2rem}@media (width <= 720px){.main-content{margin-top:4rem}.heading-favicon{height:1.5rem;width:1.5rem}.feedback-content{margin-top:0}}.main-wrapper{align-items:center;display:flex;flex:1;flex-direction:column}.feedback-report .main-wrapper{min-height:100vh}.font-red{color:#b20f03}.h1{font-size:2.5rem;font-weight:500;line-height:3.75rem}.h2{font-weight:500}.core-msg,.h2{font-size:1.5rem;line-height:2.25rem}.body-text,.core-msg{font-weight:400}.body-text{font-size:1rem;line-height:1.25rem}@media (width <= 720px){.h1{font-size:1.5rem;line-height:1.75rem}.h2{font-size:1.25rem}.core-msg,.h2{line-height:1.5rem}.core-msg{font-size:1rem}}#challenge-error-text{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIzMiIgaGVpZ2h0PSIzMiIgZmlsbD0ibm9uZSI+PHBhdGggZmlsbD0iI2ZjNTc0YSIgZD0iTTE2IDNhMTMgMTMgMCAxIDAgMTMgMTNBMTMuMDE1IDEzLjAxNSAwIDAgMCAxNiAzbTAgMjRhMTEgMTEgMCAxIDEgMTEtMTEgMTEuMDEgMTEuMDEgMCAwIDEtMTEgMTEiLz48cGF0aCBmaWxsPSIjZmM1NzRhIiBkPSJNMTcuMDM4IDE4LjYxNUgxNC44N0wxNC41NjMgOS41aDIuNzgzem0tMS4wODQgMS40MjdxLjY2IDAgMS4wNTcuMzg4LjQwNy4zODkuNDA3Ljk5NCAwIC41OTYtLjQwNy45ODQtLjM5Ny4zOS0xLjA1Ny4zODktLjY1IDAtMS4wNTYtLjM4OS0uMzk4LS4zODktLjM5OC0uOTg0IDAtLjU5Ny4zOTgtLjk4NS40MDYtLjM5NyAxLjA1Ni0uMzk3Ii8+PC9zdmc+);padding-left:34px}#challenge-error-text,#challenge-success-text{background-repeat:no-repeat;background-size:contain}#challenge-success-text{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIzMiIgaGVpZ2h0PSIzMiIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI2IDI2Ij48cGF0aCBmaWxsPSIjMzEzMTMxIiBkPSJNMTMgMGExMyAxMyAwIDEgMCAwIDI2IDEzIDEzIDAgMCAwIDAtMjZtMCAyNGExMSAxMSAwIDEgMSAwLTIyIDExIDExIDAgMCAxIDAgMjIiLz48cGF0aCBmaWxsPSIjMzEzMTMxIiBkPSJtMTAuOTU1IDE2LjA1NS0zLjk1LTQuMTI1LTEuNDQ1IDEuMzg1IDUuMzcgNS42MSA5LjQ5NS05LjYtMS40Mi0xLjQwNXoiLz48L3N2Zz4=);padding-left:42px}.text-center{text-align:center}.pow-button{background-color:#0051c3;border:.063rem solid #0051c3;border-radius:.313rem;color:#fff;font-size:.875rem;line-height:1.313rem;margin:2rem 0;padding:.375rem 1rem;transition-duration:.2s;transition-property:background-color,border-color,color;transition-timing-function:ease}.pow-button:hover{background-color:#003681;border-color:#003681;color:#fff;cursor:pointer}.footer{font-size:.75rem;line-height:1.125rem;margin:0 auto;max-width:60rem;padding-left:1.5rem;padding-right:1.5rem;width:100%}.footer-inner{border-top:1px solid #d9d9d9;padding-bottom:1rem;padding-top:1rem}.clearfix:after{clear:both;content:"";display:table}.clearfix .column{float:left;padding-right:1.5rem;width:50%}.diagnostic-wrapper{margin-bottom:.5rem}.footer .ray-id{text-align:center}.footer .ray-id code{font-family:monaco,courier,monospace}.core-msg,.zone-name-title{overflow-wrap:break-word}@media (width <= 720px){.diagnostic-wrapper{display:flex;flex-wrap:wrap;justify-content:center}.clearfix:after{clear:none;content:none;display:initial;text-align:center}.column{padding-bottom:2rem}.clearfix .column{float:none;padding:0;width:auto;word-break:keep-all}.zone-name-title{margin-bottom:1rem}}.loading-spinner{height:76.391px}.lds-ring{display:inline-block;position:relative}.lds-ring,.lds-ring div{height:1.875rem;width:1.875rem}.lds-ring div{animation:lds-ring 1.2s cubic-bezier(.5,0,.5,1) infinite;border:.3rem solid transparent;border-radius:50%;border-top-color:#313131;box-sizing:border-box;display:block;position:absolute}.lds-ring div:first-child{animation-delay:-.45s}.lds-ring div:nth-child(2){animation-delay:-.3s}.lds-ring div:nth-child(3){animation-delay:-.15s}@keyframes lds-ring{0%{transform:rotate(0)}to{transform:rotate(1turn)}}@media screen and (-ms-high-contrast:active),,screen and (-ms-high-contrast:none){.main-wrapper,body{display:block}}.rtl .heading-favicon{margin-left:.5rem;margin-right:0}.rtl #challenge-success-text{background-position:100%;padding-left:0;padding-right:42px}.rtl #challenge-error-text{background-position:100%;padding-left:0;padding-right:34px}.challenge-content .spacer{margin:2rem 0}.challenge-content .loading-spinner{height:76.391px}@media (prefers-color-scheme:dark){body{background-color:#222;color:#d9d9d9}body a{color:#fff}body a:hover{color:#ee730a;text-decoration:underline}body .lds-ring div{border-color:#999 transparent transparent}body .font-red{color:#b20f03}body .pow-button{background-color:#4693ff;color:#1d1d1d}body #challenge-success-text{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIzMiIgaGVpZ2h0PSIzMiIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI2IDI2Ij48cGF0aCBmaWxsPSIjZDlkOWQ5IiBkPSJNMTMgMGExMyAxMyAwIDEgMCAwIDI2IDEzIDEzIDAgMCAwIDAtMjZtMCAyNGExMSAxMSAwIDEgMSAwLTIyIDExIDExIDAgMCAxIDAgMjIiLz48cGF0aCBmaWxsPSIjZDlkOWQ5IiBkPSJtMTAuOTU1IDE2LjA1NS0zLjk1LTQuMTI1LTEuNDQ1IDEuMzg1IDUuMzcgNS42MSA5LjQ5NS05LjYtMS40Mi0xLjQwNXoiLz48L3N2Zz4=)}body #challenge-error-text{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIzMiIgaGVpZ2h0PSIzMiIgZmlsbD0ibm9uZSI+PHBhdGggZmlsbD0iI0IyMEYwMyIgZD0iTTE2IDNhMTMgMTMgMCAxIDAgMTMgMTNBMTMuMDE1IDEzLjAxNSAwIDAgMCAxNiAzbTAgMjRhMTEgMTEgMCAxIDEgMTEtMTEgMTEuMDEgMTEuMDEgMCAwIDEtMTEgMTEiLz48cGF0aCBmaWxsPSIjQjIwRjAzIiBkPSJNMTcuMDM4IDE4LjYxNUgxNC44N0wxNC41NjMgOS41aDIuNzgzem0tMS4wODQgMS40MjdxLjY2IDAgMS4wNTcuMzg4LjQwNy4zODkuNDA3Ljk5NCAwIC41OTYtLjQwNy45ODQtLjM5Ny4zOS0xLjA1Ny4zODktLjY1IDAtMS4wNTYtLjM4OS0uMzk4LS4zODktLjM5OC0uOTg0IDAtLjU5Ny4zOTgtLjk4NS40MDYtLjM5NyAxLjA1Ni0uMzk3Ii8+PC9zdmc+)}}</style><meta http-equiv="refresh" content="390"></head><body class="no-js"><div class="main-wrapper" role="main"><div class="main-content"><noscript><div id="challenge-error-title"><div class="h2"><span id="challenge-error-text">Enable JavaScript and cookies to continue</span></div></div></noscript></div></div><script>(function(){window._cf_chl_opt={cvId: '3',cZone: "medium.com",cType: 'managed',cNounce: '20546',cRay: '8be53bc2ccc6aabd',cHash: '89d69089f492f51',cUPMDTk: "\/_\/graphql?__cf_chl_tk=RIHk9Sqx26bPGpU1xjMurTKHkh5Ul7cubCChCTCkuIk-1725528970-0.0.1.1-4777",cFPWv: 'b',cTTimeMs: '1000',cMTimeMs: '390000',cTplV: 5,cTplB: 'cf',cK: "",fa: "\/_\/graphql?__cf_chl_f_tk=RIHk9Sqx26bPGpU1xjMurTKHkh5Ul7cubCChCTCkuIk-1725528970-0.0.1.1-4777",md: "yC868oUYPNTEI7jN0scgC_c.tfE4IC9sbyPSonSZSP4-1725528970-1.1.1.1-2fVARpgDJiDOVPsLrlpLoLcVJL2d.mUze1uW.2Isa9zJ5p0uHZQRNoi2hNl4Z8_LM4mlPv6JMRMovHhfjJloi20hDktSFE45_4GRsxN_8jn1PQWV8m7FiVdQ_s_N4XiAJ3AlI5gQWC.YdqRjB4PAC3UE2KUaBzOKLaFvmTi7b8lyuP8kXlCqo7jUzxenH0YZMN5Y_v9phR6Qd7LDGqJlcP9xnkC_Hdjkkti8eboiKnUWQN8.kCVB3CQCS3kvopZ91OApgr.rLtHvtr4Q6qJG.2Uef.4vAu23xBe7szCfjmSLzukawRZh43x4JfhbQLwkGKyHRMaP.fi8AmXTL4jU8F8m534I4imBqNJMmfQ_VEz638YXEmIgbZLmsszSRkekVEsEoP5n40uf9rrEorUx7ypgE5eOQEpXCwoU20fR0LzE.PG3JhTyjHeUuu_5lHQexXGR4RIOtMrG61ZNSkoe6cSozJy5mRam_0sPt7Tsx9_1XiLVN.HP2hbSixQV935_6c9RBnSMR5H48Q2uCxvBMfeYaF.C4eFQDp.XoZljDHW4RabLxYCaLFLz_LPWO1wKHHXlKAO.UUQGXYKjzd.QjmYTYq4Et_T9xwGZOuZJLQvFu8Pt76_PwxCNjt0BJy8ZUrrKfPMtPdm1fsSqsRQGfmAloAHiYSwfzWww1H.P7XJhIU6t1y_hnNcqF0lw7rA6WdtPUG392KBPie1uML1rRG6AMM7c410ew343rf2Grj3CoVbGgGslc_qhpTw0Fni4q6iztjS.zLDI8wpMaelz3fZxDbDchOdtdZfWRJz3rD_TzRx8izRqObpiyK4m0UXDnnJwjlr_PuYqVDihkdiIk_LgfanshI1m58PMw8dhrNlF7wQn4uvb.kkVEKKgRJ2T5kiZUmZ6MbOnKCQHuveEwngWcc2oDyJ2x4KNfZ05DsMfBpQI3AkRvYg8Ltgw8OwtWEFo.x2FJ3e9FQLxXOHz69rg93U4NPucg8LhY_uZTDJiKI3.aOuXwFN7zYp3RHCRVTz5dGBhjs2GumCyPjVtML2MtmFVhC_juDvAHNYP8lcMcX0iKr_UEeWOWfvoK3M1UtgrOzk9mMMTe5omTjcZtO2kej3RpK7jGa3yYHj_gHYeVoIC7wdMwaWwBV6oJ5FiUcCJW924U_4giIOZX573xh6.wRb2lsR15ezsXlM9Hzqvx5c_9ugSskBHrwtIY1_ZPNdnP7Xs6B7LNv1iDP7yZ4AEelo3jP.mm5AgmnB4o2sQcO19Qy6ua2QyO3irr3QE.39Tb9kLxgva3vEIQm4XAEGOqebm7IuUmZbhEo2njOdJWTHnAHrTWmE5EHzWGln7sCZRpbCt89Y4G137xgQch7VcFWd7flK3JRHkhBpizt5uYdRST0UgkfoizwLuaqNBkd8rx1ayjUTmqfC7ifHfM6ftyFHpOUkaTsX6t.dMZ0TTXe_QCTjQ11TsTQRmV6nTeRXoLunnGWd9K4oVBZdxb3EZYkb2oXm_MYAiB4nAGl5H95nZ4BYfvNiaTh07o81eaO7.gBVEFsxr9nQQHpe2CsMdzRDtYTCm9NFrrPzJqSuKeInzM.uJzDFYgfrq7LwxWA41xU8uEPPtk_FQpr4Z1ziQ5wGTg89LoX0PA0KutEZD4LJZ3e1vcfbEcRAfjdS3GeJkkIIOUoOgnVzDn7M66b6yxmkGAnIISlfrj_BeAijow_cwBbyhK0uBBFS6tbzyX7JzL7gMQIltS_CynvkJjiM4CEHj686f2JgsjGu8qHfU2nYnt2rhCUjrHXxW3ljQNgx9ebJDJxCub4A.JJB8ssXPEPlN8TmRahQ7nhMkaLJYHavggdm0hwVA4BMBG8X8C3x4fx7aDSwRRonFmxaDkLezM7P31bal1JjAmjVuzqegjvwfiqMmb7nNwigPaoBM0HxtTL6MY3t5bVdddsXSpQ4kJCY3vqZr7PaWUCIEg9oH6BLpjgOShY8TNbW3oWeQejizLcDnqIbBvBi_IKdBYK6_kSH4N.8xvgOq3AXMYSU",mdrd: "7lWgBb1Kb4Gz1_15EaQ27Sy_6aXWDOJbbCH0DkKJkMs-1725528970-1.1.1.1-CWF5isJfchaMS0PYmTPaq2ayNON0CyoL6l.LWLW5bPFujW66TKESQxwqIAfRvcTtytzUl2jQ0ZcDQoNDDD.RYVef6ytmYyVUCcxhHJIqJ.k6XCBvgR_wfw4kzHilSFMpV13odCFu.FPoRpuIFAHGPMwcw3Qxs2PyeIcN0r134.qutiZC6Lbb47JppQhvaE3tDZ7LY0R0UDB91Msc4vB0SumI9pFfE.3cwZjOcwwFO6hRl1EDGqQofvoOKv9UhMiSn0aLWppqZ1bST8Cb3ZL_PWd37mwqA7nSZdRQPAYNXsi6bwdgpqMWV3vxNKTP2DG6m2jfF_INBOu2_hx_XI91fHoyHWqBJvN.CezRwYSy76H6Xl6iUcsy_xYtpQ88UEaGlI3c2pN.fLsA.qK4zuxszslYKPAo_oCMaya_5.uVM3YLB4XdUWMkA7aLC9RR.LTohu8gV1QQUd4Pu8OTicmWdPgSbbWl5MxXLR068ofRG76UQgbpUvG01cRqPlRH3knHVsQMgDoGyrNk2wt1h6zzyG87rFHgDF_nmTX3M_VGhJESUtio8nx7zRLyd92snV6wU_omF_UntFQtfgtA.RdBT8zYYphRvOWvYTTet0.Dfte8.DZi0fH52x6ReWxoABKv4H_canr4HLeX0UzD43Bp2KU4YEUkXrJpNpYmU47QZO7Rq3qJse5BVkH4XQj4lg0A5ROzDTcP2n5cG6p33eQcyoMbWn4vkJCP70qWWsSk4Gi84KXqFlnd2TfvIad4nQCfDyJBpXu8LmL1SVVnj9rIv81NnYHhCkv3_cCaJ4KZ1vphoZ3sUvf1SYmcr0LJYM6_0gIo2uK8e5yd.TORlCWS7bXdszrcL1j5fVy61VtjMTeX7Bnt_UVxrh4sH3WwjBz__4zst3xNzUzzYu_.4iGF5C4D..sycaX2HPXGvJCe2n5aJbLXJkTFWOgxNG76OFF.7IFp_7D39Y3dZR9hn5ADZiVn8dpI7XOUXoGeCJo7ePo9tSI4x.n8nI7kMZLwTaDjLjTF9as05Dj5zvqb_pUh.zkZI1Kz1gjVNDMoxqllZrk94lrL2pZMdBpAmA5Q9RN.qVMmlvCWEbXH5Cj2ehuHmawK1b6UK3CvrrI_t3ftd9wvJvrExXr4OKEbzqhgpLK1.yGDD_s9KyMt3MZfge8qs4WvCL3bV46hSXnRSI3i7dVWrydOScF3nu.rhGPVxlVYB_yBeqzX2kq2I40Lz0Ln6nkkEelXBbZ85OhHXmmLZk0Ml8H6d__lgz9Bn5t9.fGmsewaR6vbiyp8bazJe2zM4A0PInHLg6SscgBBByelnFmFYeJ4h_lJ2_6r7UM_QotidPww0RwfMC.3vhmg03A.nrI1wye2MFv3sM6V3yC9IiPm9rpM2Fnv25JKwZVsfCWVXyNhCoqqwBNuE4pyJeesSFkosoSmpv4YOWK3Tb4qPm8.fYzpaTOS8YzZI616u9aaRtVtoqefeOvk.qCualqxv.VHIvbGOYLTzq.SxCBvX5vq2hO_V1tDmRNTW7V6JTQADYuZbUxJrj5PK_YfbX0muNErrXPM2yHXXqUOaHAMMA96JFxisqSo5OYweaJoTfLAUTCv0GXt_GgxoUSelUIcoSMRPGnhlvr9BiB1_TuCpfprJ39E0mgYny4f4AXolLAs15RTQavJoS7sKghVhhK1anuylQwCCpXQ1SkSaxOixUPk8QAzVYhmQQKoaC0W9BD5t5HHF_n8ReAPpFi0ozGE70LraC_0GdLVYh_JjAhtBcr6EpFUmhU2AVK44ifd0fauoBjmS4g0KWO1YEisNXn_b2BL.Zkkd_U7ORE3ujjDqtJL6Lk_XcUQsoq2cBFnxO8jLr7Oj2oXl_5lAbTP4olDKszkt6h4O_7gNF9Oj4cnYFPxMuXoJx8KvJyrkYltMJ370NgaA1naPbwnMc4YYTbbuQqjdjUe5QtU5aFBUmKq.k66LrvRviYiNjpdDzkciQVQb_um6PA.jFNVgK4HsPDU4uxUNudbX5Wn1fU5OefaCGGkzx96iSZSXxhMwTnq4nP8.GFktngE6wiZzwfMLnejj1tIjI7210a8lP84bK0Eju2yo82jtxGscjsuR0XtsjGkvelzrjJrJLcHfG28j5G0qfqpNkEXbBlEeIUDzTJpwOMd.q6srOF70s.FJv.wCZ0WPLiSkGYC6LxJLzjYmvyZfGlSQqjNWLxRTorn8XQkTX4uXWdxw51gY1n6MUN6Qz_0yx.uhJMsEFQACdI6_zOmV5AHs_drd4ELSVNlNXIocOGLa1syBpIAu.jXXli22hoMf7gsfKCBxPtzdmmGZg7.y_tjztt52At94BLxOWbEmCT3Kto8CsQ6z29ZdrPXNYlGyxt._M._WzKSsP4vNZ.ghYztMzhwcKuIIDIUnF5lBlzkB53JAkK1vGD0tOIBDDvVfxmRXgKKZ.12I8qxeWvGlXwkyhw1MRgyciPeaYne3nSlbO3xts0g6.HqOyTU_a79nnpHxkF3BvkVUS4bc1L7tLjtghQXZ1mh6N28mJBojm2rMm7ombK1Uq7hpij0M79ak84JbjSgpJP3GyQcezLkAJGNODB85ut1ZyFg53sP9XE0G7gUQrToi_YMMxUmLP8T",cRq: {ru: 'aHR0cHM6Ly9tZWRpdW0uY29tL18vZ3JhcGhxbA==',ra: 'Y3VybC83Ljg4LjE=',d: 'gdJ/8+Sk3/3ynWV2ZBAg5kqeIwgTdnaOFhM/2g4++hLV7KFjpoQvr0DctkXW1QQ0I6n8h9lBr/Kt7V4BMPzsxsALA8B1cgn8DXtCsf8vF3Cv3xbavGl0r7SqCnYQiYhqIW3jMB2AgCozykbztyZc7Uv47Zi8xPv0zFPXS9uMb44iTMkIF01/VW8qFeHadlVvu79AY78PL9sIRvc51/EnCNlBCDDDEStad2Kcxth8AWngZ1UKxD57UbBhkGwF903y9ijTAL7vXknqGJ7oymeUIcN1bk2V4NWDcC/2pJs2nVKFSnvwmnHcCpx10azhvIRYWLLArhdqFWkw99zYsMxSaEWpn1oKgdydgaf40w5jX0bbJ2d/nNHuLap/0tF00HBif0h15W3/JIDsXTwbN/I9d/7aR4qBm0DrypZBq5ux+Kdc/34dIfKZBRActXz9Q5k/QVO8IoKobt4isCyMrhxd9KFljh3xX1HtB9OF8QeqW4Qk6Y+0Ns6MPo9zc/XzSgvTknDTH3Hpb2ZOXeD5ldmNZQPaiA9+q29ur47uJYFIWUvcnb6gtD5ibRXqh1ZxxPyGhnlC5JI+ONVfCnaznB41cw==',t: 'MTcyNTUyODk3MC4wMDAwMDA=',cT: Math.floor(Date.now() / 1000),m: 'vYwdR87sqKHKyTzojSWIefSmVPWNchgTi+DbadGrAOQ=',i1: 'KAp6ecLxzxF0KKAtW/ViXw==',i2: 'cNLPwRJK9sSvhUJJ3TAPbA==',zh: 'Ycgpu9r177LxjbQGFsmz/e0ei9K/7m7t1CDoKCYIB7I=',uh: 'lX+4ytSWIAYmrLLYT6PFt6+dDmxcA8mUI2GojLU4YNU=',hh: 'YvLLNAANQRqbdRleAht8yWR4w9yWVhTbCiWB1al3UhY=',}};var cpo = document.createElement('scrip* Connection #0 to host medium.com left intact t');cpo.src = '/cdn-cgi/challenge-platform/h/b/orchestrate/chl_page/v1?ray=8be53bc2ccc6aabd';window._cf_chl_opt.cOgUHash = location.hash === '' && location.href.indexOf('#') !== -1 ? '#' : location.hash;window._cf_chl_opt.cOgUQuery = location.search === '' && location.href.slice(0, location.href.length - window._cf_chl_opt.cOgUHash.length).indexOf('?') !== -1 ? '?' : location.search;if (window.history && window.history.replaceState) {var ogU = location.pathname + window._cf_chl_opt.cOgUQuery + window._cf_chl_opt.cOgUHash;history.replaceState(null, null, "\/_\/graphql?__cf_chl_rt_tk=RIHk9Sqx26bPGpU1xjMurTKHkh5Ul7cubCChCTCkuIk-1725528970-0.0.1.1-4777" + window._cf_chl_opt.cOgUHash);cpo.onload = function() {history.replaceState(null, null, ogU);}}document.getElementsByTagName('head')[0].append ```
Owner

Thanks again. Cloudflare is tripped as suspected. I don't think it can be bypassed. Were you able to run Scribe on this machine/IP?

Thanks again. Cloudflare is tripped as suspected. I don't think it can be bypassed. Were you able to run Scribe on this machine/IP?

Yes, it was working fine for a few weeks. Within the last week, it was unable to parse any Medium URLs, so I figured it was time to transition to LibMedium to see if the issue resolves itself.

Yes, it was working fine for a few weeks. Within the last week, it was unable to parse any Medium URLs, so I figured it was time to transition to LibMedium to see if the issue resolves itself.
Owner

This is probably the same reason why Scribe stopped working too. I had another person email me about the same. I'll try to look into it this weekend and update on here, if I find a fix :)

This is probably the same reason why Scribe stopped working too. I had another person email me about the same. I'll try to look into it this weekend and update on here, if I find a fix :)

Additional information:

  • OVHcloud VPS (Beauharnois, Québec, Canada)
  • Debian 12 'Bookworm'
  • Operating entirely unlisted instances

I barely used the Scribe instance, maybe only viewing one Medium article per week maximum.

Additional information: * OVHcloud VPS (Beauharnois, Québec, Canada) * Debian 12 'Bookworm' * Operating entirely unlisted instances I barely used the Scribe instance, maybe only viewing one Medium article per week maximum.
Sign in to join this conversation.
No milestone
No project
No assignees
2 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: realaravinth/libmedium#64
No description provided.