Initial commit

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
This commit is contained in:
2026-03-07 23:00:30 +08:00
commit 82f8ea04cd
8 changed files with 710 additions and 0 deletions

38
INSTALL.md Normal file
View File

@@ -0,0 +1,38 @@
# 安装与使用说明
## 核心修复
问题macOS 系统 Python 不允许直接安装第三方包。
解决:创建虚拟环境。
```bash
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
```
## 使用方法
```bash
# 激活虚拟环境
source venv/bin/activate
# 运行脚本
python main.py --proxy http://127.0.0.1:7890 --once
```
或直接用:
```bash
./venv/bin/python main.py --proxy http://127.0.0.1:7890 --once
```
## 参数
| 参数 | 说明 |
|------|------|
| `--proxy` | 代理地址 |
| `--once` | 只运行一次 |
| `--sleep-min` | 循环最短等待(秒) |
| `--sleep-max` | 循环最长等待(秒) |

4
README.md Normal file
View File

@@ -0,0 +1,4 @@
## 先安装 pip install -r requirements.txt
## 运行命令 python main2.py --proxy="代理地址"
./venv/bin/python main.py --proxy http://127.0.0.1:7890

660
main.py Normal file
View File

@@ -0,0 +1,660 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# @Time : 2026/3/1 19:48
# @Author :
# @Software : PyCharm
# @Desc :
import json
import os
import re
import sys
import time
import uuid
import math
import random
import string
import secrets
import hashlib
import base64
import threading
import argparse
from datetime import datetime, timezone, timedelta
from urllib.parse import urlparse, parse_qs, urlencode, quote
from dataclasses import dataclass
from typing import Any, Dict, Optional
import urllib.parse
import urllib.request
import urllib.error
from curl_cffi import requests
# ==========================================
# Mail.tm 临时邮箱 API
# ==========================================
MAILTM_BASE = "https://api.mail.tm"
def _mailtm_headers(*, token: str = "", use_json: bool = False) -> Dict[str, str]:
headers = {"Accept": "application/json"}
if use_json:
headers["Content-Type"] = "application/json"
if token:
headers["Authorization"] = f"Bearer {token}"
return headers
def _mailtm_domains(proxies: Any = None) -> list[str]:
resp = requests.get(
f"{MAILTM_BASE}/domains",
headers=_mailtm_headers(),
proxies=proxies,
impersonate="chrome",
timeout=15,
)
if resp.status_code != 200:
raise RuntimeError(f"获取 Mail.tm 域名失败,状态码: {resp.status_code}")
data = resp.json()
domains = []
if isinstance(data, list):
items = data
elif isinstance(data, dict):
items = data.get("hydra:member") or data.get("items") or []
else:
items = []
for item in items:
if not isinstance(item, dict):
continue
domain = str(item.get("domain") or "").strip()
is_active = item.get("isActive", True)
is_private = item.get("isPrivate", False)
if domain and is_active and not is_private:
domains.append(domain)
return domains
def get_email_and_token(proxies: Any = None) -> tuple[str, str]:
"""创建 Mail.tm 邮箱并获取 Bearer Token"""
try:
domains = _mailtm_domains(proxies)
if not domains:
print("[Error] Mail.tm 没有可用域名")
return "", ""
domain = random.choice(domains)
for _ in range(5):
local = f"oc{secrets.token_hex(5)}"
email = f"{local}@{domain}"
password = secrets.token_urlsafe(18)
create_resp = requests.post(
f"{MAILTM_BASE}/accounts",
headers=_mailtm_headers(use_json=True),
json={"address": email, "password": password},
proxies=proxies,
impersonate="chrome",
timeout=15,
)
if create_resp.status_code not in (200, 201):
continue
token_resp = requests.post(
f"{MAILTM_BASE}/token",
headers=_mailtm_headers(use_json=True),
json={"address": email, "password": password},
proxies=proxies,
impersonate="chrome",
timeout=15,
)
if token_resp.status_code == 200:
token = str(token_resp.json().get("token") or "").strip()
if token:
return email, token
print("[Error] Mail.tm 邮箱创建成功但获取 Token 失败")
return "", ""
except Exception as e:
print(f"[Error] 请求 Mail.tm API 出错: {e}")
return "", ""
def get_oai_code(token: str, email: str, proxies: Any = None) -> str:
"""使用 Mail.tm Token 轮询获取 OpenAI 验证码"""
url_list = f"{MAILTM_BASE}/messages"
regex = r"(?<!\d)(\d{6})(?!\d)"
seen_ids: set[str] = set()
print(f"[*] 正在等待邮箱 {email} 的验证码...", end="", flush=True)
for _ in range(40):
print(".", end="", flush=True)
try:
resp = requests.get(
url_list,
headers=_mailtm_headers(token=token),
proxies=proxies,
impersonate="chrome",
timeout=15,
)
if resp.status_code != 200:
time.sleep(3)
continue
data = resp.json()
if isinstance(data, list):
messages = data
elif isinstance(data, dict):
messages = data.get("hydra:member") or data.get("messages") or []
else:
messages = []
for msg in messages:
if not isinstance(msg, dict):
continue
msg_id = str(msg.get("id") or "").strip()
if not msg_id or msg_id in seen_ids:
continue
seen_ids.add(msg_id)
read_resp = requests.get(
f"{MAILTM_BASE}/messages/{msg_id}",
headers=_mailtm_headers(token=token),
proxies=proxies,
impersonate="chrome",
timeout=15,
)
if read_resp.status_code != 200:
continue
mail_data = read_resp.json()
sender = str(
((mail_data.get("from") or {}).get("address") or "")
).lower()
subject = str(mail_data.get("subject") or "")
intro = str(mail_data.get("intro") or "")
text = str(mail_data.get("text") or "")
html = mail_data.get("html") or ""
if isinstance(html, list):
html = "\n".join(str(x) for x in html)
content = "\n".join([subject, intro, text, str(html)])
if "openai" not in sender and "openai" not in content.lower():
continue
m = re.search(regex, content)
if m:
print(" 抓到啦! 验证码:", m.group(1))
return m.group(1)
except Exception:
pass
time.sleep(3)
print(" 超时,未收到验证码")
return ""
# ==========================================
# OAuth 授权与辅助函数
# ==========================================
AUTH_URL = "https://auth.openai.com/oauth/authorize"
TOKEN_URL = "https://auth.openai.com/oauth/token"
CLIENT_ID = "app_EMoamEEZ73f0CkXaXp7hrann"
DEFAULT_REDIRECT_URI = f"http://localhost:1455/auth/callback"
DEFAULT_SCOPE = "openid email profile offline_access"
def _b64url_no_pad(raw: bytes) -> str:
return base64.urlsafe_b64encode(raw).decode("ascii").rstrip("=")
def _sha256_b64url_no_pad(s: str) -> str:
return _b64url_no_pad(hashlib.sha256(s.encode("ascii")).digest())
def _random_state(nbytes: int = 16) -> str:
return secrets.token_urlsafe(nbytes)
def _pkce_verifier() -> str:
return secrets.token_urlsafe(64)
def _parse_callback_url(callback_url: str) -> Dict[str, str]:
candidate = callback_url.strip()
if not candidate:
return {"code": "", "state": "", "error": "", "error_description": ""}
if "://" not in candidate:
if candidate.startswith("?"):
candidate = f"http://localhost{candidate}"
elif any(ch in candidate for ch in "/?#") or ":" in candidate:
candidate = f"http://{candidate}"
elif "=" in candidate:
candidate = f"http://localhost/?{candidate}"
parsed = urllib.parse.urlparse(candidate)
query = urllib.parse.parse_qs(parsed.query, keep_blank_values=True)
fragment = urllib.parse.parse_qs(parsed.fragment, keep_blank_values=True)
for key, values in fragment.items():
if key not in query or not query[key] or not (query[key][0] or "").strip():
query[key] = values
def get1(k: str) -> str:
v = query.get(k, [""])
return (v[0] or "").strip()
code = get1("code")
state = get1("state")
error = get1("error")
error_description = get1("error_description")
if code and not state and "#" in code:
code, state = code.split("#", 1)
if not error and error_description:
error, error_description = error_description, ""
return {
"code": code,
"state": state,
"error": error,
"error_description": error_description,
}
def _jwt_claims_no_verify(id_token: str) -> Dict[str, Any]:
if not id_token or id_token.count(".") < 2:
return {}
payload_b64 = id_token.split(".")[1]
pad = "=" * ((4 - (len(payload_b64) % 4)) % 4)
try:
payload = base64.urlsafe_b64decode((payload_b64 + pad).encode("ascii"))
return json.loads(payload.decode("utf-8"))
except Exception:
return {}
def _decode_jwt_segment(seg: str) -> Dict[str, Any]:
raw = (seg or "").strip()
if not raw:
return {}
pad = "=" * ((4 - (len(raw) % 4)) % 4)
try:
decoded = base64.urlsafe_b64decode((raw + pad).encode("ascii"))
return json.loads(decoded.decode("utf-8"))
except Exception:
return {}
def _to_int(v: Any) -> int:
try:
return int(v)
except (TypeError, ValueError):
return 0
def _post_form(url: str, data: Dict[str, str], timeout: int = 30) -> Dict[str, Any]:
body = urllib.parse.urlencode(data).encode("utf-8")
req = urllib.request.Request(
url,
data=body,
method="POST",
headers={
"Content-Type": "application/x-www-form-urlencoded",
"Accept": "application/json",
},
)
try:
with urllib.request.urlopen(req, timeout=timeout) as resp:
raw = resp.read()
if resp.status != 200:
raise RuntimeError(
f"token exchange failed: {resp.status}: {raw.decode('utf-8', 'replace')}"
)
return json.loads(raw.decode("utf-8"))
except urllib.error.HTTPError as exc:
raw = exc.read()
raise RuntimeError(
f"token exchange failed: {exc.code}: {raw.decode('utf-8', 'replace')}"
) from exc
@dataclass(frozen=True)
class OAuthStart:
auth_url: str
state: str
code_verifier: str
redirect_uri: str
def generate_oauth_url(
*, redirect_uri: str = DEFAULT_REDIRECT_URI, scope: str = DEFAULT_SCOPE
) -> OAuthStart:
state = _random_state()
code_verifier = _pkce_verifier()
code_challenge = _sha256_b64url_no_pad(code_verifier)
params = {
"client_id": CLIENT_ID,
"response_type": "code",
"redirect_uri": redirect_uri,
"scope": scope,
"state": state,
"code_challenge": code_challenge,
"code_challenge_method": "S256",
"prompt": "login",
"id_token_add_organizations": "true",
"codex_cli_simplified_flow": "true",
}
auth_url = f"{AUTH_URL}?{urllib.parse.urlencode(params)}"
return OAuthStart(
auth_url=auth_url,
state=state,
code_verifier=code_verifier,
redirect_uri=redirect_uri,
)
def submit_callback_url(
*,
callback_url: str,
expected_state: str,
code_verifier: str,
redirect_uri: str = DEFAULT_REDIRECT_URI,
) -> str:
cb = _parse_callback_url(callback_url)
if cb["error"]:
desc = cb["error_description"]
raise RuntimeError(f"oauth error: {cb['error']}: {desc}".strip())
if not cb["code"]:
raise ValueError("callback url missing ?code=")
if not cb["state"]:
raise ValueError("callback url missing ?state=")
if cb["state"] != expected_state:
raise ValueError("state mismatch")
token_resp = _post_form(
TOKEN_URL,
{
"grant_type": "authorization_code",
"client_id": CLIENT_ID,
"code": cb["code"],
"redirect_uri": redirect_uri,
"code_verifier": code_verifier,
},
)
access_token = (token_resp.get("access_token") or "").strip()
refresh_token = (token_resp.get("refresh_token") or "").strip()
id_token = (token_resp.get("id_token") or "").strip()
expires_in = _to_int(token_resp.get("expires_in"))
claims = _jwt_claims_no_verify(id_token)
email = str(claims.get("email") or "").strip()
auth_claims = claims.get("https://api.openai.com/auth") or {}
account_id = str(auth_claims.get("chatgpt_account_id") or "").strip()
now = int(time.time())
expired_rfc3339 = time.strftime(
"%Y-%m-%dT%H:%M:%SZ", time.gmtime(now + max(expires_in, 0))
)
now_rfc3339 = time.strftime("%Y-%m-%dT%H:%M:%SZ", time.gmtime(now))
config = {
"id_token": id_token,
"access_token": access_token,
"refresh_token": refresh_token,
"account_id": account_id,
"last_refresh": now_rfc3339,
"email": email,
"type": "codex",
"expired": expired_rfc3339,
}
return json.dumps(config, ensure_ascii=False, separators=(",", ":"))
# ==========================================
# 核心注册逻辑
# ==========================================
def run(proxy: Optional[str]) -> Optional[str]:
proxies: Any = None
if proxy:
proxies = {"http": proxy, "https": proxy}
s = requests.Session(proxies=proxies, impersonate="chrome")
try:
trace = s.get("https://cloudflare.com/cdn-cgi/trace", timeout=10)
trace = trace.text
loc_re = re.search(r"^loc=(.+)$", trace, re.MULTILINE)
loc = loc_re.group(1) if loc_re else None
print(f"[*] 当前 IP 所在地: {loc}")
if loc == "CN" or loc == "HK":
raise RuntimeError("检查代理哦w - 所在地不支持")
except Exception as e:
print(f"[Error] 网络连接检查失败: {e}")
return None
email, dev_token = get_email_and_token(proxies)
if not email or not dev_token:
return None
print(f"[*] 成功获取 Mail.tm 邮箱与授权: {email}")
oauth = generate_oauth_url()
url = oauth.auth_url
try:
resp = s.get(url, timeout=15)
did = s.cookies.get("oai-did")
print(f"[*] Device ID: {did}")
signup_body = f'{{"username":{{"value":"{email}","kind":"email"}},"screen_hint":"signup"}}'
sen_req_body = f'{{"p":"","id":"{did}","flow":"authorize_continue"}}'
sen_resp = requests.post(
"https://sentinel.openai.com/backend-api/sentinel/req",
headers={
"origin": "https://sentinel.openai.com",
"referer": "https://sentinel.openai.com/backend-api/sentinel/frame.html?sv=20260219f9f6",
"content-type": "text/plain;charset=UTF-8",
},
data=sen_req_body,
proxies=proxies,
impersonate="chrome",
timeout=15,
)
if sen_resp.status_code != 200:
print(f"[Error] Sentinel 异常拦截,状态码: {sen_resp.status_code}")
return None
sen_token = sen_resp.json()["token"]
sentinel = f'{{"p": "", "t": "", "c": "{sen_token}", "id": "{did}", "flow": "authorize_continue"}}'
signup_resp = s.post(
"https://auth.openai.com/api/accounts/authorize/continue",
headers={
"referer": "https://auth.openai.com/create-account",
"accept": "application/json",
"content-type": "application/json",
"openai-sentinel-token": sentinel,
},
data=signup_body,
)
print(f"[*] 提交注册表单状态: {signup_resp.status_code}")
otp_resp = s.post(
"https://auth.openai.com/api/accounts/passwordless/send-otp",
headers={
"referer": "https://auth.openai.com/create-account/password",
"accept": "application/json",
"content-type": "application/json",
},
)
print(f"[*] 验证码发送状态: {otp_resp.status_code}")
code = get_oai_code(dev_token, email, proxies)
if not code:
return None
code_body = f'{{"code":"{code}"}}'
code_resp = s.post(
"https://auth.openai.com/api/accounts/email-otp/validate",
headers={
"referer": "https://auth.openai.com/email-verification",
"accept": "application/json",
"content-type": "application/json",
},
data=code_body,
)
print(f"[*] 验证码校验状态: {code_resp.status_code}")
create_account_body = '{"name":"Neo","birthdate":"2000-02-20"}'
create_account_resp = s.post(
"https://auth.openai.com/api/accounts/create_account",
headers={
"referer": "https://auth.openai.com/about-you",
"accept": "application/json",
"content-type": "application/json",
},
data=create_account_body,
)
create_account_status = create_account_resp.status_code
print(f"[*] 账户创建状态: {create_account_status}")
if create_account_status != 200:
print(create_account_resp.text)
return None
auth_cookie = s.cookies.get("oai-client-auth-session")
if not auth_cookie:
print("[Error] 未能获取到授权 Cookie")
return None
auth_json = _decode_jwt_segment(auth_cookie.split(".")[0])
workspaces = auth_json.get("workspaces") or []
if not workspaces:
print("[Error] 授权 Cookie 里没有 workspace 信息")
return None
workspace_id = str((workspaces[0] or {}).get("id") or "").strip()
if not workspace_id:
print("[Error] 无法解析 workspace_id")
return None
select_body = f'{{"workspace_id":"{workspace_id}"}}'
select_resp = s.post(
"https://auth.openai.com/api/accounts/workspace/select",
headers={
"referer": "https://auth.openai.com/sign-in-with-chatgpt/codex/consent",
"content-type": "application/json",
},
data=select_body,
)
if select_resp.status_code != 200:
print(f"[Error] 选择 workspace 失败,状态码: {select_resp.status_code}")
print(select_resp.text)
return None
continue_url = str((select_resp.json() or {}).get("continue_url") or "").strip()
if not continue_url:
print("[Error] workspace/select 响应里缺少 continue_url")
return None
current_url = continue_url
for _ in range(6):
final_resp = s.get(current_url, allow_redirects=False, timeout=15)
location = final_resp.headers.get("Location") or ""
if final_resp.status_code not in [301, 302, 303, 307, 308]:
break
if not location:
break
next_url = urllib.parse.urljoin(current_url, location)
if "code=" in next_url and "state=" in next_url:
return submit_callback_url(
callback_url=next_url,
code_verifier=oauth.code_verifier,
redirect_uri=oauth.redirect_uri,
expected_state=oauth.state,
)
current_url = next_url
print("[Error] 未能在重定向链中捕获到最终 Callback URL")
return None
except Exception as e:
print(f"[Error] 运行时发生错误: {e}")
return None
def main() -> None:
parser = argparse.ArgumentParser(description="OpenAI 自动注册脚本")
parser.add_argument(
"--proxy", default="", help="代理地址,如 http://127.0.0.1:7890"
)
parser.add_argument("--once", action="store_true", help="只运行一次")
parser.add_argument("--sleep-min", type=int, default=5, help="循环模式最短等待秒数")
parser.add_argument(
"--sleep-max", type=int, default=20, help="循环模式最长等待秒数"
)
args = parser.parse_args()
sleep_min = max(1, args.sleep_min)
sleep_max = max(sleep_min, args.sleep_max)
count = 0
print("[Info] Yasal's Seamless OpenAI Auto-Registrar Started for ZJH")
while True:
count += 1
print(
f"\n[{datetime.now().strftime('%H:%M:%S')}] >>> 开始第 {count} 次注册流程 <<<"
)
try:
token_json = run(args.proxy)
if token_json:
try:
t_data = json.loads(token_json)
fname_email = t_data.get("email", "unknown").replace("@", "_")
except Exception:
fname_email = "unknown"
file_name = f"token_{fname_email}_{int(time.time())}.json"
with open(file_name, "w", encoding="utf-8") as f:
f.write(token_json)
print(f"[*] 成功! Token 已保存至: {file_name}")
else:
print("[-] 本次注册失败。")
except Exception as e:
print(f"[Error] 发生未捕获异常: {e}")
if args.once:
break
wait_time = random.randint(sleep_min, sleep_max)
print(f"[*] 休息 {wait_time} 秒...")
time.sleep(wait_time)
if __name__ == "__main__":
main()

4
requirements.txt Normal file
View File

@@ -0,0 +1,4 @@
certifi>=2020.12.5
cffi>=1.14.0
curl_cffi>=0.5.0
pycparser>=2.20

View File

@@ -0,0 +1 @@
{"id_token":"eyJhbGciOiJSUzI1NiIsImtpZCI6ImIxZGQzZjhmLTlhYWQtNDdmZS1iMGU3LWVkYjAwOTc3N2Q2YiIsInR5cCI6IkpXVCJ9.eyJhdF9oYXNoIjoiZHo5eEtJYzlrMGUzcGUwaXozQUM1USIsImF1ZCI6WyJhcHBfRU1vYW1FRVo3M2YwQ2tYYVhwN2hyYW5uIl0sImF1dGhfcHJvdmlkZXIiOiJwYXNzd29yZGxlc3MiLCJhdXRoX3RpbWUiOjE3NzI4OTI5MTYsImVtYWlsIjoib2MzZmJhYzEwYzdiQGRvbGxpY29ucy5jb20iLCJlbWFpbF92ZXJpZmllZCI6dHJ1ZSwiZXhwIjoxNzcyODk2NTI4LCJodHRwczovL2FwaS5vcGVuYWkuY29tL2F1dGgiOnsiY2hhdGdwdF9hY2NvdW50X2lkIjoiZDQxY2MyOGEtYjdiOS00MDE1LThhOTUtYzAwMDc2ZjhjN2VhIiwiY2hhdGdwdF9wbGFuX3R5cGUiOiJmcmVlIiwiY2hhdGdwdF9zdWJzY3JpcHRpb25fYWN0aXZlX3N0YXJ0IjpudWxsLCJjaGF0Z3B0X3N1YnNjcmlwdGlvbl9hY3RpdmVfdW50aWwiOm51bGwsImNoYXRncHRfc3Vic2NyaXB0aW9uX2xhc3RfY2hlY2tlZCI6IjIwMjYtMDMtMDdUMTQ6MTU6MTUuOTk4NDg5KzAwOjAwIiwiY2hhdGdwdF91c2VyX2lkIjoidXNlci1yZk9GdWdTeU81NDMyZTdDa3dkR1gydGEiLCJncm91cHMiOltdLCJvcmdhbml6YXRpb25zIjpbeyJpZCI6Im9yZy1zVkZ5R21tbXhhcjFBWnpEbWpMOWxiT08iLCJpc19kZWZhdWx0Ijp0cnVlLCJyb2xlIjoib3duZXIiLCJ0aXRsZSI6IlBlcnNvbmFsIn1dLCJ1c2VyX2lkIjoidXNlci1yZk9GdWdTeU81NDMyZTdDa3dkR1gydGEifSwiaWF0IjoxNzcyODkyOTI4LCJpc3MiOiJodHRwczovL2F1dGgub3BlbmFpLmNvbSIsImp0aSI6ImE4OTc0MGZhLTQ4YWItNDU3YS1hZTA4LWZiYzgwZGQxYjhkOCIsInJhdCI6MTc3Mjg5Mjg4MSwic2lkIjoiYmI2Y2YzZjMtYTY2NS00NDA5LTk3YzktMjYzYjgwMmViMWQ3Iiwic3ViIjoiYXV0aDB8MTF4MmNlb2xIaEJ1MHBJYTFURHUySnIxIn0.sEwGrpWiUhkwDGLGfG7b_ggN6ux_VBfpVv7QmUFhoISoGK9_UX-ciennCkYHfDDPQHUC_Wth_7rwjdeq0fThtwsDZiBWnuNK6jBBLkbUJabNW3jCOQcyYTeQNUFuSSFVLF2B0GjNvZ46QO7h0VXybZdXvdg4f1_04eUwPkwT0r9EELN2sdWW57IYbuhwyi4Xu7eK9wFVb4b2Pjvptcl1uzdAd1sJg5KDXMi5NRmI8c9NV5Kq7p700a5svUDtFIwfCaKAJfaIrqL8u-PdxaUeu7SEqAiXVWzcF8hjsikTjyMbsNS1Jwehbogzv8cEcnzdK6lvuy2zRCjKej0Kj2SJPF22AwP4gNbI8r-7oYO4-pbvc-TST5bSVp2jh16YWp7_GB1mmZJsPcU7ZjKW1FrncDCvlFbBu5_u_BDeklBucy0EGdS_H1-EiLS6_QpwtX0jHaOGNAR2D0PngensL3rl1ItKjxeM9U6a41eQz4__mHq87ANRkCXzDbZ3Z6yu420eZkXnW-1hKik7vdJghjPgGFAvUC2_Z8YE4y0xhveKN9rdOtygUTIq6bNKBYAyuh5PcQqQZp1e2XceV1h8R1H4AR8ZJpu6o2y9WKcbTyqIxFepZ7Afhfxf6ZRy3TzwPrkiffsOlUHkSJTjitmvnOrJ5VQ81fWFhH0lEOJErFcYtHI","access_token":"eyJhbGciOiJSUzI1NiIsImtpZCI6IjE5MzQ0ZTY1LWJiYzktNDRkMS1hOWQwLWY5NTdiMDc5YmQwZSIsInR5cCI6IkpXVCJ9.eyJhdWQiOlsiaHR0cHM6Ly9hcGkub3BlbmFpLmNvbS92MSJdLCJjbGllbnRfaWQiOiJhcHBfRU1vYW1FRVo3M2YwQ2tYYVhwN2hyYW5uIiwiZXhwIjoxNzczNzU2OTI5LCJodHRwczovL2FwaS5vcGVuYWkuY29tL2F1dGgiOnsiY2hhdGdwdF9hY2NvdW50X2lkIjoiZDQxY2MyOGEtYjdiOS00MDE1LThhOTUtYzAwMDc2ZjhjN2VhIiwiY2hhdGdwdF9hY2NvdW50X3VzZXJfaWQiOiJ1c2VyLXJmT0Z1Z1N5TzU0MzJlN0Nrd2RHWDJ0YV9fZDQxY2MyOGEtYjdiOS00MDE1LThhOTUtYzAwMDc2ZjhjN2VhIiwiY2hhdGdwdF9jb21wdXRlX3Jlc2lkZW5jeSI6Im5vX2NvbnN0cmFpbnQiLCJjaGF0Z3B0X3BsYW5fdHlwZSI6ImZyZWUiLCJjaGF0Z3B0X3VzZXJfaWQiOiJ1c2VyLXJmT0Z1Z1N5TzU0MzJlN0Nrd2RHWDJ0YSIsInVzZXJfaWQiOiJ1c2VyLXJmT0Z1Z1N5TzU0MzJlN0Nrd2RHWDJ0YSJ9LCJodHRwczovL2FwaS5vcGVuYWkuY29tL3Byb2ZpbGUiOnsiZW1haWwiOiJvYzNmYmFjMTBjN2JAZG9sbGljb25zLmNvbSIsImVtYWlsX3ZlcmlmaWVkIjp0cnVlfSwiaWF0IjoxNzcyODkyOTI4LCJpc3MiOiJodHRwczovL2F1dGgub3BlbmFpLmNvbSIsImp0aSI6ImRmZDgwMjAzLWVmMzgtNDM1OS04YTU4LWI4MjRlYmU4OWZhYyIsIm5iZiI6MTc3Mjg5MjkyOCwicHdkX2F1dGhfdGltZSI6MTc3Mjg5MjkxNTk5OCwic2NwIjpbIm9wZW5pZCIsImVtYWlsIiwicHJvZmlsZSIsIm9mZmxpbmVfYWNjZXNzIl0sInNlc3Npb25faWQiOiJhdXRoc2Vzc19USWJQQmZhNUMxMm9obUhoQjZrOHFDc3UiLCJzbCI6dHJ1ZSwic3ViIjoiYXV0aDB8MTF4MmNlb2xIaEJ1MHBJYTFURHUySnIxIn0.PublQl0TrPL8pS4MF3i_q-gDVdJS7o3BP415hRBiDnktfVBMpz6KKh1uFvT2gWPAZbYGk4JnqICX9A_j4TRnoH_Z-bhVTrMFm67RVxtqFTmSJvGRGxGnY7HhZu3fyYytm1zYqaAGm9rYyzQk9SJUKalbygp8aGpLO8xruScTgIS4ez4M5e7iR-CLXbGirGdyt8VZWGKvN0eQM38C6SsU2b1LMvOiCLGNTKUa8qk54F23D-FnNexAjaTR8EUp4LA_5ep9N7IQOTGlWnvEPWDsPVa7TE_ldUEMrERk95BDAHsivYy_-1bGpos_PL14jSzy68gLWxorhsm9VlZUgwmpCCby3b9SHTRSbh3M0zsyz1MWObsPj85n3UbGVFLJLfdoP4HqnmMRmPRRF7MIhp6YPiTJAuxgpUTpsf16lfrhHsDzH79u8_T3W3QJZvloUpxLBKHjqWBjDzjK_u1yuxAr1uBamgDbvTK7hh3MA56VnU8S4WlLbAX0YXHwuSMY8yUC-cEZRbKwUP45jGwCmIMJ5-mrpFcal7Bxyu5NEtytTOqar3xkcK7JLVF7Y23sZMwYIWRDy_7VApHG08B375qCp1y2kC1le1IA7xXTHndJoPeF7iR5oc_h70-5dLUJxinrpXPLJIk_eBARuK4wCv19W7Q_3d4rOac0IlfyLxIbq8s","refresh_token":"rt_nkXm0_oG7VeJzUbL6GsKXf3dt_Prz8WBVty8zkq9A5E.NfJJKG2KB_rCDQr7aTRRG4nUl28TNog34F1QH4JyIm8","account_id":"d41cc28a-b7b9-4015-8a95-c00076f8c7ea","last_refresh":"2026-03-07T14:15:29Z","email":"oc3fbac10c7b@dollicons.com","type":"codex","expired":"2026-03-17T14:15:29Z"}

View File

@@ -0,0 +1 @@
{"id_token":"eyJhbGciOiJSUzI1NiIsImtpZCI6ImIxZGQzZjhmLTlhYWQtNDdmZS1iMGU3LWVkYjAwOTc3N2Q2YiIsInR5cCI6IkpXVCJ9.eyJhdF9oYXNoIjoieHd3dThLZDlfeUthUnd6UWZjV29kQSIsImF1ZCI6WyJhcHBfRU1vYW1FRVo3M2YwQ2tYYVhwN2hyYW5uIl0sImF1dGhfcHJvdmlkZXIiOiJwYXNzd29yZGxlc3MiLCJhdXRoX3RpbWUiOjE3NzI4OTMxMzQsImVtYWlsIjoib2M0NTlkY2M1MTExQGRvbGxpY29ucy5jb20iLCJlbWFpbF92ZXJpZmllZCI6dHJ1ZSwiZXhwIjoxNzcyODk2NzQ0LCJodHRwczovL2FwaS5vcGVuYWkuY29tL2F1dGgiOnsiY2hhdGdwdF9hY2NvdW50X2lkIjoiMzYxOTY3M2YtZTU1Yy00ZmI2LTk5NTctNDljYjE4MzEzN2EyIiwiY2hhdGdwdF9wbGFuX3R5cGUiOiJmcmVlIiwiY2hhdGdwdF9zdWJzY3JpcHRpb25fYWN0aXZlX3N0YXJ0IjpudWxsLCJjaGF0Z3B0X3N1YnNjcmlwdGlvbl9hY3RpdmVfdW50aWwiOm51bGwsImNoYXRncHRfc3Vic2NyaXB0aW9uX2xhc3RfY2hlY2tlZCI6IjIwMjYtMDMtMDdUMTQ6MTg6NTQuNTUzMjk4KzAwOjAwIiwiY2hhdGdwdF91c2VyX2lkIjoidXNlci1pcXVOWU5RSENhME5zQndSWW1aa1FUenciLCJncm91cHMiOltdLCJvcmdhbml6YXRpb25zIjpbeyJpZCI6Im9yZy1ERXpPSEVsaVE5VENTYzRGakE0WEpNTzQiLCJpc19kZWZhdWx0Ijp0cnVlLCJyb2xlIjoib3duZXIiLCJ0aXRsZSI6IlBlcnNvbmFsIn1dLCJ1c2VyX2lkIjoidXNlci1pcXVOWU5RSENhME5zQndSWW1aa1FUencifSwiaWF0IjoxNzcyODkzMTQ0LCJpc3MiOiJodHRwczovL2F1dGgub3BlbmFpLmNvbSIsImp0aSI6Ijc1M2E0MDIzLTcyNDMtNGQ2Ny05NzNkLTQ2NzczOTlmNTU4YyIsInJhdCI6MTc3Mjg5MzA5Niwic2lkIjoiMTEyZGNhNzgtMWNjNS00MDVlLTg0MzctMzljOWYwNTI4YjJkIiwic3ViIjoiYXV0aDB8QVlwVzcyV1BFbXltVHdFZ1hQeXZDb3dYIn0.guHDLz2n-wmtmct45jMUfgSiCJfRVZLjsOdcK9tZj_239aBtWTo11MIvXpFY1LJCRfJNxPH-f5XJSXDSzwB_X4B_G4U2oGyo4C0el6WB0klbJKbgArcACPu-k-yQ2TkX8LDTKVNvhzuz9Ik_t8TSCYNRadT2sU1HXSOk3Wu_lNjkeL4ZCCGBdNv3nxEIjLwovRyAAri6c1kTNf9XS3ac3-1BfEn1iWzcJQ3BZIQDKJlUr7ystz-WCg6bw8HfmuVhB4KY_dCi1D1Iafua6asRjOB49noQSzVeaHjhAxQN3EX6dV3g3Kd6oAsI6NkmXnfV4TBqio0dSwEN5qbmiQEOy6edfKIfzdGwXLXtpJQHrLWP6H4E1BW2hHqocPhdj72ok4Y2S7efyHT9NrQ1zl8vbnH-kFRvQff4-PP11MqWxE7vXJlE0fhkzSh2I8mKOCVqha7GofWaUnMej-CRN7fagpAis-BcMpv8Godf-wKq_FCptwXexbf0FCNcrOBE3O82sLoZduYA_tjzTb04O_a98KDsSwm9QITa1pyzu1TXmoVpiRGNZBt0hXwNJ1qQyBte79S1tj2UKvk26g6k69nan8jydi3z5R1IO0a2v0rrRFYomNUxYECzSsIK6sNL-CEzj2dshLx--wTPO0UWyeak6y6FPv7rCALujn3pyDLYvXg","access_token":"eyJhbGciOiJSUzI1NiIsImtpZCI6IjE5MzQ0ZTY1LWJiYzktNDRkMS1hOWQwLWY5NTdiMDc5YmQwZSIsInR5cCI6IkpXVCJ9.eyJhdWQiOlsiaHR0cHM6Ly9hcGkub3BlbmFpLmNvbS92MSJdLCJjbGllbnRfaWQiOiJhcHBfRU1vYW1FRVo3M2YwQ2tYYVhwN2hyYW5uIiwiZXhwIjoxNzczNzU3MTQ1LCJodHRwczovL2FwaS5vcGVuYWkuY29tL2F1dGgiOnsiY2hhdGdwdF9hY2NvdW50X2lkIjoiMzYxOTY3M2YtZTU1Yy00ZmI2LTk5NTctNDljYjE4MzEzN2EyIiwiY2hhdGdwdF9hY2NvdW50X3VzZXJfaWQiOiJ1c2VyLWlxdU5ZTlFIQ2EwTnNCd1JZbVprUVR6d19fMzYxOTY3M2YtZTU1Yy00ZmI2LTk5NTctNDljYjE4MzEzN2EyIiwiY2hhdGdwdF9jb21wdXRlX3Jlc2lkZW5jeSI6Im5vX2NvbnN0cmFpbnQiLCJjaGF0Z3B0X3BsYW5fdHlwZSI6ImZyZWUiLCJjaGF0Z3B0X3VzZXJfaWQiOiJ1c2VyLWlxdU5ZTlFIQ2EwTnNCd1JZbVprUVR6dyIsInVzZXJfaWQiOiJ1c2VyLWlxdU5ZTlFIQ2EwTnNCd1JZbVprUVR6dyJ9LCJodHRwczovL2FwaS5vcGVuYWkuY29tL3Byb2ZpbGUiOnsiZW1haWwiOiJvYzQ1OWRjYzUxMTFAZG9sbGljb25zLmNvbSIsImVtYWlsX3ZlcmlmaWVkIjp0cnVlfSwiaWF0IjoxNzcyODkzMTQ0LCJpc3MiOiJodHRwczovL2F1dGgub3BlbmFpLmNvbSIsImp0aSI6ImQ1YWI3YTQyLTNjYjQtNDljZS04M2UzLTM3NTY3YTg0NzQzZiIsIm5iZiI6MTc3Mjg5MzE0NCwicHdkX2F1dGhfdGltZSI6MTc3Mjg5MzEzNDU1Mywic2NwIjpbIm9wZW5pZCIsImVtYWlsIiwicHJvZmlsZSIsIm9mZmxpbmVfYWNjZXNzIl0sInNlc3Npb25faWQiOiJhdXRoc2Vzc19pUVB2MlBNOGtmeFViUTZKamlXVjc3d3YiLCJzbCI6dHJ1ZSwic3ViIjoiYXV0aDB8QVlwVzcyV1BFbXltVHdFZ1hQeXZDb3dYIn0.siZQ2v36ydWFx9pmp7dG13I7GHVaKm3v0dyHEUuLCWWRoxyzh2rC5zC07KtlQbZ5otMsAV5AyTxk3l_4a2bRbn3xiD4IpLSqikGrZBPoGtMq3cHyaVlhdPKwsVRnOCmHqNcOsd8yGCxH5H7ifeq8YA9N9hfHMlArRCCKML0aRpRMUUt6Sudi3DrJ5gR4dkWGGMNYStf_Ra3MryWYnRIwJP1nbRNyXivlnBr6I-TWfdyPujzZbEGgimlG4KSjQD-4YmB8eU3hSxACNFdtqIdZEusqjURiJxToJ9fHL78KBrWvFkG3vTKjScRW5JZ1YlcULLvaAoFFLmDUSpFv9EtmoqGwVctDAteOJO7nf90TcMKWwmc2tYAWDAt8vPtpyCD4fQGWWYfLipKW8-op8qvK-Bjbjp3But5JS74_5TWpwnXHoCQGUS273lZG4uLemw7rHR024mE9Z18GmQ1BzTJdp5Q5z2LXfuLCSnBHBHVV6Tg-Dt2ymRGDa_Ofz7EQizaB3NC08qFJxg7I7xQw7JR4qpxdt0mc5oyso6K1xAXWhJF8zwbeLVs_1HIH9_o-TRCp-n58x2jApKIGfCQI-_eFM_rRE3CQKE1lahDcY3k-7VEzbjQjYFvI1J_nseKkK81frKKGWqjMPksXYKTUIloLgyTFMhJqVQJiTaIINu05WP8","refresh_token":"rt_dGLNVN104mxy5ildBfv0DuDqQQw2YENwmZ6ygiIJfR4.Avc01tqAOBR1wXjJCrDIennFQI6XX2YAfgnMSa5QTAM","account_id":"3619673f-e55c-4fb6-9957-49cb183137a2","last_refresh":"2026-03-07T14:19:05Z","email":"oc459dcc5111@dollicons.com","type":"codex","expired":"2026-03-17T14:19:05Z"}

View File

@@ -0,0 +1 @@
{"id_token":"eyJhbGciOiJSUzI1NiIsImtpZCI6ImIxZGQzZjhmLTlhYWQtNDdmZS1iMGU3LWVkYjAwOTc3N2Q2YiIsInR5cCI6IkpXVCJ9.eyJhdF9oYXNoIjoiWV91dTRZNzIzRVV2bi1Ua1RxSEJTUSIsImF1ZCI6WyJhcHBfRU1vYW1FRVo3M2YwQ2tYYVhwN2hyYW5uIl0sImF1dGhfcHJvdmlkZXIiOiJwYXNzd29yZGxlc3MiLCJhdXRoX3RpbWUiOjE3NzI4OTI4MjAsImVtYWlsIjoib2M3ZjlhZjBmNzViQGRvbGxpY29ucy5jb20iLCJlbWFpbF92ZXJpZmllZCI6dHJ1ZSwiZXhwIjoxNzcyODk2NDMzLCJodHRwczovL2FwaS5vcGVuYWkuY29tL2F1dGgiOnsiY2hhdGdwdF9hY2NvdW50X2lkIjoiZTlhNTg1MDctYzUwZS00M2JjLTk2OWItZjM0NmJmMWIzYTk1IiwiY2hhdGdwdF9wbGFuX3R5cGUiOiJmcmVlIiwiY2hhdGdwdF9zdWJzY3JpcHRpb25fYWN0aXZlX3N0YXJ0IjpudWxsLCJjaGF0Z3B0X3N1YnNjcmlwdGlvbl9hY3RpdmVfdW50aWwiOm51bGwsImNoYXRncHRfc3Vic2NyaXB0aW9uX2xhc3RfY2hlY2tlZCI6IjIwMjYtMDMtMDdUMTQ6MTM6NDAuNjI3MTc3KzAwOjAwIiwiY2hhdGdwdF91c2VyX2lkIjoidXNlci0wVmg5NTBla2ZkeGJveVV1WTV2bnFnUFMiLCJncm91cHMiOltdLCJvcmdhbml6YXRpb25zIjpbeyJpZCI6Im9yZy1uOTNjM0QzM1RJNkdsTERwSzhYV0NCaWIiLCJpc19kZWZhdWx0Ijp0cnVlLCJyb2xlIjoib3duZXIiLCJ0aXRsZSI6IlBlcnNvbmFsIn1dLCJ1c2VyX2lkIjoidXNlci0wVmg5NTBla2ZkeGJveVV1WTV2bnFnUFMifSwiaWF0IjoxNzcyODkyODMzLCJpc3MiOiJodHRwczovL2F1dGgub3BlbmFpLmNvbSIsImp0aSI6IjBhOTBmZTRiLTFkNTctNGRkYi1hMDI0LTA1NTU2Mjg2ZjRiMyIsInJhdCI6MTc3Mjg5Mjc4NSwic2lkIjoiNmZhODQ2OTMtZTkxNy00MGFhLWJjYmItNTBhNDcxNDMzYmZlIiwic3ViIjoiYXV0aDB8d1QxbjhPUUdYTWp3TUtRWUVITU5IQnVhIn0.LHqYxaCm1mq336KSOL6B985DUAaXd-dNfgXzFBxthqA8-aS8s2kPQbuzqCtzlYJQfS1kPhnkxZbf8FHlcviJS_eVM8bD5J1yrihdc5nCX5DR9HCCRmM9Salt0BKkL0E3AtUv5ezO3mX-Bl4GF3k8TnmXWlrgKrkugEo9jidhfftBVUSt_bfLMD2GSEY8yGCpAPtl3yTOabhZRifNjS8_aJXztgqkqh2Ufng7UNswi5LB7KEnDABY4oYS6xYvZ8bxDa2YYlXu_ItHQPNE-d5mTnKf3vfTPkBt73n_Dx8fZDi2iXu7SS_EaG_-xqJyOHasivliGiWbOuRKGSNFn0EEFTJnmCNYeBcxYhAqPEIk8dSGjsYnTqacXb35n8mNbcqUjILtMxcrCvKdebAE8Dhgg00LQ7NDxQehO5307IdXISqBU7Rgvd_ytUYN5h8kHfoSGucsPyR_iJ3dhFqzIBELx9hxWh5jLLHEQai5tyKR_Prdctzz90zEh3t5QO9uWyxPzZxsfOaZBUl5ElN2wxWq7y0zNSwutt9yMNFOPA7lscratHl0FAeQHbtw_hX0n3YOPSKjzyS1PPddS5K86Cn-x3lxbdhEC71v-QSalOnpk92ATsA5EmCcORo4VU3jVqnVYXMZFYi_GTKjr5SDt1DQWzdS_ARiKNosAIzBwTUMcwo","access_token":"eyJhbGciOiJSUzI1NiIsImtpZCI6IjE5MzQ0ZTY1LWJiYzktNDRkMS1hOWQwLWY5NTdiMDc5YmQwZSIsInR5cCI6IkpXVCJ9.eyJhdWQiOlsiaHR0cHM6Ly9hcGkub3BlbmFpLmNvbS92MSJdLCJjbGllbnRfaWQiOiJhcHBfRU1vYW1FRVo3M2YwQ2tYYVhwN2hyYW5uIiwiZXhwIjoxNzczNzU2ODM0LCJodHRwczovL2FwaS5vcGVuYWkuY29tL2F1dGgiOnsiY2hhdGdwdF9hY2NvdW50X2lkIjoiZTlhNTg1MDctYzUwZS00M2JjLTk2OWItZjM0NmJmMWIzYTk1IiwiY2hhdGdwdF9hY2NvdW50X3VzZXJfaWQiOiJ1c2VyLTBWaDk1MGVrZmR4Ym95VXVZNXZucWdQU19fZTlhNTg1MDctYzUwZS00M2JjLTk2OWItZjM0NmJmMWIzYTk1IiwiY2hhdGdwdF9jb21wdXRlX3Jlc2lkZW5jeSI6Im5vX2NvbnN0cmFpbnQiLCJjaGF0Z3B0X3BsYW5fdHlwZSI6ImZyZWUiLCJjaGF0Z3B0X3VzZXJfaWQiOiJ1c2VyLTBWaDk1MGVrZmR4Ym95VXVZNXZucWdQUyIsInVzZXJfaWQiOiJ1c2VyLTBWaDk1MGVrZmR4Ym95VXVZNXZucWdQUyJ9LCJodHRwczovL2FwaS5vcGVuYWkuY29tL3Byb2ZpbGUiOnsiZW1haWwiOiJvYzdmOWFmMGY3NWJAZG9sbGljb25zLmNvbSIsImVtYWlsX3ZlcmlmaWVkIjp0cnVlfSwiaWF0IjoxNzcyODkyODMzLCJpc3MiOiJodHRwczovL2F1dGgub3BlbmFpLmNvbSIsImp0aSI6ImY3ZWMwMjg2LWNkNzEtNDU2MC04MzI5LTRlMTI5OThmYTk0ZCIsIm5iZiI6MTc3Mjg5MjgzMywicHdkX2F1dGhfdGltZSI6MTc3Mjg5MjgyMDYyNywic2NwIjpbIm9wZW5pZCIsImVtYWlsIiwicHJvZmlsZSIsIm9mZmxpbmVfYWNjZXNzIl0sInNlc3Npb25faWQiOiJhdXRoc2Vzc19QbDVGeFhpd09iaUxEMXZ1STh3T3duZ0EiLCJzbCI6dHJ1ZSwic3ViIjoiYXV0aDB8d1QxbjhPUUdYTWp3TUtRWUVITU5IQnVhIn0.fN8H2U4HBM_Pr5AKoIIhjYvEWr5Ua3_3L1HQjCzmpzUUIul0KOO0cmWgfW6IcE8vCy2WnAXkyUiEkoUay8afEvGEj2UH1ZwpqjW-3GsPTQxVcmmzNecVtrZjuUyVTeeL-a0yz4czWx0Uak8Y1zxLfOe1JismM9o2U3pppOfq2CkCvBJ1cDmkH-v45Vrw3kNGSBWsROekareEBlQRV0N04mWpvnNmwtkgQc_AB8j3ng-cixxH2w9jrtYsUFpwwGlFEAthw0YdJELYQl3pMsml_2TGxFsjMUrCA33RTAiShoc9eij88C682Xfk1aJg2uIs8vgo3Gw5Qez86r31UGEpX8ZAmHeTFCgq49A_KawZW8VKHXjN9R9caHMQLOjAOjmsJ9NcxkP6MLjqypebpympw3BlMol79VnLyc5UkhbpLb-WDDxAdYi5twIITa0G6kr2fRAQNL099OilZgJQ7zZ2Q9Pdj9FaqUS_ogTI1I9wsAWMYSmo6wIPj5kC8ghVaxjqhf4Iau_LKW9PE2i84mYQme2B0AqLNs8p0t8NlDLzo0xvVZT9LLT9vaDzRuWje6LQmZjx_naGx17AGebvdvO4ZJ4LRUwq3h_6NQwhcSXaNie3sX39F2rGKDEcK8T29GOat9ZONyGrkEq73XH9Gsj2uOk19YsnKG1Ha4gWLiUgcTE","refresh_token":"rt_iqUrcz195Wf2bR8SoxM2VvLf3jVgWvDny6IWldIckiw.fEP6Xj3dUQzdh8CuNdVStkFtNENpNObRKIYzwenacNY","account_id":"e9a58507-c50e-43bc-969b-f346bf1b3a95","last_refresh":"2026-03-07T14:13:53Z","email":"oc7f9af0f75b@dollicons.com","type":"codex","expired":"2026-03-17T14:13:53Z"}

View File

@@ -0,0 +1 @@
{"id_token":"eyJhbGciOiJSUzI1NiIsImtpZCI6ImIxZGQzZjhmLTlhYWQtNDdmZS1iMGU3LWVkYjAwOTc3N2Q2YiIsInR5cCI6IkpXVCJ9.eyJhdF9oYXNoIjoiSl9RWjVTOHptNmQyVEZnVEY5Rm01USIsImF1ZCI6WyJhcHBfRU1vYW1FRVo3M2YwQ2tYYVhwN2hyYW5uIl0sImF1dGhfcHJvdmlkZXIiOiJwYXNzd29yZGxlc3MiLCJhdXRoX3RpbWUiOjE3NzI4OTMwMzgsImVtYWlsIjoib2NiNzYzZmNjMDhlQGRvbGxpY29ucy5jb20iLCJlbWFpbF92ZXJpZmllZCI6dHJ1ZSwiZXhwIjoxNzcyODk2NjQ3LCJodHRwczovL2FwaS5vcGVuYWkuY29tL2F1dGgiOnsiY2hhdGdwdF9hY2NvdW50X2lkIjoiZWQ4Y2Q2ZDEtY2Y5NS00YmUzLTliMDMtNTdlMzVjMjFkMTkyIiwiY2hhdGdwdF9wbGFuX3R5cGUiOiJmcmVlIiwiY2hhdGdwdF9zdWJzY3JpcHRpb25fYWN0aXZlX3N0YXJ0IjpudWxsLCJjaGF0Z3B0X3N1YnNjcmlwdGlvbl9hY3RpdmVfdW50aWwiOm51bGwsImNoYXRncHRfc3Vic2NyaXB0aW9uX2xhc3RfY2hlY2tlZCI6IjIwMjYtMDMtMDdUMTQ6MTc6MTguNDQ2MTkzKzAwOjAwIiwiY2hhdGdwdF91c2VyX2lkIjoidXNlci1wdTJHbFdud2NqRFNCY21mNGhoanhONG8iLCJncm91cHMiOltdLCJvcmdhbml6YXRpb25zIjpbeyJpZCI6Im9yZy01RUx2Rkt1YVo5ekVNUkZuTDMxaDJ4OWsiLCJpc19kZWZhdWx0Ijp0cnVlLCJyb2xlIjoib3duZXIiLCJ0aXRsZSI6IlBlcnNvbmFsIn1dLCJ1c2VyX2lkIjoidXNlci1wdTJHbFdud2NqRFNCY21mNGhoanhONG8ifSwiaWF0IjoxNzcyODkzMDQ3LCJpc3MiOiJodHRwczovL2F1dGgub3BlbmFpLmNvbSIsImp0aSI6Ijg5MDM0N2I3LTA3YmMtNDBjMy1iZjUzLTBmMDk2MDRjNTU2NyIsInJhdCI6MTc3Mjg5MzAwNiwic2lkIjoiZjJkMzQyY2QtMTUyMy00ZTBlLThlYjktYjQ4ZTQwNTM4ZWM0Iiwic3ViIjoiYXV0aDB8MWdYVmt3UnhGeVNJZ2JhYU0yUktqZlRxIn0.fQG-kICKq6YorcnHypFwW7nlRGqfPx4qdb5pneLEnU2nxhXROphszkmNmZQnnAMgYjtOykHPm2qesQbGHu6aUBJovzeqT8SRhaPskM9mxjBx3lD94-_MDXJ_RuXZd_Lvyg7g1tnaRdgE3Ms3rjusxKSvwTGoFG0E1vT0F9o8TepZUvH7g8tPZ0BHWG0M5iw1VRqlIOkxFxDYH8zX2z4ag4i9zZ11hp17MhmotzRV5r26HSm9CSCVcnbHo3cDQABmSRE0xsVKYfyixKqmDUb2sYJQ-_4RZCBndIX98oig1Bm0kRB3hnw75Us1wQ-jpnELAdlS1grwy3S5rgta_5dCF0pTgDdwhewhanj1u0koM3w9EVH6PYVqNNXrVLK4tDjkmfM6FIRHdNJU75b4Hh2qyGURY-QYaJcbeyKUII4cY6IMiVQ57x9NpbjxnvL-cfzHB0liO3cNYD267FfSfJgWJx5IdsFuEGi5EeZ5EKL7_GxNpmuOnWOmEX0EEgydFcjPV_9EhowWNSfg89vFjA0lA2T_jMKEHvhk1IEaqJBPA31kMf-QrhTLJckOyGgRHzOZoKJt8yb5C3QPkYhtiS2AbhYiB9wzRCeOXWU6e1C1NBABp7FIivcX22PtKDSl_G2szHbWwhy70O8s7M44aWB_OywXT6Z-NfAQxgNHrS6r1aM","access_token":"eyJhbGciOiJSUzI1NiIsImtpZCI6IjE5MzQ0ZTY1LWJiYzktNDRkMS1hOWQwLWY5NTdiMDc5YmQwZSIsInR5cCI6IkpXVCJ9.eyJhdWQiOlsiaHR0cHM6Ly9hcGkub3BlbmFpLmNvbS92MSJdLCJjbGllbnRfaWQiOiJhcHBfRU1vYW1FRVo3M2YwQ2tYYVhwN2hyYW5uIiwiZXhwIjoxNzczNzU3MDQ4LCJodHRwczovL2FwaS5vcGVuYWkuY29tL2F1dGgiOnsiY2hhdGdwdF9hY2NvdW50X2lkIjoiZWQ4Y2Q2ZDEtY2Y5NS00YmUzLTliMDMtNTdlMzVjMjFkMTkyIiwiY2hhdGdwdF9hY2NvdW50X3VzZXJfaWQiOiJ1c2VyLXB1MkdsV253Y2pEU0JjbWY0aGhqeE40b19fZWQ4Y2Q2ZDEtY2Y5NS00YmUzLTliMDMtNTdlMzVjMjFkMTkyIiwiY2hhdGdwdF9jb21wdXRlX3Jlc2lkZW5jeSI6Im5vX2NvbnN0cmFpbnQiLCJjaGF0Z3B0X3BsYW5fdHlwZSI6ImZyZWUiLCJjaGF0Z3B0X3VzZXJfaWQiOiJ1c2VyLXB1MkdsV253Y2pEU0JjbWY0aGhqeE40byIsInVzZXJfaWQiOiJ1c2VyLXB1MkdsV253Y2pEU0JjbWY0aGhqeE40byJ9LCJodHRwczovL2FwaS5vcGVuYWkuY29tL3Byb2ZpbGUiOnsiZW1haWwiOiJvY2I3NjNmY2MwOGVAZG9sbGljb25zLmNvbSIsImVtYWlsX3ZlcmlmaWVkIjp0cnVlfSwiaWF0IjoxNzcyODkzMDQ3LCJpc3MiOiJodHRwczovL2F1dGgub3BlbmFpLmNvbSIsImp0aSI6Ijc2NGI2NzViLTk4MDgtNDIzOS1iMWY4LTYwZTUzMzQ0OTU0ZSIsIm5iZiI6MTc3Mjg5MzA0NywicHdkX2F1dGhfdGltZSI6MTc3Mjg5MzAzODQ0Niwic2NwIjpbIm9wZW5pZCIsImVtYWlsIiwicHJvZmlsZSIsIm9mZmxpbmVfYWNjZXNzIl0sInNlc3Npb25faWQiOiJhdXRoc2Vzc19kdWhkOUJJTnNGZTJCclVsR1JMa0VwUFIiLCJzbCI6dHJ1ZSwic3ViIjoiYXV0aDB8MWdYVmt3UnhGeVNJZ2JhYU0yUktqZlRxIn0.wYzFOxoXY82L8I1CdFx9-b5ALglHjkcG045u0NGQtoKPuIWVAFFs_M221PgOhWYl3_w9Z-Y8OQ7fZq93gTN0r3W9P5XlGvpzCZYRaTueoNU7Ck4SJL8fq2z_2C7frQZlJVY6N_XQVM915k8U3WGzFQtBAGP5-s8dEoPMsPuenAPArntZQLVNpTzUXAN8XDccnYMMYmGDaYsy5wjlO3QCHRlrRGqud6sLItTPvvFC4vxPpoy7RqCWSsOFS3Zfa2ZlOLv13Fc2_KnVBcOFXwa4p0vSDGf75piRfp2fyFHDfmWRkbWRqcjjuFhNAcdy_VolRAJzSDu4X0q3k2B7ocKkyOJkwOXCxLMSGna6UcIZrlK8XxAxt8nBDSZo-6fKYwc25j6ZfuIG4TpQgvdwR497QXOwZjd7tUFiUE603-6XA3jvBQXE1Oeg-Ls3X_uApbyxRw_Zpns9QTS5H1Gt0HXv2YAJJ_g3rh8C_THCMO9DfaWC8lkSFDuQ-ZSpABTJocxFV0gnr_u_s-7BPvxSMWiJOkKe8h_DAQ38Ek9gxOE7SetJiHUnOYItersTKaOFKuUnHn7Gr_nIrH5Y0NtrHn_D8Un2caNyp63OkiC0vlvXrdZsIJQFbybK1d6V7nf3TE4yTk66lLYe1Ki8cM_KF1Hbh4tW7YNkVoSr_ZJlOeGd_WI","refresh_token":"rt_ulAshjjegNnU3cHsxcKBGd1TPt2tqH1X4nNRnmXbR5s.QiJKaY0Qxma1rqyLwH65njkhTbVT_mN0ite1QMqFIoI","account_id":"ed8cd6d1-cf95-4be3-9b03-57e35c21d192","last_refresh":"2026-03-07T14:17:28Z","email":"ocb763fcc08e@dollicons.com","type":"codex","expired":"2026-03-17T14:17:28Z"}