From 4a5b65a72a834a54c855f42ae2f076578ca2179c Mon Sep 17 00:00:00 2001 From: Rajesh Rajendran Date: Mon, 25 Apr 2022 10:42:02 +0000 Subject: [PATCH 01/91] Update third-party.md --- third-party.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/third-party.md b/third-party.md index 580e4c576..4a31946e5 100644 --- a/third-party.md +++ b/third-party.md @@ -1,4 +1,4 @@ -## Licenses (as of March 19, 2022) +## Licenses (as of April 25, 2022) Below is the list of dependencies used in OpenReplay software. Licenses may change between versions, so please keep this up to date with every new library you use. @@ -107,4 +107,5 @@ Below is the list of dependencies used in OpenReplay software. Licenses may chan | k3s | Apache2 | Infrastructure | | nginx | BSD2 | Infrastructure | | clickhouse | Apache2 | Infrastructure | -| redis | BSD3 | Infrastructure | \ No newline at end of file +| redis | BSD3 | Infrastructure | +| yq | MIT | Infrastructure | From e5e6008eb8934293a471c83a641aa66de15a9470 Mon Sep 17 00:00:00 2001 From: ShiKhu Date: Mon, 25 Apr 2022 14:01:55 +0200 Subject: [PATCH 02/91] feat(backend-ender):fire bad_request on Fetch with status >=300 --- backend/services/ender/builder/builder.go | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/backend/services/ender/builder/builder.go b/backend/services/ender/builder/builder.go index 9c2067985..e428a76f6 100644 --- a/backend/services/ender/builder/builder.go +++ b/backend/services/ender/builder/builder.go @@ -254,6 +254,16 @@ func (b *builder) handleMessage(message Message, messageID uint64) { Status: msg.Status, Duration: msg.Duration, }) + if msg.Status >= 300 { + b.appendReadyMessage(&IssueEvent{ + Type: "bad_request", + MessageID: messageID, + Timestamp: msg.Timestamp, + ContextString: msg.URL, + Context: "", + Payload: "", + }) + } case *GraphQL: b.appendReadyMessage(&GraphQLEvent{ MessageID: messageID, From e1b3d20dc8d1a99b17d1021f5b90ab219bc6458f Mon Sep 17 00:00:00 2001 From: ShiKhu Date: Mon, 25 Apr 2022 15:21:41 +0200 Subject: [PATCH 03/91] feat(backend-ender): fire missing_resource event --- backend/services/ender/builder/builder.go | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/backend/services/ender/builder/builder.go b/backend/services/ender/builder/builder.go index e428a76f6..72edb2cbc 100644 --- a/backend/services/ender/builder/builder.go +++ b/backend/services/ender/builder/builder.go @@ -218,14 +218,16 @@ func (b *builder) handleMessage(message Message, messageID uint64) { Type: tp, Success: success, }) - if !success && tp == "fetch" { + if !success { + issueType := "missing_resource" + if tp == "fetch" { + issueType = "bad_request" + } b.appendReadyMessage(&IssueEvent{ - Type: "bad_request", + Type: issueType, MessageID: messageID, Timestamp: msg.Timestamp, ContextString: msg.URL, - Context: "", - Payload: "", }) } case *RawCustomEvent: @@ -260,8 +262,6 @@ func (b *builder) handleMessage(message Message, messageID uint64) { MessageID: messageID, Timestamp: msg.Timestamp, ContextString: msg.URL, - Context: "", - Payload: "", }) } case *GraphQL: From 33f6d35c05c167bd458920afce3a3ce6660b3a87 Mon Sep 17 00:00:00 2001 From: Mehdi Osman Date: Mon, 25 Apr 2022 16:07:10 +0200 Subject: [PATCH 04/91] Update vars.yaml --- scripts/helmcharts/vars.yaml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/scripts/helmcharts/vars.yaml b/scripts/helmcharts/vars.yaml index 28656d5eb..5cc50af13 100644 --- a/scripts/helmcharts/vars.yaml +++ b/scripts/helmcharts/vars.yaml @@ -58,8 +58,7 @@ ingress-nginx: &ingress-nginx forwarded-for-header: "proxy_protocol" # Ref: https://kubernetes.github.io/ingress-nginx/user-guide/nginx-configuration/configmap/#max-worker-connections max-worker-connections: 0 - # If you want the ssl redirection - # Comment the following line + # SSL redirection ssl-redirect: false force-ssl-redirect: false From a08411f1776ed9c2f80c9bae80d3d08b4a4465bf Mon Sep 17 00:00:00 2001 From: Mehdi Osman Date: Mon, 25 Apr 2022 16:22:22 +0200 Subject: [PATCH 05/91] Update env.js --- frontend/env.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/env.js b/frontend/env.js index 27700a8a5..a74c66f03 100644 --- a/frontend/env.js +++ b/frontend/env.js @@ -1,6 +1,6 @@ require('dotenv').config() -// TODO: (the problem is during the build time the frontend is isolated, as far as I remember) +// TODO: (the problem is during the build time the frontend is isolated) //const trackerInfo = require('../tracker/tracker/package.json'); const oss = { From dc9f105173c66c65955d6cf9ba89b8bf85056fc4 Mon Sep 17 00:00:00 2001 From: Taha Yassine Kraiem Date: Mon, 25 Apr 2022 16:46:07 +0200 Subject: [PATCH 06/91] feat(api): removed tracker version from projects responses --- api/chalicelib/core/projects.py | 28 ++-------------------------- api/routers/core_dynamic.py | 10 ++++------ ee/api/chalicelib/core/projects.py | 28 ++-------------------------- ee/api/routers/core_dynamic.py | 13 +++++-------- 4 files changed, 13 insertions(+), 66 deletions(-) diff --git a/api/chalicelib/core/projects.py b/api/chalicelib/core/projects.py index f6b7704f5..0b0bd963f 100644 --- a/api/chalicelib/core/projects.py +++ b/api/chalicelib/core/projects.py @@ -41,26 +41,14 @@ def __create(tenant_id, name): return get_project(tenant_id=tenant_id, project_id=project_id, include_gdpr=True) -def get_projects(tenant_id, recording_state=False, gdpr=None, recorded=False, stack_integrations=False, version=False, - last_tracker_version=None): +def get_projects(tenant_id, recording_state=False, gdpr=None, recorded=False, stack_integrations=False): with pg_client.PostgresClient() as cur: - tracker_query = "" - if last_tracker_version is not None and len(last_tracker_version) > 0: - tracker_query = cur.mogrify( - """,(SELECT tracker_version FROM public.sessions - WHERE sessions.project_id = s.project_id - AND tracker_version=%(version)s AND tracker_version IS NOT NULL LIMIT 1) AS tracker_version""", - {"version": last_tracker_version}).decode('UTF-8') - elif version: - tracker_query = ",(SELECT tracker_version FROM public.sessions WHERE sessions.project_id = s.project_id ORDER BY start_ts DESC LIMIT 1) AS tracker_version" - cur.execute(f"""\ SELECT s.project_id, s.name, s.project_key, s.save_request_payloads {',s.gdpr' if gdpr else ''} {',COALESCE((SELECT TRUE FROM public.sessions WHERE sessions.project_id = s.project_id LIMIT 1), FALSE) AS recorded' if recorded else ''} {',stack_integrations.count>0 AS stack_integrations' if stack_integrations else ''} - {tracker_query} FROM public.projects AS s {'LEFT JOIN LATERAL (SELECT COUNT(*) AS count FROM public.integrations WHERE s.project_id = integrations.project_id LIMIT 1) AS stack_integrations ON TRUE' if stack_integrations else ''} WHERE s.deleted_at IS NULL @@ -90,19 +78,8 @@ def get_projects(tenant_id, recording_state=False, gdpr=None, recorded=False, st return helper.list_to_camel_case(rows) -def get_project(tenant_id, project_id, include_last_session=False, include_gdpr=None, version=False, - last_tracker_version=None): +def get_project(tenant_id, project_id, include_last_session=False, include_gdpr=None): with pg_client.PostgresClient() as cur: - tracker_query = "" - if last_tracker_version is not None and len(last_tracker_version) > 0: - tracker_query = cur.mogrify( - """,(SELECT tracker_version FROM public.sessions - WHERE sessions.project_id = s.project_id - AND tracker_version=%(version)s AND tracker_version IS NOT NULL LIMIT 1) AS tracker_version""", - {"version": last_tracker_version}).decode('UTF-8') - elif version: - tracker_query = ",(SELECT tracker_version FROM public.sessions WHERE sessions.project_id = s.project_id ORDER BY start_ts DESC LIMIT 1) AS tracker_version" - query = cur.mogrify(f"""\ SELECT s.project_id, @@ -111,7 +88,6 @@ def get_project(tenant_id, project_id, include_last_session=False, include_gdpr= s.save_request_payloads {",(SELECT max(ss.start_ts) FROM public.sessions AS ss WHERE ss.project_id = %(project_id)s) AS last_recorded_session_at" if include_last_session else ""} {',s.gdpr' if include_gdpr else ''} - {tracker_query} FROM public.projects AS s where s.project_id =%(project_id)s AND s.deleted_at IS NULL diff --git a/api/routers/core_dynamic.py b/api/routers/core_dynamic.py index 790e65340..e7e87e76c 100644 --- a/api/routers/core_dynamic.py +++ b/api/routers/core_dynamic.py @@ -91,10 +91,9 @@ def get_projects_limit(context: schemas.CurrentContext = Depends(OR_context)): @app.get('/projects/{projectId}', tags=['projects']) -def get_project(projectId: int, last_tracker_version: Optional[str] = None, - context: schemas.CurrentContext = Depends(OR_context)): +def get_project(projectId: int, context: schemas.CurrentContext = Depends(OR_context)): data = projects.get_project(tenant_id=context.tenant_id, project_id=projectId, include_last_session=True, - include_gdpr=True, last_tracker_version=last_tracker_version) + include_gdpr=True) if data is None: return {"errors": ["project not found"]} return {"data": data} @@ -223,7 +222,6 @@ def get_client(context: schemas.CurrentContext = Depends(OR_context)): @app.get('/projects', tags=['projects']) -def get_projects(last_tracker_version: Optional[str] = None, context: schemas.CurrentContext = Depends(OR_context)): +def get_projects(context: schemas.CurrentContext = Depends(OR_context)): return {"data": projects.get_projects(tenant_id=context.tenant_id, recording_state=True, gdpr=True, recorded=True, - stack_integrations=True, version=True, - last_tracker_version=last_tracker_version)} + stack_integrations=True)} diff --git a/ee/api/chalicelib/core/projects.py b/ee/api/chalicelib/core/projects.py index af6decffd..6a06e8230 100644 --- a/ee/api/chalicelib/core/projects.py +++ b/ee/api/chalicelib/core/projects.py @@ -41,19 +41,8 @@ def __create(tenant_id, name): return get_project(tenant_id=tenant_id, project_id=project_id, include_gdpr=True) -def get_projects(tenant_id, recording_state=False, gdpr=None, recorded=False, stack_integrations=False, version=False, - last_tracker_version=None, user_id=None): +def get_projects(tenant_id, recording_state=False, gdpr=None, recorded=False, stack_integrations=False, user_id=None): with pg_client.PostgresClient() as cur: - tracker_query = "" - if last_tracker_version is not None and len(last_tracker_version) > 0: - tracker_query = cur.mogrify( - """,(SELECT tracker_version FROM public.sessions - WHERE sessions.project_id = s.project_id - AND tracker_version=%(version)s AND tracker_version IS NOT NULL LIMIT 1) AS tracker_version""", - {"version": last_tracker_version}).decode('UTF-8') - elif version: - tracker_query = ",(SELECT tracker_version FROM public.sessions WHERE sessions.project_id = s.project_id ORDER BY start_ts DESC LIMIT 1) AS tracker_version" - role_query = """INNER JOIN LATERAL (SELECT 1 FROM users INNER JOIN roles USING (role_id) @@ -70,7 +59,6 @@ def get_projects(tenant_id, recording_state=False, gdpr=None, recorded=False, st {',s.gdpr' if gdpr else ''} {',COALESCE((SELECT TRUE FROM public.sessions WHERE sessions.project_id = s.project_id LIMIT 1), FALSE) AS recorded' if recorded else ''} {',stack_integrations.count>0 AS stack_integrations' if stack_integrations else ''} - {tracker_query} FROM public.projects AS s {'LEFT JOIN LATERAL (SELECT COUNT(*) AS count FROM public.integrations WHERE s.project_id = integrations.project_id LIMIT 1) AS stack_integrations ON TRUE' if stack_integrations else ''} {role_query if user_id is not None else ""} @@ -104,19 +92,8 @@ def get_projects(tenant_id, recording_state=False, gdpr=None, recorded=False, st return helper.list_to_camel_case(rows) -def get_project(tenant_id, project_id, include_last_session=False, include_gdpr=None, version=False, - last_tracker_version=None): +def get_project(tenant_id, project_id, include_last_session=False, include_gdpr=None): with pg_client.PostgresClient() as cur: - tracker_query = "" - if last_tracker_version is not None and len(last_tracker_version) > 0: - tracker_query = cur.mogrify( - """,(SELECT tracker_version FROM public.sessions - WHERE sessions.project_id = s.project_id - AND tracker_version=%(version)s AND tracker_version IS NOT NULL LIMIT 1) AS tracker_version""", - {"version": last_tracker_version}).decode('UTF-8') - elif version: - tracker_query = ",(SELECT tracker_version FROM public.sessions WHERE sessions.project_id = s.project_id ORDER BY start_ts DESC LIMIT 1) AS tracker_version" - query = cur.mogrify(f"""\ SELECT s.project_id, @@ -125,7 +102,6 @@ def get_project(tenant_id, project_id, include_last_session=False, include_gdpr= s.save_request_payloads {",(SELECT max(ss.start_ts) FROM public.sessions AS ss WHERE ss.project_id = %(project_id)s) AS last_recorded_session_at" if include_last_session else ""} {',s.gdpr' if include_gdpr else ''} - {tracker_query} FROM public.projects AS s where s.tenant_id =%(tenant_id)s AND s.project_id =%(project_id)s diff --git a/ee/api/routers/core_dynamic.py b/ee/api/routers/core_dynamic.py index 561100ff2..31ed1d099 100644 --- a/ee/api/routers/core_dynamic.py +++ b/ee/api/routers/core_dynamic.py @@ -97,10 +97,9 @@ def get_projects_limit(context: schemas.CurrentContext = Depends(OR_context)): @app.get('/projects/{projectId}', tags=['projects']) -def get_project(projectId: int, last_tracker_version: Optional[str] = None, - context: schemas.CurrentContext = Depends(OR_context)): +def get_project(projectId: int, context: schemas.CurrentContext = Depends(OR_context)): data = projects.get_project(tenant_id=context.tenant_id, project_id=projectId, include_last_session=True, - include_gdpr=True, last_tracker_version=last_tracker_version) + include_gdpr=True) if data is None: return {"errors": ["project not found"]} return {"data": data} @@ -227,15 +226,13 @@ def get_client(context: schemas.CurrentContext = Depends(OR_context)): r = tenants.get_by_tenant_id(context.tenant_id) if r is not None: r.pop("createdAt") - r["projects"] = projects.get_projects(tenant_id=context.tenant_id, recording_state=True, recorded=True, - stack_integrations=True, version=True, user_id=context.user_id) + return { 'data': r } @app.get('/projects', tags=['projects']) -def get_projects(last_tracker_version: Optional[str] = None, context: schemas.CurrentContext = Depends(OR_context)): +def get_projects(context: schemas.CurrentContext = Depends(OR_context)): return {"data": projects.get_projects(tenant_id=context.tenant_id, recording_state=True, gdpr=True, recorded=True, - stack_integrations=True, version=True, - last_tracker_version=last_tracker_version, user_id=context.user_id)} + stack_integrations=True, user_id=context.user_id)} From b8a11dd5d94514c96e2086852555c2f38ad066f4 Mon Sep 17 00:00:00 2001 From: Mehdi Osman Date: Mon, 25 Apr 2022 16:52:50 +0200 Subject: [PATCH 07/91] Update env.js --- frontend/env.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/env.js b/frontend/env.js index a74c66f03..d85afd233 100644 --- a/frontend/env.js +++ b/frontend/env.js @@ -21,7 +21,7 @@ const oss = { MINIO_ACCESS_KEY: process.env.MINIO_ACCESS_KEY, MINIO_SECRET_KEY: process.env.MINIO_SECRET_KEY, ICE_SERVERS: process.env.ICE_SERVERS, - TRACKER_VERSION: '3.5.9' // trackerInfo.version, + TRACKER_VERSION: '3.5.10' // trackerInfo.version, } module.exports = { From ef46e798d4fbdc1cc640e1f27731fe6a69c96975 Mon Sep 17 00:00:00 2001 From: ShiKhu Date: Mon, 25 Apr 2022 17:13:04 +0200 Subject: [PATCH 08/91] fix(frontend-assist):clear disconnection timeout before haveing the new one --- .../MessageDistributor/managers/AssistManager.ts | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/frontend/app/player/MessageDistributor/managers/AssistManager.ts b/frontend/app/player/MessageDistributor/managers/AssistManager.ts index 0cd752f1d..dc48b03f4 100644 --- a/frontend/app/player/MessageDistributor/managers/AssistManager.ts +++ b/frontend/app/player/MessageDistributor/managers/AssistManager.ts @@ -172,8 +172,20 @@ export default class AssistManager { socket.on('SESSION_RECONNECTED', () => { showDisconnectTimeout && clearTimeout(showDisconnectTimeout) }) + + socket.on('UPDATE_SESSION', ({ active }) => { + showDisconnectTimeout && clearTimeout(showDisconnectTimeout) + // if (typeof active === "boolean") { + // if (active) { + // + // } else { + // this.setStatus(ConnectionStatus.Inactive) + // } + // } + }) socket.on('SESSION_DISCONNECTED', e => { waitingForMessages = true + showDisconnectTimeout && clearTimeout(showDisconnectTimeout) showDisconnectTimeout = setTimeout(() => { if (this.cleaned) { return } this.setStatus(ConnectionStatus.Disconnected) From 530d04ffe087211e1d09b116f0842cab7569867d Mon Sep 17 00:00:00 2001 From: Shekar Siri Date: Mon, 25 Apr 2022 18:33:08 +0200 Subject: [PATCH 09/91] change(ui) - removed errors count check --- frontend/app/components/Header/Header.js | 1 - 1 file changed, 1 deletion(-) diff --git a/frontend/app/components/Header/Header.js b/frontend/app/components/Header/Header.js index 219463499..460f518d7 100644 --- a/frontend/app/components/Header/Header.js +++ b/frontend/app/components/Header/Header.js @@ -96,7 +96,6 @@ const Header = (props) => { className={ styles.nav } activeClassName={ styles.active } > - { 'Errors' } Date: Mon, 25 Apr 2022 18:38:11 +0200 Subject: [PATCH 10/91] fix(backend): bad_request starts from 400 --- backend/services/ender/builder/builder.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backend/services/ender/builder/builder.go b/backend/services/ender/builder/builder.go index 72edb2cbc..1a89f67b6 100644 --- a/backend/services/ender/builder/builder.go +++ b/backend/services/ender/builder/builder.go @@ -256,7 +256,7 @@ func (b *builder) handleMessage(message Message, messageID uint64) { Status: msg.Status, Duration: msg.Duration, }) - if msg.Status >= 300 { + if msg.Status >= 400 { b.appendReadyMessage(&IssueEvent{ Type: "bad_request", MessageID: messageID, From d79a14f6d043002cb46d0f8e33c10585e5283b5e Mon Sep 17 00:00:00 2001 From: ShiKhu Date: Mon, 25 Apr 2022 19:06:09 +0200 Subject: [PATCH 11/91] fix(tracker):3.5.10:fix pre-start & resources duplication --- tracker/tracker/package.json | 2 +- tracker/tracker/src/main/app/index.ts | 65 ++++++++++------------ tracker/tracker/src/main/modules/timing.ts | 29 +++++----- 3 files changed, 44 insertions(+), 52 deletions(-) diff --git a/tracker/tracker/package.json b/tracker/tracker/package.json index 0c5b06634..555efe07d 100644 --- a/tracker/tracker/package.json +++ b/tracker/tracker/package.json @@ -1,7 +1,7 @@ { "name": "@openreplay/tracker", "description": "The OpenReplay tracker main package", - "version": "3.5.9", + "version": "3.5.10", "keywords": [ "logging", "replay" diff --git a/tracker/tracker/src/main/app/index.ts b/tracker/tracker/src/main/app/index.ts index 8fd2cb4ac..ace8ecf6e 100644 --- a/tracker/tracker/src/main/app/index.ts +++ b/tracker/tracker/src/main/app/index.ts @@ -13,16 +13,8 @@ import { deviceMemory, jsHeapSizeLimit } from "../modules/performance.js"; import type { Options as ObserverOptions } from "./observer/top_observer.js"; import type { Options as SanitizerOptions } from "./sanitizer.js"; import type { Options as LoggerOptions } from "./logger.js" - - import type { Options as WebworkerOptions, WorkerMessageData } from "../../webworker/types.js"; -export interface OnStartInfo { - sessionID: string, - sessionToken: string, - userUUID: string, -} - // TODO: Unify and clearly describe options logic export interface StartOptions { @@ -31,6 +23,20 @@ export interface StartOptions { forceNew?: boolean, } +export interface OnStartInfo { + sessionID: string, + sessionToken: string, + userUUID: string, +} + +type StartCallback = (i: OnStartInfo) => void +type CommitCallback = (messages: Array) => void +enum ActivityState { + NotActive, + Starting, + Active, +} + type AppOptions = { revID: string; node_id: string; @@ -47,19 +53,11 @@ type AppOptions = { __debug__?: LoggerOptions; // @deprecated - onStart?: (info: OnStartInfo) => void; + onStart?: StartCallback; } & WebworkerOptions; export type Options = AppOptions & ObserverOptions & SanitizerOptions -type Callback = () => void -type CommitCallback = (messages: Array) => void -enum ActivityState { - NotActive, - Starting, - Active, -} - export const CANCELED = "canceled" // TODO: use backendHost only @@ -75,8 +73,8 @@ export default class App { readonly session: Session; private readonly messages: Array = []; private readonly observer: Observer; - private readonly startCallbacks: Array = []; - private readonly stopCallbacks: Array = []; + private readonly startCallbacks: Array = []; + private readonly stopCallbacks: Array = []; private readonly commitCallbacks: Array = []; private readonly options: AppOptions; private readonly revID: string; @@ -167,20 +165,14 @@ export default class App { this.debug.error("OpenReplay error: ", context, e) } - private readonly preStartMessages: Message[] = [] send(message: Message, urgent = false): void { - if (this.activityState === ActivityState.NotActive) { - return; - } - if (this.activityState === ActivityState.Starting) { - this.preStartMessages.push(message); - } - if (this.preStartMessages.length) { - this.messages.push(...this.preStartMessages); - this.preStartMessages.length = 0 - } + if (this.activityState === ActivityState.NotActive) { return } this.messages.push(message); - if (urgent) { + // TODO: commit on start if there were `urgent` sends; + // Clearify where urgent can be used for; + // Clearify workflow for each type of message in case it was sent before start + // (like Fetch before start; maybe add an option "preCapture: boolean" or sth alike) + if (this.activityState === ActivityState.Active && urgent) { this.commit(); } } @@ -211,11 +203,10 @@ export default class App { attachCommitCallback(cb: CommitCallback): void { this.commitCallbacks.push(cb) } - - attachStartCallback(cb: Callback): void { + attachStartCallback(cb: StartCallback): void { this.startCallbacks.push(cb); } - attachStopCallback(cb: Callback): void { + attachStopCallback(cb: Function): void { this.stopCallbacks.push(cb); } attachEventListener( @@ -394,13 +385,15 @@ export default class App { beaconSizeLimit } this.worker.postMessage(startWorkerMsg) - this.startCallbacks.forEach((cb) => cb()); + + const onStartInfo = { sessionToken: token, userUUID, sessionID }; + + this.startCallbacks.forEach((cb) => cb(onStartInfo)); this.observer.observe(); this.ticker.start(); this.notify.log("OpenReplay tracking started."); // TODO: get rid of onStart - const onStartInfo = { sessionToken: token, userUUID, sessionID }; if (typeof this.options.onStart === 'function') { this.options.onStart(onStartInfo); } diff --git a/tracker/tracker/src/main/modules/timing.ts b/tracker/tracker/src/main/modules/timing.ts index 60e30019f..033741838 100644 --- a/tracker/tracker/src/main/modules/timing.ts +++ b/tracker/tracker/src/main/modules/timing.ts @@ -107,18 +107,6 @@ export default function (app: App, opts: Partial): void { } if (!options.captureResourceTimings) { return } // Resources are necessary for all timings - const mQueue: Message[] = [] - function sendOnStart(m: Message) { - if (app.active()) { - app.send(m) - } else { - mQueue.push(m) - } - } - app.attachStartCallback(function() { - mQueue.forEach(m => app.send(m)) - }) - let resources: ResourcesTimeMap | null = {} function resourceTiming(entry: PerformanceResourceTiming): void { @@ -126,7 +114,7 @@ export default function (app: App, opts: Partial): void { if (resources !== null) { resources[entry.name] = entry.startTime + entry.duration; } - sendOnStart(new + app.send(new ResourceTiming( entry.startTime + performance.timing.navigationStart, entry.duration, @@ -147,8 +135,19 @@ export default function (app: App, opts: Partial): void { const observer: PerformanceObserver = new PerformanceObserver( (list) => list.getEntries().forEach(resourceTiming), ) - performance.getEntriesByType('resource').forEach(resourceTiming) - observer.observe({ entryTypes: ['resource'] }) + + let prevSessionID: string | undefined + app.attachStartCallback(function({ sessionID }) { + if (sessionID !== prevSessionID) { // Send past page resources on a newly started session + performance.getEntriesByType('resource').forEach(resourceTiming) + prevSessionID = sessionID + } + observer.observe({ entryTypes: ['resource'] }) + }) + + app.attachStopCallback(function() { + observer.disconnect() + }) let firstPaint = 0, From 43669c082cee7c0f5f8f072cd03e1621f8d46a53 Mon Sep 17 00:00:00 2001 From: ShiKhu Date: Mon, 25 Apr 2022 23:09:52 +0200 Subject: [PATCH 12/91] gofmt --- backend/pkg/dev/profiling/profiling.go | 25 +- backend/pkg/env/aws.go | 2 +- backend/pkg/env/vars.go | 7 +- backend/pkg/env/worker-id.go | 4 +- backend/pkg/flakeid/flakeid.go | 2 +- backend/pkg/hashid/hashid.go | 1 - backend/pkg/intervals/intervals.go | 6 +- backend/pkg/log/queue.go | 99 +- backend/pkg/messages/facade.go | 2 +- backend/pkg/messages/filters.go | 3 +- backend/pkg/messages/get-timestamp.go | 118 +- .../pkg/messages/legacy-message-transform.go | 15 +- backend/pkg/messages/messages.go | 2304 ++++++------- .../pkg/messages/performance/performance.go | 3 +- backend/pkg/messages/primitives.go | 6 +- backend/pkg/messages/read-message.go | 2846 ++++++++--------- backend/pkg/redisstream/producer.go | 13 +- backend/pkg/redisstream/redis.go | 8 +- backend/pkg/storage/s3.go | 41 +- backend/pkg/url/assets/css.go | 2 +- backend/pkg/url/method.go | 10 +- backend/services/assets/jsexception.go | 8 +- backend/services/assets/main.go | 1 + backend/services/db/heuristics/anr.go | 13 +- backend/services/db/heuristics/clickrage.go | 17 +- backend/services/db/heuristics/heuristics.go | 13 +- backend/services/db/heuristics/performance.go | 25 +- .../db/heuristics/readyMessageStore.go | 5 +- backend/services/db/heuristics/session.go | 12 +- backend/services/db/stats.go | 20 +- backend/services/ender/builder/builderMap.go | 9 +- .../ender/builder/clikRageDetector.go | 26 +- .../services/ender/builder/cpuIssueFinder.go | 29 +- .../ender/builder/deadClickDetector.go | 24 +- .../services/ender/builder/domDropDetector.go | 11 +- .../ender/builder/inputEventBuilder.go | 11 +- .../ender/builder/memoryIssueFinder.go | 24 +- .../ender/builder/pageEventBuilder.go | 16 +- .../builder/performanceTrackAggrBuilder.go | 23 +- backend/services/http/assets.go | 4 +- backend/services/http/handlers-depricated.go | 2 +- backend/services/http/ios-device.go | 256 +- backend/services/http/uuid.go | 2 +- .../integrations/clientManager/manager.go | 24 +- .../integrations/integration/cloudwatch.go | 43 +- .../integrations/integration/elasticsearch.go | 6 +- .../integrations/integration/rollbar.go | 66 +- .../integrations/integration/utils.go | 19 +- backend/services/storage/gzip.go | 19 +- 49 files changed, 3097 insertions(+), 3148 deletions(-) diff --git a/backend/pkg/dev/profiling/profiling.go b/backend/pkg/dev/profiling/profiling.go index 139aaeac6..c05c47549 100644 --- a/backend/pkg/dev/profiling/profiling.go +++ b/backend/pkg/dev/profiling/profiling.go @@ -1,24 +1,23 @@ package profiling import ( - "log" - "net/http" - "github.com/gorilla/mux" - _ "net/http/pprof" -) + "github.com/gorilla/mux" + "log" + "net/http" + _ "net/http/pprof" +) func Profile() { go func() { - router := mux.NewRouter() - router.PathPrefix("/debug/pprof/").Handler(http.DefaultServeMux) - log.Println("Starting profiler...") - if err := http.ListenAndServe(":6060", router); err != nil { - panic(err) - } + router := mux.NewRouter() + router.PathPrefix("/debug/pprof/").Handler(http.DefaultServeMux) + log.Println("Starting profiler...") + if err := http.ListenAndServe(":6060", router); err != nil { + panic(err) + } }() } - /* docker run -p 6060:6060 -e REQUIRED_ENV=http://value -e ANOTHER_ENV=anothervalue workername @@ -34,4 +33,4 @@ go tool pprof http://localhost:6060/debug/pprof/profile?seconds=30 THEN https://www.speedscope.app/ -*/ \ No newline at end of file +*/ diff --git a/backend/pkg/env/aws.go b/backend/pkg/env/aws.go index 6573c8551..cb7445797 100644 --- a/backend/pkg/env/aws.go +++ b/backend/pkg/env/aws.go @@ -19,7 +19,7 @@ func AWSSessionOnRegion(region string) *_session.Session { if AWS_ENDPOINT != "" { config.Endpoint = aws.String(AWS_ENDPOINT) config.DisableSSL = aws.Bool(true) - config.S3ForcePathStyle = aws.Bool(true) + config.S3ForcePathStyle = aws.Bool(true) } aws_session, err := _session.NewSession(config) if err != nil { diff --git a/backend/pkg/env/vars.go b/backend/pkg/env/vars.go index 33ae9da3c..eb88b3c6b 100644 --- a/backend/pkg/env/vars.go +++ b/backend/pkg/env/vars.go @@ -22,7 +22,7 @@ func Uint64(key string) uint64 { v := String(key) n, err := strconv.ParseUint(v, 10, 64) if err != nil { - log.Fatalln(key + " has a wrong value. ", err) + log.Fatalln(key+" has a wrong value. ", err) } return n } @@ -31,12 +31,13 @@ func Uint16(key string) uint16 { v := String(key) n, err := strconv.ParseUint(v, 10, 16) if err != nil { - log.Fatalln(key + " has a wrong value. ", err) + log.Fatalln(key+" has a wrong value. ", err) } return uint16(n) } const MAX_INT = uint64(^uint(0) >> 1) + func Int(key string) int { val := Uint64(key) if val > MAX_INT { @@ -54,4 +55,4 @@ func Bool(key string) bool { return true } return false -} \ No newline at end of file +} diff --git a/backend/pkg/env/worker-id.go b/backend/pkg/env/worker-id.go index 47fdffc43..22d077832 100644 --- a/backend/pkg/env/worker-id.go +++ b/backend/pkg/env/worker-id.go @@ -5,9 +5,9 @@ import ( ) func hashHostname(hostname string) uint16 { - var h uint16 ; + var h uint16 for i, b := range hostname { - h += uint16(i+1)*uint16(b) + h += uint16(i+1) * uint16(b) } return h } diff --git a/backend/pkg/flakeid/flakeid.go b/backend/pkg/flakeid/flakeid.go index 13e064896..c54b990a5 100644 --- a/backend/pkg/flakeid/flakeid.go +++ b/backend/pkg/flakeid/flakeid.go @@ -8,7 +8,7 @@ const ( TIMESTAMP_MAX = 1< m.Timestamp || prt.mints == 0 { - prt.mints = m.Timestamp - } - prt.lastts = m.Timestamp - prt.lastID = m.ID - prt.count += 1 + if prt.maxts < m.Timestamp { + prt.maxts = m.Timestamp + } + if prt.mints > m.Timestamp || prt.mints == 0 { + prt.mints = m.Timestamp + } + prt.lastts = m.Timestamp + prt.lastID = m.ID + prt.count += 1 - - select { - case <-qs.tick: - qs.LogThenReset() - default: - } + select { + case <-qs.tick: + qs.LogThenReset() + default: + } } - func (qs *queueStats) LogThenReset() { - s := "Queue Statistics: " - for i, p := range qs.prts { - s = fmt.Sprintf("%v | %v:: lastTS %v, lastID %v, count %v, maxTS %v, minTS %v", - s, i, p.lastts, p.lastID, p.count, p.maxts, p.mints) - } - log.Println(s) - // reset - qs.prts = make(map[int32]*partitionStats) + s := "Queue Statistics: " + for i, p := range qs.prts { + s = fmt.Sprintf("%v | %v:: lastTS %v, lastID %v, count %v, maxTS %v, minTS %v", + s, i, p.lastts, p.lastID, p.count, p.maxts, p.mints) + } + log.Println(s) + // reset + qs.prts = make(map[int32]*partitionStats) } - // TODO: list of message id to log (mb filter function with callback in messages/utils.go or something) func LogMessage(s string, sessionID uint64, msg messages.Message, m *types.Meta) { - log.Printf("%v | SessionID: %v, Queue info: %v, Message: %v", s, sessionID, m, msg) + log.Printf("%v | SessionID: %v, Queue info: %v, Message: %v", s, sessionID, m, msg) } - diff --git a/backend/pkg/messages/facade.go b/backend/pkg/messages/facade.go index 91d896d19..5c024f2f6 100644 --- a/backend/pkg/messages/facade.go +++ b/backend/pkg/messages/facade.go @@ -36,6 +36,6 @@ func Encode(msg Message) []byte { // } func GetMessageTypeID(b []byte) (uint64, error) { - reader := bytes.NewReader(b) + reader := bytes.NewReader(b) return ReadUint(reader) } diff --git a/backend/pkg/messages/filters.go b/backend/pkg/messages/filters.go index f43f40142..44b2c7959 100644 --- a/backend/pkg/messages/filters.go +++ b/backend/pkg/messages/filters.go @@ -1,9 +1,8 @@ // Auto-generated, do not edit package messages - func IsReplayerType(id uint64) bool { - return 0 == id || 2 == id || 4 == id || 5 == id || 6 == id || 7 == id || 8 == id || 9 == id || 10 == id || 11 == id || 12 == id || 13 == id || 14 == id || 15 == id || 16 == id || 18 == id || 19 == id || 20 == id || 22 == id || 37 == id || 38 == id || 39 == id || 40 == id || 41 == id || 44 == id || 45 == id || 46 == id || 47 == id || 48 == id || 49 == id || 54 == id || 55 == id || 59 == id || 69 == id || 70 == id || 90 == id || 93 == id || 96 == id || 100 == id || 102 == id || 103 == id || 105 == id + return 0 == id || 2 == id || 4 == id || 5 == id || 6 == id || 7 == id || 8 == id || 9 == id || 10 == id || 11 == id || 12 == id || 13 == id || 14 == id || 15 == id || 16 == id || 18 == id || 19 == id || 20 == id || 22 == id || 37 == id || 38 == id || 39 == id || 40 == id || 41 == id || 44 == id || 45 == id || 46 == id || 47 == id || 48 == id || 49 == id || 54 == id || 55 == id || 59 == id || 69 == id || 70 == id || 90 == id || 93 == id || 96 == id || 100 == id || 102 == id || 103 == id || 105 == id } func IsIOSType(id uint64) bool { diff --git a/backend/pkg/messages/get-timestamp.go b/backend/pkg/messages/get-timestamp.go index c8e42f756..8b44764a7 100644 --- a/backend/pkg/messages/get-timestamp.go +++ b/backend/pkg/messages/get-timestamp.go @@ -1,65 +1,63 @@ // Auto-generated, do not edit package messages - func GetTimestamp(message Message) uint64 { - switch msg := message.(type) { - - case *IOSBatchMeta: - return msg.Timestamp - - case *IOSSessionStart: - return msg.Timestamp - - case *IOSSessionEnd: - return msg.Timestamp - - case *IOSMetadata: - return msg.Timestamp - - case *IOSCustomEvent: - return msg.Timestamp - - case *IOSUserID: - return msg.Timestamp - - case *IOSUserAnonymousID: - return msg.Timestamp - - case *IOSScreenChanges: - return msg.Timestamp - - case *IOSCrash: - return msg.Timestamp - - case *IOSScreenEnter: - return msg.Timestamp - - case *IOSScreenLeave: - return msg.Timestamp - - case *IOSClickEvent: - return msg.Timestamp - - case *IOSInputEvent: - return msg.Timestamp - - case *IOSPerformanceEvent: - return msg.Timestamp - - case *IOSLog: - return msg.Timestamp - - case *IOSInternalError: - return msg.Timestamp - - case *IOSNetworkCall: - return msg.Timestamp - - case *IOSIssueEvent: - return msg.Timestamp - - } - return uint64(message.Meta().Timestamp) -} + switch msg := message.(type) { + case *IOSBatchMeta: + return msg.Timestamp + + case *IOSSessionStart: + return msg.Timestamp + + case *IOSSessionEnd: + return msg.Timestamp + + case *IOSMetadata: + return msg.Timestamp + + case *IOSCustomEvent: + return msg.Timestamp + + case *IOSUserID: + return msg.Timestamp + + case *IOSUserAnonymousID: + return msg.Timestamp + + case *IOSScreenChanges: + return msg.Timestamp + + case *IOSCrash: + return msg.Timestamp + + case *IOSScreenEnter: + return msg.Timestamp + + case *IOSScreenLeave: + return msg.Timestamp + + case *IOSClickEvent: + return msg.Timestamp + + case *IOSInputEvent: + return msg.Timestamp + + case *IOSPerformanceEvent: + return msg.Timestamp + + case *IOSLog: + return msg.Timestamp + + case *IOSInternalError: + return msg.Timestamp + + case *IOSNetworkCall: + return msg.Timestamp + + case *IOSIssueEvent: + return msg.Timestamp + + } + return uint64(message.Meta().Timestamp) +} diff --git a/backend/pkg/messages/legacy-message-transform.go b/backend/pkg/messages/legacy-message-transform.go index 637f8d443..031c4444a 100644 --- a/backend/pkg/messages/legacy-message-transform.go +++ b/backend/pkg/messages/legacy-message-transform.go @@ -1,21 +1,20 @@ package messages - func transformDepricated(msg Message) Message { switch m := msg.(type) { case *MouseClickDepricated: - meta := m.Meta() + meta := m.Meta() meta.TypeID = 33 return &MouseClick{ - meta: meta, - ID: m.ID, + meta: meta, + ID: m.ID, HesitationTime: m.HesitationTime, - Label: m.Label, + Label: m.Label, // Selector: '', } // case *FetchDepricated: // return &Fetch { - // Method: m.Method, + // Method: m.Method, // URL: m.URL, // Request: m.Request, // Response: m.Response, @@ -25,8 +24,6 @@ func transformDepricated(msg Message) Message { // // Headers: '' // } default: - return msg + return msg } } - - diff --git a/backend/pkg/messages/messages.go b/backend/pkg/messages/messages.go index 38a1f61ba..e9aec5788 100644 --- a/backend/pkg/messages/messages.go +++ b/backend/pkg/messages/messages.go @@ -2,1693 +2,1693 @@ package messages type Message interface { - Encode() []byte - Meta() *meta + Encode() []byte + Meta() *meta } type meta struct { - Timestamp int64 - Index uint64 - TypeID uint64 + Timestamp int64 + Index uint64 + TypeID uint64 } // Might also implement Encode() here (?) func (m *meta) Meta() *meta { - return m + return m } type BatchMeta struct { - *meta - PageNo uint64 - FirstIndex uint64 - Timestamp int64 + *meta + PageNo uint64 + FirstIndex uint64 + Timestamp int64 } func (msg *BatchMeta) Encode() []byte { - buf := make([]byte, 31) - buf[0] = 80 - p := 1 - p = WriteUint(msg.PageNo, buf, p) - p = WriteUint(msg.FirstIndex, buf, p) - p = WriteInt(msg.Timestamp, buf, p) - return buf[:p] + buf := make([]byte, 31) + buf[0] = 80 + p := 1 + p = WriteUint(msg.PageNo, buf, p) + p = WriteUint(msg.FirstIndex, buf, p) + p = WriteInt(msg.Timestamp, buf, p) + return buf[:p] } type Timestamp struct { - *meta - Timestamp uint64 + *meta + Timestamp uint64 } func (msg *Timestamp) Encode() []byte { - buf := make([]byte, 11) - buf[0] = 0 - p := 1 - p = WriteUint(msg.Timestamp, buf, p) - return buf[:p] + buf := make([]byte, 11) + buf[0] = 0 + p := 1 + p = WriteUint(msg.Timestamp, buf, p) + return buf[:p] } type SessionStart struct { - *meta - Timestamp uint64 - ProjectID uint64 - TrackerVersion string - RevID string - UserUUID string - UserAgent string - UserOS string - UserOSVersion string - UserBrowser string - UserBrowserVersion string - UserDevice string - UserDeviceType string - UserDeviceMemorySize uint64 - UserDeviceHeapSize uint64 - UserCountry string - UserID string + *meta + Timestamp uint64 + ProjectID uint64 + TrackerVersion string + RevID string + UserUUID string + UserAgent string + UserOS string + UserOSVersion string + UserBrowser string + UserBrowserVersion string + UserDevice string + UserDeviceType string + UserDeviceMemorySize uint64 + UserDeviceHeapSize uint64 + UserCountry string + UserID string } func (msg *SessionStart) Encode() []byte { - buf := make([]byte, 161+len(msg.TrackerVersion)+len(msg.RevID)+len(msg.UserUUID)+len(msg.UserAgent)+len(msg.UserOS)+len(msg.UserOSVersion)+len(msg.UserBrowser)+len(msg.UserBrowserVersion)+len(msg.UserDevice)+len(msg.UserDeviceType)+len(msg.UserCountry)+len(msg.UserID)) - buf[0] = 1 - p := 1 - p = WriteUint(msg.Timestamp, buf, p) - p = WriteUint(msg.ProjectID, buf, p) - p = WriteString(msg.TrackerVersion, buf, p) - p = WriteString(msg.RevID, buf, p) - p = WriteString(msg.UserUUID, buf, p) - p = WriteString(msg.UserAgent, buf, p) - p = WriteString(msg.UserOS, buf, p) - p = WriteString(msg.UserOSVersion, buf, p) - p = WriteString(msg.UserBrowser, buf, p) - p = WriteString(msg.UserBrowserVersion, buf, p) - p = WriteString(msg.UserDevice, buf, p) - p = WriteString(msg.UserDeviceType, buf, p) - p = WriteUint(msg.UserDeviceMemorySize, buf, p) - p = WriteUint(msg.UserDeviceHeapSize, buf, p) - p = WriteString(msg.UserCountry, buf, p) - p = WriteString(msg.UserID, buf, p) - return buf[:p] + buf := make([]byte, 161+len(msg.TrackerVersion)+len(msg.RevID)+len(msg.UserUUID)+len(msg.UserAgent)+len(msg.UserOS)+len(msg.UserOSVersion)+len(msg.UserBrowser)+len(msg.UserBrowserVersion)+len(msg.UserDevice)+len(msg.UserDeviceType)+len(msg.UserCountry)+len(msg.UserID)) + buf[0] = 1 + p := 1 + p = WriteUint(msg.Timestamp, buf, p) + p = WriteUint(msg.ProjectID, buf, p) + p = WriteString(msg.TrackerVersion, buf, p) + p = WriteString(msg.RevID, buf, p) + p = WriteString(msg.UserUUID, buf, p) + p = WriteString(msg.UserAgent, buf, p) + p = WriteString(msg.UserOS, buf, p) + p = WriteString(msg.UserOSVersion, buf, p) + p = WriteString(msg.UserBrowser, buf, p) + p = WriteString(msg.UserBrowserVersion, buf, p) + p = WriteString(msg.UserDevice, buf, p) + p = WriteString(msg.UserDeviceType, buf, p) + p = WriteUint(msg.UserDeviceMemorySize, buf, p) + p = WriteUint(msg.UserDeviceHeapSize, buf, p) + p = WriteString(msg.UserCountry, buf, p) + p = WriteString(msg.UserID, buf, p) + return buf[:p] } type SessionDisconnect struct { - *meta - Timestamp uint64 + *meta + Timestamp uint64 } func (msg *SessionDisconnect) Encode() []byte { - buf := make([]byte, 11) - buf[0] = 2 - p := 1 - p = WriteUint(msg.Timestamp, buf, p) - return buf[:p] + buf := make([]byte, 11) + buf[0] = 2 + p := 1 + p = WriteUint(msg.Timestamp, buf, p) + return buf[:p] } type SessionEnd struct { - *meta - Timestamp uint64 + *meta + Timestamp uint64 } func (msg *SessionEnd) Encode() []byte { - buf := make([]byte, 11) - buf[0] = 3 - p := 1 - p = WriteUint(msg.Timestamp, buf, p) - return buf[:p] + buf := make([]byte, 11) + buf[0] = 3 + p := 1 + p = WriteUint(msg.Timestamp, buf, p) + return buf[:p] } type SetPageLocation struct { - *meta - URL string - Referrer string - NavigationStart uint64 + *meta + URL string + Referrer string + NavigationStart uint64 } func (msg *SetPageLocation) Encode() []byte { - buf := make([]byte, 31+len(msg.URL)+len(msg.Referrer)) - buf[0] = 4 - p := 1 - p = WriteString(msg.URL, buf, p) - p = WriteString(msg.Referrer, buf, p) - p = WriteUint(msg.NavigationStart, buf, p) - return buf[:p] + buf := make([]byte, 31+len(msg.URL)+len(msg.Referrer)) + buf[0] = 4 + p := 1 + p = WriteString(msg.URL, buf, p) + p = WriteString(msg.Referrer, buf, p) + p = WriteUint(msg.NavigationStart, buf, p) + return buf[:p] } type SetViewportSize struct { - *meta - Width uint64 - Height uint64 + *meta + Width uint64 + Height uint64 } func (msg *SetViewportSize) Encode() []byte { - buf := make([]byte, 21) - buf[0] = 5 - p := 1 - p = WriteUint(msg.Width, buf, p) - p = WriteUint(msg.Height, buf, p) - return buf[:p] + buf := make([]byte, 21) + buf[0] = 5 + p := 1 + p = WriteUint(msg.Width, buf, p) + p = WriteUint(msg.Height, buf, p) + return buf[:p] } type SetViewportScroll struct { - *meta - X int64 - Y int64 + *meta + X int64 + Y int64 } func (msg *SetViewportScroll) Encode() []byte { - buf := make([]byte, 21) - buf[0] = 6 - p := 1 - p = WriteInt(msg.X, buf, p) - p = WriteInt(msg.Y, buf, p) - return buf[:p] + buf := make([]byte, 21) + buf[0] = 6 + p := 1 + p = WriteInt(msg.X, buf, p) + p = WriteInt(msg.Y, buf, p) + return buf[:p] } type CreateDocument struct { - *meta + *meta } func (msg *CreateDocument) Encode() []byte { - buf := make([]byte, 1) - buf[0] = 7 - p := 1 + buf := make([]byte, 1) + buf[0] = 7 + p := 1 - return buf[:p] + return buf[:p] } type CreateElementNode struct { - *meta - ID uint64 - ParentID uint64 - index uint64 - Tag string - SVG bool + *meta + ID uint64 + ParentID uint64 + index uint64 + Tag string + SVG bool } func (msg *CreateElementNode) Encode() []byte { - buf := make([]byte, 51+len(msg.Tag)) - buf[0] = 8 - p := 1 - p = WriteUint(msg.ID, buf, p) - p = WriteUint(msg.ParentID, buf, p) - p = WriteUint(msg.index, buf, p) - p = WriteString(msg.Tag, buf, p) - p = WriteBoolean(msg.SVG, buf, p) - return buf[:p] + buf := make([]byte, 51+len(msg.Tag)) + buf[0] = 8 + p := 1 + p = WriteUint(msg.ID, buf, p) + p = WriteUint(msg.ParentID, buf, p) + p = WriteUint(msg.index, buf, p) + p = WriteString(msg.Tag, buf, p) + p = WriteBoolean(msg.SVG, buf, p) + return buf[:p] } type CreateTextNode struct { - *meta - ID uint64 - ParentID uint64 - Index uint64 + *meta + ID uint64 + ParentID uint64 + Index uint64 } func (msg *CreateTextNode) Encode() []byte { - buf := make([]byte, 31) - buf[0] = 9 - p := 1 - p = WriteUint(msg.ID, buf, p) - p = WriteUint(msg.ParentID, buf, p) - p = WriteUint(msg.Index, buf, p) - return buf[:p] + buf := make([]byte, 31) + buf[0] = 9 + p := 1 + p = WriteUint(msg.ID, buf, p) + p = WriteUint(msg.ParentID, buf, p) + p = WriteUint(msg.Index, buf, p) + return buf[:p] } type MoveNode struct { - *meta - ID uint64 - ParentID uint64 - Index uint64 + *meta + ID uint64 + ParentID uint64 + Index uint64 } func (msg *MoveNode) Encode() []byte { - buf := make([]byte, 31) - buf[0] = 10 - p := 1 - p = WriteUint(msg.ID, buf, p) - p = WriteUint(msg.ParentID, buf, p) - p = WriteUint(msg.Index, buf, p) - return buf[:p] + buf := make([]byte, 31) + buf[0] = 10 + p := 1 + p = WriteUint(msg.ID, buf, p) + p = WriteUint(msg.ParentID, buf, p) + p = WriteUint(msg.Index, buf, p) + return buf[:p] } type RemoveNode struct { - *meta - ID uint64 + *meta + ID uint64 } func (msg *RemoveNode) Encode() []byte { - buf := make([]byte, 11) - buf[0] = 11 - p := 1 - p = WriteUint(msg.ID, buf, p) - return buf[:p] + buf := make([]byte, 11) + buf[0] = 11 + p := 1 + p = WriteUint(msg.ID, buf, p) + return buf[:p] } type SetNodeAttribute struct { - *meta - ID uint64 - Name string - Value string + *meta + ID uint64 + Name string + Value string } func (msg *SetNodeAttribute) Encode() []byte { - buf := make([]byte, 31+len(msg.Name)+len(msg.Value)) - buf[0] = 12 - p := 1 - p = WriteUint(msg.ID, buf, p) - p = WriteString(msg.Name, buf, p) - p = WriteString(msg.Value, buf, p) - return buf[:p] + buf := make([]byte, 31+len(msg.Name)+len(msg.Value)) + buf[0] = 12 + p := 1 + p = WriteUint(msg.ID, buf, p) + p = WriteString(msg.Name, buf, p) + p = WriteString(msg.Value, buf, p) + return buf[:p] } type RemoveNodeAttribute struct { - *meta - ID uint64 - Name string + *meta + ID uint64 + Name string } func (msg *RemoveNodeAttribute) Encode() []byte { - buf := make([]byte, 21+len(msg.Name)) - buf[0] = 13 - p := 1 - p = WriteUint(msg.ID, buf, p) - p = WriteString(msg.Name, buf, p) - return buf[:p] + buf := make([]byte, 21+len(msg.Name)) + buf[0] = 13 + p := 1 + p = WriteUint(msg.ID, buf, p) + p = WriteString(msg.Name, buf, p) + return buf[:p] } type SetNodeData struct { - *meta - ID uint64 - Data string + *meta + ID uint64 + Data string } func (msg *SetNodeData) Encode() []byte { - buf := make([]byte, 21+len(msg.Data)) - buf[0] = 14 - p := 1 - p = WriteUint(msg.ID, buf, p) - p = WriteString(msg.Data, buf, p) - return buf[:p] + buf := make([]byte, 21+len(msg.Data)) + buf[0] = 14 + p := 1 + p = WriteUint(msg.ID, buf, p) + p = WriteString(msg.Data, buf, p) + return buf[:p] } type SetCSSData struct { - *meta - ID uint64 - Data string + *meta + ID uint64 + Data string } func (msg *SetCSSData) Encode() []byte { - buf := make([]byte, 21+len(msg.Data)) - buf[0] = 15 - p := 1 - p = WriteUint(msg.ID, buf, p) - p = WriteString(msg.Data, buf, p) - return buf[:p] + buf := make([]byte, 21+len(msg.Data)) + buf[0] = 15 + p := 1 + p = WriteUint(msg.ID, buf, p) + p = WriteString(msg.Data, buf, p) + return buf[:p] } type SetNodeScroll struct { - *meta - ID uint64 - X int64 - Y int64 + *meta + ID uint64 + X int64 + Y int64 } func (msg *SetNodeScroll) Encode() []byte { - buf := make([]byte, 31) - buf[0] = 16 - p := 1 - p = WriteUint(msg.ID, buf, p) - p = WriteInt(msg.X, buf, p) - p = WriteInt(msg.Y, buf, p) - return buf[:p] + buf := make([]byte, 31) + buf[0] = 16 + p := 1 + p = WriteUint(msg.ID, buf, p) + p = WriteInt(msg.X, buf, p) + p = WriteInt(msg.Y, buf, p) + return buf[:p] } type SetInputTarget struct { - *meta - ID uint64 - Label string + *meta + ID uint64 + Label string } func (msg *SetInputTarget) Encode() []byte { - buf := make([]byte, 21+len(msg.Label)) - buf[0] = 17 - p := 1 - p = WriteUint(msg.ID, buf, p) - p = WriteString(msg.Label, buf, p) - return buf[:p] + buf := make([]byte, 21+len(msg.Label)) + buf[0] = 17 + p := 1 + p = WriteUint(msg.ID, buf, p) + p = WriteString(msg.Label, buf, p) + return buf[:p] } type SetInputValue struct { - *meta - ID uint64 - Value string - Mask int64 + *meta + ID uint64 + Value string + Mask int64 } func (msg *SetInputValue) Encode() []byte { - buf := make([]byte, 31+len(msg.Value)) - buf[0] = 18 - p := 1 - p = WriteUint(msg.ID, buf, p) - p = WriteString(msg.Value, buf, p) - p = WriteInt(msg.Mask, buf, p) - return buf[:p] + buf := make([]byte, 31+len(msg.Value)) + buf[0] = 18 + p := 1 + p = WriteUint(msg.ID, buf, p) + p = WriteString(msg.Value, buf, p) + p = WriteInt(msg.Mask, buf, p) + return buf[:p] } type SetInputChecked struct { - *meta - ID uint64 - Checked bool + *meta + ID uint64 + Checked bool } func (msg *SetInputChecked) Encode() []byte { - buf := make([]byte, 21) - buf[0] = 19 - p := 1 - p = WriteUint(msg.ID, buf, p) - p = WriteBoolean(msg.Checked, buf, p) - return buf[:p] + buf := make([]byte, 21) + buf[0] = 19 + p := 1 + p = WriteUint(msg.ID, buf, p) + p = WriteBoolean(msg.Checked, buf, p) + return buf[:p] } type MouseMove struct { - *meta - X uint64 - Y uint64 + *meta + X uint64 + Y uint64 } func (msg *MouseMove) Encode() []byte { - buf := make([]byte, 21) - buf[0] = 20 - p := 1 - p = WriteUint(msg.X, buf, p) - p = WriteUint(msg.Y, buf, p) - return buf[:p] + buf := make([]byte, 21) + buf[0] = 20 + p := 1 + p = WriteUint(msg.X, buf, p) + p = WriteUint(msg.Y, buf, p) + return buf[:p] } type MouseClickDepricated struct { - *meta - ID uint64 - HesitationTime uint64 - Label string + *meta + ID uint64 + HesitationTime uint64 + Label string } func (msg *MouseClickDepricated) Encode() []byte { - buf := make([]byte, 31+len(msg.Label)) - buf[0] = 21 - p := 1 - p = WriteUint(msg.ID, buf, p) - p = WriteUint(msg.HesitationTime, buf, p) - p = WriteString(msg.Label, buf, p) - return buf[:p] + buf := make([]byte, 31+len(msg.Label)) + buf[0] = 21 + p := 1 + p = WriteUint(msg.ID, buf, p) + p = WriteUint(msg.HesitationTime, buf, p) + p = WriteString(msg.Label, buf, p) + return buf[:p] } type ConsoleLog struct { - *meta - Level string - Value string + *meta + Level string + Value string } func (msg *ConsoleLog) Encode() []byte { - buf := make([]byte, 21+len(msg.Level)+len(msg.Value)) - buf[0] = 22 - p := 1 - p = WriteString(msg.Level, buf, p) - p = WriteString(msg.Value, buf, p) - return buf[:p] + buf := make([]byte, 21+len(msg.Level)+len(msg.Value)) + buf[0] = 22 + p := 1 + p = WriteString(msg.Level, buf, p) + p = WriteString(msg.Value, buf, p) + return buf[:p] } type PageLoadTiming struct { - *meta - RequestStart uint64 - ResponseStart uint64 - ResponseEnd uint64 - DomContentLoadedEventStart uint64 - DomContentLoadedEventEnd uint64 - LoadEventStart uint64 - LoadEventEnd uint64 - FirstPaint uint64 - FirstContentfulPaint uint64 + *meta + RequestStart uint64 + ResponseStart uint64 + ResponseEnd uint64 + DomContentLoadedEventStart uint64 + DomContentLoadedEventEnd uint64 + LoadEventStart uint64 + LoadEventEnd uint64 + FirstPaint uint64 + FirstContentfulPaint uint64 } func (msg *PageLoadTiming) Encode() []byte { - buf := make([]byte, 91) - buf[0] = 23 - p := 1 - p = WriteUint(msg.RequestStart, buf, p) - p = WriteUint(msg.ResponseStart, buf, p) - p = WriteUint(msg.ResponseEnd, buf, p) - p = WriteUint(msg.DomContentLoadedEventStart, buf, p) - p = WriteUint(msg.DomContentLoadedEventEnd, buf, p) - p = WriteUint(msg.LoadEventStart, buf, p) - p = WriteUint(msg.LoadEventEnd, buf, p) - p = WriteUint(msg.FirstPaint, buf, p) - p = WriteUint(msg.FirstContentfulPaint, buf, p) - return buf[:p] + buf := make([]byte, 91) + buf[0] = 23 + p := 1 + p = WriteUint(msg.RequestStart, buf, p) + p = WriteUint(msg.ResponseStart, buf, p) + p = WriteUint(msg.ResponseEnd, buf, p) + p = WriteUint(msg.DomContentLoadedEventStart, buf, p) + p = WriteUint(msg.DomContentLoadedEventEnd, buf, p) + p = WriteUint(msg.LoadEventStart, buf, p) + p = WriteUint(msg.LoadEventEnd, buf, p) + p = WriteUint(msg.FirstPaint, buf, p) + p = WriteUint(msg.FirstContentfulPaint, buf, p) + return buf[:p] } type PageRenderTiming struct { - *meta - SpeedIndex uint64 - VisuallyComplete uint64 - TimeToInteractive uint64 + *meta + SpeedIndex uint64 + VisuallyComplete uint64 + TimeToInteractive uint64 } func (msg *PageRenderTiming) Encode() []byte { - buf := make([]byte, 31) - buf[0] = 24 - p := 1 - p = WriteUint(msg.SpeedIndex, buf, p) - p = WriteUint(msg.VisuallyComplete, buf, p) - p = WriteUint(msg.TimeToInteractive, buf, p) - return buf[:p] + buf := make([]byte, 31) + buf[0] = 24 + p := 1 + p = WriteUint(msg.SpeedIndex, buf, p) + p = WriteUint(msg.VisuallyComplete, buf, p) + p = WriteUint(msg.TimeToInteractive, buf, p) + return buf[:p] } type JSException struct { - *meta - Name string - Message string - Payload string + *meta + Name string + Message string + Payload string } func (msg *JSException) Encode() []byte { - buf := make([]byte, 31+len(msg.Name)+len(msg.Message)+len(msg.Payload)) - buf[0] = 25 - p := 1 - p = WriteString(msg.Name, buf, p) - p = WriteString(msg.Message, buf, p) - p = WriteString(msg.Payload, buf, p) - return buf[:p] + buf := make([]byte, 31+len(msg.Name)+len(msg.Message)+len(msg.Payload)) + buf[0] = 25 + p := 1 + p = WriteString(msg.Name, buf, p) + p = WriteString(msg.Message, buf, p) + p = WriteString(msg.Payload, buf, p) + return buf[:p] } type RawErrorEvent struct { - *meta - Timestamp uint64 - Source string - Name string - Message string - Payload string + *meta + Timestamp uint64 + Source string + Name string + Message string + Payload string } func (msg *RawErrorEvent) Encode() []byte { - buf := make([]byte, 51+len(msg.Source)+len(msg.Name)+len(msg.Message)+len(msg.Payload)) - buf[0] = 26 - p := 1 - p = WriteUint(msg.Timestamp, buf, p) - p = WriteString(msg.Source, buf, p) - p = WriteString(msg.Name, buf, p) - p = WriteString(msg.Message, buf, p) - p = WriteString(msg.Payload, buf, p) - return buf[:p] + buf := make([]byte, 51+len(msg.Source)+len(msg.Name)+len(msg.Message)+len(msg.Payload)) + buf[0] = 26 + p := 1 + p = WriteUint(msg.Timestamp, buf, p) + p = WriteString(msg.Source, buf, p) + p = WriteString(msg.Name, buf, p) + p = WriteString(msg.Message, buf, p) + p = WriteString(msg.Payload, buf, p) + return buf[:p] } type RawCustomEvent struct { - *meta - Name string - Payload string + *meta + Name string + Payload string } func (msg *RawCustomEvent) Encode() []byte { - buf := make([]byte, 21+len(msg.Name)+len(msg.Payload)) - buf[0] = 27 - p := 1 - p = WriteString(msg.Name, buf, p) - p = WriteString(msg.Payload, buf, p) - return buf[:p] + buf := make([]byte, 21+len(msg.Name)+len(msg.Payload)) + buf[0] = 27 + p := 1 + p = WriteString(msg.Name, buf, p) + p = WriteString(msg.Payload, buf, p) + return buf[:p] } type UserID struct { - *meta - ID string + *meta + ID string } func (msg *UserID) Encode() []byte { - buf := make([]byte, 11+len(msg.ID)) - buf[0] = 28 - p := 1 - p = WriteString(msg.ID, buf, p) - return buf[:p] + buf := make([]byte, 11+len(msg.ID)) + buf[0] = 28 + p := 1 + p = WriteString(msg.ID, buf, p) + return buf[:p] } type UserAnonymousID struct { - *meta - ID string + *meta + ID string } func (msg *UserAnonymousID) Encode() []byte { - buf := make([]byte, 11+len(msg.ID)) - buf[0] = 29 - p := 1 - p = WriteString(msg.ID, buf, p) - return buf[:p] + buf := make([]byte, 11+len(msg.ID)) + buf[0] = 29 + p := 1 + p = WriteString(msg.ID, buf, p) + return buf[:p] } type Metadata struct { - *meta - Key string - Value string + *meta + Key string + Value string } func (msg *Metadata) Encode() []byte { - buf := make([]byte, 21+len(msg.Key)+len(msg.Value)) - buf[0] = 30 - p := 1 - p = WriteString(msg.Key, buf, p) - p = WriteString(msg.Value, buf, p) - return buf[:p] + buf := make([]byte, 21+len(msg.Key)+len(msg.Value)) + buf[0] = 30 + p := 1 + p = WriteString(msg.Key, buf, p) + p = WriteString(msg.Value, buf, p) + return buf[:p] } type PageEvent struct { - *meta - MessageID uint64 - Timestamp uint64 - URL string - Referrer string - Loaded bool - RequestStart uint64 - ResponseStart uint64 - ResponseEnd uint64 - DomContentLoadedEventStart uint64 - DomContentLoadedEventEnd uint64 - LoadEventStart uint64 - LoadEventEnd uint64 - FirstPaint uint64 - FirstContentfulPaint uint64 - SpeedIndex uint64 - VisuallyComplete uint64 - TimeToInteractive uint64 + *meta + MessageID uint64 + Timestamp uint64 + URL string + Referrer string + Loaded bool + RequestStart uint64 + ResponseStart uint64 + ResponseEnd uint64 + DomContentLoadedEventStart uint64 + DomContentLoadedEventEnd uint64 + LoadEventStart uint64 + LoadEventEnd uint64 + FirstPaint uint64 + FirstContentfulPaint uint64 + SpeedIndex uint64 + VisuallyComplete uint64 + TimeToInteractive uint64 } func (msg *PageEvent) Encode() []byte { - buf := make([]byte, 171+len(msg.URL)+len(msg.Referrer)) - buf[0] = 31 - p := 1 - p = WriteUint(msg.MessageID, buf, p) - p = WriteUint(msg.Timestamp, buf, p) - p = WriteString(msg.URL, buf, p) - p = WriteString(msg.Referrer, buf, p) - p = WriteBoolean(msg.Loaded, buf, p) - p = WriteUint(msg.RequestStart, buf, p) - p = WriteUint(msg.ResponseStart, buf, p) - p = WriteUint(msg.ResponseEnd, buf, p) - p = WriteUint(msg.DomContentLoadedEventStart, buf, p) - p = WriteUint(msg.DomContentLoadedEventEnd, buf, p) - p = WriteUint(msg.LoadEventStart, buf, p) - p = WriteUint(msg.LoadEventEnd, buf, p) - p = WriteUint(msg.FirstPaint, buf, p) - p = WriteUint(msg.FirstContentfulPaint, buf, p) - p = WriteUint(msg.SpeedIndex, buf, p) - p = WriteUint(msg.VisuallyComplete, buf, p) - p = WriteUint(msg.TimeToInteractive, buf, p) - return buf[:p] + buf := make([]byte, 171+len(msg.URL)+len(msg.Referrer)) + buf[0] = 31 + p := 1 + p = WriteUint(msg.MessageID, buf, p) + p = WriteUint(msg.Timestamp, buf, p) + p = WriteString(msg.URL, buf, p) + p = WriteString(msg.Referrer, buf, p) + p = WriteBoolean(msg.Loaded, buf, p) + p = WriteUint(msg.RequestStart, buf, p) + p = WriteUint(msg.ResponseStart, buf, p) + p = WriteUint(msg.ResponseEnd, buf, p) + p = WriteUint(msg.DomContentLoadedEventStart, buf, p) + p = WriteUint(msg.DomContentLoadedEventEnd, buf, p) + p = WriteUint(msg.LoadEventStart, buf, p) + p = WriteUint(msg.LoadEventEnd, buf, p) + p = WriteUint(msg.FirstPaint, buf, p) + p = WriteUint(msg.FirstContentfulPaint, buf, p) + p = WriteUint(msg.SpeedIndex, buf, p) + p = WriteUint(msg.VisuallyComplete, buf, p) + p = WriteUint(msg.TimeToInteractive, buf, p) + return buf[:p] } type InputEvent struct { - *meta - MessageID uint64 - Timestamp uint64 - Value string - ValueMasked bool - Label string + *meta + MessageID uint64 + Timestamp uint64 + Value string + ValueMasked bool + Label string } func (msg *InputEvent) Encode() []byte { - buf := make([]byte, 51+len(msg.Value)+len(msg.Label)) - buf[0] = 32 - p := 1 - p = WriteUint(msg.MessageID, buf, p) - p = WriteUint(msg.Timestamp, buf, p) - p = WriteString(msg.Value, buf, p) - p = WriteBoolean(msg.ValueMasked, buf, p) - p = WriteString(msg.Label, buf, p) - return buf[:p] + buf := make([]byte, 51+len(msg.Value)+len(msg.Label)) + buf[0] = 32 + p := 1 + p = WriteUint(msg.MessageID, buf, p) + p = WriteUint(msg.Timestamp, buf, p) + p = WriteString(msg.Value, buf, p) + p = WriteBoolean(msg.ValueMasked, buf, p) + p = WriteString(msg.Label, buf, p) + return buf[:p] } type ClickEvent struct { - *meta - MessageID uint64 - Timestamp uint64 - HesitationTime uint64 - Label string - Selector string + *meta + MessageID uint64 + Timestamp uint64 + HesitationTime uint64 + Label string + Selector string } func (msg *ClickEvent) Encode() []byte { - buf := make([]byte, 51+len(msg.Label)+len(msg.Selector)) - buf[0] = 33 - p := 1 - p = WriteUint(msg.MessageID, buf, p) - p = WriteUint(msg.Timestamp, buf, p) - p = WriteUint(msg.HesitationTime, buf, p) - p = WriteString(msg.Label, buf, p) - p = WriteString(msg.Selector, buf, p) - return buf[:p] + buf := make([]byte, 51+len(msg.Label)+len(msg.Selector)) + buf[0] = 33 + p := 1 + p = WriteUint(msg.MessageID, buf, p) + p = WriteUint(msg.Timestamp, buf, p) + p = WriteUint(msg.HesitationTime, buf, p) + p = WriteString(msg.Label, buf, p) + p = WriteString(msg.Selector, buf, p) + return buf[:p] } type ErrorEvent struct { - *meta - MessageID uint64 - Timestamp uint64 - Source string - Name string - Message string - Payload string + *meta + MessageID uint64 + Timestamp uint64 + Source string + Name string + Message string + Payload string } func (msg *ErrorEvent) Encode() []byte { - buf := make([]byte, 61+len(msg.Source)+len(msg.Name)+len(msg.Message)+len(msg.Payload)) - buf[0] = 34 - p := 1 - p = WriteUint(msg.MessageID, buf, p) - p = WriteUint(msg.Timestamp, buf, p) - p = WriteString(msg.Source, buf, p) - p = WriteString(msg.Name, buf, p) - p = WriteString(msg.Message, buf, p) - p = WriteString(msg.Payload, buf, p) - return buf[:p] + buf := make([]byte, 61+len(msg.Source)+len(msg.Name)+len(msg.Message)+len(msg.Payload)) + buf[0] = 34 + p := 1 + p = WriteUint(msg.MessageID, buf, p) + p = WriteUint(msg.Timestamp, buf, p) + p = WriteString(msg.Source, buf, p) + p = WriteString(msg.Name, buf, p) + p = WriteString(msg.Message, buf, p) + p = WriteString(msg.Payload, buf, p) + return buf[:p] } type ResourceEvent struct { - *meta - MessageID uint64 - Timestamp uint64 - Duration uint64 - TTFB uint64 - HeaderSize uint64 - EncodedBodySize uint64 - DecodedBodySize uint64 - URL string - Type string - Success bool - Method string - Status uint64 + *meta + MessageID uint64 + Timestamp uint64 + Duration uint64 + TTFB uint64 + HeaderSize uint64 + EncodedBodySize uint64 + DecodedBodySize uint64 + URL string + Type string + Success bool + Method string + Status uint64 } func (msg *ResourceEvent) Encode() []byte { - buf := make([]byte, 121+len(msg.URL)+len(msg.Type)+len(msg.Method)) - buf[0] = 35 - p := 1 - p = WriteUint(msg.MessageID, buf, p) - p = WriteUint(msg.Timestamp, buf, p) - p = WriteUint(msg.Duration, buf, p) - p = WriteUint(msg.TTFB, buf, p) - p = WriteUint(msg.HeaderSize, buf, p) - p = WriteUint(msg.EncodedBodySize, buf, p) - p = WriteUint(msg.DecodedBodySize, buf, p) - p = WriteString(msg.URL, buf, p) - p = WriteString(msg.Type, buf, p) - p = WriteBoolean(msg.Success, buf, p) - p = WriteString(msg.Method, buf, p) - p = WriteUint(msg.Status, buf, p) - return buf[:p] + buf := make([]byte, 121+len(msg.URL)+len(msg.Type)+len(msg.Method)) + buf[0] = 35 + p := 1 + p = WriteUint(msg.MessageID, buf, p) + p = WriteUint(msg.Timestamp, buf, p) + p = WriteUint(msg.Duration, buf, p) + p = WriteUint(msg.TTFB, buf, p) + p = WriteUint(msg.HeaderSize, buf, p) + p = WriteUint(msg.EncodedBodySize, buf, p) + p = WriteUint(msg.DecodedBodySize, buf, p) + p = WriteString(msg.URL, buf, p) + p = WriteString(msg.Type, buf, p) + p = WriteBoolean(msg.Success, buf, p) + p = WriteString(msg.Method, buf, p) + p = WriteUint(msg.Status, buf, p) + return buf[:p] } type CustomEvent struct { - *meta - MessageID uint64 - Timestamp uint64 - Name string - Payload string + *meta + MessageID uint64 + Timestamp uint64 + Name string + Payload string } func (msg *CustomEvent) Encode() []byte { - buf := make([]byte, 41+len(msg.Name)+len(msg.Payload)) - buf[0] = 36 - p := 1 - p = WriteUint(msg.MessageID, buf, p) - p = WriteUint(msg.Timestamp, buf, p) - p = WriteString(msg.Name, buf, p) - p = WriteString(msg.Payload, buf, p) - return buf[:p] + buf := make([]byte, 41+len(msg.Name)+len(msg.Payload)) + buf[0] = 36 + p := 1 + p = WriteUint(msg.MessageID, buf, p) + p = WriteUint(msg.Timestamp, buf, p) + p = WriteString(msg.Name, buf, p) + p = WriteString(msg.Payload, buf, p) + return buf[:p] } type CSSInsertRule struct { - *meta - ID uint64 - Rule string - Index uint64 + *meta + ID uint64 + Rule string + Index uint64 } func (msg *CSSInsertRule) Encode() []byte { - buf := make([]byte, 31+len(msg.Rule)) - buf[0] = 37 - p := 1 - p = WriteUint(msg.ID, buf, p) - p = WriteString(msg.Rule, buf, p) - p = WriteUint(msg.Index, buf, p) - return buf[:p] + buf := make([]byte, 31+len(msg.Rule)) + buf[0] = 37 + p := 1 + p = WriteUint(msg.ID, buf, p) + p = WriteString(msg.Rule, buf, p) + p = WriteUint(msg.Index, buf, p) + return buf[:p] } type CSSDeleteRule struct { - *meta - ID uint64 - Index uint64 + *meta + ID uint64 + Index uint64 } func (msg *CSSDeleteRule) Encode() []byte { - buf := make([]byte, 21) - buf[0] = 38 - p := 1 - p = WriteUint(msg.ID, buf, p) - p = WriteUint(msg.Index, buf, p) - return buf[:p] + buf := make([]byte, 21) + buf[0] = 38 + p := 1 + p = WriteUint(msg.ID, buf, p) + p = WriteUint(msg.Index, buf, p) + return buf[:p] } type Fetch struct { - *meta - Method string - URL string - Request string - Response string - Status uint64 - Timestamp uint64 - Duration uint64 + *meta + Method string + URL string + Request string + Response string + Status uint64 + Timestamp uint64 + Duration uint64 } func (msg *Fetch) Encode() []byte { - buf := make([]byte, 71+len(msg.Method)+len(msg.URL)+len(msg.Request)+len(msg.Response)) - buf[0] = 39 - p := 1 - p = WriteString(msg.Method, buf, p) - p = WriteString(msg.URL, buf, p) - p = WriteString(msg.Request, buf, p) - p = WriteString(msg.Response, buf, p) - p = WriteUint(msg.Status, buf, p) - p = WriteUint(msg.Timestamp, buf, p) - p = WriteUint(msg.Duration, buf, p) - return buf[:p] + buf := make([]byte, 71+len(msg.Method)+len(msg.URL)+len(msg.Request)+len(msg.Response)) + buf[0] = 39 + p := 1 + p = WriteString(msg.Method, buf, p) + p = WriteString(msg.URL, buf, p) + p = WriteString(msg.Request, buf, p) + p = WriteString(msg.Response, buf, p) + p = WriteUint(msg.Status, buf, p) + p = WriteUint(msg.Timestamp, buf, p) + p = WriteUint(msg.Duration, buf, p) + return buf[:p] } type Profiler struct { - *meta - Name string - Duration uint64 - Args string - Result string + *meta + Name string + Duration uint64 + Args string + Result string } func (msg *Profiler) Encode() []byte { - buf := make([]byte, 41+len(msg.Name)+len(msg.Args)+len(msg.Result)) - buf[0] = 40 - p := 1 - p = WriteString(msg.Name, buf, p) - p = WriteUint(msg.Duration, buf, p) - p = WriteString(msg.Args, buf, p) - p = WriteString(msg.Result, buf, p) - return buf[:p] + buf := make([]byte, 41+len(msg.Name)+len(msg.Args)+len(msg.Result)) + buf[0] = 40 + p := 1 + p = WriteString(msg.Name, buf, p) + p = WriteUint(msg.Duration, buf, p) + p = WriteString(msg.Args, buf, p) + p = WriteString(msg.Result, buf, p) + return buf[:p] } type OTable struct { - *meta - Key string - Value string + *meta + Key string + Value string } func (msg *OTable) Encode() []byte { - buf := make([]byte, 21+len(msg.Key)+len(msg.Value)) - buf[0] = 41 - p := 1 - p = WriteString(msg.Key, buf, p) - p = WriteString(msg.Value, buf, p) - return buf[:p] + buf := make([]byte, 21+len(msg.Key)+len(msg.Value)) + buf[0] = 41 + p := 1 + p = WriteString(msg.Key, buf, p) + p = WriteString(msg.Value, buf, p) + return buf[:p] } type StateAction struct { - *meta - Type string + *meta + Type string } func (msg *StateAction) Encode() []byte { - buf := make([]byte, 11+len(msg.Type)) - buf[0] = 42 - p := 1 - p = WriteString(msg.Type, buf, p) - return buf[:p] + buf := make([]byte, 11+len(msg.Type)) + buf[0] = 42 + p := 1 + p = WriteString(msg.Type, buf, p) + return buf[:p] } type StateActionEvent struct { - *meta - MessageID uint64 - Timestamp uint64 - Type string + *meta + MessageID uint64 + Timestamp uint64 + Type string } func (msg *StateActionEvent) Encode() []byte { - buf := make([]byte, 31+len(msg.Type)) - buf[0] = 43 - p := 1 - p = WriteUint(msg.MessageID, buf, p) - p = WriteUint(msg.Timestamp, buf, p) - p = WriteString(msg.Type, buf, p) - return buf[:p] + buf := make([]byte, 31+len(msg.Type)) + buf[0] = 43 + p := 1 + p = WriteUint(msg.MessageID, buf, p) + p = WriteUint(msg.Timestamp, buf, p) + p = WriteString(msg.Type, buf, p) + return buf[:p] } type Redux struct { - *meta - Action string - State string - Duration uint64 + *meta + Action string + State string + Duration uint64 } func (msg *Redux) Encode() []byte { - buf := make([]byte, 31+len(msg.Action)+len(msg.State)) - buf[0] = 44 - p := 1 - p = WriteString(msg.Action, buf, p) - p = WriteString(msg.State, buf, p) - p = WriteUint(msg.Duration, buf, p) - return buf[:p] + buf := make([]byte, 31+len(msg.Action)+len(msg.State)) + buf[0] = 44 + p := 1 + p = WriteString(msg.Action, buf, p) + p = WriteString(msg.State, buf, p) + p = WriteUint(msg.Duration, buf, p) + return buf[:p] } type Vuex struct { - *meta - Mutation string - State string + *meta + Mutation string + State string } func (msg *Vuex) Encode() []byte { - buf := make([]byte, 21+len(msg.Mutation)+len(msg.State)) - buf[0] = 45 - p := 1 - p = WriteString(msg.Mutation, buf, p) - p = WriteString(msg.State, buf, p) - return buf[:p] + buf := make([]byte, 21+len(msg.Mutation)+len(msg.State)) + buf[0] = 45 + p := 1 + p = WriteString(msg.Mutation, buf, p) + p = WriteString(msg.State, buf, p) + return buf[:p] } type MobX struct { - *meta - Type string - Payload string + *meta + Type string + Payload string } func (msg *MobX) Encode() []byte { - buf := make([]byte, 21+len(msg.Type)+len(msg.Payload)) - buf[0] = 46 - p := 1 - p = WriteString(msg.Type, buf, p) - p = WriteString(msg.Payload, buf, p) - return buf[:p] + buf := make([]byte, 21+len(msg.Type)+len(msg.Payload)) + buf[0] = 46 + p := 1 + p = WriteString(msg.Type, buf, p) + p = WriteString(msg.Payload, buf, p) + return buf[:p] } type NgRx struct { - *meta - Action string - State string - Duration uint64 + *meta + Action string + State string + Duration uint64 } func (msg *NgRx) Encode() []byte { - buf := make([]byte, 31+len(msg.Action)+len(msg.State)) - buf[0] = 47 - p := 1 - p = WriteString(msg.Action, buf, p) - p = WriteString(msg.State, buf, p) - p = WriteUint(msg.Duration, buf, p) - return buf[:p] + buf := make([]byte, 31+len(msg.Action)+len(msg.State)) + buf[0] = 47 + p := 1 + p = WriteString(msg.Action, buf, p) + p = WriteString(msg.State, buf, p) + p = WriteUint(msg.Duration, buf, p) + return buf[:p] } type GraphQL struct { - *meta - OperationKind string - OperationName string - Variables string - Response string + *meta + OperationKind string + OperationName string + Variables string + Response string } func (msg *GraphQL) Encode() []byte { - buf := make([]byte, 41+len(msg.OperationKind)+len(msg.OperationName)+len(msg.Variables)+len(msg.Response)) - buf[0] = 48 - p := 1 - p = WriteString(msg.OperationKind, buf, p) - p = WriteString(msg.OperationName, buf, p) - p = WriteString(msg.Variables, buf, p) - p = WriteString(msg.Response, buf, p) - return buf[:p] + buf := make([]byte, 41+len(msg.OperationKind)+len(msg.OperationName)+len(msg.Variables)+len(msg.Response)) + buf[0] = 48 + p := 1 + p = WriteString(msg.OperationKind, buf, p) + p = WriteString(msg.OperationName, buf, p) + p = WriteString(msg.Variables, buf, p) + p = WriteString(msg.Response, buf, p) + return buf[:p] } type PerformanceTrack struct { - *meta - Frames int64 - Ticks int64 - TotalJSHeapSize uint64 - UsedJSHeapSize uint64 + *meta + Frames int64 + Ticks int64 + TotalJSHeapSize uint64 + UsedJSHeapSize uint64 } func (msg *PerformanceTrack) Encode() []byte { - buf := make([]byte, 41) - buf[0] = 49 - p := 1 - p = WriteInt(msg.Frames, buf, p) - p = WriteInt(msg.Ticks, buf, p) - p = WriteUint(msg.TotalJSHeapSize, buf, p) - p = WriteUint(msg.UsedJSHeapSize, buf, p) - return buf[:p] + buf := make([]byte, 41) + buf[0] = 49 + p := 1 + p = WriteInt(msg.Frames, buf, p) + p = WriteInt(msg.Ticks, buf, p) + p = WriteUint(msg.TotalJSHeapSize, buf, p) + p = WriteUint(msg.UsedJSHeapSize, buf, p) + return buf[:p] } type GraphQLEvent struct { - *meta - MessageID uint64 - Timestamp uint64 - OperationKind string - OperationName string - Variables string - Response string + *meta + MessageID uint64 + Timestamp uint64 + OperationKind string + OperationName string + Variables string + Response string } func (msg *GraphQLEvent) Encode() []byte { - buf := make([]byte, 61+len(msg.OperationKind)+len(msg.OperationName)+len(msg.Variables)+len(msg.Response)) - buf[0] = 50 - p := 1 - p = WriteUint(msg.MessageID, buf, p) - p = WriteUint(msg.Timestamp, buf, p) - p = WriteString(msg.OperationKind, buf, p) - p = WriteString(msg.OperationName, buf, p) - p = WriteString(msg.Variables, buf, p) - p = WriteString(msg.Response, buf, p) - return buf[:p] + buf := make([]byte, 61+len(msg.OperationKind)+len(msg.OperationName)+len(msg.Variables)+len(msg.Response)) + buf[0] = 50 + p := 1 + p = WriteUint(msg.MessageID, buf, p) + p = WriteUint(msg.Timestamp, buf, p) + p = WriteString(msg.OperationKind, buf, p) + p = WriteString(msg.OperationName, buf, p) + p = WriteString(msg.Variables, buf, p) + p = WriteString(msg.Response, buf, p) + return buf[:p] } type FetchEvent struct { - *meta - MessageID uint64 - Timestamp uint64 - Method string - URL string - Request string - Response string - Status uint64 - Duration uint64 + *meta + MessageID uint64 + Timestamp uint64 + Method string + URL string + Request string + Response string + Status uint64 + Duration uint64 } func (msg *FetchEvent) Encode() []byte { - buf := make([]byte, 81+len(msg.Method)+len(msg.URL)+len(msg.Request)+len(msg.Response)) - buf[0] = 51 - p := 1 - p = WriteUint(msg.MessageID, buf, p) - p = WriteUint(msg.Timestamp, buf, p) - p = WriteString(msg.Method, buf, p) - p = WriteString(msg.URL, buf, p) - p = WriteString(msg.Request, buf, p) - p = WriteString(msg.Response, buf, p) - p = WriteUint(msg.Status, buf, p) - p = WriteUint(msg.Duration, buf, p) - return buf[:p] + buf := make([]byte, 81+len(msg.Method)+len(msg.URL)+len(msg.Request)+len(msg.Response)) + buf[0] = 51 + p := 1 + p = WriteUint(msg.MessageID, buf, p) + p = WriteUint(msg.Timestamp, buf, p) + p = WriteString(msg.Method, buf, p) + p = WriteString(msg.URL, buf, p) + p = WriteString(msg.Request, buf, p) + p = WriteString(msg.Response, buf, p) + p = WriteUint(msg.Status, buf, p) + p = WriteUint(msg.Duration, buf, p) + return buf[:p] } type DOMDrop struct { - *meta - Timestamp uint64 + *meta + Timestamp uint64 } func (msg *DOMDrop) Encode() []byte { - buf := make([]byte, 11) - buf[0] = 52 - p := 1 - p = WriteUint(msg.Timestamp, buf, p) - return buf[:p] + buf := make([]byte, 11) + buf[0] = 52 + p := 1 + p = WriteUint(msg.Timestamp, buf, p) + return buf[:p] } type ResourceTiming struct { - *meta - Timestamp uint64 - Duration uint64 - TTFB uint64 - HeaderSize uint64 - EncodedBodySize uint64 - DecodedBodySize uint64 - URL string - Initiator string + *meta + Timestamp uint64 + Duration uint64 + TTFB uint64 + HeaderSize uint64 + EncodedBodySize uint64 + DecodedBodySize uint64 + URL string + Initiator string } func (msg *ResourceTiming) Encode() []byte { - buf := make([]byte, 81+len(msg.URL)+len(msg.Initiator)) - buf[0] = 53 - p := 1 - p = WriteUint(msg.Timestamp, buf, p) - p = WriteUint(msg.Duration, buf, p) - p = WriteUint(msg.TTFB, buf, p) - p = WriteUint(msg.HeaderSize, buf, p) - p = WriteUint(msg.EncodedBodySize, buf, p) - p = WriteUint(msg.DecodedBodySize, buf, p) - p = WriteString(msg.URL, buf, p) - p = WriteString(msg.Initiator, buf, p) - return buf[:p] + buf := make([]byte, 81+len(msg.URL)+len(msg.Initiator)) + buf[0] = 53 + p := 1 + p = WriteUint(msg.Timestamp, buf, p) + p = WriteUint(msg.Duration, buf, p) + p = WriteUint(msg.TTFB, buf, p) + p = WriteUint(msg.HeaderSize, buf, p) + p = WriteUint(msg.EncodedBodySize, buf, p) + p = WriteUint(msg.DecodedBodySize, buf, p) + p = WriteString(msg.URL, buf, p) + p = WriteString(msg.Initiator, buf, p) + return buf[:p] } type ConnectionInformation struct { - *meta - Downlink uint64 - Type string + *meta + Downlink uint64 + Type string } func (msg *ConnectionInformation) Encode() []byte { - buf := make([]byte, 21+len(msg.Type)) - buf[0] = 54 - p := 1 - p = WriteUint(msg.Downlink, buf, p) - p = WriteString(msg.Type, buf, p) - return buf[:p] + buf := make([]byte, 21+len(msg.Type)) + buf[0] = 54 + p := 1 + p = WriteUint(msg.Downlink, buf, p) + p = WriteString(msg.Type, buf, p) + return buf[:p] } type SetPageVisibility struct { - *meta - hidden bool + *meta + hidden bool } func (msg *SetPageVisibility) Encode() []byte { - buf := make([]byte, 11) - buf[0] = 55 - p := 1 - p = WriteBoolean(msg.hidden, buf, p) - return buf[:p] + buf := make([]byte, 11) + buf[0] = 55 + p := 1 + p = WriteBoolean(msg.hidden, buf, p) + return buf[:p] } type PerformanceTrackAggr struct { - *meta - TimestampStart uint64 - TimestampEnd uint64 - MinFPS uint64 - AvgFPS uint64 - MaxFPS uint64 - MinCPU uint64 - AvgCPU uint64 - MaxCPU uint64 - MinTotalJSHeapSize uint64 - AvgTotalJSHeapSize uint64 - MaxTotalJSHeapSize uint64 - MinUsedJSHeapSize uint64 - AvgUsedJSHeapSize uint64 - MaxUsedJSHeapSize uint64 + *meta + TimestampStart uint64 + TimestampEnd uint64 + MinFPS uint64 + AvgFPS uint64 + MaxFPS uint64 + MinCPU uint64 + AvgCPU uint64 + MaxCPU uint64 + MinTotalJSHeapSize uint64 + AvgTotalJSHeapSize uint64 + MaxTotalJSHeapSize uint64 + MinUsedJSHeapSize uint64 + AvgUsedJSHeapSize uint64 + MaxUsedJSHeapSize uint64 } func (msg *PerformanceTrackAggr) Encode() []byte { - buf := make([]byte, 141) - buf[0] = 56 - p := 1 - p = WriteUint(msg.TimestampStart, buf, p) - p = WriteUint(msg.TimestampEnd, buf, p) - p = WriteUint(msg.MinFPS, buf, p) - p = WriteUint(msg.AvgFPS, buf, p) - p = WriteUint(msg.MaxFPS, buf, p) - p = WriteUint(msg.MinCPU, buf, p) - p = WriteUint(msg.AvgCPU, buf, p) - p = WriteUint(msg.MaxCPU, buf, p) - p = WriteUint(msg.MinTotalJSHeapSize, buf, p) - p = WriteUint(msg.AvgTotalJSHeapSize, buf, p) - p = WriteUint(msg.MaxTotalJSHeapSize, buf, p) - p = WriteUint(msg.MinUsedJSHeapSize, buf, p) - p = WriteUint(msg.AvgUsedJSHeapSize, buf, p) - p = WriteUint(msg.MaxUsedJSHeapSize, buf, p) - return buf[:p] + buf := make([]byte, 141) + buf[0] = 56 + p := 1 + p = WriteUint(msg.TimestampStart, buf, p) + p = WriteUint(msg.TimestampEnd, buf, p) + p = WriteUint(msg.MinFPS, buf, p) + p = WriteUint(msg.AvgFPS, buf, p) + p = WriteUint(msg.MaxFPS, buf, p) + p = WriteUint(msg.MinCPU, buf, p) + p = WriteUint(msg.AvgCPU, buf, p) + p = WriteUint(msg.MaxCPU, buf, p) + p = WriteUint(msg.MinTotalJSHeapSize, buf, p) + p = WriteUint(msg.AvgTotalJSHeapSize, buf, p) + p = WriteUint(msg.MaxTotalJSHeapSize, buf, p) + p = WriteUint(msg.MinUsedJSHeapSize, buf, p) + p = WriteUint(msg.AvgUsedJSHeapSize, buf, p) + p = WriteUint(msg.MaxUsedJSHeapSize, buf, p) + return buf[:p] } type LongTask struct { - *meta - Timestamp uint64 - Duration uint64 - Context uint64 - ContainerType uint64 - ContainerSrc string - ContainerId string - ContainerName string + *meta + Timestamp uint64 + Duration uint64 + Context uint64 + ContainerType uint64 + ContainerSrc string + ContainerId string + ContainerName string } func (msg *LongTask) Encode() []byte { - buf := make([]byte, 71+len(msg.ContainerSrc)+len(msg.ContainerId)+len(msg.ContainerName)) - buf[0] = 59 - p := 1 - p = WriteUint(msg.Timestamp, buf, p) - p = WriteUint(msg.Duration, buf, p) - p = WriteUint(msg.Context, buf, p) - p = WriteUint(msg.ContainerType, buf, p) - p = WriteString(msg.ContainerSrc, buf, p) - p = WriteString(msg.ContainerId, buf, p) - p = WriteString(msg.ContainerName, buf, p) - return buf[:p] + buf := make([]byte, 71+len(msg.ContainerSrc)+len(msg.ContainerId)+len(msg.ContainerName)) + buf[0] = 59 + p := 1 + p = WriteUint(msg.Timestamp, buf, p) + p = WriteUint(msg.Duration, buf, p) + p = WriteUint(msg.Context, buf, p) + p = WriteUint(msg.ContainerType, buf, p) + p = WriteString(msg.ContainerSrc, buf, p) + p = WriteString(msg.ContainerId, buf, p) + p = WriteString(msg.ContainerName, buf, p) + return buf[:p] } type SetNodeAttributeURLBased struct { - *meta - ID uint64 - Name string - Value string - BaseURL string + *meta + ID uint64 + Name string + Value string + BaseURL string } func (msg *SetNodeAttributeURLBased) Encode() []byte { - buf := make([]byte, 41+len(msg.Name)+len(msg.Value)+len(msg.BaseURL)) - buf[0] = 60 - p := 1 - p = WriteUint(msg.ID, buf, p) - p = WriteString(msg.Name, buf, p) - p = WriteString(msg.Value, buf, p) - p = WriteString(msg.BaseURL, buf, p) - return buf[:p] + buf := make([]byte, 41+len(msg.Name)+len(msg.Value)+len(msg.BaseURL)) + buf[0] = 60 + p := 1 + p = WriteUint(msg.ID, buf, p) + p = WriteString(msg.Name, buf, p) + p = WriteString(msg.Value, buf, p) + p = WriteString(msg.BaseURL, buf, p) + return buf[:p] } type SetCSSDataURLBased struct { - *meta - ID uint64 - Data string - BaseURL string + *meta + ID uint64 + Data string + BaseURL string } func (msg *SetCSSDataURLBased) Encode() []byte { - buf := make([]byte, 31+len(msg.Data)+len(msg.BaseURL)) - buf[0] = 61 - p := 1 - p = WriteUint(msg.ID, buf, p) - p = WriteString(msg.Data, buf, p) - p = WriteString(msg.BaseURL, buf, p) - return buf[:p] + buf := make([]byte, 31+len(msg.Data)+len(msg.BaseURL)) + buf[0] = 61 + p := 1 + p = WriteUint(msg.ID, buf, p) + p = WriteString(msg.Data, buf, p) + p = WriteString(msg.BaseURL, buf, p) + return buf[:p] } type IssueEvent struct { - *meta - MessageID uint64 - Timestamp uint64 - Type string - ContextString string - Context string - Payload string + *meta + MessageID uint64 + Timestamp uint64 + Type string + ContextString string + Context string + Payload string } func (msg *IssueEvent) Encode() []byte { - buf := make([]byte, 61+len(msg.Type)+len(msg.ContextString)+len(msg.Context)+len(msg.Payload)) - buf[0] = 62 - p := 1 - p = WriteUint(msg.MessageID, buf, p) - p = WriteUint(msg.Timestamp, buf, p) - p = WriteString(msg.Type, buf, p) - p = WriteString(msg.ContextString, buf, p) - p = WriteString(msg.Context, buf, p) - p = WriteString(msg.Payload, buf, p) - return buf[:p] + buf := make([]byte, 61+len(msg.Type)+len(msg.ContextString)+len(msg.Context)+len(msg.Payload)) + buf[0] = 62 + p := 1 + p = WriteUint(msg.MessageID, buf, p) + p = WriteUint(msg.Timestamp, buf, p) + p = WriteString(msg.Type, buf, p) + p = WriteString(msg.ContextString, buf, p) + p = WriteString(msg.Context, buf, p) + p = WriteString(msg.Payload, buf, p) + return buf[:p] } type TechnicalInfo struct { - *meta - Type string - Value string + *meta + Type string + Value string } func (msg *TechnicalInfo) Encode() []byte { - buf := make([]byte, 21+len(msg.Type)+len(msg.Value)) - buf[0] = 63 - p := 1 - p = WriteString(msg.Type, buf, p) - p = WriteString(msg.Value, buf, p) - return buf[:p] + buf := make([]byte, 21+len(msg.Type)+len(msg.Value)) + buf[0] = 63 + p := 1 + p = WriteString(msg.Type, buf, p) + p = WriteString(msg.Value, buf, p) + return buf[:p] } type CustomIssue struct { - *meta - Name string - Payload string + *meta + Name string + Payload string } func (msg *CustomIssue) Encode() []byte { - buf := make([]byte, 21+len(msg.Name)+len(msg.Payload)) - buf[0] = 64 - p := 1 - p = WriteString(msg.Name, buf, p) - p = WriteString(msg.Payload, buf, p) - return buf[:p] + buf := make([]byte, 21+len(msg.Name)+len(msg.Payload)) + buf[0] = 64 + p := 1 + p = WriteString(msg.Name, buf, p) + p = WriteString(msg.Payload, buf, p) + return buf[:p] } type PageClose struct { - *meta + *meta } func (msg *PageClose) Encode() []byte { - buf := make([]byte, 1) - buf[0] = 65 - p := 1 + buf := make([]byte, 1) + buf[0] = 65 + p := 1 - return buf[:p] + return buf[:p] } type AssetCache struct { - *meta - URL string + *meta + URL string } func (msg *AssetCache) Encode() []byte { - buf := make([]byte, 11+len(msg.URL)) - buf[0] = 66 - p := 1 - p = WriteString(msg.URL, buf, p) - return buf[:p] + buf := make([]byte, 11+len(msg.URL)) + buf[0] = 66 + p := 1 + p = WriteString(msg.URL, buf, p) + return buf[:p] } type CSSInsertRuleURLBased struct { - *meta - ID uint64 - Rule string - Index uint64 - BaseURL string + *meta + ID uint64 + Rule string + Index uint64 + BaseURL string } func (msg *CSSInsertRuleURLBased) Encode() []byte { - buf := make([]byte, 41+len(msg.Rule)+len(msg.BaseURL)) - buf[0] = 67 - p := 1 - p = WriteUint(msg.ID, buf, p) - p = WriteString(msg.Rule, buf, p) - p = WriteUint(msg.Index, buf, p) - p = WriteString(msg.BaseURL, buf, p) - return buf[:p] + buf := make([]byte, 41+len(msg.Rule)+len(msg.BaseURL)) + buf[0] = 67 + p := 1 + p = WriteUint(msg.ID, buf, p) + p = WriteString(msg.Rule, buf, p) + p = WriteUint(msg.Index, buf, p) + p = WriteString(msg.BaseURL, buf, p) + return buf[:p] } type MouseClick struct { - *meta - ID uint64 - HesitationTime uint64 - Label string - Selector string + *meta + ID uint64 + HesitationTime uint64 + Label string + Selector string } func (msg *MouseClick) Encode() []byte { - buf := make([]byte, 41+len(msg.Label)+len(msg.Selector)) - buf[0] = 69 - p := 1 - p = WriteUint(msg.ID, buf, p) - p = WriteUint(msg.HesitationTime, buf, p) - p = WriteString(msg.Label, buf, p) - p = WriteString(msg.Selector, buf, p) - return buf[:p] + buf := make([]byte, 41+len(msg.Label)+len(msg.Selector)) + buf[0] = 69 + p := 1 + p = WriteUint(msg.ID, buf, p) + p = WriteUint(msg.HesitationTime, buf, p) + p = WriteString(msg.Label, buf, p) + p = WriteString(msg.Selector, buf, p) + return buf[:p] } type CreateIFrameDocument struct { - *meta - FrameID uint64 - ID uint64 + *meta + FrameID uint64 + ID uint64 } func (msg *CreateIFrameDocument) Encode() []byte { - buf := make([]byte, 21) - buf[0] = 70 - p := 1 - p = WriteUint(msg.FrameID, buf, p) - p = WriteUint(msg.ID, buf, p) - return buf[:p] + buf := make([]byte, 21) + buf[0] = 70 + p := 1 + p = WriteUint(msg.FrameID, buf, p) + p = WriteUint(msg.ID, buf, p) + return buf[:p] } type IOSBatchMeta struct { - *meta - Timestamp uint64 - Length uint64 - FirstIndex uint64 + *meta + Timestamp uint64 + Length uint64 + FirstIndex uint64 } func (msg *IOSBatchMeta) Encode() []byte { - buf := make([]byte, 31) - buf[0] = 107 - p := 1 - p = WriteUint(msg.Timestamp, buf, p) - p = WriteUint(msg.Length, buf, p) - p = WriteUint(msg.FirstIndex, buf, p) - return buf[:p] + buf := make([]byte, 31) + buf[0] = 107 + p := 1 + p = WriteUint(msg.Timestamp, buf, p) + p = WriteUint(msg.Length, buf, p) + p = WriteUint(msg.FirstIndex, buf, p) + return buf[:p] } type IOSSessionStart struct { - *meta - Timestamp uint64 - ProjectID uint64 - TrackerVersion string - RevID string - UserUUID string - UserOS string - UserOSVersion string - UserDevice string - UserDeviceType string - UserCountry string + *meta + Timestamp uint64 + ProjectID uint64 + TrackerVersion string + RevID string + UserUUID string + UserOS string + UserOSVersion string + UserDevice string + UserDeviceType string + UserCountry string } func (msg *IOSSessionStart) Encode() []byte { - buf := make([]byte, 101+len(msg.TrackerVersion)+len(msg.RevID)+len(msg.UserUUID)+len(msg.UserOS)+len(msg.UserOSVersion)+len(msg.UserDevice)+len(msg.UserDeviceType)+len(msg.UserCountry)) - buf[0] = 90 - p := 1 - p = WriteUint(msg.Timestamp, buf, p) - p = WriteUint(msg.ProjectID, buf, p) - p = WriteString(msg.TrackerVersion, buf, p) - p = WriteString(msg.RevID, buf, p) - p = WriteString(msg.UserUUID, buf, p) - p = WriteString(msg.UserOS, buf, p) - p = WriteString(msg.UserOSVersion, buf, p) - p = WriteString(msg.UserDevice, buf, p) - p = WriteString(msg.UserDeviceType, buf, p) - p = WriteString(msg.UserCountry, buf, p) - return buf[:p] + buf := make([]byte, 101+len(msg.TrackerVersion)+len(msg.RevID)+len(msg.UserUUID)+len(msg.UserOS)+len(msg.UserOSVersion)+len(msg.UserDevice)+len(msg.UserDeviceType)+len(msg.UserCountry)) + buf[0] = 90 + p := 1 + p = WriteUint(msg.Timestamp, buf, p) + p = WriteUint(msg.ProjectID, buf, p) + p = WriteString(msg.TrackerVersion, buf, p) + p = WriteString(msg.RevID, buf, p) + p = WriteString(msg.UserUUID, buf, p) + p = WriteString(msg.UserOS, buf, p) + p = WriteString(msg.UserOSVersion, buf, p) + p = WriteString(msg.UserDevice, buf, p) + p = WriteString(msg.UserDeviceType, buf, p) + p = WriteString(msg.UserCountry, buf, p) + return buf[:p] } type IOSSessionEnd struct { - *meta - Timestamp uint64 + *meta + Timestamp uint64 } func (msg *IOSSessionEnd) Encode() []byte { - buf := make([]byte, 11) - buf[0] = 91 - p := 1 - p = WriteUint(msg.Timestamp, buf, p) - return buf[:p] + buf := make([]byte, 11) + buf[0] = 91 + p := 1 + p = WriteUint(msg.Timestamp, buf, p) + return buf[:p] } type IOSMetadata struct { - *meta - Timestamp uint64 - Length uint64 - Key string - Value string + *meta + Timestamp uint64 + Length uint64 + Key string + Value string } func (msg *IOSMetadata) Encode() []byte { - buf := make([]byte, 41+len(msg.Key)+len(msg.Value)) - buf[0] = 92 - p := 1 - p = WriteUint(msg.Timestamp, buf, p) - p = WriteUint(msg.Length, buf, p) - p = WriteString(msg.Key, buf, p) - p = WriteString(msg.Value, buf, p) - return buf[:p] + buf := make([]byte, 41+len(msg.Key)+len(msg.Value)) + buf[0] = 92 + p := 1 + p = WriteUint(msg.Timestamp, buf, p) + p = WriteUint(msg.Length, buf, p) + p = WriteString(msg.Key, buf, p) + p = WriteString(msg.Value, buf, p) + return buf[:p] } type IOSCustomEvent struct { - *meta - Timestamp uint64 - Length uint64 - Name string - Payload string + *meta + Timestamp uint64 + Length uint64 + Name string + Payload string } func (msg *IOSCustomEvent) Encode() []byte { - buf := make([]byte, 41+len(msg.Name)+len(msg.Payload)) - buf[0] = 93 - p := 1 - p = WriteUint(msg.Timestamp, buf, p) - p = WriteUint(msg.Length, buf, p) - p = WriteString(msg.Name, buf, p) - p = WriteString(msg.Payload, buf, p) - return buf[:p] + buf := make([]byte, 41+len(msg.Name)+len(msg.Payload)) + buf[0] = 93 + p := 1 + p = WriteUint(msg.Timestamp, buf, p) + p = WriteUint(msg.Length, buf, p) + p = WriteString(msg.Name, buf, p) + p = WriteString(msg.Payload, buf, p) + return buf[:p] } type IOSUserID struct { - *meta - Timestamp uint64 - Length uint64 - Value string + *meta + Timestamp uint64 + Length uint64 + Value string } func (msg *IOSUserID) Encode() []byte { - buf := make([]byte, 31+len(msg.Value)) - buf[0] = 94 - p := 1 - p = WriteUint(msg.Timestamp, buf, p) - p = WriteUint(msg.Length, buf, p) - p = WriteString(msg.Value, buf, p) - return buf[:p] + buf := make([]byte, 31+len(msg.Value)) + buf[0] = 94 + p := 1 + p = WriteUint(msg.Timestamp, buf, p) + p = WriteUint(msg.Length, buf, p) + p = WriteString(msg.Value, buf, p) + return buf[:p] } type IOSUserAnonymousID struct { - *meta - Timestamp uint64 - Length uint64 - Value string + *meta + Timestamp uint64 + Length uint64 + Value string } func (msg *IOSUserAnonymousID) Encode() []byte { - buf := make([]byte, 31+len(msg.Value)) - buf[0] = 95 - p := 1 - p = WriteUint(msg.Timestamp, buf, p) - p = WriteUint(msg.Length, buf, p) - p = WriteString(msg.Value, buf, p) - return buf[:p] + buf := make([]byte, 31+len(msg.Value)) + buf[0] = 95 + p := 1 + p = WriteUint(msg.Timestamp, buf, p) + p = WriteUint(msg.Length, buf, p) + p = WriteString(msg.Value, buf, p) + return buf[:p] } type IOSScreenChanges struct { - *meta - Timestamp uint64 - Length uint64 - X uint64 - Y uint64 - Width uint64 - Height uint64 + *meta + Timestamp uint64 + Length uint64 + X uint64 + Y uint64 + Width uint64 + Height uint64 } func (msg *IOSScreenChanges) Encode() []byte { - buf := make([]byte, 61) - buf[0] = 96 - p := 1 - p = WriteUint(msg.Timestamp, buf, p) - p = WriteUint(msg.Length, buf, p) - p = WriteUint(msg.X, buf, p) - p = WriteUint(msg.Y, buf, p) - p = WriteUint(msg.Width, buf, p) - p = WriteUint(msg.Height, buf, p) - return buf[:p] + buf := make([]byte, 61) + buf[0] = 96 + p := 1 + p = WriteUint(msg.Timestamp, buf, p) + p = WriteUint(msg.Length, buf, p) + p = WriteUint(msg.X, buf, p) + p = WriteUint(msg.Y, buf, p) + p = WriteUint(msg.Width, buf, p) + p = WriteUint(msg.Height, buf, p) + return buf[:p] } type IOSCrash struct { - *meta - Timestamp uint64 - Length uint64 - Name string - Reason string - Stacktrace string + *meta + Timestamp uint64 + Length uint64 + Name string + Reason string + Stacktrace string } func (msg *IOSCrash) Encode() []byte { - buf := make([]byte, 51+len(msg.Name)+len(msg.Reason)+len(msg.Stacktrace)) - buf[0] = 97 - p := 1 - p = WriteUint(msg.Timestamp, buf, p) - p = WriteUint(msg.Length, buf, p) - p = WriteString(msg.Name, buf, p) - p = WriteString(msg.Reason, buf, p) - p = WriteString(msg.Stacktrace, buf, p) - return buf[:p] + buf := make([]byte, 51+len(msg.Name)+len(msg.Reason)+len(msg.Stacktrace)) + buf[0] = 97 + p := 1 + p = WriteUint(msg.Timestamp, buf, p) + p = WriteUint(msg.Length, buf, p) + p = WriteString(msg.Name, buf, p) + p = WriteString(msg.Reason, buf, p) + p = WriteString(msg.Stacktrace, buf, p) + return buf[:p] } type IOSScreenEnter struct { - *meta - Timestamp uint64 - Length uint64 - Title string - ViewName string + *meta + Timestamp uint64 + Length uint64 + Title string + ViewName string } func (msg *IOSScreenEnter) Encode() []byte { - buf := make([]byte, 41+len(msg.Title)+len(msg.ViewName)) - buf[0] = 98 - p := 1 - p = WriteUint(msg.Timestamp, buf, p) - p = WriteUint(msg.Length, buf, p) - p = WriteString(msg.Title, buf, p) - p = WriteString(msg.ViewName, buf, p) - return buf[:p] + buf := make([]byte, 41+len(msg.Title)+len(msg.ViewName)) + buf[0] = 98 + p := 1 + p = WriteUint(msg.Timestamp, buf, p) + p = WriteUint(msg.Length, buf, p) + p = WriteString(msg.Title, buf, p) + p = WriteString(msg.ViewName, buf, p) + return buf[:p] } type IOSScreenLeave struct { - *meta - Timestamp uint64 - Length uint64 - Title string - ViewName string + *meta + Timestamp uint64 + Length uint64 + Title string + ViewName string } func (msg *IOSScreenLeave) Encode() []byte { - buf := make([]byte, 41+len(msg.Title)+len(msg.ViewName)) - buf[0] = 99 - p := 1 - p = WriteUint(msg.Timestamp, buf, p) - p = WriteUint(msg.Length, buf, p) - p = WriteString(msg.Title, buf, p) - p = WriteString(msg.ViewName, buf, p) - return buf[:p] + buf := make([]byte, 41+len(msg.Title)+len(msg.ViewName)) + buf[0] = 99 + p := 1 + p = WriteUint(msg.Timestamp, buf, p) + p = WriteUint(msg.Length, buf, p) + p = WriteString(msg.Title, buf, p) + p = WriteString(msg.ViewName, buf, p) + return buf[:p] } type IOSClickEvent struct { - *meta - Timestamp uint64 - Length uint64 - Label string - X uint64 - Y uint64 + *meta + Timestamp uint64 + Length uint64 + Label string + X uint64 + Y uint64 } func (msg *IOSClickEvent) Encode() []byte { - buf := make([]byte, 51+len(msg.Label)) - buf[0] = 100 - p := 1 - p = WriteUint(msg.Timestamp, buf, p) - p = WriteUint(msg.Length, buf, p) - p = WriteString(msg.Label, buf, p) - p = WriteUint(msg.X, buf, p) - p = WriteUint(msg.Y, buf, p) - return buf[:p] + buf := make([]byte, 51+len(msg.Label)) + buf[0] = 100 + p := 1 + p = WriteUint(msg.Timestamp, buf, p) + p = WriteUint(msg.Length, buf, p) + p = WriteString(msg.Label, buf, p) + p = WriteUint(msg.X, buf, p) + p = WriteUint(msg.Y, buf, p) + return buf[:p] } type IOSInputEvent struct { - *meta - Timestamp uint64 - Length uint64 - Value string - ValueMasked bool - Label string + *meta + Timestamp uint64 + Length uint64 + Value string + ValueMasked bool + Label string } func (msg *IOSInputEvent) Encode() []byte { - buf := make([]byte, 51+len(msg.Value)+len(msg.Label)) - buf[0] = 101 - p := 1 - p = WriteUint(msg.Timestamp, buf, p) - p = WriteUint(msg.Length, buf, p) - p = WriteString(msg.Value, buf, p) - p = WriteBoolean(msg.ValueMasked, buf, p) - p = WriteString(msg.Label, buf, p) - return buf[:p] + buf := make([]byte, 51+len(msg.Value)+len(msg.Label)) + buf[0] = 101 + p := 1 + p = WriteUint(msg.Timestamp, buf, p) + p = WriteUint(msg.Length, buf, p) + p = WriteString(msg.Value, buf, p) + p = WriteBoolean(msg.ValueMasked, buf, p) + p = WriteString(msg.Label, buf, p) + return buf[:p] } type IOSPerformanceEvent struct { - *meta - Timestamp uint64 - Length uint64 - Name string - Value uint64 + *meta + Timestamp uint64 + Length uint64 + Name string + Value uint64 } func (msg *IOSPerformanceEvent) Encode() []byte { - buf := make([]byte, 41+len(msg.Name)) - buf[0] = 102 - p := 1 - p = WriteUint(msg.Timestamp, buf, p) - p = WriteUint(msg.Length, buf, p) - p = WriteString(msg.Name, buf, p) - p = WriteUint(msg.Value, buf, p) - return buf[:p] + buf := make([]byte, 41+len(msg.Name)) + buf[0] = 102 + p := 1 + p = WriteUint(msg.Timestamp, buf, p) + p = WriteUint(msg.Length, buf, p) + p = WriteString(msg.Name, buf, p) + p = WriteUint(msg.Value, buf, p) + return buf[:p] } type IOSLog struct { - *meta - Timestamp uint64 - Length uint64 - Severity string - Content string + *meta + Timestamp uint64 + Length uint64 + Severity string + Content string } func (msg *IOSLog) Encode() []byte { - buf := make([]byte, 41+len(msg.Severity)+len(msg.Content)) - buf[0] = 103 - p := 1 - p = WriteUint(msg.Timestamp, buf, p) - p = WriteUint(msg.Length, buf, p) - p = WriteString(msg.Severity, buf, p) - p = WriteString(msg.Content, buf, p) - return buf[:p] + buf := make([]byte, 41+len(msg.Severity)+len(msg.Content)) + buf[0] = 103 + p := 1 + p = WriteUint(msg.Timestamp, buf, p) + p = WriteUint(msg.Length, buf, p) + p = WriteString(msg.Severity, buf, p) + p = WriteString(msg.Content, buf, p) + return buf[:p] } type IOSInternalError struct { - *meta - Timestamp uint64 - Length uint64 - Content string + *meta + Timestamp uint64 + Length uint64 + Content string } func (msg *IOSInternalError) Encode() []byte { - buf := make([]byte, 31+len(msg.Content)) - buf[0] = 104 - p := 1 - p = WriteUint(msg.Timestamp, buf, p) - p = WriteUint(msg.Length, buf, p) - p = WriteString(msg.Content, buf, p) - return buf[:p] + buf := make([]byte, 31+len(msg.Content)) + buf[0] = 104 + p := 1 + p = WriteUint(msg.Timestamp, buf, p) + p = WriteUint(msg.Length, buf, p) + p = WriteString(msg.Content, buf, p) + return buf[:p] } type IOSNetworkCall struct { - *meta - Timestamp uint64 - Length uint64 - Duration uint64 - Headers string - Body string - URL string - Success bool - Method string - Status uint64 + *meta + Timestamp uint64 + Length uint64 + Duration uint64 + Headers string + Body string + URL string + Success bool + Method string + Status uint64 } func (msg *IOSNetworkCall) Encode() []byte { - buf := make([]byte, 91+len(msg.Headers)+len(msg.Body)+len(msg.URL)+len(msg.Method)) - buf[0] = 105 - p := 1 - p = WriteUint(msg.Timestamp, buf, p) - p = WriteUint(msg.Length, buf, p) - p = WriteUint(msg.Duration, buf, p) - p = WriteString(msg.Headers, buf, p) - p = WriteString(msg.Body, buf, p) - p = WriteString(msg.URL, buf, p) - p = WriteBoolean(msg.Success, buf, p) - p = WriteString(msg.Method, buf, p) - p = WriteUint(msg.Status, buf, p) - return buf[:p] + buf := make([]byte, 91+len(msg.Headers)+len(msg.Body)+len(msg.URL)+len(msg.Method)) + buf[0] = 105 + p := 1 + p = WriteUint(msg.Timestamp, buf, p) + p = WriteUint(msg.Length, buf, p) + p = WriteUint(msg.Duration, buf, p) + p = WriteString(msg.Headers, buf, p) + p = WriteString(msg.Body, buf, p) + p = WriteString(msg.URL, buf, p) + p = WriteBoolean(msg.Success, buf, p) + p = WriteString(msg.Method, buf, p) + p = WriteUint(msg.Status, buf, p) + return buf[:p] } type IOSPerformanceAggregated struct { - *meta - TimestampStart uint64 - TimestampEnd uint64 - MinFPS uint64 - AvgFPS uint64 - MaxFPS uint64 - MinCPU uint64 - AvgCPU uint64 - MaxCPU uint64 - MinMemory uint64 - AvgMemory uint64 - MaxMemory uint64 - MinBattery uint64 - AvgBattery uint64 - MaxBattery uint64 + *meta + TimestampStart uint64 + TimestampEnd uint64 + MinFPS uint64 + AvgFPS uint64 + MaxFPS uint64 + MinCPU uint64 + AvgCPU uint64 + MaxCPU uint64 + MinMemory uint64 + AvgMemory uint64 + MaxMemory uint64 + MinBattery uint64 + AvgBattery uint64 + MaxBattery uint64 } func (msg *IOSPerformanceAggregated) Encode() []byte { - buf := make([]byte, 141) - buf[0] = 110 - p := 1 - p = WriteUint(msg.TimestampStart, buf, p) - p = WriteUint(msg.TimestampEnd, buf, p) - p = WriteUint(msg.MinFPS, buf, p) - p = WriteUint(msg.AvgFPS, buf, p) - p = WriteUint(msg.MaxFPS, buf, p) - p = WriteUint(msg.MinCPU, buf, p) - p = WriteUint(msg.AvgCPU, buf, p) - p = WriteUint(msg.MaxCPU, buf, p) - p = WriteUint(msg.MinMemory, buf, p) - p = WriteUint(msg.AvgMemory, buf, p) - p = WriteUint(msg.MaxMemory, buf, p) - p = WriteUint(msg.MinBattery, buf, p) - p = WriteUint(msg.AvgBattery, buf, p) - p = WriteUint(msg.MaxBattery, buf, p) - return buf[:p] + buf := make([]byte, 141) + buf[0] = 110 + p := 1 + p = WriteUint(msg.TimestampStart, buf, p) + p = WriteUint(msg.TimestampEnd, buf, p) + p = WriteUint(msg.MinFPS, buf, p) + p = WriteUint(msg.AvgFPS, buf, p) + p = WriteUint(msg.MaxFPS, buf, p) + p = WriteUint(msg.MinCPU, buf, p) + p = WriteUint(msg.AvgCPU, buf, p) + p = WriteUint(msg.MaxCPU, buf, p) + p = WriteUint(msg.MinMemory, buf, p) + p = WriteUint(msg.AvgMemory, buf, p) + p = WriteUint(msg.MaxMemory, buf, p) + p = WriteUint(msg.MinBattery, buf, p) + p = WriteUint(msg.AvgBattery, buf, p) + p = WriteUint(msg.MaxBattery, buf, p) + return buf[:p] } type IOSIssueEvent struct { - *meta - Timestamp uint64 - Type string - ContextString string - Context string - Payload string + *meta + Timestamp uint64 + Type string + ContextString string + Context string + Payload string } func (msg *IOSIssueEvent) Encode() []byte { - buf := make([]byte, 51+len(msg.Type)+len(msg.ContextString)+len(msg.Context)+len(msg.Payload)) - buf[0] = 111 - p := 1 - p = WriteUint(msg.Timestamp, buf, p) - p = WriteString(msg.Type, buf, p) - p = WriteString(msg.ContextString, buf, p) - p = WriteString(msg.Context, buf, p) - p = WriteString(msg.Payload, buf, p) - return buf[:p] + buf := make([]byte, 51+len(msg.Type)+len(msg.ContextString)+len(msg.Context)+len(msg.Payload)) + buf[0] = 111 + p := 1 + p = WriteUint(msg.Timestamp, buf, p) + p = WriteString(msg.Type, buf, p) + p = WriteString(msg.ContextString, buf, p) + p = WriteString(msg.Context, buf, p) + p = WriteString(msg.Payload, buf, p) + return buf[:p] } diff --git a/backend/pkg/messages/performance/performance.go b/backend/pkg/messages/performance/performance.go index 4cfb28045..27e28215e 100644 --- a/backend/pkg/messages/performance/performance.go +++ b/backend/pkg/messages/performance/performance.go @@ -4,7 +4,6 @@ import ( "math" ) - func TimeDiff(t1 uint64, t2 uint64) uint64 { if t1 < t2 { return 0 @@ -30,4 +29,4 @@ func CPURateFromTickRate(tickRate float64) uint64 { func CPURate(ticks int64, dt uint64) uint64 { return CPURateFromTickRate(TickRate(ticks, dt)) -} \ No newline at end of file +} diff --git a/backend/pkg/messages/primitives.go b/backend/pkg/messages/primitives.go index 70952eeab..8687ef413 100644 --- a/backend/pkg/messages/primitives.go +++ b/backend/pkg/messages/primitives.go @@ -1,9 +1,9 @@ package messages import ( + "encoding/json" "errors" "io" - "encoding/json" "log" ) @@ -37,7 +37,7 @@ func ReadData(reader io.Reader) ([]byte, error) { } return p, nil } - + func ReadUint(reader io.Reader) (uint64, error) { var x uint64 var s uint @@ -152,4 +152,4 @@ func WriteJson(v interface{}, buf []byte, p int) int { return WriteString("null", buf, p) } return WriteData(data, buf, p) -} \ No newline at end of file +} diff --git a/backend/pkg/messages/read-message.go b/backend/pkg/messages/read-message.go index 31512c9c8..60f9c17a8 100644 --- a/backend/pkg/messages/read-message.go +++ b/backend/pkg/messages/read-message.go @@ -2,1430 +2,1430 @@ package messages import ( - "fmt" - "io" + "fmt" + "io" ) func ReadMessage(reader io.Reader) (Message, error) { - t, err := ReadUint(reader) - if err != nil { - return nil, err - } - switch t { - - case 80: - msg := &BatchMeta{meta: &meta{TypeID: 80}} - if msg.PageNo, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.FirstIndex, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.Timestamp, err = ReadInt(reader); err != nil { - return nil, err - } - return msg, nil - - case 0: - msg := &Timestamp{meta: &meta{TypeID: 0}} - if msg.Timestamp, err = ReadUint(reader); err != nil { - return nil, err - } - return msg, nil - - case 1: - msg := &SessionStart{meta: &meta{TypeID: 1}} - if msg.Timestamp, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.ProjectID, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.TrackerVersion, err = ReadString(reader); err != nil { - return nil, err - } - if msg.RevID, err = ReadString(reader); err != nil { - return nil, err - } - if msg.UserUUID, err = ReadString(reader); err != nil { - return nil, err - } - if msg.UserAgent, err = ReadString(reader); err != nil { - return nil, err - } - if msg.UserOS, err = ReadString(reader); err != nil { - return nil, err - } - if msg.UserOSVersion, err = ReadString(reader); err != nil { - return nil, err - } - if msg.UserBrowser, err = ReadString(reader); err != nil { - return nil, err - } - if msg.UserBrowserVersion, err = ReadString(reader); err != nil { - return nil, err - } - if msg.UserDevice, err = ReadString(reader); err != nil { - return nil, err - } - if msg.UserDeviceType, err = ReadString(reader); err != nil { - return nil, err - } - if msg.UserDeviceMemorySize, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.UserDeviceHeapSize, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.UserCountry, err = ReadString(reader); err != nil { - return nil, err - } - if msg.UserID, err = ReadString(reader); err != nil { - return nil, err - } - return msg, nil - - case 2: - msg := &SessionDisconnect{meta: &meta{TypeID: 2}} - if msg.Timestamp, err = ReadUint(reader); err != nil { - return nil, err - } - return msg, nil - - case 3: - msg := &SessionEnd{meta: &meta{TypeID: 3}} - if msg.Timestamp, err = ReadUint(reader); err != nil { - return nil, err - } - return msg, nil - - case 4: - msg := &SetPageLocation{meta: &meta{TypeID: 4}} - if msg.URL, err = ReadString(reader); err != nil { - return nil, err - } - if msg.Referrer, err = ReadString(reader); err != nil { - return nil, err - } - if msg.NavigationStart, err = ReadUint(reader); err != nil { - return nil, err - } - return msg, nil - - case 5: - msg := &SetViewportSize{meta: &meta{TypeID: 5}} - if msg.Width, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.Height, err = ReadUint(reader); err != nil { - return nil, err - } - return msg, nil - - case 6: - msg := &SetViewportScroll{meta: &meta{TypeID: 6}} - if msg.X, err = ReadInt(reader); err != nil { - return nil, err - } - if msg.Y, err = ReadInt(reader); err != nil { - return nil, err - } - return msg, nil - - case 7: - msg := &CreateDocument{meta: &meta{TypeID: 7}} - - return msg, nil - - case 8: - msg := &CreateElementNode{meta: &meta{TypeID: 8}} - if msg.ID, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.ParentID, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.index, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.Tag, err = ReadString(reader); err != nil { - return nil, err - } - if msg.SVG, err = ReadBoolean(reader); err != nil { - return nil, err - } - return msg, nil - - case 9: - msg := &CreateTextNode{meta: &meta{TypeID: 9}} - if msg.ID, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.ParentID, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.Index, err = ReadUint(reader); err != nil { - return nil, err - } - return msg, nil - - case 10: - msg := &MoveNode{meta: &meta{TypeID: 10}} - if msg.ID, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.ParentID, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.Index, err = ReadUint(reader); err != nil { - return nil, err - } - return msg, nil - - case 11: - msg := &RemoveNode{meta: &meta{TypeID: 11}} - if msg.ID, err = ReadUint(reader); err != nil { - return nil, err - } - return msg, nil - - case 12: - msg := &SetNodeAttribute{meta: &meta{TypeID: 12}} - if msg.ID, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.Name, err = ReadString(reader); err != nil { - return nil, err - } - if msg.Value, err = ReadString(reader); err != nil { - return nil, err - } - return msg, nil - - case 13: - msg := &RemoveNodeAttribute{meta: &meta{TypeID: 13}} - if msg.ID, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.Name, err = ReadString(reader); err != nil { - return nil, err - } - return msg, nil - - case 14: - msg := &SetNodeData{meta: &meta{TypeID: 14}} - if msg.ID, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.Data, err = ReadString(reader); err != nil { - return nil, err - } - return msg, nil - - case 15: - msg := &SetCSSData{meta: &meta{TypeID: 15}} - if msg.ID, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.Data, err = ReadString(reader); err != nil { - return nil, err - } - return msg, nil - - case 16: - msg := &SetNodeScroll{meta: &meta{TypeID: 16}} - if msg.ID, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.X, err = ReadInt(reader); err != nil { - return nil, err - } - if msg.Y, err = ReadInt(reader); err != nil { - return nil, err - } - return msg, nil - - case 17: - msg := &SetInputTarget{meta: &meta{TypeID: 17}} - if msg.ID, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.Label, err = ReadString(reader); err != nil { - return nil, err - } - return msg, nil - - case 18: - msg := &SetInputValue{meta: &meta{TypeID: 18}} - if msg.ID, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.Value, err = ReadString(reader); err != nil { - return nil, err - } - if msg.Mask, err = ReadInt(reader); err != nil { - return nil, err - } - return msg, nil - - case 19: - msg := &SetInputChecked{meta: &meta{TypeID: 19}} - if msg.ID, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.Checked, err = ReadBoolean(reader); err != nil { - return nil, err - } - return msg, nil - - case 20: - msg := &MouseMove{meta: &meta{TypeID: 20}} - if msg.X, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.Y, err = ReadUint(reader); err != nil { - return nil, err - } - return msg, nil - - case 21: - msg := &MouseClickDepricated{meta: &meta{TypeID: 21}} - if msg.ID, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.HesitationTime, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.Label, err = ReadString(reader); err != nil { - return nil, err - } - return msg, nil - - case 22: - msg := &ConsoleLog{meta: &meta{TypeID: 22}} - if msg.Level, err = ReadString(reader); err != nil { - return nil, err - } - if msg.Value, err = ReadString(reader); err != nil { - return nil, err - } - return msg, nil - - case 23: - msg := &PageLoadTiming{meta: &meta{TypeID: 23}} - if msg.RequestStart, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.ResponseStart, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.ResponseEnd, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.DomContentLoadedEventStart, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.DomContentLoadedEventEnd, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.LoadEventStart, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.LoadEventEnd, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.FirstPaint, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.FirstContentfulPaint, err = ReadUint(reader); err != nil { - return nil, err - } - return msg, nil - - case 24: - msg := &PageRenderTiming{meta: &meta{TypeID: 24}} - if msg.SpeedIndex, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.VisuallyComplete, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.TimeToInteractive, err = ReadUint(reader); err != nil { - return nil, err - } - return msg, nil - - case 25: - msg := &JSException{meta: &meta{TypeID: 25}} - if msg.Name, err = ReadString(reader); err != nil { - return nil, err - } - if msg.Message, err = ReadString(reader); err != nil { - return nil, err - } - if msg.Payload, err = ReadString(reader); err != nil { - return nil, err - } - return msg, nil - - case 26: - msg := &RawErrorEvent{meta: &meta{TypeID: 26}} - if msg.Timestamp, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.Source, err = ReadString(reader); err != nil { - return nil, err - } - if msg.Name, err = ReadString(reader); err != nil { - return nil, err - } - if msg.Message, err = ReadString(reader); err != nil { - return nil, err - } - if msg.Payload, err = ReadString(reader); err != nil { - return nil, err - } - return msg, nil - - case 27: - msg := &RawCustomEvent{meta: &meta{TypeID: 27}} - if msg.Name, err = ReadString(reader); err != nil { - return nil, err - } - if msg.Payload, err = ReadString(reader); err != nil { - return nil, err - } - return msg, nil - - case 28: - msg := &UserID{meta: &meta{TypeID: 28}} - if msg.ID, err = ReadString(reader); err != nil { - return nil, err - } - return msg, nil - - case 29: - msg := &UserAnonymousID{meta: &meta{TypeID: 29}} - if msg.ID, err = ReadString(reader); err != nil { - return nil, err - } - return msg, nil - - case 30: - msg := &Metadata{meta: &meta{TypeID: 30}} - if msg.Key, err = ReadString(reader); err != nil { - return nil, err - } - if msg.Value, err = ReadString(reader); err != nil { - return nil, err - } - return msg, nil - - case 31: - msg := &PageEvent{meta: &meta{TypeID: 31}} - if msg.MessageID, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.Timestamp, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.URL, err = ReadString(reader); err != nil { - return nil, err - } - if msg.Referrer, err = ReadString(reader); err != nil { - return nil, err - } - if msg.Loaded, err = ReadBoolean(reader); err != nil { - return nil, err - } - if msg.RequestStart, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.ResponseStart, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.ResponseEnd, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.DomContentLoadedEventStart, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.DomContentLoadedEventEnd, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.LoadEventStart, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.LoadEventEnd, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.FirstPaint, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.FirstContentfulPaint, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.SpeedIndex, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.VisuallyComplete, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.TimeToInteractive, err = ReadUint(reader); err != nil { - return nil, err - } - return msg, nil - - case 32: - msg := &InputEvent{meta: &meta{TypeID: 32}} - if msg.MessageID, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.Timestamp, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.Value, err = ReadString(reader); err != nil { - return nil, err - } - if msg.ValueMasked, err = ReadBoolean(reader); err != nil { - return nil, err - } - if msg.Label, err = ReadString(reader); err != nil { - return nil, err - } - return msg, nil - - case 33: - msg := &ClickEvent{meta: &meta{TypeID: 33}} - if msg.MessageID, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.Timestamp, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.HesitationTime, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.Label, err = ReadString(reader); err != nil { - return nil, err - } - if msg.Selector, err = ReadString(reader); err != nil { - return nil, err - } - return msg, nil - - case 34: - msg := &ErrorEvent{meta: &meta{TypeID: 34}} - if msg.MessageID, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.Timestamp, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.Source, err = ReadString(reader); err != nil { - return nil, err - } - if msg.Name, err = ReadString(reader); err != nil { - return nil, err - } - if msg.Message, err = ReadString(reader); err != nil { - return nil, err - } - if msg.Payload, err = ReadString(reader); err != nil { - return nil, err - } - return msg, nil - - case 35: - msg := &ResourceEvent{meta: &meta{TypeID: 35}} - if msg.MessageID, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.Timestamp, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.Duration, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.TTFB, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.HeaderSize, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.EncodedBodySize, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.DecodedBodySize, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.URL, err = ReadString(reader); err != nil { - return nil, err - } - if msg.Type, err = ReadString(reader); err != nil { - return nil, err - } - if msg.Success, err = ReadBoolean(reader); err != nil { - return nil, err - } - if msg.Method, err = ReadString(reader); err != nil { - return nil, err - } - if msg.Status, err = ReadUint(reader); err != nil { - return nil, err - } - return msg, nil - - case 36: - msg := &CustomEvent{meta: &meta{TypeID: 36}} - if msg.MessageID, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.Timestamp, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.Name, err = ReadString(reader); err != nil { - return nil, err - } - if msg.Payload, err = ReadString(reader); err != nil { - return nil, err - } - return msg, nil - - case 37: - msg := &CSSInsertRule{meta: &meta{TypeID: 37}} - if msg.ID, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.Rule, err = ReadString(reader); err != nil { - return nil, err - } - if msg.Index, err = ReadUint(reader); err != nil { - return nil, err - } - return msg, nil - - case 38: - msg := &CSSDeleteRule{meta: &meta{TypeID: 38}} - if msg.ID, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.Index, err = ReadUint(reader); err != nil { - return nil, err - } - return msg, nil - - case 39: - msg := &Fetch{meta: &meta{TypeID: 39}} - if msg.Method, err = ReadString(reader); err != nil { - return nil, err - } - if msg.URL, err = ReadString(reader); err != nil { - return nil, err - } - if msg.Request, err = ReadString(reader); err != nil { - return nil, err - } - if msg.Response, err = ReadString(reader); err != nil { - return nil, err - } - if msg.Status, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.Timestamp, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.Duration, err = ReadUint(reader); err != nil { - return nil, err - } - return msg, nil - - case 40: - msg := &Profiler{meta: &meta{TypeID: 40}} - if msg.Name, err = ReadString(reader); err != nil { - return nil, err - } - if msg.Duration, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.Args, err = ReadString(reader); err != nil { - return nil, err - } - if msg.Result, err = ReadString(reader); err != nil { - return nil, err - } - return msg, nil - - case 41: - msg := &OTable{meta: &meta{TypeID: 41}} - if msg.Key, err = ReadString(reader); err != nil { - return nil, err - } - if msg.Value, err = ReadString(reader); err != nil { - return nil, err - } - return msg, nil - - case 42: - msg := &StateAction{meta: &meta{TypeID: 42}} - if msg.Type, err = ReadString(reader); err != nil { - return nil, err - } - return msg, nil - - case 43: - msg := &StateActionEvent{meta: &meta{TypeID: 43}} - if msg.MessageID, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.Timestamp, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.Type, err = ReadString(reader); err != nil { - return nil, err - } - return msg, nil - - case 44: - msg := &Redux{meta: &meta{TypeID: 44}} - if msg.Action, err = ReadString(reader); err != nil { - return nil, err - } - if msg.State, err = ReadString(reader); err != nil { - return nil, err - } - if msg.Duration, err = ReadUint(reader); err != nil { - return nil, err - } - return msg, nil - - case 45: - msg := &Vuex{meta: &meta{TypeID: 45}} - if msg.Mutation, err = ReadString(reader); err != nil { - return nil, err - } - if msg.State, err = ReadString(reader); err != nil { - return nil, err - } - return msg, nil - - case 46: - msg := &MobX{meta: &meta{TypeID: 46}} - if msg.Type, err = ReadString(reader); err != nil { - return nil, err - } - if msg.Payload, err = ReadString(reader); err != nil { - return nil, err - } - return msg, nil - - case 47: - msg := &NgRx{meta: &meta{TypeID: 47}} - if msg.Action, err = ReadString(reader); err != nil { - return nil, err - } - if msg.State, err = ReadString(reader); err != nil { - return nil, err - } - if msg.Duration, err = ReadUint(reader); err != nil { - return nil, err - } - return msg, nil - - case 48: - msg := &GraphQL{meta: &meta{TypeID: 48}} - if msg.OperationKind, err = ReadString(reader); err != nil { - return nil, err - } - if msg.OperationName, err = ReadString(reader); err != nil { - return nil, err - } - if msg.Variables, err = ReadString(reader); err != nil { - return nil, err - } - if msg.Response, err = ReadString(reader); err != nil { - return nil, err - } - return msg, nil - - case 49: - msg := &PerformanceTrack{meta: &meta{TypeID: 49}} - if msg.Frames, err = ReadInt(reader); err != nil { - return nil, err - } - if msg.Ticks, err = ReadInt(reader); err != nil { - return nil, err - } - if msg.TotalJSHeapSize, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.UsedJSHeapSize, err = ReadUint(reader); err != nil { - return nil, err - } - return msg, nil - - case 50: - msg := &GraphQLEvent{meta: &meta{TypeID: 50}} - if msg.MessageID, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.Timestamp, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.OperationKind, err = ReadString(reader); err != nil { - return nil, err - } - if msg.OperationName, err = ReadString(reader); err != nil { - return nil, err - } - if msg.Variables, err = ReadString(reader); err != nil { - return nil, err - } - if msg.Response, err = ReadString(reader); err != nil { - return nil, err - } - return msg, nil - - case 51: - msg := &FetchEvent{meta: &meta{TypeID: 51}} - if msg.MessageID, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.Timestamp, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.Method, err = ReadString(reader); err != nil { - return nil, err - } - if msg.URL, err = ReadString(reader); err != nil { - return nil, err - } - if msg.Request, err = ReadString(reader); err != nil { - return nil, err - } - if msg.Response, err = ReadString(reader); err != nil { - return nil, err - } - if msg.Status, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.Duration, err = ReadUint(reader); err != nil { - return nil, err - } - return msg, nil - - case 52: - msg := &DOMDrop{meta: &meta{TypeID: 52}} - if msg.Timestamp, err = ReadUint(reader); err != nil { - return nil, err - } - return msg, nil - - case 53: - msg := &ResourceTiming{meta: &meta{TypeID: 53}} - if msg.Timestamp, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.Duration, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.TTFB, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.HeaderSize, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.EncodedBodySize, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.DecodedBodySize, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.URL, err = ReadString(reader); err != nil { - return nil, err - } - if msg.Initiator, err = ReadString(reader); err != nil { - return nil, err - } - return msg, nil - - case 54: - msg := &ConnectionInformation{meta: &meta{TypeID: 54}} - if msg.Downlink, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.Type, err = ReadString(reader); err != nil { - return nil, err - } - return msg, nil - - case 55: - msg := &SetPageVisibility{meta: &meta{TypeID: 55}} - if msg.hidden, err = ReadBoolean(reader); err != nil { - return nil, err - } - return msg, nil - - case 56: - msg := &PerformanceTrackAggr{meta: &meta{TypeID: 56}} - if msg.TimestampStart, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.TimestampEnd, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.MinFPS, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.AvgFPS, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.MaxFPS, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.MinCPU, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.AvgCPU, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.MaxCPU, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.MinTotalJSHeapSize, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.AvgTotalJSHeapSize, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.MaxTotalJSHeapSize, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.MinUsedJSHeapSize, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.AvgUsedJSHeapSize, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.MaxUsedJSHeapSize, err = ReadUint(reader); err != nil { - return nil, err - } - return msg, nil - - case 59: - msg := &LongTask{meta: &meta{TypeID: 59}} - if msg.Timestamp, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.Duration, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.Context, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.ContainerType, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.ContainerSrc, err = ReadString(reader); err != nil { - return nil, err - } - if msg.ContainerId, err = ReadString(reader); err != nil { - return nil, err - } - if msg.ContainerName, err = ReadString(reader); err != nil { - return nil, err - } - return msg, nil - - case 60: - msg := &SetNodeAttributeURLBased{meta: &meta{TypeID: 60}} - if msg.ID, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.Name, err = ReadString(reader); err != nil { - return nil, err - } - if msg.Value, err = ReadString(reader); err != nil { - return nil, err - } - if msg.BaseURL, err = ReadString(reader); err != nil { - return nil, err - } - return msg, nil - - case 61: - msg := &SetCSSDataURLBased{meta: &meta{TypeID: 61}} - if msg.ID, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.Data, err = ReadString(reader); err != nil { - return nil, err - } - if msg.BaseURL, err = ReadString(reader); err != nil { - return nil, err - } - return msg, nil - - case 62: - msg := &IssueEvent{meta: &meta{TypeID: 62}} - if msg.MessageID, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.Timestamp, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.Type, err = ReadString(reader); err != nil { - return nil, err - } - if msg.ContextString, err = ReadString(reader); err != nil { - return nil, err - } - if msg.Context, err = ReadString(reader); err != nil { - return nil, err - } - if msg.Payload, err = ReadString(reader); err != nil { - return nil, err - } - return msg, nil - - case 63: - msg := &TechnicalInfo{meta: &meta{TypeID: 63}} - if msg.Type, err = ReadString(reader); err != nil { - return nil, err - } - if msg.Value, err = ReadString(reader); err != nil { - return nil, err - } - return msg, nil - - case 64: - msg := &CustomIssue{meta: &meta{TypeID: 64}} - if msg.Name, err = ReadString(reader); err != nil { - return nil, err - } - if msg.Payload, err = ReadString(reader); err != nil { - return nil, err - } - return msg, nil - - case 65: - msg := &PageClose{meta: &meta{TypeID: 65}} - - return msg, nil - - case 66: - msg := &AssetCache{meta: &meta{TypeID: 66}} - if msg.URL, err = ReadString(reader); err != nil { - return nil, err - } - return msg, nil - - case 67: - msg := &CSSInsertRuleURLBased{meta: &meta{TypeID: 67}} - if msg.ID, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.Rule, err = ReadString(reader); err != nil { - return nil, err - } - if msg.Index, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.BaseURL, err = ReadString(reader); err != nil { - return nil, err - } - return msg, nil - - case 69: - msg := &MouseClick{meta: &meta{TypeID: 69}} - if msg.ID, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.HesitationTime, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.Label, err = ReadString(reader); err != nil { - return nil, err - } - if msg.Selector, err = ReadString(reader); err != nil { - return nil, err - } - return msg, nil - - case 70: - msg := &CreateIFrameDocument{meta: &meta{TypeID: 70}} - if msg.FrameID, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.ID, err = ReadUint(reader); err != nil { - return nil, err - } - return msg, nil - - case 107: - msg := &IOSBatchMeta{meta: &meta{TypeID: 107}} - if msg.Timestamp, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.Length, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.FirstIndex, err = ReadUint(reader); err != nil { - return nil, err - } - return msg, nil - - case 90: - msg := &IOSSessionStart{meta: &meta{TypeID: 90}} - if msg.Timestamp, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.ProjectID, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.TrackerVersion, err = ReadString(reader); err != nil { - return nil, err - } - if msg.RevID, err = ReadString(reader); err != nil { - return nil, err - } - if msg.UserUUID, err = ReadString(reader); err != nil { - return nil, err - } - if msg.UserOS, err = ReadString(reader); err != nil { - return nil, err - } - if msg.UserOSVersion, err = ReadString(reader); err != nil { - return nil, err - } - if msg.UserDevice, err = ReadString(reader); err != nil { - return nil, err - } - if msg.UserDeviceType, err = ReadString(reader); err != nil { - return nil, err - } - if msg.UserCountry, err = ReadString(reader); err != nil { - return nil, err - } - return msg, nil - - case 91: - msg := &IOSSessionEnd{meta: &meta{TypeID: 91}} - if msg.Timestamp, err = ReadUint(reader); err != nil { - return nil, err - } - return msg, nil - - case 92: - msg := &IOSMetadata{meta: &meta{TypeID: 92}} - if msg.Timestamp, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.Length, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.Key, err = ReadString(reader); err != nil { - return nil, err - } - if msg.Value, err = ReadString(reader); err != nil { - return nil, err - } - return msg, nil - - case 93: - msg := &IOSCustomEvent{meta: &meta{TypeID: 93}} - if msg.Timestamp, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.Length, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.Name, err = ReadString(reader); err != nil { - return nil, err - } - if msg.Payload, err = ReadString(reader); err != nil { - return nil, err - } - return msg, nil - - case 94: - msg := &IOSUserID{meta: &meta{TypeID: 94}} - if msg.Timestamp, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.Length, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.Value, err = ReadString(reader); err != nil { - return nil, err - } - return msg, nil - - case 95: - msg := &IOSUserAnonymousID{meta: &meta{TypeID: 95}} - if msg.Timestamp, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.Length, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.Value, err = ReadString(reader); err != nil { - return nil, err - } - return msg, nil - - case 96: - msg := &IOSScreenChanges{meta: &meta{TypeID: 96}} - if msg.Timestamp, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.Length, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.X, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.Y, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.Width, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.Height, err = ReadUint(reader); err != nil { - return nil, err - } - return msg, nil - - case 97: - msg := &IOSCrash{meta: &meta{TypeID: 97}} - if msg.Timestamp, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.Length, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.Name, err = ReadString(reader); err != nil { - return nil, err - } - if msg.Reason, err = ReadString(reader); err != nil { - return nil, err - } - if msg.Stacktrace, err = ReadString(reader); err != nil { - return nil, err - } - return msg, nil - - case 98: - msg := &IOSScreenEnter{meta: &meta{TypeID: 98}} - if msg.Timestamp, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.Length, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.Title, err = ReadString(reader); err != nil { - return nil, err - } - if msg.ViewName, err = ReadString(reader); err != nil { - return nil, err - } - return msg, nil - - case 99: - msg := &IOSScreenLeave{meta: &meta{TypeID: 99}} - if msg.Timestamp, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.Length, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.Title, err = ReadString(reader); err != nil { - return nil, err - } - if msg.ViewName, err = ReadString(reader); err != nil { - return nil, err - } - return msg, nil - - case 100: - msg := &IOSClickEvent{meta: &meta{TypeID: 100}} - if msg.Timestamp, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.Length, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.Label, err = ReadString(reader); err != nil { - return nil, err - } - if msg.X, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.Y, err = ReadUint(reader); err != nil { - return nil, err - } - return msg, nil - - case 101: - msg := &IOSInputEvent{meta: &meta{TypeID: 101}} - if msg.Timestamp, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.Length, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.Value, err = ReadString(reader); err != nil { - return nil, err - } - if msg.ValueMasked, err = ReadBoolean(reader); err != nil { - return nil, err - } - if msg.Label, err = ReadString(reader); err != nil { - return nil, err - } - return msg, nil - - case 102: - msg := &IOSPerformanceEvent{meta: &meta{TypeID: 102}} - if msg.Timestamp, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.Length, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.Name, err = ReadString(reader); err != nil { - return nil, err - } - if msg.Value, err = ReadUint(reader); err != nil { - return nil, err - } - return msg, nil - - case 103: - msg := &IOSLog{meta: &meta{TypeID: 103}} - if msg.Timestamp, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.Length, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.Severity, err = ReadString(reader); err != nil { - return nil, err - } - if msg.Content, err = ReadString(reader); err != nil { - return nil, err - } - return msg, nil - - case 104: - msg := &IOSInternalError{meta: &meta{TypeID: 104}} - if msg.Timestamp, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.Length, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.Content, err = ReadString(reader); err != nil { - return nil, err - } - return msg, nil - - case 105: - msg := &IOSNetworkCall{meta: &meta{TypeID: 105}} - if msg.Timestamp, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.Length, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.Duration, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.Headers, err = ReadString(reader); err != nil { - return nil, err - } - if msg.Body, err = ReadString(reader); err != nil { - return nil, err - } - if msg.URL, err = ReadString(reader); err != nil { - return nil, err - } - if msg.Success, err = ReadBoolean(reader); err != nil { - return nil, err - } - if msg.Method, err = ReadString(reader); err != nil { - return nil, err - } - if msg.Status, err = ReadUint(reader); err != nil { - return nil, err - } - return msg, nil - - case 110: - msg := &IOSPerformanceAggregated{meta: &meta{TypeID: 110}} - if msg.TimestampStart, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.TimestampEnd, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.MinFPS, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.AvgFPS, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.MaxFPS, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.MinCPU, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.AvgCPU, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.MaxCPU, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.MinMemory, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.AvgMemory, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.MaxMemory, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.MinBattery, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.AvgBattery, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.MaxBattery, err = ReadUint(reader); err != nil { - return nil, err - } - return msg, nil - - case 111: - msg := &IOSIssueEvent{meta: &meta{TypeID: 111}} - if msg.Timestamp, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.Type, err = ReadString(reader); err != nil { - return nil, err - } - if msg.ContextString, err = ReadString(reader); err != nil { - return nil, err - } - if msg.Context, err = ReadString(reader); err != nil { - return nil, err - } - if msg.Payload, err = ReadString(reader); err != nil { - return nil, err - } - return msg, nil - - } - return nil, fmt.Errorf("Unknown message code: %v", t) + t, err := ReadUint(reader) + if err != nil { + return nil, err + } + switch t { + + case 80: + msg := &BatchMeta{meta: &meta{TypeID: 80}} + if msg.PageNo, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.FirstIndex, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.Timestamp, err = ReadInt(reader); err != nil { + return nil, err + } + return msg, nil + + case 0: + msg := &Timestamp{meta: &meta{TypeID: 0}} + if msg.Timestamp, err = ReadUint(reader); err != nil { + return nil, err + } + return msg, nil + + case 1: + msg := &SessionStart{meta: &meta{TypeID: 1}} + if msg.Timestamp, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.ProjectID, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.TrackerVersion, err = ReadString(reader); err != nil { + return nil, err + } + if msg.RevID, err = ReadString(reader); err != nil { + return nil, err + } + if msg.UserUUID, err = ReadString(reader); err != nil { + return nil, err + } + if msg.UserAgent, err = ReadString(reader); err != nil { + return nil, err + } + if msg.UserOS, err = ReadString(reader); err != nil { + return nil, err + } + if msg.UserOSVersion, err = ReadString(reader); err != nil { + return nil, err + } + if msg.UserBrowser, err = ReadString(reader); err != nil { + return nil, err + } + if msg.UserBrowserVersion, err = ReadString(reader); err != nil { + return nil, err + } + if msg.UserDevice, err = ReadString(reader); err != nil { + return nil, err + } + if msg.UserDeviceType, err = ReadString(reader); err != nil { + return nil, err + } + if msg.UserDeviceMemorySize, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.UserDeviceHeapSize, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.UserCountry, err = ReadString(reader); err != nil { + return nil, err + } + if msg.UserID, err = ReadString(reader); err != nil { + return nil, err + } + return msg, nil + + case 2: + msg := &SessionDisconnect{meta: &meta{TypeID: 2}} + if msg.Timestamp, err = ReadUint(reader); err != nil { + return nil, err + } + return msg, nil + + case 3: + msg := &SessionEnd{meta: &meta{TypeID: 3}} + if msg.Timestamp, err = ReadUint(reader); err != nil { + return nil, err + } + return msg, nil + + case 4: + msg := &SetPageLocation{meta: &meta{TypeID: 4}} + if msg.URL, err = ReadString(reader); err != nil { + return nil, err + } + if msg.Referrer, err = ReadString(reader); err != nil { + return nil, err + } + if msg.NavigationStart, err = ReadUint(reader); err != nil { + return nil, err + } + return msg, nil + + case 5: + msg := &SetViewportSize{meta: &meta{TypeID: 5}} + if msg.Width, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.Height, err = ReadUint(reader); err != nil { + return nil, err + } + return msg, nil + + case 6: + msg := &SetViewportScroll{meta: &meta{TypeID: 6}} + if msg.X, err = ReadInt(reader); err != nil { + return nil, err + } + if msg.Y, err = ReadInt(reader); err != nil { + return nil, err + } + return msg, nil + + case 7: + msg := &CreateDocument{meta: &meta{TypeID: 7}} + + return msg, nil + + case 8: + msg := &CreateElementNode{meta: &meta{TypeID: 8}} + if msg.ID, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.ParentID, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.index, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.Tag, err = ReadString(reader); err != nil { + return nil, err + } + if msg.SVG, err = ReadBoolean(reader); err != nil { + return nil, err + } + return msg, nil + + case 9: + msg := &CreateTextNode{meta: &meta{TypeID: 9}} + if msg.ID, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.ParentID, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.Index, err = ReadUint(reader); err != nil { + return nil, err + } + return msg, nil + + case 10: + msg := &MoveNode{meta: &meta{TypeID: 10}} + if msg.ID, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.ParentID, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.Index, err = ReadUint(reader); err != nil { + return nil, err + } + return msg, nil + + case 11: + msg := &RemoveNode{meta: &meta{TypeID: 11}} + if msg.ID, err = ReadUint(reader); err != nil { + return nil, err + } + return msg, nil + + case 12: + msg := &SetNodeAttribute{meta: &meta{TypeID: 12}} + if msg.ID, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.Name, err = ReadString(reader); err != nil { + return nil, err + } + if msg.Value, err = ReadString(reader); err != nil { + return nil, err + } + return msg, nil + + case 13: + msg := &RemoveNodeAttribute{meta: &meta{TypeID: 13}} + if msg.ID, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.Name, err = ReadString(reader); err != nil { + return nil, err + } + return msg, nil + + case 14: + msg := &SetNodeData{meta: &meta{TypeID: 14}} + if msg.ID, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.Data, err = ReadString(reader); err != nil { + return nil, err + } + return msg, nil + + case 15: + msg := &SetCSSData{meta: &meta{TypeID: 15}} + if msg.ID, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.Data, err = ReadString(reader); err != nil { + return nil, err + } + return msg, nil + + case 16: + msg := &SetNodeScroll{meta: &meta{TypeID: 16}} + if msg.ID, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.X, err = ReadInt(reader); err != nil { + return nil, err + } + if msg.Y, err = ReadInt(reader); err != nil { + return nil, err + } + return msg, nil + + case 17: + msg := &SetInputTarget{meta: &meta{TypeID: 17}} + if msg.ID, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.Label, err = ReadString(reader); err != nil { + return nil, err + } + return msg, nil + + case 18: + msg := &SetInputValue{meta: &meta{TypeID: 18}} + if msg.ID, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.Value, err = ReadString(reader); err != nil { + return nil, err + } + if msg.Mask, err = ReadInt(reader); err != nil { + return nil, err + } + return msg, nil + + case 19: + msg := &SetInputChecked{meta: &meta{TypeID: 19}} + if msg.ID, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.Checked, err = ReadBoolean(reader); err != nil { + return nil, err + } + return msg, nil + + case 20: + msg := &MouseMove{meta: &meta{TypeID: 20}} + if msg.X, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.Y, err = ReadUint(reader); err != nil { + return nil, err + } + return msg, nil + + case 21: + msg := &MouseClickDepricated{meta: &meta{TypeID: 21}} + if msg.ID, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.HesitationTime, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.Label, err = ReadString(reader); err != nil { + return nil, err + } + return msg, nil + + case 22: + msg := &ConsoleLog{meta: &meta{TypeID: 22}} + if msg.Level, err = ReadString(reader); err != nil { + return nil, err + } + if msg.Value, err = ReadString(reader); err != nil { + return nil, err + } + return msg, nil + + case 23: + msg := &PageLoadTiming{meta: &meta{TypeID: 23}} + if msg.RequestStart, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.ResponseStart, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.ResponseEnd, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.DomContentLoadedEventStart, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.DomContentLoadedEventEnd, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.LoadEventStart, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.LoadEventEnd, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.FirstPaint, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.FirstContentfulPaint, err = ReadUint(reader); err != nil { + return nil, err + } + return msg, nil + + case 24: + msg := &PageRenderTiming{meta: &meta{TypeID: 24}} + if msg.SpeedIndex, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.VisuallyComplete, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.TimeToInteractive, err = ReadUint(reader); err != nil { + return nil, err + } + return msg, nil + + case 25: + msg := &JSException{meta: &meta{TypeID: 25}} + if msg.Name, err = ReadString(reader); err != nil { + return nil, err + } + if msg.Message, err = ReadString(reader); err != nil { + return nil, err + } + if msg.Payload, err = ReadString(reader); err != nil { + return nil, err + } + return msg, nil + + case 26: + msg := &RawErrorEvent{meta: &meta{TypeID: 26}} + if msg.Timestamp, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.Source, err = ReadString(reader); err != nil { + return nil, err + } + if msg.Name, err = ReadString(reader); err != nil { + return nil, err + } + if msg.Message, err = ReadString(reader); err != nil { + return nil, err + } + if msg.Payload, err = ReadString(reader); err != nil { + return nil, err + } + return msg, nil + + case 27: + msg := &RawCustomEvent{meta: &meta{TypeID: 27}} + if msg.Name, err = ReadString(reader); err != nil { + return nil, err + } + if msg.Payload, err = ReadString(reader); err != nil { + return nil, err + } + return msg, nil + + case 28: + msg := &UserID{meta: &meta{TypeID: 28}} + if msg.ID, err = ReadString(reader); err != nil { + return nil, err + } + return msg, nil + + case 29: + msg := &UserAnonymousID{meta: &meta{TypeID: 29}} + if msg.ID, err = ReadString(reader); err != nil { + return nil, err + } + return msg, nil + + case 30: + msg := &Metadata{meta: &meta{TypeID: 30}} + if msg.Key, err = ReadString(reader); err != nil { + return nil, err + } + if msg.Value, err = ReadString(reader); err != nil { + return nil, err + } + return msg, nil + + case 31: + msg := &PageEvent{meta: &meta{TypeID: 31}} + if msg.MessageID, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.Timestamp, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.URL, err = ReadString(reader); err != nil { + return nil, err + } + if msg.Referrer, err = ReadString(reader); err != nil { + return nil, err + } + if msg.Loaded, err = ReadBoolean(reader); err != nil { + return nil, err + } + if msg.RequestStart, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.ResponseStart, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.ResponseEnd, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.DomContentLoadedEventStart, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.DomContentLoadedEventEnd, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.LoadEventStart, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.LoadEventEnd, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.FirstPaint, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.FirstContentfulPaint, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.SpeedIndex, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.VisuallyComplete, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.TimeToInteractive, err = ReadUint(reader); err != nil { + return nil, err + } + return msg, nil + + case 32: + msg := &InputEvent{meta: &meta{TypeID: 32}} + if msg.MessageID, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.Timestamp, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.Value, err = ReadString(reader); err != nil { + return nil, err + } + if msg.ValueMasked, err = ReadBoolean(reader); err != nil { + return nil, err + } + if msg.Label, err = ReadString(reader); err != nil { + return nil, err + } + return msg, nil + + case 33: + msg := &ClickEvent{meta: &meta{TypeID: 33}} + if msg.MessageID, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.Timestamp, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.HesitationTime, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.Label, err = ReadString(reader); err != nil { + return nil, err + } + if msg.Selector, err = ReadString(reader); err != nil { + return nil, err + } + return msg, nil + + case 34: + msg := &ErrorEvent{meta: &meta{TypeID: 34}} + if msg.MessageID, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.Timestamp, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.Source, err = ReadString(reader); err != nil { + return nil, err + } + if msg.Name, err = ReadString(reader); err != nil { + return nil, err + } + if msg.Message, err = ReadString(reader); err != nil { + return nil, err + } + if msg.Payload, err = ReadString(reader); err != nil { + return nil, err + } + return msg, nil + + case 35: + msg := &ResourceEvent{meta: &meta{TypeID: 35}} + if msg.MessageID, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.Timestamp, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.Duration, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.TTFB, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.HeaderSize, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.EncodedBodySize, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.DecodedBodySize, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.URL, err = ReadString(reader); err != nil { + return nil, err + } + if msg.Type, err = ReadString(reader); err != nil { + return nil, err + } + if msg.Success, err = ReadBoolean(reader); err != nil { + return nil, err + } + if msg.Method, err = ReadString(reader); err != nil { + return nil, err + } + if msg.Status, err = ReadUint(reader); err != nil { + return nil, err + } + return msg, nil + + case 36: + msg := &CustomEvent{meta: &meta{TypeID: 36}} + if msg.MessageID, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.Timestamp, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.Name, err = ReadString(reader); err != nil { + return nil, err + } + if msg.Payload, err = ReadString(reader); err != nil { + return nil, err + } + return msg, nil + + case 37: + msg := &CSSInsertRule{meta: &meta{TypeID: 37}} + if msg.ID, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.Rule, err = ReadString(reader); err != nil { + return nil, err + } + if msg.Index, err = ReadUint(reader); err != nil { + return nil, err + } + return msg, nil + + case 38: + msg := &CSSDeleteRule{meta: &meta{TypeID: 38}} + if msg.ID, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.Index, err = ReadUint(reader); err != nil { + return nil, err + } + return msg, nil + + case 39: + msg := &Fetch{meta: &meta{TypeID: 39}} + if msg.Method, err = ReadString(reader); err != nil { + return nil, err + } + if msg.URL, err = ReadString(reader); err != nil { + return nil, err + } + if msg.Request, err = ReadString(reader); err != nil { + return nil, err + } + if msg.Response, err = ReadString(reader); err != nil { + return nil, err + } + if msg.Status, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.Timestamp, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.Duration, err = ReadUint(reader); err != nil { + return nil, err + } + return msg, nil + + case 40: + msg := &Profiler{meta: &meta{TypeID: 40}} + if msg.Name, err = ReadString(reader); err != nil { + return nil, err + } + if msg.Duration, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.Args, err = ReadString(reader); err != nil { + return nil, err + } + if msg.Result, err = ReadString(reader); err != nil { + return nil, err + } + return msg, nil + + case 41: + msg := &OTable{meta: &meta{TypeID: 41}} + if msg.Key, err = ReadString(reader); err != nil { + return nil, err + } + if msg.Value, err = ReadString(reader); err != nil { + return nil, err + } + return msg, nil + + case 42: + msg := &StateAction{meta: &meta{TypeID: 42}} + if msg.Type, err = ReadString(reader); err != nil { + return nil, err + } + return msg, nil + + case 43: + msg := &StateActionEvent{meta: &meta{TypeID: 43}} + if msg.MessageID, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.Timestamp, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.Type, err = ReadString(reader); err != nil { + return nil, err + } + return msg, nil + + case 44: + msg := &Redux{meta: &meta{TypeID: 44}} + if msg.Action, err = ReadString(reader); err != nil { + return nil, err + } + if msg.State, err = ReadString(reader); err != nil { + return nil, err + } + if msg.Duration, err = ReadUint(reader); err != nil { + return nil, err + } + return msg, nil + + case 45: + msg := &Vuex{meta: &meta{TypeID: 45}} + if msg.Mutation, err = ReadString(reader); err != nil { + return nil, err + } + if msg.State, err = ReadString(reader); err != nil { + return nil, err + } + return msg, nil + + case 46: + msg := &MobX{meta: &meta{TypeID: 46}} + if msg.Type, err = ReadString(reader); err != nil { + return nil, err + } + if msg.Payload, err = ReadString(reader); err != nil { + return nil, err + } + return msg, nil + + case 47: + msg := &NgRx{meta: &meta{TypeID: 47}} + if msg.Action, err = ReadString(reader); err != nil { + return nil, err + } + if msg.State, err = ReadString(reader); err != nil { + return nil, err + } + if msg.Duration, err = ReadUint(reader); err != nil { + return nil, err + } + return msg, nil + + case 48: + msg := &GraphQL{meta: &meta{TypeID: 48}} + if msg.OperationKind, err = ReadString(reader); err != nil { + return nil, err + } + if msg.OperationName, err = ReadString(reader); err != nil { + return nil, err + } + if msg.Variables, err = ReadString(reader); err != nil { + return nil, err + } + if msg.Response, err = ReadString(reader); err != nil { + return nil, err + } + return msg, nil + + case 49: + msg := &PerformanceTrack{meta: &meta{TypeID: 49}} + if msg.Frames, err = ReadInt(reader); err != nil { + return nil, err + } + if msg.Ticks, err = ReadInt(reader); err != nil { + return nil, err + } + if msg.TotalJSHeapSize, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.UsedJSHeapSize, err = ReadUint(reader); err != nil { + return nil, err + } + return msg, nil + + case 50: + msg := &GraphQLEvent{meta: &meta{TypeID: 50}} + if msg.MessageID, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.Timestamp, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.OperationKind, err = ReadString(reader); err != nil { + return nil, err + } + if msg.OperationName, err = ReadString(reader); err != nil { + return nil, err + } + if msg.Variables, err = ReadString(reader); err != nil { + return nil, err + } + if msg.Response, err = ReadString(reader); err != nil { + return nil, err + } + return msg, nil + + case 51: + msg := &FetchEvent{meta: &meta{TypeID: 51}} + if msg.MessageID, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.Timestamp, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.Method, err = ReadString(reader); err != nil { + return nil, err + } + if msg.URL, err = ReadString(reader); err != nil { + return nil, err + } + if msg.Request, err = ReadString(reader); err != nil { + return nil, err + } + if msg.Response, err = ReadString(reader); err != nil { + return nil, err + } + if msg.Status, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.Duration, err = ReadUint(reader); err != nil { + return nil, err + } + return msg, nil + + case 52: + msg := &DOMDrop{meta: &meta{TypeID: 52}} + if msg.Timestamp, err = ReadUint(reader); err != nil { + return nil, err + } + return msg, nil + + case 53: + msg := &ResourceTiming{meta: &meta{TypeID: 53}} + if msg.Timestamp, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.Duration, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.TTFB, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.HeaderSize, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.EncodedBodySize, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.DecodedBodySize, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.URL, err = ReadString(reader); err != nil { + return nil, err + } + if msg.Initiator, err = ReadString(reader); err != nil { + return nil, err + } + return msg, nil + + case 54: + msg := &ConnectionInformation{meta: &meta{TypeID: 54}} + if msg.Downlink, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.Type, err = ReadString(reader); err != nil { + return nil, err + } + return msg, nil + + case 55: + msg := &SetPageVisibility{meta: &meta{TypeID: 55}} + if msg.hidden, err = ReadBoolean(reader); err != nil { + return nil, err + } + return msg, nil + + case 56: + msg := &PerformanceTrackAggr{meta: &meta{TypeID: 56}} + if msg.TimestampStart, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.TimestampEnd, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.MinFPS, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.AvgFPS, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.MaxFPS, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.MinCPU, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.AvgCPU, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.MaxCPU, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.MinTotalJSHeapSize, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.AvgTotalJSHeapSize, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.MaxTotalJSHeapSize, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.MinUsedJSHeapSize, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.AvgUsedJSHeapSize, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.MaxUsedJSHeapSize, err = ReadUint(reader); err != nil { + return nil, err + } + return msg, nil + + case 59: + msg := &LongTask{meta: &meta{TypeID: 59}} + if msg.Timestamp, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.Duration, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.Context, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.ContainerType, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.ContainerSrc, err = ReadString(reader); err != nil { + return nil, err + } + if msg.ContainerId, err = ReadString(reader); err != nil { + return nil, err + } + if msg.ContainerName, err = ReadString(reader); err != nil { + return nil, err + } + return msg, nil + + case 60: + msg := &SetNodeAttributeURLBased{meta: &meta{TypeID: 60}} + if msg.ID, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.Name, err = ReadString(reader); err != nil { + return nil, err + } + if msg.Value, err = ReadString(reader); err != nil { + return nil, err + } + if msg.BaseURL, err = ReadString(reader); err != nil { + return nil, err + } + return msg, nil + + case 61: + msg := &SetCSSDataURLBased{meta: &meta{TypeID: 61}} + if msg.ID, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.Data, err = ReadString(reader); err != nil { + return nil, err + } + if msg.BaseURL, err = ReadString(reader); err != nil { + return nil, err + } + return msg, nil + + case 62: + msg := &IssueEvent{meta: &meta{TypeID: 62}} + if msg.MessageID, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.Timestamp, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.Type, err = ReadString(reader); err != nil { + return nil, err + } + if msg.ContextString, err = ReadString(reader); err != nil { + return nil, err + } + if msg.Context, err = ReadString(reader); err != nil { + return nil, err + } + if msg.Payload, err = ReadString(reader); err != nil { + return nil, err + } + return msg, nil + + case 63: + msg := &TechnicalInfo{meta: &meta{TypeID: 63}} + if msg.Type, err = ReadString(reader); err != nil { + return nil, err + } + if msg.Value, err = ReadString(reader); err != nil { + return nil, err + } + return msg, nil + + case 64: + msg := &CustomIssue{meta: &meta{TypeID: 64}} + if msg.Name, err = ReadString(reader); err != nil { + return nil, err + } + if msg.Payload, err = ReadString(reader); err != nil { + return nil, err + } + return msg, nil + + case 65: + msg := &PageClose{meta: &meta{TypeID: 65}} + + return msg, nil + + case 66: + msg := &AssetCache{meta: &meta{TypeID: 66}} + if msg.URL, err = ReadString(reader); err != nil { + return nil, err + } + return msg, nil + + case 67: + msg := &CSSInsertRuleURLBased{meta: &meta{TypeID: 67}} + if msg.ID, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.Rule, err = ReadString(reader); err != nil { + return nil, err + } + if msg.Index, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.BaseURL, err = ReadString(reader); err != nil { + return nil, err + } + return msg, nil + + case 69: + msg := &MouseClick{meta: &meta{TypeID: 69}} + if msg.ID, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.HesitationTime, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.Label, err = ReadString(reader); err != nil { + return nil, err + } + if msg.Selector, err = ReadString(reader); err != nil { + return nil, err + } + return msg, nil + + case 70: + msg := &CreateIFrameDocument{meta: &meta{TypeID: 70}} + if msg.FrameID, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.ID, err = ReadUint(reader); err != nil { + return nil, err + } + return msg, nil + + case 107: + msg := &IOSBatchMeta{meta: &meta{TypeID: 107}} + if msg.Timestamp, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.Length, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.FirstIndex, err = ReadUint(reader); err != nil { + return nil, err + } + return msg, nil + + case 90: + msg := &IOSSessionStart{meta: &meta{TypeID: 90}} + if msg.Timestamp, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.ProjectID, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.TrackerVersion, err = ReadString(reader); err != nil { + return nil, err + } + if msg.RevID, err = ReadString(reader); err != nil { + return nil, err + } + if msg.UserUUID, err = ReadString(reader); err != nil { + return nil, err + } + if msg.UserOS, err = ReadString(reader); err != nil { + return nil, err + } + if msg.UserOSVersion, err = ReadString(reader); err != nil { + return nil, err + } + if msg.UserDevice, err = ReadString(reader); err != nil { + return nil, err + } + if msg.UserDeviceType, err = ReadString(reader); err != nil { + return nil, err + } + if msg.UserCountry, err = ReadString(reader); err != nil { + return nil, err + } + return msg, nil + + case 91: + msg := &IOSSessionEnd{meta: &meta{TypeID: 91}} + if msg.Timestamp, err = ReadUint(reader); err != nil { + return nil, err + } + return msg, nil + + case 92: + msg := &IOSMetadata{meta: &meta{TypeID: 92}} + if msg.Timestamp, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.Length, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.Key, err = ReadString(reader); err != nil { + return nil, err + } + if msg.Value, err = ReadString(reader); err != nil { + return nil, err + } + return msg, nil + + case 93: + msg := &IOSCustomEvent{meta: &meta{TypeID: 93}} + if msg.Timestamp, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.Length, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.Name, err = ReadString(reader); err != nil { + return nil, err + } + if msg.Payload, err = ReadString(reader); err != nil { + return nil, err + } + return msg, nil + + case 94: + msg := &IOSUserID{meta: &meta{TypeID: 94}} + if msg.Timestamp, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.Length, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.Value, err = ReadString(reader); err != nil { + return nil, err + } + return msg, nil + + case 95: + msg := &IOSUserAnonymousID{meta: &meta{TypeID: 95}} + if msg.Timestamp, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.Length, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.Value, err = ReadString(reader); err != nil { + return nil, err + } + return msg, nil + + case 96: + msg := &IOSScreenChanges{meta: &meta{TypeID: 96}} + if msg.Timestamp, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.Length, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.X, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.Y, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.Width, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.Height, err = ReadUint(reader); err != nil { + return nil, err + } + return msg, nil + + case 97: + msg := &IOSCrash{meta: &meta{TypeID: 97}} + if msg.Timestamp, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.Length, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.Name, err = ReadString(reader); err != nil { + return nil, err + } + if msg.Reason, err = ReadString(reader); err != nil { + return nil, err + } + if msg.Stacktrace, err = ReadString(reader); err != nil { + return nil, err + } + return msg, nil + + case 98: + msg := &IOSScreenEnter{meta: &meta{TypeID: 98}} + if msg.Timestamp, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.Length, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.Title, err = ReadString(reader); err != nil { + return nil, err + } + if msg.ViewName, err = ReadString(reader); err != nil { + return nil, err + } + return msg, nil + + case 99: + msg := &IOSScreenLeave{meta: &meta{TypeID: 99}} + if msg.Timestamp, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.Length, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.Title, err = ReadString(reader); err != nil { + return nil, err + } + if msg.ViewName, err = ReadString(reader); err != nil { + return nil, err + } + return msg, nil + + case 100: + msg := &IOSClickEvent{meta: &meta{TypeID: 100}} + if msg.Timestamp, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.Length, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.Label, err = ReadString(reader); err != nil { + return nil, err + } + if msg.X, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.Y, err = ReadUint(reader); err != nil { + return nil, err + } + return msg, nil + + case 101: + msg := &IOSInputEvent{meta: &meta{TypeID: 101}} + if msg.Timestamp, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.Length, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.Value, err = ReadString(reader); err != nil { + return nil, err + } + if msg.ValueMasked, err = ReadBoolean(reader); err != nil { + return nil, err + } + if msg.Label, err = ReadString(reader); err != nil { + return nil, err + } + return msg, nil + + case 102: + msg := &IOSPerformanceEvent{meta: &meta{TypeID: 102}} + if msg.Timestamp, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.Length, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.Name, err = ReadString(reader); err != nil { + return nil, err + } + if msg.Value, err = ReadUint(reader); err != nil { + return nil, err + } + return msg, nil + + case 103: + msg := &IOSLog{meta: &meta{TypeID: 103}} + if msg.Timestamp, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.Length, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.Severity, err = ReadString(reader); err != nil { + return nil, err + } + if msg.Content, err = ReadString(reader); err != nil { + return nil, err + } + return msg, nil + + case 104: + msg := &IOSInternalError{meta: &meta{TypeID: 104}} + if msg.Timestamp, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.Length, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.Content, err = ReadString(reader); err != nil { + return nil, err + } + return msg, nil + + case 105: + msg := &IOSNetworkCall{meta: &meta{TypeID: 105}} + if msg.Timestamp, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.Length, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.Duration, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.Headers, err = ReadString(reader); err != nil { + return nil, err + } + if msg.Body, err = ReadString(reader); err != nil { + return nil, err + } + if msg.URL, err = ReadString(reader); err != nil { + return nil, err + } + if msg.Success, err = ReadBoolean(reader); err != nil { + return nil, err + } + if msg.Method, err = ReadString(reader); err != nil { + return nil, err + } + if msg.Status, err = ReadUint(reader); err != nil { + return nil, err + } + return msg, nil + + case 110: + msg := &IOSPerformanceAggregated{meta: &meta{TypeID: 110}} + if msg.TimestampStart, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.TimestampEnd, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.MinFPS, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.AvgFPS, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.MaxFPS, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.MinCPU, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.AvgCPU, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.MaxCPU, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.MinMemory, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.AvgMemory, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.MaxMemory, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.MinBattery, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.AvgBattery, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.MaxBattery, err = ReadUint(reader); err != nil { + return nil, err + } + return msg, nil + + case 111: + msg := &IOSIssueEvent{meta: &meta{TypeID: 111}} + if msg.Timestamp, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.Type, err = ReadString(reader); err != nil { + return nil, err + } + if msg.ContextString, err = ReadString(reader); err != nil { + return nil, err + } + if msg.Context, err = ReadString(reader); err != nil { + return nil, err + } + if msg.Payload, err = ReadString(reader); err != nil { + return nil, err + } + return msg, nil + + } + return nil, fmt.Errorf("Unknown message code: %v", t) } diff --git a/backend/pkg/redisstream/producer.go b/backend/pkg/redisstream/producer.go index e67200a4f..d5afc63b3 100644 --- a/backend/pkg/redisstream/producer.go +++ b/backend/pkg/redisstream/producer.go @@ -6,25 +6,24 @@ import ( "openreplay/backend/pkg/env" ) - type Producer struct { - redis *redis.Client - maxLenApprox int64 + redis *redis.Client + maxLenApprox int64 } func NewProducer() *Producer { return &Producer{ - redis: getRedisClient(), + redis: getRedisClient(), maxLenApprox: int64(env.Uint64("REDIS_STREAMS_MAX_LEN")), } } func (p *Producer) Produce(topic string, key uint64, value []byte) error { - args := &redis.XAddArgs{ + args := &redis.XAddArgs{ Stream: topic, Values: map[string]interface{}{ "sessionID": key, - "value": value, + "value": value, }, } args.MaxLenApprox = p.maxLenApprox @@ -35,7 +34,7 @@ func (p *Producer) Produce(topic string, key uint64, value []byte) error { } return nil } - + func (p *Producer) Close(_ int) { // noop } diff --git a/backend/pkg/redisstream/redis.go b/backend/pkg/redisstream/redis.go index dea4afe9b..7dba0b537 100644 --- a/backend/pkg/redisstream/redis.go +++ b/backend/pkg/redisstream/redis.go @@ -2,15 +2,13 @@ package redisstream import ( "log" - + "github.com/go-redis/redis" "openreplay/backend/pkg/env" ) - -var redisClient *redis.Client - +var redisClient *redis.Client func getRedisClient() *redis.Client { if redisClient != nil { @@ -23,4 +21,4 @@ func getRedisClient() *redis.Client { log.Fatalln(err) } return redisClient -} \ No newline at end of file +} diff --git a/backend/pkg/storage/s3.go b/backend/pkg/storage/s3.go index 0f55e3851..408dc1864 100644 --- a/backend/pkg/storage/s3.go +++ b/backend/pkg/storage/s3.go @@ -2,8 +2,8 @@ package storage import ( "io" - "strconv" "sort" + "strconv" _s3 "github.com/aws/aws-sdk-go/service/s3" "github.com/aws/aws-sdk-go/service/s3/s3manager" @@ -12,18 +12,17 @@ import ( ) type S3 struct { - uploader *s3manager.Uploader - svc *_s3.S3 - bucket *string + uploader *s3manager.Uploader + svc *_s3.S3 + bucket *string } - func NewS3(region string, bucket string) *S3 { sess := env.AWSSessionOnRegion(region) return &S3{ uploader: s3manager.NewUploader(sess), - svc: _s3.New(sess), // AWS Docs: "These clients are safe to use concurrently." - bucket: &bucket, + svc: _s3.New(sess), // AWS Docs: "These clients are safe to use concurrently." + bucket: &bucket, } } @@ -35,14 +34,14 @@ func (s3 *S3) Upload(reader io.Reader, key string, contentType string, gzipped b contentEncoding = &gzipStr } _, err := s3.uploader.Upload(&s3manager.UploadInput{ - Body: reader, - Bucket: s3.bucket, - Key: &key, - ContentType: &contentType, - CacheControl: &cacheControl, + Body: reader, + Bucket: s3.bucket, + Key: &key, + ContentType: &contentType, + CacheControl: &cacheControl, ContentEncoding: contentEncoding, - }) - return err + }) + return err } func (s3 *S3) Get(key string) (io.ReadCloser, error) { @@ -67,8 +66,8 @@ func (s3 *S3) Exists(key string) bool { return false } - const MAX_RETURNING_COUNT = 40 + func (s3 *S3) GetFrequentlyUsedKeys(projectID uint64) ([]string, error) { prefix := strconv.FormatUint(projectID, 10) + "/" output, err := s3.svc.ListObjectsV2(&_s3.ListObjectsV2Input{ @@ -82,7 +81,7 @@ func (s3 *S3) GetFrequentlyUsedKeys(projectID uint64) ([]string, error) { list := output.Contents max := len(list) - if (max > MAX_RETURNING_COUNT) { + if max > MAX_RETURNING_COUNT { max = MAX_RETURNING_COUNT sort.Slice(list, func(i, j int) bool { return list[i].LastModified.After(*(list[j].LastModified)) @@ -91,8 +90,8 @@ func (s3 *S3) GetFrequentlyUsedKeys(projectID uint64) ([]string, error) { var keyList []string s := len(prefix) - for _, obj := range list[:max] { - keyList = append(keyList, (*obj.Key)[s:]) - } - return keyList, nil -} \ No newline at end of file + for _, obj := range list[:max] { + keyList = append(keyList, (*obj.Key)[s:]) + } + return keyList, nil +} diff --git a/backend/pkg/url/assets/css.go b/backend/pkg/url/assets/css.go index 3bd486bc7..dda8755d7 100644 --- a/backend/pkg/url/assets/css.go +++ b/backend/pkg/url/assets/css.go @@ -39,7 +39,7 @@ func unquote(str string) (string, string) { } func ExtractURLsFromCSS(css string) []string { - indexes := cssUrlsIndex(css) + indexes := cssUrlsIndex(css) urls := make([]string, len(indexes)) for _, idx := range indexes { diff --git a/backend/pkg/url/method.go b/backend/pkg/url/method.go index e7dd9eb49..31e654fde 100644 --- a/backend/pkg/url/method.go +++ b/backend/pkg/url/method.go @@ -1,12 +1,12 @@ package url -var METHODS = []string{ "GET", "HEAD", "POST" , "PUT" , "DELETE" , "CONNECT" , "OPTIONS" , "TRACE" , "PATCH" } +var METHODS = []string{"GET", "HEAD", "POST", "PUT", "DELETE", "CONNECT", "OPTIONS", "TRACE", "PATCH"} func EnsureMethod(method string) string { for _, m := range METHODS { - if m == method { - return method - } + if m == method { + return method + } } return "" -} \ No newline at end of file +} diff --git a/backend/services/assets/jsexception.go b/backend/services/assets/jsexception.go index ce5852bd5..c0b26e0db 100644 --- a/backend/services/assets/jsexception.go +++ b/backend/services/assets/jsexception.go @@ -1,16 +1,14 @@ -package main +package main import ( "encoding/json" "strings" ) - type frame struct { FileName string `json:"fileName"` } - func extractJSExceptionSources(payload *string) ([]string, error) { var frameList []frame err := json.Unmarshal([]byte(*payload), &frameList) @@ -25,8 +23,8 @@ func extractJSExceptionSources(payload *string) ([]string, error) { fn := strings.Split(f.FileName, "?")[0] if strings.HasPrefix(fn, "http") && !presentedFileName[fn] { fileNamesList = append(fileNamesList, f.FileName) - presentedFileName[fn] = true + presentedFileName[fn] = true } } return fileNamesList, nil -} \ No newline at end of file +} diff --git a/backend/services/assets/main.go b/backend/services/assets/main.go index 664dc5b09..259918395 100644 --- a/backend/services/assets/main.go +++ b/backend/services/assets/main.go @@ -66,6 +66,7 @@ func main() { os.Exit(0) case err := <-cacher.Errors: log.Printf("Error while caching: %v", err) + // TODO: notify user case <-tick: cacher.UpdateTimeouts() default: diff --git a/backend/services/db/heuristics/anr.go b/backend/services/db/heuristics/anr.go index 266f882f9..0475b00be 100644 --- a/backend/services/db/heuristics/anr.go +++ b/backend/services/db/heuristics/anr.go @@ -1,23 +1,22 @@ package heuristics import ( - . "openreplay/backend/pkg/messages" + . "openreplay/backend/pkg/messages" ) - const MIN_TIME_AFTER_LAST_HEARTBEAT = 60 * 1000 type anr struct { readyMessageStore - lastLabel string + lastLabel string lastHeartbeatTimestamp uint64 - lastHeartbeatIndex uint64 + lastHeartbeatIndex uint64 } func (h *anr) buildIf(timestamp uint64) { - if h.lastHeartbeatTimestamp != 0 && h.lastHeartbeatTimestamp + MIN_TIME_AFTER_LAST_HEARTBEAT <= timestamp { + if h.lastHeartbeatTimestamp != 0 && h.lastHeartbeatTimestamp+MIN_TIME_AFTER_LAST_HEARTBEAT <= timestamp { m := &IOSIssueEvent{ - Type: "anr", + Type: "anr", ContextString: h.lastLabel, //Context: "{}", //Payload: fmt.SPrint @@ -49,4 +48,4 @@ func (h *anr) HandleMessage(msg Message) { case *IOSSessionEnd: h.buildIf(m.Timestamp) } -} \ No newline at end of file +} diff --git a/backend/services/db/heuristics/clickrage.go b/backend/services/db/heuristics/clickrage.go index 4dc86ee65..9a1db92d5 100644 --- a/backend/services/db/heuristics/clickrage.go +++ b/backend/services/db/heuristics/clickrage.go @@ -1,26 +1,25 @@ package heuristics import ( - . "openreplay/backend/pkg/messages" + . "openreplay/backend/pkg/messages" ) - const CLICK_TIME_DIFF = 200 const MIN_CLICKS_IN_A_ROW = 3 type clickrage struct { readyMessageStore - lastTimestamp uint64 - lastLabel string + lastTimestamp uint64 + lastLabel string firstInARawTimestamp uint64 - firstInARawSeqIndex uint64 - countsInARow int + firstInARawSeqIndex uint64 + countsInARow int } func (h *clickrage) build() { if h.countsInARow >= MIN_CLICKS_IN_A_ROW { m := &IOSIssueEvent{ - Type: "click_rage", + Type: "click_rage", ContextString: h.lastLabel, //Context: "{}", //Payload: fmt.SPrint @@ -39,7 +38,7 @@ func (h *clickrage) build() { func (h *clickrage) HandleMessage(msg Message) { switch m := msg.(type) { case *IOSClickEvent: - if h.lastTimestamp + CLICK_TIME_DIFF < m.Timestamp && h.lastLabel == m.Label { + if h.lastTimestamp+CLICK_TIME_DIFF < m.Timestamp && h.lastLabel == m.Label { h.lastTimestamp = m.Timestamp h.countsInARow += 1 return @@ -55,4 +54,4 @@ func (h *clickrage) HandleMessage(msg Message) { case *IOSSessionEnd: h.build() } -} \ No newline at end of file +} diff --git a/backend/services/db/heuristics/heuristics.go b/backend/services/db/heuristics/heuristics.go index 7832e0a82..677574951 100644 --- a/backend/services/db/heuristics/heuristics.go +++ b/backend/services/db/heuristics/heuristics.go @@ -1,8 +1,8 @@ package heuristics import ( - . "openreplay/backend/pkg/messages" - . "openreplay/backend/pkg/db/types" + . "openreplay/backend/pkg/db/types" + . "openreplay/backend/pkg/messages" ) type MessageHandler interface { @@ -19,7 +19,6 @@ type Handler interface { type mainHandler map[uint64]*sessHandler - func NewHandler() mainHandler { return make(mainHandler) } @@ -43,8 +42,10 @@ func (m mainHandler) HandleMessage(session *Session, msg Message) { } func (m mainHandler) IterateSessionReadyMessages(sessionID uint64, iter func(msg Message)) { - s, ok := m[ sessionID ] - if !ok { return } + s, ok := m[sessionID] + if !ok { + return + } s.IterateReadyMessages(iter) if s.IsEnded() { delete(m, sessionID) @@ -61,5 +62,3 @@ func (m mainHandler) IterateReadyMessages(iter func(sessionID uint64, msg Messag } } } - - diff --git a/backend/services/db/heuristics/performance.go b/backend/services/db/heuristics/performance.go index 931d831e6..c7494a793 100644 --- a/backend/services/db/heuristics/performance.go +++ b/backend/services/db/heuristics/performance.go @@ -1,31 +1,30 @@ package heuristics import ( - . "openreplay/backend/pkg/messages" + . "openreplay/backend/pkg/messages" ) - const AGGR_TIME = 15 * 60 * 1000 - type valueAggregator struct { - sum float64 + sum float64 count float64 } + func (va *valueAggregator) aggregate() uint64 { if va.count == 0 { return 0 } - return uint64(va.sum/va.count) + return uint64(va.sum / va.count) } type performanceAggregator struct { readyMessageStore - pa *IOSPerformanceAggregated - fps valueAggregator - cpu valueAggregator - memory valueAggregator - battery valueAggregator + pa *IOSPerformanceAggregated + fps valueAggregator + cpu valueAggregator + memory valueAggregator + battery valueAggregator } func (h *performanceAggregator) build(timestamp uint64) { @@ -56,7 +55,7 @@ func (h *performanceAggregator) HandleMessage(msg Message) { if h.pa.TimestampStart == 0 { h.pa.TimestampStart = m.Timestamp } - if h.pa.TimestampStart + AGGR_TIME <= m.Timestamp { + if h.pa.TimestampStart+AGGR_TIME <= m.Timestamp { h.build(m.Timestamp) } switch m.Name { @@ -96,8 +95,8 @@ func (h *performanceAggregator) HandleMessage(msg Message) { if m.Value > h.pa.MaxBattery { h.pa.MaxBattery = m.Value } - } + } case *IOSSessionEnd: h.build(m.Timestamp) } -} \ No newline at end of file +} diff --git a/backend/services/db/heuristics/readyMessageStore.go b/backend/services/db/heuristics/readyMessageStore.go index 9c619e20b..bbe77585d 100644 --- a/backend/services/db/heuristics/readyMessageStore.go +++ b/backend/services/db/heuristics/readyMessageStore.go @@ -1,10 +1,9 @@ package heuristics import ( - . "openreplay/backend/pkg/messages" + . "openreplay/backend/pkg/messages" ) - type readyMessageStore struct { store []Message } @@ -18,4 +17,4 @@ func (s *readyMessageStore) IterateReadyMessages(cb func(msg Message)) { cb(msg) } s.store = nil -} \ No newline at end of file +} diff --git a/backend/services/db/heuristics/session.go b/backend/services/db/heuristics/session.go index d828ca478..3946bf918 100644 --- a/backend/services/db/heuristics/session.go +++ b/backend/services/db/heuristics/session.go @@ -1,18 +1,16 @@ package heuristics import ( - . "openreplay/backend/pkg/messages" - . "openreplay/backend/pkg/db/types" + . "openreplay/backend/pkg/db/types" + . "openreplay/backend/pkg/messages" ) - type sessHandler struct { - session *Session + session *Session handlers []Handler - ended bool + ended bool } - func newSessHandler(session *Session) *sessHandler { return &sessHandler{ session: session, @@ -44,4 +42,4 @@ func (s *sessHandler) IterateReadyMessages(cb func(msg Message)) { func (s *sessHandler) IsEnded() bool { return s.ended -} \ No newline at end of file +} diff --git a/backend/services/db/stats.go b/backend/services/db/stats.go index 81abf1b91..2c3a5da38 100644 --- a/backend/services/db/stats.go +++ b/backend/services/db/stats.go @@ -1,25 +1,23 @@ package main import ( - - . "openreplay/backend/pkg/messages" . "openreplay/backend/pkg/db/types" + . "openreplay/backend/pkg/messages" ) func initStats() { - // noop + // noop } - func insertStats(session *Session, msg Message) error { switch m := msg.(type) { - // Web - case *PerformanceTrackAggr: - return pg.InsertWebStatsPerformance(session.SessionID, m) - case *ResourceEvent: - return pg.InsertWebStatsResourceEvent(session.SessionID, m) - case *LongTask: - return pg.InsertWebStatsLongtask(session.SessionID, m) + // Web + case *PerformanceTrackAggr: + return pg.InsertWebStatsPerformance(session.SessionID, m) + case *ResourceEvent: + return pg.InsertWebStatsResourceEvent(session.SessionID, m) + case *LongTask: + return pg.InsertWebStatsLongtask(session.SessionID, m) // IOS // case *IOSPerformanceAggregated: diff --git a/backend/services/ender/builder/builderMap.go b/backend/services/ender/builder/builderMap.go index 6ab3c3ac7..3f3e4d6e3 100644 --- a/backend/services/ender/builder/builderMap.go +++ b/backend/services/ender/builder/builderMap.go @@ -6,7 +6,6 @@ import ( type builderMap map[uint64]*builder - func NewBuilderMap() builderMap { return make(builderMap) } @@ -28,8 +27,10 @@ func (m builderMap) HandleMessage(sessionID uint64, msg Message, messageID uint6 } func (m builderMap) IterateSessionReadyMessages(sessionID uint64, operatingTs int64, iter func(msg Message)) { - b, ok := m[ sessionID ] - if !ok { return } + b, ok := m[sessionID] + if !ok { + return + } sessionEnded := b.checkTimeouts(operatingTs) b.iterateReadyMessage(iter) if sessionEnded { @@ -48,5 +49,3 @@ func (m builderMap) IterateReadyMessages(operatingTs int64, iter func(sessionID } } } - - diff --git a/backend/services/ender/builder/clikRageDetector.go b/backend/services/ender/builder/clikRageDetector.go index 116d57071..f25efbcd9 100644 --- a/backend/services/ender/builder/clikRageDetector.go +++ b/backend/services/ender/builder/clikRageDetector.go @@ -1,34 +1,32 @@ package builder import ( - "encoding/json" + "encoding/json" . "openreplay/backend/pkg/messages" ) - const CLICK_TIME_DIFF = 300 const MIN_CLICKS_IN_A_ROW = 3 type clickRageDetector struct { - lastTimestamp uint64 - lastLabel string + lastTimestamp uint64 + lastLabel string firstInARawTimestamp uint64 firstInARawMessageId uint64 - countsInARow int + countsInARow int } - func (crd *clickRageDetector) Build() *IssueEvent { var i *IssueEvent if crd.countsInARow >= MIN_CLICKS_IN_A_ROW { - payload, _ := json.Marshal(struct{Count int }{crd.countsInARow,}) + payload, _ := json.Marshal(struct{ Count int }{crd.countsInARow}) i = &IssueEvent{ - Type: "click_rage", + Type: "click_rage", ContextString: crd.lastLabel, - Payload: string(payload), // TODO: json encoder - Timestamp: crd.firstInARawTimestamp, - MessageID: crd.firstInARawMessageId, + Payload: string(payload), // TODO: json encoder + Timestamp: crd.firstInARawTimestamp, + MessageID: crd.firstInARawMessageId, } } crd.lastTimestamp = 0 @@ -39,8 +37,8 @@ func (crd *clickRageDetector) Build() *IssueEvent { return i } -func (crd *clickRageDetector) HandleMouseClick(msg *MouseClick, messageID uint64, timestamp uint64) *IssueEvent { - if crd.lastTimestamp + CLICK_TIME_DIFF > timestamp && crd.lastLabel == msg.Label { +func (crd *clickRageDetector) HandleMouseClick(msg *MouseClick, messageID uint64, timestamp uint64) *IssueEvent { + if crd.lastTimestamp+CLICK_TIME_DIFF > timestamp && crd.lastLabel == msg.Label { crd.lastTimestamp = timestamp crd.countsInARow += 1 return nil @@ -54,4 +52,4 @@ func (crd *clickRageDetector) HandleMouseClick(msg *MouseClick, messageID uint6 crd.countsInARow = 1 } return i -} \ No newline at end of file +} diff --git a/backend/services/ender/builder/cpuIssueFinder.go b/backend/services/ender/builder/cpuIssueFinder.go index be02c280f..1af867ea3 100644 --- a/backend/services/ender/builder/cpuIssueFinder.go +++ b/backend/services/ender/builder/cpuIssueFinder.go @@ -3,20 +3,19 @@ package builder import ( "encoding/json" - "openreplay/backend/pkg/messages/performance" . "openreplay/backend/pkg/messages" + "openreplay/backend/pkg/messages/performance" ) -const CPU_THRESHOLD = 70 // % out of 100 +const CPU_THRESHOLD = 70 // % out of 100 const CPU_MIN_DURATION_TRIGGER = 6 * 1000 - type cpuIssueFinder struct { startTimestamp uint64 startMessageID uint64 - lastTimestamp uint64 - maxRate uint64 - contextString string + lastTimestamp uint64 + maxRate uint64 + contextString string } func (f *cpuIssueFinder) Build() *IssueEvent { @@ -35,16 +34,16 @@ func (f *cpuIssueFinder) Build() *IssueEvent { return nil } - payload, _ := json.Marshal(struct{ + payload, _ := json.Marshal(struct { Duration uint64 - Rate uint64 - }{duration,maxRate}) + Rate uint64 + }{duration, maxRate}) return &IssueEvent{ - Type: "cpu", - Timestamp: timestamp, - MessageID: messageID, + Type: "cpu", + Timestamp: timestamp, + MessageID: messageID, ContextString: f.contextString, - Payload: string(payload), + Payload: string(payload), } } @@ -52,8 +51,6 @@ func (f *cpuIssueFinder) HandleSetPageLocation(msg *SetPageLocation) { f.contextString = msg.URL } - - func (f *cpuIssueFinder) HandlePerformanceTrack(msg *PerformanceTrack, messageID uint64, timestamp uint64) *IssueEvent { dt := performance.TimeDiff(timestamp, f.lastTimestamp) if dt == 0 { @@ -82,5 +79,3 @@ func (f *cpuIssueFinder) HandlePerformanceTrack(msg *PerformanceTrack, messageID return nil } - - diff --git a/backend/services/ender/builder/deadClickDetector.go b/backend/services/ender/builder/deadClickDetector.go index 725b025cb..de977b7bd 100644 --- a/backend/services/ender/builder/deadClickDetector.go +++ b/backend/services/ender/builder/deadClickDetector.go @@ -4,25 +4,23 @@ import ( . "openreplay/backend/pkg/messages" ) - const CLICK_RELATION_TIME = 1400 type deadClickDetector struct { - lastMouseClick *MouseClick - lastTimestamp uint64 - lastMessageID uint64 - inputIDSet map[uint64]bool + lastMouseClick *MouseClick + lastTimestamp uint64 + lastMessageID uint64 + inputIDSet map[uint64]bool } - func (d *deadClickDetector) HandleReaction(timestamp uint64) *IssueEvent { var i *IssueEvent - if d.lastMouseClick != nil && d.lastTimestamp + CLICK_RELATION_TIME < timestamp { + if d.lastMouseClick != nil && d.lastTimestamp+CLICK_RELATION_TIME < timestamp { i = &IssueEvent{ - Type: "dead_click", + Type: "dead_click", ContextString: d.lastMouseClick.Label, - Timestamp: d.lastTimestamp, - MessageID: d.lastMessageID, + Timestamp: d.lastTimestamp, + MessageID: d.lastMessageID, } } d.inputIDSet = nil @@ -53,8 +51,8 @@ func (d *deadClickDetector) HandleMessage(msg Message, messageID uint64, timesta d.lastMouseClick = m d.lastTimestamp = timestamp d.lastMessageID = messageID - case *SetNodeAttribute, - *RemoveNodeAttribute, + case *SetNodeAttribute, + *RemoveNodeAttribute, *CreateElementNode, *CreateTextNode, *MoveNode, @@ -66,5 +64,3 @@ func (d *deadClickDetector) HandleMessage(msg Message, messageID uint64, timesta } return i } - - diff --git a/backend/services/ender/builder/domDropDetector.go b/backend/services/ender/builder/domDropDetector.go index 3366a0163..3643038c1 100644 --- a/backend/services/ender/builder/domDropDetector.go +++ b/backend/services/ender/builder/domDropDetector.go @@ -4,14 +4,13 @@ import ( . "openreplay/backend/pkg/messages" ) - type domDropDetector struct { - removedCount int + removedCount int lastDropTimestamp uint64 } -const DROP_WINDOW = 200 //ms -const CRITICAL_COUNT = 1 // Our login page contains 20. But on crush it removes only roots (1-3 nodes). +const DROP_WINDOW = 200 //ms +const CRITICAL_COUNT = 1 // Our login page contains 20. But on crush it removes only roots (1-3 nodes). func (dd *domDropDetector) HandleNodeCreation() { dd.removedCount = 0 @@ -19,7 +18,7 @@ func (dd *domDropDetector) HandleNodeCreation() { } func (dd *domDropDetector) HandleNodeRemoval(ts uint64) { - if dd.lastDropTimestamp + DROP_WINDOW > ts { + if dd.lastDropTimestamp+DROP_WINDOW > ts { dd.removedCount += 1 } else { dd.removedCount = 1 @@ -27,7 +26,6 @@ func (dd *domDropDetector) HandleNodeRemoval(ts uint64) { dd.lastDropTimestamp = ts } - func (dd *domDropDetector) Build() *DOMDrop { var domDrop *DOMDrop if dd.removedCount >= CRITICAL_COUNT { @@ -39,4 +37,3 @@ func (dd *domDropDetector) Build() *DOMDrop { dd.lastDropTimestamp = 0 return domDrop } - diff --git a/backend/services/ender/builder/inputEventBuilder.go b/backend/services/ender/builder/inputEventBuilder.go index 98c7ebaf6..ce1b710ca 100644 --- a/backend/services/ender/builder/inputEventBuilder.go +++ b/backend/services/ender/builder/inputEventBuilder.go @@ -7,9 +7,9 @@ import ( type inputLabels map[uint64]string type inputEventBuilder struct { - inputEvent *InputEvent - inputLabels inputLabels - inputID uint64 + inputEvent *InputEvent + inputLabels inputLabels + inputID uint64 } func NewInputEventBuilder() *inputEventBuilder { @@ -18,7 +18,6 @@ func NewInputEventBuilder() *inputEventBuilder { return ieBuilder } - func (b *inputEventBuilder) ClearLabels() { b.inputLabels = make(inputLabels) } @@ -57,11 +56,11 @@ func (b *inputEventBuilder) HasInstance() bool { return b.inputEvent != nil } -func (b * inputEventBuilder) GetTimestamp() uint64 { +func (b *inputEventBuilder) GetTimestamp() uint64 { if b.inputEvent == nil { return 0 } - return b.inputEvent.Timestamp; + return b.inputEvent.Timestamp } func (b *inputEventBuilder) Build() *InputEvent { diff --git a/backend/services/ender/builder/memoryIssueFinder.go b/backend/services/ender/builder/memoryIssueFinder.go index a2702e505..0d6d71420 100644 --- a/backend/services/ender/builder/memoryIssueFinder.go +++ b/backend/services/ender/builder/memoryIssueFinder.go @@ -1,21 +1,21 @@ package builder import ( - "math" "encoding/json" - + "math" + . "openreplay/backend/pkg/messages" ) const MIN_COUNT = 3 -const MEM_RATE_THRESHOLD = 300 // % to average +const MEM_RATE_THRESHOLD = 300 // % to average type memoryIssueFinder struct { startMessageID uint64 startTimestamp uint64 rate int count float64 - sum float64 + sum float64 contextString string } @@ -23,13 +23,13 @@ func (f *memoryIssueFinder) Build() *IssueEvent { if f.startTimestamp == 0 { return nil } - payload, _ := json.Marshal(struct{Rate int }{f.rate - 100,}) + payload, _ := json.Marshal(struct{ Rate int }{f.rate - 100}) i := &IssueEvent{ - Type: "memory", - Timestamp: f.startTimestamp, - MessageID: f.startMessageID, + Type: "memory", + Timestamp: f.startTimestamp, + MessageID: f.startMessageID, ContextString: f.contextString, - Payload: string(payload), + Payload: string(payload), } f.startTimestamp = 0 f.startMessageID = 0 @@ -48,8 +48,8 @@ func (f *memoryIssueFinder) HandlePerformanceTrack(msg *PerformanceTrack, messag return nil } - average := f.sum/f.count - rate := int(math.Round(float64(msg.UsedJSHeapSize)/average * 100)) + average := f.sum / f.count + rate := int(math.Round(float64(msg.UsedJSHeapSize) / average * 100)) f.sum += float64(msg.UsedJSHeapSize) f.count++ @@ -68,5 +68,3 @@ func (f *memoryIssueFinder) HandlePerformanceTrack(msg *PerformanceTrack, messag return nil } - - diff --git a/backend/services/ender/builder/pageEventBuilder.go b/backend/services/ender/builder/pageEventBuilder.go index db602a996..2b0665894 100644 --- a/backend/services/ender/builder/pageEventBuilder.go +++ b/backend/services/ender/builder/pageEventBuilder.go @@ -5,8 +5,8 @@ import ( ) type pageEventBuilder struct { - pageEvent *PageEvent - firstTimingHandled bool + pageEvent *PageEvent + firstTimingHandled bool } func (b *pageEventBuilder) buildIfTimingsComplete() *PageEvent { @@ -28,7 +28,7 @@ func (b *pageEventBuilder) HandleSetPageLocation(msg *SetPageLocation, messageID } } -func (b * pageEventBuilder) HandlePageLoadTiming(msg *PageLoadTiming) *PageEvent { +func (b *pageEventBuilder) HandlePageLoadTiming(msg *PageLoadTiming) *PageEvent { if !b.HasInstance() { return nil } @@ -62,7 +62,7 @@ func (b * pageEventBuilder) HandlePageLoadTiming(msg *PageLoadTiming) *PageEvent return b.buildIfTimingsComplete() } -func (b * pageEventBuilder) HandlePageRenderTiming(msg *PageRenderTiming) *PageEvent { +func (b *pageEventBuilder) HandlePageRenderTiming(msg *PageRenderTiming) *PageEvent { if !b.HasInstance() { return nil } @@ -76,16 +76,16 @@ func (b *pageEventBuilder) HasInstance() bool { return b.pageEvent != nil } -func (b * pageEventBuilder) GetTimestamp() uint64 { +func (b *pageEventBuilder) GetTimestamp() uint64 { if b.pageEvent == nil { return 0 } - return b.pageEvent.Timestamp; + return b.pageEvent.Timestamp } -func (b * pageEventBuilder) Build() *PageEvent { +func (b *pageEventBuilder) Build() *PageEvent { pageEvent := b.pageEvent b.pageEvent = nil b.firstTimingHandled = false return pageEvent -} \ No newline at end of file +} diff --git a/backend/services/ender/builder/performanceTrackAggrBuilder.go b/backend/services/ender/builder/performanceTrackAggrBuilder.go index b24090ff9..70b751f55 100644 --- a/backend/services/ender/builder/performanceTrackAggrBuilder.go +++ b/backend/services/ender/builder/performanceTrackAggrBuilder.go @@ -3,22 +3,20 @@ package builder import ( "math" - "openreplay/backend/pkg/messages/performance" . "openreplay/backend/pkg/messages" + "openreplay/backend/pkg/messages/performance" ) - type performanceTrackAggrBuilder struct { - performanceTrackAggr *PerformanceTrackAggr - lastTimestamp uint64 - count float64 - sumFrameRate float64 - sumTickRate float64 - sumTotalJSHeapSize float64 - sumUsedJSHeapSize float64 + performanceTrackAggr *PerformanceTrackAggr + lastTimestamp uint64 + count float64 + sumFrameRate float64 + sumTickRate float64 + sumTotalJSHeapSize float64 + sumUsedJSHeapSize float64 } - func (b *performanceTrackAggrBuilder) start(timestamp uint64) { b.performanceTrackAggr = &PerformanceTrackAggr{ TimestampStart: timestamp, @@ -39,7 +37,7 @@ func (b *performanceTrackAggrBuilder) HandlePerformanceTrack(msg *PerformanceTra } frameRate := performance.FrameRate(msg.Frames, dt) - tickRate := performance.TickRate(msg.Ticks, dt) + tickRate := performance.TickRate(msg.Ticks, dt) fps := uint64(math.Round(frameRate)) cpu := performance.CPURateFromTickRate(tickRate) @@ -84,7 +82,7 @@ func (b *performanceTrackAggrBuilder) GetStartTimestamp() uint64 { if b.performanceTrackAggr == nil { return 0 } - return b.performanceTrackAggr.TimestampStart; + return b.performanceTrackAggr.TimestampStart } func (b *performanceTrackAggrBuilder) Build() *PerformanceTrackAggr { @@ -106,4 +104,3 @@ func (b *performanceTrackAggrBuilder) Build() *PerformanceTrackAggr { b.lastTimestamp = 0 return performanceTrackAggr } - diff --git a/backend/services/http/assets.go b/backend/services/http/assets.go index cc055087a..b6ac61186 100644 --- a/backend/services/http/assets.go +++ b/backend/services/http/assets.go @@ -1,8 +1,8 @@ package main import ( - "openreplay/backend/pkg/url/assets" "openreplay/backend/pkg/messages" + "openreplay/backend/pkg/url/assets" ) func sendAssetForCache(sessionID uint64, baseURL string, relativeURL string) { @@ -33,4 +33,4 @@ func handleCSS(sessionID uint64, baseURL string, css string) string { return rewriter.RewriteCSS(sessionID, baseURL, css) } return assets.ResolveCSS(baseURL, css) -} \ No newline at end of file +} diff --git a/backend/services/http/handlers-depricated.go b/backend/services/http/handlers-depricated.go index 85f0393b7..06ab7d0f9 100644 --- a/backend/services/http/handlers-depricated.go +++ b/backend/services/http/handlers-depricated.go @@ -1 +1 @@ -package main \ No newline at end of file +package main diff --git a/backend/services/http/ios-device.go b/backend/services/http/ios-device.go index bec1f3b36..6a09e5e07 100644 --- a/backend/services/http/ios-device.go +++ b/backend/services/http/ios-device.go @@ -1,138 +1,138 @@ package main import ( - "strings" + "strings" ) func MapIOSDevice(identifier string) string { - switch identifier { - case "iPod5,1": - return "iPod touch (5th generation)" - case "iPod7,1": - return "iPod touch (6th generation)" - case "iPod9,1": - return "iPod touch (7th generation)" - case "iPhone3,1", "iPhone3,2", "iPhone3,3": - return "iPhone 4" - case "iPhone4,1": - return "iPhone 4s" - case "iPhone5,1", "iPhone5,2": - return "iPhone 5" - case "iPhone5,3", "iPhone5,4": - return "iPhone 5c" - case "iPhone6,1", "iPhone6,2": - return "iPhone 5s" - case "iPhone7,2": - return "iPhone 6" - case "iPhone7,1": - return "iPhone 6 Plus" - case "iPhone8,1": - return "iPhone 6s" - case "iPhone8,2": - return "iPhone 6s Plus" - case "iPhone8,4": - return "iPhone SE" - case "iPhone9,1", "iPhone9,3": - return "iPhone 7" - case "iPhone9,2", "iPhone9,4": - return "iPhone 7 Plus" - case "iPhone10,1", "iPhone10,4": - return "iPhone 8" - case "iPhone10,2", "iPhone10,5": - return "iPhone 8 Plus" - case "iPhone10,3", "iPhone10,6": - return "iPhone X" - case "iPhone11,2": - return "iPhone XS" - case "iPhone11,4", "iPhone11,6": - return "iPhone XS Max" - case "iPhone11,8": - return "iPhone XR" - case "iPhone12,1": - return "iPhone 11" - case "iPhone12,3": - return "iPhone 11 Pro" - case "iPhone12,5": - return "iPhone 11 Pro Max" - case "iPhone12,8": - return "iPhone SE (2nd generation)" - case "iPhone13,1": - return "iPhone 12 mini" - case "iPhone13,2": - return "iPhone 12" - case "iPhone13,3": - return "iPhone 12 Pro" - case "iPhone13,4": - return "iPhone 12 Pro Max" - case "iPad2,1", "iPad2,2", "iPad2,3", "iPad2,4": - return "iPad 2" - case "iPad3,1", "iPad3,2", "iPad3,3": - return "iPad (3rd generation)" - case "iPad3,4", "iPad3,5", "iPad3,6": - return "iPad (4th generation)" - case "iPad6,11", "iPad6,12": - return "iPad (5th generation)" - case "iPad7,5", "iPad7,6": - return "iPad (6th generation)" - case "iPad7,11", "iPad7,12": - return "iPad (7th generation)" - case "iPad11,6", "iPad11,7": - return "iPad (8th generation)" - case "iPad4,1", "iPad4,2", "iPad4,3": - return "iPad Air" - case "iPad5,3", "iPad5,4": - return "iPad Air 2" - case "iPad11,3", "iPad11,4": - return "iPad Air (3rd generation)" - case "iPad13,1", "iPad13,2": - return "iPad Air (4th generation)" - case "iPad2,5", "iPad2,6", "iPad2,7": - return "iPad mini" - case "iPad4,4", "iPad4,5", "iPad4,6": - return "iPad mini 2" - case "iPad4,7", "iPad4,8", "iPad4,9": - return "iPad mini 3" - case "iPad5,1", "iPad5,2": - return "iPad mini 4" - case "iPad11,1", "iPad11,2": - return "iPad mini (5th generation)" - case "iPad6,3", "iPad6,4": - return "iPad Pro (9.7-inch)" - case "iPad7,3", "iPad7,4": - return "iPad Pro (10.5-inch)" - case "iPad8,1", "iPad8,2", "iPad8,3", "iPad8,4": - return "iPad Pro (11-inch) (1st generation)" - case "iPad8,9", "iPad8,10": - return "iPad Pro (11-inch) (2nd generation)" - case "iPad6,7", "iPad6,8": - return "iPad Pro (12.9-inch) (1st generation)" - case "iPad7,1", "iPad7,2": - return "iPad Pro (12.9-inch) (2nd generation)" - case "iPad8,5", "iPad8,6", "iPad8,7", "iPad8,8": - return "iPad Pro (12.9-inch) (3rd generation)" - case "iPad8,11", "iPad8,12": - return "iPad Pro (12.9-inch) (4th generation)" - case "AppleTV5,3": - return "Apple TV" - case "AppleTV6,2": - return "Apple TV 4K" - case "AudioAccessory1,1": - return "HomePod" - case "AudioAccessory5,1": - return "HomePod mini" - case "i386", "x86_64": - return "Simulator" - default: - return identifier - } + switch identifier { + case "iPod5,1": + return "iPod touch (5th generation)" + case "iPod7,1": + return "iPod touch (6th generation)" + case "iPod9,1": + return "iPod touch (7th generation)" + case "iPhone3,1", "iPhone3,2", "iPhone3,3": + return "iPhone 4" + case "iPhone4,1": + return "iPhone 4s" + case "iPhone5,1", "iPhone5,2": + return "iPhone 5" + case "iPhone5,3", "iPhone5,4": + return "iPhone 5c" + case "iPhone6,1", "iPhone6,2": + return "iPhone 5s" + case "iPhone7,2": + return "iPhone 6" + case "iPhone7,1": + return "iPhone 6 Plus" + case "iPhone8,1": + return "iPhone 6s" + case "iPhone8,2": + return "iPhone 6s Plus" + case "iPhone8,4": + return "iPhone SE" + case "iPhone9,1", "iPhone9,3": + return "iPhone 7" + case "iPhone9,2", "iPhone9,4": + return "iPhone 7 Plus" + case "iPhone10,1", "iPhone10,4": + return "iPhone 8" + case "iPhone10,2", "iPhone10,5": + return "iPhone 8 Plus" + case "iPhone10,3", "iPhone10,6": + return "iPhone X" + case "iPhone11,2": + return "iPhone XS" + case "iPhone11,4", "iPhone11,6": + return "iPhone XS Max" + case "iPhone11,8": + return "iPhone XR" + case "iPhone12,1": + return "iPhone 11" + case "iPhone12,3": + return "iPhone 11 Pro" + case "iPhone12,5": + return "iPhone 11 Pro Max" + case "iPhone12,8": + return "iPhone SE (2nd generation)" + case "iPhone13,1": + return "iPhone 12 mini" + case "iPhone13,2": + return "iPhone 12" + case "iPhone13,3": + return "iPhone 12 Pro" + case "iPhone13,4": + return "iPhone 12 Pro Max" + case "iPad2,1", "iPad2,2", "iPad2,3", "iPad2,4": + return "iPad 2" + case "iPad3,1", "iPad3,2", "iPad3,3": + return "iPad (3rd generation)" + case "iPad3,4", "iPad3,5", "iPad3,6": + return "iPad (4th generation)" + case "iPad6,11", "iPad6,12": + return "iPad (5th generation)" + case "iPad7,5", "iPad7,6": + return "iPad (6th generation)" + case "iPad7,11", "iPad7,12": + return "iPad (7th generation)" + case "iPad11,6", "iPad11,7": + return "iPad (8th generation)" + case "iPad4,1", "iPad4,2", "iPad4,3": + return "iPad Air" + case "iPad5,3", "iPad5,4": + return "iPad Air 2" + case "iPad11,3", "iPad11,4": + return "iPad Air (3rd generation)" + case "iPad13,1", "iPad13,2": + return "iPad Air (4th generation)" + case "iPad2,5", "iPad2,6", "iPad2,7": + return "iPad mini" + case "iPad4,4", "iPad4,5", "iPad4,6": + return "iPad mini 2" + case "iPad4,7", "iPad4,8", "iPad4,9": + return "iPad mini 3" + case "iPad5,1", "iPad5,2": + return "iPad mini 4" + case "iPad11,1", "iPad11,2": + return "iPad mini (5th generation)" + case "iPad6,3", "iPad6,4": + return "iPad Pro (9.7-inch)" + case "iPad7,3", "iPad7,4": + return "iPad Pro (10.5-inch)" + case "iPad8,1", "iPad8,2", "iPad8,3", "iPad8,4": + return "iPad Pro (11-inch) (1st generation)" + case "iPad8,9", "iPad8,10": + return "iPad Pro (11-inch) (2nd generation)" + case "iPad6,7", "iPad6,8": + return "iPad Pro (12.9-inch) (1st generation)" + case "iPad7,1", "iPad7,2": + return "iPad Pro (12.9-inch) (2nd generation)" + case "iPad8,5", "iPad8,6", "iPad8,7", "iPad8,8": + return "iPad Pro (12.9-inch) (3rd generation)" + case "iPad8,11", "iPad8,12": + return "iPad Pro (12.9-inch) (4th generation)" + case "AppleTV5,3": + return "Apple TV" + case "AppleTV6,2": + return "Apple TV 4K" + case "AudioAccessory1,1": + return "HomePod" + case "AudioAccessory5,1": + return "HomePod mini" + case "i386", "x86_64": + return "Simulator" + default: + return identifier + } } func GetIOSDeviceType(identifier string) string { - if strings.Contains(identifier, "iPhone") { - return "mobile" //"phone" - } - if strings.Contains(identifier, "iPad") { - return "tablet" - } - return "other" + if strings.Contains(identifier, "iPhone") { + return "mobile" //"phone" + } + if strings.Contains(identifier, "iPad") { + return "tablet" + } + return "other" } diff --git a/backend/services/http/uuid.go b/backend/services/http/uuid.go index 13f57bff0..87704d740 100644 --- a/backend/services/http/uuid.go +++ b/backend/services/http/uuid.go @@ -12,4 +12,4 @@ func getUUID(u *string) string { } } return uuid.New().String() -} \ No newline at end of file +} diff --git a/backend/services/integrations/clientManager/manager.go b/backend/services/integrations/clientManager/manager.go index 39cd8dd90..a671a6266 100644 --- a/backend/services/integrations/clientManager/manager.go +++ b/backend/services/integrations/clientManager/manager.go @@ -7,38 +7,36 @@ import ( "openreplay/backend/services/integrations/integration" ) - type manager struct { - clientMap integration.ClientMap - Events chan *integration.SessionErrorEvent - Errors chan error - RequestDataUpdates chan postgres.Integration // not pointer because it could change in other thread + clientMap integration.ClientMap + Events chan *integration.SessionErrorEvent + Errors chan error + RequestDataUpdates chan postgres.Integration // not pointer because it could change in other thread } - func NewManager() *manager { - return &manager { - clientMap: make(integration.ClientMap), + return &manager{ + clientMap: make(integration.ClientMap), RequestDataUpdates: make(chan postgres.Integration, 100), - Events: make(chan *integration.SessionErrorEvent, 100), - Errors: make(chan error, 100), + Events: make(chan *integration.SessionErrorEvent, 100), + Errors: make(chan error, 100), } } -func (m* manager) Update(i *postgres.Integration) error { +func (m *manager) Update(i *postgres.Integration) error { key := strconv.Itoa(int(i.ProjectID)) + i.Provider if i.Options == nil { delete(m.clientMap, key) return nil } - c, exists := m.clientMap[ key ] + c, exists := m.clientMap[key] if !exists { c, err := integration.NewClient(i, m.RequestDataUpdates, m.Events, m.Errors) if err != nil { return err } - m.clientMap[ key ] = c + m.clientMap[key] = c return nil } return c.Update(i) diff --git a/backend/services/integrations/integration/cloudwatch.go b/backend/services/integrations/integration/cloudwatch.go index fa2210138..9974f485b 100644 --- a/backend/services/integrations/integration/cloudwatch.go +++ b/backend/services/integrations/integration/cloudwatch.go @@ -2,43 +2,40 @@ package integration import ( "github.com/aws/aws-sdk-go/aws" - "github.com/aws/aws-sdk-go/service/cloudwatchlogs" "github.com/aws/aws-sdk-go/aws/credentials" "github.com/aws/aws-sdk-go/aws/session" + "github.com/aws/aws-sdk-go/service/cloudwatchlogs" - "strings" - "regexp" "openreplay/backend/pkg/messages" + "regexp" + "strings" ) - var reIsException = regexp.MustCompile(`(?i)exception|error`) type cloudwatch struct { - AwsAccessKeyId string // `json:"aws_access_key_id"` - AwsSecretAccessKey string // `json:"aws_secret_access_key"` - LogGroupName string // `json:"log_group_name"` - Region string // `json:"region"` + AwsAccessKeyId string // `json:"aws_access_key_id"` + AwsSecretAccessKey string // `json:"aws_secret_access_key"` + LogGroupName string // `json:"log_group_name"` + Region string // `json:"region"` } - func (cw *cloudwatch) Request(c *client) error { - startTs := int64(c.getLastMessageTimestamp() + 1) // From next millisecond + startTs := int64(c.getLastMessageTimestamp() + 1) // From next millisecond //endTs := utils.CurrentTimestamp() sess, err := session.NewSession(aws.NewConfig(). - WithRegion(cw.Region). - WithCredentials( - credentials.NewStaticCredentials(cw.AwsAccessKeyId, cw.AwsSecretAccessKey, ""), - ), + WithRegion(cw.Region). + WithCredentials( + credentials.NewStaticCredentials(cw.AwsAccessKeyId, cw.AwsSecretAccessKey, ""), + ), ) if err != nil { return err } svc := cloudwatchlogs.New(sess) - filterOptions := new(cloudwatchlogs.FilterLogEventsInput). - SetStartTime(startTs). // Inclusively both startTime and endTime + SetStartTime(startTs). // Inclusively both startTime and endTime // SetEndTime(endTs). // Default nil? // SetLimit(10000). // Default 10000 SetLogGroupName(cw.LogGroupName). @@ -56,7 +53,7 @@ func (cw *cloudwatch) Request(c *client) error { } if !reIsException.MatchString(*e.Message) { // too weak condition ? continue - } + } token, err := GetToken(*e.Message) if err != nil { c.errChan <- err @@ -72,18 +69,18 @@ func (cw *cloudwatch) Request(c *client) error { //SessionID: sessionID, Token: token, RawErrorEvent: &messages.RawErrorEvent{ - Source: "cloudwatch", - Timestamp: timestamp, // e.IngestionTime ?? - Name: name, - Payload: strings.ReplaceAll(e.String(), "\n", ""), + Source: "cloudwatch", + Timestamp: timestamp, // e.IngestionTime ?? + Name: name, + Payload: strings.ReplaceAll(e.String(), "\n", ""), }, } } if output.NextToken == nil { - break; + break } filterOptions.NextToken = output.NextToken } return nil -} \ No newline at end of file +} diff --git a/backend/services/integrations/integration/elasticsearch.go b/backend/services/integrations/integration/elasticsearch.go index dd6f5d5f9..6b8181073 100644 --- a/backend/services/integrations/integration/elasticsearch.go +++ b/backend/services/integrations/integration/elasticsearch.go @@ -53,14 +53,14 @@ func (es *elasticsearch) Request(c *client) error { "query": map[string]interface{}{ "bool": map[string]interface{}{ "filter": []map[string]interface{}{ - map[string]interface{}{ + { "match": map[string]interface{}{ "message": map[string]interface{}{ "query": "openReplaySessionToken=", // asayer_session_id= }, }, }, - map[string]interface{}{ + { "range": map[string]interface{}{ "utc_time": map[string]interface{}{ "gte": strconv.FormatUint(gteTs, 10), @@ -68,7 +68,7 @@ func (es *elasticsearch) Request(c *client) error { }, }, }, - map[string]interface{}{ + { "term": map[string]interface{}{ "tags": "error", }, diff --git a/backend/services/integrations/integration/rollbar.go b/backend/services/integrations/integration/rollbar.go index 369ee31f9..53a5c6d5b 100644 --- a/backend/services/integrations/integration/rollbar.go +++ b/backend/services/integrations/integration/rollbar.go @@ -1,15 +1,15 @@ package integration import ( - "net/http" "encoding/json" + "errors" "fmt" - "time" - "strings" - "strconv" "io" - "io/ioutil" - "errors" + "io/ioutil" + "net/http" + "strconv" + "strings" + "time" "openreplay/backend/pkg/messages" ) @@ -17,42 +17,42 @@ import ( // Old name: asayerSessionId // QUERY: what can be modified? -const RB_QUERY = - "SELECT item.id, item.title,body.message.openReplaySessionToken,item.level,"+ - " item.counter,item.environment,body.crash_report.raw,body.message.body,timestamp"+ - " FROM item_occurrence"+ - " WHERE body.message.openReplaySessionToken != null"+ - " AND timestamp>= %v"+ - " AND item.level>30"+ - " ORDER BY timestamp"+ +const RB_QUERY = "SELECT item.id, item.title,body.message.openReplaySessionToken,item.level," + + " item.counter,item.environment,body.crash_report.raw,body.message.body,timestamp" + + " FROM item_occurrence" + + " WHERE body.message.openReplaySessionToken != null" + + " AND timestamp>= %v" + + " AND item.level>30" + + " ORDER BY timestamp" + " LIMIT 1000" + // ASC by default // \n\t symbols can spoil the request body, so it wouldn't work (OR probably it happend because of job hashing) /* - - `read` Access Token required - - timstamp in seconds + - `read` Access Token required + - timstamp in seconds */ type rollbar struct { - AccessToken string // `json:"access_token"` + AccessToken string // `json:"access_token"` } type rollbarJobResponce struct { - Err int + Err int Message string - Result struct { + Result struct { Id int } } type rollbarJobStatusResponce struct { - Err int + Err int Result struct { Status string Result struct { - Rows [][] json.Number - Columns[] string + Rows [][]json.Number + Columns []string } } } @@ -65,7 +65,7 @@ type rollbarEvent map[string]string */ func (rb *rollbar) Request(c *client) error { fromTs := c.getLastMessageTimestamp() + 1000 // From next second - c.setLastMessageTimestamp(fromTs) // anti-job-hashing + c.setLastMessageTimestamp(fromTs) // anti-job-hashing fromTsSec := fromTs / 1e3 query := fmt.Sprintf(RB_QUERY, fromTsSec) jsonBody := fmt.Sprintf(`{ @@ -111,7 +111,7 @@ func (rb *rollbar) Request(c *client) error { tick := time.Tick(5 * time.Second) for { - <- tick + <-tick resp, err = http.DefaultClient.Do(req) if err != nil { return err // continue + timeout/maxAttempts @@ -131,14 +131,14 @@ func (rb *rollbar) Request(c *client) error { e := make(rollbarEvent) for i, col := range jobStatus.Result.Result.Columns { //if len(row) <= i { error } - e[ col ] = row[ i ].String() // here I make them all string. That's not good + e[col] = row[i].String() // here I make them all string. That's not good } // sessionID, err := strconv.ParseUint(e[ "body.message.asayerSessionId" ], 10, 64) // if err != nil { // c.errChan <- err // continue // } - if e[ "body.message.openReplaySessionToken" ] == "" { + if e["body.message.openReplaySessionToken"] == "" { c.errChan <- errors.New("Token is empty!") continue } @@ -147,7 +147,7 @@ func (rb *rollbar) Request(c *client) error { c.errChan <- err continue } - timestampSec, err := strconv.ParseUint(e[ "timestamp" ], 10, 64) + timestampSec, err := strconv.ParseUint(e["timestamp"], 10, 64) if err != nil { c.errChan <- err continue @@ -155,22 +155,22 @@ func (rb *rollbar) Request(c *client) error { timestamp := timestampSec * 1000 c.setLastMessageTimestamp(timestamp) c.evChan <- &SessionErrorEvent{ - Token: e[ "body.message.openReplaySessionToken" ], + Token: e["body.message.openReplaySessionToken"], RawErrorEvent: &messages.RawErrorEvent{ - Source: "rollbar", + Source: "rollbar", Timestamp: timestamp, - Name: e[ "item.title" ], - Payload: string(payload), + Name: e["item.title"], + Payload: string(payload), }, } } break } - if jobStatus.Result.Status != "new" && + if jobStatus.Result.Status != "new" && jobStatus.Result.Status != "running" { // error break } } return nil -} \ No newline at end of file +} diff --git a/backend/services/integrations/integration/utils.go b/backend/services/integrations/integration/utils.go index 396a177bd..36a473c02 100644 --- a/backend/services/integrations/integration/utils.go +++ b/backend/services/integrations/integration/utils.go @@ -1,34 +1,37 @@ package integration import ( + "fmt" "regexp" "strconv" "strings" - "fmt" ) var reSessionID = regexp.MustCompile(`(?i)asayer_session_id=([0-9]+)`) -func GetAsayerSessionId(s string) (uint64, error) { + +func GetAsayerSessionId(s string) (uint64, error) { matches := reSessionID.FindStringSubmatch(s) if len(matches) < 2 { return 0, fmt.Errorf("'asayer_session_id' not found in '%v' ", s) } - return strconv.ParseUint(matches[ 1 ], 10, 64) + return strconv.ParseUint(matches[1], 10, 64) } func GetLinkFromAngularBrackets(s string) string { beg := strings.Index(s, "<") + 1 end := strings.Index(s, ">") - if end < 0 { return "" } + if end < 0 { + return "" + } return strings.TrimSpace(s[beg:end]) } - var reToken = regexp.MustCompile(`(?i)openReplaySessionToken=([0-9a-zA-Z\.]+)`) -func GetToken(s string) (string, error) { + +func GetToken(s string) (string, error) { matches := reToken.FindStringSubmatch(s) if len(matches) < 2 { return "", fmt.Errorf("'openReplaySessionToken' not found in '%v' ", s) } - return matches[ 1 ], nil -} \ No newline at end of file + return matches[1], nil +} diff --git a/backend/services/storage/gzip.go b/backend/services/storage/gzip.go index d574ec4ae..f3e96394a 100644 --- a/backend/services/storage/gzip.go +++ b/backend/services/storage/gzip.go @@ -1,19 +1,18 @@ package main import ( - "io" gzip "github.com/klauspost/pgzip" + "io" ) - func gzipFile(file io.ReadSeeker) io.Reader { reader, writer := io.Pipe() - go func() { - gw, _ := gzip.NewWriterLevel(writer, gzip.BestSpeed) - io.Copy(gw, file) + go func() { + gw, _ := gzip.NewWriterLevel(writer, gzip.BestSpeed) + io.Copy(gw, file) - gw.Close() - writer.Close() - }() - return reader -} \ No newline at end of file + gw.Close() + writer.Close() + }() + return reader +} From 1832567bebccba43c3b90c51c2536692e87d952e Mon Sep 17 00:00:00 2001 From: Taha Yassine Kraiem Date: Tue, 26 Apr 2022 12:44:07 +0200 Subject: [PATCH 13/91] feat(assist): fixed geoip-unknown ip --- utilities/servers/websocket.js | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/utilities/servers/websocket.js b/utilities/servers/websocket.js index 2d5b6fc4e..d2399477e 100644 --- a/utilities/servers/websocket.js +++ b/utilities/servers/websocket.js @@ -220,8 +220,13 @@ function extractSessionInfo(socket) { socket.handshake.query.sessionInfo.userCountry = null; if (geoip() !== null) { debug && console.log(`looking for location of ${socket.handshake.headers['x-forwarded-for'] || socket.handshake.address}`); - let country = geoip().country(socket.handshake.headers['x-forwarded-for'] || socket.handshake.address); - socket.handshake.query.sessionInfo.userCountry = country.country.isoCode; + try { + let country = geoip().country(socket.handshake.headers['x-forwarded-for'] || socket.handshake.address); + socket.handshake.query.sessionInfo.userCountry = country.country.isoCode; + } catch (e) { + debug && console.log("geoip-country failed"); + debug && console.log(e); + } } } } From f57bf7205c3c60e36ded15094c2060e6df9287b6 Mon Sep 17 00:00:00 2001 From: Taha Yassine Kraiem Date: Tue, 26 Apr 2022 12:47:18 +0200 Subject: [PATCH 14/91] feat(assist): EE fixed geoip-unknown ip --- ee/utilities/servers/websocket-cluster.js | 9 +++++++-- ee/utilities/servers/websocket.js | 9 +++++++-- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/ee/utilities/servers/websocket-cluster.js b/ee/utilities/servers/websocket-cluster.js index 904aaea17..0b8a56699 100644 --- a/ee/utilities/servers/websocket-cluster.js +++ b/ee/utilities/servers/websocket-cluster.js @@ -270,8 +270,13 @@ function extractSessionInfo(socket) { socket.handshake.query.sessionInfo.userCountry = null; if (geoip() !== null) { debug && console.log(`looking for location of ${socket.handshake.headers['x-forwarded-for'] || socket.handshake.address}`); - let country = geoip().country(socket.handshake.headers['x-forwarded-for'] || socket.handshake.address); - socket.handshake.query.sessionInfo.userCountry = country.country.isoCode; + try { + let country = geoip().country(socket.handshake.headers['x-forwarded-for'] || socket.handshake.address); + socket.handshake.query.sessionInfo.userCountry = country.country.isoCode; + } catch (e) { + debug && console.log("geoip-country failed"); + debug && console.log(e); + } } } } diff --git a/ee/utilities/servers/websocket.js b/ee/utilities/servers/websocket.js index a20f23078..51fa4cc41 100644 --- a/ee/utilities/servers/websocket.js +++ b/ee/utilities/servers/websocket.js @@ -249,8 +249,13 @@ function extractSessionInfo(socket) { socket.handshake.query.sessionInfo.userCountry = null; if (geoip() !== null) { debug && console.log(`looking for location of ${socket.handshake.headers['x-forwarded-for'] || socket.handshake.address}`); - let country = geoip().country(socket.handshake.headers['x-forwarded-for'] || socket.handshake.address); - socket.handshake.query.sessionInfo.userCountry = country.country.isoCode; + try { + let country = geoip().country(socket.handshake.headers['x-forwarded-for'] || socket.handshake.address); + socket.handshake.query.sessionInfo.userCountry = country.country.isoCode; + } catch (e) { + debug && console.log("geoip-country failed"); + debug && console.log(e); + } } } } From 55b504cc22bedb92accebc8032f1bab7895d99fc Mon Sep 17 00:00:00 2001 From: Taha Yassine Kraiem Date: Tue, 26 Apr 2022 16:30:48 +0200 Subject: [PATCH 15/91] feat(alerts): changed build script --- api/build_alerts.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api/build_alerts.sh b/api/build_alerts.sh index f333c8dc8..1b0b96f7e 100644 --- a/api/build_alerts.sh +++ b/api/build_alerts.sh @@ -27,7 +27,7 @@ function make_submodule() { mkdir -p ./alerts/chalicelib/ cp -R ./chalicelib/__init__.py ./alerts/chalicelib/ mkdir -p ./alerts/chalicelib/core/ - cp -R ./chalicelib/core/{__init__,alerts_processor,alerts_listener,sessions,events,issues,sessions_metas,metadata,projects,users,authorizers,tenants,roles,assist,events_ios,sessions_mobs,errors,dashboard,sourcemaps,sourcemaps_parser,resources,performance_event,alerts,notifications,slack,collaboration_slack,webhook}.py ./alerts/chalicelib/core/ + cp -R ./chalicelib/core/{__init__,alerts_processor,alerts_listener,sessions,events,issues,sessions_metas,metadata,projects,users,authorizers,tenants,roles,assist,events_ios,sessions_mobs,errors,metrics,sourcemaps,sourcemaps_parser,resources,performance_event,alerts,notifications,slack,collaboration_slack,webhook}.py ./alerts/chalicelib/core/ mkdir -p ./alerts/chalicelib/utils/ cp -R ./chalicelib/utils/{__init__,TimeUTC,pg_client,helper,event_filter_definition,dev,SAML2_helper,email_helper,email_handler,smtp,s3,args_transformer,ch_client,metrics_helper}.py ./alerts/chalicelib/utils/ # -- end of generated part From f3b6bda16387edf834b639f56aa47108ac6f0366 Mon Sep 17 00:00:00 2001 From: Rajesh Rajendran Date: Wed, 27 Apr 2022 12:54:40 +0000 Subject: [PATCH 16/91] Vagrant for local contribution (#434) * chore(vagrant): initial vagrantfile * chore(vagrant): adding instructions after installation * chore(vagrant): Adding vagrant user to docker group * chore(vagrant): use local docker daemon for k3s * chore(vagrant): fix comment * chore(vagrant): adding hostname in /etc/hosts * chore(vagrant): fix doc * chore(vagrant): limiting cpu * chore(frontend): initialize dev env * chore(docker): adding dockerignore * chore(dockerfile): using cache for fasten build * chore(dockerignore): update * chore(docker): build optimizations * chore(build): all components build option * chore(build): utilities build fix * chore(scrpt): remove debug message * chore(vagrant): provision using stable branch always Signed-off-by: rjshrjndrn --- api/.dockerignore | 6 ++ api/Dockerfile | 6 +- api/build.sh | 10 ++- api/build_alerts.sh | 3 +- backend/.dockerignore | 6 ++ backend/build.sh | 6 +- frontend/build.sh | 1 + frontend/dev-init.sh | 2 + peers/.dockerignore | 6 ++ peers/build.sh | 4 +- scripts/helmcharts/build_deploy.sh | 22 +++++ scripts/helmcharts/local_deploy.sh | 105 +++++++++++++++++++++++ scripts/vagrant/Vagrantfile | 129 +++++++++++++++++++++++++++++ utilities/.dockerignore | 6 ++ utilities/build.sh | 4 +- 15 files changed, 302 insertions(+), 14 deletions(-) create mode 100644 api/.dockerignore create mode 100644 backend/.dockerignore create mode 100644 frontend/dev-init.sh create mode 100644 peers/.dockerignore create mode 100644 scripts/helmcharts/build_deploy.sh create mode 100644 scripts/helmcharts/local_deploy.sh create mode 100644 scripts/vagrant/Vagrantfile create mode 100644 utilities/.dockerignore diff --git a/api/.dockerignore b/api/.dockerignore new file mode 100644 index 000000000..b6aaccd33 --- /dev/null +++ b/api/.dockerignore @@ -0,0 +1,6 @@ +# ignore .git and .cache folders +.git +.cache +**/build.sh +**/build_*.sh +**/*deploy.sh diff --git a/api/Dockerfile b/api/Dockerfile index 0673ab2b5..f3b5e85f5 100644 --- a/api/Dockerfile +++ b/api/Dockerfile @@ -11,8 +11,8 @@ RUN apt update && apt install -y curl && \ curl -fsSL https://deb.nodesource.com/setup_12.x | bash - && \ apt install -y nodejs && \ apt remove --purge -y curl && \ - rm -rf /var/lib/apt/lists/* && \ - cd sourcemap-reader && \ + rm -rf /var/lib/apt/lists/* +RUN cd sourcemap-reader && \ npm install # Add Tini @@ -23,4 +23,4 @@ ENV ENTERPRISE_BUILD ${envarg} ADD https://github.com/krallin/tini/releases/download/${TINI_VERSION}/tini /tini RUN chmod +x /tini ENTRYPOINT ["/tini", "--"] -CMD ./entrypoint.sh \ No newline at end of file +CMD ./entrypoint.sh diff --git a/api/build.sh b/api/build.sh index cec7525f5..8c735ff3c 100644 --- a/api/build.sh +++ b/api/build.sh @@ -12,9 +12,9 @@ envarg="default-foss" check_prereq() { which docker || { echo "Docker not installed, please install docker." - exit=1 + exit 1 } - [[ exit -eq 1 ]] && exit 1 + return } function build_api(){ @@ -32,9 +32,11 @@ function build_api(){ docker push ${DOCKER_REPO:-'local'}/chalice:${git_sha1} docker tag ${DOCKER_REPO:-'local'}/chalice:${git_sha1} ${DOCKER_REPO:-'local'}/chalice:${tag}latest docker push ${DOCKER_REPO:-'local'}/chalice:${tag}latest -} + } + echo "api docker build completed" } check_prereq build_api $1 -IMAGE_TAG=$IMAGE_TAG PUSH_IMAGE=$PUSH_IMAGE DOCKER_REPO=$DOCKER_REPO bash build_alerts.sh $1 \ No newline at end of file +echo buil_complete +IMAGE_TAG=$IMAGE_TAG PUSH_IMAGE=$PUSH_IMAGE DOCKER_REPO=$DOCKER_REPO bash build_alerts.sh $1 diff --git a/api/build_alerts.sh b/api/build_alerts.sh index 1b0b96f7e..2a7d88a1e 100644 --- a/api/build_alerts.sh +++ b/api/build_alerts.sh @@ -64,7 +64,8 @@ function build_api(){ docker tag ${DOCKER_REPO:-'local'}/alerts:${git_sha1} ${DOCKER_REPO:-'local'}/alerts:${tag}latest docker push ${DOCKER_REPO:-'local'}/alerts:${tag}latest } +echo "completed alerts build" } check_prereq -build_api $1 \ No newline at end of file +build_api $1 diff --git a/backend/.dockerignore b/backend/.dockerignore new file mode 100644 index 000000000..b6aaccd33 --- /dev/null +++ b/backend/.dockerignore @@ -0,0 +1,6 @@ +# ignore .git and .cache folders +.git +.cache +**/build.sh +**/build_*.sh +**/*deploy.sh diff --git a/backend/build.sh b/backend/build.sh index c760c1b9b..c3c40dd33 100644 --- a/backend/build.sh +++ b/backend/build.sh @@ -13,9 +13,9 @@ ee="false" check_prereq() { which docker || { echo "Docker not installed, please install docker." - exit=1 + exit 1 } - [[ exit -eq 1 ]] && exit 1 + return } function build_api(){ @@ -30,6 +30,7 @@ function build_api(){ [[ $PUSH_IMAGE -eq 1 ]] && { docker push ${DOCKER_REPO:-'local'}/$image:${git_sha1} } + echo "build completed for http" return } for image in $(ls services); @@ -40,6 +41,7 @@ function build_api(){ } echo "::set-output name=image::${DOCKER_REPO:-'local'}/$image:${git_sha1}" done + echo "backend build completed" } check_prereq diff --git a/frontend/build.sh b/frontend/build.sh index 7b656bc8f..652be2acf 100644 --- a/frontend/build.sh +++ b/frontend/build.sh @@ -20,6 +20,7 @@ check_prereq() { function build(){ # Run docker as the same user, else we'll run in to permission issues. docker run --rm -v /etc/passwd:/etc/passwd -u `id -u`:`id -g` -v $(pwd):/home/${USER} -w /home/${USER} --name node_build node:14-stretch-slim /bin/bash -c "npm install && npm run build:oss" + echo "frotend build completed" } check_prereq diff --git a/frontend/dev-init.sh b/frontend/dev-init.sh new file mode 100644 index 000000000..e32647ff0 --- /dev/null +++ b/frontend/dev-init.sh @@ -0,0 +1,2 @@ +#!/bin/bash +npm install --legacy-peer-deps diff --git a/peers/.dockerignore b/peers/.dockerignore new file mode 100644 index 000000000..b6aaccd33 --- /dev/null +++ b/peers/.dockerignore @@ -0,0 +1,6 @@ +# ignore .git and .cache folders +.git +.cache +**/build.sh +**/build_*.sh +**/*deploy.sh diff --git a/peers/build.sh b/peers/build.sh index c15921ea8..381189927 100644 --- a/peers/build.sh +++ b/peers/build.sh @@ -10,9 +10,8 @@ git_sha1=${IMAGE_TAG:-$(git rev-parse HEAD)} check_prereq() { which docker || { echo "Docker not installed, please install docker." - exit=1 + exit 1 } - [[ exit -eq 1 ]] && exit 1 } function build_api(){ @@ -27,6 +26,7 @@ function build_api(){ docker tag ${DOCKER_REPO:-'local'}/peers:${git_sha1} ${DOCKER_REPO:-'local'}/peers:latest docker push ${DOCKER_REPO:-'local'}/peers:latest } + echo "peer docker build complted" } check_prereq diff --git a/scripts/helmcharts/build_deploy.sh b/scripts/helmcharts/build_deploy.sh new file mode 100644 index 000000000..7a75fad8b --- /dev/null +++ b/scripts/helmcharts/build_deploy.sh @@ -0,0 +1,22 @@ +#!/bin/bash +set -e + +# This script will build and push docker image to registry + +# Usage: IMAGE_TAG=latest DOCKER_REPO=rg.fr-par.scw.cloud/foss bash build_deploy.sh + +echo $DOCKER_REPO +[[ -z DOCKER_REPO ]] && { + echo Set DOCKER_REPO="your docker registry" + exit 1 +} || { + docker login $DOCKER_REPO + cd ../../api + PUSH_IMAGE=1 bash build.sh $@ + cd ../backend + PUSH_IMAGE=1 bash build.sh $@ + cd ../utilities + PUSH_IMAGE=1 bash build.sh $@ + cd ../peers + PUSH_IMAGE=1 bash build.sh $@ +} diff --git a/scripts/helmcharts/local_deploy.sh b/scripts/helmcharts/local_deploy.sh new file mode 100644 index 000000000..c8c82ceb4 --- /dev/null +++ b/scripts/helmcharts/local_deploy.sh @@ -0,0 +1,105 @@ +#!/bin/bash +set -e + +# This script will build and push docker image to registry + +# Usage: IMAGE_TAG=latest DOCKER_REPO=rg.fr-par.scw.cloud/foss bash build_deploy.sh + +export DOCKER_REPO="rg.fr-par.scw.cloud/foss" +export IMAGE_TAG=`grep fromVersion vars.yaml | awk '{print $NF}'|xargs` + + +apps=( + api + assets + db + ender + http + integrations + sink + storage + assist + peers + all +) +help(){ + cat <> /etc/hosts && sudo sed -i "s/.*openreplay.local/${IP_ADDR} openreplay.local/g" /etc/hosts; grep openreplay.local /etc/hosts + + apt-get update + apt-get install -y git curl + curl -fsSL https://get.docker.com | sh - + usermod -aG docker vagrant + + git clone https://github.com/openreplay/openreplay infra + cd infra/scripts/helmcharts + + # changing container runtime for k3s to docker + sudo -u vagrant git checkout -- init.sh + sed -i 's/INSTALL_K3S_EXEC=\\(.*\\)\\\"/INSTALL_K3S_EXEC=\\1 --docker\\\"/g' init.sh + + DOMAIN_NAME=openreplay.local bash init.sh + cp -rf /root/.kube /home/vagrant/ + cp -rf /home/vagrant/infra/scripts/helmcharts/vars.yaml /home/vagrant/openreplay-dev/openreplay/scripts/helmcharts/vars.yaml + chown -R vagrant:vagrant /home/vagrant + + cat <> /etc/hosts && sudo sed -i "s/.*openreplay.local/${IP_ADDR} openreplay.local/g" /etc/hosts; grep openreplay.local /etc/hosts' + + ## Linux (Paste the following command in terminal) + + sudo -- sh -c 'grep -q openreplay.local /etc/hosts || echo $IP_ADDR openreplay.local >> /etc/hosts && sudo sed -i "s/.*openreplay.local/${IP_ADDR} openreplay.local/g" /etc/hosts; grep openreplay.local /etc/hosts' + + ## Windows + + Use the following instructions if you’re running Windows 10 or Windows 8: + + Press the Windows key. + Type Notepad in the search field. + In the search results, right-click Notepad and select Run as administrator. + From Notepad, open the following file: + c:\\Windows\\System32\\Drivers\\etc\\hosts + add the below line in the hosts file + $IP_ADDR openreplay.local + Select File > Save to save your changes. + + To Access Openreplay: + - Open your browser and go to "http://openreplay.local" + + EOF + SHELL +end diff --git a/utilities/.dockerignore b/utilities/.dockerignore new file mode 100644 index 000000000..b6aaccd33 --- /dev/null +++ b/utilities/.dockerignore @@ -0,0 +1,6 @@ +# ignore .git and .cache folders +.git +.cache +**/build.sh +**/build_*.sh +**/*deploy.sh diff --git a/utilities/build.sh b/utilities/build.sh index f7d003ed3..4a290768d 100644 --- a/utilities/build.sh +++ b/utilities/build.sh @@ -10,9 +10,8 @@ git_sha1=${IMAGE_TAG:-$(git rev-parse HEAD)} check_prereq() { which docker || { echo "Docker not installed, please install docker." - exit=1 + exit 1 } - [[ exit -eq 1 ]] && exit 1 } function build_api(){ @@ -26,6 +25,7 @@ function build_api(){ docker tag ${DOCKER_REPO:-'local'}/assist:${git_sha1} ${DOCKER_REPO:-'local'}/assist:latest docker push ${DOCKER_REPO:-'local'}/assist:latest } + echo "build completed for assist" } check_prereq From 94adb69f6b82764bec45751fc88bea700052cfed Mon Sep 17 00:00:00 2001 From: rjshrjndrn Date: Tue, 26 Apr 2022 17:05:02 +0200 Subject: [PATCH 17/91] fix(nginx): proper x-forward-for proxying Signed-off-by: rjshrjndrn --- scripts/helmcharts/vars.yaml | 1 - 1 file changed, 1 deletion(-) diff --git a/scripts/helmcharts/vars.yaml b/scripts/helmcharts/vars.yaml index 5cc50af13..297017254 100644 --- a/scripts/helmcharts/vars.yaml +++ b/scripts/helmcharts/vars.yaml @@ -55,7 +55,6 @@ ingress-nginx: &ingress-nginx default-ssl-certificate: "app/openreplay-ssl" config: enable-real-ip: true - forwarded-for-header: "proxy_protocol" # Ref: https://kubernetes.github.io/ingress-nginx/user-guide/nginx-configuration/configmap/#max-worker-connections max-worker-connections: 0 # SSL redirection From 51c75657ab9764a3f0b5ee572b020f95574b7e7b Mon Sep 17 00:00:00 2001 From: Taha Yassine Kraiem Date: Thu, 28 Apr 2022 14:07:28 +0200 Subject: [PATCH 18/91] feat(api): EE fixed No of pages count widget --- ee/api/chalicelib/core/metrics.py | 31 ++++++++++++++++++------------- 1 file changed, 18 insertions(+), 13 deletions(-) diff --git a/ee/api/chalicelib/core/metrics.py b/ee/api/chalicelib/core/metrics.py index 65889e28d..31b9c3985 100644 --- a/ee/api/chalicelib/core/metrics.py +++ b/ee/api/chalicelib/core/metrics.py @@ -2465,13 +2465,15 @@ def get_user_activity_avg_visited_pages(project_id, startTimestamp=TimeUTC.now(d def __get_user_activity_avg_visited_pages(ch, project_id, startTimestamp, endTimestamp, **args): - ch_sub_query = __get_basic_constraints(table_name="sessions", data=args) + ch_sub_query = __get_basic_constraints(table_name="pages", data=args) meta_condition = __get_meta_constraint(args) ch_sub_query += meta_condition - ch_sub_query.append("sessions.pages_count>0") - ch_query = f"""SELECT COALESCE(CEIL(avgOrNull(sessions.pages_count)),0) AS value - FROM sessions {"INNER JOIN sessions_metadata USING(session_id)" if len(meta_condition) > 0 else ""} - WHERE {" AND ".join(ch_sub_query)};""" + + ch_query = f"""SELECT COALESCE(CEIL(avgOrNull(count)),0) AS value + FROM (SELECT COUNT(session_id) AS count + FROM pages {"INNER JOIN sessions_metadata USING(session_id)" if len(meta_condition) > 0 else ""} + WHERE {" AND ".join(ch_sub_query)}) AS groupped_data + WHERE count>0;""" params = {"project_id": project_id, "startTimestamp": startTimestamp, "endTimestamp": endTimestamp, **__get_constraint_values(args)} @@ -2482,19 +2484,22 @@ def __get_user_activity_avg_visited_pages(ch, project_id, startTimestamp, endTim def __get_user_activity_avg_visited_pages_chart(ch, project_id, startTimestamp, endTimestamp, density=20, **args): step_size = __get_step_size(endTimestamp=endTimestamp, startTimestamp=startTimestamp, density=density) - ch_sub_query_chart = __get_basic_constraints(table_name="sessions", round_start=True, data=args) + ch_sub_query_chart = __get_basic_constraints(table_name="pages", round_start=True, data=args) meta_condition = __get_meta_constraint(args) ch_sub_query_chart += meta_condition params = {"step_size": step_size, "project_id": project_id, "startTimestamp": startTimestamp, "endTimestamp": endTimestamp} - ch_sub_query_chart.append("sessions.pages_count>0") - ch_query = f"""SELECT toUnixTimestamp(toStartOfInterval(sessions.datetime, INTERVAL %(step_size)s second ))*1000 AS timestamp, - COALESCE(avgOrNull(sessions.pages_count),0) AS value - FROM sessions {"INNER JOIN sessions_metadata USING(session_id)" if len(meta_condition) > 0 else ""} - WHERE {" AND ".join(ch_sub_query_chart)} - GROUP BY timestamp - ORDER BY timestamp;""" + ch_query = f"""SELECT timestamp, COALESCE(avgOrNull(count), 0) AS value + FROM (SELECT toUnixTimestamp(toStartOfInterval(pages.datetime, INTERVAL %(step_size)s second ))*1000 AS timestamp, + session_id, COUNT(pages.session_id) AS count + FROM pages {"INNER JOIN sessions_metadata USING(session_id)" if len(meta_condition) > 0 else ""} + WHERE {" AND ".join(ch_sub_query_chart)} + GROUP BY timestamp,session_id + ORDER BY timestamp) AS groupped_data + WHERE count>0 + GROUP BY timestamp + ORDER BY timestamp;""" rows = ch.execute(query=ch_query, params={**params, **__get_constraint_values(args)}) rows = __complete_missing_steps(rows=rows, start_time=startTimestamp, end_time=endTimestamp, From b8367d87f8aaef8a57dd0c067bdea755d69bc71c Mon Sep 17 00:00:00 2001 From: Taha Yassine Kraiem Date: Thu, 28 Apr 2022 14:59:05 +0200 Subject: [PATCH 19/91] feat(api): EE fixed No of pages count widget --- ee/api/chalicelib/core/metrics.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/ee/api/chalicelib/core/metrics.py b/ee/api/chalicelib/core/metrics.py index 31b9c3985..668ce4760 100644 --- a/ee/api/chalicelib/core/metrics.py +++ b/ee/api/chalicelib/core/metrics.py @@ -2472,7 +2472,8 @@ def __get_user_activity_avg_visited_pages(ch, project_id, startTimestamp, endTim ch_query = f"""SELECT COALESCE(CEIL(avgOrNull(count)),0) AS value FROM (SELECT COUNT(session_id) AS count FROM pages {"INNER JOIN sessions_metadata USING(session_id)" if len(meta_condition) > 0 else ""} - WHERE {" AND ".join(ch_sub_query)}) AS groupped_data + WHERE {" AND ".join(ch_sub_query)} + GROUP BY session_id) AS groupped_data WHERE count>0;""" params = {"project_id": project_id, "startTimestamp": startTimestamp, "endTimestamp": endTimestamp, **__get_constraint_values(args)} From d64cd12eb6425f204183de0e444a2d9edea52a5f Mon Sep 17 00:00:00 2001 From: ShiKhu Date: Thu, 28 Apr 2022 17:02:13 +0200 Subject: [PATCH 20/91] fix(backend):pprof launch addr: use port only --- backend/pkg/pprof/pprof.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backend/pkg/pprof/pprof.go b/backend/pkg/pprof/pprof.go index a05080178..8ea1c1b5f 100644 --- a/backend/pkg/pprof/pprof.go +++ b/backend/pkg/pprof/pprof.go @@ -8,6 +8,6 @@ import ( func StartProfilingServer() { go func() { - log.Println(http.ListenAndServe("localhost:6060", nil)) + log.Println(http.ListenAndServe(":6060", nil)) }() } From 60d0d42d69d148df9222816d661e86fa2d881860 Mon Sep 17 00:00:00 2001 From: ShiKhu Date: Thu, 28 Apr 2022 17:02:53 +0200 Subject: [PATCH 21/91] fix(backend): Dockerfile.bundle fix --- backend/Dockerfile.bundle | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/backend/Dockerfile.bundle b/backend/Dockerfile.bundle index efbcb2684..79ef57db5 100644 --- a/backend/Dockerfile.bundle +++ b/backend/Dockerfile.bundle @@ -1,4 +1,4 @@ -FROM golang:1.13-alpine3.10 AS prepare +FROM golang:1.18-alpine3.15 AS prepare RUN apk add --no-cache git openssh openssl-dev pkgconf gcc g++ make libc-dev bash @@ -13,7 +13,7 @@ FROM prepare AS build COPY pkg pkg COPY services services -RUN for name in alerts assets db ender http integrations sink storage;do CGO_ENABLED=1 GOOS=linux GOARCH=amd64 go build -o bin/$name -tags musl openreplay/backend/services/$name; done +RUN for name in assets db ender http integrations sink storage;do CGO_ENABLED=1 GOOS=linux GOARCH=amd64 go build -o bin/$name -tags musl openreplay/backend/services/$name; done FROM alpine @@ -26,8 +26,9 @@ ENV TZ=UTC \ MAXMINDDB_FILE=/root/geoip.mmdb \ UAPARSER_FILE=/root/regexes.yaml \ HTTP_PORT=80 \ - BEACON_SIZE_LIMIT=1000000 \ + BEACON_SIZE_LIMIT=7000000 \ KAFKA_USE_SSL=true \ + KAFKA_MAX_POLL_INTERVAL_MS=400000 \ REDIS_STREAMS_MAX_LEN=3000 \ TOPIC_RAW_WEB=raw \ TOPIC_RAW_IOS=raw-ios \ @@ -42,10 +43,10 @@ ENV TZ=UTC \ AWS_REGION_WEB=eu-central-1 \ AWS_REGION_IOS=eu-west-1 \ AWS_REGION_ASSETS=eu-central-1 \ - CACHE_ASSETS=false \ + CACHE_ASSETS=true \ ASSETS_SIZE_LIMIT=6291456 \ - FS_CLEAN_HRS=12 - + FS_CLEAN_HRS=12 \ + LOG_QUEUE_STATS_INTERVAL_SEC=60 RUN mkdir $FS_DIR #VOLUME [ $FS_DIR ] # Uncomment in case of using Bind mount. From 3132db6205c38fa4fe25c4b5d300adaba9e65615 Mon Sep 17 00:00:00 2001 From: Alexander Zavorotynskiy Date: Thu, 28 Apr 2022 17:55:56 +0200 Subject: [PATCH 22/91] fix(backend): fixed possible panic in the defer --- backend/services/storage/main.go | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/backend/services/storage/main.go b/backend/services/storage/main.go index 9579fbe4f..21054a750 100644 --- a/backend/services/storage/main.go +++ b/backend/services/storage/main.go @@ -16,6 +16,8 @@ import ( "openreplay/backend/pkg/storage" ) +const RetryTimeout = 2 * time.Minute + func main() { log.SetFlags(log.LstdFlags | log.LUTC | log.Llongfile) @@ -28,17 +30,18 @@ func main() { if retryCount <= 0 { return } + file, err := os.Open(FS_DIR + "/" + key) - defer file.Close() if err != nil { log.Printf("File error: %v; Will retry %v more time(s)\n", err, retryCount) - time.AfterFunc(2*time.Minute, func() { + time.AfterFunc(RetryTimeout, func() { uploadKey(key, retryCount-1) }) - } else { - if err := storage.Upload(gzipFile(file), key, "application/octet-stream", true); err != nil { - log.Fatalf("Storage upload error: %v\n", err) - } + } + defer file.Close() + + if err := storage.Upload(gzipFile(file), key, "application/octet-stream", true); err != nil { + log.Fatalf("Storage upload error: %v\n", err) } } From de3ba9c7f63ad53d5c2637c663a2404372a7b30a Mon Sep 17 00:00:00 2001 From: Alexander Zavorotynskiy Date: Thu, 28 Apr 2022 18:02:56 +0200 Subject: [PATCH 23/91] fix(backend): added missed return in error case --- backend/services/storage/main.go | 1 + 1 file changed, 1 insertion(+) diff --git a/backend/services/storage/main.go b/backend/services/storage/main.go index 21054a750..3e391426a 100644 --- a/backend/services/storage/main.go +++ b/backend/services/storage/main.go @@ -37,6 +37,7 @@ func main() { time.AfterFunc(RetryTimeout, func() { uploadKey(key, retryCount-1) }) + return } defer file.Close() From 6d4800feeac9895d447b47be4d86d501ea293e9f Mon Sep 17 00:00:00 2001 From: ShiKhu Date: Thu, 28 Apr 2022 19:14:23 +0200 Subject: [PATCH 24/91] feat(backend/storage):split files into 2 --- backend/services/storage/main.go | 29 +++++++++++++++++++++++++++-- 1 file changed, 27 insertions(+), 2 deletions(-) diff --git a/backend/services/storage/main.go b/backend/services/storage/main.go index 3e391426a..47691ad36 100644 --- a/backend/services/storage/main.go +++ b/backend/services/storage/main.go @@ -6,6 +6,10 @@ import ( "strconv" "time" + "bytes" + "io" + "ioutill" + "os/signal" "syscall" @@ -18,6 +22,8 @@ import ( const RetryTimeout = 2 * time.Minute +const SESSION_FILE_SPLIT_SIZE = 200000 // ~200 kB + func main() { log.SetFlags(log.LstdFlags | log.LUTC | log.Llongfile) @@ -41,8 +47,27 @@ func main() { } defer file.Close() - if err := storage.Upload(gzipFile(file), key, "application/octet-stream", true); err != nil { - log.Fatalf("Storage upload error: %v\n", err) + fileR2 := new(bytes.Buffer) + fileR1 := io.TeeReader(file, fileR2) + + startBytes := make([]byte, SESSION_FILE_SPLIT_SIZE) + nRead, err := fileR1.Read(startBytes) + if err != nil { + log.Printf("File read error: %f", err) + return + } + startReader = bytes.NewBuffer(startBytes) + if err := storage.Upload(gzipFile(startReader), key+"-s", "application/octet-stream", true); err != nil { + log.Fatalf("Storage: start upload failed. %v\n", err) + } + if nRead == SESSION_FILE_SPLIT_SIZE { + if err := storage.Upload(gzipFile(fileR1), key+"-e", "application/octet-stream", true); err != nil { + log.Fatalf("Storage: end upload failed. %v\n", err) + } + } + + if err := storage.Upload(gzipFile(fileR2), key, "application/octet-stream", true); err != nil { + log.Fatalf("Storage: upload failed. %v\n", err) } } From cb01c3cb289defb2af50a7edbc813384db72a5e2 Mon Sep 17 00:00:00 2001 From: ShiKhu Date: Thu, 28 Apr 2022 19:21:45 +0200 Subject: [PATCH 25/91] fix(backend/storage): codefix --- backend/services/storage/gzip.go | 2 +- backend/services/storage/main.go | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/backend/services/storage/gzip.go b/backend/services/storage/gzip.go index f3e96394a..0e662efaa 100644 --- a/backend/services/storage/gzip.go +++ b/backend/services/storage/gzip.go @@ -5,7 +5,7 @@ import ( "io" ) -func gzipFile(file io.ReadSeeker) io.Reader { +func gzipFile(file io.Reader) io.Reader { reader, writer := io.Pipe() go func() { gw, _ := gzip.NewWriterLevel(writer, gzip.BestSpeed) diff --git a/backend/services/storage/main.go b/backend/services/storage/main.go index 47691ad36..9afc7d819 100644 --- a/backend/services/storage/main.go +++ b/backend/services/storage/main.go @@ -8,7 +8,7 @@ import ( "bytes" "io" - "ioutill" + //"io/ioutil" "os/signal" "syscall" @@ -56,7 +56,7 @@ func main() { log.Printf("File read error: %f", err) return } - startReader = bytes.NewBuffer(startBytes) + startReader := bytes.NewBuffer(startBytes) if err := storage.Upload(gzipFile(startReader), key+"-s", "application/octet-stream", true); err != nil { log.Fatalf("Storage: start upload failed. %v\n", err) } From b096ac73d1a0268a886195c44007da5793eaa950 Mon Sep 17 00:00:00 2001 From: Shekar Siri Date: Fri, 29 Apr 2022 10:02:56 +0200 Subject: [PATCH 26/91] feat(ui) - dashboard - report --- .../CustomMetricOverviewChart.tsx | 2 +- .../ResponseTime/ResponseTime.tsx | 2 +- .../DashboardView/DashboardView.tsx | 18 +- .../DashboardWidgetGrid.tsx | 9 +- .../WidgetWrapper/WidgetWrapper.tsx | 9 +- frontend/app/components/hocs/withReport.tsx | 142 +++++++++ frontend/app/styles/general.css | 27 +- frontend/app/svg/icons/filetype-pdf.svg | 3 + frontend/app/svg/icons/report.pdf | Bin 0 -> 929040 bytes frontend/app/utils.js | 13 + frontend/package-lock.json | 294 +++++++++++++++++- frontend/package.json | 2 + 12 files changed, 488 insertions(+), 33 deletions(-) create mode 100644 frontend/app/components/hocs/withReport.tsx create mode 100644 frontend/app/svg/icons/filetype-pdf.svg create mode 100644 frontend/app/svg/icons/report.pdf diff --git a/frontend/app/components/Dashboard/Widgets/CustomMetricsWidgets/CustomMetricOverviewChart/CustomMetricOverviewChart.tsx b/frontend/app/components/Dashboard/Widgets/CustomMetricsWidgets/CustomMetricOverviewChart/CustomMetricOverviewChart.tsx index 1f65e1c81..b6d0ff995 100644 --- a/frontend/app/components/Dashboard/Widgets/CustomMetricsWidgets/CustomMetricOverviewChart/CustomMetricOverviewChart.tsx +++ b/frontend/app/components/Dashboard/Widgets/CustomMetricsWidgets/CustomMetricOverviewChart/CustomMetricOverviewChart.tsx @@ -33,7 +33,7 @@ function CustomMetricOverviewChart(props: Props) { {gradientDef} diff --git a/frontend/app/components/Dashboard/Widgets/PredefinedWidgets/ResponseTime/ResponseTime.tsx b/frontend/app/components/Dashboard/Widgets/PredefinedWidgets/ResponseTime/ResponseTime.tsx index e1af351ee..47e47e12e 100644 --- a/frontend/app/components/Dashboard/Widgets/PredefinedWidgets/ResponseTime/ResponseTime.tsx +++ b/frontend/app/components/Dashboard/Widgets/PredefinedWidgets/ResponseTime/ResponseTime.tsx @@ -47,7 +47,7 @@ function ResponseTime(props: Props) { /> */} - + @@ -115,6 +118,7 @@ function DashboardView(props: Props) { siteId={siteId} dashboardId={dashboardId} onEditHandler={onAddWidgets} + id="report" /> void; + id?: string; } function DashboardWidgetGrid(props) { const { dashboardId, siteId } = props; const { dashboardStore } = useStore(); const loading = useObserver(() => dashboardStore.isLoading); - const dashbaord: any = dashboardStore.selectedDashboard; - const list: any = useObserver(() => dashbaord?.widgets); + const dashboard: any = dashboardStore.selectedDashboard; + const list: any = useObserver(() => dashboard?.widgets); return useObserver(() => ( @@ -29,13 +30,13 @@ function DashboardWidgetGrid(props) { } > -
+
{list && list.map((item, index) => ( dashbaord.swapWidgetPosition(dragIndex, hoverIndex)} + moveListItem={(dragIndex, hoverIndex) => dashboard.swapWidgetPosition(dragIndex, hoverIndex)} dashboardId={dashboardId} siteId={siteId} isWidget={true} diff --git a/frontend/app/components/Dashboard/components/WidgetWrapper/WidgetWrapper.tsx b/frontend/app/components/Dashboard/components/WidgetWrapper/WidgetWrapper.tsx index b29ab800c..8f2d5b051 100644 --- a/frontend/app/components/Dashboard/components/WidgetWrapper/WidgetWrapper.tsx +++ b/frontend/app/components/Dashboard/components/WidgetWrapper/WidgetWrapper.tsx @@ -86,14 +86,15 @@ function WidgetWrapper(props: Props) { }} ref={dragDropRef} onClick={props.onClick ? props.onClick : () => {}} + id={`widget-${widget.widgetId}`} > {isTemplate && }
-

{widget.name}

+
{widget.name}
{isWidget && ( -
+
{!isPredefined && ( <> @@ -118,11 +119,11 @@ function WidgetWrapper(props: Props) { )}
- + {/* */}
-
+ {/*
*/}
)); } diff --git a/frontend/app/components/hocs/withReport.tsx b/frontend/app/components/hocs/withReport.tsx new file mode 100644 index 000000000..d5f77adc9 --- /dev/null +++ b/frontend/app/components/hocs/withReport.tsx @@ -0,0 +1,142 @@ +import React, { useEffect } from 'react'; +import { convertElementToImage } from 'App/utils'; +import { jsPDF } from "jspdf"; +import { useStore } from 'App/mstore'; +import { observer, useObserver } from 'mobx-react-lite'; +import { connect } from 'react-redux'; +interface Props { + site: any +} +export default function withReport

( + WrappedComponent: React.ComponentType

, +) { + const ComponentWithReport = (props: P) => { + const [rendering, setRendering] = React.useState(false); + const { site } = props; + const { dashboardStore } = useStore(); + const dashboard: any = useObserver(() => dashboardStore.selectedDashboard); + const widgets: any = useObserver(() => dashboard?.widgets); + const period = useObserver(() => dashboardStore.period); + console.log('site', site) + + const addFooters = (doc) => { + const pageCount = doc.internal.getNumberOfPages(); + for(var i = 1; i <= pageCount; i++) { + doc.setPage(i); + doc.setFontSize(10); + doc.setTextColor(136,136,136); + doc.text('Page ' + String(i) + ' of ' + String(pageCount), 196,285,null,null,"right"); + } + } + + const renderReport = async () => { + document.body.scrollIntoView(); + const doc = new jsPDF('p', 'mm', 'a4'); + + doc.addMetadata('Author', 'OpenReplay'); + doc.addMetadata('Title', 'OpenReplay Report'); + doc.addMetadata('Subject', 'OpenReplay Report'); + doc.addMetadata('Keywords', 'OpenReplay Report'); + doc.addMetadata('Creator', 'OpenReplay'); + doc.addMetadata('Producer', 'OpenReplay'); + doc.addMetadata('CreationDate', new Date().toISOString()); + + + const parentElement = document.getElementById('report') as HTMLElement; + const pageHeight = 1200; + const pagesCount = parentElement.offsetHeight / pageHeight; + const pages: Array = []; + for(let i = 0; i < pagesCount; i++) { + const page = document.createElement('div'); + page.classList.add('page'); + page.style.height = `${pageHeight}px`; + page.style.whiteSpace = 'no-wrap !important'; + + const childrens = Array.from(parentElement.children).filter((child) => { + const rect = child.getBoundingClientRect(); + const parentRect = parentElement.getBoundingClientRect(); + const top = rect.top - parentRect.top; + return top >= i * pageHeight && top < (i + 1) * pageHeight; + }); + if (childrens.length > 0) { + pages.push(childrens); + } + } + + const rportLayer = document.getElementById("report-layer"); + + pages.forEach(async (page, index) => { + const pageDiv = document.createElement('div'); + pageDiv.classList.add('grid', 'gap-4', 'grid-cols-4', 'items-start', 'pb-10', 'auto-rows-min', 'printable-report'); + pageDiv.id = `page-${index}`; + pageDiv.style.backgroundColor = '#f6f6f6'; + pageDiv.style.gridAutoRows = 'min-content'; + pageDiv.style.padding = '30px'; + pageDiv.style.height = '490mm'; + + if (index === 0) { + const header = document.getElementById('report-header')?.cloneNode(true) as HTMLElement; + header.classList.add('col-span-4'); + header.style.display = 'block'; + pageDiv.appendChild(header); + } + page.forEach((child) => { + pageDiv.appendChild(child.cloneNode(true)); + }) + rportLayer?.appendChild(pageDiv); + }) + + setTimeout(async () => { + for (let i = 0; i < pages.length; i++) { + const pageDiv = document.getElementById(`page-${i}`) as HTMLElement; + const pageImage = await convertElementToImage(pageDiv); + doc.addImage(pageImage, 'PNG', 0, 0, 210, 0); + if (i === pages.length - 1) { + addFooters(doc); + doc.save('report.pdf'); + rportLayer!.innerHTML = ''; + } else { + doc.addPage(); + } + } + }, 100) + } + + return ( + <> +

+
+
+ +
+
+ Project: {site && site.name} +
+
+
+
{dashboard && dashboard.name}
+
+ {period && (period.range.start.format('MMM Do YY') + ' - ' + period.range.end.format('MMM Do YY'))} +
+
+
+ +
+ + + ) + } + + return connect(state => ({ + site: state.getIn(['site', 'instance']), + }))(ComponentWithReport); +} \ No newline at end of file diff --git a/frontend/app/styles/general.css b/frontend/app/styles/general.css index 7e99468ad..245158049 100644 --- a/frontend/app/styles/general.css +++ b/frontend/app/styles/general.css @@ -260,8 +260,6 @@ p { } } - - .tippy-tooltip.openreplay-theme { background-color: $tealx; color: white; @@ -273,4 +271,29 @@ p { .tippy-tooltip.openreplay-theme .tippy-backdrop { background-color: $tealx; +} + +@media print { + .no-print { + display:none !important; + } +} + +.printable-report * { + white-space: nowrap !important; +} +.recharts-default-legend { + display: flex !important; + align-items: center; + justify-content: center; +} + +.recharts-legend-item { + display: flex !important; + align-items: center !important; + white-space: nowrap !important; +} + +.recharts-legend-item-text { + white-space: nowrap !important; } \ No newline at end of file diff --git a/frontend/app/svg/icons/filetype-pdf.svg b/frontend/app/svg/icons/filetype-pdf.svg new file mode 100644 index 000000000..e1fc9b698 --- /dev/null +++ b/frontend/app/svg/icons/filetype-pdf.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/frontend/app/svg/icons/report.pdf b/frontend/app/svg/icons/report.pdf new file mode 100644 index 0000000000000000000000000000000000000000..33eab9271109318b47ea35bb835b4ea9218715ac GIT binary patch literal 929040 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%0A=5YzhXVYlBXQQz&TF3k*8^|jX{vbik^KbN2Z|+ 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%0AbV`5FW6%C5Sw_zU&Wl9ep5aX8 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

pYYl(w>yGkOF=B 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

    *3<|XPA;(6JRV#<3$?l9!O=lu+C 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𝔑q0$*|3#vU2^y6A8$O%7_TKYW3kE>Xf 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 literal 0 HcmV?d00001 diff --git a/frontend/app/utils.js b/frontend/app/utils.js index 5f7e446fa..f7ae27b5b 100644 --- a/frontend/app/utils.js +++ b/frontend/app/utils.js @@ -1,5 +1,6 @@ import JSBI from 'jsbi'; import chroma from "chroma-js"; +import * as htmlToImage from 'html-to-image'; export function debounce(callback, wait, context = this) { let timeout = null; @@ -246,4 +247,16 @@ export const positionOfTheNumber = (min, max, value, length) => { const interval = (max - min) / length; const position = Math.round((value - min) / interval); return position; +} + +export const convertElementToImage = async (el) => { + const fontEmbedCss = await htmlToImage.getFontEmbedCSS(el); + const image = await htmlToImage.toJpeg(el, { + pixelRatio: 2, + fontEmbedCss, + filter: function (node) { + return node.id !== 'no-print'; + }, + }); + return image; } \ No newline at end of file diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 75fcde026..294de4294 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -15,9 +15,11 @@ "codemirror": "^5.62.3", "copy-to-clipboard": "^3.3.1", "deep-diff": "^1.0.2", + "html-to-image": "^1.9.0", "immutable": "^4.0.0-rc.12", "jsbi": "^4.1.0", "jshint": "^2.11.1", + "jspdf": "^2.5.1", "luxon": "^1.24.1", "mobx": "^6.3.8", "mobx-react-lite": "^3.1.6", @@ -4679,7 +4681,7 @@ "version": "14.18.13", "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.13.tgz", "integrity": "sha512-Z6/KzgyWOga3pJNS42A+zayjhPbf2zM3hegRQaOPnLOzEi86VV++6FLDWgR1LGrVCRufP/ph2daa3tEa5br1zA==", - "dev": true + "devOptional": true }, "node_modules/@types/node-fetch": { "version": "2.6.1", @@ -4731,7 +4733,7 @@ "version": "15.7.5", "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz", "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==", - "dev": true + "devOptional": true }, "node_modules/@types/q": { "version": "1.5.5", @@ -4745,11 +4747,17 @@ "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==", "dev": true }, + "node_modules/@types/raf": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/@types/raf/-/raf-3.4.0.tgz", + "integrity": "sha512-taW5/WYqo36N7V39oYyHP9Ipfd5pNFvGTIQsNGj86xV88YQ7GnI30/yMfKDF7Zgin0m3e+ikX88FvImnK4RjGw==", + "optional": true + }, "node_modules/@types/react": { "version": "18.0.6", "resolved": "https://registry.npmjs.org/@types/react/-/react-18.0.6.tgz", "integrity": "sha512-bPqwzJRzKtfI0mVYr5R+1o9BOE8UEXefwc1LwcBtfnaAn6OoqMhLa/91VA8aeWfDPJt1kHvYKI8RHcQybZLHHA==", - "dev": true, + "devOptional": true, "dependencies": { "@types/prop-types": "*", "@types/scheduler": "*", @@ -4769,7 +4777,7 @@ "version": "3.0.11", "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.0.11.tgz", "integrity": "sha512-sa6P2wJ+CAbgyy4KFssIb/JNMLxFvKF1pCYCSXS8ZMuqZnMsrxqI2E5sPyoTpxoPU/gVZMzr2zjOfg8GIZOMsw==", - "dev": true + "devOptional": true }, "node_modules/@types/resize-observer-browser": { "version": "0.1.7", @@ -4780,7 +4788,7 @@ "version": "0.16.2", "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz", "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==", - "dev": true + "devOptional": true }, "node_modules/@types/source-list-map": { "version": "0.1.2", @@ -5625,7 +5633,6 @@ "version": "2.1.2", "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", - "dev": true, "bin": { "atob": "bin/atob.js" }, @@ -6139,6 +6146,15 @@ "resolved": "https://registry.npmjs.org/base16/-/base16-1.0.0.tgz", "integrity": "sha1-4pf2DX7BAUp6lxo568ipjAtoHnA=" }, + "node_modules/base64-arraybuffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-1.0.2.tgz", + "integrity": "sha512-I3yl4r9QB5ZRY3XuJVEPfc2XhZO6YweFPI+UovAzn+8/hb3oJ6lnysaFcjVpkCPfVWFUDvoZ8kmVDP7WyRtYtQ==", + "optional": true, + "engines": { + "node": ">= 0.6.0" + } + }, "node_modules/base64-js": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", @@ -6623,6 +6639,17 @@ "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" } }, + "node_modules/btoa": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/btoa/-/btoa-1.2.1.tgz", + "integrity": "sha512-SB4/MIGlsiVkMcHmT+pSmIPoNDoHg+7cMzmt3Uxt628MTz2487DKSqK/fuhFBrkuqrYv5UCEnACpF4dTFNKc/g==", + "bin": { + "btoa": "bin/btoa.js" + }, + "engines": { + "node": ">= 0.4.0" + } + }, "node_modules/buffer": { "version": "4.9.2", "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", @@ -6908,6 +6935,25 @@ } ] }, + "node_modules/canvg": { + "version": "3.0.10", + "resolved": "https://registry.npmjs.org/canvg/-/canvg-3.0.10.tgz", + "integrity": "sha512-qwR2FRNO9NlzTeKIPIKpnTY6fqwuYSequ8Ru8c0YkYU7U0oW+hLUvWadLvAu1Rl72OMNiFhoLu4f8eUjQ7l/+Q==", + "optional": true, + "dependencies": { + "@babel/runtime": "^7.12.5", + "@types/raf": "^3.4.0", + "core-js": "^3.8.3", + "raf": "^3.4.1", + "regenerator-runtime": "^0.13.7", + "rgbcolor": "^1.0.1", + "stackblur-canvas": "^2.0.0", + "svg-pathdata": "^6.0.3" + }, + "engines": { + "node": ">=10.0.0" + } + }, "node_modules/case-sensitive-paths-webpack-plugin": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.4.0.tgz", @@ -7834,7 +7880,7 @@ "version": "3.22.2", "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.22.2.tgz", "integrity": "sha512-Z5I2vzDnEIqO2YhELVMFcL1An2CIsFe9Q7byZhs8c/QxummxZlAHw33TUHbIte987LkisOgL0LwQ1P9D6VISnA==", - "dev": true, + "devOptional": true, "hasInstallScript": true, "funding": { "type": "opencollective", @@ -8333,6 +8379,15 @@ "postcss": "^8.0.9" } }, + "node_modules/css-line-break": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/css-line-break/-/css-line-break-2.1.0.tgz", + "integrity": "sha512-FHcKFCZcAha3LwfVBhCQbW2nCNbkZXn7KVUJcsT5/P8YmfsVja0FMPJr0B903j/E69HUphKiV9iQArX8SDYA4w==", + "optional": true, + "dependencies": { + "utrie": "^1.0.2" + } + }, "node_modules/css-loader": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-3.6.0.tgz", @@ -9385,6 +9440,12 @@ "domelementtype": "1" } }, + "node_modules/dompurify": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-2.3.6.tgz", + "integrity": "sha512-OFP2u/3T1R5CEgWCEONuJ1a5+MFKnOYpkywpUSxv/dj1LeBT1erK+JwM7zK0ROy2BRhqVCf0LRw/kHqKuMkVGg==", + "optional": true + }, "node_modules/domutils": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", @@ -10858,6 +10919,11 @@ "integrity": "sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw==", "dev": true }, + "node_modules/fflate": { + "version": "0.4.8", + "resolved": "https://registry.npmjs.org/fflate/-/fflate-0.4.8.tgz", + "integrity": "sha512-FJqqoDBR00Mdj9ppamLa/Y7vxm+PRmNWA67N846RvsoYVMKB4q3y/de5PA7gUmRMYK/8CMz2GDZQmCRN1wBcWA==" + }, "node_modules/figgy-pudding": { "version": "3.5.2", "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.2.tgz", @@ -12655,6 +12721,11 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/html-to-image": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/html-to-image/-/html-to-image-1.9.0.tgz", + "integrity": "sha512-9gaDCIYg62Ek07F2pBk76AHgYZ2gxq2YALU7rK3gNCqXuhu6cWzsOQqM7qGbjZiOzxGzrU1deDqZpAod2NEwbA==" + }, "node_modules/html-void-elements": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-1.0.5.tgz", @@ -12726,6 +12797,19 @@ "object-assign": "^4.0.1" } }, + "node_modules/html2canvas": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/html2canvas/-/html2canvas-1.4.1.tgz", + "integrity": "sha512-fPU6BHNpsyIhr8yyMpTLLxAbkaK8ArIBcmZIRiBLiDhjeqvXolaEmDGmELFuX9I4xDcaKKcJl+TKZLqruBbmWA==", + "optional": true, + "dependencies": { + "css-line-break": "^2.1.0", + "text-segmentation": "^1.0.3" + }, + "engines": { + "node": ">=8.0.0" + } + }, "node_modules/htmlparser2": { "version": "3.8.3", "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.8.3.tgz", @@ -14098,6 +14182,23 @@ "graceful-fs": "^4.1.6" } }, + "node_modules/jspdf": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/jspdf/-/jspdf-2.5.1.tgz", + "integrity": "sha512-hXObxz7ZqoyhxET78+XR34Xu2qFGrJJ2I2bE5w4SM8eFaFEkW2xcGRVUss360fYelwRSid/jT078kbNvmoW0QA==", + "dependencies": { + "@babel/runtime": "^7.14.0", + "atob": "^2.1.2", + "btoa": "^1.2.1", + "fflate": "^0.4.8" + }, + "optionalDependencies": { + "canvg": "^3.0.6", + "core-js": "^3.6.0", + "dompurify": "^2.2.0", + "html2canvas": "^1.0.0-rc.5" + } + }, "node_modules/jsx-ast-utils": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.2.2.tgz", @@ -19986,6 +20087,15 @@ "node": ">=0.10.0" } }, + "node_modules/rgbcolor": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/rgbcolor/-/rgbcolor-1.0.1.tgz", + "integrity": "sha1-1lBezbMEplldom+ktDMHMGd1lF0=", + "optional": true, + "engines": { + "node": ">= 0.8.15" + } + }, "node_modules/rimraf": { "version": "2.7.1", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", @@ -20986,6 +21096,15 @@ "node": "*" } }, + "node_modules/stackblur-canvas": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/stackblur-canvas/-/stackblur-canvas-2.5.0.tgz", + "integrity": "sha512-EeNzTVfj+1In7aSLPKDD03F/ly4RxEuF/EX0YcOG0cKoPXs+SLZxDawQbexQDBzwROs4VKLWTOaZQlZkGBFEIQ==", + "optional": true, + "engines": { + "node": ">=0.1.14" + } + }, "node_modules/stackframe": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.2.1.tgz", @@ -21487,6 +21606,15 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/svg-pathdata": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/svg-pathdata/-/svg-pathdata-6.0.3.tgz", + "integrity": "sha512-qsjeeq5YjBZ5eMdFuUa4ZosMLxgr5RZ+F+Y1OrDhuOCEInRMA3x74XdBtggJcj9kOeInz0WE+LgCPDkZFlBYJw==", + "optional": true, + "engines": { + "node": ">=12.0.0" + } + }, "node_modules/svgo": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.3.2.tgz", @@ -22128,6 +22256,15 @@ "integrity": "sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==", "dev": true }, + "node_modules/text-segmentation": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/text-segmentation/-/text-segmentation-1.0.3.tgz", + "integrity": "sha512-iOiPUo/BGnZ6+54OsWxZidGCsdU8YbE4PSpdPinp7DeMtUJNJBoJ/ouUSTJjHkh1KntHaltHl/gDs2FC4i5+Nw==", + "optional": true, + "dependencies": { + "utrie": "^1.0.2" + } + }, "node_modules/throttle-debounce": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/throttle-debounce/-/throttle-debounce-3.0.1.tgz", @@ -23299,6 +23436,15 @@ "node": ">= 0.4.0" } }, + "node_modules/utrie": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/utrie/-/utrie-1.0.2.tgz", + "integrity": "sha512-1MLa5ouZiOmQzUbjbu9VmjLzn1QLXBhwpUa7kdLUQK+KQ5KA9I1vk5U4YHe/X2Ch7PYnJfWuWT+VbuxbGwljhw==", + "optional": true, + "dependencies": { + "base64-arraybuffer": "^1.0.2" + } + }, "node_modules/uuid": { "version": "3.3.2", "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", @@ -29063,7 +29209,7 @@ "version": "14.18.13", "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.13.tgz", "integrity": "sha512-Z6/KzgyWOga3pJNS42A+zayjhPbf2zM3hegRQaOPnLOzEi86VV++6FLDWgR1LGrVCRufP/ph2daa3tEa5br1zA==", - "dev": true + "devOptional": true }, "@types/node-fetch": { "version": "2.6.1", @@ -29115,7 +29261,7 @@ "version": "15.7.5", "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz", "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==", - "dev": true + "devOptional": true }, "@types/q": { "version": "1.5.5", @@ -29129,11 +29275,17 @@ "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==", "dev": true }, + "@types/raf": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/@types/raf/-/raf-3.4.0.tgz", + "integrity": "sha512-taW5/WYqo36N7V39oYyHP9Ipfd5pNFvGTIQsNGj86xV88YQ7GnI30/yMfKDF7Zgin0m3e+ikX88FvImnK4RjGw==", + "optional": true + }, "@types/react": { "version": "18.0.6", "resolved": "https://registry.npmjs.org/@types/react/-/react-18.0.6.tgz", "integrity": "sha512-bPqwzJRzKtfI0mVYr5R+1o9BOE8UEXefwc1LwcBtfnaAn6OoqMhLa/91VA8aeWfDPJt1kHvYKI8RHcQybZLHHA==", - "dev": true, + "devOptional": true, "requires": { "@types/prop-types": "*", "@types/scheduler": "*", @@ -29144,7 +29296,7 @@ "version": "3.0.11", "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.0.11.tgz", "integrity": "sha512-sa6P2wJ+CAbgyy4KFssIb/JNMLxFvKF1pCYCSXS8ZMuqZnMsrxqI2E5sPyoTpxoPU/gVZMzr2zjOfg8GIZOMsw==", - "dev": true + "devOptional": true } } }, @@ -29166,7 +29318,7 @@ "version": "0.16.2", "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz", "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==", - "dev": true + "devOptional": true }, "@types/source-list-map": { "version": "0.1.2", @@ -29891,8 +30043,7 @@ "atob": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", - "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", - "dev": true + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==" }, "autoprefixer": { "version": "7.2.6", @@ -30304,6 +30455,12 @@ "resolved": "https://registry.npmjs.org/base16/-/base16-1.0.0.tgz", "integrity": "sha1-4pf2DX7BAUp6lxo568ipjAtoHnA=" }, + "base64-arraybuffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-1.0.2.tgz", + "integrity": "sha512-I3yl4r9QB5ZRY3XuJVEPfc2XhZO6YweFPI+UovAzn+8/hb3oJ6lnysaFcjVpkCPfVWFUDvoZ8kmVDP7WyRtYtQ==", + "optional": true + }, "base64-js": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", @@ -30683,6 +30840,11 @@ "picocolors": "^1.0.0" } }, + "btoa": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/btoa/-/btoa-1.2.1.tgz", + "integrity": "sha512-SB4/MIGlsiVkMcHmT+pSmIPoNDoHg+7cMzmt3Uxt628MTz2487DKSqK/fuhFBrkuqrYv5UCEnACpF4dTFNKc/g==" + }, "buffer": { "version": "4.9.2", "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", @@ -30911,6 +31073,22 @@ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001332.tgz", "integrity": "sha512-10T30NYOEQtN6C11YGg411yebhvpnC6Z102+B95eAsN0oB6KUs01ivE8u+G6FMIRtIrVlYXhL+LUwQ3/hXwDWw==" }, + "canvg": { + "version": "3.0.10", + "resolved": "https://registry.npmjs.org/canvg/-/canvg-3.0.10.tgz", + "integrity": "sha512-qwR2FRNO9NlzTeKIPIKpnTY6fqwuYSequ8Ru8c0YkYU7U0oW+hLUvWadLvAu1Rl72OMNiFhoLu4f8eUjQ7l/+Q==", + "optional": true, + "requires": { + "@babel/runtime": "^7.12.5", + "@types/raf": "^3.4.0", + "core-js": "^3.8.3", + "raf": "^3.4.1", + "regenerator-runtime": "^0.13.7", + "rgbcolor": "^1.0.1", + "stackblur-canvas": "^2.0.0", + "svg-pathdata": "^6.0.3" + } + }, "case-sensitive-paths-webpack-plugin": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.4.0.tgz", @@ -31656,7 +31834,7 @@ "version": "3.22.2", "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.22.2.tgz", "integrity": "sha512-Z5I2vzDnEIqO2YhELVMFcL1An2CIsFe9Q7byZhs8c/QxummxZlAHw33TUHbIte987LkisOgL0LwQ1P9D6VISnA==", - "dev": true + "devOptional": true }, "core-js-compat": { "version": "3.22.2", @@ -32073,6 +32251,15 @@ "dev": true, "requires": {} }, + "css-line-break": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/css-line-break/-/css-line-break-2.1.0.tgz", + "integrity": "sha512-FHcKFCZcAha3LwfVBhCQbW2nCNbkZXn7KVUJcsT5/P8YmfsVja0FMPJr0B903j/E69HUphKiV9iQArX8SDYA4w==", + "optional": true, + "requires": { + "utrie": "^1.0.2" + } + }, "css-loader": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-3.6.0.tgz", @@ -32946,6 +33133,12 @@ "domelementtype": "1" } }, + "dompurify": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-2.3.6.tgz", + "integrity": "sha512-OFP2u/3T1R5CEgWCEONuJ1a5+MFKnOYpkywpUSxv/dj1LeBT1erK+JwM7zK0ROy2BRhqVCf0LRw/kHqKuMkVGg==", + "optional": true + }, "domutils": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", @@ -34167,6 +34360,11 @@ "integrity": "sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw==", "dev": true }, + "fflate": { + "version": "0.4.8", + "resolved": "https://registry.npmjs.org/fflate/-/fflate-0.4.8.tgz", + "integrity": "sha512-FJqqoDBR00Mdj9ppamLa/Y7vxm+PRmNWA67N846RvsoYVMKB4q3y/de5PA7gUmRMYK/8CMz2GDZQmCRN1wBcWA==" + }, "figgy-pudding": { "version": "3.5.2", "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.2.tgz", @@ -35585,6 +35783,11 @@ "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.2.0.tgz", "integrity": "sha512-vy7ClnArOZwCnqZgvv+ddgHgJiAFXe3Ge9ML5/mBctVJoUoYPCdxVucOywjDARn6CVoh3dRSFdPHy2sX80L0Wg==" }, + "html-to-image": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/html-to-image/-/html-to-image-1.9.0.tgz", + "integrity": "sha512-9gaDCIYg62Ek07F2pBk76AHgYZ2gxq2YALU7rK3gNCqXuhu6cWzsOQqM7qGbjZiOzxGzrU1deDqZpAod2NEwbA==" + }, "html-void-elements": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-1.0.5.tgz", @@ -35638,6 +35841,16 @@ } } }, + "html2canvas": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/html2canvas/-/html2canvas-1.4.1.tgz", + "integrity": "sha512-fPU6BHNpsyIhr8yyMpTLLxAbkaK8ArIBcmZIRiBLiDhjeqvXolaEmDGmELFuX9I4xDcaKKcJl+TKZLqruBbmWA==", + "optional": true, + "requires": { + "css-line-break": "^2.1.0", + "text-segmentation": "^1.0.3" + } + }, "htmlparser2": { "version": "3.8.3", "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.8.3.tgz", @@ -36669,6 +36882,21 @@ "universalify": "^2.0.0" } }, + "jspdf": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/jspdf/-/jspdf-2.5.1.tgz", + "integrity": "sha512-hXObxz7ZqoyhxET78+XR34Xu2qFGrJJ2I2bE5w4SM8eFaFEkW2xcGRVUss360fYelwRSid/jT078kbNvmoW0QA==", + "requires": { + "@babel/runtime": "^7.14.0", + "atob": "^2.1.2", + "btoa": "^1.2.1", + "canvg": "^3.0.6", + "core-js": "^3.6.0", + "dompurify": "^2.2.0", + "fflate": "^0.4.8", + "html2canvas": "^1.0.0-rc.5" + } + }, "jsx-ast-utils": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.2.2.tgz", @@ -41376,6 +41604,12 @@ "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", "dev": true }, + "rgbcolor": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/rgbcolor/-/rgbcolor-1.0.1.tgz", + "integrity": "sha1-1lBezbMEplldom+ktDMHMGd1lF0=", + "optional": true + }, "rimraf": { "version": "2.7.1", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", @@ -42227,6 +42461,12 @@ "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=", "dev": true }, + "stackblur-canvas": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/stackblur-canvas/-/stackblur-canvas-2.5.0.tgz", + "integrity": "sha512-EeNzTVfj+1In7aSLPKDD03F/ly4RxEuF/EX0YcOG0cKoPXs+SLZxDawQbexQDBzwROs4VKLWTOaZQlZkGBFEIQ==", + "optional": true + }, "stackframe": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.2.1.tgz", @@ -42639,6 +42879,12 @@ "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==" }, + "svg-pathdata": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/svg-pathdata/-/svg-pathdata-6.0.3.tgz", + "integrity": "sha512-qsjeeq5YjBZ5eMdFuUa4ZosMLxgr5RZ+F+Y1OrDhuOCEInRMA3x74XdBtggJcj9kOeInz0WE+LgCPDkZFlBYJw==", + "optional": true + }, "svgo": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.3.2.tgz", @@ -43125,6 +43371,15 @@ "integrity": "sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==", "dev": true }, + "text-segmentation": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/text-segmentation/-/text-segmentation-1.0.3.tgz", + "integrity": "sha512-iOiPUo/BGnZ6+54OsWxZidGCsdU8YbE4PSpdPinp7DeMtUJNJBoJ/ouUSTJjHkh1KntHaltHl/gDs2FC4i5+Nw==", + "optional": true, + "requires": { + "utrie": "^1.0.2" + } + }, "throttle-debounce": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/throttle-debounce/-/throttle-debounce-3.0.1.tgz", @@ -44005,6 +44260,15 @@ "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", "dev": true }, + "utrie": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/utrie/-/utrie-1.0.2.tgz", + "integrity": "sha512-1MLa5ouZiOmQzUbjbu9VmjLzn1QLXBhwpUa7kdLUQK+KQ5KA9I1vk5U4YHe/X2Ch7PYnJfWuWT+VbuxbGwljhw==", + "optional": true, + "requires": { + "base64-arraybuffer": "^1.0.2" + } + }, "uuid": { "version": "3.3.2", "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", diff --git a/frontend/package.json b/frontend/package.json index 7f51ba174..6e683ad27 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -22,9 +22,11 @@ "codemirror": "^5.62.3", "copy-to-clipboard": "^3.3.1", "deep-diff": "^1.0.2", + "html-to-image": "^1.9.0", "immutable": "^4.0.0-rc.12", "jsbi": "^4.1.0", "jshint": "^2.11.1", + "jspdf": "^2.5.1", "luxon": "^1.24.1", "mobx": "^6.3.8", "mobx-react-lite": "^3.1.6", From dc69131499bd4187d9a8a31dbadcc2d5733cf24e Mon Sep 17 00:00:00 2001 From: Alexander Zavorotynskiy Date: Fri, 29 Apr 2022 11:22:00 +0200 Subject: [PATCH 27/91] Deleted commented (unused) code --- .../pkg/messages/legacy-message-transform.go | 1 - backend/services/http/handlers-depricated.go | 1 - backend/services/http/handlers-ios.go | 26 ++------------ backend/services/http/handlers-web.go | 36 ------------------- 4 files changed, 3 insertions(+), 61 deletions(-) delete mode 100644 backend/services/http/handlers-depricated.go diff --git a/backend/pkg/messages/legacy-message-transform.go b/backend/pkg/messages/legacy-message-transform.go index 031c4444a..c22b73378 100644 --- a/backend/pkg/messages/legacy-message-transform.go +++ b/backend/pkg/messages/legacy-message-transform.go @@ -10,7 +10,6 @@ func transformDepricated(msg Message) Message { ID: m.ID, HesitationTime: m.HesitationTime, Label: m.Label, - // Selector: '', } // case *FetchDepricated: // return &Fetch { diff --git a/backend/services/http/handlers-depricated.go b/backend/services/http/handlers-depricated.go deleted file mode 100644 index 06ab7d0f9..000000000 --- a/backend/services/http/handlers-depricated.go +++ /dev/null @@ -1 +0,0 @@ -package main diff --git a/backend/services/http/handlers-ios.go b/backend/services/http/handlers-ios.go index 8116980e1..a7b6f984a 100644 --- a/backend/services/http/handlers-ios.go +++ b/backend/services/http/handlers-ios.go @@ -23,22 +23,9 @@ func startSessionHandlerIOS(w http.ResponseWriter, r *http.Request) { TrackerVersion string `json:"trackerVersion"` RevID string `json:"revID"` UserUUID *string `json:"userUUID"` - //UserOS string `json"userOS"` //hardcoded 'MacOS' - UserOSVersion string `json:"userOSVersion"` - UserDevice string `json:"userDevice"` - Timestamp uint64 `json:"timestamp"` - // UserDeviceType uint 0:phone 1:pad 2:tv 3:carPlay 5:mac - // “performances”:{ - // “activeProcessorCount”:8, - // “isLowPowerModeEnabled”:0, - // “orientation”:0, - // “systemUptime”:585430, - // “batteryState”:0, - // “thermalState”:0, - // “batteryLevel”:0, - // “processorCount”:8, - // “physicalMemory”:17179869184 - // }, + UserOSVersion string `json:"userOSVersion"` + UserDevice string `json:"userDevice"` + Timestamp uint64 `json:"timestamp"` } type response struct { Token string `json:"token"` @@ -111,14 +98,7 @@ func startSessionHandlerIOS(w http.ResponseWriter, r *http.Request) { })) } - // imagesHashList, err := s3.GetFrequentlyUsedKeys(*(req.EncodedProjectID)) // TODO: reuse index: ~ frequency * size - // if err != nil { - // responseWithError(w, http.StatusInternalServerError, err) - // return - // } - responseWithJSON(w, &response{ - // ImagesHashList: imagesHashList, Token: tokenizer.Compose(*tokenData), UserUUID: userUUID, SessionID: strconv.FormatUint(tokenData.ID, 10), diff --git a/backend/services/http/handlers-web.go b/backend/services/http/handlers-web.go index 7aab5bfbc..e5cf57a60 100644 --- a/backend/services/http/handlers-web.go +++ b/backend/services/http/handlers-web.go @@ -105,10 +105,7 @@ func startSessionHandlerWeb(w http.ResponseWriter, r *http.Request) { })) } - //delayDuration := time.Now().Sub(startTime) responseWithJSON(w, &response{ - //Timestamp: startTime.UnixNano() / 1e6, - //Delay: delayDuration.Nanoseconds() / 1e6, Token: tokenizer.Compose(*tokenData), UserUUID: userUUID, SessionID: strconv.FormatUint(tokenData.ID, 10), @@ -154,35 +151,6 @@ func pushMessagesHandlerWeb(w http.ResponseWriter, r *http.Request) { } } - // switch msg.(type) { - // case *BatchMeta, // TODO: watchout! Meta().Index'es are changed here (though it is still unique for the topic-session pair) - // *SetPageLocation, - // *PageLoadTiming, - // *PageRenderTiming, - // *PerformanceTrack, - // *SetInputTarget, - // *SetInputValue, - // *MouseClick, - // *RawErrorEvent, - // *JSException, - // *ResourceTiming, - // *RawCustomEvent, - // *CustomIssue, - // *Fetch, - // *StateAction, - // *GraphQL, - // *CreateElementNode, - // *CreateTextNode, - // *RemoveNode, - // *CreateDocument, - // *RemoveNodeAttribute, - // *MoveNode, - // *SetCSSData, - // *CSSInsertRule, - // *CSSDeleteRule: - // analyticsMessages = append(analyticsMessages, msg) - //} - return msg }) if err != nil { @@ -190,9 +158,6 @@ func pushMessagesHandlerWeb(w http.ResponseWriter, r *http.Request) { return } producer.Produce(TOPIC_RAW_WEB, sessionData.ID, rewritenBuf) - //producer.Produce(TOPIC_ANALYTICS, sessionData.ID, WriteBatch(analyticsMessages)) - //duration := time.Now().Sub(startTime) - //log.Printf("Sended batch within %v nsec; %v nsek/byte", duration.Nanoseconds(), duration.Nanoseconds()/int64(len(buf))) w.WriteHeader(http.StatusOK) } @@ -201,7 +166,6 @@ func notStartedHandlerWeb(w http.ResponseWriter, r *http.Request) { ProjectKey *string `json:"projectKey"` TrackerVersion string `json:"trackerVersion"` DoNotTrack bool `json:"DoNotTrack"` - // RevID string `json:"revID"` } req := &request{} body := http.MaxBytesReader(w, r.Body, JSON_SIZE_LIMIT) From 89ba052d416948aef6115fbc93b56364d9e4dad2 Mon Sep 17 00:00:00 2001 From: rjshrjndrn Date: Fri, 29 Apr 2022 11:58:07 +0200 Subject: [PATCH 28/91] chore(vagrant): Adding development readme Signed-off-by: rjshrjndrn --- api/development.md | 43 ++++++++++++++++++++++++ backend/development.md | 21 ++++++++++++ frontend/development.md | 23 +++++++++++++ scripts/vagrant/README.md | 69 +++++++++++++++++++++++++++++++++++++++ 4 files changed, 156 insertions(+) create mode 100644 api/development.md create mode 100644 backend/development.md create mode 100644 frontend/development.md create mode 100644 scripts/vagrant/README.md diff --git a/api/development.md b/api/development.md new file mode 100644 index 000000000..116518604 --- /dev/null +++ b/api/development.md @@ -0,0 +1,43 @@ +### Prerequisites + +- [Vagrant](../scripts/vagrant/README.md) +- Python 3.9 +- Pipenv + +### Development environment + +```bash +**FOSS:** +cd openreplay/api +# Make your own copy of .env file and edit it as you want +cp .env.dev .env + +# Create a .venv folder to contain all you dependencies +mkdir .venv + +# Installing dependencies (pipenv will detect the .venv folder and use it as a target) +pipenv install -r requirements.txt [--skip-lock] + +# Create a .venv folder to contain all you dependencies +mkdir .venv + +# Installing dependencies (pipenv will detect the .venv folder and use it as a target) +pipenv install -r requirements.txt [--skip-lock] + +# These commands must bu used everytime you make changes to FOSS. +# To clean the unused files before getting new ones +bash clean.sh +# To copy commun files from FOSS +bash prepare-dev.sh +``` + +### Building and deploying locally + +```bash +cd openreplay-contributions +vagrant ssh +cd openreplay-dev/openreplay/scripts/helmcharts +# For complete list of options +# bash local_deploy.sh help +bash local_deploy.sh api +``` diff --git a/backend/development.md b/backend/development.md new file mode 100644 index 000000000..0e7295c8b --- /dev/null +++ b/backend/development.md @@ -0,0 +1,21 @@ +### Prerequisites + +- [Vagrant](../scripts/vagrant/README.md) + +### Development environment + +```bash +docker build -f Dockerfile.bundle . + +``` + +### Building and deploying locally + +```bash +cd openreplay-contributions +vagrant ssh +cd openreplay-dev/openreplay/scripts/helmcharts +# For complete list of options +# bash local_deploy.sh help +bash local_deploy.sh +``` diff --git a/frontend/development.md b/frontend/development.md new file mode 100644 index 000000000..904c85f46 --- /dev/null +++ b/frontend/development.md @@ -0,0 +1,23 @@ +### Prerequisites + +- [Vagrant](../scripts/vagrant/README.md) +- Node Version 17 +- npm + +### Development environment + +```bash +cd openreplay/frontend +# Change endpoints to local openreplay installation +sed -i 's#PRODUCTION: true#PRODUCTION: false#g' env.js +sed -i "s#API_EDP: .*#API_EDP: 'http://openreplay.local/api',#g" env.js +sed -i "s#ASSETS_HOST: .*#ASSETS_HOST: 'http://openreplay.local/assets',#g" env.js + +# Installing dependencies +npm install + +# Generating assets +npm run gen:css-types +npm run gen:icons +npm run gen:colors +``` diff --git a/scripts/vagrant/README.md b/scripts/vagrant/README.md new file mode 100644 index 000000000..ffe132c73 --- /dev/null +++ b/scripts/vagrant/README.md @@ -0,0 +1,69 @@ + + +### Installation + +- Vagrant: [https://www.vagrantup.com/downloads](https://www.vagrantup.com/downloads) +- VirtualBox: [https://www.virtualbox.org/wiki/Downloads](https://www.virtualbox.org/wiki/Downloads) + +### Configuration + +```bash +mkdir openreplay-contributions +cd openreplay-contributions +git clone https://github.com/openreplay/openreplay -b dev +cp -rf openreplay/scripts/vagrant/ . +vagrant up +``` + +### To access OpenReplay instance + +```bash +Add ip address from about output to your local resolver + +## Mac/Linux + +Copy paste the command from the vagrant output + +## Windows + +Use the following instructions if you’re running Windows 10 or Windows 8: + Press the Windows key. + Type Notepad in the search field. + In the search results, right-click Notepad and select Run as administrator. + From Notepad, open the following file: + c:\Windows\System32\Drivers\etc\hosts + add the below line in the hosts file + openreplay.local + Select File > Save to save your changes. + +**Open browser** +http://openreplay.local +``` + +### To start developing + +- [Frontend](../../frontend/development.md) +- [API](../../api/development.md) +- [Backend](../../backend/development.md) + +### Notes + +It’ll be a good practice to take a snapshot once the initial setup is complete, so that if something is not working as expected, you can always fall back to a stable known version. +```bash +cd openreplay-dev +vagrant snapshot save +# For example +vagrant snapshot save openreplay-160-base +``` + +```bash +# To restore the snapshot +cd openreplay-dev +vagrant snapshot restore openreplay-160-base +``` + + From 878c742c2fbf7cbc720c1a96a74d550114b7269e Mon Sep 17 00:00:00 2001 From: Shekar Siri Date: Fri, 29 Apr 2022 12:32:34 +0200 Subject: [PATCH 29/91] feat(ui) - dashboard - report --- frontend/app/components/hocs/withReport.tsx | 47 +- .../app/components/ui/ItemMenu/ItemMenu.js | 8 +- .../ui/Notification/Notification.js | 1 + frontend/app/{date.js => date.ts} | 8 +- frontend/app/utils.js | 5 + frontend/package-lock.json | 1184 +++++++++-------- frontend/package.json | 2 +- 7 files changed, 649 insertions(+), 606 deletions(-) rename frontend/app/{date.js => date.ts} (94%) diff --git a/frontend/app/components/hocs/withReport.tsx b/frontend/app/components/hocs/withReport.tsx index d5f77adc9..4984796d7 100644 --- a/frontend/app/components/hocs/withReport.tsx +++ b/frontend/app/components/hocs/withReport.tsx @@ -4,6 +4,8 @@ import { jsPDF } from "jspdf"; import { useStore } from 'App/mstore'; import { observer, useObserver } from 'mobx-react-lite'; import { connect } from 'react-redux'; +import { fileNameFormat } from 'App/utils'; +import { toast } from 'react-toastify'; interface Props { site: any } @@ -17,21 +19,32 @@ export default function withReport

    ( const dashboard: any = useObserver(() => dashboardStore.selectedDashboard); const widgets: any = useObserver(() => dashboard?.widgets); const period = useObserver(() => dashboardStore.period); - console.log('site', site) const addFooters = (doc) => { const pageCount = doc.internal.getNumberOfPages(); for(var i = 1; i <= pageCount; i++) { doc.setPage(i); - doc.setFontSize(10); + doc.setFontSize(8); doc.setTextColor(136,136,136); - doc.text('Page ' + String(i) + ' of ' + String(pageCount), 196,285,null,null,"right"); + doc.text('Page ' + String(i) + ' of ' + String(pageCount), 200,290,null,null,"right"); + doc.addImage('/logo-open-replay-grey.png', 'png', 10, 288, 20, 0); } } + + const renderPromise = async (): Promise => { + const promise = new Promise((resolve, reject) => { + renderReport(resolve); + }); + toast.promise(promise, { + pending: 'Generating report...', + success: 'Report generated successfully', + }) + } - const renderReport = async () => { + const renderReport = async (cb) => { document.body.scrollIntoView(); const doc = new jsPDF('p', 'mm', 'a4'); + const now = new Date().toISOString(); doc.addMetadata('Author', 'OpenReplay'); doc.addMetadata('Title', 'OpenReplay Report'); @@ -39,7 +52,7 @@ export default function withReport

    ( doc.addMetadata('Keywords', 'OpenReplay Report'); doc.addMetadata('Creator', 'OpenReplay'); doc.addMetadata('Producer', 'OpenReplay'); - doc.addMetadata('CreationDate', new Date().toISOString()); + doc.addMetadata('CreationDate', now); const parentElement = document.getElementById('report') as HTMLElement; @@ -71,8 +84,12 @@ export default function withReport

    ( pageDiv.id = `page-${index}`; pageDiv.style.backgroundColor = '#f6f6f6'; pageDiv.style.gridAutoRows = 'min-content'; - pageDiv.style.padding = '30px'; + pageDiv.style.padding = '50px'; pageDiv.style.height = '490mm'; + + if (index > 0) { + pageDiv.style.paddingTop = '100px'; + } if (index === 0) { const header = document.getElementById('report-header')?.cloneNode(true) as HTMLElement; @@ -93,8 +110,9 @@ export default function withReport

    ( doc.addImage(pageImage, 'PNG', 0, 0, 210, 0); if (i === pages.length - 1) { addFooters(doc); - doc.save('report.pdf'); + doc.save(fileNameFormat(dashboard.name + '_Report_' + Date.now(), '.pdf')); rportLayer!.innerHTML = ''; + cb(); } else { doc.addPage(); } @@ -105,17 +123,18 @@ export default function withReport

    ( return ( <>

    -
    -
    +
    +
    +
    REPORT
    - Project: {site && site.name} + Project: {site && site.name}
    -
    -
    {dashboard && dashboard.name}
    -
    +
    +
    {dashboard && dashboard.name}
    +
    {period && (period.range.start.format('MMM Do YY') + ' - ' + period.range.end.format('MMM Do YY'))}
    @@ -131,7 +150,7 @@ export default function withReport

    ( opacity: '0', }} >

    - + ) } diff --git a/frontend/app/components/ui/ItemMenu/ItemMenu.js b/frontend/app/components/ui/ItemMenu/ItemMenu.js index e97f6999b..450cd7fc7 100644 --- a/frontend/app/components/ui/ItemMenu/ItemMenu.js +++ b/frontend/app/components/ui/ItemMenu/ItemMenu.js @@ -22,17 +22,21 @@ export default class ItemMenu extends React.PureComponent { render() { const { items, label = "" } = this.props; const { displayed } = this.state; + const parentStyles = label ? 'rounded px-2 py-1 hover:bg-gray-light' : ''; return (
    -
    +
    {label && {label}}
    { this.menuBtnRef = ref; } } - className={cn("w-10 h-10 rounded-full flex items-center justify-center hover:bg-gray-light", { 'bg-gray-light' : displayed })} + className={cn("rounded-full flex items-center justify-center hover:bg-gray-light", { 'bg-gray-light' : displayed, "w-10 h-10" : !label })} role="button" > diff --git a/frontend/app/components/ui/Notification/Notification.js b/frontend/app/components/ui/Notification/Notification.js index c2e69d054..fb4ffb742 100644 --- a/frontend/app/components/ui/Notification/Notification.js +++ b/frontend/app/components/ui/Notification/Notification.js @@ -12,6 +12,7 @@ export default ({ transition = Flip, position = 'bottom-right', autoClose = 3000 autoClose={ autoClose } className={ styles.container } toastClassName={ styles.toast } + closeButton={false} { ...props } /> ); diff --git a/frontend/app/date.js b/frontend/app/date.ts similarity index 94% rename from frontend/app/date.js rename to frontend/app/date.ts index 089c48362..8a9501a86 100644 --- a/frontend/app/date.js +++ b/frontend/app/date.ts @@ -61,7 +61,7 @@ export const getDateFromMill = date => * @param {Date} Date to be checked. * @return {Boolean} */ -export const isToday = (date: Date):boolean => date.hasSame(new Date(), 'day'); +export const isToday = (date: DateTime):boolean => date.hasSame(new Date(), 'day'); export function formatDateTimeDefault(timestamp: number): string { @@ -113,4 +113,8 @@ export const formatMs = (ms: number): string => ms < 1000 ? `${ Math.trunc(ms) } export const convertTimestampToUtcTimestamp = (timestamp: number): number => { return DateTime.fromMillis(timestamp).toUTC().toMillis(); -} \ No newline at end of file +} + +export const nowFormatted = (format?: string): string => { + return DateTime.local().toFormat(format || 'LLL dd, yyyy, hh:mm a'); +} diff --git a/frontend/app/utils.js b/frontend/app/utils.js index f7ae27b5b..bdece4058 100644 --- a/frontend/app/utils.js +++ b/frontend/app/utils.js @@ -27,6 +27,11 @@ export function randomInt(a, b) { return Math.round(rand); } +export const fileNameFormat = (str = '', ext = '') => { + const name = str.replace(/[^a-zA-Z0-9]/g, '_'); + return `${name}${ext}`; +}; + export const toUnderscore = s => s.split(/(?=[A-Z])/).join('_').toLowerCase(); export const getUniqueFilter = keys => diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 294de4294..20678c368 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -46,7 +46,7 @@ "react-router-dom": "^4.3.1", "react-svg-map": "^2.2.0", "react-tippy": "^1.4.0", - "react-toastify": "^5.5.0", + "react-toastify": "^8.2.0", "react-virtualized": "^9.22.2", "recharts": "^2.1.9", "redux": "^4.0.5", @@ -113,12 +113,13 @@ } }, "node_modules/@ampproject/remapping": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.1.2.tgz", - "integrity": "sha512-hoyByceqwKirw7w3Z7gnIIZC3Wx3J484Y3L/cMpXFbr7d9ZQj2mODrirNzcJa+SM3UlpWXYvKV4RlRpFXlWgXg==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", + "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", "dev": true, "dependencies": { - "@jridgewell/trace-mapping": "^0.3.0" + "@jridgewell/gen-mapping": "^0.1.0", + "@jridgewell/trace-mapping": "^0.3.9" }, "engines": { "node": ">=6.0.0" @@ -2263,10 +2264,32 @@ "node": ">=8" } }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", + "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", + "dev": true, + "dependencies": { + "@jridgewell/set-array": "^1.0.0", + "@jridgewell/sourcemap-codec": "^1.4.10" + }, + "engines": { + "node": ">=6.0.0" + } + }, "node_modules/@jridgewell/resolve-uri": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.5.tgz", - "integrity": "sha512-VPeQ7+wH0itvQxnG+lIzWgkysKIr3L9sslimFW55rHMdGu/qCQ5z5h9zq4gI8uBtqkpHhsF4Z/OwExufUCThew==", + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.6.tgz", + "integrity": "sha512-R7xHtBSNm+9SyvpJkdQl+qrM3Hm2fea3Ef197M3mUug+v+yR+Rhfbs7PBtcBUVnIWJ4JcAdjvij+c8hXS9p5aw==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.0.tgz", + "integrity": "sha512-SfJxIxNVYLTsKwzB3MoOQ1yxf4w/E6MdkvTgrgAt1bfxjSrLUoHMKrDOykwN14q65waezZIdqDneUIPh4/sKxg==", "dev": true, "engines": { "node": ">=6.0.0" @@ -2719,9 +2742,9 @@ } }, "node_modules/@socket.io/component-emitter": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.0.0.tgz", - "integrity": "sha512-2pTGuibAXJswAPJjaKisthqS/NOK5ypG4LYT6tEAV0S/mxW0zOIvYvGK0V8w8+SHxAm6vRMSjqSalFXeBAqs+Q==" + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.1.0.tgz", + "integrity": "sha512-+9jVqKhRSpsc591z5vX+X5Yyw+he/HCB4iQ/RYxw35CEPaY1gnsNE43nf9n9AaYjAQrTiI/mOwKUKdUs9vf7Xg==" }, "node_modules/@storybook/addons": { "version": "6.4.22", @@ -4678,10 +4701,10 @@ "dev": true }, "node_modules/@types/node": { - "version": "14.18.13", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.13.tgz", - "integrity": "sha512-Z6/KzgyWOga3pJNS42A+zayjhPbf2zM3hegRQaOPnLOzEi86VV++6FLDWgR1LGrVCRufP/ph2daa3tEa5br1zA==", - "devOptional": true + "version": "14.18.16", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.16.tgz", + "integrity": "sha512-X3bUMdK/VmvrWdoTkz+VCn6nwKwrKCFTHtqwBIaQJNx4RUIBBUFXM00bqPz/DsDd+Icjmzm6/tyYZzeGVqb6/Q==", + "dev": true }, "node_modules/@types/node-fetch": { "version": "2.6.1", @@ -4733,7 +4756,7 @@ "version": "15.7.5", "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz", "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==", - "devOptional": true + "dev": true }, "node_modules/@types/q": { "version": "1.5.5", @@ -4754,10 +4777,10 @@ "optional": true }, "node_modules/@types/react": { - "version": "18.0.6", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.0.6.tgz", - "integrity": "sha512-bPqwzJRzKtfI0mVYr5R+1o9BOE8UEXefwc1LwcBtfnaAn6OoqMhLa/91VA8aeWfDPJt1kHvYKI8RHcQybZLHHA==", - "devOptional": true, + "version": "18.0.8", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.0.8.tgz", + "integrity": "sha512-+j2hk9BzCOrrOSJASi5XiOyBbERk9jG5O73Ya4M0env5Ixi6vUNli4qy994AINcEF+1IEHISYFfIT4zwr++LKw==", + "dev": true, "dependencies": { "@types/prop-types": "*", "@types/scheduler": "*", @@ -4777,7 +4800,7 @@ "version": "3.0.11", "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.0.11.tgz", "integrity": "sha512-sa6P2wJ+CAbgyy4KFssIb/JNMLxFvKF1pCYCSXS8ZMuqZnMsrxqI2E5sPyoTpxoPU/gVZMzr2zjOfg8GIZOMsw==", - "devOptional": true + "dev": true }, "node_modules/@types/resize-observer-browser": { "version": "0.1.7", @@ -4788,7 +4811,7 @@ "version": "0.16.2", "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz", "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==", - "devOptional": true + "dev": true }, "node_modules/@types/source-list-map": { "version": "0.1.2", @@ -5707,9 +5730,9 @@ } }, "node_modules/aws-sdk": { - "version": "2.1119.0", - "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.1119.0.tgz", - "integrity": "sha512-f9xoIWo0/kLVfQ65UCkQ7G+Oxl/mjmdGQNPDcylU8dOjXGfc4cgWxTLThRLCsf9l/4yUjWgo+KtJgY6BWc9UjA==", + "version": "2.1124.0", + "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.1124.0.tgz", + "integrity": "sha512-LIj2EmvduQmyjpSLoDPe2TvRBrGWhJKlCuC7lungN4f+qYPOfVWg6/c9GdP99W0q5p2IqhDkCmQ/ZZBpO1Z/Fg==", "dev": true, "dependencies": { "buffer": "4.9.2", @@ -6091,11 +6114,6 @@ "babylon": "bin/babylon.js" } }, - "node_modules/backo2": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz", - "integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc=" - }, "node_modules/bail": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/bail/-/bail-1.0.5.tgz", @@ -6306,24 +6324,27 @@ "dev": true }, "node_modules/body-parser": { - "version": "1.19.2", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.2.tgz", - "integrity": "sha512-SAAwOxgoCKMGs9uUAUFHygfLAyaniaoun6I8mFY9pRAJL9+Kec34aU+oIjDhTycub1jozEfEwx1W1IuOYxVSFw==", + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.0.tgz", + "integrity": "sha512-DfJ+q6EPcGKZD1QWUjSpqp+Q7bDQTsQIF4zfUAtZ6qk+H/3/QRhg9CEp39ss+/T2vw0+HaidC0ecJj/DRLIaKg==", "dev": true, "dependencies": { "bytes": "3.1.2", "content-type": "~1.0.4", "debug": "2.6.9", - "depd": "~1.1.2", - "http-errors": "1.8.1", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", "iconv-lite": "0.4.24", - "on-finished": "~2.3.0", - "qs": "6.9.7", - "raw-body": "2.4.3", - "type-is": "~1.6.18" + "on-finished": "2.4.1", + "qs": "6.10.3", + "raw-body": "2.5.1", + "type-is": "~1.6.18", + "unpipe": "1.0.0" }, "engines": { - "node": ">= 0.8" + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" } }, "node_modules/body-parser/node_modules/bytes": { @@ -6350,18 +6371,6 @@ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "dev": true }, - "node_modules/body-parser/node_modules/qs": { - "version": "6.9.7", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.9.7.tgz", - "integrity": "sha512-IhMFgUmuNpyRfxA90umL7ByLlgRXu6tIfKPpF5TmcfRLlLCckfP/g3IQmju6jjpu+Hh8rA+2p6A27ZSPOOHdKw==", - "dev": true, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/bonjour": { "version": "3.5.0", "resolved": "https://registry.npmjs.org/bonjour/-/bonjour-3.5.0.tgz", @@ -6612,9 +6621,9 @@ } }, "node_modules/browserslist": { - "version": "4.20.2", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.20.2.tgz", - "integrity": "sha512-CQOBCqp/9pDvDbx3xfMi+86pr4KXIf2FDkTTdeuYw8OxS9t898LA1Khq57gtufFILXpfgsSx5woNgsBgvGjpsA==", + "version": "4.20.3", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.20.3.tgz", + "integrity": "sha512-NBhymBQl1zM0Y5dQT/O+xiLP9/rzOIQdKM/eMJBAq7yBgaB6krIYLGejrwVYnSHZdqjscB1SPuAjHwxjvN6Wdg==", "funding": [ { "type": "opencollective", @@ -6626,10 +6635,10 @@ } ], "dependencies": { - "caniuse-lite": "^1.0.30001317", - "electron-to-chromium": "^1.4.84", + "caniuse-lite": "^1.0.30001332", + "electron-to-chromium": "^1.4.118", "escalade": "^3.1.1", - "node-releases": "^2.0.2", + "node-releases": "^2.0.3", "picocolors": "^1.0.0" }, "bin": { @@ -6921,9 +6930,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001332", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001332.tgz", - "integrity": "sha512-10T30NYOEQtN6C11YGg411yebhvpnC6Z102+B95eAsN0oB6KUs01ivE8u+G6FMIRtIrVlYXhL+LUwQ3/hXwDWw==", + "version": "1.0.30001334", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001334.tgz", + "integrity": "sha512-kbaCEBRRVSoeNs74sCuq92MJyGrMtjWVfhltoHUCW4t4pXFvGjUBrfo47weBRViHkiV3eBYyIsfl956NtHGazw==", "funding": [ { "type": "opencollective", @@ -7379,9 +7388,9 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "node_modules/color-string": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.0.tgz", - "integrity": "sha512-9Mrz2AQLefkH1UvASKj6v6hj/7eWgjnT/cVsR8CumieLoT+g900exWeNogqtweI8dxloXN9BDQTYro1oWu/5CQ==", + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", + "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", "dependencies": { "color-name": "^1.0.0", "simple-swizzle": "^0.2.2" @@ -7662,9 +7671,9 @@ } }, "node_modules/cookie": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", - "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==", + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", + "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", "dev": true, "engines": { "node": ">= 0.6" @@ -7877,9 +7886,9 @@ } }, "node_modules/core-js": { - "version": "3.22.2", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.22.2.tgz", - "integrity": "sha512-Z5I2vzDnEIqO2YhELVMFcL1An2CIsFe9Q7byZhs8c/QxummxZlAHw33TUHbIte987LkisOgL0LwQ1P9D6VISnA==", + "version": "3.22.3", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.22.3.tgz", + "integrity": "sha512-1t+2a/d2lppW1gkLXx3pKPVGbBdxXAkqztvWb1EJ8oF8O2gIGiytzflNiFEehYwVK/t2ryUsGBoOFFvNx95mbg==", "devOptional": true, "hasInstallScript": true, "funding": { @@ -7888,12 +7897,12 @@ } }, "node_modules/core-js-compat": { - "version": "3.22.2", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.22.2.tgz", - "integrity": "sha512-Fns9lU06ZJ07pdfmPMu7OnkIKGPKDzXKIiuGlSvHHapwqMUF2QnnsWwtueFZtSyZEilP0o6iUeHQwpn7LxtLUw==", + "version": "3.22.3", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.22.3.tgz", + "integrity": "sha512-wliMbvPI2idgFWpFe7UEyHMvu6HWgW8WA+HnDRtgzoSDYvXFMpoGX1H3tPDDXrcfUSyXafCLDd7hOeMQHEZxGw==", "dev": true, "dependencies": { - "browserslist": "^4.20.2", + "browserslist": "^4.20.3", "semver": "7.0.0" }, "funding": { @@ -7911,9 +7920,9 @@ } }, "node_modules/core-js-pure": { - "version": "3.22.2", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.22.2.tgz", - "integrity": "sha512-Lb+/XT4WC4PaCWWtZpNPaXmjiNDUe5CJuUtbkMrIM1kb1T/jJoAIp+bkVP/r5lHzMr+ZAAF8XHp7+my6Ol0ysQ==", + "version": "3.22.3", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.22.3.tgz", + "integrity": "sha512-oN88zz7nmKROMy8GOjs+LN+0LedIvbMdnB5XsTlhcOg1WGARt9l0LFg0zohdoFmCsEZ1h2ZbSQ6azj3M+vhzwQ==", "dev": true, "hasInstallScript": true, "funding": { @@ -9168,12 +9177,12 @@ "dev": true }, "node_modules/depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", "dev": true, "engines": { - "node": ">= 0.6" + "node": ">= 0.8" } }, "node_modules/deploy-aws-s3-cloudfront": { @@ -9206,10 +9215,14 @@ } }, "node_modules/destroy": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", - "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=", - "dev": true + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "dev": true, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } }, "node_modules/detab": { "version": "2.0.4", @@ -9364,9 +9377,9 @@ } }, "node_modules/dom-align": { - "version": "1.12.2", - "resolved": "https://registry.npmjs.org/dom-align/-/dom-align-1.12.2.tgz", - "integrity": "sha512-pHuazgqrsTFrGU2WLDdXxCFabkdQDx72ddkraZNih1KsMcN5qsRSTR9O4VJRlwTPCPb5COYg3LOfiMHHcPInHg==" + "version": "1.12.3", + "resolved": "https://registry.npmjs.org/dom-align/-/dom-align-1.12.3.tgz", + "integrity": "sha512-Gj9hZN3a07cbR6zviMUBOMPdWxYhbMI+x+WS0NAIu2zFZmbK8ys9R79g+iG9qLnlCwpFoaB+fKy8Pdv470GsPA==" }, "node_modules/dom-converter": { "version": "0.2.0", @@ -9586,9 +9599,9 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.4.118", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.118.tgz", - "integrity": "sha512-maZIKjnYDvF7Fs35nvVcyr44UcKNwybr93Oba2n3HkKDFAtk0svERkLN/HyczJDS3Fo4wU9th9fUQd09ZLtj1w==" + "version": "1.4.127", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.127.tgz", + "integrity": "sha512-nhD6S8nKI0O2MueC6blNOEZio+/PWppE/pevnf3LOlQA/fKPCrDp2Ao4wx4LFwmIkJpVdFdn2763YWLy9ENIZg==" }, "node_modules/element-resize-detector": { "version": "1.2.4", @@ -9686,19 +9699,15 @@ } }, "node_modules/engine.io-client": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-6.1.1.tgz", - "integrity": "sha512-V05mmDo4gjimYW+FGujoGmmmxRaDsrVr7AXA3ZIfa04MWM1jOfZfUwou0oNqhNwy/votUDvGDt4JA4QF4e0b4g==", + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-6.2.1.tgz", + "integrity": "sha512-5cu7xubVxEwoB6O9hJ6Zfu990yBVjXfyMlE1ZvfO5L8if3Kvc9bgDNEapV0C5pMp+5Om1UZFnljxoOuFm6dBKA==", "dependencies": { - "@socket.io/component-emitter": "~3.0.0", + "@socket.io/component-emitter": "~3.1.0", "debug": "~4.3.1", - "engine.io-parser": "~5.0.0", - "has-cors": "1.1.0", - "parseqs": "0.0.6", - "parseuri": "0.0.6", + "engine.io-parser": "~5.0.3", "ws": "~8.2.3", - "xmlhttprequest-ssl": "~2.0.0", - "yeast": "0.1.2" + "xmlhttprequest-ssl": "~2.0.0" } }, "node_modules/engine.io-client/node_modules/ws": { @@ -9902,9 +9911,9 @@ } }, "node_modules/es5-shim": { - "version": "4.6.5", - "resolved": "https://registry.npmjs.org/es5-shim/-/es5-shim-4.6.5.tgz", - "integrity": "sha512-vfQ4UAai8szn0sAubCy97xnZ4sJVDD1gt/Grn736hg8D7540wemIb1YPrYZSTqlM2H69EQX1or4HU/tSwRTI3w==", + "version": "4.6.6", + "resolved": "https://registry.npmjs.org/es5-shim/-/es5-shim-4.6.6.tgz", + "integrity": "sha512-Ay5QQE78I2WKUoZVZjL0AIuiIjsmXwZGkyCTH9+n6J1anPbb0ymDA27ASa2Lt0rhOpAlEKy2W0d17gJ1XOQ5eQ==", "dev": true, "engines": { "node": ">=0.4.0" @@ -10615,38 +10624,39 @@ } }, "node_modules/express": { - "version": "4.17.3", - "resolved": "https://registry.npmjs.org/express/-/express-4.17.3.tgz", - "integrity": "sha512-yuSQpz5I+Ch7gFrPCk4/c+dIBKlQUxtgwqzph132bsT6qhuzss6I8cLJQz7B3rFblzd6wtcI0ZbGltH/C4LjUg==", + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/express/-/express-4.18.0.tgz", + "integrity": "sha512-EJEXxiTQJS3lIPrU1AE2vRuT7X7E+0KBbpm5GSoK524yl0K8X+er8zS2P14E64eqsVNoWbMCT7MpmQ+ErAhgRg==", "dev": true, "dependencies": { "accepts": "~1.3.8", "array-flatten": "1.1.1", - "body-parser": "1.19.2", + "body-parser": "1.20.0", "content-disposition": "0.5.4", "content-type": "~1.0.4", - "cookie": "0.4.2", + "cookie": "0.5.0", "cookie-signature": "1.0.6", "debug": "2.6.9", - "depd": "~1.1.2", + "depd": "2.0.0", "encodeurl": "~1.0.2", "escape-html": "~1.0.3", "etag": "~1.8.1", - "finalhandler": "~1.1.2", + "finalhandler": "1.2.0", "fresh": "0.5.2", + "http-errors": "2.0.0", "merge-descriptors": "1.0.1", "methods": "~1.1.2", - "on-finished": "~2.3.0", + "on-finished": "2.4.1", "parseurl": "~1.3.3", "path-to-regexp": "0.1.7", "proxy-addr": "~2.0.7", - "qs": "6.9.7", + "qs": "6.10.3", "range-parser": "~1.2.1", "safe-buffer": "5.2.1", - "send": "0.17.2", - "serve-static": "1.14.2", + "send": "0.18.0", + "serve-static": "1.15.0", "setprototypeof": "1.2.0", - "statuses": "~1.5.0", + "statuses": "2.0.1", "type-is": "~1.6.18", "utils-merge": "1.0.1", "vary": "~1.1.2" @@ -10670,18 +10680,6 @@ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "dev": true }, - "node_modules/express/node_modules/qs": { - "version": "6.9.7", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.9.7.tgz", - "integrity": "sha512-IhMFgUmuNpyRfxA90umL7ByLlgRXu6tIfKPpF5TmcfRLlLCckfP/g3IQmju6jjpu+Hh8rA+2p6A27ZSPOOHdKw==", - "dev": true, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/express/node_modules/safe-buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", @@ -11011,17 +11009,17 @@ } }, "node_modules/finalhandler": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", - "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", "dev": true, "dependencies": { "debug": "2.6.9", "encodeurl": "~1.0.2", "escape-html": "~1.0.3", - "on-finished": "~2.3.0", + "on-finished": "2.4.1", "parseurl": "~1.3.3", - "statuses": "~1.5.0", + "statuses": "2.0.1", "unpipe": "~1.0.0" }, "engines": { @@ -11435,9 +11433,9 @@ } }, "node_modules/fork-ts-checker-webpack-plugin": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-6.5.1.tgz", - "integrity": "sha512-x1wumpHOEf4gDROmKTaB6i4/Q6H3LwmjVO7fIX47vBwlZbtPjU33hgoMuD/Q/y6SU8bnuYSoN6ZQOLshGp0T/g==", + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-6.5.2.tgz", + "integrity": "sha512-m5cUmF30xkZ7h4tWUgTAcEaKmUW7tfyUyTqNNOz7OxWJ0v1VWKTcOvH8FWHUwSjlW/356Ijc9vi3XfcPstpQKA==", "dev": true, "dependencies": { "@babel/code-frame": "^7.8.3", @@ -12130,11 +12128,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/has-cors": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz", - "integrity": "sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk=" - }, "node_modules/has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", @@ -12834,19 +12827,19 @@ "dev": true }, "node_modules/http-errors": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz", - "integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", "dev": true, "dependencies": { - "depd": "~1.1.2", + "depd": "2.0.0", "inherits": "2.0.4", "setprototypeof": "1.2.0", - "statuses": ">= 1.5.0 < 2", + "statuses": "2.0.1", "toidentifier": "1.0.1" }, "engines": { - "node": ">= 0.6" + "node": ">= 0.8" } }, "node_modules/http-parser-js": { @@ -14402,6 +14395,12 @@ "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=", "dev": true }, + "node_modules/lodash.sortby": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", + "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=", + "dev": true + }, "node_modules/lodash.uniq": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", @@ -14907,9 +14906,9 @@ "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==" }, "node_modules/minio": { - "version": "7.0.27", - "resolved": "https://registry.npmjs.org/minio/-/minio-7.0.27.tgz", - "integrity": "sha512-0eFFob4ZzqsK0lsuM2cRddDkdFrfQGKCpD77XbFzFClhQL4w85CXC3UwfIe0rBRmLzFMZ5Y9bph8Dpny/COrQQ==", + "version": "7.0.28", + "resolved": "https://registry.npmjs.org/minio/-/minio-7.0.28.tgz", + "integrity": "sha512-4Oua0R73oCxxmxhh2NiXDJo4Md159I/mdG8ybu6351leMQoB2Sy8S4HmgG6CxuPlEJ0h9M8/WyaI2CARDeeDTQ==", "dev": true, "dependencies": { "async": "^3.1.0", @@ -14931,7 +14930,7 @@ "xml2js": "^0.4.15" }, "engines": { - "node": ">8 <16.8.0" + "node": ">8 <=18" } }, "node_modules/minipass": { @@ -15445,9 +15444,9 @@ } }, "node_modules/node-releases": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.3.tgz", - "integrity": "sha512-maHFz6OLqYxz+VQyCAtA3PTX4UP/53pa05fyDNc9CwjvJ0yEh6+xBwKsgCxMNhS8taUKBFYxfuiaD9U/55iFaw==" + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.4.tgz", + "integrity": "sha512-gbMzqQtTtDz/00jQzZ21PQzdI9PyLYqUSvD0p3naOhX4odFji0ZxYdnVwPTxmSwkmxhcFImpozceidSG+AgoPQ==" }, "node_modules/normalize-package-data": { "version": "2.5.0", @@ -15826,9 +15825,9 @@ "dev": true }, "node_modules/on-finished": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", "dev": true, "dependencies": { "ee-first": "1.1.1" @@ -16212,16 +16211,6 @@ "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", "dev": true }, - "node_modules/parseqs": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.6.tgz", - "integrity": "sha512-jeAGzMDbfSHHA091hr0r31eYfTig+29g3GKKE/PPbEQ65X0lmMwlEoqmhzu0iztID5uJpZsFlUPDP8ThPL7M8w==" - }, - "node_modules/parseuri": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.6.tgz", - "integrity": "sha512-AUjen8sAkGgao7UyCX6Ahv0gIK2fABKmYjvP4xmy5JaKvcbTRueIqIPHLAfq30xJddqSE033IOMUSOMCcK3Sow==" - }, "node_modules/parseurl": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", @@ -18480,13 +18469,13 @@ } }, "node_modules/raw-body": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.3.tgz", - "integrity": "sha512-UlTNLIcu0uzb4D2f4WltY6cVjLi+/jEN4lgEUj3E04tpMDpUlkBo/eSn6zou9hum2VMNpCCUone0O0WeJim07g==", + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", + "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", "dev": true, "dependencies": { "bytes": "3.1.2", - "http-errors": "1.8.1", + "http-errors": "2.0.0", "iconv-lite": "0.4.24", "unpipe": "1.0.0" }, @@ -18821,12 +18810,12 @@ } }, "node_modules/react-draggable": { - "version": "4.4.4", - "resolved": "https://registry.npmjs.org/react-draggable/-/react-draggable-4.4.4.tgz", - "integrity": "sha512-6e0WdcNLwpBx/YIDpoyd2Xb04PB0elrDrulKUgdrIlwuYvxh5Ok9M+F8cljm8kPXXs43PmMzek9RrB1b7mLMqA==", + "version": "4.4.5", + "resolved": "https://registry.npmjs.org/react-draggable/-/react-draggable-4.4.5.tgz", + "integrity": "sha512-OMHzJdyJbYTZo4uQE393fHcqqPYsEtkjfMgvCHr6rejT+Ezn4OZbNyGH50vv+SunC1RMvwOTSWkEODQLzw1M9g==", "dependencies": { "clsx": "^1.1.1", - "prop-types": "^15.6.0" + "prop-types": "^15.8.1" }, "peerDependencies": { "react": ">= 16.3.0", @@ -18961,9 +18950,9 @@ } }, "node_modules/react-popper-tooltip/node_modules/react-popper": { - "version": "2.2.5", - "resolved": "https://registry.npmjs.org/react-popper/-/react-popper-2.2.5.tgz", - "integrity": "sha512-kxGkS80eQGtLl18+uig1UIf9MKixFSyPxglsgLBxlYnyDf65BiY9B3nZSc6C9XUNDgStROB0fMQlTEz1KxGddw==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/react-popper/-/react-popper-2.3.0.tgz", + "integrity": "sha512-e1hj8lL3uM+sgSR4Lxzn5h1GxBlpa4CQz0XLF8kx4MDrDRWY0Ena4c97PUeSX9i5W3UAfDP0z0FXCTQkoXUl3Q==", "dev": true, "dependencies": { "react-fast-compare": "^3.0.1", @@ -18971,7 +18960,8 @@ }, "peerDependencies": { "@popperjs/core": "^2.0.0", - "react": "^16.8.0 || ^17" + "react": "^16.8.0 || ^17 || ^18", + "react-dom": "^16.8.0 || ^17 || ^18" } }, "node_modules/react-redux": { @@ -19124,29 +19114,6 @@ "react-dom": "^15.0.0 || ^16.0.0 || ^17.0.0" } }, - "node_modules/react-smooth/node_modules/dom-helpers": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-3.4.0.tgz", - "integrity": "sha512-LnuPJ+dwqKDIyotW1VzmOZ5TONUN7CwkCR5hrgawTUbkBGYdeoNLZo6nNfGkCrjtE1nXXaj7iMMpDa8/d9WoIA==", - "dependencies": { - "@babel/runtime": "^7.1.2" - } - }, - "node_modules/react-smooth/node_modules/react-transition-group": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-2.9.0.tgz", - "integrity": "sha512-+HzNTCHpeQyl4MJ/bdE0u6XRMe9+XG/+aL4mCxVN4DnPBQ0/5bfHWPDuOZUzYdMj94daZaZdCCc1Dzt9R/xSSg==", - "dependencies": { - "dom-helpers": "^3.4.0", - "loose-envify": "^1.4.0", - "prop-types": "^15.6.2", - "react-lifecycles-compat": "^3.0.4" - }, - "peerDependencies": { - "react": ">=15.0.0", - "react-dom": ">=15.0.0" - } - }, "node_modules/react-svg-map": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/react-svg-map/-/react-svg-map-2.2.0.tgz", @@ -19200,33 +19167,38 @@ } }, "node_modules/react-toastify": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/react-toastify/-/react-toastify-5.5.0.tgz", - "integrity": "sha512-jsVme7jALIFGRyQsri/g4YTsRuaaGI70T6/ikjwZMB4mwTZaCWqj5NqxhGrRStKlJc5npXKKvKeqTiRGQl78LQ==", + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/react-toastify/-/react-toastify-8.2.0.tgz", + "integrity": "sha512-Pg2Ju7NngAamarFvLwqrFomJ57u/Ay6i6zfLurt/qPynWkAkOthu6vxfqYpJCyNhHRhR4hu7+bySSeWWJu6PAg==", "dependencies": { - "@babel/runtime": "^7.4.2", - "classnames": "^2.2.6", - "prop-types": "^15.7.2", - "react-transition-group": "^4" + "clsx": "^1.1.1" + }, + "peerDependencies": { + "react": ">=16", + "react-dom": ">=16" + } + }, + "node_modules/react-transition-group": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-2.9.0.tgz", + "integrity": "sha512-+HzNTCHpeQyl4MJ/bdE0u6XRMe9+XG/+aL4mCxVN4DnPBQ0/5bfHWPDuOZUzYdMj94daZaZdCCc1Dzt9R/xSSg==", + "dependencies": { + "dom-helpers": "^3.4.0", + "loose-envify": "^1.4.0", + "prop-types": "^15.6.2", + "react-lifecycles-compat": "^3.0.4" }, "peerDependencies": { "react": ">=15.0.0", "react-dom": ">=15.0.0" } }, - "node_modules/react-transition-group": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.2.tgz", - "integrity": "sha512-/RNYfRAMlZwDSr6z4zNKV6xu53/e2BuaBbGhbyYIXTrmgu/bGHzmqOs7mJSJBHy9Ud+ApHx3QjrkKSp1pxvlFg==", + "node_modules/react-transition-group/node_modules/dom-helpers": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-3.4.0.tgz", + "integrity": "sha512-LnuPJ+dwqKDIyotW1VzmOZ5TONUN7CwkCR5hrgawTUbkBGYdeoNLZo6nNfGkCrjtE1nXXaj7iMMpDa8/d9WoIA==", "dependencies": { - "@babel/runtime": "^7.5.5", - "dom-helpers": "^5.0.1", - "loose-envify": "^1.4.0", - "prop-types": "^15.6.2" - }, - "peerDependencies": { - "react": ">=16.6.0", - "react-dom": ">=16.6.0" + "@babel/runtime": "^7.1.2" } }, "node_modules/react-virtualized": { @@ -20280,24 +20252,24 @@ } }, "node_modules/send": { - "version": "0.17.2", - "resolved": "https://registry.npmjs.org/send/-/send-0.17.2.tgz", - "integrity": "sha512-UJYB6wFSJE3G00nEivR5rgWp8c2xXvJ3OPWPhmuteU0IKj8nKbG3DrjiOmLwpnHGYWAVwA69zmTm++YG0Hmwww==", + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", "dev": true, "dependencies": { "debug": "2.6.9", - "depd": "~1.1.2", - "destroy": "~1.0.4", + "depd": "2.0.0", + "destroy": "1.2.0", "encodeurl": "~1.0.2", "escape-html": "~1.0.3", "etag": "~1.8.1", "fresh": "0.5.2", - "http-errors": "1.8.1", + "http-errors": "2.0.0", "mime": "1.6.0", "ms": "2.1.3", - "on-finished": "~2.3.0", + "on-finished": "2.4.1", "range-parser": "~1.2.1", - "statuses": "~1.5.0" + "statuses": "2.0.1" }, "engines": { "node": ">= 0.8.0" @@ -20388,6 +20360,15 @@ "ms": "2.0.0" } }, + "node_modules/serve-index/node_modules/depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, "node_modules/serve-index/node_modules/http-errors": { "version": "1.6.3", "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", @@ -20421,16 +20402,25 @@ "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", "dev": true }, + "node_modules/serve-index/node_modules/statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, "node_modules/serve-static": { - "version": "1.14.2", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.2.tgz", - "integrity": "sha512-+TMNA9AFxUEGuC0z2mevogSnn9MXKb4fa7ngeRMJaaGv8vTwnIEkKi+QGvPt33HSnf8pRS+WGM0EbMtCJLKMBQ==", + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", "dev": true, "dependencies": { "encodeurl": "~1.0.2", "escape-html": "~1.0.3", "parseurl": "~1.3.3", - "send": "0.17.2" + "send": "0.18.0" }, "engines": { "node": ">= 0.8.0" @@ -20798,27 +20788,25 @@ } }, "node_modules/socket.io-client": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-4.4.1.tgz", - "integrity": "sha512-N5C/L5fLNha5Ojd7Yeb/puKcPWWcoB/A09fEjjNsg91EDVr5twk/OEyO6VT9dlLSUNY85NpW6KBhVMvaLKQ3vQ==", + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-4.5.0.tgz", + "integrity": "sha512-HW61c1G7OrYGxaI79WRn17+b03iBCdvhBj4iqyXHBoL5M8w2MSO/vChsjA93knG4GYEai1/vbXWJna9dzxXtSg==", "dependencies": { - "@socket.io/component-emitter": "~3.0.0", - "backo2": "~1.0.2", + "@socket.io/component-emitter": "~3.1.0", "debug": "~4.3.2", - "engine.io-client": "~6.1.1", - "parseuri": "0.0.6", - "socket.io-parser": "~4.1.1" + "engine.io-client": "~6.2.1", + "socket.io-parser": "~4.2.0" }, "engines": { "node": ">=10.0.0" } }, "node_modules/socket.io-parser": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.1.2.tgz", - "integrity": "sha512-j3kk71QLJuyQ/hh5F/L2t1goqzdTL0gvDzuhTuNSwihfuFUrcSji0qFZmJJPtG6Rmug153eOPsUizeirf1IIog==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.0.tgz", + "integrity": "sha512-tLfmEwcEwnlQTxFB7jibL/q2+q8dlVQzj4JdRLJ/W/G1+Fu9VSxCx1Lo+n1HvXxKnM//dUuD0xgiA7tQf57Vng==", "dependencies": { - "@socket.io/component-emitter": "~3.0.0", + "@socket.io/component-emitter": "~3.1.0", "debug": "~4.3.1" }, "engines": { @@ -21224,12 +21212,12 @@ } }, "node_modules/statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", "dev": true, "engines": { - "node": ">= 0.6" + "node": ">= 0.8" } }, "node_modules/store2": { @@ -21935,14 +21923,14 @@ } }, "node_modules/terser": { - "version": "5.12.1", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.12.1.tgz", - "integrity": "sha512-NXbs+7nisos5E+yXwAD+y7zrcTkMqb0dEJxIGtSKPdCBzopf7ni4odPul2aechpV7EXNvOudYOX2bb5tln1jbQ==", + "version": "5.13.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.13.0.tgz", + "integrity": "sha512-sgQ99P+fRBM1jAYzN9RTnD/xEWx/7LZgYTCRgmYriSq1wxxqiQPJgXkkLBBuwySDWJ2PP0PnVQyuf4xLUuH4Ng==", "dev": true, "dependencies": { "acorn": "^8.5.0", "commander": "^2.20.0", - "source-map": "~0.7.2", + "source-map": "~0.8.0-beta.0", "source-map-support": "~0.5.20" }, "bin": { @@ -22219,9 +22207,9 @@ "dev": true }, "node_modules/terser/node_modules/acorn": { - "version": "8.7.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz", - "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==", + "version": "8.7.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.1.tgz", + "integrity": "sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A==", "dev": true, "bin": { "acorn": "bin/acorn" @@ -22236,6 +22224,44 @@ "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", "dev": true }, + "node_modules/terser/node_modules/source-map": { + "version": "0.8.0-beta.0", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.8.0-beta.0.tgz", + "integrity": "sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==", + "dev": true, + "dependencies": { + "whatwg-url": "^7.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/terser/node_modules/tr46": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", + "integrity": "sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=", + "dev": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/terser/node_modules/webidl-conversions": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", + "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", + "dev": true + }, + "node_modules/terser/node_modules/whatwg-url": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", + "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", + "dev": true, + "dependencies": { + "lodash.sortby": "^4.7.0", + "tr46": "^1.0.1", + "webidl-conversions": "^4.0.2" + } + }, "node_modules/test-exclude": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", @@ -22500,9 +22526,9 @@ } }, "node_modules/ts-loader": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-8.3.0.tgz", - "integrity": "sha512-MgGly4I6cStsJy27ViE32UoqxPTN9Xly4anxxVyaIWR+9BGxboV4EyJBGfR3RePV7Ksjj3rHmPZJeIt+7o4Vag==", + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-8.4.0.tgz", + "integrity": "sha512-6nFY3IZ2//mrPc+ImY3hNWx1vCHyEhl6V+wLmL4CZcm6g1CqX7UKrkc6y0i4FwcfOhxyMPCfaEvh20f4r9GNpw==", "dev": true, "dependencies": { "chalk": "^4.1.0", @@ -22684,9 +22710,9 @@ } }, "node_modules/typed-css-modules": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/typed-css-modules/-/typed-css-modules-0.7.1.tgz", - "integrity": "sha512-WaWHnLa3HBTCuOCDRDB3wfqoH9ouTxdLGQwzVBxV5x+nbPIr5ZkCrCb4yfU4D1bkzNprrTKTU2ETkYVOLGFmVA==", + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/typed-css-modules/-/typed-css-modules-0.7.2.tgz", + "integrity": "sha512-R3guXrQ8ry/yhlfvNmkVY4J3+FtKaEdwqrvgSvFpVY0ieYQHqhhBW0RwfE4hnG4m29Ef/4IE0tBsk/UKplmJkA==", "dev": true, "dependencies": { "@types/css-modules-loader-core": "^1.1.0", @@ -22932,14 +22958,14 @@ } }, "node_modules/unbox-primitive": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz", - "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", + "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", "dev": true, "dependencies": { - "function-bind": "^1.1.1", - "has-bigints": "^1.0.1", - "has-symbols": "^1.0.2", + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", "which-boxed-primitive": "^1.0.2" }, "funding": { @@ -22947,9 +22973,9 @@ } }, "node_modules/underscore": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.2.tgz", - "integrity": "sha512-ekY1NhRzq0B08g4bGuX4wd2jZx5GnKz6mKSqFL4nqBlfyMGiG10gDFhDTMEfYmDL6Jy0FUIZp7wiRB+0BP7J2g==", + "version": "1.13.3", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.3.tgz", + "integrity": "sha512-QvjkYpiD+dJJraRA8+dGAU4i7aBbb2s0S3jA45TFOvg2VgqvdCDd/3N6CqA8gluk1W91GLoXg5enMUx560QzuA==", "dev": true }, "node_modules/unfetch": { @@ -23377,14 +23403,14 @@ } }, "node_modules/use-latest": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/use-latest/-/use-latest-1.2.0.tgz", - "integrity": "sha512-d2TEuG6nSLKQLAfW3By8mKr8HurOlTkul0sOpxbClIv4SQ4iOd7BYr7VIzdbktUCnv7dua/60xzd8igMU6jmyw==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/use-latest/-/use-latest-1.2.1.tgz", + "integrity": "sha512-xA+AVm/Wlg3e2P/JiItTziwS7FK92LWrDB0p+hgXloIMuVCeJJ8v6f0eeHyPZaJrM+usM1FkFfbNCrJGs8A/zw==", "dependencies": { - "use-isomorphic-layout-effect": "^1.0.0" + "use-isomorphic-layout-effect": "^1.1.1" }, "peerDependencies": { - "react": "^16.8.0 || ^17.0.0" + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" }, "peerDependenciesMeta": { "@types/react": { @@ -25811,11 +25837,6 @@ "node": ">=12" } }, - "node_modules/yeast": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz", - "integrity": "sha1-AI4G2AlDIMNy28L47XagymyKxBk=" - }, "node_modules/yocto-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", @@ -25841,12 +25862,13 @@ }, "dependencies": { "@ampproject/remapping": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.1.2.tgz", - "integrity": "sha512-hoyByceqwKirw7w3Z7gnIIZC3Wx3J484Y3L/cMpXFbr7d9ZQj2mODrirNzcJa+SM3UlpWXYvKV4RlRpFXlWgXg==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", + "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", "dev": true, "requires": { - "@jridgewell/trace-mapping": "^0.3.0" + "@jridgewell/gen-mapping": "^0.1.0", + "@jridgewell/trace-mapping": "^0.3.9" } }, "@babel/cli": { @@ -27359,10 +27381,26 @@ "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", "dev": true }, + "@jridgewell/gen-mapping": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", + "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", + "dev": true, + "requires": { + "@jridgewell/set-array": "^1.0.0", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, "@jridgewell/resolve-uri": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.5.tgz", - "integrity": "sha512-VPeQ7+wH0itvQxnG+lIzWgkysKIr3L9sslimFW55rHMdGu/qCQ5z5h9zq4gI8uBtqkpHhsF4Z/OwExufUCThew==", + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.6.tgz", + "integrity": "sha512-R7xHtBSNm+9SyvpJkdQl+qrM3Hm2fea3Ef197M3mUug+v+yR+Rhfbs7PBtcBUVnIWJ4JcAdjvij+c8hXS9p5aw==", + "dev": true + }, + "@jridgewell/set-array": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.0.tgz", + "integrity": "sha512-SfJxIxNVYLTsKwzB3MoOQ1yxf4w/E6MdkvTgrgAt1bfxjSrLUoHMKrDOykwN14q65waezZIdqDneUIPh4/sKxg==", "dev": true }, "@jridgewell/sourcemap-codec": { @@ -27695,9 +27733,9 @@ "integrity": "sha512-dOlCBKnDw4iShaIsH/bxujKTM18+2TOAsYz+KSc11Am38H4q5Xw8Bbz97ZYdrVNM+um3p7w86Bvvmcn9q+5+eQ==" }, "@socket.io/component-emitter": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.0.0.tgz", - "integrity": "sha512-2pTGuibAXJswAPJjaKisthqS/NOK5ypG4LYT6tEAV0S/mxW0zOIvYvGK0V8w8+SHxAm6vRMSjqSalFXeBAqs+Q==" + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.1.0.tgz", + "integrity": "sha512-+9jVqKhRSpsc591z5vX+X5Yyw+he/HCB4iQ/RYxw35CEPaY1gnsNE43nf9n9AaYjAQrTiI/mOwKUKdUs9vf7Xg==" }, "@storybook/addons": { "version": "6.4.22", @@ -29206,10 +29244,10 @@ "dev": true }, "@types/node": { - "version": "14.18.13", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.13.tgz", - "integrity": "sha512-Z6/KzgyWOga3pJNS42A+zayjhPbf2zM3hegRQaOPnLOzEi86VV++6FLDWgR1LGrVCRufP/ph2daa3tEa5br1zA==", - "devOptional": true + "version": "14.18.16", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.16.tgz", + "integrity": "sha512-X3bUMdK/VmvrWdoTkz+VCn6nwKwrKCFTHtqwBIaQJNx4RUIBBUFXM00bqPz/DsDd+Icjmzm6/tyYZzeGVqb6/Q==", + "dev": true }, "@types/node-fetch": { "version": "2.6.1", @@ -29261,7 +29299,7 @@ "version": "15.7.5", "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz", "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==", - "devOptional": true + "dev": true }, "@types/q": { "version": "1.5.5", @@ -29282,10 +29320,10 @@ "optional": true }, "@types/react": { - "version": "18.0.6", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.0.6.tgz", - "integrity": "sha512-bPqwzJRzKtfI0mVYr5R+1o9BOE8UEXefwc1LwcBtfnaAn6OoqMhLa/91VA8aeWfDPJt1kHvYKI8RHcQybZLHHA==", - "devOptional": true, + "version": "18.0.8", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.0.8.tgz", + "integrity": "sha512-+j2hk9BzCOrrOSJASi5XiOyBbERk9jG5O73Ya4M0env5Ixi6vUNli4qy994AINcEF+1IEHISYFfIT4zwr++LKw==", + "dev": true, "requires": { "@types/prop-types": "*", "@types/scheduler": "*", @@ -29296,7 +29334,7 @@ "version": "3.0.11", "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.0.11.tgz", "integrity": "sha512-sa6P2wJ+CAbgyy4KFssIb/JNMLxFvKF1pCYCSXS8ZMuqZnMsrxqI2E5sPyoTpxoPU/gVZMzr2zjOfg8GIZOMsw==", - "devOptional": true + "dev": true } } }, @@ -29318,7 +29356,7 @@ "version": "0.16.2", "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz", "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==", - "devOptional": true + "dev": true }, "@types/source-list-map": { "version": "0.1.2", @@ -29683,15 +29721,13 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz", "integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==", - "dev": true, - "requires": {} + "dev": true }, "ajv-keywords": { "version": "3.5.2", "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "dev": true, - "requires": {} + "dev": true }, "ansi-align": { "version": "3.0.1", @@ -30095,9 +30131,9 @@ "dev": true }, "aws-sdk": { - "version": "2.1119.0", - "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.1119.0.tgz", - "integrity": "sha512-f9xoIWo0/kLVfQ65UCkQ7G+Oxl/mjmdGQNPDcylU8dOjXGfc4cgWxTLThRLCsf9l/4yUjWgo+KtJgY6BWc9UjA==", + "version": "2.1124.0", + "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.1124.0.tgz", + "integrity": "sha512-LIj2EmvduQmyjpSLoDPe2TvRBrGWhJKlCuC7lungN4f+qYPOfVWg6/c9GdP99W0q5p2IqhDkCmQ/ZZBpO1Z/Fg==", "dev": true, "requires": { "buffer": "4.9.2", @@ -30320,8 +30356,7 @@ "version": "0.3.8", "resolved": "https://registry.npmjs.org/babel-plugin-named-asset-import/-/babel-plugin-named-asset-import-0.3.8.tgz", "integrity": "sha512-WXiAc++qo7XcJ1ZnTYGtLxmBCVbddAml3CEXgWaBzNzLNoxtQ8AiGEFDMOhot9XjTCQbvP5E77Fj9Gk924f00Q==", - "dev": true, - "requires": {} + "dev": true }, "babel-plugin-polyfill-corejs2": { "version": "0.3.1", @@ -30408,11 +30443,6 @@ "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==", "dev": true }, - "backo2": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz", - "integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc=" - }, "bail": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/bail/-/bail-1.0.5.tgz", @@ -30571,21 +30601,23 @@ "dev": true }, "body-parser": { - "version": "1.19.2", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.2.tgz", - "integrity": "sha512-SAAwOxgoCKMGs9uUAUFHygfLAyaniaoun6I8mFY9pRAJL9+Kec34aU+oIjDhTycub1jozEfEwx1W1IuOYxVSFw==", + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.0.tgz", + "integrity": "sha512-DfJ+q6EPcGKZD1QWUjSpqp+Q7bDQTsQIF4zfUAtZ6qk+H/3/QRhg9CEp39ss+/T2vw0+HaidC0ecJj/DRLIaKg==", "dev": true, "requires": { "bytes": "3.1.2", "content-type": "~1.0.4", "debug": "2.6.9", - "depd": "~1.1.2", - "http-errors": "1.8.1", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", "iconv-lite": "0.4.24", - "on-finished": "~2.3.0", - "qs": "6.9.7", - "raw-body": "2.4.3", - "type-is": "~1.6.18" + "on-finished": "2.4.1", + "qs": "6.10.3", + "raw-body": "2.5.1", + "type-is": "~1.6.18", + "unpipe": "1.0.0" }, "dependencies": { "bytes": { @@ -30608,12 +30640,6 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "dev": true - }, - "qs": { - "version": "6.9.7", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.9.7.tgz", - "integrity": "sha512-IhMFgUmuNpyRfxA90umL7ByLlgRXu6tIfKPpF5TmcfRLlLCckfP/g3IQmju6jjpu+Hh8rA+2p6A27ZSPOOHdKw==", - "dev": true } } }, @@ -30829,14 +30855,14 @@ } }, "browserslist": { - "version": "4.20.2", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.20.2.tgz", - "integrity": "sha512-CQOBCqp/9pDvDbx3xfMi+86pr4KXIf2FDkTTdeuYw8OxS9t898LA1Khq57gtufFILXpfgsSx5woNgsBgvGjpsA==", + "version": "4.20.3", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.20.3.tgz", + "integrity": "sha512-NBhymBQl1zM0Y5dQT/O+xiLP9/rzOIQdKM/eMJBAq7yBgaB6krIYLGejrwVYnSHZdqjscB1SPuAjHwxjvN6Wdg==", "requires": { - "caniuse-lite": "^1.0.30001317", - "electron-to-chromium": "^1.4.84", + "caniuse-lite": "^1.0.30001332", + "electron-to-chromium": "^1.4.118", "escalade": "^3.1.1", - "node-releases": "^2.0.2", + "node-releases": "^2.0.3", "picocolors": "^1.0.0" } }, @@ -31069,9 +31095,9 @@ } }, "caniuse-lite": { - "version": "1.0.30001332", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001332.tgz", - "integrity": "sha512-10T30NYOEQtN6C11YGg411yebhvpnC6Z102+B95eAsN0oB6KUs01ivE8u+G6FMIRtIrVlYXhL+LUwQ3/hXwDWw==" + "version": "1.0.30001334", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001334.tgz", + "integrity": "sha512-kbaCEBRRVSoeNs74sCuq92MJyGrMtjWVfhltoHUCW4t4pXFvGjUBrfo47weBRViHkiV3eBYyIsfl956NtHGazw==" }, "canvg": { "version": "3.0.10", @@ -31188,8 +31214,7 @@ "version": "5.2.2", "resolved": "https://registry.npmjs.org/circular-dependency-plugin/-/circular-dependency-plugin-5.2.2.tgz", "integrity": "sha512-g38K9Cm5WRwlaH6g03B9OEz/0qRizI+2I7n+Gz+L5DxXJAPAiWQvwlYNm1V1jkdpUv95bOe/ASm2vfi/G560jQ==", - "dev": true, - "requires": {} + "dev": true }, "class-utils": { "version": "0.3.6", @@ -31427,9 +31452,9 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "color-string": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.0.tgz", - "integrity": "sha512-9Mrz2AQLefkH1UvASKj6v6hj/7eWgjnT/cVsR8CumieLoT+g900exWeNogqtweI8dxloXN9BDQTYro1oWu/5CQ==", + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", + "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", "requires": { "color-name": "^1.0.0", "simple-swizzle": "^0.2.2" @@ -31658,9 +31683,9 @@ } }, "cookie": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", - "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==", + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", + "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", "dev": true }, "cookie-signature": { @@ -31831,18 +31856,18 @@ } }, "core-js": { - "version": "3.22.2", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.22.2.tgz", - "integrity": "sha512-Z5I2vzDnEIqO2YhELVMFcL1An2CIsFe9Q7byZhs8c/QxummxZlAHw33TUHbIte987LkisOgL0LwQ1P9D6VISnA==", + "version": "3.22.3", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.22.3.tgz", + "integrity": "sha512-1t+2a/d2lppW1gkLXx3pKPVGbBdxXAkqztvWb1EJ8oF8O2gIGiytzflNiFEehYwVK/t2ryUsGBoOFFvNx95mbg==", "devOptional": true }, "core-js-compat": { - "version": "3.22.2", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.22.2.tgz", - "integrity": "sha512-Fns9lU06ZJ07pdfmPMu7OnkIKGPKDzXKIiuGlSvHHapwqMUF2QnnsWwtueFZtSyZEilP0o6iUeHQwpn7LxtLUw==", + "version": "3.22.3", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.22.3.tgz", + "integrity": "sha512-wliMbvPI2idgFWpFe7UEyHMvu6HWgW8WA+HnDRtgzoSDYvXFMpoGX1H3tPDDXrcfUSyXafCLDd7hOeMQHEZxGw==", "dev": true, "requires": { - "browserslist": "^4.20.2", + "browserslist": "^4.20.3", "semver": "7.0.0" }, "dependencies": { @@ -31855,9 +31880,9 @@ } }, "core-js-pure": { - "version": "3.22.2", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.22.2.tgz", - "integrity": "sha512-Lb+/XT4WC4PaCWWtZpNPaXmjiNDUe5CJuUtbkMrIM1kb1T/jJoAIp+bkVP/r5lHzMr+ZAAF8XHp7+my6Ol0ysQ==", + "version": "3.22.3", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.22.3.tgz", + "integrity": "sha512-oN88zz7nmKROMy8GOjs+LN+0LedIvbMdnB5XsTlhcOg1WGARt9l0LFg0zohdoFmCsEZ1h2ZbSQ6azj3M+vhzwQ==", "dev": true }, "core-util-is": { @@ -32248,8 +32273,7 @@ "version": "6.2.2", "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.2.2.tgz", "integrity": "sha512-Ufadglr88ZLsrvS11gjeu/40Lw74D9Am/Jpr3LlYm5Q4ZP5KdlUhG+6u2EjyXeZcxmZ2h1ebCKngDjolpeLHpg==", - "dev": true, - "requires": {} + "dev": true }, "css-line-break": { "version": "2.1.0", @@ -32569,8 +32593,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-3.1.0.tgz", "integrity": "sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA==", - "dev": true, - "requires": {} + "dev": true }, "csso": { "version": "4.2.0", @@ -32895,9 +32918,9 @@ "dev": true }, "depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", "dev": true }, "deploy-aws-s3-cloudfront": { @@ -32927,9 +32950,9 @@ } }, "destroy": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", - "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", "dev": true }, "detab": { @@ -33063,9 +33086,9 @@ } }, "dom-align": { - "version": "1.12.2", - "resolved": "https://registry.npmjs.org/dom-align/-/dom-align-1.12.2.tgz", - "integrity": "sha512-pHuazgqrsTFrGU2WLDdXxCFabkdQDx72ddkraZNih1KsMcN5qsRSTR9O4VJRlwTPCPb5COYg3LOfiMHHcPInHg==" + "version": "1.12.3", + "resolved": "https://registry.npmjs.org/dom-align/-/dom-align-1.12.3.tgz", + "integrity": "sha512-Gj9hZN3a07cbR6zviMUBOMPdWxYhbMI+x+WS0NAIu2zFZmbK8ys9R79g+iG9qLnlCwpFoaB+fKy8Pdv470GsPA==" }, "dom-converter": { "version": "0.2.0", @@ -33275,9 +33298,9 @@ "dev": true }, "electron-to-chromium": { - "version": "1.4.118", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.118.tgz", - "integrity": "sha512-maZIKjnYDvF7Fs35nvVcyr44UcKNwybr93Oba2n3HkKDFAtk0svERkLN/HyczJDS3Fo4wU9th9fUQd09ZLtj1w==" + "version": "1.4.127", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.127.tgz", + "integrity": "sha512-nhD6S8nKI0O2MueC6blNOEZio+/PWppE/pevnf3LOlQA/fKPCrDp2Ao4wx4LFwmIkJpVdFdn2763YWLy9ENIZg==" }, "element-resize-detector": { "version": "1.2.4", @@ -33367,26 +33390,21 @@ } }, "engine.io-client": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-6.1.1.tgz", - "integrity": "sha512-V05mmDo4gjimYW+FGujoGmmmxRaDsrVr7AXA3ZIfa04MWM1jOfZfUwou0oNqhNwy/votUDvGDt4JA4QF4e0b4g==", + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-6.2.1.tgz", + "integrity": "sha512-5cu7xubVxEwoB6O9hJ6Zfu990yBVjXfyMlE1ZvfO5L8if3Kvc9bgDNEapV0C5pMp+5Om1UZFnljxoOuFm6dBKA==", "requires": { - "@socket.io/component-emitter": "~3.0.0", + "@socket.io/component-emitter": "~3.1.0", "debug": "~4.3.1", - "engine.io-parser": "~5.0.0", - "has-cors": "1.1.0", - "parseqs": "0.0.6", - "parseuri": "0.0.6", + "engine.io-parser": "~5.0.3", "ws": "~8.2.3", - "xmlhttprequest-ssl": "~2.0.0", - "yeast": "0.1.2" + "xmlhttprequest-ssl": "~2.0.0" }, "dependencies": { "ws": { "version": "8.2.3", "resolved": "https://registry.npmjs.org/ws/-/ws-8.2.3.tgz", - "integrity": "sha512-wBuoj1BDpC6ZQ1B7DWQBYVLphPWkm8i9Y0/3YdHjHKHiohOJ1ws+3OccDWtH+PoC9DZD5WOTrJvNbWvjS6JWaA==", - "requires": {} + "integrity": "sha512-wBuoj1BDpC6ZQ1B7DWQBYVLphPWkm8i9Y0/3YdHjHKHiohOJ1ws+3OccDWtH+PoC9DZD5WOTrJvNbWvjS6JWaA==" } } }, @@ -33539,9 +33557,9 @@ } }, "es5-shim": { - "version": "4.6.5", - "resolved": "https://registry.npmjs.org/es5-shim/-/es5-shim-4.6.5.tgz", - "integrity": "sha512-vfQ4UAai8szn0sAubCy97xnZ4sJVDD1gt/Grn736hg8D7540wemIb1YPrYZSTqlM2H69EQX1or4HU/tSwRTI3w==", + "version": "4.6.6", + "resolved": "https://registry.npmjs.org/es5-shim/-/es5-shim-4.6.6.tgz", + "integrity": "sha512-Ay5QQE78I2WKUoZVZjL0AIuiIjsmXwZGkyCTH9+n6J1anPbb0ymDA27ASa2Lt0rhOpAlEKy2W0d17gJ1XOQ5eQ==", "dev": true }, "es6-error": { @@ -34105,38 +34123,39 @@ } }, "express": { - "version": "4.17.3", - "resolved": "https://registry.npmjs.org/express/-/express-4.17.3.tgz", - "integrity": "sha512-yuSQpz5I+Ch7gFrPCk4/c+dIBKlQUxtgwqzph132bsT6qhuzss6I8cLJQz7B3rFblzd6wtcI0ZbGltH/C4LjUg==", + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/express/-/express-4.18.0.tgz", + "integrity": "sha512-EJEXxiTQJS3lIPrU1AE2vRuT7X7E+0KBbpm5GSoK524yl0K8X+er8zS2P14E64eqsVNoWbMCT7MpmQ+ErAhgRg==", "dev": true, "requires": { "accepts": "~1.3.8", "array-flatten": "1.1.1", - "body-parser": "1.19.2", + "body-parser": "1.20.0", "content-disposition": "0.5.4", "content-type": "~1.0.4", - "cookie": "0.4.2", + "cookie": "0.5.0", "cookie-signature": "1.0.6", "debug": "2.6.9", - "depd": "~1.1.2", + "depd": "2.0.0", "encodeurl": "~1.0.2", "escape-html": "~1.0.3", "etag": "~1.8.1", - "finalhandler": "~1.1.2", + "finalhandler": "1.2.0", "fresh": "0.5.2", + "http-errors": "2.0.0", "merge-descriptors": "1.0.1", "methods": "~1.1.2", - "on-finished": "~2.3.0", + "on-finished": "2.4.1", "parseurl": "~1.3.3", "path-to-regexp": "0.1.7", "proxy-addr": "~2.0.7", - "qs": "6.9.7", + "qs": "6.10.3", "range-parser": "~1.2.1", "safe-buffer": "5.2.1", - "send": "0.17.2", - "serve-static": "1.14.2", + "send": "0.18.0", + "serve-static": "1.15.0", "setprototypeof": "1.2.0", - "statuses": "~1.5.0", + "statuses": "2.0.1", "type-is": "~1.6.18", "utils-merge": "1.0.1", "vary": "~1.1.2" @@ -34157,12 +34176,6 @@ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "dev": true }, - "qs": { - "version": "6.9.7", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.9.7.tgz", - "integrity": "sha512-IhMFgUmuNpyRfxA90umL7ByLlgRXu6tIfKPpF5TmcfRLlLCckfP/g3IQmju6jjpu+Hh8rA+2p6A27ZSPOOHdKw==", - "dev": true - }, "safe-buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", @@ -34438,17 +34451,17 @@ } }, "finalhandler": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", - "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", "dev": true, "requires": { "debug": "2.6.9", "encodeurl": "~1.0.2", "escape-html": "~1.0.3", - "on-finished": "~2.3.0", + "on-finished": "2.4.1", "parseurl": "~1.3.3", - "statuses": "~1.5.0", + "statuses": "2.0.1", "unpipe": "~1.0.0" }, "dependencies": { @@ -34783,9 +34796,9 @@ } }, "fork-ts-checker-webpack-plugin": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-6.5.1.tgz", - "integrity": "sha512-x1wumpHOEf4gDROmKTaB6i4/Q6H3LwmjVO7fIX47vBwlZbtPjU33hgoMuD/Q/y6SU8bnuYSoN6ZQOLshGp0T/g==", + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-6.5.2.tgz", + "integrity": "sha512-m5cUmF30xkZ7h4tWUgTAcEaKmUW7tfyUyTqNNOz7OxWJ0v1VWKTcOvH8FWHUwSjlW/356Ijc9vi3XfcPstpQKA==", "dev": true, "requires": { "@babel/code-frame": "^7.8.3", @@ -35303,11 +35316,6 @@ "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", "dev": true }, - "has-cors": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz", - "integrity": "sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk=" - }, "has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", @@ -35877,15 +35885,15 @@ "dev": true }, "http-errors": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz", - "integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", "dev": true, "requires": { - "depd": "~1.1.2", + "depd": "2.0.0", "inherits": "2.0.4", "setprototypeof": "1.2.0", - "statuses": ">= 1.5.0 < 2", + "statuses": "2.0.1", "toidentifier": "1.0.1" } }, @@ -37064,6 +37072,12 @@ "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=", "dev": true }, + "lodash.sortby": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", + "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=", + "dev": true + }, "lodash.uniq": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", @@ -37176,8 +37190,7 @@ "version": "7.1.7", "resolved": "https://registry.npmjs.org/markdown-to-jsx/-/markdown-to-jsx-7.1.7.tgz", "integrity": "sha512-VI3TyyHlGkO8uFle0IOibzpO1c1iJDcXcS/zBrQrXQQvJ2tpdwVzVZ7XdKsyRz1NdRmre4dqQkMZzUHaKIG/1w==", - "dev": true, - "requires": {} + "dev": true }, "md5-file": { "version": "5.0.0", @@ -37467,9 +37480,9 @@ "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==" }, "minio": { - "version": "7.0.27", - "resolved": "https://registry.npmjs.org/minio/-/minio-7.0.27.tgz", - "integrity": "sha512-0eFFob4ZzqsK0lsuM2cRddDkdFrfQGKCpD77XbFzFClhQL4w85CXC3UwfIe0rBRmLzFMZ5Y9bph8Dpny/COrQQ==", + "version": "7.0.28", + "resolved": "https://registry.npmjs.org/minio/-/minio-7.0.28.tgz", + "integrity": "sha512-4Oua0R73oCxxmxhh2NiXDJo4Md159I/mdG8ybu6351leMQoB2Sy8S4HmgG6CxuPlEJ0h9M8/WyaI2CARDeeDTQ==", "dev": true, "requires": { "async": "^3.1.0", @@ -37634,8 +37647,7 @@ "mobx-react-lite": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/mobx-react-lite/-/mobx-react-lite-3.3.0.tgz", - "integrity": "sha512-U/kMSFtV/bNVgY01FuiGWpRkaQVHozBq5CEBZltFvPt4FcV111hEWkgwqVg9GPPZSEuEdV438PEz8mk8mKpYlA==", - "requires": {} + "integrity": "sha512-U/kMSFtV/bNVgY01FuiGWpRkaQVHozBq5CEBZltFvPt4FcV111hEWkgwqVg9GPPZSEuEdV438PEz8mk8mKpYlA==" }, "moment": { "version": "2.29.3", @@ -37917,9 +37929,9 @@ } }, "node-releases": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.3.tgz", - "integrity": "sha512-maHFz6OLqYxz+VQyCAtA3PTX4UP/53pa05fyDNc9CwjvJ0yEh6+xBwKsgCxMNhS8taUKBFYxfuiaD9U/55iFaw==" + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.4.tgz", + "integrity": "sha512-gbMzqQtTtDz/00jQzZ21PQzdI9PyLYqUSvD0p3naOhX4odFji0ZxYdnVwPTxmSwkmxhcFImpozceidSG+AgoPQ==" }, "normalize-package-data": { "version": "2.5.0", @@ -38213,9 +38225,9 @@ "dev": true }, "on-finished": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", "dev": true, "requires": { "ee-first": "1.1.1" @@ -38521,16 +38533,6 @@ "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", "dev": true }, - "parseqs": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.6.tgz", - "integrity": "sha512-jeAGzMDbfSHHA091hr0r31eYfTig+29g3GKKE/PPbEQ65X0lmMwlEoqmhzu0iztID5uJpZsFlUPDP8ThPL7M8w==" - }, - "parseuri": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.6.tgz", - "integrity": "sha512-AUjen8sAkGgao7UyCX6Ahv0gIK2fABKmYjvP4xmy5JaKvcbTRueIqIPHLAfq30xJddqSE033IOMUSOMCcK3Sow==" - }, "parseurl": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", @@ -38920,29 +38922,25 @@ "version": "5.1.1", "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-5.1.1.tgz", "integrity": "sha512-5JscyFmvkUxz/5/+TB3QTTT9Gi9jHkcn8dcmmuN68JQcv3aQg4y88yEHHhwFB52l/NkaJ43O0dbksGMAo49nfQ==", - "dev": true, - "requires": {} + "dev": true }, "postcss-discard-duplicates": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-5.1.0.tgz", "integrity": "sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw==", - "dev": true, - "requires": {} + "dev": true }, "postcss-discard-empty": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-5.1.1.tgz", "integrity": "sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A==", - "dev": true, - "requires": {} + "dev": true }, "postcss-discard-overridden": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-5.1.0.tgz", "integrity": "sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw==", - "dev": true, - "requires": {} + "dev": true }, "postcss-flexbugs-fixes": { "version": "4.2.1", @@ -39616,8 +39614,7 @@ "version": "5.1.0", "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-5.1.0.tgz", "integrity": "sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg==", - "dev": true, - "requires": {} + "dev": true }, "postcss-normalize-display-values": { "version": "5.1.0", @@ -40325,13 +40322,13 @@ "dev": true }, "raw-body": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.3.tgz", - "integrity": "sha512-UlTNLIcu0uzb4D2f4WltY6cVjLi+/jEN4lgEUj3E04tpMDpUlkBo/eSn6zou9hum2VMNpCCUone0O0WeJim07g==", + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", + "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", "dev": true, "requires": { "bytes": "3.1.2", - "http-errors": "1.8.1", + "http-errors": "2.0.0", "iconv-lite": "0.4.24", "unpipe": "1.0.0" }, @@ -40466,27 +40463,23 @@ "react-circular-progressbar": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/react-circular-progressbar/-/react-circular-progressbar-2.0.4.tgz", - "integrity": "sha512-OfX0ThSxRYEVGaQSt0DlXfyl5w4DbXHsXetyeivmoQrh9xA9bzVPHNf8aAhOIiwiaxX2WYWpLDB3gcpsDJ9oww==", - "requires": {} + "integrity": "sha512-OfX0ThSxRYEVGaQSt0DlXfyl5w4DbXHsXetyeivmoQrh9xA9bzVPHNf8aAhOIiwiaxX2WYWpLDB3gcpsDJ9oww==" }, "react-codemirror2": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/react-codemirror2/-/react-codemirror2-5.1.0.tgz", - "integrity": "sha512-Cksbgbviuf2mJfMyrKmcu7ycK6zX/ukuQO8dvRZdFWqATf5joalhjFc6etnBdGCcPA2LbhIwz+OPnQxLN/j1Fw==", - "requires": {} + "integrity": "sha512-Cksbgbviuf2mJfMyrKmcu7ycK6zX/ukuQO8dvRZdFWqATf5joalhjFc6etnBdGCcPA2LbhIwz+OPnQxLN/j1Fw==" }, "react-colorful": { "version": "5.5.1", "resolved": "https://registry.npmjs.org/react-colorful/-/react-colorful-5.5.1.tgz", "integrity": "sha512-M1TJH2X3RXEt12sWkpa6hLc/bbYS0H6F4rIqjQZ+RxNBstpY67d9TrFXtqdZwhpmBXcCwEi7stKqFue3ZRkiOg==", - "dev": true, - "requires": {} + "dev": true }, "react-confirm": { "version": "0.1.24", "resolved": "https://registry.npmjs.org/react-confirm/-/react-confirm-0.1.24.tgz", - "integrity": "sha512-96qA+mbZyBRmh/3Y5aDgrYLwLndbaRjkP3GlXQtPEQbIH0P66xGcHJ7ui6y/MN85AZWq/V3drA1fJOiEcVkAVA==", - "requires": {} + "integrity": "sha512-96qA+mbZyBRmh/3Y5aDgrYLwLndbaRjkP3GlXQtPEQbIH0P66xGcHJ7ui6y/MN85AZWq/V3drA1fJOiEcVkAVA==" }, "react-datepicker": { "version": "2.16.0", @@ -40579,8 +40572,7 @@ "version": "2.2.2", "resolved": "https://registry.npmjs.org/react-docgen-typescript/-/react-docgen-typescript-2.2.2.tgz", "integrity": "sha512-tvg2ZtOpOi6QDwsb3GZhOjDkkX0h8Z2gipvTg6OVMUyoYoURhEiRNePT8NZItTVCDh39JJHnLdfCOkzoLbFnTg==", - "dev": true, - "requires": {} + "dev": true }, "react-dom": { "version": "16.14.0", @@ -40594,12 +40586,12 @@ } }, "react-draggable": { - "version": "4.4.4", - "resolved": "https://registry.npmjs.org/react-draggable/-/react-draggable-4.4.4.tgz", - "integrity": "sha512-6e0WdcNLwpBx/YIDpoyd2Xb04PB0elrDrulKUgdrIlwuYvxh5Ok9M+F8cljm8kPXXs43PmMzek9RrB1b7mLMqA==", + "version": "4.4.5", + "resolved": "https://registry.npmjs.org/react-draggable/-/react-draggable-4.4.5.tgz", + "integrity": "sha512-OMHzJdyJbYTZo4uQE393fHcqqPYsEtkjfMgvCHr6rejT+Ezn4OZbNyGH50vv+SunC1RMvwOTSWkEODQLzw1M9g==", "requires": { "clsx": "^1.1.1", - "prop-types": "^15.6.0" + "prop-types": "^15.8.1" } }, "react-fast-compare": { @@ -40658,8 +40650,7 @@ "react-lazyload": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/react-lazyload/-/react-lazyload-3.2.0.tgz", - "integrity": "sha512-zJlrG8QyVZz4+xkYZH5v1w3YaP5wEFaYSUWC4CT9UXfK75IfRAIEdnyIUF+dXr3kX2MOtL1lUaZmaQZqrETwgw==", - "requires": {} + "integrity": "sha512-zJlrG8QyVZz4+xkYZH5v1w3YaP5wEFaYSUWC4CT9UXfK75IfRAIEdnyIUF+dXr3kX2MOtL1lUaZmaQZqrETwgw==" }, "react-lifecycles-compat": { "version": "3.0.4", @@ -40669,8 +40660,7 @@ "react-onclickoutside": { "version": "6.12.1", "resolved": "https://registry.npmjs.org/react-onclickoutside/-/react-onclickoutside-6.12.1.tgz", - "integrity": "sha512-a5Q7CkWznBRUWPmocCvE8b6lEYw1s6+opp/60dCunhO+G6E4tDTO2Sd2jKE+leEnnrLAE2Wj5DlDHNqj5wPv1Q==", - "requires": {} + "integrity": "sha512-a5Q7CkWznBRUWPmocCvE8b6lEYw1s6+opp/60dCunhO+G6E4tDTO2Sd2jKE+leEnnrLAE2Wj5DlDHNqj5wPv1Q==" }, "react-popper": { "version": "1.3.11", @@ -40698,9 +40688,9 @@ }, "dependencies": { "react-popper": { - "version": "2.2.5", - "resolved": "https://registry.npmjs.org/react-popper/-/react-popper-2.2.5.tgz", - "integrity": "sha512-kxGkS80eQGtLl18+uig1UIf9MKixFSyPxglsgLBxlYnyDf65BiY9B3nZSc6C9XUNDgStROB0fMQlTEz1KxGddw==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/react-popper/-/react-popper-2.3.0.tgz", + "integrity": "sha512-e1hj8lL3uM+sgSR4Lxzn5h1GxBlpa4CQz0XLF8kx4MDrDRWY0Ena4c97PUeSX9i5W3UAfDP0z0FXCTQkoXUl3Q==", "dev": true, "requires": { "react-fast-compare": "^3.0.1", @@ -40841,27 +40831,6 @@ "fast-equals": "^2.0.0", "raf": "^3.4.0", "react-transition-group": "2.9.0" - }, - "dependencies": { - "dom-helpers": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-3.4.0.tgz", - "integrity": "sha512-LnuPJ+dwqKDIyotW1VzmOZ5TONUN7CwkCR5hrgawTUbkBGYdeoNLZo6nNfGkCrjtE1nXXaj7iMMpDa8/d9WoIA==", - "requires": { - "@babel/runtime": "^7.1.2" - } - }, - "react-transition-group": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-2.9.0.tgz", - "integrity": "sha512-+HzNTCHpeQyl4MJ/bdE0u6XRMe9+XG/+aL4mCxVN4DnPBQ0/5bfHWPDuOZUzYdMj94daZaZdCCc1Dzt9R/xSSg==", - "requires": { - "dom-helpers": "^3.4.0", - "loose-envify": "^1.4.0", - "prop-types": "^15.6.2", - "react-lifecycles-compat": "^3.0.4" - } - } } }, "react-svg-map": { @@ -40904,25 +40873,32 @@ } }, "react-toastify": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/react-toastify/-/react-toastify-5.5.0.tgz", - "integrity": "sha512-jsVme7jALIFGRyQsri/g4YTsRuaaGI70T6/ikjwZMB4mwTZaCWqj5NqxhGrRStKlJc5npXKKvKeqTiRGQl78LQ==", + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/react-toastify/-/react-toastify-8.2.0.tgz", + "integrity": "sha512-Pg2Ju7NngAamarFvLwqrFomJ57u/Ay6i6zfLurt/qPynWkAkOthu6vxfqYpJCyNhHRhR4hu7+bySSeWWJu6PAg==", "requires": { - "@babel/runtime": "^7.4.2", - "classnames": "^2.2.6", - "prop-types": "^15.7.2", - "react-transition-group": "^4" + "clsx": "^1.1.1" } }, "react-transition-group": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.2.tgz", - "integrity": "sha512-/RNYfRAMlZwDSr6z4zNKV6xu53/e2BuaBbGhbyYIXTrmgu/bGHzmqOs7mJSJBHy9Ud+ApHx3QjrkKSp1pxvlFg==", + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-2.9.0.tgz", + "integrity": "sha512-+HzNTCHpeQyl4MJ/bdE0u6XRMe9+XG/+aL4mCxVN4DnPBQ0/5bfHWPDuOZUzYdMj94daZaZdCCc1Dzt9R/xSSg==", "requires": { - "@babel/runtime": "^7.5.5", - "dom-helpers": "^5.0.1", + "dom-helpers": "^3.4.0", "loose-envify": "^1.4.0", - "prop-types": "^15.6.2" + "prop-types": "^15.6.2", + "react-lifecycles-compat": "^3.0.4" + }, + "dependencies": { + "dom-helpers": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-3.4.0.tgz", + "integrity": "sha512-LnuPJ+dwqKDIyotW1VzmOZ5TONUN7CwkCR5hrgawTUbkBGYdeoNLZo6nNfGkCrjtE1nXXaj7iMMpDa8/d9WoIA==", + "requires": { + "@babel/runtime": "^7.1.2" + } + } } }, "react-virtualized": { @@ -41110,14 +41086,12 @@ "redux-immutable": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/redux-immutable/-/redux-immutable-4.0.0.tgz", - "integrity": "sha1-Ohoy32Y2ZGK2NpHw4dw15HK7yfM=", - "requires": {} + "integrity": "sha1-Ohoy32Y2ZGK2NpHw4dw15HK7yfM=" }, "redux-thunk": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/redux-thunk/-/redux-thunk-2.4.1.tgz", - "integrity": "sha512-OOYGNY5Jy2TWvTL1KgAlVy6dcx3siPJ1wTq741EPyUKfn6W6nChdICjZwCd0p8AZBs5kWpZlbkXW2nE/zjUa+Q==", - "requires": {} + "integrity": "sha512-OOYGNY5Jy2TWvTL1KgAlVy6dcx3siPJ1wTq741EPyUKfn6W6nChdICjZwCd0p8AZBs5kWpZlbkXW2nE/zjUa+Q==" }, "refractor": { "version": "3.6.0", @@ -41758,24 +41732,24 @@ "dev": true }, "send": { - "version": "0.17.2", - "resolved": "https://registry.npmjs.org/send/-/send-0.17.2.tgz", - "integrity": "sha512-UJYB6wFSJE3G00nEivR5rgWp8c2xXvJ3OPWPhmuteU0IKj8nKbG3DrjiOmLwpnHGYWAVwA69zmTm++YG0Hmwww==", + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", "dev": true, "requires": { "debug": "2.6.9", - "depd": "~1.1.2", - "destroy": "~1.0.4", + "depd": "2.0.0", + "destroy": "1.2.0", "encodeurl": "~1.0.2", "escape-html": "~1.0.3", "etag": "~1.8.1", "fresh": "0.5.2", - "http-errors": "1.8.1", + "http-errors": "2.0.0", "mime": "1.6.0", "ms": "2.1.3", - "on-finished": "~2.3.0", + "on-finished": "2.4.1", "range-parser": "~1.2.1", - "statuses": "~1.5.0" + "statuses": "2.0.1" }, "dependencies": { "debug": { @@ -41863,6 +41837,12 @@ "ms": "2.0.0" } }, + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", + "dev": true + }, "http-errors": { "version": "1.6.3", "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", @@ -41892,19 +41872,25 @@ "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", "dev": true + }, + "statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", + "dev": true } } }, "serve-static": { - "version": "1.14.2", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.2.tgz", - "integrity": "sha512-+TMNA9AFxUEGuC0z2mevogSnn9MXKb4fa7ngeRMJaaGv8vTwnIEkKi+QGvPt33HSnf8pRS+WGM0EbMtCJLKMBQ==", + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", "dev": true, "requires": { "encodeurl": "~1.0.2", "escape-html": "~1.0.3", "parseurl": "~1.3.3", - "send": "0.17.2" + "send": "0.18.0" } }, "set-blocking": { @@ -42211,24 +42197,22 @@ } }, "socket.io-client": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-4.4.1.tgz", - "integrity": "sha512-N5C/L5fLNha5Ojd7Yeb/puKcPWWcoB/A09fEjjNsg91EDVr5twk/OEyO6VT9dlLSUNY85NpW6KBhVMvaLKQ3vQ==", + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-4.5.0.tgz", + "integrity": "sha512-HW61c1G7OrYGxaI79WRn17+b03iBCdvhBj4iqyXHBoL5M8w2MSO/vChsjA93knG4GYEai1/vbXWJna9dzxXtSg==", "requires": { - "@socket.io/component-emitter": "~3.0.0", - "backo2": "~1.0.2", + "@socket.io/component-emitter": "~3.1.0", "debug": "~4.3.2", - "engine.io-client": "~6.1.1", - "parseuri": "0.0.6", - "socket.io-parser": "~4.1.1" + "engine.io-client": "~6.2.1", + "socket.io-parser": "~4.2.0" } }, "socket.io-parser": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.1.2.tgz", - "integrity": "sha512-j3kk71QLJuyQ/hh5F/L2t1goqzdTL0gvDzuhTuNSwihfuFUrcSji0qFZmJJPtG6Rmug153eOPsUizeirf1IIog==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.0.tgz", + "integrity": "sha512-tLfmEwcEwnlQTxFB7jibL/q2+q8dlVQzj4JdRLJ/W/G1+Fu9VSxCx1Lo+n1HvXxKnM//dUuD0xgiA7tQf57Vng==", "requires": { - "@socket.io/component-emitter": "~3.0.0", + "@socket.io/component-emitter": "~3.1.0", "debug": "~4.3.1" } }, @@ -42564,9 +42548,9 @@ } }, "statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", "dev": true }, "store2": { @@ -43138,21 +43122,21 @@ } }, "terser": { - "version": "5.12.1", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.12.1.tgz", - "integrity": "sha512-NXbs+7nisos5E+yXwAD+y7zrcTkMqb0dEJxIGtSKPdCBzopf7ni4odPul2aechpV7EXNvOudYOX2bb5tln1jbQ==", + "version": "5.13.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.13.0.tgz", + "integrity": "sha512-sgQ99P+fRBM1jAYzN9RTnD/xEWx/7LZgYTCRgmYriSq1wxxqiQPJgXkkLBBuwySDWJ2PP0PnVQyuf4xLUuH4Ng==", "dev": true, "requires": { "acorn": "^8.5.0", "commander": "^2.20.0", - "source-map": "~0.7.2", + "source-map": "~0.8.0-beta.0", "source-map-support": "~0.5.20" }, "dependencies": { "acorn": { - "version": "8.7.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz", - "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==", + "version": "8.7.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.1.tgz", + "integrity": "sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A==", "dev": true }, "commander": { @@ -43160,6 +43144,41 @@ "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", "dev": true + }, + "source-map": { + "version": "0.8.0-beta.0", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.8.0-beta.0.tgz", + "integrity": "sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==", + "dev": true, + "requires": { + "whatwg-url": "^7.0.0" + } + }, + "tr46": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", + "integrity": "sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=", + "dev": true, + "requires": { + "punycode": "^2.1.0" + } + }, + "webidl-conversions": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", + "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", + "dev": true + }, + "whatwg-url": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", + "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", + "dev": true, + "requires": { + "lodash.sortby": "^4.7.0", + "tr46": "^1.0.1", + "webidl-conversions": "^4.0.2" + } } } }, @@ -43567,9 +43586,9 @@ "dev": true }, "ts-loader": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-8.3.0.tgz", - "integrity": "sha512-MgGly4I6cStsJy27ViE32UoqxPTN9Xly4anxxVyaIWR+9BGxboV4EyJBGfR3RePV7Ksjj3rHmPZJeIt+7o4Vag==", + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-8.4.0.tgz", + "integrity": "sha512-6nFY3IZ2//mrPc+ImY3hNWx1vCHyEhl6V+wLmL4CZcm6g1CqX7UKrkc6y0i4FwcfOhxyMPCfaEvh20f4r9GNpw==", "dev": true, "requires": { "chalk": "^4.1.0", @@ -43701,9 +43720,9 @@ } }, "typed-css-modules": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/typed-css-modules/-/typed-css-modules-0.7.1.tgz", - "integrity": "sha512-WaWHnLa3HBTCuOCDRDB3wfqoH9ouTxdLGQwzVBxV5x+nbPIr5ZkCrCb4yfU4D1bkzNprrTKTU2ETkYVOLGFmVA==", + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/typed-css-modules/-/typed-css-modules-0.7.2.tgz", + "integrity": "sha512-R3guXrQ8ry/yhlfvNmkVY4J3+FtKaEdwqrvgSvFpVY0ieYQHqhhBW0RwfE4hnG4m29Ef/4IE0tBsk/UKplmJkA==", "dev": true, "requires": { "@types/css-modules-loader-core": "^1.1.0", @@ -43876,21 +43895,21 @@ "optional": true }, "unbox-primitive": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz", - "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", + "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", "dev": true, "requires": { - "function-bind": "^1.1.1", - "has-bigints": "^1.0.1", - "has-symbols": "^1.0.2", + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", "which-boxed-primitive": "^1.0.2" } }, "underscore": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.2.tgz", - "integrity": "sha512-ekY1NhRzq0B08g4bGuX4wd2jZx5GnKz6mKSqFL4nqBlfyMGiG10gDFhDTMEfYmDL6Jy0FUIZp7wiRB+0BP7J2g==", + "version": "1.13.3", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.3.tgz", + "integrity": "sha512-QvjkYpiD+dJJraRA8+dGAU4i7aBbb2s0S3jA45TFOvg2VgqvdCDd/3N6CqA8gluk1W91GLoXg5enMUx560QzuA==", "dev": true }, "unfetch": { @@ -44202,21 +44221,19 @@ "use-composed-ref": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/use-composed-ref/-/use-composed-ref-1.3.0.tgz", - "integrity": "sha512-GLMG0Jc/jiKov/3Ulid1wbv3r54K9HlMW29IWcDFPEqFkSO2nS0MuefWgMJpeHQ9YJeXDL3ZUF+P3jdXlZX/cQ==", - "requires": {} + "integrity": "sha512-GLMG0Jc/jiKov/3Ulid1wbv3r54K9HlMW29IWcDFPEqFkSO2nS0MuefWgMJpeHQ9YJeXDL3ZUF+P3jdXlZX/cQ==" }, "use-isomorphic-layout-effect": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/use-isomorphic-layout-effect/-/use-isomorphic-layout-effect-1.1.2.tgz", - "integrity": "sha512-49L8yCO3iGT/ZF9QttjwLF/ZD9Iwto5LnH5LmEdk/6cFmXddqi2ulF0edxTwjj+7mqvpVVGQWvbXZdn32wRSHA==", - "requires": {} + "integrity": "sha512-49L8yCO3iGT/ZF9QttjwLF/ZD9Iwto5LnH5LmEdk/6cFmXddqi2ulF0edxTwjj+7mqvpVVGQWvbXZdn32wRSHA==" }, "use-latest": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/use-latest/-/use-latest-1.2.0.tgz", - "integrity": "sha512-d2TEuG6nSLKQLAfW3By8mKr8HurOlTkul0sOpxbClIv4SQ4iOd7BYr7VIzdbktUCnv7dua/60xzd8igMU6jmyw==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/use-latest/-/use-latest-1.2.1.tgz", + "integrity": "sha512-xA+AVm/Wlg3e2P/JiItTziwS7FK92LWrDB0p+hgXloIMuVCeJJ8v6f0eeHyPZaJrM+usM1FkFfbNCrJGs8A/zw==", "requires": { - "use-isomorphic-layout-effect": "^1.0.0" + "use-isomorphic-layout-effect": "^1.1.1" } }, "util": { @@ -45783,8 +45800,7 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/webpack-filter-warnings-plugin/-/webpack-filter-warnings-plugin-1.2.1.tgz", "integrity": "sha512-Ez6ytc9IseDMLPo0qCuNNYzgtUl8NovOqjIq4uAU8LTD4uoa1w1KpZyyzFtLTEMZpkkOkLfL9eN+KGYdk1Qtwg==", - "dev": true, - "requires": {} + "dev": true }, "webpack-hot-middleware": { "version": "2.25.1", @@ -46095,8 +46111,7 @@ "version": "8.5.0", "resolved": "https://registry.npmjs.org/ws/-/ws-8.5.0.tgz", "integrity": "sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg==", - "dev": true, - "requires": {} + "dev": true }, "xml": { "version": "1.0.1", @@ -46183,11 +46198,6 @@ "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", "dev": true }, - "yeast": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz", - "integrity": "sha1-AI4G2AlDIMNy28L47XagymyKxBk=" - }, "yocto-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", diff --git a/frontend/package.json b/frontend/package.json index 6e683ad27..9111bf8f1 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -53,7 +53,7 @@ "react-router-dom": "^4.3.1", "react-svg-map": "^2.2.0", "react-tippy": "^1.4.0", - "react-toastify": "^5.5.0", + "react-toastify": "^8.2.0", "react-virtualized": "^9.22.2", "recharts": "^2.1.9", "redux": "^4.0.5", From 122705b4c7e4b4d767122d10ea354174fcf71021 Mon Sep 17 00:00:00 2001 From: Taha Yassine Kraiem Date: Fri, 29 Apr 2022 13:19:11 +0200 Subject: [PATCH 30/91] feat(db): EE fixed widget-size for upgrade --- ee/scripts/helm/db/init_dbs/postgresql/1.6.0/1.6.0.sql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ee/scripts/helm/db/init_dbs/postgresql/1.6.0/1.6.0.sql b/ee/scripts/helm/db/init_dbs/postgresql/1.6.0/1.6.0.sql index d7eeff911..bb0d7b7c0 100644 --- a/ee/scripts/helm/db/init_dbs/postgresql/1.6.0/1.6.0.sql +++ b/ee/scripts/helm/db/init_dbs/postgresql/1.6.0/1.6.0.sql @@ -305,7 +305,7 @@ VALUES ('Captured sessions', 'overview', '{ "position": 0 }', true, true, true, 'missing_resources', 'predefined', 'table'), ('Slowest Resources', 'resources', '{ - "col": 2, + "col": 4, "row": 2, "position": 0 }', true, true, true, 'slowest_resources', 'predefined', 'table'), From a87717ba8ce89185a649d4d7c0b59323b13d1f40 Mon Sep 17 00:00:00 2001 From: Shekar Siri Date: Fri, 29 Apr 2022 13:37:30 +0200 Subject: [PATCH 31/91] feat(ui) - dashboard - report --- .../components/Client/CustomFields/CustomFields.js | 2 +- .../DashboardEditModal/DashboardEditModal.tsx | 13 +++++++++++++ .../components/DashboardForm/DashboardForm.tsx | 2 +- .../components/DashboardView/DashboardView.tsx | 11 +++++++++-- frontend/app/components/hocs/withReport.tsx | 1 + frontend/app/components/ui/PageTitle/PageTitle.tsx | 14 ++++++++++---- frontend/app/mstore/types/dashboard.ts | 3 +++ 7 files changed, 38 insertions(+), 8 deletions(-) diff --git a/frontend/app/components/Client/CustomFields/CustomFields.js b/frontend/app/components/Client/CustomFields/CustomFields.js index b46994f0b..cd4e06da0 100644 --- a/frontend/app/components/Client/CustomFields/CustomFields.js +++ b/frontend/app/components/Client/CustomFields/CustomFields.js @@ -100,7 +100,7 @@ class CustomFields extends React.Component { title="No data available." size="small" show={ fields.size === 0 } - icon + animatedIcon="empty-state" >
    { fields.filter(i => i.index).map(field => ( diff --git a/frontend/app/components/Dashboard/components/DashboardEditModal/DashboardEditModal.tsx b/frontend/app/components/Dashboard/components/DashboardEditModal/DashboardEditModal.tsx index e6eae9e4e..0f687a166 100644 --- a/frontend/app/components/Dashboard/components/DashboardEditModal/DashboardEditModal.tsx +++ b/frontend/app/components/Dashboard/components/DashboardEditModal/DashboardEditModal.tsx @@ -47,6 +47,19 @@ function DashboardEditModal(props: Props) { value={ dashboard.name } onChange={write} placeholder="Title" + maxLength={100} + /> + + + + + diff --git a/frontend/app/components/Dashboard/components/DashboardForm/DashboardForm.tsx b/frontend/app/components/Dashboard/components/DashboardForm/DashboardForm.tsx index 9255663e9..9e7bd54f6 100644 --- a/frontend/app/components/Dashboard/components/DashboardForm/DashboardForm.tsx +++ b/frontend/app/components/Dashboard/components/DashboardForm/DashboardForm.tsx @@ -21,7 +21,7 @@ function DashboardForm(props: Props) {
    - +
    diff --git a/frontend/app/components/Dashboard/components/DashboardView/DashboardView.tsx b/frontend/app/components/Dashboard/components/DashboardView/DashboardView.tsx index 2392a2b75..39ddf88c7 100644 --- a/frontend/app/components/Dashboard/components/DashboardView/DashboardView.tsx +++ b/frontend/app/components/Dashboard/components/DashboardView/DashboardView.tsx @@ -86,8 +86,15 @@ function DashboardView(props: Props) { />
    - - + Add Metric + } + /> +
    diff --git a/frontend/app/components/hocs/withReport.tsx b/frontend/app/components/hocs/withReport.tsx index 4984796d7..be95952be 100644 --- a/frontend/app/components/hocs/withReport.tsx +++ b/frontend/app/components/hocs/withReport.tsx @@ -138,6 +138,7 @@ export default function withReport

    ( {period && (period.range.start.format('MMM Do YY') + ' - ' + period.range.end.format('MMM Do YY'))}

    + {dashboard && dashboard.description &&
    {dashboard.description}
    }
    - {title} - +
    +
    +

    + {title} +

    + { actionButton && actionButton} +
    + {subTitle &&

    {subTitle}

    } +
    ); } diff --git a/frontend/app/mstore/types/dashboard.ts b/frontend/app/mstore/types/dashboard.ts index 57b191252..fbed41eb7 100644 --- a/frontend/app/mstore/types/dashboard.ts +++ b/frontend/app/mstore/types/dashboard.ts @@ -6,6 +6,7 @@ import { toast } from 'react-toastify'; export interface IDashboard { dashboardId: any name: string + description: string isPublic: boolean widgets: IWidget[] metrics: any[] @@ -35,6 +36,7 @@ export default class Dashboard implements IDashboard { public static get ID_KEY():string { return "dashboardId" } dashboardId: any = undefined name: string = "New Dashboard" + description: string = "" isPublic: boolean = true widgets: IWidget[] = [] metrics: any[] = [] @@ -46,6 +48,7 @@ export default class Dashboard implements IDashboard { constructor() { makeAutoObservable(this, { name: observable, + description: observable, isPublic: observable, widgets: observable, isValid: observable, From 59f51cde26694b7617a2c5000fcf6f0d8f5742f7 Mon Sep 17 00:00:00 2001 From: Shekar Siri Date: Fri, 29 Apr 2022 13:56:20 +0200 Subject: [PATCH 32/91] feat(ui) - dashboard - report --- .../components/DashboardView/DashboardView.tsx | 4 +++- .../app/components/ui/ItemMenu/itemMenu.css | 5 +++-- frontend/app/svg/icons/filetype-pdf.svg | 3 --- frontend/app/svg/icons/graph-up-arrow.svg | 2 +- frontend/app/svg/icons/hash.svg | 2 +- frontend/app/svg/icons/pdf-download.svg | 5 +++++ frontend/app/svg/icons/report.pdf | Bin 929040 -> 0 bytes frontend/app/svg/icons/table.svg | 2 +- frontend/app/svg/icons/text-paragraph.svg | 3 +++ 9 files changed, 17 insertions(+), 9 deletions(-) delete mode 100644 frontend/app/svg/icons/filetype-pdf.svg create mode 100644 frontend/app/svg/icons/pdf-download.svg delete mode 100644 frontend/app/svg/icons/report.pdf create mode 100644 frontend/app/svg/icons/text-paragraph.svg diff --git a/frontend/app/components/Dashboard/components/DashboardView/DashboardView.tsx b/frontend/app/components/Dashboard/components/DashboardView/DashboardView.tsx index 39ddf88c7..0b096794d 100644 --- a/frontend/app/components/Dashboard/components/DashboardView/DashboardView.tsx +++ b/frontend/app/components/Dashboard/components/DashboardView/DashboardView.tsx @@ -113,8 +113,10 @@ function DashboardView(props: Props) { diff --git a/frontend/app/components/ui/ItemMenu/itemMenu.css b/frontend/app/components/ui/ItemMenu/itemMenu.css index eabfb050a..7a87fb77a 100644 --- a/frontend/app/components/ui/ItemMenu/itemMenu.css +++ b/frontend/app/components/ui/ItemMenu/itemMenu.css @@ -28,11 +28,12 @@ display: none; } + white-space: nowrap; z-index: 10; position: absolute; right: 31px; - top: 18px; - width: 150px; + top: 27px; + min-width: 150px; background-color: $white; border-radius: 3px; box-shadow: 0px 1px 3px 0 $gray-light; diff --git a/frontend/app/svg/icons/filetype-pdf.svg b/frontend/app/svg/icons/filetype-pdf.svg deleted file mode 100644 index e1fc9b698..000000000 --- a/frontend/app/svg/icons/filetype-pdf.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/frontend/app/svg/icons/graph-up-arrow.svg b/frontend/app/svg/icons/graph-up-arrow.svg index fd582e467..9a54cd2de 100644 --- a/frontend/app/svg/icons/graph-up-arrow.svg +++ b/frontend/app/svg/icons/graph-up-arrow.svg @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/frontend/app/svg/icons/hash.svg b/frontend/app/svg/icons/hash.svg index 4621b1dac..17e32e5db 100644 --- a/frontend/app/svg/icons/hash.svg +++ b/frontend/app/svg/icons/hash.svg @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/frontend/app/svg/icons/pdf-download.svg b/frontend/app/svg/icons/pdf-download.svg new file mode 100644 index 000000000..ef3610238 --- /dev/null +++ b/frontend/app/svg/icons/pdf-download.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/frontend/app/svg/icons/report.pdf b/frontend/app/svg/icons/report.pdf deleted file mode 100644 index 33eab9271109318b47ea35bb835b4ea9218715ac..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 929040 zcmeFY1yq~Qwl|y_ZP6Cj;uau~KyavF#VtWYX@CGhf;)wO1t?zJ-Q5Y+(xOFMBsdfc zEn1*JvBI04bI<*sb!DCR{oZ@N^?i5U$;$KWXFnsq*|TTQ%${esbrh9_z#vg#?v^j* zi^QUAB5Y0;cEqx>!Z06a6q~RP(gsCLxVoY+?rdPfTRmc7J(Qc1hpQ#ZjSccwh9=4i zjeO+f&1Nb>U_hmyAc%z2pFsj5!6qpN21!c($&->47c(OkR&c_&6LNNA6Z=a}^76ze zjMZ-dzn}jKgjiSug|TtBWrK)-i3t(h++9&fM`95WR9r&j?*f?3i&%tBh1iAouK=J> zDG?|X43-3gp`yRD6Je7Qg@DARq`+c?!X-o?l47C~gc^X@grr13k|KY{hl)tDSvnF6 ztBSBGIuYvS!xBHq+ltq{sFb*?IhKlixD=mxR!NO-TGN&8JL|FR}0=q#Not#U}h1<=}~OM_VF^ zh4now-2c+VzZ)7%EUbjFbh1KYY}kYi(U^xAH}u~agsP)m-P{#yk*;i_5JGbx|K$M! zh5lXP;{W@F3q5jju==k@An|{IK-}2t(yAn!fGcq<|`_21XKw7#v z|Be0+?u2}gCVuA*0E`L!2k-w8>$Vlj&5{slm+*IYB@|8oYek@`ZT?Do|E4YeN=N*r zU153(ggDs*n$PC%Xp6t2z1*GM32{FDj&JGg`kS63(6WvW9>2@_9eyJwMPcCjgu4;p z&kS$_=mAs!j|lXCY4}r~PPqVpgh!I*#H~>C;%Hk z6@UR)0zd=`0uTX!0pgdl00n}2{NIJ&nf%}7KuCT09&q;-x%X|^Ygg_9uHL%`ZtkPspS-2q&=di@F!F@b&a#%-dj0)+TiuiYTJ zdFw7UI~aMJl8Q#x!X+kWjN_r6e%`J)EUtc;m=^NM1xW;*GJGG)~R62-qDtmh9 zTis6TD(oXqUvQaWut(p6qLFFov>WobzBHG}Jzs5c7wf$kzUX0{#y+|P*vcon$9`3J zNuFgP|E7FX*}}b&LitG%S@h_Pik4aL>MP4c`>o~)9YD8_0G>Qlic4eE7E z45IgKmX7*;KQzyN?AOd-y5}HKH_Dh+in=;g?Q%5~DER{oqoZvAg`(ly^-0t&-74ju z^M^|Wn<4DYXoj`s=r8YZ?Z=4Bz7~~S4C2T*kY($8zJbu-lHl?|RN^|T^4{T?_Gt#E zllt=Bsm*QpMsBJl%kxn>zK(7$kXBd^Ua8b);`LElp$Ilt?5+4gB5lc;hpyc)6Agy< ze4=oOcFU0Z=+H~3YcgKN%*jz(PYQwxjhiq`Ec$9dv`i+xl02bU(r~7_W2bqD9!#!& zUyCu-opT;f9#Gw+Lem)Eka&6k!PG=4s*F`O+F9p-2Xt1tx1ne{J=S}paB{Y^>!qdUo!gnKY=su<7f zU!>IW!v2>4o+j?#_O$z%*s8Um74ILyUn5tXjA*}Jv?kto>tWV#&!rVpO2&J!`q})O zZ$RcHK&cSwd)R~wP@aRfF(BBCn!a9jRq8iCG3ho)d}jU2#XgYJ_<@msMv>FIys^?l zjDOc0uukaXfl9-MMg|da8=RNXoDY}2uE#tW%cT7uVf=5!yP0&qU;7g9Mfei15`GET zrVK>fKQ_33{wwg*=n`<$;nHp&c>d`Uuy1$?s3~KAQ*{GGfggC|hIo+hqzsuUqrXRc zk*oK;&|bd5$)IGsJ723%xAIJLphS;X%!#TvhWUlIksQ?CDB!SI08nmgIWwgm7S3lR4FtSy5HWt1B0%I0ui~ z5-EK5=^f7W2Q>uu^?>=YYLtDVjBPgDnDS{YJ|6@mS<-egKL-IzelEoN-RQN~zu-Q5 z_sRW8Vq0Y!F5V(B%53HXXRXt$U>zl?fuUSi*JlbHk$KtfelzachC%COZAB<>e)WOF zUN^EhGUJDY$ViLag80NiorU?4GM`C(_*ZhwK)}zs&7l$8J$%DP`KFlHzFYa-eF~$Y z4Bo^Tar#whM`oQS+cm_*aDl1|(5fjgA%o-FLe{s$+oB|0uUCv96em_^!ql}~C8 zc&G%x^+g%Fwn}Bt$;ru~p|6^PYzS-O9u;yGyq12gaF^dFF6I}-;uv214a;|4j>~Ie zPatcP)xEcNg4aQCwY~)81xjDiEq2V0=QEFZ7NPY_Teeq z4ZYA!Gba@6Y>=2>j5s5T4}mr z)#wD(9S3G(Y;yPYQrzS#a(i-wA=7ZK3Pd3-nxYJ|ft#Tb8c%Hyf9t7dJh>qza`4BW zmP_`J00RnQas)H;xPOT438ST=kx23nTK)U|W||q1A%@Q^Dg;R5c)tuuQGcEMRpcS` zmgI2_5k7SAl(fZfvJ~GYI4+ry`mGW?(_--7SzU9#J`hRI(p2^K|2(#)K;TcKRn#wpYOm^Vym-(#TkeXZl?)Q zZ}|+f=<$E50+#p1r*d!F%H->z3>S3xD9Syz?I=KD-hQcnmDXnpyh`AkJdo3cxYI9$ zY}SLlpcAG*ymQkfVC{KC`{C>@z(vv1KPCI$l-mD#qIwB9!(Rf^jQYHx;I0*HGr z0a;a-0Cm=jDJ_X@r%OP}CE!AhFl<26+pgZBG~J&so1tsKDzsLZoIRd0*ltaX@5d^XL6VDW z8j43ZAj}XiZi`_0(cAl$!SstStoUL+kg6`rkrmeWs<>y8XxftT=Zk@oMFX(>@62m#sO(zl!wtSqw`z>J;x_o3 zF)cQYsoyGjQuAJQwSB>3-_ty-{L#a1Wo!`VfLm7mp1$a@q@Tvpc;Q6LAM>&LJMh)? z@HcW^B?_7f%B}R%Xz)PLV~o9L>Vp2`z~Xlw?jKwFs;HbLDZg!9EE{d&+t@vNn{BJX zO}(xGW#|^0Tc>^5sjrm5jd`8^-SPn1CNG|5kS9k~05%kOE1Q=8WU#_)6Kr;`QgCh- zZX*554QD9VjI5y<#M#-@3Vlhf82og)DW<45B2Q;oXgtRx*$m6mMJ#wf^c3;oa9j$S zdmw1!nHXwOO{JmM)HSnu{4E2^T@`*y*3u?c184 z+jwMHZ63PMDp)um@*cUjK3FavE3B96&jnUSvKESrNVXAiQh2u5_t^SBqgnd39Oj5N zWAL<1(;eFNRnKRk>@~#98%2d z(8AHpNzV1uOF+!ULVLAgeLHI5Y?S<^GUtr;qw>R~%_4-c<{hPHz=os;FkIpgQ0&;jzCH(o@U1}B=cRRv>JWfG)orcF|wq2i&9}A`|#6awIB~wgzYQNT3DeW5KWfz4SgkeFmT7ulr5{(_~TSh~W z1;tiQh>^=vBw3_AGKyx}^BoHk7o%eDG<_tOq)=q)*-)p5BJP+-QOp@NZ73Q`>HkEn z%3UAo+zpY6vs}?kVRpIke88NeJgfFs-`ZIpmT#6L&db;#tj-Ijt>m_8L2kW!ngM+sh}J3smqQ;t${r6DrYlPKx@^FTX(=qE$-Us zfOGP0)vOP|*~c`UofdO|jIR-yh@*vOLyc#;=T4bpaz<>Q7eglOMzZ+D^5 zWT^Ml#(FlqjB;~4iAF>E!;D!8dUl6z$HWXvqX`t-;3}S07?5rf@a%4QLT24^-juFo zI@DT-xaY~$CY!h~2MXTgGkxK)wvm__%J^9ZsXV z8fJ4J{2~KhB$qm&G~hV9H@<#bhb$gN7B5e-n)lLhO-Jg{G8qNQZU~v}p22sL{&uG1 zR1rt&6TxXw>+Y9c33l_YHF~b2F;27f;xvqhohJT0(Mm<~C2|fEw%#%QhWqnECYsX* zIjfN|P__Mf2CY@JcX+f>0$GM`#lBm9r(Bn$xs?tEUIMOl`L3VEuS9IH_|`x6T&C{NN4uqs{6}6ET^N zNT)tGinFyG46dprK2(b>)YhfnUTzS%#Ywk!G}qad1VlJo_IJo zYIg1J_J9oq&^uI7jRmi5<1F$b+G~sfx;Bs!M?Cx37-j`G6)jPH%r#8G&p;7iw4*hx zY%w%si+UJWLC4VsYIH6<>N1{cHR_iR01cK*RDkT$dnt+yNJy_#3qa3OH*9zEXl_Sd zEr3_ZKGS^u5_k>o#e9SeWq5F5I?tamdXW^n@MySf!d^w6t!SZXJ8ajq;dIu>tdo?A z7daH-h#;*vE`%gOB;hWgb~@0$Io|?Ikn=?@6aQlVd6|Fe@dI$~=e{HsXWx?80C5XB zJ!x_}9M2chy_>h3W@DWS9@j0mGV7H0<1%~^F2L$WeyCqSjzSY~6s4Ow?^-F1ySh+v zv;22hwUjk%)vL1nh-up>7&$sscn30L$9y8Rl z#=1^-74u@97yR$4WpMbXRCj~iQ%0A=5YzhXVYlBXQQz&TF3k*8^|jX{vbik^KbN2Z|+ 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%0AbV`5FW6%C5Sw_zU&Wl9ep5aX8 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

    pYYl(w>yGkOF=B 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

      *3<|XPA;(6JRV#<3$?l9!O=lu+C z``B@m)T|o4eRGhOc36-Nh6*M|A1f=0>l)McWBHhFu%Ri=cgog67N-KO=rQT6@U_)A zh*DqjSU%AnOFF3H_F=c)QT+SDo)ug8wp1;&n`P;2>JM)!mXL{9X#L6xW*6BxX-cp( z862g?^J8^-<7g?9uOc{L1(n*Q*|{rTT>YkhpvFxzS-@sxOi(dX&}!%HHv+#FNsD1! zgFXl$k))SF>1vX_VJa8;WvsDPIHpOXA5-f=_qsv9-rPz+$*MJPP+f0VpPxFP71JN* zzZHv#c6|X1LIJ z^>#r}2VxtvQ&!kV9{dpTg$@hJBE;v*ps?qeCkk=RU#G82Pd*qW=-vgYu|g|Ud=iQ< zd&F1gT-{sEY(+ym^(%fmwAct5nqyx^MZp-MTn?;frys;%yA1i^v<^pB-#FbDaN-np zoR$slUj9CP#`(I}IJWefCOvm-r?IVd00a29I4jAOtROtOBhU5ku*d%ZJ~A;I@$tE; zt4~Dd(#O@&O3n>A)!m{Kza)%|{_EBK!i9gC-3R@y;QV^8&qrW#lqC*!fc>ZU<$5nX_$V*4h3Com68|Hd;#nSnU@Jvy9LeuE&u=B6-$ddjHzh?cHT4Bf?zR%DYCk3_b31Zc zpq}k{h~#hnMt0r)0{)ymgI|9wgY~0i!~mUxnuSkdrW4{71hC8)z3u%fA26;zqT0y< zpgdM!USCnRHYQ+pr>0m9QZZC2SN_cFg4HfE(7F=7`Ihl^;}dDRo3Ny6+e^7NY<}Mz z=7K_jb5$$gX0t-#1N~y%L?=k;lMmqKW-73CKtec4@Okl2rKol)XB|TNY45DrqnjIl zIrh1&H$_@#ujR(H<#Tusa6b4YV96o1fYJ(k91Qxsp83L3FGqzN}z z-70Ap3}pk8R1O+#hZ(4Aq!_b3sTZp3_NKzi*1>;z@$KRvk3LDE*CTxaaFNYa`QYo_ zA^;!Z=InU>pfUKYY?RD>B_B=S_RbiYQoY2hPk+AtpUm|i$N!0~@}Gk@L8|W!!vfFx zr6m5X0O*g`R`-AMr0E-H%T9WG_U)BNWwh-tTcMYaq!$BDa|lD#-*n3F?VfJbLPsg$ zLTcXR5hqzE52@lu0s79;c-Wd(ixZ0!Nw_dOE5L#1Il#DUC11acWN416_p5anz2|dB z_KuoH-ByK*T$vRplH*>s6355)sSY%_Z>+t>ZMEwXj@R++ZgT+$AW(%wLkPKo`rZ#^ z>oy9DiOOwlwBPV-myrhx?pbQca6q+gNOud{M{=yHn>S0lHW7Y1JRu^-s<_DuW(VXsAG44k0-0nY1#vMP$DNP(rMogI!1ja4Zq{-l+ z8d5mt&ATHoz8C(1e1Qfv&i&kcyF7(fKilo56+7PsB4Bp;A{NsTftLR1-thTH_2qS} zZRL7cfZ#(aj4TG*7Y+Gp5a|H4JT@r9Uv}LuxWg1#;@#VIsuhtGS-@w-+V{3>@%Fdo z`?1a3bF9_+bBSCDxkYow)QiVmF%z-#(T1rfm;C*4C60!bro;0_STkhjB_OZ`n!q~| zK68~z>Nm<`-^juCJb0<#3}bo0DbnorQhGagT5-8&@$L0*{`PB4o=>w2-(HpRsG3s1ghj(Y!V3E}Ja(Bp0l#^Bh%lz|?)HrBTAXu~>Nz!XS)jPJC58o0UVCZ}-P zcD=xldWJp^zG!@zxabNez!d;_Tfw9IcAk*Ca9Huo>oKOmlf2G{SUa3G)MGY-biKqhyPxFB62vNz zbyBK8)HnJ-O|`hmJ2-ShH8(qz@4#-V{6fnA?M={T|BJNlU0S<@c7r?Eiq}kMd7YKq z9rgmS^R(9$a4}=XYEtw-*E`j7E}&Z?SMX1Z;nMm#2?Cxdku%GgxLt|JsNneGc^<6I ze5tmbxg#`H_4y3@3+naF9{QW@J$INp;kq}z8x41fcFfgbQ*D;d@OmF`XF3Rra_LRD zKE=Tx*>W=|M3!@Gkr1j;CTf=Ub15DmnxQH*`%o-I?$_<5N)W5&&&-IK`{3z?XWzjzu0u`X?(#bcP$@4u1`Y1!l8B$8I;T#kx)zdR;Jt#gN^ z{F`$1kHtU#zCbmaz9c5onE7Yr)%g+u-H5+3CBtjk1qR--4AHpXsiCiEmaU?F<3V)H zw)#cU&ott+r@5o!ztN@}Uz`X$Gh||W@D+|xTp7%6eSo4N;H|6Gv9~wD;7bPcOh22$ z71=*`X7CC+F-4i(6kYP;7J2A`UWtfuvy=<&D5v#}V%!;LJ!m>%W^mIp09793*Cf0B zBM%Hw1EF>OOk>@e+@N|HJiqR+Dl$LrBTic9v4`AKJWQshLOP=q`#`1OYDwfrciopP z8n`Dg+gp8DL(By0i)|~m^@)XJoV{A?WpH!kS7BB&vAS#Rjl6Uf<<);tyn%#($$X_Pm7eJO!3Hn+)LL(8|BHo zn3wncKU&&9*x7%%_MgNI{>#Y!;qV_`{2wq(7r3H(_b%?;_+9iBlX0IseTktwaLRVD z+{)uy{a(|z{anva1ppz!OC$UiK-jdnbfi>_aww865~Ei>L00nI|8O|a7rk<8a6WDS zexDDYrN&uysyvhBPq;n~1Xo?f$Rmv_tuu`?o)1M7@8o=ITm)CTPTU}MmQi-|!Ggvx zFXaFR;Z$LFX!|Xv=WLP>c5}WNi&{OvEk!=}x7~jeam>6epi}Gi%8Q(V&N`aM;BmxK zA5yAK{T|y1k725_RW771Mqf!)W1@+=nk^!gLH?;7)v&=dKh5el_j@P8ERknYs%RD8 zG+E!9=XU+DeuapAuC$+P9M%^@~{NC=UoW%2|jm?=jeu|`%iZZ?|WqD)Yzhgl5 zvXuAi?~zWi|Bt*kfo5}S`-h#Ur=t$XTok9Y)YuY3QJfxvl5miihoTbm6k_HKtrAn! z7=qRiBt!{)w%j?|ZuT z-q*da>-YQVl=T3Ktip(z$s06K?jGGxeR3y+?h|%aU%Q7;9!xjEk6rBj;-z-`q0)uF zF(2z1GE|>Xp9#gD`!p&rtk{3M9e)7rix{Wl==22DsO;)!%W(^(F5EY+JM^^%W}Y81 z0}MBh(NFCCWzO$=M)1lIt&d=PPd$vw<*dPR^}w(=i1zL_^J|vZew43mw;}RY=>5g2 zai@pg_3fn`bd`aH(V0ktRFgk$wg#!@m>5=mpL@n{zX9(%zCU%9LR36bEcarnHbP8; zCrDn&%OfHJ;suiD`ej2i%VB-|wcdlqV(`(vJ7ueg8u->~F3Afo=V@>;J~S z{==63zWcwSIRB*=d{>bi`$_2&wO8q=(hWTI>%EDbl+csjEDr4sxBptvHCYn(%8q4J zd6vBMAC_6(CecU1lp@PY%Zkj20`PFoHMwh!t+}Z;FAsb)mjvag+^%_uOmbI|YH zzNCJvIjhp}9yNWz>Ey`QGs~R>bzo2|A|V+gky+< zE@LT={ceE&W117h-H)mPwk8Ea0IiX$VTur3TOg)JI>Qpe`{`H3#xtM&G7Le77Ga$tmT}12=e`+R@fU@W!s>CvZ0-t5olSXCs1m(Ed-xuOlzP8-^sD-ekA34nn&061n#xS^1hRl=>R~`q#3OSlDGy&;tPK6= z`##6G%<41A-Td)DYtyYp&rt(Tw77#a1znPUEdS@k4Fm!n|#TUY}wz4IcavWm=^~ThL5?GRLr|EO3>$8K<=nTW|)YaAMm#_!{|r6 zu>LoTlq9@50#?9Xw$^83=>DbfBSvx6or1f`7dCP2p~6zluy_in$Jb%lUU$9cauJUXzxL)LFBUt-(!kL7=X7Ug$N(3 zP5?kNOE7>HO-x6p$wc-Wmk(cj(V_oHS~F{gQP9p9&P{4Rh?Fwv={WJdUGsfx+=Wpv zFEl*Mq2axBSB4MenGo?2aw>GwU>cSh@72sA#h3T+n4hMo3^uc0u`#ql+iKZhskbSj z5TkEgj^u!`+mc}yk!HNaZ4Z~79i@Q9>LUZqW7VXWMyVbuMn9{L>{ECj1UQ}wdQ`gX zC+|lXd1xWq_XF=6bFxoMJt2w@$Xjq>B@?9Z1cbZ+j{Q8WdR{Hkqj4hVE;?7Mrp3m} zZYuQrU=YI+^H3_ioN9{!azuFKAXYM_qeEi+L-rcyqr?)LpXOU@wMF_(wn0Cx`O{zp zwzw{S3e*t`*P37N?1yU_^oKYw3(o#%n<0I&nC|UIK-R$_w;L#o%#H1Y#t6%iS;fR>Fob%IM&tIxK2}> zY6jw@8p&D1K%RN16_14QPu{ujp4O|``q-8{ha|jq?7L#N-vg(fDgOP4gsxa;Oc(VB#NOB{}a9N;zV&%D! z%-xQmaqadmgt4M`rr)?ik!BBYCa1RRsamVRCG*8L2Y9e!vNp1+6Wqp~zsZ&uwu7^o z9JnbXDw;^8aWEDnBgRI(#c7VG?^648EVaAM$@q|d5iB9TW%wybwoFtgaQfAk$i)}E z;H7{PM&EibT>0cG3|O=4nu#ko*EYacrqD?bGjjLD7EY9NM_E4bMyUnQ7e0C*V-_i# z)(ozaFgenR-9uz?GUyL4v^j2I={76PkS!F<#_htV{O>u!nU_BzZpLdOeoU15{l1g| z>cS_KfUR5n9jGMd&+--o0tHGfN=v)B%cf-TG5K1o^SrS*Hylh3TY;*?p%bw<7$7l` z^P8xf`;+eRU`{OUug|~Q%s-jQzZs-hnAt>ay7KUt;)Hr8#)}|kmOX7yfegZ$<@57? z0-ZJ$8|ZmqaadU_2kO6$a)ZI&OKE0nll*Lp@g#x+(La}h&+)-d@pm8L32wP*!p|_x zDlh(YFwKl7CuQGA93pY|C@N#f0*Yis)e4hzCk{1y&byLZ= z*A{}9dqC|7Q+%^dABq!qAR%e>x_@|9dv@>EJft}Zuh|pRYLnVQJ)ySIVm6zdTlo>x z;P+!3qBqy#E)_wN;=7>W2%2Du&&U&fWh=Up{PSFk&{bek(j`JYM`6&;N9XErPVguZ zMu|&GC=T9Ujhx9#Nj)7DA9#a+I1JrCi6uk@=BcxJtX;xp*gdm=Omk#cVf9w!tf;fb zJzI?i3oAXo0;gX*D+T?t9`DcDTEsXfo8~(QSV;N2vj4eeuc=?LjqRjCSU6=1B9^?% zl23=H_((-f%Q}F>z6Wiq8|TmSWuF%BzsOD8LVqG5nrsE5E%d?fu4=&{zsu$fljJIk zEW4Dz$ulZAzu%;iRF(`nNBN%v8O!_ z?V4~fxv{0%p9h(g<3))g7U#|=Pvi}9=m5fi)1Ax?uj!PzkWfB|MHt^7-Q99zgr;Hr zr`qcvvB=s+Z&Z+ml7|Egwc3kjh>Ojo{E@`3+VtjV2|HQ;!7WF21cU{iX+b2`y$n&5 z%Ut^5Q5*1g2$I2h)nme(x%V4a z9y)iXVL3HzH~(Qs`C0bttB`C7_>^cMIwjsU%=?e1Ud*00N(&0qM?A>)Ju1sE( zboY+-mig(QI@I5b7j6%r?)$)k6OnUg(SD$;0;vp#=8BP?2T!Pl7aX)BWII3RW${9q zEkMwb7r0gR^~XU?n6{boiS2w0^(v=kajlVIWu9*ME%BEt8b+$R^ivC-g12hu`rV%Krbhzi}nQM{=&H?wgBJQ*`E=DArXme zlVsC1hyeteTT26L#>pP&VrAa4nGo~ibSE3B`JbPawvmq2X)QE1`~F(yK9hEM!|$+A zIhHIKm=&$er#&y5yk6$>Oz4bo(5I4#@!xFn&qdQT1N?@VhLyx5WhIe6N`Y&2zu%(g z3EX1s3YkC~H>A!7JcY(CSj>xoRlh>zV1Q##h%_bWDJ?Hd0D=VfsvK5F@zLtmfd#zF3KC#dBduH<>Vgv$zWcE2!<^ zKIQz7Ds(g*=;1=or3pdg%QR|+OJQRT4lw8d(QVyoaO$FA--P8ly+!%DsY^EAMyA(7 zL$6+<-WRe|5-I$2b;%#`dUsK&B5|F==bIcWo-(r^g5o&s29u=187~iwYX^{>JsG4?y0qO9P)?=3^0=XJ__eu6Ni|iHc`a zO760Y(rTiSn>#B#S^G|A-?%oTbn+dK?>D9>nfV?Ayf$S*%2(jbnz)e=MDfV}458-q zA|WiM*FD;AlhGC*Q+@11KCLleG!(J~o|Y(Z>TlY-)ehSXcq935_73;PYsMas=ZB*>T#f!=B=d;_ZZktw%BArW0qxWAeXoxlhzI z9z})3;7&sPlQGA-3l<&3xIZ?p+D0Hu272o3z+-Dfv{4c1Ma9F}d~cu8=hPz&S_J1z zQS%*qHdpo!yPfYg?YFV8MH7Rgocs0}oJeK&?QW)0L}xsMNBg`jWhAbw43mA~weaIh zBVw|(d?T^uhFSofTypw1u6K}wg&e=i8S#Lo{Q=g?!s#^EHBKXHjBi|j2#YoMV4fUx zzwWE+n(z?TQNP295;A` zGL4%3>twE`b1rEyJ!PArjfi>Ox1%6z*9_t*8DModK1|aacY5PTT{TN)np1a;N{Eco zO(Xc}#;3!84zt6Zm>yD`5C8ry;JizkQ9Z|w`i5w4wPlb8{x%ohS`NhR%l`%`9XN7y zxch@Fd$KKJQ)q8VSC3xfY_e0NWsmu`IoK3&wi(&^Fi;m@UaCV+x}}B z@VmZms7E`oC0CrdI*ry>M6FIo#c^?_bP_Ah8_Z{OG>w|`oT0BIg*|B4^~11vtub=8 z<^Xl{^Mm~8uf*le<*P(w@W%KOJA$-$k3RSyI+g<9)@iGEF5krxq5#GdoQYNduS9<6 z6%}|ecZ;#TXITTiy=&y7S>;k#rA8&cs}7Jx-?{G}uA zvUxv^H)>mJ%KTJ<=v_!w8cT6dI}4~0C?-iP@^fYt6D-8FTAby-6vKa?vuyhLi(AFE zY7(~HXx?v0)P$s$$oBULu%YIUbsZhl55z12sb-?+xSjZ*LQ z81;I94bhAPA=&(lMftoWn}z!`C7p{0g!>G(qvKb$LFlBoQqR$ek~Edg zO5zy$JXWw@uxQZU^zH^rqgeT9hPYvGdLA`OB`Ou~_3wPj75NzW*If6n7`(GDdU@I8 zz>drQ@~hq0+s-Sm068kzAMLx31Z?OgPKs+4=s%N0E4)UQ2&+8C&s7Et@#jS@pFGJN zYy#(#bwHStp7c-yRuPkT62#5yB4*#J{M0+u>hAS? z{5NHb7C_`uqMtQpDgMIa61r2@Wl$kC1)&ebD_rHh|N2E2%N{Or2c}9j*ltnxX^S82 zc9mlJSePH~bASL8RtsXZSn70iI%J^{=eK_+mfF^|8&)>L_|wa);Z+FBO7I9jCS4$w z+>9|W<;-bIqEHYiNiTvO#H12y#Bx|$P^WlU8|lU{v=4t^6vHNKbI$w>CN;{TL*VR zW*kyser5@Ae}k^dEFnF>;iRLAp>NZ7+e>2jI-)2=L*tI$LqT-!u2674OzIB)w1yLw zQ`RWaf}sgXR{p3u)LO}diBFy4{L(>?h@x|WvkN_XX)3~@-1(1C?gWlHdOb<;EAd8` zq8nA>&RpGenDmPdQO%$(A(@bOyMonbq(>ZvEKxvlx1H4~{kWFDbKelc!~u#XatcEZ z_Oom6C%zBSFF6Q#7Nln2GNj{6597oD8%nk~T*$pl(2jE<+a48ED9mZY|*E^GNB^gRsJ$c$^{lAU(nBYj>>X8 zXhoRXAhu8@`<7pXPVp_x{Y6uC^v# z+{7vueND>Vd#fy5`OD`FhX`dyYh}aeue8{_-o^;Kq#CVnTyGsmN7W{pn})Iw1cb~1 z8|N+`eg~`F-qox9C+L*jiGN2nDug(--HUXheXnOsSAw-*ch_3mh6J5*ElxRm8{kzKPqPKs>T( z$B~{B7pjHo_NZ*JiQpK~nUG283F3*1BN*aVt=r=E&|9UyJpg64g_>*3XOVXul8CZ(JT-q7fghvNFzH zH67@+-@q&~`y4fR;fxJAON8%U+^fR^jkKcU@HB4q_7p%rrv=*jOtI?eXlgSe_N|_= zVcdpW1?2PRr9WN*f)tSHumif*aZ1sN1th;HHu@{uGukY-hw3j)IPF8Ouw|3U>i!gM zmFxjAuH_W5Jdu9RB11xt%{MM_rJDKW%Dz7_(pl)6Zz|;Tr;Q7=b$yxEAq*6mj#%0| z+Bq@H?56t5ZFa1mVpu6dFnmM#_jLkw|{Iflm(+u5-4?WvcuhLz%4Zad$d1t3merm4} z&{9MD4B-?b#*8ZNy|%J{8_;Lrt+@E*>gR^vItkVWj5_HmKG%g?1860MEhAo_05&K$ zsYQbi*bhF=q>n5CZIr-(Y)QIBftro7CI~Lvxu8W92Kkbs^ae%v&J0cQCB9ou5q{R` zaBxasCtnq(ud40B)TiuoJd5Q^>``mQ)%KhX4vPeJuHP@#k>mRR%Q`f_)*jVwqAI&2 z#8Fk-zYycQxkiWaBOi4d*zUAc+z+^UzoMcRj$SSZS2-4q4nOWK4Iwbe@@mfOgdd8(@|;C>Mfo+g67JRyfei z5>v%ofx#_{-d)^w^rP1J3}X3m6(sVE$!ZhS@k8CGs*eLjkPnG#VrSYip~*vn)m9P> zf_`+4i{D4L>%BkFyfxLgTfSdFJKD2b{>BB|&ShqSx>~l!TNG`Gb?}S7Hl&QrgWT`* zwN%=BW9@}~r@zkD-`h*cm-fb~2T2cS_j*6%F#qw9*?Zup%S5GEYr&UKx+)`7L7!8^ zgqJBo{!&8D((e0}7{hwdK{tUHC7((e@WQ9L;ZgfNtTfP)i2P3s8b1`{&}^859f$}6 zO%9W`)j7Vox1yB+d)%QVA5_16E#>P}QrgNDnI$9sT{5ovmSH-KdTB^enD-8`shP9% zx!vp1hxdGx|bA$_c_Dg!~Sd`sx9qRJlT_3BEu-m=&~90x|%WO z6tiP?4!>s>0Y6nd@r8~7Dt3ODVU zPQ;nZJGfy2Xv`0^GM}*;b+&zS+{_{84oQosAK2Hx3mEh5OAY3A8)=62;{^Z&yVav` zpa^lrTs)ZCgqEER<4Y=Bo>wZ(r`84y!#Zi2503VhvdQY+V>|5QWUA(BIOn}FD1ku1X+QQSRJQgR87uQBkJ@#Ni6ZF5Epi*1YjO#joWYN}J>0fVGywB$w3wRC z63m~Bg<6R@?wQP1?<4_xeHAtez85?IpNorl!p^+(Q4^Wy~pEXoKTrkz~i) zM~yD*%g-J+?%s&$$X)$KU&J)Eo?grpX!>M)bKX4XZzieCDx93cFD05GUdr3WlqK5F zQUZem63JNqWlVsLPOW!K%dyijfDt(z*QOz@T{-b~*@eSVmvR<4eZJgD0%HKQZ*W(% zKV@|fXw{zHR_)>|sm&-v@W3#)`7lcecX;ljOeNlV#C6AU4R;ypkd55xWb~V1g7v+l zXpbP{APGe+$PMEr>UD#?-@kD^oV4pzPaize2ac)EZS7eZMp#9rk=)w3GrKLc<6v#} z2gBD)c5TYr1Xc=in_tzJ<&Vu3M78LibW0eIr!^GWaZogSRwBd#CSPRdfm7D1l+X`< zIlup%7_R{VzyF~&U%sz*v#}bsq6pJhX?G~MY&Pc8ic>x_#tXZTx|8nu`^6tXsZU~` z{?Nr+EP6d!T3*1KAbKU1ZKde}qlc+%=XvF(0suT>%hj^wAxck48X?`;vtJMondEku98S%)C@8SNMd;Q_ z|GhuXeJauv@aRQYp&G)q(^8HA5x8F`5^qJdR-qRk@#^0Q0{v!fY0g;I73>6Z zU=|=F-(i16*OjfcyU<|oNQRsSbzn-5*dyx<$zy zI9_QLP{;Si4geB5t@wBVY6b(!-ro0#IgK(v5pa{Ypqfe~&Xl%fQB~ofFFx+NC|EmH z@uGNX-kd{0r~PAEGAdEZFm)MwPD-BN4WG&&D7nF^+BfBrb*FiF-U>Jxnd&s{zJ$pQ z3GFJ0w|*I^x%j$xI)=8P-rlB?vNz^<0JM8O{Kc!2yDsGJ_BA1#nhl<}NAqU7RSm^< zj(z79er(lqUUy{Ppv(G}Q$(XuzZXVHTsm1it$0c&y)j9dM-0s*8rlVpjX$qpOcxGi zb+Pq^`VRAlHR)NchFZ;NR-Zs>XBVY^UXzGfr`}2}c&RR?G1mpHbZTJaHEn6*NZu2Q z=%I@sFV@n#OKT&9c?g}ul+>!Wa^m4qYbZV@;)%n(1wauJ*`kMW9!?S^vR!T=SS`XK zIkA}DJj*{$^lwU?IkwwQ-ggv1nuk9$HMVF=G{wAG+{FQKY95K9aNCzy)}(v^qDBby zLOS~6B}tf?{LsYDZzsV)r=3;-VUyT`>AHfBUGCy=&xDenXMOqNP`Zq zPKr7lOL0UU%T66e#acPoM^K-OixXQ{m!c8z3zvPLL-C<3oL^vJ7iGUmTi}R|5C2P;Lw> zsn32&YjNwG-Oaw*tu)!WFlupnySX55lrWsdgc?rbNKSwr|9(5f6SudZ1CcrF^J6%| zoq?Nn^hg8KGOYk`I=~o1!M?v`cpz~0b_ef(aoPJl%pKyw7la4mDPK_HpI&6$g)#+Z zQkE|Xp=b|lK30adaJ-8F2DK&ByC4H&R+2aN`p9B^$vCdm>2lAU|6`T`9reC{kK{MI zjISb4q&vH@FaBKMtL6ha6NSe_8mxro1BLG`=zDrdc$Z`cX_UCA#t#*@_}wn*PBjbt z-TVQqIJXr)!HwS5{~O2|kmrDYVYRB8*=@FZW68`@!R%Q(-a0IhBv%yHY2aJPSS2jf zC5?2#bJoW|;1FL_Wy$EcB2RlICA<7^u*OpoXhlarZ3!ysmKObP&8%(xO7Eg9 z1=0Mh8DiV%hZ~qQ{N;sN_P?z{Kn;LUh=BnG*OJboj;pEsL9C!E_HAAH$8TI$ixJYF zJCB208s_!2vh<787jdQqmlkPD0MY^kt6ETG`ToE#{`*~Qm(usPFI~7_g}haf&A%>s zl!bI8gKSC4dW)zUFb^cC{J}9X>l*mjY+1%=aY01CG*35xNs)j536D3P^TMfn+xUEE zCh2EW*QuSa7IO>t|B$Q|P)gUZW1A3fi5#}_X; zhZ@8~zCswolDlzvK;u3op;x)Rb8_8o>*M8(UPQ1BK4D7DW`xGqE!~vBB-MThnb}7# z?~C{}ys8&}F%+f;OKM{72MXeFNFc4bN zL7;MX_-!pLGi9Yx#lXRRsc#Xnix!b2gz+~CgDB|Ici%^5JC7M20elK&gT^($HZq68S+({Al;wQP zBo_yc5v3Y%-Ewa4wBuepSyx-DwN?GZB{$&7p>f~L?xG$aL(S?b(furF>p1p66WO_- z3=l(u)|(+1^j3W4n;w<%e4C)Fz8msT`}_~Zdo^P9O1JJMLJ_znuV#RBh?9JtkFibN zU0~Cc{}lhithJTP;;FFhy|)xC+4x>>+Me55+A#GD9`fV+yn-R zyvG>-Y{M|y>|lQ3fLqndF^563YuYn0j+?0wg>d(D7Z2_BYXQAJKIWQR^BtpM1^+{S zfX{uPptHY+I8{_u#@Psw7StO4*S(?C=wv7>b9h|HYb)*WpF??b=XKLf%c)dS_LFJ< zSjn-Y9vTwzeEjTV;y#0HV%@E2vTTvhVG2mSA904n#H%o`z*-HjnBQ zb6W6nKL*BH~Zu1Zgd!@tIb{r{m#hg9RZ!JM0DHXG; z$j2&&@VYx3RT_{&2rBvWWTxZS9YvK-p&}hcqlwTg$n)~um$z1cV?}BrVG`ynaDEYM zB7xe2&(l$1^W?PUhQOANa)++#49E9O;gu-Vh-8BRR$>a9eDm%Xz4FdlMGl^WPzR1S zzzyYE141|ot{ze;Z5B73lNl*EEqw&s;aP(Xdn(jnH@Eqy`0nu?B56wXRDE>0%hlKI z%M^xYEu?q7?*XyTzf12zU3#s6WXGg?$S4TYcRAkXHq*ODjqizw)WsUv?NU>mteJFa zZibctE-%YjPv4E03`;4lEIg`m-Ruk+#mUydFAN+%UnbRq&u1=+=h*n8v=zsPv}}L_ z7GhIS)TS*?1{N{~u~KGg`l7q^#Ov5^4&O9k7B|X24&z2sQ&kixm z7)zLel0&?N52uokqY&oHlhWfQ-UFFTfi2fG(d3sUDOExOsVfLL5dCrVmgA5N$iPhN zoua5oUS*y@`enOM!{ou}vxj+aL`<4C6KX2Etisg3f(lW2LoGA!cm9AXjGWPRCv##ni z7A3`5N9`+KPGboT>fFQ|>ZZuQ-Y~P@bMCN6>98uAs`(CiDqWF!vIQ|)MpLBZsxQCV zGCcYGsv*dvuTrz9>vQF>yq{NA1jd)qRPSBy>rIC8#7)O0o4n}CyKV4ekcfndE8rmc zoE*x%@huL=>N)Kq2{@ckii#tnIPo342%vOAf+x7OA#l%K(X}=dPCk#yzfRygz50=% zY1TCd1R6j%9||guW`UHuTg{*15EaGsZ@|pP>%>b&-rCQQN@=r}SiJqOO9 zk;bdv6F&802s&FfVF}W(JT9gj#hpbinjdF~WI^{UlIQ(e_WO~i{Y#)F9+Bq7F9DBY ziae(@G?c?N%MHCui1=w=8V4p0G3Yc@>e2*S0r;1Y$ppiQvC#!wxvQCt?d(f7_*r6d zefd~Q%K07DuRBu)3v0;L7q@sO4)mX)&imzeT&lS@D)co$Q1AJ9+?PoWv3XHyos7W(r4HwzBVOGu)EZgi zt^+C4!#ZUMx&&s17{rYPS!MBL@k5`cWHhzPcl&B~M_yJt(QBHpzSVJABt}ckklylO z`Sr7q$ObuIvH zoI27Mr#ApH>mg_<51pokbey@)I#a6Xww#dKehnbF-DHB53{|$ZFRyOU4#u|P8W6Ji zHcD2)gv3|GfAdcN>#zLsFPBJFtMY58m1--$BQbT5)ihm>umJFqyx?j}RQO2yIeh@# zW&4DbnNAH-cFmG>{8+31w}o1_eQB1UuRURJVo@>)xsr!N7xFN8W&oK6e&~dWp&>0( zqvd2V*3HuG+~{-M*9^v@_)ugp{x2Wdo(}S{v9`1DFYw-gW~o|n(jv98yQhEfsoTL* zIwsL~vV@6~!7ts&*x^@24iWMhsEfmu{G=C#qrY}v)etRM`=#^Cbsp*WqdDr=VKqO~ zVy<<}R(Au;oQfq?ayx(s!Ai{ho#tRPiZG_>L1*T2UIQCq(&Trk%+bu@>$u%(#AtCz z+=h>ZmUZg`n-sF4eZ$z(4kxVNV+F&A<7pM?U8^h$A8rT`6#44&K;YD#*OSHy0vibiG?BlirZW$zq#1m@=IN}({5j`cy0Tn4dwhq+TSbxepJwNT5c3l zktR|<#^Fyk@J(hh%GbN2)+jJ(waNkN8)wRHe0G;jStPtHNK0QR_HE;a$h0(Tbpr~3 z^t){zzycf#YWaW#wph5_-2rW3px=07*(B{52*ZHLfZm z?|*V-l#8ozJa=6NuXMf9blF7xnAc$bDT3$7(tYwS>*Vg&(bJ&C`VjTR)R)UE-?(O| zcLTe2wzpwH=3$SyZsf-NSbVyDocY-C@qgWqxg<~(2{>Fr0tZ>%oX(?$!x2giz~1;b ze9AlkK&BxBy`C^5$B)O21!<`dDVbbe;w`a5+%l=MS~Sa17E*b4qv8he22b&-t=lt6 z;7A1wqjQ*m^L0jXl4JjRw+Tqh3(obVm8p94E>4LUopI`gdErpX;gNW31uGG&1h!C~ z;Sg2IFGY@UGOh8r zzcOlZ<#({TXdFDm01kL?GnK`(RvbhARoemU-Hc>~FiAjVCNy+R8LZk9-QTG%TH{!& z67XiOK)M>GDwpw5b9S&A5{3k!d^Hb;1nA$9k9@oaVTsZ|?;S&OZYZ0g`2mQZh~dtu zURBOk0pB4x8L2Kj_~*&wa`|CksKJ4^g>_IPAcYWtt&@%~?*yBnaf(?k|gz&cn)$cj7yq>0QYMr8Fcx4+9VDxY=1^t#PWy!Jv=m z!#DjIa`{Rt2rcJ06Jdl0u|SzGk@pcwNmc!_-cQ>NolsP_>$>5`+y-D6E@2A5kvf%m z@0~EC1TAZ?-!xKys_#nwIuvQvx+jYlPN*$e#t{a*WjlsTH*CzJ-13U)P^4KYD@oqE zZ%LlJFGcD7du!_*&7!SqFX`2Kg&04KcSGo$g|wvPdrnw5xQx(%QrN;tK4LCs|JvcP zX?wIu7pvdfUrx!dp1}HdZ|-Guc;}<`SuB0i{^3_g^6>9qHREj}0O8or@It$}+Ohfb z5Tny0S~i0-C_i+XLB~v|D@>Ff9Zhgp5nlb)=KsuJ|FS0gx~BZiWIjF>?*UCs;6Nd~ ztiUEXSqONKmendI#L0FgA$KWXsRE8YV)+_jKW=()vhDKRLbtX2_fr#@{LJo8At44~ zhJ<(`*kaZ>H0ESU)3W5XN7YLBj`C5%O`9WGR5)5bZn@s~Wvg0ba=MM-%KG3wC-(bm zAb=P*f$tcowB}=qO*Mop2^(GGFuYjgyr1GR-(yUFt**>=bScXe^Fy$xDBCij?U&ET z9BAX5>fs*0{uyyPrrEI=640>1TG>#EJ6%{&IIZu|4C+HM(5}EEyPrne_ZQ|uT#hqq z$3miX@+2vf``zci!*rjH&lXM}vNlc%1X$itkzq+i-?*BNjP$Aum(JD(Hz)0GAH8X7 zN=mfwW(U4L-V`}QHn5+~=03B;e6OP`Q8alY+P`ZMd38Yt^6BTMqX^#CQh?RXl}L} zLW?bY0ELE4A3hV>PSLm)IatKL)S!35{l^ab!R%M9GZP{EyYm8iC+K0~5&b0Uq$y5X zn4=;a&Vo1|$L(#kyPX1lh?;(uIw0T^z@ZU(Jg+;|Rwy3uae1>IozkY>8LirwUo^V3 zwYlAw_Qfi*)TKN%^!7Kdueh&ChgAK88C6xJCq7!GV^+O8rmc`~`}yZxp9zKiT_%s- zNyac>ru(yh;+I$@9uFbT1wI2t`D>5fom)8H?wPPoL+)_ogU@gavsmj}Maj{6GR4z_ za1u5*k&|;6pM%~b-{?bqn*PP&v`_=0$JPwzIJC{$dhQa%CEvKRkV|^(h4>wI?xK6r zmq?jm25Y6@E0go4wqiF!@>^bXj7tYaaGpl((dj-}^7QU6ap9hC$7z{gB5Jz)T=P?jV)1e9V{4Cd& zyR>!K%XT$yW?NdbpcgKAXO0|5mlM=3cV=qY0Io;Wlr(9h`>orD@zBi++<1`UfCg~g|s*v0!JilGGx|N0X?Ii0^V-noV zwaP+p%T`X2W)@isq4_6px(U=kft?RDTWnnRC6=yD+- z5|3@y{eqCeqYO1WoU}K!d&7aD;;Q)F<9zj*f*`Fw)ZsP&#vU+91E(&_9SQNoSBH=6 zEsvlF2ivf<2Z)3=a2^anCxTTyW*yfYH;Q%+OlZIEhthochoQEYcAtG%Z!WDFOQaGT zsfXcS)cX`z_so@~kD$iokw;oOB59yfQh(wHD_NH9qyBupmp+mZ;fxWCf`zwTJQvbX@B?=Y_dp`S@@2Z#i^%1>$AcIWmSQ0JqD&E*Sk-9%~ zW9dtgtX31FE)01XJs;wy>NG9!^nW!YVe^Zq&;K*}~HPWDR%J|$l!EZ{js!*Ccl zHG60n^j4F)plcZ#M0~Qr+WOkPJW&qyJ8}w2KJtL&^;ViAE_LYS@7EQm=c1CXhL@S; z+_>??I44O&(&%r5a5vy+43q4HD<+4@ksOgwpcSYm&KKm%Xw+8sd))acu!*VWx*hIg zix-mgA`BddOp&aEvJv1QIXo6mgA8O ztFKf?sLOs(mlk**Ef6a zpDBY&I>V7mnb3NGMqx@Ty#jh8B7!V$Fh0}0c@(^O`)m(u4MVhT#ZjIo*d*~|WYLa| zz#Jf#$*1Ex9FIAm8Ts~HKB-JzxkkF0?E_@r)De5<%oMD0Bo;T^!S7d;Ps)}kZo>`jOcI22}3^hW$(C+7rT~^_;3yPS8JS#aYt5?nbU3^ z%N<=%<1tv99(|aT4~+D);K|b3spere-XZZ@f%ZLk0K)z7Wm$9%8nN=6iZzAK1%>E$vgM5B3p-qiOV0(H8P4;uR&_e0zSL_#}2W+R248 zy@^L@Qhkg#hqyB3^o>h%5dJ{saC`gzz8IyNgSa#u%u++iUR?YJ;Tsob8BoY~5`MVO zkZ6+-vN>+=DWo7KXh-cGVK#A;5Mk=Y(+AN=-?ZtpBs_a&o(k7wd9qz*$@umqt;iYZT&N|D?vIc%TaCi{;E==i8I&Jlb5ucH~5a9*O;{3w%Q1z4_4KnAZ zW4`~8H_31Ja^6Rgh^7UbKFZg+CF7rJ@Eyqh^p#@@wpB+QdTxW7#5(NBH+mmsCduV4g4Aq&=_yLsC{e$KR!T7iG3FvS z91-wE)TJn+Vb@egK%~S^^C1KMRl{`G6%4_RV5Q>(kXR^I2lo|`L7hf^p%$W!Yvpf; zwX_Fs+@hzEuMfxvC*ZkXzZvsPhK?8ZHK7*e%FoBoM6v+TD7P;BUgxk#PIC}I?g3%a ztmulR{Q1j^{dShN4VcsP0IGj0w!*1zr=O|Y;sm5-wr@$aDhkLBDHQXuS7A@OWhk*w?CxL7udIocjU>^bmP?X z!KtvS$rP=e8;LJWcH2LdzYXnX@LT8$@pna;&-#IdJNdF9acd5pQ~WmZNgwgBs)C%0sT1p9^C?}x+J`66S=X1PE2rdh`Q#>w7hVW zq-ZZ7a>q(T;eFnaX$7%ZvT7{xwi6}M0-<09H{vapghTqDI!!vued9V>J5bufwP4X( zY#gBintkx(GR!Do6yr4UzQzD5~2FqKgX_S;`>v9k> zs?mt^v;fPgrG!q!_wA9Oh=`i$R#i}__)2odNc#TBjKOnvv3`lMkH4?kLENcV24{~% z!dI>7QjSWb3Vf}#^AeINe-T&V9qQdMMW+T|C-U>o#Hhpi0$fV2b2}#MLeE#fsSd4O zU$BFlnLS34$U;f4o=lc;BN-{IS2E-XPL~UYgvM~c)#5cR(yogy<(iHTlE2I7k3Lpn zSW2Qf(T$86e1aQQ_&C~Tl_1VXAe)J}UNmva-pTVtN75(ejL1`Akz;XK&g;P5{3q*< zKYAASVC{>3W)^j;w^wGn;nq=5qNqOj)`2%yX#Q%01JdtYBOS`jwY7JNZ84Lh>y zCA%-&mg0lIwYU8J<&P;hUYxZTvGLWdl0`i%t3L16Gb5h4{!~Q?FE#f{$0Vv9l0*vY zQD}ik!c{WORr4^jxIlsz6=wIe?eP|QxumeczIX%Ftm8SlN6yuZzD`a!}yX3AR(Yr%ygO#q>(l%(Y zj4HneaOQ%A^@X7~E*&@?gu1d`k^2(?-uGrHr8xp;#GiydpX$b6PRn=rZ1;;k_zP8%%vr)BQ%Twai!$< zl;TQKgVFh)aFb!lXmna5nlE|3-zfkMP7oPXIvHln&)Wcn!^Ni^;DE+~0Sq;d4Ip^w z`y-LhB!|{c3#_4sKCzKOmqN z!dHLMe5B5&8%NkbAZ)PGYt3eLE>*>ZQB&JELcj&nZm;34Mt1O&_fq>1KOy{lXqH;7 zHjUGE?~~KTT15QOkI=ucedg1X3*`H`XBAh*Vuj+uu?ud3WrlIi97N0lJNiV}ue7J))L$~Kdw|@I$YLQCN5B1kHeoBB1%wGc> z6Q!aQdbC16IU{MmHf!J@k?6|f6}TZW7a5tz7}k{41IJage(+{igZijebbnllirbsK zV-||BQD;2U9p*KDc0d6{%#K5MNuU!}D3l$ENK(Wq5lQ~UZ)z-nE{m6UJJ9I{@I%ya zM)LlfzlkLO!#4-d zR&6Vu(CGe}6^yz8p1jdZrK_<4KYM-H1K?5!soP62*S* ze29sB>$I$fP!fuWQ~(0ZV6zUAuKjpe^MD;75#^UgiDg&%xl7K8hy?UQrv!^Ab`?o) zKe^1|e3m97f;})yoSXzqJ#V{kIVeSY6)I?IySb2VI9+_#vcB>NJ4jj6dqHo&JgnF@ z>w4grcSo*}$h3N(rPR%0$%yxEZV`u_poW%;-s%&N@TV=RLqOp$I=9VEEHx;+-JJrH zn}(Q=uai?J`Qpn&hQO4dNznW9gv-SJVYLmfjoO_Ws6`+jyB1kWXuL95!O;+uFgfYa zK3OFgtflIA!mRHz0ZT|uHT1E5{Kzr??9HcH0XJ{^9rDj?O4PIKa4gY_ZkQdA2CN(U zQjF^_%3KdRFXQC;ChLc2Ahb_!_X>_cqh=~;W`R_*ATG$j(*Pbg>j0b_2pDdpadiU$ z3Qs(~(x`D#gb+E_a_bWs2Z}{d_U4mG4a+@f4%OV*m5|I7d>H(y%VMWlp{0vzObKn& z>w7HTJ3$NVgG!dPeA+K)Yd2q93Qr{W=Y5GqRHw0+ak|V~CwcDw3J3!KfDGn85F;YA zG4|_$jQKByX8%~ffiC~-Y+LH|8o!p)IlsDZQnI!#(6}oly|6(9?&n6Aros^gr!;cg zB8UFD^@6qzg_lL;qFU;zs)27l-U>462@kQ^AKj6#@w^M&N|64tV2qfj1!WP0%)(PF znD)|}Enm_B`=k`ro#0%LxX!7OCqBDDUD?W6rfHBf4(CfwyBoV&#@6bDWDZ0!2&H5HUS!+Rx0K zyz*?tY~l7Ic`QPKR7UbEv6!IT*+`I32c*i?D|LIO>#=wGF_}%t#ckc5DlSKx9HuPP zANB;+ri?stxa#fQ-C%D z>QYttB3u-%i6wV}9-&sUL?wYx(QzsXbcPYRQ4*opoFbqj7YT%rV*?^mciqFE7IY!u5 zp93y$E9NDHu32*D6RCL7Y;*mlcv2)7y4RLE*!xm`EO2*}`I%UX|A=*Idw5!5S4UIq z!9!(5@N{D9E4=?`wq><|$@LV+6608q10D0Rhgc~L5MNqLAJxYH^ftO+hxnu+xM7KK zncFNt`=UQjSPkCU+6uisytTP3Z{}lzpQA_%`e*Q3JW~6`^cQ-m`#FzWqK;H=-(}|p z&PvKGyNoKLBR73sM@`iBnj#UV>IMn5R`qr=!&MisHF-9=c2JkzX*tmMmxX1~rI{e9 z7&k~hihG*C6gD>D^L3?t#k5*goa*R z=a97AxD%@z7BOM6FUPRtzlr@D48%*w7EVnt44>Q5SX{b8HEax`RBr z1RZ!mB5Yta1O zJNkJ66sb}G`wUz}@ILan|=a^33&<&%-IIiGTdz=?_%tjT~n<%`LnAE5$904%_~*w~Ye7 zPgbs~X3eEQ*f@@7ry?#=6`lV1^*f_kVew_)FdkV3gUu0w&wjpzlSf|;Y16mH2lI8v zZ_XIoAc_J4STiK~=N)15{#r#K_s|QG8^=#5qEdvcUbK0&Zb({=^@QrY_~Zgtp2U#$ z-i*J*Uyn6eEeXi->syw8`{fYS97tE$g2zgXTvj$+bdEy#=!URRu{X&4Ve)r2cF&xd zp<;aJ-Vmjxn^WCwXH7!jH%Dc9GVKGdP7{kX5QHw_w&?bng?Od8gq&F z{;Xu`0~9%#q)ngNs9~NV5#-cKgAyD&o@7`~Y1!>pH=N36L_amBoSOONY&yA{T@KjRY$u{WwmH#i$3CVMOP~;&%;hbiA&dCKy5;Nd;?dy&$2EsiO2ms*JGns95-G)n7ukW+bS}BHOI2);)Sh`I zBzcZocd>{ZIZ9yNnJhXktPS{Ca-S^p_1b31iL*HfI7*>f7Nz1(YIvJUOKwR(G{;PL z_vsE%NCf$Z;Az{|^I@-j<3$Vo2LABq}E|;pC8T^9x{kzL;&`?TztbD zyYl#>Kmox58nr%edd&2u?#BX?(`Vld8b91jEF{xDZTzk!o1yn{ZJnOxHD?Rm(WkX! zSRMSI^RXH2L&?9>{M1Nt-WEH%e(CJO*;`fuJJ9{-iC+)gNo3a5gaczS%a_Z;#m?@V ziuSd2V110ne*J&jTvGMvd3M5y+g}>qj%_n87TbUo%R=mlDxOp67aWp)MrBxAoWd5_ zsrtel&ciqwW>vOHKO=A2AABC3pNYn)icCAs?vK=`IC{10`7m7k*9u)IjJ!M7fz-O{ z;|(k9l(k=zO1ZUw#)?=>iD;1=qDKKICtcnUpvM&+Pto48iD);Qt_+xZ$gI9~Pye^y z#N4(@cLMD%YL$(iaT}EG%mj7!;8nR)qB3z^u6`no5iw8%Ns`xgx}7Fleqf6jOwW+9)Y&L*wP0ffP4`^hKI;=bVqwkb$2rcD^#YNkG8wut+A)rs zbwtgxhL6>%&=UqA2+2q^FefyiU~;XFWf;$?mUFNRwVkq3{$SB#69x54Ga#XxTco)e6!$@^UBa?au9jS5^>V=uXwQEtWTLb3 zM7Cj2Mu58xhFqi{Hk0}XpIP=AnnNd!4-Yu;uf%nA_r5Oj}?&DR@TJVk=${?>3Qm2S&z*>zxtnd zn1-iW-mX!_iV-5Sg*9aMtjtXIg5$l48Pz~Gx8b+*cNuiOEYw6f*WO-7G#!Y1W~z|Q zj~YY+-AVk=XTyDpFTWm8abSjXB(*#2H22DU{ZvjDZgh$?oqO8K?HH!WFY!y3?HsnC z{_lOl7;gYcDIh7AR+aB6e@0}aGcb$dJdAt*dAylo>FE(g=*v}qE=2N|7k6!*&hE9TPMy^Hq-{4V3m04>;7>)$T+ zCbWvxSGt-iTx=}ps~NYb!k%j&mF5jwk$T4DuwluVJ?v$BK_mBgR-JEU9kwLUqAVUC z3wdi~(q`w+3HRMI3Lbo=Wai!=2#Lwuzxd^FH)p%tFoEOH4%!va^PrN2_zgMl50?J= zAIeXtFy-31sPb)j#tGMzjIgj)QvE~4KDDdlnCEL$XVdk^Wcm*W2b)H#3Q!ZT3jneVQ-#Ho@#j^ zWw84lr}Oj9NB+WJHu~$rRNUUZl}$}=&Roehky4qy|3^gVtAwWQ7_7SghW#!Z3hhd~ zt^c3DW1NrJ&g)3~3$~f6amWu-Ir`w?^BBc&%#(FFD~zhH%zf{MC(1W04p|BTzRIno zr41Rw7$g#j{yNqvCF*nVxg9ofCE8#{b` z`|i*j_Odg@mx5VAuOe58r9C8=HU!+>*&Ul<=I3?_$3m-IF1*|+d$35^F1gJ;4a4#X z)f}=75>*)zcBKU;aA-A9&@F$ACHUx{f-3)4vgoxNd=N`rO*YfML}K&Xs1qluD`olr2A!ijU}(9U139i-l z-d5`iJp-OKD3)aib%nNdu;wxemR=Ws&fWnF3iy?;L@z4^oDRnQfa27`IBLNmF3BiQ zG`Gx4wFlAXvKoZIu{ETFD@``wzt{6Gr_lO?an?&729lBGkY?#r5@`i!qX-xa$Jy9J z=2L60Aab;Qdr}724zbO+{_GwHOjuEOmZ}5h#xJT4Wj9P!-5PFAJo@osZ|c`suy_-YNKmrFui0?Ln&4A_#Pi73BhBG!+n4m<%w7Ec)& zg;apjm6q{W1V}J${Lded|7DTlpF8&dE9gULR@tovbt!h(j-ny@MB;IaYDvp9o-f=U z--AsX1*yO-9|bmK{fvG(l_Y!L`)+&639FQnq5#SjF_a96fNK0!g$Eq1FT0{KC59ym z$!MmwH-3&NdfMnB3ymrtq3o4*g2)_KLNE`tCPoTKiIT%ml1W%1mVhnP#UPn-&e0D1 z`U8iX+tJZmUxw{8X5W92z5-b@jk2(D>eVpWW$#1$x2>j(zRSqi19L~E)bgU#q{Y&o?uH_-*?ZCm`oB5c`n7MA)JmRD8-x=f@?Fq}_OQ5L6+ z#&?W=NE3aTUkQaJLPMfrJ@h{988R!|XpOp|KzAK$&6#fdhpW6$QHL?9!!Jtc%*1cS zEUWuRwVVxchR$L97zM?m!BgtQ^ko^;kAkQXgl~?Q^Vw6++Hb>^A_BM=45@=YGrF~0 z@(NXQiD%;q(;}3n=BPdmmo*K?A}fXc?+)+yp@RIBmF>;t(wus*!Cw#L3itzgRSqAC zMukz`8*sy$zLUmwpM?i*XKFcqYE2%6rx65gr$RlW{6;6V{_o z_o-VupXVqcU;BDw*=bqqiAoDi3)^Sk+Wn@fVIwy-){Um1`xKsoSW>cENlUQ;B8wQd zyC`Xf2VwBA`eh9~O*$xQ!(0`n!9?SXdbT*`N|%CY--rF)+LTbz>*`o>Qhz4*yxf3t z54~GuvBL4_4SInd?x;jhx&8EPipEa3{hj-VK=&@++z zYey0<8)VN5ZrIJ4*4w9ZBt6RKENWh*hA(uO@X@7h^NPNM?Y?pD4z8U%tRIR3fyqRK zMk+89yV@AeX7HF4Et?{5=M!^3|J!=Uzxz&F;p6+dEWKV#e;zeN(R=%pJpH}{=8VtZ zs^yq?ZO^tp5&T<0LY|=i0EQ$)LGj zJ%|`>V=I=^13zju3uz2h6NHEjJr>t+Sk$_QMyB_Tx<^6m+9UJ^L|3Lt-~2W@eg6XD z?yGdY%t7hD0g1^NQ+36-bY=BI}8E|88@pSH|7bf(xU=aBkzPwt^BZHF4}{&LLp&`(!!PCqA| z0jxfOs+7R7jZq{}a{9L5X5iFd1W#i;e}8Pqg~-sfw-y2(cGjA}dHD7Ke>)>;*&xk! zpKo6UsL0(Le?@>VL+J@7wmPfO2|oXr+~YU88+e+qhN z`Zi~8#?Ul&XtA`B^}eq8nTP}_KC3MwYCq$*LeNqPnZqsM@c3hY?vVy?pS_ZPHnwFW z?xe(JA0rP6eV;P6vekrG-?@js^*Ad0?iBy)fx>rxg}d5sXh&c8Vn8c=d=4dUq#lz=G2D8{zu>v zv*_h`&J~OMeL1w1I7m%gfPVfIt&Stpem?M5AMLYVD6#V>-N{Ek{+#spq`uf4kP`uQ z(cv0!{XhU=YXM;h;?!8zd%C?KK)(ln8{NPdhihmU$jE2|HP0kU{d(6A%c?gevxLee z!1K~mp2?~fewWf9$c5;}HWokhR^=4r+*{_+h@L;Ey5J*BfZ8L~z|1$Q@?cm^_PN0|D zF(*1sO8@IUvDlohjA z`lW86!7a`YX{VV>O@!?jxLoT0gue)EE5u@M$!%7RZ$0YMbnaZ!E{U+|u)h@;S0C-L zwq9fR+J7R4$9w(i?mgu+qoxgvYD2s7175AZVJha~J1b~p@>?CTjdcJ_eN?-GVh*qg= z>(&&hlwVbT579A^HR89#x;=fD6d^hAC(!P> zzO2`tPfz8v^h`6VQV*bs#sslvtK+;=nwJH6ub%et??%=HX(gOHesyBgGx5v3qui2@ z)CPS>ik*Kmr5=;p++GFT-wThk9E0nhy3ZPCKjp-nuNiJTRAYlw$aADTFw)$x>09#M zQT5^GOO}7!M$Nz{QyQXp=}$0udkQTN2AOau7@EZC3-_hj2~F>2W`hIm9bp3L2yDS>!#Kq4FTUQ!)iWzP`h6UaxGDQ*?TgnmRm52db!fuMGLT* zHH$CyO8ivF&fC^1(XXwk%j=wNF^OK-Ea_rg&$yt(_&^$1Pw?(Yal5xXWQ%C0K@CtF zIT^vj)rvcBcfTIEc4Z);Go5It%C^}Xgg-7wajf)l@z@`=y)IXVug?E|dS#4XJ5`3^ zQA0ukvdd8=GKoegRpMnZ`KnoVA6Gabp@Q4TomY;!T{x9YiUJHp#Q5jpF7DdCJT|q} zXdPC$6%G+fs9*SGoOV}KdhJ!XaGZR{V}z7un&&e{-bl{xlX1;trOfQl(-#NS+Mg5+ za*nQP;ZG$%WFNo1g{>hbcbW0}#g1wDbG0BK(JA9MxEWNiy_zJ@x8$F`BJJ2H%zl*y zwYf~-E6^Z3dz^E1tN7 zS0^tKBKzzi5pGou%Yge^1Z9{6ztqzl6DzA23(ZfBjhjFBYbTpvM3|!u%`;K)`B^)Oc&?#SPwuP@lOZn6!I5mJcl#Cu z1So8?pg~$}4e<7Lj>Ku3x%{WTqsF;!>v>K~r{v^sE;pb_s7YB5#y7T=@-3={Kp11h zx511Kx3LG)+Xt`z`j<%RRE|}#O`&}OXJHjU0use~^Cjciom5y-i!5MX9DvxW@0{~0EAB7j~gAWj0) znK#;y?RVCqV?Q;y?>YslN-*f=@&XCd+T~7FFl0mI=3*^F)3w$gP~r<~TtNALa}!HO zK6@IvsAy>3^K7y7_R5dH7-u|s(j|mt_VJdp4ZJJkES~c6@aO5Wd%kgy-a;U zSWFn^cpG8VPSTPunZqA^@K*a$zl)9Mih=U-2ohCR?baC@%ustdJ;$p|fZs%NLmUk>fe&^O6TbD*eg-j~o z1HIiS)4E{g+2dRaT#r@eyohFDU~pj6cP~OH>Iw2GXU* zjfwO6R(k@vd9~npQc&N>cC2(HqoG&1v4;W`bmLci<9TXol_Vs@E%%s=<&==|>wRi{ z0e@01YgYUE@C_Eb{Sk;)dNTmSht_2B;~@U?=Z{pN{W#`ZYTvNS=+9M1uv<)wBd4WT zEji3jv*_8{KZ&9)QM0qm(ZaoX{f6m`)Mg}+iJb6+#(`@54OlnVbsldRGE{tTFo-s?Q5Ef#D2q#zXmk30TxevHCnAxU+ zoNew|1SVqbJ~56H)<5sAq_IAA=X2X9lz~}65lCGVV%341V173jI|zAs`!(uihXl8O zzIw6`8-K3Yu|!#Xvr?euG4|9bx1J#b2%??xh1f*}%~!~VR0~!L@Wc4Rvr`W2O1@N% zIhV(MS&iBXWu0|I>~U<)H7r#gM|Rx#&}ZBmK9*-d3$j^Z@(}iKI_cOdkQps_2W$s- zc(xK`Tt0Gm7p_v#YWN>q2gPS_EN7d zov?jrB`JWY7+Z_XEry4V zc@R;76@Riam{`;o4k_~Mov0*BHS=_I%H}h+?zeSTHbrdMbG2OOa<~OwAWn;bVuJ{u z+3&UbW8p(f^*pOAHEm{kPSP3sTCXs^w`$O8IJSQI_7_lB#PY{@I_m!@?l0%N&s(S?8U~a(JF2&c2P+<-Hdl zSbm<%)iAS5-3Kusw`8jdg=X>jQ z$=*y!slxEc@<@2a^KvdleH9A>2!)pna9B0sN6d*YW*zVEXer{^!cZz^deSL)L% z^-4mCa`FCI!e^8}7a}zjm+gr)!4m4P=ROf-)RR%l6NM8TI}b*F70!J0dGM~`{3A3; ziM^+s!U4}}xbx2!FCy^`i(ZsF`$OS$+lPJrw@lxRbojoYHz;juG1N3di)4|S{^5RQ z&{RIItWp4CA1Hju?mQEPY9N3`8$l?tZnb|0dIduy=X5%6S=$S3TLiu0E~k}&rC+)q z_xG$gpV2R2Rk}>IgIQ&5^+Tr!c+v4-ZjEBxe4K|;htKgI zRA{2b{(OrC%trCWOX= zARm1bvv+||8)uI^wI~5`c++3w{;wdI^}inj|2yp~7m_85M6hKT z)z+KgY<|hr@C~elP2!x+lp&CcTKy6b8!wZfUL9_XOwaV42P{%tzaDrq`3ko+y>1`5 zc0goRFjV`&gGgSJWkXSOD5%c6Lyhep-hepQkY|6FiF#e_3kT<1l+!JBz;;hDfnKbl zG#E2a)j^=^)JpmvWBpFOVoHKw_ZF=VEvSYNTga8N90AD&PYc;OObck}0o-FfCBD+U z+!2Dr!D|~SmUb~Sr_EWOcInAD##=19EL@KTD9g#g@ise@<&emfat~mziobp!I z@Z9T~8-=Ac4*)84{$+hPD@UkdGGT+%Fk?n&i^5=uE{cE|{xsKjJ;tQ}%SnCHzs*bP z_Bz`SIrot}CX`4rF-;yKO%yK0K&FfscNj<|Tgxic2eqlPVq26Gx$MoD4BlyHuFgv}fg zjU~pNuS9iB+|^d~tg6QupFZiYMVVBCR!l6pmc;i`{Rw>FHjf~7It3@|q;f}=6rXc& z^g6}r+PnKc+82vm)n_k=v$HFjG9@3sFqLSVzv-8e$1qD5^SJKTQ^%Kn%aBjuR0?a} z4zjUVyY(seLti6DgAAs__g_v6N^R7`tpEi|Y10~M=f`hZu|?4%5oN@3L#C*Oy+=7c z!0WP|&Smp^L9G*&t`v>rX7F^r7<4^Dd8t@LL9@Q(PEzV;&uftThBatwKXu(ZeUh8b z+dg4G7Ppp3=;Se~CjrO5dso0t$F=a{tcv4x^(9iMl0XK+Muy~{T<{^VZG@+`Yp2!8 zsD2i#mocAF`}Ke?hW!Y;qw_ojE-(-=qSz5hLZ?xy8;V1#)W98fpoCSoMKc~jv3s-n zgMN(@`2O<*N5!aSD+Q!6!aF@e4pse33!{;pB@-ASN*40R-ODQIxgQqV;5ddQBuwg? zCR5~6wM2kqosV!JWeJcs&!&TfmX>= zNVTO@hsnz}@wLzdbfv-&b&Du_Y0k0Y7}w{pKA*t8RDS!~dGnf1b@3kLZL@2hm=nkw zVbvP&DKNH*j`Rfn94|s1(h{Z@h_s;qn#1y7gB!;n3a*hI3Gl)q&Ga3Qo4*T>K)1cS z0vO+-lar~BszF$|qnwOCN+Hd^ju`>L+kcZC=D;md3SUPoEv&42WQl~nGUUZ%ZpX`K z452ln8x2K0n3PrFc|b1Yqn7N-j;(a%72oynXw_!C`2+ZT>s{kkL{xO;H9$@eQzjkNAH8?)!9TW{i3`clxM{pv zw7&E4hYV4R`-@x-f3g`+A~^>uiXXR}+MGFgPBr83P&Jv>5d&z27&5NyzRK!aq)QmO zpF3U&hen|`03nil*#Coe`wlYtd6omW_L|zkBj+sOx4=>rH$}i_!NeEo_Z;2Hur zMQ;&IVE)`w?)|p#S{pgdZL?qwL6e{I>Z3>?)bU)W%%(<#@Wdija~Gg@$$2))DGzC= zxw&FU@81)_;^93Mqo9Y}zsZcCQLpKmux%A92cbc&lDn|ni^Z=MZfD7)Ib)j~p6v_e zUL%3jU0PG&^qhnBQU)yNT5A_mv&8-@5$&U-4#7%yQY?(Dfn)IO#%*}dKA?9)1vNJc zVEH`XE)Oaz82|OaiiYiQgP1{#g#bu5K#W#1ZLM9kLANs(6n9ukSr?j6)6o2Spo{|e z@iI^b{XYxvs^@?t2RC77_{TSYh1^321+1p4 znj==SMu*dZ#@nfoFEdiNpI(jCYjI@YZ{fOk${U!U$9dz;Z}c0|Mz{t>w|BnLStShy;ZE0^DFWF(lz58O`sDg8#U2<}d5S z{JF}eg&7?LpWAA5=t({^gi{TN&Z;L65wD`Qwpag;-WW@`xjg3LULd5x>Z1eRmQ;tj z+492fe1*7c{R(zn-_N#AQYJ3*TKvmU6`Xu$Cd6!? zBOF4kXUcaOk7i=wS0^-Q(mLjvA{qm#P_>$iX6DW0OhARkUTrIwOHrU8x#DaAJ+_wV zIrU#Uv18W5#W%ZGh1@%z;UgVw!n?1)!@YqDRNmtQw(W*w!%!VURXc<|~pu%(zi@;&ypIw4kW zK3#)5YguLV{k+Qj{$l6ke92)HrHt4qDx9czcbJDjsJNYaLcCO)+~b)imP}kmfZ51r z%Qm;SZvW$|zEY^HTwaDTaSgo@)Xk8d%!$tq?RTbI279||er~#_5C+M+EFqqyyViC1 z4BlAyx7~)&zR*LRC(l}j!sli!R{Uc3g62r6hp_}zh&WqkF|`E9z0&J^bOJJlf!23V zQW<(GVQ{Z(qVY&!$-%-E=jQ&v2n_kSe}(I_jUd!!>Hb=WD{h`tK1sUk6f@awR6S8ciI>M1Yo#=}3YCv7Vsi*-_!13Hzo1nz5OM2aa%( zIRD+=;Wq5u0+TAK-`)iQ}*m5D`eC1FdUDk?GT4iDk%1D4c)!L zcpIX5yV~e4gP279`zYqe{&TGU6NUZ>=KnhN{TH34KnX+HPlm+WpUg0dcIpzFW=me; z^Wv}h%^xiYZ>~%1{(3+=31F9l{YFnLaaWBBc4w2*#?GbUm28?0e19bQ%KBWDDZ67W zvO8)+5^J(g1!Ph^6MHJY>yPgHWvVcdmN`uo)ZRJ9QJkeO$ib5jyRua#8{{_ymXOtRv}+ z4a6Fr!q*mcE;y)xPK=n&kTQHP%cKcry(gf1#3rx#w6@+E{~2X8Zt0o|!4^6O zTWfLA?RduKM&CV}NFVkteLjYn|6ZtLKsA^SQu9om)@}`KR+B%bSn*<8fefSUyGB3HR9*P3sR62tJnMJk>U`_f zm-A8X#%{-jTo4NV{sOI;ptC!Lsr?M=^DJc%W4;sPXaZl*0Df8vJdELOd6}$V*<`*M zpvWb!pk)0Kgjb_GrmQ%K#K95m^o~gdsv1cDCZPS8Nf>3Qi3arewa&X4so^#U0}2Jy zgsmZy!ST297ZgTPhZbCM#iGPo05+L!n72Jmty*--o=V@r| z4u$g$kl9b==j0E@kj2P4%I+m!YT0VS7Gs1;F3^if!eHUC10#aAz6qJ{g65@;7F`*! zID*(`pZ17wCBNc-tFgS;_PSi_zbCQ+7_DWu6XjmI{bRQN4_-N^dUY*b`J=}WV(?+& z33rJrz%1qk5}vKRFE1CkaP;^wPw;(R@A8govI!rwYvz^k@&@;n-*2i4Ky2`O%6(F<|?g zR85GWPyiSNU15|P3BIIN>6y*%e?8FoC9&6>GRduW>U;Tuc)j-Nidz};LVwQ7E>aK! zdf%;qD*Veu)1K>um$}Eq?L~gfdAjcSdwAeE6w640YW>C94%IJc6RIJgBU4UO=HVt8 z;#+)5#EgL=uk4%^dry0QsP2S2L-P63(DOz$5SO@Q59ztm?8fZw*DXZ_^oylk8!R~j zLsx<91vzl3Sed(d-vusR^vcgY?@yIX)^MO;Q%hya^qewvKe(7;brs4r_EXGRik+C8 zfo=Qqk37x%PAVY#g%goR?pXMe69Ik`&xXcFtdc6fsDT4-#i+c+3$OxAHvHv->)aZmWTEPQp_!d2GU)LYs-v8up&K$=r z%}%}Z8V*&+N0y_Kevv zu7!93wgmi_cV+z&&?Dxju0&g{ZLix!mfJjOy`ySNn;=sYmL1E-X))MK6b;g703hh- zz^s>^oc&StqUkY9>`E8Wb_&ia0z8z%ba!=o)y0Rx&pLqLJfWxEcKhOeEk`)!q=W%M z?A(Z72UI*^V7z@+fTsLnU$2YUm9s9TvbEl?n`X5#=caXUiE5M15;Tv;&=>vu!;*Vs z6mhf<`0CRUS;l(f2)#J#PUlL`yfa`-Z%ad^^BN^V{VLf#0-T*mSb9H|?pB}mxfUe^ z-W8f}7JiueLSOq*ueU$T>$u?8124-cVe38cmgdt@+;QvhX_vhV^YKt(*&x|tKa;K1 zIr^bbD(W;CA`K9+GV+LnsYhLQEehli?op<#^0;Y z5ktsvkO+lGz#RqzE>b>RE5+6v3aiJ{JV_)}*wS(#wL$*jmeF&S1x|Xu3slk}l5Ne? zbrt0DKr}6W-yUF8&!{#~Zxq5|UbsAY0g`Ja($Ij(Nlp~Rs;9Fo&+R5DLrQ0;((otC zN4KEC@se1?wb4F9NO)JcD>21&caDhZ(V^2nE2D40jZU}vGb990N0u&=MWX~$`;_Y# zx_LuEbmkmEfy=E8zqAFZ3b~;0OP$J&j10`ix6po`o24!nxHQu3?pI)fs;o4hQQTbG z;SB+*hGTA&Cg7PA9s2I&9Zl`jKYUj74ZZ{1NXOkSrW)H-uT`)LHhFb7PfDnGp#Hq6 z4(9WALIXO-#?HpZ8%1vEG?sE-8oTEs=6O`VLJ*l{y;B#su*{<+UiZ-6TASj{FH&DD z6vEzoj=a}b63i#2iBy7g7P!@9YVh)&N;HqxmJw1y8EYe@<;hNSXN~c+NUWwyv(Pvh z#-#9R)Q#GykdRYGukvZJr%2j?8M$!WPUP~4FALyYBvj<-(;`>K`-jq+n{>B!VwRWm z|MPc;K#hM8IG&9hFd(He%R2)F&zy2`k$q+_n{>Y4Z)GCsta{X`z%|<-b+-hR>6wln zqCNW_cY3srrqroIgX_^t_#B`7p7|vbe%-+~1lAs$^VUVjdP3>7pW#KEHFlmP>rt?- z%yBS_c&6ILtBy1PnAm1ZJun~~IqoB;_TDb)def3Vnf&-9>D2q{i zG-r1sm6+<|&ziy{5&f%PSQq@|-`Am`dr~ctd|k3mExF2FP|rT8|JfxjC=|zj)Gs1~ zDkEP)68v#SjQ)2peXiIpted91?Usi;n-YuSM`*i2VuMSx-RugXFaB1Vh1I(zXI;#> z&_-~`>qWo(EN?xo;YZ(~pgMe0!4vD6vx0cX5MV+YC&+J=VwOm_NmV-&e-u%Ji6N4j zGu~42<~;DeC`}@gMh+V*Za!bQ!U0ciM9Pq0rL{2%Tz7J&HRMi}g9QXhwRUNw28~zy zZwRFP`j3FX7y;|aRP_G*@nUzD9H9PalXq5q+A2p?INiHDOV$CHckjw{oDEepJ#neZ z4Di87Xa@uBY;-!%S^>1Q0sKI1I(^G@2GH&Rlsia3Efhvtq<8{U1He0i1c=%KY<4*q z3?Ll9;Brqsl=f)P^@MGO{EAl4*Dbfy`cbAF@-98_S+3a*B3TYh;mlsYe`%UKpttt7 zg=~fo-6ij{^}^8k(bI z-Gw=9MLXM!PpTB%y|I;4)Lb~97yrXtM1;-5LV5C%DmgJTZ!)U=M{T)O^U<=B>W3V_pBX%xZ3a>c zoErzNNr|%t*TnQaX*oU!@l*;rWteVmR}ncgQtO9gDsxdJ0;8q6!ac&RA#7^yuj7_o zQYjf59lE@+$r~>C?+p_F#W3riyYt^@g8Apk`X6?(GF`%C?!PN(e?frte_Ua9x5g^; zw~Vuki~NzV$1-+XKGz_=h^V4mIqV(du#CNtPl<1<1ZFpRwb|3|+`k=gS#tlqKRDL- z`7abUmQ$vsaN|v^?L8GaYN)E{z~>i5cPTX}H||}V9ChJG-kAPrMvjo+&yOxVVMPTy zbxo{{P{>i2^0KVMfwVn?oT+CkhC!xxBhmP$e|f3@7;g#8FYPv zI;HVwV-}HRUhyKYBT3GV^wvV?lZdz-;^DpL`VhR@{eJD{J}|e|U2A$@l^99%QYKN* z_y9;}tSS%PYq;NTm{_ELuw+LeJDiJ8C8pd5^&y#j z6iJMjQiPAmUrMd`!&pF3Du|w^B&{%x&b5!;(96}=yvuxSME|Kb>F3IuGex#RLs_y; z4bDJ8<7p;5Jxa6t+HIu~*XKh)_PTh%Tg?*-X}(nz)=*DOUl2KSD}*hno|bFE!&6G$ z-dg_de&=YR>Bj8oz3yU_K8WMfgWwi8hg(UD2nv@3I!<&)_v9WIQk2oTVaU^q#`IF~^E-fOF2?Fh>DguOy(@P9T+1 zu%#3XAh${Y4s!Z15Ko{1UTW&Z{BfP~NfpOE zt`5j+0og2?eD9@y1Uvt?SKp6L%Bf7e5@g?F{}gget5!xK6tH!e%D-8JDF|41UGm73nx&)DNLMZ0d8%d@03vWgnYVke_=0NOi9OstyfC)V~eRz-b{MP&t zt40G>ph?sGvdTl&fVBpM7DWm044D=VY@1N&h{l=iVKUY#paN>ybge2R?!xM#@Q=%G z`Q@UUJ>+DJ-?TL>KEXCdjIYgK2vMf2p3wCBNM;*pz9vjx60NHL@?6+MOP83ZDhySfc_)DRh7xL!7CIaqDFFf^y#&U90TOzE5Q>ac1riJ~^fG|-qDYhK zcYDs9=b5v<^?mRAuD3q#V-_qHgu7k2uf6xZuf2bNtBrx95)0W4qauyMeqZ^6!8e9f z)C_EGKO9;IuUE8i<6714C z=8$BPva`#>)cT9lGbX-wXf6o33j-H3S|610dl37K?}2kKqk9Y!B@mFs+8sQ~OqDDfp+-?{o;zF$37Q6bKTUAinWT05AZ~b?9JZ;+U7R_7Di;71}^GXf_^)twNqP- zia*@E4s_3l^e?Tn-WTa;ePdQI&6%1Z2#<6fhhzaw^fwl^wx_D_GmeYWcRwt@-!Q{_ z%|_km1DgEv{r5xP4;yYMZt)g>3Jm&GY*_#0qP||!|Gv+uro&17?%<%pbzI-iHw~I| zG-d`ct^@2eL`I%Fg#7W>82%_T9Ln0_V)~`p*^hYFD>uq;9~(7H9a-C*O1c=~Qsx|v zkQ?Sf(|=c4gY}{~BPNvYEJfW^^||8(9qIky`I;T4ZAn-LS3u2Uq4^;$8ms6U_0C=! zhUIdP2hCnbdc6GoVSa_cuv*&V_*9C6g{jY98w=+=&dcEMC#3l3Qk#2~f3HIs-#5rS zFI;LAi&uc~-b-cp`7cE#-&gI-sm+Mak!@8`L$-IpVc60!B~@mx#?ETNHX!!b2U+Pu z|Fwm@#C+(qxR_ik5}ezpOt1^)mew9l7}hb@PP6h@MO*3{nmJYr%{)jUsKVf|^|$MW zc$=beRT6&>KRDeX8R03rrd@32D?27#j=tTMu1m!!87X)*u!qi?W}DwnP&F>e8=Y&) zz*u>#@!QccrKCnVk~_fUb_Q~AFy8aX-#4<5m!qrkzs+2m`H)3{PqxoI*p+Q^-6qd! zd(!-HUwF7Lq@5Rd(>mG;uo2=>2Z~d6;@oM@e|8Yxo{zlUU9=JEAFS=#a)$NB`*-PU z$jZaW`jy9mCQiC%@X1HJpSc*rHW5PFymXDgFrD2DdABJ&->Hv-Thp|30FxThUl5Bc zl)e=twO)yi+$a}WVCo#(PUfjMHcZ@D=x^^}r9RV14YH!P1`pyl7eoQTijSGd7yhdM z!t{*W>o3St&7{v<8MI>ViVBUpUl3WU&WmR6COE6_C)EnW_qwBc?btD2 z$f|ij*IJHpfV3ZGc_-+-FzZG5Z0lV4QoAPw&t`@n-hlqw$>RU*T)z-o7xW^smCu|KnZaHB?W~ zcM=^Guw2^r<6)x%sk#%OQ$M$*dh(5rQ}!=K#$S7#dKv5w1>1jUj&{D;X+%XytBR#2 z3P_Th;0F~FsN8I3Z(v{7^WljMUuYCvh#C51{&+xJR9AxKi~nsjo2?CsU!Nvs;lmxo zy@Ni$sM=(TEIk%S$aK$Q&s?%8X5>kgn!81E zQnP!VFx(TAZ9UXuNbcO~+Z1EIo7T2^rr%WUpU}?w%yqkSNM$F=m9ck#up1cxGwQ}h zGHl;=9AyREMTxPTo`(vk3Z%927H?h6@m}yNU8&wz$J=46Rm$tj3pSd1J zmMyn9R79o=V*h#1f0IPNt;2n@l(#mkr?z9%o~ow zchk_`gdnG~XVn>Aqm;%@Lr@FNwB!zaLC}Qn^yrJFvIifPWzXJ=u}{F{o|RLOxzgkJ z#Kd{zsebFyjR?GGZ1L^I@p3jMiM-t-y(0_Iz)C3fl=MD^)e3>mfHMQ3wl9#2j)noT zceb8S=5M_qS6e9s<2n~t)%NvQ1hIj^2O0BfGHt{0D7<)V94CtgeML%8FAv;X`?op$ zvGm_3^)BF6zs}9C=I1}Rh5b+9L_nS2-n~#ZaP2iEb333ek8o-rztv$ACa$Du+Jrt# zo%oby=FpO-DXpzxV3_mL3?>xTe+=URXpSl01#Ur` z)%Cf?RGKsP!&o;(7*Di+dp(mV~9#=2Xhk|qHC`SG`eCP`Y% zSO*(yg!Z?21aH<|Xs+6M+j06vkLc8Gv`ukej9Nz0)iMQ}zNCxyZC1s4j76*b zaA&oO>j)rJ(G8%-{_KZ}aCP}b|MnqY*j(=Tb z=sd3c?)d{if)O;xNk~cWMIeNrV}hkQm|=Q`gU{>+y|y{RtDJ7A3}$oxa&o2c0R?+7pk^owYlf% zHo7{2d;oevEjx_^1)M4_w!-zx>P&v$yribznWIxnu{V|2#oFIIR|+a2q9_fb9=aa^ zX;ZjO1;c#3(dsQM#2rgU7-D2l6 zOcG04Ax06}b^U?-*nX=;Bia#f5xE$=#q0}+GPNUL8%kVWXBSqClawiw-s1oaWsGVM zK|m*I=ON5MN2<81`mN4QP_E(jY0s{@@6TVoty?&#aHYv@*}y&j6l45Vl5_UQLg<4& zAZ25a!-78_0%MoS@k_v09+}kWnp2v!7GIi$!{OONE!?Q1JSZhNQEkOKLC`&Z&7s;a zp}vA;ISPd1;~a269~K~G@=hqQKKA@G9{IPQXB^`$a-uI<$+|l3&NX>6j4wE=?%p-; z^zf>SO-dDclXYvocHXu<+d_R+>UITRf4+=)P*tdkvD3meu?yRuR)GDNf6yXUH^2=*wfa43j3`6?R(SlZ| z=1&b=y6cIt6RczLrCZ+%Q3ive&HP!H;>KHp;4!uU(e_0tH;GjDE}e(p>r><}?mD%d zR+ZCU=rIVim&0xgbR$hht&USVyS55;QWr57=CHMqc(%5gTXtLv;-bBP*n+Us+(APY zDQdSufaBOux75~RJm(bs0MTP&oc>c*)}sVv8C`QDSueMHkFIXFr4~l(){Xi^{VM3! zf56N;m>pkGe0;$4pA)IEEIcruRwGG28Np?1!(KJk3QPdBk=izwPRF)j6-HUeR6V8706G9}OyG zA5#l+EDCm%vTQ$d%@9YMhoZ&5b7GKetdk}6CWOIdD;j1P+jlMn+Z$m&w_Dv*E!gw5 z2I4diU%ulEkdNIlTl8GPcB4oUpU?6lEAvKOZFJs|hL=h9hivEdm4qI)@8y{Asa?*u zQ`x!tW)HEtNQdTElsEDBD9?ml^LsuZc8_w0oQ`kko)Xa?)d5Cpuzf40`)K`#Z!8^j z4bxlna4@~U9A=BU&Q<8(W5P$an#?FF2?e8Xeu|(DbY@!@_W_gK63$t8U5KD zi;RfYFpZ{+`ji0yl|!UpJVjBAsE9>R)jeQMI@l<$y(5dwy9oiqLFp@^z z=@cvY*i-@)Cfni%&(sX}eJ|R!NE}DvfZ#eJYqCeO=q<}?qKQ~LAr#Ef)}S0N-L|jv z^9YWs@r~sCqQ_7GC46_}w)ab5>^AWtXmLHam}WR5eUwFN{p3+9?K#>_rA$>1FoeW+ zsd3exxwJcLqw6j9bekBjoeYI<7PzJcv247T*rKl(`z~f|lOq122 zYH#FJE#@KeC_gIzt8xgH|D|qWaH3E#o+>B$K`#<>Tj&7^8LxcKvu^vFI84fvDnQOVsMp5wDd`i~>SSvnl$Virc4x*woF{cRqF)OeFKF z*|mj^#kI?#4VRpQrz?$CZo4L>Z`m&Fzj(TM`ZL!sTU)#Gldm$|H|Vr1_f}(t)bzF* zd10m@BE+uT#jv#8;>QK}y%=XZp34tWID|RCSow>2VQq9zo%ip)>6~5nb_a4e5%+p8 zZV3&p%Ge*bGEqGzHaSjddA=1vMk_44HXC@FEhf&RW#X8Y-yZZ*rB=iYIGLfH!L5&e zoOzV%QdMASLpc`^!$)qgR6o2FoT~0dUJ{ljRr&JsyL=$+vcN?Y$bM8+4T4@v$q!8?&6D@G6oP2>K zAz}03h@WMvoYhM5^$jgKfRErkf%Y<{UqZk_=w~k1iCXpqLM1nG$;W#_eJOn%#Ec1_cSY_xU@4mO) zd|h?J-#Fc(L@Px*N=zt$8`Hdgr4+s?72>Pm`RsMHxy28#ck>UiO1hVcoQ8I{GF?qi z)vj_4?MB(GL;wwYnxjn(M5+{Uj6 z;AS@PYNPF6=gVZs5E1cL5#{48h|y&_7N|C$50V?nIb=X>%oXj$oXFmBF|!E@Tva%8 z{!u%id;VeP!LTP^r+}9=F#%i75={Z~b-;M?M@I7c7J%+F@{j)#^X&agK-1*(&uFFA zaD~E}q828UMu@&1FSOM#o76ox#IAlwV$K(>jfgg@Z!EashpY-)(MEz6`#Py~!&(fX zIc)dS+Q_shfnhRMqZ8~s%VddER2oGxlN6qB1xfqi-6nK`ci(S}QQLHMa{ePnb6>~j zzYy&rp1rmP;ZclS<-6Oi3_@*3Ut_8UrQ>Zkf;YOU2D=?`bmSs#{mH1!r!WoTo_A?Z zv>`bu*z_P|^p!;O@;$DfvL5~*mRPk_rgv^c@zz#=NEUZiljEn)TysNxzlPowTD%e9 zk{`K7{mk{t^%Y^fmDTcgloh2#Cqb;%zaKk(C>=moDE1kd9=Q>w9$sWfp=^h?QaF=@ zc3Z6l0Nl#k2sN9cw$}vjcO94fZfg<1W&WBwlq10L9;e9_cyD!RwOqp{VBvfqMS z8dodK53668)+u_sc5p*SI@z^9EshfyS!o4e%-9W{MmKi7``dy{O2>ABv3JE71+qNk zth9v*HdA%)eo!ry19B5k_gUziz5J#F`F*Gv^hc3KQ$rszx{HN zL2y##Xaj1G5>%FNoHa70;XSA2u|$o#0N+`+V`g5;{wRGXN!H()@kq=6C&VL7%Zusf zM?G^u@ug%yx(x*^dIG6xpxVA93s_Yn&^v(Fx>HkZT_mShV|A>>b(`O|$z!d7?y=VR zMNO|MkgaM31k-G!n!(>w;oK1pmi0fqdl*^U1rZ6DIRgqS5#hL}KJ(izFiG1Ff1c}Y zzjirS!Nstja@WS9w4YcYJE3))AoW9^+<;r)o%E*jQ9le^yK1Xp0^`NSyHbKAL7sF~ zn3hAeC5#W{-4(j!qJ-qJXYh}%xD`HLLW&k2r7n#{C@kW~(iT0|JDbgf8=4}!1agOD zhghR`2J6&N0cHvE)&C zF7y&Rwe-yHoSyLEtFPG??=txIbsfH6n?nfsx*ANRF5N9H3n68&tnoYv6z-@sm=*_h z2vY(d*v#>>g_z~$BYxw3jK+F2LIoNacH-9wb(XHqn~Z=L_=wFOy zeo0oyylazk$5W0qS2*VYeI!I3JQWoRGZ`vUWZ1b?V_b6us3TC_ZH{QF-;2@WdI>cr z&0?*WZl<&!E%kQd{B;p`!!720(KpyEd_j@Ky5Q^=SNmJoT)?8bIq8I4^%OJig;g_8m7{Rc+OKzQN{S*5XbzsgQUobgj6*t}EoVz+(v`!9YKL77j^C6(qWL9Cs`JwJ*wkx#b(h8;nIWma?nBM2WOk94DQQ4& z)f7_#C6V*-Z3j!-uVE!iOZ+lCpVuxy12T3fV*xMq<0l3aQeHu zs-*N`tAwr?NS58(>F8i~Y0a;UOK@*_R?B4~KzuTPf6+R-m)BJam6hC8=xte?xL~+E z?;p2SaI>Xi%Zju$+HTW$ac;aHk0X)xsIW>(g3C_mz$x;mN$B+1bo zu?;as<|jPA3S)6Sc?l|=Zuwvn)3>&pus2$l!Kj6FaQvMCeghlsljZ*+BMi2PzP&{E zFPq9XLk{kQIqyWX6KL0Uzk9R2n8(LawMwG# zO#-#<3?;(aRUC2h%qeX;hcmqv)~Ur2ct4(nGxRP?0$Fi`FhULuUf=6;?ZYhr@LbINRwE$XwjOMS>Ufh~ClJ zC=YQFrjf2@?qmQGV{%uDM+GJn9*tfxc6F1#AKja7rr?&Zo0Tfof>(>uTHui9fLYVp|pO=+23gDZtwMp?5OzioSyGX>u<-sk}5YX z_xIXfUVeWp>7Wt(Da8Bz@RwDPkp+?PL(RNL9&a0m)cYMOfV!<2wb`KL*o?`en6KM^ z9l!q+_fPrGmHWuz_>8UI(4~9SU%^S<>O~Wm)8U1>KwX*xjNs>ctz`RFYEf58eV_tg z+B{_V0w1(l>`Cjx7Qr$zn2sC~%koQZLh7g_jWNfUn zA{&M9_^`$+{xdcKrWug3jkhwJq_(z-C)b!3SKoo43)NZN;sa%BR;wP<0fZb0P(Mv( z1ge2jpP;JLBvkVv%RcsATcl*Vol6TS9wucJ8!pMvN!sGcEoycgru>4+&ii}h3fDY= z6kf#y3+s(gC8YATiRhh2d2DLqsRs4K@rPEes`$T6M&Jc;%pW@i@cn$!hxq<@r(OuJ$IYrFzFp$&CiGa<_hK`wWoX(1pxkh?B$goqrmWDE-L>*#iF z!T(yj9={}&*zO*|oj^P#nvnP~+<0%M(;TSzy`HNfwtsQkMB= zXZV+u0luVylb~#t|MF@+CseTTGuO-7(U(z!-cbPIInzRo<$QR}zP*l1;%6hgVxS(N0TX6dOp3nd`@k=pmeXUzW^d5t=wm1Bx+O<3T>jC~> zL$s19vKE#sb!bnkdEBnaPq@0~ajK3aKgY;m5M0^})1`c-Q_o)z79AguRz|l~wVy4n zZZOu;O0_Q15ETmT%4Y4>>S?1WX`?+8fe48_vvg&Suru5{rz+il|V z>gIFnbNK;S?K1gQFRMf6FvS7uJw7@&rI@+(Y@eQZMeDrwaC*u zNu85zj)@hv6nQU_EZty@I488jMrt8M>E5`p3p@ITq2R)O#IIYC1Xg;dwO3$Pg*OAv z@#l^#pvJXLaz+HJc2ShT)i{bwMc!gXcJ3qh;=ldlCKuS`SJEDOc_2oMoM5tA6p|%x zkUkj6iy=HzEM%+)WC!NKr_I9m{d}+fH9xWR0W(n7rQS!+OC;+o_mO0L-Q#vPp*OX@ z6vv?%L{9X~>&Ot*`*xY|E`KH7Zw4Ztx-oH!_O5vYw9sbt3&~WBR8~uThgF_++x;c7 zlf(A%EXb)Q2h~)^P+uEDX#Y%=4a%^|YBKNaGfPprzW*2i$;-Uy*2r;f8$c`Gt(E<` z`>dRHUXM^!Q-fI1bx4$6fT;>j`d(iYuWHq5Y-!aI`citn8M*z{N_@3*UtPifcyCz;GKjlZqJg^%htCD>yvoY& z@!5Nu(=fGPH+3k!DFY3N#Nibm1L{rN$%o~ixr!^h_Wz=g!S(Is;M-kJ@+#>5F3yM+ zc}www`UC$AsqucGyzJ$_gaX4KK2_FKamOp6m?}Y1Ux3tQZ zSKbv@2*FL~{-5$!n>-i*SURud-E2M%$DeCDSs|%IOzv>8_vTX`JY}LDu1rif_fga% zrJpi$Zo}o=l@xFrFgig}veheD#y~Aek(`8VjzB7y)pd0&C0ewQ+^hHTss{?3cHC>O05c($m1wnddk zlH#grOt_ht#k9xr^E<3TKO<#OXH_aO4D74SA1}?H5Yl(ub&H@EBR+4klD;UG!sbJ* z9gwt9vZVPsRr~&Hg_PDb7*?`Iev*W4%n2KB<@OnMtTEk21qguV34q2*Ze~@r$Gjvr zXJx^vWpN^;foxy!S=X8E@+8TXR9&}#pC?;{imZLIc4nb>; zQ|r+(_&U3s*%zp+Aic*2fr|xqB$&J=<4H+N9@}oq)iig4cwCcq+FVR`pE;Ob(O7Ib zsF2H#g@J>Ly%yj+FV%mPGEEYCI)D4D-~7!BMkgN_;`n%8@`0)V=oA?Yd>0v)l#t^Q z0B{QB1n@w4$9Nl&^*LYk+_HgnFQD)5?+agvGbktLFKV14O7)k1+4^(L%k|Bvj22o5!<*7F+!5uPrE{Kyger zQe4lxRLRH$pAQk`AA&9t8`*bZL%fg9tS%U#u3H;ZELtQ>4VF&TAp+Qf?`J%7szN~= zM^70N1t`GCQBtxD0Ds%}Dg$ij9Q3^^l9NlG29kyBc|LMNwzmYJnlb3Crak)_=E)zj zTzZM8Azf5Qy(mWZ^=U);hOW%pIBMa8omCs6ntR1uqib2KA4i2_SB&xHS1gKMYCw-;rQ}x4?NUgLc%ZIBd<8!giZyur6RkYkjZUv)dtl!9R?a!4f-a!P$1lA zu50$>cs+r|9Jl0X-N|#=h5Mo`Z$Yr?y#N6`RdokRIpfI#@KQVDJJ?~o4#?46k6y2? zk@SxF`R2R}>A8XFCuPrG7&Lfcb`hq0<@(Fl8}}ivOM%eGvfOrSW*wG?fSVmI=&c{_ z^|ov6ReQL{2g-8ddSp4pmXZO6HU@?ZcU))&gn|sBh3mpt56q^!fR;GnzkhIWTnMx$ z^sK$=rGl0dn~Rf+KJ;_j>Ys32o4&psRfpm@mS0$eRNAr{L{4xah19eLWRryG`sI&DBE=)$e~QThSpY|X7wfX zSnsI7;rLPWbM z|A{w|wU1mdUParh891uN{7_E*Q+MmcV*YXwa{KhcRvquk1eIRsKcfHF3bfKQ5KU#u z$Hd+GBdN?A-eoVl@$qn->+m+1 zM3Q)rRn`Z0`yH(}WS~N-D}~xb8PGs0o~u{D`ZA0NPx8+(`d`1@_@*KvFFG<;z&lqp zH>B%`zO%pS`C3$NfM?9`Lb%sZ`}#x@Di~erSnUwUInXTE@jObz3P;V~Q}93S6>@Sq z@`d4gM`_5>oaJOLYjt#hHos;T-M=d;-?cmaA?i#};Z{dvZgIHU!f>o%{jxhI1vVSc z+76j3bYrlxpXkQ7eh}nrDi&tgUO7INmokfTjOiOaE_~jQSCgk85H7J5Ndpx)EKQwN z3p@WN>K!{2Q?OI~o#Rr>v;F>`5`<5Udqi)CHTn?vud2)&@&Mw??pl`q4W z`m@cgOnp_vozBFNf&h6xF>}9yp~j$$h&Z=9p3LJsww3qMn8O095+8W~eRn#~jUc3_ z)fLEJ>J}uk*4$}24G7KD^@Yt9eFef3R8S z5EI)s6iW^Qq|wZ7R~21TZx>RL1GFhbdG2O`#@4;NRyTQ& zOLRELuW^MO=278FF79%5MfW!bqa&z~+o#LfXl~a*F@}D%2as{LC27FGd~Ar(W1YPC z13giK!&KVP<{zOU;p~|0PuhPIK2G%d5^WDv4a8= z=HPP(abG1JA0OGfm}`2bhyx3IqL&VDsAMl5DG58CQYtuJjhgdObpL+ouUwadnlFWV z+-4WNYzI#Potfxsh|=UKAl+rlTV!7TtU9H2;y@Esc89gt^dgEnW39Fjt1qayT%4R4 zJCp^ec!UE5y&azY=OU#MH^Q6sn!5lAjfDd}Nrzzn4eip|x#{hB^;+bV{>X;#W_tmS zb5~sPe5Dc~OSE^~A2*bL>ClWEycZl1f(PV_`gg(&n?Eef1j4#|+gJL$-Tr>aFGu7h z=j%C$J2(M)NSj9mJe4=JJ`vy>A3yAGiU67+1*@O%A=CXG|7*@_S-()3Tpa`{rFtC~ z{OqlpIP#83eMTM@bv}}V^%-e0u=3cZ)Gpi8kN_(b$ zIgpMHwiX0}&Tj;HDUQc(Kx3|03xn;>QYu&pqc9pTr>F}?y0*824{0+cT*`h@q;koQ z|I?gVfrM9DQownMl%FyCQ($Yew0m+dog{LD$KWe$zpP>hV7*dFz{&PTmgCx3x5Ba>%eGR57$E$OoPZXEH4X#; zcgRr^c)vb%M#-?hOAeG0X`}XCm=W1@#>_|er*s(c?cD8eUpyPkxvA`@LS~a7F+W^* zmaA2}XZ|Y6%x@=SBVpl2tN7nK7RM2NQXsrt#)5N~KX_DH*R&pxfbb0LKttyE4Hm!w zY`>h6;*klVB?a6PCZ^4u!5vl6hH~#|3S4I6Ue373yB?nr^2i}C`&x&R zoL+Zmcc6yOwX3p!|04pv2+oLsmsN=|voUs<-*e*y?S!h#pWm^T0(-+;%b@e)$v?sI z7ovouG@jLGpFfz}QV|88_0GDRsm@}RpRmm6*dAKS`fYj{*Q7$Ntk8RFO~QKhdXEwT z**Km9M3=qO*!kKq-5*%|KyL&#r_uEJHO|F5?l~R=(HM%h+<+j;KaQSH{}BpKbYaO%=rIf9sALcSZX zV0+5R_Rn&XvTsl0*O8M#C;L7BGu3zn{V#N0Yojg&-QA(-)C&>; zk!}5T{Y`btmm;fMu;ML1L#1w~RHyt>$HsJ9c;46_YyblvD$A^Z1?aR4jTYK!;bz+( z?}`2aBbZjoqu0!)tHbFvq?>@3AekD^0W|3w*1u<;{P~*F%}ZL-Nf%QrWGt`1;r4By z9)Da`79mxrqoXSf<%EUR>nKMeJOKZZQ#wd00g75nm_UD6R*uI%djo>jxbqn5;l2 zD<;&Uu#-*Y{9u^txaYJSQwlXNEEVsnvKvCtPP5nR`OGDz>|UZ$UGq!52Q8xf+g@*I zWnX?O#bWeMjPqYQjp(lE`+j#~F5XL$;>Uel_PcL(J`OJq=|Tf)}; zYF+|jgwykONM*#YBccgNy?c)0XeuLMWI6JiHBZtpvvTAOL6_A~E?+3yGbt{L@O4nm zg@fVj^&CTV$pFx-z^kql$i@}R+g6UmC3u(JcTk%qsjvpBV~2Evdu}RRoU$M$7*q_P z93-ys-?_0Jy#hC$HF==*Zq|9`+A`TxRn|ol)U9RZ+FPI;Q1%wi|F{*@T=r8@m2- z#gK^A&u?sg`m$eT&gwZ>%SQ7wKes3_ildn#lHdVN_dC*y)cjAH_r^o- z%;Tllb6^GMx<>(I=SC`>XFev(CS>z@f#DX+WOgPuQzlVBti0Oq5Moazq!I)qK?|CM zR7WewE1br zk)xS~ba4;)Dqb5eWj`(KNjUvr{#o{ATv>NLTN+XrZ!gC;`lx7(JRPIy(l`6tfRJhs z&o#eU9|`-Ar)PTITNYN9sOLX1yGWpD!d~WRyV^$-w5lub-3r!wsw@IK;&GOX83n%b6U&OZe(&r z2SUv(IAKVpQYNR|a5%5|zOj?3+eEa|FWUYBRaff!vg)3)3PapVN>9cx=1fzi&h8B* zDEtW1t|)g2ZAwKVtdN0L@cvOUP}EMst^u;@VbU1?;pO`4S>bBrYxm3S+J|Yv^{c}) zD8+JVOuN>OnBzv2@Xsra!{=-5uwL|owWEvxZ6-&L0&P~`U9n5juQUHEOqOIsetf`j zGTI9Jf+PHo?Oy#sGvWD@9V{6Hp7K9T>lyt)Pl=mC6AAi-fJ9Vfonfs%Z+GmekJ^9m zS_}_#`Ie5vm=$XgWVOPq{2Q8gQ~rRbNN9{K7T;Y2bf`Sn%>S^gNq+z#c>Z(=c(-}! zI<2!(mn z2|t%h^<#CMAz$gM88^;8ePxjO&Jd^6l&y4A&)}``T=(hhG8ASS!w&82DIX{L$Cvge z`6`VdRMI-lwK}?9ySeM~6mBt3A14i1+bUT@z}hr<`^1k~Om{liu@19FKd@XkS3>f` zc!5W|g@jMyzkI5G7(Bv#VWeD#at}Y=R<_()1WnDk#m-{pf;}zJY8Nibm3#8Q?x7LI zH%|_|eIB8J>P?B~F* zh)!BLE=D`vEVHx#xzTeXCklNttC431>XmktCR_qs45mK>Ex#P?u%S3RdCwe8UYn`f zfLc{mM`m+~inhgW(t4pqe|A=2OiA!sQ9HXQ7=i%^40%$0;Fj#;$^JuriGX)#Vzqfj z$hMCDC#jwjUqCOBqDzyI6{Cq{hoF6o|HR#i0@>Nk1(`1druXeFI$gC9!`ll{q*>T5 zx+nN>uZJ4|fHZx0Z?;h`j@1pBT55QEH1aWDU(fHCFASwa9d@(lA3Iai$A%Xt_viik zg#*=kZVTWw?K%w+j&t!}5Ay#rT+hTC%l74$FqZOm4~aJlt*jaM_HQX(P)pZPeyI-W zh_*D%*u0-MSN6#q^>hYaTDAZ4<(w|5dExD5a9L@SM?*zU!)`}+gqi^dYCZ*-8-Fv9 zBX^3V8mVIFw8~hOQfFWlS@j?e#mfp%iGJQ2xIA8GZ@>_g0gARD*PW#Dj4PaR_;fGc zj@VS#xym0tN?A};QjgwodK*~f-!G>MlsHqP6odkDpPocS=Pg|rhr%;W@o1ac$Uh$pgIX$rxs;@9_?D@O{YJ|yIuj24ybI*?h)kbBm0xyc@& zH8|2N1qJOPqji3(+rgsJ2267>Z&bA@ zZ3!Vf=Y3#{6nnzxyj5%-rY^)Sr0fooWnSvf6)w7Nny&C85f@0FXPmxvC$1H{Hs0cw zU|B+*>rDsq0gHhM1VYQez$e>tW+T|^dqEz2*Ay+L?f$j#4wSDTIbPm|>XBVB*RxDW zfvR@&?d}>t=C}oCyqAJp#_&(eDXxLH5+192y&|UTdGXvnp=}QnFwK29>vHU&^K|+h zF~!712hS@|dN!`13P=m&zWtzSC(6%C4c#*LH=aSM0mO4k95YuHF(%-(Q0`Z9M6O?B zjvL`ZO-TWj^^@7K!rH*#L}`O9FidqE0E1Fva_TTn>tjdR1KPJOyr;{C@`mep4CeSy zo|Py8LiVj1?@>g#cXj67Li3#8Sh>NvG8q>mWK$Oy*1?+-TDg1}QOzuha`;{~18*tQ zlO)OO&mTH3akw(k1m_@;gcg=)8k?sk3!m0yE}FDW+%h|J``-0N6{G2yuJfln4}-9I?hjM(E~a?BKW$@gGffykwFOO25@v1n zRzo*i*}kO*)VUjx;d9>uEVhYHLB+v?$xUL-@3+Q1B3JkBiWg|z{HIA$D_rlc)H%`+ zE@;w&buTb~{=$o!iVY3IyB$=oFh6rayS^Uf>xg~5$Nq5P{|)m+2U2w9oC`P?E#75s z@`fNg={Ykmecs<0t(_aS!QS2)&v+9s_xu5sqIBGffqmwpOafC`VdM1TU%4cP3~so7 zyw51mmj$pXKzMN+%AI#*E{>*C*ZO-YKWSE1Fh2R9;IOku@X7LLF765Bu_&DsNStcwG3!A0!MSmU2W^u&w-4xY{@?u;O+?A+>NUmA?|d!p1X$wP zIyc;X?Vi4?$92rTJJK#!OgM2mKOk1sUn06`k%i#d65fQ|Q{B-&K{0G?w!sq+OF1?8 zw^j%62W!Q<_M1h=z55yiCiJ)j{RvyM=H=rLtSuM@V?~wiykC=WG4CVZgOsDl^iTiv zzN-i6Bj=SQbz4L*1trE$#S1uDPlwpja#doV%ocT-clKkw9`qVyo*h*AwXj`VhKP40 zUpu4bH)OPLB#y~?IlDZ<-&IcGAhhP{_1iiYbo|It>*iGR{s#^3J@Q{IeQc;w4!f_NtF9HKaG8$owOIS!e?U|)Blc)@ ze>Uh_$b1IRf=NwLnG)Qw_wH_CKnkDFm0?vyqv}vpLxoE9FQl>xltoKOS)LHrDZXDZ;qp&W>PXZUIdxDVz-5xd}IU< zI=hbtUl7{M?CiBzVGhW9z* zAK40AEx&JWXE%uF#-DpS!W%!4S8_iopwnQM9z3IpYajAgS;$#>J3^i9!}0aK!f~7O zBy^xE7^~pXig7ZQ0jrU8g|i_pP}MFwS(1cKP;b*B;fKNiv2&9r45qK$tE!)MX;Ph2 zHWm@BVp_Z(V~*j;A399zq4L6wR(AdK68neHx{;{B+a@)<@m*S z#rJaM0*MvnP1-uzO-+FnH9iiSYe^!~{XX3aOoc#zGrzjM_h4HU!J(mz01bOg-JsfR z((rUm_|Bo<>I{IC57Ujb*M;&2dXKPxbmv%kAU=4uUel{UxAjt!CIP_5_d8~uhk=oH z*Z^!`5OxLW^rs_81NeLD&|Et}FSDE=h!T(!jYHN$Njgq3uQ$gwda1atC-6UN1Q5d0 zbuu*Mh36RifWd8#tH`1*gm74igpJu1$V^4a?=xm8dhl02<&UsKo)T326=0;)cMYi^ zFCniPjCB)uMU4Yw?cz%+@~EVe_hU6BSpcB1ghK}Ov!!xK!dXW`j|PC^*yI5Lna+C~ zSTewo!%ADu@q3S`GSpZAOU4Q_*I3fzF{g^G^GisB!99uN6;t#RGh3xqU<>*O%!cpD z(vQUWlSvdvs_=$0l=<{xeajl%pNKDfY>1cRCdTu<$!YbK$o6UVJT)*OuG(iFJ7Dd` z%#O<|A5z*Nm&q?B*NJ;j0$uby$SBX>wKc?xbz`<_a)@PyPZyIi=}>;QcC}`i8o!z4 z%29$qEi;KkCo_CGww+_yiL0ZnegIH(5I=@-%wPz7s3n(Euyen4A#SBxxbxZP?ePl8 zNMn$$3wU1dj|!PTiyko;&~D4fHC z1Q65l<&M?Z9Dr}b^6Ol|u8&p3JG=7zBQf)hbM?U``LdJkqv;C{*;hMn$vC-q{cIT| zHUE1>w}MPAHSI|e>?iljymv~Qj4i)Uoa?^en+Nfh3IJ5egSP6G6V(CqCH&$n6!-0~O zSClkRQt~z=w0BQA%b}?1#5qiJWQTBudGJdxs1MwWDpe zOgHjeqdS1OtB@Nx7vEUFx(KXAuMIZ#V48i$E~($mpGrdJIs5|1WbA|(#3k(H0r%Wf13hMB~ySfB7L^XwL_Zg<{W`!qMw@%040j=i&fg= zfSpSkAcf67aSEgYO= z`U4TI%t!y@ilFWr{VLV3w)LW_R0xNwdqyc=p7^rov07rq{X5_PdEPu6?uh(lX3!z|r@h?w2O9vgD;> z=#K_2dg-a0301>bci58F8mWm?4p|yh$_(@@1}){0a!Lu+4~JeD()gcS$LzeGSu3@x z%TTGUPx}FZhS+OlpS2*Gz~wR^77MQ*23ITKtZbgnOSwtIL-gl+Ed`6PK4Wiva<*U=T^)d%r97~EMWN_)mF6*$`(8O#(ywoaI$u3zj`+pez?^tJM`r@^5r zl!pVV9B6<+-`!8v^c)X-I!Z#X2OX0gH6taAD6-Cm+N7JL=K5Kn=)&wdwt|VW|DDVe zw6~qCCBYMjXh{P9tyHbV*Hxi@b8lTc^1SVX3?2lJ`NzM>0&oOORA(Rq>l*o%p=v+o z$3dob3QCmV)^aYZvHCIlQH2d;Rq5IYAPv(Lnr4<#hsslbLQJlPAX{ScD^DfUlnDND zZ9^#Xthee6h|mOXA2+X3vP@8Dy@yn#JT2h6e(jx$e*E_1SJTEREf%@DSK+cr=7RRI zj3S8RK+MHwaGYC1-}j2&V7+Em?W^t48MP5PGdhbED#XTMHoSdc|3uN~nW9gc-EQ*I z(F5vIvO@`KbD^CG1BhM6^h&(XbcKt4b?5|tPzS{OF5ci@GDQE#7C9Me&mkW-oE{Ae zi>c(stecpK*nxggH_hquRK7R}@5$>-025Vl_n1^N?@zv$>Sn2~8|L?N@>0BKoB>yqsJ?Ie0* zoX?A2X#mj*>mFT=m-=983sFf?sVzp&X69<@o?w;4Q+h>`Jai`FBu!sLh zxyqo+2qGd`b$07BSM6smFF_AlG%4Ubc!gp~cB|MCF#@Dp`C*|u<(lP6L9*H8300?K| zwvcgXOXxHXk1XhRBDs<1?bb}cI*(EuSv{(ZUPC@m?*OYpuq@q*hpZ?Ug6QHqyAFps zVW&GV9+jl-vHyp?_Y7z%YuAREQOB_l(gXxX5D*YFgc=0Kp(z9yOhRY@0ZHgB5CkcY zjsgiyIspP>fB*>ukxnQoO({W$p(6s)yA4-s$~IbIq<`mMrG;O+(;JGIge%&Pyo199veFgB);E%_}fx9iuu2C34I>| zGBx}7nftiFtXH#Bf!Ov{wetsF=a4F}cb(ub1Q0{`XJG7q8v~=Z)&DU@j7D1N1h>z7 zs~cy|pPUL&(=hpPKrAuoPm0#dU){T(zBGkty%zod)m?pgw*Pl-{{NqO!@4e^?awz1R3Jovz!5-s(F!!e4-on|WsWx=ywaqgm$6 z#f9gd-puE!=EA?i6G;}wJg*;yfuHxUmD3TniHA4QP)C&P-XH-_cTSg`AzWbzb!EVZ zDH`jwCCOX)#M}z0+{}C0(>is@j?VcF0NW@yYmBiiw`W3AWGDG~B4s)q(%~?ms0Vi>dlHX}Uy<~^0di!L{vP9SO14q5 zqN&S(Yl@Ym@IA?uqE7wN^R{%O#24C#2aWAWoNP;fiTBh%L_(wMtOtfi*YXk_O^QWa zZJXB{fX)QUsvn;@;&*xNXKfSgnV+lhRJ%#F6OV}G0@>F^3-|V8C`2-F@K4_m4li-g*~)@CKg-wH&S#Bg(5dv?ZT3X(yh)dHB2QUtc!SJ8uFAtY3XeDAuNihZCrI z;i3|lOOcZ}Z9P}!)Q5H$7Xk*>jhF6ta|5;k=`hfS(UBE%I?4?D+Ow(AfC)^!9son$|Fy~#122{@x|_Qp)V zl$jWw%ay->ia-%%fUJxPtDQ225Yzpj zPKeeGOJc;i*#e}HyY#{=4)$bO(E(MRr5W6)Q@sGl0zPM9<(8Abl}#5e}iU?IED)w!)Y?q;6mpYG&uH!5=rFHTO4+_M$Qb`1!{u5flJ1Vuj zP`g9Ptw{lv-h@D4OMhSQQL+I*#n$S|O6zO(%G!3S{Mr@2(IHZUHBh2;Z8y-{H!w(p z5?Ol!$hna8>;($NVl+k0lWatc^Ruq}_$e6Rd{>+qpBV3KX^}*>ux9`8E~kF)^-HH; z=Jdb!D@FItzRYzYLaBZKD%D3~+=d5kNEp-f+lK^O*Qwr|4v_CQbLuRiFMj5D$9I=* zd$#5u9MMDHtvqo%zP;r!e!-7;5QioA>NllzXYO|D*@<2L%)thPc>6ZGg0Dlaap4yB zPrNa3X`uwYvw3k7NPX}l)!P^y{hlOzjDh>iab#LxWhT=vc^OhaJmt~Ly8lX2?}7Vp z{fmHaY639B6T7F2KKT!>uf6v^*7ZKE!eiO`evvTolYht|+TJ_dUXaT92R?Tt76y0u ze)(;T=l|40?3%vOjyU;K_D_w3SS{{Ld3kx^d3jGKf!dkYhO^mAbmTl}L;Q71%%-M6kMo;m9&L$ej{J0gyrXo=aM{plBT z`R@rn{oy4UEIY^XHHz{54?ks>J$2lV8(R)2U&2H*G~1wox`YUAAhI!3+0Vo-kv|}e z@4#q+REBaxM{h8zD3vHIRp|9~kZCDxt$XBfP zFoJi)m4n8m&&RwgtMJl@9{=uXkJYrLeBi=h?t(-4&A8aJ_x-$KC>Z*q^HXK=&{+xn z2i)dvDN6Ux2Hdpif}F^PvqKKy(uI}mA=8vpN1CN{eXnf^!6g#V0a_qZFn8GS4XFX; zT#fG9c=kGhIw>=7Wfw@l*QucY$`_P?zJEu7Bnc$RJLU> zD*ZMER(UhJLtOlc&HbFlxLYo58kNuTKM5j2t-z9(LyHZg4H2ao^4T6v;CIURxwba5 z^)jp!f+T-g3nfs4#@gAKYx#`>OopOcO5|*-#4zlWyAGJ4(VHD0xFAC&DVISV(*rHK z1!55kTv6fLhfB}g5aiA%ZG<{^aVGSaC3$f->i9NJnVLYTpMI=O zG!ppCv8}~|)Yq0S?9{Cq@$S8DvR$q~`)&^*d^@anqIz~-^d+4!I%;8~1$b+?0 zch@=@ZJRnoLGtd9*>dC#O)i$Je5TNq`Fu;vkF#q%r6gTzjruKzb{k{R3 z8qo{Z^t}NJIBKPHJw}o5mY-g(NcvXz->wmxH>b8+i1}(+tQclsqic1oNTwdH2pPNp z9S_9r*|)zXbDtYbQ}7)V+@j^b6Px?eo$Y&5+#zM2UVlq=Gk>Kdl8M;I`b zk@KH9%vKd8eFD6;I#Z&Oky)$Li-5GuaDKW+bVz}JYJ9c2%I;LVZX2y@Yt7Gj-EZ+N zQ@KU6=UT_jVd3;(?4+0jdwO?Utt^1?$r&R!o;fFs&R&c$(o|jLd^Wol93(VQi`pss z%_Q)DbBnYbAJN!in1jydg7(WxG`OR)5TCR;kf5M?Ub0R!0gov3&w&ChM9#Cw9e%=L|z z>DDVhZj^1bxJ-53*`Xqz*E~wylFjdqfkp3^(pvw~FG}LBkaxHk`U&+l980<^fBS=- zzj~RH?~m;4(qO(EmE&H0vIYUVO#&s_Z2tB}mwRQi&%#rvSlXEYZ-DBIyRnzsb1`f! z%kUoGjN-efHG=!twrsYCZ>gPI7s_;ooFC!i6nLs&E~Uy4q*E(-pX^cv(su3`OnSOL zrhLzU3Uf(l4MIn6<=l!ly)%#n&A*x{%aWWIzInevFY5ejf+}pVGFJZBGjto_5IiD|x5_MV%|d5ekPY5OAc9m%@Q~W)r}&F#$q=xwyE>#TQO0NuG&nFl)BGGSE2c zW$HF|wJ(B)<=wHvmlu&#WKpHvp*UEj1MmH{VLR05)>7ul_rUJNS7+;%(lDnAA?!K7 zw>jMl+b2|pYq26Z@`^e)E-E-(;1ToLo8QbSyVGs$A8pl*QXDtqaF9+eOl=( zF)_#1QGf}GMInqG6kz;p1PtI#MVnZ77*4;7o~}U?yZZ>9l_yW-GXg#=Q1j<2&}{z3 z;rf6o3OfzHM@yEbq%3q~OWi8ER^yew-tYN*KjPs=!5T(9A;0)?wXe9u#f^<&jesBH zB!+krZW__p{6EP>9ro-P`zW7pXg3R99OmvSwJqr2^V$sWrRGOg0~Oq84yf8Jms*E!0z#*C-lkn;H?*t=rVgEUONcz{?0e+36jgd2&IpoM>9*ybdRc z6J%|XVC%;0lu{7zJxv5ENBWd=Z{@q)0p%7ueXZ}#&T{gexDhLH82Y9`?pxb1$P^yg zjW@kKdrQuWzTi7lW!39F0Ymt*RoMuH5f-dAiRn>MzwqdV*$dl(+sjF^qsx^paI=QK zGAPWQP4k&G(c%6CGXy0K12lZ9#Kh}=b4y6(Zyu}fi!=M;p8ur-&i}j+8kF|ROyUKv zYk%dyj%`O*t=fh&yNHl7E9bV8xx!kFQOF1-+uyXM*eUrA;)0Ki!~|~9@1L#(c3`Z& zTN(Xz2j9SlZr*;RtJdWk7ePt7|`ML^U}W_xphE z|0m-;o$Ea{U!#+)r(G*M5aj>xrpU$U3A8u!&MVtcskKktRmuhD0Uey6^er&Y1vo)G z?3zsRqZXSNLlKoO?13V5Kz#{ZyKw>qCMmLB=A|sOF;t?!UBjH+CojKWYmP3CE(V$A zTIy|0;&QkE({yL}gut5`RgoFvr z`@)2(A!pQc_8s}W8&=Cd6iR<2-XzLdyqsyv!QYZWM8~}^PTCuU+Fqg)vZNS>l~wLI zZ44^4go@t!?J}$0I+*+?U0dOp-maQ*W>6tF4HsoIuI5Tfe~_d z>#x_IFjO~^25KLnAran-ST3c8#qUlUHb`gPyCQY(cs|56+6d}*0^(CG{`zFXhuf_4 zw*gdq@8GqOI)CMo@hu%Aef^H}AZ8cY z?QC1rozAqcy?WxKyDYTy5DH_<6>hp%PAt-*!_s?4*@=noM4J?5^f5(o>ik{I)HRzN zTz=IrrOY#e-c-@*Wzrq-fU>=`Vy!{{euPzkRM3 zA39s$difXQs-nTTH1}I~8br?8_m39BnF zC6>$42Tk@%I+5b3OIGRSFcEZ0<|@)^!jOB3njb#)kTop!hIH}XL3Qe?`Oxo=qil|i0Vaap?$&U}%t z9Q5fl$06?<8xA^l1R~}t@f(L5Ysox#e5MYr|0NAxcY9kg%g38?OKJW17d-xZhBi}YA~yv^!>(*?#1+RxoHt}wKD(DFQ@XuyH~kc(P>yLl1|-i zA6)}P%%9PpP0G;+k#0j7`KB+S1lhEpMp`bfO~|F>hg*5u_mn}MB)5_v`AZZ-BE+)j z6T5Np()hR`7IDL(BT5wS)TR5FX+yfu?NUMZ+&muCc?#;xLV!2}sPf_Ac#3G+L8(f` z1{u6_&l@vcRNNu-k1C`18N>dWZ<6TrItEf=A^_4cOQF(IXBdgY7rdR*XR8PVw_ei` zztm@Rtg{yXsqEM8@1W%$FB&9EXydPHNkfUZMnjKz=NLRVcN-wHKX&rF>xZv4oV>bX ztF7H`ivEBA|Mmg2dzt;jjD8~USsHB6XwylR?b2c3^2rB0_Ls;h2Y(Kz>{G%CP86wd z;D2~{tC&;}=l|xlGJBCbb!qjvE#sw8tgNg(!8)wm?gDVMgKalHIc&4I?Y^HW65XwA z6dkkXzSYiHEd$PiIziXKz~0gfV>>Wd?Zz+!qS?iml3!vT93EY3Tq<@;JC?Zm8(Jd%XnYr^UM2E|9`a}-g$q>23<5Skrv$~OaADyDYv`5nM!s=a_-cx zusRzWRAo7JE%eSnszT_4$@|My=l77`<5BU^6>=TSS$@`T^*L^rIoYBloRVE5>}W z)vBFSbK|jsTJvimGzObir5hsWKez&^8a_X@y1w!%>d8icCVP06J(Q)Hd~IQqWVINL z-P+##p!;S=U1WA~-FeX@vn>O+Yee_cQ{CMQ^cHgr%7|I_3n=ru)H%_q7A%QW%Szu5 zu2bbK)#%jQX4G0R5`Hy>>tDzci|N*-uW4)grIBRM%$t-U)1l^dmvV%VXx#oS7Oz!L zZ~Qq2$s7%m+$}BCqwiy)TW`TJTHHh)so0?a^&B@;1w`bAwpDR}M2|>82Vj^vdPKfs#kunl!!aqG zYCn=C)l&kslfhHoNnjw}#;yAC3F42$8>%|Y$AlOX1_n(06}-5FA$&}^GT(6P#yBCy zRC`?Kw4)v6?GrykAmh~mjN71fpE`ln8k>|NP+z8Fmsdk>f;>hjyROe(;lA(rG z70ca);JRffBYzR{^G!DlIB;WfdRX|4sgG~WQsEVvJI$wQNIk8%V; zmhB9sx-?pYI$ah?jwtT2?BeyX?l$L%?=kkde5#By9dv{GPLb#>Ih=g{>{$Cm`?s;z zp_I%0o<{LHxq9b+QVP9ucIsMMtA?*M6zfpt!kM#HyC4%{;afPm&;cKvZ{P0#52E~C z(-K=2pcq3?B6oYUFCu7~?}w*B$Gb>y!y41%CYE6U?1r}SW`(GP{i(2?aC)Q=o=6!& zaI*vQ(>^(ospR2;2Y)TiTVlU1+M+M3_Fvrpe2EGFBcfaKu{hfY-;%XE(v%4=NkaJT zgog0UW#`Wv4I-(k<0~H1)e@i$$xHn`pE+JLL|S@Vq>2S9{=xC2=fZe9<~SvATbG{x zS}K6=m%q@4qm#;?Xd^&DqjPh9c6Z9SS3KQgDkW3g04P6Wh8UxE1pd6#bD*VnKsC5^ zAlA1RB_M*?#rXzfbLTLETa%IitzqD5CaX8NIqFQwz8a)nm9<_1$oL(w4A%JrGJf^; zx?%l5%`wR)eP+8K(C)$ml!hbM0H%?V;w-IsAn%r0#Pr#71tk6&0m@g83_#*sTts~RZc*iii2vs zK(2eId3bSyYJ$-~E8&vu;}rBCnCy735YBcM&3`&&-iqz9D zMX2CUo_3Z+zJYE=M?1QKwZ{}RL?ac4O6cv{9eKny2b_f61b!iMn)%LuwhQSjsk37> z^O>V$9#PA=a7f2afqq;%Rn{Ijgi{$PWGRakG&o6%7Rbd##lpMrnf|S!X(-gh*-k>7 z*$SwD${KZe7dTNlZwDtczn2!vk15yauqa!i2**wr8AD`QGMw1!PHM;^U<0N!X!q&1 z-WfscoM$4l7Tyda&4B|NKXW9_7pb1B{Owl&XWO%-^2-)ngQ?4OmfOH7jnit?B$M`2 zgU_jir~1jwouCF{+wqsfS$8F>y}$}pXVFmjBdqQ6rxm1AacCK8u8avEtN`+Gmxyh5 zU_vGEb{JIMqRg?gr6%;bO?IKd1v7UwQGJl=}z_f3wf0kO&Uy$$Q2~VF!?#=NQJwRvHo$N zym2bL%m3&JC8^kM+v#e}>yCS0Ig>6>!<)>D-cC3CUw*NsDwGBtMOB#mt}TIOo+zz($E=%|#W5kuhBOnB_&6 z4%nl})aTcTuJhkf46t&?e0L_s?7!4(RJ9wS!?j6evy+OlgRd6;a&V!)y1w{d*8i0}+5aG? z{Kb@i#!&fR^Q~xL?_{4H!*ikCf@sI@NwLN`=h6143Lj6xzl zb4X0Fi2Vv;rf)d71>Rn}n+lZoY+lTnw*Fa3WY1S*vwk#RB*)(Jt6=#~4cfkMm5C4P zoyfyD*fw3bcy&tikk0Vv=5@B`dQ7J3rhweinU|+&VFiI(ozJ`c?goG7Yo%^K#S8{i zAsUu{rjE{uXkeEW4muD*o-x~6&Ad-uT;BbDwlbilGky0IpI_MMQA9(JM&Q(YM@Eh2 zw~+tBL5|RxPx6a_;r9;$$|v`5}jG@m!Rv9maJK%92F%p9ND!76xv8q(E^{`1H$;Pg-b-WoaXl(A z(nxndb7L_h5kWyZ6}Tu^L`av3=JgoNx*4U;8uXm$uL9WH7Ksdx^RG_}GLyMMtt4rc z_t88$q2fBKq&7cUB#Ksw09Z~agoR!xAY21eH3TrBHVdRCAps66_N**WQa)wR|8t{x zlPyRouRg4CbkQWBX-8R#P&izM8)ECU`LaMj;V_JgE8Ut}7fdF9xV9e$T3(Lv;!ePC62R;q;3beMQmPf6wb2=O#!k7060sx$+) zV4}nD(e(vNU$yn-)MNSE+qI!(pv_(3$QNTip^qB}Uc7&bqt)XZN9dQz&}>c;0s-F@ zO|_Gt&ZdyVsZ_G0z6vqCx6b-pY3G@Ohj~AFIdGi-wElmaq)C850$8P&)twAZ~| zLUn_oupk|c&m6(;nq31m%9m&Rat4%0O2>T#;w9tbWx;ytjnlo6qpLH!H|%@>MqL6n zmy>+?bu3UFb@oZJ+;Mjqo)E#{Nl8wtA%-`WnDHvS-;ldy%aNi46Y3fSM2$b~o%lr| zL~qSqP{*-G!FKtsg`#7wO6np~)v)c;TqI>-hmAoE#_u4YKn-n^0_*aDf8avN{7-Nl z|8tz+f0`xZ=c6ym@VXIeQPTJ~B#HBS+o_*9mVx9`eJveJc1vG61M+TjS1`6SCKN_i z^yK(Tt3azIg(*xD+tf$xedDURJ*&AA(g4%C*?d=UIU>Wp#QKdymeGy*qq8;gpPm?BE2@bJphKRCbnTQW5Q)$aKT#FzB4Ffs0% zeSZ-7Mvix8Y6#UbqHgxj&6KoM1iJpoIqo&pnR)u%aC7$j`da_^V4c#RM8YboQ=MTR z?&G&`0o$%C3nPMm(vhe8uTC{oRCwj9sRt?D-B^kW{exqed2MTTba1fpEh(ce?b}@r-f>>$?_3*E#J}zL@;E!OgAq5VqR~=?y5QMYh&~%SgXmi+m*OHX>_>}Ji1~Q zDf@~MTI<~r5G6LW8}4W0-gajUp?wR=UkFO<8qEjjfd1b zvta@o?ymjbYg6s;ewFfcNdtH1bqlRix)Q@C3BB%8Do3ALAr0>x zf4LqTIh{dloQ^c)(P=Ytb@1~T1&9yY@|!JEnn#~8<>`4%>}R-UuY~JK$_^Fr($C-R zWkVX(KyfdmoO$xGbV6{?Wmy}7LJi39uM9Xwj zQ(pIn>xksTph>eV>~%o?y)sT^YBE$Y^n~D>LUDVG0`WGp0WnpAT|ipDZXYuup55N= z2g9K;&y*S{YkoW0KAQTzIG-L7!LD5$iv+ee6?5agD7D zHRSxr$x@F&iT&IL_%nA#@XYO}*(NGa5aw@h=~Jm*=iA(rR0}1tZ#-=hZ?A&g#`B(g zA9@ikT^T7MbIb-wXn5DqTfI=7*I7T`VZsS_7=gAMeRAo7V6~hEIq`1>U|(g=L$y2F zd8L_RFx57hgh4uW0Rd#P>a;r2f!e1O65ffP_}3xcQIoyvkEG&L6HQhjZmJ1+xi!Ii z?MbewH-5IlrdNBNuR1IKL+Th&>CSgrbNDmVOY{kNmwPIWo*zyjNTpJ#m}daDCK`Q@ zEb2hm7j5S4XxEikFVGO~0HX#!Et;S^sAA;|fV|s~8z!`lfNT4;SyYa`6w=DBNppBF zBz*11>R~-DDZZ1?;mRlazVgQ&UsQlt-o2e~6+HpHVV5ZIV-NBCjo4NqEWSCZ0>$@c zu0kr(D5+}kZh*aoYZJU_h9aN2;zEO5hJgk%%3jTJ7&1)F%N^|`;q7KTwJvlEY zFQ!TKAs_3ZQikmk&!3Xek~o)dnj^0QlV>@_DU^1e)ssjc^+zN(IxUEh=Xa8RF7`mb zuBRmyIx-~+rWVHJ^hW5ueuh5HCOTaj?Ewgum5iWZbaochYkB6K}GEV!k8>-Ahn4)VFLZhAJ!%X)QsDP4?e zr~vbrpsW3q?h$E3v|$uh%DBr_ct9Sly?&-f6^v@oP|HpkpElk&k53Eek{b@}m5Uw1xb`^Xyg$}7-fz1K% z1RJ8m0!0^VeyacI(!aeW@z8nbFXzv}A*J~3-Nh8GG>sq`q>+>70Xr(cD--EN0**Ht zWMwb#k6zK+8`&KYNmWL^@B@xWHqgVpr1Zrt+)AR$fv%F(Zr~|F+IvQIz3L8FaSEeW zhpM@AAPbeODRM}6c2jP#h#B18;or|(O7`GC5Pq8IYQU3Y>(Tg@y1TjQ{diNR)o zL(o_iyRxj{Ui4rQIK7!~|9zDBFN6GtPS??Msaoe{PI`|GDRG5xZ?rKrzYLDk}M&%uc|tM_RS*8#mA!p)1Bldzpr9 z=K|GzZMp^I0c4>fE#2zHV^J&!5)k1u-g7ys=7|M)H=70Bd_MKgaLcq$^?J8pnd_KN zeYmW7_P}t;VxSb{Qg*{}NS@^?T3Xg3w%Hoe^tD*ecg=AluaeT!x7KA9yLPR^st^e6 zcQ4r1ro{@)9aXbk0b+Zo_HqYJbUr>+0@vv0fysF5!)NT7v|v%Cd(_ynq$sM3&n29W z4v#M1|C*Y6&6H2IC%wM8n2URaoLPeMH~OL4^Du6fQ5Yc{{_z82uCxvJ@TD-AN3Epf|H&zdNR9$M>P@9gwVr|f(*eyRcHk;} z6N9p9MQ+Ilp`35DDHwlKFIOxr{ zxrzFB`l^(QxdAoM-}h+tl~5UVks!Cw>4I%ji0T!4<2Z&LF_Laove7qeXU4 z*=(A34PrVfNGQuCrg(AfGe`Hz+YVEAmIA8isH)*V_>~6CIDaI-&fPAwR@D9YzDjON zw)?1u`Xz}bLrPmj0wGO15%R6r{q(9>sIQV$?v=^PH1TIj54s0jxN#A z>pHsZ)63nVluvbLz+v8dNEu2m@^ST_elP3~zxU~jOZpFWNngUmmw@+Ag%5m%UyUiH z@$o6SOVqT@5x@44Y^9G2%~IUhTn+ou!Pd`)y4JMqFEatD8mG@3(nXm?540T%o^wbU zkB&oZPrGid6{6zaqxOWpu>>a$U~nPJZN?(}qjD{RA*+sir?v7j=$WSO^d*x2r|s9n z0B30Pz!XwVDVU*&nVGm|^tbE7cNPH_KzkP&DNPfVS+e#qL-N8~W27-n8R^HYS$yWF zcdZjt#%6Y8(mVUN{f)UE&q~sA*=aP!l(nC^T2=-oWngv+-Pwzo-@BHJf91=?X3ci6 zhgXZ#3P@c5m!O+3wgfX*vJspCYy1Gg&(5r)XBW46Nj*l>0KKVFbya`KdjF25vDBEi zkoLOIc8RZF;2d*K(g)xx6hv9g_ixYdW#%TVsGcSVR0o+?GwOV&eB-MDO2Q~Q9p}1- z3+@DD0n@`w)KMA*!>AF+YV~gx_x?9G*u?$Bt^2;+q@Na@#g%IH{J(xaNkU-6=Wgab zEjT73t^xOap>)_R3BDC*-fahuhQAUs0>$-6tVbjam!NQTm?{fZO-aovQ7=}HuTV)J zv%k~W>_0QUW_?uO*8O&A^ocXkFRi02QvwlG4-23?1fMEHAWMe>m_ik)-Pi$!HoJb) z7`>;t%M#A;`^{`S3h2* z`;^_Tw!|Xyx>Eu`IOlK*BcV&ThE<~RjBUb3MfbNVN|s!katU4gxzB+BNF?~LN!}b& z;MHKmaLlvoJFB7OsezPqImlb4+7V4>DLk=BTi1(I88kWUhQ!9rA|l6nPlQJKZuIUJ@|D z312AAd0J}q($1Nkl2OEiE-mk9@As0Zw105viOsFVfqW_fpz8(X zyuAS>Zvxp5Y6RnYiLzi1A{V*>I@iXV1UULKU@5n3soIxuo9H6$sM* z_K7*nQpv2!%ymG9JfL@@gHNtY<=W+TAaw-V)H>7Yfk1oH^Hb)jwfd6f(itu1XDZ6+ z_%)-5O)Fv1D0P5LmFoE7y*teGY}5R+@aFNEo)UK{YDi<5eNiI}q=0mP7tnRz#|qTS zC9C$RY&C*Sh{_6m+8!NrAzgOdK~e{Q>#zsLGMZP#p#fsyB{5Xyh-n_<9?u>q;<8y zZ%-l#R)?@Md1fcw5d1+SoB7+Tg1BXFhlmnYhy9X$gbe@<9}ArLp5wUTkEhj=zFV8I zJ_|tKZ!9(Eq<&=~Iyo`h-3`h(y%qvwDRn$~AwVh8!8tDj5H#0%mknKt$#|zBY|7jXs^KUmtiLOGB%gyhQlmGkZq; zorS58CaLG3!W9RN{z;dQIT9tP)YjD29X@W5eiOu&}72p*3NiJ<6D}F)ICQ zW@5ig%zwzl5ZHE$$NKMfxwMzlC;7({;&XqRbF+PLytZ!NwemL0iO$Od4^@0%n$qea z6u&8MaKAloEK&4M;hsqL()8d;$QgLEzs?}Sts)@hKw3cqOoKZhxOTvt>4x?>q%&`Z zuXZI)FUZ(0m=po@1MZ?Avy(dTiC)`9qali2MmewrUe68VyF{cA@_XHg;hW=+5nXa` zYR!ymo(32HL=w_a1$9i$EH^19c>PqC!8Ch9Myg&)Y|B%CO-%g1y_Ie>2=V3z8q1Rqa+O96G~is2(;W?PEkNHcg(+ zxWZ}Gmnu!Yy587Z=)E7wu=aY;V#uWo63|#%N6HYXMFY9KL%jTUP4^>t*J!EFD~ZT+ zm*q{y{k^iQNkZ*2Hp*U?! zA{yG)Q|`TOoS<1b_a?BN83_(nLjXeu#{)YF@&0o#H%9eR>kj19g#yrusF#S)#P!Cj z1wVmuK*`O%w?foz894XAU#&{F6JNi6aHmgc`R--Y$Mr@c$I!H1>6CtGP^#E93M0|D zpB#R`KCn2b`Xg7ikl34HzOG&$N_va=^HEvt31vyO-bHN;@6~cC=A!6cP{LrDAtEHT z&_a}&1^vVn9XGYEsJ7r$<1?jjb_wgJ%<`|a>l+-qmTjU>M=fUSz3y?B`uN@&Q!$_? zZ=fN8_S8DbwBF}c?>VV+u%!@c)Xdo z;$ytr$rYADXl!kEvEtYjwraccAX(Fn&6&>9;mo`PodORcY@BhmN4u=?)AVr12#BPv zWqN*VjkR=T%-t5d*<6{FbRCmHgt>$JkWo&WPnUB{iP2!j-&}H${$FnUwZj*`{UxA% z320v;{TB%IpNI|l5FZ}iFMU;lZhwrPH=D@S{me1WD&pBDyRnn}_cAxLG9S9TJ8p}D zk}y({)ty^N<<*iVF$Lb+9Ng50*ZiOtIx;m9X}JoOd`|)(C(AK1rA#1+Xf!E91N;&d zS<*=ZQUZz{gB@pRZ;Tcg5QZ<#1*N-DGe1AxGB;CEZ22oec&4${PKS_Uz_H;94APz6 z;gaXVWHPS>*QMP%4KR-PudR31bg_`XkOpzSxY_xh>d-$rc>1r>zIH21l;ZG!M+e#( zaoPuNHIS&nDBDhkOc`cb<2->){LbPn_CcYYq{?bk28pOWp+`Pt(yc^-II2 zXLP||;j=7gyenl^CAi2*X-cX>M)d5G38$*w-mUz8E=3GW_R}zaZKP#g?DAso>E3<5Qg{5y>E`=n4$t zg*5%laebBw=@7|weMh#3*zJL##{11B%2G7-w18?`#jKFhXyJ~&mup$%$_0^NBAa3T z^}4c5F17_&C&Cp7EYgb&IN+D7$dA;`u=a(vh>HRc?d&Nn;g0NGGL*3k5P< z1d{VFJt@t%v`(5#;@e(7bMWdpXJ_V+ZE)T{@%vEmw+;! zW2v7a;XR@r`>wlXMplIUls&GHp?oZBIf;y(l;jUD3oS7+0VfPG5ZrT6?Fm5hMb#Cb z^p#!jw;S98mnMm!rJpwAQIG5rrRJ|1XIXUT23*b7UujRI!YhllYs_7po+@D*;fc5I zi#@O#^a=TKEmX|3#?9w;p(~M$mK&4M?4$Tz`pnT{U5Y7>BB~(u>r1cbtU;|Bd~i+s zkH^Vq!W9SWGrBPASNJ)4*OE#k1taY`I#YqYQW74Xk{=mswq@qw@#T*x1HQRMmmn;rt`5<(^9Mm9K<#bgQ--@y*5nmC}t*mI5PGQf^F!9WE(bprVuA(B(7DBkWXrR}jmOE5>+=!KN zFTROLn!k1XQG|ch*tk4JAI-c7pSai_r7~yQEr1cqrgd^+WlX>dqYG1psrD)r*rbB4mjL80nz8WUcUb+$L6AO zm0ie*)xmu~xjT6P01u#y1dIUqWz%M~2-qFnThg!7`~40qQCic~xGa|OnS*~dtwgP` z;!~~kmhc3A_e!V77V}Qto;g?VXO0tMe*54l<=g+RamuWwY1qOY|DXSArU^8Qw$IzM z5GjkDJY7EWZjJWgUXtW;y?XtWYIN4RV{ngN3S=64Hc_LCiR z;eXe^-|SDbn#f0*YyE1~Vp|=3e>H0e2comyGS$dFZzmiQGI|HFk^&jLwECnDws<&``65HF>@OWpJ=e%!ss&2!y@H0owuHx*k4K@Gj zkVk9ihs+d%J&syd>7dSbu8E`On!FrWr!5>2E^*Xlxt%=#YFI{Z-&2KRXGoBY#hJ?slXBp zEEm@xm%yN%*|8|%w~&HfE>2JBCo-o!s!osRx964z$tUXI_Ron%3EvWe*>}59(_iP| z&z2_gKmuW+1Su$);Iq{;%->z@X7Nc~N_*V11Zq-<5OQdBWQv(iC^jSW!gp9j{JI0> z+MZ0}z3*xxT0*jgj@29MtxfP@xDbRZ?9dn1wVYr+&t%Va-&AET1ggZD*wCxk-ocA@ zq0?O3q$7);%2}CCUL8Hu){2n7_&|_2th(b!Qc9x9^2oJ$Ywft_9B()(z^C7B-`>`I zPu}&_x;x^R0OcGEy=y=>{c`W1UFtN+A{RKuqK%|pF&Rv<7^vE3zCsr47;RL&NyX^- zRFM6AYE_)rQDS~)f`^97jQg1ilo;}UOd|_qNW68#OZrZ@D4gJ0^;nA=BsCq1e`!>wX)vY3 zS%^^Wd)e5Cn^GKNnA*%wfcv?KeuFJWKEqrX^4>RZYlH2EBZ_r34Usy&fV`o$S;PBz zwkb9d>`f>H@&IR*l&U_8EueGUs>w_4-4w)UyS)l*M-(W}c{9_t zRpzRtD0)Mplkn|`!F}6g4U&>dNZL+OHsplXK+%~eo@-VN5KXyECISmeaIs?8Y<~K< z5FVLF9OP-l&5Z^n?ikE$C^g4#;B&mrT|1>{*y<^~8dk*5jZlORHr#%?x;LC9nn$vr zr8?Idf;p{)sbmRKr0wD($FOHRNYeABw+U0NS)9Yx26GbN8osVI8c{nukk8;M3ve5OX*Rq zwGiE_3eyY6vSe>RU7;yU5b~(NZwQ4Zb)58`Z^w{MfA}D(HTM$9LNrxW3g0UaucKx< zk8~*hx_FA>Jcf!jA8jps=1^@tHon~d zn>+k6KL-I;?92P}&#_)05#~0B0{Fp7Hem!3ohM2X6qG7m@!475xsTfX49)+3ue? zngP7<2fn#%JQ{p2gt<4VAHyC6pceYW;=j9u71x_x-YbX!d;9$jw|(YNub)(n%UZt+ z05@WlTG+q;;!U<|fLKa-eeg6xq~ZS^3hsmh8P$gIjH1=FUoFYr&8!3PrOE+DnVhag9-|VJ<^ANre_6i86Rj||AGI2 zPSx9w0d}?y_W*Mq?EBUuQ)+5^Gh-aT6T81B0#2a{Po61DW)uR?gVNpl6F9n;44OLJ zEZ9&Kz)H@iKYx~9a_UzV~!o{ycvgnPCF_66#C#2mMrIXBM25wkS0vitEDMe z3Ki`{l?;SJp~er3t-E~3WRdoqVI{#Gt-kK&wY>C!Dr5IT+*}X28XMjZhk|4{y^p+T zTd-22ypc3hB)%#Z+ff}#f|}Yj7L%F3sDuWI#3Rh&RL+&>c0}`NPmGQ|f7*97NVZ$W z(87hWgd5*YA)u)rfuAw?DODLWbn3Xq4AZJ8Tli(QBxQYZ^r^A}uYAGemFb9{1+!EN zmRWOzS#pe4j*Z}5UWXblG@B$TT#q#}H8arg+2v{aU+ldHR8!ryHjJ+d3Mfji7L*ns zK82p-L|y^w3f15SsK7I))BPmF}1KJ?EbDo_o)@cbq%M z{r>TP*FE+a>}>W}S($sSIp_1twdOqH82*p~;u2b}VSx`hFJH^X-ygE9eBf&*9>y6> zYae(1LbopanYP4^`AW|D-J#pJbN20_y>hD9VqBXXqH=R4Qf0qm3+^owo8x<(~LrI{b3o?8(}bDLItV6s0-2&#l4Url(}4hvs(f3#)n8u4O1 ztv)tnJzE?nAY@vYT%7c1@B_wT~dAX977flF0Z+(sp;-KTF|smKRL%Zf8e%|Hc@X*&F&1h<@A;;BE*Zn8a7(ac) zNAa(#y$j6kDbch{6dbD@ii`jyomqVkYo|m_i-32EnexJdgbF6t2rPDC8lCO|3;Ez7 z=tq-4!dYQ?@MJ5x!2@{S;6o3%_>u+~5_mN2dpWNzVIOH%58D=FM~Ifi3>A35 z+%ZeM{OGYW0Vu54tcaN+Mj%31$l8}laJJ1|Mot{K+G;~&vp^OJ31?qf>P{+GQDwWI zP_ELW#+@Z`(|>h;II3-M(mClzQC0y~IP1X6xZqpAt=-nCq^UG_G99k7D$L?^=%7E+ z(nk&fqdj+B^`^2eCaguvb{sa0Ym+;aXH=1}kT5OAB1gNyOkJ`!zc;}NNO+`;yIxrZ z**{KBo)FXB#&t!7hJ99dZ?bz49Q=;m_bEc@YeDpbm_^0a9AM0vq2OJ#{ixqsaOx5Y zgC2vb%^f6GgyoA(3dm`IJG%3{4Jfi?TK6dw>Wg8L6z2q3XE}NKX7W?Y-?i(%d49iskbl3+uQ&7uc=|Qu{#$dXAU>fIr~JBj z(y>)~r0ZTHkfFjf@-}ObFp`>bS)Lg*cwcS_z-pm2j-(T9?}>xTwW+y?d#D|yA6XCz z3F1D&ZM3*VjZQ;+5bQam1kkwt7xYFvhFI& zS(kAX@pr{5O6l|;(x*60r|Sp~qSh(w!t&p%9>620 zI>uo+>faH8zaA&>uK)KXqp&?KlxyTlSKU5mS62F^h(8BdI4~yXycl+MNhOWljA}l8 zbR?-sWP7SFX06dHJ61y9Ds>>ZQ~Pa$>Y4D#=1lgXO%^)`7a?1K0HKm56MJ%&RnnvY zf7DPDbE{SFjV-3!Dz{X3vfH=mc#M+Skx2xj38fh(qzzQVdDubaac;gv+mdX<$hu=p9@;j+Ia+irp0pyT%DAZ%d`SQQ67>~BJ*p0Xwzuk>+kLUPaPh91rN^$B54 zwYkQ66c+`m9gm8*in#kn8==_j>yhQ+?b2!zDNao64TBlwja;g3znbg@WC1&B(-gn zzL8DT6)`0k8fI@?wxi&rr3wWj)CXscCVmoyP$p!&ouHudc(?evQnUi6PdBo>XWkoh z1<9p5Y#E1-6fBZus-t33hT=I?qOP$9YV9k^8FLstv$C_c3@xf>M~Ueqg&=Wg=PfS} zJa|Lh3~YYVK&UwX@+Go-(C|%P!}v1qWRq&6drC>zdQwQTM6nD71sWHxT~IV5zM%~s zrd-Dz-$78lOB7_n0mza+3?lB3ZCLhM{V+9RQmd_(f8IC7 z`^nl^Ol6*Lt`+y8;|PSx;gT8$nG1`^Mu|N%2xHxOP9i^vGMf(98ugaSvePgSFpzvu z$zL5AoUq3Y@2gJwVrfgs7SkQ4NfnpIDBC0HCL=yr>v_=9N?Pl=Zo49wK<}j#{g6Kk zA|Q5})H7<-HdnMY)nHx3VWx->YLk-}>U1OgvBQe=3^Lx$7Bjf?sxn(hA*%9qvu?j- zrMX=P#tl*GzU8JZ%4b;0Io{x2wEcTVC4t+w0l&j($d=x5-lxB~eoFs_;eUtBzck|i zeHHgh?!Slhe#!k`nS2^Hyd2eumvt-VgS-phKLP3snsqX=%0(A=jLvnVtqb=i44ZAbe1Kw!&UjbGSCHo$7E->o3EGOK`))qlXY)8(TL+h-!k z-IV}uhIJ&qCk3Q$T@>=(`FraXfp%)$%%E#f8WTd|yuK6}H`(p!cHy>O{Oyc2f$8yf z4QLO|pqvGikc-BNfl#AU(%eLn)q8Y;^V?Do{d_dJqg+T?`<25%S<06Q^fAs^c{#lW zbr>e;KLVNERR0!KP3u7dj9}{3(I|@x(f=5_{p&yf68HV53?r-m+K{OKl8lS{pXk8f zk*nX{KV=I40JQ|I_n#1jk8B?F{zt4y2r?T||0EhV+a^$!_G;VBe@Cfz2`IJmcRueg z6yx~c=+4+51PVTw5M4c+#?PPsdou7JSv^8LxAgGGUtqD)@twahb_Cv$0uz5R`*#5T zw;-^_??GU+p2W;w2~Cc#-hT-x`}7kc&Pg(3uAnrp>q?r<0wfFnl1Ff{P ztz0|G+f(#!$jsNQd}t~TGwONHFoMb6tNoy$#G}vFRzDWl)LlvUR=D#F#IIiv`l`mP@XI>H)W)t zcyt8V*@sNBsLPkv4>CIns<9XUfWkhxtRi8ECEMko#qM>9xFlg!w>$Jk@3V?rA7#T} zDWvU4ZT*nS4IK!G>-fBRP~|7lx=^RK^vLNUrMJKHR&9xg`_YzfCx*iAMAZEKD)k~~ zWV}8q`=zs_s8RFc5(S|bA`onyinL7TPrW}Uq;V1q-fQNa@eKi-yw%@`}_LlFi zMg^Ci8zv9@Br-9!`AHO1WK_O2mtXy8BYj{owZUShs)OkQL056$_mgM?{EhbRDgEb% zZ$#JpH^#N{2x~UxVBsZv8v{xHne^~aqiclq80+4IM8B<}xuZh!PBy$&5=i6Qdvq* zI+A+)k6^_|KZ%MzIqf}~;?AL;N#_0#tv|5264_xzenD?bOl#o~wDQzl%rVgPp@vX7 zf8S`JdTJrJnvHc&%?DlUg6KBPnSz^)oKtfeOuQ=BPU0FQ9C!s;!dEcpOELJ#hAt|f zPTy_>bz9W^2g2ei7+T}jUBprCF1)dpU(=rmp8Dd;)R4)eEud~>qo9$!mh6HpO!a>T z9GC00NP`-i&p0J$wW&LFq`fzMwCD>{b-BBv(R*YJ4VQD!^YDPp2XJbz60(KEOkYYf zG9SmVTm`5u1W`ZJ+fd^h_2n6)XL7NTd%>080Jnn#*HoSj(=MVCEzaw*Tv8A6EByE` zTI;=r^r2$2Y5VDT4XO;N4U>n8sa2k-T|IEIsOD{pf^W1*s%mXWNSLU3I>Xo4K%M6m z272y-ikLz`w5+qf%hb5d`@X;zTB(ygn8CtW!DiBx9HIQIQU=&vWuAjnk7rItXKSCr zic$#i8B=q@mN=}-q!xs6w1Y4Qb)ojHgP#!6^s7~a9*UNF+U0QwfgIPs9-U2FC*XZLf-t;evPX0Dm z{$Ho+-6$)@yse%KrvT|K>XBC{@vS0Yr>uw1J1SWN^t-Zy;14-d5pv-5%N6>6US8=ZPcG0>)=4T) zu9VDaBB!Ngq?xs@bvdi5nzRUYUwC5_WX-WImlTo~67tH=1w!GpW8w8myfC=-sIu`h z^GNHokM8V?o7TqLGCbe-Nrd@-+@P zk^uV?tsiO>Yq0X6Z);HB>>?uirMiA;-~YA+`lY&l4W9q@;Q6oopZ`*I{n-Qib^S{M zBwsaTuW(a4J>+jeE{3tm$;llQmE;f{C9M}>1(m}vwB~Y=U#^mM_*7T{$%;hTkDo-O z9toGzbi98O1xof@>Mxf5Nz{^tf3*U;L{w)@!yMdANF-|L0=Xz-^aNMjlEdh6U7 z*R0M>H{)*?)ZchWel_yHMkWMx)X`6)37#+w72a`?C)bU&&JoBF0C1o+Xm0(*lcMH- zTCPYbOU{+fnWZHsrw%V#m%E&WQMgtVE-h?53bf8&*Ged8Dkvg=z+WTl*KGS2G?4Gt zM%xAG!@eM~SR*>2=j}+5B3VXR%B+{8w>60V0ExeJ-!E1EKV_MI>Aqi1!vA+Z&wr)+ z{^a@k;JXrbQOXEuvA&f)ClOo5J@BBJyu>xu-oo^2S>Qnqv?Nj8^CwqojRUR`PKXeH zGpQ^&X9^`fVLd%nCKW&Pt3S2&FI|SsM4Ii{x?KsNH>gOO6^CSk2a6PCw32c=Db00q zivxe)*4e?DICj_dqH%zd7@ET zs}LdU=z(~4E~hqR0+$VW?-{foxj@JVP~!N3z&`fthdKbN@*u+zvp(Zg=FO!-eYA3r z4*@(_G7qTjgPg=725M<}luyJJl~@oIsB3WdzankI?NN=TE0vfhDq{k3%Jz7&ZS z(rbVI5)$^i&p1Cd`r+y6=>L5GU%I}Ht6V+(Ni^wqGI5O{YiHyAfbi4KZH?DXul}WW z{`BxAmIj%3pUxA%pyIB7xTL0hrrv5I~|F!e=e_}ZO zU9A7mI(=XKEUZ>M8hCX^_wiDs?zu!?b+(1Nm0DIgJh#VPf7C0w>%){t6JNXo?}2;O z;s^uh--5`BAQKnME zN`_WaOV2C-ps zVLH`L8dd}Gj1LoUaERZSc}3_IeM*9#&V<4HAk`%(+R8 z=PXs4Qs(fG=m6LLiOU^sj;M90;s6`gygLW)z_xcZIXn}*4M{o683D`#b*J_Tr1hfSh%mNX_IEQr7@(70e8rBV#8?g zG+NV2)&39x2On)qIIAc@S{*3ukbUoN-_dwSX@YI( z&MQahz|5wylS)GhzAX4Y{m`6!`Z5`V&wHqzE*vWi&r!4J8K8&j(=0?T+`@8@qkRy~ z_QWZ97p>ew1~9u)_o3a!%H%RsPnI^oeFnz93z(2qFHli%!wRcq2tKo5Gf5sYa~={G zP(jk$g%g3^b%LRtV9SB z_akytDa+KT;(kNSd_dNEhQNqjA-6E23i*T9bo%RrbW>N;0pH_*>du9Nj{O*;9Cq?N zK--Cd4U*5sen62d#HhPftZ+(MpLxC_rrWm*rAif-(z6DVwWa3>>4^{%e4A8VN2tPMAhh|JY)`Cuh5BWmeM#O;eOuQ2k!t%^*a}Gy zgYk_W+j*0v^X3TpQQ78~Y)In!%|UyJ(QPun1=O%Xcd=@vgA#B>%v&y6IibUaow9cH ziW?{!NZSK&H1WTvdKVb}ljyCBkN>WT@wcBu5???Gi#@VDl12|sweMQ%v(TNUzC>CP~3EdsW|OYq;yEx{If7_V=E9LWK$Hq)`&{#PB$&(2AE`b{8=E*ZR$HL!s_84JwDyG?ft2D^H4S>h>GPYn{WOE; zcSBQ{3Oy67)+%Affq6A4^I6BKJJt=JK?ZlhWkuUfh@5q}w!1L%_eDVs-86c+n8VoE zE1{tn-Y$ohXjq>1no#`~&7O4{BSsAY%NarT2DvB)f^w!H9Tds^!Gp<@INhQAE+j=Z zbK(28}^HItz@chU1>?6bmSqRX)qIn+k8 zkDMdOB8YDIB2aOMIt-7-HUWNMuPfub-Ff;|^-Dd~l?ojw2htbi8N)MW(JFcBRt8li zO7S5Zs?!Z_mxK1;p9ksN0cLg4YC)W`Fls|4pGF{$Ps6T3)^{0whn?M)N?ns1b3sED zb(nj_&o`$c+|R0^D}3zpU+a0sN*>gsk6y%$C98cA+%DQr*FgoWBTL@wwJ_LGMcn__>S&;$0c9Pedc9mU8rH(-`xGu%qEX~}oGdHOO+6O-AR)RtOuwu3OKz@K zF>FiE9OL+f9Ugzu^hv%*o7bxpp|y;23*H~=Uw6HZVF2lM7l5;yQe@JYCN&=_dr%=V zfZ$s8hqvCox*4hQO=Q?w_>OwQ7y1V8uAO5UZFvWfKL^&ybkXTphVO3ZUAjk1;k33` zdYa~xM7jRk%!yXWXT7c0_=5nE8y-`4k!6NXMrGY9&|z5j^RxM|(Mp)fry3y6{&cyt)UXWY^~h#NPTCV~epCv?bv z9*dUvaFFt_STs+%kl*&gHQ{}2`eg2t{h+}<-CI)5F~^oIXMemp0a2c_^0J2ey-dLj zI|lIsuhjhr={<0KIon@rxUAjtKU#t>#R%K9PBKpJ0`A;X;75B{(nV&?5Mjxwx0}&B1C;8sXy4X35 zd!he=$Yz6AKfmI0_eG5{WY@Hd{ZoP}2%kHC#{iQoBCO{Lxf*eizV$ZD0OYN_mFo;H zR)pK*aRtnx$z#MJ9b6E$-Y{2zr;KG;-*NZ_CsX`f%og42-6j8b2{g$)x9rbE;^X@Y zubKp#kC@irD@w(^L`m2N%`r|aqYkZC@-X7tgVxTTTMN%PcAp@}mW_};y%lJtu%ATp zS#9CKuXWB5t;P4eEry&5^X`k+d~f-dGnQdM|4pl4ie77%*!?`{BDo{+d5%^xM6U@6 zig;dDhy$;&MtDdHwa-h&wZX*Uqz1MkbpUSZN ziO>|AnX1N8p562c%5=E%{da1-#f(6t&>-UWUh(=Yc4C?3FHOj zn$%e1gi%4SK_jK3TPM7lbvAw8fP4{L@uR$I56B1Ag6^1E)u#xS&B^`MS!^^bq&9`; z*cs6*aPRFyq9^4td-~$7`m${g^Vy7TB^kFGhu)VQHvz(Jz5r;d^11hI4|E^kO|!Y1 zZp=nvcc+9dIN0bd)d|@sJ>@|kS{huK_#eC;$_$}5@=!&0*VtDh?H1x0nw0J83<~vx z3-0CX*P6-~cYU#m3k$zCIwK(`Xlh5jydhrI4avKTZ@oz$j(rzrPh-}XXee8o`+jRC z3L{rt7O;b!+h^8m<*wgK#-|Xw?`y}C;xI{~?iZ-%c^bLs`#_*QL6019e;MM!SV5JH z8~=DQM7vQvK~h9LWUM@KnXR0_T2Om|Ne}(E+ETX6_F(^R-`^tjf^0>w@KM(W@h$5q z(C3<~HGN%k3D4%78{^6bKL6gze|0F@4`dU31H|dZiwF1q{O~`Hf1^N$`?zqv-dKRn z6BC1~Qx0l0+46V?Ge^nT3m2NJd>d>{h+K&j{iHs2f>tTk+&Bm`(VDk_D9d)L0?IXu z_$y$svIeTPM!P?{b>9{_TuZzwT$-(-6_Qx0H^_9AIu%4|bPuWTqnl~!ZH<0diIiuF@cdb4 zz71z>;0m?jKTX4K9~ z5G73hVES3Xxb=}_tl>2iAmxkefeAxxXUv>fGCwvo%&w&UNt6VerFpVVsU zeI9_clZl%gfm#;#1Z6u7ZdK*=6by4kB8KLzbPDP%d-=byBd{bq~ zee`6XLs*om_SMcHYJCA?zg_+9Z`Wt%RTbWMZ&4->Ws`5fnTF)+FGh>n?_0;6xZ-@< zKHjqkCRNjBF#Ov5epZD>VynmQ>v>phci6;}H+7Ju^YEu>A!F4AGKHxbX8Hebpn z@Uf^R?98w&6JWR+x^jzd&Np=(8cW9!EHxbn)O8tgo){i)bjCatfyPqiU)(@7f7MA)2*D(V2lH z^yo)~mLKzGN`-5l2~A7S6<}}3_Sw_g?_=O&ejL<$G;%Ji7q0KXR2-PbqSTr>v>9rG-uYaMes1}n{vV^Iuu z@RFuW#8fbWM7C6~+SRxsAiGkcJs7QC_kHCyEKx!a{&kG{)E@86S_vX?6N(HJ?xlK> zr+-}$bNP0KR9XvJ3su;$|AMayPzwCnmZbY95ihwN#xhZaX=v?cdDgvVbO-Hkx zC#|U}Enu5EEAX0j?o;f?H7(_;6PjV+ioO)M<4n_ny~=Cc3f~=pVhB(dw60!A!MU|& z-1J3i=R*C*`L`CUpF~+)5k{wP9)lpksGB@zPv$XL=+;nQoEy2AvBjc%w2l+`wcXi9 zPVJ_~J`@&`^dU^7)OsWtZ8CbApF-^gk`82?31|5DPjUN8+YU%ECo1)I8VMSgv(W@y_)jM?ZjSspQu z@;Q2tvY{j#f$^GwqPlF1F@(r%r?u9DdB-9al}j808?{zfajI; z3kMrfLV6O|+!wrgCn_OM#NTYO%Z(__Pl+>hnfhbI%WZY(<#%fa=9z)7HtF zJf5kjlA~|X$PL}mkd10c;WsOh>1W%-(FFd5YHZJfhx?j&l)eX0W0Hn{zMv)C8<6^< z?PbD)?|};?EG8cx7(xnEw|muEasB(YYgeHwy#6ea{1Nf!#=OWBwXpOlWz`hw zZ7FL?pF*b^fDc+sHr3JYYh}cNRAMm?LknC@0HGQ+)_x~ax2>kz75t&Ds%(RTwXmI; zcJqhO$@$gIlj)GjPmus&-Muk8kvG6-x2t6zfoCP2?4Y=AjS^M_B;?rCOfMeBqfy~g zH+;uT13+K*hCbe9XTGuoE`QX*=$$-sW7CCsq-e{qIx?r8roqrGuBuo(6Pin+&Y247 z$)NT$+b#|P`Cw(T1Ck6}&5%}e+IFoppVS*!7TjnvoRpkg3~CYfP*#U$!M97sHykFM zxuMrh3fSz_6CDi$X$C{89?(z-y6-&qtjJ9zulpjN?MBE z3&Tum7Y@P=v}`56?9frK)4B8LRacI@j@P3^5Q@%uKOG7}gAlAF2j;N`p9i9qQMbx! zF&YaTT@FCKffa`l^O!{4o2{y*DKfmXfblyh6t$4e8M4HTX^dD4 zjeXZj8eKiW7qmjGWPM4e0iiWVBq3In=oc9@(b2xj`x^L8r`_j!wPW^+cwC6+4R2C@_cyV6 zsRHFj1Ffsjo%; zCsB1p=})5G2^xF)-a@BNvLgw{aF*{;=nw`e6XD~qIw^VG9JOa$+I`uop9*OJnD*dt zNe@*M7)IIb2tT+@>{JsEf-0m*Xtn}4X{pJyTk<38EQdUw>{4|*JWRE9c^kW%SSDaN zULxhC7H?3)snJgT94Y{Es{>v0TF19;$f)`?Syd(PWb2@M3kStB09v9pTzrxtSJmMry+8E>|v9CdX2`{ z)W@ms*zcf{M3ef$*<;hxe8o`;Tgy!@?L&9K(d^eDEb5C7`JMY&11(e+S!Fw;fB;tW z$5KUzrl=o>YCeyS{6od;Vmlth@h@ zuQ>S6h8OvKTDf-+ShFCpz=mbw1gGBpx)5>v+tQdU{f$UEzq@+$&G9e^UG2UfHpY=T zEk`xmUQt%neYwGC{0NYvv_SPC+wivc_c5Ui0Uh>AhYb|txc^@&cfZ2Z+-xJ zW6EDH)H)k=e_Z>F(xbDi#%N%y$2%etw&AMT)*2=7l$?Y^=#$<$*Dzs1c6ciZt(SiH z2cq~;Q zlzNKR1C5RWhId{__xFFg8ZC`y_txDA-Q&fEt0fOn-T`#Ddqw3E9QSHd3I*oMnxc&^*m zT7;H3QzS+qRz_81x>VC<0byOIWI{oF_*@*Mp6eJTOVB&j&nGYr^9o#(^hn=@kE}~F zx2DI#q|e6NHsITp>-?kaQ|R=k%iOO6Ro~XDz`bu;DDhbzU~j0sx|8<#pIDv0-}+6` z-S@8lDc_vlB?cm*n_!vu8vdT=SbiXZ0PtG;{OIiAS?#0c`!9S?*^66_$F#(6%8yBVOjMI4|5}HpykEsu0O`2 zLqTXVmZnTASr`%&efgwPsbt=wD;FA~qYp3m9{W`^kyw55j{EQgH3TXYI?dRo$HbKMe7V26B;LjWlcVphKLw7nu?MZ#Amf!V zA_23}T&ZD_^#<}bs@7+fx1#YX@g-ac-j>@Tb)?1@I%5}4lCH-}$68N|twjuR!{jg1 z3Mk%kfa{Tt@=-WWeR?^PQkgkqB?RB#To-1v@dSXa_h0Ug7#CJ$$XZ;};Ex6HD0Jlm zBT_*Y#rSdch2Ofpc}VDJ;;r=)g-4AIC-AQ(Fi-8k%d|Btljd3`dQrn4nMb+e#`bLN zzJik$?Ueci(xlrPf9#b>vtEj1u<~!);O0B7GW~R(F!R{P^tI_NP94?Hk*{j=U9Ik> z=vW0I6-})MYD1+|f<*W@Mc=`e06hisd52hVTN6^G^ zQer9R(8(xj?@$zZLcwW=QfTj=$sJ4oN|%x9*|Qz;|^ zmZ3_v+bXn~s$H$L+vzvbuP{tnP1D!;FTJIirfCg5k`5SO5o$FtMl5MH0Lg&UHCqp} zyK`ZAQ*Jf^JK1C3yc_^7faot5GgDa|cdOGPCV+NmFNjH+5#Lv0_wpOvGcD7J^tKID6(HEX;mcmF!MfMMOYgbwV zBX#CJb9vz7gA=KG>9HasjhkSBPuwC`2vc#$p$I6TD>6E=J|5Y2Qc;s_P~DEm)g*?j zNJM3@HZI0r&aaqKE~qCT>=wN&rpSBZYs$;4jotqAj?RyJo~6f64@q8AZFy*T6MmH9 zp+T=dp=&x=sys6wz~!o97mo)-+PdPATkfa6KIG18@F*2UoVljFu$u+2Yu)+nZ$167eqUX`LQar#UeWG zLG`v5~1QE7`KH3(I$>53QBcSQ~ip;_Wxk_H~+ZTYa>2B{*o3q5XuUuP*uH zg*O;bSDXEfh?pHy?y2+P0G&C-4qMSyu=Z!v)AHcaUg0|656ngfnFkZAo0S$&;Rdh^ zec}yx^HLgsxyt(PIT~hFsIGw4H77smiNa$gS@W1_=rtS=kO=yBnr(i!8iiYnwcBj4 zZr7V8LnpkwW+T(2D}l9^`yEx2BMKuY!64DN!Ah$^2u?|<(j=`j^67WIiJeG#s@5m& zW`ki9;ZD=XGWg(ETji4M0Qt|0kYq$~Xsrdit5{(0;ZjJB5|SONoT%Ig{Lx42y8Q%& z5`J4?+8h0tCA{*EKq9lJIgeBlf5xqCZlg=ia-YMZc=3uVHPgyA>K}I~DDjx+pa~b} zS|zGw)p*ss5uVe*@Mq>-Lu`{eoix0H6 z%;PeDCt2yHP-}!~TX#Y#5A%qC`B`1bNyJo@kVKW*1e-`qb7hfWE)tSiy?i`&u2$+s ztoz*&|0b-MkSO`i&0=dT>j3sbH8v=2)2;gl7tX{D1uFM29uDgRhC1mSMT>kXe3aSP z#2Xghs+Q2+V=w%qM?%#v6Xqe_Q2)UFb<>x>+ueV1^^bJxrS9M%Qoe6@>lChb5D`&G z>5vfI?Tkc{vo;=zPiDQuPrvt=jtRWrEq&k6%hJXaOp&@MdhO=bh4>wbxeS77<$dEc z{OvlX2cA=D){p0cibv>nENfi{ip4j6>07nPHd zg+uR9`ULIHcb`7!h4*P$o!^aYy2BH2_tkIh`~c!Cck+9&{hZ z?y84wmF@U8PWRg#@vvyUoPlUHE6osKM_*ClufWKm(K7tA7%EN|WQ!K8z8@y3RVF+6u+n@Rf{Jl5S+LX|z-0KuY= zt?F=9DbnzrAv{7@BzDzyfs~yRAs;eHjUS8+0w1K-ubth~6F4~FYz&w{J7$w z+)~O~i8ytd1UMJjt`v)CP8TBg?0!UAakB8Z#mdWiQO!tfGRB}LY}7kFKlbAlv&E_D zT$~77uzW3w8gThc&S$5J&xr-E=1ro;QCTE6+1jBwrNs_~s}zWQ&|659qGQm(U-dOQ z*7^D*{@f(e3(pj-x@0@Jve-@>*Z*pO{(JpVeuKZMA(WJfeji3B1g5VkfW>FSy)6rW z@HVh|>&92d*9=@XMXLTJYOmo`Kc;AZcM@oH89Q(#gA{9)-8}qe!b-DCk&js~b0W6f zJm-|YEcnVN@v?xNq0(@=nJ>$3z+ET!i+$@y#YEt=R0?_EFC&a_9;9{o%h*HQ_ORr|BwAXWB9w`*2qaKT{ zc#Rl%iPc}9rkSc7iz%oIivQ4eLCI6$gjm)|y4&3M8u?@r$?E65&~s*wr2vps*p*&Y z>uxQif#(9|D*4wX>vLLyX7}n0aiiDOmTRBg#YXGaunc8X*iY5Q%F^*QW|v-&_d>b} zMP6$>RZMzL*}*#PJr=|}!=yWEgp5;C&)TQO&vt_{#e;x4bi&yhvCu^M%mK??#(0_y z^L?vZ?W$R|!+9_r=+>(Sq~YSWzP3MkWM;IQYTc9i=3?n~sj$Lvwn@0xV}z%0%Ms(E zFkYi>N2UWa*D;&?jjAXPr4S!1BsyAH!sVKm2&vBtC0pj1sUhWFPuH1d^toSm+gKHs zAOpbr$NK4O)BFgA_V_a=4;dNKUfpr1&Xnt@ahNW~KLjWB78wfB*%rpFGC<5V>8Im7 zstQ(eNz1x`2^#d#@i4vVhoav|wuuneUA|_%MhY0KW`yXPZ`uExt2%dGm zsh%j=NSIpz)_}N4)r+@J{NawdKwaM0SUFa2q&oAhPU#z@`U^ht#48s}OZLy9XZif) zXa^QlEnVnDphC{@j$Obg4})#_&Cj1u)M`&67jD$ayt5qVq?4Mm0fdLrd9Qod<~6I? zaTS-c-)4 zYLhLFS7XEC8)sjhw5e8>cpA(B7VCuTb|5k3I4j)YerWr#O!5IPpSMWO2q}WMk!#d5 zcE1lRk)+-1h@fiMyOTVYNmJuv0D~&~G=z;eFtkmgh5Hc2iKT!8T|q0}wHWk95cgZ2 zK$*-Ijzo%Uo!1hSl8h1#)?yV%=Aq{nGXjPp=S??8y`IyY6SIrhGwOoyV|HSz?oIBQ zG(9del?$bx*E3n_l=GcklGUBxljNQ~!~lEf$Q*ZjKk=O;0A>#{NV_i%=RmW2N7~qRI6>n^6lom6|V1&xKyfAY*{c+c4F{vMFpk>i-ea{U>(kZ@2y(7x}mQ zME_umh>MQ2*SwsD%CbqzQTMGe1KN#_6ttGL;h{%&?PL-Crv*b_7bl=GBss&Q*Mw=-iTzkT?S`IxwtR9Yh=--Gf|URP$YBb zfqpNXRnakMaZ)M$QsLbqnf6u)o`$j=v9s05g*XB67_M^Fv)KTQMjPB$7cE?s@TE?H z#v*Pk3Y}Oz+-dw)_ufqE&1127+lb2x%H5hB&CKQBSxM2DkQ?Q9FMYE~&krw#kIr@4 z8My~K4^^Y8P6Jf!BW03?IHFjDqqUq^?OrCVoi{Es=6slA1lbA*GD4?*0TyDRVqQc%2htLWFeKJ6VMBYH2X{*$x|(^oaHG%j?BKe9Rgg z5R@CysG+DS$t7ZFos|BMJoXnGsVTLOe-eS#DXn!h0*;Kr5AU!K?Y;|(S-i&O3b=}S zVj7efCiOA*VYm7>F7D@nIbH1f+pBI~dwKV46U@aB!7-1nj48zTqCr;g0AZ4ys#`v_ zTM;VRBMzvG_RrQ$OHhAneLA)btwgPOS8d*2=|tH)1O8c1c2K;ta*lG{y=ZZ33~gr7 zbS{?^qZrC_o^A584b8di!le=ueBQ}i_B`}56WT^|u5$0AUQ1yZwasK8Xs~<>4lXc5 z8{AS*uwybV>>uC;N#j_64!*6AGk(~9Z3QvLe!gxwD!HJg%AoA!%=SJfmQLRK2Hg){C~T{z}T zBxb9HF`%yS_w}_!(OhQT?d^Gbu#jD0IeG27&-?|bx0P9=vAEMq4*w)H$&-*n632HF z9k!=Z&uAxoIvJa)TBKh5WsRmFS1bw%LqE%ExB0>)j473IQzqMMy%AIjGOjw}-q~&| z+s3tCI+7~iZhmuXZLF2yU?XO-1;ECN%_*y8!A7$)SYp$ZTQ98LVBS;!R~jt(MrHnu z7lpDS&yDGBbY7n&Le#xSj0bzM_<5T`Yo0WeVNW`xG@^sYF~}D$&g+0*jg>L0@l#Ew zPpVA|XUBcFjA{z2!u{qPpi!hQl2LiM^MmhEj<+q;2|?0{@1IJO%A|d$ zuan?O^yvp5caz*)Do-^*2wu)G#lIisUZ17tScV>}cOSq<&GjjB#jUQmOyC9#KaUyc zZfYo-(kMWQ6X8e}QWV5;RhT56>4Mk;NoNYX>!|m2P!&sYXFW+3f|6{so4(&3-cs{g z$K{z7jr&D=_y(m@Nw9=n)FRSG0|jQN$r*h(14JDF+@w>8w`OxbgP3?-{eAq@5}t~p zW0ebLg?s?HU)@{{o%B@MN6j@kCtPeL%S*=X=PhGhy@VuF!j+2D)7oO1hZNpDh`v%+ z{+Q0=tq~xCvWKnavVyqTxtmxc|8iwZ+M75SMmr9GuR4SpzV^`2g|2<${6R%(r%`-p zuW^5=*Cx9zp1KCSB4#B4K7Q@!w0#)=Iw~SP;zMtFVJ%mc6SgXQ=&AUQ#I(RG^isT(tqhk6$EKV1TKCeOQATFCZ_TjHa zcYy0|cj~uG(SP>ID(=k(rDK0Xpk3ifb_h)#As5x0$+(w+IE8GfT0V&b*2OwJC|@}L zVQ8tr^JS3Z1(J2s*Opk0kXQ3aiN5nEQD&$LAwVF-eW}Ib0(x=z-LWhdbx~+6#&qy^ z^YYKH9@JP2{vbHV=LcoC-xCpiZC$%c_v77k_HRo>L?r1vmkHBLz30t^2`$N7h52t9 zt@!;%ZwO%&xo;d4=kjweoZ5d9ojoXy`?N2~=Wuc!`O3Lx{0uWq{^?kd`_ZXDDhZH| z(8m==cK-oiztf;sFZ#761Y@?J=>uwi5=BX|ic1WYi?VK(qc<2Ef+zNLTf>$gOdZ{i z5W&+#(#}`e6Qb;HYK8Jq+o>%zT6nI_S#|gS!`^#GHQ8HM=ca^!G`K+D*ESKC>i}6Y)lP&ms9?+BFL)c);1+jg4?%%y1F&@09 z!|7Lj_Z_6}VP80A)h@~Z$gud`@w4mw(Op!dM)o<@+AKRB!c^RH-_Ht)bwx5e*{~;u9(I9Uj3;0IIU9=i;o__B+Uo!jXd)aW)(nrH0 zEVK_7T)0`LCSCQ;g#pBMqEG`7zR%ZlPLtE+%sb7K0!=izCC<*R`@E2t&zLgspMP1C zN$;kRq(=nOW@ld7@}MgTdMGfq(^P69ua=ShyL7y2Iij&`BnlDQ>%QhE|tB)Sms zyrxGB1Dn)R0?U;7{&%0=ok`p1xM5#92e*+j!@Zrnp|6~6-6Xp`bGg|2<8Fo`87{X7-PDah14N^i z`cJoNs^aStWUGe0z5GQL=DpzIAQ>e3W9M*@W7?CA$py&StB6o;;M8?o9yjBElg;^f zDct6H2z=cyN@l*mnN?7Xblv;hUjGc4v%+;RC%4#>_Ujii0&;pVq895V^_W-)E&(OG zGb%gzzVpY`-_4<=mZzE0nwzDX;Dx{Dc*_8OjJC(Vp@oq1ViDCM$H{-|xQuSMKG#nUe?#-}0*n z_Y3w^REiQ`AE^IW{Ve>N^qT6o%|xnSR0qhTrC(H8F_E7?pnp&IK8v`zwDOB;RH>i* zi^?eI9klu4`(-=&CUrY?k~mj0 zj42O-GqP*JN)RR$b;9J43pIHzJ;Tvc^}FcFW_EcYa87g!@6mn-tx~k+O>XwCaCtHS ziT_2#UEARk^Eo2YV`<&Zl-9i{XP#@OZ%aD+zsJ-C7KsXwQE$xjV(&TVdr_iCynd~G0R8p&YT zB&JOg>y;5LW;mp20e4Y+aJ}Z`7D2JxlLT6e_7S3Ph)$U_MjkEY<`NK`t!i1U7p4`& zz40I=oaq!Ov?>Qx4D!x<-$30R(;#O`e14C36jJY{(K-`8DS@Qj2D?kNds;A6yxa2i zw1Ay^gVyq3PUze5N31qLtl#n#Ozr;G`YnHJlG1u9JMX={FQxrtxbdCyZuQf(kK*^f zW}VOY{33HRX5yxQ-Q(bORuk;$Wi8OU=GOlyqM&8$ZS||(U;DGkVZYYb}VQC;; zzsZ|40m$?>Yrm)r4|vl*a`{Tux(`(law78Tp044(3DK@ti!}9EcqnpA?CIR?BV>uk zTTWNX)vb^2z(R)w%o{^TU=c~Y1aAMVhdvpEVzY)R}WJCT6$}&^E71uU?qiHK-rY4Cq7=BGMN+$ zF821cZ8H#5WDWVU(<|5{U46vmYy76E6l&8TQf?IBDjx-(+4t;$vf^5aInqekZ;4Ur zAUzf6bWLN_&ErR@R>!YxJnhe7KU1$pvon~4-$Et&)GH)Jn{HfR1*^8heeBEuDCpnO%O3u_1@YURLTZ7+0P>2*`5QR)Ch*?%DodQl)w{o<*u{9RDU|KfGh9o?6KQXuWluQ=tC;j}ejMeB50^b<-e-ly zWh8az1U<3%vW5^HkEKO3IoyyP zogYA0V*GMt@&vL(n1@FP<%l{^7bbl(s0#ejm#02(4xuD;fUP>n?=EEda<3?v8?GIi z|8Z83Xy)rG(ywF$L>jj6#-%?u(9=(`(nTr($8C-@p+;pgp+BnblXz8OjYhe%(XrztBc7w{ z9zSaL=5!``!L9`!v{CKFNE7LG@NFPcGw z=BDh$iGoRohNyr907R!``eTNg>_ujg^eeJ~Lp!Wn+Y`T^@c*x&;otrI@A2Zl-gwd2 ziupygGM6s&J#MA<$HS_~iaY(39+*E_H~-9(=jo@%K6mME4N65nTCyMPoLD~BF#z6} zxwdZU4{;Z(Kd7B`V(|y7e2I{pKQ+tKEF?zqO9g(*EL%u7o70N4ZJM!eC<)*UyQ@_y zoyOA6>@L~?7JYVJXpwO~w1XxP8h(SL5xF2wE9tskY?15(N`3apIUiKDydkTMFL$CbU)nZq;6kR;lS0VfQ&>b)t&GJ4|q*(eRE739b|tXi7k0a8dpQv z+)8zQx@D_KSuHB1U!v7KyB~b@=_Vxp{der;-+#BQyfsD=Bbn6<0xH6ar-f&@*Y{%I z`KSdX$?Y+;1de*+xg?4b)f#g~ea@l1C{a{6Fl|xpSh>;T!(vXvs~~tPD+m%hkyz;b z+l%1-Og7$iBAL2F((HAhym~kCCy%wF`dfm#2hJjsy4=+^kZ-bjKp`Y54~R4*s1#72 z_RFpIUA-aoxpU{v#l`z(iUE%sm}M)h6}mIhze}}9{LG7EM@d0vG9qYcHmBYhIZb(H z-dS>9v%WZRSGByJn#7yrseSareUx#i|Ai3}|iYCo9(3X&H+k?UL=?Sd0K=K~&!n z9JaB-wlRFM{ARWkR_|D0n6#KA-zJ6L8w!OEm6zY&g1E@wq=U1Kw$s0Y&9Hht%&u;N zLzZ1D;qZ|0m9!~nxf{s;N%{<)rdR5Yjshwm((wGsLQ7!UW6vqIj4^?tk|z4~2ZFlw zFf-Im6op7AhE2c>bt^_1huedl&+Yf!7)*w~yO{%UX9S~x_7c57d(yI*U6cZ!daT0j z7!!`d1U8OB7)7A-Slv?NErP)K*2xr022+M`sT4-qv!jGmY%SvhcAtWmONjZnCD=r= z2~0IjFnswN%lh||f43X)rAFU&}n>c%`q1Ki8T zgayILtbY-eA|y;J)d)tlJ6@hXtEwpTRZkfu9_?>tFNu{&>CcUa`Bg|+%4Gs5T9_)o za19gjIOzVr$@JToG6Vt{NtRTIR+? zr%nM@F3yHqfye=ISB3qJk9JjaDNxKP{z%yOrIEk{=((1f!)bNk|cL z$PtAkN^RR)4+(A#8dG%OT zPCsorbYF}qh%8X&;#)GPZsnTtfW~R+l0Oxd2$55kx01kzH!deCWGQI6n-q29C++uH zhG{bp8_-Gj6_yEP$)O;ht5)4_#(xn=MQW}QDHXnL%s-I5q2Q>PL!t4~_2Isz3b?%4 zODDqeZYh&aY8heMRoy`+!B-+2A32_|6;IjbEtpt(;AiMmo;TB2VMG_XI%v9WmwXL<(gBy~8tr zqK%Unguyb98yYD9961LRX>=}M1*zlvqZHOH^>PK%37^q*h0Mrh|41)CYjW}6)y-s% zJ=%2CH@PBxGuF|5wP@o$fGXUw(Q{0fezq@dR;?bId8@UIzdr+kXDVT$^#9k2x+p0L zOaROZR}k_0Z*R+u%TXDr6bE1y%xnm8c|)pP+ViZWZ(S{Q5Fxi;I*ep7UR6uJToh?? zIh6wWrSQ+Ml^d@OW(w+(1awdrq}KoXHkf&iU*ZAqve7LHMVneI2j%q_$}_d|S%1;) z|MmJuF6F-#I@3oA45110+Ud)!XFdaYeEuZC{yc!a=!Jd=B~tBy6xt==hOq z#C5MVQx6VK2FH##fL|_#m&aH40{qd{-9Y#M`Cw57vA>L1hALtrA4K%{t4nK~^lWDt z^jZYzOX^(sF3eoW7+%U0gkJg3aY2N{u=Iaz!TYR#tbg5M{6iuCxzwLJzrQK^U-fzY zSD4cuYW-K#{$I7F{?O{5dsZT8CW*rf+0OhvYc6qGR7sUVV)1=|&w}h`(@IR8+#xt+ zp;+#%Q@&9JY=?PfbPF1rqW9FCaL-1^MlftTjlYN2kMM*O$mEV&oAwd9*-pEI`hi^F zt^AP${Mt2`?Z!F0IGZVH*}j1mcatO1IM{;A>{5QdaDmn^iZGN8Vc&#rPcR;yx8ddt z2eMs!1e^PO@ea3SQ?1uP-4**5pLmYzp^CZNL+&mx5gE{e$=s8lNH5rGa-_NUaMGx! z>E4dI>wEyjMnG{LH&PC!Z;Ld*!^-_Rt#q2;Wi`d4&J&+eu5H$3`>He!z)XD)$@PcD zM&Ud5n4zp17eT*F&w0JfTP-0FA${}(5?{jkVHh}$3-G*5Qto^07ttfS3I|b}<+g_o z0AdnHq^X~W1u@8XUOx&x>n9N5KIS~MvzOCr*pNM4l_2k6ohf%|e~Ql^duqiYIXs^Mu15Gkwxox`J_t%^EFQp8j&x68XQSc`5 z?7k>FT#SCnk)MSXZ~6dq^OI}c6tss)s5OWWYO}E)O}6ROOkWj^WA$ZUYN@bg(@*Cl zK8U6rIjflDhG)7Xbo=a8HXLOvV$S7m)QNPti0?7IdBMn6su1OOz3Qbxs)~qBojx6q zbx3mgMxph|g<8>Ip>$p*-6(yLrP7fzSKxNiN`xHhtixjx3vqq{m~fGGVH^`p0zd(> zzEhRzz)VwYMO=C)0WM_;3~%yQjsARYCwMdI;|^o><`ucU94E`8oaPpvi-(~z;|+3? zq{;DE!cBCMREQA{24Jv+xUgV6^GJEzKNxdfkJfo|ShFVo6>a0+xy1GR&Q<=86T8z+~nFu32a@l#rWEM zBYm%y9ZQ0KG-KYu;(B?S!<+;5%H|~xr}N%Xl=H>=i^gmGXm^qOa&mK6CX7;)o<{zN zsRzR=qqH85#n#4kYmtg>Suj}9R#Q$va zKlJ(kvlac#egAqf|M;;#2TI&n?@bNlb~ye$KsT?(dao-{rN06$Lz_|XjZRdCQ#{~! z(9!>MdUn`ZBTro*gxBaXg+l`7-3fwAJH9F%$La(xSXOZ>W&D5$j9kslKghXKIb=$9 z=On}LkY^px&ab+@O^w#V=UH|+Qw^M8_|5X>Vx1~D?8@=l6wrJk0|{@hoLcddY)3*+ zbZ?I#sW3+qtM}=55NJ>PehoYjOoF(>gfpKAb!$XCEVQN97o(59ERuGtgrqo@D=F*` z?68Zu8yAUAauEfyOLz&a3c^n9s?B{1v51bGFyUO*ZaSJ4w;-z)SKG-zNT#@mYNv-1db4Xh5K+D)!d_vKEWiaa!Ptk`j{t27PIseakc5v-`V*4ts1_JjSh zNN}QVU3F)iKYS9GEMVs_V?X;zG-JJGr)p3H6^_suq6 z++L$%Q_t`?B7;G2rd6<2{yGgriZ|d6^L6_+bMhPoHMuzAA=_Qh^S-vmrv3J`V?&F8 zDvt`mYmNmoB9hLD)1>EIZuRWX*yCAvzyr=xka~55t+9UPX&)VFCi=j8uT^0>x%zIE zj+?TBs(ImZTl3xt;(R|m*v5M-V#aqC)%O@pLl*zh+Udo4xgbsBUElrdcLz5`>{UTzzZH=7&}sUUAcP z{cp*12BJd+Wi6%*+;)6vt{tx7?Oq(uE@-T@mIRk^%} z?KRCmbNrP;KkZdMTgnL5a@957BH~O1LX)Rn zfLL&IwL+~069WDIi{V-49UeQAkK!fR*=s&WBi1lW>ufdtuI% zstL^=lUh|^EQCutcc+wiOSv^7kpjqbEB=Sc2cCMeIT(zknqk;j~QGg{@!Hmn*k&<4w?4BTSD ztZGcAw_lQEnVV8nroq6Q*iCWnb_u3wg5{Y2s9@nVw`Fpje*IihyzEzUxN>o$mqE%| zJ^C2e7~wcpwz6lQ-tX%Q)t08Pt>uo11n7_jfvTb0LSJrWyfn(%w~KE%JEL#?5OmSN0nlT@*?Tg>6>N+9t=VqV>(pxcaT= z{d7jK8tht^-H?>{3D;iOTu)`!j1a37Zivu^nhBG z2_&RB5is=$#kWezhJV^}H`_i%ox?sT_4UWWcv=yq7BxJeMT`y>9GX;|PiKRxyz!y6 z7TjJd+H#~#=GLg8pge@RU0bSqa_nY;wM{U#9y${tUMu1)eoB=v?pYwtSD0v8;hanW z$uhA&%AL$?yqh3iHnLSS>C{h8_O^RG#kck?g;$4kFVPrV-(@LHBfPht4JogF6Xe;B zYmRt?bZJ4K>lU$^rE?{C#2IR#73&*W&}nlD-iufKHZJqqEO2cphhC|>efaJeKfcNW*i-_xW-5YOyrcvnPk{J_QIf9gw^6UVi3WPfZlPbTGC8?INasixx6rc zOOfdv>6W|0Eq@2;7?$tMZF%ij^TxFtgq2a!G_b<0>f4}lmZ^pv@J?c}z*KhrG>;y53hVnb>W4rp|Gy7}MGS=&3MK5Ra z$evRc5TMeNu>Nbk%FmmJ1rY72K>Ll{`f@+MXJQ&4?=tUj`{{U~H=a`pL&j@f+df_+ zR#*@UNtLsx=Kb(1a+XT?V?d0LJdyWE670jJlpG;GlyRIx$^l$qu-DDH?(r>&ft;Sj7=5#XL@JJ8)@DT52=S1dv>uF^~y% z0J=4fYz(II!Hv}Mrd&y6=kKyZ*1$E3I#+32`G_m7Jh!aTGkyf034}@NwfJ{UT0s~Y zrG@hpu`*7YGLE9)?Qj@}E(23Mu6ZW`*Mgb^HB^5IgKqjUCUn8GJ!}q6%W>;-D2O`C zP=D-~RL7Oc9F13EprP!AMoT11&xiw=J5wCqpJd-&I>|Aj#bdn7(rBpb04;6H6q#f9 z#c1UNISQvb?7U}H>Al#WHL<%dJm1DiBg%0?fW7%5U);iAfZDk4f)T3`R99E6qu^xY z`8MzK&g}?BL@|40_o%E9Ty5N{c{|UN6t0e|ZHnt!-d8uN;RvfA_njPYEo!#4QIty? z@*QyF27I~UV7b31s(0tPYM0W^JXs9X;G~$8BtALgKb$9y9QbzT!qOwd8QyS=y_TE!;vQuvt}?$c4-swQ(vx_j3a-WlD>|pi|jDV#^eOp-WlqawXT#Kb&XHR#wa|Y@G@Ua3vZ^BDHEWO zW9l7LHDa=h%T*st4eip^g-NnZ^E7SZ^`IZTbbb_^NV69lD$CZ4>fJ7onL>3syXy-T zr@QD1-chxyIfmL)PHUvTdh*=!9H5BQ1e2M4#mEdDGBEZ0faj5H6xKlBpEbW{zpl~o zHKywujVp-|aId@X4nGFsTnh{dY?EWF6#M!tlSxo9g6_;syjyve0@)Fz+ju+p0`;cU z|78{yynLb&+gOZmvp%XensaCykExLLf$G6Fuj{coNprcx&)phZMEQ@r z*R2my4P}nq8vfw1_`(*XT5`ufO$KXZN2{TdOC8^6{k%=jA7=FqmuK-|ek!|s0Pn+0 z@UM<7Mcrm;0VwJ;yf&Gz2mpY0pNO%&xF+<l zB+s>CTDz-y^V}yE{=-2;!Y9;9#EwkK&M>2AHYls^6hjEEa>TQXiIqw2Q6gMxiatj( zV3tmevoK`3tp<9g1T&9NoA2ylh;QNd2u&?;lX=L#_K4#sBM^gEvk_8 zFfi+HyA-Rr+=V{g)O2Z$;NUU?n^Zy&9X)(r8ccg;2`w;oOgZtVvNB9kzdpck4*%xl zo!+vYrk&Gf?H%lAIt^7L+S zDFQ+if=66;j!+vyR`PsN`|c~k)3kJutqjvOZ=*BQ*MQ= z7esweC?4m6ix^qR7S0B=<=pN^E&Z{y_#^cv-|U}UhYWSoNiIVR6E_snCy{L9i+2N5 zWTL>11P4uJa>8h3nSeI(f}fy9b72%KY~pw4v!}v?QE{MOR3H6XGeaL|h;LYZ-D9yn zQJ<$?dCkDp&d`dLjO~5>oVOeQ@>POaqEV0zQTSsumPuIrhO&cpnaMmj&$MFBefxP~ zY`$)Yte{eWAlzp#7Ah&$pYpKKU#e@_w6E^w_xp_!WRbfMNgiCCyLCB_(oI;NtF!?( z_QkOQ%?oX})_PADIE#i`w{RJsjCJbrL6;;t1h0%z&JZb8zh-Oj^MhN5<}a#_hSOhE zb3%ys-v@t7nE`tDtubb(NQ`<5{pKUL(L`Zk#+c$xn$->Hs^%O@Hslt75w-*=P+RD; zo*Y3DIxhX33r&?a$>D}22pwR^dYKh&mYDymvp@-|Hb0X@0QHd}|?Qga6 z&nEj^VkWS8KI+Fdw0RBzD(mYu)K;F}5}Ds*L4V5rq!@SoFZm^xu8OoE%Ft~oG7`1F@LPs zVtqaZ^TtfU9H=okLtwIYVW3 zw@MO}#4Ck_lU&${AQ72RQ74okowo28H25aZ$Ag>4{2sYxbP;Qh-Idz z_8)^GL$`gr=F>BX&5&Mt>jwg4;Z4ZP#yr`Ua$l@GLb&uz)a4}v3%$Z>-1_AM`=tm9 z{m0c!TjDqZ7Ak#~KClP5`j}s=#n)mGGg59HB4e8e{F-_{d$MiX)4=s>WSIH>4bgNP>Nn0NbG3wVODGIE zQ3|U!pRnkx4NcERPC9P$$1L`8hjmnBSMSs$DjZT`yx48l=^ZH1kqfZP<_+1W6h2)G z${{@hWKgMf)xF5ppYDxY?l{@zTw_Ntw%U)I@nIwe{V2V(!%J#yL*ZkEWvcE-!r8j~ zB~NEU>mVmNUp~HEk8R zYgE~yQ_fee>%&6Sg4eyQMG1}L>d$ZlT)k_0Mu020Pq4PU)_EV=FF`&0&)Mz&yzB2a z{Qk7d@!NxD&&0sK22ZY$j|7NEi}8373<%C%t^lR?AXN*DINp@Qc0S41t;B*gST^W$ zl>%4X4F{2Yx_*36EhwE*U)ZzTLdn;1EPhe7)&>TIC^sIg?0Ps&TP?D6&M|XOyo40u zh(446%Wu659QqC{%r@COmO|ImnZVgoa2FPdSRbl$XiLKA9!}O`g@mi$VSRNUqe3th z4G1D^Ph>0eWlXv4pp3DGK~i81nXh4r%z16W8}69BoB=e*zfYipMT;XLRnD4&KJ!Q7 zlNAjEzsl*1*c&TWk7!+4m1-je7cJUck(!0m8Tbco^g0DQ5$!)Sy~p7ae#R(pSy#<) z#(u__JuyZ#**xUwT6c=_#l9wAbgLU%#BD~vCs!W4$_pp>=kQ)4=WV&F9Vu*Ig9}ll zq9A={HFzm|=Zf)0H&X{txG0wY{_7k6=TmboA_lGu=QJBlco*`F<7wh_gz?vI(b;M8 zoLu(q2>v#W=4{k4%Y6MVqs(q2L2{i6CZlb!uw zg2;28rsV5J7xSF+)1y1w%-i@aAd+{Ooa?6Tk4aOUJ$DMn*i;V)yekeJq~RCF;~^#vGp=3(KTu^5|JNL|sg| zPq2#>9=mz`RK;5KfZ-r#ZS!}IM~U*oXDKEojjZ&o&xK#%8BOfX>bxvR2`~KamL8VK zVkMf~5tACx{{5sf4-wDG7MHG^(49=fkXx>!adp?IY}-v0Io5t;0(mXJ7^S1|&^9qz z&oj)*ZKWsZK=_nD(9>0qX0_4f`27R{P|8`ooD&)_X*$$H^9;?{l(jI_XO}f)z;d_3 zJIa1D)cc&RKHYjq%0+=k^}5tuA5>lJS2pxNqsEO$AF?My(VAtZF3`BQEt%3Ux26T~ z2CbIWI8*<*kuH2gzELAkBn?;HP#p8-J60*RbUW%UH^;7K+P zqpSHTkj^eN1t$K0MY4kl=v)YeP85WQEu=td@I8HZ+P4sv{`=$^2C-)qaVQv#=Hc%f>nCVjGUzk5DMh&jK2=HtH3|*-dt=7Jj7cwzgR-*#U%Z(hr;Y zX?-^6?_@Dl72I=X^n3lnGB}45{npAyq?@K@9$kaG z3y_&{4<9w!B7CA?VHt2ryw2W*V3lf9cB#HpX?Pd?(+KZR%{c2P&bEpGP3hN_QDVG7TP?*YcHyG67u|oI^%k(SFd>Ce0HM*fpfZ;M( zX_g3YEub?-0J&ku=bfCzP42jf&rm1Nn<>{ny$;Hx_?j|bs@AvO@9w4FF(byx|LBM| z{nWEiXL2Q^y|Juecv!7v6JkC{nb+@>)&-5un$(*co41l&P}$LP6`ai|16MBnt~Wn2 zzC{0`LbE^mS@0-wg2g!rsP1V>~%+qb!>pTx4p#BAkMHz>xC zVQw<$4&<0X@rU}s`zs*O!)nBWJYE+;wJ$^kvjX^((6F411_2{R+Jl59WO zd`LU+Yd-%%Ym<2HysWVKpyy(^@%_%$n>ai63-r_J!*Qth7xP9@J&Y?OvWujG&tk0- z_1hffCQTl+rIzZ{a^D=R8W+db8)F0%%k>JZ*adm}vGcM@nMgZJFGG~IH<#a%E5X|j zKILd=nt3U2Fhsh@mQ6_Rm5<$pD)R$ltH+bm)|qC>nFfVs#|)eSsx-fGK%h7eK6RZ-?f(0 zze*k$L0ndNOF6!3IKXurWG$#*^_orgHeRU&PUx#{;|k0 ze^+?1<|nsbGbVJ?DvPRx>NOv?yYoW*yxR8)7aiY6?a4aeB`F<_iN!5j3vH+w# z_A>q5j-&}l9=o&kQPZ_DrvapByPwcKs?Z7_l{N47f5GZlj%7t)-0F(mr%hgre$tah zblY(}eQagIz+odOyHu)_>n6*6n|y^-6~lz>chK+7_7mlep zY~rMOD`vh^EyrRz4+v)gt+#jD+*y_Y-P7J0peUvIK)OUGToej&HU>-{x00*yPwpl#KP!?9 z)~}U}ko0jYreu7^9PP!*OgazjpC0idYwwWI1 z72i$md65!u`$fM3vNtg;kIvhtXl2t3$d zW}2ocFbm`L%7z7YP|L)QRbv%}GB)t}rt$jqooRhPJXF_7QDj#sszs?-jlrfU8|9FZTtvrZjwvD|^2|61}$g@Lpl7Vo^q2$YaUtT>K;T#_Pl9+B@ z=a^8rH-}P}F;bVzorFPZ`IMdPouoRFdmo=TUS%$ki4`2VN*!Hi_1#32(Kjd1-MsPo zwAH{)R(yO?Di2Y&Tc&GLlDRTetflb|w{}g{=XzIEUK)^TA*l+?O7y5dWe47U@2`Lb z7g_m?J0AI!n^3d)`#Fvm23!&`&6Mm)7~9l;vZGg}N90IGt$LH13DdD#r!Tr7h|cjq zbkWa@?pgFs4YOL8UMo*II-8Hs=$Dn17h2TI+&NwnQMo$jfRx_vLG z0zk{BlnD;7gE^Yrw2IxdBz+f7sJTpYCCz=&i%&wSiQ zc%}N`O1Xjm^2xNA17-Sfz1DsJVlGt_cqDJ;uO3Xefjw-y(ek{@?!d2@uq`Gq^O)vN-GUb~-1#znGR6IlY zq2bN?-(M9TWHWWyRjvADo_NMpZpdpoH-CMJ8v(Y3x>G2-Jk-C9Pc7yI>i|uaVL`V& zj9xwksTPLbD411AQYw+zN00GvY&m?_&)s^je&<_e^Ri6a*DA}`W<*3|ES4v!GS^zp zdzNoR@RRjk7^6nOJjM;NrQjE^%EmmAy{w!U$9BrUE}9_MW(p81a5c4hFEw0X1h-;M zFCG&cu-rHaizMS>R4z)nw}j?4%krj-Bml7>cRC#Ns#hZQQ*Gz3+oNCHS#v#edfqi* z{o8_{>n>N!=6nXV1iOl27Ituz@kJ6-&NH41az#yf78`buhc3KG|G*#Z$y>u$qQ=`m zVx2C1FzQ?*x@?ei^(crpnH8^EE47zj4PAS-3wpCmKflD;SXG_PO zJM?{#{LaX6g~;&oC}m*RcHe$S>B~~~QIbi?4TcKo_{) z7fGSSAu9@yokuMmE}|$xN8kXB`g{nChiL;oNPNC>a?VeZk=50z(Ml4krf$RtRa0Br zSzy{00sg6)zcV2OH9{t4SRL)kZgb&gmw72HSedgCYDilks_cv zOSeT$pf>fthw=Rf(2R@p2WZ>gquU*48EpK6euYrsFVykr*|hEV7%i>jQS{wNml5?5 zL=Cv95}<4NI*|^-rLbY8w&zrR7GKD$ytEVFLw*yR*&QFqbZsb>uSb!}@YlNJjZyZK&)&fcrz_&(l} zV;H%w*CafSmr2;?oq1RIjN}q?a2MN@HPfv)jt~7v6alj&jMn>ar*BVuKIp0C)=#A{ zRit(n`qo7A-$m6%lSHPil_(QNg!Uq|-3s=A`D8KrU}9?+|-z=xVpu&F{&(rs?n2&A+JHx4jOR zOv%Iun(`|m;yXii8U;ueJgjx5pVddD)cU2D8_S3nKWuhD0t_-`#GKZC9Jt7K=ql!9 zK9QSEZ@8|y&fQb&ZALjUAT-ls%scuDa2gDA04xw)#Ab}e5e+vR(SlWy1o0emw!I|K zV*R#&jJ7qej-b6VATGOkl6?j0^8P6omA@-r`H1ne~_Y(p}?^C;1nc^wL>{I zP-cxj?fthr$rtS6^N)0RK6}rz(QC}PJ#y|DtM?R4&(s&|zh=6!zUnx&gYuadFZL3s zNJsmEP{p0KW5Q&|fVD%XZ=$BiYkov-4I9?2|hAQU#b9^MN%#GrgL%RoIoW#I1OUG`Ah(`KDNUaCLLlB<;7WnY>?ra2Zs-h$3`eA*hN)t#ypmTfTBwqea z^mVR-@V9`e9%=h;NKYM^ongMPxQ0Ms8z84m_*Id8M>!vT|DDB_Jssn2K7S7$kOL?{ z`MYFA9CL{#JCnV4nPb7V3N>=LO81;xW1Jb*ewLK`FnPPg-%W5V*`cKtj1HpiKv`dELoPbWvlYP4o_WO2xTp1oq)ZAU`Mu=o1l z^Yfie;*Bws{}2nVCKix-A<&JtR3C8 z`cz|#WWl@3-HE|BqvHIPQzk8Y&wESl-fE4J(q7u_$1)rYY?my3l4kVG3C+kN#+yac z7xJ|wkfIH3r$p28f#rU>31qx0+9*g0=|1~BR}VAplEA0T8DUZiEr&+mICv2ya;iTs zjFejK5BynO-6#ZJ94~{^a0%h40hOb9p%MKaZ7wFM9y%rJfOi;6(V%*wByUOwlbxI_ z#%l&*2HAG)gcme?7ir~18yrNgze(+8!avk`acPSE80N&jF53m5zH;1x-g`p&d6LgV zkSiHmiWrg06CA7E4zRG(oCN8zwjd&afN%!u<}9ukW%e;?-4I&G$H)(P)wY35y;>Xm z)wjqwChCoXxk-gCK(^u#36PDargyUS#fR{|8mf$tiDjArNH%=?q zRbXHT`>B6|HsVj%pB>55_OZb5j|fQyhi1b3tSf*XEIfeCScy;wl#EAmO{$nji%q zal25CEY-;b+8e1}5RQy$(y~wO&`#^QXzOWchELVdhEj;5DPC-GYmwmdF!TgRds+gBkQqnMp!S{HRK42-yClmNsov&A8=50$cLilJtQT|q)b{+D*G;t03&XIO zDRsfgMpwz(2@QkUF#(fu9GlSh#FxD3J0T2fPfa^Q(07&lUtOBMxLWwrtHWNaRygUp zoO9Amm-ACzvqY4claEd;6l?6+FnQhdZgXx^fV1m1B!(w)bMAM(A608VC?Q zIDg#n`(oO5F4LC@LJ{8ghbO6a#4J8R7kv{5~4U@YYhA0g=wl0`f_IL z))gh+HQ&sqdDdXByF`g6cj!_8W;7qz&Azyp-VTc;b6wd>4<@-AfE_-SbFOZN>bj~P zCCwpl?pEVbm%THO*T3;e2Rxx)_r>ocE3SxNTRf2zpnER1kRObipno9uJmtyCOjb>{ z?q;LHcJ41KNuOP%xYOEqUxQ?&m)#o;^BEG0hG}yXPN?%3%NZc4wMH;r7V|1p?`VIs z7-pZmU{*3|;XMJhu7B+=7Xm@m6t>_%LUN)qs8mNJCFMWm4c@17NDOVaV)4DK98YAnAxgQa5k2KLESyUcLCk$fSKzd#?(XCFby3^y z-A@RB@uRiC*zt6!m$Zn|hyF!fbk-L|bgMbh_(i^`f{46PSr|3LZR`>aPDLJ!+oM}ctgMA?NAi8 zy@qPOAmjU7GCtxnSZpS`j8nOM(k$rYh$sa>_6|bcN3K?Fk^A9!t6x!LC^CWBm25T2 zA)T$N?J>je(|4yWCvRUd@z2cX_Npq2L!hY#GdmJX>m{aT=CvGz3v*9_6i#n*$I#t~ zX&BTFC|fq_+|gAlT+*PhlUa*UY2|_xV>KjHXW7^-UUT13zB{o_r>VM_>Ud3p;-{rl zBV}F<{e!1B$n?z_8PS6xZ*2XDS4cg#i*o{($E12A6-nD}vYd;ZOx=w=aAONL!LiuzBVO zx=#zwKyHIQT~;FlwC$bMo-yAsbU!sdY2(d&@CkODiTS}mccqdkNVgp`Y=-S zwc?wF8vP9pr6m6mO9GF#>u173#F;uU@@=p8s5diKRv2!MCdCfZ5@J2l-L}62&0i?zsTjFmUaI=h6>( zwEJue*N^pHmkid5m@hBCvQ&-rPB8dU3$7V%*RLb#$&eUQjJp9>JHz`yE&HAP`vE)$7Yp%9`)1GO7{QZ|E3Ca zF&LNTeU)KmObDjel`bU!l=sdAdS)T*2IV@`PU0@uq1lUDli zqF&DzJr)gXgG~?aUK1B(>ec#9tgc2sUw9%O7>$p;VSI1)5YIZ+@U_76vfUMe^J2h~ zSU=2UMv34K6J|bVO*bx6c)Rv~OvU%b%J5<0gXNHq6b7DXI{F9NY4mE@M`izcHd%#z zCf^LlJ>&Ef-X+=lPFGV`ZONMG&}k`NbI116VpuL)`HgfB|?Ob2brDww~JR*VKo4h2!@lwtCrKhW$}V^h}JJ{oo2+H0Lb59)J(MQTP7T#=u{dmIR@=gGj# zmq9pGlHcR43h;p^D?ezBk`fm`v4~QPZG%FIcdhgSxi|lWHrV~sq%QFw}HRboOUh99Ek}GRd zDnILvy#0bAyRx{r79zDAq22JCrKMmB5P6aB0Au~$G2Ll6b+J+d9pudQovZK&4C4Ok zII(9P0ng|PY`BOIt(n^WK8wVd3f?pQ#Mi_cBD}n2D8Jbj6}$|LI?eW8Wl2l?8ZWP4 zaW}t7;BG`vfgiVufxl;|mW!~QrDt4*1 zN6y)0;ijK}MnttRPKZ-BNLHWD>614$errqy@xvuv5~*wXWRG?LA^C;IuU%BX?y#U{ zNBMT=!23O2TGZ(S`$YHJRv&xs2Jd?8V6Ngy{l=cFwS~bpOxeE=4Z@hDj>YomV#f=g z({6t#Q7?$z{PQ=jN^H7G`O|qZ6QP|PGY@itREuz6W0;O7kaU*#n2fD)>a8h#CS1;= zkPA@H^xaN!>ajQQaCcXN&5blZCO5he(s33X{HGw(yTGnn*InkM!Tl3o+%7bT=6Dj9NBL?WrZCIVi!6DCW^_wNnX3)L zZ;wR4Ag`m%dBibBL1NB|_9p1*8q{kmg;cf@;dTotm!4d4F<q-Eek@E%G>eM=j@EXG2^GeI|0bP-2en=VIGrw@Ff$ ziK0NFn2$EufzLP1XR0Bo)jFG1eA^B?IN9Rzqo-C*Y~3X@gP%z-p;}nn{l;Mb_*EH* z*U626g1TPoYnzF)rc(nc$)m-F?pDj7;z4&YtGMM%}m(sAO-BGlQ=77x~GzQCS%);_!qN#6M zUM6_;v)45m~INc`(_9t72ku_!lJ3wqg*oZ+%eGun_Km)zPCo%pfIzC4& zg*^B265a84URG05K|fB}@$`{UhauK1w>I0BsD{{f3rDsXf(9|r!P^EKiZh!*%`pZr zf;a6hJFV4&{h!EZhCNADw(bho`NU-#{L-wbl3=YjJkgu{#QEs}@Njc_? z>a7O=7_xf;*Mh#%uj&jJ*2vY{bvjmBHXcPIyS6~FT{Z-bEC+JSF@V>swwV6C`v)4AG@ceNT9vMjKm~8&!5${Gr`eZw=Y>f@TT=9dqfVxyY3 zHg(@Fx{6b#1r1?-hCZ@^8(5Z1=2wYjQknjhF5MgF85ed**wwzf)RE2RQoFBfflHF` zrMp-0Rl@P|p(rAWNxA|qwr*(VGP`+Q^FZYeiHEZxuEP@j&`sHUP&$6(E1SU2x1--f zfiiMdl8hb_p{lzdB$2$qK?5i>JIxH*ueeB=*RO1tr5grJM$aHs4uR%9_VCg)s&CF*SOd)NC3&(M#uVY+JU_c58w`G;>7? zD=ocL0cFe^7aHtDmicP`0bA@bt_Bt)Mm9JHlFd2{YuSV|Q1!8BFAMEZVf5b7+X+2I z!IBzi(kMZO-F$4hq(P zni)(XY3KJGj(pk3<V`uLKW_jXT0qT4e>=<)5LLyJrc7`r$eP>{N#X(0G1D1IBVCrbl;|My!ja= zPWjk1+qx4w5dSx-`ai*UQQOW6H}E+`*eY;7nUY#G_~JeZ>_2RARKc42=)f{l*Irl`(GuEwQ0IeWE_3-u!dMQ8OQtwS)}^=U%J^tLODr_v2~tTUcG^iIXM$0|H@ zl!0%1IKzqB9b6RorI>tndk1<%VlC5ft#7su*f_#ZvTSV3X-1l?pvG6BceYvN_GlGZ>{neO%$5njbPVry4#dV+(_ z9%Z*i@nxK}cq;0d7jS3TnytUsO}Nf8<ZmPI?gTGUMq<*HvBgz(- zv6{FI#(zhxenMDqdKkO+K#Ge|>$b zK6*f6!GE`jfX`%5J1nz=;w@0dwsNH)yS|H^fXkSNIfE}zNRNPA62@nX-aCkm4sB1^ z3A@P1$t$hbF|Dss>r4o)k)mkPtD)h__2uW&Q6Q9UdLj*F{%@;_la2R+7~vI5Acb>8 zMT03QSa{$1xmNTY7zRRjcLE#B1jTM}){KxTO zGqsR#aG3aN{q0Db*n;|10@A$Blfgw7;SGTi#2XL#5hbQYz0t>1pN#(S`QwV!N!?+HXiF+~}QP`=$*k zFjiekCYYh(6ywb5aWz(A*mP>8CB+wku5rm)Iv;{$VEx8o4oR_o}6e|Xh%X? zrR$|%RH}GR28or0=sKo8smUW;!|diYK61;pXqIg%LCg_BbJz35Zl|i6XS6rZa=cyb z<0Nb;2d2$2Jx%uM>TzA&yw6e%Hwq2hZg8p$x2wEOQh91{m%}3?r0q9ko!IXM6Gc_Bb;mcuSJjl zuJupMsDX2B*>42|S4qhwKak?g^C!74ZCXT5q^C<|gRlJ!R!y zOyi#;2sB_e~zgFl&0+prlZc9eg>5j^kUS;*T__dV)%hjp6RO@&{3o>Ujt zdNB4zkqv`+CqMpHP|i6*-5zPWFZtcFb^5rXT)mcMUMwmL$Gq34rz<74C zq#C!cVck&}pL~frGOPZ>v`T80z|<$HiAcG-R}|=-q+eN@?d4MIYc&d2Rf0HjI{EpP z{o)AySFU@c5InP35=9&J5n|Efs-o9aYAeN7Oh4!Cg?4aCUf{ygaPIY=cPdCTwL#)9 zLmZF$X(6weP^4M18{=oLX;9GUy&)f|0IPl6CiHgNlKMumhU_&^N#`xz8!eNMK3;QQ zb#@?Cyvrm?ON$H+PL{*rhto4BoP~kZGvi6&M=L=8mqc zsd7J1V-Z-WT?K6(dazJ+b0+{M*FVm*HMse@+h!E_I?QWN>47-G`wm=*0}TP*T9lp6 zi)`H$wCSmZ=myJ|;cU~-?fs*#HS!IL<|I@+pW*M|CNXAHcXs5j%jbw(+)wQ{T=i?E z$OhI%(FqD(4tl+5Earr#ed!RNmxh2F21v>h;hYXa_O+iz_PqcuO!8o=dfUli-YlD~ zPKj=!RQhe{>n|o=3govoBX>2kDUR*mWR1Uf?4<@e!bpZmf->V!Ock#hbdvS!RMqNm z*yHMVSaMM|IRAHP9D&}h0j%vrLYq!X&^P_IP86m4aJX0X-E=eLiWA1$K6QZ?utIuN zF`3^deJ#N|N2&!NXJEfN7(cP=b)v=e6 zouZBP7V=8|DXjz7`aq{F{r+?n?rfKd$bne}g45^aEmhePhq-qnc!aPEn<{ z3#9-z`L=HpuMmlkY^`d~UeY`xTfFUitzOYoG7eQ7)G0oTlF|^bPiD+h>Yffu0-$ZjvJVpDHxKg)>OzFWvR(S?+^*Sb23o7m=SqQPmp_Okc_WA+ z%%g0RCV>k6a%d=mS0pW<7dC9u*b&A%RhCW zTxdyt`3WOab~f&`-B5Y-+Y0gUPf3BJJ|Z9?;XA*?TZ|+!N3TiDM!hriB~&SsPQV5T zC~2n5vWV_)*Y(kptnpmyH_JI~=FP3^px%gtjN1W*$(%8zvv=G2?^Ev+uloiuV2n+? zY$U7k=e%R6_D+QCksdT-KCRc*F#4Lu=6Re!@}S01Pe{<0b%oF+q4nWR?ni6CsG`sB zU7+576&}cyw>(s>1z5&~I(^kIG4Zo&D<-j)pU^stU?;Zeprxe=rhwJZxpHH1VqSNL zyxS)Otg+a4Au`HzMJ5%38&#|J`U%oxb-*|1RlYa6YlHHc#qU|&Fu`B2IUCh_Q2r80 z@7~S}kiI}PKCXT7^R6r%iW3~;YX>-PWXoo=Jj$gp(>>IF>iXMpTwl>UD%WJ}V(LrbQvH!zPF_0o4Nb~E~XxytsDXy(#>qZ@m4KT;t7k&c_ zl2;-8{}JH-tqAa+!p7fI#}g*JaIzZ#Mj-(Z^TCciBv5d4&caOwOU&~69&q3aS|8(- z&l>XZD;$(;GF>*5T8oFg;HS`uDbFZMimh!=NwXt*YGu(~t!X(Dka!Dnf?o zEh1VvW4h*0eqIW}?ve6oU_hyIqux2@M4ZdocPM(UeMWJra^nU?GLdwra5~UjhSN-3 zK#lIkKu&_CwoYaH?>9On`Qq+Gu}NLlU8)reYkmt7?}xq!1Qle`ZMc79;mw6OA??j9 zU5a#(u2MIh0I~18-hS_)0MRqw&{WHM3-3BfJ|$PP8aPv!*qZ+QvL5sL*Rrmea`i@E zGj(puDu}eX(N5!`{!r<*mM8pKNq{`Mu|X^h{u!p7Q!Z@i8K~<_;Y^1X77n9_BFG(G zpi~wU7g>av2copn1$^mo?3+S08otM||ND`d%*bTQCs3?D7JGGrQD}$urgKMnI2>HU zGZ{~(6R71qQds|1NWMw?ZCzPfas1Vr41l7X{ewG$*@(DZF`;MMUSGO`@Qbk2V1>s!~F5wnHg69gwi`6WAdy z;2(gb#Tqr|cbeD}=lmz7q^;v^(`h^zBk8vZ)@`OqH!UUIo!BJJH+d@b3pEQh3y_>E ziW`qhZyNs%L7va2hLN^b_&*48RrOO}!~Z~#v#$=OO0mDo6qg6vC;hQ#=@12GVPU3W zA-X}}uVU!&N_KO#GfMefXz$%=e%ZJ?q|9Uu?rsKt5CvJU81C22?KhN3seVGp7a}O= zezSWI|I_9BUpD`15gUKGE>pX-mY6efmhlm)V^dwt9(gcylh(Rird?ThqyC^`=4^`WY>xmeA#xzd6ezwIG{2-N@%02Sl2 zip#pjOkC!aTc6Q${CeWJ;zNVW9EXa{1jaY6qNSsqT?~-cjv$vl)Jb6UYqb$p z5VznI`^wax7OYBUmEW%2PkZZ~UhAb&vty%CTaJro#wAzg%FYw;0<61_%XVj3&>M3_ zSu0|NMaGb!Tywm#v!UBk_;1+jy|KM(KiYTF4saA_d9-3teIJ@hI5k@b*M%L0+4Z%r z)pjL9Po?AL1~^^HiQ`Acl946%_khJ{W$0)BNO{VY{awSikzyBdQ^+A& zgm`_FVrvml*j9?A*ef97Ghx5^QrIBhE>h)ND6i~dzo^`0ZYwI^28%OXSfW>e$u4&0 z{0EoSZh0fZXKA{&lp75id=_gbr)P>l0R5tlhHuo6lHZO)R%RdxdvQGYfazncTAT{G zuZwl3c&v1>+@{ReQ8stxjf!{pm1YSva<)iDxb)v_I(UY^$qw zWZ_V{>>uE4UH->t536yJGm*2--zHQCtwu4VmlJ2=ffSTESRJe}m@9pjE`@b9h|dHo zvVbgaz56e3w}1TLpRHt>T}W9DrwJHlvRhP=?p{rpna^;CjcnH=X(`JjVFSpQBP36+ zJ;V$^!@0V_SHBL&wA;99aDghfN6#3D4A1vQ#al3B#XP?q!91HGRnzw)dFBhsGxQ5GH!mdoBh87Be~gU7I92ICnA@uA_0a(9@D0~DGv3nI!q$EP~71%^7T z0q9|K?;oDl-|!`tpSGCy;B`=}p6>1y^x&~e0-#Lh40MuIqnOPKyV6u~`=BUDLLW&L za(B_rHxsn~bsz4Occ?qQlOP^Xw`ZL<3!?*NH2OiBuo;**`Zc+UOEtK~)EDm3&p7$C zm@}nKh2CJA3v&)K&Wx%(6FuYq zd5jFvE*HRGCWV==VGebe>36qyypJ|LY1NY~U7lP;(@+Rl;Fao_iQ^|+5=)&O)((S( zCY6PK9ZE~&8gV7lF9oC1?<>Z+rSM?Oj-^lKAAD3Rp*Dk~0LSToQb;4*JTQ za{Y&d?-ngWY=XFaK`ll*_RGna8$8U#FRW0ynW|)*Qo9~%qk|nM6GL(aTFA`AFhXg4 z81Ne8#kW* zh=Gj>m~0HV6S${FXQl}n!*uCn&f2jp#~@i?CP2d@yVq=w#sC_5i;i{G)ehWXICQj$A^2!nNhBuiSC zfnlYdGxw@Z&*Il$Y1fQDouBdsZ%KWAeV8sJsX?Q`T+Yxy;>V(3k-#QTsWhQb7UzM? zE6-izk>gjt(Ar3JwuODvPgbMT&NxW&<5Q0_L3`J{t-oHT&% z#nDB{^Y3wsY!_dBjeg>mV%bDqjU!uIQW;FAR9CL2JO-pWLL zGi?W3q?d*?$Aa!%#Z%m4{*}i+TX4JICi(Fj@)y-L@AVkA4^j@|l2%|*sXD+oo}-*& ztPCakM6wM06j$#DirlP%qM3O5{lxftFvJdyE|8)Sp{H?w}w_rMb0Ci)kd!%?P@&93i}3_>NIkj=~iHU>MN60abYMc+l`o7 zZd}z!FPe{5V7|kqR8sI%vKop*fhkzT2-hbQsQdtVDOot*6j(L1+GiWG(CiK9iZMn9)K7UWOZG{vbsxz02enBVu0iH1Pq;E|If%jU{`qyp*6)joeLHe5=5hZ&>;2(qEv47vC4)O9K& z-e>9OUC43RFjeK=0wT`UWOs82Z9b)3y;+~LRkh~&z~ad?j?WsaI`G-8>uWvEvtG+RL9{i(E zLR{jnqyJ{>A4dPr4(!yQSF2s|Inu%NYIV>R1Fub7rs;Z}|8#hLi4k;3ebVu79!n7IX%JLZx>rmTFs%Ark9zkq0b**aWS|NA4a#b=xtV0G4c zUywYwJgk5uFQDhPw%G(_tM$Y#C1x1~ywk;*^T?v^qD?p7a`gGh+B}N5Z>>1np(nfB ze%_YP0~!5*M;zw{j;?+v9bLv)r>h9h-6R-AqP2pIaG;_P{qW7E`xu`oGl*!1Z|{t& z)T-g1q7k~Mw^r7ZHF?MqMFPt5>Cv+E9($z=FkNmojqRYWlO61+TcF%=2s!>_rO~q~ zWGovR+sFE5Y|)<2`VT(nxLI%c-5d_l%cT+;(T+?(wuEV9om4tr%>2p=UN|>CYLQE$=B-?d_3uZB5yB z{!-5|a{-nrQOB~=9}Wb5HtvigOR!}PQ19;Jxtkw`=uQjKb0!uU!|LjR^UurVR1DFe zP39AsEIro1MzB~m1SXYf=y@kqHP^_Q?+OJR?KFMOAWPb9+N^FDLP!@^3%U6@74Qe8 zL|=&KqvXUSXRICd9HY0 zFW{@*4WSC*FPo`9cuDo81|rkaji75yj_;i-_IlP3gLMwmRTqAV4-pLKdI?C;DfE{(JU-B0(8BS*Q zFZ|=g*otR`l&Z;0dT(^=ebz!pfLv5q^`WtKsO(545)Ii z9B||@MOwT4An8(5ZI0 z#1$o%J@xUStcFzaFjp~jKf>%}@18;Q-^}t-x&7DrGU-g$^bkUKDF#hu#-t=M-`{<$ z9ggRWo3R|qgO%H0L;_5)-Anw#7i-q(@FkxMQTm-}TX%1fkh0D}W^Zp@u}fOQU0HAL zO(7i_}8i#@$orYhr4zZ13k=6bfi;V5=9xe7-rsBE;LpA zO_7qx*^@jR6k+0-cXH57&K;aT7suK>L0nRj$b}9K7A{fN0>68dp9dL;TIn zWo83K5UEBT@qGne<8EUfwngp`_*%YI2`+I{4{ZR%gu|E{%_(O0ZY#Op*2a z$Fu2QBwDWdE;G!1@a{JM!eb>1rZy%Vi^&-b7}yZRj~tn1N~ zkYe9pp3RUiij4yV+T7N2L`YYJYi1TyB6-uRcJR4hUx5`liR@Fs%kK@6S(}j-|h0;^gJxw>H zmg5|0yfEq{yl4L@$~*)ZP`Aw-WCkb4{&$V`lc1zs$WzcH8ur$(xk<56*@Oe%m0h2@yu84 z`Dqcwi~hVX;1^Z?LyiY;^DqBY<6wM}I;-FNlA2~L?ht)Q6sB*0G!wOg&=k;G(Uq7Uy%1_whT>tmQ)*rpC-k2I{^`kSbp6*8Q>?=k zYy^<8`MGRaeiAxsV13@;mWF_~`Z^mm5cx95gAf z=uc;{x2WG%UpSab3=83|pQ=>}$>lQLz?c~g#Se{+K+pZ~CaIhhDj~4bi@d(!jRPw{ zsMEhE64gXE&n{Iv>yaACMiQ{H?F&J>t7s zE{1EI#F#)sInD044RIEEz#wXX8oFs+tZayIO~!57Ysjm=*F9{wyIfe3A#5JlSpxQTh)(IZ10M6 z5~1^5k21YCOoMfeG68u|l6gs^dpj{zwmtsSjXM`<`|YRq2|l6Q)@keLh|ndT?I9RS z|8_}TSjiIq4E%$0uVnh~iJWC{CpX{;L8dCGVI#YbxJI^Xox_bPf8rnXi&`myhIXr+n_ z=?g!z@-(*5U2C-w2;I~Bmht3OyJ zrhM?HVyjQI$&eyaIj0Kbg{2S5)H9{~D745B67~#`3-Saa*Di=wRop$RGe+4WX+Dbj zr{PfL%&IjtIyd&^w`rORz!fz|i~Sk?3%Q^AUbws+zi0>${{rFJr|CEvv%S!nhC{I_=IAd1im9}{pw;*2ho7YOX$=x5 z8DBPNFV1;htDIoKha0!|ojqdFoNUDGH@hVjx687o>Uw7Ir5YDn2w&7pZoENGHWfR4HK{LrdZKp*s|<07xMy?Xsk6JZte3X-!la=n z^@&rZi`Cc+3I@;FWI_gx2c{xy9yNII-;DP*!N~45XqU{K{J4_U_gbyMgk7e@q;w47 z>F%{ThBc6Ug`vZYO^4}7L8=^vC^m%Fy6JrC82@+C%rqJ7U#0n#sk2j>65hL5hIAAdzRmk>871`8 zP}(6k>Xa0xAU%O2$X>Id#E%lDuK+@ThL4tY*ucqZr}n$qEH88XZ-Jh5>2_{24+lnw zfq}=|)WTk=64ym(Zze~FXjne)<4Jzhw2={|TNn{&2TzL+no0CXC?!YuSC)&oR6J1g zhG64RhN6OocSOu#a@VU zI)n)fWr8Fx9T9!Jv>JpGZTm;o9zh2_h;!~L&IHhktH^SeT%uq^I`wn5@)Zk!ID#qq zO81}tS_t?Djon{g`a9*)Ux)v_)<2B?cNn*SZ=}C^|JQpOfA#tITL0r``JYbb|EoX2 z|HS3=*Ux&X-*Nn&jl5P2EJ3Z-?QJ>W2a#Gn!vtL&{!{NmVA-fpd77uLXWDC*hvZzH z_MXBwOP5m;Pu=6B%<5OW1q=4g1C!piKRsY`8N`u->~_EgOok=#1ouAdCN?7rTbSja zk@K}rDl-n@Q^Sz#cqTYPe}9yoBNDCcSQGx#rHg?mS3wGzuSvUpl>)|yY4A8Ufe!Jl zPGyOMaO7<=-T(-af9|!9HF=sVmimk8Rjs1_rf*wP&L_`L!#UN`Yp>%q%1t-5=b6=q z>7+%fm*SqWAh>6p2@4x61E?~AH-#%kJEYJ75=YSUc#qYA@2ehiyS}zuKhXP>a^Ju& z8kO?8o3Y#CPb)`k11usem7!d;tjl7RERML$oy??heTdENQ>i)S6b5l@CtB5??-AcR z;Yr~=&unETyBP|pp1GIXHryS#(4UMk5x|xSGYi};9Sm=pQ@v*~NO6Nx7c0WKS?b3y_^iN2|Qkbgkk3>+g>SSD~+Yx#Y{ z`OtMHhr4ySI;e?OTLaqMF+snZO?%{-(8hc=`R4{{`mQ$F+zQgVNhfwbB0a@2S-3M_ zSTR?Q@c7dEK!)`0uj}I9X#JCE*1s{z-*x>b3oC!u@85XyKYx~goeZr-!i|HnZ|{#b z7S2*o;)hxqhL-0{zo^2t9aaF%vI%FB#mm2_!hccyqAGZ0?`=3+Fu`ApCG)0Qq;@VH zf^`G54o6vLt~1WYeOj~G&XsldRMtXC+=vK;G{9_kwAny6C=mQtNhwH7dYj26_^Q(u9h|?JReF#Yi*{! zCuSS!M&PaLcb2sS?z2hxRe!N2v7bLnN7c{y3peEZc!M=tlE9h~R_2m)Gjw3Q51H@Snv-Y)&T3d2@Y!WIJBCzZM>D$iDXS zggBDZQh%lw+i6MoSwZiq`vkQxwKGgzTy*|HI=1hDhg6?{e;=D+RC*e?9>y$npvK^2 zYj&#h^R%?7Zhh3XvtzJp1vj1}VO=!>D+}33l3tG%Qjj+>6{Brt`o!KdOr3zcZgXN{ zumvR@)JBAEE~0+T5;>WlCZx`2_Q)@)U7k;a!eG{#4{X|Q zBDDsLasZS}5=|z~X+4NugM9##_ls)pqH0FL87aS0X4KxK>G4|BdUU4I*)RB@zlaP` zgwHX_2EyAoVoy`tb6K2;-U2cj8kQz3(&Ph6ZWkK7jXCR&xM88}v@KNTFDjR&T0oKv zSz=f5R&gVBF>B$;D-x%Y4k--=desRb!e^mG2SEIZ>oYm;5i_rxI<#h?*Izf(zuNi- zpy=NhC;fMWuv*-difauQ)EWJf@UQ^nann>4NMHON$99#I-bTB$CYE>1`k?UWPR5>E z$hDgq-Pv>!n(uo**T^DAISkpZ!W#weA9%zPJcYk(Lk(n%esW}fMhC`BUsXF3Vmpc*WtJx z!ZTkLA2oO8)xpk8fn5D`+ft=8Z0Vcce5q7Lplx`blQ!PcF4AE;7RMD|>yT58jh6w# zOA|@90Uij~@D2;c?%Ix;^^>emmZ7-HksntRM=b)z3Qtszn^-XAVSu9R6y#IHvBHUo zttDi=#X=O-{h&Wyl-S84rmtuZ?a9jj;_9`NK5CC(Z_$)_9%8m7DkxqvEOq6R?$pJ! z=dg&DMx$Ize?{kPi{!b9xj@q7ZlXSr8O#ND#!D0G;KFi0YR_#(e^FiNePWehw)k1T zn@bOm&B*KBuIUnFbonrOZUPnBIhQ2Jm+j~*{)Rt55u0;Ce7Si-@6til!kGJs*`|7g z%{P6i7!y+tg=A?|F~}k3syg18c~PiByf@1aIB)@-9SS1`9cWC9K7oFp-6o=-_NeA+ z19?1S40#wPPp1qrf}3c$_)SS|xSs}!+B7cH>)ee4_Fa6(@$qd9Ud)OfISqIHM7V4| z8Bskek3V@1pXqm5fD_KPT^G3F-JVyQ!#szd{1EMMl|Fy45RA|N9$H?maYBk z4qM$dGRwYub3qwF*H6c2Q^s>Iq*?DW7||QA8c0c5^ruOx0f)ZLEEP_a5X7`V26GX2 zC-R>MU7b^WGLssIz#kM-Q!d4P2#zvEGlAm)|qkcd#Z&#yxYl{5C)&9 zG4f%*e!OrrExdzx-^|^y&ZV?phhNC~`ilw(nXwnPZ{trX!FNWUxAr-9jaK{3b$ZSP za*zs)M&on%&GJW=^ryd%3itjFz@6!2GTD8I-mpIRZPZ+4Qb{?U3>&%i-31}?wE{X& z-#hv9lijBysM+R+IQ#M$^hxDJ;g?FT4F>NBB5$XL*ypyY zMX}t@R$VA3Z6DmzZYYdb$5q#c$eX~*IBg~i^f!_k#0ADsGCYEF ze5>Uak7e8(tzrDnF;1FevyqZBh1acc4e)2lI!RJqi2ku9QSrXH(sAh4nv!&y2}B`q zr9bFiDgP2PF=TfB{`u%uF_jV^H~Q#%y#U#DV3&gJQl0MYSzOaB@D?5c`{h~ABY_c_Bb<<=Y7KW=o?`rJ-Un))=q^y&4=pI-yu{mgps(5@9$aN;}-))&Y=W~&b=+-Y%P23b(*n56@A;Ju`{WxX7on^26$qifs7RB*UsUjrpUBl^q^aC6x@Uwm zWt211{CsnVlS0B*{zav8c+iXCS|_a#CJY(v=ho?-=g6ksS@}LHLpk&b;9KUFxfEU8 zt{IAr&k{0K82Oki9>KS6W=rJMVvEk$s<1`fy+A6CdHv}7imnn+lI~L?z6;FP2z^kp zRPlTy*t&K=A9geo&mKG6GA|0VKnu?>0tZ~@>H@m^hIFnO1zonLuV^F_jJ<(^GRYu> zV}rkdpEu>1`_!D3?J zw9Y}|Qc|+l=sXusP?_uu3^G`jd3Fx-oGxOLh6~|DTiQA;v*mU=g21@Yvg(BMQCyf1 zU5)?qB#4dgP^XASnN&e8kCrwu`{T5Eh$lBNL=iY=7;K8%U|=m5y<$HlgjfrhiFv2FY98K$ZP?9>AfCDTSF^!%hEEm*P`c&1l~*N`+@ z3LO-Iiji`qCF2X-M(aaj`vH|KU=P)S!N$6FnSJCdpWnZXd9;0v`pIeGQhY-ng670{ zcPc#9h~poh>Uq(w%_@^9Pxi1?X)0d2XIKOV>khrya6z_tT0~_@ju$B;Ra_{Yx-NKN zGO+#`Q_$4_rHBEz(k+eWHG*n^E7p}LzF$;YlC{n(hJwoGNm})M{x~A-=v0 z7$4YWHJ6zdYO)>ZiO8GBKg3Z`foS7{=`qaptg#IF7^(Z5dUXM=a#@+F(q&A1l)|@E zrL^*?a$FF8!edoB)y$?4D}o9pnW=Yo@$_Fyq)fn6n#`$LqPrHMUGM{Ty^~5-am_RF zDJ&5N{{{wRCjMIxoxf!^|3stlABoQh4kUnuMYgcGvBm?D%_8kOjC0SEQBBJmWGj}X z(4X@79#}ui31cJ&p1&J&WeMyroa*+{%pZa2`}XCS4TbXv9j5jkLe}CreFp=!j_z}E zk9|oylrbdRbdR|iNItkI>kjvwa6Cq_dz{370>F**6&3bJzXO`xn-hj(2W)16i_ zvU+|0Z@K7Y@oMWL>y!y_b|l`g(9}xLssaFW#bb83^whzY>%<@_vp5}`1+UCdBT{io z3Q`L{4xFim5($7DOyL~R!WPsYc1|AOMWj?rKNSrEI$!s37w;G5fZC` zb40KVh!?2&Y%ti7?V32771DKNe>7wJrbyh)o^%t0!dSe+Ra)j74-?nA`Mm9_FgLqt z9*(>;N0M)kZ27fIzozfjJQBGT7u%53U`R7=HQ1ak$;1`r9v2TkZ}DivCN|6@;Gsx_G8&rS9b-1869R%y1xf@nhibMQz}+8*nN&BSy(4FjLb2G%39XS z$$;Z(%?3^MEvtc>qF`wb^{}~_G+d$;qENtpd-_xWqVM=(b=4dj(drNaqn*T-Kn@6*`zJH_re)sO~?z~k|RPAbOh^d5_*=+@FgAy@^-KYdH z)D#-ix09MxjUk~8f`lkR%yx}6ga$zniV`!esm7jXzvnl+@9#b5J?|gqkF(af*UGT+ ztd-|}p5(sn>$*Ol&vp6VJ?8?2b$8W9nk8!?z~nY@h`(^1vo7!gD- zqUg%?S?h$5MT*b8VB=M#)WQ=#{P`_99(ySSw+b`&t{f>SF4ZHj5D0xOBR?TMfe>?P?M*7+tVU8TLSKU87b;xUy zFDkL#rdA9CPl_SyO;f5_?~d@@mMS=nDM8Nwwj@dKd80r zPJ>ZSX0DAOP_Kl*wXv~c3rg&=9UWupr3(`kQiOMN)dgnP9;+MfAh5?% z5a6o9u8hw6GB0NSN&h)jdLa*4k8xV`{b?*7>hgkKTN> z6cqXtCXdl-;k8T`#cg8|=r5~WKk13d{fP;2q{y8J_bV@Ew%q!IP37OM_S$ny>+J8G zHanm{T*?)(cDyOT=uCxV!wCix2Pu$kMZjG4P3J`h+UG%dMgbOR*3X$!9d>J#4iG;xCcJtJy`%ByKG3?9Z5ldmOInUTncd7I~9i$*`?0|s){ zwFn~=9WN0@$CS&qEQmc$U!?80Gu3_KV`o7D1s4GF4a9K){Ac8&qW)aqseA^u-l6p9 z^hJRW7eERsw`r%ye5jSwoU}9w7=9TUU8o?K*+}Y8%zTZhIvb(Rwt`v>LoE>MaJ^(x z3$UOdPX&BoPcrfCzimMOuK+lfi|SoBq=XVmZ1XLr413G0JkE;Vj%I4p2>nTd8m0O! zH-zcqKaSaW&qgd;Ae`4*E6Xm8U%3EoL#>avb?bf=S+R>_^8IRYzJGXV&O95;R<-&X zbS9(YTG&Z@JUVfEfiii}RdgGrN8Q(H!3+g3p@{UOQomK@Zl0G@-&E#>AIFqo zX_vmfxqLTsTNC$JS6>6U@6e8}ILDgq8#ps-I>(U^9N=t!CPy6}mDHt0)r?6Pp6_f zJEu0^m6_jB8=ocB>uD{IMNuNAD5WsAjX{MZBU9S1&Ha9oM6yvlRVq|_Y>3}`)g-4G znf!uyU}tl1FtIq9cPEEoQgc0cZdJA8w%Xu!@3|cDVS|?h51Yf>u0R)sOKjQ{hlMKv3>EaW!H;8z5`$6r zTLCNMn$0(;2-a$*jI!K-uT82d6*8sVSsU)HtFh#GboA6DQNughPm5cpm4FwZ;Lb)=iun!i2VVx14&D747w|#9;$Y{eS=x)GmIM0UI!k7i+7~B^ z?j^xvafJx{Zy%iRRIEs(DGUR31q*>T9*C0)2Fx`ylMmX=);Y^mSevg$`U07CXs)1+ zF8Fix#c{?r6!mL>qXYTg44Tzz)%_+h%b>D%(^}W`z+1`3$;GlU-hJ%JlG_p^eVoqf z+YQ3@ea>##|8v_brkl24eUA9!*j5}QsrkwN#JOJQ%jrt55^Pocif=yfbv_UB&$TkK zud0^??PxF0sKg(fo9ZjSqV{421d%{um0B;%Np_+oXQ^UicMCHz9!=UVKi z!)qyj;w|2)sQ002*dY%Ck(dC(2 zs`hO^KjuSW>r_e!C9ZVYk*s@RrNT+*FV)epVrvWnYc zA#M+!0`j_sOBN`rJE(R+p=jd!@7NtaLmuMo_~Y2K%p|5n-Xo8(A%za5I$Zk7HzL4CY`YwrXXUEo2h}Wcq&`6Vd8#96Kbsm3Txn zF7|7<_vzS!PeivG&hGeXc#V8Oh&2sOuc!SuHWE8*FwOJ;f1mA8q(U_IO*d~3 z`9AwJiWOAhuBp!-TsObGJYB{yH0xm$=vMU@w%>R9aqOjKfklFraN4Q+1Ql@0&)%ze z5?V9W|Eslh%90cDJ-*>rWKUm~HVn3#j8Ay#KvpjkGxJ*;Y+-v}`*BPtXsNHmT309w z$ooYIL{Z(?$a55Gos{>2f|)8hh*hi~*V5z7iLLY*T8-MA5P%gR`SwP~Eu|tA{f6Wv zf14~2@>kGLiH**Y@K+jnXc+Ael9J9<3(&YVkmA^%?!VS8_#)TfELPohF|l<2*1j>2 z&_c{xUqD4*^iCG6^-i!V+)u0MXc+N&U-Z+b=2$@~(rdGfhw&-&F|b1;W4 zCN}AwIR5A&kZKWEf<~i{T*^$OSef>ACH~TV^KBNh$sXY;*uBb}rukv$zTRB@Ow$C# zpZDV!MqpBc2=N+={c+42Xk8e+?>t_GA}kl|lZO{HIIXB)L@{Nvbhc*~kS>FeBnqGuyl?vS21Li=&-btPwV zKjY)%l?V|JYbU}(c)HH`<@~1Sd-uWTlr=YGN-SMf7gEn?H{}DY#h45W6J&{i;ia1KjOEc)L4C=gfEbY)brH0ASULQ6v$u)S6PFxWm zkT=+xcsVtrH2yx*2`=Uy$swpk5|_%@3sd7Dks zCqIrYk94EA+Vj>6J})IG>)8%-bo9M7AiYdb=ee+&imu9YvPmMeQ**sF42sJ={vVrh z7!GPZb#*v)8%Q_fcq3b>uTCEp;IH{zn^aTEY+2jEZ-&b&pQ{skM)>yfQ|{yVFD!(u z01LJF?z$bL#Bzi<^?P5|X3bNMmklH=)G!ejX1D1b05)?t%nA;vtF4Es?KP+s>F!lkQvq0fP*Y+@4)BK@s~}fXQX_qT?D)^S%ek zJnjtw(z3eoX5xSW;dVD2X8WtT&O5EO)aXR|H$FK^`r`4JH+j^H1pZGOgk0s@JK++Y z<6zQ8-)7=9c;qTjBGzvWSlUFEC|;y)ebsD=xRxD}_e6}S@%MSsBldOY+`2zCOuq69 zI>Qg$IK1|8aH_89kofoM_~3t^BIdu%(5T=nU?!GlCy)BHGF3N~gQmtwEn1U6Lf7P* zx~BKv=TQPq_=M%Y=6JHjVGC_WcQDNx%!RV-^DudwcZu4ia^h*PZ~auwMmc^wx?e45 zFz*2y8}X8fZ*~Dh9R?oxuOdoJ(7BnC1$GirggD(X0wo5`!y z)g%H!!^>3!vl21J#zD5x@8i}xWOcI_lf4~(X#@p&c)%hpS>ow=#e6yBcq)YG03z?%$s7O>JgFpSYSXQ`{*S2QLx#uC4450Q-w3 zZdG|&Dg=ZSkp9^^oCi2uWtzp13Y(yRAgti{6&1)4>)-~<^W1B$fY^pN?>i;X%OR$! zyyHamT{mT9SEcXV@Dr4y>a{cu4^M2{45-HZI0pV14%*&-L9oxI7F+ZX1aB1IA1S&~ z(Qp^pk37|23XWoHEVS8WWEL@yR?yD)Iz^`fd7BWaYYwz*b#ou<`Sk7Rzb5O)xro6f~t(FY9FuM8+Jofvx5L;qM^&VkMJG?U`O!CfyIHa`qliIbD^|^|?x3ZFK8G zuC(YfHKoAMiQ%iHX?cAbXd3c3?=jy5-IW*%fjyaJJv;fj?UbdDUBjyyMAkNqfs4+d z^19G5MH$>GX(>ORUhK=Wa<56UJMszceyp@&GW4KI@&WOp? zrIP*VF$|!uJ5^e$0_FYREs+0>xBs`O^WCK&*Ama}S?~L4lgwG);PDb~hFMS{(`6BN5;{Tr_CHT zn*7FHJ9N{uXS#Nz>l{+Yr5VE<_A{M_Bqw`5@~())4a!Kai3Q?@ z!e)@^wCW&xB*uTO;o{WH%rM7?|KWbW{*WHY?IUeM+a_0urPXeGs?;6EXULMoF+woD zj#MBydp9G#IJBnPR5d);?@eLF{`7p#x$t`~_6XIqW_45I6OKon$BT+sYu9^LZLFO5 zQ%aBQVkLg<-|@?;obrV0)eg(o*fcASQKP$?bY8!6S6-3)qaD0AJo6R_JKHIN;Jpx@udLk`+dL zfHi$RIOkh+{lQ#sdD`9ysDKcvBHLo}qAhvcIAX6mow~&o#dRge91Wy@6+&QdZyFSr z9#o=KcD^Fap3G*8pZ*s^W$IE4W4ZS?W{vx7X%Ihhq(wSykWiba>4h2;+mkO>d-7y( z@eGBE8CDhj?H&TUd6jiR+-lP$S2JSk`{-Iv_#h&N9JI`7aUd5ilaj4N9}G8?hq&}} z+vDeFNfJ;8#c}34pf{;b0loh_5t>=R)Fww2V3ylQphRBi@97vZ?bOY^$-7*Rr73>& zou9jiA;jg9R5}52{nwwHeXz+;$7ez~=<>alnY{d}VJGO3M`dyx(|G?SH$8 zZ5Mbc^WI==R`i+sieU6Bb`K{0>N^F`7B{L~ce#7>l;?I3ABNBysB+PZ+HVlrPR?T- zZ7mHzTM7%H&@xw87=B;*Cvp6hBL4x-fJ$L~%ckrDa(NaPcwfc zP28r;I(#3f4N+bGJjPs3Hg5fKES^$P60u|Ta3y%Q#Csc=m2dm}TAYrdnOt(PL&F@nJp25(G6Br>^-jTGS_P zACoDSDs0R$B90nc0S#D*cNlT74H*JO$4$?w@u{r%CtWTD`vbR*p5i3B-i@72vI6b{V$HSA?t>x z7btQusJRn&$GcSUWoAJ)Ge-A%00PqE0dPt6fle#dK*;M}Am7E>VW5h~#@ zbDj#Zf!c*-77-Fgh!p8-!}dSriCxRvQ$9~olUAJo{}dHRu9cBb^B%a!>d}`TJgmDE zYd^S^MmIzVAk+s+yldsD-X4^H{a2g+4-@+EJg!Y{)^CP3;AVxsKqhV%+2AL#KNJ^Q zAY6zGgPoRt4#vDDceF?Q-#MjlFRBKp1r|OFDR!W*jPgNVV-)HVH3+KK+Ow;!GIAgs z-^^=YIO8Pw)AKUeaEM?`gLhkOKr5_g*l*T~EiUC3O`O9S!YWJRb*~SR&bID5|1=N& z`p?;{%kA+?iS~M_x1J7f^iSElN*k)u0>4iYepdM->Bfz`5vjXxF4v_OdDnv9*~XTM zZ03(N+r?3{)DW6g`gmfCVu(3;5&T8z=5gu9SYt>@Od)}jv$_y)lh_k9osa+B(d-l zPrGESv2;Q!5G|IFzqDibQGcdMJ{-Sk`u4%29_sDr4m!u*iUvmw(k|%cD1)6egf#m{ z?zw{$MrZj_W%lNxvAxQURM`WNep_|7!M6@?hX`+vjBX}Vr}5={_|s1+LVrHK$N?6P zZ*|U|k!sOeMuVd(R<~*Zm1Wgy0XFl^T<{YJ2*w2lMO;a~?-XQ?q4OGuGEDtmK~l1% z{#xGGy^RxBMT}ozY=XWnh;7t{=;2nDr}S#J9}`EDcEV&5hcmQ(t<}}hu4_s(872*I zmzX}7lPi6U7juJ&bql)T^&dV$*;8B&?*MO9zna~LtP9aJ_YNbb`HrKjG&uI)M|#)(hpW%}|Hj21ST7b4;Mz+0P}qE7O_BvXmS6$* zF$?Ug_%Byu2s9Md-AL%27zb{t@KMtXO&|X}tYf)iM=}~SQ}>K;HS0TLrO)D_B5iYF za7vv@=k$8n_iK)61qR0swnn5oQ46Cdi<~MY2F3)r%@2ZCV*`N7`5|*J|3XrWx99_} zD6CyVpTQn9iW$Px;`%>YS+&!iGY$^emZf|G1wl)}+F!4$7v6yvG{=@nCBc)lmP3(u z&mZ=`1Y=Cz+^~ufl}Adovr~|j=*=LOm8nqQ3$_XjXBL49(ZR`$^tp=tbCYFz+2{?s z64qNHT-q+x>Jtxx3QZ7zoxivv{K;}g!a#X=2TU(UuG%i1bIRLo$ipOMZ-(*4gFgdR z3R2N4{P?&mJnpW(qiO-hD(lQ|hJ^%L|0r0LAxT~+MZ>{RBCO-mk{g-o*Inx$SD-K_ zb}9V%=I|dq!|ZGV>gE`_kO^J6N=6m+X;GT|8los)dPhjXG1wo+)Zl_Df)Lx;=AT|U z+9G=hp#zW5(|LEq>;7dzyP^4ayLCQvGfZEbQi+!#+xBq_c-Wje#J*_o z63aHYTW&d?U>0&!-KF3Pui_UA9JONTN_>*g2)p*alMB-;Q_=k%BMP9heO&AIeqt^= zE|c-x3n;`bbki=cXz9Xzf}m*SzDg@7dci0TTcV_vB_;(bE|Dt-@i%8FkJMH-#ZTa+ zi+@R`DKMhwiYS*BdyX~wT0)8Q#qIO^_uP4sNJy>er+uqo@I?+pzQZjxNo7n0BaSt} z_5=+KIYj4dz$FOcZjVzR?LICpLM&*!%+gl^nUNmknG_GWw$?q-+TIvVHS@f=Hw4nn z7~Z>Scn5_Sq$uzqn6uFd^W^1GdMN4;GN1Ue^J{>j;30YMc;aAzgi#t>sMmgLve}{i z;R0d5^0P8ZMcpun|C}5ISIDg>kNRtj|0Z&z%|ULTuv;S*5;JCRYLAXUCECU0AYxUi z*X;;3dkD_@eg<)|!^_u$mNuifqu2&GU|@MM6Tbv}Im{b$*tO((sNK8`0IoqezE|RoCNA z8;@pvKR}BdM}vE}l?5^ENmS($Tl6XpF&hf8)#^(akB_Pi}BnJ-< zmO-6LEH8if=Vq=}Qb8T^NxtW%jHzQ6cE>^B$FT-wgcX1>WZ9sAXj|CPiWspSyB+p? zC{9lsYl0A$BkKRsmKA6o&@)q(;gB+*vqz;Ka$eIPmwc*$dbv-XHOhscidCgK^b7}> zZB6RHgb+jvC;7X9{y8|@&5<)k%oixRuPG9Jzox+vFAurB@M_=2Q5^b=)bXd+^ zOye|A^R(TUf!|mH!`Txt_J?&_yl$p0vDzUJI@^oUPsd5)Qhh5E9oga0yo@n+bC0>%l$uUWw{xf??*+CgItyvl{{s{L&j zwZNwPmqP36u3@rA^9?}7HIEwu3U*$qijV$lNE0!bo`Ur&lZNbmzMIq&g6Vqbh|Rpb za5|ka{mcs6L6G*8YmJq_|3v;ipLui3OnA#;+k?EarpR?9^GUye;TvqTCs z-j0vM)a&?ACBwA9^l$tJAaB%{{BJOM#&yO^S`lL=M${9;;Yx)TF6bt|kB5*dm?NVG8j zr?O3_5Jq)|xy@x9+C{44uY@5`{H-qMM7boM@Sg;c5e_j4biYz z)85dPBBb0{wdO+J$H-!4&gQ5*94#hk72U3B$S7hV?}+SDYYvS#dRGPl+kJC=RgO3+ zhPyTh)yRew8!j(8qcp!(y140=l^(-Tne!gY=9qw^_wm}@uWqD0*>$vW7b_^LEDfpe zZTPiBk?@HgM%b8Ju)3qCCp^Hxx$Wg1(!SeAOgH_y)HoVOul$1y~ z;%D20LYf8N?86S?C+!Q-eOY%ZyibOD@-9zzzB*J=I%vn^B?~-OT1ImZi%kjN!(x`8 z6Wcq>LqqsX2hoV5C8$eLU(1BT$X4ftz-EW!WY_2$A6rET4PGUCx+g`@S$+(_v}s+1 z$jzH&(wa_~$1f$PCzND1fT74Ec6OgvPn(+i5;theED4Vi}4Fw%p_-?2vK5lSRZaOvn`mmpH};hh@tjfTw-rB* z(bx^wOAm|n0hz^&7`mprJtOJ|TRisq3 z8)Irkp@CbnkI&5BrL!M_%@K(q)b8#OTyl{j%>7{MYVdSr)2xMgK@0X?6ZUAd z%x+8U)R2fi3whqOxX$m#u~L*Wp5GBK)ULJu$_8NpvgjA@C>Qm5T%Oh1+gSLv0BUK9 z1WU29^v8F~~q1M7;Sc(~73=8Ukb zR=w7m$7-g29J8fmpA~27RW6)4oXO89zK+Po*ZPY`Mgi(GMy?_pw(S|k)g!%0)cUIj zR}DT2m~miYB@d)}smQ=BCy3|nE_=pFpVQaQ%2DOdgW>sV$eb-P)tDedhZex4PdBx@ zMh^fNTw3Pe-E3ar()7GM&5}DXW7*@TOL*=qQz>QgmU11HLQ1IlgfEi zJ^~uM%jICO7xwNiv?&VNXj47(sS9Ut7SAae2`ub@ev&t_el}*ZJd2?F~H*CH(ytEp6f9*)n9HPmX?Uu=ar{lSR8y`a<#`18FE1ldB4;m zhW>gwqWe{gVfdyaHFRs?P<-exWgcK^IOnTzcwfD@g<0VA^MQ3L;yTpmnJS@euH2MW zwo;PPmqPRy#ipR8y)R2Y?9?57QmB(s+aQXhmyq2{N!<48INzY|pSDsrbeOT}k+_xO zF1{PCr2PeOnabTO>*|zN*6CH91;04VIrofUj0mYN{tndzKq0yOpS!4C$l8tjhK}7N z^-Be&?xFw{r^^7xEBuzh%sx6Ct6Ck~4rGgmMAS^zOa_VODPhvWI4DXE2)F#Xr1P)1 z>u;i7+XmcVWgQ8_xJ!#;7k3%LinZUn>O|glXxm8YRcGa#s*Es6(9fz`g?~zjwGcIW z_Q8DL%EobLXBY|B52@BEUw1w=J2yRbNUbxNl3nHpgm5kRV@vZ$e$RqJz&21cNNHFy zuS3#w%pd;gC~koJR_)R3&igd#`Pae%Vj(Opw+7^#8-_PK; zmP}(pe;f;TiP$POKI*GGm;fd*3$S1CT4~PnN3Xhn9Aj1M?(gpv9|k=RnEPBM)O)CF zQ2DTr`6jm_i3#a7vZ@~ov#XNZ61y)UxzC80!PW2@F^O9I82YPCbR+K{xz`SfH>eti zUG6+yOQ@VudFY3o=*+-a*mG?x+tF%-UOy(3JhYgFBa;{5t0d(-x#dL`W3-^RVHfK}ZQiZ}lEXkJ>7Jb(Zj<5O>gNQ_PM=>3Fzg~B5AOiZJ4bcbX+Dc# z`go&YI0wZyHS!3U(>L&_3;c1c(j)Ou%zcL6;u+S5CJECHodiW*{WwM%q=EPZv}W3kh3!W~e>_LI^B6zwnDR#IfuZ z-2f*~F4gnM{kEIyvoFsM#AqUA^4B+*vNitaqnQ#7DXiGQ-Ejg>g?O!872S$OdzvW_ z9WuN8T9aBXs8Jmlme&nUf>#SUGC*Z%iMw5X59s-DrKutf1V( zu?o0osQtwd?FHd@y0=?+3I|=k5xwZEd1_-U#dQ3N^env2UM_mM3)1e_6&Rs>Mt{2G z^aW75VG$_yXF+eu@b!xHb3R7G)ls9Kr%&A}x_&>M09H_ai!{LwyO68`j2B5boOyF?KG_0=zm#9Gx@P6a+=R-!eni zRyRoEZ(1})%yV{NuHw=g_Ku+7;9b|QhMUu0-gb~~ut+{ba_K*x6vNAlF=_WI(cRDE zNvQNQ!-6*`!4G3XO^9wi#($Ir@HHL1V%cK?cwRSns>It@0Nep``QXcT9u4}#nNt7@ z2m!hhJVH4AB=V|bK#;3$T8|V{qPplYUZ+-)%_bT8FbzCe={fdn&dzb}3eoDl2YqyOYHwE-59b>5FRejpn|UL#d+ zj4a^g$IKb=iWl1?erGXvP{t*-}cogGarLm zeh#p=QMVjIg{Oce9h2RatnHP8E&V~*@7EmJ_h;@|W!SEhP7hp)qiotX!zYKvmy}$a zV+H)cQ^)|bg94W~?oBJFKS_wFv!9llEYy_|;hMV2wNsSBm6%d@v2|u(2)RxZ`&F-k z4_i`s#%%VAX6nKpJv2HEiME!_zeoIbI%elFwYGZwBe|;T%f0NVqRXl?8Q&bM8Q1ZK zvPBnH=+8fUx@sQESZ%}FB+P_!&SEQ_2noyID406AjPA^th>BMxn{mU&&^<}4CrfP@ zuNFzDsk2x7yfVKiSE^VBV=cN98B0?7oZ6fekza4{FW>9ZNE?u2gNpOWBUN7%r(!Ly zt03eylU66 z7)X|cM@^sg%}f#FwrbJ|U-*_2c2EjCsQv7b9B>3h} zHMxuyLHubs80TSMmg?>I(v6@wC|q4V0Nvwi6vMPeCTr@d`yXvBQVKU%x%iH%(9ky9 zgv`k@Vi;9!;g^guvxx=fQ-&#_n;{z=Kkz2`%6V7C2g8UC(2J2&|5CAqMh~%lr0E-4 z366>xtM3%MbI0PS6w1DGDO6E%y>;h~C0>3-?4W15)(c-mstd@@Y+|<02AFqL!vEY+ zJdh=UXx=D<{Wo-%ri;BXU)^jvS@pKUQ}Hp6_V;u+hVA~?yx5S%~?=f+&0v_$~$)0OvZRKQ80g*n?Yy> z_Q`4AO@xsz3H-1AO%B?>TP{`r(L+Ixw>h{dzn6bupXflnk(yXxa&wiRtSa37_@3J? zNhJNQ-@`}*E@fLo=+wo9vSNRsO+ln3=Ngol()rtU-(j`VJKpwWUu~)783hfH8|ILuh&Zt= z#N=PYRy`aIGA$#lX84kalr-)!d(3#np%FD(H)MYOo*#SWZvS{?z-Z`6)%%gF*V`@^ zeUrH#Bl?EYl_2N;d$iQE8!s*HsatWN2sjdKYSlAymb($1G$}0q~3hCr&9!Mx`cd3SNwCiqH-w9a zQzFuZRGh>7)%oCC1z)0X^vsix)z6)&eL0e{{7gGYeoumCs<1w|V?bUIL!}o|dQyM( z#r8&*LOd!Ct=j35Cp~y7qHrM&!dIXJc~LCxMu4x7{&uALcD}cmPmk zD~Bvzsw@vkv15X%S@{TTH2^!_|8Il0B#|bXa(c65P|Xd&7@#OZr#W z&ZM7<9xp~Z7Cr8Mc9FApv*n++vurG-g5{oJskok=-d*C3*VxqF+C4Zr^O|)OCDWxm z(>=ze3vwqrQKSrj`z9K4ii|29cDdiSNNe=c#CN%E%YVa+rI4TgczbJa) zn4pRt;8Ss#14BWLSca*u+VI6;7(nKzMHOaGj1XtG){L%9%_dv+^+FKEyQsq(K|Yp_ z&{9aF+MGpeED7PyheCU5Hpqmcw&}vdIOv`Mx6Y3=Mx9#HVKXa!iEQPsiOCo__cgBm zblMM%iMOVpf?MaJ^#8hiy^x$6`_EYAc;>B_JVm&^58ECa8GDX%DD+BW5so6s=gBU& zIp%Cv0@zamsBeZS<+CY5&WPLEls*N-P`@ZmHGLcQa$Uc3<;%MltN!zG@|&T%8;X$n zZ%WdklexW*2N^5Q12aCrj=<6mk_2p!2Y(+|1n@gD1wew#o@60b=(+`WO`?$l-FIzTNt*Te0HozXekF%pVI;q#mzSd!E^Xlq_ z^Cb_PMonYT0W7K~hzk5l^Z-+j_lJT2pQiY)F-8uL;n(MLw1*H4mBIX6885RkaA$V4 z;cBb91gtzO)2!XVK}ih9@wX14#y2FN47pt4H^%r*^MAO6C0iAD>SOD!U`MPal8oq{ zL7QpchJA#61RmwtrMk9fKU=b4C&Zx)2B(+Gz}$<|MFl=V+*Y<<(TuoEGp@BE(KDQ@ zX68JheXjQnC1;Gj`jWZ@me?|7osBr@O*mYxM1@fFd-~k!LFSjto~G_T$Ae$6x=ksL z=ZoO3bB=6Zcl8*-%2;Qrc15F-CwID+ni+&Y4)s-ksFoeD1MOBD7SwB6QsfmVAEp~< zEsJau8&HLe0_|%T9l52}B9alO5jx+Rr`K&L;hI#xNxiZp>%@~+%xuK&J$pa5%)mei z(j9hh^G%5YbWXbVa1b&`)e+eC-m)5DJji#E%Ia63F zKtsUz0i~zprV0ZF?=TWoOZOIWq;ijWCxBm=V z>TK~sl_Wm!)zP@#?DbcB79ue|3*upFi3MeI44rohaxdhmprb8*g&Do-&v2YON^G-$ z;f95=^zn%0ds4IrLcf}`IbMVk=wcj@b9=JJ$-YXy!?p!gpf}=(u=dqAnDQhgr*y5~ zx-5A0|70Np&|ku@Z)9DbU55fxWT;ilr6h}o(Lxr$@E2eR3aY38jzIKEG*8|W2GD50 zg0NPAoD2-izY&q!J74{N__r7FUr@mRbS(ZkF>R=e|9J%e#Nb4+$UD6DS)PQJi$dQa z|A5L_O>M{jBq_PS^y3(*MP=HE4}mAT%my>wg?dzUq$J`+H4 zTuboZ!>^9Andrm&b#W~51-LL z5(e`=oF=%RvCIA9664~YbemWa{d!Nn@@4;}I0*|xY${x^iYl|>Q2Nr!taB}H8*nEw zR&Fgc#?E`cw#%}IANM%4fVI_|s&G)tKyij%={Pz(WmY>`-GOje3ySLURjJgtQm$2E zTK{;c{@Z*@iS+$UK#y3%7=?MAQmB4g>!wP+i~adRL}t2g|MctGa&(Mb@m1SLuxx6B zV84zr9;Ee7t(|h9r>gP#xAp7lqDyGb7 zoJFeJc+-5h(IlB?lt8ppTv36^LrQGgjOQ>)l~TfZw2-QQ#q~TiT}Yy*_QpJ$Deq7| zsrgKU)$e>kw6q95B>I4}AYgpK*Rk{23B}Zh=?~ocHS_)I_hIvw(XZi zY{4QeeyYf|Dqc^WJ1G^%Mp$G!6>f*E==>4z_0-+1?5>NEUVp33w-%{Zkb9zI+G^&SS@ zz5kSiI-xAq+Ivz&;^Y8lHbbh`FuVBzbfrmMc_&UNN;tp=?9xoN(FD!;wkH~q_HGw0Uk+zF!@8RHpWf!rcSY;3xh zX{KBM_tWW(yr`@i8&qr>CB`o{$#INIb)!;q?J5r9{`8xc3G%)%?7_f*jP>Nyssoz=+iPb>@hQ!4CfI((z8BN(h->Zk9*4+2gL*`%!LXMeBzNB=c|1Z6gi5XSOtCq_3U=xCd4?I zs8}n9N<*B5HxH=0aB(2TIJxYjOxXsls75ET-K;dRVDO9J$S!Aaob(sqnuVF&(n};E zO*_ZW{l9d`${~{Tju-GMKt3{Mh;}bT(Y4QQ(fNu{->H@}T#Gz8)jQF4-}@aq6C8I{ z<`S$vO2OtFH0V>Sa2zYpp$5hmf@_(-=y=q+Z3_O|oZl!&WM}Bfy{voIF;W@R;zV($ zb4H~A&k!*D*_9%4z3A8!KzOXh?`7>4Sp^G*4Oy{Rh-jU@OwETsYZ%eN(2FO5k($*zpn$5(8Od-D8^8}_}Mm!$0 zR)^7w4+(S?3^{MLlF%7bL|)N-el~i+pe$ZX%;C;NP2zmJ>Xz_VO)LiiQMS*dxPMp> zbElx%L4&5gPy4M4hbTp)Wbf5$$NhtY@5c(`)VLSxzI}|y@1OjdRgckf{Q!T5_;Np0 zd{M}~xF%WcUe*;SnC~A+9aqQhE-wb`t}Y~w)cbY^BqX-Z_aJ(tLGcbLVN{Q}Io_B* z_#(2>suk-{Di=j0yHi2rYCwt!zcM&qdN05j7N8_<=7v4=7CXYN*_T?YXeuBtvJnTu zsyuZB2j#iM1`DWL;5fK4h{LM4P0fNylB5t3D}Taa68-n|sQVd$7vf^723vi2Ir&HAURIZ&|lqU?D} z1|dh9t|9S^UF|T!yBgc_`F${6y6!s>v4m5wCqq~WUJXzpq(!UuZ%t;a`iHpj>p0UU zNMOygO=HbheyjxPc#qXFJ*@X%v(~b|TdVCp?kX9co}swi=uW?n)e;tcBdPh+9~!`J zIMwD9)sVM3@Vrc*1X1fjp>c7CwFNrXxk}@6wYlZ)ud=lt9+K4{iPQ#(PX`h#gFGtL z%f5|QiJwS}C9qTmZ7Fi?E(P`wxTz)<(b{I^R0CUSN&o&N#oAK+uErIu33Z+DS6#*1 zkZ*av)nY+Pb{CM4G0!&(YC_Y{PQ%&dYHHaZh4j2y$FC)6an`Rs4VscfBFQV`0R42F zO3K1ESO+PsaVYrujjo3ueZ|g?o~Y180Myf3XMulxz?$M73(`cq;M!klk?id`qSA>+ zi>xuWW>FkvRs^HTXxL4(qZ;fg`{DHq;W}`w#EtX*a5SW z9@mlBk?w|?rD^$n3qc|uTFAr({#JAOS%{=|ZB}yifGxgJKL`HW+=Xug_Y3-oHnXs$ z_4BrVV4#M~V;~&-|H+|H$D5vuFfX3^n>oXe!HnygK;3=tRSs3l|3=%-?nUa*Q_BV@ zYEece+C5_#$Y>>=j4zE@w!p=dj8kG$5TXcZ05kw0PNfu2yS!)~wpkbXb=5H5BRImR zMOAl6JjTJc(2N`%Q6QcvHNc0(L%vds#psVr7?fQ6P|E+o-g}2NweI`A&Z18Hq)XE! z3P=|MNN1^pB5hJaXn{$9gpRbJ)H$b$bfgm?paB9T5X1l>gff)?QW6XpAcTN`^Z+7N zns=l*dTM7)i$a{@&mF{eHef!iKDwb#KW`7%WirtsGT| zX7c22WBQ^YI6OUW^W`l*h|_|b*uY1k#ULQ@c#Q9gfOJ=v=nBIrnNJheGt?%UiGdEU{7a6y}twrNasa=)a>2J-ctN z+Sj+g3zz2lHN<5NMHy7{u=v&4TU%>=+`hocV$wQoFfxvvI{f*zoP}CS?%M&6upfLC zx{WOe`4=k1i~BLx(B_%ib9^-U_8i+u9Vgd-zG{A~yf>x1K~qPqXK@?>ta~*aYGyPZ zcJ(GJ_oS(oxM^R1b#!4TiAfn*>@g>TTV%CJNbwA&T_^~hNVpJ09n;MO<DsHs z3x3g-ePzl6YBO(8&b~3Pg3(e%zch}GzA#>D(pq*9NcJy)Ce_M*kR3$-c)z$+RbG)~ zyI``f05}f`Q^nE|C_i`N2zR`onPMIM)hCf*i175Pd@%VzziBH>J{*^lrU9Sq#UH2D zr{k1%Sz2kQ-NblSKrSk{Z#k)yERcuiITy=qIU?Tn^WDM`%tEAXPp1dA3{-+_^m`4n=Cxlk1tz>zT+z;a!FvCpi-s#htE=kxoLkEA zaPv*P;?i--%meaGjLWEcoLW&XjW?($tT`fL>)BFR--v7%wM5P>WNS=hy-3~-@z*Wt zngRHbx$;r>N`n>byk#oxGkf(=a4=ht86^%b-9Bqdo$h-BF$fy}ZHOX3Q3VHJYqL7pQ0m%En%I_G9kxG}YwN2bOoE$r>nz zoshSxuB_ZxuGo?~innh7SSQ`vo4!{&apGsf?9Zz)auu~lkEkWxoEP^bARizDy4vtF)KDa06*%DqY@Hq^TYHB3%ph%29Xk(6UBGtN?$s8hhUlUnmuE z6F+CC0a4}46@=(6C}L$0*Uk+|8kR+=yxb^^w15#A>3@QgXs%>G>h|#Z5Z8l1g4aVvST+p5k&xQJ>b3#z`0?bzqP8l$)qMG}=tZC5? zchYch-^B$Z#p!_2gUiXUv<@Te0pGmx(SXc3eaca*I*r$VbCoRQeC&StdA&5C>W%hk z48ds2jEbLgb5#TOZO3hTJDZ+srC*fV@XT43%a*y@YI2UhON_Wml@xe0$NF`VW)aCk zP&YLKI0C77-@zcdD^@m8+lx5UkU_rkeBm-zKN{>zApwb$-D$X+#q9&k7fN=nG}@f{ z#0b8sm}s$}P4n`~4UPI4KWuXR4y*;PE2FEBO4a<7RK||W?&j{MX$-lL*CF{%nh$nWMf?Gq zZtcwa3d0VRheB!-^fB2Fsvq5$c2R#^{F1VEGyC>cjQ{W_bF^^H;&U69A%~yz&CVLv z-;htNr%`5L&RaX0lmh_-V~zO1VmFezqPfc14=V1AR$Qc4Wjs9I=wbAhMs-8LApNh# z{Ke`ttB@RjBwr2^)EMIHDDXEzV6biq9SVL=KM6k zUtkkan7d>VF*x2enR+}I7Nn;}u9iG1z4+-^{3T4}t@npTy_0sL-dZVqDFs~Znfa}S zCbitf|uu>O|_!qSeD$hvSifFqr#==tv@}!5ZibKZuAyCNLs<)O?l*UmMoO zTUy%1cGg{2eM*47^T*}A!3)Lf>0ZoX=%z2XF(M*HV|9`;&eT8TeSO2)C=u75lIShN z)y)qBXsP8re@BMS|QNSP`ACCyd zrdUJrn7Trl(9`UeEq@Tx)!rRn2Ti@S`fD`s$=SjhLJpzf7%-=SKQ5c=*@VV z1G?s`lc^$HytpQA?ue0nxqY24hlQeR+gN^0WccDs`W*{WsiC+}1ODE%BC?+Bj>cG( z_kq`fUvl+RjTT!Fg|{BAwCoZWS0EO{LEA-{LXb43kcCyajmG3#u*No@y>s0es}-kK zUmKs1m)7Cz&C~R9J+H6DU#$xDe3tD&938)TBb(j_Y+Aubj8sg)Y_6vLgMoa(UyPDl z`|y5Pd=;?}_>C*9#>)U-XyD&)p#}JVV*z-|jqiYqM(TxY;kR}Jr|RRlA~lmF*zG{K zMpOZj%Yoi3tfB+~s}z_J(|#BR60!pc@bgL)fBWZ!$EmZP$8H5qPx$o6t3Gox8r$+( zg`0ub`od1C&Ogc;f!H=miGFU5kO@C?z7HnjLe`7EiY&J}nfJjiK5B4gtyBi9+9XoB}W83g#eWanNXf=Lcg;{l5%{TX2dEgg-^6i>*c2 zsl!8Zz#*ZlLfsILR}EZBNjQwy<>GwUTsP40B_Twd+(>Tr_oF;JS~q|Gr3_&wR5OMx z$QsEvPmb+!*phnsD;icf;~G!jka=^lDoFTNtQeC|km;8ixQ8Lj<5Df7m^sK1*F=)Z zfhJbwwnek@^Wn*{sMye;$?nO;wNwf~gAdxdZsdVuh1CikG>Q55%(T<(ms#ofISr&$ zZHQ#116razOgP((){`zdn1s-I`m{q?ViWGV3DSFHTdMIEPmI85v^LK`1_edw=%ovM zxtgzXx>R3d{7Gz4?;T%kLHZb5=)UskYyVM0T2FZTc7G$IajgC~oWTSmEO({35MQTV zfQhOd29=DBXE(l^dG{>2j!0daaBB$Kf8OmH61Dj@$3%etN)5;cP~!ug=uUkp+8~ep zmKN!67h1i!a$TDvIb|ju*V~}(eY*iyNY&o}^OW#_aPCrzYjLH)JG^W_AhhUH_LDC! zjY?$}V%nQAuF8CHd-}2uw?_Xxj_Z^Ps;nP2L=e;$*aSa)4P5O8BXC?lZwp?^sWhGB zaU#Xt!e&`ELAo=VMp5{zP=_~W{$~doxH|T`yORC2Q6SUmUJI^Vk^9Ep@!=4Nos>8j zQKY9CNY~25AYp$jbv}zIpzl6L=U{iFzFS-&~c(1Rs zbs62>bQ~AENZDK%?T}cCy#@_Z?s%%X#NG8tqk3i#f-;a?KJtN%Fl}u`d1h^GbwyQZ zfjdA5y=8KSgT2wJ-GHT&@~{n|`062|7acO0Oeh_JW2Dmv-%doT94fP{!-EQ@u3k|Z z*AZtX8zS%c^m6O|Xbc;y!POjiqV3D4jm1pq@22S)N_L|stM8iT+TGrwP*Vwn5j=I9 z7+)ISHF&%RNA~bVCeR!A0=@#e=MEF!Bg_vkt4o&Bg#H*DtYSoa2F2s6rQVXn5lr3+ z+&Hi}?fZNMX9Sz(eKClBFlwOPHANuvMTJeFKCMkbpWPZOyW^7*zr5v;UPe-~I3-+q ziQOnZtAZ!U{BD+szF{jjWCy>2Q>s|8;AmwDywr%P>v4g=$nvFP`04hCoqolqgwt|7 zYHY;Sk^@{Sk&)i2?P~kf_n=%QKIwOV{Kzi+iC++KhnD}Y+XxKm#~RpBP6=jr zF7!PrNRITjFs5_VrX>1H{=0dFF_N^tfMi^SxrK?zj4mVHnDW4SE5)f*5^@j)Pld!?j~vBG_?C+0Kle{`M1=*^Iq;OG%A* zO$-MLg?74eS1|uJeMfcKvAn16GNs@6{Q{)ZA)IpM?}>zEM#wx0ThL4o zZ_Z{3Ql59Cw~f%F2L6tOozUfAF8OUrF0kjUZDB;S4hSeP@l?N(JS2Lsll}%iU$+V9 z&x1xK*6ddA22V!-;gSqb%NI;fl zgAoqv45WNJ3xe3qPXfEW;n5*6bYm8s!f_fS%hsv~UT{5tr$xh+23(U?t3htE-r)KJ;%0 zY+M(X38F2C#t(fStr<1iL8_0Ti)TCd zR)5CU2&`xb^JX4YRi!8uJ<2T0AI^pF-2i19gx_yZZPa`)rstsc$>r_z+Kd9%FB#vT zX2(Y`3cVW3jPAMAx z>v5pWg5*B zPQTdWFokAAgg@t?=z=CN)b*Pfl7J;185|L**01mMz$yz^2P&s6?yq^Y=$6$xhaScj zs%j-ynta4j@V-gppg?Z-WLl<9?aS?7f)pa7E4kVfgLf&m92sJn$kxYA0R26 zH7qz?%^}M#q0=&p(4H-kt3|jCh?Z7eS&QZtluyeKd5=>R!Kkrr<>J@!sA81v#*~)a z*y<0dGg8;gdcT`9qeUp*rO8)VuAo~}s(!rNU;RKP;JtbNk3YZpQLf1T7FG%gGk!8rh(jQ%(Z%x!I06xkK%fRz*H`;MtGUD! zK@P6)CK)VfCu#@g6CAcM@dB&Q@$nVU@reU(|2A{946z27@P!OD4r2{mW3R`ww@|p^ z$e=07b`qex`HzRijtxqc4Kmw-&0b?Rhujlf188_67THw5f!}4^kx|*7Q63EJN;8{K zs~emZz1RzqQJO)3zkb7}Zg%O*?2`DW<%RG-3^fL|KX?^Pq}7Nugy=t$cJ@kBxG-mt zkRS5u4^fD74C}Fa>!$7H@R8@;NrC||MO#lR!yB(m(J+8 zF4q!gywG+Ci^pnqT)nKXlgByl$F5{fFL(cnND;f6c<_j3#By*^g2Ms&wVm)f&4OmM zP$x)NXSIl|{!rfD+t5hN*vd;8zgMPJl>LDY(ije!Yz050^M$rn<61P92tsB4_+$lq zRi7e^3SOZOl9hFYxOXdDN9Z;ceve&{a!1Nl-AH*h$EmmEr;iX*PatO9w8A=5^GuMq z^&g&*{1w)@YOZ>(w~Lyi$%^h|2vExvD!UNX@P%bfvMrwN09dyQ=pV!3Zez^-dnYR% zIKrgM>NV>NB)kh%rt3BRM#v~u$m=Rhwgqj$G8`&68r0%P4lVS@;o<)mj+CPDEpOS! zdsimm?od15h@9;6Uxgc`uT@VFe=SH7tfDkoyt7F~zpoRsYiZbzmP<^bh49aVbD85J zrc3wBxVN?~TfY?Tg2-?HZ&H*kP^&s+*-UIcz?+!IV#BRphC_~a%U6d}KBVOM3@94Q znoi(6b&%X8ycAuidt7;jP>-k@RLB~MoqBsc%`tC@C2->Nq`Y|qTCl($Bx(}w;MLiS zzo!$H^u>##9+8r9zUz06a}NJ#;`7!dAqU-d@t5PEla{x`n{L+-Zk7<`Q-pD0gEtck z>n8dYn=D&5i~r-?}Daw z){CtfX5)OiEk+I-9wFdw{A)F@-?>nZ1a`6xgm~W$8jRm7LVEe5=FF+@CyTd8d{(z{ z`ciG8tlAHwiFKxMrS2NzTD(r*14q;1FNvLW`{AajT57OlWwxfEbFXqhfBa_Q%hNLT z_R7@+XtLJa%Ix)@=K9P3Oc4gG0G(+?>Z&IE_b&Pz><3H6d%=nX0}q4^JNpeMIj%dq zth{&ZCI`9*Z=p;_Qx0EqdN*y4#W>EYo5UeXj&bl}b)$iSIblS!6e9HLXI~4yw?<7h z&YE81wul^d*`vTu=9W%Fu4uK7`QIxC`kud;f-&tQ(!(@>Zl?VX-L4k2Q9K`~TNXof zc-2(Hv?OQ-vKy`X0>^Ph;dT-?u~G$TB=*&ET^*gR04~4|nW>!r_pv4Kf6mBr&%`aQ zh^j+vwfEoKk7?dF{;KnzKivK6p#Q0}iHXgebne~zf76WZ7GW;;0^Zn{<-fgSS1l2wT!bh3r&a`Ne6lKY;hmUAyl`s zGD#v_rp@y*34&lL9d#eh&?J8TzBaRA~YIBddJC<^>*$n z_n!z^xg_NT5L7OqJC&u;=aYoY)9Gk2MRWds$D72d#*+F4M^6(z^K5OEG%=$YFf2sSbul5Y>_} zi|&i72ay_7`Q&-Ix}XLlE3-!3o988d|~m`ErlGX}C9<4O*~7k6wD z$zhfri#*)C$afVHGrCCklfqjVr@1_+3K+HpAgJiQFFs>k8=(AS@bn9PeoGP7XtQ{S zCS>0X{zk|hljh5;nIiJ>MV;0Xem+pn>9wl_gj}u_hiQA)sy^vqcU!vi7|N;CWv@B(Tb1lIX0JKH zKFD7tCdLtd`0)ijW-!O~UD6L!w}>}|wzR4w?GFjh-~zv%P+@&B2iq-w z{c|u_!@E0W0}(cD!O|s#V=f)NXe(LLcMfq(yZ(}BWdrO~{ft$i@pfkmU1E9%O;lom80 zrDP*0`U{Z@%A3ePKWzQmf3F1lr*7-d7Jq$~VeA;?aP@RRe*7KEZ@|U}pg9CktSf)r zDgnKJxHz2vcsj=%KLnGuqdEvIHu+#DPjAl}Hz?VLp+;*4tPN(-+b3pwfbjOwKD9Nz z_CeP2aUB#fwLT7-HYn0V?Eo+;Hi@dvS!L)wM6DjhlqpY(^N!r=mbX!X$46xb0!yTx zU}VrFy-1g2`LCz?fAw0$84dmP(J7?!`~#D-ZzTBMX5NwDyKxJ^x7VCa`5sG4PDW!b z7AZ`qj(lHO>WpVlY_@3R4sV^)iA2TcIwxbR@IZ2xjC@jJK>^06cm`nlrp^FlU-p~F zW7O>0PCuyE%=~x8%Sj>32_+9M#Rx56qGOThpq;DWaORitTP?{a(dP(pmmi(YDZst+ zlnQ6}T0HV$?!$rZ#p02YA)(x)o9PdV;d8|9OrX|D8w6^yPt(6+psj0haV;t8qxyf3|175%R0 z)@LJN8x1euTTc^fnCAG*da&wjg^c%l(aM z)mBPbez;{=Qm4Ngb5uUf8PGV?=&`iz!0dERgaysHjcq?*;|8IF!djx`cPM`>wG{%v zP(_Ycay?dAb#SKClKN*HOVG|u_JYW*5AKy`iYuJP|NN($ z?4Q1kxYFTanJG}1GLkBOZ{O+)C2Pb;yRl9zU~jJ9qPNb~G}aCr!Kf8v!Cb0wex)~) z@)SmS9*ac70C`jbGvho`NgbbUE9t|7%)%{T;`y0WD7*A-aHXKBhx;My2j( zLHe-ADH~pQ9W7#uN8YaW!N^4i)=H)k4YoY$`~cjHI@ka|qEe}U{!fc;m5SIaBv%v% zqw*V`7ta$@VMQwIp#L(c_NMn`dYrpRZQ>p^T+6Rf5+gBX6$a%0-ZqH0AzPcMb7Kp2 z4&xiEO%5Z5p0=$b+4R)yeWxB+-6$1Q4V zd(@xj8nbxOs)*v!5%T(F!(CmJ#8k~;Ny^gVw-a-*gGWUPr9+!HqJfPOeT-b^;R7+Z z(!GWl-CJ`nv(HDX1|^q{RJgv6Ukf+2F5N;}eLJzGvwpB6yVU|9+YRWIqzXsFbP+SV z{f{rlo+-wlJpn(}GIEFG@bTM;iKSoWkB|%dw<`_zCF2>R-%ilHGW<&zvZRWKm(pqi z;+h>%*8rw&)eig!;7B$v{~W&-;6dLXECt}Xz=3Y_%^4l%s+lxqAnn*gbkU7sqqwGP zcEPy@R_UZr$9|7{rHD*ez+kXd-fK`?E4vLzTa*M@2c>o$Dzc!5+D(B6mOJs0J5jI~ zvxc;8PUFJJviAnmW$w&x3{t2T>#3?d?+?8@jnWowy{-^S7ICj8$x-yFZD`;G0Qsj_#(y55 z%J%=|KW@eUlP};eT1l6#Jd@B3+lb^n?1~a8dojV>%u^faIo|qqBGvp1b01JD@9d8CI5Q8aRW3$IT>AS9FShjVz8~)RO`0GC&j|gkg*W5XZ zIkXhVcd&WO>&N;(XtSG8s4yxL>A_+wZgDuD-Bo6}kN z0RBkqH2Ktp$;}EJx`vr7T~OhfSE$dv z%8Zs|N`hdTA(#CK=;T@^1Y-A$*ivbmcI}U3BJ?*JG{>zG)(^2%=hB9Q9|?QU2E$L* z8MW5lf6`L%{YOu^BkfNeV0b=APqnvHE>?4GoRQ#(48%!U2F%;D1^BN2aYGv+dm;LC z+?qI_5vL77!L}e{P!`s)8paSi)z`iS1*_5S_m*N#VE{q43U)(q=E3Cy!KqGer59Zz z0H3^sX<8d6%9BxCCkU|1&jf;?`mBC6`;U9>?|+N!_gz)toI5+w((rkM8erV+-6L*B z64y%Bbxu7No%o{>wOV|CzTx<%p_`tSK$M8RfIw!5eZb7+a^a&(ObNH=xMBd2`o;sH zft9&Fsm#oa`Y;S-HyXPyP&neg*s9_Qk;-FkgNU&*j2ZPkxBa;<-meG(3HroHee0gQ ztwSIOT05n6SS$!Uduw4QWLz;|NzGKhbvN*74$5BW)UKumtkK19G+AFBV}z0Rvd)zW z5dC;xzgqUW2N?XvjhwpW2THcuk8oDMFC&uzGn3zsUrZvE-P&1q&mh6Zif0hAax1C= zm`GjF2Xb!ffsBMs+lAG0GGcJkDoKOf%`{l#AD_g_QYsu1z8h|<)|(A+aaLvlZxocBK;IQA#A z+%&P?bXF$xl1O=d0kFYyWoy}J!4hxKg^&Mi+*g?v25}7yPy6Bh(Me{D8nZx5>ae?Z zAmVGv9;aTLwgOj3UBp!t#)qT|}*WYSpfyqySu<9OxwVjl35+FTOp70^tM z3S8a)x>tA`5>H~YrVgV{g^_@tTR<@woj@OYiA-KunDOC4jt7y@_>D!;|90ey|2pu$ zUh4niAFiqhf&qsj9V&8x3MTf>)W|8WkwzEiW0pON0yc-ic z5MiXK)#_CSx38)+y{0=(puQrN>3HF~5i^6irx++|;WzVnM3paRfi2=wr_9En0lT`m z!~Kpd)H$ewc2;e^=4Lf|vxO|5F{Y@!6C!Gr#+7#$fw5M&)-avMOypnIvGvj zwpEW^Mi%QBRmnlt2g?XUcBGLi31aUv{#gWRxDg&FznzqNyjr+IO#s55MIF-@i)YkQ zG#uWcJ4HXY*N4bgTZc|6+mz#1bwoGkx=Ua3JNSYMtbzeZVQ5x$W)~W6KQlk@+CIEc zA}Mnn3JA z0a59d7eHi$OBmkH)qD4;=u5In){`=`S2k^>G;NVA zA#%R(iQ1a4x_I(!ap0H?R|rm`_AI`VVES- z5q35HYT3p%tO(?}nPCTWd5S{Us+yJezw!fVC ze$X?GWYiiUUqJ~Oo@3o)-9ThGTA~f?1(>z)tbOB0X*jde@B6~XjTYhgY9~$SI)UhS zZ0}<9=!1Rp3sLkiaGws>c}5DMQ3J!FAOZpy4GXIfU1{s3we&Z>K}k!2SIZUclHSZ* z|3RdN1qttpb<27)N#3btfkV`}WZ(~$#ezj3ysaYvB~9q<3U(SY7&F(h0}_fipz=k1vi|Bvv1fiR(|6pvm+&!4_r(^XX7Nbq zx3>@rBQVF&TpjQd^gAC{!dz*)EZ0HFVI@)hQjBwl3ArPrCU1FZ?dW>R;+HQzy}ZL^ z*1mq*!SAeL?!JjWbM6x}oBfqV*ouzc{ee(P-Aa!x>+da-C2bO*i#xk(r=ix7OA@;# z`Ps(S$OVTw=IZ*yMPkYNkoH=JicD(BAfwj3j5F0N3Dch{593~Ov;1!dexTD5-C?@W zqSsoe7Hz207?%+o_c0=TH!gE9{Lv$IubsFEzoRRYM}Pj$IKA9v8t*1K#A*V4mv}$< zUiCTgWa+?$pKI?X{o?3h>e`fKd$LFh{^rL^j$LYJtfc|)ziqLZ-%|VhY02mxqLjyr zmx{5g)ur{Q45|YVzHDhDI;=b6hx0$WvDluzq?tiDnVLinO74u;r{YwIEo!ji!-&W=qF4>R!E)lIGSqRs?|M$#RAg!lCEaA@3>UL4*Z2jn)$SgL}<05BKWU>g9etQG?UM#cfq zb#|vyTM})u@mc5es%u9g&7A@!Xey3lgJ5k@tGzfb!J!I=UvnkmeXz+0JWfi+Ik@k- zqQZ)J(Cuc8Y%i6U3TzQXON=ESTU zjHlVe%$F^qu*aj!{EZfCb8L%n$)}x}D%mNQid)GjJ@JLFD(E@|&hz zz;By{5~Jx_*$9V8vsq0XV+QxgUM9>V`P6fBNb+TOld~O#C0WLkuFiVe;RyvDX(MD~ z)GdxD9v8=YH|WL1YqCJ1NF%FqZ#GD@u|L2IaWnWsY1B@?=ZroKMRCxSbQ-qy87(y#K|=mVcezf2E1TEMQ5(JRKt(z;2+& z)<{&oE;@=MnV7|YsEg+rer*~tNV4G@lDw+Q1$GCwB`jiETVKD!Q%z4?ys+@j->HHU zrelZtBF&PuE;aDt_v+16dh%}GvPcu&`6DHC8l0>(n|#^hsqoEQJ|XL|Bs?78U?D;i z6VYfiFENn=(tWuRIwxF3oEu*x2XR5LNM(qi4Op-{0s@P$u(MR}X5$f3*8}>ms(LCP z{?K_D212?g0}x#D>>E1DuQ#gOb(S5eYpZoDJW`~YZ?g?{h0P9FAnl>RxRwjBmiPp3*6oE@`bcC@Rq?lE{ZjhUJHdg_Jp7 z&y`NKorV;=mOwaOhxIkAUAB5AaV0{nKX{z`KSYZZ^LqL!Pf(Nq4beB~hzJGRG?mvQmD znFyub_^jgUlCgeg8Prb8mBhsilPy6z9bNGBs#~Sv22^f0)pY;~GT4mrr&<9onPp2= zS%j+S-A{{L$eQ)q*8wVN2`LUZZ!$C<+ZyoVEdaA|Y~(7inE&@jNojy*rw3hq6=jHv z?>C_CGz8&yWp`udVQh9c;Psgu05WK<4jayu!Va8oL!z?}+QXE2yjj2_6fzG4z+^0y zei;OaZ{qm2-lHk)d=x6=Z#wTyjq7VYTZ3Pbqj4i?EVoa`>&5+4U9G?Qjvf_e?t1Pc z4@oN>{y?WTG(M8y&BYW0*eQk{-SnXT2z2bUJ=F-bGAM@B1+_H><2E4FzJe%^9Xm#U zJE6G0J`OZlCrY`SXn@7__iF?F)1^I|a*PauYc%bQwp>=gM-vsvwZxY=$i4YXg_eIrLsPl;6T*;63+9e5iezG{KBASq z&c5pT(X@(^GndPRwJZaQHsBKfR;bCy1F3j&I5>(1#E)L`_t+3tMJdj_8V#K4oKdog z>NIaSH{Bg^R9(>8@yg={sk8)B?sn=KpxJ9?UN#Uur)L`CIV@ly1PNC`e;LAQp3g zG7}J1G2SI6p-Z|IMr)>PfufD-*Oj6U3Ef^9m2324wMh99=lXN$>NeoNReKN{py&gs zUNHBZce`!LbuWGTNJTZmHr_y1Nz#oz-l?(jPP$W&ED%_&oF%-44=7%)pNP=9hUUKk zLYpJMzaOjnVlh2wtaCgy4udb0OLMM%%W?q9o~D8h^#w@ZLQ7Z2+4cwG2{#v|Q-lVT&Q%;xxvHv=RbS08LPG`W6`+?r*Agkj zO5H|6pLXw~3TLt_TT88fA7EH%%@RJ$4=kMJFm&XtlI4cRY1M*!3T*%L{wm4C;|*PD z;z7k4g`N&Yg*n3xHCFG)LDy|rAOTThJBP6&v~9R7>1+@eBRg~mqbrrGKu2BQc1vwP zd`L0$^Xr1k6Y9Dr88QlJd{I~qZJViTKSx)4Y=M29X<0VxG_szM4ToCx>LVO8>UA)k)mb9ls6hE2phFx~) zNvBh%$EtBHRa1%S$KsRxz%&A@9_XS1IiTW!gy(51&YFSlWs{ZCwMvAzXOHj=cH&p(uLii zzE+v8nMg_{ks%J1a{U2aFmI5qC&He#z&?x89Xq}lMgaTPp!lnRf#@N}A!KC6Q=5gO zhCQKxwP|yp+w!TT13S(Jj^h;Iq4P%QSrSC-;8b6x1`b4()j=x%1d7Wg$J|eTeBLi< z>3;AJIYmF-`YS=zR@C<^Y%+D}(*EQrE*_uO$ak_hdN~HN5I;6D$ew2bT z@h62_k>RUlKe$1x*nLuYzf2?Cg->aJsNO^6#r6ldLHTu(ipwL-YdNo^uNCjlmKQYDLM+W5n5a3MbSF?M_N7ypj{akVkLu$uAPFNFm%KV_m(UdZxnPC7 z9SBStNKq{|j+T{mU6dv3|1cb=^xJzrYk=P+pgq%!IVP6wc7hk(KL&n8DnhE$SL44% zywoufT@3JwU+*~fd;9*z(;d)`)Y|glg7v83-`S@fur+s9_t%Ajg;!Z3V}oNURKh04 z(8akHC}-oS4C3uUy&nB1&)d7>XfUpO@zVbI-@&HalMx~9kLI;`|MZL_e$fODY3(U z_dxW3FES!7ta8O40@TeaqmTZVU(_w~O~s;R4Zn;p^-ug}QWEXSw*HqKZIN^wqqfaM z^K>A=9%_lr)+|Cblq#R*pD-Q*XvLb4CR)tJC3 zq}Y#&H9Au*ow^=IVG%MivJNtExKDA_?2+zHY`g%#CB3gB2k^2=-cFQ>M0E?#IYt-s zk0=1R;{x3#T=J`ZTUPjRC{SCXJ7DS)IJ~NjhI{`+`s)t=w5`1WiNB_UuU_`CmFdI$ z*sHcQq=IVL6O#N;P;YvpuX3X1FZmLYN>nL(ik_p)sE@6*ZC;sKlRxIh;+(T`N6ecp zsCwX1QW^>7=u9{&ieMGfQT`06t|c_4-j7Frhn+hn^D@Ti#6pkRJHE?RZ^OwyfbBtBVhguY%2uxYHIW@Re&1z!6Usbu@pG$Tnq zP=}jqkDBzdkrm?mQ2le|l8N9gWRmo&mP_WIYDJgN8v)%oXlMy;Dis26_3yPm8LVk1%tfNXUwe`A_tF9OK&Q?-j2BLf2l4=@VrVz zk7~s;PcHQFLc)HTWSRFFY`L z8Qq5_3mO{=xmpawCVw80$Hxt_8S>7j*`D5&@z~B^r+J|egAN_T z0yIm%orqP-M={F#(tpYy$`?|(NAbt0<7mQ2=!V=XM}7My3N&JMp7OkZU^cb(`eZg<@~{z)aLnz4U%t zqR7{#C8(tF6-|1Jm^zPD>~NyaZ5OV^c?W;6`hY?63!nyZsa5DwM|{f z`F3Kv_$X|Kli@A-V`Ad*96od%BU?c#m8k#FlVcL!`NZk!uYxX$kw1Ss;jl#AkJ@hD z4~vXz2v0HZIbOBvIIerfna!>IbRfH^xZ@L@IbGgReu$by79V=fP$YlV;WfB-9+{Uc za98btZ2Hf5l*;-(xPrPNXq|qg=i7auHNtczv{u4lH?FRo*3NhUY3zqS#GK2rL2;-_Z=2U3f!J07YHd%hC($Bl#9 zpZh;iL_U_g$c^4GWKpiJ?YzkNcH(XISlqW0}y_Bz7>zeGNE+DKj7G5w5Wbrsx!jDYMwsKJ2Vle@OpNW_KcWyJqIuLCt z{$wSKSb@Cw-GZotFUNXvcCUrszT56?-jHnB&pOMxsKuw@M^_t7)}VhoF{_|A1m07l+HT{jxg%B=7nYup4+X2)r3rGLr(?vdn&ticd1Abkpk6X*ZYS z4-iZD%K>)pfzE2dg%;gPD6TMCX}EIh_^R`Dk}eE}LcYa+ITmsl4gM+p3N4!hg-r(h zIzXzhi1gz=7%+{v(U|M%FaL3?QNGqdE`<1Q7M!9sOStf!=jE;G+X>~WT3x@C7skQh z@g!~J@x$UWJ*v3FRtK5;ozBk2Xn0ov2c`iCzij1!5tG3~11^LceYSu|wue(WHSQGsS^EiaeJPkX3ovBEl4NpiN=!OxOTdCw}h#a>`K z)-0GT>C7Mlj98u`77r51n*M#dYK1s>7)SdCFW$$X$j2#J2lBq(&JrX@5Aihfamnp| zhN@+St=_~*AQ;#GW@KX8Dd+kqsT|`;W@ZHMAq-0+rV6;2P#}?|TQSAp7M2!db zFFrnI!hRaEvuu+?n)xV@RE1or2-Q8EFt(`M8%sw@Uo@iTq#(^(XShjjU`0jv)*xTS zJyy)DQc5N$9V!Ure!DRN8U7pIB zxb9`53%*d6${WqAaEV*B<%wOb(3e;`sp{}_I0|HD(H-W0E*0oF8F`oP6$JXwoQsS%MvDzCEG=JcXp7ZoMk)OClO%JpEc1o z`?hMDZ1^lVA@-;Z&GY-$1OE?Rk}i?fnq;A`fh;AL%v2R$h{K9ZfC5_fHs+#FQJb&E zuaM{4#fu&#i=NxJ)oM*`h9=jv5jIGq=U)`(t@BN^g3!n(FDXK zbWlJ7geDLIg231)p^4H00W?4$2}KAHijh&8Qi34_qzf222nwh)@8irn@0oS(`#=Bx zJ!{?jzvsL@Yq4Ohr|c)2y?=XW@9*#P#TDfAlX*9g?q>akI!yF2Zy4J4>kg^lZublR zAY{}>x2|ME2cdlS!=n&4^HfdYM2CLl&o+;MWoyCnM+KiBX*>!_K1U-E0%l@kGk}8# zWYAFLH38+pn~dy-LT}a*L^uHiU!W6Bmu7mA>p;MI3xN!*Y-1@HK#7o%iT(XHQo)Lm z^e_K5#V0uRbrwcz^3N@>yyAV8^K`511Oe({-lqvqz z*ToO$o7hII+5(yJZ7TL;8824oyR9s|57M#yVMV69mxXwFs-hU4q*cRK_jPxyUG^TW!>%Mw~q_D#+qxB0RIVUYEk~u38zjD_1bc!#i zI6gI21>nFgGIffzQbFDvD@V6BynAR3L6Jnsh;5^OFuA}g!W9nq8h$bk6?EB-e+{&i z_*Nd^5g@iS%Ft4ek{PLVKC`+-&D$AGtA7)-AqHXzp)*xA4`1V9oKdwRX5HOWPkT`; z`3b7&J!el11I4$G!3py1lnbz~{T8N_2IAqF+90_j zv+~zcU|=la?qI>3o>Aylj)!kN*I2%0d%61~!T@u>$GbLeG+A z^^z^##7F-bh~639vuyN@JT!V>VoPL88}&wf^x?{fO>_pZ_PMw)MNG@Z% zty>EU)7ubG4eV;WgTeZ8n9vI z+X3y&Vpt5&4@S5s)x+KCV8non7g>p3m@JP9(z{ToEKkB_8D^pKSd)74WvI+@Xp1k- zxH|l72hU;U3sqRagGJDOcfn5+CJKM)x!Df7SRlD49#+c@RZ}XBOIfX<<0sZ8Hs53_ z#XlRuyC}ASdSh$BCB1M~d>Eq1qXS{cu5)z^xoLjnQ>}-$6^P32wAU>Wir^!SRzk_N z$htBF+7ebb{hW)k`J}5jnA~-|_#Z?6&f?WMT`#R5$++qcrFkif&@UhRKV&klbru&* z)!`ReUkxoCa%tDhiUnX$5qce&)e6AZfyYD)|k#LRA;d7aJ>T;R*#?lU2<4NA-G_H zG+np+19=rOtPj!dYgi|IRLn!94Tq()G9l`lKJ zz%Vp^PQ;4g#Z|<4`4vq&9*mk^6Wi!A18|n5#5nu}h|Z0}B}MaPtq#k@lxtsFo4Oz6mDDY4O45lvqVZtB zu37ki%|)Vc+GQ7%X`xQ$%wR?_{(eIeOUsvyYH7Ek5__tQ{lUU(?vNA&8t#tz1cj+{ zgQmM+xJcMaxcDg%u;ajo+Ju%Niot|LhYPN4MTx4cWXw&lRr)ZsWRWseXp1AZQ}p# z{y^_-kC5|;cW~&h%)U`)+hu-t#(cZc!W6!d4dj&rX~9{3e1W~N=?reoK48PQ{>m49 zlhXdx!K#OHo_)XWu(_F69LbjzP!&)n$rPyg?!URu^7aMo*kZWXiX91ZsPfQCsgMx0HwYOTBp(!1_2iRByME#6fiC?*Ik5pN0MlWr zD@0k*cTo_~Zo`FxV+gvhn3}lKy@DcGck^d~7^Tc0DqG&wPS3{Q{1reZHbtbDI$&gIJ?LmhC(~A za~yn8o8d^9y9^(kF5^(EcCG!PJnEe7)Us||0+`{3PSQp; z>b_;sV*s!9=2OFnCmzFB4!;2StY1QIZe9KTaR86?!_t@a=XpUljeZ0$v;47-t9OiN zKS%uZzgCR>QQH@G@~7;4O9m=`V%|6%zj)8)wjFdf0eyS7nW`J;`~gd5*4G_BtTH9V zk228~#<(N$Z6ln|8+As4h`BJ&Tn2uqtH0LIpt1|^KZtOw?An)+Idwr-<<5+8TA z=%KAy3f*dkWo2m<-z|i)jxKZ4z6lE~p~42U&H0DCSEv6m1KJ_`$+6GZW^KV~q2BAj zv?hOFz6G|*`lINch5VD3F5VW7`q7m%)=vB=r|$BqnA(Ls?9K$Z^wGX2&4^itqge!& z-{EK`daw`6WBSIhX@%9nP$V4sO~Z$TfdRV*IJ_k)r90E;-1MeXYIjY&_A%+(Ra)gX z^i{Y$6AA~eg`yqX)0Js)R^9`Y`o8zpzMWaYszYQ#WkOuW6v5WZ33>hF!K`OhXVT(l zC3sqgWQetp>?K_lT>U6FPasy{^!Ry@<~R&(3?)x&K1UNj-{5@$eRCx@i& z3TBwgnmQJOWJna3VluWWicrmk>F|SvP)LXb6sEf}Sk`h(Wv0Q5Rqh#Dx!1(Ui4!jR ze3-B-ri!qH5B6sIxU5uJ(R%7*>VtvXTKdT{Sj_e0QsbV51B!VCnnSLw zH^&{G1()eZNmPY4eGZpP=vYZ3J;Wur5Y8*@Q>nb$LERN-b#3PU=YtpDdb%m1N1`7d8g^kiH%aMF z_m}k-x!5s&3VSVo_@IwocE(%wEh`&Wdr@_mY85ok92+dRN`*2)t^p z+j>9=qHdOCI=+nd*jNKKIng>Dt?=|(G%7r+ceW6OB@!^87}87|-tEo6bm_0J*XodY zxYQDfTUAL_+WmPF?)xxo*-b}jLRElrJvP&;R>Zy*4H1*Ci|Bzv(J72w)cTlz3llqb z#Ekq@>|O98HrGhn`r2gsYu2$ny@$6MeqVP;Z`QqDkAQHrYrgKNS!wFeeOn!>@AUq2 zWQDnxF(BFdy2Dy~b}G1ZzGf-uw2(<0V1;sc&A1ZKig&F7Y3+0Ms`|3+O`P#hk&Ro) zCEv8*TL9cJbg@0@#}CVZG4klr*B#gX{v;$ld!)W%;)VWG#PQR?n@0VT96)hn)bro| z`OSCxjo*E=3A%JgVkyFYz)9wk`^#b!wMUzx74AqhPZT@ir4IEu0J&QC=2Q))QT|*2 zuSjnBjrfRAKP{Mv4O-4CW+H( z@CYX$7ARpYdtI=;sKl_paE+4r^n`ULN03_i__gq**xp={01kpcP0a z-u%kD$kb*9=_0j-`kcTE7!b!cA1!+QWOZjL&VT0MNAf?UhSmOHH3)*CQ{zJatOv4)*jd?EDGF!{BTyE7wu zvXA9^RYlJj9%6^YSqcv_3r-Ej5X#?NkOg_xN-0R(BdakSR;xV$fHi_N1X}F)Yx~`? zpThb7hikXrrr2mnQGA=oYa`o3v))i7Y#ME5h|?@yG*qp^BLxz412vpXP zK-F93`-Ac=+i=g@&L25-rZZ8(zgc+e8DSc}3ucEjMGSn1UuedS%@7wzC0vbBnk+-t ztI%*LPd_i+CA=o={EPwGZu$yLR=@>QR4Aq$R(FA~J_UyJ;+v2_(jz4>Hq+OpHf5eb ziy@62KBEAdcTG@mRaF5@nF>Lt2Gn>CeJ9eAo01WxDzo~yc5|pL<6PW{CR18W-2Ugg z6n!`ax<+}`9>dazpjNlx3qE*!WCC8*1&}LNwnj!?lUuwOW;ugvc2u2l?9e>kFz}oW zn$%Q^ZNs+z?JoTwxhQ8kQx)EIt*Keh_h8xmMIp`?9j5SH+DHHW`IhZPJedL{V1q$C z;SNoE)p5ohhQ1vHdjZRKj?>rS1f5>VlMZ&vD36LwcnA}8^dGIRXE?a0@JWErkB-}! zY|gV5-P8Aa%1o{EajchZ*h0bBPY&w*w3m!KaauBvL3IE~t3Ror&6be$8cU6HJ9|Jg zo9K5*)-;4Ro^`?f#C%g{vy7w+m^8P@$Et}xN`!--9|Z$jpJdp9OHD*F;M0BUcaLu8 zSO^G2rg%@yqoveHg-qtDdIS8r`P93C-dKu9EU?v?L88dZ%K)OyYfVj1xP`YnqspVS zBj-uPnpv{-leJqy)FQgbxwH|`!3&Cg*Ip$}$5{j#YKy78NW_@m3iNlqt*HIFI7%As zc|gdyXQI)~Ux^1bz2XWKZ&U)(E#A46QE z(ckD6JCqhJ&S7eRl)Lz`gmn3{E5~iGjBTy@51y9mhzhgf-3ahPoa_WX&b|8Tr(8?V z{g|#@ZzfsUyKMXP!%h$x-E@Ya@o53fDntUUIq8E2Z}jkb?P>TmAg8+t?wt|Xd1BsV zcUj-`F|8yH(=($MI|9lCrxld~A3LskN+6=gn+>ATd0ZX#$jbr^s@v4B`&#lGM2?zP z^*2J)?~<79;gY+}p0rP9_T<-zzqn7HN;e^(YH#GFA6UJIOj<=B6Y3tFJH@%vU}ej8 znzO2$?<%e`fQ66F$zZ|)*a|9PAq_rTyAr(RjRd<@q_CizQsrz7KS1P9&JAkeZcVw! z=y?Ln1!O9!`G!wcU$lb)Dm8Gon8fw{M~W1PlOeY2)VoqZH?z)y$NxO&Plo* zW*R_xb=1jmO?0%ne+c`|5HG6^A^}@h@DY8_M<6AD+`rYDOi+KC?I2T#xu6;j$fj(} zYRwN9tnb-QYC@vySp-fd4+*m?Ck=CI+KQTNW3sETF6AP8Bg{~To7Ib@390LJ(ahhb z4!;kTd#>SjUe`wrnSG?DSLBwgqgvFuC=c`M2X|8n9P=Pe(RCaidjbs-9~MjE@DSP^ zDuZBBlS4*tmDSL*&H;@QUM>!1yA;e$!nNle163h9cT%3%tWz>di#4=#i+zgPKsn6a z5h~*)O?U*_jsOAnpkq35ox4f@POK8dKYZ-&Pm^8Q)?as|S2=8mVZ1jE7K?3R`nHV# zA$i?diRpNU$f3x|;u5S@bU$>%LU^KF8(ol{?({M4{bVb;9NdMa*6w|4aC)XM5`Wy08+rP1Y} z&<1^{u|KWk^ZgE2#I8T2^S+FK0?6^ArC`BzE5c zmC;x5xuz(4;`QRS?m#mSmRz9mxXc2$4EvPY;AJ$JXEab)r<|uhO~2Uz=c8!H)TblF z3I^nh<=Uu>#KyT%PDV%d*s^3T);g`fakMS-G)H2dR|`k9qhuuxx}C7eL+8DED3+!h z)clLTZmOGMQO7vKCQGKNI*!UfAHgXrL*i_Ez_6Xwu)gcw99h}^J>5Nrmzz3BqU@BOCGEUL7^3#b&@8#K6ao z><>^b5UQ^0r5~aquC|&}XU7ga8pYtNTg5a3xx}`OmZ|C;L4C8a zv&CG4Rd@ssxoxMkfi|CJ7g2D1g`s;N)oB(-q&JjA@HIA~5*TPmeCsd;unZQ`v1cHV z$MEu#RwYQIsakcrG7BL&S6_!uE)Jgx𝔑q0$*|3#vU2^y6A8$O%7_TKYW3kE>Xf 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 diff --git a/frontend/app/svg/icons/table.svg b/frontend/app/svg/icons/table.svg index 5e70d22c4..db76c22cf 100644 --- a/frontend/app/svg/icons/table.svg +++ b/frontend/app/svg/icons/table.svg @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/frontend/app/svg/icons/text-paragraph.svg b/frontend/app/svg/icons/text-paragraph.svg new file mode 100644 index 000000000..9779beabf --- /dev/null +++ b/frontend/app/svg/icons/text-paragraph.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file From 7c2539ec93a866e9a145aed9d11929036ea833bf Mon Sep 17 00:00:00 2001 From: Shekar Siri Date: Fri, 29 Apr 2022 14:16:29 +0200 Subject: [PATCH 33/91] feat(ui) - dashboard - report --- .../DashboardOptions/DashboardOptions.tsx | 33 +++++++++++++++++++ .../components/DashboardOptions/index.ts | 1 + .../DashboardView/DashboardView.tsx | 16 ++++----- 3 files changed, 40 insertions(+), 10 deletions(-) create mode 100644 frontend/app/components/Dashboard/components/DashboardOptions/DashboardOptions.tsx create mode 100644 frontend/app/components/Dashboard/components/DashboardOptions/index.ts diff --git a/frontend/app/components/Dashboard/components/DashboardOptions/DashboardOptions.tsx b/frontend/app/components/Dashboard/components/DashboardOptions/DashboardOptions.tsx new file mode 100644 index 000000000..b616d2e50 --- /dev/null +++ b/frontend/app/components/Dashboard/components/DashboardOptions/DashboardOptions.tsx @@ -0,0 +1,33 @@ +import React from 'react'; +import { ItemMenu } from 'UI'; +import { connect } from 'react-redux'; + +interface Props { + editHandler: any + deleteHandler: any + renderReport: any + isEnterprise: boolean +} +function DashboardOptions(props: Props) { + const { editHandler, deleteHandler, renderReport, isEnterprise } = props; + const menuItems = [ + { icon: 'pencil', text: 'Rename', onClick: editHandler }, + { icon: 'text-paragraph', text: 'Add Description', onClick: editHandler }, + { icon: 'users', text: 'Visibility & Access', onClick: editHandler }, + { icon: 'trash', text: 'Delete', onClick: deleteHandler }, + ] + if (isEnterprise) { + menuItems.unshift({ icon: 'pdf-download', text: 'Download Report', onClick: renderReport }); + } + + return ( + + ); +} + +export default connect(state => ({ + isEnterprise: state.getIn([ 'user', 'client', 'edition' ]) === 'ee', +}))(DashboardOptions); \ No newline at end of file diff --git a/frontend/app/components/Dashboard/components/DashboardOptions/index.ts b/frontend/app/components/Dashboard/components/DashboardOptions/index.ts new file mode 100644 index 000000000..09297ef57 --- /dev/null +++ b/frontend/app/components/Dashboard/components/DashboardOptions/index.ts @@ -0,0 +1 @@ +export { default } from './DashboardOptions'; \ No newline at end of file diff --git a/frontend/app/components/Dashboard/components/DashboardView/DashboardView.tsx b/frontend/app/components/Dashboard/components/DashboardView/DashboardView.tsx index 0b096794d..083e55d1a 100644 --- a/frontend/app/components/Dashboard/components/DashboardView/DashboardView.tsx +++ b/frontend/app/components/Dashboard/components/DashboardView/DashboardView.tsx @@ -1,7 +1,7 @@ import React, { useEffect } from 'react'; import { useObserver } from 'mobx-react-lite'; import { useStore } from 'App/mstore'; -import { Button, PageTitle, Loader, NoContent, ItemMenu } from 'UI'; +import { Button, PageTitle, Loader, NoContent } from 'UI'; import { withSiteId } from 'App/routes'; import withModal from 'App/components/Modal/withModal'; import DashboardWidgetGrid from '../DashboardWidgetGrid'; @@ -14,6 +14,7 @@ import DateRange from 'Shared/DateRange'; import AlertFormModal from 'App/components/Alerts/AlertFormModal'; import withPageTitle from 'HOCs/withPageTitle'; import withReport from 'App/components/hocs/withReport'; +import DashboardOptions from '../DashboardOptions'; interface Props { siteId: number; @@ -110,15 +111,10 @@ function DashboardView(props: Props) {
    -
    From 8986f395b1fb3a9b650afcd26ecae7fba04d2886 Mon Sep 17 00:00:00 2001 From: Shekar Siri Date: Fri, 29 Apr 2022 14:27:23 +0200 Subject: [PATCH 34/91] feat(ui) - dashboard - new libs --- third-party.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/third-party.md b/third-party.md index 4a31946e5..aceb11f08 100644 --- a/third-party.md +++ b/third-party.md @@ -98,6 +98,8 @@ Below is the list of dependencies used in OpenReplay software. Licenses may chan | geoip-lite | Apache2 | JavaScript | | ua-parser-js | MIT | JavaScript | | express | MIT | JavaScript | +| jspdf | MIT | JavaScript | +| html-to-image | MIT | JavaScript | | kafka | Apache2 | Infrastructure | | stern | Apache2 | Infrastructure | | k9s | Apache2 | Infrastructure | From 4f1a476c65380143a1e9d6f3ee2241efd1509a19 Mon Sep 17 00:00:00 2001 From: Shekar Siri Date: Fri, 29 Apr 2022 16:02:14 +0200 Subject: [PATCH 35/91] Update dashboard.ts --- frontend/app/mstore/types/dashboard.ts | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/frontend/app/mstore/types/dashboard.ts b/frontend/app/mstore/types/dashboard.ts index fbed41eb7..b6a8dd330 100644 --- a/frontend/app/mstore/types/dashboard.ts +++ b/frontend/app/mstore/types/dashboard.ts @@ -88,7 +88,8 @@ export default class Dashboard implements IDashboard { isPublic: this.isPublic, // widgets: this.widgets.map(w => w.toJson()) // widgets: this.widgets - metrics: this.metrics + metrics: this.metrics, + description: this.description, } } @@ -188,4 +189,4 @@ export default class Dashboard implements IDashboard { this.metrics.push(metricId) } } -} \ No newline at end of file +} From 27641279b4671342e5c56917cb7ec2ea62c440ba Mon Sep 17 00:00:00 2001 From: Shekar Siri Date: Fri, 29 Apr 2022 16:10:03 +0200 Subject: [PATCH 36/91] Update dashboard.ts --- frontend/app/mstore/types/dashboard.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/frontend/app/mstore/types/dashboard.ts b/frontend/app/mstore/types/dashboard.ts index b6a8dd330..c4ee376c6 100644 --- a/frontend/app/mstore/types/dashboard.ts +++ b/frontend/app/mstore/types/dashboard.ts @@ -97,6 +97,7 @@ export default class Dashboard implements IDashboard { runInAction(() => { this.dashboardId = json.dashboardId this.name = json.name + this.description = json.description this.isPublic = json.isPublic this.isPinned = json.isPinned this.widgets = json.widgets ? json.widgets.map(w => new Widget().fromJson(w)).sort((a, b) => a.position - b.position) : [] From 10edeb6e2dd1f2bd2898323d372af7c65ee62336 Mon Sep 17 00:00:00 2001 From: Alexander Zavorotynskiy Date: Fri, 29 Apr 2022 16:53:28 +0200 Subject: [PATCH 37/91] Refactoring of http handlers --- backend/pkg/messages/batch.go | 39 +--------- .../pkg/messages/legacy-message-transform.go | 13 +--- backend/pkg/queue/messages.go | 3 +- backend/services/http/handlers-web.go | 78 ++++++++++--------- backend/services/http/main.go | 24 ++++-- backend/services/http/model.go | 30 +++++++ 6 files changed, 94 insertions(+), 93 deletions(-) create mode 100644 backend/services/http/model.go diff --git a/backend/pkg/messages/batch.go b/backend/pkg/messages/batch.go index 9241672a3..850f22de9 100644 --- a/backend/pkg/messages/batch.go +++ b/backend/pkg/messages/batch.go @@ -1,17 +1,12 @@ package messages import ( - "bytes" "io" "github.com/pkg/errors" ) -func ReadBatch(b []byte, callback func(Message)) error { - return ReadBatchReader(bytes.NewReader(b), callback) -} - -func ReadBatchReader(reader io.Reader, callback func(Message)) error { +func ReadBatchReader(reader io.Reader, messageHandler func(Message)) error { var index uint64 var timestamp int64 for { @@ -21,7 +16,7 @@ func ReadBatchReader(reader io.Reader, callback func(Message)) error { } else if err != nil { return errors.Wrapf(err, "Batch Message decoding error on message with index %v", index) } - msg = transformDepricated(msg) + msg = transformDeprecated(msg) isBatchMeta := false switch m := msg.(type) { @@ -48,37 +43,11 @@ func ReadBatchReader(reader io.Reader, callback func(Message)) error { } msg.Meta().Index = index msg.Meta().Timestamp = timestamp - callback(msg) + + messageHandler(msg) if !isBatchMeta { // Without that indexes will be unique anyway, though shifted by 1 because BatchMeta is not counted in tracker index++ } } return errors.New("Error of the codeflow. (Should return on EOF)") } - -const AVG_MESSAGE_SIZE = 40 // TODO: calculate OR calculate dynamically -func WriteBatch(mList []Message) []byte { - batch := make([]byte, AVG_MESSAGE_SIZE*len(mList)) - p := 0 - for _, msg := range mList { - msgBytes := msg.Encode() - if len(batch) < p+len(msgBytes) { - newBatch := make([]byte, 2*len(batch)+len(msgBytes)) - copy(newBatch, batch) - batch = newBatch - } - copy(batch[p:], msgBytes) - p += len(msgBytes) - } - return batch[:p] -} - -func RewriteBatch(reader io.Reader, rewrite func(Message) Message) ([]byte, error) { - mList := make([]Message, 0, 10) // 10? - if err := ReadBatchReader(reader, func(m Message) { - mList = append(mList, rewrite(m)) - }); err != nil { - return nil, err - } - return WriteBatch(mList), nil -} diff --git a/backend/pkg/messages/legacy-message-transform.go b/backend/pkg/messages/legacy-message-transform.go index c22b73378..6774d95b1 100644 --- a/backend/pkg/messages/legacy-message-transform.go +++ b/backend/pkg/messages/legacy-message-transform.go @@ -1,6 +1,6 @@ package messages -func transformDepricated(msg Message) Message { +func transformDeprecated(msg Message) Message { switch m := msg.(type) { case *MouseClickDepricated: meta := m.Meta() @@ -11,17 +11,6 @@ func transformDepricated(msg Message) Message { HesitationTime: m.HesitationTime, Label: m.Label, } - // case *FetchDepricated: - // return &Fetch { - // Method: m.Method, - // URL: m.URL, - // Request: m.Request, - // Response: m.Response, - // Status: m.Status, - // Timestamp: m.Timestamp, - // Duration: m.Duration, - // // Headers: '' - // } default: return msg } diff --git a/backend/pkg/queue/messages.go b/backend/pkg/queue/messages.go index 0ab184ee6..9b9ff43a5 100644 --- a/backend/pkg/queue/messages.go +++ b/backend/pkg/queue/messages.go @@ -1,6 +1,7 @@ package queue import ( + "bytes" "log" "openreplay/backend/pkg/messages" @@ -9,7 +10,7 @@ import ( func NewMessageConsumer(group string, topics []string, handler types.DecodedMessageHandler, autoCommit bool) types.Consumer { return NewConsumer(group, topics, func(sessionID uint64, value []byte, meta *types.Meta) { - if err := messages.ReadBatch(value, func(msg messages.Message) { + if err := messages.ReadBatchReader(bytes.NewReader(value), func(msg messages.Message) { handler(sessionID, msg, meta) }); err != nil { log.Printf("Decode error: %v\n", err) diff --git a/backend/services/http/handlers-web.go b/backend/services/http/handlers-web.go index e5cf57a60..0c2fa386c 100644 --- a/backend/services/http/handlers-web.go +++ b/backend/services/http/handlers-web.go @@ -1,6 +1,7 @@ package main import ( + "bytes" "encoding/json" "errors" "log" @@ -15,37 +16,23 @@ import ( ) func startSessionHandlerWeb(w http.ResponseWriter, r *http.Request) { - type request struct { - Token string `json:"token"` - UserUUID *string `json:"userUUID"` - RevID string `json:"revID"` - Timestamp uint64 `json:"timestamp"` - TrackerVersion string `json:"trackerVersion"` - IsSnippet bool `json:"isSnippet"` - DeviceMemory uint64 `json:"deviceMemory"` - JsHeapSizeLimit uint64 `json:"jsHeapSizeLimit"` - ProjectKey *string `json:"projectKey"` - Reset bool `json:"reset"` - UserID string `json:"userID"` - } - type response struct { - Timestamp int64 `json:"timestamp"` - Delay int64 `json:"delay"` - Token string `json:"token"` - UserUUID string `json:"userUUID"` - SessionID string `json:"sessionID"` - BeaconSizeLimit int64 `json:"beaconSizeLimit"` - } - startTime := time.Now() - req := &request{} - body := http.MaxBytesReader(w, r.Body, JSON_SIZE_LIMIT) // what if Body == nil?? // use r.ContentLength to return specific error? + + // Check request body + if r.Body == nil { + responseWithError(w, http.StatusBadRequest, errors.New("request body is empty")) + } + body := http.MaxBytesReader(w, r.Body, JSON_SIZE_LIMIT) defer body.Close() + + // Parse request body + req := &startSessionRequest{} if err := json.NewDecoder(body).Decode(req); err != nil { responseWithError(w, http.StatusBadRequest, err) return } + // Handler's logic if req.ProjectKey == nil { responseWithError(w, http.StatusForbidden, errors.New("ProjectKey value required")) return @@ -82,9 +69,8 @@ func startSessionHandlerWeb(w http.ResponseWriter, r *http.Request) { } // TODO: if EXPIRED => send message for two sessions association expTime := startTime.Add(time.Duration(p.MaxSessionDuration) * time.Millisecond) - tokenData = &token.TokenData{sessionID, expTime.UnixNano() / 1e6} + tokenData = &token.TokenData{ID: sessionID, ExpTime: expTime.UnixNano() / 1e6} - country := geoIP.ExtractISOCodeFromHTTPRequest(r) producer.Produce(TOPIC_RAW_WEB, tokenData.ID, Encode(&SessionStart{ Timestamp: req.Timestamp, ProjectID: uint64(p.ProjectID), @@ -98,14 +84,14 @@ func startSessionHandlerWeb(w http.ResponseWriter, r *http.Request) { UserBrowserVersion: ua.BrowserVersion, UserDevice: ua.Device, UserDeviceType: ua.DeviceType, - UserCountry: country, + UserCountry: geoIP.ExtractISOCodeFromHTTPRequest(r), UserDeviceMemorySize: req.DeviceMemory, UserDeviceHeapSize: req.JsHeapSizeLimit, UserID: req.UserID, })) } - responseWithJSON(w, &response{ + responseWithJSON(w, &startSessionResponse{ Token: tokenizer.Compose(*tokenData), UserUUID: userUUID, SessionID: strconv.FormatUint(tokenData.ID, 10), @@ -114,15 +100,24 @@ func startSessionHandlerWeb(w http.ResponseWriter, r *http.Request) { } func pushMessagesHandlerWeb(w http.ResponseWriter, r *http.Request) { + // Check authorization sessionData, err := tokenizer.ParseFromHTTPRequest(r) if err != nil { responseWithError(w, http.StatusUnauthorized, err) return } + + // Check request body + if r.Body == nil { + responseWithError(w, http.StatusBadRequest, errors.New("request body is empty")) + } body := http.MaxBytesReader(w, r.Body, BEACON_SIZE_LIMIT) defer body.Close() - rewritenBuf, err := RewriteBatch(body, func(msg Message) Message { + var handledMessages bytes.Buffer + + // Process each message in request data + err = ReadBatchReader(body, func(msg Message) { switch m := msg.(type) { case *SetNodeAttributeURLBased: if m.Name == "src" || m.Name == "href" { @@ -150,30 +145,38 @@ func pushMessagesHandlerWeb(w http.ResponseWriter, r *http.Request) { Rule: handleCSS(sessionData.ID, m.BaseURL, m.Rule), } } - - return msg + handledMessages.Write(msg.Encode()) }) if err != nil { responseWithError(w, http.StatusForbidden, err) return } - producer.Produce(TOPIC_RAW_WEB, sessionData.ID, rewritenBuf) + + // Send processed messages to queue as array of bytes + err = producer.Produce(TOPIC_RAW_WEB, sessionData.ID, handledMessages.Bytes()) + if err != nil { + log.Printf("can't send processed messages to queue: %s", err) + } + w.WriteHeader(http.StatusOK) } func notStartedHandlerWeb(w http.ResponseWriter, r *http.Request) { - type request struct { - ProjectKey *string `json:"projectKey"` - TrackerVersion string `json:"trackerVersion"` - DoNotTrack bool `json:"DoNotTrack"` + // Check request body + if r.Body == nil { + responseWithError(w, http.StatusBadRequest, errors.New("request body is empty")) } - req := &request{} body := http.MaxBytesReader(w, r.Body, JSON_SIZE_LIMIT) defer body.Close() + + // Parse request body + req := ¬StartedRequest{} if err := json.NewDecoder(body).Decode(req); err != nil { responseWithError(w, http.StatusBadRequest, err) return } + + // Handler's logic if req.ProjectKey == nil { responseWithError(w, http.StatusForbidden, errors.New("ProjectKey value required")) return @@ -201,5 +204,6 @@ func notStartedHandlerWeb(w http.ResponseWriter, r *http.Request) { if err != nil { log.Printf("Unable to insert Unstarted Session: %v\n", err) } + w.WriteHeader(http.StatusOK) } diff --git a/backend/services/http/main.go b/backend/services/http/main.go index 1f3bc93b3..43dd6865e 100644 --- a/backend/services/http/main.go +++ b/backend/services/http/main.go @@ -4,6 +4,7 @@ import ( "context" "log" "net/http" + "openreplay/backend/pkg/db/postgres" "os" "os/signal" "syscall" @@ -11,7 +12,6 @@ import ( "golang.org/x/net/http2" "openreplay/backend/pkg/db/cache" - "openreplay/backend/pkg/db/postgres" "openreplay/backend/pkg/env" "openreplay/backend/pkg/flakeid" "openreplay/backend/pkg/queue" @@ -47,26 +47,32 @@ func main() { log.SetFlags(log.LstdFlags | log.LUTC | log.Llongfile) pprof.StartProfilingServer() + // Queue producer = queue.NewProducer() defer producer.Close(15000) + + // Database + pgconn = cache.NewPGCache(postgres.NewConn(env.String("POSTGRES_STRING")), 1000*60*20) + defer pgconn.Close() + + // Envs TOPIC_RAW_WEB = env.String("TOPIC_RAW_WEB") TOPIC_RAW_IOS = env.String("TOPIC_RAW_IOS") TOPIC_CACHE = env.String("TOPIC_CACHE") TOPIC_TRIGGER = env.String("TOPIC_TRIGGER") - //TOPIC_ANALYTICS = env.String("TOPIC_ANALYTICS") + CACHE_ASSESTS = env.Bool("CACHE_ASSETS") + BEACON_SIZE_LIMIT = int64(env.Uint64("BEACON_SIZE_LIMIT")) + HTTP_PORT := env.String("HTTP_PORT") + + // Modules rewriter = assets.NewRewriter(env.String("ASSETS_ORIGIN")) - pgconn = cache.NewPGCache(postgres.NewConn(env.String("POSTGRES_STRING")), 1000*60*20) - defer pgconn.Close() s3 = storage.NewS3(env.String("AWS_REGION"), env.String("S3_BUCKET_IOS_IMAGES")) tokenizer = token.NewTokenizer(env.String("TOKEN_SECRET")) uaParser = uaparser.NewUAParser(env.String("UAPARSER_FILE")) geoIP = geoip.NewGeoIP(env.String("MAXMINDDB_FILE")) flaker = flakeid.NewFlaker(env.WorkerID()) - CACHE_ASSESTS = env.Bool("CACHE_ASSETS") - BEACON_SIZE_LIMIT = int64(env.Uint64("BEACON_SIZE_LIMIT")) - - HTTP_PORT := env.String("HTTP_PORT") + // Server server := &http.Server{ Addr: ":" + HTTP_PORT, Handler: http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { @@ -140,6 +146,7 @@ func main() { } }), } + http2.ConfigureServer(server, nil) go func() { if err := server.ListenAndServe(); err != nil { @@ -148,6 +155,7 @@ func main() { } }() log.Printf("Server successfully started on port %v\n", HTTP_PORT) + sigchan := make(chan os.Signal, 1) signal.Notify(sigchan, syscall.SIGINT, syscall.SIGTERM) <-sigchan diff --git a/backend/services/http/model.go b/backend/services/http/model.go new file mode 100644 index 000000000..5a7dd28bc --- /dev/null +++ b/backend/services/http/model.go @@ -0,0 +1,30 @@ +package main + +type startSessionRequest struct { + Token string `json:"token"` + UserUUID *string `json:"userUUID"` + RevID string `json:"revID"` + Timestamp uint64 `json:"timestamp"` + TrackerVersion string `json:"trackerVersion"` + IsSnippet bool `json:"isSnippet"` + DeviceMemory uint64 `json:"deviceMemory"` + JsHeapSizeLimit uint64 `json:"jsHeapSizeLimit"` + ProjectKey *string `json:"projectKey"` + Reset bool `json:"reset"` + UserID string `json:"userID"` +} + +type startSessionResponse struct { + Timestamp int64 `json:"timestamp"` + Delay int64 `json:"delay"` + Token string `json:"token"` + UserUUID string `json:"userUUID"` + SessionID string `json:"sessionID"` + BeaconSizeLimit int64 `json:"beaconSizeLimit"` +} + +type notStartedRequest struct { + ProjectKey *string `json:"projectKey"` + TrackerVersion string `json:"trackerVersion"` + DoNotTrack bool `json:"DoNotTrack"` +} From b0bb5bd922f5acdc8da70c44963c2d2895eea0a1 Mon Sep 17 00:00:00 2001 From: Alexander Zavorotynskiy Date: Fri, 29 Apr 2022 17:23:20 +0200 Subject: [PATCH 38/91] Moved configuration to the separate file --- backend/services/http/assets.go | 6 ++-- backend/services/http/config.go | 39 +++++++++++++++++++++++++ backend/services/http/handlers-ios.go | 10 +++---- backend/services/http/handlers-web.go | 12 ++++---- backend/services/http/handlers.go | 4 +-- backend/services/http/main.go | 41 +++++++++------------------ 6 files changed, 68 insertions(+), 44 deletions(-) create mode 100644 backend/services/http/config.go diff --git a/backend/services/http/assets.go b/backend/services/http/assets.go index b6ac61186..bced76ef0 100644 --- a/backend/services/http/assets.go +++ b/backend/services/http/assets.go @@ -7,7 +7,7 @@ import ( func sendAssetForCache(sessionID uint64, baseURL string, relativeURL string) { if fullURL, cacheable := assets.GetFullCachableURL(baseURL, relativeURL); cacheable { - producer.Produce(TOPIC_CACHE, sessionID, messages.Encode(&messages.AssetCache{ + producer.Produce(cfg.TopicCache, sessionID, messages.Encode(&messages.AssetCache{ URL: fullURL, })) } @@ -20,7 +20,7 @@ func sendAssetsForCacheFromCSS(sessionID uint64, baseURL string, css string) { } func handleURL(sessionID uint64, baseURL string, url string) string { - if CACHE_ASSESTS { + if cfg.CacheAssets { sendAssetForCache(sessionID, baseURL, url) return rewriter.RewriteURL(sessionID, baseURL, url) } @@ -28,7 +28,7 @@ func handleURL(sessionID uint64, baseURL string, url string) string { } func handleCSS(sessionID uint64, baseURL string, css string) string { - if CACHE_ASSESTS { + if cfg.CacheAssets { sendAssetsForCacheFromCSS(sessionID, baseURL, css) return rewriter.RewriteCSS(sessionID, baseURL, css) } diff --git a/backend/services/http/config.go b/backend/services/http/config.go new file mode 100644 index 000000000..f03ef8cc4 --- /dev/null +++ b/backend/services/http/config.go @@ -0,0 +1,39 @@ +package main + +import "openreplay/backend/pkg/env" + +type config struct { + HTTPPort string + TopicRawWeb string + TopicRawIOS string + TopicCache string + CacheAssets bool + BeaconSizeLimit int64 + JsonSizeLimit int64 + AssetsOrigin string + AWSRegion string + S3BucketIOSImages string + TokenSecret string + UAParserFile string + MaxMinDBFile string + WorkerID uint16 +} + +func NewConfig() *config { + return &config{ + HTTPPort: env.String("HTTP_PORT"), + TopicRawWeb: env.String("TOPIC_RAW_WEB"), + TopicRawIOS: env.String("TOPIC_RAW_IOS"), + TopicCache: env.String("TOPIC_CACHE"), + CacheAssets: env.Bool("CACHE_ASSETS"), + BeaconSizeLimit: int64(env.Uint64("BEACON_SIZE_LIMIT")), + JsonSizeLimit: 1e3, // 1Kb + AssetsOrigin: env.String("ASSETS_ORIGIN"), + AWSRegion: env.String("AWS_REGION"), + S3BucketIOSImages: env.String("S3_BUCKET_IOS_IMAGES"), + TokenSecret: env.String("TOKEN_SECRET"), + UAParserFile: env.String("UAPARSER_FILE"), + MaxMinDBFile: env.String("MAXMINDDB_FILE"), + WorkerID: env.WorkerID(), + } +} diff --git a/backend/services/http/handlers-ios.go b/backend/services/http/handlers-ios.go index a7b6f984a..6dae4e70c 100644 --- a/backend/services/http/handlers-ios.go +++ b/backend/services/http/handlers-ios.go @@ -36,7 +36,7 @@ func startSessionHandlerIOS(w http.ResponseWriter, r *http.Request) { } startTime := time.Now() req := &request{} - body := http.MaxBytesReader(w, r.Body, JSON_SIZE_LIMIT) + body := http.MaxBytesReader(w, r.Body, cfg.JsonSizeLimit) defer body.Close() if err := json.NewDecoder(body).Decode(req); err != nil { responseWithError(w, http.StatusBadRequest, err) @@ -84,7 +84,7 @@ func startSessionHandlerIOS(w http.ResponseWriter, r *http.Request) { country := geoIP.ExtractISOCodeFromHTTPRequest(r) // The difference with web is mostly here: - producer.Produce(TOPIC_RAW_IOS, tokenData.ID, Encode(&IOSSessionStart{ + producer.Produce(cfg.TopicRawIOS, tokenData.ID, Encode(&IOSSessionStart{ Timestamp: req.Timestamp, ProjectID: uint64(p.ProjectID), TrackerVersion: req.TrackerVersion, @@ -102,7 +102,7 @@ func startSessionHandlerIOS(w http.ResponseWriter, r *http.Request) { Token: tokenizer.Compose(*tokenData), UserUUID: userUUID, SessionID: strconv.FormatUint(tokenData.ID, 10), - BeaconSizeLimit: BEACON_SIZE_LIMIT, + BeaconSizeLimit: cfg.BeaconSizeLimit, }) } @@ -112,7 +112,7 @@ func pushMessagesHandlerIOS(w http.ResponseWriter, r *http.Request) { responseWithError(w, http.StatusUnauthorized, err) return } - pushMessages(w, r, sessionData.ID, TOPIC_RAW_IOS) + pushMessages(w, r, sessionData.ID, cfg.TopicRawIOS) } func pushLateMessagesHandlerIOS(w http.ResponseWriter, r *http.Request) { @@ -122,7 +122,7 @@ func pushLateMessagesHandlerIOS(w http.ResponseWriter, r *http.Request) { return } // Check timestamps here? - pushMessages(w, r, sessionData.ID, TOPIC_RAW_IOS) + pushMessages(w, r, sessionData.ID, cfg.TopicRawIOS) } func imagesUploadHandlerIOS(w http.ResponseWriter, r *http.Request) { diff --git a/backend/services/http/handlers-web.go b/backend/services/http/handlers-web.go index 0c2fa386c..1b212e2ba 100644 --- a/backend/services/http/handlers-web.go +++ b/backend/services/http/handlers-web.go @@ -22,7 +22,7 @@ func startSessionHandlerWeb(w http.ResponseWriter, r *http.Request) { if r.Body == nil { responseWithError(w, http.StatusBadRequest, errors.New("request body is empty")) } - body := http.MaxBytesReader(w, r.Body, JSON_SIZE_LIMIT) + body := http.MaxBytesReader(w, r.Body, cfg.JsonSizeLimit) defer body.Close() // Parse request body @@ -71,7 +71,7 @@ func startSessionHandlerWeb(w http.ResponseWriter, r *http.Request) { expTime := startTime.Add(time.Duration(p.MaxSessionDuration) * time.Millisecond) tokenData = &token.TokenData{ID: sessionID, ExpTime: expTime.UnixNano() / 1e6} - producer.Produce(TOPIC_RAW_WEB, tokenData.ID, Encode(&SessionStart{ + producer.Produce(cfg.TopicRawWeb, tokenData.ID, Encode(&SessionStart{ Timestamp: req.Timestamp, ProjectID: uint64(p.ProjectID), TrackerVersion: req.TrackerVersion, @@ -95,7 +95,7 @@ func startSessionHandlerWeb(w http.ResponseWriter, r *http.Request) { Token: tokenizer.Compose(*tokenData), UserUUID: userUUID, SessionID: strconv.FormatUint(tokenData.ID, 10), - BeaconSizeLimit: BEACON_SIZE_LIMIT, + BeaconSizeLimit: cfg.BeaconSizeLimit, }) } @@ -111,7 +111,7 @@ func pushMessagesHandlerWeb(w http.ResponseWriter, r *http.Request) { if r.Body == nil { responseWithError(w, http.StatusBadRequest, errors.New("request body is empty")) } - body := http.MaxBytesReader(w, r.Body, BEACON_SIZE_LIMIT) + body := http.MaxBytesReader(w, r.Body, cfg.BeaconSizeLimit) defer body.Close() var handledMessages bytes.Buffer @@ -153,7 +153,7 @@ func pushMessagesHandlerWeb(w http.ResponseWriter, r *http.Request) { } // Send processed messages to queue as array of bytes - err = producer.Produce(TOPIC_RAW_WEB, sessionData.ID, handledMessages.Bytes()) + err = producer.Produce(cfg.TopicRawWeb, sessionData.ID, handledMessages.Bytes()) if err != nil { log.Printf("can't send processed messages to queue: %s", err) } @@ -166,7 +166,7 @@ func notStartedHandlerWeb(w http.ResponseWriter, r *http.Request) { if r.Body == nil { responseWithError(w, http.StatusBadRequest, errors.New("request body is empty")) } - body := http.MaxBytesReader(w, r.Body, JSON_SIZE_LIMIT) + body := http.MaxBytesReader(w, r.Body, cfg.JsonSizeLimit) defer body.Close() // Parse request body diff --git a/backend/services/http/handlers.go b/backend/services/http/handlers.go index dd73925af..d2d780f30 100644 --- a/backend/services/http/handlers.go +++ b/backend/services/http/handlers.go @@ -9,10 +9,8 @@ import ( gzip "github.com/klauspost/pgzip" ) -const JSON_SIZE_LIMIT int64 = 1e3 // 1Kb - func pushMessages(w http.ResponseWriter, r *http.Request, sessionID uint64, topicName string) { - body := http.MaxBytesReader(w, r.Body, BEACON_SIZE_LIMIT) + body := http.MaxBytesReader(w, r.Body, cfg.BeaconSizeLimit) defer body.Close() var reader io.ReadCloser var err error diff --git a/backend/services/http/main.go b/backend/services/http/main.go index 43dd6865e..d053c9c2f 100644 --- a/backend/services/http/main.go +++ b/backend/services/http/main.go @@ -25,6 +25,8 @@ import ( "openreplay/backend/pkg/pprof" ) +// Global variables +var cfg *config var rewriter *assets.Rewriter var producer types.Producer var pgconn *cache.PGCache @@ -34,19 +36,13 @@ var geoIP *geoip.GeoIP var tokenizer *token.Tokenizer var s3 *storage.S3 -var TOPIC_RAW_WEB string -var TOPIC_RAW_IOS string -var TOPIC_CACHE string -var TOPIC_TRIGGER string - -//var TOPIC_ANALYTICS string -var CACHE_ASSESTS bool -var BEACON_SIZE_LIMIT int64 - func main() { log.SetFlags(log.LstdFlags | log.LUTC | log.Llongfile) pprof.StartProfilingServer() + // Configs + cfg = NewConfig() + // Queue producer = queue.NewProducer() defer producer.Close(15000) @@ -55,26 +51,17 @@ func main() { pgconn = cache.NewPGCache(postgres.NewConn(env.String("POSTGRES_STRING")), 1000*60*20) defer pgconn.Close() - // Envs - TOPIC_RAW_WEB = env.String("TOPIC_RAW_WEB") - TOPIC_RAW_IOS = env.String("TOPIC_RAW_IOS") - TOPIC_CACHE = env.String("TOPIC_CACHE") - TOPIC_TRIGGER = env.String("TOPIC_TRIGGER") - CACHE_ASSESTS = env.Bool("CACHE_ASSETS") - BEACON_SIZE_LIMIT = int64(env.Uint64("BEACON_SIZE_LIMIT")) - HTTP_PORT := env.String("HTTP_PORT") - - // Modules - rewriter = assets.NewRewriter(env.String("ASSETS_ORIGIN")) - s3 = storage.NewS3(env.String("AWS_REGION"), env.String("S3_BUCKET_IOS_IMAGES")) - tokenizer = token.NewTokenizer(env.String("TOKEN_SECRET")) - uaParser = uaparser.NewUAParser(env.String("UAPARSER_FILE")) - geoIP = geoip.NewGeoIP(env.String("MAXMINDDB_FILE")) - flaker = flakeid.NewFlaker(env.WorkerID()) + // Init modules + rewriter = assets.NewRewriter(cfg.AssetsOrigin) + s3 = storage.NewS3(cfg.AWSRegion, cfg.S3BucketIOSImages) + tokenizer = token.NewTokenizer(cfg.TokenSecret) + uaParser = uaparser.NewUAParser(cfg.UAParserFile) + geoIP = geoip.NewGeoIP(cfg.MaxMinDBFile) + flaker = flakeid.NewFlaker(cfg.WorkerID) // Server server := &http.Server{ - Addr: ":" + HTTP_PORT, + Addr: ":" + cfg.HTTPPort, Handler: http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { // TODO: agree with specification @@ -154,7 +141,7 @@ func main() { log.Fatal("Server error") } }() - log.Printf("Server successfully started on port %v\n", HTTP_PORT) + log.Printf("Server successfully started on port %v\n", cfg.HTTPPort) sigchan := make(chan os.Signal, 1) signal.Notify(sigchan, syscall.SIGINT, syscall.SIGTERM) From 6807dc8ce1a97755766153b30ba5b56ee35f7088 Mon Sep 17 00:00:00 2001 From: Taha Yassine Kraiem Date: Fri, 29 Apr 2022 18:52:29 +0200 Subject: [PATCH 39/91] feat(api): EE optimized get error details --- ee/api/chalicelib/core/errors.py | 1 + 1 file changed, 1 insertion(+) diff --git a/ee/api/chalicelib/core/errors.py b/ee/api/chalicelib/core/errors.py index c7e066f8b..ecf1aeda2 100644 --- a/ee/api/chalicelib/core/errors.py +++ b/ee/api/chalicelib/core/errors.py @@ -272,6 +272,7 @@ def get_details(project_id, error_id, user_id, **data): INNER JOIN events.errors AS ee USING (error_id) INNER JOIN public.sessions USING (session_id) WHERE pe.project_id = %(project_id)s + AND sessions.project_id = %(project_id)s AND error_id = %(error_id)s ORDER BY start_ts DESC LIMIT 1;""", From 867f92dfc7211303e834404d125290eac8cb19da Mon Sep 17 00:00:00 2001 From: Rajesh Rajendran Date: Sat, 30 Apr 2022 16:07:00 +0000 Subject: [PATCH 40/91] Update development.md --- backend/development.md | 7 ------- 1 file changed, 7 deletions(-) diff --git a/backend/development.md b/backend/development.md index 0e7295c8b..1339a2456 100644 --- a/backend/development.md +++ b/backend/development.md @@ -2,13 +2,6 @@ - [Vagrant](../scripts/vagrant/README.md) -### Development environment - -```bash -docker build -f Dockerfile.bundle . - -``` - ### Building and deploying locally ```bash From b87e601f27e4758f3e7515b68765529e57a1d822 Mon Sep 17 00:00:00 2001 From: Taha Yassine Kraiem Date: Mon, 2 May 2022 11:06:15 +0200 Subject: [PATCH 41/91] chore(vagrant): Changed development.md chore(vagrant): Added dev setup-scripts for EE --- api/development.md | 13 ---- ee/api/clean.sh | 85 +++++++++++++++++++++ ee/api/development.md | 36 +++++++++ ee/api/{prepare-local.sh => prepare-dev.sh} | 0 4 files changed, 121 insertions(+), 13 deletions(-) create mode 100755 ee/api/clean.sh create mode 100644 ee/api/development.md rename ee/api/{prepare-local.sh => prepare-dev.sh} (100%) diff --git a/api/development.md b/api/development.md index 116518604..15e3c64a7 100644 --- a/api/development.md +++ b/api/development.md @@ -7,7 +7,6 @@ ### Development environment ```bash -**FOSS:** cd openreplay/api # Make your own copy of .env file and edit it as you want cp .env.dev .env @@ -17,18 +16,6 @@ mkdir .venv # Installing dependencies (pipenv will detect the .venv folder and use it as a target) pipenv install -r requirements.txt [--skip-lock] - -# Create a .venv folder to contain all you dependencies -mkdir .venv - -# Installing dependencies (pipenv will detect the .venv folder and use it as a target) -pipenv install -r requirements.txt [--skip-lock] - -# These commands must bu used everytime you make changes to FOSS. -# To clean the unused files before getting new ones -bash clean.sh -# To copy commun files from FOSS -bash prepare-dev.sh ``` ### Building and deploying locally diff --git a/ee/api/clean.sh b/ee/api/clean.sh new file mode 100755 index 000000000..59f723c80 --- /dev/null +++ b/ee/api/clean.sh @@ -0,0 +1,85 @@ +#!/bin/bash + +rm -rf ./chalicelib/core/alerts.py +rm -rf ./chalicelib/core/alerts_processor.py +rm -rf ./chalicelib/core/announcements.py +rm -rf ./chalicelib/core/collaboration_slack.py +rm -rf ./chalicelib/core/errors_favorite_viewed.py +rm -rf ./chalicelib/core/events.py +rm -rf ./chalicelib/core/events_ios.py +rm -rf ./chalicelib/core/dashboards.py +rm -rf ./chalicelib/core/funnels.py +rm -rf ./chalicelib/core/integration_base.py +rm -rf ./chalicelib/core/integration_base_issue.py +rm -rf ./chalicelib/core/integration_github.py +rm -rf ./chalicelib/core/integration_github_issue.py +rm -rf ./chalicelib/core/integration_jira_cloud.py +rm -rf ./chalicelib/core/integration_jira_cloud_issue.py +rm -rf ./chalicelib/core/integrations_manager.py +rm -rf ./chalicelib/core/issues.py +rm -rf ./chalicelib/core/jobs.py +rm -rf ./chalicelib/core/log_tool_bugsnag.py +rm -rf ./chalicelib/core/log_tool_cloudwatch.py +rm -rf ./chalicelib/core/log_tool_datadog.py +rm -rf ./chalicelib/core/log_tool_elasticsearch.py +rm -rf ./chalicelib/core/log_tool_newrelic.py +rm -rf ./chalicelib/core/log_tool_rollbar.py +rm -rf ./chalicelib/core/log_tool_sentry.py +rm -rf ./chalicelib/core/log_tool_stackdriver.py +rm -rf ./chalicelib/core/log_tool_sumologic.py +rm -rf ./chalicelib/core/metadata.py +rm -rf ./chalicelib/core/mobile.py +rm -rf ./chalicelib/core/sessions.py +rm -rf ./chalicelib/core/sessions_assignments.py +rm -rf ./chalicelib/core/sessions_favorite_viewed.py +rm -rf ./chalicelib/core/sessions_metas.py +rm -rf ./chalicelib/core/sessions_mobs.py +rm -rf ./chalicelib/core/significance.py +rm -rf ./chalicelib/core/slack.py +rm -rf ./chalicelib/core/socket_ios.py +rm -rf ./chalicelib/core/sourcemaps.py +rm -rf ./chalicelib/core/sourcemaps_parser.py +rm -rf ./chalicelib/core/weekly_report.py +rm -rf ./chalicelib/saml +rm -rf ./chalicelib/utils/html/ +rm -rf ./chalicelib/utils/__init__.py +rm -rf ./chalicelib/utils/args_transformer.py +rm -rf ./chalicelib/utils/captcha.py +rm -rf ./chalicelib/utils/dev.py +rm -rf ./chalicelib/utils/email_handler.py +rm -rf ./chalicelib/utils/email_helper.py +rm -rf ./chalicelib/utils/event_filter_definition.py +rm -rf ./chalicelib/utils/github_client_v3.py +rm -rf ./chalicelib/utils/helper.py +rm -rf ./chalicelib/utils/jira_client.py +rm -rf ./chalicelib/utils/metrics_helper.py +rm -rf ./chalicelib/utils/pg_client.py +rm -rf ./chalicelib/utils/s3.py +rm -rf ./chalicelib/utils/smtp.py +rm -rf ./chalicelib/utils/strings.py +rm -rf ./chalicelib/utils/TimeUTC.py +rm -rf ./routers/app/__init__.py +rm -rf ./routers/crons/__init__.py +rm -rf ./routers/subs/__init__.py +rm -rf ./routers/__init__.py +rm -rf ./chalicelib/core/assist.py +rm -rf ./auth/auth_apikey.py +rm -rf ./auth/auth_jwt.py +rm -rf ./build.sh +rm -rf ./routers/core.py +rm -rf ./routers/crons/core_crons.py +rm -rf ./routers/subs/dashboard.py +rm -rf ./db_changes.sql +rm -rf ./Dockerfile.bundle +rm -rf ./entrypoint.bundle.sh +rm -rf ./entrypoint.sh +rm -rf ./chalicelib/core/heatmaps.py +rm -rf ./routers/subs/insights.py +rm -rf ./schemas.py +rm -rf ./routers/subs/v1_api.py +rm -rf ./routers/subs/metrics.py +rm -rf ./chalicelib/core/custom_metrics.py +rm -rf ./chalicelib/core/performance_event.py +rm -rf ./chalicelib/core/saved_search.py +rm -rf ./app_alerts.py +rm -rf ./build_alerts.sh diff --git a/ee/api/development.md b/ee/api/development.md new file mode 100644 index 000000000..d980a24d7 --- /dev/null +++ b/ee/api/development.md @@ -0,0 +1,36 @@ +### Prerequisites + +- [Vagrant](../scripts/vagrant/README.md) +- Python 3.9 +- Pipenv + +### Development environment + +```bash +cd openreplay/ee/api +# Make your own copy of .env file and edit it as you want +cp .env.dev .env + +# Create a .venv folder to contain all you dependencies +mkdir .venv + +# Installing dependencies (pipenv will detect the .venv folder and use it as a target) +pipenv install -r requirements.txt [--skip-lock] + +# These commands must bu used everytime you make changes to FOSS. +# To clean the unused files before getting new ones +bash clean.sh +# To copy commun files from FOSS +bash prepare-dev.sh +``` + +### Building and deploying locally + +```bash +cd openreplay-contributions +vagrant ssh +cd openreplay-dev/openreplay/scripts/helmcharts +# For complete list of options +# bash local_deploy.sh help +bash local_deploy.sh api +``` diff --git a/ee/api/prepare-local.sh b/ee/api/prepare-dev.sh similarity index 100% rename from ee/api/prepare-local.sh rename to ee/api/prepare-dev.sh From 66e190221d4f4bbf04d84b19b26f76bb3487d456 Mon Sep 17 00:00:00 2001 From: Alexander Zavorotynskiy Date: Mon, 2 May 2022 14:36:02 +0200 Subject: [PATCH 42/91] Removed global objects (moved service initialization into serviceBuilder) --- backend/services/http/assets.go | 24 ++--- backend/services/http/config.go | 11 +- backend/services/http/handlers-ios.go | 38 +++---- backend/services/http/handlers-web.go | 46 ++++---- backend/services/http/handlers.go | 6 +- backend/services/http/main.go | 144 +++++--------------------- backend/services/http/router.go | 68 ++++++++++++ backend/services/http/server.go | 46 ++++++++ backend/services/http/service.go | 36 +++++++ 9 files changed, 243 insertions(+), 176 deletions(-) create mode 100644 backend/services/http/router.go create mode 100644 backend/services/http/server.go create mode 100644 backend/services/http/service.go diff --git a/backend/services/http/assets.go b/backend/services/http/assets.go index bced76ef0..0948984b0 100644 --- a/backend/services/http/assets.go +++ b/backend/services/http/assets.go @@ -5,32 +5,32 @@ import ( "openreplay/backend/pkg/url/assets" ) -func sendAssetForCache(sessionID uint64, baseURL string, relativeURL string) { +func (e *Router) sendAssetForCache(sessionID uint64, baseURL string, relativeURL string) { if fullURL, cacheable := assets.GetFullCachableURL(baseURL, relativeURL); cacheable { - producer.Produce(cfg.TopicCache, sessionID, messages.Encode(&messages.AssetCache{ + e.services.producer.Produce(e.cfg.TopicCache, sessionID, messages.Encode(&messages.AssetCache{ URL: fullURL, })) } } -func sendAssetsForCacheFromCSS(sessionID uint64, baseURL string, css string) { +func (e *Router) sendAssetsForCacheFromCSS(sessionID uint64, baseURL string, css string) { for _, u := range assets.ExtractURLsFromCSS(css) { // TODO: in one shot with rewriting - sendAssetForCache(sessionID, baseURL, u) + e.sendAssetForCache(sessionID, baseURL, u) } } -func handleURL(sessionID uint64, baseURL string, url string) string { - if cfg.CacheAssets { - sendAssetForCache(sessionID, baseURL, url) - return rewriter.RewriteURL(sessionID, baseURL, url) +func (e *Router) handleURL(sessionID uint64, baseURL string, url string) string { + if e.cfg.CacheAssets { + e.sendAssetForCache(sessionID, baseURL, url) + return e.services.rewriter.RewriteURL(sessionID, baseURL, url) } return assets.ResolveURL(baseURL, url) } -func handleCSS(sessionID uint64, baseURL string, css string) string { - if cfg.CacheAssets { - sendAssetsForCacheFromCSS(sessionID, baseURL, css) - return rewriter.RewriteCSS(sessionID, baseURL, css) +func (e *Router) handleCSS(sessionID uint64, baseURL string, css string) string { + if e.cfg.CacheAssets { + e.sendAssetsForCacheFromCSS(sessionID, baseURL, css) + return e.services.rewriter.RewriteCSS(sessionID, baseURL, css) } return assets.ResolveCSS(baseURL, css) } diff --git a/backend/services/http/config.go b/backend/services/http/config.go index f03ef8cc4..4b29afb9d 100644 --- a/backend/services/http/config.go +++ b/backend/services/http/config.go @@ -1,9 +1,14 @@ package main -import "openreplay/backend/pkg/env" +import ( + "openreplay/backend/pkg/env" + "time" +) type config struct { + HTTPHost string HTTPPort string + HTTPTimeout time.Duration TopicRawWeb string TopicRawIOS string TopicCache string @@ -13,6 +18,7 @@ type config struct { AssetsOrigin string AWSRegion string S3BucketIOSImages string + Postgres string TokenSecret string UAParserFile string MaxMinDBFile string @@ -21,7 +27,9 @@ type config struct { func NewConfig() *config { return &config{ + HTTPHost: "", HTTPPort: env.String("HTTP_PORT"), + HTTPTimeout: time.Second * 60, TopicRawWeb: env.String("TOPIC_RAW_WEB"), TopicRawIOS: env.String("TOPIC_RAW_IOS"), TopicCache: env.String("TOPIC_CACHE"), @@ -31,6 +39,7 @@ func NewConfig() *config { AssetsOrigin: env.String("ASSETS_ORIGIN"), AWSRegion: env.String("AWS_REGION"), S3BucketIOSImages: env.String("S3_BUCKET_IOS_IMAGES"), + Postgres: env.String("POSTGRES_STRING"), TokenSecret: env.String("TOKEN_SECRET"), UAParserFile: env.String("UAPARSER_FILE"), MaxMinDBFile: env.String("MAXMINDDB_FILE"), diff --git a/backend/services/http/handlers-ios.go b/backend/services/http/handlers-ios.go index 6dae4e70c..4591a7d72 100644 --- a/backend/services/http/handlers-ios.go +++ b/backend/services/http/handlers-ios.go @@ -16,7 +16,7 @@ import ( const FILES_SIZE_LIMIT int64 = 1e7 // 10Mb -func startSessionHandlerIOS(w http.ResponseWriter, r *http.Request) { +func (e *Router) startSessionHandlerIOS(w http.ResponseWriter, r *http.Request) { type request struct { Token string `json:"token"` ProjectKey *string `json:"projectKey"` @@ -36,7 +36,7 @@ func startSessionHandlerIOS(w http.ResponseWriter, r *http.Request) { } startTime := time.Now() req := &request{} - body := http.MaxBytesReader(w, r.Body, cfg.JsonSizeLimit) + body := http.MaxBytesReader(w, r.Body, e.cfg.JsonSizeLimit) defer body.Close() if err := json.NewDecoder(body).Decode(req); err != nil { responseWithError(w, http.StatusBadRequest, err) @@ -48,7 +48,7 @@ func startSessionHandlerIOS(w http.ResponseWriter, r *http.Request) { return } - p, err := pgconn.GetProjectByKey(*req.ProjectKey) + p, err := e.services.pgconn.GetProjectByKey(*req.ProjectKey) if err != nil { if postgres.IsNoRowsErr(err) { responseWithError(w, http.StatusNotFound, errors.New("Project doesn't exist or is not active")) @@ -58,7 +58,7 @@ func startSessionHandlerIOS(w http.ResponseWriter, r *http.Request) { return } userUUID := getUUID(req.UserUUID) - tokenData, err := tokenizer.Parse(req.Token) + tokenData, err := e.services.tokenizer.Parse(req.Token) if err != nil { // Starting the new one dice := byte(rand.Intn(100)) // [0, 100) @@ -67,12 +67,12 @@ func startSessionHandlerIOS(w http.ResponseWriter, r *http.Request) { return } - ua := uaParser.ParseFromHTTPRequest(r) + ua := e.services.uaParser.ParseFromHTTPRequest(r) if ua == nil { responseWithError(w, http.StatusForbidden, errors.New("browser not recognized")) return } - sessionID, err := flaker.Compose(uint64(startTime.UnixMilli())) + sessionID, err := e.services.flaker.Compose(uint64(startTime.UnixMilli())) if err != nil { responseWithError(w, http.StatusInternalServerError, err) return @@ -81,10 +81,10 @@ func startSessionHandlerIOS(w http.ResponseWriter, r *http.Request) { expTime := startTime.Add(time.Duration(p.MaxSessionDuration) * time.Millisecond) tokenData = &token.TokenData{sessionID, expTime.UnixMilli()} - country := geoIP.ExtractISOCodeFromHTTPRequest(r) + country := e.services.geoIP.ExtractISOCodeFromHTTPRequest(r) // The difference with web is mostly here: - producer.Produce(cfg.TopicRawIOS, tokenData.ID, Encode(&IOSSessionStart{ + e.services.producer.Produce(e.cfg.TopicRawIOS, tokenData.ID, Encode(&IOSSessionStart{ Timestamp: req.Timestamp, ProjectID: uint64(p.ProjectID), TrackerVersion: req.TrackerVersion, @@ -99,36 +99,36 @@ func startSessionHandlerIOS(w http.ResponseWriter, r *http.Request) { } responseWithJSON(w, &response{ - Token: tokenizer.Compose(*tokenData), + Token: e.services.tokenizer.Compose(*tokenData), UserUUID: userUUID, SessionID: strconv.FormatUint(tokenData.ID, 10), - BeaconSizeLimit: cfg.BeaconSizeLimit, + BeaconSizeLimit: e.cfg.BeaconSizeLimit, }) } -func pushMessagesHandlerIOS(w http.ResponseWriter, r *http.Request) { - sessionData, err := tokenizer.ParseFromHTTPRequest(r) +func (e *Router) pushMessagesHandlerIOS(w http.ResponseWriter, r *http.Request) { + sessionData, err := e.services.tokenizer.ParseFromHTTPRequest(r) if err != nil { responseWithError(w, http.StatusUnauthorized, err) return } - pushMessages(w, r, sessionData.ID, cfg.TopicRawIOS) + e.pushMessages(w, r, sessionData.ID, e.cfg.TopicRawIOS) } -func pushLateMessagesHandlerIOS(w http.ResponseWriter, r *http.Request) { - sessionData, err := tokenizer.ParseFromHTTPRequest(r) +func (e *Router) pushLateMessagesHandlerIOS(w http.ResponseWriter, r *http.Request) { + sessionData, err := e.services.tokenizer.ParseFromHTTPRequest(r) if err != nil && err != token.EXPIRED { responseWithError(w, http.StatusUnauthorized, err) return } // Check timestamps here? - pushMessages(w, r, sessionData.ID, cfg.TopicRawIOS) + e.pushMessages(w, r, sessionData.ID, e.cfg.TopicRawIOS) } -func imagesUploadHandlerIOS(w http.ResponseWriter, r *http.Request) { +func (e *Router) imagesUploadHandlerIOS(w http.ResponseWriter, r *http.Request) { log.Printf("recieved imagerequest") - sessionData, err := tokenizer.ParseFromHTTPRequest(r) + sessionData, err := e.services.tokenizer.ParseFromHTTPRequest(r) if err != nil { // Should accept expired token? responseWithError(w, http.StatusUnauthorized, err) return @@ -164,7 +164,7 @@ func imagesUploadHandlerIOS(w http.ResponseWriter, r *http.Request) { key := prefix + fileHeader.Filename log.Printf("Uploading image... %v", key) go func() { //TODO: mime type from header - if err := s3.Upload(file, key, "image/jpeg", false); err != nil { + if err := e.services.s3.Upload(file, key, "image/jpeg", false); err != nil { log.Printf("Upload ios screen error. %v", err) } }() diff --git a/backend/services/http/handlers-web.go b/backend/services/http/handlers-web.go index 1b212e2ba..e9fc135b0 100644 --- a/backend/services/http/handlers-web.go +++ b/backend/services/http/handlers-web.go @@ -15,14 +15,14 @@ import ( "openreplay/backend/pkg/token" ) -func startSessionHandlerWeb(w http.ResponseWriter, r *http.Request) { +func (e *Router) startSessionHandlerWeb(w http.ResponseWriter, r *http.Request) { startTime := time.Now() // Check request body if r.Body == nil { responseWithError(w, http.StatusBadRequest, errors.New("request body is empty")) } - body := http.MaxBytesReader(w, r.Body, cfg.JsonSizeLimit) + body := http.MaxBytesReader(w, r.Body, e.cfg.JsonSizeLimit) defer body.Close() // Parse request body @@ -38,7 +38,7 @@ func startSessionHandlerWeb(w http.ResponseWriter, r *http.Request) { return } - p, err := pgconn.GetProjectByKey(*req.ProjectKey) + p, err := e.services.pgconn.GetProjectByKey(*req.ProjectKey) if err != nil { if postgres.IsNoRowsErr(err) { responseWithError(w, http.StatusNotFound, errors.New("Project doesn't exist or capture limit has been reached")) @@ -49,7 +49,7 @@ func startSessionHandlerWeb(w http.ResponseWriter, r *http.Request) { } userUUID := getUUID(req.UserUUID) - tokenData, err := tokenizer.Parse(req.Token) + tokenData, err := e.services.tokenizer.Parse(req.Token) if err != nil || req.Reset { // Starting the new one dice := byte(rand.Intn(100)) // [0, 100) if dice >= p.SampleRate { @@ -57,12 +57,12 @@ func startSessionHandlerWeb(w http.ResponseWriter, r *http.Request) { return } - ua := uaParser.ParseFromHTTPRequest(r) + ua := e.services.uaParser.ParseFromHTTPRequest(r) if ua == nil { responseWithError(w, http.StatusForbidden, errors.New("browser not recognized")) return } - sessionID, err := flaker.Compose(uint64(startTime.UnixNano() / 1e6)) + sessionID, err := e.services.flaker.Compose(uint64(startTime.UnixNano() / 1e6)) if err != nil { responseWithError(w, http.StatusInternalServerError, err) return @@ -71,7 +71,7 @@ func startSessionHandlerWeb(w http.ResponseWriter, r *http.Request) { expTime := startTime.Add(time.Duration(p.MaxSessionDuration) * time.Millisecond) tokenData = &token.TokenData{ID: sessionID, ExpTime: expTime.UnixNano() / 1e6} - producer.Produce(cfg.TopicRawWeb, tokenData.ID, Encode(&SessionStart{ + e.services.producer.Produce(e.cfg.TopicRawWeb, tokenData.ID, Encode(&SessionStart{ Timestamp: req.Timestamp, ProjectID: uint64(p.ProjectID), TrackerVersion: req.TrackerVersion, @@ -84,7 +84,7 @@ func startSessionHandlerWeb(w http.ResponseWriter, r *http.Request) { UserBrowserVersion: ua.BrowserVersion, UserDevice: ua.Device, UserDeviceType: ua.DeviceType, - UserCountry: geoIP.ExtractISOCodeFromHTTPRequest(r), + UserCountry: e.services.geoIP.ExtractISOCodeFromHTTPRequest(r), UserDeviceMemorySize: req.DeviceMemory, UserDeviceHeapSize: req.JsHeapSizeLimit, UserID: req.UserID, @@ -92,16 +92,16 @@ func startSessionHandlerWeb(w http.ResponseWriter, r *http.Request) { } responseWithJSON(w, &startSessionResponse{ - Token: tokenizer.Compose(*tokenData), + Token: e.services.tokenizer.Compose(*tokenData), UserUUID: userUUID, SessionID: strconv.FormatUint(tokenData.ID, 10), - BeaconSizeLimit: cfg.BeaconSizeLimit, + BeaconSizeLimit: e.cfg.BeaconSizeLimit, }) } -func pushMessagesHandlerWeb(w http.ResponseWriter, r *http.Request) { +func (e *Router) pushMessagesHandlerWeb(w http.ResponseWriter, r *http.Request) { // Check authorization - sessionData, err := tokenizer.ParseFromHTTPRequest(r) + sessionData, err := e.services.tokenizer.ParseFromHTTPRequest(r) if err != nil { responseWithError(w, http.StatusUnauthorized, err) return @@ -111,7 +111,7 @@ func pushMessagesHandlerWeb(w http.ResponseWriter, r *http.Request) { if r.Body == nil { responseWithError(w, http.StatusBadRequest, errors.New("request body is empty")) } - body := http.MaxBytesReader(w, r.Body, cfg.BeaconSizeLimit) + body := http.MaxBytesReader(w, r.Body, e.cfg.BeaconSizeLimit) defer body.Close() var handledMessages bytes.Buffer @@ -124,25 +124,25 @@ func pushMessagesHandlerWeb(w http.ResponseWriter, r *http.Request) { msg = &SetNodeAttribute{ ID: m.ID, Name: m.Name, - Value: handleURL(sessionData.ID, m.BaseURL, m.Value), + Value: e.handleURL(sessionData.ID, m.BaseURL, m.Value), } } else if m.Name == "style" { msg = &SetNodeAttribute{ ID: m.ID, Name: m.Name, - Value: handleCSS(sessionData.ID, m.BaseURL, m.Value), + Value: e.handleCSS(sessionData.ID, m.BaseURL, m.Value), } } case *SetCSSDataURLBased: msg = &SetCSSData{ ID: m.ID, - Data: handleCSS(sessionData.ID, m.BaseURL, m.Data), + Data: e.handleCSS(sessionData.ID, m.BaseURL, m.Data), } case *CSSInsertRuleURLBased: msg = &CSSInsertRule{ ID: m.ID, Index: m.Index, - Rule: handleCSS(sessionData.ID, m.BaseURL, m.Rule), + Rule: e.handleCSS(sessionData.ID, m.BaseURL, m.Rule), } } handledMessages.Write(msg.Encode()) @@ -153,7 +153,7 @@ func pushMessagesHandlerWeb(w http.ResponseWriter, r *http.Request) { } // Send processed messages to queue as array of bytes - err = producer.Produce(cfg.TopicRawWeb, sessionData.ID, handledMessages.Bytes()) + err = e.services.producer.Produce(e.cfg.TopicRawWeb, sessionData.ID, handledMessages.Bytes()) if err != nil { log.Printf("can't send processed messages to queue: %s", err) } @@ -161,12 +161,12 @@ func pushMessagesHandlerWeb(w http.ResponseWriter, r *http.Request) { w.WriteHeader(http.StatusOK) } -func notStartedHandlerWeb(w http.ResponseWriter, r *http.Request) { +func (e *Router) notStartedHandlerWeb(w http.ResponseWriter, r *http.Request) { // Check request body if r.Body == nil { responseWithError(w, http.StatusBadRequest, errors.New("request body is empty")) } - body := http.MaxBytesReader(w, r.Body, cfg.JsonSizeLimit) + body := http.MaxBytesReader(w, r.Body, e.cfg.JsonSizeLimit) defer body.Close() // Parse request body @@ -181,13 +181,13 @@ func notStartedHandlerWeb(w http.ResponseWriter, r *http.Request) { responseWithError(w, http.StatusForbidden, errors.New("ProjectKey value required")) return } - ua := uaParser.ParseFromHTTPRequest(r) // TODO?: insert anyway + ua := e.services.uaParser.ParseFromHTTPRequest(r) // TODO?: insert anyway if ua == nil { responseWithError(w, http.StatusForbidden, errors.New("browser not recognized")) return } - country := geoIP.ExtractISOCodeFromHTTPRequest(r) - err := pgconn.InsertUnstartedSession(postgres.UnstartedSession{ + country := e.services.geoIP.ExtractISOCodeFromHTTPRequest(r) + err := e.services.pgconn.InsertUnstartedSession(postgres.UnstartedSession{ ProjectKey: *req.ProjectKey, TrackerVersion: req.TrackerVersion, DoNotTrack: req.DoNotTrack, diff --git a/backend/services/http/handlers.go b/backend/services/http/handlers.go index d2d780f30..8f8979a4c 100644 --- a/backend/services/http/handlers.go +++ b/backend/services/http/handlers.go @@ -9,8 +9,8 @@ import ( gzip "github.com/klauspost/pgzip" ) -func pushMessages(w http.ResponseWriter, r *http.Request, sessionID uint64, topicName string) { - body := http.MaxBytesReader(w, r.Body, cfg.BeaconSizeLimit) +func (e *Router) pushMessages(w http.ResponseWriter, r *http.Request, sessionID uint64, topicName string) { + body := http.MaxBytesReader(w, r.Body, e.cfg.BeaconSizeLimit) defer body.Close() var reader io.ReadCloser var err error @@ -34,6 +34,6 @@ func pushMessages(w http.ResponseWriter, r *http.Request, sessionID uint64, topi responseWithError(w, http.StatusInternalServerError, err) // TODO: send error here only on staging return } - producer.Produce(topicName, sessionID, buf) // What if not able to send? + e.services.producer.Produce(topicName, sessionID, buf) // What if not able to send? w.WriteHeader(http.StatusOK) } diff --git a/backend/services/http/main.go b/backend/services/http/main.go index d053c9c2f..d0e97d137 100644 --- a/backend/services/http/main.go +++ b/backend/services/http/main.go @@ -1,151 +1,59 @@ package main import ( - "context" "log" - "net/http" + "openreplay/backend/pkg/db/cache" "openreplay/backend/pkg/db/postgres" + "openreplay/backend/pkg/pprof" + "openreplay/backend/pkg/queue" "os" "os/signal" "syscall" - - "golang.org/x/net/http2" - - "openreplay/backend/pkg/db/cache" - "openreplay/backend/pkg/env" - "openreplay/backend/pkg/flakeid" - "openreplay/backend/pkg/queue" - "openreplay/backend/pkg/queue/types" - "openreplay/backend/pkg/storage" - "openreplay/backend/pkg/token" - "openreplay/backend/pkg/url/assets" - "openreplay/backend/services/http/geoip" - "openreplay/backend/services/http/uaparser" - - "openreplay/backend/pkg/pprof" ) -// Global variables -var cfg *config -var rewriter *assets.Rewriter -var producer types.Producer -var pgconn *cache.PGCache -var flaker *flakeid.Flaker -var uaParser *uaparser.UAParser -var geoIP *geoip.GeoIP -var tokenizer *token.Tokenizer -var s3 *storage.S3 - func main() { log.SetFlags(log.LstdFlags | log.LUTC | log.Llongfile) pprof.StartProfilingServer() - // Configs - cfg = NewConfig() + // Load configuration + cfg := NewConfig() - // Queue - producer = queue.NewProducer() + // Connect to queue + producer := queue.NewProducer() defer producer.Close(15000) - // Database - pgconn = cache.NewPGCache(postgres.NewConn(env.String("POSTGRES_STRING")), 1000*60*20) - defer pgconn.Close() + // Connect to database + dbConn := cache.NewPGCache(postgres.NewConn(cfg.Postgres), 1000*60*20) + defer dbConn.Close() - // Init modules - rewriter = assets.NewRewriter(cfg.AssetsOrigin) - s3 = storage.NewS3(cfg.AWSRegion, cfg.S3BucketIOSImages) - tokenizer = token.NewTokenizer(cfg.TokenSecret) - uaParser = uaparser.NewUAParser(cfg.UAParserFile) - geoIP = geoip.NewGeoIP(cfg.MaxMinDBFile) - flaker = flakeid.NewFlaker(cfg.WorkerID) + // Build all services + services := NewServiceBuilder(cfg, producer, dbConn) - // Server - server := &http.Server{ - Addr: ":" + cfg.HTTPPort, - Handler: http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - - // TODO: agree with specification - w.Header().Set("Access-Control-Allow-Origin", "*") - w.Header().Set("Access-Control-Allow-Methods", "POST") - w.Header().Set("Access-Control-Allow-Headers", "Content-Type,Authorization") - if r.Method == http.MethodOptions { - w.Header().Set("Cache-Control", "max-age=86400") - w.WriteHeader(http.StatusOK) - return - } - - log.Printf("Request: %v - %v ", r.Method, r.URL.Path) - - switch r.URL.Path { - case "/": - w.WriteHeader(http.StatusOK) - case "/v1/web/not-started": - switch r.Method { - case http.MethodPost: - notStartedHandlerWeb(w, r) - default: - w.WriteHeader(http.StatusMethodNotAllowed) - } - case "/v1/web/start": - switch r.Method { - case http.MethodPost: - startSessionHandlerWeb(w, r) - default: - w.WriteHeader(http.StatusMethodNotAllowed) - } - case "/v1/web/i": - switch r.Method { - case http.MethodPost: - pushMessagesHandlerWeb(w, r) - default: - w.WriteHeader(http.StatusMethodNotAllowed) - } - case "/v1/ios/start": - switch r.Method { - case http.MethodPost: - startSessionHandlerIOS(w, r) - default: - w.WriteHeader(http.StatusMethodNotAllowed) - } - case "/v1/ios/i": - switch r.Method { - case http.MethodPost: - pushMessagesHandlerIOS(w, r) - default: - w.WriteHeader(http.StatusMethodNotAllowed) - } - case "/v1/ios/late": - switch r.Method { - case http.MethodPost: - pushLateMessagesHandlerIOS(w, r) - default: - w.WriteHeader(http.StatusMethodNotAllowed) - } - case "/v1/ios/images": - switch r.Method { - case http.MethodPost: - imagesUploadHandlerIOS(w, r) - default: - w.WriteHeader(http.StatusMethodNotAllowed) - } - default: - w.WriteHeader(http.StatusNotFound) - } - }), + // Init server's routes + router, err := NewRouter(cfg, services) + if err != nil { + log.Fatalf("failed while creating engine: %s", err) } - http2.ConfigureServer(server, nil) + // Init server + server, err := NewServer(router.GetHandler(), cfg.HTTPHost, cfg.HTTPPort, cfg.HTTPTimeout) + if err != nil { + log.Fatalf("failed while creating server: %s", err) + } + + // Run server go func() { - if err := server.ListenAndServe(); err != nil { + if err := server.Start(); err != nil { log.Printf("Server error: %v\n", err) log.Fatal("Server error") } }() log.Printf("Server successfully started on port %v\n", cfg.HTTPPort) + // Wait stop signal to shut down server gracefully sigchan := make(chan os.Signal, 1) signal.Notify(sigchan, syscall.SIGINT, syscall.SIGTERM) <-sigchan log.Printf("Shutting down the server\n") - server.Shutdown(context.Background()) + server.Stop() } diff --git a/backend/services/http/router.go b/backend/services/http/router.go new file mode 100644 index 000000000..af624e32c --- /dev/null +++ b/backend/services/http/router.go @@ -0,0 +1,68 @@ +package main + +import ( + "github.com/gorilla/mux" + "log" + "net/http" +) + +type Router struct { + router *mux.Router + cfg *config + services *ServiceBuilder +} + +func NewRouter(cfg *config, services *ServiceBuilder) (*Router, error) { + e := &Router{ + cfg: cfg, + services: services, + } + e.init() + return e, nil +} + +func (e *Router) init() { + e.router = mux.NewRouter() + // Root path + e.router.HandleFunc("/", e.root).Methods("POST") + + // Web handlers + e.router.HandleFunc("/v1/web/not-started", e.notStartedHandlerWeb).Methods("POST") + e.router.HandleFunc("/v1/web/start", e.startSessionHandlerWeb).Methods("POST") + e.router.HandleFunc("/v1/web/i", e.pushMessagesHandlerWeb).Methods("POST") + + // iOS handlers + e.router.HandleFunc("/v1/ios/start", e.startSessionHandlerIOS).Methods("POST") + e.router.HandleFunc("/v1/ios/i", e.pushMessagesHandlerIOS).Methods("POST") + e.router.HandleFunc("/v1/ios/late", e.pushLateMessagesHandlerIOS).Methods("POST") + e.router.HandleFunc("/v1/ios/images", e.imagesUploadHandlerIOS).Methods("POST") + + // CORS middleware + e.router.Use(e.corsMiddleware) +} + +func (e *Router) root(w http.ResponseWriter, r *http.Request) { + w.WriteHeader(http.StatusOK) +} + +func (e *Router) corsMiddleware(next http.Handler) http.Handler { + return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + // Prepare headers for preflight requests + w.Header().Set("Access-Control-Allow-Origin", "*") + w.Header().Set("Access-Control-Allow-Methods", "POST") + w.Header().Set("Access-Control-Allow-Headers", "Content-Type,Authorization") + if r.Method == http.MethodOptions { + w.Header().Set("Cache-Control", "max-age=86400") + w.WriteHeader(http.StatusOK) + return + } + log.Printf("Request: %v - %v ", r.Method, r.URL.Path) + + // Serve request + next.ServeHTTP(w, r) + }) +} + +func (e *Router) GetHandler() http.Handler { + return e.router +} diff --git a/backend/services/http/server.go b/backend/services/http/server.go new file mode 100644 index 000000000..2b6056c20 --- /dev/null +++ b/backend/services/http/server.go @@ -0,0 +1,46 @@ +package main + +import ( + "context" + "errors" + "fmt" + "golang.org/x/net/http2" + "log" + "net/http" + "time" +) + +type Server struct { + server *http.Server +} + +func NewServer(handler http.Handler, host, port string, timeout time.Duration) (*Server, error) { + switch { + case port == "": + return nil, errors.New("empty server port") + case handler == nil: + return nil, errors.New("empty handler") + case timeout < 1: + return nil, fmt.Errorf("invalid timeout %d", timeout) + } + server := &http.Server{ + Addr: fmt.Sprintf("%s:%s", host, port), + Handler: handler, + ReadTimeout: timeout, + WriteTimeout: timeout, + } + if err := http2.ConfigureServer(server, nil); err != nil { + log.Printf("can't configure http2 server: %s", err) + } + return &Server{ + server: server, + }, nil +} + +func (s *Server) Start() error { + return s.server.ListenAndServe() +} + +func (s *Server) Stop() { + s.server.Shutdown(context.Background()) +} diff --git a/backend/services/http/service.go b/backend/services/http/service.go new file mode 100644 index 000000000..d7eda7720 --- /dev/null +++ b/backend/services/http/service.go @@ -0,0 +1,36 @@ +package main + +import ( + "openreplay/backend/pkg/db/cache" + "openreplay/backend/pkg/flakeid" + "openreplay/backend/pkg/queue/types" + "openreplay/backend/pkg/storage" + "openreplay/backend/pkg/token" + "openreplay/backend/pkg/url/assets" + "openreplay/backend/services/http/geoip" + "openreplay/backend/services/http/uaparser" +) + +type ServiceBuilder struct { + pgconn *cache.PGCache + producer types.Producer + rewriter *assets.Rewriter + flaker *flakeid.Flaker + uaParser *uaparser.UAParser + geoIP *geoip.GeoIP + tokenizer *token.Tokenizer + s3 *storage.S3 +} + +func NewServiceBuilder(cfg *config, producer types.Producer, pgconn *cache.PGCache) *ServiceBuilder { + return &ServiceBuilder{ + pgconn: pgconn, + producer: producer, + rewriter: assets.NewRewriter(cfg.AssetsOrigin), + s3: storage.NewS3(cfg.AWSRegion, cfg.S3BucketIOSImages), + tokenizer: token.NewTokenizer(cfg.TokenSecret), + uaParser: uaparser.NewUAParser(cfg.UAParserFile), + geoIP: geoip.NewGeoIP(cfg.MaxMinDBFile), + flaker: flakeid.NewFlaker(cfg.WorkerID), + } +} From f01ef3ea03d0c72cc1ff5398f9703d2d7cab568b Mon Sep 17 00:00:00 2001 From: Alexander Zavorotynskiy Date: Mon, 2 May 2022 14:47:13 +0200 Subject: [PATCH 43/91] Made a correct project structure for http service --- backend/{services => cmd}/http/README.md | 0 backend/{services => cmd}/http/main.go | 9 +++++---- backend/{services => internal}/http/assets.go | 2 +- backend/{services => internal}/http/config.go | 2 +- backend/{services => internal}/http/geoip/geoip.go | 0 backend/{services => internal}/http/geoip/http.go | 0 backend/{services => internal}/http/handlers-ios.go | 2 +- backend/{services => internal}/http/handlers-web.go | 2 +- backend/{services => internal}/http/handlers.go | 2 +- backend/{services => internal}/http/ios-device.go | 2 +- backend/{services => internal}/http/model.go | 2 +- backend/{services => internal}/http/response.go | 2 +- backend/{services => internal}/http/router.go | 2 +- backend/{services => internal}/http/server.go | 2 +- backend/{services => internal}/http/service.go | 6 +++--- backend/{services => internal}/http/uaparser/http.go | 0 backend/{services => internal}/http/uaparser/uaparser.go | 0 backend/{services => internal}/http/uuid.go | 2 +- 18 files changed, 19 insertions(+), 18 deletions(-) rename backend/{services => cmd}/http/README.md (100%) rename backend/{services => cmd}/http/main.go (81%) rename backend/{services => internal}/http/assets.go (98%) rename backend/{services => internal}/http/config.go (99%) rename backend/{services => internal}/http/geoip/geoip.go (100%) rename backend/{services => internal}/http/geoip/http.go (100%) rename backend/{services => internal}/http/handlers-ios.go (99%) rename backend/{services => internal}/http/handlers-web.go (99%) rename backend/{services => internal}/http/handlers.go (98%) rename backend/{services => internal}/http/ios-device.go (99%) rename backend/{services => internal}/http/model.go (98%) rename backend/{services => internal}/http/response.go (97%) rename backend/{services => internal}/http/router.go (99%) rename backend/{services => internal}/http/server.go (98%) rename backend/{services => internal}/http/service.go (90%) rename backend/{services => internal}/http/uaparser/http.go (100%) rename backend/{services => internal}/http/uaparser/uaparser.go (100%) rename backend/{services => internal}/http/uuid.go (93%) diff --git a/backend/services/http/README.md b/backend/cmd/http/README.md similarity index 100% rename from backend/services/http/README.md rename to backend/cmd/http/README.md diff --git a/backend/services/http/main.go b/backend/cmd/http/main.go similarity index 81% rename from backend/services/http/main.go rename to backend/cmd/http/main.go index d0e97d137..a7c1a4498 100644 --- a/backend/services/http/main.go +++ b/backend/cmd/http/main.go @@ -2,6 +2,7 @@ package main import ( "log" + "openreplay/backend/internal/http" "openreplay/backend/pkg/db/cache" "openreplay/backend/pkg/db/postgres" "openreplay/backend/pkg/pprof" @@ -16,7 +17,7 @@ func main() { pprof.StartProfilingServer() // Load configuration - cfg := NewConfig() + cfg := http.NewConfig() // Connect to queue producer := queue.NewProducer() @@ -27,16 +28,16 @@ func main() { defer dbConn.Close() // Build all services - services := NewServiceBuilder(cfg, producer, dbConn) + services := http.NewServiceBuilder(cfg, producer, dbConn) // Init server's routes - router, err := NewRouter(cfg, services) + router, err := http.NewRouter(cfg, services) if err != nil { log.Fatalf("failed while creating engine: %s", err) } // Init server - server, err := NewServer(router.GetHandler(), cfg.HTTPHost, cfg.HTTPPort, cfg.HTTPTimeout) + server, err := http.NewServer(router.GetHandler(), cfg.HTTPHost, cfg.HTTPPort, cfg.HTTPTimeout) if err != nil { log.Fatalf("failed while creating server: %s", err) } diff --git a/backend/services/http/assets.go b/backend/internal/http/assets.go similarity index 98% rename from backend/services/http/assets.go rename to backend/internal/http/assets.go index 0948984b0..f77c911f0 100644 --- a/backend/services/http/assets.go +++ b/backend/internal/http/assets.go @@ -1,4 +1,4 @@ -package main +package http import ( "openreplay/backend/pkg/messages" diff --git a/backend/services/http/config.go b/backend/internal/http/config.go similarity index 99% rename from backend/services/http/config.go rename to backend/internal/http/config.go index 4b29afb9d..56ca62067 100644 --- a/backend/services/http/config.go +++ b/backend/internal/http/config.go @@ -1,4 +1,4 @@ -package main +package http import ( "openreplay/backend/pkg/env" diff --git a/backend/services/http/geoip/geoip.go b/backend/internal/http/geoip/geoip.go similarity index 100% rename from backend/services/http/geoip/geoip.go rename to backend/internal/http/geoip/geoip.go diff --git a/backend/services/http/geoip/http.go b/backend/internal/http/geoip/http.go similarity index 100% rename from backend/services/http/geoip/http.go rename to backend/internal/http/geoip/http.go diff --git a/backend/services/http/handlers-ios.go b/backend/internal/http/handlers-ios.go similarity index 99% rename from backend/services/http/handlers-ios.go rename to backend/internal/http/handlers-ios.go index 4591a7d72..e92973f5f 100644 --- a/backend/services/http/handlers-ios.go +++ b/backend/internal/http/handlers-ios.go @@ -1,4 +1,4 @@ -package main +package http import ( "encoding/json" diff --git a/backend/services/http/handlers-web.go b/backend/internal/http/handlers-web.go similarity index 99% rename from backend/services/http/handlers-web.go rename to backend/internal/http/handlers-web.go index e9fc135b0..38ca89fb2 100644 --- a/backend/services/http/handlers-web.go +++ b/backend/internal/http/handlers-web.go @@ -1,4 +1,4 @@ -package main +package http import ( "bytes" diff --git a/backend/services/http/handlers.go b/backend/internal/http/handlers.go similarity index 98% rename from backend/services/http/handlers.go rename to backend/internal/http/handlers.go index 8f8979a4c..1854786fc 100644 --- a/backend/services/http/handlers.go +++ b/backend/internal/http/handlers.go @@ -1,4 +1,4 @@ -package main +package http import ( "io" diff --git a/backend/services/http/ios-device.go b/backend/internal/http/ios-device.go similarity index 99% rename from backend/services/http/ios-device.go rename to backend/internal/http/ios-device.go index 6a09e5e07..b5156d6dc 100644 --- a/backend/services/http/ios-device.go +++ b/backend/internal/http/ios-device.go @@ -1,4 +1,4 @@ -package main +package http import ( "strings" diff --git a/backend/services/http/model.go b/backend/internal/http/model.go similarity index 98% rename from backend/services/http/model.go rename to backend/internal/http/model.go index 5a7dd28bc..969bafe9c 100644 --- a/backend/services/http/model.go +++ b/backend/internal/http/model.go @@ -1,4 +1,4 @@ -package main +package http type startSessionRequest struct { Token string `json:"token"` diff --git a/backend/services/http/response.go b/backend/internal/http/response.go similarity index 97% rename from backend/services/http/response.go rename to backend/internal/http/response.go index 11d9b328d..2a3f14bea 100644 --- a/backend/services/http/response.go +++ b/backend/internal/http/response.go @@ -1,4 +1,4 @@ -package main +package http import ( "encoding/json" diff --git a/backend/services/http/router.go b/backend/internal/http/router.go similarity index 99% rename from backend/services/http/router.go rename to backend/internal/http/router.go index af624e32c..2fe1433a8 100644 --- a/backend/services/http/router.go +++ b/backend/internal/http/router.go @@ -1,4 +1,4 @@ -package main +package http import ( "github.com/gorilla/mux" diff --git a/backend/services/http/server.go b/backend/internal/http/server.go similarity index 98% rename from backend/services/http/server.go rename to backend/internal/http/server.go index 2b6056c20..ea7b08841 100644 --- a/backend/services/http/server.go +++ b/backend/internal/http/server.go @@ -1,4 +1,4 @@ -package main +package http import ( "context" diff --git a/backend/services/http/service.go b/backend/internal/http/service.go similarity index 90% rename from backend/services/http/service.go rename to backend/internal/http/service.go index d7eda7720..2bf46315b 100644 --- a/backend/services/http/service.go +++ b/backend/internal/http/service.go @@ -1,14 +1,14 @@ -package main +package http import ( + "openreplay/backend/internal/http/geoip" + "openreplay/backend/internal/http/uaparser" "openreplay/backend/pkg/db/cache" "openreplay/backend/pkg/flakeid" "openreplay/backend/pkg/queue/types" "openreplay/backend/pkg/storage" "openreplay/backend/pkg/token" "openreplay/backend/pkg/url/assets" - "openreplay/backend/services/http/geoip" - "openreplay/backend/services/http/uaparser" ) type ServiceBuilder struct { diff --git a/backend/services/http/uaparser/http.go b/backend/internal/http/uaparser/http.go similarity index 100% rename from backend/services/http/uaparser/http.go rename to backend/internal/http/uaparser/http.go diff --git a/backend/services/http/uaparser/uaparser.go b/backend/internal/http/uaparser/uaparser.go similarity index 100% rename from backend/services/http/uaparser/uaparser.go rename to backend/internal/http/uaparser/uaparser.go diff --git a/backend/services/http/uuid.go b/backend/internal/http/uuid.go similarity index 93% rename from backend/services/http/uuid.go rename to backend/internal/http/uuid.go index 87704d740..6ce1611a9 100644 --- a/backend/services/http/uuid.go +++ b/backend/internal/http/uuid.go @@ -1,4 +1,4 @@ -package main +package http import ( "github.com/google/uuid" From c347198fc170b1098030243d77ce5d31007c245e Mon Sep 17 00:00:00 2001 From: Alexander Zavorotynskiy Date: Mon, 2 May 2022 15:05:45 +0200 Subject: [PATCH 44/91] Moved http handlers to a separate dir --- backend/cmd/http/main.go | 6 +- backend/internal/{http => config}/config.go | 10 +-- backend/internal/http/model.go | 6 +- backend/internal/http/response.go | 6 +- backend/internal/http/service.go | 35 +++++----- backend/internal/{http => router}/assets.go | 8 +-- .../internal/{http => router}/handlers-ios.go | 62 ++++++++--------- .../internal/{http => router}/handlers-web.go | 66 ++++++++++--------- backend/internal/{http => router}/handlers.go | 12 ++-- backend/internal/{http => router}/router.go | 10 +-- backend/internal/{http => uuid}/uuid.go | 4 +- 11 files changed, 117 insertions(+), 108 deletions(-) rename backend/internal/{http => config}/config.go (91%) rename backend/internal/{http => router}/assets.go (82%) rename backend/internal/{http => router}/handlers-ios.go (63%) rename backend/internal/{http => router}/handlers-web.go (65%) rename backend/internal/{http => router}/handlers.go (68%) rename backend/internal/{http => router}/router.go (87%) rename backend/internal/{http => uuid}/uuid.go (76%) diff --git a/backend/cmd/http/main.go b/backend/cmd/http/main.go index a7c1a4498..fd6dbd453 100644 --- a/backend/cmd/http/main.go +++ b/backend/cmd/http/main.go @@ -2,7 +2,9 @@ package main import ( "log" + "openreplay/backend/internal/config" "openreplay/backend/internal/http" + "openreplay/backend/internal/router" "openreplay/backend/pkg/db/cache" "openreplay/backend/pkg/db/postgres" "openreplay/backend/pkg/pprof" @@ -17,7 +19,7 @@ func main() { pprof.StartProfilingServer() // Load configuration - cfg := http.NewConfig() + cfg := config.New() // Connect to queue producer := queue.NewProducer() @@ -31,7 +33,7 @@ func main() { services := http.NewServiceBuilder(cfg, producer, dbConn) // Init server's routes - router, err := http.NewRouter(cfg, services) + router, err := router.NewRouter(cfg, services) if err != nil { log.Fatalf("failed while creating engine: %s", err) } diff --git a/backend/internal/http/config.go b/backend/internal/config/config.go similarity index 91% rename from backend/internal/http/config.go rename to backend/internal/config/config.go index 56ca62067..45f957d1c 100644 --- a/backend/internal/http/config.go +++ b/backend/internal/config/config.go @@ -1,11 +1,11 @@ -package http +package config import ( "openreplay/backend/pkg/env" "time" ) -type config struct { +type Config struct { HTTPHost string HTTPPort string HTTPTimeout time.Duration @@ -25,9 +25,9 @@ type config struct { WorkerID uint16 } -func NewConfig() *config { - return &config{ - HTTPHost: "", +func New() *Config { + return &Config{ + HTTPHost: "", // empty by default HTTPPort: env.String("HTTP_PORT"), HTTPTimeout: time.Second * 60, TopicRawWeb: env.String("TOPIC_RAW_WEB"), diff --git a/backend/internal/http/model.go b/backend/internal/http/model.go index 969bafe9c..3fe4abd3d 100644 --- a/backend/internal/http/model.go +++ b/backend/internal/http/model.go @@ -1,6 +1,6 @@ package http -type startSessionRequest struct { +type StartSessionRequest struct { Token string `json:"token"` UserUUID *string `json:"userUUID"` RevID string `json:"revID"` @@ -14,7 +14,7 @@ type startSessionRequest struct { UserID string `json:"userID"` } -type startSessionResponse struct { +type StartSessionResponse struct { Timestamp int64 `json:"timestamp"` Delay int64 `json:"delay"` Token string `json:"token"` @@ -23,7 +23,7 @@ type startSessionResponse struct { BeaconSizeLimit int64 `json:"beaconSizeLimit"` } -type notStartedRequest struct { +type NotStartedRequest struct { ProjectKey *string `json:"projectKey"` TrackerVersion string `json:"trackerVersion"` DoNotTrack bool `json:"DoNotTrack"` diff --git a/backend/internal/http/response.go b/backend/internal/http/response.go index 2a3f14bea..1b87c33b9 100644 --- a/backend/internal/http/response.go +++ b/backend/internal/http/response.go @@ -6,7 +6,7 @@ import ( "net/http" ) -func responseWithJSON(w http.ResponseWriter, res interface{}) { +func ResponseWithJSON(w http.ResponseWriter, res interface{}) { body, err := json.Marshal(res) if err != nil { log.Println(err) @@ -15,10 +15,10 @@ func responseWithJSON(w http.ResponseWriter, res interface{}) { w.Write(body) } -func responseWithError(w http.ResponseWriter, code int, err error) { +func ResponseWithError(w http.ResponseWriter, code int, err error) { type response struct { Error string `json:"error"` } w.WriteHeader(code) - responseWithJSON(w, &response{err.Error()}) + ResponseWithJSON(w, &response{err.Error()}) } diff --git a/backend/internal/http/service.go b/backend/internal/http/service.go index 2bf46315b..8f553db32 100644 --- a/backend/internal/http/service.go +++ b/backend/internal/http/service.go @@ -1,6 +1,7 @@ package http import ( + "openreplay/backend/internal/config" "openreplay/backend/internal/http/geoip" "openreplay/backend/internal/http/uaparser" "openreplay/backend/pkg/db/cache" @@ -12,25 +13,25 @@ import ( ) type ServiceBuilder struct { - pgconn *cache.PGCache - producer types.Producer - rewriter *assets.Rewriter - flaker *flakeid.Flaker - uaParser *uaparser.UAParser - geoIP *geoip.GeoIP - tokenizer *token.Tokenizer - s3 *storage.S3 + Pgconn *cache.PGCache + Producer types.Producer + Rewriter *assets.Rewriter + Flaker *flakeid.Flaker + UaParser *uaparser.UAParser + GeoIP *geoip.GeoIP + Tokenizer *token.Tokenizer + S3 *storage.S3 } -func NewServiceBuilder(cfg *config, producer types.Producer, pgconn *cache.PGCache) *ServiceBuilder { +func NewServiceBuilder(cfg *config.Config, producer types.Producer, pgconn *cache.PGCache) *ServiceBuilder { return &ServiceBuilder{ - pgconn: pgconn, - producer: producer, - rewriter: assets.NewRewriter(cfg.AssetsOrigin), - s3: storage.NewS3(cfg.AWSRegion, cfg.S3BucketIOSImages), - tokenizer: token.NewTokenizer(cfg.TokenSecret), - uaParser: uaparser.NewUAParser(cfg.UAParserFile), - geoIP: geoip.NewGeoIP(cfg.MaxMinDBFile), - flaker: flakeid.NewFlaker(cfg.WorkerID), + Pgconn: pgconn, + Producer: producer, + Rewriter: assets.NewRewriter(cfg.AssetsOrigin), + S3: storage.NewS3(cfg.AWSRegion, cfg.S3BucketIOSImages), + Tokenizer: token.NewTokenizer(cfg.TokenSecret), + UaParser: uaparser.NewUAParser(cfg.UAParserFile), + GeoIP: geoip.NewGeoIP(cfg.MaxMinDBFile), + Flaker: flakeid.NewFlaker(cfg.WorkerID), } } diff --git a/backend/internal/http/assets.go b/backend/internal/router/assets.go similarity index 82% rename from backend/internal/http/assets.go rename to backend/internal/router/assets.go index f77c911f0..42347f224 100644 --- a/backend/internal/http/assets.go +++ b/backend/internal/router/assets.go @@ -1,4 +1,4 @@ -package http +package router import ( "openreplay/backend/pkg/messages" @@ -7,7 +7,7 @@ import ( func (e *Router) sendAssetForCache(sessionID uint64, baseURL string, relativeURL string) { if fullURL, cacheable := assets.GetFullCachableURL(baseURL, relativeURL); cacheable { - e.services.producer.Produce(e.cfg.TopicCache, sessionID, messages.Encode(&messages.AssetCache{ + e.services.Producer.Produce(e.cfg.TopicCache, sessionID, messages.Encode(&messages.AssetCache{ URL: fullURL, })) } @@ -22,7 +22,7 @@ func (e *Router) sendAssetsForCacheFromCSS(sessionID uint64, baseURL string, css func (e *Router) handleURL(sessionID uint64, baseURL string, url string) string { if e.cfg.CacheAssets { e.sendAssetForCache(sessionID, baseURL, url) - return e.services.rewriter.RewriteURL(sessionID, baseURL, url) + return e.services.Rewriter.RewriteURL(sessionID, baseURL, url) } return assets.ResolveURL(baseURL, url) } @@ -30,7 +30,7 @@ func (e *Router) handleURL(sessionID uint64, baseURL string, url string) string func (e *Router) handleCSS(sessionID uint64, baseURL string, css string) string { if e.cfg.CacheAssets { e.sendAssetsForCacheFromCSS(sessionID, baseURL, css) - return e.services.rewriter.RewriteCSS(sessionID, baseURL, css) + return e.services.Rewriter.RewriteCSS(sessionID, baseURL, css) } return assets.ResolveCSS(baseURL, css) } diff --git a/backend/internal/http/handlers-ios.go b/backend/internal/router/handlers-ios.go similarity index 63% rename from backend/internal/http/handlers-ios.go rename to backend/internal/router/handlers-ios.go index e92973f5f..e1853f555 100644 --- a/backend/internal/http/handlers-ios.go +++ b/backend/internal/router/handlers-ios.go @@ -1,4 +1,4 @@ -package http +package router import ( "encoding/json" @@ -6,6 +6,8 @@ import ( "log" "math/rand" "net/http" + http2 "openreplay/backend/internal/http" + "openreplay/backend/internal/uuid" "strconv" "time" @@ -39,52 +41,52 @@ func (e *Router) startSessionHandlerIOS(w http.ResponseWriter, r *http.Request) body := http.MaxBytesReader(w, r.Body, e.cfg.JsonSizeLimit) defer body.Close() if err := json.NewDecoder(body).Decode(req); err != nil { - responseWithError(w, http.StatusBadRequest, err) + http2.ResponseWithError(w, http.StatusBadRequest, err) return } if req.ProjectKey == nil { - responseWithError(w, http.StatusForbidden, errors.New("ProjectKey value required")) + http2.ResponseWithError(w, http.StatusForbidden, errors.New("ProjectKey value required")) return } - p, err := e.services.pgconn.GetProjectByKey(*req.ProjectKey) + p, err := e.services.Pgconn.GetProjectByKey(*req.ProjectKey) if err != nil { if postgres.IsNoRowsErr(err) { - responseWithError(w, http.StatusNotFound, errors.New("Project doesn't exist or is not active")) + http2.ResponseWithError(w, http.StatusNotFound, errors.New("Project doesn't exist or is not active")) } else { - responseWithError(w, http.StatusInternalServerError, err) // TODO: send error here only on staging + http2.ResponseWithError(w, http.StatusInternalServerError, err) // TODO: send error here only on staging } return } - userUUID := getUUID(req.UserUUID) - tokenData, err := e.services.tokenizer.Parse(req.Token) + userUUID := uuid.GetUUID(req.UserUUID) + tokenData, err := e.services.Tokenizer.Parse(req.Token) if err != nil { // Starting the new one dice := byte(rand.Intn(100)) // [0, 100) if dice >= p.SampleRate { - responseWithError(w, http.StatusForbidden, errors.New("cancel")) + http2.ResponseWithError(w, http.StatusForbidden, errors.New("cancel")) return } - ua := e.services.uaParser.ParseFromHTTPRequest(r) + ua := e.services.UaParser.ParseFromHTTPRequest(r) if ua == nil { - responseWithError(w, http.StatusForbidden, errors.New("browser not recognized")) + http2.ResponseWithError(w, http.StatusForbidden, errors.New("browser not recognized")) return } - sessionID, err := e.services.flaker.Compose(uint64(startTime.UnixMilli())) + sessionID, err := e.services.Flaker.Compose(uint64(startTime.UnixMilli())) if err != nil { - responseWithError(w, http.StatusInternalServerError, err) + http2.ResponseWithError(w, http.StatusInternalServerError, err) return } // TODO: if EXPIRED => send message for two sessions association expTime := startTime.Add(time.Duration(p.MaxSessionDuration) * time.Millisecond) tokenData = &token.TokenData{sessionID, expTime.UnixMilli()} - country := e.services.geoIP.ExtractISOCodeFromHTTPRequest(r) + country := e.services.GeoIP.ExtractISOCodeFromHTTPRequest(r) // The difference with web is mostly here: - e.services.producer.Produce(e.cfg.TopicRawIOS, tokenData.ID, Encode(&IOSSessionStart{ + e.services.Producer.Produce(e.cfg.TopicRawIOS, tokenData.ID, Encode(&IOSSessionStart{ Timestamp: req.Timestamp, ProjectID: uint64(p.ProjectID), TrackerVersion: req.TrackerVersion, @@ -92,14 +94,14 @@ func (e *Router) startSessionHandlerIOS(w http.ResponseWriter, r *http.Request) UserUUID: userUUID, UserOS: "IOS", UserOSVersion: req.UserOSVersion, - UserDevice: MapIOSDevice(req.UserDevice), - UserDeviceType: GetIOSDeviceType(req.UserDevice), + UserDevice: http2.MapIOSDevice(req.UserDevice), + UserDeviceType: http2.GetIOSDeviceType(req.UserDevice), UserCountry: country, })) } - responseWithJSON(w, &response{ - Token: e.services.tokenizer.Compose(*tokenData), + http2.ResponseWithJSON(w, &response{ + Token: e.services.Tokenizer.Compose(*tokenData), UserUUID: userUUID, SessionID: strconv.FormatUint(tokenData.ID, 10), BeaconSizeLimit: e.cfg.BeaconSizeLimit, @@ -107,18 +109,18 @@ func (e *Router) startSessionHandlerIOS(w http.ResponseWriter, r *http.Request) } func (e *Router) pushMessagesHandlerIOS(w http.ResponseWriter, r *http.Request) { - sessionData, err := e.services.tokenizer.ParseFromHTTPRequest(r) + sessionData, err := e.services.Tokenizer.ParseFromHTTPRequest(r) if err != nil { - responseWithError(w, http.StatusUnauthorized, err) + http2.ResponseWithError(w, http.StatusUnauthorized, err) return } e.pushMessages(w, r, sessionData.ID, e.cfg.TopicRawIOS) } func (e *Router) pushLateMessagesHandlerIOS(w http.ResponseWriter, r *http.Request) { - sessionData, err := e.services.tokenizer.ParseFromHTTPRequest(r) + sessionData, err := e.services.Tokenizer.ParseFromHTTPRequest(r) if err != nil && err != token.EXPIRED { - responseWithError(w, http.StatusUnauthorized, err) + http2.ResponseWithError(w, http.StatusUnauthorized, err) return } // Check timestamps here? @@ -128,9 +130,9 @@ func (e *Router) pushLateMessagesHandlerIOS(w http.ResponseWriter, r *http.Reque func (e *Router) imagesUploadHandlerIOS(w http.ResponseWriter, r *http.Request) { log.Printf("recieved imagerequest") - sessionData, err := e.services.tokenizer.ParseFromHTTPRequest(r) + sessionData, err := e.services.Tokenizer.ParseFromHTTPRequest(r) if err != nil { // Should accept expired token? - responseWithError(w, http.StatusUnauthorized, err) + http2.ResponseWithError(w, http.StatusUnauthorized, err) return } @@ -138,18 +140,18 @@ func (e *Router) imagesUploadHandlerIOS(w http.ResponseWriter, r *http.Request) defer r.Body.Close() err = r.ParseMultipartForm(1e6) // ~1Mb if err == http.ErrNotMultipart || err == http.ErrMissingBoundary { - responseWithError(w, http.StatusUnsupportedMediaType, err) + http2.ResponseWithError(w, http.StatusUnsupportedMediaType, err) // } else if err == multipart.ErrMessageTooLarge // if non-files part exceeds 10 MB } else if err != nil { - responseWithError(w, http.StatusInternalServerError, err) // TODO: send error here only on staging + http2.ResponseWithError(w, http.StatusInternalServerError, err) // TODO: send error here only on staging } if r.MultipartForm == nil { - responseWithError(w, http.StatusInternalServerError, errors.New("Multipart not parsed")) + http2.ResponseWithError(w, http.StatusInternalServerError, errors.New("Multipart not parsed")) } if len(r.MultipartForm.Value["projectKey"]) == 0 { - responseWithError(w, http.StatusBadRequest, errors.New("projectKey parameter missing")) // status for missing/wrong parameter? + http2.ResponseWithError(w, http.StatusBadRequest, errors.New("projectKey parameter missing")) // status for missing/wrong parameter? return } @@ -164,7 +166,7 @@ func (e *Router) imagesUploadHandlerIOS(w http.ResponseWriter, r *http.Request) key := prefix + fileHeader.Filename log.Printf("Uploading image... %v", key) go func() { //TODO: mime type from header - if err := e.services.s3.Upload(file, key, "image/jpeg", false); err != nil { + if err := e.services.S3.Upload(file, key, "image/jpeg", false); err != nil { log.Printf("Upload ios screen error. %v", err) } }() diff --git a/backend/internal/http/handlers-web.go b/backend/internal/router/handlers-web.go similarity index 65% rename from backend/internal/http/handlers-web.go rename to backend/internal/router/handlers-web.go index 38ca89fb2..7bf3b6e7f 100644 --- a/backend/internal/http/handlers-web.go +++ b/backend/internal/router/handlers-web.go @@ -1,4 +1,4 @@ -package http +package router import ( "bytes" @@ -7,6 +7,8 @@ import ( "log" "math/rand" "net/http" + http2 "openreplay/backend/internal/http" + "openreplay/backend/internal/uuid" "strconv" "time" @@ -20,58 +22,58 @@ func (e *Router) startSessionHandlerWeb(w http.ResponseWriter, r *http.Request) // Check request body if r.Body == nil { - responseWithError(w, http.StatusBadRequest, errors.New("request body is empty")) + http2.ResponseWithError(w, http.StatusBadRequest, errors.New("request body is empty")) } body := http.MaxBytesReader(w, r.Body, e.cfg.JsonSizeLimit) defer body.Close() // Parse request body - req := &startSessionRequest{} + req := &http2.StartSessionRequest{} if err := json.NewDecoder(body).Decode(req); err != nil { - responseWithError(w, http.StatusBadRequest, err) + http2.ResponseWithError(w, http.StatusBadRequest, err) return } // Handler's logic if req.ProjectKey == nil { - responseWithError(w, http.StatusForbidden, errors.New("ProjectKey value required")) + http2.ResponseWithError(w, http.StatusForbidden, errors.New("ProjectKey value required")) return } - p, err := e.services.pgconn.GetProjectByKey(*req.ProjectKey) + p, err := e.services.Pgconn.GetProjectByKey(*req.ProjectKey) if err != nil { if postgres.IsNoRowsErr(err) { - responseWithError(w, http.StatusNotFound, errors.New("Project doesn't exist or capture limit has been reached")) + http2.ResponseWithError(w, http.StatusNotFound, errors.New("Project doesn't exist or capture limit has been reached")) } else { - responseWithError(w, http.StatusInternalServerError, err) // TODO: send error here only on staging + http2.ResponseWithError(w, http.StatusInternalServerError, err) // TODO: send error here only on staging } return } - userUUID := getUUID(req.UserUUID) - tokenData, err := e.services.tokenizer.Parse(req.Token) + userUUID := uuid.GetUUID(req.UserUUID) + tokenData, err := e.services.Tokenizer.Parse(req.Token) if err != nil || req.Reset { // Starting the new one dice := byte(rand.Intn(100)) // [0, 100) if dice >= p.SampleRate { - responseWithError(w, http.StatusForbidden, errors.New("cancel")) + http2.ResponseWithError(w, http.StatusForbidden, errors.New("cancel")) return } - ua := e.services.uaParser.ParseFromHTTPRequest(r) + ua := e.services.UaParser.ParseFromHTTPRequest(r) if ua == nil { - responseWithError(w, http.StatusForbidden, errors.New("browser not recognized")) + http2.ResponseWithError(w, http.StatusForbidden, errors.New("browser not recognized")) return } - sessionID, err := e.services.flaker.Compose(uint64(startTime.UnixNano() / 1e6)) + sessionID, err := e.services.Flaker.Compose(uint64(startTime.UnixNano() / 1e6)) if err != nil { - responseWithError(w, http.StatusInternalServerError, err) + http2.ResponseWithError(w, http.StatusInternalServerError, err) return } // TODO: if EXPIRED => send message for two sessions association expTime := startTime.Add(time.Duration(p.MaxSessionDuration) * time.Millisecond) tokenData = &token.TokenData{ID: sessionID, ExpTime: expTime.UnixNano() / 1e6} - e.services.producer.Produce(e.cfg.TopicRawWeb, tokenData.ID, Encode(&SessionStart{ + e.services.Producer.Produce(e.cfg.TopicRawWeb, tokenData.ID, Encode(&SessionStart{ Timestamp: req.Timestamp, ProjectID: uint64(p.ProjectID), TrackerVersion: req.TrackerVersion, @@ -84,15 +86,15 @@ func (e *Router) startSessionHandlerWeb(w http.ResponseWriter, r *http.Request) UserBrowserVersion: ua.BrowserVersion, UserDevice: ua.Device, UserDeviceType: ua.DeviceType, - UserCountry: e.services.geoIP.ExtractISOCodeFromHTTPRequest(r), + UserCountry: e.services.GeoIP.ExtractISOCodeFromHTTPRequest(r), UserDeviceMemorySize: req.DeviceMemory, UserDeviceHeapSize: req.JsHeapSizeLimit, UserID: req.UserID, })) } - responseWithJSON(w, &startSessionResponse{ - Token: e.services.tokenizer.Compose(*tokenData), + http2.ResponseWithJSON(w, &http2.StartSessionResponse{ + Token: e.services.Tokenizer.Compose(*tokenData), UserUUID: userUUID, SessionID: strconv.FormatUint(tokenData.ID, 10), BeaconSizeLimit: e.cfg.BeaconSizeLimit, @@ -101,15 +103,15 @@ func (e *Router) startSessionHandlerWeb(w http.ResponseWriter, r *http.Request) func (e *Router) pushMessagesHandlerWeb(w http.ResponseWriter, r *http.Request) { // Check authorization - sessionData, err := e.services.tokenizer.ParseFromHTTPRequest(r) + sessionData, err := e.services.Tokenizer.ParseFromHTTPRequest(r) if err != nil { - responseWithError(w, http.StatusUnauthorized, err) + http2.ResponseWithError(w, http.StatusUnauthorized, err) return } // Check request body if r.Body == nil { - responseWithError(w, http.StatusBadRequest, errors.New("request body is empty")) + http2.ResponseWithError(w, http.StatusBadRequest, errors.New("request body is empty")) } body := http.MaxBytesReader(w, r.Body, e.cfg.BeaconSizeLimit) defer body.Close() @@ -148,12 +150,12 @@ func (e *Router) pushMessagesHandlerWeb(w http.ResponseWriter, r *http.Request) handledMessages.Write(msg.Encode()) }) if err != nil { - responseWithError(w, http.StatusForbidden, err) + http2.ResponseWithError(w, http.StatusForbidden, err) return } // Send processed messages to queue as array of bytes - err = e.services.producer.Produce(e.cfg.TopicRawWeb, sessionData.ID, handledMessages.Bytes()) + err = e.services.Producer.Produce(e.cfg.TopicRawWeb, sessionData.ID, handledMessages.Bytes()) if err != nil { log.Printf("can't send processed messages to queue: %s", err) } @@ -164,30 +166,30 @@ func (e *Router) pushMessagesHandlerWeb(w http.ResponseWriter, r *http.Request) func (e *Router) notStartedHandlerWeb(w http.ResponseWriter, r *http.Request) { // Check request body if r.Body == nil { - responseWithError(w, http.StatusBadRequest, errors.New("request body is empty")) + http2.ResponseWithError(w, http.StatusBadRequest, errors.New("request body is empty")) } body := http.MaxBytesReader(w, r.Body, e.cfg.JsonSizeLimit) defer body.Close() // Parse request body - req := ¬StartedRequest{} + req := &http2.NotStartedRequest{} if err := json.NewDecoder(body).Decode(req); err != nil { - responseWithError(w, http.StatusBadRequest, err) + http2.ResponseWithError(w, http.StatusBadRequest, err) return } // Handler's logic if req.ProjectKey == nil { - responseWithError(w, http.StatusForbidden, errors.New("ProjectKey value required")) + http2.ResponseWithError(w, http.StatusForbidden, errors.New("ProjectKey value required")) return } - ua := e.services.uaParser.ParseFromHTTPRequest(r) // TODO?: insert anyway + ua := e.services.UaParser.ParseFromHTTPRequest(r) // TODO?: insert anyway if ua == nil { - responseWithError(w, http.StatusForbidden, errors.New("browser not recognized")) + http2.ResponseWithError(w, http.StatusForbidden, errors.New("browser not recognized")) return } - country := e.services.geoIP.ExtractISOCodeFromHTTPRequest(r) - err := e.services.pgconn.InsertUnstartedSession(postgres.UnstartedSession{ + country := e.services.GeoIP.ExtractISOCodeFromHTTPRequest(r) + err := e.services.Pgconn.InsertUnstartedSession(postgres.UnstartedSession{ ProjectKey: *req.ProjectKey, TrackerVersion: req.TrackerVersion, DoNotTrack: req.DoNotTrack, diff --git a/backend/internal/http/handlers.go b/backend/internal/router/handlers.go similarity index 68% rename from backend/internal/http/handlers.go rename to backend/internal/router/handlers.go index 1854786fc..81a055145 100644 --- a/backend/internal/http/handlers.go +++ b/backend/internal/router/handlers.go @@ -1,12 +1,12 @@ -package http +package router import ( + gzip "github.com/klauspost/pgzip" "io" "io/ioutil" "log" "net/http" - - gzip "github.com/klauspost/pgzip" + http2 "openreplay/backend/internal/http" ) func (e *Router) pushMessages(w http.ResponseWriter, r *http.Request, sessionID uint64, topicName string) { @@ -20,7 +20,7 @@ func (e *Router) pushMessages(w http.ResponseWriter, r *http.Request, sessionID reader, err = gzip.NewReader(body) if err != nil { - responseWithError(w, http.StatusInternalServerError, err) // TODO: stage-dependent responce + http2.ResponseWithError(w, http.StatusInternalServerError, err) // TODO: stage-dependent responce return } log.Println("Gzip reader init", reader) @@ -31,9 +31,9 @@ func (e *Router) pushMessages(w http.ResponseWriter, r *http.Request, sessionID log.Println("Reader after switch:", reader) buf, err := ioutil.ReadAll(reader) if err != nil { - responseWithError(w, http.StatusInternalServerError, err) // TODO: send error here only on staging + http2.ResponseWithError(w, http.StatusInternalServerError, err) // TODO: send error here only on staging return } - e.services.producer.Produce(topicName, sessionID, buf) // What if not able to send? + e.services.Producer.Produce(topicName, sessionID, buf) // What if not able to send? w.WriteHeader(http.StatusOK) } diff --git a/backend/internal/http/router.go b/backend/internal/router/router.go similarity index 87% rename from backend/internal/http/router.go rename to backend/internal/router/router.go index 2fe1433a8..c49bbf161 100644 --- a/backend/internal/http/router.go +++ b/backend/internal/router/router.go @@ -1,18 +1,20 @@ -package http +package router import ( "github.com/gorilla/mux" "log" "net/http" + "openreplay/backend/internal/config" + http2 "openreplay/backend/internal/http" ) type Router struct { router *mux.Router - cfg *config - services *ServiceBuilder + cfg *config.Config + services *http2.ServiceBuilder } -func NewRouter(cfg *config, services *ServiceBuilder) (*Router, error) { +func NewRouter(cfg *config.Config, services *http2.ServiceBuilder) (*Router, error) { e := &Router{ cfg: cfg, services: services, diff --git a/backend/internal/http/uuid.go b/backend/internal/uuid/uuid.go similarity index 76% rename from backend/internal/http/uuid.go rename to backend/internal/uuid/uuid.go index 6ce1611a9..44dd76827 100644 --- a/backend/internal/http/uuid.go +++ b/backend/internal/uuid/uuid.go @@ -1,10 +1,10 @@ -package http +package uuid import ( "github.com/google/uuid" ) -func getUUID(u *string) string { +func GetUUID(u *string) string { if u != nil { _, err := uuid.Parse(*u) if err == nil { From df722761e55b76e69ca63fa4a224a097e973755c Mon Sep 17 00:00:00 2001 From: Alexander Zavorotynskiy Date: Mon, 2 May 2022 15:20:10 +0200 Subject: [PATCH 45/91] Moved server to a separate dir --- backend/cmd/http/main.go | 3 ++- backend/internal/{http => server}/server.go | 4 ++-- 2 files changed, 4 insertions(+), 3 deletions(-) rename backend/internal/{http => server}/server.go (87%) diff --git a/backend/cmd/http/main.go b/backend/cmd/http/main.go index fd6dbd453..49507727c 100644 --- a/backend/cmd/http/main.go +++ b/backend/cmd/http/main.go @@ -5,6 +5,7 @@ import ( "openreplay/backend/internal/config" "openreplay/backend/internal/http" "openreplay/backend/internal/router" + "openreplay/backend/internal/server" "openreplay/backend/pkg/db/cache" "openreplay/backend/pkg/db/postgres" "openreplay/backend/pkg/pprof" @@ -39,7 +40,7 @@ func main() { } // Init server - server, err := http.NewServer(router.GetHandler(), cfg.HTTPHost, cfg.HTTPPort, cfg.HTTPTimeout) + server, err := server.New(router.GetHandler(), cfg.HTTPHost, cfg.HTTPPort, cfg.HTTPTimeout) if err != nil { log.Fatalf("failed while creating server: %s", err) } diff --git a/backend/internal/http/server.go b/backend/internal/server/server.go similarity index 87% rename from backend/internal/http/server.go rename to backend/internal/server/server.go index ea7b08841..2670ba537 100644 --- a/backend/internal/http/server.go +++ b/backend/internal/server/server.go @@ -1,4 +1,4 @@ -package http +package server import ( "context" @@ -14,7 +14,7 @@ type Server struct { server *http.Server } -func NewServer(handler http.Handler, host, port string, timeout time.Duration) (*Server, error) { +func New(handler http.Handler, host, port string, timeout time.Duration) (*Server, error) { switch { case port == "": return nil, errors.New("empty server port") From 69cabaecfe593dc3ab3373f9fb461a1f9d160914 Mon Sep 17 00:00:00 2001 From: Alexander Zavorotynskiy Date: Mon, 2 May 2022 15:28:51 +0200 Subject: [PATCH 46/91] Moved the rest of the code to separate dirs --- backend/cmd/http/main.go | 4 +- backend/internal/{http => }/geoip/geoip.go | 0 backend/internal/{http => }/geoip/http.go | 0 backend/internal/{http => ios}/ios-device.go | 2 +- backend/internal/router/handlers-ios.go | 36 +++++++++--------- backend/internal/router/handlers-web.go | 37 +++++++++---------- backend/internal/router/handlers.go | 5 +-- backend/internal/{http => router}/model.go | 2 +- backend/internal/{http => router}/response.go | 2 +- backend/internal/router/router.go | 6 +-- .../{http/service.go => services/services.go} | 12 +++--- backend/internal/{http => }/uaparser/http.go | 0 .../internal/{http => }/uaparser/uaparser.go | 0 13 files changed, 52 insertions(+), 54 deletions(-) rename backend/internal/{http => }/geoip/geoip.go (100%) rename backend/internal/{http => }/geoip/http.go (100%) rename backend/internal/{http => ios}/ios-device.go (99%) rename backend/internal/{http => router}/model.go (98%) rename backend/internal/{http => router}/response.go (96%) rename backend/internal/{http/service.go => services/services.go} (76%) rename backend/internal/{http => }/uaparser/http.go (100%) rename backend/internal/{http => }/uaparser/uaparser.go (100%) diff --git a/backend/cmd/http/main.go b/backend/cmd/http/main.go index 49507727c..41f739277 100644 --- a/backend/cmd/http/main.go +++ b/backend/cmd/http/main.go @@ -3,9 +3,9 @@ package main import ( "log" "openreplay/backend/internal/config" - "openreplay/backend/internal/http" "openreplay/backend/internal/router" "openreplay/backend/internal/server" + "openreplay/backend/internal/services" "openreplay/backend/pkg/db/cache" "openreplay/backend/pkg/db/postgres" "openreplay/backend/pkg/pprof" @@ -31,7 +31,7 @@ func main() { defer dbConn.Close() // Build all services - services := http.NewServiceBuilder(cfg, producer, dbConn) + services := services.New(cfg, producer, dbConn) // Init server's routes router, err := router.NewRouter(cfg, services) diff --git a/backend/internal/http/geoip/geoip.go b/backend/internal/geoip/geoip.go similarity index 100% rename from backend/internal/http/geoip/geoip.go rename to backend/internal/geoip/geoip.go diff --git a/backend/internal/http/geoip/http.go b/backend/internal/geoip/http.go similarity index 100% rename from backend/internal/http/geoip/http.go rename to backend/internal/geoip/http.go diff --git a/backend/internal/http/ios-device.go b/backend/internal/ios/ios-device.go similarity index 99% rename from backend/internal/http/ios-device.go rename to backend/internal/ios/ios-device.go index b5156d6dc..8df33035b 100644 --- a/backend/internal/http/ios-device.go +++ b/backend/internal/ios/ios-device.go @@ -1,4 +1,4 @@ -package http +package ios import ( "strings" diff --git a/backend/internal/router/handlers-ios.go b/backend/internal/router/handlers-ios.go index e1853f555..f0b0d977f 100644 --- a/backend/internal/router/handlers-ios.go +++ b/backend/internal/router/handlers-ios.go @@ -6,7 +6,7 @@ import ( "log" "math/rand" "net/http" - http2 "openreplay/backend/internal/http" + "openreplay/backend/internal/ios" "openreplay/backend/internal/uuid" "strconv" "time" @@ -41,21 +41,21 @@ func (e *Router) startSessionHandlerIOS(w http.ResponseWriter, r *http.Request) body := http.MaxBytesReader(w, r.Body, e.cfg.JsonSizeLimit) defer body.Close() if err := json.NewDecoder(body).Decode(req); err != nil { - http2.ResponseWithError(w, http.StatusBadRequest, err) + ResponseWithError(w, http.StatusBadRequest, err) return } if req.ProjectKey == nil { - http2.ResponseWithError(w, http.StatusForbidden, errors.New("ProjectKey value required")) + ResponseWithError(w, http.StatusForbidden, errors.New("ProjectKey value required")) return } p, err := e.services.Pgconn.GetProjectByKey(*req.ProjectKey) if err != nil { if postgres.IsNoRowsErr(err) { - http2.ResponseWithError(w, http.StatusNotFound, errors.New("Project doesn't exist or is not active")) + ResponseWithError(w, http.StatusNotFound, errors.New("Project doesn't exist or is not active")) } else { - http2.ResponseWithError(w, http.StatusInternalServerError, err) // TODO: send error here only on staging + ResponseWithError(w, http.StatusInternalServerError, err) // TODO: send error here only on staging } return } @@ -65,18 +65,18 @@ func (e *Router) startSessionHandlerIOS(w http.ResponseWriter, r *http.Request) if err != nil { // Starting the new one dice := byte(rand.Intn(100)) // [0, 100) if dice >= p.SampleRate { - http2.ResponseWithError(w, http.StatusForbidden, errors.New("cancel")) + ResponseWithError(w, http.StatusForbidden, errors.New("cancel")) return } ua := e.services.UaParser.ParseFromHTTPRequest(r) if ua == nil { - http2.ResponseWithError(w, http.StatusForbidden, errors.New("browser not recognized")) + ResponseWithError(w, http.StatusForbidden, errors.New("browser not recognized")) return } sessionID, err := e.services.Flaker.Compose(uint64(startTime.UnixMilli())) if err != nil { - http2.ResponseWithError(w, http.StatusInternalServerError, err) + ResponseWithError(w, http.StatusInternalServerError, err) return } // TODO: if EXPIRED => send message for two sessions association @@ -94,13 +94,13 @@ func (e *Router) startSessionHandlerIOS(w http.ResponseWriter, r *http.Request) UserUUID: userUUID, UserOS: "IOS", UserOSVersion: req.UserOSVersion, - UserDevice: http2.MapIOSDevice(req.UserDevice), - UserDeviceType: http2.GetIOSDeviceType(req.UserDevice), + UserDevice: ios.MapIOSDevice(req.UserDevice), + UserDeviceType: ios.GetIOSDeviceType(req.UserDevice), UserCountry: country, })) } - http2.ResponseWithJSON(w, &response{ + ResponseWithJSON(w, &response{ Token: e.services.Tokenizer.Compose(*tokenData), UserUUID: userUUID, SessionID: strconv.FormatUint(tokenData.ID, 10), @@ -111,7 +111,7 @@ func (e *Router) startSessionHandlerIOS(w http.ResponseWriter, r *http.Request) func (e *Router) pushMessagesHandlerIOS(w http.ResponseWriter, r *http.Request) { sessionData, err := e.services.Tokenizer.ParseFromHTTPRequest(r) if err != nil { - http2.ResponseWithError(w, http.StatusUnauthorized, err) + ResponseWithError(w, http.StatusUnauthorized, err) return } e.pushMessages(w, r, sessionData.ID, e.cfg.TopicRawIOS) @@ -120,7 +120,7 @@ func (e *Router) pushMessagesHandlerIOS(w http.ResponseWriter, r *http.Request) func (e *Router) pushLateMessagesHandlerIOS(w http.ResponseWriter, r *http.Request) { sessionData, err := e.services.Tokenizer.ParseFromHTTPRequest(r) if err != nil && err != token.EXPIRED { - http2.ResponseWithError(w, http.StatusUnauthorized, err) + ResponseWithError(w, http.StatusUnauthorized, err) return } // Check timestamps here? @@ -132,7 +132,7 @@ func (e *Router) imagesUploadHandlerIOS(w http.ResponseWriter, r *http.Request) sessionData, err := e.services.Tokenizer.ParseFromHTTPRequest(r) if err != nil { // Should accept expired token? - http2.ResponseWithError(w, http.StatusUnauthorized, err) + ResponseWithError(w, http.StatusUnauthorized, err) return } @@ -140,18 +140,18 @@ func (e *Router) imagesUploadHandlerIOS(w http.ResponseWriter, r *http.Request) defer r.Body.Close() err = r.ParseMultipartForm(1e6) // ~1Mb if err == http.ErrNotMultipart || err == http.ErrMissingBoundary { - http2.ResponseWithError(w, http.StatusUnsupportedMediaType, err) + ResponseWithError(w, http.StatusUnsupportedMediaType, err) // } else if err == multipart.ErrMessageTooLarge // if non-files part exceeds 10 MB } else if err != nil { - http2.ResponseWithError(w, http.StatusInternalServerError, err) // TODO: send error here only on staging + ResponseWithError(w, http.StatusInternalServerError, err) // TODO: send error here only on staging } if r.MultipartForm == nil { - http2.ResponseWithError(w, http.StatusInternalServerError, errors.New("Multipart not parsed")) + ResponseWithError(w, http.StatusInternalServerError, errors.New("Multipart not parsed")) } if len(r.MultipartForm.Value["projectKey"]) == 0 { - http2.ResponseWithError(w, http.StatusBadRequest, errors.New("projectKey parameter missing")) // status for missing/wrong parameter? + ResponseWithError(w, http.StatusBadRequest, errors.New("projectKey parameter missing")) // status for missing/wrong parameter? return } diff --git a/backend/internal/router/handlers-web.go b/backend/internal/router/handlers-web.go index 7bf3b6e7f..b0a3a9b94 100644 --- a/backend/internal/router/handlers-web.go +++ b/backend/internal/router/handlers-web.go @@ -7,7 +7,6 @@ import ( "log" "math/rand" "net/http" - http2 "openreplay/backend/internal/http" "openreplay/backend/internal/uuid" "strconv" "time" @@ -22,30 +21,30 @@ func (e *Router) startSessionHandlerWeb(w http.ResponseWriter, r *http.Request) // Check request body if r.Body == nil { - http2.ResponseWithError(w, http.StatusBadRequest, errors.New("request body is empty")) + ResponseWithError(w, http.StatusBadRequest, errors.New("request body is empty")) } body := http.MaxBytesReader(w, r.Body, e.cfg.JsonSizeLimit) defer body.Close() // Parse request body - req := &http2.StartSessionRequest{} + req := &StartSessionRequest{} if err := json.NewDecoder(body).Decode(req); err != nil { - http2.ResponseWithError(w, http.StatusBadRequest, err) + ResponseWithError(w, http.StatusBadRequest, err) return } // Handler's logic if req.ProjectKey == nil { - http2.ResponseWithError(w, http.StatusForbidden, errors.New("ProjectKey value required")) + ResponseWithError(w, http.StatusForbidden, errors.New("ProjectKey value required")) return } p, err := e.services.Pgconn.GetProjectByKey(*req.ProjectKey) if err != nil { if postgres.IsNoRowsErr(err) { - http2.ResponseWithError(w, http.StatusNotFound, errors.New("Project doesn't exist or capture limit has been reached")) + ResponseWithError(w, http.StatusNotFound, errors.New("Project doesn't exist or capture limit has been reached")) } else { - http2.ResponseWithError(w, http.StatusInternalServerError, err) // TODO: send error here only on staging + ResponseWithError(w, http.StatusInternalServerError, err) // TODO: send error here only on staging } return } @@ -55,18 +54,18 @@ func (e *Router) startSessionHandlerWeb(w http.ResponseWriter, r *http.Request) if err != nil || req.Reset { // Starting the new one dice := byte(rand.Intn(100)) // [0, 100) if dice >= p.SampleRate { - http2.ResponseWithError(w, http.StatusForbidden, errors.New("cancel")) + ResponseWithError(w, http.StatusForbidden, errors.New("cancel")) return } ua := e.services.UaParser.ParseFromHTTPRequest(r) if ua == nil { - http2.ResponseWithError(w, http.StatusForbidden, errors.New("browser not recognized")) + ResponseWithError(w, http.StatusForbidden, errors.New("browser not recognized")) return } sessionID, err := e.services.Flaker.Compose(uint64(startTime.UnixNano() / 1e6)) if err != nil { - http2.ResponseWithError(w, http.StatusInternalServerError, err) + ResponseWithError(w, http.StatusInternalServerError, err) return } // TODO: if EXPIRED => send message for two sessions association @@ -93,7 +92,7 @@ func (e *Router) startSessionHandlerWeb(w http.ResponseWriter, r *http.Request) })) } - http2.ResponseWithJSON(w, &http2.StartSessionResponse{ + ResponseWithJSON(w, &StartSessionResponse{ Token: e.services.Tokenizer.Compose(*tokenData), UserUUID: userUUID, SessionID: strconv.FormatUint(tokenData.ID, 10), @@ -105,13 +104,13 @@ func (e *Router) pushMessagesHandlerWeb(w http.ResponseWriter, r *http.Request) // Check authorization sessionData, err := e.services.Tokenizer.ParseFromHTTPRequest(r) if err != nil { - http2.ResponseWithError(w, http.StatusUnauthorized, err) + ResponseWithError(w, http.StatusUnauthorized, err) return } // Check request body if r.Body == nil { - http2.ResponseWithError(w, http.StatusBadRequest, errors.New("request body is empty")) + ResponseWithError(w, http.StatusBadRequest, errors.New("request body is empty")) } body := http.MaxBytesReader(w, r.Body, e.cfg.BeaconSizeLimit) defer body.Close() @@ -150,7 +149,7 @@ func (e *Router) pushMessagesHandlerWeb(w http.ResponseWriter, r *http.Request) handledMessages.Write(msg.Encode()) }) if err != nil { - http2.ResponseWithError(w, http.StatusForbidden, err) + ResponseWithError(w, http.StatusForbidden, err) return } @@ -166,26 +165,26 @@ func (e *Router) pushMessagesHandlerWeb(w http.ResponseWriter, r *http.Request) func (e *Router) notStartedHandlerWeb(w http.ResponseWriter, r *http.Request) { // Check request body if r.Body == nil { - http2.ResponseWithError(w, http.StatusBadRequest, errors.New("request body is empty")) + ResponseWithError(w, http.StatusBadRequest, errors.New("request body is empty")) } body := http.MaxBytesReader(w, r.Body, e.cfg.JsonSizeLimit) defer body.Close() // Parse request body - req := &http2.NotStartedRequest{} + req := &NotStartedRequest{} if err := json.NewDecoder(body).Decode(req); err != nil { - http2.ResponseWithError(w, http.StatusBadRequest, err) + ResponseWithError(w, http.StatusBadRequest, err) return } // Handler's logic if req.ProjectKey == nil { - http2.ResponseWithError(w, http.StatusForbidden, errors.New("ProjectKey value required")) + ResponseWithError(w, http.StatusForbidden, errors.New("ProjectKey value required")) return } ua := e.services.UaParser.ParseFromHTTPRequest(r) // TODO?: insert anyway if ua == nil { - http2.ResponseWithError(w, http.StatusForbidden, errors.New("browser not recognized")) + ResponseWithError(w, http.StatusForbidden, errors.New("browser not recognized")) return } country := e.services.GeoIP.ExtractISOCodeFromHTTPRequest(r) diff --git a/backend/internal/router/handlers.go b/backend/internal/router/handlers.go index 81a055145..e6e4c1d26 100644 --- a/backend/internal/router/handlers.go +++ b/backend/internal/router/handlers.go @@ -6,7 +6,6 @@ import ( "io/ioutil" "log" "net/http" - http2 "openreplay/backend/internal/http" ) func (e *Router) pushMessages(w http.ResponseWriter, r *http.Request, sessionID uint64, topicName string) { @@ -20,7 +19,7 @@ func (e *Router) pushMessages(w http.ResponseWriter, r *http.Request, sessionID reader, err = gzip.NewReader(body) if err != nil { - http2.ResponseWithError(w, http.StatusInternalServerError, err) // TODO: stage-dependent responce + ResponseWithError(w, http.StatusInternalServerError, err) // TODO: stage-dependent responce return } log.Println("Gzip reader init", reader) @@ -31,7 +30,7 @@ func (e *Router) pushMessages(w http.ResponseWriter, r *http.Request, sessionID log.Println("Reader after switch:", reader) buf, err := ioutil.ReadAll(reader) if err != nil { - http2.ResponseWithError(w, http.StatusInternalServerError, err) // TODO: send error here only on staging + ResponseWithError(w, http.StatusInternalServerError, err) // TODO: send error here only on staging return } e.services.Producer.Produce(topicName, sessionID, buf) // What if not able to send? diff --git a/backend/internal/http/model.go b/backend/internal/router/model.go similarity index 98% rename from backend/internal/http/model.go rename to backend/internal/router/model.go index 3fe4abd3d..339593d98 100644 --- a/backend/internal/http/model.go +++ b/backend/internal/router/model.go @@ -1,4 +1,4 @@ -package http +package router type StartSessionRequest struct { Token string `json:"token"` diff --git a/backend/internal/http/response.go b/backend/internal/router/response.go similarity index 96% rename from backend/internal/http/response.go rename to backend/internal/router/response.go index 1b87c33b9..0b4725419 100644 --- a/backend/internal/http/response.go +++ b/backend/internal/router/response.go @@ -1,4 +1,4 @@ -package http +package router import ( "encoding/json" diff --git a/backend/internal/router/router.go b/backend/internal/router/router.go index c49bbf161..145630351 100644 --- a/backend/internal/router/router.go +++ b/backend/internal/router/router.go @@ -5,16 +5,16 @@ import ( "log" "net/http" "openreplay/backend/internal/config" - http2 "openreplay/backend/internal/http" + http2 "openreplay/backend/internal/services" ) type Router struct { router *mux.Router cfg *config.Config - services *http2.ServiceBuilder + services *http2.ServicesBuilder } -func NewRouter(cfg *config.Config, services *http2.ServiceBuilder) (*Router, error) { +func NewRouter(cfg *config.Config, services *http2.ServicesBuilder) (*Router, error) { e := &Router{ cfg: cfg, services: services, diff --git a/backend/internal/http/service.go b/backend/internal/services/services.go similarity index 76% rename from backend/internal/http/service.go rename to backend/internal/services/services.go index 8f553db32..62569630e 100644 --- a/backend/internal/http/service.go +++ b/backend/internal/services/services.go @@ -1,9 +1,9 @@ -package http +package services import ( "openreplay/backend/internal/config" - "openreplay/backend/internal/http/geoip" - "openreplay/backend/internal/http/uaparser" + "openreplay/backend/internal/geoip" + "openreplay/backend/internal/uaparser" "openreplay/backend/pkg/db/cache" "openreplay/backend/pkg/flakeid" "openreplay/backend/pkg/queue/types" @@ -12,7 +12,7 @@ import ( "openreplay/backend/pkg/url/assets" ) -type ServiceBuilder struct { +type ServicesBuilder struct { Pgconn *cache.PGCache Producer types.Producer Rewriter *assets.Rewriter @@ -23,8 +23,8 @@ type ServiceBuilder struct { S3 *storage.S3 } -func NewServiceBuilder(cfg *config.Config, producer types.Producer, pgconn *cache.PGCache) *ServiceBuilder { - return &ServiceBuilder{ +func New(cfg *config.Config, producer types.Producer, pgconn *cache.PGCache) *ServicesBuilder { + return &ServicesBuilder{ Pgconn: pgconn, Producer: producer, Rewriter: assets.NewRewriter(cfg.AssetsOrigin), diff --git a/backend/internal/http/uaparser/http.go b/backend/internal/uaparser/http.go similarity index 100% rename from backend/internal/http/uaparser/http.go rename to backend/internal/uaparser/http.go diff --git a/backend/internal/http/uaparser/uaparser.go b/backend/internal/uaparser/uaparser.go similarity index 100% rename from backend/internal/http/uaparser/uaparser.go rename to backend/internal/uaparser/uaparser.go From a1b656dc6ad6c4cb75d5b2e6eb4aae4f56a19cd8 Mon Sep 17 00:00:00 2001 From: Shekar Siri Date: Mon, 2 May 2022 16:07:00 +0200 Subject: [PATCH 47/91] feat(ui) - session settings - ui and state --- .../app/components/BugFinder/BugFinder.js | 2 - .../BugFinder/SessionsMenu/SessionsMenu.js | 10 ++- .../app/components/shared/Select/Select.tsx | 63 ++++++++++++++ .../app/components/shared/Select/index.ts | 1 + .../SessionSettings/SessionSettings.tsx | 40 +++++++++ .../components/CaptureRate.tsx | 43 ++++++++++ .../components/DefaultPlaying.tsx | 25 ++++++ .../components/DefaultTimezone.tsx | 42 ++++++++++ .../components/ListingVisibility.tsx | 57 +++++++++++++ .../shared/SessionSettings/index.ts | 1 + .../ui/ToggleButton/ToggleButton.tsx | 84 +++++++++++++++++++ frontend/app/components/ui/Toggler/Toggler.js | 22 +++-- .../app/components/ui/Toggler/toggler.css | 19 ++++- frontend/app/components/ui/index.js | 1 + frontend/app/mstore/index.tsx | 3 + frontend/app/mstore/settingsStore.ts | 15 ++++ frontend/app/mstore/types/sessionSettings.ts | 26 ++++++ frontend/app/svg/icons/percent.svg | 3 + 18 files changed, 442 insertions(+), 15 deletions(-) create mode 100644 frontend/app/components/shared/Select/Select.tsx create mode 100644 frontend/app/components/shared/Select/index.ts create mode 100644 frontend/app/components/shared/SessionSettings/SessionSettings.tsx create mode 100644 frontend/app/components/shared/SessionSettings/components/CaptureRate.tsx create mode 100644 frontend/app/components/shared/SessionSettings/components/DefaultPlaying.tsx create mode 100644 frontend/app/components/shared/SessionSettings/components/DefaultTimezone.tsx create mode 100644 frontend/app/components/shared/SessionSettings/components/ListingVisibility.tsx create mode 100644 frontend/app/components/shared/SessionSettings/index.ts create mode 100644 frontend/app/components/ui/ToggleButton/ToggleButton.tsx create mode 100644 frontend/app/mstore/settingsStore.ts create mode 100644 frontend/app/mstore/types/sessionSettings.ts create mode 100644 frontend/app/svg/icons/percent.svg diff --git a/frontend/app/components/BugFinder/BugFinder.js b/frontend/app/components/BugFinder/BugFinder.js index 3ce09d23b..6e4f589a6 100644 --- a/frontend/app/components/BugFinder/BugFinder.js +++ b/frontend/app/components/BugFinder/BugFinder.js @@ -20,7 +20,6 @@ import { LAST_7_DAYS } from 'Types/app/period'; import { resetFunnel } from 'Duck/funnels'; import { resetFunnelFilters } from 'Duck/funnelFilters' import NoSessionsMessage from 'Shared/NoSessionsMessage'; -// import TrackerUpdateMessage from 'Shared/TrackerUpdateMessage'; import SessionSearch from 'Shared/SessionSearch'; import MainSearchBar from 'Shared/MainSearchBar'; import { clearSearch, fetchSessions } from 'Duck/search'; @@ -130,7 +129,6 @@ export default class BugFinder extends React.PureComponent { />
    - {/* */}
    diff --git a/frontend/app/components/BugFinder/SessionsMenu/SessionsMenu.js b/frontend/app/components/BugFinder/SessionsMenu/SessionsMenu.js index fa0594316..978eb0003 100644 --- a/frontend/app/components/BugFinder/SessionsMenu/SessionsMenu.js +++ b/frontend/app/components/BugFinder/SessionsMenu/SessionsMenu.js @@ -1,4 +1,4 @@ -import React from 'react' +import React, { useEffect } from 'react' import { connect } from 'react-redux'; import cn from 'classnames'; import { SideMenuitem, SavedSearchList, Progress, Popup } from 'UI' @@ -7,17 +7,23 @@ import { fetchWatchdogStatus } from 'Duck/watchdogs'; import { clearEvents } from 'Duck/filters'; import { issues_types } from 'Types/session/issue' import { fetchList as fetchSessionList } from 'Duck/sessions'; +import { useModal } from 'App/components/Modal'; +import SessionSettings from 'Shared/SessionSettings/SessionSettings' function SessionsMenu(props) { const { activeTab, keyMap, wdTypeCount, toggleRehydratePanel } = props; + const { hideModal, showModal } = useModal(); const onMenuItemClick = (filter) => { props.onMenuItemClick(filter) } - const capturingAll = props.captureRate && props.captureRate.get('captureAll'); + useEffect(() => { + showModal(, {}); + }, []) + return (
    diff --git a/frontend/app/components/shared/Select/Select.tsx b/frontend/app/components/shared/Select/Select.tsx new file mode 100644 index 000000000..c4523cf25 --- /dev/null +++ b/frontend/app/components/shared/Select/Select.tsx @@ -0,0 +1,63 @@ +import React from 'react'; +import Select from 'react-select'; + +interface Props { + options: any[]; + isSearchable?: boolean; + defaultValue?: any; + plain?: boolean; + [x:string]: any; +} +export default function({ plain = false, options, isSearchable = false, defaultValue, ...rest }: Props) { + const customStyles = { + option: (provided, state) => ({ + ...provided, + whiteSpace: 'nowrap', + }), + menu: (provided, state) => ({ + ...provided, + top: 31, + }), + control: (provided) => { + const obj = { + ...provided, + border: 'solid thin #ddd' + } + if (plain) { + obj['border'] = '1px solid transparent' + } + return obj; + }, + valueContainer: (provided) => ({ + ...provided, + paddingRight: '0px', + }), + singleValue: (provided, state) => { + const opacity = state.isDisabled ? 0.5 : 1; + const transition = 'opacity 300ms'; + + return { ...provided, opacity, transition }; + } + } + return ( + setCaptureRate(value)} + disabled={captureAll} + min={0} + minValue={0} + /> + +
    + of the sessions + +
    + + ); +} + +export default CaptureRate; \ No newline at end of file diff --git a/frontend/app/components/shared/SessionSettings/components/DefaultPlaying.tsx b/frontend/app/components/shared/SessionSettings/components/DefaultPlaying.tsx new file mode 100644 index 000000000..cb80c30b2 --- /dev/null +++ b/frontend/app/components/shared/SessionSettings/components/DefaultPlaying.tsx @@ -0,0 +1,25 @@ +import React from 'react'; +import { Toggler } from 'UI'; +import { useStore } from 'App/mstore'; +import { useObserver } from 'mobx-react-lite'; + +function DefaultPlaying(props) { + const { settingsStore } = useStore(); + const sessionSettings = useObserver(() => settingsStore.sessionSettings) + + return useObserver(() => ( + <> +

    Default Playing Options

    +
    Always start playing the session from the first issue.
    +
    + sessionSettings.updateKey('skipToIssue', !sessionSettings.skipToIssue)} + /> +
    + + )); +} + +export default DefaultPlaying; \ No newline at end of file diff --git a/frontend/app/components/shared/SessionSettings/components/DefaultTimezone.tsx b/frontend/app/components/shared/SessionSettings/components/DefaultTimezone.tsx new file mode 100644 index 000000000..c2f585a3d --- /dev/null +++ b/frontend/app/components/shared/SessionSettings/components/DefaultTimezone.tsx @@ -0,0 +1,42 @@ +import React, { useEffect } from 'react'; +import { Toggler, Button } from 'UI'; +import Select from 'Shared/Select'; +import { useStore } from 'App/mstore'; +import { useObserver } from 'mobx-react-lite'; + +const timezoneOptions = [ + { label: 'UTC', value: 'UTC' }, + { label: 'EST', value: 'EST' }, +] + +function DefaultTimezone(props) { + const [changed, setChanged] = React.useState(false); + const { settingsStore } = useStore(); + const sessionSettings = useObserver(() => settingsStore.sessionSettings) + + return ( + <> +

    Default Timezone

    +
    Session Time
    +
    + +
    +
    + +
    +
    + +
    + ); +} + +ToggleButton.defaultProps = { + icons: { + checked: , + unchecked: + } +}; + +ToggleButton.propTypes = { + disabled: PropTypes.bool, + defaultChecked: PropTypes.bool, + className: PropTypes.string, + onChange: PropTypes.func, + icons: PropTypes.oneOfType([ + PropTypes.bool, + PropTypes.shape({ + checked: PropTypes.node, + unchecked: PropTypes.node + }) + ]) +}; + +export default ToggleButton; \ No newline at end of file diff --git a/frontend/app/components/ui/Toggler/Toggler.js b/frontend/app/components/ui/Toggler/Toggler.js index ef6097936..1cf3ba78a 100644 --- a/frontend/app/components/ui/Toggler/Toggler.js +++ b/frontend/app/components/ui/Toggler/Toggler.js @@ -3,18 +3,22 @@ import styles from './toggler.css'; export default ({ onChange, name, - className, + className = '', checked, + label = '', }) => (
    -
    ); diff --git a/frontend/app/components/ui/Toggler/toggler.css b/frontend/app/components/ui/Toggler/toggler.css index 171272d67..cf9cf0838 100644 --- a/frontend/app/components/ui/Toggler/toggler.css +++ b/frontend/app/components/ui/Toggler/toggler.css @@ -6,6 +6,16 @@ height: 16px; } +.label { + display: flex; + align-items: center; + cursor: pointer; + + & span { + padding-left: 10px; + color: $gray-medium; + } +} .switch input { display:none; } @@ -29,18 +39,23 @@ width: 20px; left: 0; bottom: -2px; - background-color: white; + /* background-color: white; */ transition: .4s; border-radius: 50%; border: solid 1px rgba(0, 0, 0, 0.2); + + background: #394EFF; + box-shadow: 0px 2px 1px -1px rgba(0, 0, 0, 0.2), 0px 1px 1px rgba(0, 0, 0, 0.14), 0px 1px 3px rgba(0, 0, 0, 0.12); } .slider.checked { - background-color: $teal !important; + /* background-color: $teal !important; */ + background-color: #b2bcff !important; } .slider.checked:before { border: solid 1px $teal; + transform: translateX(15px); } .slider.checked:before { diff --git a/frontend/app/components/ui/index.js b/frontend/app/components/ui/index.js index e6a4253e0..193d24384 100644 --- a/frontend/app/components/ui/index.js +++ b/frontend/app/components/ui/index.js @@ -58,5 +58,6 @@ export { default as HelpText } from './HelpText'; export { default as SideMenuHeader } from './SideMenuHeader'; export { default as PageTitle } from './PageTitle'; export { default as Pagination } from './Pagination'; +export { default as Toggler } from './Toggler'; export { Input, Modal, Form, Message, Card } from 'semantic-ui-react'; diff --git a/frontend/app/mstore/index.tsx b/frontend/app/mstore/index.tsx index 88f5472c2..39c1d84a4 100644 --- a/frontend/app/mstore/index.tsx +++ b/frontend/app/mstore/index.tsx @@ -3,14 +3,17 @@ import DashboardStore, { IDashboardSotre } from './dashboardStore'; import MetricStore, { IMetricStore } from './metricStore'; import APIClient from 'App/api_client'; import { dashboardService, metricService } from 'App/services'; +import SettingsStore from './settingsStore'; export class RootStore { dashboardStore: IDashboardSotre; metricStore: IMetricStore; + settingsStore: SettingsStore; constructor() { this.dashboardStore = new DashboardStore(); this.metricStore = new MetricStore(); + this.settingsStore = new SettingsStore(); } initClient() { diff --git a/frontend/app/mstore/settingsStore.ts b/frontend/app/mstore/settingsStore.ts new file mode 100644 index 000000000..82a33a5cb --- /dev/null +++ b/frontend/app/mstore/settingsStore.ts @@ -0,0 +1,15 @@ +import { makeAutoObservable, runInAction, observable, action, reaction } from "mobx" +import SessionSettings from "./types/sessionSettings" + +export default class SettingsStore { + sessionSettings: SessionSettings = new SessionSettings() + constructor() { + makeAutoObservable(this, { + sessionSettings: observable, + }) + } + + updateCaptureRate(value: number) { + this.sessionSettings.updateKey('captureRate', value); + } +} \ No newline at end of file diff --git a/frontend/app/mstore/types/sessionSettings.ts b/frontend/app/mstore/types/sessionSettings.ts new file mode 100644 index 000000000..37317cacd --- /dev/null +++ b/frontend/app/mstore/types/sessionSettings.ts @@ -0,0 +1,26 @@ +import { makeAutoObservable, runInAction, observable, action, reaction } from "mobx" + +export default class SessionSettings { + skipToIssue: boolean = false + timezone: string = "EST" + durationFilter: any = { + count: 0, + countType: 'min', + operator: '>' + } + captureRate: number = 0 + captureAll: boolean = false + + constructor() { + makeAutoObservable(this, { + updateKey: action + }) + } + + updateKey(key: string, value: any) { + console.log(`SessionSettings.updateKey(${key}, ${value})`) + runInAction(() => { + this[key] = value + }) + } +} diff --git a/frontend/app/svg/icons/percent.svg b/frontend/app/svg/icons/percent.svg new file mode 100644 index 000000000..6904d8218 --- /dev/null +++ b/frontend/app/svg/icons/percent.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file From e421511db87b3bcd82cccc2cec510e4dd10e78f1 Mon Sep 17 00:00:00 2001 From: Shekar Siri Date: Mon, 2 May 2022 16:07:12 +0200 Subject: [PATCH 48/91] feat(ui) - session settings - libs --- frontend/package-lock.json | 614 +++++++++++++++++++++++++++---------- frontend/package.json | 1 + 2 files changed, 456 insertions(+), 159 deletions(-) diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 75fcde026..77de8a018 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -42,6 +42,7 @@ "react-redux": "^5.1.2", "react-router": "^4.3.1", "react-router-dom": "^4.3.1", + "react-select": "^5.3.1", "react-svg-map": "^2.2.0", "react-tippy": "^1.4.0", "react-toastify": "^5.5.0", @@ -114,7 +115,6 @@ "version": "2.1.2", "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.1.2.tgz", "integrity": "sha512-hoyByceqwKirw7w3Z7gnIIZC3Wx3J484Y3L/cMpXFbr7d9ZQj2mODrirNzcJa+SM3UlpWXYvKV4RlRpFXlWgXg==", - "dev": true, "dependencies": { "@jridgewell/trace-mapping": "^0.3.0" }, @@ -165,7 +165,6 @@ "version": "7.16.7", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz", "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==", - "dev": true, "dependencies": { "@babel/highlight": "^7.16.7" }, @@ -177,7 +176,6 @@ "version": "7.17.7", "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.17.7.tgz", "integrity": "sha512-p8pdE6j0a29TNGebNm7NzYZWB3xVZJBZ7XGs42uAKzQo8VQ3F0By/cQCtUEABwIqw5zo6WA4NbmxsfzADzMKnQ==", - "dev": true, "engines": { "node": ">=6.9.0" } @@ -186,7 +184,6 @@ "version": "7.17.9", "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.17.9.tgz", "integrity": "sha512-5ug+SfZCpDAkVp9SFIZAzlW18rlzsOcJGaetCjkySnrXXDUw9AR8cDUm1iByTmdWM6yxX6/zycaV76w3YTF2gw==", - "dev": true, "dependencies": { "@ampproject/remapping": "^2.1.0", "@babel/code-frame": "^7.16.7", @@ -216,7 +213,6 @@ "version": "7.17.9", "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.17.9.tgz", "integrity": "sha512-rAdDousTwxbIxbz5I7GEQ3lUip+xVCXooZNbsydCWs3xA7ZsYOv+CFRdzGxRX78BmQHu9B1Eso59AOZQOJDEdQ==", - "dev": true, "dependencies": { "@babel/types": "^7.17.0", "jsesc": "^2.5.1", @@ -230,7 +226,6 @@ "version": "0.5.7", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -264,7 +259,6 @@ "version": "7.17.7", "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.17.7.tgz", "integrity": "sha512-UFzlz2jjd8kroj0hmCFV5zr+tQPi1dpC2cRsDV/3IEW8bJfCPrPpmcSN6ZS8RqIq4LXcmpipCQFPddyFA5Yc7w==", - "dev": true, "dependencies": { "@babel/compat-data": "^7.17.7", "@babel/helper-validator-option": "^7.16.7", @@ -338,7 +332,6 @@ "version": "7.16.7", "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.16.7.tgz", "integrity": "sha512-SLLb0AAn6PkUeAfKJCCOl9e1R53pQlGAfc4y4XuMRZfqeMYLE0dM1LMhqbGAlGQY0lfw5/ohoYWAe9V1yibRag==", - "dev": true, "dependencies": { "@babel/types": "^7.16.7" }, @@ -362,7 +355,6 @@ "version": "7.17.9", "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.17.9.tgz", "integrity": "sha512-7cRisGlVtiVqZ0MW0/yFB4atgpGLWEHUVYnb448hZK4x+vih0YO5UoS11XIYtZYqHd0dIPMdUSv8q5K4LdMnIg==", - "dev": true, "dependencies": { "@babel/template": "^7.16.7", "@babel/types": "^7.17.0" @@ -375,7 +367,6 @@ "version": "7.16.7", "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.7.tgz", "integrity": "sha512-m04d/0Op34H5v7pbZw6pSKP7weA6lsMvfiIAMeIvkY/R4xQtBSMFEigu9QTZ2qB/9l22vsxtM8a+Q8CzD255fg==", - "dev": true, "dependencies": { "@babel/types": "^7.16.7" }, @@ -399,7 +390,6 @@ "version": "7.16.7", "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz", "integrity": "sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg==", - "dev": true, "dependencies": { "@babel/types": "^7.16.7" }, @@ -411,7 +401,6 @@ "version": "7.17.7", "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.17.7.tgz", "integrity": "sha512-VmZD99F3gNTYB7fJRDTi+u6l/zxY0BE6OIxPSU7a50s6ZUQkHwSDmV92FfM+oCG0pZRVojGYhkR8I0OGeCVREw==", - "dev": true, "dependencies": { "@babel/helper-environment-visitor": "^7.16.7", "@babel/helper-module-imports": "^7.16.7", @@ -442,7 +431,6 @@ "version": "7.16.7", "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==", - "dev": true, "engines": { "node": ">=6.9.0" } @@ -481,7 +469,6 @@ "version": "7.17.7", "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.17.7.tgz", "integrity": "sha512-txyMCGroZ96i+Pxr3Je3lzEJjqwaRC9buMUgtomcrLe5Nd0+fk1h0LLA+ixUF5OW7AhHuQ7Es1WcQJZmZsz2XA==", - "dev": true, "dependencies": { "@babel/types": "^7.17.0" }, @@ -505,7 +492,6 @@ "version": "7.16.7", "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz", "integrity": "sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw==", - "dev": true, "dependencies": { "@babel/types": "^7.16.7" }, @@ -517,7 +503,6 @@ "version": "7.16.7", "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==", - "dev": true, "engines": { "node": ">=6.9.0" } @@ -526,7 +511,6 @@ "version": "7.16.7", "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.16.7.tgz", "integrity": "sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ==", - "dev": true, "engines": { "node": ">=6.9.0" } @@ -550,7 +534,6 @@ "version": "7.17.9", "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.17.9.tgz", "integrity": "sha512-cPCt915ShDWUEzEp3+UNRktO2n6v49l5RSnG9M5pS24hA+2FAc5si+Pn1i4VVbQQ+jh+bIZhPFQOJOzbrOYY1Q==", - "dev": true, "dependencies": { "@babel/template": "^7.16.7", "@babel/traverse": "^7.17.9", @@ -564,7 +547,6 @@ "version": "7.17.9", "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.17.9.tgz", "integrity": "sha512-J9PfEKCbFIv2X5bjTMiZu6Vf341N05QIY+d6FvVKynkG1S7G0j3I0QoRtWIrXhZ+/Nlb5Q0MzqL7TokEJ5BNHg==", - "dev": true, "dependencies": { "@babel/helper-validator-identifier": "^7.16.7", "chalk": "^2.0.0", @@ -578,7 +560,6 @@ "version": "7.17.9", "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.17.9.tgz", "integrity": "sha512-vqUSBLP8dQHFPdPi9bc5GK9vRkYHJ49fsZdtoJ8EQ8ibpwk5rPKfvNIwChB0KVXcIjcepEBBd2VHC5r9Gy8ueg==", - "dev": true, "bin": { "parser": "bin/babel-parser.js" }, @@ -1038,7 +1019,6 @@ "version": "7.16.7", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.16.7.tgz", "integrity": "sha512-Esxmk7YjA8QysKeT3VhTXvF6y77f/a91SIs4pWb4H2eWGQkCKFgQaG6hdoEVZtGsrAcb2K5BW66XsOErD4WU3Q==", - "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.16.7" }, @@ -1975,7 +1955,6 @@ "version": "7.16.7", "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.7.tgz", "integrity": "sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w==", - "dev": true, "dependencies": { "@babel/code-frame": "^7.16.7", "@babel/parser": "^7.16.7", @@ -1989,7 +1968,6 @@ "version": "7.17.9", "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.17.9.tgz", "integrity": "sha512-PQO8sDIJ8SIwipTPiR71kJQCKQYB5NGImbOviK8K+kg5xkNSYXLBupuX9QhatFowrsvo9Hj8WgArg3W7ijNAQw==", - "dev": true, "dependencies": { "@babel/code-frame": "^7.16.7", "@babel/generator": "^7.17.9", @@ -2010,7 +1988,6 @@ "version": "7.17.0", "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.0.tgz", "integrity": "sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==", - "dev": true, "dependencies": { "@babel/helper-validator-identifier": "^7.16.7", "to-fast-properties": "^2.0.0" @@ -2054,6 +2031,99 @@ "node": ">=10.0.0" } }, + "node_modules/@emotion/babel-plugin": { + "version": "11.9.2", + "resolved": "https://registry.npmjs.org/@emotion/babel-plugin/-/babel-plugin-11.9.2.tgz", + "integrity": "sha512-Pr/7HGH6H6yKgnVFNEj2MVlreu3ADqftqjqwUvDy/OJzKFgxKeTQ+eeUf20FOTuHVkDON2iNa25rAXVYtWJCjw==", + "dependencies": { + "@babel/helper-module-imports": "^7.12.13", + "@babel/plugin-syntax-jsx": "^7.12.13", + "@babel/runtime": "^7.13.10", + "@emotion/hash": "^0.8.0", + "@emotion/memoize": "^0.7.5", + "@emotion/serialize": "^1.0.2", + "babel-plugin-macros": "^2.6.1", + "convert-source-map": "^1.5.0", + "escape-string-regexp": "^4.0.0", + "find-root": "^1.1.0", + "source-map": "^0.5.7", + "stylis": "4.0.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@emotion/babel-plugin/node_modules/@emotion/memoize": { + "version": "0.7.5", + "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.7.5.tgz", + "integrity": "sha512-igX9a37DR2ZPGYtV6suZ6whr8pTFtyHL3K/oLUotxpSVO2ASaprmAe2Dkq7tBo7CRY7MMDrAa9nuQP9/YG8FxQ==" + }, + "node_modules/@emotion/babel-plugin/node_modules/@emotion/serialize": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-1.0.3.tgz", + "integrity": "sha512-2mSSvgLfyV3q+iVh3YWgNlUc2a9ZlDU7DjuP5MjK3AXRR0dYigCrP99aeFtaB2L/hjfEZdSThn5dsZ0ufqbvsA==", + "dependencies": { + "@emotion/hash": "^0.8.0", + "@emotion/memoize": "^0.7.4", + "@emotion/unitless": "^0.7.5", + "@emotion/utils": "^1.0.0", + "csstype": "^3.0.2" + } + }, + "node_modules/@emotion/babel-plugin/node_modules/@emotion/utils": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-1.1.0.tgz", + "integrity": "sha512-iRLa/Y4Rs5H/f2nimczYmS5kFJEbpiVvgN3XVfZ022IYhuNA1IRSHEizcof88LtCTXtl9S2Cxt32KgaXEu72JQ==" + }, + "node_modules/@emotion/babel-plugin/node_modules/babel-plugin-macros": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-2.8.0.tgz", + "integrity": "sha512-SEP5kJpfGYqYKpBrj5XU3ahw5p5GOHJ0U5ssOSQ/WBVdwkD2Dzlce95exQTs3jOVWPPKLBN2rlEWkCK7dSmLvg==", + "dependencies": { + "@babel/runtime": "^7.7.2", + "cosmiconfig": "^6.0.0", + "resolve": "^1.12.0" + } + }, + "node_modules/@emotion/babel-plugin/node_modules/cosmiconfig": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz", + "integrity": "sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==", + "dependencies": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.1.0", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.7.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@emotion/babel-plugin/node_modules/csstype": { + "version": "3.0.11", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.0.11.tgz", + "integrity": "sha512-sa6P2wJ+CAbgyy4KFssIb/JNMLxFvKF1pCYCSXS8ZMuqZnMsrxqI2E5sPyoTpxoPU/gVZMzr2zjOfg8GIZOMsw==" + }, + "node_modules/@emotion/babel-plugin/node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@emotion/babel-plugin/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/@emotion/cache": { "version": "10.0.29", "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-10.0.29.tgz", @@ -2097,8 +2167,7 @@ "node_modules/@emotion/hash": { "version": "0.8.0", "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.8.0.tgz", - "integrity": "sha512-kBJtf7PH6aWwZ6fka3zQ0p6SBYzx4fl1LoZXE2RrnYST9Xljm7WfKJrU4g/Xr3Beg72MLrp1AWNUmuYJTL7Cow==", - "dev": true + "integrity": "sha512-kBJtf7PH6aWwZ6fka3zQ0p6SBYzx4fl1LoZXE2RrnYST9Xljm7WfKJrU4g/Xr3Beg72MLrp1AWNUmuYJTL7Cow==" }, "node_modules/@emotion/is-prop-valid": { "version": "0.8.8", @@ -2112,8 +2181,72 @@ "node_modules/@emotion/memoize": { "version": "0.7.4", "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.7.4.tgz", - "integrity": "sha512-Ja/Vfqe3HpuzRsG1oBtWTHk2PGZ7GR+2Vz5iYGelAw8dx32K0y7PjVuxK6z1nMpZOqAFsRUPCkK1YjJ56qJlgw==", - "dev": true + "integrity": "sha512-Ja/Vfqe3HpuzRsG1oBtWTHk2PGZ7GR+2Vz5iYGelAw8dx32K0y7PjVuxK6z1nMpZOqAFsRUPCkK1YjJ56qJlgw==" + }, + "node_modules/@emotion/react": { + "version": "11.9.0", + "resolved": "https://registry.npmjs.org/@emotion/react/-/react-11.9.0.tgz", + "integrity": "sha512-lBVSF5d0ceKtfKCDQJveNAtkC7ayxpVlgOohLgXqRwqWr9bOf4TZAFFyIcNngnV6xK6X4x2ZeXq7vliHkoVkxQ==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@emotion/babel-plugin": "^11.7.1", + "@emotion/cache": "^11.7.1", + "@emotion/serialize": "^1.0.3", + "@emotion/utils": "^1.1.0", + "@emotion/weak-memoize": "^0.2.5", + "hoist-non-react-statics": "^3.3.1" + }, + "peerDependencies": { + "@babel/core": "^7.0.0", + "react": ">=16.8.0" + }, + "peerDependenciesMeta": { + "@babel/core": { + "optional": true + }, + "@types/react": { + "optional": true + } + } + }, + "node_modules/@emotion/react/node_modules/@emotion/cache": { + "version": "11.7.1", + "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-11.7.1.tgz", + "integrity": "sha512-r65Zy4Iljb8oyjtLeCuBH8Qjiy107dOYC6SJq7g7GV5UCQWMObY4SJDPGFjiiVpPrOJ2hmJOoBiYTC7hwx9E2A==", + "dependencies": { + "@emotion/memoize": "^0.7.4", + "@emotion/sheet": "^1.1.0", + "@emotion/utils": "^1.0.0", + "@emotion/weak-memoize": "^0.2.5", + "stylis": "4.0.13" + } + }, + "node_modules/@emotion/react/node_modules/@emotion/serialize": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-1.0.3.tgz", + "integrity": "sha512-2mSSvgLfyV3q+iVh3YWgNlUc2a9ZlDU7DjuP5MjK3AXRR0dYigCrP99aeFtaB2L/hjfEZdSThn5dsZ0ufqbvsA==", + "dependencies": { + "@emotion/hash": "^0.8.0", + "@emotion/memoize": "^0.7.4", + "@emotion/unitless": "^0.7.5", + "@emotion/utils": "^1.0.0", + "csstype": "^3.0.2" + } + }, + "node_modules/@emotion/react/node_modules/@emotion/sheet": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@emotion/sheet/-/sheet-1.1.0.tgz", + "integrity": "sha512-u0AX4aSo25sMAygCuQTzS+HsImZFuS8llY8O7b9MDRzbJM0kVJlAz6KNDqcG7pOuQZJmj/8X/rAW+66kMnMW+g==" + }, + "node_modules/@emotion/react/node_modules/@emotion/utils": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-1.1.0.tgz", + "integrity": "sha512-iRLa/Y4Rs5H/f2nimczYmS5kFJEbpiVvgN3XVfZ022IYhuNA1IRSHEizcof88LtCTXtl9S2Cxt32KgaXEu72JQ==" + }, + "node_modules/@emotion/react/node_modules/csstype": { + "version": "3.0.11", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.0.11.tgz", + "integrity": "sha512-sa6P2wJ+CAbgyy4KFssIb/JNMLxFvKF1pCYCSXS8ZMuqZnMsrxqI2E5sPyoTpxoPU/gVZMzr2zjOfg8GIZOMsw==" }, "node_modules/@emotion/serialize": { "version": "0.11.16", @@ -2173,8 +2306,7 @@ "node_modules/@emotion/unitless": { "version": "0.7.5", "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.7.5.tgz", - "integrity": "sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg==", - "dev": true + "integrity": "sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg==" }, "node_modules/@emotion/utils": { "version": "0.11.3", @@ -2185,8 +2317,7 @@ "node_modules/@emotion/weak-memoize": { "version": "0.2.5", "resolved": "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.2.5.tgz", - "integrity": "sha512-6U71C2Wp7r5XtFtQzYrW5iKFT67OixrSxjI4MptCHzdSVlgabczzqLe0ZSgnub/5Kp4hSbpDB1tMytZY9pwxxA==", - "dev": true + "integrity": "sha512-6U71C2Wp7r5XtFtQzYrW5iKFT67OixrSxjI4MptCHzdSVlgabczzqLe0ZSgnub/5Kp4hSbpDB1tMytZY9pwxxA==" }, "node_modules/@fullhuman/postcss-purgecss": { "version": "2.3.0", @@ -2265,7 +2396,6 @@ "version": "3.0.5", "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.5.tgz", "integrity": "sha512-VPeQ7+wH0itvQxnG+lIzWgkysKIr3L9sslimFW55rHMdGu/qCQ5z5h9zq4gI8uBtqkpHhsF4Z/OwExufUCThew==", - "dev": true, "engines": { "node": ">=6.0.0" } @@ -2273,14 +2403,12 @@ "node_modules/@jridgewell/sourcemap-codec": { "version": "1.4.11", "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.11.tgz", - "integrity": "sha512-Fg32GrJo61m+VqYSdRSjRXMjQ06j8YIYfcTqndLYVAaHmroZHLJZCydsWBOTDqXS2v+mjxohBWEMfg97GXmYQg==", - "dev": true + "integrity": "sha512-Fg32GrJo61m+VqYSdRSjRXMjQ06j8YIYfcTqndLYVAaHmroZHLJZCydsWBOTDqXS2v+mjxohBWEMfg97GXmYQg==" }, "node_modules/@jridgewell/trace-mapping": { "version": "0.3.9", "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", - "dev": true, "dependencies": { "@jridgewell/resolve-uri": "^3.0.3", "@jridgewell/sourcemap-codec": "^1.4.10" @@ -4679,7 +4807,7 @@ "version": "14.18.13", "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.13.tgz", "integrity": "sha512-Z6/KzgyWOga3pJNS42A+zayjhPbf2zM3hegRQaOPnLOzEi86VV++6FLDWgR1LGrVCRufP/ph2daa3tEa5br1zA==", - "dev": true + "devOptional": true }, "node_modules/@types/node-fetch": { "version": "2.6.1", @@ -4712,8 +4840,7 @@ "node_modules/@types/parse-json": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", - "dev": true + "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==" }, "node_modules/@types/parse5": { "version": "5.0.3", @@ -4730,8 +4857,7 @@ "node_modules/@types/prop-types": { "version": "15.7.5", "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz", - "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==", - "dev": true + "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==" }, "node_modules/@types/q": { "version": "1.5.5", @@ -4749,7 +4875,6 @@ "version": "18.0.6", "resolved": "https://registry.npmjs.org/@types/react/-/react-18.0.6.tgz", "integrity": "sha512-bPqwzJRzKtfI0mVYr5R+1o9BOE8UEXefwc1LwcBtfnaAn6OoqMhLa/91VA8aeWfDPJt1kHvYKI8RHcQybZLHHA==", - "dev": true, "dependencies": { "@types/prop-types": "*", "@types/scheduler": "*", @@ -4765,11 +4890,18 @@ "@types/react": "*" } }, + "node_modules/@types/react-transition-group": { + "version": "4.4.4", + "resolved": "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.4.4.tgz", + "integrity": "sha512-7gAPz7anVK5xzbeQW9wFBDg7G++aPLAFY0QaSMOou9rJZpbuI58WAuJrgu+qR92l61grlnCUe7AFX8KGahAgug==", + "dependencies": { + "@types/react": "*" + } + }, "node_modules/@types/react/node_modules/csstype": { "version": "3.0.11", "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.0.11.tgz", - "integrity": "sha512-sa6P2wJ+CAbgyy4KFssIb/JNMLxFvKF1pCYCSXS8ZMuqZnMsrxqI2E5sPyoTpxoPU/gVZMzr2zjOfg8GIZOMsw==", - "dev": true + "integrity": "sha512-sa6P2wJ+CAbgyy4KFssIb/JNMLxFvKF1pCYCSXS8ZMuqZnMsrxqI2E5sPyoTpxoPU/gVZMzr2zjOfg8GIZOMsw==" }, "node_modules/@types/resize-observer-browser": { "version": "0.1.7", @@ -4779,8 +4911,7 @@ "node_modules/@types/scheduler": { "version": "0.16.2", "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz", - "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==", - "dev": true + "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==" }, "node_modules/@types/source-list-map": { "version": "0.1.2", @@ -6846,7 +6977,6 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true, "engines": { "node": ">=6" } @@ -7610,7 +7740,6 @@ "version": "1.8.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", - "dev": true, "dependencies": { "safe-buffer": "~5.1.1" } @@ -9721,7 +9850,6 @@ "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dev": true, "dependencies": { "is-arrayish": "^0.2.1" } @@ -11052,8 +11180,7 @@ "node_modules/find-root": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz", - "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==", - "dev": true + "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==" }, "node_modules/find-up": { "version": "5.0.0", @@ -11747,7 +11874,6 @@ "version": "1.0.0-beta.2", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "dev": true, "engines": { "node": ">=6.9.0" } @@ -11915,7 +12041,6 @@ "version": "11.12.0", "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true, "engines": { "node": ">=4" } @@ -13020,7 +13145,6 @@ "version": "3.3.0", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dev": true, "dependencies": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" @@ -13036,7 +13160,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true, "engines": { "node": ">=4" } @@ -13331,8 +13454,7 @@ "node_modules/is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", - "dev": true + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=" }, "node_modules/is-bigint": { "version": "1.0.4", @@ -14014,7 +14136,6 @@ "version": "2.5.2", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true, "bin": { "jsesc": "bin/jsesc" }, @@ -14059,8 +14180,7 @@ "node_modules/json-parse-even-better-errors": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "dev": true + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" }, "node_modules/json-schema-traverse": { "version": "0.4.1", @@ -14078,7 +14198,6 @@ "version": "2.2.1", "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==", - "dev": true, "bin": { "json5": "lib/cli.js" }, @@ -14227,8 +14346,7 @@ "node_modules/lines-and-columns": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", - "dev": true + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" }, "node_modules/loader-runner": { "version": "2.4.0", @@ -14554,6 +14672,11 @@ "node": ">= 4.0.0" } }, + "node_modules/memoize-one": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-5.2.1.tgz", + "integrity": "sha512-zYiwtZUcYyXKo/np96AGZAckk+FWWsUdJ3cHGGmld7+AhvcWmQyGCYUh1hc4Q/pkOhb65dQR/pqCyK0cOaHz4Q==" + }, "node_modules/memoizerific": { "version": "1.11.3", "resolved": "https://registry.npmjs.org/memoizerific/-/memoizerific-1.11.3.tgz", @@ -16039,7 +16162,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, "dependencies": { "callsites": "^3.0.0" }, @@ -16082,7 +16204,6 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", - "dev": true, "dependencies": { "@babel/code-frame": "^7.0.0", "error-ex": "^1.3.1", @@ -16233,7 +16354,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true, "engines": { "node": ">=8" } @@ -18996,6 +19116,46 @@ "isarray": "0.0.1" } }, + "node_modules/react-select": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/react-select/-/react-select-5.3.1.tgz", + "integrity": "sha512-Y195MmhDoDAj/8gTDyYZU1Raf7tmZd81wxM6RkFko4pqJ4Xv0/ilqUMtSn+GYkwmSlTWeMlzh+e+t7PJgtuXPw==", + "dependencies": { + "@babel/runtime": "^7.12.0", + "@emotion/cache": "^11.4.0", + "@emotion/react": "^11.8.1", + "@types/react-transition-group": "^4.4.0", + "memoize-one": "^5.0.0", + "prop-types": "^15.6.0", + "react-transition-group": "^4.3.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/react-select/node_modules/@emotion/cache": { + "version": "11.7.1", + "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-11.7.1.tgz", + "integrity": "sha512-r65Zy4Iljb8oyjtLeCuBH8Qjiy107dOYC6SJq7g7GV5UCQWMObY4SJDPGFjiiVpPrOJ2hmJOoBiYTC7hwx9E2A==", + "dependencies": { + "@emotion/memoize": "^0.7.4", + "@emotion/sheet": "^1.1.0", + "@emotion/utils": "^1.0.0", + "@emotion/weak-memoize": "^0.2.5", + "stylis": "4.0.13" + } + }, + "node_modules/react-select/node_modules/@emotion/sheet": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@emotion/sheet/-/sheet-1.1.0.tgz", + "integrity": "sha512-u0AX4aSo25sMAygCuQTzS+HsImZFuS8llY8O7b9MDRzbJM0kVJlAz6KNDqcG7pOuQZJmj/8X/rAW+66kMnMW+g==" + }, + "node_modules/react-select/node_modules/@emotion/utils": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-1.1.0.tgz", + "integrity": "sha512-iRLa/Y4Rs5H/f2nimczYmS5kFJEbpiVvgN3XVfZ022IYhuNA1IRSHEizcof88LtCTXtl9S2Cxt32KgaXEu72JQ==" + }, "node_modules/react-sizeme": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/react-sizeme/-/react-sizeme-3.0.2.tgz", @@ -20055,8 +20215,7 @@ "node_modules/safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" }, "node_modules/safe-regex": { "version": "1.1.0", @@ -20164,7 +20323,6 @@ "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, "bin": { "semver": "bin/semver.js" } @@ -21456,6 +21614,11 @@ "postcss": "^8.2.15" } }, + "node_modules/stylis": { + "version": "4.0.13", + "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.0.13.tgz", + "integrity": "sha512-xGPXiFVl4YED9Jh7Euv2V220mriG9u4B2TA6Ybjc1catrstKD2PpIdU3U0RKpkVBC2EhmL/F0sPCr9vrFTNRag==" + }, "node_modules/sugarss": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/sugarss/-/sugarss-2.0.0.tgz", @@ -22228,7 +22391,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", - "dev": true, "engines": { "node": ">=4" } @@ -25615,7 +25777,6 @@ "version": "1.10.2", "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", - "dev": true, "engines": { "node": ">= 6" } @@ -25698,7 +25859,6 @@ "version": "2.1.2", "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.1.2.tgz", "integrity": "sha512-hoyByceqwKirw7w3Z7gnIIZC3Wx3J484Y3L/cMpXFbr7d9ZQj2mODrirNzcJa+SM3UlpWXYvKV4RlRpFXlWgXg==", - "dev": true, "requires": { "@jridgewell/trace-mapping": "^0.3.0" } @@ -25733,7 +25893,6 @@ "version": "7.16.7", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz", "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==", - "dev": true, "requires": { "@babel/highlight": "^7.16.7" } @@ -25741,14 +25900,12 @@ "@babel/compat-data": { "version": "7.17.7", "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.17.7.tgz", - "integrity": "sha512-p8pdE6j0a29TNGebNm7NzYZWB3xVZJBZ7XGs42uAKzQo8VQ3F0By/cQCtUEABwIqw5zo6WA4NbmxsfzADzMKnQ==", - "dev": true + "integrity": "sha512-p8pdE6j0a29TNGebNm7NzYZWB3xVZJBZ7XGs42uAKzQo8VQ3F0By/cQCtUEABwIqw5zo6WA4NbmxsfzADzMKnQ==" }, "@babel/core": { "version": "7.17.9", "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.17.9.tgz", "integrity": "sha512-5ug+SfZCpDAkVp9SFIZAzlW18rlzsOcJGaetCjkySnrXXDUw9AR8cDUm1iByTmdWM6yxX6/zycaV76w3YTF2gw==", - "dev": true, "requires": { "@ampproject/remapping": "^2.1.0", "@babel/code-frame": "^7.16.7", @@ -25771,7 +25928,6 @@ "version": "7.17.9", "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.17.9.tgz", "integrity": "sha512-rAdDousTwxbIxbz5I7GEQ3lUip+xVCXooZNbsydCWs3xA7ZsYOv+CFRdzGxRX78BmQHu9B1Eso59AOZQOJDEdQ==", - "dev": true, "requires": { "@babel/types": "^7.17.0", "jsesc": "^2.5.1", @@ -25781,8 +25937,7 @@ "source-map": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" } } }, @@ -25809,7 +25964,6 @@ "version": "7.17.7", "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.17.7.tgz", "integrity": "sha512-UFzlz2jjd8kroj0hmCFV5zr+tQPi1dpC2cRsDV/3IEW8bJfCPrPpmcSN6ZS8RqIq4LXcmpipCQFPddyFA5Yc7w==", - "dev": true, "requires": { "@babel/compat-data": "^7.17.7", "@babel/helper-validator-option": "^7.16.7", @@ -25862,7 +26016,6 @@ "version": "7.16.7", "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.16.7.tgz", "integrity": "sha512-SLLb0AAn6PkUeAfKJCCOl9e1R53pQlGAfc4y4XuMRZfqeMYLE0dM1LMhqbGAlGQY0lfw5/ohoYWAe9V1yibRag==", - "dev": true, "requires": { "@babel/types": "^7.16.7" } @@ -25880,7 +26033,6 @@ "version": "7.17.9", "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.17.9.tgz", "integrity": "sha512-7cRisGlVtiVqZ0MW0/yFB4atgpGLWEHUVYnb448hZK4x+vih0YO5UoS11XIYtZYqHd0dIPMdUSv8q5K4LdMnIg==", - "dev": true, "requires": { "@babel/template": "^7.16.7", "@babel/types": "^7.17.0" @@ -25890,7 +26042,6 @@ "version": "7.16.7", "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.7.tgz", "integrity": "sha512-m04d/0Op34H5v7pbZw6pSKP7weA6lsMvfiIAMeIvkY/R4xQtBSMFEigu9QTZ2qB/9l22vsxtM8a+Q8CzD255fg==", - "dev": true, "requires": { "@babel/types": "^7.16.7" } @@ -25908,7 +26059,6 @@ "version": "7.16.7", "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz", "integrity": "sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg==", - "dev": true, "requires": { "@babel/types": "^7.16.7" } @@ -25917,7 +26067,6 @@ "version": "7.17.7", "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.17.7.tgz", "integrity": "sha512-VmZD99F3gNTYB7fJRDTi+u6l/zxY0BE6OIxPSU7a50s6ZUQkHwSDmV92FfM+oCG0pZRVojGYhkR8I0OGeCVREw==", - "dev": true, "requires": { "@babel/helper-environment-visitor": "^7.16.7", "@babel/helper-module-imports": "^7.16.7", @@ -25941,8 +26090,7 @@ "@babel/helper-plugin-utils": { "version": "7.16.7", "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", - "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==", - "dev": true + "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==" }, "@babel/helper-remap-async-to-generator": { "version": "7.16.8", @@ -25972,7 +26120,6 @@ "version": "7.17.7", "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.17.7.tgz", "integrity": "sha512-txyMCGroZ96i+Pxr3Je3lzEJjqwaRC9buMUgtomcrLe5Nd0+fk1h0LLA+ixUF5OW7AhHuQ7Es1WcQJZmZsz2XA==", - "dev": true, "requires": { "@babel/types": "^7.17.0" } @@ -25990,7 +26137,6 @@ "version": "7.16.7", "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz", "integrity": "sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw==", - "dev": true, "requires": { "@babel/types": "^7.16.7" } @@ -25998,14 +26144,12 @@ "@babel/helper-validator-identifier": { "version": "7.16.7", "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", - "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==", - "dev": true + "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==" }, "@babel/helper-validator-option": { "version": "7.16.7", "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.16.7.tgz", - "integrity": "sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ==", - "dev": true + "integrity": "sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ==" }, "@babel/helper-wrap-function": { "version": "7.16.8", @@ -26023,7 +26167,6 @@ "version": "7.17.9", "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.17.9.tgz", "integrity": "sha512-cPCt915ShDWUEzEp3+UNRktO2n6v49l5RSnG9M5pS24hA+2FAc5si+Pn1i4VVbQQ+jh+bIZhPFQOJOzbrOYY1Q==", - "dev": true, "requires": { "@babel/template": "^7.16.7", "@babel/traverse": "^7.17.9", @@ -26034,7 +26177,6 @@ "version": "7.17.9", "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.17.9.tgz", "integrity": "sha512-J9PfEKCbFIv2X5bjTMiZu6Vf341N05QIY+d6FvVKynkG1S7G0j3I0QoRtWIrXhZ+/Nlb5Q0MzqL7TokEJ5BNHg==", - "dev": true, "requires": { "@babel/helper-validator-identifier": "^7.16.7", "chalk": "^2.0.0", @@ -26044,8 +26186,7 @@ "@babel/parser": { "version": "7.17.9", "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.17.9.tgz", - "integrity": "sha512-vqUSBLP8dQHFPdPi9bc5GK9vRkYHJ49fsZdtoJ8EQ8ibpwk5rPKfvNIwChB0KVXcIjcepEBBd2VHC5r9Gy8ueg==", - "dev": true + "integrity": "sha512-vqUSBLP8dQHFPdPi9bc5GK9vRkYHJ49fsZdtoJ8EQ8ibpwk5rPKfvNIwChB0KVXcIjcepEBBd2VHC5r9Gy8ueg==" }, "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { "version": "7.16.7", @@ -26343,7 +26484,6 @@ "version": "7.16.7", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.16.7.tgz", "integrity": "sha512-Esxmk7YjA8QysKeT3VhTXvF6y77f/a91SIs4pWb4H2eWGQkCKFgQaG6hdoEVZtGsrAcb2K5BW66XsOErD4WU3Q==", - "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.16.7" } @@ -26971,7 +27111,6 @@ "version": "7.16.7", "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.7.tgz", "integrity": "sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w==", - "dev": true, "requires": { "@babel/code-frame": "^7.16.7", "@babel/parser": "^7.16.7", @@ -26982,7 +27121,6 @@ "version": "7.17.9", "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.17.9.tgz", "integrity": "sha512-PQO8sDIJ8SIwipTPiR71kJQCKQYB5NGImbOviK8K+kg5xkNSYXLBupuX9QhatFowrsvo9Hj8WgArg3W7ijNAQw==", - "dev": true, "requires": { "@babel/code-frame": "^7.16.7", "@babel/generator": "^7.17.9", @@ -27000,7 +27138,6 @@ "version": "7.17.0", "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.0.tgz", "integrity": "sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==", - "dev": true, "requires": { "@babel/helper-validator-identifier": "^7.16.7", "to-fast-properties": "^2.0.0" @@ -27035,6 +27172,86 @@ "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==", "dev": true }, + "@emotion/babel-plugin": { + "version": "11.9.2", + "resolved": "https://registry.npmjs.org/@emotion/babel-plugin/-/babel-plugin-11.9.2.tgz", + "integrity": "sha512-Pr/7HGH6H6yKgnVFNEj2MVlreu3ADqftqjqwUvDy/OJzKFgxKeTQ+eeUf20FOTuHVkDON2iNa25rAXVYtWJCjw==", + "requires": { + "@babel/helper-module-imports": "^7.12.13", + "@babel/plugin-syntax-jsx": "^7.12.13", + "@babel/runtime": "^7.13.10", + "@emotion/hash": "^0.8.0", + "@emotion/memoize": "^0.7.5", + "@emotion/serialize": "^1.0.2", + "babel-plugin-macros": "^2.6.1", + "convert-source-map": "^1.5.0", + "escape-string-regexp": "^4.0.0", + "find-root": "^1.1.0", + "source-map": "^0.5.7", + "stylis": "4.0.13" + }, + "dependencies": { + "@emotion/memoize": { + "version": "0.7.5", + "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.7.5.tgz", + "integrity": "sha512-igX9a37DR2ZPGYtV6suZ6whr8pTFtyHL3K/oLUotxpSVO2ASaprmAe2Dkq7tBo7CRY7MMDrAa9nuQP9/YG8FxQ==" + }, + "@emotion/serialize": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-1.0.3.tgz", + "integrity": "sha512-2mSSvgLfyV3q+iVh3YWgNlUc2a9ZlDU7DjuP5MjK3AXRR0dYigCrP99aeFtaB2L/hjfEZdSThn5dsZ0ufqbvsA==", + "requires": { + "@emotion/hash": "^0.8.0", + "@emotion/memoize": "^0.7.4", + "@emotion/unitless": "^0.7.5", + "@emotion/utils": "^1.0.0", + "csstype": "^3.0.2" + } + }, + "@emotion/utils": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-1.1.0.tgz", + "integrity": "sha512-iRLa/Y4Rs5H/f2nimczYmS5kFJEbpiVvgN3XVfZ022IYhuNA1IRSHEizcof88LtCTXtl9S2Cxt32KgaXEu72JQ==" + }, + "babel-plugin-macros": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-2.8.0.tgz", + "integrity": "sha512-SEP5kJpfGYqYKpBrj5XU3ahw5p5GOHJ0U5ssOSQ/WBVdwkD2Dzlce95exQTs3jOVWPPKLBN2rlEWkCK7dSmLvg==", + "requires": { + "@babel/runtime": "^7.7.2", + "cosmiconfig": "^6.0.0", + "resolve": "^1.12.0" + } + }, + "cosmiconfig": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz", + "integrity": "sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==", + "requires": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.1.0", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.7.2" + } + }, + "csstype": { + "version": "3.0.11", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.0.11.tgz", + "integrity": "sha512-sa6P2wJ+CAbgyy4KFssIb/JNMLxFvKF1pCYCSXS8ZMuqZnMsrxqI2E5sPyoTpxoPU/gVZMzr2zjOfg8GIZOMsw==" + }, + "escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==" + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" + } + } + }, "@emotion/cache": { "version": "10.0.29", "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-10.0.29.tgz", @@ -27075,8 +27292,7 @@ "@emotion/hash": { "version": "0.8.0", "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.8.0.tgz", - "integrity": "sha512-kBJtf7PH6aWwZ6fka3zQ0p6SBYzx4fl1LoZXE2RrnYST9Xljm7WfKJrU4g/Xr3Beg72MLrp1AWNUmuYJTL7Cow==", - "dev": true + "integrity": "sha512-kBJtf7PH6aWwZ6fka3zQ0p6SBYzx4fl1LoZXE2RrnYST9Xljm7WfKJrU4g/Xr3Beg72MLrp1AWNUmuYJTL7Cow==" }, "@emotion/is-prop-valid": { "version": "0.8.8", @@ -27090,8 +27306,62 @@ "@emotion/memoize": { "version": "0.7.4", "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.7.4.tgz", - "integrity": "sha512-Ja/Vfqe3HpuzRsG1oBtWTHk2PGZ7GR+2Vz5iYGelAw8dx32K0y7PjVuxK6z1nMpZOqAFsRUPCkK1YjJ56qJlgw==", - "dev": true + "integrity": "sha512-Ja/Vfqe3HpuzRsG1oBtWTHk2PGZ7GR+2Vz5iYGelAw8dx32K0y7PjVuxK6z1nMpZOqAFsRUPCkK1YjJ56qJlgw==" + }, + "@emotion/react": { + "version": "11.9.0", + "resolved": "https://registry.npmjs.org/@emotion/react/-/react-11.9.0.tgz", + "integrity": "sha512-lBVSF5d0ceKtfKCDQJveNAtkC7ayxpVlgOohLgXqRwqWr9bOf4TZAFFyIcNngnV6xK6X4x2ZeXq7vliHkoVkxQ==", + "requires": { + "@babel/runtime": "^7.13.10", + "@emotion/babel-plugin": "^11.7.1", + "@emotion/cache": "^11.7.1", + "@emotion/serialize": "^1.0.3", + "@emotion/utils": "^1.1.0", + "@emotion/weak-memoize": "^0.2.5", + "hoist-non-react-statics": "^3.3.1" + }, + "dependencies": { + "@emotion/cache": { + "version": "11.7.1", + "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-11.7.1.tgz", + "integrity": "sha512-r65Zy4Iljb8oyjtLeCuBH8Qjiy107dOYC6SJq7g7GV5UCQWMObY4SJDPGFjiiVpPrOJ2hmJOoBiYTC7hwx9E2A==", + "requires": { + "@emotion/memoize": "^0.7.4", + "@emotion/sheet": "^1.1.0", + "@emotion/utils": "^1.0.0", + "@emotion/weak-memoize": "^0.2.5", + "stylis": "4.0.13" + } + }, + "@emotion/serialize": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-1.0.3.tgz", + "integrity": "sha512-2mSSvgLfyV3q+iVh3YWgNlUc2a9ZlDU7DjuP5MjK3AXRR0dYigCrP99aeFtaB2L/hjfEZdSThn5dsZ0ufqbvsA==", + "requires": { + "@emotion/hash": "^0.8.0", + "@emotion/memoize": "^0.7.4", + "@emotion/unitless": "^0.7.5", + "@emotion/utils": "^1.0.0", + "csstype": "^3.0.2" + } + }, + "@emotion/sheet": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@emotion/sheet/-/sheet-1.1.0.tgz", + "integrity": "sha512-u0AX4aSo25sMAygCuQTzS+HsImZFuS8llY8O7b9MDRzbJM0kVJlAz6KNDqcG7pOuQZJmj/8X/rAW+66kMnMW+g==" + }, + "@emotion/utils": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-1.1.0.tgz", + "integrity": "sha512-iRLa/Y4Rs5H/f2nimczYmS5kFJEbpiVvgN3XVfZ022IYhuNA1IRSHEizcof88LtCTXtl9S2Cxt32KgaXEu72JQ==" + }, + "csstype": { + "version": "3.0.11", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.0.11.tgz", + "integrity": "sha512-sa6P2wJ+CAbgyy4KFssIb/JNMLxFvKF1pCYCSXS8ZMuqZnMsrxqI2E5sPyoTpxoPU/gVZMzr2zjOfg8GIZOMsw==" + } + } }, "@emotion/serialize": { "version": "0.11.16", @@ -27143,8 +27413,7 @@ "@emotion/unitless": { "version": "0.7.5", "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.7.5.tgz", - "integrity": "sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg==", - "dev": true + "integrity": "sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg==" }, "@emotion/utils": { "version": "0.11.3", @@ -27155,8 +27424,7 @@ "@emotion/weak-memoize": { "version": "0.2.5", "resolved": "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.2.5.tgz", - "integrity": "sha512-6U71C2Wp7r5XtFtQzYrW5iKFT67OixrSxjI4MptCHzdSVlgabczzqLe0ZSgnub/5Kp4hSbpDB1tMytZY9pwxxA==", - "dev": true + "integrity": "sha512-6U71C2Wp7r5XtFtQzYrW5iKFT67OixrSxjI4MptCHzdSVlgabczzqLe0ZSgnub/5Kp4hSbpDB1tMytZY9pwxxA==" }, "@fullhuman/postcss-purgecss": { "version": "2.3.0", @@ -27216,20 +27484,17 @@ "@jridgewell/resolve-uri": { "version": "3.0.5", "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.5.tgz", - "integrity": "sha512-VPeQ7+wH0itvQxnG+lIzWgkysKIr3L9sslimFW55rHMdGu/qCQ5z5h9zq4gI8uBtqkpHhsF4Z/OwExufUCThew==", - "dev": true + "integrity": "sha512-VPeQ7+wH0itvQxnG+lIzWgkysKIr3L9sslimFW55rHMdGu/qCQ5z5h9zq4gI8uBtqkpHhsF4Z/OwExufUCThew==" }, "@jridgewell/sourcemap-codec": { "version": "1.4.11", "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.11.tgz", - "integrity": "sha512-Fg32GrJo61m+VqYSdRSjRXMjQ06j8YIYfcTqndLYVAaHmroZHLJZCydsWBOTDqXS2v+mjxohBWEMfg97GXmYQg==", - "dev": true + "integrity": "sha512-Fg32GrJo61m+VqYSdRSjRXMjQ06j8YIYfcTqndLYVAaHmroZHLJZCydsWBOTDqXS2v+mjxohBWEMfg97GXmYQg==" }, "@jridgewell/trace-mapping": { "version": "0.3.9", "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", - "dev": true, "requires": { "@jridgewell/resolve-uri": "^3.0.3", "@jridgewell/sourcemap-codec": "^1.4.10" @@ -29063,7 +29328,7 @@ "version": "14.18.13", "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.13.tgz", "integrity": "sha512-Z6/KzgyWOga3pJNS42A+zayjhPbf2zM3hegRQaOPnLOzEi86VV++6FLDWgR1LGrVCRufP/ph2daa3tEa5br1zA==", - "dev": true + "devOptional": true }, "@types/node-fetch": { "version": "2.6.1", @@ -29096,8 +29361,7 @@ "@types/parse-json": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", - "dev": true + "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==" }, "@types/parse5": { "version": "5.0.3", @@ -29114,8 +29378,7 @@ "@types/prop-types": { "version": "15.7.5", "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz", - "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==", - "dev": true + "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==" }, "@types/q": { "version": "1.5.5", @@ -29133,7 +29396,6 @@ "version": "18.0.6", "resolved": "https://registry.npmjs.org/@types/react/-/react-18.0.6.tgz", "integrity": "sha512-bPqwzJRzKtfI0mVYr5R+1o9BOE8UEXefwc1LwcBtfnaAn6OoqMhLa/91VA8aeWfDPJt1kHvYKI8RHcQybZLHHA==", - "dev": true, "requires": { "@types/prop-types": "*", "@types/scheduler": "*", @@ -29143,8 +29405,7 @@ "csstype": { "version": "3.0.11", "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.0.11.tgz", - "integrity": "sha512-sa6P2wJ+CAbgyy4KFssIb/JNMLxFvKF1pCYCSXS8ZMuqZnMsrxqI2E5sPyoTpxoPU/gVZMzr2zjOfg8GIZOMsw==", - "dev": true + "integrity": "sha512-sa6P2wJ+CAbgyy4KFssIb/JNMLxFvKF1pCYCSXS8ZMuqZnMsrxqI2E5sPyoTpxoPU/gVZMzr2zjOfg8GIZOMsw==" } } }, @@ -29157,6 +29418,14 @@ "@types/react": "*" } }, + "@types/react-transition-group": { + "version": "4.4.4", + "resolved": "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.4.4.tgz", + "integrity": "sha512-7gAPz7anVK5xzbeQW9wFBDg7G++aPLAFY0QaSMOou9rJZpbuI58WAuJrgu+qR92l61grlnCUe7AFX8KGahAgug==", + "requires": { + "@types/react": "*" + } + }, "@types/resize-observer-browser": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/@types/resize-observer-browser/-/resize-observer-browser-0.1.7.tgz", @@ -29165,8 +29434,7 @@ "@types/scheduler": { "version": "0.16.2", "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz", - "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==", - "dev": true + "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==" }, "@types/source-list-map": { "version": "0.1.2", @@ -30870,8 +31138,7 @@ "callsites": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==" }, "camel-case": { "version": "3.0.0", @@ -31474,7 +31741,6 @@ "version": "1.8.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", - "dev": true, "requires": { "safe-buffer": "~5.1.1" } @@ -33243,7 +33509,6 @@ "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dev": true, "requires": { "is-arrayish": "^0.2.1" } @@ -34330,8 +34595,7 @@ "find-root": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz", - "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==", - "dev": true + "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==" }, "find-up": { "version": "5.0.0", @@ -34868,8 +35132,7 @@ "gensync": { "version": "1.0.0-beta.2", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "dev": true + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==" }, "get-caller-file": { "version": "2.0.5", @@ -34993,8 +35256,7 @@ "globals": { "version": "11.12.0", "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==" }, "globalthis": { "version": "1.0.2", @@ -35896,7 +36158,6 @@ "version": "3.3.0", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dev": true, "requires": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" @@ -35905,8 +36166,7 @@ "resolve-from": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==" } } }, @@ -36135,8 +36395,7 @@ "is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", - "dev": true + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=" }, "is-bigint": { "version": "1.0.4", @@ -36602,8 +36861,7 @@ "jsesc": { "version": "2.5.2", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==" }, "jshint": { "version": "2.13.4", @@ -36638,8 +36896,7 @@ "json-parse-even-better-errors": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "dev": true + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" }, "json-schema-traverse": { "version": "0.4.1", @@ -36656,8 +36913,7 @@ "json5": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", - "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==", - "dev": true + "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==" }, "jsonfile": { "version": "6.1.0", @@ -36774,8 +37030,7 @@ "lines-and-columns": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", - "dev": true + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" }, "loader-runner": { "version": "2.4.0", @@ -37029,6 +37284,11 @@ "fs-monkey": "1.0.3" } }, + "memoize-one": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-5.2.1.tgz", + "integrity": "sha512-zYiwtZUcYyXKo/np96AGZAckk+FWWsUdJ3cHGGmld7+AhvcWmQyGCYUh1hc4Q/pkOhb65dQR/pqCyK0cOaHz4Q==" + }, "memoizerific": { "version": "1.11.3", "resolved": "https://registry.npmjs.org/memoizerific/-/memoizerific-1.11.3.tgz", @@ -38237,7 +38497,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, "requires": { "callsites": "^3.0.0" } @@ -38273,7 +38532,6 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", - "dev": true, "requires": { "@babel/code-frame": "^7.0.0", "error-ex": "^1.3.1", @@ -38401,8 +38659,7 @@ "path-type": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==" }, "pbkdf2": { "version": "3.1.2", @@ -40593,6 +40850,44 @@ } } }, + "react-select": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/react-select/-/react-select-5.3.1.tgz", + "integrity": "sha512-Y195MmhDoDAj/8gTDyYZU1Raf7tmZd81wxM6RkFko4pqJ4Xv0/ilqUMtSn+GYkwmSlTWeMlzh+e+t7PJgtuXPw==", + "requires": { + "@babel/runtime": "^7.12.0", + "@emotion/cache": "^11.4.0", + "@emotion/react": "^11.8.1", + "@types/react-transition-group": "^4.4.0", + "memoize-one": "^5.0.0", + "prop-types": "^15.6.0", + "react-transition-group": "^4.3.0" + }, + "dependencies": { + "@emotion/cache": { + "version": "11.7.1", + "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-11.7.1.tgz", + "integrity": "sha512-r65Zy4Iljb8oyjtLeCuBH8Qjiy107dOYC6SJq7g7GV5UCQWMObY4SJDPGFjiiVpPrOJ2hmJOoBiYTC7hwx9E2A==", + "requires": { + "@emotion/memoize": "^0.7.4", + "@emotion/sheet": "^1.1.0", + "@emotion/utils": "^1.0.0", + "@emotion/weak-memoize": "^0.2.5", + "stylis": "4.0.13" + } + }, + "@emotion/sheet": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@emotion/sheet/-/sheet-1.1.0.tgz", + "integrity": "sha512-u0AX4aSo25sMAygCuQTzS+HsImZFuS8llY8O7b9MDRzbJM0kVJlAz6KNDqcG7pOuQZJmj/8X/rAW+66kMnMW+g==" + }, + "@emotion/utils": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-1.1.0.tgz", + "integrity": "sha512-iRLa/Y4Rs5H/f2nimczYmS5kFJEbpiVvgN3XVfZ022IYhuNA1IRSHEizcof88LtCTXtl9S2Cxt32KgaXEu72JQ==" + } + } + }, "react-sizeme": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/react-sizeme/-/react-sizeme-3.0.2.tgz", @@ -41424,8 +41719,7 @@ "safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" }, "safe-regex": { "version": "1.1.0", @@ -41520,8 +41814,7 @@ "semver": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" }, "send": { "version": "0.17.2", @@ -42617,6 +42910,11 @@ "postcss-selector-parser": "^6.0.4" } }, + "stylis": { + "version": "4.0.13", + "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.0.13.tgz", + "integrity": "sha512-xGPXiFVl4YED9Jh7Euv2V220mriG9u4B2TA6Ybjc1catrstKD2PpIdU3U0RKpkVBC2EhmL/F0sPCr9vrFTNRag==" + }, "sugarss": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/sugarss/-/sugarss-2.0.0.tgz", @@ -43203,8 +43501,7 @@ "to-fast-properties": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", - "dev": true + "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=" }, "to-object-path": { "version": "0.3.0", @@ -45881,8 +46178,7 @@ "yaml": { "version": "1.10.2", "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", - "dev": true + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==" }, "yargs": { "version": "17.4.1", diff --git a/frontend/package.json b/frontend/package.json index 7f51ba174..3a240eedc 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -49,6 +49,7 @@ "react-redux": "^5.1.2", "react-router": "^4.3.1", "react-router-dom": "^4.3.1", + "react-select": "^5.3.1", "react-svg-map": "^2.2.0", "react-tippy": "^1.4.0", "react-toastify": "^5.5.0", From 02c39199d211ab16e20435592edc80d4b827a674 Mon Sep 17 00:00:00 2001 From: Shekar Siri Date: Mon, 2 May 2022 16:26:05 +0200 Subject: [PATCH 49/91] feat(ui) - session settings - changed state --- .../SessionSettings/components/CaptureRate.tsx | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/frontend/app/components/shared/SessionSettings/components/CaptureRate.tsx b/frontend/app/components/shared/SessionSettings/components/CaptureRate.tsx index 6436bd652..9576de72a 100644 --- a/frontend/app/components/shared/SessionSettings/components/CaptureRate.tsx +++ b/frontend/app/components/shared/SessionSettings/components/CaptureRate.tsx @@ -4,10 +4,12 @@ import { useStore } from 'App/mstore'; import { useObserver } from 'mobx-react-lite'; function CaptureRate(props) { + const [changed, setChanged] = React.useState(false); const { settingsStore } = useStore(); const sessionSettings = useObserver(() => settingsStore.sessionSettings) const [captureRate, setCaptureRate] = React.useState(sessionSettings.captureRate); const [captureAll, setCaptureAll] = React.useState(captureRate === 100); + return ( <>

    Capture Rate

    @@ -16,7 +18,10 @@ function CaptureRate(props) { setCaptureAll(!captureAll)} + onChange={() => { + setCaptureAll(!captureAll) + setChanged(true) + }} label="Capture 100% of the sessions" />
    @@ -26,7 +31,10 @@ function CaptureRate(props) { type="number" value={captureRate} style={{ height: '38px', width: '100px'}} - onChange={(e, { value }) => setCaptureRate(value)} + onChange={(e, { value }) => { + setCaptureRate(value) + setChanged(true); + }} disabled={captureAll} min={0} minValue={0} @@ -34,7 +42,7 @@ function CaptureRate(props) {
    of the sessions - +
    ); From 87f76f484ded61404c07ebb690225c880e531939 Mon Sep 17 00:00:00 2001 From: Shekar Siri Date: Mon, 2 May 2022 16:31:19 +0200 Subject: [PATCH 50/91] feat(ui) - session settings - changed state --- .../Dashboard/components/DashboardModal/DashboardModal.tsx | 2 +- frontend/app/components/Modal/ModalOverlay.tsx | 2 +- .../app/components/Session_/Player/Controls/DraggableCircle.tsx | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/frontend/app/components/Dashboard/components/DashboardModal/DashboardModal.tsx b/frontend/app/components/Dashboard/components/DashboardModal/DashboardModal.tsx index 575cb7de8..d19556857 100644 --- a/frontend/app/components/Dashboard/components/DashboardModal/DashboardModal.tsx +++ b/frontend/app/components/Dashboard/components/DashboardModal/DashboardModal.tsx @@ -38,7 +38,7 @@ function DashboardModal(props) { return useObserver(() => (
    diff --git a/frontend/app/components/Modal/ModalOverlay.tsx b/frontend/app/components/Modal/ModalOverlay.tsx index 4dad0ec61..ef46024e1 100644 --- a/frontend/app/components/Modal/ModalOverlay.tsx +++ b/frontend/app/components/Modal/ModalOverlay.tsx @@ -6,7 +6,7 @@ function ModalOverlay({ children }) { let modal = useModal(); return ( -
    +
    modal.hideModal()} className={stl.overlay} diff --git a/frontend/app/components/Session_/Player/Controls/DraggableCircle.tsx b/frontend/app/components/Session_/Player/Controls/DraggableCircle.tsx index f4ebd6abf..385707879 100644 --- a/frontend/app/components/Session_/Player/Controls/DraggableCircle.tsx +++ b/frontend/app/components/Session_/Player/Controls/DraggableCircle.tsx @@ -19,7 +19,7 @@ function getStyles( // because IE will ignore our custom "empty image" drag preview. opacity: isDragging ? 0 : 1, height: isDragging ? 0 : '', - zIndex: '99', + zIndex: 99, cursor: 'move' } } From 5ec46ad7530bee862d939d628d3661cd34b1eb16 Mon Sep 17 00:00:00 2001 From: Alexander Zavorotynskiy Date: Mon, 2 May 2022 17:36:33 +0200 Subject: [PATCH 51/91] Moved assets cache logic --- backend/internal/assetscache/assets.go | 83 +++++++++++++++++++++++++ backend/internal/config/config.go | 2 + backend/internal/router/assets.go | 36 ----------- backend/internal/router/handlers-ios.go | 32 +++------- backend/internal/router/handlers-web.go | 32 +--------- backend/internal/router/handlers.go | 4 +- backend/internal/router/model.go | 19 ++++++ backend/internal/services/services.go | 14 +++-- 8 files changed, 126 insertions(+), 96 deletions(-) create mode 100644 backend/internal/assetscache/assets.go delete mode 100644 backend/internal/router/assets.go diff --git a/backend/internal/assetscache/assets.go b/backend/internal/assetscache/assets.go new file mode 100644 index 000000000..1ef70b56c --- /dev/null +++ b/backend/internal/assetscache/assets.go @@ -0,0 +1,83 @@ +package assetscache + +import ( + "openreplay/backend/internal/config" + "openreplay/backend/pkg/messages" + "openreplay/backend/pkg/queue/types" + "openreplay/backend/pkg/url/assets" +) + +type AssetsCache struct { + cfg *config.Config + rewriter *assets.Rewriter + producer types.Producer +} + +func New(cfg *config.Config, rewriter *assets.Rewriter, producer types.Producer) *AssetsCache { + return &AssetsCache{ + cfg: cfg, + rewriter: rewriter, + producer: producer, + } +} + +func (e *AssetsCache) ParseAssets(sessID uint64, msg messages.Message) messages.Message { + switch m := msg.(type) { + case *messages.SetNodeAttributeURLBased: + if m.Name == "src" || m.Name == "href" { + return &messages.SetNodeAttribute{ + ID: m.ID, + Name: m.Name, + Value: e.handleURL(sessID, m.BaseURL, m.Value), + } + } else if m.Name == "style" { + return &messages.SetNodeAttribute{ + ID: m.ID, + Name: m.Name, + Value: e.handleCSS(sessID, m.BaseURL, m.Value), + } + } + case *messages.SetCSSDataURLBased: + return &messages.SetCSSData{ + ID: m.ID, + Data: e.handleCSS(sessID, m.BaseURL, m.Data), + } + case *messages.CSSInsertRuleURLBased: + return &messages.CSSInsertRule{ + ID: m.ID, + Index: m.Index, + Rule: e.handleCSS(sessID, m.BaseURL, m.Rule), + } + } + return msg +} + +func (e *AssetsCache) sendAssetForCache(sessionID uint64, baseURL string, relativeURL string) { + if fullURL, cacheable := assets.GetFullCachableURL(baseURL, relativeURL); cacheable { + e.producer.Produce(e.cfg.TopicCache, sessionID, messages.Encode(&messages.AssetCache{ + URL: fullURL, + })) + } +} + +func (e *AssetsCache) sendAssetsForCacheFromCSS(sessionID uint64, baseURL string, css string) { + for _, u := range assets.ExtractURLsFromCSS(css) { // TODO: in one shot with rewriting + e.sendAssetForCache(sessionID, baseURL, u) + } +} + +func (e *AssetsCache) handleURL(sessionID uint64, baseURL string, url string) string { + if e.cfg.CacheAssets { + e.sendAssetForCache(sessionID, baseURL, url) + return e.rewriter.RewriteURL(sessionID, baseURL, url) + } + return assets.ResolveURL(baseURL, url) +} + +func (e *AssetsCache) handleCSS(sessionID uint64, baseURL string, css string) string { + if e.cfg.CacheAssets { + e.sendAssetsForCacheFromCSS(sessionID, baseURL, css) + return e.rewriter.RewriteCSS(sessionID, baseURL, css) + } + return assets.ResolveCSS(baseURL, css) +} diff --git a/backend/internal/config/config.go b/backend/internal/config/config.go index 45f957d1c..5b55ba346 100644 --- a/backend/internal/config/config.go +++ b/backend/internal/config/config.go @@ -15,6 +15,7 @@ type Config struct { CacheAssets bool BeaconSizeLimit int64 JsonSizeLimit int64 + FileSizeLimit int64 AssetsOrigin string AWSRegion string S3BucketIOSImages string @@ -36,6 +37,7 @@ func New() *Config { CacheAssets: env.Bool("CACHE_ASSETS"), BeaconSizeLimit: int64(env.Uint64("BEACON_SIZE_LIMIT")), JsonSizeLimit: 1e3, // 1Kb + FileSizeLimit: 1e7, // 10Mb AssetsOrigin: env.String("ASSETS_ORIGIN"), AWSRegion: env.String("AWS_REGION"), S3BucketIOSImages: env.String("S3_BUCKET_IOS_IMAGES"), diff --git a/backend/internal/router/assets.go b/backend/internal/router/assets.go deleted file mode 100644 index 42347f224..000000000 --- a/backend/internal/router/assets.go +++ /dev/null @@ -1,36 +0,0 @@ -package router - -import ( - "openreplay/backend/pkg/messages" - "openreplay/backend/pkg/url/assets" -) - -func (e *Router) sendAssetForCache(sessionID uint64, baseURL string, relativeURL string) { - if fullURL, cacheable := assets.GetFullCachableURL(baseURL, relativeURL); cacheable { - e.services.Producer.Produce(e.cfg.TopicCache, sessionID, messages.Encode(&messages.AssetCache{ - URL: fullURL, - })) - } -} - -func (e *Router) sendAssetsForCacheFromCSS(sessionID uint64, baseURL string, css string) { - for _, u := range assets.ExtractURLsFromCSS(css) { // TODO: in one shot with rewriting - e.sendAssetForCache(sessionID, baseURL, u) - } -} - -func (e *Router) handleURL(sessionID uint64, baseURL string, url string) string { - if e.cfg.CacheAssets { - e.sendAssetForCache(sessionID, baseURL, url) - return e.services.Rewriter.RewriteURL(sessionID, baseURL, url) - } - return assets.ResolveURL(baseURL, url) -} - -func (e *Router) handleCSS(sessionID uint64, baseURL string, css string) string { - if e.cfg.CacheAssets { - e.sendAssetsForCacheFromCSS(sessionID, baseURL, css) - return e.services.Rewriter.RewriteCSS(sessionID, baseURL, css) - } - return assets.ResolveCSS(baseURL, css) -} diff --git a/backend/internal/router/handlers-ios.go b/backend/internal/router/handlers-ios.go index f0b0d977f..426de7c05 100644 --- a/backend/internal/router/handlers-ios.go +++ b/backend/internal/router/handlers-ios.go @@ -16,30 +16,13 @@ import ( "openreplay/backend/pkg/token" ) -const FILES_SIZE_LIMIT int64 = 1e7 // 10Mb - func (e *Router) startSessionHandlerIOS(w http.ResponseWriter, r *http.Request) { - type request struct { - Token string `json:"token"` - ProjectKey *string `json:"projectKey"` - TrackerVersion string `json:"trackerVersion"` - RevID string `json:"revID"` - UserUUID *string `json:"userUUID"` - UserOSVersion string `json:"userOSVersion"` - UserDevice string `json:"userDevice"` - Timestamp uint64 `json:"timestamp"` - } - type response struct { - Token string `json:"token"` - ImagesHashList []string `json:"imagesHashList"` - UserUUID string `json:"userUUID"` - BeaconSizeLimit int64 `json:"beaconSizeLimit"` - SessionID string `json:"sessionID"` - } startTime := time.Now() - req := &request{} + req := &StartIOSSessionRequest{} + body := http.MaxBytesReader(w, r.Body, e.cfg.JsonSizeLimit) defer body.Close() + if err := json.NewDecoder(body).Decode(req); err != nil { ResponseWithError(w, http.StatusBadRequest, err) return @@ -50,7 +33,7 @@ func (e *Router) startSessionHandlerIOS(w http.ResponseWriter, r *http.Request) return } - p, err := e.services.Pgconn.GetProjectByKey(*req.ProjectKey) + p, err := e.services.Database.GetProjectByKey(*req.ProjectKey) if err != nil { if postgres.IsNoRowsErr(err) { ResponseWithError(w, http.StatusNotFound, errors.New("Project doesn't exist or is not active")) @@ -100,7 +83,7 @@ func (e *Router) startSessionHandlerIOS(w http.ResponseWriter, r *http.Request) })) } - ResponseWithJSON(w, &response{ + ResponseWithJSON(w, &StartIOSSessionResponse{ Token: e.services.Tokenizer.Compose(*tokenData), UserUUID: userUUID, SessionID: strconv.FormatUint(tokenData.ID, 10), @@ -136,8 +119,9 @@ func (e *Router) imagesUploadHandlerIOS(w http.ResponseWriter, r *http.Request) return } - r.Body = http.MaxBytesReader(w, r.Body, FILES_SIZE_LIMIT) + r.Body = http.MaxBytesReader(w, r.Body, e.cfg.FileSizeLimit) defer r.Body.Close() + err = r.ParseMultipartForm(1e6) // ~1Mb if err == http.ErrNotMultipart || err == http.ErrMissingBoundary { ResponseWithError(w, http.StatusUnsupportedMediaType, err) @@ -166,7 +150,7 @@ func (e *Router) imagesUploadHandlerIOS(w http.ResponseWriter, r *http.Request) key := prefix + fileHeader.Filename log.Printf("Uploading image... %v", key) go func() { //TODO: mime type from header - if err := e.services.S3.Upload(file, key, "image/jpeg", false); err != nil { + if err := e.services.Storage.Upload(file, key, "image/jpeg", false); err != nil { log.Printf("Upload ios screen error. %v", err) } }() diff --git a/backend/internal/router/handlers-web.go b/backend/internal/router/handlers-web.go index b0a3a9b94..d11a9b8ea 100644 --- a/backend/internal/router/handlers-web.go +++ b/backend/internal/router/handlers-web.go @@ -39,7 +39,7 @@ func (e *Router) startSessionHandlerWeb(w http.ResponseWriter, r *http.Request) return } - p, err := e.services.Pgconn.GetProjectByKey(*req.ProjectKey) + p, err := e.services.Database.GetProjectByKey(*req.ProjectKey) if err != nil { if postgres.IsNoRowsErr(err) { ResponseWithError(w, http.StatusNotFound, errors.New("Project doesn't exist or capture limit has been reached")) @@ -119,33 +119,7 @@ func (e *Router) pushMessagesHandlerWeb(w http.ResponseWriter, r *http.Request) // Process each message in request data err = ReadBatchReader(body, func(msg Message) { - switch m := msg.(type) { - case *SetNodeAttributeURLBased: - if m.Name == "src" || m.Name == "href" { - msg = &SetNodeAttribute{ - ID: m.ID, - Name: m.Name, - Value: e.handleURL(sessionData.ID, m.BaseURL, m.Value), - } - } else if m.Name == "style" { - msg = &SetNodeAttribute{ - ID: m.ID, - Name: m.Name, - Value: e.handleCSS(sessionData.ID, m.BaseURL, m.Value), - } - } - case *SetCSSDataURLBased: - msg = &SetCSSData{ - ID: m.ID, - Data: e.handleCSS(sessionData.ID, m.BaseURL, m.Data), - } - case *CSSInsertRuleURLBased: - msg = &CSSInsertRule{ - ID: m.ID, - Index: m.Index, - Rule: e.handleCSS(sessionData.ID, m.BaseURL, m.Rule), - } - } + msg = e.services.Assets.ParseAssets(sessionData.ID, msg) handledMessages.Write(msg.Encode()) }) if err != nil { @@ -188,7 +162,7 @@ func (e *Router) notStartedHandlerWeb(w http.ResponseWriter, r *http.Request) { return } country := e.services.GeoIP.ExtractISOCodeFromHTTPRequest(r) - err := e.services.Pgconn.InsertUnstartedSession(postgres.UnstartedSession{ + err := e.services.Database.InsertUnstartedSession(postgres.UnstartedSession{ ProjectKey: *req.ProjectKey, TrackerVersion: req.TrackerVersion, DoNotTrack: req.DoNotTrack, diff --git a/backend/internal/router/handlers.go b/backend/internal/router/handlers.go index e6e4c1d26..34a7a990d 100644 --- a/backend/internal/router/handlers.go +++ b/backend/internal/router/handlers.go @@ -11,15 +11,17 @@ import ( func (e *Router) pushMessages(w http.ResponseWriter, r *http.Request, sessionID uint64, topicName string) { body := http.MaxBytesReader(w, r.Body, e.cfg.BeaconSizeLimit) defer body.Close() + var reader io.ReadCloser var err error + switch r.Header.Get("Content-Encoding") { case "gzip": log.Println("Gzip", reader) reader, err = gzip.NewReader(body) if err != nil { - ResponseWithError(w, http.StatusInternalServerError, err) // TODO: stage-dependent responce + ResponseWithError(w, http.StatusInternalServerError, err) // TODO: stage-dependent response return } log.Println("Gzip reader init", reader) diff --git a/backend/internal/router/model.go b/backend/internal/router/model.go index 339593d98..b39c49688 100644 --- a/backend/internal/router/model.go +++ b/backend/internal/router/model.go @@ -28,3 +28,22 @@ type NotStartedRequest struct { TrackerVersion string `json:"trackerVersion"` DoNotTrack bool `json:"DoNotTrack"` } + +type StartIOSSessionRequest struct { + Token string `json:"token"` + ProjectKey *string `json:"projectKey"` + TrackerVersion string `json:"trackerVersion"` + RevID string `json:"revID"` + UserUUID *string `json:"userUUID"` + UserOSVersion string `json:"userOSVersion"` + UserDevice string `json:"userDevice"` + Timestamp uint64 `json:"timestamp"` +} + +type StartIOSSessionResponse struct { + Token string `json:"token"` + ImagesHashList []string `json:"imagesHashList"` + UserUUID string `json:"userUUID"` + BeaconSizeLimit int64 `json:"beaconSizeLimit"` + SessionID string `json:"sessionID"` +} diff --git a/backend/internal/services/services.go b/backend/internal/services/services.go index 62569630e..5b84e1dfb 100644 --- a/backend/internal/services/services.go +++ b/backend/internal/services/services.go @@ -1,6 +1,7 @@ package services import ( + "openreplay/backend/internal/assetscache" "openreplay/backend/internal/config" "openreplay/backend/internal/geoip" "openreplay/backend/internal/uaparser" @@ -13,22 +14,23 @@ import ( ) type ServicesBuilder struct { - Pgconn *cache.PGCache + Database *cache.PGCache Producer types.Producer - Rewriter *assets.Rewriter + Assets *assetscache.AssetsCache Flaker *flakeid.Flaker UaParser *uaparser.UAParser GeoIP *geoip.GeoIP Tokenizer *token.Tokenizer - S3 *storage.S3 + Storage *storage.S3 } func New(cfg *config.Config, producer types.Producer, pgconn *cache.PGCache) *ServicesBuilder { + rewriter := assets.NewRewriter(cfg.AssetsOrigin) return &ServicesBuilder{ - Pgconn: pgconn, + Database: pgconn, Producer: producer, - Rewriter: assets.NewRewriter(cfg.AssetsOrigin), - S3: storage.NewS3(cfg.AWSRegion, cfg.S3BucketIOSImages), + Assets: assetscache.New(cfg, rewriter, producer), + Storage: storage.NewS3(cfg.AWSRegion, cfg.S3BucketIOSImages), Tokenizer: token.NewTokenizer(cfg.TokenSecret), UaParser: uaparser.NewUAParser(cfg.UAParserFile), GeoIP: geoip.NewGeoIP(cfg.MaxMinDBFile), From d02ecba354ce294f230e1f35c8ff1d32b01e91c7 Mon Sep 17 00:00:00 2001 From: Alexander Zavorotynskiy Date: Mon, 2 May 2022 17:38:53 +0200 Subject: [PATCH 52/91] Added missed return statements --- backend/internal/router/handlers-ios.go | 11 +++++++++++ backend/internal/router/handlers-web.go | 3 +++ 2 files changed, 14 insertions(+) diff --git a/backend/internal/router/handlers-ios.go b/backend/internal/router/handlers-ios.go index 426de7c05..50f92a6ad 100644 --- a/backend/internal/router/handlers-ios.go +++ b/backend/internal/router/handlers-ios.go @@ -20,6 +20,10 @@ func (e *Router) startSessionHandlerIOS(w http.ResponseWriter, r *http.Request) startTime := time.Now() req := &StartIOSSessionRequest{} + if r.Body == nil { + ResponseWithError(w, http.StatusBadRequest, errors.New("request body is empty")) + return + } body := http.MaxBytesReader(w, r.Body, e.cfg.JsonSizeLimit) defer body.Close() @@ -119,19 +123,26 @@ func (e *Router) imagesUploadHandlerIOS(w http.ResponseWriter, r *http.Request) return } + if r.Body == nil { + ResponseWithError(w, http.StatusBadRequest, errors.New("request body is empty")) + return + } r.Body = http.MaxBytesReader(w, r.Body, e.cfg.FileSizeLimit) defer r.Body.Close() err = r.ParseMultipartForm(1e6) // ~1Mb if err == http.ErrNotMultipart || err == http.ErrMissingBoundary { ResponseWithError(w, http.StatusUnsupportedMediaType, err) + return // } else if err == multipart.ErrMessageTooLarge // if non-files part exceeds 10 MB } else if err != nil { ResponseWithError(w, http.StatusInternalServerError, err) // TODO: send error here only on staging + return } if r.MultipartForm == nil { ResponseWithError(w, http.StatusInternalServerError, errors.New("Multipart not parsed")) + return } if len(r.MultipartForm.Value["projectKey"]) == 0 { diff --git a/backend/internal/router/handlers-web.go b/backend/internal/router/handlers-web.go index d11a9b8ea..fc7c6421d 100644 --- a/backend/internal/router/handlers-web.go +++ b/backend/internal/router/handlers-web.go @@ -22,6 +22,7 @@ func (e *Router) startSessionHandlerWeb(w http.ResponseWriter, r *http.Request) // Check request body if r.Body == nil { ResponseWithError(w, http.StatusBadRequest, errors.New("request body is empty")) + return } body := http.MaxBytesReader(w, r.Body, e.cfg.JsonSizeLimit) defer body.Close() @@ -111,6 +112,7 @@ func (e *Router) pushMessagesHandlerWeb(w http.ResponseWriter, r *http.Request) // Check request body if r.Body == nil { ResponseWithError(w, http.StatusBadRequest, errors.New("request body is empty")) + return } body := http.MaxBytesReader(w, r.Body, e.cfg.BeaconSizeLimit) defer body.Close() @@ -140,6 +142,7 @@ func (e *Router) notStartedHandlerWeb(w http.ResponseWriter, r *http.Request) { // Check request body if r.Body == nil { ResponseWithError(w, http.StatusBadRequest, errors.New("request body is empty")) + return } body := http.MaxBytesReader(w, r.Body, e.cfg.JsonSizeLimit) defer body.Close() From 18d18164b3fc6f3a26e6b767796d3a3fcfe07bd3 Mon Sep 17 00:00:00 2001 From: Alexander Zavorotynskiy Date: Tue, 3 May 2022 10:42:24 +0200 Subject: [PATCH 53/91] Added temporary hack for http service building --- backend/build.sh | 23 +++++++++--- backend/cmd/Dockerfile | 60 ++++++++++++++++++++++++++++++++ backend/services/http/build_hack | 0 3 files changed, 79 insertions(+), 4 deletions(-) mode change 100644 => 100755 backend/build.sh create mode 100644 backend/cmd/Dockerfile create mode 100644 backend/services/http/build_hack diff --git a/backend/build.sh b/backend/build.sh old mode 100644 new mode 100755 index c3c40dd33..8c1714d55 --- a/backend/build.sh +++ b/backend/build.sh @@ -33,12 +33,27 @@ function build_api(){ echo "build completed for http" return } + cwd=$PWD for image in $(ls services); do - docker build -t ${DOCKER_REPO:-'local'}/$image:${git_sha1} --build-arg SERVICE_NAME=$image . - [[ $PUSH_IMAGE -eq 1 ]] && { - docker push ${DOCKER_REPO:-'local'}/$image:${git_sha1} - } + case "$image" in + http) + echo build http + echo "$PWD" + cd cmd + docker build -t ${DOCKER_REPO:-'local'}/$image:${git_sha1} --build-arg SERVICE_NAME=$image -f ../backend . + [[ $PUSH_IMAGE -eq 1 ]] && { + docker push ${DOCKER_REPO:-'local'}/$image:${git_sha1} + } + cd ../ + ;; + *) + docker build -t ${DOCKER_REPO:-'local'}/$image:${git_sha1} --build-arg SERVICE_NAME=$image . + [[ $PUSH_IMAGE -eq 1 ]] && { + docker push ${DOCKER_REPO:-'local'}/$image:${git_sha1} + } + ;; + esac echo "::set-output name=image::${DOCKER_REPO:-'local'}/$image:${git_sha1}" done echo "backend build completed" diff --git a/backend/cmd/Dockerfile b/backend/cmd/Dockerfile new file mode 100644 index 000000000..e2f611afa --- /dev/null +++ b/backend/cmd/Dockerfile @@ -0,0 +1,60 @@ +FROM golang:1.18-alpine3.15 AS prepare + +RUN apk add --no-cache git openssh openssl-dev pkgconf gcc g++ make libc-dev bash + +WORKDIR /root + +COPY go.mod . +COPY go.sum . +RUN go mod download + + +FROM prepare AS build +COPY pkg pkg +COPY services services +COPY internal internal +COPY cmd cmd + +ARG SERVICE_NAME +RUN CGO_ENABLED=1 GOOS=linux GOARCH=amd64 go build -o service -tags musl openreplay/backend/cmd/$SERVICE_NAME + +FROM alpine +RUN apk add --no-cache ca-certificates + +ENV TZ=UTC \ + FS_ULIMIT=1000 \ + FS_DIR=/mnt/efs \ + MAXMINDDB_FILE=/root/geoip.mmdb \ + UAPARSER_FILE=/root/regexes.yaml \ + HTTP_PORT=80 \ + BEACON_SIZE_LIMIT=7000000 \ + KAFKA_USE_SSL=true \ + KAFKA_MAX_POLL_INTERVAL_MS=400000 \ + REDIS_STREAMS_MAX_LEN=3000 \ + TOPIC_RAW_WEB=raw \ + TOPIC_RAW_IOS=raw-ios \ + TOPIC_CACHE=cache \ + TOPIC_ANALYTICS=analytics \ + TOPIC_TRIGGER=trigger \ + GROUP_SINK=sink \ + GROUP_STORAGE=storage \ + GROUP_DB=db \ + GROUP_ENDER=ender \ + GROUP_CACHE=cache \ + AWS_REGION_WEB=eu-central-1 \ + AWS_REGION_IOS=eu-west-1 \ + AWS_REGION_ASSETS=eu-central-1 \ + CACHE_ASSETS=true \ + ASSETS_SIZE_LIMIT=6291456 \ + FS_CLEAN_HRS=72 \ + LOG_QUEUE_STATS_INTERVAL_SEC=60 + + +ARG SERVICE_NAME +RUN if [ "$SERVICE_NAME" = "http" ]; then \ + wget https://raw.githubusercontent.com/ua-parser/uap-core/master/regexes.yaml -O "$UAPARSER_FILE" &&\ + wget https://static.openreplay.com/geoip/GeoLite2-Country.mmdb -O "$MAXMINDDB_FILE"; fi + + +COPY --from=build /root/service /root/service +ENTRYPOINT /root/service diff --git a/backend/services/http/build_hack b/backend/services/http/build_hack new file mode 100644 index 000000000..e69de29bb From 18e932e5e97e6029728a27c727ea2682788e97e7 Mon Sep 17 00:00:00 2001 From: Shekar Siri Date: Tue, 3 May 2022 12:26:42 +0200 Subject: [PATCH 54/91] feat(ui) - session settings - capture rate api update --- .../BugFinder/SessionsMenu/SessionsMenu.js | 15 +- .../components/Client/Sites/NewSiteForm.js | 1 - frontend/app/components/Modal/Modal.js | 4 +- .../app/components/Modal/ModalOverlay.css | 21 +++ .../app/components/Modal/ModalOverlay.tsx | 5 +- frontend/app/components/Modal/index.tsx | 4 +- .../Session_/Player/Controls/Controls.js | 4 +- .../app/components/shared/Select/Select.tsx | 7 +- .../shared/SessionItem/SessionItem.js | 3 - .../shared/SessionItem/SessionItem.tsx | 164 ++++++++++++++++++ .../SessionMetaList/SessionMetaList.tsx | 2 +- .../shared/SessionItem/sessionItem.css | 23 +-- .../components/CaptureRate.tsx | 32 +++- .../components/DefaultTimezone.tsx | 17 +- .../components/ListingVisibility.tsx | 19 +- frontend/app/constants/index.js | 1 + frontend/app/constants/storageKeys.ts | 3 + frontend/app/duck/search.js | 23 +++ frontend/app/mstore/index.tsx | 3 +- frontend/app/mstore/settingsStore.ts | 31 +++- frontend/app/mstore/types/sessionSettings.ts | 28 ++- .../StatedScreen/Screen/Cursor.ts | 1 - frontend/app/player/Player.ts | 2 +- frontend/app/services/SessionService.ts | 23 +++ frontend/app/services/index.ts | 4 +- 25 files changed, 366 insertions(+), 74 deletions(-) create mode 100644 frontend/app/components/shared/SessionItem/SessionItem.tsx create mode 100644 frontend/app/constants/storageKeys.ts create mode 100644 frontend/app/services/SessionService.ts diff --git a/frontend/app/components/BugFinder/SessionsMenu/SessionsMenu.js b/frontend/app/components/BugFinder/SessionsMenu/SessionsMenu.js index 978eb0003..36dd5f83f 100644 --- a/frontend/app/components/BugFinder/SessionsMenu/SessionsMenu.js +++ b/frontend/app/components/BugFinder/SessionsMenu/SessionsMenu.js @@ -20,9 +20,9 @@ function SessionsMenu(props) { const capturingAll = props.captureRate && props.captureRate.get('captureAll'); - useEffect(() => { - showModal(, {}); - }, []) + // useEffect(() => { + // showModal(, {}); + // }, []) return (
    @@ -30,8 +30,8 @@ function SessionsMenu(props) {
    Sessions
    - {capturingAll && Manage} - { !capturingAll && ( + showModal(, { right: true })}>Manage + {/* { !capturingAll && ( - )} + )} */}
    + {/*
    showModal(, {})}> + Capture, Listing, and Timezone Settings +
    */}
    + {component} , document.querySelector("#modal-root"), diff --git a/frontend/app/components/Modal/ModalOverlay.css b/frontend/app/components/Modal/ModalOverlay.css index e3e33562a..806b59137 100644 --- a/frontend/app/components/Modal/ModalOverlay.css +++ b/frontend/app/components/Modal/ModalOverlay.css @@ -7,13 +7,26 @@ /* transition: all 0.3s ease-in-out; */ animation: fade 1s forwards; } + .slide { position: absolute; + /* left: -100%; */ + /* -webkit-animation: slide 0.5s forwards; + animation: slide 0.5s forwards; */ +} + +.slideLeft { left: -100%; -webkit-animation: slide 0.5s forwards; animation: slide 0.5s forwards; } +.slideRight { + right: -100%; + -webkit-animation: slideRight 0.5s forwards; + animation: slideRight 0.5s forwards; +} + @keyframes fade { 0% { opacity: 0; @@ -29,4 +42,12 @@ @keyframes slide { 100% { left: 0; } +} + +@-webkit-keyframes slideRight { + 100% { right: 0; } +} + +@keyframes slideRight { + 100% { right: 0%; } } \ No newline at end of file diff --git a/frontend/app/components/Modal/ModalOverlay.tsx b/frontend/app/components/Modal/ModalOverlay.tsx index ef46024e1..270840a65 100644 --- a/frontend/app/components/Modal/ModalOverlay.tsx +++ b/frontend/app/components/Modal/ModalOverlay.tsx @@ -1,8 +1,9 @@ import React from 'react'; import { useModal } from 'App/components/Modal'; import stl from './ModalOverlay.css' +import cn from 'classnames'; -function ModalOverlay({ children }) { +function ModalOverlay({ children, left = false, right = false }) { let modal = useModal(); return ( @@ -12,7 +13,7 @@ function ModalOverlay({ children }) { className={stl.overlay} style={{ background: "rgba(0,0,0,0.5)" }} /> -
    {children}
    +
    {children}
    ); } diff --git a/frontend/app/components/Modal/index.tsx b/frontend/app/components/Modal/index.tsx index a653ed24f..339a79fbd 100644 --- a/frontend/app/components/Modal/index.tsx +++ b/frontend/app/components/Modal/index.tsx @@ -4,7 +4,9 @@ import Modal from './Modal'; const ModalContext = createContext({ component: null, - props: {}, + props: { + right: false, + }, showModal: (component: any, props: any) => {}, hideModal: () => {} }); diff --git a/frontend/app/components/Session_/Player/Controls/Controls.js b/frontend/app/components/Session_/Player/Controls/Controls.js index ab1baba3e..abbf40803 100644 --- a/frontend/app/components/Session_/Player/Controls/Controls.js +++ b/frontend/app/components/Session_/Player/Controls/Controls.js @@ -276,13 +276,13 @@ export default class Controls extends React.Component { label="Back" icon="replay-10" /> - + /> */}
    )} diff --git a/frontend/app/components/shared/Select/Select.tsx b/frontend/app/components/shared/Select/Select.tsx index c4523cf25..85418f5fc 100644 --- a/frontend/app/components/shared/Select/Select.tsx +++ b/frontend/app/components/shared/Select/Select.tsx @@ -4,11 +4,11 @@ import Select from 'react-select'; interface Props { options: any[]; isSearchable?: boolean; - defaultValue?: any; + defaultValue?: string; plain?: boolean; [x:string]: any; } -export default function({ plain = false, options, isSearchable = false, defaultValue, ...rest }: Props) { +export default function({ plain = false, options, isSearchable = false, defaultValue = '', ...rest }: Props) { const customStyles = { option: (provided, state) => ({ ...provided, @@ -39,11 +39,12 @@ export default function({ plain = false, options, isSearchable = false, defaultV return { ...provided, opacity, transition }; } } + const defaultSelected = defaultValue ? options.find(x => x.value === defaultValue) : options[0]; return ( { - sessionSettings.updateKey('timezone', value); + defaultValue={timezone} + className="w-full" + onChange={({ value }) => { + setTimezone(value); setChanged(true); }} />
    diff --git a/frontend/app/components/shared/SessionSettings/components/ListingVisibility.tsx b/frontend/app/components/shared/SessionSettings/components/ListingVisibility.tsx index 1779a2e01..d9f137daa 100644 --- a/frontend/app/components/shared/SessionSettings/components/ListingVisibility.tsx +++ b/frontend/app/components/shared/SessionSettings/components/ListingVisibility.tsx @@ -14,9 +14,9 @@ const periodOptions = [ ] function ListingVisibility(props) { + const [changed, setChanged] = React.useState(false); const { settingsStore } = useStore(); const sessionSettings = useObserver(() => settingsStore.sessionSettings) - const [changed, setChanged] = React.useState(false); const [durationSettings, setDurationSettings] = React.useState(sessionSettings.durationFilter); return ( @@ -24,28 +24,41 @@ function ListingVisibility(props) {

    Listing Visibility

    Do not show sessions duration with.
    -
    +
    { + setDurationSettings({ ...durationSettings, count: value }); + setChanged(true); + }} />
    +
    + )); +} + +export default UserSearch; \ No newline at end of file diff --git a/frontend/app/components/Client/Users/components/UserSearch/index.ts b/frontend/app/components/Client/Users/components/UserSearch/index.ts new file mode 100644 index 000000000..3810a4030 --- /dev/null +++ b/frontend/app/components/Client/Users/components/UserSearch/index.ts @@ -0,0 +1 @@ +export { default } from './UserSearch'; \ No newline at end of file diff --git a/frontend/app/mstore/index.tsx b/frontend/app/mstore/index.tsx index f72972121..dc6560c93 100644 --- a/frontend/app/mstore/index.tsx +++ b/frontend/app/mstore/index.tsx @@ -1,19 +1,22 @@ import React from 'react'; import DashboardStore, { IDashboardSotre } from './dashboardStore'; import MetricStore, { IMetricStore } from './metricStore'; +import UserStore from './userStore'; import APIClient from 'App/api_client'; -import { dashboardService, metricService, sessionService } from 'App/services'; +import { dashboardService, metricService, sessionService, userService } from 'App/services'; import SettingsStore from './settingsStore'; export class RootStore { dashboardStore: IDashboardSotre; metricStore: IMetricStore; settingsStore: SettingsStore; + userStore: UserStore; constructor() { this.dashboardStore = new DashboardStore(); this.metricStore = new MetricStore(); this.settingsStore = new SettingsStore(); + this.userStore = new UserStore(); } initClient() { @@ -21,6 +24,7 @@ export class RootStore { dashboardService.initClient(client) metricService.initClient(client) sessionService.initClient(client) + userService.initClient(client) } } diff --git a/frontend/app/mstore/types/user.ts b/frontend/app/mstore/types/user.ts new file mode 100644 index 000000000..88b168624 --- /dev/null +++ b/frontend/app/mstore/types/user.ts @@ -0,0 +1,70 @@ +import { runInAction, makeAutoObservable, observable } from 'mobx' +import { DateTime } from 'luxon'; +export interface IUser { + userId: string + email: string + createdAt: string + isAdmin: boolean + isSuperAdmin: boolean + isJoined: boolean + isExpiredInvite: boolean + roleId: string + roleName: string + invitationLink: string + + fromJson(json: any): IUser + toJson(): any +} + +export default class User { + userId: string = ''; + email: string = ''; + createdAt: string = ''; + isAdmin: boolean = false; + isSuperAdmin: boolean = false; + isJoined: boolean = false; + isExpiredInvite: boolean = false; + roleId: string = ''; + roleName: string = ''; + invitationLink: string = ''; + + constructor() { + makeAutoObservable(this, { + userId: observable, + email: observable, + createdAt: observable, + isAdmin: observable, + isSuperAdmin: observable, + isJoined: observable, + isExpiredInvite: observable, + roleId: observable, + roleName: observable, + invitationLink: observable, + }) + } + + fromJson(json: any) { + runInAction(() => { + this.userId = json.id; + this.email = json.email; + this.createdAt = json.createdAt && DateTime.fromISO(json.createdAt || 0) + this.isAdmin = json.admin + this.isSuperAdmin = json.superAdmin + this.isJoined = json.joined + this.isExpiredInvite = json.expiredInvitation + this.roleId = json.roleId + this.roleName = json.roleName + this.invitationLink = json.invitationLink + }) + return this; + } + + toJson() { + return { + email: this.email, + isAdmin: this.isAdmin, + isSuperAdmin: this.isSuperAdmin, + roleId: this.roleId, + } + } +} \ No newline at end of file diff --git a/frontend/app/mstore/userStore.ts b/frontend/app/mstore/userStore.ts new file mode 100644 index 000000000..a0c004f82 --- /dev/null +++ b/frontend/app/mstore/userStore.ts @@ -0,0 +1,98 @@ +import { makeAutoObservable, observable, action } from "mobx" +import User, { IUser } from "./types/user"; +import { userService } from "App/services"; + +export default class UserStore { + list: IUser[] = []; + instance: IUser|null = null; + loading: boolean = false; + page: number = 1; + pageSize: number = 5; + searchQuery: string = ""; + + constructor() { + makeAutoObservable(this, { + instance: observable, + updateUser: action, + updateKey: action, + }) + } + + updateKey(key: string, value: any) { + this[key] = value + } + + updateUser(user: any) { + Object.assign(this.instance, user); + } + + fetchUser(userId: string): Promise { + this.loading = true; + return new Promise((resolve, reject) => { + userService.one(userId) + .then(response => { + this.instance = new User().fromJson(response.data); + resolve(response); + }).catch(error => { + this.loading = false; + reject(error); + }).finally(() => { + this.loading = false; + }); + }); + } + + fetchUsers(): Promise { + this.loading = true; + return new Promise((resolve, reject) => { + userService.all() + .then(response => { + console.log('list', response); + this.list = response.map(user => new User().fromJson(user)); + resolve(response); + }).catch(error => { + this.loading = false; + reject(error); + }).finally(() => { + this.loading = false; + }); + }); + } + + saveUser(user: IUser): Promise { + this.loading = true; + const wasCreating = !user.userId; + return new Promise((resolve, reject) => { + userService.save(user) + .then(response => { + if (wasCreating) { + this.list.push(new User().fromJson(response.data)); + } else { + this.updateUser(response.data); + } + resolve(response); + }).catch(error => { + this.loading = false; + reject(error); + }).finally(() => { + this.loading = false; + }); + }); + } + + deleteUser(userId: string): Promise { + this.loading = true; + return new Promise((resolve, reject) => { + userService.delete(userId) + .then(response => { + this.instance = null; + resolve(response); + }).catch(error => { + this.loading = false; + reject(error); + }).finally(() => { + this.loading = false; + }); + }); + } +} \ No newline at end of file diff --git a/frontend/app/services/UserService.ts b/frontend/app/services/UserService.ts new file mode 100644 index 000000000..3cdead002 --- /dev/null +++ b/frontend/app/services/UserService.ts @@ -0,0 +1,45 @@ +import APIClient from 'App/api_client'; +import { IUser } from 'App/mstore/types/user' + +export default class UserService { + private client: APIClient; + + constructor(client?: APIClient) { + this.client = client ? client : new APIClient(); + } + + initClient(client?: APIClient) { + this.client = client || new APIClient(); + } + + all() { + return this.client.get('/client/members') + .then(response => response.json()) + .then(response => response.data || []); + } + + one(userId: string) { + return this.client.get('/users/' + userId) + .then(response => response.json()) + .then(response => response.data || {}); + } + + save(user: IUser) { + const data = user.toJson(); + if (user.userId) { + return this.client.put('/users/' + user.userId, data) + .then(response => response.json()) + .then(response => response.data || {}); + } else { + return this.client.post('/users', data) + .then(response => response.json()) + .then(response => response.data || {}); + } + } + + delete(userId: string) { + return this.client.delete('/users/' + userId) + .then(response => response.json()) + .then(response => response.data || {}); + } +} \ No newline at end of file diff --git a/frontend/app/services/index.ts b/frontend/app/services/index.ts index e721e0f10..3cb64a7ad 100644 --- a/frontend/app/services/index.ts +++ b/frontend/app/services/index.ts @@ -1,7 +1,9 @@ import DashboardService, { IDashboardService } from "./DashboardService"; import MetricService, { IMetricService } from "./MetricService"; import SessionSerivce from "./SessionService"; +import UserService from "./UserService"; export const dashboardService: IDashboardService = new DashboardService(); export const metricService: IMetricService = new MetricService(); -export const sessionService: SessionSerivce = new SessionSerivce(); \ No newline at end of file +export const sessionService: SessionSerivce = new SessionSerivce(); +export const userService: UserService = new UserService(); \ No newline at end of file From 424b071eafb18d0eb14a00f62c59ab4ac4426cc2 Mon Sep 17 00:00:00 2001 From: Shekar Siri Date: Wed, 4 May 2022 13:14:20 +0200 Subject: [PATCH 64/91] change(ui) - users list - search and pagination --- .../Users/components/UserList/UserList.tsx | 67 +++++++++++-------- .../components/UserListItem/UserListItem.tsx | 2 +- frontend/app/mstore/userStore.ts | 7 +- 3 files changed, 46 insertions(+), 30 deletions(-) diff --git a/frontend/app/components/Client/Users/components/UserList/UserList.tsx b/frontend/app/components/Client/Users/components/UserList/UserList.tsx index c9c557b22..448e7c95e 100644 --- a/frontend/app/components/Client/Users/components/UserList/UserList.tsx +++ b/frontend/app/components/Client/Users/components/UserList/UserList.tsx @@ -2,12 +2,24 @@ import { useStore } from 'App/mstore'; import { useObserver } from 'mobx-react-lite'; import React, { useEffect } from 'react'; import UserListItem from '../UserListItem'; -import { sliceListPerPage } from 'App/utils'; -import { Pagination } from 'UI'; +import { sliceListPerPage, getRE } from 'App/utils'; +import { Pagination, NoContent, Loader } from 'UI'; function UserList(props) { const { userStore } = useStore(); - const list = useObserver(() => userStore.list); + const loading = useObserver(() => userStore.loading); + const users = useObserver(() => userStore.list); + const searchQuery = useObserver(() => userStore.searchQuery); + + const filterList = (list) => { + const filterRE = getRE(searchQuery, 'i'); + let _list = list.filter(w => { + return filterRE.test(w.email) || filterRE.test(w.roleName); + }); + return _list + } + + const list: any = searchQuery !== '' ? filterList(users) : users; const length = list.length; useEffect(() => { @@ -15,32 +27,33 @@ function UserList(props) { }, []); return useObserver(() => ( -
    -
    -
    -
    Name
    -
    Role
    -
    + + +
    +
    +
    Name
    +
    Role
    +
    +
    + + {sliceListPerPage(list, userStore.page - 1, userStore.pageSize).map((user: any) => ( +
    + +
    + ))}
    - {sliceListPerPage(list, userStore.page - 1, userStore.pageSize).map((user: any) => ( -
    - -
    - ))} -
    - -
    - userStore.updateKey('page', page)} - limit={userStore.pageSize} - debounceRequest={100} - /> -
    - -
    +
    + userStore.updateKey('page', page)} + limit={userStore.pageSize} + debounceRequest={100} + /> +
    + + )); } diff --git a/frontend/app/components/Client/Users/components/UserListItem/UserListItem.tsx b/frontend/app/components/Client/Users/components/UserListItem/UserListItem.tsx index ad991da9a..8d402ed47 100644 --- a/frontend/app/components/Client/Users/components/UserListItem/UserListItem.tsx +++ b/frontend/app/components/Client/Users/components/UserListItem/UserListItem.tsx @@ -6,7 +6,7 @@ interface Props { function UserListItem(props: Props) { const { user } = props; return ( -
    +
    {user.email}
    diff --git a/frontend/app/mstore/userStore.ts b/frontend/app/mstore/userStore.ts index a0c004f82..170055412 100644 --- a/frontend/app/mstore/userStore.ts +++ b/frontend/app/mstore/userStore.ts @@ -7,7 +7,7 @@ export default class UserStore { instance: IUser|null = null; loading: boolean = false; page: number = 1; - pageSize: number = 5; + pageSize: number = 10; searchQuery: string = ""; constructor() { @@ -20,6 +20,10 @@ export default class UserStore { updateKey(key: string, value: any) { this[key] = value + + if (key === 'searchQuery') { + this.page = 1 + } } updateUser(user: any) { @@ -47,7 +51,6 @@ export default class UserStore { return new Promise((resolve, reject) => { userService.all() .then(response => { - console.log('list', response); this.list = response.map(user => new User().fromJson(user)); resolve(response); }).catch(error => { From 9cdb1e8ab753a4fea695bd13e4348f88c32b027f Mon Sep 17 00:00:00 2001 From: Alexander Zavorotynskiy Date: Wed, 4 May 2022 14:21:15 +0200 Subject: [PATCH 65/91] Removed global pg connection --- backend/services/db/main.go | 17 +++++----- backend/services/db/messages.go | 57 +++++++++++++++++++-------------- backend/services/db/stats.go | 17 ++++++---- 3 files changed, 53 insertions(+), 38 deletions(-) diff --git a/backend/services/db/main.go b/backend/services/db/main.go index 2ad6e4aa8..50e160342 100644 --- a/backend/services/db/main.go +++ b/backend/services/db/main.go @@ -18,16 +18,17 @@ import ( "openreplay/backend/services/db/heuristics" ) -var pg *cache.PGCache - func main() { log.SetFlags(log.LstdFlags | log.LUTC | log.Llongfile) - initStats() - pg = cache.NewPGCache(postgres.NewConn(env.String("POSTGRES_STRING")), 1000*60*20) + // Init database + pg := cache.NewPGCache(postgres.NewConn(env.String("POSTGRES_STRING")), 1000*60*20) defer pg.Close() + // Init modules heurFinder := heuristics.NewHandler() + mi := NewMessageInserter(pg) + si := NewStatsInserter(pg) statsLogger := logger.NewQueueStats(env.Int("LOG_QUEUE_STATS_INTERVAL_SEC")) @@ -40,7 +41,7 @@ func main() { func(sessionID uint64, msg messages.Message, meta *types.Meta) { statsLogger.HandleAndLog(sessionID, meta) - if err := insertMessage(sessionID, msg); err != nil { + if err := mi.insertMessage(sessionID, msg); err != nil { if !postgres.IsPkeyViolation(err) { log.Printf("Message Insertion Error %v, SessionID: %v, Message: %v", err, sessionID, msg) } @@ -54,7 +55,7 @@ func main() { return } - err = insertStats(session, msg) + err = si.insertStats(session, msg) if err != nil { log.Printf("Stats Insertion Error %v; Session: %v, Message: %v", err, session, msg) } @@ -62,14 +63,14 @@ func main() { heurFinder.HandleMessage(session, msg) heurFinder.IterateSessionReadyMessages(sessionID, func(msg messages.Message) { // TODO: DRY code (carefully with the return statement logic) - if err := insertMessage(sessionID, msg); err != nil { + if err := mi.insertMessage(sessionID, msg); err != nil { if !postgres.IsPkeyViolation(err) { log.Printf("Message Insertion Error %v; Session: %v, Message %v", err, session, msg) } return } - if err := insertStats(session, msg); err != nil { + if err := si.insertStats(session, msg); err != nil { log.Printf("Stats Insertion Error %v; Session: %v, Message %v", err, session, msg) } }) diff --git a/backend/services/db/messages.go b/backend/services/db/messages.go index d3e4ae1ed..2adca61c8 100644 --- a/backend/services/db/messages.go +++ b/backend/services/db/messages.go @@ -1,68 +1,77 @@ package main import ( + "openreplay/backend/pkg/db/cache" . "openreplay/backend/pkg/messages" ) -func insertMessage(sessionID uint64, msg Message) error { +type MessageInserter struct { + pg *cache.PGCache +} + +func NewMessageInserter(pg *cache.PGCache) *MessageInserter { + return &MessageInserter{pg: pg} +} + +func (mi *MessageInserter) insertMessage(sessionID uint64, msg Message) error { switch m := msg.(type) { // Common case *Metadata: - return pg.InsertMetadata(sessionID, m) + return mi.pg.InsertMetadata(sessionID, m) case *IssueEvent: - return pg.InsertIssueEvent(sessionID, m) + return mi.pg.InsertIssueEvent(sessionID, m) //TODO: message adapter (transformer) (at the level of pkg/message) for types: // case *IOSMetadata, *IOSIssueEvent and others // Web case *SessionStart: - return pg.InsertWebSessionStart(sessionID, m) + return mi.pg.InsertWebSessionStart(sessionID, m) case *SessionEnd: - return pg.InsertWebSessionEnd(sessionID, m) + return mi.pg.InsertWebSessionEnd(sessionID, m) case *UserID: - return pg.InsertWebUserID(sessionID, m) + return mi.pg.InsertWebUserID(sessionID, m) case *UserAnonymousID: - return pg.InsertWebUserAnonymousID(sessionID, m) + return mi.pg.InsertWebUserAnonymousID(sessionID, m) case *CustomEvent: - return pg.InsertWebCustomEvent(sessionID, m) + return mi.pg.InsertWebCustomEvent(sessionID, m) case *ClickEvent: - return pg.InsertWebClickEvent(sessionID, m) + return mi.pg.InsertWebClickEvent(sessionID, m) case *InputEvent: - return pg.InsertWebInputEvent(sessionID, m) + return mi.pg.InsertWebInputEvent(sessionID, m) // Unique Web messages // case *ResourceEvent: // return pg.InsertWebResourceEvent(sessionID, m) case *PageEvent: - return pg.InsertWebPageEvent(sessionID, m) + return mi.pg.InsertWebPageEvent(sessionID, m) case *ErrorEvent: - return pg.InsertWebErrorEvent(sessionID, m) + return mi.pg.InsertWebErrorEvent(sessionID, m) case *FetchEvent: - return pg.InsertWebFetchEvent(sessionID, m) + return mi.pg.InsertWebFetchEvent(sessionID, m) case *GraphQLEvent: - return pg.InsertWebGraphQLEvent(sessionID, m) + return mi.pg.InsertWebGraphQLEvent(sessionID, m) // IOS case *IOSSessionStart: - return pg.InsertIOSSessionStart(sessionID, m) + return mi.pg.InsertIOSSessionStart(sessionID, m) case *IOSSessionEnd: - return pg.InsertIOSSessionEnd(sessionID, m) + return mi.pg.InsertIOSSessionEnd(sessionID, m) case *IOSUserID: - return pg.InsertIOSUserID(sessionID, m) + return mi.pg.InsertIOSUserID(sessionID, m) case *IOSUserAnonymousID: - return pg.InsertIOSUserAnonymousID(sessionID, m) + return mi.pg.InsertIOSUserAnonymousID(sessionID, m) case *IOSCustomEvent: - return pg.InsertIOSCustomEvent(sessionID, m) + return mi.pg.InsertIOSCustomEvent(sessionID, m) case *IOSClickEvent: - return pg.InsertIOSClickEvent(sessionID, m) + return mi.pg.InsertIOSClickEvent(sessionID, m) case *IOSInputEvent: - return pg.InsertIOSInputEvent(sessionID, m) + return mi.pg.InsertIOSInputEvent(sessionID, m) // Unique IOS messages case *IOSNetworkCall: - return pg.InsertIOSNetworkCall(sessionID, m) + return mi.pg.InsertIOSNetworkCall(sessionID, m) case *IOSScreenEnter: - return pg.InsertIOSScreenEnter(sessionID, m) + return mi.pg.InsertIOSScreenEnter(sessionID, m) case *IOSCrash: - return pg.InsertIOSCrash(sessionID, m) + return mi.pg.InsertIOSCrash(sessionID, m) } return nil // "Not implemented" } diff --git a/backend/services/db/stats.go b/backend/services/db/stats.go index 2c3a5da38..7069b8656 100644 --- a/backend/services/db/stats.go +++ b/backend/services/db/stats.go @@ -1,23 +1,28 @@ package main import ( + "openreplay/backend/pkg/db/cache" . "openreplay/backend/pkg/db/types" . "openreplay/backend/pkg/messages" ) -func initStats() { - // noop +type StatsInserter struct { + pg *cache.PGCache } -func insertStats(session *Session, msg Message) error { +func NewStatsInserter(pg *cache.PGCache) *StatsInserter { + return &StatsInserter{pg: pg} +} + +func (si *StatsInserter) insertStats(session *Session, msg Message) error { switch m := msg.(type) { // Web case *PerformanceTrackAggr: - return pg.InsertWebStatsPerformance(session.SessionID, m) + return si.pg.InsertWebStatsPerformance(session.SessionID, m) case *ResourceEvent: - return pg.InsertWebStatsResourceEvent(session.SessionID, m) + return si.pg.InsertWebStatsResourceEvent(session.SessionID, m) case *LongTask: - return pg.InsertWebStatsLongtask(session.SessionID, m) + return si.pg.InsertWebStatsLongtask(session.SessionID, m) // IOS // case *IOSPerformanceAggregated: From 74672d4321cbaa67abc52cacd1bf9a11f27e52e0 Mon Sep 17 00:00:00 2001 From: Alexander Zavorotynskiy Date: Wed, 4 May 2022 14:36:42 +0200 Subject: [PATCH 66/91] Removed unused code --- backend/services/db/heuristics/anr.go | 2 -- backend/services/db/heuristics/clickrage.go | 2 -- backend/services/db/main.go | 3 --- backend/services/db/messages.go | 8 +++----- backend/services/db/stats.go | 10 ---------- 5 files changed, 3 insertions(+), 22 deletions(-) diff --git a/backend/services/db/heuristics/anr.go b/backend/services/db/heuristics/anr.go index 0475b00be..7cec8fc97 100644 --- a/backend/services/db/heuristics/anr.go +++ b/backend/services/db/heuristics/anr.go @@ -18,8 +18,6 @@ func (h *anr) buildIf(timestamp uint64) { m := &IOSIssueEvent{ Type: "anr", ContextString: h.lastLabel, - //Context: "{}", - //Payload: fmt.SPrint } m.Timestamp = h.lastHeartbeatTimestamp m.Index = h.lastHeartbeatIndex // Associated Index/ MessageID ? diff --git a/backend/services/db/heuristics/clickrage.go b/backend/services/db/heuristics/clickrage.go index 9a1db92d5..4d19bf92e 100644 --- a/backend/services/db/heuristics/clickrage.go +++ b/backend/services/db/heuristics/clickrage.go @@ -21,8 +21,6 @@ func (h *clickrage) build() { m := &IOSIssueEvent{ Type: "click_rage", ContextString: h.lastLabel, - //Context: "{}", - //Payload: fmt.SPrint } m.Timestamp = h.firstInARawTimestamp m.Index = h.firstInARawSeqIndex // Associated Index/ MessageID ? diff --git a/backend/services/db/main.go b/backend/services/db/main.go index 50e160342..600913120 100644 --- a/backend/services/db/main.go +++ b/backend/services/db/main.go @@ -92,9 +92,6 @@ func main() { os.Exit(0) case <-tick: pg.CommitBatches() - if err := commitStats(); err != nil { - log.Printf("Error on stats commit: %v", err) - } // TODO?: separate stats & regular messages if err := consumer.Commit(); err != nil { log.Printf("Error on consumer commit: %v", err) diff --git a/backend/services/db/messages.go b/backend/services/db/messages.go index 2adca61c8..1a583ae6a 100644 --- a/backend/services/db/messages.go +++ b/backend/services/db/messages.go @@ -20,8 +20,7 @@ func (mi *MessageInserter) insertMessage(sessionID uint64, msg Message) error { return mi.pg.InsertMetadata(sessionID, m) case *IssueEvent: return mi.pg.InsertIssueEvent(sessionID, m) - //TODO: message adapter (transformer) (at the level of pkg/message) for types: - // case *IOSMetadata, *IOSIssueEvent and others + //TODO: message adapter (transformer) (at the level of pkg/message) for types: *IOSMetadata, *IOSIssueEvent and others // Web case *SessionStart: @@ -38,9 +37,8 @@ func (mi *MessageInserter) insertMessage(sessionID uint64, msg Message) error { return mi.pg.InsertWebClickEvent(sessionID, m) case *InputEvent: return mi.pg.InsertWebInputEvent(sessionID, m) - // Unique Web messages - // case *ResourceEvent: - // return pg.InsertWebResourceEvent(sessionID, m) + + // Unique Web messages case *PageEvent: return mi.pg.InsertWebPageEvent(sessionID, m) case *ErrorEvent: diff --git a/backend/services/db/stats.go b/backend/services/db/stats.go index 7069b8656..a2c2024fb 100644 --- a/backend/services/db/stats.go +++ b/backend/services/db/stats.go @@ -23,16 +23,6 @@ func (si *StatsInserter) insertStats(session *Session, msg Message) error { return si.pg.InsertWebStatsResourceEvent(session.SessionID, m) case *LongTask: return si.pg.InsertWebStatsLongtask(session.SessionID, m) - - // IOS - // case *IOSPerformanceAggregated: - // return pg.InsertIOSPerformanceAggregated(session, m) - // case *IOSNetworkCall: - // return pg.InsertIOSNetworkCall(session, m) } return nil } - -func commitStats() error { - return nil -} From 5b7c479f4dfc5f5b2517d31baab86a2d06c15c10 Mon Sep 17 00:00:00 2001 From: Alexander Zavorotynskiy Date: Wed, 4 May 2022 16:17:57 +0200 Subject: [PATCH 67/91] Refactoring in stats logger --- backend/pkg/log/queue.go | 42 +++++++++-------- backend/services/db/main.go | 82 ++++++++++++++++++---------------- backend/services/ender/main.go | 2 +- 3 files changed, 68 insertions(+), 58 deletions(-) diff --git a/backend/pkg/log/queue.go b/backend/pkg/log/queue.go index 62e47cbbe..ced815bd2 100644 --- a/backend/pkg/log/queue.go +++ b/backend/pkg/log/queue.go @@ -5,7 +5,6 @@ import ( "log" "time" - "openreplay/backend/pkg/messages" "openreplay/backend/pkg/queue/types" //"openreplay/backend/pkg/env" ) @@ -18,6 +17,19 @@ type partitionStats struct { count int } +// Update partition statistic +func (prt *partitionStats) update(m *types.Meta) { + if prt.maxts < m.Timestamp { + prt.maxts = m.Timestamp + } + if prt.mints > m.Timestamp || prt.mints == 0 { + prt.mints = m.Timestamp + } + prt.lastts = m.Timestamp + prt.lastID = m.ID + prt.count += 1 +} + type queueStats struct { prts map[int32]*partitionStats tick <-chan time.Time @@ -30,43 +42,35 @@ func NewQueueStats(sec int) *queueStats { } } -func (qs *queueStats) HandleAndLog(sessionID uint64, m *types.Meta) { +// Collect writes new data to partition statistic +func (qs *queueStats) Collect(sessionID uint64, m *types.Meta) { prti := int32(sessionID % 16) // TODO use GetKeyPartition from kafka/key.go prt, ok := qs.prts[prti] if !ok { qs.prts[prti] = &partitionStats{} prt = qs.prts[prti] } - - if prt.maxts < m.Timestamp { - prt.maxts = m.Timestamp - } - if prt.mints > m.Timestamp || prt.mints == 0 { - prt.mints = m.Timestamp - } - prt.lastts = m.Timestamp - prt.lastID = m.ID - prt.count += 1 + prt.update(m) select { case <-qs.tick: - qs.LogThenReset() + qs.log() + qs.reset() default: } } -func (qs *queueStats) LogThenReset() { +// Print to console collected statistics +func (qs *queueStats) log() { s := "Queue Statistics: " for i, p := range qs.prts { s = fmt.Sprintf("%v | %v:: lastTS %v, lastID %v, count %v, maxTS %v, minTS %v", s, i, p.lastts, p.lastID, p.count, p.maxts, p.mints) } log.Println(s) - // reset - qs.prts = make(map[int32]*partitionStats) } -// TODO: list of message id to log (mb filter function with callback in messages/utils.go or something) -func LogMessage(s string, sessionID uint64, msg messages.Message, m *types.Meta) { - log.Printf("%v | SessionID: %v, Queue info: %v, Message: %v", s, sessionID, m, msg) +// Clear all queue partitions +func (qs *queueStats) reset() { + qs.prts = make(map[int32]*partitionStats) } diff --git a/backend/services/db/main.go b/backend/services/db/main.go index 600913120..619e6816e 100644 --- a/backend/services/db/main.go +++ b/backend/services/db/main.go @@ -29,52 +29,58 @@ func main() { heurFinder := heuristics.NewHandler() mi := NewMessageInserter(pg) si := NewStatsInserter(pg) - statsLogger := logger.NewQueueStats(env.Int("LOG_QUEUE_STATS_INTERVAL_SEC")) + // Handler logic + handler := func(sessionID uint64, msg messages.Message, meta *types.Meta) { + statsLogger.Collect(sessionID, meta) + + // Just insert message into db without additional checks + if err := mi.insertMessage(sessionID, msg); err != nil { + if !postgres.IsPkeyViolation(err) { + log.Printf("Message Insertion Error %v, SessionID: %v, Message: %v", err, sessionID, msg) + } + return + } + + // Try to get session from db + session, err := pg.GetSession(sessionID) + if err != nil { + // Might happen due to the assets-related message TODO: log only if session is necessary for this kind of message + log.Printf("Error on session retrieving from cache: %v, SessionID: %v, Message: %v", err, sessionID, msg) + return + } + + // Insert statistics + err = si.insertStats(session, msg) + if err != nil { + log.Printf("Stats Insertion Error %v; Session: %v, Message: %v", err, session, msg) + } + + heurFinder.HandleMessage(session, msg) + heurFinder.IterateSessionReadyMessages(sessionID, func(msg messages.Message) { + // TODO: DRY code (carefully with the return statement logic) + if err := mi.insertMessage(sessionID, msg); err != nil { + if !postgres.IsPkeyViolation(err) { + log.Printf("Message Insertion Error %v; Session: %v, Message %v", err, session, msg) + } + return + } + + if err := si.insertStats(session, msg); err != nil { + log.Printf("Stats Insertion Error %v; Session: %v, Message %v", err, session, msg) + } + }) + } + + // Init consumer consumer := queue.NewMessageConsumer( env.String("GROUP_DB"), []string{ env.String("TOPIC_RAW_IOS"), env.String("TOPIC_TRIGGER"), }, - func(sessionID uint64, msg messages.Message, meta *types.Meta) { - statsLogger.HandleAndLog(sessionID, meta) - - if err := mi.insertMessage(sessionID, msg); err != nil { - if !postgres.IsPkeyViolation(err) { - log.Printf("Message Insertion Error %v, SessionID: %v, Message: %v", err, sessionID, msg) - } - return - } - - session, err := pg.GetSession(sessionID) - if err != nil { - // Might happen due to the assets-related message TODO: log only if session is necessary for this kind of message - log.Printf("Error on session retrieving from cache: %v, SessionID: %v, Message: %v", err, sessionID, msg) - return - } - - err = si.insertStats(session, msg) - if err != nil { - log.Printf("Stats Insertion Error %v; Session: %v, Message: %v", err, session, msg) - } - - heurFinder.HandleMessage(session, msg) - heurFinder.IterateSessionReadyMessages(sessionID, func(msg messages.Message) { - // TODO: DRY code (carefully with the return statement logic) - if err := mi.insertMessage(sessionID, msg); err != nil { - if !postgres.IsPkeyViolation(err) { - log.Printf("Message Insertion Error %v; Session: %v, Message %v", err, session, msg) - } - return - } - - if err := si.insertStats(session, msg); err != nil { - log.Printf("Stats Insertion Error %v; Session: %v, Message %v", err, session, msg) - } - }) - }, + handler, false, ) diff --git a/backend/services/ender/main.go b/backend/services/ender/main.go index f2430f3a0..4170a178e 100644 --- a/backend/services/ender/main.go +++ b/backend/services/ender/main.go @@ -35,7 +35,7 @@ func main() { env.String("TOPIC_RAW_IOS"), }, func(sessionID uint64, msg messages.Message, meta *types.Meta) { - statsLogger.HandleAndLog(sessionID, meta) + statsLogger.Collect(sessionID, meta) builderMap.HandleMessage(sessionID, msg, msg.Meta().Index) }, false, From c97fe55cda5af3cdd5ee9ccb5f2ddf99f94abb45 Mon Sep 17 00:00:00 2001 From: Shekar Siri Date: Wed, 4 May 2022 16:41:29 +0200 Subject: [PATCH 68/91] change(ui) - users list - form --- .../app/components/Client/Users/UsersView.tsx | 11 +- .../Users/components/UserForm/UserForm.tsx | 129 ++++++++++++++++++ .../Client/Users/components/UserForm/index.ts | 1 + .../Users/components/UserList/UserList.tsx | 14 +- .../components/UserListItem/UserListItem.tsx | 14 +- frontend/app/mstore/index.tsx | 3 + frontend/app/mstore/roleStore.ts | 31 +++++ frontend/app/mstore/types/role.ts | 42 ++++++ frontend/app/mstore/types/user.ts | 21 ++- frontend/app/mstore/userStore.ts | 12 ++ frontend/app/services/UserService.ts | 6 + frontend/app/styles/main.css | 11 +- 12 files changed, 275 insertions(+), 20 deletions(-) create mode 100644 frontend/app/components/Client/Users/components/UserForm/UserForm.tsx create mode 100644 frontend/app/components/Client/Users/components/UserForm/index.ts create mode 100644 frontend/app/mstore/roleStore.ts create mode 100644 frontend/app/mstore/types/role.ts diff --git a/frontend/app/components/Client/Users/UsersView.tsx b/frontend/app/components/Client/Users/UsersView.tsx index cb57a9ec6..5b207a468 100644 --- a/frontend/app/components/Client/Users/UsersView.tsx +++ b/frontend/app/components/Client/Users/UsersView.tsx @@ -1,4 +1,4 @@ -import React from 'react'; +import React, { useEffect } from 'react'; import UserList from './components/UserList'; import { PageTitle } from 'UI'; import { useStore } from 'App/mstore'; @@ -6,8 +6,15 @@ import { useObserver } from 'mobx-react-lite'; import UserSearch from './components/UserSearch'; function UsersView(props) { - const { userStore } = useStore(); + const { userStore, roleStore } = useStore(); const userCount = useObserver(() => userStore.list.length); + const roles = useObserver(() => roleStore.list); + + useEffect(() => { + if (roles.length === 0) { + roleStore.fetchRoles(); + } + }, []); return (
    diff --git a/frontend/app/components/Client/Users/components/UserForm/UserForm.tsx b/frontend/app/components/Client/Users/components/UserForm/UserForm.tsx new file mode 100644 index 000000000..b47a38d50 --- /dev/null +++ b/frontend/app/components/Client/Users/components/UserForm/UserForm.tsx @@ -0,0 +1,129 @@ +import React from 'react'; +import { Input, CopyButton, Button, Select } from 'UI' +import cn from 'classnames'; +import { useStore } from 'App/mstore'; +import { useObserver } from 'mobx-react-lite'; +import { useModal } from 'App/components/Modal'; + +interface Props { + isSmtp?: boolean; + isEnterprise?: boolean; +} +function UserForm(props: Props) { + const { isSmtp = false, isEnterprise = false } = props; + const isSaving = false; + const { hideModal } = useModal(); + const { userStore, roleStore } = useStore(); + const user: any = useObserver(() => userStore.instance); + const roles = useObserver(() => roleStore.list.map(r => ({ label: r.name, value: r.roleId }))); + console.log('roles', roles) + + const onChangeCheckbox = (e: any) => { + user.updateKey('isAdmin', !user.isAdmin); + } + + const onSave = () => { + } + + const write = ({ target: { name, value } }) => { + user.updateKey(name, value); + } + return useObserver(() => ( +
    +
    +

    {`${user.exists() ? 'Update' : 'Invite'} User`}

    +
    +
    +
    + + +
    + +
    + + +
    + { !isSmtp && +
    + SMTP is not configured (see here how to set it up). You can still add new users, but you’d have to manually copy then send them the invitation link. +
    + } +
    + +
    + + { !isEnterprise && ( +
    + +
    @@ -94,6 +93,7 @@ function UserForm(props: Props) { defaultValue={ user.roleId } onChange={({ value }) => user.updateKey('roleId', value)} className="block" + isDisabled={user.isSuperAdmin} />
    )} diff --git a/frontend/app/mstore/types/role.ts b/frontend/app/mstore/types/role.ts index e8204ef22..5d8da871a 100644 --- a/frontend/app/mstore/types/role.ts +++ b/frontend/app/mstore/types/role.ts @@ -4,8 +4,9 @@ export interface IRole { roleId: string; name: string; description: string; + isProtected: boolean; - fromJson(json: any): IRole; + fromJson(json: any); toJson(): any; } @@ -13,6 +14,7 @@ export default class Role implements IRole { roleId: string = ''; name: string = ''; description: string = ''; + isProtected: boolean = false; constructor() { @@ -28,6 +30,7 @@ export default class Role implements IRole { this.roleId = json.roleId; this.name = json.name; this.description = json.description; + this.isProtected = json.protected; }) return this; } diff --git a/frontend/app/mstore/types/user.ts b/frontend/app/mstore/types/user.ts index c8b9dcdd6..609ee3b7f 100644 --- a/frontend/app/mstore/types/user.ts +++ b/frontend/app/mstore/types/user.ts @@ -77,7 +77,7 @@ export default class User implements IUser { name: this.name, email: this.email, admin: this.isAdmin, - isSuperAdmin: this.isSuperAdmin, + superAdmin: this.isSuperAdmin, roleId: this.roleId, } } From 6314fcbbefd67f4d5934d9c7a38248858e79c44d Mon Sep 17 00:00:00 2001 From: Alex Kaminskii Date: Wed, 4 May 2022 20:33:52 +0200 Subject: [PATCH 72/91] feat(backend): 2 files back compatible format --- backend/services/storage/main.go | 14 +++----------- 1 file changed, 3 insertions(+), 11 deletions(-) diff --git a/backend/services/storage/main.go b/backend/services/storage/main.go index 9afc7d819..ae4d9a1da 100644 --- a/backend/services/storage/main.go +++ b/backend/services/storage/main.go @@ -8,7 +8,6 @@ import ( "bytes" "io" - //"io/ioutil" "os/signal" "syscall" @@ -47,28 +46,21 @@ func main() { } defer file.Close() - fileR2 := new(bytes.Buffer) - fileR1 := io.TeeReader(file, fileR2) - startBytes := make([]byte, SESSION_FILE_SPLIT_SIZE) - nRead, err := fileR1.Read(startBytes) + nRead, err := file.Read(startBytes) if err != nil { log.Printf("File read error: %f", err) return } startReader := bytes.NewBuffer(startBytes) - if err := storage.Upload(gzipFile(startReader), key+"-s", "application/octet-stream", true); err != nil { + if err := storage.Upload(gzipFile(startReader), key, "application/octet-stream", true); err != nil { log.Fatalf("Storage: start upload failed. %v\n", err) } if nRead == SESSION_FILE_SPLIT_SIZE { - if err := storage.Upload(gzipFile(fileR1), key+"-e", "application/octet-stream", true); err != nil { + if err := storage.Upload(gzipFile(file), key + "e", "application/octet-stream", true); err != nil { log.Fatalf("Storage: end upload failed. %v\n", err) } } - - if err := storage.Upload(gzipFile(fileR2), key, "application/octet-stream", true); err != nil { - log.Fatalf("Storage: upload failed. %v\n", err) - } } consumer := queue.NewMessageConsumer( From 167d1e117e96c285f68611d4866246061b759f03 Mon Sep 17 00:00:00 2001 From: Alexander Zavorotynskiy Date: Thu, 5 May 2022 09:45:38 +0200 Subject: [PATCH 73/91] Made correct project layout --- backend/{services => cmd}/db/main.go | 20 +++++++++++-------- .../db => internal/datasaver}/messages.go | 4 ++-- .../db => internal/datasaver}/stats.go | 4 ++-- .../db => internal}/heuristics/anr.go | 0 .../db => internal}/heuristics/clickrage.go | 0 .../db => internal}/heuristics/heuristics.go | 0 .../db => internal}/heuristics/performance.go | 0 .../heuristics/readyMessageStore.go | 0 .../db => internal}/heuristics/session.go | 0 backend/services/db/build_hack | 0 10 files changed, 16 insertions(+), 12 deletions(-) rename backend/{services => cmd}/db/main.go (85%) rename backend/{services/db => internal/datasaver}/messages.go (96%) rename backend/{services/db => internal/datasaver}/stats.go (87%) rename backend/{services/db => internal}/heuristics/anr.go (100%) rename backend/{services/db => internal}/heuristics/clickrage.go (100%) rename backend/{services/db => internal}/heuristics/heuristics.go (100%) rename backend/{services/db => internal}/heuristics/performance.go (100%) rename backend/{services/db => internal}/heuristics/readyMessageStore.go (100%) rename backend/{services/db => internal}/heuristics/session.go (100%) create mode 100644 backend/services/db/build_hack diff --git a/backend/services/db/main.go b/backend/cmd/db/main.go similarity index 85% rename from backend/services/db/main.go rename to backend/cmd/db/main.go index 619e6816e..675c9f975 100644 --- a/backend/services/db/main.go +++ b/backend/cmd/db/main.go @@ -2,6 +2,8 @@ package main import ( "log" + "openreplay/backend/internal/datasaver" + "openreplay/backend/internal/heuristics" "time" "os" @@ -15,7 +17,6 @@ import ( "openreplay/backend/pkg/messages" "openreplay/backend/pkg/queue" "openreplay/backend/pkg/queue/types" - "openreplay/backend/services/db/heuristics" ) func main() { @@ -27,8 +28,8 @@ func main() { // Init modules heurFinder := heuristics.NewHandler() - mi := NewMessageInserter(pg) - si := NewStatsInserter(pg) + mi := datasaver.NewMessageInserter(pg) + si := datasaver.NewStatsInserter(pg) statsLogger := logger.NewQueueStats(env.Int("LOG_QUEUE_STATS_INTERVAL_SEC")) // Handler logic @@ -36,14 +37,14 @@ func main() { statsLogger.Collect(sessionID, meta) // Just insert message into db without additional checks - if err := mi.insertMessage(sessionID, msg); err != nil { + if err := mi.InsertMessage(sessionID, msg); err != nil { if !postgres.IsPkeyViolation(err) { log.Printf("Message Insertion Error %v, SessionID: %v, Message: %v", err, sessionID, msg) } return } - // Try to get session from db + // Try to get session from db for the following handlers session, err := pg.GetSession(sessionID) if err != nil { // Might happen due to the assets-related message TODO: log only if session is necessary for this kind of message @@ -52,22 +53,25 @@ func main() { } // Insert statistics - err = si.insertStats(session, msg) + err = si.InsertStats(session, msg) if err != nil { log.Printf("Stats Insertion Error %v; Session: %v, Message: %v", err, session, msg) } + // Insert heuristics heurFinder.HandleMessage(session, msg) + + // TODO: ??? heurFinder.IterateSessionReadyMessages(sessionID, func(msg messages.Message) { // TODO: DRY code (carefully with the return statement logic) - if err := mi.insertMessage(sessionID, msg); err != nil { + if err := mi.InsertMessage(sessionID, msg); err != nil { if !postgres.IsPkeyViolation(err) { log.Printf("Message Insertion Error %v; Session: %v, Message %v", err, session, msg) } return } - if err := si.insertStats(session, msg); err != nil { + if err := si.InsertStats(session, msg); err != nil { log.Printf("Stats Insertion Error %v; Session: %v, Message %v", err, session, msg) } }) diff --git a/backend/services/db/messages.go b/backend/internal/datasaver/messages.go similarity index 96% rename from backend/services/db/messages.go rename to backend/internal/datasaver/messages.go index 1a583ae6a..34a7b8dd4 100644 --- a/backend/services/db/messages.go +++ b/backend/internal/datasaver/messages.go @@ -1,4 +1,4 @@ -package main +package datasaver import ( "openreplay/backend/pkg/db/cache" @@ -13,7 +13,7 @@ func NewMessageInserter(pg *cache.PGCache) *MessageInserter { return &MessageInserter{pg: pg} } -func (mi *MessageInserter) insertMessage(sessionID uint64, msg Message) error { +func (mi *MessageInserter) InsertMessage(sessionID uint64, msg Message) error { switch m := msg.(type) { // Common case *Metadata: diff --git a/backend/services/db/stats.go b/backend/internal/datasaver/stats.go similarity index 87% rename from backend/services/db/stats.go rename to backend/internal/datasaver/stats.go index a2c2024fb..250c01775 100644 --- a/backend/services/db/stats.go +++ b/backend/internal/datasaver/stats.go @@ -1,4 +1,4 @@ -package main +package datasaver import ( "openreplay/backend/pkg/db/cache" @@ -14,7 +14,7 @@ func NewStatsInserter(pg *cache.PGCache) *StatsInserter { return &StatsInserter{pg: pg} } -func (si *StatsInserter) insertStats(session *Session, msg Message) error { +func (si *StatsInserter) InsertStats(session *Session, msg Message) error { switch m := msg.(type) { // Web case *PerformanceTrackAggr: diff --git a/backend/services/db/heuristics/anr.go b/backend/internal/heuristics/anr.go similarity index 100% rename from backend/services/db/heuristics/anr.go rename to backend/internal/heuristics/anr.go diff --git a/backend/services/db/heuristics/clickrage.go b/backend/internal/heuristics/clickrage.go similarity index 100% rename from backend/services/db/heuristics/clickrage.go rename to backend/internal/heuristics/clickrage.go diff --git a/backend/services/db/heuristics/heuristics.go b/backend/internal/heuristics/heuristics.go similarity index 100% rename from backend/services/db/heuristics/heuristics.go rename to backend/internal/heuristics/heuristics.go diff --git a/backend/services/db/heuristics/performance.go b/backend/internal/heuristics/performance.go similarity index 100% rename from backend/services/db/heuristics/performance.go rename to backend/internal/heuristics/performance.go diff --git a/backend/services/db/heuristics/readyMessageStore.go b/backend/internal/heuristics/readyMessageStore.go similarity index 100% rename from backend/services/db/heuristics/readyMessageStore.go rename to backend/internal/heuristics/readyMessageStore.go diff --git a/backend/services/db/heuristics/session.go b/backend/internal/heuristics/session.go similarity index 100% rename from backend/services/db/heuristics/session.go rename to backend/internal/heuristics/session.go diff --git a/backend/services/db/build_hack b/backend/services/db/build_hack new file mode 100644 index 000000000..e69de29bb From 918f7e9d86a879a05808aa8e551709ef1f856c9b Mon Sep 17 00:00:00 2001 From: Shekar Siri Date: Thu, 5 May 2022 10:09:16 +0200 Subject: [PATCH 74/91] change(ui) - user delete --- frontend/app/components/Client/Sites/Sites.js | 15 ++++--- .../Users/components/UserForm/UserForm.tsx | 39 ++++++++++++++----- .../Users/components/UserList/UserList.tsx | 1 - frontend/app/mstore/userStore.ts | 8 ++-- frontend/app/services/UserService.ts | 2 +- 5 files changed, 44 insertions(+), 21 deletions(-) diff --git a/frontend/app/components/Client/Sites/Sites.js b/frontend/app/components/Client/Sites/Sites.js index 8d53b8eab..19f2b8563 100644 --- a/frontend/app/components/Client/Sites/Sites.js +++ b/frontend/app/components/Client/Sites/Sites.js @@ -168,10 +168,13 @@ class Sites extends React.PureComponent {
    +
    +
    Name
    +
    { sites.map(_site => ( //
    -
    +
    {_site.projectKey}
    */}
    -
    + {/* + */} -
    {/* */}
    diff --git a/frontend/app/components/Client/Users/components/UserForm/UserForm.tsx b/frontend/app/components/Client/Users/components/UserForm/UserForm.tsx index 19f44235c..c34828ec6 100644 --- a/frontend/app/components/Client/Users/components/UserForm/UserForm.tsx +++ b/frontend/app/components/Client/Users/components/UserForm/UserForm.tsx @@ -1,11 +1,11 @@ import React from 'react'; -import { Input, CopyButton, Button } from 'UI' +import { Input, CopyButton, Button, Icon } from 'UI' import cn from 'classnames'; import { useStore } from 'App/mstore'; import { useObserver } from 'mobx-react-lite'; import { useModal } from 'App/components/Modal'; import Select from 'Shared/Select'; - +import { confirm } from 'UI/Confirmation'; interface Props { isSmtp?: boolean; isEnterprise?: boolean; @@ -31,6 +31,18 @@ function UserForm(props: Props) { const write = ({ target: { name, value } }) => { user.updateKey(name, value); } + + const deleteHandler = async () => { + if (await confirm({ + header: 'Confirm', + confirmButton: 'Yes, delete', + confirmation: `Are you sure you want to permanently delete this user?` + })) { + userStore.deleteUser(user.userId).then(() => { + hideModal(); + }); + } + } return useObserver(() => (
    @@ -118,14 +130,23 @@ function UserForm(props: Props) { { 'Cancel' }
    - { !user.isJoined && user.invitationLink && - - } +
    + +
    + + { !user.isJoined && user.invitationLink && + + }
    )); } diff --git a/frontend/app/components/Client/Users/components/UserList/UserList.tsx b/frontend/app/components/Client/Users/components/UserList/UserList.tsx index e0e2e37ff..215d7bf94 100644 --- a/frontend/app/components/Client/Users/components/UserList/UserList.tsx +++ b/frontend/app/components/Client/Users/components/UserList/UserList.tsx @@ -27,7 +27,6 @@ function UserList(props) { useEffect(() => { userStore.fetchUsers(); - editHandler(null); }, []); const editHandler = (user) => { diff --git a/frontend/app/mstore/userStore.ts b/frontend/app/mstore/userStore.ts index 640c8910b..af8c93a5f 100644 --- a/frontend/app/mstore/userStore.ts +++ b/frontend/app/mstore/userStore.ts @@ -104,17 +104,17 @@ export default class UserStore { } deleteUser(userId: string): Promise { - this.loading = true; + this.saving = true; return new Promise((resolve, reject) => { userService.delete(userId) .then(response => { - this.instance = null; + this.list = this.list.filter(user => user.userId !== userId); resolve(response); }).catch(error => { - this.loading = false; + this.saving = false; reject(error); }).finally(() => { - this.loading = false; + this.saving = false; }); }); } diff --git a/frontend/app/services/UserService.ts b/frontend/app/services/UserService.ts index 4715f2e13..db86fdd7a 100644 --- a/frontend/app/services/UserService.ts +++ b/frontend/app/services/UserService.ts @@ -38,7 +38,7 @@ export default class UserService { } delete(userId: string) { - return this.client.delete('/users/' + userId) + return this.client.delete('/client/members/' + userId) .then(response => response.json()) .then(response => response.data || {}); } From c0503941167c06cb8c1331840857167326a25c68 Mon Sep 17 00:00:00 2001 From: Alexander Zavorotynskiy Date: Thu, 5 May 2022 10:23:36 +0200 Subject: [PATCH 75/91] Moved service configs to config module --- backend/cmd/db/main.go | 40 +++++++++++++------------- backend/internal/config/db/config.go | 28 ++++++++++++++++++ backend/internal/datasaver/messages.go | 11 +------ backend/internal/datasaver/saver.go | 11 +++++++ backend/internal/datasaver/stats.go | 11 +------ 5 files changed, 61 insertions(+), 40 deletions(-) create mode 100644 backend/internal/config/db/config.go create mode 100644 backend/internal/datasaver/saver.go diff --git a/backend/cmd/db/main.go b/backend/cmd/db/main.go index 675c9f975..962057213 100644 --- a/backend/cmd/db/main.go +++ b/backend/cmd/db/main.go @@ -2,6 +2,7 @@ package main import ( "log" + "openreplay/backend/internal/config/db" "openreplay/backend/internal/datasaver" "openreplay/backend/internal/heuristics" "time" @@ -12,7 +13,6 @@ import ( "openreplay/backend/pkg/db/cache" "openreplay/backend/pkg/db/postgres" - "openreplay/backend/pkg/env" logger "openreplay/backend/pkg/log" "openreplay/backend/pkg/messages" "openreplay/backend/pkg/queue" @@ -22,22 +22,23 @@ import ( func main() { log.SetFlags(log.LstdFlags | log.LUTC | log.Llongfile) + cfg := db.New() + // Init database - pg := cache.NewPGCache(postgres.NewConn(env.String("POSTGRES_STRING")), 1000*60*20) + pg := cache.NewPGCache(postgres.NewConn(cfg.Postgres), cfg.ProjectExpirationTimeoutMs) defer pg.Close() // Init modules heurFinder := heuristics.NewHandler() - mi := datasaver.NewMessageInserter(pg) - si := datasaver.NewStatsInserter(pg) - statsLogger := logger.NewQueueStats(env.Int("LOG_QUEUE_STATS_INTERVAL_SEC")) + saver := datasaver.New(pg) + statsLogger := logger.NewQueueStats(cfg.LoggerTimeout) // Handler logic handler := func(sessionID uint64, msg messages.Message, meta *types.Meta) { statsLogger.Collect(sessionID, meta) - // Just insert message into db without additional checks - if err := mi.InsertMessage(sessionID, msg); err != nil { + // Just save session data into db without additional checks + if err := saver.InsertMessage(sessionID, msg); err != nil { if !postgres.IsPkeyViolation(err) { log.Printf("Message Insertion Error %v, SessionID: %v, Message: %v", err, sessionID, msg) } @@ -52,26 +53,26 @@ func main() { return } - // Insert statistics - err = si.InsertStats(session, msg) + // Save statistics to db + err = saver.InsertStats(session, msg) if err != nil { log.Printf("Stats Insertion Error %v; Session: %v, Message: %v", err, session, msg) } - // Insert heuristics + // Handle heuristics and save to temporary queue in memory heurFinder.HandleMessage(session, msg) - // TODO: ??? + // Process saved heuristics messages as usual messages above in the code heurFinder.IterateSessionReadyMessages(sessionID, func(msg messages.Message) { // TODO: DRY code (carefully with the return statement logic) - if err := mi.InsertMessage(sessionID, msg); err != nil { + if err := saver.InsertMessage(sessionID, msg); err != nil { if !postgres.IsPkeyViolation(err) { log.Printf("Message Insertion Error %v; Session: %v, Message %v", err, session, msg) } return } - if err := si.InsertStats(session, msg); err != nil { + if err := saver.InsertStats(session, msg); err != nil { log.Printf("Stats Insertion Error %v; Session: %v, Message %v", err, session, msg) } }) @@ -79,21 +80,21 @@ func main() { // Init consumer consumer := queue.NewMessageConsumer( - env.String("GROUP_DB"), + cfg.GroupDB, []string{ - env.String("TOPIC_RAW_IOS"), - env.String("TOPIC_TRIGGER"), + cfg.TopicRawIOS, + cfg.TopicTrigger, }, handler, false, ) + log.Printf("Db service started\n") + sigchan := make(chan os.Signal, 1) signal.Notify(sigchan, syscall.SIGINT, syscall.SIGTERM) - tick := time.Tick(15 * time.Second) - - log.Printf("Db service started\n") + tick := time.Tick(cfg.CommitBatchTimeout) for { select { case sig := <-sigchan: @@ -113,5 +114,4 @@ func main() { } } } - } diff --git a/backend/internal/config/db/config.go b/backend/internal/config/db/config.go new file mode 100644 index 000000000..fb35a199c --- /dev/null +++ b/backend/internal/config/db/config.go @@ -0,0 +1,28 @@ +package db + +import ( + "openreplay/backend/pkg/env" + "time" +) + +type Config struct { + Postgres string + ProjectExpirationTimeoutMs int64 + LoggerTimeout int + GroupDB string + TopicRawIOS string + TopicTrigger string + CommitBatchTimeout time.Duration +} + +func New() *Config { + return &Config{ + Postgres: env.String("POSTGRES_STRING"), + ProjectExpirationTimeoutMs: 1000 * 60 * 20, + LoggerTimeout: env.Int("LOG_QUEUE_STATS_INTERVAL_SEC"), + GroupDB: env.String("GROUP_DB"), + TopicRawIOS: env.String("TOPIC_RAW_IOS"), + TopicTrigger: env.String("TOPIC_TRIGGER"), + CommitBatchTimeout: 15 * time.Second, + } +} diff --git a/backend/internal/datasaver/messages.go b/backend/internal/datasaver/messages.go index 34a7b8dd4..1e774888d 100644 --- a/backend/internal/datasaver/messages.go +++ b/backend/internal/datasaver/messages.go @@ -1,19 +1,10 @@ package datasaver import ( - "openreplay/backend/pkg/db/cache" . "openreplay/backend/pkg/messages" ) -type MessageInserter struct { - pg *cache.PGCache -} - -func NewMessageInserter(pg *cache.PGCache) *MessageInserter { - return &MessageInserter{pg: pg} -} - -func (mi *MessageInserter) InsertMessage(sessionID uint64, msg Message) error { +func (mi *Saver) InsertMessage(sessionID uint64, msg Message) error { switch m := msg.(type) { // Common case *Metadata: diff --git a/backend/internal/datasaver/saver.go b/backend/internal/datasaver/saver.go new file mode 100644 index 000000000..4cd742718 --- /dev/null +++ b/backend/internal/datasaver/saver.go @@ -0,0 +1,11 @@ +package datasaver + +import "openreplay/backend/pkg/db/cache" + +type Saver struct { + pg *cache.PGCache +} + +func New(pg *cache.PGCache) *Saver { + return &Saver{pg: pg} +} diff --git a/backend/internal/datasaver/stats.go b/backend/internal/datasaver/stats.go index 250c01775..a57d91824 100644 --- a/backend/internal/datasaver/stats.go +++ b/backend/internal/datasaver/stats.go @@ -1,20 +1,11 @@ package datasaver import ( - "openreplay/backend/pkg/db/cache" . "openreplay/backend/pkg/db/types" . "openreplay/backend/pkg/messages" ) -type StatsInserter struct { - pg *cache.PGCache -} - -func NewStatsInserter(pg *cache.PGCache) *StatsInserter { - return &StatsInserter{pg: pg} -} - -func (si *StatsInserter) InsertStats(session *Session, msg Message) error { +func (si *Saver) InsertStats(session *Session, msg Message) error { switch m := msg.(type) { // Web case *PerformanceTrackAggr: From 74756b240917bfb4a7faef391c621f87f049542d Mon Sep 17 00:00:00 2001 From: Alexander Zavorotynskiy Date: Thu, 5 May 2022 10:46:48 +0200 Subject: [PATCH 76/91] Refactoring of the db service --- backend/build.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backend/build.sh b/backend/build.sh index 8e3bea86a..b4de3c2de 100755 --- a/backend/build.sh +++ b/backend/build.sh @@ -23,7 +23,7 @@ function build_service() { image="$1" echo "BUILDING $image" case "$image" in - http) + http | db) echo build http docker build -t ${DOCKER_REPO:-'local'}/$image:${git_sha1} --build-arg SERVICE_NAME=$image -f ./cmd/Dockerfile . [[ $PUSH_IMAGE -eq 1 ]] && { From 88306e1a6aad8b0aa6e627b413ba99020940cba4 Mon Sep 17 00:00:00 2001 From: Alexander Zavorotynskiy Date: Thu, 5 May 2022 12:04:23 +0200 Subject: [PATCH 77/91] fix (backend): removed unused import in storage module --- backend/services/storage/main.go | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/backend/services/storage/main.go b/backend/services/storage/main.go index ae4d9a1da..95c5c6d17 100644 --- a/backend/services/storage/main.go +++ b/backend/services/storage/main.go @@ -7,7 +7,6 @@ import ( "time" "bytes" - "io" "os/signal" "syscall" @@ -57,7 +56,7 @@ func main() { log.Fatalf("Storage: start upload failed. %v\n", err) } if nRead == SESSION_FILE_SPLIT_SIZE { - if err := storage.Upload(gzipFile(file), key + "e", "application/octet-stream", true); err != nil { + if err := storage.Upload(gzipFile(file), key+"e", "application/octet-stream", true); err != nil { log.Fatalf("Storage: end upload failed. %v\n", err) } } From b6d57b45abda237147c37216d8a6607a201de0ae Mon Sep 17 00:00:00 2001 From: Alex Kaminskii Date: Thu, 5 May 2022 12:49:44 +0200 Subject: [PATCH 78/91] chore(github-workflow): backend --- .github/workflows/workers-ee.yaml | 8 +++++++- .github/workflows/workers.yaml | 4 ++-- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/.github/workflows/workers-ee.yaml b/.github/workflows/workers-ee.yaml index a61d75160..18fca8872 100644 --- a/.github/workflows/workers-ee.yaml +++ b/.github/workflows/workers-ee.yaml @@ -47,7 +47,13 @@ jobs: # # Getting the images to build # - git diff --name-only HEAD HEAD~1 | grep backend/services | cut -d '/' -f3 | uniq > backend/images_to_build.txt + { + git diff --name-only HEAD HEAD~1 | grep -E "backend/cmd|backend/services" | grep -vE ^ee/ | cut -d '/' -f3 + + git diff --name-only HEAD HEAD~1 | grep -E "backend/pkg|backend/internal" | grep -vE ^ee/ | cut -d '/' -f3 | uniq | while read -r pkg_name ; do + grep -rl "pkg/$pkg_name" backend/services backend/cmd | cut -d '/' -f3 + done + } | uniq > backend/images_to_build.txt [[ $(cat backend/images_to_build.txt) != "" ]] || (echo "Nothing to build here"; exit 0) # # Pushing image to registry diff --git a/.github/workflows/workers.yaml b/.github/workflows/workers.yaml index 7ce78ad6f..e6a91647d 100644 --- a/.github/workflows/workers.yaml +++ b/.github/workflows/workers.yaml @@ -51,8 +51,8 @@ jobs: { git diff --name-only HEAD HEAD~1 | grep -E "backend/cmd|backend/services" | grep -vE ^ee/ | cut -d '/' -f3 - git diff --name-only HEAD HEAD~1 | grep backend/pkg | grep -vE ^ee/ | cut -d '/' -f3 | uniq | while read -r pkg_name ; do - grep -rl "pkg/$pkg_name" backend/services | cut -d '/' -f3 + git diff --name-only HEAD HEAD~1 | grep -E "backend/pkg|backend/internal" | grep -vE ^ee/ | cut -d '/' -f3 | uniq | while read -r pkg_name ; do + grep -rl "pkg/$pkg_name" backend/services backend/cmd | cut -d '/' -f3 done } | uniq > backend/images_to_build.txt From dfce25709a588033c304cb14c2cc09dd7693cb3c Mon Sep 17 00:00:00 2001 From: Shekar Siri Date: Thu, 5 May 2022 13:11:20 +0200 Subject: [PATCH 79/91] change(ui) - user limit check and other fixes --- frontend/app/components/Client/Sites/Sites.js | 9 ++-- .../app/components/Client/Users/UsersView.tsx | 18 +++++--- .../Users/components/UserForm/UserForm.tsx | 10 ++--- .../Users/components/UserList/UserList.tsx | 12 +++-- .../components/UserListItem/UserListItem.tsx | 44 +++++++++++++++---- .../app/components/shared/Select/Select.tsx | 2 +- frontend/app/mstore/types/user.ts | 5 +++ frontend/app/mstore/userStore.ts | 41 +++++++++++++++++ frontend/app/services/UserService.ts | 6 +++ 9 files changed, 121 insertions(+), 26 deletions(-) diff --git a/frontend/app/components/Client/Sites/Sites.js b/frontend/app/components/Client/Sites/Sites.js index 19f2b8563..cb9c4df3b 100644 --- a/frontend/app/components/Client/Sites/Sites.js +++ b/frontend/app/components/Client/Sites/Sites.js @@ -168,8 +168,11 @@ class Sites extends React.PureComponent {
    -
    -
    Name
    +
    +
    Name
    +
    Key
    +
    +
    { sites.map(_site => ( @@ -191,7 +194,7 @@ class Sites extends React.PureComponent {
    - {_site.projectKey} + {_site.projectKey}
    {/*
    { _site.host }
    diff --git a/frontend/app/components/Client/Users/UsersView.tsx b/frontend/app/components/Client/Users/UsersView.tsx index 7d4029b5f..9825db446 100644 --- a/frontend/app/components/Client/Users/UsersView.tsx +++ b/frontend/app/components/Client/Users/UsersView.tsx @@ -8,23 +8,26 @@ import { useModal } from 'App/components/Modal'; import UserForm from './components/UserForm'; import { connect } from 'react-redux'; +const PERMISSION_WARNING = 'You don’t have the permissions to perform this action.'; +const LIMIT_WARNING = 'You have reached users limit.'; interface Props { account: any; isEnterprise: boolean; + limits: any; } function UsersView(props: Props) { - const { account, isEnterprise } = props; + const { account, limits, isEnterprise } = props; const { userStore, roleStore } = useStore(); const userCount = useObserver(() => userStore.list.length); const roles = useObserver(() => roleStore.list); const { showModal } = useModal(); + const reachedLimit = (limits.remaining + userStore.modifiedCount) <= 0; const isAdmin = account.admin || account.superAdmin; - // const canAddUsers = isAdmin && userCount !== 0; // TODO fetch limits and disable button if limit reached const editHandler = (user = null) => { userStore.initUser(user).then(() => { - showModal(, { right: true }); + showModal(, {}); }); } @@ -34,6 +37,8 @@ function UsersView(props: Props) { } }, []); + console.log('remaining', limits, reachedLimit) + return (
    @@ -45,7 +50,7 @@ function UsersView(props: Props) {
    } - // disabled={ canAddUsers } - // content={ `${ !canAddUsers ? (!isAdmin ? PERMISSION_WARNING : LIMIT_WARNING) : 'Add team member' }` } + content={ `${ !isAdmin ? PERMISSION_WARNING : (reachedLimit ? LIMIT_WARNING : 'Add team member') }` } size="tiny" inverted position="top left" @@ -74,4 +78,6 @@ function UsersView(props: Props) { export default connect(state => ({ account: state.getIn([ 'user', 'account' ]), isEnterprise: state.getIn([ 'user', 'client', 'edition' ]) === 'ee', + limits: state.getIn([ 'user', 'account', 'limits', 'teamMember' ]), + // remaining: this.props.account.limits.teamMember.remaining }))(UsersView); \ No newline at end of file diff --git a/frontend/app/components/Client/Users/components/UserForm/UserForm.tsx b/frontend/app/components/Client/Users/components/UserForm/UserForm.tsx index c34828ec6..25f35097c 100644 --- a/frontend/app/components/Client/Users/components/UserForm/UserForm.tsx +++ b/frontend/app/components/Client/Users/components/UserForm/UserForm.tsx @@ -12,9 +12,9 @@ interface Props { } function UserForm(props: Props) { const { isSmtp = false, isEnterprise = false } = props; - const isSaving = false; const { hideModal } = useModal(); const { userStore, roleStore } = useStore(); + const isSaving = useObserver(() => userStore.saving); const user: any = useObserver(() => userStore.instance); const roles = useObserver(() => roleStore.list.filter(r => r.isProtected ? user.isSuperAdmin : true).map(r => ({ label: r.name, value: r.roleId }))); @@ -98,7 +98,7 @@ function UserForm(props: Props) {
    { const newUser = new User().fromJson(response); if (wasCreating) { + this.modifiedCount -= 1; this.list.push(new User().fromJson(newUser)); toast.success('User created successfully'); } else { @@ -108,6 +111,7 @@ export default class UserStore { return new Promise((resolve, reject) => { userService.delete(userId) .then(response => { + this.modifiedCount += 1; this.list = this.list.filter(user => user.userId !== userId); resolve(response); }).catch(error => { @@ -118,4 +122,41 @@ export default class UserStore { }); }); } + + copyInviteCode(userId: string): void { + const content = this.list.find(u => u.userId === userId)?.invitationLink; + if (content) { + copy(content); + toast.success('Invite code copied successfully'); + } else { + toast.error('Invite code not found'); + } + } + + generateInviteCode(userId: string): Promise { + this.saving = true; + const promise = new Promise((resolve, reject) => { + userService.generateInviteCode(userId) + .then(response => { + const index = this.list.findIndex(u => u.userId === userId); + if (index > -1) { + this.list[index].updateKey('isExpiredInvite', false); + this.list[index].updateKey('invitationLink', response.invitationLink); + } + resolve(response); + }).catch(error => { + this.saving = false; + reject(error); + }).finally(() => { + this.saving = false; + }); + }); + + toast.promise(promise, { + pending: 'Generating an invite code...', + success: 'Invite code generated successfully', + }) + + return promise; + } } \ No newline at end of file diff --git a/frontend/app/services/UserService.ts b/frontend/app/services/UserService.ts index db86fdd7a..615368db6 100644 --- a/frontend/app/services/UserService.ts +++ b/frontend/app/services/UserService.ts @@ -37,6 +37,12 @@ export default class UserService { } } + generateInviteCode(userId: any): Promise { + return this.client.get(`/client/members/${userId}/reset`) + .then(response => response.json()) + .then(response => response.data || {}); + } + delete(userId: string) { return this.client.delete('/client/members/' + userId) .then(response => response.json()) From 55b64128f182102358de04bc4e44cb3be7d872c0 Mon Sep 17 00:00:00 2001 From: Shekar Siri Date: Thu, 5 May 2022 13:16:06 +0200 Subject: [PATCH 80/91] change(ui) - sites checking for exists --- frontend/app/components/Client/Sites/Sites.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/app/components/Client/Sites/Sites.js b/frontend/app/components/Client/Sites/Sites.js index cb9c4df3b..027b09cf3 100644 --- a/frontend/app/components/Client/Sites/Sites.js +++ b/frontend/app/components/Client/Sites/Sites.js @@ -85,7 +85,7 @@ class Sites extends React.PureComponent { getModalTitle() { switch (this.state.modalContent) { case NEW_SITE_FORM: - return 'New Project'; + return this.props.site.exists() ? 'Update Project' : 'New Project'; case GDPR_FORM: return 'Project Settings'; default: From c3bb5aeb07141adf9dfad777d30b044abec3018f Mon Sep 17 00:00:00 2001 From: Shekar Siri Date: Thu, 5 May 2022 13:27:06 +0200 Subject: [PATCH 81/91] change(ui) - sites search --- .../Client/Sites/SiteSearch/SiteSearch.tsx | 34 +++++++++++++++++++ .../Client/Sites/SiteSearch/index.ts | 1 + frontend/app/components/Client/Sites/Sites.js | 20 +++++++---- 3 files changed, 48 insertions(+), 7 deletions(-) create mode 100644 frontend/app/components/Client/Sites/SiteSearch/SiteSearch.tsx create mode 100644 frontend/app/components/Client/Sites/SiteSearch/index.ts diff --git a/frontend/app/components/Client/Sites/SiteSearch/SiteSearch.tsx b/frontend/app/components/Client/Sites/SiteSearch/SiteSearch.tsx new file mode 100644 index 000000000..1a4c2b881 --- /dev/null +++ b/frontend/app/components/Client/Sites/SiteSearch/SiteSearch.tsx @@ -0,0 +1,34 @@ +import React, { useEffect } from 'react'; +import { Icon } from 'UI'; +import { debounce } from 'App/utils'; + +let debounceUpdate: any = () => {} +interface Props { + onChange: (value: string) => void; +} +function SiteSearch(props: Props) { + const { onChange } = props; + + useEffect(() => { + debounceUpdate = debounce((value) => onChange(value), 500); + }, []) + + const write = ({ target: { name, value } }) => { + debounceUpdate(value); + } + + return ( +
    + + +
    + ); +} + +export default SiteSearch; \ No newline at end of file diff --git a/frontend/app/components/Client/Sites/SiteSearch/index.ts b/frontend/app/components/Client/Sites/SiteSearch/index.ts new file mode 100644 index 000000000..54376cf15 --- /dev/null +++ b/frontend/app/components/Client/Sites/SiteSearch/index.ts @@ -0,0 +1 @@ +export { default } from './SiteSearch'; \ No newline at end of file diff --git a/frontend/app/components/Client/Sites/Sites.js b/frontend/app/components/Client/Sites/Sites.js index 027b09cf3..ba3c72e6e 100644 --- a/frontend/app/components/Client/Sites/Sites.js +++ b/frontend/app/components/Client/Sites/Sites.js @@ -10,6 +10,7 @@ import GDPRForm from './GDPRForm'; import TrackingCodeModal from 'Shared/TrackingCodeModal'; import BlockedIps from './BlockedIps'; import { confirm } from 'UI/Confirmation'; +import SiteSearch from './SiteSearch'; const STATUS_MESSAGE_MAP = { [ RED ]: ' There seems to be an issue (please verify your installation)', @@ -43,6 +44,7 @@ class Sites extends React.PureComponent { showTrackingCode: false, modalContent: NONE, detailContent: NONE, + searchQuery: '', }; toggleBlockedIp = () => { @@ -119,6 +121,7 @@ class Sites extends React.PureComponent { const isAdmin = user.admin || user.superAdmin; const canAddSites = isAdmin && account.limits.projects && account.limits.projects.remaining !== 0; const canDeleteSites = sites.size > 1 && isAdmin; + const filteredSites = sites.filter(site => site.name.toLowerCase().includes(this.state.searchQuery.toLowerCase())); return ( @@ -159,12 +162,15 @@ class Sites extends React.PureComponent { position="top left" /> - +
    + + this.setState({ searchQuery: value })} /> +
    @@ -175,7 +181,7 @@ class Sites extends React.PureComponent {
    { - sites.map(_site => ( + filteredSites.map(_site => ( //
    From c4b371507d909a018fad2fef9c88e4188dfc2435 Mon Sep 17 00:00:00 2001 From: Shekar Siri Date: Thu, 5 May 2022 14:31:53 +0200 Subject: [PATCH 82/91] change(ui) - project delete moved to modal --- .../components/Client/Sites/NewSiteForm.js | 24 +++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/frontend/app/components/Client/Sites/NewSiteForm.js b/frontend/app/components/Client/Sites/NewSiteForm.js index e58e95d4e..e7cd88f12 100644 --- a/frontend/app/components/Client/Sites/NewSiteForm.js +++ b/frontend/app/components/Client/Sites/NewSiteForm.js @@ -1,10 +1,11 @@ import { connect } from 'react-redux'; -import { Input, Button, Label } from 'UI'; -import { save, edit, update , fetchList } from 'Duck/site'; +import { Input, Button, Icon } from 'UI'; +import { save, edit, update , fetchList, remove } from 'Duck/site'; import { pushNewSite } from 'Duck/user'; import { setSiteId } from 'Duck/site'; import { withRouter } from 'react-router-dom'; import styles from './siteForm.css'; +import { confirm } from 'UI/Confirmation'; @connect(state => ({ site: state.getIn([ 'site', 'instance' ]), @@ -13,6 +14,7 @@ import styles from './siteForm.css'; loading: state.getIn([ 'site', 'save', 'loading' ]), }), { save, + remove, edit, update, pushNewSite, @@ -52,6 +54,17 @@ export default class NewSiteForm extends React.PureComponent { } } + remove = async (site) => { + if (await confirm({ + header: 'Projects', + confirmation: `Are you sure you want to delete this Project? We won't be able to record anymore sessions.` + })) { + this.props.remove(site.id).then(() => { + this.props.onClose(null) + }); + } + }; + edit = ({ target: { name, value } }) => { this.setState({ existsError: false }); this.props.edit({ [ name ]: value }); @@ -72,7 +85,7 @@ export default class NewSiteForm extends React.PureComponent { className={ styles.input } />
    -
    +
    + +
    { this.state.existsError &&
    { "Site exists already. Please choose another one." } From 59fe8245dd569668794b971b2c9864b05bd84889 Mon Sep 17 00:00:00 2001 From: Shekar Siri Date: Thu, 5 May 2022 14:41:10 +0200 Subject: [PATCH 83/91] change(ui) - user list tooltip --- .../app/components/Client/Users/UsersView.tsx | 2 -- .../components/UserListItem/UserListItem.tsx | 34 ++++++++++++++----- frontend/app/mstore/types/user.ts | 1 - 3 files changed, 25 insertions(+), 12 deletions(-) diff --git a/frontend/app/components/Client/Users/UsersView.tsx b/frontend/app/components/Client/Users/UsersView.tsx index 9825db446..693c47229 100644 --- a/frontend/app/components/Client/Users/UsersView.tsx +++ b/frontend/app/components/Client/Users/UsersView.tsx @@ -37,8 +37,6 @@ function UsersView(props: Props) { } }, []); - console.log('remaining', limits, reachedLimit) - return (
    diff --git a/frontend/app/components/Client/Users/components/UserListItem/UserListItem.tsx b/frontend/app/components/Client/Users/components/UserListItem/UserListItem.tsx index 10f2f2fe0..bb6d6b2f6 100644 --- a/frontend/app/components/Client/Users/components/UserListItem/UserListItem.tsx +++ b/frontend/app/components/Client/Users/components/UserListItem/UserListItem.tsx @@ -1,6 +1,8 @@ +//@ts-nocheck import React from 'react'; -import { Icon, CopyButton } from 'UI'; +import { Icon } from 'UI'; import { checkForRecent } from 'App/date'; +import { Tooltip } from 'react-tippy'; interface Props { user: any; @@ -30,18 +32,32 @@ function UserListItem(props: Props) {
    {user.createdAt && checkForRecent(user.createdAt, 'LLL dd, yyyy, hh:mm a')}
    - {/* invisible */} -
    + +
    {!user.isJoined && user.invitationLink ? ( - + + + ) :
    } {!user.isJoined && user.isExpiredInvite && ( - + + + )}
    - +
    ); } @@ -77,5 +77,4 @@ export default connect(state => ({ account: state.getIn([ 'user', 'account' ]), isEnterprise: state.getIn([ 'user', 'client', 'edition' ]) === 'ee', limits: state.getIn([ 'user', 'account', 'limits', 'teamMember' ]), - // remaining: this.props.account.limits.teamMember.remaining }))(UsersView); \ No newline at end of file diff --git a/frontend/app/components/Client/Users/components/UserList/UserList.tsx b/frontend/app/components/Client/Users/components/UserList/UserList.tsx index 917b10776..b01fca57b 100644 --- a/frontend/app/components/Client/Users/components/UserList/UserList.tsx +++ b/frontend/app/components/Client/Users/components/UserList/UserList.tsx @@ -7,7 +7,11 @@ import { Pagination, NoContent, Loader } from 'UI'; import { useModal } from 'App/components/Modal'; import UserForm from '../UserForm'; -function UserList(props) { +interface Props { + isEnterprise?: boolean; +} +function UserList(props: Props) { + const { isEnterprise = false } = props; const { userStore } = useStore(); const loading = useObserver(() => userStore.loading); const users = useObserver(() => userStore.list); @@ -53,6 +57,7 @@ function UserList(props) { editHandler={() => editHandler(user)} generateInvite={() => userStore.generateInviteCode(user.userId)} copyInviteCode={() => userStore.copyInviteCode(user.userId)} + // isEnterprise={isEnterprise} />
    ))} diff --git a/frontend/app/components/Client/Users/components/UserListItem/UserListItem.tsx b/frontend/app/components/Client/Users/components/UserListItem/UserListItem.tsx index bb6d6b2f6..51ea43422 100644 --- a/frontend/app/components/Client/Users/components/UserListItem/UserListItem.tsx +++ b/frontend/app/components/Client/Users/components/UserListItem/UserListItem.tsx @@ -4,11 +4,21 @@ import { Icon } from 'UI'; import { checkForRecent } from 'App/date'; import { Tooltip } from 'react-tippy'; + +const AdminPrivilegeLabel = ({ user }) => { + return ( + <> + {user.isAdmin && Admin} + {user.isSuperAdmin && Owner} + + ) +} interface Props { user: any; editHandler?: any; generateInvite?: any; copyInviteCode?: any; + isEnterprise?: boolean; } function UserListItem(props: Props) { const { @@ -16,18 +26,21 @@ function UserListItem(props: Props) { editHandler = () => {}, generateInvite = () => {}, copyInviteCode = () => {}, + isEnterprise = false, } = props; return (
    - {user.name} - {user.isAdmin && Admin} - {user.isSuperAdmin && Owner} + {user.name} + {isEnterprise && }
    - - {user.roleName} - + {!isEnterprise && } + {isEnterprise && ( + + {user.roleName} + + )}
    {user.createdAt && checkForRecent(user.createdAt, 'LLL dd, yyyy, hh:mm a')} From 2d96705930ab32e1b8cb29b01e40452a4d3584e9 Mon Sep 17 00:00:00 2001 From: Alex Kaminskii Date: Fri, 6 May 2022 00:07:07 +0200 Subject: [PATCH 87/91] readme(tracker): build-readme for js packages --- tracker/README.md | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 tracker/README.md diff --git a/tracker/README.md b/tracker/README.md new file mode 100644 index 000000000..f283ee3a8 --- /dev/null +++ b/tracker/README.md @@ -0,0 +1,31 @@ +## Local build + + +In order to build locally any of the javascript packages located under this directory, go to the corresponding folder first: + +```sh +cd tracker # or any tracker-* plugin + +``` +Then run +```sh +yarn +yarn build +``` +OR + +```sh +npm i +npm run build +``` + +You can then use it as a local javascript package by executing the folowing line under your local project location: + +```sh +yarn add file:../path/to/openreplay/monorepo/tracker/tracker +```` +OR +```sh +npm install --save ../path/to/openreplay/monorepo/tracker/tracker +``` + From a99f684b83b704967e1d34b1ab1f5a09b736264d Mon Sep 17 00:00:00 2001 From: Alex Kaminskii Date: Fri, 6 May 2022 00:10:08 +0200 Subject: [PATCH 88/91] feat(frontend-player): sequential (pre)load for multifile sessions --- .../MessageDistributor/MessageDistributor.ts | 251 +++++++++--------- .../messages/MFileReader.ts | 65 ++--- .../MessageDistributor/messages/urlResolve.ts | 1 - .../MessageDistributor/network/loadFiles.ts | 49 ++++ 4 files changed, 203 insertions(+), 163 deletions(-) create mode 100644 frontend/app/player/MessageDistributor/network/loadFiles.ts diff --git a/frontend/app/player/MessageDistributor/MessageDistributor.ts b/frontend/app/player/MessageDistributor/MessageDistributor.ts index 68ae14c72..653b05f54 100644 --- a/frontend/app/player/MessageDistributor/MessageDistributor.ts +++ b/frontend/app/player/MessageDistributor/MessageDistributor.ts @@ -8,11 +8,11 @@ import Profile from 'Types/session/profile'; import ReduxAction from 'Types/session/reduxAction'; import { update } from '../store'; -import { +import { init as initListsDepr, append as listAppend, - setStartTime as setListsStartTime - } from '../lists'; + setStartTime as setListsStartTime +} from '../lists'; import StatedScreen from './StatedScreen/StatedScreen'; @@ -26,6 +26,7 @@ import ActivityManager from './managers/ActivityManager'; import AssistManager from './managers/AssistManager'; import MFileReader from './messages/MFileReader'; +import loadFiles from './network/loadFiles'; import { INITIAL_STATE as SUPER_INITIAL_STATE, State as SuperState } from './StatedScreen/StatedScreen'; import { INITIAL_STATE as ASSIST_INITIAL_STATE, State as AssistState } from './managers/AssistManager'; @@ -33,7 +34,7 @@ import { INITIAL_STATE as ASSIST_INITIAL_STATE, State as AssistState } from './m import type { PerformanceChartPoint } from './managers/PerformanceTrackManager'; import type { SkipInterval } from './managers/ActivityManager'; -const LIST_NAMES = [ "redux", "mobx", "vuex", "ngrx", "graphql", "exceptions", "profiles", "longtasks" ] as const; +const LIST_NAMES = ["redux", "mobx", "vuex", "ngrx", "graphql", "exceptions", "profiles", "longtasks"] as const; const LISTS_INITIAL_STATE = {}; LIST_NAMES.forEach(name => { LISTS_INITIAL_STATE[`${name}ListNow`] = []; @@ -65,15 +66,15 @@ type ListsObject = { } function initLists(): ListsObject { - const lists: Partial = {} ; + const lists: Partial = {}; for (var i = 0; i < LIST_NAMES.length; i++) { - lists[ LIST_NAMES[i] ] = new ListWalker(); + lists[LIST_NAMES[i]] = new ListWalker(); } return lists as ListsObject; } -import type { +import type { Message, SetPageLocation, ConnectionInformation, @@ -110,7 +111,7 @@ export default class MessageDistributor extends StatedScreen { private navigationStartOffset: number = 0; private lastMessageTime: number = 0; - constructor(private readonly session: any /*Session*/, jwt: string, config, live: boolean) { + constructor(private readonly session: any /*Session*/, jwt: string, config, live: boolean) { super(); this.pagesManager = new PagesManager(this, this.session.isMobile) this.mouseManager = new MouseManager(this); @@ -128,7 +129,7 @@ export default class MessageDistributor extends StatedScreen { /* == REFACTOR_ME == */ const eventList = this.session.events.toJSON(); initListsDepr({ - event: eventList, + event: eventList, stack: this.session.stackEvents.toJSON(), resource: this.session.resources.toJSON(), }); @@ -146,96 +147,83 @@ export default class MessageDistributor extends StatedScreen { } } - - // subscribeOnMessages(sockUrl) { - // this.setMessagesLoading(true); - // const socket = new WebSocket(sockUrl); - // socket.binaryType = 'arraybuffer'; - // socket.onerror = (e) => { - // // TODO: reconnect - // update({ error: true }); - // } - // socket.onmessage = (socketMessage) => { - // const data = new Uint8Array(socketMessage.data); - // const msgs = []; - // messageGenerator // parseBuffer(msgs, data); - // // TODO: count indexes. Now will not work due to wrong indexes - // //msgs.forEach(this.distributeMessage); - // this.setMessagesLoading(false); - // this.setDisconnected(false); - // } - // this._socket = socket; - // } - + private waitingForFiles: boolean = false private loadMessages(): void { - const fileUrl: string = this.session.mobsUrl; - this.setMessagesLoading(true); - window.fetch(fileUrl) - .then(r => r.arrayBuffer()) - .then(b => { - const r = new MFileReader(new Uint8Array(b), this.sessionStart); - const msgs: Array = []; + this.setMessagesLoading(true) + this.waitingForFiles = true - while (r.hasNext()) { - const next = r.next(); - if (next != null) { - this.distributeMessage(next[0], next[1]); - msgs.push(next[0]); + const r = new MFileReader(new Uint8Array(), this.sessionStart) + const msgs: Array = [] + loadFiles(this.session.mobsUrl, + b => { + r.append(b) + let next: ReturnType + while (next = r.next()) { + const [msg, index] = next + this.distributeMessage(msg, index) + this.lastMessageTime = Math.max(msg.time, this.lastMessageTime) + + msgs.push(msg) } - } - // @ts-ignore Hack for upet (TODO: fix ordering in one mutation (removes first)) - const headChildrenIds = msgs.filter(m => m.parentID === 1).map(m => m.id); - //const createNodeTypes = ["create_text_node", "create_element_node"]; - this.pagesManager.sort((m1, m2) =>{ - if (m1.time === m2.time) { - if (m1.tp === "remove_node" && m2.tp !== "remove_node") { - if (headChildrenIds.includes(m1.id)) { - return -1; - } - } else if (m2.tp === "remove_node" && m1.tp !== "remove_node") { - if (headChildrenIds.includes(m2.id)) { - return 1; - } - } else if (m2.tp === "remove_node" && m1.tp === "remove_node") { - const m1FromHead = headChildrenIds.includes(m1.id); - const m2FromHead = headChildrenIds.includes(m2.id); - if (m1FromHead && !m2FromHead) { - return -1; - } else if (m2FromHead && !m1FromHead) { - return 1; + logger.info("Messages count: ", msgs.length, msgs) + + // @ts-ignore Hack for upet (TODO: fix ordering in one mutation in tracker(removes first)) + const headChildrenIds = msgs.filter(m => m.parentID === 1).map(m => m.id); + this.pagesManager.sort((m1, m2) => { + if (m1.time === m2.time) { + if (m1.tp === "remove_node" && m2.tp !== "remove_node") { + if (headChildrenIds.includes(m1.id)) { + return -1; + } + } else if (m2.tp === "remove_node" && m1.tp !== "remove_node") { + if (headChildrenIds.includes(m2.id)) { + return 1; + } + } else if (m2.tp === "remove_node" && m1.tp === "remove_node") { + const m1FromHead = headChildrenIds.includes(m1.id); + const m2FromHead = headChildrenIds.includes(m2.id); + if (m1FromHead && !m2FromHead) { + return -1; + } else if (m2FromHead && !m1FromHead) { + return 1; + } } } - } - return 0; - }) - + return 0; + }) - logger.info("Messages count: ", msgs.length, msgs); - - const stateToUpdate: {[key:string]: any} = { - performanceChartData: this.performanceTrackManager.chartData, - performanceAvaliability: this.performanceTrackManager.avaliability, - }; - this.activirtManager?.end(); - stateToUpdate.skipIntervals = this.activirtManager?.list || []; - LIST_NAMES.forEach(key => { - stateToUpdate[ `${ key }List` ] = this.lists[ key ].list; - }); - update(stateToUpdate); - - this.windowNodeCounter.reset(); - - this.setMessagesLoading(false); + const stateToUpdate: {[key:string]: any} = { + performanceChartData: this.performanceTrackManager.chartData, + performanceAvaliability: this.performanceTrackManager.avaliability, + } + LIST_NAMES.forEach(key => { + stateToUpdate[ `${ key }List` ] = this.lists[ key ].list + }) + update(stateToUpdate) + this.setMessagesLoading(false) + } + ) + .then(() => { + this.windowNodeCounter.reset() + if (this.activirtManager) { + this.activirtManager.end() + update({ + skipIntervals: this.activirtManager.list + }) + } + this.waitingForFiles = false + this.setMessagesLoading(false) + }) + .catch(e => { + logger.error(e) + this.waitingForFiles = false + this.setMessagesLoading(false) + update({ error: true }) }) - .catch((e) => { - logger.error(e); - this.setMessagesLoading(false); - update({ error: true }); - }); } - move(t: number, index?: number):void { + move(t: number, index?: number): void { const stateToUpdate: Partial = {}; /* == REFACTOR_ME == */ const lastLoadedLocationMsg = this.loadedLocationManager.moveToLast(t, index); @@ -248,7 +236,7 @@ export default class MessageDistributor extends StatedScreen { if (llEvent.domContentLoadedTime != null) { stateToUpdate.domContentLoadedTime = { time: llEvent.domContentLoadedTime + this.navigationStartOffset, //TODO: predefined list of load event for the network tab (merge events & SetPageLocation: add navigationStart to db) - value: llEvent.domContentLoadedTime, + value: llEvent.domContentLoadedTime, } } if (llEvent.loadTime != null) { @@ -277,9 +265,9 @@ export default class MessageDistributor extends StatedScreen { } LIST_NAMES.forEach(key => { - const lastMsg = this.lists[ key ].moveToLast(t, key === 'exceptions' ? undefined : index); + const lastMsg = this.lists[key].moveToLast(t, key === 'exceptions' ? undefined : index); if (lastMsg != null) { - stateToUpdate[`${key}ListNow`] = this.lists[ key ].listNow; + stateToUpdate[`${key}ListNow`] = this.lists[key].listNow; } }); @@ -298,21 +286,25 @@ export default class MessageDistributor extends StatedScreen { this.window.scrollTo(lastScroll.x, lastScroll.y); } // Moving mouse and setting :hover classes on ready view - this.mouseManager.move(t); + this.mouseManager.move(t); const lastClick = this.clickManager.moveToLast(t); if (!!lastClick && t - lastClick.time < 600) { // happend during last 600ms this.cursor.click(); } // After all changes - redraw the marker //this.marker.redraw(); - }) + }) + + if (this.waitingForFiles && this.lastMessageTime <= t) { + this.setMessagesLoading(true) + } } _decodeMessage(msg, keys: Array) { const decoded = {}; try { keys.forEach(key => { - decoded[ key ] = this.decoder.decode(msg[ key ]); + decoded[key] = this.decoder.decode(msg[key]); }); } catch (e) { logger.error("Error on message decoding: ", e, msg); @@ -323,15 +315,13 @@ export default class MessageDistributor extends StatedScreen { /* Binded */ distributeMessage = (msg: Message, index: number): void => { - this.lastMessageTime = msg.time; - - if ([ + if ([ "mouse_move", "mouse_click", "create_element_node", // not a user activity, though visual change "set_input_value", "set_input_checked", - "set_viewport_size", + "set_viewport_size", "set_viewport_scroll", ].includes(msg.tp)) { this.activirtManager?.updateAcctivity(msg.time); @@ -343,13 +333,13 @@ export default class MessageDistributor extends StatedScreen { /* Lists: */ case "console_log": if (msg.level === 'debug') break; - listAppend("log", Log({ + listAppend("log", Log({ level: msg.level, value: msg.value, - time, + time, index, })); - break; + break; case "fetch": listAppend("fetch", Resource({ method: msg.method, @@ -362,118 +352,117 @@ export default class MessageDistributor extends StatedScreen { time: msg.timestamp - this.sessionStart, //~ index, })); - break; + break; /* */ case "set_page_location": this.locationManager.add(msg); if (msg.navigationStart > 0) { this.loadedLocationManager.add(msg); } - break; + break; case "set_viewport_size": this.resizeManager.add(msg); - break; + break; case "mouse_move": this.mouseManager.add(msg); - break; + break; case "mouse_click": this.clickManager.add(msg); - break; + break; case "set_viewport_scroll": this.scrollManager.add(msg); - break; + break; case "performance_track": this.performanceTrackManager.add(msg); - break; + break; case "set_page_visibility": this.performanceTrackManager.handleVisibility(msg) - break; + break; case "connection_information": this.connectionInfoManger.add(msg); - break; + break; case "o_table": this.decoder.set(msg.key, msg.value); - break; + break; case "redux": decoded = this._decodeMessage(msg, ["state", "action"]); logger.log(decoded) if (decoded != null) { this.lists.redux.add(decoded); } - break; + break; case "ng_rx": decoded = this._decodeMessage(msg, ["state", "action"]); logger.log(decoded) if (decoded != null) { this.lists.ngrx.add(decoded); - } - break; + } + break; case "vuex": decoded = this._decodeMessage(msg, ["state", "mutation"]); logger.log(decoded) if (decoded != null) { this.lists.vuex.add(decoded); - } - break; + } + break; case "mob_x": decoded = this._decodeMessage(msg, ["payload"]); logger.log(decoded) if (decoded != null) { this.lists.mobx.add(decoded); - } - break; + } + break; case "graph_ql": // @ts-ignore some hack? TODO: remove msg.duration = 0; this.lists.graphql.add(msg); - break; + break; case "profiler": this.lists.profiles.add(msg); - break; + break; case "long_task": this.lists.longtasks.add({ ...msg, time: msg.timestamp - this.sessionStart, }); - break; + break; default: - switch (msg.tp){ + switch (msg.tp) { case "create_document": this.windowNodeCounter.reset(); this.performanceTrackManager.setCurrentNodesCount(this.windowNodeCounter.count); - break; + break; case "create_text_node": case "create_element_node": this.windowNodeCounter.addNode(msg.id, msg.parentID); this.performanceTrackManager.setCurrentNodesCount(this.windowNodeCounter.count); - break; + break; case "move_node": this.windowNodeCounter.moveNode(msg.id, msg.parentID); this.performanceTrackManager.setCurrentNodesCount(this.windowNodeCounter.count); - break; + break; case "remove_node": this.windowNodeCounter.removeNode(msg.id); this.performanceTrackManager.setCurrentNodesCount(this.windowNodeCounter.count); - break; + break; } this.pagesManager.add(msg); - break; + break; } } - getLastMessageTime():number { + getLastMessageTime(): number { return this.lastMessageTime; } - getFirstMessageTime():number { + getFirstMessageTime(): number { return 0; //this.pagesManager.minTime; } // TODO: clean managers? clean() { super.clean(); - //if (this._socket) this._socket.close(); update(INITIAL_STATE); this.assistManager.clear(); } diff --git a/frontend/app/player/MessageDistributor/messages/MFileReader.ts b/frontend/app/player/MessageDistributor/messages/MFileReader.ts index 0204259e5..a4df3e2f8 100644 --- a/frontend/app/player/MessageDistributor/messages/MFileReader.ts +++ b/frontend/app/player/MessageDistributor/messages/MFileReader.ts @@ -7,62 +7,65 @@ import RawMessageReader from './RawMessageReader'; // needSkipMessage() and next() methods here use buf and p protected properties, // which should be probably somehow incapsulated export default class MFileReader extends RawMessageReader { - private pLastMessageID: number = 0; - private currentTime: number = 0; - public error: boolean = false; + private pLastMessageID: number = 0 + private currentTime: number = 0 + public error: boolean = false constructor(data: Uint8Array, private readonly startTime: number) { - super(data); + super(data) } private needSkipMessage(): boolean { - if (this.p === 0) return false; + if (this.p === 0) return false for (let i = 7; i >= 0; i--) { if (this.buf[ this.p + i ] !== this.buf[ this.pLastMessageID + i ]) { - return this.buf[ this.p + i ] - this.buf[ this.pLastMessageID + i ] < 0; + return this.buf[ this.p + i ] - this.buf[ this.pLastMessageID + i ] < 0 } } - return true; + return true } private readRawMessage(): RawMessage | null { - this.skip(8); + this.skip(8) try { - return super.readMessage(); + const msg = super.readMessage() + if (!msg) { + this.skip(-8) + } + return msg } catch (e) { - this.error = true; - logger.error("Read message error:", e); - return null; + this.error = true + logger.error("Read message error:", e) + return null } } - hasNext():boolean { - return !this.error && this.hasNextByte(); - } - next(): [ Message, number] | null { - if (!this.hasNext()) { - return null; + if (this.error || !this.hasNextByte()) { + return null } while (this.needSkipMessage()) { - this.readRawMessage(); + if (!this.readRawMessage()) { + return null + } } - this.pLastMessageID = this.p; - const rMsg = this.readRawMessage(); + this.pLastMessageID = this.p + + const rMsg = this.readRawMessage() if (!rMsg) { - return null; + return null } if (rMsg.tp === "timestamp") { - this.currentTime = rMsg.timestamp - this.startTime; - } else { - const msg = Object.assign(rMsg, { - time: this.currentTime, - _index: this.pLastMessageID, - }) - return [msg, this.pLastMessageID]; - } - return null; + this.currentTime = rMsg.timestamp - this.startTime + return this.next() + } + + const msg = Object.assign(rMsg, { + time: this.currentTime, + _index: this.pLastMessageID, + }) + return [msg, this.pLastMessageID] } } \ No newline at end of file diff --git a/frontend/app/player/MessageDistributor/messages/urlResolve.ts b/frontend/app/player/MessageDistributor/messages/urlResolve.ts index b80ff4f9a..44298ec08 100644 --- a/frontend/app/player/MessageDistributor/messages/urlResolve.ts +++ b/frontend/app/player/MessageDistributor/messages/urlResolve.ts @@ -6,7 +6,6 @@ export function resolveURL(baseURL: string, relURL: string): string { } -var match = /bar/.exec("foobar"); const re1 = /url\(("[^"]*"|'[^']*'|[^)]*)\)/g const re2 = /@import "(.*?)"/g function cssUrlsIndex(css: string): Array<[number, number]> { diff --git a/frontend/app/player/MessageDistributor/network/loadFiles.ts b/frontend/app/player/MessageDistributor/network/loadFiles.ts new file mode 100644 index 000000000..5deecf472 --- /dev/null +++ b/frontend/app/player/MessageDistributor/network/loadFiles.ts @@ -0,0 +1,49 @@ +const NO_NTH_FILE = "nnf" + +export default function load( + urls: string[], + onData: (Uint8Array) => void, +): Promise { + const firstFileURL = urls.shift() + if (!firstFileURL) { + return Promise.reject("No urls provided") + } + return window.fetch(firstFileURL) + .then(r => { + if (r.status >= 400) { + throw new Error(`no start file. status code ${ r.status }`) + } + return r.arrayBuffer() + }) + .then(b => new Uint8Array(b)) + .then(onData) + .then(() => + urls.reduce((p, url) => + p.then(() => + window.fetch(url) + .then(r => { + return new Promise((res, rej) => { + if (r.status == 404) { + rej(NO_NTH_FILE) + return + } + if (r.status >= 400) { + rej(`Bad endfile status code ${r.status}`) + return + } + res(r.arrayBuffer()) + }) + }) + .then(b => new Uint8Array(b)) + .then(onData) + ), + Promise.resolve(), + ) + ) + .catch(e => { + if (e === NO_NTH_FILE) { + return + } + throw e + }) +} From e4d45e88f92f5999ede567e34903af2c5929b508 Mon Sep 17 00:00:00 2001 From: Alex Kaminskii Date: Sat, 7 May 2022 22:59:23 +0200 Subject: [PATCH 89/91] chore(backend): name entrypoint container --- backend/cmd/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backend/cmd/Dockerfile b/backend/cmd/Dockerfile index e2f611afa..f36bfc99e 100644 --- a/backend/cmd/Dockerfile +++ b/backend/cmd/Dockerfile @@ -18,7 +18,7 @@ COPY cmd cmd ARG SERVICE_NAME RUN CGO_ENABLED=1 GOOS=linux GOARCH=amd64 go build -o service -tags musl openreplay/backend/cmd/$SERVICE_NAME -FROM alpine +FROM alpine AS entrypoint RUN apk add --no-cache ca-certificates ENV TZ=UTC \ From 71d50e5a44f7c43c67c1d972e1aab370cdc95db0 Mon Sep 17 00:00:00 2001 From: Alex Kaminskii Date: Sat, 7 May 2022 23:19:49 +0200 Subject: [PATCH 90/91] refactor(backend-messages):predefined TypeID() on message type --- backend/pkg/messages/filters.go | 4 +- .../pkg/messages/legacy-message-transform.go | 3 - backend/pkg/messages/message.go | 16 + backend/pkg/messages/messages.go | 544 ++++++++++++++---- backend/pkg/messages/read-message.go | 176 +++--- backend/services/sink/main.go | 7 +- 6 files changed, 547 insertions(+), 203 deletions(-) create mode 100644 backend/pkg/messages/message.go diff --git a/backend/pkg/messages/filters.go b/backend/pkg/messages/filters.go index 44b2c7959..a74d49eec 100644 --- a/backend/pkg/messages/filters.go +++ b/backend/pkg/messages/filters.go @@ -1,10 +1,10 @@ // Auto-generated, do not edit package messages -func IsReplayerType(id uint64) bool { +func IsReplayerType(id int) bool { return 0 == id || 2 == id || 4 == id || 5 == id || 6 == id || 7 == id || 8 == id || 9 == id || 10 == id || 11 == id || 12 == id || 13 == id || 14 == id || 15 == id || 16 == id || 18 == id || 19 == id || 20 == id || 22 == id || 37 == id || 38 == id || 39 == id || 40 == id || 41 == id || 44 == id || 45 == id || 46 == id || 47 == id || 48 == id || 49 == id || 54 == id || 55 == id || 59 == id || 69 == id || 70 == id || 90 == id || 93 == id || 96 == id || 100 == id || 102 == id || 103 == id || 105 == id } -func IsIOSType(id uint64) bool { +func IsIOSType(id int) bool { return 107 == id || 90 == id || 91 == id || 92 == id || 93 == id || 94 == id || 95 == id || 96 == id || 97 == id || 98 == id || 99 == id || 100 == id || 101 == id || 102 == id || 103 == id || 104 == id || 105 == id || 110 == id || 111 == id } diff --git a/backend/pkg/messages/legacy-message-transform.go b/backend/pkg/messages/legacy-message-transform.go index 6774d95b1..3a42cdab0 100644 --- a/backend/pkg/messages/legacy-message-transform.go +++ b/backend/pkg/messages/legacy-message-transform.go @@ -3,10 +3,7 @@ package messages func transformDeprecated(msg Message) Message { switch m := msg.(type) { case *MouseClickDepricated: - meta := m.Meta() - meta.TypeID = 33 return &MouseClick{ - meta: meta, ID: m.ID, HesitationTime: m.HesitationTime, Label: m.Label, diff --git a/backend/pkg/messages/message.go b/backend/pkg/messages/message.go new file mode 100644 index 000000000..d701d474f --- /dev/null +++ b/backend/pkg/messages/message.go @@ -0,0 +1,16 @@ +package messages + +type message struct { + Timestamp int64 + Index uint64 +} + +func (m *message) Meta() *message { + return m +} + +type Message interface { + Encode() []byte + TypeID() int + Meta() *message +} diff --git a/backend/pkg/messages/messages.go b/backend/pkg/messages/messages.go index e9aec5788..82a0f4f97 100644 --- a/backend/pkg/messages/messages.go +++ b/backend/pkg/messages/messages.go @@ -1,24 +1,8 @@ // Auto-generated, do not edit package messages -type Message interface { - Encode() []byte - Meta() *meta -} - -type meta struct { - Timestamp int64 - Index uint64 - TypeID uint64 -} - -// Might also implement Encode() here (?) -func (m *meta) Meta() *meta { - return m -} - type BatchMeta struct { - *meta + message PageNo uint64 FirstIndex uint64 Timestamp int64 @@ -34,8 +18,12 @@ func (msg *BatchMeta) Encode() []byte { return buf[:p] } +func (msg *BatchMeta) TypeID() int { + return 80 +} + type Timestamp struct { - *meta + message Timestamp uint64 } @@ -47,8 +35,12 @@ func (msg *Timestamp) Encode() []byte { return buf[:p] } +func (msg *Timestamp) TypeID() int { + return 0 +} + type SessionStart struct { - *meta + message Timestamp uint64 ProjectID uint64 TrackerVersion string @@ -90,8 +82,12 @@ func (msg *SessionStart) Encode() []byte { return buf[:p] } +func (msg *SessionStart) TypeID() int { + return 1 +} + type SessionDisconnect struct { - *meta + message Timestamp uint64 } @@ -103,8 +99,12 @@ func (msg *SessionDisconnect) Encode() []byte { return buf[:p] } +func (msg *SessionDisconnect) TypeID() int { + return 2 +} + type SessionEnd struct { - *meta + message Timestamp uint64 } @@ -116,8 +116,12 @@ func (msg *SessionEnd) Encode() []byte { return buf[:p] } +func (msg *SessionEnd) TypeID() int { + return 3 +} + type SetPageLocation struct { - *meta + message URL string Referrer string NavigationStart uint64 @@ -133,8 +137,12 @@ func (msg *SetPageLocation) Encode() []byte { return buf[:p] } +func (msg *SetPageLocation) TypeID() int { + return 4 +} + type SetViewportSize struct { - *meta + message Width uint64 Height uint64 } @@ -148,8 +156,12 @@ func (msg *SetViewportSize) Encode() []byte { return buf[:p] } +func (msg *SetViewportSize) TypeID() int { + return 5 +} + type SetViewportScroll struct { - *meta + message X int64 Y int64 } @@ -163,8 +175,12 @@ func (msg *SetViewportScroll) Encode() []byte { return buf[:p] } +func (msg *SetViewportScroll) TypeID() int { + return 6 +} + type CreateDocument struct { - *meta + message } func (msg *CreateDocument) Encode() []byte { @@ -175,8 +191,12 @@ func (msg *CreateDocument) Encode() []byte { return buf[:p] } +func (msg *CreateDocument) TypeID() int { + return 7 +} + type CreateElementNode struct { - *meta + message ID uint64 ParentID uint64 index uint64 @@ -196,8 +216,12 @@ func (msg *CreateElementNode) Encode() []byte { return buf[:p] } +func (msg *CreateElementNode) TypeID() int { + return 8 +} + type CreateTextNode struct { - *meta + message ID uint64 ParentID uint64 Index uint64 @@ -213,8 +237,12 @@ func (msg *CreateTextNode) Encode() []byte { return buf[:p] } +func (msg *CreateTextNode) TypeID() int { + return 9 +} + type MoveNode struct { - *meta + message ID uint64 ParentID uint64 Index uint64 @@ -230,8 +258,12 @@ func (msg *MoveNode) Encode() []byte { return buf[:p] } +func (msg *MoveNode) TypeID() int { + return 10 +} + type RemoveNode struct { - *meta + message ID uint64 } @@ -243,8 +275,12 @@ func (msg *RemoveNode) Encode() []byte { return buf[:p] } +func (msg *RemoveNode) TypeID() int { + return 11 +} + type SetNodeAttribute struct { - *meta + message ID uint64 Name string Value string @@ -260,8 +296,12 @@ func (msg *SetNodeAttribute) Encode() []byte { return buf[:p] } +func (msg *SetNodeAttribute) TypeID() int { + return 12 +} + type RemoveNodeAttribute struct { - *meta + message ID uint64 Name string } @@ -275,8 +315,12 @@ func (msg *RemoveNodeAttribute) Encode() []byte { return buf[:p] } +func (msg *RemoveNodeAttribute) TypeID() int { + return 13 +} + type SetNodeData struct { - *meta + message ID uint64 Data string } @@ -290,8 +334,12 @@ func (msg *SetNodeData) Encode() []byte { return buf[:p] } +func (msg *SetNodeData) TypeID() int { + return 14 +} + type SetCSSData struct { - *meta + message ID uint64 Data string } @@ -305,8 +353,12 @@ func (msg *SetCSSData) Encode() []byte { return buf[:p] } +func (msg *SetCSSData) TypeID() int { + return 15 +} + type SetNodeScroll struct { - *meta + message ID uint64 X int64 Y int64 @@ -322,8 +374,12 @@ func (msg *SetNodeScroll) Encode() []byte { return buf[:p] } +func (msg *SetNodeScroll) TypeID() int { + return 16 +} + type SetInputTarget struct { - *meta + message ID uint64 Label string } @@ -337,8 +393,12 @@ func (msg *SetInputTarget) Encode() []byte { return buf[:p] } +func (msg *SetInputTarget) TypeID() int { + return 17 +} + type SetInputValue struct { - *meta + message ID uint64 Value string Mask int64 @@ -354,8 +414,12 @@ func (msg *SetInputValue) Encode() []byte { return buf[:p] } +func (msg *SetInputValue) TypeID() int { + return 18 +} + type SetInputChecked struct { - *meta + message ID uint64 Checked bool } @@ -369,8 +433,12 @@ func (msg *SetInputChecked) Encode() []byte { return buf[:p] } +func (msg *SetInputChecked) TypeID() int { + return 19 +} + type MouseMove struct { - *meta + message X uint64 Y uint64 } @@ -384,8 +452,12 @@ func (msg *MouseMove) Encode() []byte { return buf[:p] } +func (msg *MouseMove) TypeID() int { + return 20 +} + type MouseClickDepricated struct { - *meta + message ID uint64 HesitationTime uint64 Label string @@ -401,8 +473,12 @@ func (msg *MouseClickDepricated) Encode() []byte { return buf[:p] } +func (msg *MouseClickDepricated) TypeID() int { + return 21 +} + type ConsoleLog struct { - *meta + message Level string Value string } @@ -416,8 +492,12 @@ func (msg *ConsoleLog) Encode() []byte { return buf[:p] } +func (msg *ConsoleLog) TypeID() int { + return 22 +} + type PageLoadTiming struct { - *meta + message RequestStart uint64 ResponseStart uint64 ResponseEnd uint64 @@ -445,8 +525,12 @@ func (msg *PageLoadTiming) Encode() []byte { return buf[:p] } +func (msg *PageLoadTiming) TypeID() int { + return 23 +} + type PageRenderTiming struct { - *meta + message SpeedIndex uint64 VisuallyComplete uint64 TimeToInteractive uint64 @@ -462,8 +546,12 @@ func (msg *PageRenderTiming) Encode() []byte { return buf[:p] } +func (msg *PageRenderTiming) TypeID() int { + return 24 +} + type JSException struct { - *meta + message Name string Message string Payload string @@ -479,8 +567,12 @@ func (msg *JSException) Encode() []byte { return buf[:p] } +func (msg *JSException) TypeID() int { + return 25 +} + type RawErrorEvent struct { - *meta + message Timestamp uint64 Source string Name string @@ -500,8 +592,12 @@ func (msg *RawErrorEvent) Encode() []byte { return buf[:p] } +func (msg *RawErrorEvent) TypeID() int { + return 26 +} + type RawCustomEvent struct { - *meta + message Name string Payload string } @@ -515,8 +611,12 @@ func (msg *RawCustomEvent) Encode() []byte { return buf[:p] } +func (msg *RawCustomEvent) TypeID() int { + return 27 +} + type UserID struct { - *meta + message ID string } @@ -528,8 +628,12 @@ func (msg *UserID) Encode() []byte { return buf[:p] } +func (msg *UserID) TypeID() int { + return 28 +} + type UserAnonymousID struct { - *meta + message ID string } @@ -541,8 +645,12 @@ func (msg *UserAnonymousID) Encode() []byte { return buf[:p] } +func (msg *UserAnonymousID) TypeID() int { + return 29 +} + type Metadata struct { - *meta + message Key string Value string } @@ -556,8 +664,12 @@ func (msg *Metadata) Encode() []byte { return buf[:p] } +func (msg *Metadata) TypeID() int { + return 30 +} + type PageEvent struct { - *meta + message MessageID uint64 Timestamp uint64 URL string @@ -601,8 +713,12 @@ func (msg *PageEvent) Encode() []byte { return buf[:p] } +func (msg *PageEvent) TypeID() int { + return 31 +} + type InputEvent struct { - *meta + message MessageID uint64 Timestamp uint64 Value string @@ -622,8 +738,12 @@ func (msg *InputEvent) Encode() []byte { return buf[:p] } +func (msg *InputEvent) TypeID() int { + return 32 +} + type ClickEvent struct { - *meta + message MessageID uint64 Timestamp uint64 HesitationTime uint64 @@ -643,8 +763,12 @@ func (msg *ClickEvent) Encode() []byte { return buf[:p] } +func (msg *ClickEvent) TypeID() int { + return 33 +} + type ErrorEvent struct { - *meta + message MessageID uint64 Timestamp uint64 Source string @@ -666,8 +790,12 @@ func (msg *ErrorEvent) Encode() []byte { return buf[:p] } +func (msg *ErrorEvent) TypeID() int { + return 34 +} + type ResourceEvent struct { - *meta + message MessageID uint64 Timestamp uint64 Duration uint64 @@ -701,8 +829,12 @@ func (msg *ResourceEvent) Encode() []byte { return buf[:p] } +func (msg *ResourceEvent) TypeID() int { + return 35 +} + type CustomEvent struct { - *meta + message MessageID uint64 Timestamp uint64 Name string @@ -720,8 +852,12 @@ func (msg *CustomEvent) Encode() []byte { return buf[:p] } +func (msg *CustomEvent) TypeID() int { + return 36 +} + type CSSInsertRule struct { - *meta + message ID uint64 Rule string Index uint64 @@ -737,8 +873,12 @@ func (msg *CSSInsertRule) Encode() []byte { return buf[:p] } +func (msg *CSSInsertRule) TypeID() int { + return 37 +} + type CSSDeleteRule struct { - *meta + message ID uint64 Index uint64 } @@ -752,8 +892,12 @@ func (msg *CSSDeleteRule) Encode() []byte { return buf[:p] } +func (msg *CSSDeleteRule) TypeID() int { + return 38 +} + type Fetch struct { - *meta + message Method string URL string Request string @@ -777,8 +921,12 @@ func (msg *Fetch) Encode() []byte { return buf[:p] } +func (msg *Fetch) TypeID() int { + return 39 +} + type Profiler struct { - *meta + message Name string Duration uint64 Args string @@ -796,8 +944,12 @@ func (msg *Profiler) Encode() []byte { return buf[:p] } +func (msg *Profiler) TypeID() int { + return 40 +} + type OTable struct { - *meta + message Key string Value string } @@ -811,8 +963,12 @@ func (msg *OTable) Encode() []byte { return buf[:p] } +func (msg *OTable) TypeID() int { + return 41 +} + type StateAction struct { - *meta + message Type string } @@ -824,8 +980,12 @@ func (msg *StateAction) Encode() []byte { return buf[:p] } +func (msg *StateAction) TypeID() int { + return 42 +} + type StateActionEvent struct { - *meta + message MessageID uint64 Timestamp uint64 Type string @@ -841,8 +1001,12 @@ func (msg *StateActionEvent) Encode() []byte { return buf[:p] } +func (msg *StateActionEvent) TypeID() int { + return 43 +} + type Redux struct { - *meta + message Action string State string Duration uint64 @@ -858,8 +1022,12 @@ func (msg *Redux) Encode() []byte { return buf[:p] } +func (msg *Redux) TypeID() int { + return 44 +} + type Vuex struct { - *meta + message Mutation string State string } @@ -873,8 +1041,12 @@ func (msg *Vuex) Encode() []byte { return buf[:p] } +func (msg *Vuex) TypeID() int { + return 45 +} + type MobX struct { - *meta + message Type string Payload string } @@ -888,8 +1060,12 @@ func (msg *MobX) Encode() []byte { return buf[:p] } +func (msg *MobX) TypeID() int { + return 46 +} + type NgRx struct { - *meta + message Action string State string Duration uint64 @@ -905,8 +1081,12 @@ func (msg *NgRx) Encode() []byte { return buf[:p] } +func (msg *NgRx) TypeID() int { + return 47 +} + type GraphQL struct { - *meta + message OperationKind string OperationName string Variables string @@ -924,8 +1104,12 @@ func (msg *GraphQL) Encode() []byte { return buf[:p] } +func (msg *GraphQL) TypeID() int { + return 48 +} + type PerformanceTrack struct { - *meta + message Frames int64 Ticks int64 TotalJSHeapSize uint64 @@ -943,8 +1127,12 @@ func (msg *PerformanceTrack) Encode() []byte { return buf[:p] } +func (msg *PerformanceTrack) TypeID() int { + return 49 +} + type GraphQLEvent struct { - *meta + message MessageID uint64 Timestamp uint64 OperationKind string @@ -966,8 +1154,12 @@ func (msg *GraphQLEvent) Encode() []byte { return buf[:p] } +func (msg *GraphQLEvent) TypeID() int { + return 50 +} + type FetchEvent struct { - *meta + message MessageID uint64 Timestamp uint64 Method string @@ -993,8 +1185,12 @@ func (msg *FetchEvent) Encode() []byte { return buf[:p] } +func (msg *FetchEvent) TypeID() int { + return 51 +} + type DOMDrop struct { - *meta + message Timestamp uint64 } @@ -1006,8 +1202,12 @@ func (msg *DOMDrop) Encode() []byte { return buf[:p] } +func (msg *DOMDrop) TypeID() int { + return 52 +} + type ResourceTiming struct { - *meta + message Timestamp uint64 Duration uint64 TTFB uint64 @@ -1033,8 +1233,12 @@ func (msg *ResourceTiming) Encode() []byte { return buf[:p] } +func (msg *ResourceTiming) TypeID() int { + return 53 +} + type ConnectionInformation struct { - *meta + message Downlink uint64 Type string } @@ -1048,8 +1252,12 @@ func (msg *ConnectionInformation) Encode() []byte { return buf[:p] } +func (msg *ConnectionInformation) TypeID() int { + return 54 +} + type SetPageVisibility struct { - *meta + message hidden bool } @@ -1061,8 +1269,12 @@ func (msg *SetPageVisibility) Encode() []byte { return buf[:p] } +func (msg *SetPageVisibility) TypeID() int { + return 55 +} + type PerformanceTrackAggr struct { - *meta + message TimestampStart uint64 TimestampEnd uint64 MinFPS uint64 @@ -1100,8 +1312,12 @@ func (msg *PerformanceTrackAggr) Encode() []byte { return buf[:p] } +func (msg *PerformanceTrackAggr) TypeID() int { + return 56 +} + type LongTask struct { - *meta + message Timestamp uint64 Duration uint64 Context uint64 @@ -1125,8 +1341,12 @@ func (msg *LongTask) Encode() []byte { return buf[:p] } +func (msg *LongTask) TypeID() int { + return 59 +} + type SetNodeAttributeURLBased struct { - *meta + message ID uint64 Name string Value string @@ -1144,8 +1364,12 @@ func (msg *SetNodeAttributeURLBased) Encode() []byte { return buf[:p] } +func (msg *SetNodeAttributeURLBased) TypeID() int { + return 60 +} + type SetCSSDataURLBased struct { - *meta + message ID uint64 Data string BaseURL string @@ -1161,8 +1385,12 @@ func (msg *SetCSSDataURLBased) Encode() []byte { return buf[:p] } +func (msg *SetCSSDataURLBased) TypeID() int { + return 61 +} + type IssueEvent struct { - *meta + message MessageID uint64 Timestamp uint64 Type string @@ -1184,8 +1412,12 @@ func (msg *IssueEvent) Encode() []byte { return buf[:p] } +func (msg *IssueEvent) TypeID() int { + return 62 +} + type TechnicalInfo struct { - *meta + message Type string Value string } @@ -1199,8 +1431,12 @@ func (msg *TechnicalInfo) Encode() []byte { return buf[:p] } +func (msg *TechnicalInfo) TypeID() int { + return 63 +} + type CustomIssue struct { - *meta + message Name string Payload string } @@ -1214,8 +1450,12 @@ func (msg *CustomIssue) Encode() []byte { return buf[:p] } +func (msg *CustomIssue) TypeID() int { + return 64 +} + type PageClose struct { - *meta + message } func (msg *PageClose) Encode() []byte { @@ -1226,8 +1466,12 @@ func (msg *PageClose) Encode() []byte { return buf[:p] } +func (msg *PageClose) TypeID() int { + return 65 +} + type AssetCache struct { - *meta + message URL string } @@ -1239,8 +1483,12 @@ func (msg *AssetCache) Encode() []byte { return buf[:p] } +func (msg *AssetCache) TypeID() int { + return 66 +} + type CSSInsertRuleURLBased struct { - *meta + message ID uint64 Rule string Index uint64 @@ -1258,8 +1506,12 @@ func (msg *CSSInsertRuleURLBased) Encode() []byte { return buf[:p] } +func (msg *CSSInsertRuleURLBased) TypeID() int { + return 67 +} + type MouseClick struct { - *meta + message ID uint64 HesitationTime uint64 Label string @@ -1277,8 +1529,12 @@ func (msg *MouseClick) Encode() []byte { return buf[:p] } +func (msg *MouseClick) TypeID() int { + return 69 +} + type CreateIFrameDocument struct { - *meta + message FrameID uint64 ID uint64 } @@ -1292,8 +1548,12 @@ func (msg *CreateIFrameDocument) Encode() []byte { return buf[:p] } +func (msg *CreateIFrameDocument) TypeID() int { + return 70 +} + type IOSBatchMeta struct { - *meta + message Timestamp uint64 Length uint64 FirstIndex uint64 @@ -1309,8 +1569,12 @@ func (msg *IOSBatchMeta) Encode() []byte { return buf[:p] } +func (msg *IOSBatchMeta) TypeID() int { + return 107 +} + type IOSSessionStart struct { - *meta + message Timestamp uint64 ProjectID uint64 TrackerVersion string @@ -1340,8 +1604,12 @@ func (msg *IOSSessionStart) Encode() []byte { return buf[:p] } +func (msg *IOSSessionStart) TypeID() int { + return 90 +} + type IOSSessionEnd struct { - *meta + message Timestamp uint64 } @@ -1353,8 +1621,12 @@ func (msg *IOSSessionEnd) Encode() []byte { return buf[:p] } +func (msg *IOSSessionEnd) TypeID() int { + return 91 +} + type IOSMetadata struct { - *meta + message Timestamp uint64 Length uint64 Key string @@ -1372,8 +1644,12 @@ func (msg *IOSMetadata) Encode() []byte { return buf[:p] } +func (msg *IOSMetadata) TypeID() int { + return 92 +} + type IOSCustomEvent struct { - *meta + message Timestamp uint64 Length uint64 Name string @@ -1391,8 +1667,12 @@ func (msg *IOSCustomEvent) Encode() []byte { return buf[:p] } +func (msg *IOSCustomEvent) TypeID() int { + return 93 +} + type IOSUserID struct { - *meta + message Timestamp uint64 Length uint64 Value string @@ -1408,8 +1688,12 @@ func (msg *IOSUserID) Encode() []byte { return buf[:p] } +func (msg *IOSUserID) TypeID() int { + return 94 +} + type IOSUserAnonymousID struct { - *meta + message Timestamp uint64 Length uint64 Value string @@ -1425,8 +1709,12 @@ func (msg *IOSUserAnonymousID) Encode() []byte { return buf[:p] } +func (msg *IOSUserAnonymousID) TypeID() int { + return 95 +} + type IOSScreenChanges struct { - *meta + message Timestamp uint64 Length uint64 X uint64 @@ -1448,8 +1736,12 @@ func (msg *IOSScreenChanges) Encode() []byte { return buf[:p] } +func (msg *IOSScreenChanges) TypeID() int { + return 96 +} + type IOSCrash struct { - *meta + message Timestamp uint64 Length uint64 Name string @@ -1469,8 +1761,12 @@ func (msg *IOSCrash) Encode() []byte { return buf[:p] } +func (msg *IOSCrash) TypeID() int { + return 97 +} + type IOSScreenEnter struct { - *meta + message Timestamp uint64 Length uint64 Title string @@ -1488,8 +1784,12 @@ func (msg *IOSScreenEnter) Encode() []byte { return buf[:p] } +func (msg *IOSScreenEnter) TypeID() int { + return 98 +} + type IOSScreenLeave struct { - *meta + message Timestamp uint64 Length uint64 Title string @@ -1507,8 +1807,12 @@ func (msg *IOSScreenLeave) Encode() []byte { return buf[:p] } +func (msg *IOSScreenLeave) TypeID() int { + return 99 +} + type IOSClickEvent struct { - *meta + message Timestamp uint64 Length uint64 Label string @@ -1528,8 +1832,12 @@ func (msg *IOSClickEvent) Encode() []byte { return buf[:p] } +func (msg *IOSClickEvent) TypeID() int { + return 100 +} + type IOSInputEvent struct { - *meta + message Timestamp uint64 Length uint64 Value string @@ -1549,8 +1857,12 @@ func (msg *IOSInputEvent) Encode() []byte { return buf[:p] } +func (msg *IOSInputEvent) TypeID() int { + return 101 +} + type IOSPerformanceEvent struct { - *meta + message Timestamp uint64 Length uint64 Name string @@ -1568,8 +1880,12 @@ func (msg *IOSPerformanceEvent) Encode() []byte { return buf[:p] } +func (msg *IOSPerformanceEvent) TypeID() int { + return 102 +} + type IOSLog struct { - *meta + message Timestamp uint64 Length uint64 Severity string @@ -1587,8 +1903,12 @@ func (msg *IOSLog) Encode() []byte { return buf[:p] } +func (msg *IOSLog) TypeID() int { + return 103 +} + type IOSInternalError struct { - *meta + message Timestamp uint64 Length uint64 Content string @@ -1604,8 +1924,12 @@ func (msg *IOSInternalError) Encode() []byte { return buf[:p] } +func (msg *IOSInternalError) TypeID() int { + return 104 +} + type IOSNetworkCall struct { - *meta + message Timestamp uint64 Length uint64 Duration uint64 @@ -1633,8 +1957,12 @@ func (msg *IOSNetworkCall) Encode() []byte { return buf[:p] } +func (msg *IOSNetworkCall) TypeID() int { + return 105 +} + type IOSPerformanceAggregated struct { - *meta + message TimestampStart uint64 TimestampEnd uint64 MinFPS uint64 @@ -1672,8 +2000,12 @@ func (msg *IOSPerformanceAggregated) Encode() []byte { return buf[:p] } +func (msg *IOSPerformanceAggregated) TypeID() int { + return 110 +} + type IOSIssueEvent struct { - *meta + message Timestamp uint64 Type string ContextString string @@ -1692,3 +2024,7 @@ func (msg *IOSIssueEvent) Encode() []byte { p = WriteString(msg.Payload, buf, p) return buf[:p] } + +func (msg *IOSIssueEvent) TypeID() int { + return 111 +} diff --git a/backend/pkg/messages/read-message.go b/backend/pkg/messages/read-message.go index 60f9c17a8..59c8e739c 100644 --- a/backend/pkg/messages/read-message.go +++ b/backend/pkg/messages/read-message.go @@ -14,7 +14,7 @@ func ReadMessage(reader io.Reader) (Message, error) { switch t { case 80: - msg := &BatchMeta{meta: &meta{TypeID: 80}} + msg := &BatchMeta{} if msg.PageNo, err = ReadUint(reader); err != nil { return nil, err } @@ -27,14 +27,14 @@ func ReadMessage(reader io.Reader) (Message, error) { return msg, nil case 0: - msg := &Timestamp{meta: &meta{TypeID: 0}} + msg := &Timestamp{} if msg.Timestamp, err = ReadUint(reader); err != nil { return nil, err } return msg, nil case 1: - msg := &SessionStart{meta: &meta{TypeID: 1}} + msg := &SessionStart{} if msg.Timestamp, err = ReadUint(reader); err != nil { return nil, err } @@ -86,21 +86,21 @@ func ReadMessage(reader io.Reader) (Message, error) { return msg, nil case 2: - msg := &SessionDisconnect{meta: &meta{TypeID: 2}} + msg := &SessionDisconnect{} if msg.Timestamp, err = ReadUint(reader); err != nil { return nil, err } return msg, nil case 3: - msg := &SessionEnd{meta: &meta{TypeID: 3}} + msg := &SessionEnd{} if msg.Timestamp, err = ReadUint(reader); err != nil { return nil, err } return msg, nil case 4: - msg := &SetPageLocation{meta: &meta{TypeID: 4}} + msg := &SetPageLocation{} if msg.URL, err = ReadString(reader); err != nil { return nil, err } @@ -113,7 +113,7 @@ func ReadMessage(reader io.Reader) (Message, error) { return msg, nil case 5: - msg := &SetViewportSize{meta: &meta{TypeID: 5}} + msg := &SetViewportSize{} if msg.Width, err = ReadUint(reader); err != nil { return nil, err } @@ -123,7 +123,7 @@ func ReadMessage(reader io.Reader) (Message, error) { return msg, nil case 6: - msg := &SetViewportScroll{meta: &meta{TypeID: 6}} + msg := &SetViewportScroll{} if msg.X, err = ReadInt(reader); err != nil { return nil, err } @@ -133,12 +133,12 @@ func ReadMessage(reader io.Reader) (Message, error) { return msg, nil case 7: - msg := &CreateDocument{meta: &meta{TypeID: 7}} + msg := &CreateDocument{} return msg, nil case 8: - msg := &CreateElementNode{meta: &meta{TypeID: 8}} + msg := &CreateElementNode{} if msg.ID, err = ReadUint(reader); err != nil { return nil, err } @@ -157,7 +157,7 @@ func ReadMessage(reader io.Reader) (Message, error) { return msg, nil case 9: - msg := &CreateTextNode{meta: &meta{TypeID: 9}} + msg := &CreateTextNode{} if msg.ID, err = ReadUint(reader); err != nil { return nil, err } @@ -170,7 +170,7 @@ func ReadMessage(reader io.Reader) (Message, error) { return msg, nil case 10: - msg := &MoveNode{meta: &meta{TypeID: 10}} + msg := &MoveNode{} if msg.ID, err = ReadUint(reader); err != nil { return nil, err } @@ -183,14 +183,14 @@ func ReadMessage(reader io.Reader) (Message, error) { return msg, nil case 11: - msg := &RemoveNode{meta: &meta{TypeID: 11}} + msg := &RemoveNode{} if msg.ID, err = ReadUint(reader); err != nil { return nil, err } return msg, nil case 12: - msg := &SetNodeAttribute{meta: &meta{TypeID: 12}} + msg := &SetNodeAttribute{} if msg.ID, err = ReadUint(reader); err != nil { return nil, err } @@ -203,7 +203,7 @@ func ReadMessage(reader io.Reader) (Message, error) { return msg, nil case 13: - msg := &RemoveNodeAttribute{meta: &meta{TypeID: 13}} + msg := &RemoveNodeAttribute{} if msg.ID, err = ReadUint(reader); err != nil { return nil, err } @@ -213,7 +213,7 @@ func ReadMessage(reader io.Reader) (Message, error) { return msg, nil case 14: - msg := &SetNodeData{meta: &meta{TypeID: 14}} + msg := &SetNodeData{} if msg.ID, err = ReadUint(reader); err != nil { return nil, err } @@ -223,7 +223,7 @@ func ReadMessage(reader io.Reader) (Message, error) { return msg, nil case 15: - msg := &SetCSSData{meta: &meta{TypeID: 15}} + msg := &SetCSSData{} if msg.ID, err = ReadUint(reader); err != nil { return nil, err } @@ -233,7 +233,7 @@ func ReadMessage(reader io.Reader) (Message, error) { return msg, nil case 16: - msg := &SetNodeScroll{meta: &meta{TypeID: 16}} + msg := &SetNodeScroll{} if msg.ID, err = ReadUint(reader); err != nil { return nil, err } @@ -246,7 +246,7 @@ func ReadMessage(reader io.Reader) (Message, error) { return msg, nil case 17: - msg := &SetInputTarget{meta: &meta{TypeID: 17}} + msg := &SetInputTarget{} if msg.ID, err = ReadUint(reader); err != nil { return nil, err } @@ -256,7 +256,7 @@ func ReadMessage(reader io.Reader) (Message, error) { return msg, nil case 18: - msg := &SetInputValue{meta: &meta{TypeID: 18}} + msg := &SetInputValue{} if msg.ID, err = ReadUint(reader); err != nil { return nil, err } @@ -269,7 +269,7 @@ func ReadMessage(reader io.Reader) (Message, error) { return msg, nil case 19: - msg := &SetInputChecked{meta: &meta{TypeID: 19}} + msg := &SetInputChecked{} if msg.ID, err = ReadUint(reader); err != nil { return nil, err } @@ -279,7 +279,7 @@ func ReadMessage(reader io.Reader) (Message, error) { return msg, nil case 20: - msg := &MouseMove{meta: &meta{TypeID: 20}} + msg := &MouseMove{} if msg.X, err = ReadUint(reader); err != nil { return nil, err } @@ -289,7 +289,7 @@ func ReadMessage(reader io.Reader) (Message, error) { return msg, nil case 21: - msg := &MouseClickDepricated{meta: &meta{TypeID: 21}} + msg := &MouseClickDepricated{} if msg.ID, err = ReadUint(reader); err != nil { return nil, err } @@ -302,7 +302,7 @@ func ReadMessage(reader io.Reader) (Message, error) { return msg, nil case 22: - msg := &ConsoleLog{meta: &meta{TypeID: 22}} + msg := &ConsoleLog{} if msg.Level, err = ReadString(reader); err != nil { return nil, err } @@ -312,7 +312,7 @@ func ReadMessage(reader io.Reader) (Message, error) { return msg, nil case 23: - msg := &PageLoadTiming{meta: &meta{TypeID: 23}} + msg := &PageLoadTiming{} if msg.RequestStart, err = ReadUint(reader); err != nil { return nil, err } @@ -343,7 +343,7 @@ func ReadMessage(reader io.Reader) (Message, error) { return msg, nil case 24: - msg := &PageRenderTiming{meta: &meta{TypeID: 24}} + msg := &PageRenderTiming{} if msg.SpeedIndex, err = ReadUint(reader); err != nil { return nil, err } @@ -356,7 +356,7 @@ func ReadMessage(reader io.Reader) (Message, error) { return msg, nil case 25: - msg := &JSException{meta: &meta{TypeID: 25}} + msg := &JSException{} if msg.Name, err = ReadString(reader); err != nil { return nil, err } @@ -369,7 +369,7 @@ func ReadMessage(reader io.Reader) (Message, error) { return msg, nil case 26: - msg := &RawErrorEvent{meta: &meta{TypeID: 26}} + msg := &RawErrorEvent{} if msg.Timestamp, err = ReadUint(reader); err != nil { return nil, err } @@ -388,7 +388,7 @@ func ReadMessage(reader io.Reader) (Message, error) { return msg, nil case 27: - msg := &RawCustomEvent{meta: &meta{TypeID: 27}} + msg := &RawCustomEvent{} if msg.Name, err = ReadString(reader); err != nil { return nil, err } @@ -398,21 +398,21 @@ func ReadMessage(reader io.Reader) (Message, error) { return msg, nil case 28: - msg := &UserID{meta: &meta{TypeID: 28}} + msg := &UserID{} if msg.ID, err = ReadString(reader); err != nil { return nil, err } return msg, nil case 29: - msg := &UserAnonymousID{meta: &meta{TypeID: 29}} + msg := &UserAnonymousID{} if msg.ID, err = ReadString(reader); err != nil { return nil, err } return msg, nil case 30: - msg := &Metadata{meta: &meta{TypeID: 30}} + msg := &Metadata{} if msg.Key, err = ReadString(reader); err != nil { return nil, err } @@ -422,7 +422,7 @@ func ReadMessage(reader io.Reader) (Message, error) { return msg, nil case 31: - msg := &PageEvent{meta: &meta{TypeID: 31}} + msg := &PageEvent{} if msg.MessageID, err = ReadUint(reader); err != nil { return nil, err } @@ -477,7 +477,7 @@ func ReadMessage(reader io.Reader) (Message, error) { return msg, nil case 32: - msg := &InputEvent{meta: &meta{TypeID: 32}} + msg := &InputEvent{} if msg.MessageID, err = ReadUint(reader); err != nil { return nil, err } @@ -496,7 +496,7 @@ func ReadMessage(reader io.Reader) (Message, error) { return msg, nil case 33: - msg := &ClickEvent{meta: &meta{TypeID: 33}} + msg := &ClickEvent{} if msg.MessageID, err = ReadUint(reader); err != nil { return nil, err } @@ -515,7 +515,7 @@ func ReadMessage(reader io.Reader) (Message, error) { return msg, nil case 34: - msg := &ErrorEvent{meta: &meta{TypeID: 34}} + msg := &ErrorEvent{} if msg.MessageID, err = ReadUint(reader); err != nil { return nil, err } @@ -537,7 +537,7 @@ func ReadMessage(reader io.Reader) (Message, error) { return msg, nil case 35: - msg := &ResourceEvent{meta: &meta{TypeID: 35}} + msg := &ResourceEvent{} if msg.MessageID, err = ReadUint(reader); err != nil { return nil, err } @@ -577,7 +577,7 @@ func ReadMessage(reader io.Reader) (Message, error) { return msg, nil case 36: - msg := &CustomEvent{meta: &meta{TypeID: 36}} + msg := &CustomEvent{} if msg.MessageID, err = ReadUint(reader); err != nil { return nil, err } @@ -593,7 +593,7 @@ func ReadMessage(reader io.Reader) (Message, error) { return msg, nil case 37: - msg := &CSSInsertRule{meta: &meta{TypeID: 37}} + msg := &CSSInsertRule{} if msg.ID, err = ReadUint(reader); err != nil { return nil, err } @@ -606,7 +606,7 @@ func ReadMessage(reader io.Reader) (Message, error) { return msg, nil case 38: - msg := &CSSDeleteRule{meta: &meta{TypeID: 38}} + msg := &CSSDeleteRule{} if msg.ID, err = ReadUint(reader); err != nil { return nil, err } @@ -616,7 +616,7 @@ func ReadMessage(reader io.Reader) (Message, error) { return msg, nil case 39: - msg := &Fetch{meta: &meta{TypeID: 39}} + msg := &Fetch{} if msg.Method, err = ReadString(reader); err != nil { return nil, err } @@ -641,7 +641,7 @@ func ReadMessage(reader io.Reader) (Message, error) { return msg, nil case 40: - msg := &Profiler{meta: &meta{TypeID: 40}} + msg := &Profiler{} if msg.Name, err = ReadString(reader); err != nil { return nil, err } @@ -657,7 +657,7 @@ func ReadMessage(reader io.Reader) (Message, error) { return msg, nil case 41: - msg := &OTable{meta: &meta{TypeID: 41}} + msg := &OTable{} if msg.Key, err = ReadString(reader); err != nil { return nil, err } @@ -667,14 +667,14 @@ func ReadMessage(reader io.Reader) (Message, error) { return msg, nil case 42: - msg := &StateAction{meta: &meta{TypeID: 42}} + msg := &StateAction{} if msg.Type, err = ReadString(reader); err != nil { return nil, err } return msg, nil case 43: - msg := &StateActionEvent{meta: &meta{TypeID: 43}} + msg := &StateActionEvent{} if msg.MessageID, err = ReadUint(reader); err != nil { return nil, err } @@ -687,7 +687,7 @@ func ReadMessage(reader io.Reader) (Message, error) { return msg, nil case 44: - msg := &Redux{meta: &meta{TypeID: 44}} + msg := &Redux{} if msg.Action, err = ReadString(reader); err != nil { return nil, err } @@ -700,7 +700,7 @@ func ReadMessage(reader io.Reader) (Message, error) { return msg, nil case 45: - msg := &Vuex{meta: &meta{TypeID: 45}} + msg := &Vuex{} if msg.Mutation, err = ReadString(reader); err != nil { return nil, err } @@ -710,7 +710,7 @@ func ReadMessage(reader io.Reader) (Message, error) { return msg, nil case 46: - msg := &MobX{meta: &meta{TypeID: 46}} + msg := &MobX{} if msg.Type, err = ReadString(reader); err != nil { return nil, err } @@ -720,7 +720,7 @@ func ReadMessage(reader io.Reader) (Message, error) { return msg, nil case 47: - msg := &NgRx{meta: &meta{TypeID: 47}} + msg := &NgRx{} if msg.Action, err = ReadString(reader); err != nil { return nil, err } @@ -733,7 +733,7 @@ func ReadMessage(reader io.Reader) (Message, error) { return msg, nil case 48: - msg := &GraphQL{meta: &meta{TypeID: 48}} + msg := &GraphQL{} if msg.OperationKind, err = ReadString(reader); err != nil { return nil, err } @@ -749,7 +749,7 @@ func ReadMessage(reader io.Reader) (Message, error) { return msg, nil case 49: - msg := &PerformanceTrack{meta: &meta{TypeID: 49}} + msg := &PerformanceTrack{} if msg.Frames, err = ReadInt(reader); err != nil { return nil, err } @@ -765,7 +765,7 @@ func ReadMessage(reader io.Reader) (Message, error) { return msg, nil case 50: - msg := &GraphQLEvent{meta: &meta{TypeID: 50}} + msg := &GraphQLEvent{} if msg.MessageID, err = ReadUint(reader); err != nil { return nil, err } @@ -787,7 +787,7 @@ func ReadMessage(reader io.Reader) (Message, error) { return msg, nil case 51: - msg := &FetchEvent{meta: &meta{TypeID: 51}} + msg := &FetchEvent{} if msg.MessageID, err = ReadUint(reader); err != nil { return nil, err } @@ -815,14 +815,14 @@ func ReadMessage(reader io.Reader) (Message, error) { return msg, nil case 52: - msg := &DOMDrop{meta: &meta{TypeID: 52}} + msg := &DOMDrop{} if msg.Timestamp, err = ReadUint(reader); err != nil { return nil, err } return msg, nil case 53: - msg := &ResourceTiming{meta: &meta{TypeID: 53}} + msg := &ResourceTiming{} if msg.Timestamp, err = ReadUint(reader); err != nil { return nil, err } @@ -850,7 +850,7 @@ func ReadMessage(reader io.Reader) (Message, error) { return msg, nil case 54: - msg := &ConnectionInformation{meta: &meta{TypeID: 54}} + msg := &ConnectionInformation{} if msg.Downlink, err = ReadUint(reader); err != nil { return nil, err } @@ -860,14 +860,14 @@ func ReadMessage(reader io.Reader) (Message, error) { return msg, nil case 55: - msg := &SetPageVisibility{meta: &meta{TypeID: 55}} + msg := &SetPageVisibility{} if msg.hidden, err = ReadBoolean(reader); err != nil { return nil, err } return msg, nil case 56: - msg := &PerformanceTrackAggr{meta: &meta{TypeID: 56}} + msg := &PerformanceTrackAggr{} if msg.TimestampStart, err = ReadUint(reader); err != nil { return nil, err } @@ -913,7 +913,7 @@ func ReadMessage(reader io.Reader) (Message, error) { return msg, nil case 59: - msg := &LongTask{meta: &meta{TypeID: 59}} + msg := &LongTask{} if msg.Timestamp, err = ReadUint(reader); err != nil { return nil, err } @@ -938,7 +938,7 @@ func ReadMessage(reader io.Reader) (Message, error) { return msg, nil case 60: - msg := &SetNodeAttributeURLBased{meta: &meta{TypeID: 60}} + msg := &SetNodeAttributeURLBased{} if msg.ID, err = ReadUint(reader); err != nil { return nil, err } @@ -954,7 +954,7 @@ func ReadMessage(reader io.Reader) (Message, error) { return msg, nil case 61: - msg := &SetCSSDataURLBased{meta: &meta{TypeID: 61}} + msg := &SetCSSDataURLBased{} if msg.ID, err = ReadUint(reader); err != nil { return nil, err } @@ -967,7 +967,7 @@ func ReadMessage(reader io.Reader) (Message, error) { return msg, nil case 62: - msg := &IssueEvent{meta: &meta{TypeID: 62}} + msg := &IssueEvent{} if msg.MessageID, err = ReadUint(reader); err != nil { return nil, err } @@ -989,7 +989,7 @@ func ReadMessage(reader io.Reader) (Message, error) { return msg, nil case 63: - msg := &TechnicalInfo{meta: &meta{TypeID: 63}} + msg := &TechnicalInfo{} if msg.Type, err = ReadString(reader); err != nil { return nil, err } @@ -999,7 +999,7 @@ func ReadMessage(reader io.Reader) (Message, error) { return msg, nil case 64: - msg := &CustomIssue{meta: &meta{TypeID: 64}} + msg := &CustomIssue{} if msg.Name, err = ReadString(reader); err != nil { return nil, err } @@ -1009,19 +1009,19 @@ func ReadMessage(reader io.Reader) (Message, error) { return msg, nil case 65: - msg := &PageClose{meta: &meta{TypeID: 65}} + msg := &PageClose{} return msg, nil case 66: - msg := &AssetCache{meta: &meta{TypeID: 66}} + msg := &AssetCache{} if msg.URL, err = ReadString(reader); err != nil { return nil, err } return msg, nil case 67: - msg := &CSSInsertRuleURLBased{meta: &meta{TypeID: 67}} + msg := &CSSInsertRuleURLBased{} if msg.ID, err = ReadUint(reader); err != nil { return nil, err } @@ -1037,7 +1037,7 @@ func ReadMessage(reader io.Reader) (Message, error) { return msg, nil case 69: - msg := &MouseClick{meta: &meta{TypeID: 69}} + msg := &MouseClick{} if msg.ID, err = ReadUint(reader); err != nil { return nil, err } @@ -1053,7 +1053,7 @@ func ReadMessage(reader io.Reader) (Message, error) { return msg, nil case 70: - msg := &CreateIFrameDocument{meta: &meta{TypeID: 70}} + msg := &CreateIFrameDocument{} if msg.FrameID, err = ReadUint(reader); err != nil { return nil, err } @@ -1063,7 +1063,7 @@ func ReadMessage(reader io.Reader) (Message, error) { return msg, nil case 107: - msg := &IOSBatchMeta{meta: &meta{TypeID: 107}} + msg := &IOSBatchMeta{} if msg.Timestamp, err = ReadUint(reader); err != nil { return nil, err } @@ -1076,7 +1076,7 @@ func ReadMessage(reader io.Reader) (Message, error) { return msg, nil case 90: - msg := &IOSSessionStart{meta: &meta{TypeID: 90}} + msg := &IOSSessionStart{} if msg.Timestamp, err = ReadUint(reader); err != nil { return nil, err } @@ -1110,14 +1110,14 @@ func ReadMessage(reader io.Reader) (Message, error) { return msg, nil case 91: - msg := &IOSSessionEnd{meta: &meta{TypeID: 91}} + msg := &IOSSessionEnd{} if msg.Timestamp, err = ReadUint(reader); err != nil { return nil, err } return msg, nil case 92: - msg := &IOSMetadata{meta: &meta{TypeID: 92}} + msg := &IOSMetadata{} if msg.Timestamp, err = ReadUint(reader); err != nil { return nil, err } @@ -1133,7 +1133,7 @@ func ReadMessage(reader io.Reader) (Message, error) { return msg, nil case 93: - msg := &IOSCustomEvent{meta: &meta{TypeID: 93}} + msg := &IOSCustomEvent{} if msg.Timestamp, err = ReadUint(reader); err != nil { return nil, err } @@ -1149,7 +1149,7 @@ func ReadMessage(reader io.Reader) (Message, error) { return msg, nil case 94: - msg := &IOSUserID{meta: &meta{TypeID: 94}} + msg := &IOSUserID{} if msg.Timestamp, err = ReadUint(reader); err != nil { return nil, err } @@ -1162,7 +1162,7 @@ func ReadMessage(reader io.Reader) (Message, error) { return msg, nil case 95: - msg := &IOSUserAnonymousID{meta: &meta{TypeID: 95}} + msg := &IOSUserAnonymousID{} if msg.Timestamp, err = ReadUint(reader); err != nil { return nil, err } @@ -1175,7 +1175,7 @@ func ReadMessage(reader io.Reader) (Message, error) { return msg, nil case 96: - msg := &IOSScreenChanges{meta: &meta{TypeID: 96}} + msg := &IOSScreenChanges{} if msg.Timestamp, err = ReadUint(reader); err != nil { return nil, err } @@ -1197,7 +1197,7 @@ func ReadMessage(reader io.Reader) (Message, error) { return msg, nil case 97: - msg := &IOSCrash{meta: &meta{TypeID: 97}} + msg := &IOSCrash{} if msg.Timestamp, err = ReadUint(reader); err != nil { return nil, err } @@ -1216,7 +1216,7 @@ func ReadMessage(reader io.Reader) (Message, error) { return msg, nil case 98: - msg := &IOSScreenEnter{meta: &meta{TypeID: 98}} + msg := &IOSScreenEnter{} if msg.Timestamp, err = ReadUint(reader); err != nil { return nil, err } @@ -1232,7 +1232,7 @@ func ReadMessage(reader io.Reader) (Message, error) { return msg, nil case 99: - msg := &IOSScreenLeave{meta: &meta{TypeID: 99}} + msg := &IOSScreenLeave{} if msg.Timestamp, err = ReadUint(reader); err != nil { return nil, err } @@ -1248,7 +1248,7 @@ func ReadMessage(reader io.Reader) (Message, error) { return msg, nil case 100: - msg := &IOSClickEvent{meta: &meta{TypeID: 100}} + msg := &IOSClickEvent{} if msg.Timestamp, err = ReadUint(reader); err != nil { return nil, err } @@ -1267,7 +1267,7 @@ func ReadMessage(reader io.Reader) (Message, error) { return msg, nil case 101: - msg := &IOSInputEvent{meta: &meta{TypeID: 101}} + msg := &IOSInputEvent{} if msg.Timestamp, err = ReadUint(reader); err != nil { return nil, err } @@ -1286,7 +1286,7 @@ func ReadMessage(reader io.Reader) (Message, error) { return msg, nil case 102: - msg := &IOSPerformanceEvent{meta: &meta{TypeID: 102}} + msg := &IOSPerformanceEvent{} if msg.Timestamp, err = ReadUint(reader); err != nil { return nil, err } @@ -1302,7 +1302,7 @@ func ReadMessage(reader io.Reader) (Message, error) { return msg, nil case 103: - msg := &IOSLog{meta: &meta{TypeID: 103}} + msg := &IOSLog{} if msg.Timestamp, err = ReadUint(reader); err != nil { return nil, err } @@ -1318,7 +1318,7 @@ func ReadMessage(reader io.Reader) (Message, error) { return msg, nil case 104: - msg := &IOSInternalError{meta: &meta{TypeID: 104}} + msg := &IOSInternalError{} if msg.Timestamp, err = ReadUint(reader); err != nil { return nil, err } @@ -1331,7 +1331,7 @@ func ReadMessage(reader io.Reader) (Message, error) { return msg, nil case 105: - msg := &IOSNetworkCall{meta: &meta{TypeID: 105}} + msg := &IOSNetworkCall{} if msg.Timestamp, err = ReadUint(reader); err != nil { return nil, err } @@ -1362,7 +1362,7 @@ func ReadMessage(reader io.Reader) (Message, error) { return msg, nil case 110: - msg := &IOSPerformanceAggregated{meta: &meta{TypeID: 110}} + msg := &IOSPerformanceAggregated{} if msg.TimestampStart, err = ReadUint(reader); err != nil { return nil, err } @@ -1408,7 +1408,7 @@ func ReadMessage(reader io.Reader) (Message, error) { return msg, nil case 111: - msg := &IOSIssueEvent{meta: &meta{TypeID: 111}} + msg := &IOSIssueEvent{} if msg.Timestamp, err = ReadUint(reader); err != nil { return nil, err } diff --git a/backend/services/sink/main.go b/backend/services/sink/main.go index a649bb6ef..1a23919c6 100644 --- a/backend/services/sink/main.go +++ b/backend/services/sink/main.go @@ -34,12 +34,7 @@ func main() { env.String("TOPIC_RAW_IOS"), }, func(sessionID uint64, message Message, _ *types.Meta) { - //typeID, err := GetMessageTypeID(value) - // if err != nil { - // log.Printf("Message type decoding error: %v", err) - // return - // } - typeID := message.Meta().TypeID + typeID := message.TypeID() if !IsReplayerType(typeID) { return } From 324ee0890e8cc9e796691ecb6197a5954ad1beae Mon Sep 17 00:00:00 2001 From: Alex Kaminskii Date: Sat, 7 May 2022 23:21:30 +0200 Subject: [PATCH 91/91] chore(backend): enforce amd64 build (for build on amr mac) --- backend/build.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/backend/build.sh b/backend/build.sh index b4de3c2de..84af1a919 100755 --- a/backend/build.sh +++ b/backend/build.sh @@ -25,13 +25,13 @@ function build_service() { case "$image" in http | db) echo build http - docker build -t ${DOCKER_REPO:-'local'}/$image:${git_sha1} --build-arg SERVICE_NAME=$image -f ./cmd/Dockerfile . + docker build -t ${DOCKER_REPO:-'local'}/$image:${git_sha1} --platform linux/amd64 --build-arg SERVICE_NAME=$image -f ./cmd/Dockerfile . [[ $PUSH_IMAGE -eq 1 ]] && { docker push ${DOCKER_REPO:-'local'}/$image:${git_sha1} } ;; *) - docker build -t ${DOCKER_REPO:-'local'}/$image:${git_sha1} --build-arg SERVICE_NAME=$image . + docker build -t ${DOCKER_REPO:-'local'}/$image:${git_sha1} --platform linux/amd64 --build-arg SERVICE_NAME=$image . [[ $PUSH_IMAGE -eq 1 ]] && { docker push ${DOCKER_REPO:-'local'}/$image:${git_sha1} }