@simplybusiness/services 0.21.5 → 0.21.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (106) hide show
  1. package/CHANGELOG.md +15 -0
  2. package/dist/cjs/index.js +1198 -17
  3. package/dist/esm/index.js +1193 -4
  4. package/package.json +7 -6
  5. package/dist/cjs/address-lookup/index.js +0 -98
  6. package/dist/cjs/address-lookup/index.js.map +0 -1
  7. package/dist/cjs/address-lookup/types.js +0 -7
  8. package/dist/cjs/address-lookup/types.js.map +0 -1
  9. package/dist/cjs/airbrake/index.js +0 -45
  10. package/dist/cjs/airbrake/index.js.map +0 -1
  11. package/dist/cjs/index.js.map +0 -1
  12. package/dist/cjs/mocks/eventDefinitions.js +0 -90
  13. package/dist/cjs/mocks/eventDefinitions.js.map +0 -1
  14. package/dist/cjs/mocks/scripts-mock.js +0 -59
  15. package/dist/cjs/mocks/scripts-mock.js.map +0 -1
  16. package/dist/cjs/mocks/snowplowBrowserTrackerMock.js +0 -7
  17. package/dist/cjs/mocks/snowplowBrowserTrackerMock.js.map +0 -1
  18. package/dist/cjs/snowplow/Snowplow.js +0 -174
  19. package/dist/cjs/snowplow/Snowplow.js.map +0 -1
  20. package/dist/cjs/snowplow/SnowplowContext.js +0 -61
  21. package/dist/cjs/snowplow/SnowplowContext.js.map +0 -1
  22. package/dist/cjs/snowplow/constants.js +0 -13
  23. package/dist/cjs/snowplow/constants.js.map +0 -1
  24. package/dist/cjs/snowplow/contexts.js +0 -68
  25. package/dist/cjs/snowplow/contexts.js.map +0 -1
  26. package/dist/cjs/snowplow/event-definitions/base.js +0 -56
  27. package/dist/cjs/snowplow/event-definitions/base.js.map +0 -1
  28. package/dist/cjs/snowplow/event-definitions/index.js +0 -65
  29. package/dist/cjs/snowplow/event-definitions/index.js.map +0 -1
  30. package/dist/cjs/snowplow/event-definitions/intervention.js +0 -33
  31. package/dist/cjs/snowplow/event-definitions/intervention.js.map +0 -1
  32. package/dist/cjs/snowplow/event-definitions/personalised_cover.js +0 -122
  33. package/dist/cjs/snowplow/event-definitions/personalised_cover.js.map +0 -1
  34. package/dist/cjs/snowplow/event-definitions/qcp.js +0 -348
  35. package/dist/cjs/snowplow/event-definitions/qcp.js.map +0 -1
  36. package/dist/cjs/snowplow/event-definitions/questionnaire.js +0 -115
  37. package/dist/cjs/snowplow/event-definitions/questionnaire.js.map +0 -1
  38. package/dist/cjs/snowplow/event-definitions/redaction.js +0 -154
  39. package/dist/cjs/snowplow/event-definitions/redaction.js.map +0 -1
  40. package/dist/cjs/snowplow/event-definitions/referral.js +0 -37
  41. package/dist/cjs/snowplow/event-definitions/referral.js.map +0 -1
  42. package/dist/cjs/snowplow/getSnowplowConfig.js +0 -16
  43. package/dist/cjs/snowplow/getSnowplowConfig.js.map +0 -1
  44. package/dist/cjs/snowplow/index.js +0 -25
  45. package/dist/cjs/snowplow/index.js.map +0 -1
  46. package/dist/cjs/snowplow/types.js +0 -6
  47. package/dist/cjs/snowplow/types.js.map +0 -1
  48. package/dist/cjs/utils/index.js +0 -21
  49. package/dist/cjs/utils/index.js.map +0 -1
  50. package/dist/cjs/utils/isObject.js +0 -15
  51. package/dist/cjs/utils/isObject.js.map +0 -1
  52. package/dist/cjs/utils/testUtils.js +0 -43
  53. package/dist/cjs/utils/testUtils.js.map +0 -1
  54. package/dist/cjs/utils/text.js +0 -45
  55. package/dist/cjs/utils/text.js.map +0 -1
  56. package/dist/esm/address-lookup/index.js +0 -88
  57. package/dist/esm/address-lookup/index.js.map +0 -1
  58. package/dist/esm/address-lookup/types.js +0 -5
  59. package/dist/esm/address-lookup/types.js.map +0 -1
  60. package/dist/esm/airbrake/index.js +0 -35
  61. package/dist/esm/airbrake/index.js.map +0 -1
  62. package/dist/esm/index.js.map +0 -1
  63. package/dist/esm/mocks/eventDefinitions.js +0 -80
  64. package/dist/esm/mocks/eventDefinitions.js.map +0 -1
  65. package/dist/esm/mocks/scripts-mock.js +0 -49
  66. package/dist/esm/mocks/scripts-mock.js.map +0 -1
  67. package/dist/esm/mocks/snowplowBrowserTrackerMock.js +0 -6
  68. package/dist/esm/mocks/snowplowBrowserTrackerMock.js.map +0 -1
  69. package/dist/esm/snowplow/Snowplow.js +0 -169
  70. package/dist/esm/snowplow/Snowplow.js.map +0 -1
  71. package/dist/esm/snowplow/SnowplowContext.js +0 -43
  72. package/dist/esm/snowplow/SnowplowContext.js.map +0 -1
  73. package/dist/esm/snowplow/constants.js +0 -3
  74. package/dist/esm/snowplow/constants.js.map +0 -1
  75. package/dist/esm/snowplow/contexts.js +0 -47
  76. package/dist/esm/snowplow/contexts.js.map +0 -1
  77. package/dist/esm/snowplow/event-definitions/base.js +0 -66
  78. package/dist/esm/snowplow/event-definitions/base.js.map +0 -1
  79. package/dist/esm/snowplow/event-definitions/index.js +0 -36
  80. package/dist/esm/snowplow/event-definitions/index.js.map +0 -1
  81. package/dist/esm/snowplow/event-definitions/intervention.js +0 -23
  82. package/dist/esm/snowplow/event-definitions/intervention.js.map +0 -1
  83. package/dist/esm/snowplow/event-definitions/personalised_cover.js +0 -131
  84. package/dist/esm/snowplow/event-definitions/personalised_cover.js.map +0 -1
  85. package/dist/esm/snowplow/event-definitions/qcp.js +0 -339
  86. package/dist/esm/snowplow/event-definitions/qcp.js.map +0 -1
  87. package/dist/esm/snowplow/event-definitions/questionnaire.js +0 -106
  88. package/dist/esm/snowplow/event-definitions/questionnaire.js.map +0 -1
  89. package/dist/esm/snowplow/event-definitions/redaction.js +0 -144
  90. package/dist/esm/snowplow/event-definitions/redaction.js.map +0 -1
  91. package/dist/esm/snowplow/event-definitions/referral.js +0 -28
  92. package/dist/esm/snowplow/event-definitions/referral.js.map +0 -1
  93. package/dist/esm/snowplow/getSnowplowConfig.js +0 -7
  94. package/dist/esm/snowplow/getSnowplowConfig.js.map +0 -1
  95. package/dist/esm/snowplow/index.js +0 -8
  96. package/dist/esm/snowplow/index.js.map +0 -1
  97. package/dist/esm/snowplow/types.js +0 -3
  98. package/dist/esm/snowplow/types.js.map +0 -1
  99. package/dist/esm/utils/index.js +0 -4
  100. package/dist/esm/utils/index.js.map +0 -1
  101. package/dist/esm/utils/isObject.js +0 -5
  102. package/dist/esm/utils/isObject.js.map +0 -1
  103. package/dist/esm/utils/testUtils.js +0 -26
  104. package/dist/esm/utils/testUtils.js.map +0 -1
  105. package/dist/esm/utils/text.js +0 -25
  106. package/dist/esm/utils/text.js.map +0 -1
@@ -1,28 +0,0 @@
1
- // Referral page events
2
- export const referralEventDefinitions = [
3
- {
4
- name: "nextCoverageClicked",
5
- type: "structured",
6
- makePayload: (params)=>{
7
- const { url } = params;
8
- const eventName = "post_referral_workers_compensation_continuation_link";
9
- return {
10
- category: eventName,
11
- action: "link_click",
12
- label: eventName,
13
- property: url
14
- };
15
- }
16
- },
17
- {
18
- name: "helpChatLinkClicked",
19
- type: "structured",
20
- makePayload: ()=>({
21
- category: "help chat for question",
22
- action: "help_chat_for_question_clicked",
23
- property: window.location.href
24
- })
25
- }
26
- ];
27
-
28
- //# sourceMappingURL=referral.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../../src/snowplow/event-definitions/referral.ts"],"sourcesContent":["import { EventDefinition, ParamsType } from \"../types\";\n\n// Referral page events\nexport const referralEventDefinitions: EventDefinition[] = [\n {\n name: \"nextCoverageClicked\",\n type: \"structured\",\n makePayload: params => {\n const { url } = params as ParamsType;\n const eventName = \"post_referral_workers_compensation_continuation_link\";\n\n return {\n category: eventName,\n action: \"link_click\",\n label: eventName,\n property: url,\n };\n },\n },\n {\n name: \"helpChatLinkClicked\",\n type: \"structured\",\n makePayload: () => ({\n category: \"help chat for question\",\n action: \"help_chat_for_question_clicked\",\n property: window.location.href,\n }),\n },\n];\n"],"names":["referralEventDefinitions","name","type","makePayload","params","url","eventName","category","action","label","property","window","location","href"],"mappings":"AAEA,uBAAuB;AACvB,OAAO,MAAMA,2BAA8C;IACzD;QACEC,MAAM;QACNC,MAAM;QACNC,aAAaC,CAAAA;YACX,MAAM,EAAEC,GAAG,EAAE,GAAGD;YAChB,MAAME,YAAY;YAElB,OAAO;gBACLC,UAAUD;gBACVE,QAAQ;gBACRC,OAAOH;gBACPI,UAAUL;YACZ;QACF;IACF;IACA;QACEJ,MAAM;QACNC,MAAM;QACNC,aAAa,IAAO,CAAA;gBAClBI,UAAU;gBACVC,QAAQ;gBACRE,UAAUC,OAAOC,QAAQ,CAACC,IAAI;YAChC,CAAA;IACF;CACD,CAAC"}
@@ -1,7 +0,0 @@
1
- // Get Snowplow config from page data props
2
- export const getSnowplowConfig = (pageData)=>{
3
- var _pageData_scripts_find, _pageData_scripts;
4
- return (_pageData_scripts = pageData.scripts) === null || _pageData_scripts === void 0 ? void 0 : (_pageData_scripts_find = _pageData_scripts.find(({ metadata })=>metadata.name === "snowplow")) === null || _pageData_scripts_find === void 0 ? void 0 : _pageData_scripts_find.props;
5
- };
6
-
7
- //# sourceMappingURL=getSnowplowConfig.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/snowplow/getSnowplowConfig.ts"],"sourcesContent":["import type { TrackingProps, PageDataProps } from \"./types\";\n\n// Get Snowplow config from page data props\nexport const getSnowplowConfig = (\n pageData: PageDataProps,\n): TrackingProps | undefined =>\n pageData.scripts?.find(({ metadata }) => metadata.name === \"snowplow\")\n ?.props as TrackingProps;\n"],"names":["getSnowplowConfig","pageData","scripts","find","metadata","name","props"],"mappings":"AAEA,2CAA2C;AAC3C,OAAO,MAAMA,oBAAoB,CAC/BC;QAEAA,wBAAAA;YAAAA,oBAAAA,SAASC,OAAO,cAAhBD,yCAAAA,yBAAAA,kBAAkBE,IAAI,CAAC,CAAC,EAAEC,QAAQ,EAAE,GAAKA,SAASC,IAAI,KAAK,yBAA3DJ,6CAAAA,uBACIK,KAAK;EAAkB"}
@@ -1,8 +0,0 @@
1
- export * from "./contexts";
2
- export * from "./event-definitions";
3
- export * from "./getSnowplowConfig";
4
- export * from "./Snowplow";
5
- export * from "./SnowplowContext";
6
- export * from "./types";
7
-
8
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/snowplow/index.ts"],"sourcesContent":["export * from \"./contexts\";\nexport * from \"./event-definitions\";\nexport * from \"./getSnowplowConfig\";\nexport * from \"./Snowplow\";\nexport * from \"./SnowplowContext\";\nexport * from \"./types\";\n"],"names":[],"mappings":"AAAA,cAAc,aAAa;AAC3B,cAAc,sBAAsB;AACpC,cAAc,sBAAsB;AACpC,cAAc,aAAa;AAC3B,cAAc,oBAAoB;AAClC,cAAc,UAAU"}
@@ -1,3 +0,0 @@
1
- export { };
2
-
3
- //# sourceMappingURL=types.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/snowplow/types.ts"],"sourcesContent":["import {\n EventMethod,\n SelfDescribingJson,\n StructuredEvent,\n} from \"@snowplow/browser-tracker\";\n\ntype BaseConfig = {\n appId: string;\n avalancheCollector: string;\n eventMethod: EventMethod;\n trackPageView: boolean;\n includeGAContext: boolean;\n uid?: string;\n postPath?: string;\n};\n\nexport type EnvConfig = BaseConfig & {\n cookieDomain: Record<string, string>;\n};\n\nexport type TrackingProps = BaseConfig & {\n eventMethod: EventMethod;\n cookieDomain?: string;\n pageViewContext?: ChannelContext;\n};\n\nexport type ChannelContext = {\n schema: string;\n data: Record<string, string | number>;\n};\n\nexport type ChannelContexts = Record<string, ChannelContext>;\n\nexport type ArrayOneOrMore<T> = [T, ...T[]];\n\nexport type ParamsType = Record<string, string> & {\n context: ServerContext;\n};\n\ntype ServerContext = {\n site: string;\n vertical: string;\n primary_detail: string;\n journey_name: string;\n journey_id: string;\n};\n\nexport type LinkType = Record<string, string> & {\n targetUrl: string;\n elementContent: string;\n};\n\nexport type SerialisedEvent = SelfDescribingJson<Record<string, unknown>>;\n\nexport type EventDefinition = {\n name: string;\n type: \"structured\" | \"unstructured\";\n makePayload: (\n params?: Record<string, unknown>,\n ) => StructuredEvent | SerialisedEvent;\n contexts?: string[];\n};\n\nexport interface PageDataProps\n extends Partial<\n Record<\n \"scripts\",\n Array<{\n metadata: { name: string };\n props?: Record<string, unknown>;\n }>\n >\n > {}\n"],"names":[],"mappings":"AA+DA,WASM"}
@@ -1,4 +0,0 @@
1
- export * from "./text";
2
- export * from "./isObject";
3
-
4
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/utils/index.ts"],"sourcesContent":["export * from \"./text\";\nexport * from \"./isObject\";\n"],"names":[],"mappings":"AAAA,cAAc,SAAS;AACvB,cAAc,aAAa"}
@@ -1,5 +0,0 @@
1
- export function isObject(value) {
2
- return typeof value === "object" && value !== null && !Array.isArray(value) && Object.getPrototypeOf(value) === Object.prototype;
3
- }
4
-
5
- //# sourceMappingURL=isObject.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/utils/isObject.tsx"],"sourcesContent":["export function isObject(value: unknown): value is Record<string, unknown> {\n return (\n typeof value === \"object\" &&\n value !== null &&\n !Array.isArray(value) &&\n Object.getPrototypeOf(value) === Object.prototype\n );\n }\n"],"names":["isObject","value","Array","isArray","Object","getPrototypeOf","prototype"],"mappings":"AAAA,OAAO,SAASA,SAASC,KAAc;IACnC,OACE,OAAOA,UAAU,YACjBA,UAAU,QACV,CAACC,MAAMC,OAAO,CAACF,UACfG,OAAOC,cAAc,CAACJ,WAAWG,OAAOE,SAAS;AAErD"}
@@ -1,26 +0,0 @@
1
- /* eslint-disable import/no-extraneous-dependencies */ import { jsx as _jsx } from "react/jsx-runtime";
2
- import { render } from "@testing-library/react";
3
- import { pageData } from "../mocks/scripts-mock";
4
- import { SnowplowProvider } from "../snowplow/SnowplowContext";
5
- import { getSnowplowConfig } from "../snowplow/getSnowplowConfig";
6
- // Snowplow analytics
7
- const snowplowProps = getSnowplowConfig(pageData);
8
- const ProvidersMock = ({ children })=>/*#__PURE__*/ _jsx(SnowplowProvider, {
9
- scripts: snowplowProps,
10
- children: children
11
- });
12
- export const renderWithProviders = (ui, options)=>render(ui, {
13
- wrapper: ProvidersMock,
14
- ...options
15
- });
16
- // Mocks window.location for url testing
17
- export const mockLocation = ({ origin = "https://simplybusiness.co.uk", pathname = "" })=>Object.defineProperty(window, "location", {
18
- get () {
19
- return {
20
- origin,
21
- pathname
22
- };
23
- }
24
- });
25
-
26
- //# sourceMappingURL=testUtils.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/utils/testUtils.tsx"],"sourcesContent":["/* eslint-disable import/no-extraneous-dependencies */\nimport { RenderOptions, render } from \"@testing-library/react\";\nimport { ReactElement, ReactNode } from \"react\";\nimport { pageData } from \"../mocks/scripts-mock\";\nimport { SnowplowProvider } from \"../snowplow/SnowplowContext\";\nimport { getSnowplowConfig } from \"../snowplow/getSnowplowConfig\";\nimport { PageDataProps } from \"../snowplow/types\";\n\n// Snowplow analytics\nconst snowplowProps = getSnowplowConfig(pageData as PageDataProps);\n\nconst ProvidersMock = ({ children }: { children: ReactNode }) => (\n <SnowplowProvider scripts={snowplowProps!}>{children}</SnowplowProvider>\n);\n\nexport const renderWithProviders = (\n ui: ReactElement,\n options?: RenderOptions,\n) => render(ui, { wrapper: ProvidersMock, ...options });\n\n// Mocks window.location for url testing\nexport const mockLocation = ({\n origin = \"https://simplybusiness.co.uk\",\n pathname = \"\",\n}: {\n origin?: string;\n pathname?: string;\n}) =>\n Object.defineProperty(window, \"location\", {\n get() {\n return {\n origin,\n pathname,\n };\n },\n });\n"],"names":["render","pageData","SnowplowProvider","getSnowplowConfig","snowplowProps","ProvidersMock","children","scripts","renderWithProviders","ui","options","wrapper","mockLocation","origin","pathname","Object","defineProperty","window","get"],"mappings":"AAAA,oDAAoD;AACpD,SAAwBA,MAAM,QAAQ,yBAAyB;AAE/D,SAASC,QAAQ,QAAQ,wBAAwB;AACjD,SAASC,gBAAgB,QAAQ,8BAA8B;AAC/D,SAASC,iBAAiB,QAAQ,gCAAgC;AAGlE,qBAAqB;AACrB,MAAMC,gBAAgBD,kBAAkBF;AAExC,MAAMI,gBAAgB,CAAC,EAAEC,QAAQ,EAA2B,iBAC1D,KAACJ;QAAiBK,SAASH;kBAAiBE;;AAG9C,OAAO,MAAME,sBAAsB,CACjCC,IACAC,UACGV,OAAOS,IAAI;QAAEE,SAASN;QAAe,GAAGK,OAAO;IAAC,GAAG;AAExD,wCAAwC;AACxC,OAAO,MAAME,eAAe,CAAC,EAC3BC,SAAS,8BAA8B,EACvCC,WAAW,EAAE,EAId,GACCC,OAAOC,cAAc,CAACC,QAAQ,YAAY;QACxCC;YACE,OAAO;gBACLL;gBACAC;YACF;QACF;IACF,GAAG"}
@@ -1,25 +0,0 @@
1
- import { isObject } from ".";
2
- // Deeply converts keys in an object to snake_case
3
- export const snakeCaseKeys = (object)=>Object.entries(object || {}).reduce((acc, [key, value])=>{
4
- const newKey = camelToSnakeCase(key);
5
- if (Array.isArray(value) && value.every(isObject)) {
6
- return {
7
- ...acc,
8
- [newKey]: value.map((v)=>snakeCaseKeys(v))
9
- };
10
- }
11
- if (isObject(value)) {
12
- return {
13
- ...acc,
14
- [newKey]: snakeCaseKeys(value)
15
- };
16
- }
17
- return {
18
- ...acc,
19
- [newKey]: value
20
- };
21
- }, {});
22
- export const snakeCase = (text = "")=>text.toLowerCase().replace(/ /g, "_");
23
- export const camelToSnakeCase = (text)=>text.charAt(0).toLowerCase() + text.slice(1).replace(/(\[.*?\])|[A-Z]/g, (match, group)=>group ? match : `_${match.toLowerCase()}`);
24
-
25
- //# sourceMappingURL=text.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/utils/text.ts"],"sourcesContent":["import { isObject } from \".\";\n\n// Deeply converts keys in an object to snake_case\nexport const snakeCaseKeys = (object: Record<string, unknown>) =>\n Object.entries(object || {}).reduce(\n (acc: Record<string, unknown>, [key, value]): Record<string, unknown> => {\n const newKey = camelToSnakeCase(key);\n\n if (Array.isArray(value) && value.every(isObject)) {\n return {\n ...acc,\n [newKey]: value.map(v => snakeCaseKeys(v)),\n };\n }\n\n if (isObject(value)) {\n return {\n ...acc,\n [newKey]: snakeCaseKeys(value),\n };\n }\n\n return {\n ...acc,\n [newKey]: value,\n };\n },\n {},\n );\n\nexport const snakeCase = (text = \"\"): string =>\n text.toLowerCase().replace(/ /g, \"_\");\n\nexport const camelToSnakeCase = (text: string) =>\n text.charAt(0).toLowerCase() +\n text\n .slice(1)\n .replace(/(\\[.*?\\])|[A-Z]/g, (match, group) =>\n group ? match : `_${match.toLowerCase()}`,\n );\n\n"],"names":["isObject","snakeCaseKeys","object","Object","entries","reduce","acc","key","value","newKey","camelToSnakeCase","Array","isArray","every","map","v","snakeCase","text","toLowerCase","replace","charAt","slice","match","group"],"mappings":"AAAA,SAASA,QAAQ,QAAQ,IAAI;AAE7B,kDAAkD;AAClD,OAAO,MAAMC,gBAAgB,CAACC,SAC5BC,OAAOC,OAAO,CAACF,UAAU,CAAC,GAAGG,MAAM,CACjC,CAACC,KAA8B,CAACC,KAAKC,MAAM;QACzC,MAAMC,SAASC,iBAAiBH;QAEhC,IAAII,MAAMC,OAAO,CAACJ,UAAUA,MAAMK,KAAK,CAACb,WAAW;YACjD,OAAO;gBACL,GAAGM,GAAG;gBACN,CAACG,OAAO,EAAED,MAAMM,GAAG,CAACC,CAAAA,IAAKd,cAAcc;YACzC;QACF;QAEA,IAAIf,SAASQ,QAAQ;YACnB,OAAO;gBACL,GAAGF,GAAG;gBACN,CAACG,OAAO,EAAER,cAAcO;YAC1B;QACF;QAEA,OAAO;YACL,GAAGF,GAAG;YACN,CAACG,OAAO,EAAED;QACZ;IACF,GACA,CAAC,GACD;AAEJ,OAAO,MAAMQ,YAAY,CAACC,OAAO,EAAE,GACjCA,KAAKC,WAAW,GAAGC,OAAO,CAAC,MAAM,KAAK;AAExC,OAAO,MAAMT,mBAAmB,CAACO,OAC/BA,KAAKG,MAAM,CAAC,GAAGF,WAAW,KAC1BD,KACGI,KAAK,CAAC,GACNF,OAAO,CAAC,oBAAoB,CAACG,OAAOC,QACnCA,QAAQD,QAAQ,CAAC,CAAC,EAAEA,MAAMJ,WAAW,IAAI,EACzC"}