{"version":3,"sources":["webpack:///./src/components/Modal/Modal.tsx","webpack:///./src/services/validations.ts","webpack:///./src/components/ContactUsFormModal/ContactUsFormModal.validation.ts","webpack:///./src/components/ContactUsFormModal/ContactUsFormModal.tsx","webpack:///./src/components/Form/components/Input/Input.tsx","webpack:///./src/components/Form/Form.tsx","webpack:///./src/assets/svg/close.svg"],"names":["useModal","defaultIsShowing","useState","isModalShowing","setIsModalShowing","handleModalOpen","handleModalClose","ModalClose","onClose","className","fullScreen","type","data-dismiss","aria-label","onClick","src","CloseIcon","alt","aria-hidden","ModalCloseButton","memo","Modal","shareUrl","noIcons","side","isShowing","displayClose","noPadding","children","copyUrl","useCallback","e","preventDefault","navigator","clipboard","writeText","ReactDOM","createPortal","aria-modal","tabIndex","role","url","fbIcon","twitterIcon","href","messageIcon","shareIcon","document","body","hasValue","value","trim","isEmail","test","String","toLowerCase","isPhone","ContactUsFormValidation","values","errors","fieldName","fieldValue","validateProjectType","validateName","validatePhone","validateEmail","validateLocation","validateInquiryType","validateMessage","ContactUsFormModal","propertySlug","submitApi","projectOptionList","useStaticQuery","allProperty","nodes","useFormState","validation","ContactUsFormModalValidation","validateFields","setIsSuccessShown","isAgreeChecked","isRecaptchaChecked","defaultProperty","find","project","slug","undefined","setPropertyName","a","fieldErrors","Object","keys","length","formData","FormData","entries","forEach","key","append","options","property","Array","from","el","i","getElementById","getElementsByTagName","item","setAttribute","inputProperty","window","addEventListener","event","data","eventName","filter","setDefault","selectedIndex","handleFormReady","addFormValidation","elementId","validationType","addMaxLengthContacNo","useEffect","hbspt","forms","jQuery","change","trigger","create","portalId","formId","target","onFormReady","id","Input","name","placeholder","error","half","onChange","onBlur","htmlFor","Content","FormContent","isFormDisplayed","setIsFormDisplayed","touched","setTouched","setValues","setErrors","onFieldValueChange","currentTarget","newValues","newTouched","onFieldBlur","reduce","acc","val","resetFields","formValues","Form","display","action","method","onSubmit","handleSubmit","module","exports"],"mappings":"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","file":"6a3d235569670501497fb6927b7c7e3398e69ff4-a2f55fdb317696305b75.js","sourcesContent":["import React, {\n ReactElement,\n useState,\n Dispatch,\n SetStateAction,\n memo,\n useCallback,\n} from 'react'\nimport ReactDOM from 'react-dom'\nimport Helmet from 'react-helmet'\nimport './Modal.scss'\nimport { FacebookShareButton, TwitterShareButton } from 'react-share'\nimport CloseIcon from '../../assets/svg/close.svg'\nimport fbIcon from '../../assets/images/news-images/fb.png'\nimport twitterIcon from '../../assets/svg/twitter.svg'\nimport messageIcon from '../../assets/images/news-images/message.png'\nimport shareIcon from '../../assets/images/news-images/share.png'\n\ntype UseModalReturnTypes = {\n isModalShowing: boolean\n setIsModalShowing: Dispatch>\n handleModalOpen: () => void\n handleModalClose: () => void\n}\n\nexport const useModal = (defaultIsShowing?: boolean): UseModalReturnTypes => {\n const [isModalShowing, setIsModalShowing] = useState(\n defaultIsShowing || false,\n )\n\n const handleModalOpen = (): void => {\n setIsModalShowing(true)\n }\n\n const handleModalClose = (): void => {\n setIsModalShowing(false)\n }\n\n return {\n isModalShowing,\n setIsModalShowing,\n handleModalOpen,\n handleModalClose,\n }\n}\n\ntype ModalClosePropTypes = {\n onClose: () => void\n className?: string\n fullScreen?: boolean\n}\n\nexport type ModalDisplayTypes = {\n isShowing: boolean\n} & ModalClosePropTypes\n\ntype ModalPropTypes = {\n shareUrl?: string\n noIcons?: boolean\n side?: boolean\n displayClose?: boolean\n noPadding?: boolean\n className?: string\n fullScreen?: boolean\n children?:\n | string\n | Element\n | ReactElement\n | boolean\n | (string | Element | ReactElement | boolean)[]\n isShowing?: boolean\n} & ModalClosePropTypes\n\nconst ModalClose = ({\n onClose,\n className,\n fullScreen,\n}: ModalClosePropTypes): ReactElement => (\n \n \"×\"\n \n)\n\nexport const ModalCloseButton = memo(ModalClose)\n\nconst Modal = ({\n shareUrl,\n noIcons,\n side,\n isShowing,\n onClose,\n className,\n fullScreen,\n displayClose = true,\n noPadding,\n children,\n}: ModalPropTypes): ReactElement => {\n const copyUrl = useCallback(\n (e: React.MouseEvent): void => {\n e.preventDefault()\n\n navigator.clipboard.writeText(shareUrl || '')\n },\n [shareUrl],\n )\n\n if (isShowing)\n return ReactDOM.createPortal(\n <>\n
\n \n \n \n \n \n {!!displayClose && (\n
\n \n {className && !noIcons ? (\n
\n \n \"×\"\n \n \n \"×\"\n \n \n \"×\"\n \n \n
\n ) : null}\n
\n )}\n {children}\n
\n \n ,\n document.body,\n )\n\n return
\n}\n\nexport default memo(Modal)\n","export const hasValue = (value: string): boolean =>\n value ? !!value.trim() : !!value\n\nexport const isEmail = (value: string): boolean => {\n const re = /^[\\w-.]+@([\\w-]+\\.)+[\\w-]{2,4}$/g\n return re.test(String(value).toLowerCase())\n}\n\nexport const isPhone = (value: string): boolean => {\n const re = /^[0-9-]+$/g\n return re.test(String(value).toLowerCase())\n}\n\nexport const isPhoneWithPrefix = (value: string): boolean => {\n const re = /^[0-9-+]+ [0-9-]+$/g\n return re.test(String(value).toLowerCase())\n}\n\nexport default {}\n","/* eslint-disable no-param-reassign */\nimport { hasValue, isEmail, isPhone } from '../../services/validations'\n\ntype FieldTypes = { [key: string]: string }\n\ntype FieldValidationTypes = {\n values: FieldTypes\n fieldName: string\n errors: FieldTypes\n}\n\nconst validateProjectType = ({\n values,\n fieldName,\n errors,\n}: FieldValidationTypes): void => {\n const fieldValue = values[fieldName]\n\n if (!hasValue(fieldValue)) {\n errors[fieldName] = 'Proejct type field is required.'\n }\n}\n\nconst validateName = ({\n values,\n fieldName,\n errors,\n}: FieldValidationTypes): void => {\n const fieldValue = values[fieldName]\n\n if (!hasValue(fieldValue)) {\n errors[fieldName] = 'Name field is required.'\n }\n}\n\nconst validatePhone = ({\n values,\n fieldName,\n errors,\n}: FieldValidationTypes): void => {\n const fieldValue = values[fieldName]\n\n if (!hasValue(fieldValue)) {\n errors[fieldName] = 'Phone field is required.'\n return\n }\n\n if (!isPhone(fieldValue)) {\n errors[fieldName] = 'Please input a phone number.'\n }\n}\n\nconst validateEmail = ({\n values,\n fieldName,\n errors,\n}: FieldValidationTypes): void => {\n const fieldValue = values[fieldName]\n\n if (!hasValue(fieldValue)) {\n errors[fieldName] = 'Email field is required.'\n return\n }\n\n if (!isEmail(fieldValue)) {\n errors[fieldName] = 'Please enter/input a valid email address.'\n }\n}\n\nconst validateLocation = ({\n values,\n fieldName,\n errors,\n}: FieldValidationTypes): void => {\n const fieldValue = values[fieldName]\n\n if (!hasValue(fieldValue)) {\n errors[fieldName] = 'Project field is required.'\n }\n}\n\nconst validateInquiryType = ({\n values,\n fieldName,\n errors,\n}: FieldValidationTypes): void => {\n const fieldValue = values[fieldName]\n\n if (!hasValue(fieldValue)) {\n errors[fieldName] = 'Source field is required.'\n }\n}\n\nconst validateMessage = ({\n values,\n fieldName,\n errors,\n}: FieldValidationTypes): void => {\n const fieldValue = values[fieldName]\n\n if (!hasValue(fieldValue)) {\n errors[fieldName] = 'Message field is required.'\n }\n}\n\nconst ContactUsFormValidation = (values: {}): {} => {\n const errors = {}\n\n validateProjectType({ values, fieldName: 'projectType', errors })\n validateName({ values, fieldName: 'name', errors })\n validatePhone({ values, fieldName: 'phone', errors })\n validateEmail({ values, fieldName: 'email', errors })\n validateLocation({ values, fieldName: 'location', errors })\n validateInquiryType({ values, fieldName: 'inquiryType', errors })\n validateMessage({ values, fieldName: 'message', errors })\n\n return errors\n}\n\nexport default ContactUsFormValidation\n","import React, {\n memo,\n ReactElement,\n useCallback,\n useState,\n useEffect,\n} from 'react'\nimport { graphql, useStaticQuery } from 'gatsby'\nimport { useFormState } from '../Form/Form'\nimport Modal, { ModalCloseButton, ModalDisplayTypes } from '../Modal/Modal'\nimport ContactUsFormModalValidation from './ContactUsFormModal.validation'\nimport './ContactUsFormModal.scss'\nimport { addFormValidation } from '../Validators/InputValidations'\n\ntype ContactUsFormModalPropTypes = {\n submitApi?: (values: FormData) => Promise<{}>\n propertySlug?: string\n} & ModalDisplayTypes\n\ntype ProjectListTypes = {\n label: string\n value: string\n slug: string\n}\n\nconst ContactUsFormModal = ({\n isShowing,\n propertySlug,\n onClose,\n submitApi,\n}: ContactUsFormModalPropTypes): ReactElement => {\n const {\n allProperty: { nodes: projectOptionList },\n }: {\n allProperty: {\n nodes: ProjectListTypes[]\n }\n } = useStaticQuery(\n graphql`\n query ProjectOptionList {\n allProperty {\n nodes {\n label: projectName\n value: projectName\n slug\n }\n }\n }\n `,\n )\n const { values, validateFields } = useFormState({\n validation: ContactUsFormModalValidation,\n })\n const [isSuccessShown, setIsSuccessShown] = useState(false)\n const [isAgreeChecked, setIsAgreeChecked] = useState(false)\n const [isRecaptchaChecked, setIsRecaptchaChecked] = useState(false)\n const [defaultProperty] = useState(\n projectOptionList\n ? projectOptionList.find((project) => project.slug === propertySlug)\n : undefined,\n )\n const handleSubmit = useCallback(async () => {\n if (isAgreeChecked && isRecaptchaChecked) {\n const fieldErrors = validateFields(values)\n\n if (!Object.keys(fieldErrors).length) {\n try {\n if (submitApi) {\n const formData = new FormData()\n Object.entries(values).forEach(([key, value]) => {\n formData.append(key, value)\n })\n\n await submitApi(formData)\n }\n\n setIsSuccessShown(true)\n } catch (e) {\n setIsSuccessShown(false)\n }\n }\n }\n }, [isAgreeChecked, isRecaptchaChecked, submitApi, validateFields, values])\n\n const setPropertyName = useCallback(async (options, property) => {\n const setSelected = Array.from(options)?.forEach((el: any, i): any => {\n if (el.value === property.value) {\n const insertValue = document\n .getElementById('contact-form')\n ?.getElementsByTagName('select')\n .item(0)\n ?.getElementsByTagName('option')\n .item(i)\n ?.setAttribute('selected', 'true')\n }\n })\n }, [])\n\n const inputProperty = useCallback(async () => {\n window.addEventListener('message', (event) => {\n if (\n event.data.type === 'hsFormCallback' &&\n event.data.eventName === 'onFormReady'\n ) {\n const options = document\n .getElementById('contact-form')\n ?.getElementsByTagName('select')\n .item(0)\n ?.getElementsByTagName('option')\n if (defaultProperty && options) {\n const found = Array.from(options).filter(\n (el) => el.value === defaultProperty.value,\n )\n if (found.length > 0) {\n setPropertyName(options, defaultProperty)\n } else {\n const setDefault = document\n .getElementById('contact-form')\n ?.getElementsByTagName('select')\n .item(0)\n if (setDefault) setDefault.selectedIndex = 0\n }\n }\n }\n })\n }, [defaultProperty, setPropertyName])\n\n const handleFormReady = useCallback(() => {\n addFormValidation('contact-form', [\n {\n elementId: 'name-82e35df6-4d1c-4ace-8eae-fdb7f5d084e1',\n validationType: 'alphaOnly',\n },\n {\n elementId: 'phone-82e35df6-4d1c-4ace-8eae-fdb7f5d084e1',\n validationType: 'numericOnly',\n },\n {\n elementId: 'location-82e35df6-4d1c-4ace-8eae-fdb7f5d084e1',\n validationType: 'alphaNumericWithSpecialCharacters',\n },\n {\n elementId: 'message-82e35df6-4d1c-4ace-8eae-fdb7f5d084e1',\n validationType: 'alphaNumericWithSpecialCharacters',\n },\n ])\n\n // add maxlength in contact number\n const addMaxLengthContacNo: HTMLElement | null = document.getElementById(\n 'phone-82e35df6-4d1c-4ace-8eae-fdb7f5d084e1',\n )\n\n const isElement = (input: HTMLElement | null): input is HTMLElement =>\n input !== null\n\n if (isElement(addMaxLengthContacNo)) {\n addMaxLengthContacNo.setAttribute('maxLength', '12')\n }\n }, [])\n\n useEffect(() => {\n if (isShowing && window.hbspt?.forms) {\n window.jQuery =\n window.jQuery ||\n ((): { change(): null; trigger(): null } => ({\n change: (): null => null,\n trigger: (): null => null,\n }))\n window.hbspt.forms.create({\n portalId: '8605476',\n formId: '82e35df6-4d1c-4ace-8eae-fdb7f5d084e1',\n target: '#contact-form',\n onFormReady: handleFormReady,\n })\n\n inputProperty()\n }\n }, [handleFormReady, inputProperty, isShowing])\n\n return (\n \n
\n
\n \n
\n
\n

Contact Us

\n

Inquiry Form

\n
\n
\n
\n \n )\n}\n\nexport default memo(ContactUsFormModal)\n","import React, { FormEvent, memo, ReactElement } from 'react'\n\ntype InputPropTypes = {\n id: string\n name: string\n type?: 'text' | 'email' | 'password'\n placeholder: string\n error?: string\n half?: boolean\n onChange?(event: FormEvent): void\n onBlur?(event: FormEvent): void\n}\n\nconst Input = ({\n id,\n name,\n type = 'text',\n placeholder,\n error,\n half,\n onChange,\n onBlur,\n}: InputPropTypes): ReactElement => {\n return (\n
\n
\n \n \n
\n

{error}

\n
\n )\n}\n\nexport default memo(Input)\n","import React, {\n memo,\n ReactElement,\n useCallback,\n useEffect,\n useState,\n} from 'react'\nimport FormInput from './components/Input/Input'\nimport FormInputWithPrefix from './components/InputWithPrefix/InputWithPrefix'\nimport FormSelect from './components/Select/Select'\nimport FormTextArea from './components/TextArea/TextArea'\nimport './Form.scss'\n\ntype ValidationTypes = {\n [key: string]: string\n}\n\ntype ContentPropTypes = {\n children:\n | string\n | Element\n | ReactElement\n | boolean\n | (string | Element | ReactElement | boolean)[]\n}\n\nexport type FieldEventTypes = { currentTarget: { name: string; value: string } }\n\ntype FieldsObjectTypes = {\n [key: string]: string\n}\n\ntype UseFormStateTypes = {\n validation?: (values: FieldsObjectTypes) => FieldsObjectTypes\n}\n\ntype UseFormStateReturnTypes = {\n isFormDisplayed: boolean\n values: FieldsObjectTypes\n errors: FieldsObjectTypes\n validateFields(values: FieldsObjectTypes): FieldsObjectTypes\n onFieldValueChange(event: FieldEventTypes): void\n onFieldBlur(event: FieldEventTypes): void\n resetFields(): void\n}\n\ntype FormPropTypes = {\n display?: boolean\n action?: string\n method?: 'post' | 'get'\n onSubmit?: () => void\n // eslint-disable-next-line react/no-unused-prop-types\n validation?: (data: ValidationTypes) => ValidationTypes\n children:\n | string\n | Element\n | ReactElement\n | boolean\n | (string | Element | ReactElement | boolean)[]\n}\n\nexport { FormInput, FormInputWithPrefix, FormSelect, FormTextArea }\n\nconst Content = ({ children }: ContentPropTypes): ReactElement => (\n
{children}
\n)\n\nexport const FormContent = memo(Content)\n\nexport const useFormState = ({\n validation,\n}: UseFormStateTypes): UseFormStateReturnTypes => {\n const [isFormDisplayed, setIsFormDisplayed] = useState(true)\n const [touched, setTouched] = useState([])\n const [values, setValues] = useState({})\n const [errors, setErrors] = useState({})\n\n const onFieldValueChange = useCallback(\n (event: FieldEventTypes): void => {\n const { name, value } = event.currentTarget\n const newValues: FieldsObjectTypes = { ...values }\n newValues[name] = value\n const newTouched: string[] = [...touched, name]\n setTouched(newTouched)\n setValues(newValues)\n },\n [touched, values],\n )\n\n useEffect(() => {\n if (!isFormDisplayed) {\n setIsFormDisplayed(true)\n }\n }, [isFormDisplayed])\n\n const onFieldBlur = useCallback(\n (event: FieldEventTypes): void => {\n const { name, value } = event.currentTarget\n const newValues: FieldsObjectTypes = { ...values }\n newValues[name] = value\n\n if (validation) {\n const fieldErrors = validation(newValues)\n\n setErrors(\n touched.reduce((acc: FieldsObjectTypes, val: string) => {\n acc[val] = fieldErrors[val] || ''\n\n return acc\n }, {}),\n )\n }\n\n setValues(newValues)\n },\n [touched, validation, values],\n )\n\n const resetFields = useCallback(() => {\n setIsFormDisplayed(false)\n setValues({})\n }, [])\n\n const validateFields = useCallback(\n (formValues) => {\n if (validation) {\n const fieldErrors = validation(formValues)\n setErrors(fieldErrors)\n setTouched([...touched, ...Object.keys(fieldErrors)])\n\n return fieldErrors\n }\n\n return {}\n },\n [touched, validation],\n )\n\n return {\n isFormDisplayed,\n values,\n errors,\n onFieldValueChange,\n onFieldBlur,\n validateFields,\n resetFields,\n }\n}\n\nconst Form = ({\n display = true,\n action = '',\n method = 'post',\n onSubmit,\n children,\n}: FormPropTypes): ReactElement => {\n const handleSubmit = useCallback(\n (e) => {\n if (method === 'post') {\n e.preventDefault()\n }\n\n if (onSubmit) {\n onSubmit()\n }\n },\n [method, onSubmit],\n )\n\n return (\n \n {!!display && children}\n \n )\n}\n\nexport default memo(Form)\n","module.exports = \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB3aWR0aD0iMTBweCIgaGVpZ2h0PSIxMHB4IiB2aWV3Qm94PSIwIDAgMTAgMTAiIHZlcnNpb249IjEuMSIKICB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiPgogIDxwYXRoIGQ9Ik02LjQzODM1NjE2LDUuMTU5ODE3MzUgQzYuMzQ3MDMxOTYsNS4wNjg0OTMxNSA2LjM0NzAzMTk2LDQuOTMxNTA2ODUgNi40MzgzNTYxNiw0Ljg0MDE4MjY1IEw5Ljg2MzAxMzcsMS40MTU1MjUxMSBDOS45NTQzMzc5LDEuMzI0MjAwOTEgMTAsMS4xODcyMTQ2MSAxMCwxLjA5NTg5MDQxIEMxMCwxLjAwNDU2NjIxIDkuOTU0MzM3OSwwLjg2NzU3OTkwOSA5Ljg2MzAxMzcsMC43NzYyNTU3MDggTDkuMjIzNzQ0MjksMC4xMzY5ODYzMDEgQzkuMTMyNDIwMDksMC4wNDU2NjIxMDA1IDguOTk1NDMzNzksMCA4LjkwNDEwOTU5LDAgQzguNzY3MTIzMjksMCA4LjY3NTc5OTA5LDAuMDQ1NjYyMTAwNSA4LjU4NDQ3NDg5LDAuMTM2OTg2MzAxIEw1LjE1OTgxNzM1LDMuNTYxNjQzODQgQzUuMDY4NDkzMTUsMy42NTI5NjgwNCA0LjkzMTUwNjg1LDMuNjUyOTY4MDQgNC44NDAxODI2NSwzLjU2MTY0Mzg0IEwxLjQxNTUyNTExLDAuMTM2OTg2MzAxIEMxLjMyNDIwMDkxLDAuMDQ1NjYyMTAwNSAxLjE4NzIxNDYxLDAgMS4wOTU4OTA0MSwwIEMxLjAwNDU2NjIxLDAgMC44Njc1Nzk5MDksMC4wNDU2NjIxMDA1IDAuNzc2MjU1NzA4LDAuMTM2OTg2MzAxIEwwLjEzNjk4NjMwMSwwLjc3NjI1NTcwOCBDMC4wNDU2NjIxMDA1LDAuODY3NTc5OTA5IDAsMS4wMDQ1NjYyMSAwLDEuMDk1ODkwNDEgQzAsMS4xODcyMTQ2MSAwLjA0NTY2MjEwMDUsMS4zMjQyMDA5MSAwLjEzNjk4NjMwMSwxLjQxNTUyNTExIEwzLjU2MTY0Mzg0LDQuODQwMTgyNjUgQzMuNjUyOTY4MDQsNC45MzE1MDY4NSAzLjY1Mjk2ODA0LDUuMDY4NDkzMTUgMy41NjE2NDM4NCw1LjE1OTgxNzM1IEwwLjEzNjk4NjMwMSw4LjU4NDQ3NDg5IEMwLjA0NTY2MjEwMDUsOC42NzU3OTkwOSAwLDguODEyNzg1MzkgMCw4LjkwNDEwOTU5IEMwLDguOTk1NDMzNzkgMC4wNDU2NjIxMDA1LDkuMTMyNDIwMDkgMC4xMzY5ODYzMDEsOS4yMjM3NDQyOSBMMC43NzYyNTU3MDgsOS44NjMwMTM3IEMwLjg2NzU3OTkwOSw5Ljk1NDMzNzkgMS4wMDQ1NjYyMSwxMCAxLjA5NTg5MDQxLDEwIEMxLjE4NzIxNDYxLDEwIDEuMzI0MjAwOTEsOS45NTQzMzc5IDEuNDE1NTI1MTEsOS44NjMwMTM3IEw0Ljg0MDE4MjY1LDYuNDM4MzU2MTYgQzQuOTMxNTA2ODUsNi4zNDcwMzE5NiA1LjA2ODQ5MzE1LDYuMzQ3MDMxOTYgNS4xNTk4MTczNSw2LjQzODM1NjE2IEw4LjU4NDQ3NDg5LDkuODYzMDEzNyBDOC42NzU3OTkwOSw5Ljk1NDMzNzkgOC44MTI3ODUzOSwxMCA4LjkwNDEwOTU5LDEwIEM4Ljk5NTQzMzc5LDEwIDkuMTMyNDIwMDksOS45NTQzMzc5IDkuMjIzNzQ0MjksOS44NjMwMTM3IEw5Ljg2MzAxMzcsOS4yMjM3NDQyOSBDOS45NTQzMzc5LDkuMTMyNDIwMDkgMTAsOC45OTU0MzM3OSAxMCw4LjkwNDEwOTU5IEMxMCw4LjgxMjc4NTM5IDkuOTU0MzM3OSw4LjY3NTc5OTA5IDkuODYzMDEzNyw4LjU4NDQ3NDg5IEw2LjQzODM1NjE2LDUuMTU5ODE3MzUgWiIgaWQ9IlNoYXBlIiBmaWxsPSIjRkZGRkZGIiBmaWxsLXJ1bGU9Im5vbnplcm8iPjwvcGF0aD4KPC9zdmc+\""],"sourceRoot":""}