diff --git a/.env b/.env index 4d982c0..1aed835 100644 --- a/.env +++ b/.env @@ -1,4 +1,12 @@ +CALLBACK_URL: /login-callback HOST: http://localhost:3000 +LOGIN_HINT: "" MCP_CLIENT_ID: client_id MCP_CLIENT_SECRET: client_secret +MCP_ID_TOKEN_SIGNED_RESPONSE_ALG: RS256 MCP_PROVIDER: https://app-test.moncomptepro.beta.gouv.fr/ +MCP_SCOPES: "openid email profile organization" +MCP_USERINFO_SIGNED_RESPONSE_ALG: "" +PORT: 3000 +SITE_TITLE: "Bonjour monde !" +STYLESHEET_URL: https://unpkg.com/bamboo.css diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 618ef63..f99b9df 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -14,6 +14,7 @@ jobs: - uses: actions/checkout@v4 - uses: oven-sh/setup-bun@v1 - run: bun install + - run: bun x tsc --noEmit e2e: runs-on: ubuntu-latest diff --git a/README.md b/README.md index 059b5b4..7cb130f 100644 --- a/README.md +++ b/README.md @@ -15,7 +15,7 @@ This tool is full configured using environment variables. Pull the image: ``` -docker pull rdubigny/moncomptepro-test-client +docker pull ghcr.io/betagouv/moncomptepro-test-client ``` Run the container: @@ -24,7 +24,7 @@ Run the container: docker run -d --rm \ -p 3000:3000 \ -e PORT=3000 \ -rdubigny/moncomptepro-test-client +ghcr.io/betagouv/moncomptepro-test-client ``` ## Run it with Docker Compose @@ -36,7 +36,7 @@ version: "3.5" services: oidc-test-client: - image: rdubigny/moncomptepro-test-client + image: ghcr.io/betagouv/moncomptepro-test-client ports: - 3000:3000 environment: diff --git a/bun.lockb b/bun.lockb index 40e6e4c..b6abecd 100755 Binary files a/bun.lockb and b/bun.lockb differ diff --git a/index.ts b/index.ts index 768e722..216a8b8 100644 --- a/index.ts +++ b/index.ts @@ -1,11 +1,8 @@ // -import fastify_cookie, { type FastifyCookieOptions } from "@fastify/cookie"; -import fastify_formbody from "@fastify/formbody"; -import fastify_session, { type FastifySessionOptions } from "@fastify/session"; -import pointOfView from "@fastify/view"; -import ejs from "ejs"; -import Fastify from "fastify"; +import { Hono, type Env } from "hono"; +import { CookieStore, Session, sessionMiddleware } from "hono-sessions"; +import { logger } from "hono/logger"; import { ok } from "node:assert"; import { env as process_env } from "node:process"; import { @@ -16,6 +13,7 @@ import { } from "openid-client"; import Youch from "youch"; import { z } from "zod"; +import { Index } from "./views"; // @@ -31,7 +29,7 @@ const env = z MCP_SCOPES: z.string().default("openid email profile organization"), MCP_USERINFO_SIGNED_RESPONSE_ALG: z.string().optional(), PORT: z.coerce.number().default(3000), - SITE_TITLE: z.string().default("Bonjour monde !"), + SITE_TITLE: z.string().default("Bonjour monde !"), STYLESHEET_URL: z.string().default("https://unpkg.com/bamboo.css"), }) .parse(process_env); @@ -40,40 +38,61 @@ const redirectUri = `${env.HOST}${env.CALLBACK_URL}`; // -const fastify = Fastify({ logger: true }); -fastify.register(pointOfView, { engine: { ejs } }); -fastify.register(fastify_formbody); -fastify.register(fastify_cookie, {} as FastifyCookieOptions); - -declare module "fastify" { - interface Session { - verifier: string; - userinfo: string; - idtoken: IdTokenClaims; - oauth2token: TokenSet; - } +interface Session_Context extends Env { + Variables: { + session: Session & { + get(key: "verifier"): string; + set(key: "verifier", value: string): void; + } & { + get(key: "userinfo"): string; + set(key: "userinfo", value: string): void; + } & { + get(key: "idtoken"): IdTokenClaims; + set(key: "idtoken", value: IdTokenClaims): void; + } & { + get(key: "oauth2token"): TokenSet; + set(key: "oauth2token", value: TokenSet): void; + }; + }; } -fastify.register(fastify_session, { - cookieName: "mcp_session", - secret: ["key1", "key2"], - cookie: { secure: "auto" }, -} as FastifySessionOptions); - -fastify.get("/", function (req, reply) { - reply.view("/views/index.ejs", { - title: env.SITE_TITLE, - stylesheet_url: env.STYLESHEET_URL, - userinfo: JSON.stringify(req.session.userinfo, null, 2), - idtoken: JSON.stringify(req.session.idtoken, null, 2), - oauth2token: JSON.stringify(req.session.oauth2token, null, 2), - }); +const hono = new Hono(); + +// + +hono.use("*", logger()); + +hono.use( + "*", + sessionMiddleware({ + store: new CookieStore(), + encryptionKey: "a secret with minimum length of 32 characters", + sessionCookieName: "mcp_session", + }), +); + +// + +hono.get("/", ({ html, get }) => { + const session = get("session") || new Session(); + + return html( + Index({ + title: env.SITE_TITLE, + stylesheet_url: env.STYLESHEET_URL, + userinfo: session.get("userinfo"), + idtoken: session.get("idtoken"), + oauth2token: session.get("oauth2token"), + }), + ); }); -fastify.post("/login", async function (req, reply) { +hono.post("/login", async function ({ redirect, get }) { + const session = get("session"); + const client = await getMcpClient(); const code_verifier = generators.codeVerifier(); - req.session.verifier = code_verifier; + session.set("verifier", code_verifier); const code_challenge = generators.codeChallenge(code_verifier); @@ -84,29 +103,31 @@ fastify.post("/login", async function (req, reply) { login_hint: env.LOGIN_HINT, }); - reply.redirect(redirectUrl); + return redirect(redirectUrl); }); -fastify.get(env.CALLBACK_URL, async function (req, reply) { +hono.get(env.CALLBACK_URL, async function ({ req, redirect, get }) { + const session = get("session"); const client = await getMcpClient(); - const params = client.callbackParams(req.raw); + const params = client.callbackParams(req.raw.url); const tokenSet = await client.callback(redirectUri, params, { - code_verifier: req.session.verifier, + code_verifier: session.get("verifier") as string, }); ok(tokenSet.access_token, "Missing tokenSet.access_token"); - req.session.userinfo = await client.userinfo(tokenSet.access_token); - req.session.idtoken = tokenSet.claims(); - req.session.oauth2token = tokenSet; + session.set("userinfo", await client.userinfo(tokenSet.access_token)); + session.set("idtoken", tokenSet.claims()); + session.set("oauth2token", tokenSet); - reply.redirect("/"); + return redirect("/"); }); -fastify.post("/select-organization", async function (req, reply) { +hono.post("/select-organization", async function ({ req, redirect, get }) { + const session = get("session"); const client = await getMcpClient(); const code_verifier = generators.codeVerifier(); - req.session.verifier = code_verifier; + session.set("verifier", code_verifier); const code_challenge = generators.codeChallenge(code_verifier); const redirectUrl = client.authorizationUrl({ @@ -116,13 +137,14 @@ fastify.post("/select-organization", async function (req, reply) { prompt: "select_organization", }); - reply.redirect(redirectUrl); + return redirect(redirectUrl); }); -fastify.post("/update-userinfo", async (req, reply) => { +hono.post("/update-userinfo", async ({ get, redirect }) => { + const session = get("session"); const client = await getMcpClient(); const code_verifier = generators.codeVerifier(); - req.session.verifier = code_verifier; + session.set("verifier", code_verifier); const code_challenge = generators.codeChallenge(code_verifier); const redirectUrl = client.authorizationUrl({ @@ -132,23 +154,26 @@ fastify.post("/update-userinfo", async (req, reply) => { prompt: "update_userinfo", }); - reply.redirect(redirectUrl); + return redirect(redirectUrl); }); -fastify.post("/logout", async (req, reply) => { - await req.session.destroy(); +hono.post("/logout", async ({ get, redirect }) => { + const session = get("session"); + session.deleteSession(); + const client = await getMcpClient(); const redirectUrl = client.endSessionUrl({ post_logout_redirect_uri: `${env.HOST}/`, }); - reply.redirect(redirectUrl); + return redirect(redirectUrl); }); -fastify.post("/force-login", async (req, reply) => { +hono.post("/force-login", async ({ get, redirect }) => { + const session = get("session"); const client = await getMcpClient(); const code_verifier = generators.codeVerifier(); - req.session.verifier = code_verifier; + session.set("verifier", code_verifier); const code_challenge = generators.codeChallenge(code_verifier); const redirectUrl = client.authorizationUrl({ @@ -161,23 +186,15 @@ fastify.post("/force-login", async (req, reply) => { // if so, claims parameter is not necessary as auth_time will be returned }); - reply.redirect(redirectUrl); + return redirect(redirectUrl); }); -fastify.setErrorHandler(async function (error, request, reply) { - try { - const youch = new Youch(error, request.raw); - const html = await youch.toHTML(); - reply.type("text/html").send(html); - } catch (error) { - reply.send(error); - } +hono.onError(async (error, { html, req }) => { + const youch = new Youch(error, req.raw); + return html(await youch.toHTML()); }); -fastify.listen({ port: env.PORT }, () => { - console.log(`App listening on port ${env.PORT}`); - console.log(env); -}); +export default hono; // diff --git a/package.json b/package.json index 6d6022c..1a51f9c 100644 --- a/package.json +++ b/package.json @@ -21,23 +21,20 @@ }, "homepage": "https://github.com/betagouv/moncomptepro-test-client#readme", "dependencies": { - "@fastify/cookie": "^9.2.0", - "@fastify/formbody": "^7.4.0", - "@fastify/session": "^10.7.0", - "@fastify/view": "^8.2.0", - "ejs": "^3.1.9", - "fastify": "^4.25.0", - "fastify-error-page": "^4.0.0", + "hono": "^3.11.7", + "hono-sessions": "^0.3.3", "openid-client": "^5.6.1", "youch": "^3.3.3", "zod": "^3.22.4" }, "devDependencies": { "@tsconfig/bun": "^1.0.1", - "@types/ejs": "^3.1.5", - "bun-types": "^1.0.17", + "bun-types": "^1.0.18", "prettier": "^3.1.1" }, + "overrides": { + "hono": "3.11.7" + }, "engines": { "node": "20", "npm": ">=9" diff --git a/tsconfig.json b/tsconfig.json index 3a362c4..57886a0 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -2,5 +2,6 @@ "extends": "@tsconfig/bun/tsconfig.json", "compilerOptions": { "verbatimModuleSyntax": true - } + }, + "files": ["./index.ts"] } diff --git a/views/critical.css b/views/critical.css new file mode 100644 index 0000000..229f677 --- /dev/null +++ b/views/critical.css @@ -0,0 +1,13 @@ +.moncomptepro-button { + background-color: transparent !important; + background-image: url(data:image/svg+xml;charset=utf8,%3Csvg%20width%3D%22208%22%20height%3D%2254%22%20viewBox%3D%220%200%20208%2054%22%20fill%3D%22none%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Crect%20y%3D%220.5%22%20width%3D%22208%22%20height%3D%2253%22%20rx%3D%224%22%20fill%3D%22%23000091%22%2F%3E%3Cg%3E%3Cpath%20d%3D%22M17.9341%2038.4951C17.9207%2038.0928%2018.001%2037.7038%2018.1752%2037.3417L23.1992%2027.3504C23.3465%2027.0553%2023.2662%2026.7334%2023.0518%2026.492C21.1628%2024.534%2020.7877%2021.4762%2022.6231%2019.1159C23.8422%2017.5468%2025.9188%2016.7018%2027.9552%2016.8628C25.5571%2018.1771%2023.9896%2020.6984%2024.137%2023.5282C24.2442%2025.5264%2025.1954%2027.2833%2026.6423%2028.5171C26.5887%2028.5574%2026.5217%2028.5976%2026.4815%2028.6781L24.6863%2032.2455C24.271%2032.5137%2022.891%2031.9504%2022.6767%2032.3796C22.4623%2032.8087%2023.7753%2033.4793%2023.8288%2033.9621C23.8422%2034.123%2023.6681%2034.4181%2023.5475%2034.5254C23.1992%2034.807%2021.9666%2034.5924%2021.7657%2034.9948C21.5647%2035.3971%2022.7035%2035.9872%2022.6901%2036.4298C22.6901%2036.7248%2022.5025%2036.9394%2022.248%2037.1003C21.8327%2037.3686%2020.9082%2037.0064%2020.6939%2037.4356C20.4795%2037.8648%2021.3504%2038.3342%2021.3905%2038.8036C21.4173%2039.0584%2021.1494%2039.5948%2020.9216%2039.7423C20.091%2040.2788%2018.5503%2040.8555%2018.5503%2040.8555C18.336%2040.9091%2017.9876%2040.1983%2018.001%2039.8899L17.9341%2038.5085V38.4951Z%22%20fill%3D%22%23C9191E%22%2F%3E%3Cpath%20d%3D%22M25.919%2012.7858C26.0797%2012.8796%2026.3209%2012.8394%2026.4147%2012.665C27.3659%2011.1496%2029.0807%2010.2108%2030.8626%2010.2108C33.7698%2010.2108%2036.1277%2012.5578%2036.1277%2015.468C36.1277%2016.6482%2035.7258%2017.7345%2035.0693%2018.6196C34.4798%2019.4243%2033.6492%2020.0412%2032.6846%2020.3899C32.1219%2020.6045%2031.5056%2020.7252%2030.8626%2020.7252C30.675%2020.7252%2030.5276%2020.8861%2030.5276%2021.0739C30.5276%2021.2616%2030.675%2021.4226%2030.8626%2021.4226C31.5726%2021.4226%2032.2291%2021.3019%2032.8454%2021.0739C33.3947%2020.8861%2033.8904%2020.6179%2034.3325%2020.296C34.5736%2020.1351%2034.788%2019.9473%2034.9889%2019.7462C35.1765%2019.5316%2035.364%2019.317%2035.5516%2019.1024C36.3554%2018.11%2036.8244%2016.8359%2036.8244%2015.4546C36.8244%2012.1688%2034.1583%209.5%2030.8492%209.5C28.8128%209.5%2026.8836%2010.5595%2025.8118%2012.2895C25.6912%2012.4505%2025.7448%2012.6651%2025.9056%2012.7858H25.919Z%22%20fill%3D%22white%22%2F%3E%3Cpath%20d%3D%22M24.9676%2021.9859C25.4365%2019.5853%2027.4729%2017.6272%2029.938%2017.2115C31.7199%2016.9164%2033.3811%2017.3858%2034.6673%2018.3112C34.0912%2019.0622%2033.3141%2019.6389%2032.4031%2019.9608C32.0682%2019.5719%2031.5993%2019.317%2031.0366%2019.317C30.0586%2019.317%2029.2548%2020.1083%2029.2548%2021.0739C29.2548%2022.0261%2030.0586%2022.8174%2031.0366%2022.8174C31.8404%2022.8174%2032.4969%2022.2943%2032.7246%2021.597C33.984%2021.208%2035.0826%2020.457%2035.8864%2019.4377C36.717%2020.4704%2037.2127%2021.7579%2037.2127%2023.1661C37.2127%2025.7544%2035.5515%2027.9807%2033.1936%2028.8256C32.9792%2028.9061%2032.8318%2029.0938%2032.8318%2029.3218V33.4793C32.5773%2033.9085%2031.0768%2033.9755%2031.0768%2034.4717C31.0768%2034.968%2032.5773%2035.035%2032.8318%2035.4642C32.9122%2035.6117%2032.8988%2035.9604%2032.8318%2036.1213C32.6443%2036.5371%2031.4251%2036.8723%2031.4251%2037.3417C31.4251%2037.7977%2032.7246%2037.8782%2032.9256%2038.2939C33.0596%2038.5756%2032.9926%2038.8572%2032.8318%2039.112C32.5773%2039.5412%2031.5725%2039.6082%2031.5725%2040.1045C31.5725%2040.6007%2032.5773%2040.6677%2032.8318%2041.0969C32.9658%2041.3383%2032.9658%2041.9552%2032.8318%2042.1832C32.3227%2043.0415%2031.184%2044.2619%2031.184%2044.2619C31.0098%2044.4095%2030.3801%2043.873%2030.2462%2043.5914L29.5495%2042.3173C29.3485%2041.9552%2029.2414%2041.5395%2029.2414%2041.1237V29.523C29.2414%2029.1877%2029.027%2028.9061%2028.7189%2028.7854C26.1064%2027.7527%2024.3782%2025.0436%2024.9676%2022.0127V21.9859Z%22%20fill%3D%22white%22%2F%3E%3Cpath%20d%3D%22M19.7027%2015.696C21.5917%2014.1268%2024.4051%2013.9123%2026.5754%2015.1729C27.3525%2015.6289%2027.4597%2015.6021%2027.9554%2016.2592C25.6778%2015.3741%2023.5343%2016.5677%2021.8998%2018.566C19.984%2020.8995%2020.2117%2024.2791%2022.3285%2026.3713C22.1276%2026.3177%2021.9132%2026.2774%2021.7122%2026.2104C21.4979%2026.1299%2021.2701%2026.1835%2021.1228%2026.3579L18.4835%2029.5632C18.0146%2029.7375%2016.8088%2028.8256%2016.5007%2029.2145C16.1926%2029.6034%2017.3045%2030.6092%2017.2242%2031.0921C17.1974%2031.253%2016.9562%2031.5212%2016.8088%2031.5883C16.3935%2031.7894%2015.2414%2031.2798%2014.9466%2031.6285C14.6519%2031.9772%2015.6165%2032.8623%2015.4959%2033.3183C15.4155%2033.6134%2015.1878%2033.7877%2014.9064%2033.895C14.4375%2034.0693%2013.6203%2033.4792%2013.3122%2033.8548C13.004%2034.2303%2013.7275%2034.9277%2013.6471%2035.4239C13.6069%2035.6921%2013.205%2036.1749%2012.9504%2036.2688C12.0126%2036.6175%2010.3648%2036.8321%2010.3648%2036.8321C10.137%2036.8321%209.98963%2036.0274%2010.07%2035.7189L10.338%2034.2973C10.4183%2033.8816%2010.5925%2033.5061%2010.8605%2033.1842L18.2156%2024.2255C18.4299%2023.9707%2018.4433%2023.6086%2018.2825%2023.3135C16.916%2020.8593%2017.3045%2017.6674%2019.6759%2015.696H19.7027Z%22%20fill%3D%22%230071BC%22%2F%3E%3C%2Fg%3E%3Cpath%20d%3D%22M47.986%2019.868C49.023%2021.16%2050.332%2021.823%2052.1%2021.823C54.174%2021.823%2055.755%2020.497%2055.755%2018.474C55.755%2014.666%2050.128%2014.989%2050.128%2012.422C50.128%2011.436%2050.859%2010.688%2051.964%2010.688C53.001%2010.688%2053.851%2011.232%2054.548%2012.235L55.738%2011.198C54.854%2010.025%2053.63%209.26%2051.947%209.26C49.924%209.26%2048.496%2010.722%2048.496%2012.456C48.496%2016.247%2054.123%2015.941%2054.123%2018.491C54.123%2019.579%2053.375%2020.395%2052.083%2020.395C50.961%2020.395%2049.975%2019.851%2049.142%2018.797L47.986%2019.868ZM58.8029%2014.156L60.5539%209.6H58.9049L57.4599%2014.156H58.8029ZM63.6214%2010.705C64.1824%2010.705%2064.6244%2010.246%2064.6244%209.685C64.6244%209.141%2064.1824%208.682%2063.6214%208.682C63.0604%208.682%2062.6014%209.141%2062.6014%209.685C62.6014%2010.246%2063.0604%2010.705%2063.6214%2010.705ZM62.8904%2021.5H64.3354V12.932H62.8904V21.5ZM66.6584%2017.216C66.6584%2019.715%2068.3754%2021.84%2071.0614%2021.84C72.3024%2021.84%2073.3224%2021.381%2074.1044%2020.548V21.5H75.5494V8.75H74.1044V13.884C73.3224%2013.051%2072.3024%2012.592%2071.0614%2012.592C68.3754%2012.592%2066.6584%2014.717%2066.6584%2017.216ZM68.1884%2017.216C68.1884%2015.397%2069.4124%2013.952%2071.2314%2013.952C72.4044%2013.952%2073.4244%2014.513%2074.1044%2015.55V18.882C73.4414%2019.902%2072.4214%2020.48%2071.2314%2020.48C69.4124%2020.48%2068.1884%2019.035%2068.1884%2017.216ZM86.2114%2020.089L85.1404%2019.256C84.5794%2020.021%2083.6614%2020.531%2082.5734%2020.531C80.6524%2020.531%2079.3604%2019.154%2079.3604%2017.267V17.233H85.9224C85.9734%2016.995%2086.0244%2016.655%2086.0244%2016.315C86.0244%2014.173%2084.5114%2012.592%2082.1824%2012.592C79.5304%2012.592%2077.8644%2014.615%2077.8644%2017.216C77.8644%2019.715%2079.6494%2021.84%2082.5394%2021.84C84.1374%2021.84%2085.4124%2021.16%2086.2114%2020.089ZM82.1994%2013.833C83.6104%2013.833%2084.5114%2014.853%2084.5624%2016.094H79.4794C79.8194%2014.615%2080.8054%2013.833%2082.1994%2013.833ZM88.4734%2021.5H89.9184V15.567C90.4624%2014.666%2091.2444%2013.952%2092.4854%2013.952C93.8114%2013.952%2094.6614%2014.836%2094.6614%2016.366V21.5H96.1234V16.315C96.1234%2013.884%2094.6954%2012.592%2092.7744%2012.592C91.4994%2012.592%2090.6154%2013.136%2089.9184%2013.901V12.932H88.4734V21.5ZM99.525%2018.627C99.525%2020.718%20100.596%2021.67%20102.5%2021.67C103.112%2021.67%20103.571%2021.602%20103.979%2021.432V20.14C103.656%2020.276%20103.265%2020.344%20102.704%2020.344C101.667%2020.344%20100.987%2019.97%20100.987%2018.627V14.258H103.962V12.932H100.987V10.79H99.525V12.932H97.91V14.258H99.525V18.627ZM106.902%2010.705C107.463%2010.705%20107.905%2010.246%20107.905%209.685C107.905%209.141%20107.463%208.682%20106.902%208.682C106.341%208.682%20105.882%209.141%20105.882%209.685C105.882%2010.246%20106.341%2010.705%20106.902%2010.705ZM106.171%2021.5H107.616V12.932H106.171V21.5ZM109.548%2012.932V14.258H111.163V21.5H112.625V14.258H115.6V12.932H112.625V11.844C112.625%2010.739%20113.288%2010.059%20114.223%2010.059C114.818%2010.059%20115.209%2010.297%20115.515%2010.637L116.416%209.583C115.906%209.09%20115.158%208.75%20114.206%208.75C112.37%208.75%20111.163%2010.042%20111.163%2011.878V12.932H109.548ZM118.091%2010.705C118.652%2010.705%20119.094%2010.246%20119.094%209.685C119.094%209.141%20118.652%208.682%20118.091%208.682C117.53%208.682%20117.071%209.141%20117.071%209.685C117.071%2010.246%20117.53%2010.705%20118.091%2010.705ZM117.36%2021.5H118.805V12.932H117.36V21.5ZM129.475%2020.089L128.404%2019.256C127.843%2020.021%20126.925%2020.531%20125.837%2020.531C123.916%2020.531%20122.624%2019.154%20122.624%2017.267V17.233H129.186C129.237%2016.995%20129.288%2016.655%20129.288%2016.315C129.288%2014.173%20127.775%2012.592%20125.446%2012.592C122.794%2012.592%20121.128%2014.615%20121.128%2017.216C121.128%2019.715%20122.913%2021.84%20125.803%2021.84C127.401%2021.84%20128.676%2021.16%20129.475%2020.089ZM125.463%2013.833C126.874%2013.833%20127.775%2014.853%20127.826%2016.094H122.743C123.083%2014.615%20124.069%2013.833%20125.463%2013.833ZM131.737%2021.5H133.182V15.686C133.709%2014.819%20134.44%2014.241%20135.562%2014.241C135.902%2014.241%20136.157%2014.292%20136.412%2014.36V12.864C136.208%2012.796%20135.953%2012.762%20135.681%2012.762C134.593%2012.762%20133.811%2013.255%20133.182%2014.003V12.932H131.737V21.5ZM145.422%2021.84C146.578%2021.84%20147.649%2021.313%20148.295%2020.412V21.5H149.74V15.754C149.74%2013.867%20148.448%2012.592%20146.272%2012.592C144.776%2012.592%20143.569%2013.221%20142.821%2014.241L143.909%2015.074C144.402%2014.326%20145.235%2013.884%20146.238%2013.884C147.445%2013.884%20148.295%2014.564%20148.295%2015.754V16.349L145.422%2016.825C143.586%2017.114%20142.6%2018.066%20142.6%2019.392C142.6%2020.888%20143.739%2021.84%20145.422%2021.84ZM144.045%2019.341C144.045%2018.593%20144.572%2018.049%20145.762%2017.862L148.295%2017.42V19.052C147.7%2020.038%20146.799%2020.633%20145.66%2020.633C144.674%2020.633%20144.045%2020.072%20144.045%2019.341ZM151.297%2012.932L154.646%2021.5H156.55L159.899%2012.932H158.335L155.598%2019.987L152.861%2012.932H151.297ZM169.153%2020.089L168.082%2019.256C167.521%2020.021%20166.603%2020.531%20165.515%2020.531C163.594%2020.531%20162.302%2019.154%20162.302%2017.267V17.233H168.864C168.915%2016.995%20168.966%2016.655%20168.966%2016.315C168.966%2014.173%20167.453%2012.592%20165.124%2012.592C162.472%2012.592%20160.806%2014.615%20160.806%2017.216C160.806%2019.715%20162.591%2021.84%20165.481%2021.84C167.079%2021.84%20168.354%2021.16%20169.153%2020.089ZM165.141%2013.833C166.552%2013.833%20167.453%2014.853%20167.504%2016.094H162.421C162.761%2014.615%20163.747%2013.833%20165.141%2013.833ZM175.326%2020.48C173.473%2020.48%20172.164%2019.052%20172.164%2017.216C172.164%2015.397%20173.473%2013.952%20175.309%2013.952C176.363%2013.952%20177.23%2014.462%20177.757%2015.227L178.913%2014.343C178.114%2013.289%20176.856%2012.592%20175.309%2012.592C172.47%2012.592%20170.651%2014.717%20170.651%2017.216C170.651%2019.715%20172.47%2021.84%20175.309%2021.84C176.873%2021.84%20178.114%2021.16%20178.913%2020.089L177.757%2019.205C177.23%2019.97%20176.38%2020.48%20175.326%2020.48Z%22%20fill%3D%22white%22%2F%3E%3Cpath%20d%3D%22M49.06%2042.5V28.5H52.64L56.02%2034.26L59.4%2028.5H62.98V42.5H60.14V32.54L57.02%2037.7H55.02L51.9%2032.54V42.5H49.06ZM71.2106%2032.02C72.024%2032.02%2072.7706%2032.1667%2073.4506%2032.46C74.1306%2032.74%2074.7106%2033.1267%2075.1906%2033.62C75.684%2034.1%2076.064%2034.6733%2076.3306%2035.34C76.5973%2036.0067%2076.7306%2036.7133%2076.7306%2037.46C76.7306%2038.2067%2076.5973%2038.9133%2076.3306%2039.58C76.064%2040.2467%2075.684%2040.8267%2075.1906%2041.32C74.7106%2041.8%2074.1306%2042.1867%2073.4506%2042.48C72.7706%2042.76%2072.024%2042.9%2071.2106%2042.9C70.3973%2042.9%2069.6506%2042.76%2068.9706%2042.48C68.2906%2042.1867%2067.704%2041.8%2067.2106%2041.32C66.7306%2040.8267%2066.3573%2040.2467%2066.0906%2039.58C65.824%2038.9133%2065.6906%2038.2067%2065.6906%2037.46C65.6906%2036.7133%2065.824%2036.0067%2066.0906%2035.34C66.3573%2034.6733%2066.7306%2034.1%2067.2106%2033.62C67.704%2033.1267%2068.2906%2032.74%2068.9706%2032.46C69.6506%2032.1667%2070.3973%2032.02%2071.2106%2032.02ZM71.2506%2040.5C72.0506%2040.5%2072.724%2040.2133%2073.2706%2039.64C73.8173%2039.0533%2074.0906%2038.3267%2074.0906%2037.46C74.0906%2036.58%2073.8173%2035.8533%2073.2706%2035.28C72.724%2034.7067%2072.0506%2034.42%2071.2506%2034.42C70.4106%2034.42%2069.7106%2034.7067%2069.1506%2035.28C68.604%2035.8533%2068.3306%2036.58%2068.3306%2037.46C68.3306%2038.34%2068.604%2039.0667%2069.1506%2039.64C69.7106%2040.2133%2070.4106%2040.5%2071.2506%2040.5ZM79.0473%2042.5V32.42H81.5873V33.22C81.934%2032.8867%2082.3473%2032.6067%2082.8273%2032.38C83.3207%2032.14%2083.9007%2032.02%2084.5673%2032.02C85.114%2032.02%2085.6207%2032.1133%2086.0873%2032.3C86.5673%2032.4867%2086.9807%2032.7667%2087.3273%2033.14C87.6873%2033.5133%2087.9673%2033.98%2088.1673%2034.54C88.3807%2035.1%2088.4873%2035.7533%2088.4873%2036.5V42.5H85.9073V36.6C85.9073%2035.9333%2085.7273%2035.4067%2085.3673%2035.02C85.0207%2034.62%2084.5407%2034.42%2083.9273%2034.42C83.2873%2034.42%2082.7807%2034.5933%2082.4073%2034.94C82.0473%2035.2733%2081.774%2035.6%2081.5873%2035.92V42.5H79.0473ZM98.1516%2040.24C98.9516%2040.24%2099.6582%2040.0667%20100.272%2039.72C100.898%2039.36%20101.412%2038.8933%20101.812%2038.32L104.052%2040.04C103.412%2040.9067%20102.585%2041.6%20101.572%2042.12C100.558%2042.64%2099.4182%2042.9%2098.1516%2042.9C97.0582%2042.9%2096.0516%2042.7%2095.1316%2042.3C94.2116%2041.9%2093.4249%2041.3667%2092.7716%2040.7C92.1182%2040.0333%2091.6116%2039.2533%2091.2516%2038.36C90.8916%2037.4533%2090.7116%2036.5%2090.7116%2035.5C90.7116%2034.5%2090.8916%2033.5533%2091.2516%2032.66C91.6116%2031.7533%2092.1182%2030.9667%2092.7716%2030.3C93.4249%2029.6333%2094.2116%2029.1%2095.1316%2028.7C96.0516%2028.3%2097.0582%2028.1%2098.1516%2028.1C99.4182%2028.1%20100.558%2028.3667%20101.572%2028.9C102.585%2029.42%20103.412%2030.1%20104.052%2030.94L101.812%2032.68C101.412%2032.1067%20100.898%2031.6467%20100.272%2031.3C99.6582%2030.94%2098.9516%2030.76%2098.1516%2030.76C97.4982%2030.76%2096.8916%2030.8867%2096.3316%2031.14C95.7716%2031.38%2095.2916%2031.7133%2094.8916%2032.14C94.5049%2032.5533%2094.1982%2033.0533%2093.9716%2033.64C93.7449%2034.2133%2093.6316%2034.8333%2093.6316%2035.5C93.6316%2036.1667%2093.7449%2036.7933%2093.9716%2037.38C94.1982%2037.9533%2094.5049%2038.4533%2094.8916%2038.88C95.2916%2039.2933%2095.7716%2039.6267%2096.3316%2039.88C96.8916%2040.12%2097.4982%2040.24%2098.1516%2040.24ZM110.781%2032.02C111.594%2032.02%20112.341%2032.1667%20113.021%2032.46C113.701%2032.74%20114.281%2033.1267%20114.761%2033.62C115.254%2034.1%20115.634%2034.6733%20115.901%2035.34C116.168%2036.0067%20116.301%2036.7133%20116.301%2037.46C116.301%2038.2067%20116.168%2038.9133%20115.901%2039.58C115.634%2040.2467%20115.254%2040.8267%20114.761%2041.32C114.281%2041.8%20113.701%2042.1867%20113.021%2042.48C112.341%2042.76%20111.594%2042.9%20110.781%2042.9C109.968%2042.9%20109.221%2042.76%20108.541%2042.48C107.861%2042.1867%20107.274%2041.8%20106.781%2041.32C106.301%2040.8267%20105.928%2040.2467%20105.661%2039.58C105.394%2038.9133%20105.261%2038.2067%20105.261%2037.46C105.261%2036.7133%20105.394%2036.0067%20105.661%2035.34C105.928%2034.6733%20106.301%2034.1%20106.781%2033.62C107.274%2033.1267%20107.861%2032.74%20108.541%2032.46C109.221%2032.1667%20109.968%2032.02%20110.781%2032.02ZM110.821%2040.5C111.621%2040.5%20112.294%2040.2133%20112.841%2039.64C113.388%2039.0533%20113.661%2038.3267%20113.661%2037.46C113.661%2036.58%20113.388%2035.8533%20112.841%2035.28C112.294%2034.7067%20111.621%2034.42%20110.821%2034.42C109.981%2034.42%20109.281%2034.7067%20108.721%2035.28C108.174%2035.8533%20107.901%2036.58%20107.901%2037.46C107.901%2038.34%20108.174%2039.0667%20108.721%2039.64C109.281%2040.2133%20109.981%2040.5%20110.821%2040.5ZM118.618%2042.5V32.42H121.158V33.18C121.491%2032.8467%20121.884%2032.5733%20122.338%2032.36C122.791%2032.1333%20123.324%2032.02%20123.938%2032.02C124.591%2032.02%20125.191%2032.1733%20125.738%2032.48C126.298%2032.7733%20126.744%2033.2067%20127.078%2033.78C127.451%2033.3267%20127.898%2032.92%20128.418%2032.56C128.938%2032.2%20129.591%2032.02%20130.378%2032.02C130.898%2032.02%20131.384%2032.1133%20131.838%2032.3C132.291%2032.4733%20132.684%2032.74%20133.018%2033.1C133.351%2033.4467%20133.611%2033.8933%20133.798%2034.44C133.998%2034.9733%20134.098%2035.5933%20134.098%2036.3V42.5H131.538V36.4C131.538%2035.7867%20131.378%2035.3067%20131.058%2034.96C130.751%2034.6%20130.311%2034.42%20129.738%2034.42C129.204%2034.42%20128.771%2034.58%20128.438%2034.9C128.104%2035.2067%20127.838%2035.5267%20127.638%2035.86C127.651%2035.9267%20127.658%2036%20127.658%2036.08C127.658%2036.16%20127.658%2036.2333%20127.658%2036.3V42.5H125.078V36.4C125.078%2035.7867%20124.924%2035.3067%20124.618%2034.96C124.311%2034.6%20123.871%2034.42%20123.298%2034.42C122.724%2034.42%20122.271%2034.5933%20121.938%2034.94C121.604%2035.2733%20121.344%2035.6%20121.158%2035.92V42.5H118.618ZM136.997%2047.42V32.42H139.537V33.14C139.937%2032.78%20140.397%2032.5067%20140.917%2032.32C141.437%2032.12%20142.023%2032.02%20142.677%2032.02C143.477%2032.02%20144.19%2032.1667%20144.817%2032.46C145.457%2032.7533%20145.997%2033.1467%20146.437%2033.64C146.877%2034.1333%20147.21%2034.7133%20147.437%2035.38C147.677%2036.0333%20147.797%2036.7267%20147.797%2037.46C147.797%2038.1933%20147.677%2038.8933%20147.437%2039.56C147.21%2040.2133%20146.877%2040.7867%20146.437%2041.28C145.997%2041.7733%20145.457%2042.1667%20144.817%2042.46C144.19%2042.7533%20143.477%2042.9%20142.677%2042.9C142.023%2042.9%20141.437%2042.8%20140.917%2042.6C140.397%2042.4133%20139.937%2042.14%20139.537%2041.78V47.42H136.997ZM139.557%2038.98C139.89%2039.4733%20140.283%2039.8533%20140.737%2040.12C141.203%2040.3733%20141.73%2040.5%20142.317%2040.5C143.17%2040.5%20143.857%2040.2133%20144.377%2039.64C144.897%2039.0667%20145.157%2038.34%20145.157%2037.46C145.157%2036.58%20144.897%2035.8533%20144.377%2035.28C143.857%2034.7067%20143.17%2034.42%20142.317%2034.42C141.73%2034.42%20141.203%2034.5533%20140.737%2034.82C140.283%2035.0733%20139.89%2035.4467%20139.557%2035.94L139.537%2035.92V39L139.557%2038.98ZM150.644%2038.82V34.74H148.764V32.42H150.644V29.9H153.204V32.42H156.284V34.74H153.204V38.82C153.204%2039.38%20153.344%2039.78%20153.624%2040.02C153.918%2040.26%20154.311%2040.38%20154.804%2040.38C155.151%2040.38%20155.444%2040.36%20155.684%2040.32C155.924%2040.28%20156.131%2040.2267%20156.304%2040.16V42.38C156.051%2042.4867%20155.764%2042.5667%20155.444%2042.62C155.138%2042.6733%20154.778%2042.7%20154.364%2042.7C153.111%2042.7%20152.178%2042.36%20151.564%2041.68C150.951%2041%20150.644%2040.0467%20150.644%2038.82ZM167.644%2040.86C167.177%2041.4867%20166.564%2041.9867%20165.804%2042.36C165.044%2042.72%20164.19%2042.9%20163.244%2042.9C162.35%2042.9%20161.55%2042.7533%20160.844%2042.46C160.15%2042.1667%20159.564%2041.7733%20159.084%2041.28C158.617%2040.7867%20158.257%2040.2133%20158.004%2039.56C157.764%2038.8933%20157.644%2038.1933%20157.644%2037.46C157.644%2036.7133%20157.757%2036.0133%20157.984%2035.36C158.224%2034.6933%20158.564%2034.1133%20159.004%2033.62C159.444%2033.1267%20159.984%2032.74%20160.624%2032.46C161.264%2032.1667%20161.997%2032.02%20162.824%2032.02C164.21%2032.02%20165.33%2032.4467%20166.184%2033.3C167.037%2034.14%20167.464%2035.22%20167.464%2036.54C167.464%2036.82%20167.444%2037.0867%20167.404%2037.34C167.377%2037.5933%20167.344%2037.8067%20167.304%2037.98H160.244C160.324%2038.8067%20160.637%2039.4533%20161.184%2039.92C161.73%2040.3867%20162.43%2040.62%20163.284%2040.62C163.83%2040.62%20164.324%2040.5133%20164.764%2040.3C165.204%2040.0733%20165.557%2039.78%20165.824%2039.42L167.644%2040.86ZM162.824%2034.14C162.21%2034.14%20161.697%2034.3%20161.284%2034.62C160.87%2034.9267%20160.577%2035.4067%20160.404%2036.06H164.944C164.93%2035.5667%20164.737%2035.1267%20164.364%2034.74C164.004%2034.34%20163.49%2034.14%20162.824%2034.14ZM170.486%2042.5V28.5H175.106C176.639%2028.5%20177.846%2028.8733%20178.726%2029.62C179.619%2030.3667%20180.066%2031.3867%20180.066%2032.68C180.066%2033.96%20179.619%2034.9733%20178.726%2035.72C177.846%2036.4667%20176.639%2036.84%20175.106%2036.84H173.326V42.5H170.486ZM175.226%2030.92H173.326V34.42H175.226C175.826%2034.42%20176.292%2034.2667%20176.626%2033.96C176.972%2033.6533%20177.146%2033.2133%20177.146%2032.64C177.146%2032.1067%20176.972%2031.6867%20176.626%2031.38C176.292%2031.0733%20175.826%2030.92%20175.226%2030.92ZM182.036%2042.5V32.42H184.576V33.42C184.909%2033.0867%20185.289%2032.8067%20185.716%2032.58C186.156%2032.34%20186.662%2032.22%20187.236%2032.22C187.409%2032.22%20187.569%2032.2333%20187.716%2032.26C187.862%2032.2867%20187.996%2032.32%20188.116%2032.36V35.02C187.956%2034.98%20187.782%2034.9467%20187.596%2034.92C187.422%2034.8933%20187.222%2034.88%20186.996%2034.88C186.382%2034.88%20185.869%2035.02%20185.456%2035.3C185.056%2035.58%20184.762%2035.8733%20184.576%2036.18V42.5H182.036ZM194.687%2032.02C195.501%2032.02%20196.247%2032.1667%20196.927%2032.46C197.607%2032.74%20198.187%2033.1267%20198.667%2033.62C199.161%2034.1%20199.541%2034.6733%20199.807%2035.34C200.074%2036.0067%20200.207%2036.7133%20200.207%2037.46C200.207%2038.2067%20200.074%2038.9133%20199.807%2039.58C199.541%2040.2467%20199.161%2040.8267%20198.667%2041.32C198.187%2041.8%20197.607%2042.1867%20196.927%2042.48C196.247%2042.76%20195.501%2042.9%20194.687%2042.9C193.874%2042.9%20193.127%2042.76%20192.447%2042.48C191.767%2042.1867%20191.181%2041.8%20190.687%2041.32C190.207%2040.8267%20189.834%2040.2467%20189.567%2039.58C189.301%2038.9133%20189.167%2038.2067%20189.167%2037.46C189.167%2036.7133%20189.301%2036.0067%20189.567%2035.34C189.834%2034.6733%20190.207%2034.1%20190.687%2033.62C191.181%2033.1267%20191.767%2032.74%20192.447%2032.46C193.127%2032.1667%20193.874%2032.02%20194.687%2032.02ZM194.727%2040.5C195.527%2040.5%20196.201%2040.2133%20196.747%2039.64C197.294%2039.0533%20197.567%2038.3267%20197.567%2037.46C197.567%2036.58%20197.294%2035.8533%20196.747%2035.28C196.201%2034.7067%20195.527%2034.42%20194.727%2034.42C193.887%2034.42%20193.187%2034.7067%20192.627%2035.28C192.081%2035.8533%20191.807%2036.58%20191.807%2037.46C191.807%2038.34%20192.081%2039.0667%20192.627%2039.64C193.187%2040.2133%20193.887%2040.5%20194.727%2040.5Z%22%20fill%3D%22white%22%2F%3E%3C%2Fsvg%3E); + background-position: 50% 50%; + background-repeat: no-repeat; + width: 214px; + height: 56px; + border: none; +} + +.moncomptepro-button:hover { + background-image: url(data:image/svg+xml;charset=utf8,%3Csvg%20width%3D%22208%22%20height%3D%2254%22%20viewBox%3D%220%200%20208%2054%22%20fill%3D%22none%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Crect%20y%3D%220.5%22%20width%3D%22208%22%20height%3D%2253%22%20rx%3D%224%22%20fill%3D%22%231212ff%22%2F%3E%3Cg%3E%3Cpath%20d%3D%22M17.9341%2038.4951C17.9207%2038.0928%2018.001%2037.7038%2018.1752%2037.3417L23.1992%2027.3504C23.3465%2027.0553%2023.2662%2026.7334%2023.0518%2026.492C21.1628%2024.534%2020.7877%2021.4762%2022.6231%2019.1159C23.8422%2017.5468%2025.9188%2016.7018%2027.9552%2016.8628C25.5571%2018.1771%2023.9896%2020.6984%2024.137%2023.5282C24.2442%2025.5264%2025.1954%2027.2833%2026.6423%2028.5171C26.5887%2028.5574%2026.5217%2028.5976%2026.4815%2028.6781L24.6863%2032.2455C24.271%2032.5137%2022.891%2031.9504%2022.6767%2032.3796C22.4623%2032.8087%2023.7753%2033.4793%2023.8288%2033.9621C23.8422%2034.123%2023.6681%2034.4181%2023.5475%2034.5254C23.1992%2034.807%2021.9666%2034.5924%2021.7657%2034.9948C21.5647%2035.3971%2022.7035%2035.9872%2022.6901%2036.4298C22.6901%2036.7248%2022.5025%2036.9394%2022.248%2037.1003C21.8327%2037.3686%2020.9082%2037.0064%2020.6939%2037.4356C20.4795%2037.8648%2021.3504%2038.3342%2021.3905%2038.8036C21.4173%2039.0584%2021.1494%2039.5948%2020.9216%2039.7423C20.091%2040.2788%2018.5503%2040.8555%2018.5503%2040.8555C18.336%2040.9091%2017.9876%2040.1983%2018.001%2039.8899L17.9341%2038.5085V38.4951Z%22%20fill%3D%22%23C9191E%22%2F%3E%3Cpath%20d%3D%22M25.919%2012.7858C26.0797%2012.8796%2026.3209%2012.8394%2026.4147%2012.665C27.3659%2011.1496%2029.0807%2010.2108%2030.8626%2010.2108C33.7698%2010.2108%2036.1277%2012.5578%2036.1277%2015.468C36.1277%2016.6482%2035.7258%2017.7345%2035.0693%2018.6196C34.4798%2019.4243%2033.6492%2020.0412%2032.6846%2020.3899C32.1219%2020.6045%2031.5056%2020.7252%2030.8626%2020.7252C30.675%2020.7252%2030.5276%2020.8861%2030.5276%2021.0739C30.5276%2021.2616%2030.675%2021.4226%2030.8626%2021.4226C31.5726%2021.4226%2032.2291%2021.3019%2032.8454%2021.0739C33.3947%2020.8861%2033.8904%2020.6179%2034.3325%2020.296C34.5736%2020.1351%2034.788%2019.9473%2034.9889%2019.7462C35.1765%2019.5316%2035.364%2019.317%2035.5516%2019.1024C36.3554%2018.11%2036.8244%2016.8359%2036.8244%2015.4546C36.8244%2012.1688%2034.1583%209.5%2030.8492%209.5C28.8128%209.5%2026.8836%2010.5595%2025.8118%2012.2895C25.6912%2012.4505%2025.7448%2012.6651%2025.9056%2012.7858H25.919Z%22%20fill%3D%22white%22%2F%3E%3Cpath%20d%3D%22M24.9676%2021.9859C25.4365%2019.5853%2027.4729%2017.6272%2029.938%2017.2115C31.7199%2016.9164%2033.3811%2017.3858%2034.6673%2018.3112C34.0912%2019.0622%2033.3141%2019.6389%2032.4031%2019.9608C32.0682%2019.5719%2031.5993%2019.317%2031.0366%2019.317C30.0586%2019.317%2029.2548%2020.1083%2029.2548%2021.0739C29.2548%2022.0261%2030.0586%2022.8174%2031.0366%2022.8174C31.8404%2022.8174%2032.4969%2022.2943%2032.7246%2021.597C33.984%2021.208%2035.0826%2020.457%2035.8864%2019.4377C36.717%2020.4704%2037.2127%2021.7579%2037.2127%2023.1661C37.2127%2025.7544%2035.5515%2027.9807%2033.1936%2028.8256C32.9792%2028.9061%2032.8318%2029.0938%2032.8318%2029.3218V33.4793C32.5773%2033.9085%2031.0768%2033.9755%2031.0768%2034.4717C31.0768%2034.968%2032.5773%2035.035%2032.8318%2035.4642C32.9122%2035.6117%2032.8988%2035.9604%2032.8318%2036.1213C32.6443%2036.5371%2031.4251%2036.8723%2031.4251%2037.3417C31.4251%2037.7977%2032.7246%2037.8782%2032.9256%2038.2939C33.0596%2038.5756%2032.9926%2038.8572%2032.8318%2039.112C32.5773%2039.5412%2031.5725%2039.6082%2031.5725%2040.1045C31.5725%2040.6007%2032.5773%2040.6677%2032.8318%2041.0969C32.9658%2041.3383%2032.9658%2041.9552%2032.8318%2042.1832C32.3227%2043.0415%2031.184%2044.2619%2031.184%2044.2619C31.0098%2044.4095%2030.3801%2043.873%2030.2462%2043.5914L29.5495%2042.3173C29.3485%2041.9552%2029.2414%2041.5395%2029.2414%2041.1237V29.523C29.2414%2029.1877%2029.027%2028.9061%2028.7189%2028.7854C26.1064%2027.7527%2024.3782%2025.0436%2024.9676%2022.0127V21.9859Z%22%20fill%3D%22white%22%2F%3E%3Cpath%20d%3D%22M19.7027%2015.696C21.5917%2014.1268%2024.4051%2013.9123%2026.5754%2015.1729C27.3525%2015.6289%2027.4597%2015.6021%2027.9554%2016.2592C25.6778%2015.3741%2023.5343%2016.5677%2021.8998%2018.566C19.984%2020.8995%2020.2117%2024.2791%2022.3285%2026.3713C22.1276%2026.3177%2021.9132%2026.2774%2021.7122%2026.2104C21.4979%2026.1299%2021.2701%2026.1835%2021.1228%2026.3579L18.4835%2029.5632C18.0146%2029.7375%2016.8088%2028.8256%2016.5007%2029.2145C16.1926%2029.6034%2017.3045%2030.6092%2017.2242%2031.0921C17.1974%2031.253%2016.9562%2031.5212%2016.8088%2031.5883C16.3935%2031.7894%2015.2414%2031.2798%2014.9466%2031.6285C14.6519%2031.9772%2015.6165%2032.8623%2015.4959%2033.3183C15.4155%2033.6134%2015.1878%2033.7877%2014.9064%2033.895C14.4375%2034.0693%2013.6203%2033.4792%2013.3122%2033.8548C13.004%2034.2303%2013.7275%2034.9277%2013.6471%2035.4239C13.6069%2035.6921%2013.205%2036.1749%2012.9504%2036.2688C12.0126%2036.6175%2010.3648%2036.8321%2010.3648%2036.8321C10.137%2036.8321%209.98963%2036.0274%2010.07%2035.7189L10.338%2034.2973C10.4183%2033.8816%2010.5925%2033.5061%2010.8605%2033.1842L18.2156%2024.2255C18.4299%2023.9707%2018.4433%2023.6086%2018.2825%2023.3135C16.916%2020.8593%2017.3045%2017.6674%2019.6759%2015.696H19.7027Z%22%20fill%3D%22%230071BC%22%2F%3E%3C%2Fg%3E%3Cpath%20d%3D%22M47.986%2019.868C49.023%2021.16%2050.332%2021.823%2052.1%2021.823C54.174%2021.823%2055.755%2020.497%2055.755%2018.474C55.755%2014.666%2050.128%2014.989%2050.128%2012.422C50.128%2011.436%2050.859%2010.688%2051.964%2010.688C53.001%2010.688%2053.851%2011.232%2054.548%2012.235L55.738%2011.198C54.854%2010.025%2053.63%209.26%2051.947%209.26C49.924%209.26%2048.496%2010.722%2048.496%2012.456C48.496%2016.247%2054.123%2015.941%2054.123%2018.491C54.123%2019.579%2053.375%2020.395%2052.083%2020.395C50.961%2020.395%2049.975%2019.851%2049.142%2018.797L47.986%2019.868ZM58.8029%2014.156L60.5539%209.6H58.9049L57.4599%2014.156H58.8029ZM63.6214%2010.705C64.1824%2010.705%2064.6244%2010.246%2064.6244%209.685C64.6244%209.141%2064.1824%208.682%2063.6214%208.682C63.0604%208.682%2062.6014%209.141%2062.6014%209.685C62.6014%2010.246%2063.0604%2010.705%2063.6214%2010.705ZM62.8904%2021.5H64.3354V12.932H62.8904V21.5ZM66.6584%2017.216C66.6584%2019.715%2068.3754%2021.84%2071.0614%2021.84C72.3024%2021.84%2073.3224%2021.381%2074.1044%2020.548V21.5H75.5494V8.75H74.1044V13.884C73.3224%2013.051%2072.3024%2012.592%2071.0614%2012.592C68.3754%2012.592%2066.6584%2014.717%2066.6584%2017.216ZM68.1884%2017.216C68.1884%2015.397%2069.4124%2013.952%2071.2314%2013.952C72.4044%2013.952%2073.4244%2014.513%2074.1044%2015.55V18.882C73.4414%2019.902%2072.4214%2020.48%2071.2314%2020.48C69.4124%2020.48%2068.1884%2019.035%2068.1884%2017.216ZM86.2114%2020.089L85.1404%2019.256C84.5794%2020.021%2083.6614%2020.531%2082.5734%2020.531C80.6524%2020.531%2079.3604%2019.154%2079.3604%2017.267V17.233H85.9224C85.9734%2016.995%2086.0244%2016.655%2086.0244%2016.315C86.0244%2014.173%2084.5114%2012.592%2082.1824%2012.592C79.5304%2012.592%2077.8644%2014.615%2077.8644%2017.216C77.8644%2019.715%2079.6494%2021.84%2082.5394%2021.84C84.1374%2021.84%2085.4124%2021.16%2086.2114%2020.089ZM82.1994%2013.833C83.6104%2013.833%2084.5114%2014.853%2084.5624%2016.094H79.4794C79.8194%2014.615%2080.8054%2013.833%2082.1994%2013.833ZM88.4734%2021.5H89.9184V15.567C90.4624%2014.666%2091.2444%2013.952%2092.4854%2013.952C93.8114%2013.952%2094.6614%2014.836%2094.6614%2016.366V21.5H96.1234V16.315C96.1234%2013.884%2094.6954%2012.592%2092.7744%2012.592C91.4994%2012.592%2090.6154%2013.136%2089.9184%2013.901V12.932H88.4734V21.5ZM99.525%2018.627C99.525%2020.718%20100.596%2021.67%20102.5%2021.67C103.112%2021.67%20103.571%2021.602%20103.979%2021.432V20.14C103.656%2020.276%20103.265%2020.344%20102.704%2020.344C101.667%2020.344%20100.987%2019.97%20100.987%2018.627V14.258H103.962V12.932H100.987V10.79H99.525V12.932H97.91V14.258H99.525V18.627ZM106.902%2010.705C107.463%2010.705%20107.905%2010.246%20107.905%209.685C107.905%209.141%20107.463%208.682%20106.902%208.682C106.341%208.682%20105.882%209.141%20105.882%209.685C105.882%2010.246%20106.341%2010.705%20106.902%2010.705ZM106.171%2021.5H107.616V12.932H106.171V21.5ZM109.548%2012.932V14.258H111.163V21.5H112.625V14.258H115.6V12.932H112.625V11.844C112.625%2010.739%20113.288%2010.059%20114.223%2010.059C114.818%2010.059%20115.209%2010.297%20115.515%2010.637L116.416%209.583C115.906%209.09%20115.158%208.75%20114.206%208.75C112.37%208.75%20111.163%2010.042%20111.163%2011.878V12.932H109.548ZM118.091%2010.705C118.652%2010.705%20119.094%2010.246%20119.094%209.685C119.094%209.141%20118.652%208.682%20118.091%208.682C117.53%208.682%20117.071%209.141%20117.071%209.685C117.071%2010.246%20117.53%2010.705%20118.091%2010.705ZM117.36%2021.5H118.805V12.932H117.36V21.5ZM129.475%2020.089L128.404%2019.256C127.843%2020.021%20126.925%2020.531%20125.837%2020.531C123.916%2020.531%20122.624%2019.154%20122.624%2017.267V17.233H129.186C129.237%2016.995%20129.288%2016.655%20129.288%2016.315C129.288%2014.173%20127.775%2012.592%20125.446%2012.592C122.794%2012.592%20121.128%2014.615%20121.128%2017.216C121.128%2019.715%20122.913%2021.84%20125.803%2021.84C127.401%2021.84%20128.676%2021.16%20129.475%2020.089ZM125.463%2013.833C126.874%2013.833%20127.775%2014.853%20127.826%2016.094H122.743C123.083%2014.615%20124.069%2013.833%20125.463%2013.833ZM131.737%2021.5H133.182V15.686C133.709%2014.819%20134.44%2014.241%20135.562%2014.241C135.902%2014.241%20136.157%2014.292%20136.412%2014.36V12.864C136.208%2012.796%20135.953%2012.762%20135.681%2012.762C134.593%2012.762%20133.811%2013.255%20133.182%2014.003V12.932H131.737V21.5ZM145.422%2021.84C146.578%2021.84%20147.649%2021.313%20148.295%2020.412V21.5H149.74V15.754C149.74%2013.867%20148.448%2012.592%20146.272%2012.592C144.776%2012.592%20143.569%2013.221%20142.821%2014.241L143.909%2015.074C144.402%2014.326%20145.235%2013.884%20146.238%2013.884C147.445%2013.884%20148.295%2014.564%20148.295%2015.754V16.349L145.422%2016.825C143.586%2017.114%20142.6%2018.066%20142.6%2019.392C142.6%2020.888%20143.739%2021.84%20145.422%2021.84ZM144.045%2019.341C144.045%2018.593%20144.572%2018.049%20145.762%2017.862L148.295%2017.42V19.052C147.7%2020.038%20146.799%2020.633%20145.66%2020.633C144.674%2020.633%20144.045%2020.072%20144.045%2019.341ZM151.297%2012.932L154.646%2021.5H156.55L159.899%2012.932H158.335L155.598%2019.987L152.861%2012.932H151.297ZM169.153%2020.089L168.082%2019.256C167.521%2020.021%20166.603%2020.531%20165.515%2020.531C163.594%2020.531%20162.302%2019.154%20162.302%2017.267V17.233H168.864C168.915%2016.995%20168.966%2016.655%20168.966%2016.315C168.966%2014.173%20167.453%2012.592%20165.124%2012.592C162.472%2012.592%20160.806%2014.615%20160.806%2017.216C160.806%2019.715%20162.591%2021.84%20165.481%2021.84C167.079%2021.84%20168.354%2021.16%20169.153%2020.089ZM165.141%2013.833C166.552%2013.833%20167.453%2014.853%20167.504%2016.094H162.421C162.761%2014.615%20163.747%2013.833%20165.141%2013.833ZM175.326%2020.48C173.473%2020.48%20172.164%2019.052%20172.164%2017.216C172.164%2015.397%20173.473%2013.952%20175.309%2013.952C176.363%2013.952%20177.23%2014.462%20177.757%2015.227L178.913%2014.343C178.114%2013.289%20176.856%2012.592%20175.309%2012.592C172.47%2012.592%20170.651%2014.717%20170.651%2017.216C170.651%2019.715%20172.47%2021.84%20175.309%2021.84C176.873%2021.84%20178.114%2021.16%20178.913%2020.089L177.757%2019.205C177.23%2019.97%20176.38%2020.48%20175.326%2020.48Z%22%20fill%3D%22white%22%2F%3E%3Cpath%20d%3D%22M49.06%2042.5V28.5H52.64L56.02%2034.26L59.4%2028.5H62.98V42.5H60.14V32.54L57.02%2037.7H55.02L51.9%2032.54V42.5H49.06ZM71.2106%2032.02C72.024%2032.02%2072.7706%2032.1667%2073.4506%2032.46C74.1306%2032.74%2074.7106%2033.1267%2075.1906%2033.62C75.684%2034.1%2076.064%2034.6733%2076.3306%2035.34C76.5973%2036.0067%2076.7306%2036.7133%2076.7306%2037.46C76.7306%2038.2067%2076.5973%2038.9133%2076.3306%2039.58C76.064%2040.2467%2075.684%2040.8267%2075.1906%2041.32C74.7106%2041.8%2074.1306%2042.1867%2073.4506%2042.48C72.7706%2042.76%2072.024%2042.9%2071.2106%2042.9C70.3973%2042.9%2069.6506%2042.76%2068.9706%2042.48C68.2906%2042.1867%2067.704%2041.8%2067.2106%2041.32C66.7306%2040.8267%2066.3573%2040.2467%2066.0906%2039.58C65.824%2038.9133%2065.6906%2038.2067%2065.6906%2037.46C65.6906%2036.7133%2065.824%2036.0067%2066.0906%2035.34C66.3573%2034.6733%2066.7306%2034.1%2067.2106%2033.62C67.704%2033.1267%2068.2906%2032.74%2068.9706%2032.46C69.6506%2032.1667%2070.3973%2032.02%2071.2106%2032.02ZM71.2506%2040.5C72.0506%2040.5%2072.724%2040.2133%2073.2706%2039.64C73.8173%2039.0533%2074.0906%2038.3267%2074.0906%2037.46C74.0906%2036.58%2073.8173%2035.8533%2073.2706%2035.28C72.724%2034.7067%2072.0506%2034.42%2071.2506%2034.42C70.4106%2034.42%2069.7106%2034.7067%2069.1506%2035.28C68.604%2035.8533%2068.3306%2036.58%2068.3306%2037.46C68.3306%2038.34%2068.604%2039.0667%2069.1506%2039.64C69.7106%2040.2133%2070.4106%2040.5%2071.2506%2040.5ZM79.0473%2042.5V32.42H81.5873V33.22C81.934%2032.8867%2082.3473%2032.6067%2082.8273%2032.38C83.3207%2032.14%2083.9007%2032.02%2084.5673%2032.02C85.114%2032.02%2085.6207%2032.1133%2086.0873%2032.3C86.5673%2032.4867%2086.9807%2032.7667%2087.3273%2033.14C87.6873%2033.5133%2087.9673%2033.98%2088.1673%2034.54C88.3807%2035.1%2088.4873%2035.7533%2088.4873%2036.5V42.5H85.9073V36.6C85.9073%2035.9333%2085.7273%2035.4067%2085.3673%2035.02C85.0207%2034.62%2084.5407%2034.42%2083.9273%2034.42C83.2873%2034.42%2082.7807%2034.5933%2082.4073%2034.94C82.0473%2035.2733%2081.774%2035.6%2081.5873%2035.92V42.5H79.0473ZM98.1516%2040.24C98.9516%2040.24%2099.6582%2040.0667%20100.272%2039.72C100.898%2039.36%20101.412%2038.8933%20101.812%2038.32L104.052%2040.04C103.412%2040.9067%20102.585%2041.6%20101.572%2042.12C100.558%2042.64%2099.4182%2042.9%2098.1516%2042.9C97.0582%2042.9%2096.0516%2042.7%2095.1316%2042.3C94.2116%2041.9%2093.4249%2041.3667%2092.7716%2040.7C92.1182%2040.0333%2091.6116%2039.2533%2091.2516%2038.36C90.8916%2037.4533%2090.7116%2036.5%2090.7116%2035.5C90.7116%2034.5%2090.8916%2033.5533%2091.2516%2032.66C91.6116%2031.7533%2092.1182%2030.9667%2092.7716%2030.3C93.4249%2029.6333%2094.2116%2029.1%2095.1316%2028.7C96.0516%2028.3%2097.0582%2028.1%2098.1516%2028.1C99.4182%2028.1%20100.558%2028.3667%20101.572%2028.9C102.585%2029.42%20103.412%2030.1%20104.052%2030.94L101.812%2032.68C101.412%2032.1067%20100.898%2031.6467%20100.272%2031.3C99.6582%2030.94%2098.9516%2030.76%2098.1516%2030.76C97.4982%2030.76%2096.8916%2030.8867%2096.3316%2031.14C95.7716%2031.38%2095.2916%2031.7133%2094.8916%2032.14C94.5049%2032.5533%2094.1982%2033.0533%2093.9716%2033.64C93.7449%2034.2133%2093.6316%2034.8333%2093.6316%2035.5C93.6316%2036.1667%2093.7449%2036.7933%2093.9716%2037.38C94.1982%2037.9533%2094.5049%2038.4533%2094.8916%2038.88C95.2916%2039.2933%2095.7716%2039.6267%2096.3316%2039.88C96.8916%2040.12%2097.4982%2040.24%2098.1516%2040.24ZM110.781%2032.02C111.594%2032.02%20112.341%2032.1667%20113.021%2032.46C113.701%2032.74%20114.281%2033.1267%20114.761%2033.62C115.254%2034.1%20115.634%2034.6733%20115.901%2035.34C116.168%2036.0067%20116.301%2036.7133%20116.301%2037.46C116.301%2038.2067%20116.168%2038.9133%20115.901%2039.58C115.634%2040.2467%20115.254%2040.8267%20114.761%2041.32C114.281%2041.8%20113.701%2042.1867%20113.021%2042.48C112.341%2042.76%20111.594%2042.9%20110.781%2042.9C109.968%2042.9%20109.221%2042.76%20108.541%2042.48C107.861%2042.1867%20107.274%2041.8%20106.781%2041.32C106.301%2040.8267%20105.928%2040.2467%20105.661%2039.58C105.394%2038.9133%20105.261%2038.2067%20105.261%2037.46C105.261%2036.7133%20105.394%2036.0067%20105.661%2035.34C105.928%2034.6733%20106.301%2034.1%20106.781%2033.62C107.274%2033.1267%20107.861%2032.74%20108.541%2032.46C109.221%2032.1667%20109.968%2032.02%20110.781%2032.02ZM110.821%2040.5C111.621%2040.5%20112.294%2040.2133%20112.841%2039.64C113.388%2039.0533%20113.661%2038.3267%20113.661%2037.46C113.661%2036.58%20113.388%2035.8533%20112.841%2035.28C112.294%2034.7067%20111.621%2034.42%20110.821%2034.42C109.981%2034.42%20109.281%2034.7067%20108.721%2035.28C108.174%2035.8533%20107.901%2036.58%20107.901%2037.46C107.901%2038.34%20108.174%2039.0667%20108.721%2039.64C109.281%2040.2133%20109.981%2040.5%20110.821%2040.5ZM118.618%2042.5V32.42H121.158V33.18C121.491%2032.8467%20121.884%2032.5733%20122.338%2032.36C122.791%2032.1333%20123.324%2032.02%20123.938%2032.02C124.591%2032.02%20125.191%2032.1733%20125.738%2032.48C126.298%2032.7733%20126.744%2033.2067%20127.078%2033.78C127.451%2033.3267%20127.898%2032.92%20128.418%2032.56C128.938%2032.2%20129.591%2032.02%20130.378%2032.02C130.898%2032.02%20131.384%2032.1133%20131.838%2032.3C132.291%2032.4733%20132.684%2032.74%20133.018%2033.1C133.351%2033.4467%20133.611%2033.8933%20133.798%2034.44C133.998%2034.9733%20134.098%2035.5933%20134.098%2036.3V42.5H131.538V36.4C131.538%2035.7867%20131.378%2035.3067%20131.058%2034.96C130.751%2034.6%20130.311%2034.42%20129.738%2034.42C129.204%2034.42%20128.771%2034.58%20128.438%2034.9C128.104%2035.2067%20127.838%2035.5267%20127.638%2035.86C127.651%2035.9267%20127.658%2036%20127.658%2036.08C127.658%2036.16%20127.658%2036.2333%20127.658%2036.3V42.5H125.078V36.4C125.078%2035.7867%20124.924%2035.3067%20124.618%2034.96C124.311%2034.6%20123.871%2034.42%20123.298%2034.42C122.724%2034.42%20122.271%2034.5933%20121.938%2034.94C121.604%2035.2733%20121.344%2035.6%20121.158%2035.92V42.5H118.618ZM136.997%2047.42V32.42H139.537V33.14C139.937%2032.78%20140.397%2032.5067%20140.917%2032.32C141.437%2032.12%20142.023%2032.02%20142.677%2032.02C143.477%2032.02%20144.19%2032.1667%20144.817%2032.46C145.457%2032.7533%20145.997%2033.1467%20146.437%2033.64C146.877%2034.1333%20147.21%2034.7133%20147.437%2035.38C147.677%2036.0333%20147.797%2036.7267%20147.797%2037.46C147.797%2038.1933%20147.677%2038.8933%20147.437%2039.56C147.21%2040.2133%20146.877%2040.7867%20146.437%2041.28C145.997%2041.7733%20145.457%2042.1667%20144.817%2042.46C144.19%2042.7533%20143.477%2042.9%20142.677%2042.9C142.023%2042.9%20141.437%2042.8%20140.917%2042.6C140.397%2042.4133%20139.937%2042.14%20139.537%2041.78V47.42H136.997ZM139.557%2038.98C139.89%2039.4733%20140.283%2039.8533%20140.737%2040.12C141.203%2040.3733%20141.73%2040.5%20142.317%2040.5C143.17%2040.5%20143.857%2040.2133%20144.377%2039.64C144.897%2039.0667%20145.157%2038.34%20145.157%2037.46C145.157%2036.58%20144.897%2035.8533%20144.377%2035.28C143.857%2034.7067%20143.17%2034.42%20142.317%2034.42C141.73%2034.42%20141.203%2034.5533%20140.737%2034.82C140.283%2035.0733%20139.89%2035.4467%20139.557%2035.94L139.537%2035.92V39L139.557%2038.98ZM150.644%2038.82V34.74H148.764V32.42H150.644V29.9H153.204V32.42H156.284V34.74H153.204V38.82C153.204%2039.38%20153.344%2039.78%20153.624%2040.02C153.918%2040.26%20154.311%2040.38%20154.804%2040.38C155.151%2040.38%20155.444%2040.36%20155.684%2040.32C155.924%2040.28%20156.131%2040.2267%20156.304%2040.16V42.38C156.051%2042.4867%20155.764%2042.5667%20155.444%2042.62C155.138%2042.6733%20154.778%2042.7%20154.364%2042.7C153.111%2042.7%20152.178%2042.36%20151.564%2041.68C150.951%2041%20150.644%2040.0467%20150.644%2038.82ZM167.644%2040.86C167.177%2041.4867%20166.564%2041.9867%20165.804%2042.36C165.044%2042.72%20164.19%2042.9%20163.244%2042.9C162.35%2042.9%20161.55%2042.7533%20160.844%2042.46C160.15%2042.1667%20159.564%2041.7733%20159.084%2041.28C158.617%2040.7867%20158.257%2040.2133%20158.004%2039.56C157.764%2038.8933%20157.644%2038.1933%20157.644%2037.46C157.644%2036.7133%20157.757%2036.0133%20157.984%2035.36C158.224%2034.6933%20158.564%2034.1133%20159.004%2033.62C159.444%2033.1267%20159.984%2032.74%20160.624%2032.46C161.264%2032.1667%20161.997%2032.02%20162.824%2032.02C164.21%2032.02%20165.33%2032.4467%20166.184%2033.3C167.037%2034.14%20167.464%2035.22%20167.464%2036.54C167.464%2036.82%20167.444%2037.0867%20167.404%2037.34C167.377%2037.5933%20167.344%2037.8067%20167.304%2037.98H160.244C160.324%2038.8067%20160.637%2039.4533%20161.184%2039.92C161.73%2040.3867%20162.43%2040.62%20163.284%2040.62C163.83%2040.62%20164.324%2040.5133%20164.764%2040.3C165.204%2040.0733%20165.557%2039.78%20165.824%2039.42L167.644%2040.86ZM162.824%2034.14C162.21%2034.14%20161.697%2034.3%20161.284%2034.62C160.87%2034.9267%20160.577%2035.4067%20160.404%2036.06H164.944C164.93%2035.5667%20164.737%2035.1267%20164.364%2034.74C164.004%2034.34%20163.49%2034.14%20162.824%2034.14ZM170.486%2042.5V28.5H175.106C176.639%2028.5%20177.846%2028.8733%20178.726%2029.62C179.619%2030.3667%20180.066%2031.3867%20180.066%2032.68C180.066%2033.96%20179.619%2034.9733%20178.726%2035.72C177.846%2036.4667%20176.639%2036.84%20175.106%2036.84H173.326V42.5H170.486ZM175.226%2030.92H173.326V34.42H175.226C175.826%2034.42%20176.292%2034.2667%20176.626%2033.96C176.972%2033.6533%20177.146%2033.2133%20177.146%2032.64C177.146%2032.1067%20176.972%2031.6867%20176.626%2031.38C176.292%2031.0733%20175.826%2030.92%20175.226%2030.92ZM182.036%2042.5V32.42H184.576V33.42C184.909%2033.0867%20185.289%2032.8067%20185.716%2032.58C186.156%2032.34%20186.662%2032.22%20187.236%2032.22C187.409%2032.22%20187.569%2032.2333%20187.716%2032.26C187.862%2032.2867%20187.996%2032.32%20188.116%2032.36V35.02C187.956%2034.98%20187.782%2034.9467%20187.596%2034.92C187.422%2034.8933%20187.222%2034.88%20186.996%2034.88C186.382%2034.88%20185.869%2035.02%20185.456%2035.3C185.056%2035.58%20184.762%2035.8733%20184.576%2036.18V42.5H182.036ZM194.687%2032.02C195.501%2032.02%20196.247%2032.1667%20196.927%2032.46C197.607%2032.74%20198.187%2033.1267%20198.667%2033.62C199.161%2034.1%20199.541%2034.6733%20199.807%2035.34C200.074%2036.0067%20200.207%2036.7133%20200.207%2037.46C200.207%2038.2067%20200.074%2038.9133%20199.807%2039.58C199.541%2040.2467%20199.161%2040.8267%20198.667%2041.32C198.187%2041.8%20197.607%2042.1867%20196.927%2042.48C196.247%2042.76%20195.501%2042.9%20194.687%2042.9C193.874%2042.9%20193.127%2042.76%20192.447%2042.48C191.767%2042.1867%20191.181%2041.8%20190.687%2041.32C190.207%2040.8267%20189.834%2040.2467%20189.567%2039.58C189.301%2038.9133%20189.167%2038.2067%20189.167%2037.46C189.167%2036.7133%20189.301%2036.0067%20189.567%2035.34C189.834%2034.6733%20190.207%2034.1%20190.687%2033.62C191.181%2033.1267%20191.767%2032.74%20192.447%2032.46C193.127%2032.1667%20193.874%2032.02%20194.687%2032.02ZM194.727%2040.5C195.527%2040.5%20196.201%2040.2133%20196.747%2039.64C197.294%2039.0533%20197.567%2038.3267%20197.567%2037.46C197.567%2036.58%20197.294%2035.8533%20196.747%2035.28C196.201%2034.7067%20195.527%2034.42%20194.727%2034.42C193.887%2034.42%20193.187%2034.7067%20192.627%2035.28C192.081%2035.8533%20191.807%2036.58%20191.807%2037.46C191.807%2038.34%20192.081%2039.0667%20192.627%2039.64C193.187%2040.2133%20193.887%2040.5%20194.727%2040.5Z%22%20fill%3D%22white%22%2F%3E%3C%2Fsvg%3E); +} diff --git a/views/index.ejs b/views/index.ejs deleted file mode 100644 index e9e1910..0000000 --- a/views/index.ejs +++ /dev/null @@ -1,71 +0,0 @@ - - - - - - <%= locals.title %> - - - - -

<%= locals.title %>

-

Se connecter

-
-
- -
-

- - Qu’est-ce que MonComptePro ? - -

-
- <% if (locals.userinfo) { %> -

Information utilisateur

-
<%= locals.userinfo %>
- <% } %> - <% if (locals.idtoken) { %> -

ID Token

-
<%= locals.idtoken %>
- <% } %> - <% if (locals.oauth2token) { %> -

OAuth2 Token

-
<%= locals.oauth2token %>
- <% } %> -

Interactions

-
- -
-
-
- -
-
-
- -
-
-
- -
-
- - - diff --git a/views/index.ts b/views/index.ts new file mode 100644 index 0000000..d8125f8 --- /dev/null +++ b/views/index.ts @@ -0,0 +1,90 @@ +// + +import { html } from "hono/html"; +import { readFile } from "node:fs/promises"; +import type { IdTokenClaims, TokenSet } from "openid-client"; + +// + +const critical_css = await readFile(import.meta.resolveSync("./critical.css")); + +// + +export function Index(locals: { + title: string; + stylesheet_url: string; + userinfo: string; + idtoken: IdTokenClaims; + oauth2token: TokenSet; +}) { + const user_info = locals.userinfo + ? html`

Information utilisateur

+
${JSON.stringify(locals.userinfo, null, 2)}
` + : ""; + const idtoken = locals.idtoken + ? html`

ID Token

+
${JSON.stringify(locals.idtoken, null, 2)}
` + : ""; + const oauth2token = locals.oauth2token + ? html`

OAuth2 Token

+
${JSON.stringify(locals.oauth2token, null, 2)}
` + : ""; + + return html` + + + + + ${locals.title} + + + + +

${locals.title}

+

Se connecter

+
+
+ +
+

+ + Qu’est-ce que MonComptePro ? + +

+
+ ${user_info} ${idtoken} ${oauth2token} +

Interactions

+
+ +
+
+
+ +
+
+
+ +
+
+
+ +
+
+ + + `; +}