diff --git a/.env.example b/.env.example new file mode 100644 index 0000000..68ed7e3 Binary files /dev/null and b/.env.example differ diff --git a/.gitignore b/.gitignore index 8bf7970..df81756 100644 --- a/.gitignore +++ b/.gitignore @@ -963,9 +963,23 @@ app.*.symbols !/packages/flutter_tools/test/data/dart_dependencies_test/**/.packages !/dev/ci/**/Gemfile.lock -#Storage files -storage/ +# Storage files +storage/documents/* +storage/transcriptionSummaries/* +storage/transcripts/* +storage/video/* +# The inverse for the .gitkeep files, to make sure the folders are there but not the local files +!storage/documents/.gitkeep +!storage/transcriptionSummaries/.gitkeep +!storage/transcripts/.gitkeep +!storage/video/.gitkeep *.mp4 +*.webm +*.mp3 +*.mov *.wav *.flac + + +!testvideo.mp4 diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 5bebd17..b713866 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1,33 +1,28 @@ -workflow: - rules: - # Run the pipeline for merge requests or when committing to a branch - - if: $CI_PIPELINE_SOURCE == "merge_request_event" - - if: $CI_COMMIT_BRANCH - -image: python:3.14.0 +image: node:latest stages: - - setup + # - install - test -setup_environment: - stage: setup - script: - - pip install --upgrade pip - - pip install -r requirements.txt - - echo "Dependencies installed successfully." +# job-install: +# stage: install +# script: +# - npm install +# artifacts: +# untracked: false +# when: on_success +# access: all +# expire_in: "30 days" +# paths: +# - node_modules - only: - - main - - feature/ci-pipeline-s1-09a-1 # You can add more branches if needed -test_app: + +job-test: stage: test script: - - echo "Running V2D Framework basic test..." - - python -m unittest discover || echo "No tests found." - - only: - - main - - feature/ci-pipeline-s1-09a-1 - + - npm install + - echo "ASSEMBLYAI_API_KEY=$apikey_assembly" > .env + - echo "GOOGLE_API_KEY=$apikey_gemini" >> .env + - echo "SAIA_API_KEY=$apikey_saia" >> .env + - npm test \ No newline at end of file diff --git a/electron/main/index.html b/electron/main/index.html index f88b4c2..2974b34 100644 --- a/electron/main/index.html +++ b/electron/main/index.html @@ -7,46 +7,156 @@ + +
+
+ +
+ +

Video to document

+
+ +
+
1. Step
+
2. Step
+
3. Step
+
4. Step
+
5. Step
+
6. Step
+
-
-
- - - +
+ + +
+ +
+
+

Drag and drop video file

+ +
No video chosen
+
+ +
+ + +
+
+ + + + + + + + + +
-

Video to document

+ -
-

Drag and drop video file

-
No video chosen
-
- - - - -
- -
- - -
- -
- - -
- - -
-
- 0% -
-
- - - + + + \ No newline at end of file diff --git a/electron/main/languages.js b/electron/main/languages.js new file mode 100644 index 0000000..271c3aa --- /dev/null +++ b/electron/main/languages.js @@ -0,0 +1,48 @@ +var languageOptions = { + "eng":{ + "flagPath": "flags/united-kingdom-flag-png-large.jpg", + "labelKI": "Select ki:", + "labelTranscription": "Select transcription:", + "labelLanguage": "Select language:", + "title": "Video to document", + "h1": "Video to document", + "p1": "Drag and drop video file", + "fileName": "No video chosen", + "manualUploadBtn": "Search video", + "checkbox_group": "Choose prefered document style:", + "label_format": "Meeting report", + "label_summary": "Summary with timestamps", + "submitButton": "Submit" + }, + "de":{ + "flagPath": "flags/germany-flag-png-large.jpg", + "labelKI": "Waehle KI:", + "labelTranscription": "Waehle Transkription:", + "labelLanguage": "Waehle Sprache:", + "title": "Video zu Dokument", + "h1": "Video zu Dokument", + "p1": "Video per Drag & Drop ablegen", + "fileName": "Kein Video ausgewaehlt", + "manualUploadBtn": "Video suchen", + "checkbox_group": "Bevorzugte Dokumentvarianten:", + "label_format": "Meeting Bericht", + "label_summary": "Zusammenfassung mit Zeitstempeln", + "submitButton": "Absenden" + }, + "in":{ + "flagPath": "flags/india-flag-png-large.png", + "labelKI": "की का चयन करें:", + "labelTranscription": "प्रतिलेखन चुनें:", + "labelLanguage": "भाषा चुने:", + "title": "दस्तावेज़ के लिए वीडियो", + "h1": "दस्तावेज़ के लिए वीडियो", + "p1": "वीडियो फ़ाइल खींचें और छोड़ें", + "fileName": "कोई वीडियो नहीं चुना गया", + "manualUploadBtn": "वीडियो खोजें", + "checkbox_group": "पसंदीदा दस्तावेज़ शैली चुनें:", + "label_format": "बैठक रिपोर्ट", + "label_summary": "टाइमस्टैम्प के साथ सारांश", + "submitButton": "जमा करना" + } + +}; \ No newline at end of file diff --git a/electron/main/preload.js b/electron/main/preload.js index ec7ff05..26aa314 100644 --- a/electron/main/preload.js +++ b/electron/main/preload.js @@ -1,18 +1,37 @@ - - const { contextBridge, ipcRenderer, webUtils } = require('electron') try { contextBridge.exposeInMainWorld("explorer", { onFileDrop: (file) => webUtils.getPathForFile(file) }) - contextBridge.exposeInMainWorld("extractor", { - extract: (file) => ipcRenderer.send("extract", file) + contextBridge.exposeInMainWorld("submit", { + submit: (meeting_specifications) => {ipcRenderer.send("file_submit", meeting_specifications)} }) contextBridge.exposeInMainWorld("electronAPI", { getFilePath: (file) => {return webUtils.getPathForFile(file)} }) + + contextBridge.exposeInMainWorld("onStartup", { + getModuleNames: () => ipcRenderer.invoke('get-module-names') + }) + + contextBridge.exposeInMainWorld('electron', { + progress: (callback) => ipcRenderer.on('progress', callback) + }) + + contextBridge.exposeInMainWorld('audios', { + speakerAudios: (callback) => ipcRenderer.on('speakerAudios', callback) + }) + contextBridge.exposeInMainWorld("submitSpeaker", { + submitSpeaker: (speaker_names) => {ipcRenderer.send("speaker_submit", speaker_names)} + }) + + contextBridge.exposeInMainWorld("download", { + file_download: () => {ipcRenderer.send("file_download")} + }) + + + ipcRenderer.on("error", (event, err) => {alert(err)}) } catch (error) { console.log("Error in preload.js"); } - diff --git a/electron/main/renderer.js b/electron/main/renderer.js index ad684ef..dcfe3ab 100644 --- a/electron/main/renderer.js +++ b/electron/main/renderer.js @@ -16,16 +16,228 @@ uploadContainer.addEventListener("drop", (e) => { e.preventDefault() const files = e.dataTransfer.files const filePath = window.explorer.onFileDrop(files[0]) - var holdy = filePath + ""; - if(holdy.endsWith(".mp4") || holdy.endsWith(".mov") || holdy.endsWith(".avi") || holdy.endsWith( ".mkv")){ - console.log(filePath) - + const testEndings = [".mp4", ".mov", ".avi", ".mkv"]; + var pathToLower = filePath.toLowerCase(); + if(testEndings.some(e => pathToLower.endsWith(e))){ + document.getElementById("progressbar").style.visibility = "visible"; const files1 = e.dataTransfer.files; handleFiles(files1); + }else{ + alert('The given file is not compatible. These are the available types: [".mp4", ".mov", ".avi", ".mkv"].'); } + } catch (error) { console.log("Error in renderer.js with the listerner for the drop function"); + } +}) + +window.addEventListener('load', async (e) => { + try { + loadLanguageOptions(); + const value = await window.onStartup.getModuleNames(); + loadAiOptions(value.ai_modules); + loadTranscriptionOptions(value.transcription_modules); + + } catch (error) { + + } + +}); + +language_option.addEventListener('change', (e)=>{ + try { + const select = document.getElementById('language_option'); + changeLanguage(select.value); + } catch (error) { + } +}); + +//listener for the file explorer search when something got selected +videoUpload.addEventListener("change", () => { + try { + if (videoUpload.files.length > 0) { + const file = videoUpload.files; + handleFiles(file); + } + } catch (error) { + console.log(error); + } +}); + +//listener for the file explorer search +manualUploadBtn.addEventListener('click', () => { + try { + videoUpload.click(); + } catch (error) { + console.log("Error in manualBtn EventListener click"); + console.log(error); + } + +}); + +stepButtons.forEach(btn => { + btn.addEventListener("click", () => { + try { + const step = parseInt(btn.dataset.step); + showStep(step); + } catch (error) { + + } + }); +}); + +prevBtn.addEventListener("click", () => { + try { + if (currentStep > 1) showStep(currentStep - 1); + } catch (error) { -}) \ No newline at end of file + } +}); + +nextBtn.addEventListener("click", () => { + try { + if(currentStep < totalSteps) showStep(currentStep + 1); + } catch (error) { + + } +}); + +//Checkboxlistener so that only one can be selected at a time +docFormat.addEventListener("change", (e) =>{ + try { + if(docFormat.checked){ + docFormatSummary1.checked = false; + docFormatSummary2.checked = false; + docFormatSummary3.checked = false; + docFormatCustom.checked = false; + } + } catch (error) { + + } +}); +docFormatSummary1.addEventListener("change", (e) =>{ + try { + if(docFormatSummary1.checked){ + docFormat.checked = false; + docFormatSummary2.checked = false; + docFormatSummary3.checked = false; + docFormatCustom.checked = false; + } + } catch (error) { + + } +}); +docFormatSummary2.addEventListener("change", (e) =>{ + try { + if(docFormatSummary2.checked){ + docFormatSummary1.checked = false; + docFormat.checked = false; + docFormatSummary3.checked = false; + docFormatCustom.checked = false; + } + } catch (error) { + + } +}); +docFormatSummary3.addEventListener("change", (e) =>{ + try { + if(docFormatSummary3.checked){ + docFormatSummary1.checked = false; + docFormatSummary2.checked = false; + docFormat.checked = false; + docFormatCustom.checked = false; + } + } catch (error) { + + } +}); +docFormatCustom.addEventListener("change", (e) =>{ + try { + if(docFormatCustom.checked){ + docFormatSummary1.checked = false; + docFormatSummary2.checked = false; + docFormatSummary3.checked = false; + docFormat.checked = false; + } + } catch (error) { + + } +}); + +//Speaker change listener +cur_speaker.addEventListener("change", (e) =>{ + try { + document.getElementById("speakerAudioViewer").src = valy[e.target.value].source; + } catch (error) { + + } +}); + +window.audios.speakerAudios((event, arg) => { + loadSpeakerOptions(arg); + setSpeakerAudiosValue(arg); +}); + +window.electron.progress((event, arg) => { + if(arg.curstep == 1){ + setCircleOne(); + }else if(arg.curstep == 2){ + setCircleZwo(); + } else if(arg.curstep == 3){ + setCircleThree(); + }else if(arg.curstep == 4){ + setCircleFour(); + } +}); + +function setCircleOne(){ + try { + if(document.getElementById("box1").style.backgroundColor == "green"){ + document.getElementById("box1").style.backgroundColor = "red"; + }else{ + document.getElementById("box1").style.backgroundColor = "green"; + } + } catch (error) { + } + +}; +function setCircleZwo(){ + try { + if(document.getElementById("box2").style.backgroundColor == "green"){ + document.getElementById("box2").style.backgroundColor = "red"; + }else{ + document.getElementById("box2").style.backgroundColor = "green"; + } + } catch (error) { + + } + +}; +function setCircleThree(){ + try { + if(document.getElementById("box3").style.backgroundColor == "green"){ + document.getElementById("box3").style.backgroundColor = "red"; + }else{ + document.getElementById("box3").style.backgroundColor = "green"; + } + } catch (error) { + + } + +}; +function setCircleFour(){ + try { + if(document.getElementById("box4").style.backgroundColor == "green"){ + document.getElementById("box4").style.backgroundColor = "red"; + }else{ + document.getElementById("box4").style.backgroundColor = "green"; + } + } catch (error) { + + } +}; + + + diff --git a/electron/main/script.js b/electron/main/script.js index b947cdb..d2c5189 100644 --- a/electron/main/script.js +++ b/electron/main/script.js @@ -1,90 +1,102 @@ - -//listener for the file explorer search -manualUploadBtn.addEventListener('click', () => { - try { - videoUpload.click(); - } catch (error) { - console.log("Error in manualBtn EventListener click"); - } - -}); - +let currentVideoPath = null; //function to check if one checkbox is at least klicked function checkBoxes() { try { const checkboxes = document.querySelectorAll('input[name="docFormat"]'); let isChecked = false; - + var checkedCounter = 0; checkboxes.forEach(function(checkbox){ if(checkbox.checked){ isChecked = true; + checkedCounter++; } }); - if(isChecked){ + if (isChecked) { //Code to submit the video + var selectedCheckboxes = {}; + checkboxes.forEach(function(checkbox){ + if(checkbox.checked){ + selectedCheckboxes[checkbox.nextElementSibling.textContent] = ""; + } + }); + + const testEndings = [".mp4", ".mov", ".avi", ".mkv"]; var pathTest = window.electronAPI.getFilePath(videoUpload.files[0]); - if(pathTest.endsWith(".mp4") || holdy.endsWith(".mov") || holdy.endsWith(".avi") || holdy.endsWith( ".mkv")){ - window.extractor.extract({inputVideoPath: pathTest, outputType:"wav"}) + var pathToLower = pathTest.toLowerCase(); + if(testEndings.some(e => pathToLower.endsWith(e))){ + //assembly of the json for the main + + var typeCheckbox; + if(document.getElementById("docFormat").checked) typeCheckbox = document.getElementById("docFormat").value; + if(document.getElementById("docFormatSummary1").checked) typeCheckbox = document.getElementById("docFormatSummary1").value; + if(document.getElementById("docFormatSummary2").checked) typeCheckbox = document.getElementById("docFormatSummary2").value; + if(document.getElementById("docFormatSummary3").checked) typeCheckbox = document.getElementById("docFormatSummary3").value; + if(document.getElementById("docFormatCustom").checked) typeCheckbox = document.getElementById("docFormatCustom").value; + + document.getElementById("testy").style.visibility = "visible" + document.getElementById("box1").style.backgroundColor = "red"; + document.getElementById("box2").style.backgroundColor = "red"; + document.getElementById("box3").style.backgroundColor = "red"; + document.getElementById("box4").style.backgroundColor = "red"; + console.log(selectedCheckboxes); + const outputType = document.getElementById("output_type"); + const transcriptionType = document.getElementById("transkript_type"); + const aiType = document.getElementById("ai_type"); + const sendingPackage = { + "video": { + "module":"extraction-video-to-audio", + "inputVideoPath": pathTest + }, + "transcription": { + "module": transcriptionType.value + }, + "document": { + "module":aiType.value, + "type": typeCheckbox, + "outputType": outputType.value + } + }; + window.submit.submit(sendingPackage) + }else{ + alert('The given file is not compatible. These are the available types: [".mp4", ".mov", ".avi", ".mkv"].'); } + + } else { //language only english at the moment alert('Please select at least one document type.'); } } catch (error) { - console.log(error) + console.log("Error in script.js checkBoxes function"); + console.log(error); } -// mapFunctions.get("extraction-video-to-audio").function({inputVideoPath:"./a.mp4", outputType:"wav"}) } //language changing feature function changeLanguage(language) { - if (language === 'en') { - document.getElementById('title').textContent = 'Video to document'; - document.getElementById('h1').textContent = 'Video to document'; - document.getElementById('p1').textContent = 'Drag and drop video file'; - document.getElementById('fileName').textContent = 'No video chosen'; - document.getElementById('manualUploadBtn').textContent = 'Search video'; - document.getElementById('checkbox_group').textContent = 'Choose prefered document style:'; - document.getElementById('label_format').textContent = 'Meeting report'; - document.getElementById('label_summary').textContent = 'Summary with timestamps'; - document.getElementById('submitButton').textContent = 'Submit'; - } else if (language === 'de') { - document.getElementById('title').textContent = 'Video zu Dokument'; - document.getElementById('h1').textContent = 'Video zu Dokument'; - document.getElementById('p1').textContent = 'Video per Drag & Drop ablegen'; - document.getElementById('fileName').textContent = 'Kein Video ausgewaehlt'; - document.getElementById('manualUploadBtn').textContent = 'Video suchen'; - document.getElementById('checkbox_group').textContent = 'Bevorzugte Dokumentvarianten:'; - document.getElementById('label_format').textContent = 'Meeting Bericht'; - document.getElementById('label_summary').textContent = 'Zusammenfassung mit Zeitstempeln'; - document.getElementById('submitButton').textContent = 'Absenden'; - } else if(language == "in") { - document.getElementById('title').textContent = 'दस्तावेज़ के लिए वीडियो'; - document.getElementById('h1').textContent = 'दस्तावेज़ के लिए वीडियो'; - document.getElementById('p1').textContent = 'वीडियो फ़ाइल खींचें और छोड़ें'; - document.getElementById('fileName').textContent = 'कोई वीडियो नहीं चुना गया'; - document.getElementById('manualUploadBtn').textContent = 'वीडियो खोजें'; - document.getElementById('checkbox_group').textContent = 'पसंदीदा दस्तावेज़ शैली चुनें:'; - document.getElementById('label_format').textContent = 'बैठक रिपोर्ट'; - document.getElementById('label_summary').textContent = 'टाइमस्टैम्प के साथ सारांश'; - document.getElementById('submitButton').textContent = 'जमा करना'; - } -} - - -//listener for the file explorer search when something got selected -videoUpload.addEventListener('change', () => { try { - handleFiles(videoUpload.files); + document.getElementById('labelLanguageFlag').src = languageOptions[language].flagPath; + document.getElementById('labelKI').textContent = languageOptions[language].labelKI; + document.getElementById('labelTranscription').textContent = languageOptions[language].labelTranscription; + document.getElementById('labelLanguage').textContent = languageOptions[language].labelLanguage; + document.getElementById('title').textContent = languageOptions[language].title; + document.getElementById('h1').textContent = languageOptions[language].h1; + document.getElementById('p1').textContent = languageOptions[language].p1; + document.getElementById('fileName').textContent = languageOptions[language].fileName; + document.getElementById('manualUploadBtn').textContent = languageOptions[language].manualUploadBtn; + document.getElementById('checkbox_group').textContent = languageOptions[language].checkbox_group; + document.getElementById('label_format').textContent = languageOptions[language].label_format; + document.getElementById('label_summary').textContent = languageOptions[language].label_summary; + document.getElementById('submitButton').textContent = languageOptions[language].submitButton; + } catch (error) { - console.log("Error in manualBtn EventListener change"); + console.log("Error in script.js changeLanguage function"); + console.log(error); } - -}); - - + +} //function to display the file path in the drop down box function handleFiles(files) { @@ -92,24 +104,236 @@ function handleFiles(files) { if (files.length > 0) { const file = files[0]; if (file.type.startsWith('video/')) { + const filePath = window.explorer.onFileDrop(files[0]) videoUpload.files = files; fileName.textContent = `Chosen video: ${file.name}`; + currentVideoPath = filePath; + generateThumbnail(filePath); + activateSubmitBtn(true); } } } catch (error) { console.log("Error in script.js handleFiles function"); + console.log(error); } - + } //function to regulate the progress on the progressbar -function updateProgressBar(bar, value){ +function updateProgressBar(bar, value) { try { value = Math.round(value); bar.querySelector(".progress_fill").style.width = `${value}%`; bar.querySelector(".progress_text").textContent = `${value}%`; } catch (error) { console.log("Error in scripts.js updateProgressBar function"); + console.log(error); } -} \ No newline at end of file +} + +//function to load ai options to the drop down list +function loadAiOptions(options){ + try { + var menu = document.getElementById('ai_type'); + var object_holdy; + var choice ; + object_holdy = options + for(i = 0; i < options.length; i++){ + choice = document.createElement('option'); + choice.textContent = object_holdy[i].displayname; + choice.value = object_holdy[i].name; + menu.appendChild(choice); + } + } catch (error) { + console.log("Error in script.js loadAiOptions function"); + console.log(error); + } +} + +//function to load transcription options to the drop down list +function loadTranscriptionOptions(options){ + try { + var menu = document.getElementById('transkript_type'); + var object_holdy; + var choice ; + object_holdy = options + for(i = 0; i < options.length; i++){ + choice = document.createElement('option'); + choice.textContent = object_holdy[i].displayname; + choice.value = object_holdy[i].name; + menu.appendChild(choice); + } + } catch (error) { + console.log("Error in script.js function loadTranscriptionOptions"); + console.log(error); + } +} + +//function to load data type options to the drop down list +function loadDataTypeOptions(options){ + try { + var menu = document.getElementById('output_type'); + var object_holdy; + var choice ; + object_holdy = options + for(i = 0; i < options.length; i++){ + choice = document.createElement('option'); + choice.textContent = object_holdy[i].displayname; + choice.value = object_holdy[i].name; + menu.appendChild(choice); + } + } catch (error) { + console.log("Error in script.js function loadDataTypeOptions"); + console.log(error); + } +} + +//function to load language options to the drop down list +function loadLanguageOptions(){ + try { + var menu = document.getElementById('language_option'); + var object_holdy; + var choice ; + object_holdy = Object.keys(languageOptions); + for(i = 0; i < object_holdy.length; i++){ + choice = document.createElement('option'); + choice.textContent = object_holdy[i]; + choice.value = object_holdy[i]; + menu.appendChild(choice); + } + } catch (error) { + console.log("Error in script.js loadLanguageOptions function"); + console.log(error); + } +} + +//function to load speaker options to the drop down list +function loadSpeakerOptions(options){ + try { + var menu = document.getElementById('cur_speaker'); + var l = document.getElementById("cur_speaker").options.length -1; + for(i = l; i >= 0; i--){ + menu.remove(i); + } + var object_holdy; + var choice; + object_holdy = Object.keys(options); + for(i = 0; i < object_holdy.length; i++){ + choice = document.createElement('option'); + choice.textContent = options[object_holdy[i]].name; + choice.value = options[object_holdy[i]].name; + menu.appendChild(choice); + } + } catch (error) { + console.log("Error in script.js loadSpeakerOptions function"); + console.log(error); + } +} + +//function to load speaker audio file options to the drop down list +function loadSpeakerAudio(option){ + try { + var menu = document.getElementById('speakerAudioViewer'); + var aud = document.createElement("source"); + aud.src = options; + menu.appendChild(aud); + } catch (error) { + console.log("Error in script.js loadSpeakerAudio function"); + console.log(error); + } +} + + +function activateSubmitBtn(hasFile){ + try { + document.getElementById("submitButton").disabled = !hasFile; + } catch (error) { + console.log(error); + } +} + +function deaktivateProgressbar(){ + try { + document.getElementById("progressbar").style.visibility = "hidden"; + } catch (error) { + console.log(error); + } +} + +//Video thumbnail generation +function generateThumbnail(path){ + const videoElement = document.getElementById("previewThumbnail"); + while (videoElement.firstChild) videoElement.removeChild(videoElement.firstChild); + videoElement.src = path; + videoElement.type = "video/mov"; + videoElement.load(); + videoElement.style.maxWidth = 40; + videoElement.style.maxHeight = 40; + videoElement.autoplay = false; +} + +//Step-navigation +const steps = document.querySelectorAll(".step"); +const stepButtons = document.querySelectorAll(".step-item"); +let currentStep = 1; +const totalSteps = steps.length; + +function showStep(stepNumber) { + if (stepNumber < 1 || stepNumber > totalSteps){ + console.error("StepNumber out of Bounds", stepNumber); + return; + } + steps.forEach(step => step.style.display = "none"); + document.getElementById("step" + stepNumber).style.display = "block"; + + stepButtons.forEach(btn => btn.classList.remove("active")); + document.querySelector(`.step-item[data-step="${stepNumber}"]`).classList.add("active"); + const activeBtn = document.querySelector(`.step-item[data-step="${stepNumber}"]`); + + if(activeBtn) activeBtn.classList.add("active"); + + prevBtn.disabled = stepNumber == 1; + nextBtn.disabled = stepNumber === totalSteps; + currentStep = stepNumber; +} + + +//Audio value setter +var speakerAudios = {}; +var speakerEndValues = {}; +function setSpeakerAudiosValue(valy){ + try { + speakerAudios = valy; + speakerRewriten = valy; + document.getElementById("speakerAudioViewer").src = valy.speakerA.src; + } catch (error) { + + } +} + +function rewriteSpeakerName(){ + try { + var tempy = document.getElementById("cur_speaker").value; + speakerAudios[tempy].name = document.getElementById("newSpeaker").value; + setSpeakerAudiosValue(speakerAudios); + } catch (error) { + + } +} + +function sendSpeakerPackages(){ + try { + window.sendSpeakerPackages(speakerAudios); + } catch (error) { + + } +} + +function fileDownload() { + try { + window.download.file_download(); + } catch (error) { + console.error("Download failed:", error); + } +} diff --git a/electron/main/style.css b/electron/main/style.css index e9abb50..20519bd 100644 --- a/electron/main/style.css +++ b/electron/main/style.css @@ -5,11 +5,33 @@ body { justify-content: center; align-items: center; height: 100vh; - background-color: #555; - gap: 15px; + background-color: #f2f3f4; + gap: 10px; margin: 0; } + +#h1 { + position: absolute; + left: 50%; + top: 50%; + transform: translate(-50%, -50%); + margin: 0; + z-index: 20; +} + +#h1-wrapper { + position: relative; + font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; + width: 770px; + height: 60px; + background-color: #FFF; + box-shadow: 0px 4px 10px rgba(0,0,0,0.1); + border-radius: 5px; + margin-bottom: 10px; + display: flex; + align-items: center; +} .upload-container { background: white; @@ -17,34 +39,59 @@ body { border-radius: 12px; box-shadow: 0 4px 10px rgba(0,0,0,0.1); text-align: center; - width: 400px; + width: 350px; + height: 200px; transition: border 0.3s, background-color 0.3s; - border: 2px dashed #ccc; + border: 2px dashed #7378c9; } - - + + .upload-container.dragover { border-color: #007BFF; background-color: #eaf0ff; } - - + + .upload-container p { margin: 0 0 15px 0; font-size: 16px; color: #555; } - - + + .file-name { margin-top: 10px; font-size: 14px; color: #333; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +#thumbnailContainer { + width: 100%; + display: flex; + justify-content: center; + margin-bottom: 15px; +} + +#thumbnailImage { + width: 200px; + height: auto; + border-radius: 10px; + box-shadow: 0px 4px 10px rgba(0,0,0,0.1); + object-fit: cover; } - +#previewThumbnail { + width: 150px; + height: 100px; + /*border: 1px dashed black;*/ +} + .custom-btn { padding: 10px 20px; + margin-top: 10px; background-color: #007BFF; color: white; border: none; @@ -52,38 +99,89 @@ body { cursor: pointer; font-size: 14px; } - - + + .custom-btn:hover { background-color: #0056b3; } - + .submit-btn:hover { background-color: #0056b3; } - + input[type="file"] { display: none; } + +.checkbox-group { + --borderColor: #007bfff5; + --borderWidth: .125em; + } + + .checkbox-group input[type=checkbox] { + -webkit-appearance: none; + appearance: none; + vertical-align: middle; + background: #fff; + font-size: 1.8em; + border-radius: 0.125em; + display: inline-block; + border: var(--borderWidth) solid var(--borderColor); + width: 1em; + height: 1em; + position: relative; + } + .checkbox-group input[type=checkbox]:before, + .checkbox-group input[type=checkbox]:after { + content: ""; + position: absolute; + background: var(--borderColor); + width: calc(var(--borderWidth) * 3); + height: var(--borderWidth); + top: 50%; + left: 10%; + transform-origin: left center; + } + .checkbox-group input[type=checkbox]:before { + transform: rotate(45deg) translate(calc(var(--borderWidth) / -2), calc(var(--borderWidth) / -2)) scaleX(0); + transition: transform 200ms ease-in 200ms; + } + .checkbox-group input[type=checkbox]:after { + width: calc(var(--borderWidth) * 5); + transform: rotate(-45deg) translateY(calc(var(--borderWidth) * 2)) scaleX(0); + transform-origin: left center; + transition: transform 200ms ease-in; + } + .checkbox-group input[type=checkbox]:checked:before { + transform: rotate(45deg) translate(calc(var(--borderWidth) / -2), calc(var(--borderWidth) / -2)) scaleX(1); + transition: transform 200ms ease-in; + } + .checkbox-group input[type=checkbox]:checked:after { + width: calc(var(--borderWidth) * 5); + transform: rotate(-45deg) translateY(calc(var(--borderWidth) * 2)) scaleX(1); + transition: transform 200ms ease-out 200ms; + } + .checkbox-group input[type=checkbox]:focus { + outline: calc(var(--borderWidth) / 2) dotted rgba(0, 0, 0, 0.25); + } .checkbox-container{ -margin-top: 8px; -display: flex; -align-items: center; -gap: 5px; + margin-top: 8px; + display: flex; + justify-items: left; + align-items: center; + gap: 5px; } -.checkbox-group { - margin-top: 15px; - margin-bottom: 15px; - display: flex; - flex-direction: column; - gap: 10px; - align-items: flex-start; -} .submit-btn { + display: flex; + justify-content: center; + align-items: center; padding: 10px 20px; + margin-left: 300px; + margin-top: 30px; + margin-bottom: 70px; background-color: #007BFF; color: white; border: none; @@ -91,40 +189,46 @@ gap: 5px; cursor: pointer; font-size: 14px; } - + +.submit-btn:disabled { + opacity: 0.5; + cursor: not-allowed; + pointer-events: none; +} + .mitte { - background-color: #f2f3f4; + background-color: #FFF; display: flex; + width: 700px; flex-direction: column; align-items: center; - padding: 5% 50px; - margin-top: 20px; + padding: 40px; gap: 10px; - border: 1px; + border: 0px; border-color: black; border-style: solid; + border-radius: 6px; + box-shadow: 0px 4px 10px rgba(0,0,0,0.1); } - -h1 { - align-content: center; -} - + .progressbar{ position: relative; width: 210px; height: 30px; + margin: 50px 20px 5px 20px; background: rgb(42, 46, 78); border-radius: 5px; overflow: hidden; + visibility: hidden; } - + .progress_fill{ width: 0%; height: 100%; background: green; transition: all 0.2s; } - + .progress_text{ position: absolute; top: 50%; @@ -133,15 +237,247 @@ h1 { color: white; } -.flagsBtns { + +.dropdownMenus { display: flex; - justify-content: flex-end; + justify-content: center; + margin-top: 1px; + margin-bottom: 30px; + gap: 170px; + padding: 2px 10px 2px 10px; } -.de_Btn, .eng_Btn, .in_Btn { - padding: 8px 16px; +#ai_type, #transkript_type, #language_option { + padding: 3px; +} + +.labelDiv { + gap: 60px; + display: flex; + justify-content: center; + overflow-wrap:inherit; + padding-bottom: 20px; + margin-top: 40px; + margin-bottom: 10px; +} + +/*Step bar*/ +.step-nav { + display: flex; + gap: 20px; + justify-content: center; + background: #fff; + padding: 10px 30px; + border-radius: 6px; + box-shadow: 0 4px 10px rgba(0,0,0,0.1); +} + +.step-item { + padding: 10px 25px; + border-radius: 8px; + background: #eee; + cursor: pointer; + font-weight: bold; + transition: 0.2s; +} + +.step-item.active { + background: #007BFF; + color: white; +} + +.step-item:hover { + background: #d9d9d9; +} + +/*panels*/ +.step { + margin-top: 70px; + display: flex; + flex-direction: column; + justify-content: center; + min-height: 400px; +} + +/*Navigation arrows*/ +.step-nav-arrows { + display: flex; + justify-content: space-between; + align-items: center; +} + +.middle-container-wrapper { + display: flex; + align-items: center; + justify-content: center; + gap: 30px; + width: max-content; + height: auto; +} + +.navBtn { + display: flex; + justify-content: center; + padding: 10px 25px; + background-color: #007BFF; color: white; border: none; border-radius: 8px; cursor: pointer; + font-size: 14px; +} + +.navBtn:disabled { + background-color: #ccc; + cursor: not-allowed; +} + +.testy{ + background-color: #FFF; + display: flex; + width: auto; + flex-direction: row; + align-items: center; + margin-top: 20px; + gap: 10px; + border: 0px; + border-color: black; + border-style: solid; + border-radius: 6px; + visibility: hidden; +} + +.box2 { + background-color: red; + width: 40px; + height: 40px; + padding: 5px; + border: 1px solid black; + margin: 5px; + border-radius: 100px; +} + +li { + color: #FFF; +} + +.p-menu1 { + margin-left: 20px; + z-index: 10; +} + +.hamburger1 { + height: 45px; + margin: 0; + padding-top: 8px; + display: grid; + grid-template-rows: repeat(3, 1fr); + justify-items: center; + z-index: 120; +} + +.hamburger1 div { + background-color: rgb(61, 61, 61); + position: relative; + width: 40px; + height: 5px; + margin-top: 0; + -webkit-transition: all 0.2s ease-in-out; + transition: all 0.2s ease-in-out; +} + +#toggle1 { + display: none; +} + +#toggle1:checked + .hamburger1 .top { + -webkit-transform: rotate(-45deg); + transform: rotate(-45deg); + margin-top: 22.5px; +} + +#toggle1:checked + .hamburger1 .meat { + -webkit-transform: rotate(45deg); + transform: rotate(45deg); + margin-top: -5px; +} + +#toggle1:checked + .hamburger1 .bottom { + -webkit-transform: scale(0); + transform: scale(0); +} + +#toggle1:checked ~ .menu1 { + height: 150px; + width: 300px; +} + +/* Menu */ +.menu1 { + position: absolute; + top: 55px; + left: 20px; + width: 240px; + border-radius: 5px; + background-color: #1C3B69; + margin: 0; + display: grid; + grid-template-rows: 1fr repeat(4, 0.5fr); + grid-row-gap: 25px; + padding: 0; + list-style: none; + clear: both; + width: auto; + text-align: center; + height: 0px; + overflow: hidden; + transition: height 0.3s ease, width 0.3s ease; + z-index: 9999; + -webkit-transition: all 0.3s ease; +} + +.menu1 a:first-child { + margin-top: 30px; +} + +.menu1 a:last-child { + margin-bottom: 30px; +} + +.li1 { + color: #fff; + width: 100%; + margin: 0; + padding: 10px 0px; + font: 700 20px 'Oswald', sans-serif; + text-decoration: none; +} + +.li1:hover { + background-color: #FFF; + color: rgb(61, 61, 61); + box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1); + -webkit-transition: all 0.3s ease; + transition: all 0.3s ease; +} + +#step2, #step3, #step5 { + font-size: larger; +} + +.download-btn { + display: flex; + align-items: center; + justify-content: center; + padding: 10px 20px; + margin-left: auto; + margin-right: 0px; + margin-top: 130px; + margin-bottom: 10px; + background-color: #007BFF; + color: white; + border: none; + border-radius: 8px; + cursor: pointer; + font-size: 14px; } \ No newline at end of file diff --git a/main.js b/main.js index 1482f06..ac2a135 100644 --- a/main.js +++ b/main.js @@ -35,6 +35,8 @@ console.log("------------------------------------------------------------------- + + // --------------------------------------------------------- CLI COMMANDS --------------------------------------------------------- // const rl = readline.createInterface({ @@ -58,22 +60,199 @@ rl.on("line", data =>{ let mainWindow; function createWindow() { - mainWindow = new electron.BrowserWindow({ - width: 800, - height: 600, - webPreferences: { - nodeIntegration: false, - contextIsolation: true, - preload: `${mainDir}/electron/main/preload.js` - } - }); + mainWindow = new electron.BrowserWindow({ + width: 1200, + height: 800, + webPreferences: { + nodeIntegration: false, + contextIsolation: true, + preload: `${mainDir}/electron/main/preload.js` + } + }); - mainWindow.loadFile('./electron/main/index.html'); + mainWindow.loadFile('./electron/main/index.html'); } electron.app.whenReady().then(createWindow); -electron.ipcMain.on("extract", (event, args) => { - mapFunctions.get("extraction-video-to-audio").function(args) -}) \ No newline at end of file +// electron.ipcMain.on("extract", (event, args) => { +// mapFunctions.get("extraction-video-to-audio").function(args) +// }) + +// setTimeout(() => { +// mainWindow.webContents.send("fuck", "worked uwu") +// }, 5000); + +electron.ipcMain.handle('get-module-names', async () => { + let module_array = { + "ai_modules":[], + "transcription_modules":[] + } + mapFunctions.forEach(e => { + switch(e.type){ + case "llm": + module_array.ai_modules.push({"name": e.name, "displayname": e.displayname}) + break; + case "transcription": + module_array.transcription_modules.push({"name": e.name, "displayname": e.displayname}) + break; + } + }) + // console.log(module_array); + return module_array +}); + + +// electron.ipcMain.on("get_modules", async (event, args) => { +// let module_array = { +// "ai_modules":[], +// "transcription_modules":[] +// } +// mapFunctions.forEach(e => { +// switch(e.type){ +// case "llm": +// module_array.ai_modules.push({"name": e.name, "displayname": e.displayname}) +// break; +// case "transcription": +// module_array.transcription_modules.push({"name": e.name, "displayname": e.displayname}) +// break; +// } +// }) +// console.log(module_array); + +// mainWindow.webContents.send("modules", module_array) +// }) + +var globalArgs = {} +var globalFinalHtmlPath = "" + +electron.ipcMain.on("file_submit", async (event, args) => { + try { + globalArgs = args + let curstep = 0 + let totalsteps = 4 + + const TEMPLATE_MAP = { + "followup-report": "followup_report.txt", + "agenda": "agenda.txt", + "result-protocol": "result_protocol.txt", + "sprint-planning": "sprint_planning_note.txt", + "custom": "custom_document.txt" + }; + + const templateFile = TEMPLATE_MAP[args.document.type]; + + if (!templateFile) { + throw new Error("Unknown document type: " + args.document.type); + } + + console.log(args); + let audiopath = "" + let transcriptpath = "" + + console.log("\n\n Running the Video to Audio Extractor"); + // This code handles the Video to Audio extraction module call + await mapFunctions.get("module-handler").function(args.video.module, {inputVideoPath: args.video.inputVideoPath, outputType: mapFunctions.get(args.transcription.module).audioformat}).then(resp => { + console.log(resp); + audiopath = resp + curstep++ + mainWindow.webContents.send("progress", {curstep:curstep, totalsteps:totalsteps}) + }).catch(err => { + mainWindow.webContents.send("error", err) + return + }) + + + console.log("\n\n Running the Audio to Transcription module"); + // TODO implement transcription module + // This code handles the Audio to Text transcription module call + await mapFunctions.get("module-handler").function(args.transcription.module, audiopath).then(resp => { + console.log(resp); + transcriptpath = resp + curstep++ + mainWindow.webContents.send("progress", {curstep:curstep, totalsteps:totalsteps}) + }).catch(err => { + mainWindow.webContents.send("error", err) + return + }) + + + console.log("\n\n Running the Transcription Summarizer module"); + // This code summarises the transcript, so that it can be used by an llm + // await mapFunctions.get("summarize-transcription").function('A:\\programing\\@projects\\video2document\\storage\\transcripts\\IMG_2978.json').then(resp => { + await mapFunctions.get("summarize-transcription2").function(transcriptpath).then(resp => { + console.log(resp); + transcriptpath = resp + curstep++ + mainWindow.webContents.send("progress", {curstep:curstep, totalsteps:totalsteps}) + }).catch(err => { + mainWindow.webContents.send("error", err) + return + }) + + console.log("\n\n Running the LLM module"); + // TODO implement documentation module + // This code handles the Text to Document processing module call + + console.log(`\n\n Running the LLM for Document Style ${args.document.type}`); + + await mapFunctions.get("module-handler").function(args.document.module, { inputTranscriptPath: transcriptpath, documentTypePath: "./storage/documentType/" + templateFile, language: "en" }).then(resp => { + console.log(resp); + globalFinalHtmlPath = resp + curstep++ + mainWindow.webContents.send("progress", {curstep:curstep, totalsteps:totalsteps}) + }).catch(err => { + mainWindow.webContents.send("error", err) + return + }) + + + await mapFunctions.get("extract-speaker-snippets").function({audioPath: audiopath, jsonPath: transcriptpath }).then(resp => { + mainWindow.webContents.send("submitSpeaker", resp) + console.log(resp) + }).catch(err => { + mainWindow.webContents.send("error", err) + return + }) + } catch (error) { + console.log(error); + } +}) + +electron.ipcMain.on("file_download", async() => { + await mapFunctions.get("htmlDocumentConverter").convert({inputPath:globalFinalHtmlPath, format: globalArgs.document.outputType, showDialog: true}); +}) + + +let q = +{ + video: { + module: "String", // The name of the module, idk if we ever implement other extraction modules, the default one is extraction-video-to-audio + inputVideoPath: "String", // See script.js on line 27 for an example of what this should look like + outputType: "String" // The file format to be used for the audio output file, such as wav, mp3, flac and so on + }, + transcription:{ + module: "String" // The module name of the transcription model you want to use + }, + document:{ + module: "String", // The module name of the AI model you want to use to create the document + styles: [ // An array of all the document styles/prompts you want to have the document be processed with + { + prompt: "String", + } + ] + } +} + + +let q1 = { + "ai_modules": [ + {name:"abc", displayname:"ABC"}, + {name:"qeg", displayname:"aqghegahu"} + ], + "transcription_modules": [ + {name:"abc", displayname:"ABC"}, + {name:"qeg", displayname:"aqghegahu"} + ] +} \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 52b523c..3f885ed 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,13 +9,17 @@ "version": "1.0.0", "license": "ISC", "dependencies": { + "@google/genai": "^1.30.0", "@types/axios": "^0.9.36", - "cli-progress": "^3.12.0", + "axios": "^1.13.2", "dotenv": "^17.2.3", "electron": "^39.1.1", "express": "^5.1.0", - "ffmpeg-static": "^5.2.0", - "fluent-ffmpeg": "^2.1.3" + "ffmpeg-static": "^5.3.0", + "fluent-ffmpeg": "^2.1.3", + "html-to-docx": "^1.8.0", + "mocha": "^11.7.5", + "puppeteer": "^24.33.0" }, "devDependencies": { "@types/cli-progress": "^3.11.6", @@ -25,6 +29,29 @@ "typescript": "^5.9.3" } }, + "node_modules/@babel/code-frame": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", + "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==", + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.27.1", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", + "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@cspotcode/source-map-support": { "version": "0.8.1", "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", @@ -73,6 +100,88 @@ "global-agent": "^3.0.0" } }, + "node_modules/@google/genai": { + "version": "1.30.0", + "resolved": "https://registry.npmjs.org/@google/genai/-/genai-1.30.0.tgz", + "integrity": "sha512-3MRcgczBFbUat1wIlZoLJ0vCCfXgm7Qxjh59cZi2X08RgWLtm9hKOspzp7TOg1TV2e26/MLxR2GR5yD5GmBV2w==", + "dependencies": { + "google-auth-library": "^10.3.0", + "ws": "^8.18.0" + }, + "engines": { + "node": ">=20.0.0" + }, + "peerDependencies": { + "@modelcontextprotocol/sdk": "^1.20.1" + }, + "peerDependenciesMeta": { + "@modelcontextprotocol/sdk": { + "optional": true + } + } + }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-regex": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" + }, + "node_modules/@isaacs/cliui/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@isaacs/cliui/node_modules/strip-ansi": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", + "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, "node_modules/@jridgewell/resolve-uri": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", @@ -101,6 +210,135 @@ "@jridgewell/sourcemap-codec": "^1.4.10" } }, + "node_modules/@oozcitak/dom": { + "version": "1.15.6", + "resolved": "https://registry.npmjs.org/@oozcitak/dom/-/dom-1.15.6.tgz", + "integrity": "sha512-k4uEIa6DI3FCrFJMGq/05U/59WnS9DjME0kaPqBRCJAqBTkmopbYV1Xs4qFKbDJ/9wOg8W97p+1E0heng/LH7g==", + "license": "MIT", + "dependencies": { + "@oozcitak/infra": "1.0.5", + "@oozcitak/url": "1.0.0", + "@oozcitak/util": "8.3.4" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/@oozcitak/infra": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@oozcitak/infra/-/infra-1.0.5.tgz", + "integrity": "sha512-o+zZH7M6l5e3FaAWy3ojaPIVN5eusaYPrKm6MZQt0DKNdgXa2wDYExjpP0t/zx+GoQgQKzLu7cfD8rHCLt8JrQ==", + "license": "MIT", + "dependencies": { + "@oozcitak/util": "8.0.0" + }, + "engines": { + "node": ">=6.0" + } + }, + "node_modules/@oozcitak/infra/node_modules/@oozcitak/util": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@oozcitak/util/-/util-8.0.0.tgz", + "integrity": "sha512-+9Hq6yuoq/3TRV/n/xcpydGBq2qN2/DEDMqNTG7rm95K6ZE2/YY/sPyx62+1n8QsE9O26e5M1URlXsk+AnN9Jw==", + "license": "MIT", + "engines": { + "node": ">=6.0" + } + }, + "node_modules/@oozcitak/url": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@oozcitak/url/-/url-1.0.0.tgz", + "integrity": "sha512-LGrMeSxeLzsdaitxq3ZmBRVOrlRRQIgNNci6L0VRnOKlJFuRIkNm4B+BObXPCJA6JT5bEJtrrwjn30jueHJYZQ==", + "license": "MIT", + "dependencies": { + "@oozcitak/infra": "1.0.3", + "@oozcitak/util": "1.0.2" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/@oozcitak/url/node_modules/@oozcitak/infra": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@oozcitak/infra/-/infra-1.0.3.tgz", + "integrity": "sha512-9O2wxXGnRzy76O1XUxESxDGsXT5kzETJPvYbreO4mv6bqe1+YSuux2cZTagjJ/T4UfEwFJz5ixanOqB0QgYAag==", + "license": "MIT", + "dependencies": { + "@oozcitak/util": "1.0.1" + }, + "engines": { + "node": ">=6.0" + } + }, + "node_modules/@oozcitak/url/node_modules/@oozcitak/infra/node_modules/@oozcitak/util": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@oozcitak/util/-/util-1.0.1.tgz", + "integrity": "sha512-dFwFqcKrQnJ2SapOmRD1nQWEZUtbtIy9Y6TyJquzsalWNJsKIPxmTI0KG6Ypyl8j7v89L2wixH9fQDNrF78hKg==", + "license": "MIT", + "engines": { + "node": ">=6.0" + } + }, + "node_modules/@oozcitak/url/node_modules/@oozcitak/util": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@oozcitak/util/-/util-1.0.2.tgz", + "integrity": "sha512-4n8B1cWlJleSOSba5gxsMcN4tO8KkkcvXhNWW+ADqvq9Xj+Lrl9uCa90GRpjekqQJyt84aUX015DG81LFpZYXA==", + "license": "MIT", + "engines": { + "node": ">=6.0" + } + }, + "node_modules/@oozcitak/util": { + "version": "8.3.4", + "resolved": "https://registry.npmjs.org/@oozcitak/util/-/util-8.3.4.tgz", + "integrity": "sha512-6gH/bLQJSJEg7OEpkH4wGQdA8KXHRbzL1YkGyUO12YNAgV3jxKy4K9kvfXj4+9T0OLug5k58cnPCKSSIKzp7pg==", + "license": "MIT", + "engines": { + "node": ">=8.0" + } + }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@puppeteer/browsers": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-2.11.0.tgz", + "integrity": "sha512-n6oQX6mYkG8TRPuPXmbPidkUbsSRalhmaaVAQxvH1IkQy63cwsH+kOjB3e4cpCDHg0aSvsiX9bQ4s2VB6mGWUQ==", + "license": "Apache-2.0", + "dependencies": { + "debug": "^4.4.3", + "extract-zip": "^2.0.1", + "progress": "^2.0.3", + "proxy-agent": "^6.5.0", + "semver": "^7.7.3", + "tar-fs": "^3.1.1", + "yargs": "^17.7.2" + }, + "bin": { + "browsers": "lib/cjs/main-cli.js" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@puppeteer/browsers/node_modules/semver": { + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/@sindresorhus/is": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz", @@ -123,6 +361,12 @@ "node": ">=10" } }, + "node_modules/@tootallnate/quickjs-emscripten": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@tootallnate/quickjs-emscripten/-/quickjs-emscripten-0.23.0.tgz", + "integrity": "sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA==", + "license": "MIT" + }, "node_modules/@tsconfig/node10": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.11.tgz", @@ -206,7 +450,6 @@ "resolved": "https://registry.npmjs.org/@types/node/-/node-24.9.2.tgz", "integrity": "sha512-uWN8YqxXxqFMX2RqGOrumsKeti4LlmIMIyV0lgut4jx7KQBcBiW6vkDtIBvHnHIquwNfJhk8v2OtmO8zXWHfPA==", "license": "MIT", - "peer": true, "dependencies": { "undici-types": "~7.16.0" } @@ -287,6 +530,17 @@ "node": ">=8" } }, + "node_modules/ansi-styles": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", + "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, "node_modules/arg": { "version": "4.1.3", "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", @@ -294,28 +548,211 @@ "dev": true, "license": "MIT" }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" + }, + "node_modules/ast-types": { + "version": "0.13.4", + "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.13.4.tgz", + "integrity": "sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==", + "license": "MIT", + "dependencies": { + "tslib": "^2.0.1" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/async": { "version": "0.2.10", "resolved": "https://registry.npmjs.org/async/-/async-0.2.10.tgz", "integrity": "sha512-eAkdoKxU6/LkKDBzLpT+t6Ff5EtfSF4wx1WfJiPEEV7WNLnDaRXk0oVysiEPm262roaachGexwUv94WhSgN5TQ==" }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" + }, + "node_modules/axios": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.13.2.tgz", + "integrity": "sha512-VPk9ebNqPcy5lRGuSlKx752IlDatOjT9paPlm8A7yOuW2Fbvp4X3JznJtT4f0GzGLLiWE9W8onz51SqLYwzGaA==", + "dependencies": { + "follow-redirects": "^1.15.6", + "form-data": "^4.0.4", + "proxy-from-env": "^1.1.0" + } + }, + "node_modules/b4a": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.7.3.tgz", + "integrity": "sha512-5Q2mfq2WfGuFp3uS//0s6baOJLMoVduPYVeNmDYxu5OUA1/cBfvr2RIS7vi62LdNj/urk1hfmj867I3qt6uZ7Q==", + "license": "Apache-2.0", + "peerDependencies": { + "react-native-b4a": "*" + }, + "peerDependenciesMeta": { + "react-native-b4a": { + "optional": true + } + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + }, + "node_modules/bare-events": { + "version": "2.8.2", + "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.8.2.tgz", + "integrity": "sha512-riJjyv1/mHLIPX4RwiK+oW9/4c3TEUeORHKefKAKnZ5kyslbN+HXowtbaVEqt4IMUB7OXlfixcs6gsFeo/jhiQ==", + "license": "Apache-2.0", + "peerDependencies": { + "bare-abort-controller": "*" + }, + "peerDependenciesMeta": { + "bare-abort-controller": { + "optional": true + } + } + }, + "node_modules/bare-fs": { + "version": "4.5.2", + "resolved": "https://registry.npmjs.org/bare-fs/-/bare-fs-4.5.2.tgz", + "integrity": "sha512-veTnRzkb6aPHOvSKIOy60KzURfBdUflr5VReI+NSaPL6xf+XLdONQgZgpYvUuZLVQ8dCqxpBAudaOM1+KpAUxw==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "bare-events": "^2.5.4", + "bare-path": "^3.0.0", + "bare-stream": "^2.6.4", + "bare-url": "^2.2.2", + "fast-fifo": "^1.3.2" + }, + "engines": { + "bare": ">=1.16.0" + }, + "peerDependencies": { + "bare-buffer": "*" + }, + "peerDependenciesMeta": { + "bare-buffer": { + "optional": true + } + } + }, + "node_modules/bare-os": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/bare-os/-/bare-os-3.6.2.tgz", + "integrity": "sha512-T+V1+1srU2qYNBmJCXZkUY5vQ0B4FSlL3QDROnKQYOqeiQR8UbjNHlPa+TIbM4cuidiN9GaTaOZgSEgsvPbh5A==", + "license": "Apache-2.0", + "optional": true, + "engines": { + "bare": ">=1.14.0" + } + }, + "node_modules/bare-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bare-path/-/bare-path-3.0.0.tgz", + "integrity": "sha512-tyfW2cQcB5NN8Saijrhqn0Zh7AnFNsnczRcuWODH0eYAXBsJ5gVxAUuNr7tsHSC6IZ77cA0SitzT+s47kot8Mw==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "bare-os": "^3.0.1" + } + }, + "node_modules/bare-stream": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/bare-stream/-/bare-stream-2.7.0.tgz", + "integrity": "sha512-oyXQNicV1y8nc2aKffH+BUHFRXmx6VrPzlnaEvMhram0nPBrKcEdcyBg5r08D0i8VxngHFAiVyn1QKXpSG0B8A==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "streamx": "^2.21.0" + }, + "peerDependencies": { + "bare-buffer": "*", + "bare-events": "*" + }, + "peerDependenciesMeta": { + "bare-buffer": { + "optional": true + }, + "bare-events": { + "optional": true + } + } + }, + "node_modules/bare-url": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/bare-url/-/bare-url-2.3.2.tgz", + "integrity": "sha512-ZMq4gd9ngV5aTMa5p9+UfY0b3skwhHELaDkhEHetMdX0LRkW9kzaym4oo/Eh+Ghm0CCDuMTsRIGM/ytUc1ZYmw==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "bare-path": "^3.0.0" + } + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/basic-ftp": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/basic-ftp/-/basic-ftp-5.0.5.tgz", + "integrity": "sha512-4Bcg1P8xhUuqcii/S0Z9wiHIrQVPMermM1any+MX5GeGD7faD3/msQUDGLol9wOcz4/jbg/WJnGqoJF6LiBdtg==", + "license": "MIT", + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/bignumber.js": { + "version": "9.3.1", + "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.3.1.tgz", + "integrity": "sha512-Ko0uX15oIUS7wJ3Rb30Fs6SkVbLmPBAKdlm7q9+ak9bbIeFf0MwuBsQV6z7+X768/cHsfg+WlysDWJcmthjsjQ==", + "engines": { + "node": "*" + } + }, "node_modules/body-parser": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.2.0.tgz", - "integrity": "sha512-02qvAaxv8tp7fBa/mw1ga98OGm+eCbqzJOKoRt70sLmfEEi+jyBYVTDGfCL/k06/4EMk/z01gCe7HoCH/f2LTg==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.2.1.tgz", + "integrity": "sha512-nfDwkulwiZYQIGwxdy0RUmowMhKcFVcYXUU7m4QlKYim1rUtg83xm2yjZ40QjDuc291AJjjeSc9b++AWHSgSHw==", + "license": "MIT", "dependencies": { "bytes": "^3.1.2", "content-type": "^1.0.5", - "debug": "^4.4.0", + "debug": "^4.4.3", "http-errors": "^2.0.0", - "iconv-lite": "^0.6.3", + "iconv-lite": "^0.7.0", "on-finished": "^2.4.1", "qs": "^6.14.0", - "raw-body": "^3.0.0", - "type-is": "^2.0.0" + "raw-body": "^3.0.1", + "type-is": "^2.0.1" }, "engines": { "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/boolean": { @@ -325,6 +762,25 @@ "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", "optional": true }, + "node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/browser-split": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/browser-split/-/browser-split-0.0.1.tgz", + "integrity": "sha512-JhvgRb2ihQhsljNda3BI8/UcRHVzrVwo3Q+P8vDtSiyobXuFpuZ9mq+MbRGMnC22CjW3RrfXdg6j6ITX8M+7Ow==", + "license": "MIT" + }, + "node_modules/browser-stdout": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", + "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==" + }, "node_modules/buffer-crc32": { "version": "0.2.13", "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", @@ -333,6 +789,11 @@ "node": "*" } }, + "node_modules/buffer-equal-constant-time": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", + "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==" + }, "node_modules/buffer-from": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", @@ -399,22 +860,152 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/camelize": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/camelize/-/camelize-1.0.1.tgz", + "integrity": "sha512-dU+Tx2fsypxTgtLoE36npi3UqcjSSMNYfkqgmoEhtZrraP5VWq0K7FkWVTYa8eMPtnU/G2txVsfdCJTn9uzpuQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/caseless": { "version": "0.12.0", "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==", "license": "Apache-2.0" }, - "node_modules/cli-progress": { - "version": "3.12.0", - "resolved": "https://registry.npmjs.org/cli-progress/-/cli-progress-3.12.0.tgz", - "integrity": "sha512-tRkV3HJ1ASwm19THiiLIXLO7Im7wlTuKnvkYaTkyoAPefqjNg7W7DHKUlGRxy9vxDvbyCYQkQozvptuMkGCg8A==", - "license": "MIT", + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dependencies": { - "string-width": "^4.2.3" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": ">=4" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/chalk/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/chalk/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/chokidar": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", + "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", + "dependencies": { + "readdirp": "^4.0.1" + }, + "engines": { + "node": ">= 14.16.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/chromium-bidi": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/chromium-bidi/-/chromium-bidi-11.0.0.tgz", + "integrity": "sha512-cM3DI+OOb89T3wO8cpPSro80Q9eKYJ7hGVXoGS3GkDPxnYSqiv+6xwpIf6XERyJ9Tdsl09hmNmY94BkgZdVekw==", + "license": "Apache-2.0", + "dependencies": { + "mitt": "^3.0.1", + "zod": "^3.24.1" + }, + "peerDependencies": { + "devtools-protocol": "*" + } + }, + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/cliui/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/cliui/node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, "node_modules/clone-response": { @@ -428,6 +1019,33 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, "node_modules/concat-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-2.0.0.tgz", @@ -478,6 +1096,38 @@ "node": ">=6.6.0" } }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "license": "MIT" + }, + "node_modules/cosmiconfig": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.0.tgz", + "integrity": "sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==", + "license": "MIT", + "dependencies": { + "env-paths": "^2.2.1", + "import-fresh": "^3.3.0", + "js-yaml": "^4.1.0", + "parse-json": "^5.2.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/d-fischer" + }, + "peerDependencies": { + "typescript": ">=4.9.5" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, "node_modules/create-require": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", @@ -485,6 +1135,41 @@ "dev": true, "license": "MIT" }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/cross-spawn/node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/data-uri-to-buffer": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz", + "integrity": "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==", + "engines": { + "node": ">= 12" + } + }, "node_modules/debug": { "version": "4.4.3", "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", @@ -502,6 +1187,17 @@ } } }, + "node_modules/decamelize": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", + "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/decompress-response": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", @@ -569,6 +1265,28 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/degenerator": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/degenerator/-/degenerator-5.0.1.tgz", + "integrity": "sha512-TllpMR/t0M5sqCXfj85i4XaAzxmS5tVA16dqvdkMwGmzI+dXLXnw3J+3Vdv7VKw+ThlTMboK6i9rnZ6Nntj5CQ==", + "license": "MIT", + "dependencies": { + "ast-types": "^0.13.4", + "escodegen": "^2.1.0", + "esprima": "^4.0.1" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "engines": { + "node": ">=0.4.0" + } + }, "node_modules/depd": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", @@ -583,6 +1301,12 @@ "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", "optional": true }, + "node_modules/devtools-protocol": { + "version": "0.0.1534754", + "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1534754.tgz", + "integrity": "sha512-26T91cV5dbOYnXdJi5qQHoTtUoNEqwkHcAyu/IKtjIAxiEqPMrDiRkDOPWVsGfNZGmlQVHQbZRSjD8sxagWVsQ==", + "license": "BSD-3-Clause" + }, "node_modules/diff": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", @@ -593,11 +1317,71 @@ "node": ">=0.3.1" } }, + "node_modules/dom-serializer": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", + "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", + "license": "MIT", + "dependencies": { + "domelementtype": "^2.0.1", + "entities": "^2.0.0" + } + }, + "node_modules/dom-serializer/node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "BSD-2-Clause" + }, + "node_modules/dom-serializer/node_modules/entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "license": "BSD-2-Clause", + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/dom-walk": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.2.tgz", + "integrity": "sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==" + }, + "node_modules/domelementtype": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", + "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==", + "license": "BSD-2-Clause" + }, + "node_modules/domhandler": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz", + "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==", + "license": "BSD-2-Clause", + "dependencies": { + "domelementtype": "1" + } + }, + "node_modules/domutils": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", + "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", + "license": "BSD-2-Clause", + "dependencies": { + "dom-serializer": "0", + "domelementtype": "1" + } + }, "node_modules/dotenv": { "version": "17.2.3", "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-17.2.3.tgz", "integrity": "sha512-JVUnt+DUIzu87TABbhPmNfVdBDt18BLOWjMUFJMSi/Qqg7NTYtabbvSNJGOJ7afbRuv9D/lngizHtP7QyLQ+9w==", - "license": "BSD-2-Clause", "engines": { "node": ">=12" }, @@ -618,6 +1402,19 @@ "node": ">= 0.4" } }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" + }, + "node_modules/ecdsa-sig-formatter": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", + "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", + "dependencies": { + "safe-buffer": "^5.0.1" + } + }, "node_modules/ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", @@ -675,6 +1472,27 @@ "once": "^1.4.0" } }, + "node_modules/ent": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/ent/-/ent-2.2.2.tgz", + "integrity": "sha512-kKvD1tO6BM+oK9HzCPpUdRb4vKFQY/FPTFmurMvh6LlN68VMrdj77w8yp51/kDbpkFOS9J8w5W6zIzgM2H8/hw==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "punycode": "^1.4.1", + "safe-regex-test": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/entities": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", + "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==", + "license": "BSD-2-Clause" + }, "node_modules/env-paths": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", @@ -684,6 +1502,25 @@ "node": ">=6" } }, + "node_modules/error": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/error/-/error-4.4.0.tgz", + "integrity": "sha512-SNDKualLUtT4StGFP7xNfuFybL2f6iJujFtrWuvJqGbVQGaN+adE23veqzPz1hjUjTunLi2EnJ+0SJxtbJreKw==", + "dependencies": { + "camelize": "^1.0.0", + "string-template": "~0.2.0", + "xtend": "~4.0.0" + } + }, + "node_modules/error-ex": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.4.tgz", + "integrity": "sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==", + "license": "MIT", + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, "node_modules/es-define-property": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", @@ -711,12 +1548,34 @@ "node": ">= 0.4" } }, + "node_modules/es-set-tostringtag": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "dependencies": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/es6-error": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", "optional": true }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "engines": { + "node": ">=6" + } + }, "node_modules/escape-html": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", @@ -726,7 +1585,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "optional": true, "engines": { "node": ">=10" }, @@ -734,6 +1592,58 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/escodegen": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", + "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", + "license": "BSD-2-Clause", + "dependencies": { + "esprima": "^4.0.1", + "estraverse": "^5.2.0", + "esutils": "^2.0.2" + }, + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" + }, + "engines": { + "node": ">=6.0" + }, + "optionalDependencies": { + "source-map": "~0.6.1" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "license": "BSD-2-Clause", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/etag": { "version": "1.8.1", "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", @@ -742,6 +1652,23 @@ "node": ">= 0.6" } }, + "node_modules/ev-store": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/ev-store/-/ev-store-7.0.0.tgz", + "integrity": "sha512-otazchNRnGzp2YarBJ+GXKVGvhxVATB1zmaStxJBYet0Dyq7A9VhH8IUEB/gRcL6Ch52lfpgPTRJ2m49epyMsQ==", + "dependencies": { + "individual": "^3.0.0" + } + }, + "node_modules/events-universal": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/events-universal/-/events-universal-1.0.1.tgz", + "integrity": "sha512-LUd5euvbMLpwOF8m6ivPCbhQeSiYVNb8Vs0fQ8QjXo0JTkEHpz8pxdQf0gStltaPpw0Cca8b39KxvK9cfKRiAw==", + "license": "Apache-2.0", + "dependencies": { + "bare-events": "^2.7.0" + } + }, "node_modules/express": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/express/-/express-5.1.0.tgz", @@ -783,6 +1710,11 @@ "url": "https://opencollective.com/express" } }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + }, "node_modules/extract-zip": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", @@ -802,6 +1734,12 @@ "@types/yauzl": "^2.9.1" } }, + "node_modules/fast-fifo": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.2.tgz", + "integrity": "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==", + "license": "MIT" + }, "node_modules/fd-slicer": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", @@ -810,10 +1748,32 @@ "pend": "~1.2.0" } }, + "node_modules/fetch-blob": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz", + "integrity": "sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/jimmywarting" + }, + { + "type": "paypal", + "url": "https://paypal.me/jimmywarting" + } + ], + "dependencies": { + "node-domexception": "^1.0.0", + "web-streams-polyfill": "^3.0.3" + }, + "engines": { + "node": "^12.20 || >= 14.13" + } + }, "node_modules/ffmpeg-static": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ffmpeg-static/-/ffmpeg-static-5.2.0.tgz", - "integrity": "sha512-WrM7kLW+do9HLr+H6tk7LzQ7kPqbAgLjdzNE32+u3Ff11gXt9Kkkd2nusGFrlWMIe+XaA97t+I8JS7sZIrvRgA==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/ffmpeg-static/-/ffmpeg-static-5.3.0.tgz", + "integrity": "sha512-H+K6sW6TiIX6VGend0KQwthe+kaceeH/luE8dIZyOP35ik7ahYojDuqlTV1bOrtEwl01sy2HFNGQfi5IDJvotg==", "hasInstallScript": true, "license": "GPL-3.0-or-later", "dependencies": { @@ -842,11 +1802,35 @@ "node": ">= 0.8" } }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "bin": { + "flat": "cli.js" + } + }, "node_modules/fluent-ffmpeg": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/fluent-ffmpeg/-/fluent-ffmpeg-2.1.3.tgz", "integrity": "sha512-Be3narBNt2s6bsaqP6Jzq91heDgOEaDCJAXcE3qcma/EJBSy5FB4cvO31XBInuAuKBx8Kptf8dkhjK0IOru39Q==", "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", + "license": "MIT", "dependencies": { "async": "^0.2.9", "which": "^1.1.1" @@ -855,6 +1839,85 @@ "node": ">=18" } }, + "node_modules/follow-redirects": { + "version": "1.15.11", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.11.tgz", + "integrity": "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/foreground-child": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", + "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", + "dependencies": { + "cross-spawn": "^7.0.6", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/form-data": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.5.tgz", + "integrity": "sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", + "hasown": "^2.0.2", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/form-data/node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/form-data/node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/formdata-polyfill": { + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz", + "integrity": "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==", + "dependencies": { + "fetch-blob": "^3.1.2" + }, + "engines": { + "node": ">=12.20.0" + } + }, "node_modules/forwarded": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", @@ -892,6 +1955,61 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/gaxios": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-7.1.3.tgz", + "integrity": "sha512-YGGyuEdVIjqxkxVH1pUTMY/XtmmsApXrCVv5EU25iX6inEPbV+VakJfLealkBtJN69AQmh1eGOdCl9Sm1UP6XQ==", + "dependencies": { + "extend": "^3.0.2", + "https-proxy-agent": "^7.0.1", + "node-fetch": "^3.3.2", + "rimraf": "^5.0.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/gaxios/node_modules/agent-base": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz", + "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==", + "engines": { + "node": ">= 14" + } + }, + "node_modules/gaxios/node_modules/https-proxy-agent": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", + "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", + "dependencies": { + "agent-base": "^7.1.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/gcp-metadata": { + "version": "8.1.2", + "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-8.1.2.tgz", + "integrity": "sha512-zV/5HKTfCeKWnxG0Dmrw51hEWFGfcF2xiXqcA3+J90WDuP0SvoiSO5ORvcBsifmx/FoIjgQN3oNOGaQ5PhLFkg==", + "dependencies": { + "gaxios": "^7.0.0", + "google-logging-utils": "^1.0.0", + "json-bigint": "^1.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, "node_modules/get-intrinsic": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", @@ -941,6 +2059,58 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/get-uri": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/get-uri/-/get-uri-6.0.5.tgz", + "integrity": "sha512-b1O07XYq8eRuVzBNgJLstU6FYc1tS6wnMtF1I1D9lE8LxZSOGZ7LhxN54yPP6mGw5f2CkXY2BQUL9Fx41qvcIg==", + "license": "MIT", + "dependencies": { + "basic-ftp": "^5.0.2", + "data-uri-to-buffer": "^6.0.2", + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/get-uri/node_modules/data-uri-to-buffer": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-6.0.2.tgz", + "integrity": "sha512-7hvf7/GW8e86rW0ptuwS3OcBGDjIi6SZva7hCyWC0yYry2cOPmLIjXAUHI6DK2HsnwJd9ifmt57i8eV2n4YNpw==", + "license": "MIT", + "engines": { + "node": ">= 14" + } + }, + "node_modules/glob": { + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz", + "integrity": "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/global": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/global/-/global-4.4.0.tgz", + "integrity": "sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==", + "license": "MIT", + "dependencies": { + "min-document": "^2.19.0", + "process": "^0.11.10" + } + }, "node_modules/global-agent": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/global-agent/-/global-agent-3.0.0.tgz", @@ -986,6 +2156,31 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/google-auth-library": { + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-10.5.0.tgz", + "integrity": "sha512-7ABviyMOlX5hIVD60YOfHw4/CxOfBhyduaYB+wbFWCWoni4N7SLcV46hrVRktuBbZjFC9ONyqamZITN7q3n32w==", + "dependencies": { + "base64-js": "^1.3.0", + "ecdsa-sig-formatter": "^1.0.11", + "gaxios": "^7.0.0", + "gcp-metadata": "^8.0.0", + "google-logging-utils": "^1.0.0", + "gtoken": "^8.0.0", + "jws": "^4.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/google-logging-utils": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/google-logging-utils/-/google-logging-utils-1.1.3.tgz", + "integrity": "sha512-eAmLkjDjAFCVXg7A1unxHsLf961m6y17QFqXqAXGj/gVkKFrEICfStRfwUlGNfeCEjNRa32JEWOUTlYXPyyKvA==", + "engines": { + "node": ">=14" + } + }, "node_modules/gopd": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", @@ -1026,6 +2221,26 @@ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" }, + "node_modules/gtoken": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/gtoken/-/gtoken-8.0.0.tgz", + "integrity": "sha512-+CqsMbHPiSTdtSO14O51eMNlrp9N79gmeqmXeouJOhfucAedHw9noVe/n5uJk3tbKE6a+6ZCQg3RPhVhHByAIw==", + "dependencies": { + "gaxios": "^7.0.0", + "jws": "^4.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, "node_modules/has-property-descriptors": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", @@ -1049,6 +2264,20 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/hasown": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", @@ -1060,6 +2289,96 @@ "node": ">= 0.4" } }, + "node_modules/he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "bin": { + "he": "bin/he" + } + }, + "node_modules/html-entities": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.6.0.tgz", + "integrity": "sha512-kig+rMn/QOVRvr7c86gQ8lWXq+Hkv6CbAH1hLu+RG338StTpE8Z0b44SDVaqVu7HGKf27frdmUYEs9hTUX/cLQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/mdevils" + }, + { + "type": "patreon", + "url": "https://patreon.com/mdevils" + } + ], + "license": "MIT" + }, + "node_modules/html-to-docx": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/html-to-docx/-/html-to-docx-1.8.0.tgz", + "integrity": "sha512-IiMBWIqXM4+cEsW//RKoonWV7DlXAJBmmKI73XJSVWTIXjGUaxSr2ck1jqzVRZknpvO8xsFnVicldKVAWrBYBA==", + "license": "MIT", + "dependencies": { + "@oozcitak/dom": "1.15.6", + "@oozcitak/util": "8.3.4", + "color-name": "^1.1.4", + "html-entities": "^2.3.3", + "html-to-vdom": "^0.7.0", + "image-size": "^1.0.0", + "image-to-base64": "^2.2.0", + "jszip": "^3.7.1", + "lodash": "^4.17.21", + "mime-types": "^2.1.35", + "nanoid": "^3.1.25", + "virtual-dom": "^2.1.1", + "xmlbuilder2": "2.1.2" + } + }, + "node_modules/html-to-docx/node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/html-to-docx/node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/html-to-vdom": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/html-to-vdom/-/html-to-vdom-0.7.0.tgz", + "integrity": "sha512-k+d2qNkbx0JO00KezQsNcn6k2I/xSBP4yXYFLvXbcasTTDh+RDLUJS3puxqyNnpdyXWRHFGoKU7cRmby8/APcQ==", + "license": "ISC", + "dependencies": { + "ent": "^2.0.0", + "htmlparser2": "^3.8.2" + } + }, + "node_modules/htmlparser2": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz", + "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==", + "license": "MIT", + "dependencies": { + "domelementtype": "^1.3.1", + "domhandler": "^2.3.0", + "domutils": "^1.5.1", + "entities": "^1.1.1", + "inherits": "^2.0.1", + "readable-stream": "^3.1.1" + } + }, "node_modules/http-cache-semantics": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.2.0.tgz", @@ -1088,6 +2407,28 @@ "node": ">= 0.8" } }, + "node_modules/http-proxy-agent": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", + "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.0", + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/http-proxy-agent/node_modules/agent-base": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz", + "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==", + "license": "MIT", + "engines": { + "node": ">= 14" + } + }, "node_modules/http-response-object": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/http-response-object/-/http-response-object-3.0.2.tgz", @@ -1129,22 +2470,107 @@ } }, "node_modules/iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.0.tgz", + "integrity": "sha512-cf6L2Ds3h57VVmkZe+Pn+5APsT7FpqJtEhhieDCvrE2MK5Qk9MyffgQyuxQTm6BChfeZNtcOLHp9IcWRVcIcBQ==", + "license": "MIT", "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" }, "engines": { "node": ">=0.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, + "node_modules/image-size": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/image-size/-/image-size-1.2.1.tgz", + "integrity": "sha512-rH+46sQJ2dlwfjfhCyNx5thzrv+dtmBIhPHk0zgRUukHzZ/kRueTJXoYYsclBaKcSMBWuGbOFXtioLpzTb5euw==", + "license": "MIT", + "dependencies": { + "queue": "6.0.2" + }, + "bin": { + "image-size": "bin/image-size.js" + }, + "engines": { + "node": ">=16.x" + } + }, + "node_modules/image-to-base64": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/image-to-base64/-/image-to-base64-2.2.0.tgz", + "integrity": "sha512-Z+aMwm/91UOQqHhrz7Upre2ytKhWejZlWV/JxUTD1sT7GWWKFDJUEV5scVQKnkzSgPHFuQBUEWcanO+ma0PSVw==", + "license": "MIT", + "dependencies": { + "node-fetch": "^2.6.0" + } + }, + "node_modules/image-to-base64/node_modules/node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "license": "MIT", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/immediate": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", + "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==", + "license": "MIT" + }, + "node_modules/import-fresh": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", + "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", + "license": "MIT", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/individual": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/individual/-/individual-3.0.0.tgz", + "integrity": "sha512-rUY5vtT748NMRbEMrTNiFfy29BgGZwGXUi2NFUVMWQrogSLzlJvQV9eeMWi+g1aVaQ53tpyLAQtd5x/JH0Nh1g==" + }, "node_modules/inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", "license": "ISC" }, + "node_modules/ip-address": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-10.1.0.tgz", + "integrity": "sha512-XXADHxXmvT9+CRxhXg56LJovE+bmWnEWB78LB83VZTprKTmaC5QfruXocxzTZ2Kl0DNwKuBdlIhjL8LeY8Sf8Q==", + "license": "MIT", + "engines": { + "node": ">= 12" + } + }, "node_modules/ipaddr.js": { "version": "1.9.1", "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", @@ -1153,6 +2579,12 @@ "node": ">= 0.10" } }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "license": "MIT" + }, "node_modules/is-fullwidth-code-point": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", @@ -1162,22 +2594,127 @@ "node": ">=8" } }, + "node_modules/is-object": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-object/-/is-object-1.0.2.tgz", + "integrity": "sha512-2rRIahhZr2UWb45fIOuvZGpFtz0TyOZLf32KxBbSoUCeZR495zCKlWUKKUByk3geS2eAs7ZAABt0Y/Rx0GiQGA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "engines": { + "node": ">=8" + } + }, "node_modules/is-promise": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-4.0.0.tgz", "integrity": "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==" }, + "node_modules/is-regex": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", + "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "license": "MIT" + }, "node_modules/isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", "license": "ISC" }, + "node_modules/jackspeak": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "license": "MIT" + }, + "node_modules/js-yaml": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", + "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/json-bigint": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-bigint/-/json-bigint-1.0.0.tgz", + "integrity": "sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==", + "dependencies": { + "bignumber.js": "^9.0.0" + } + }, "node_modules/json-buffer": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==" }, + "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==", + "license": "MIT" + }, "node_modules/json-stringify-safe": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", @@ -1192,6 +2729,68 @@ "graceful-fs": "^4.1.6" } }, + "node_modules/jszip": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.10.1.tgz", + "integrity": "sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==", + "license": "(MIT OR GPL-3.0-or-later)", + "dependencies": { + "lie": "~3.3.0", + "pako": "~1.0.2", + "readable-stream": "~2.3.6", + "setimmediate": "^1.0.5" + } + }, + "node_modules/jszip/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/jszip/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==", + "license": "MIT" + }, + "node_modules/jszip/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/jwa": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-2.0.1.tgz", + "integrity": "sha512-hRF04fqJIP8Abbkq5NKGN0Bbr3JxlQ+qhZufXVr0DvujKy93ZCbXZMHDL4EOtodSbCWxOqR8MS1tXA5hwqCXDg==", + "dependencies": { + "buffer-equal-constant-time": "^1.0.1", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/jws": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/jws/-/jws-4.0.1.tgz", + "integrity": "sha512-EKI/M/yqPncGUUh44xz0PxSidXFr/+r0pA70+gIYhjv+et7yxM+s29Y+VGDkovRofQem0fs7Uvf4+YmAdyRduA==", + "license": "MIT", + "dependencies": { + "jwa": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, "node_modules/keyv": { "version": "4.5.4", "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", @@ -1200,6 +2799,56 @@ "json-buffer": "3.0.1" } }, + "node_modules/lie": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz", + "integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==", + "license": "MIT", + "dependencies": { + "immediate": "~3.0.5" + } + }, + "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==", + "license": "MIT" + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "license": "MIT" + }, + "node_modules/log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dependencies": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/lowercase-keys": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", @@ -1208,6 +2857,11 @@ "node": ">=8" } }, + "node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==" + }, "node_modules/make-error": { "version": "1.3.6", "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", @@ -1281,12 +2935,110 @@ "node": ">=4" } }, + "node_modules/min-document": { + "version": "2.19.2", + "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.2.tgz", + "integrity": "sha512-8S5I8db/uZN8r9HSLFVWPdJCvYOejMcEC82VIzNUc6Zkklf/d1gg2psfE79/vyhWOj4+J8MtwmoOz3TmvaGu5A==", + "license": "MIT", + "dependencies": { + "dom-walk": "^0.1.0" + } + }, + "node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/mitt": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mitt/-/mitt-3.0.1.tgz", + "integrity": "sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==", + "license": "MIT" + }, + "node_modules/mocha": { + "version": "11.7.5", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-11.7.5.tgz", + "integrity": "sha512-mTT6RgopEYABzXWFx+GcJ+ZQ32kp4fMf0xvpZIIfSq9Z8lC/++MtcCnQ9t5FP2veYEP95FIYSvW+U9fV4xrlig==", + "dependencies": { + "browser-stdout": "^1.3.1", + "chokidar": "^4.0.1", + "debug": "^4.3.5", + "diff": "^7.0.0", + "escape-string-regexp": "^4.0.0", + "find-up": "^5.0.0", + "glob": "^10.4.5", + "he": "^1.2.0", + "is-path-inside": "^3.0.3", + "js-yaml": "^4.1.0", + "log-symbols": "^4.1.0", + "minimatch": "^9.0.5", + "ms": "^2.1.3", + "picocolors": "^1.1.1", + "serialize-javascript": "^6.0.2", + "strip-json-comments": "^3.1.1", + "supports-color": "^8.1.1", + "workerpool": "^9.2.0", + "yargs": "^17.7.2", + "yargs-parser": "^21.1.1", + "yargs-unparser": "^2.0.0" + }, + "bin": { + "_mocha": "bin/_mocha", + "mocha": "bin/mocha.js" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/mocha/node_modules/diff": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-7.0.0.tgz", + "integrity": "sha512-PJWHUb1RFevKCwaFA9RlG5tCd+FO5iRh9A8HEtkmBH2Li03iJriB6m6JIN4rGz3K3JLawI7/veA1xzRKP6ISBw==", + "engines": { + "node": ">=0.3.1" + } + }, "node_modules/ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "license": "MIT" }, + "node_modules/nanoid": { + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, "node_modules/negotiator": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-1.0.0.tgz", @@ -1295,6 +3047,57 @@ "node": ">= 0.6" } }, + "node_modules/netmask": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/netmask/-/netmask-2.0.2.tgz", + "integrity": "sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==", + "license": "MIT", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/next-tick": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-0.2.2.tgz", + "integrity": "sha512-f7h4svPtl+QidoBv4taKXUjJ70G2asaZ8G28nS0OkqaalX8dwwrtWtyxEDPK62AC00ur/+/E0pUwBwY5EPn15Q==", + "license": "MIT" + }, + "node_modules/node-domexception": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", + "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==", + "deprecated": "Use your platform's native DOMException instead", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/jimmywarting" + }, + { + "type": "github", + "url": "https://paypal.me/jimmywarting" + } + ], + "engines": { + "node": ">=10.5.0" + } + }, + "node_modules/node-fetch": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.2.tgz", + "integrity": "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==", + "dependencies": { + "data-uri-to-buffer": "^4.0.0", + "fetch-blob": "^3.1.4", + "formdata-polyfill": "^4.0.10" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/node-fetch" + } + }, "node_modules/normalize-url": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", @@ -1353,11 +3156,134 @@ "node": ">=8" } }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pac-proxy-agent": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/pac-proxy-agent/-/pac-proxy-agent-7.2.0.tgz", + "integrity": "sha512-TEB8ESquiLMc0lV8vcd5Ql/JAKAoyzHFXaStwjkzpOpC5Yv+pIzLfHvjTSdf3vpa2bMiUQrg9i6276yn8666aA==", + "license": "MIT", + "dependencies": { + "@tootallnate/quickjs-emscripten": "^0.23.0", + "agent-base": "^7.1.2", + "debug": "^4.3.4", + "get-uri": "^6.0.1", + "http-proxy-agent": "^7.0.0", + "https-proxy-agent": "^7.0.6", + "pac-resolver": "^7.0.1", + "socks-proxy-agent": "^8.0.5" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/pac-proxy-agent/node_modules/agent-base": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz", + "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==", + "license": "MIT", + "engines": { + "node": ">= 14" + } + }, + "node_modules/pac-proxy-agent/node_modules/https-proxy-agent": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", + "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/pac-resolver": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/pac-resolver/-/pac-resolver-7.0.1.tgz", + "integrity": "sha512-5NPgf87AT2STgwa2ntRMr45jTKrYBGkVU36yT0ig/n/GMAa3oPqhZfIQ2kMEimReg0+t9kZViDVZ83qfVUlckg==", + "license": "MIT", + "dependencies": { + "degenerator": "^5.0.0", + "netmask": "^2.0.2" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/package-json-from-dist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", + "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==" + }, + "node_modules/pako": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", + "license": "(MIT AND Zlib)" + }, + "node_modules/parent-module": { + "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==", + "license": "MIT", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/parse-cache-control": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parse-cache-control/-/parse-cache-control-1.0.1.tgz", "integrity": "sha512-60zvsJReQPX5/QP0Kzfd/VrpjScIQ7SHBW6bFCYfEP+fp0Eppr1SHhIO5nd1PjZtvclzSzES9D/p5nFJurwfWg==" }, + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/parseurl": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", @@ -1366,6 +3292,37 @@ "node": ">= 0.8" } }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "dependencies": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/path-to-regexp": { "version": "8.3.0", "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.3.0.tgz", @@ -1380,6 +3337,26 @@ "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==" }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==" + }, + "node_modules/process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", + "license": "MIT", + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "license": "MIT" + }, "node_modules/progress": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", @@ -1401,6 +3378,61 @@ "node": ">= 0.10" } }, + "node_modules/proxy-agent": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/proxy-agent/-/proxy-agent-6.5.0.tgz", + "integrity": "sha512-TmatMXdr2KlRiA2CyDu8GqR8EjahTG3aY3nXjdzFyoZbmB8hrBsTyMezhULIXKnC0jpfjlmiZ3+EaCzoInSu/A==", + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.2", + "debug": "^4.3.4", + "http-proxy-agent": "^7.0.1", + "https-proxy-agent": "^7.0.6", + "lru-cache": "^7.14.1", + "pac-proxy-agent": "^7.1.0", + "proxy-from-env": "^1.1.0", + "socks-proxy-agent": "^8.0.5" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/proxy-agent/node_modules/agent-base": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz", + "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==", + "license": "MIT", + "engines": { + "node": ">= 14" + } + }, + "node_modules/proxy-agent/node_modules/https-proxy-agent": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", + "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/proxy-agent/node_modules/lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" + }, "node_modules/pump": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.3.tgz", @@ -1410,6 +3442,51 @@ "once": "^1.3.1" } }, + "node_modules/punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==", + "license": "MIT" + }, + "node_modules/puppeteer": { + "version": "24.33.0", + "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-24.33.0.tgz", + "integrity": "sha512-nl3wsAztq5F8zybn4Tk41OCnYIzFIzGC6AN0WcF2KCUnWenajvRRPgBmS6LvNUV2HEeIzT2zRZHH0TgVxLDKew==", + "hasInstallScript": true, + "license": "Apache-2.0", + "dependencies": { + "@puppeteer/browsers": "2.11.0", + "chromium-bidi": "11.0.0", + "cosmiconfig": "^9.0.0", + "devtools-protocol": "0.0.1534754", + "puppeteer-core": "24.33.0", + "typed-query-selector": "^2.12.0" + }, + "bin": { + "puppeteer": "lib/cjs/puppeteer/node/cli.js" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/puppeteer-core": { + "version": "24.33.0", + "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-24.33.0.tgz", + "integrity": "sha512-tPTxVg+Qdj/8av4cy6szv3GlhxeOoNhiiMZ955fjxQyvPQE/6DjCa6ZyF/x0WJrlgBZtaLSP8TQgJb7FdLDXXA==", + "license": "Apache-2.0", + "dependencies": { + "@puppeteer/browsers": "2.11.0", + "chromium-bidi": "11.0.0", + "debug": "^4.4.3", + "devtools-protocol": "0.0.1534754", + "typed-query-selector": "^2.12.0", + "webdriver-bidi-protocol": "0.3.9", + "ws": "^8.18.3" + }, + "engines": { + "node": ">=18" + } + }, "node_modules/qs": { "version": "6.14.0", "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.0.tgz", @@ -1424,6 +3501,15 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/queue": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/queue/-/queue-6.0.2.tgz", + "integrity": "sha512-iHZWu+q3IdFZFX36ro/lKBkSvfkztY5Y7HMiPlOUjhupPcG2JMfst2KKEpu5XndviX/3UhFbRngUPNKtgvtZiA==", + "license": "MIT", + "dependencies": { + "inherits": "~2.0.3" + } + }, "node_modules/quick-lru": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", @@ -1435,6 +3521,14 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, "node_modules/range-parser": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", @@ -1457,21 +3551,6 @@ "node": ">= 0.10" } }, - "node_modules/raw-body/node_modules/iconv-lite": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.0.tgz", - "integrity": "sha512-cf6L2Ds3h57VVmkZe+Pn+5APsT7FpqJtEhhieDCvrE2MK5Qk9MyffgQyuxQTm6BChfeZNtcOLHp9IcWRVcIcBQ==", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, "node_modules/readable-stream": { "version": "3.6.2", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", @@ -1486,11 +3565,40 @@ "node": ">= 6" } }, + "node_modules/readdirp": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", + "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", + "engines": { + "node": ">= 14.18.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/resolve-alpn": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz", "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==" }, + "node_modules/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==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, "node_modules/responselike": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.1.tgz", @@ -1502,6 +3610,20 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/rimraf": { + "version": "5.0.10", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-5.0.10.tgz", + "integrity": "sha512-l0OE8wL34P4nJH/H2ffoaniAokM2qSmrtXHmlpvYr5AVVX8msAyW0l8NVJFDxlSK4u3Uh/f41cQheDVdnYijwQ==", + "dependencies": { + "glob": "^10.3.7" + }, + "bin": { + "rimraf": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/roarr": { "version": "2.15.4", "resolved": "https://registry.npmjs.org/roarr/-/roarr-2.15.4.tgz", @@ -1554,6 +3676,23 @@ ], "license": "MIT" }, + "node_modules/safe-regex-test": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.1.0.tgz", + "integrity": "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "is-regex": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", @@ -1609,6 +3748,14 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/serialize-javascript": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", + "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", + "dependencies": { + "randombytes": "^2.1.0" + } + }, "node_modules/serve-static": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-2.2.0.tgz", @@ -1623,11 +3770,36 @@ "node": ">= 18" } }, + "node_modules/setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", + "license": "MIT" + }, "node_modules/setprototypeof": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "engines": { + "node": ">=8" + } + }, "node_modules/side-channel": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", @@ -1696,6 +3868,74 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/smart-buffer": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", + "license": "MIT", + "engines": { + "node": ">= 6.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socks": { + "version": "2.8.7", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.7.tgz", + "integrity": "sha512-HLpt+uLy/pxB+bum/9DzAgiKS8CX1EvbWxI4zlmgGCExImLdiad2iCwXT5Z4c9c3Eq8rP2318mPW2c+QbtjK8A==", + "license": "MIT", + "dependencies": { + "ip-address": "^10.0.1", + "smart-buffer": "^4.2.0" + }, + "engines": { + "node": ">= 10.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socks-proxy-agent": { + "version": "8.0.5", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.5.tgz", + "integrity": "sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw==", + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.2", + "debug": "^4.3.4", + "socks": "^2.8.3" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/socks-proxy-agent/node_modules/agent-base": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz", + "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==", + "license": "MIT", + "engines": { + "node": ">= 14" + } + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "license": "BSD-3-Clause", + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/sprintf-js": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz", @@ -1710,6 +3950,17 @@ "node": ">= 0.8" } }, + "node_modules/streamx": { + "version": "2.23.0", + "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.23.0.tgz", + "integrity": "sha512-kn+e44esVfn2Fa/O0CPFcex27fjIL6MkVae0Mm6q+E6f0hWv578YCERbv+4m02cjxvDsPKLnmxral/rR6lBMAg==", + "license": "MIT", + "dependencies": { + "events-universal": "^1.0.0", + "fast-fifo": "^1.3.2", + "text-decoder": "^1.1.0" + } + }, "node_modules/string_decoder": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", @@ -1719,6 +3970,11 @@ "safe-buffer": "~5.2.0" } }, + "node_modules/string-template": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/string-template/-/string-template-0.2.1.tgz", + "integrity": "sha512-Yptehjogou2xm4UJbxJ4CxgZx12HBfeystp0y3x7s4Dj32ltVVG1Gg8YhKjHZkHicuKpZX/ffilA8505VbUbpw==" + }, "node_modules/string-width": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", @@ -1733,6 +3989,20 @@ "node": ">=8" } }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", @@ -1745,6 +4015,29 @@ "node": ">=8" } }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/sumchecker": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/sumchecker/-/sumchecker-3.0.1.tgz", @@ -1756,6 +4049,54 @@ "node": ">= 8.0" } }, + "node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/tar-fs": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-3.1.1.tgz", + "integrity": "sha512-LZA0oaPOc2fVo82Txf3gw+AkEd38szODlptMYejQUhndHMLQ9M059uXR+AfS7DNo0NpINvSqDsvyaCrBVkptWg==", + "license": "MIT", + "dependencies": { + "pump": "^3.0.0", + "tar-stream": "^3.1.5" + }, + "optionalDependencies": { + "bare-fs": "^4.0.1", + "bare-path": "^3.0.0" + } + }, + "node_modules/tar-stream": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-3.1.7.tgz", + "integrity": "sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==", + "license": "MIT", + "dependencies": { + "b4a": "^1.6.4", + "fast-fifo": "^1.2.0", + "streamx": "^2.15.0" + } + }, + "node_modules/text-decoder": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/text-decoder/-/text-decoder-1.2.3.tgz", + "integrity": "sha512-3/o9z3X0X0fTupwsYvR03pJ/DjWuqqrfwBgTQzdWDiQSm9KitAyz/9WqsT2JQW7KV2m+bC2ol/zqpW37NHxLaA==", + "license": "Apache-2.0", + "dependencies": { + "b4a": "^1.6.4" + } + }, "node_modules/toidentifier": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", @@ -1764,6 +4105,12 @@ "node": ">=0.6" } }, + "node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", + "license": "MIT" + }, "node_modules/ts-node": { "version": "10.9.2", "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", @@ -1808,6 +4155,12 @@ } } }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "license": "0BSD" + }, "node_modules/type-fest": { "version": "0.13.1", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.13.1.tgz", @@ -1833,6 +4186,12 @@ "node": ">= 0.6" } }, + "node_modules/typed-query-selector": { + "version": "2.12.0", + "resolved": "https://registry.npmjs.org/typed-query-selector/-/typed-query-selector-2.12.0.tgz", + "integrity": "sha512-SbklCd1F0EiZOyPiW192rrHZzZ5sBijB6xM+cpmrwDqObvdtunOHHIk9fCGsoK5JVIYXoyEp4iEdE3upFH3PAg==", + "license": "MIT" + }, "node_modules/typedarray": { "version": "0.0.6", "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", @@ -1843,9 +4202,8 @@ "version": "5.9.3", "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", - "dev": true, + "devOptional": true, "license": "Apache-2.0", - "peer": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -1897,6 +4255,52 @@ "node": ">= 0.8" } }, + "node_modules/virtual-dom": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/virtual-dom/-/virtual-dom-2.1.1.tgz", + "integrity": "sha512-wb6Qc9Lbqug0kRqo/iuApfBpJJAq14Sk1faAnSmtqXiwahg7PVTvWMs9L02Z8nNIMqbwsxzBAA90bbtRLbw0zg==", + "license": "MIT", + "dependencies": { + "browser-split": "0.0.1", + "error": "^4.3.0", + "ev-store": "^7.0.0", + "global": "^4.3.0", + "is-object": "^1.0.1", + "next-tick": "^0.2.2", + "x-is-array": "0.1.0", + "x-is-string": "0.1.0" + } + }, + "node_modules/web-streams-polyfill": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz", + "integrity": "sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==", + "engines": { + "node": ">= 8" + } + }, + "node_modules/webdriver-bidi-protocol": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/webdriver-bidi-protocol/-/webdriver-bidi-protocol-0.3.9.tgz", + "integrity": "sha512-uIYvlRQ0PwtZR1EzHlTMol1G0lAlmOe6wPykF9a77AK3bkpvZHzIVxRE2ThOx5vjy2zISe0zhwf5rzuUfbo1PQ==", + "license": "Apache-2.0" + }, + "node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", + "license": "BSD-2-Clause" + }, + "node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "license": "MIT", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, "node_modules/which": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", @@ -1909,11 +4313,241 @@ "which": "bin/which" } }, + "node_modules/workerpool": { + "version": "9.3.4", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-9.3.4.tgz", + "integrity": "sha512-TmPRQYYSAnnDiEB0P/Ytip7bFGvqnSU6I2BcuSw7Hx+JSg/DsUi5ebYfc8GYaSdpuvOcEs6dXxPurOYpe9QFwg==" + }, + "node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-regex": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" + }, + "node_modules/wrap-ansi/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/wrap-ansi/node_modules/strip-ansi": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", + "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" }, + "node_modules/ws": { + "version": "8.18.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.3.tgz", + "integrity": "sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/x-is-array": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/x-is-array/-/x-is-array-0.1.0.tgz", + "integrity": "sha512-goHPif61oNrr0jJgsXRfc8oqtYzvfiMJpTqwE7Z4y9uH+T3UozkGqQ4d2nX9mB9khvA8U2o/UbPOFjgC7hLWIA==" + }, + "node_modules/x-is-string": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/x-is-string/-/x-is-string-0.1.0.tgz", + "integrity": "sha512-GojqklwG8gpzOVEVki5KudKNoq7MbbjYZCbyWzEz7tyPA7eleiE0+ePwOWQQRb5fm86rD3S8Tc0tSFf3AOv50w==" + }, + "node_modules/xmlbuilder2": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/xmlbuilder2/-/xmlbuilder2-2.1.2.tgz", + "integrity": "sha512-PI710tmtVlQ5VmwzbRTuhmVhKnj9pM8Si+iOZCV2g2SNo3gCrpzR2Ka9wNzZtqfD+mnP+xkrqoNy0sjKZqP4Dg==", + "license": "MIT", + "dependencies": { + "@oozcitak/dom": "1.15.5", + "@oozcitak/infra": "1.0.5", + "@oozcitak/util": "8.3.3" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/xmlbuilder2/node_modules/@oozcitak/dom": { + "version": "1.15.5", + "resolved": "https://registry.npmjs.org/@oozcitak/dom/-/dom-1.15.5.tgz", + "integrity": "sha512-L6v3Mwb0TaYBYgeYlIeBaHnc+2ZEaDSbFiRm5KmqZQSoBlbPlf+l6aIH/sD5GUf2MYwULw00LT7+dOnEuAEC0A==", + "license": "MIT", + "dependencies": { + "@oozcitak/infra": "1.0.5", + "@oozcitak/url": "1.0.0", + "@oozcitak/util": "8.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/xmlbuilder2/node_modules/@oozcitak/dom/node_modules/@oozcitak/util": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@oozcitak/util/-/util-8.0.0.tgz", + "integrity": "sha512-+9Hq6yuoq/3TRV/n/xcpydGBq2qN2/DEDMqNTG7rm95K6ZE2/YY/sPyx62+1n8QsE9O26e5M1URlXsk+AnN9Jw==", + "license": "MIT", + "engines": { + "node": ">=6.0" + } + }, + "node_modules/xmlbuilder2/node_modules/@oozcitak/util": { + "version": "8.3.3", + "resolved": "https://registry.npmjs.org/@oozcitak/util/-/util-8.3.3.tgz", + "integrity": "sha512-Ufpab7G5PfnEhQyy5kDg9C8ltWJjsVT1P/IYqacjstaqydG4Q21HAT2HUZQYBrC/a1ZLKCz87pfydlDvv8y97w==", + "license": "MIT", + "engines": { + "node": ">=6.0" + } + }, + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "license": "MIT", + "engines": { + "node": ">=0.4" + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-unparser": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", + "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", + "dependencies": { + "camelcase": "^6.0.0", + "decamelize": "^4.0.0", + "flat": "^5.0.2", + "is-plain-obj": "^2.1.0" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/yauzl": { "version": "2.10.0", "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", @@ -1932,6 +4566,26 @@ "engines": { "node": ">=6" } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/zod": { + "version": "3.25.76", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz", + "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } } } } diff --git a/package.json b/package.json index f85f30e..c5ea093 100644 --- a/package.json +++ b/package.json @@ -1,12 +1,16 @@ { "dependencies": { + "@google/genai": "^1.30.0", "@types/axios": "^0.9.36", - "cli-progress": "^3.12.0", + "axios": "^1.13.2", "dotenv": "^17.2.3", "electron": "^39.1.1", "express": "^5.1.0", - "ffmpeg-static": "^5.2.0", - "fluent-ffmpeg": "^2.1.3" + "ffmpeg-static": "^5.3.0", + "fluent-ffmpeg": "^2.1.3", + "html-to-docx": "^1.8.0", + "mocha": "^11.7.5", + "puppeteer": "^24.33.0" }, "devDependencies": { "@types/cli-progress": "^3.11.6", @@ -25,7 +29,7 @@ }, "scripts": { "start": "electron main.js", - "test": "echo \"Error: no test specified\" && exit 1" + "test": "mocha ./test/unit/test.js" }, "repository": { "type": "git", diff --git a/requirements.txt b/requirements.txt deleted file mode 100644 index 36a15fc..0000000 --- a/requirements.txt +++ /dev/null @@ -1,3 +0,0 @@ -fastapi -uvicorn -pytest diff --git a/requires.js b/requires.js index 03c5b7a..6a7e20a 100644 --- a/requires.js +++ b/requires.js @@ -6,13 +6,20 @@ platform = process.platform mainDir = __dirname fs = require("fs") readline = require("readline") + +puppeteer = require("puppeteer") +htmltodocx = require("html-to-docx") config = require("./config/config") ffmpegPath = require('ffmpeg-static'); ffmpeg = require('fluent-ffmpeg'); path = require('path'); -cliProgress = require('cli-progress'); +// cliProgress = require('cli-progress'); // { app, BrowserWindow, ipcMain, dialog } = require('electron'); electron = require('electron'); + +axios = require("axios") + +console.log(require('dotenv').config({path: __dirname + '/.env'})); \ No newline at end of file diff --git a/scripts/show-models.js b/scripts/show-models.js new file mode 100644 index 0000000..9aae541 --- /dev/null +++ b/scripts/show-models.js @@ -0,0 +1,47 @@ +const fs = require('fs'); +const path = require('path'); + +//node show-models.js, remember to set SAIA_API_KEY in your environment before running the script + +const SAIA_API_KEY = process.env.SAIA_API_KEY; +const SAIA_MODELS_URL = "https://chat-ai.academiccloud.de/v1/models"; + +// Script to list available models +(async () => { + if (!SAIA_API_KEY) { + console.error("ERROR: SAIA_API_KEY environment variable is not set!"); + process.exit(1); + } + + console.log("Fetching available models from SAIA...\n"); + + try { + const response = await fetch(SAIA_MODELS_URL, { + method: "GET", + headers: { + "Authorization": `Bearer ${SAIA_API_KEY}`, + "Accept": "application/json" + } + }); + + if (!response.ok) { + const text = await response.text(); + throw new Error(`SAIA API error (${response.status}): ${text}`); + } + + const data = await response.json(); + + console.log("Available models:"); + console.log(JSON.stringify(data, null, 2)); + + if (data.data && Array.isArray(data.data)) { + console.log("\n\nModel IDs:"); + data.data.forEach(model => { + console.log(`- ${model.id}`); + }); + } + + } catch (error) { + console.error("Error fetching models:", error); + } +})(); \ No newline at end of file diff --git a/services/modules/audioSnippets/extract-speaker-snippets.js b/services/modules/audioSnippets/extract-speaker-snippets.js new file mode 100644 index 0000000..efb0e83 --- /dev/null +++ b/services/modules/audioSnippets/extract-speaker-snippets.js @@ -0,0 +1,102 @@ + +const ffmpeg = require("fluent-ffmpeg"); +const ffmpegPath = require("ffmpeg-static"); + +ffmpeg.setFfmpegPath(ffmpegPath); + +module.exports = { + name: "extract-speaker-snippets", + type: "audio", + displayname: "Extract Speaker Snippets", + + async function(parameter) { + return new Promise(async (resolve, reject) => { + + let output = {} + + // console.log("Extract Speaker Snippets\n"); + + // Pfade + const AUDIO_PATH = parameter.audioPath; // Gesamt-Audio + const JSON_PATH = parameter.jsonPath; // json summary + const OUTPUT_DIR = path.join(__dirname, "/../../../storage/audio/speakerSnippets"); + + + if (!AUDIO_PATH || !JSON_PATH) { + // console.error("no audioPath or jsonPath available"); + reject(new Error("no audioPath or jsonPath available")); + return; + } + + // Output-Ordner + if (!fs.existsSync(OUTPUT_DIR)) { + fs.mkdirSync(OUTPUT_DIR, { recursive: true }); + } + + // JSON laden + let entries; + try { + entries = JSON.parse(fs.readFileSync(JSON_PATH, "utf8")); + } catch (err) { + // console.error("JSON reading failed", err); + reject(new Error(err)); + return; + } + + if (!Array.isArray(entries)) { + // console.error("JSON is not an Array"); + reject(new Error("JSON is not an Array")); + return; + } + + // Pro Speaker genau EINEN Satz merken + const speakerMap = {}; + + for (const item of entries) { + if (!speakerMap[item.speaker]) { + speakerMap[item.speaker] = item; + } + } + + // FFmpeg pro Speaker ausführen (sequenziell) + for (const speaker of Object.keys(speakerMap)) { + const data = speakerMap[speaker]; + + // ms → Sekunden + const startSec = data.start / 1000; + const durationSec = (data.end - data.start) / 1000; + + if (durationSec <= 0) { + // console.log(`invalid times for Speaker ${speaker}`); + continue; + } + + const outFile = path.join(OUTPUT_DIR, `speaker_${speaker}.wav`); + try { + await new Promise((res, rej) => { + ffmpeg(AUDIO_PATH) + .setStartTime(startSec) + .setDuration(durationSec) + .output(outFile) + .on("end", () => { + output[`speaker${speaker}`] = {src: outFile, name: `speaker${speaker}`} + // console.log(`Snippet erstellt: speaker_${speaker}.wav`); + res(); + }) + .on("error", (err) => { + // console.error(`FFmpeg Fehler (${speaker})`, err.message); + rej(err); + return + }) + .run(); + }); + } catch (error) { + reject(error) + return + } + } + resolve(output) + // console.log("\nAlle Speaker-Snippets erstellt\n"); + }) + } +}; \ No newline at end of file diff --git a/services/modules/convert/convert.js b/services/modules/convert/convert.js new file mode 100644 index 0000000..8f705b1 --- /dev/null +++ b/services/modules/convert/convert.js @@ -0,0 +1,194 @@ +const fs = require('fs'); +const path = require('path'); +const puppeteer = require('puppeteer'); +const htmlToDocx = require('html-to-docx'); +const { execSync } = require('child_process'); +const os = require('os'); + +const outputDir = path.join(__dirname, "../../../storage/documents"); + +if (!fs.existsSync(outputDir)) { + fs.mkdirSync(outputDir, { recursive: true }); +} + +async function showSaveDialog(defaultName, format) { + const platform = os.platform(); + + if (platform === 'darwin') { + // macOS + const applescript = ` + set defaultName to "${defaultName}.${format}" + set theFile to choose file name with prompt "Dokument speichern als:" default name defaultName + POSIX path of theFile + `; + + try { + const result = execSync(`osascript -e '${applescript}'`, { encoding: 'utf8' }); + return result.trim(); + } catch (err) { + if (err.status === 1) return null; // User canceled + throw err; + } + } else if (platform === 'win32') { + // Windows + const powershell = ` + Add-Type -AssemblyName System.Windows.Forms + $dialog = New-Object System.Windows.Forms.SaveFileDialog + $dialog.FileName = "${defaultName}.${format}" + $dialog.Filter = "${format.toUpperCase()} Dateien (*.${format})|*.${format}|Alle Dateien (*.*)|*.*" + $dialog.Title = "Dokument speichern als" + $result = $dialog.ShowDialog() + if ($result -eq 'OK') { $dialog.FileName } + `; + + try { + const result = execSync(`powershell -Command "${powershell.replace(/\n/g, '; ')}"`, { + encoding: 'utf8' + }); + return result.trim() || null; + } catch (err) { + throw err; + } + } else { + // Linux - zenity oder kdialog + try { + const result = execSync( + `zenity --file-selection --save --confirm-overwrite --filename="${defaultName}.${format}"`, + { encoding: 'utf8' } + ); + return result.trim(); + } catch (err) { + try { + const result = execSync( + `kdialog --getsavefilename . "${defaultName}.${format}"`, + { encoding: 'utf8' } + ); + return result.trim(); + } catch (err2) { + // Fallback + return path.join(os.homedir(), 'Downloads', `${defaultName}.${format}`); + } + } + } +} + +const module_exports = { + name: "htmlDocumentConverter", + type: "converter", + displayname: "HTML Document Converter", + description: "Converts LLM-generated HTML to PDF, DOCX, TXT, or HTML", + + /** + * Main conversion function + * @param {Object} options + * @param {string} options.inputPath - Path to the HTML input + * @param {string} options.format - 'pdf' | 'docx' | 'html' | 'txt' + * @param {string} [options.outputName] - Optional output filename (without extension) + * @param {boolean} [options.showDialog] - Show save dialog (default: false in module mode, true in CLI mode) + */ + async convert({ inputPath, format = 'pdf', outputName, showDialog = false }) { + if (!fs.existsSync(inputPath)) { + throw new Error(`Input file not found: ${inputPath}`); + } + + const ext = path.extname(inputPath).toLowerCase(); + const baseName = outputName || path.basename(inputPath, ext); + + let outputFile; + + if (showDialog) { + // Zeige nativen Dialog + outputFile = await showSaveDialog(baseName, format); + if (!outputFile) { + console.log('Speichervorgang abgebrochen.'); + return null; + } + } else { + // Nutze Standard-Ausgabeverzeichnis + outputFile = path.join(outputDir, `${baseName}.${format.toLowerCase()}`); + } + + let htmlContent = fs.readFileSync(inputPath, 'utf8'); + + // Remove tags if present + htmlContent = htmlContent.replace(/[\s\S]*?<\/think>/gi, ''); + + switch (format.toLowerCase()) { + case 'html': + fs.writeFileSync(outputFile, htmlContent, 'utf8'); + break; + case 'pdf': + await this.htmlToPDF(htmlContent, outputFile); + break; + case 'docx': + await this.htmlToDOCX(htmlContent, outputFile); + break; + case 'txt': + fs.writeFileSync(outputFile, this.htmlToTXT(htmlContent), 'utf8'); + break; + default: + throw new Error(`Unsupported format: ${format}`); + } + + console.log(`Erfolgreich gespeichert: ${outputFile}`); + return outputFile; + }, + + // HTML → PDF + async htmlToPDF(html, outputPath) { + const browser = await puppeteer.launch({ + headless: true, + args: ['--no-sandbox', '--disable-setuid-sandbox'] + }); + const page = await browser.newPage(); + await page.setContent(html, { waitUntil: 'networkidle0' }); + await page.pdf({ + path: outputPath, + format: 'A4', + printBackground: true, + margin: { top: '20mm', right: '20mm', bottom: '20mm', left: '20mm' } + }); + await browser.close(); + }, + + // HTML → DOCX + async htmlToDOCX(html, outputPath) { + const buffer = await htmlToDocx(html); + fs.writeFileSync(outputPath, buffer); + }, + + // HTML → TXT (rudimentär) + htmlToTXT(html) { + return html.replace(/<[^>]*>/g, '').replace(/\s+\n/g, '\n').trim(); + } +}; + +module.exports = module_exports; + +// CLI usage mit Dialog +if (require.main === module) { + (async () => { + const args = process.argv.slice(2); + if (args.length < 1) { + console.log('Usage: node htmlDocumentConverter.js [format]'); + console.log('Formats: pdf (default), docx, html, txt'); + console.log(''); + console.log('Ein nativer "Speichern unter" Dialog wird automatisch geöffnet.'); + process.exit(1); + } + + const inputPath = args[0]; + const format = args[1] || 'pdf'; + + try { + await module_exports.convert({ + inputPath, + format, + showDialog: true + }); + } catch (err) { + console.error('Konvertierung fehlgeschlagen:', err.message); + process.exit(1); + } + })(); +} \ No newline at end of file diff --git a/services/modules/document/chatgpt.js b/services/modules/document/chatgpt.js deleted file mode 100644 index 6e9034e..0000000 --- a/services/modules/document/chatgpt.js +++ /dev/null @@ -1,8 +0,0 @@ -module.exports = { - name:"chatgpt", // Unique name for our function that will later be used to get the function from the map via "mapFunctions.get("example").function()" - type:"document", // value used to differentiate each module to order them in the UI - displayname:"ChatGPT", // The displayname used within the UI - async function(parameter){ - // TODO add code to actually send the transcript to ChatGPT and get a response back - } -} \ No newline at end of file diff --git a/services/modules/extraction/ffmpegExtractor.js b/services/modules/extraction/ffmpegExtractor.js index ffec9c0..c91eacf 100644 --- a/services/modules/extraction/ffmpegExtractor.js +++ b/services/modules/extraction/ffmpegExtractor.js @@ -1,4 +1,3 @@ - // Ensure ffmpeg binary is available if (!ffmpegPath) { throw new Error('FFmpeg binary not found!'); @@ -25,18 +24,12 @@ module.exports = { outputType: String // Audio file output format } */ - let progressBar = new cliProgress.SingleBar({ - format: 'Processing |{bar}| {percentage}% | {timemark}', - barCompleteChar: '\u2588', - barIncompleteChar: '\u2591', - hideCursor: true - }); try { - // if (meta.url === `file://${process.argv[1]}`) { - this.extractAudioFromVideo(parameter.inputVideoPath, progressBar, parameter.outputType) - .then(() => console.log('Audio extraction successful.')) - .catch((err) => console.error(err)); - // } + return new Promise((resolve, reject) => { + this.extractAudioFromVideo(parameter.inputVideoPath, parameter.outputType) + .then((resp) => resolve(resp)) + .catch((err) => {reject(err)}); + }) } catch (error) { console.log(parameter.outputType); @@ -53,7 +46,7 @@ module.exports = { * - Shows CLI progress bar * - Handles errors gracefully (without errors) */ - extractAudioFromVideo: async function (videoFilePath, progressBar, outputType){ + extractAudioFromVideo: async function (videoFilePath, outputType){ let inputVideoName = path.basename(videoFilePath, path.extname(videoFilePath)); let outputAudioPath = path.join(outputDir, `${inputVideoName}.${outputType}`); @@ -64,30 +57,18 @@ module.exports = { // .audioCodec('pcm_s16le') .audioChannels(1) .audioFrequency(16000) - // .setFfmpegPath("./ffmpeg.exe") - .on('progress', (progress) => { - if (!progressBar.isActive) progressBar.start(100, 0, { timemark: '00:00:00' }); - if (progress.percent) { - progressBar.update(progress.percent, { timemark: progress.timemark }); - } - }) .on('end', () => { - progressBar.update(100, { timemark: 'done' }); - progressBar.stop(); - console.log(`Extraction completed: ${outputAudioPath}`); - resolve(); + resolve(outputAudioPath); }) .on('error', (err) => { - progressBar.stop(); - console.error(`failed_audio_extraction on type ${outputType}: ${err.message}`); + // console.error(`failed_audio_extraction on type ${outputType}: ${err.message}`); reject(err); }) .save(outputAudioPath); } catch (error) { - console.log(); + // console.log(error); } }); } - } \ No newline at end of file diff --git a/services/modules/jsonTools/transcriptionSummarizer.js b/services/modules/jsonTools/transcriptionSummarizer.js new file mode 100644 index 0000000..1be34a3 --- /dev/null +++ b/services/modules/jsonTools/transcriptionSummarizer.js @@ -0,0 +1,154 @@ + +// Prepare output directory (always storage/transcriptionSummaries under project root) +const outputDir = `${__dirname}/../../../storage/transcriptionSummaries`; +if (!fs.existsSync(outputDir)) { + fs.mkdirSync(outputDir, { recursive: true }); +} + +//Speaker, ALL-Sentences, Start, End + +module.exports = { + name: "summarize-transcription", // Unique name for our function that will later be used to get the function from the map via "mapFunctions.get("example").function()" + type: "summarizer", // value used to differentiate each module to order them in the UI + displayname: "Summarizer", // The displayname used within the UI + async function(args) { + return new Promise(async (resolve, reject) => { + let inputJson = args.json; + + //JSON Path + if (args.jsonPath) { + try { + const raw = fs.readFileSync(args.jsonPath, "utf-8"); + inputJson = JSON.parse(raw); + } catch (e) { + // console.error("Failed to load JSON from file:", e); + reject(e) + return + } + } + // JSON parsen + if (typeof args === "string") { + try { + await new Promise((res, rej) => { + fs.readFile(args, 'utf8', function (err, data) { + if (err){ + rej(err) + return + } + inputJson = JSON.parse(data); + res() + }); + }) + } catch (e) { + // console.log("Invalid JSON in summarize-transcription"); + // console.log(e) + reject(e) + return + } + } + + const words = inputJson.words; + if (!Array.isArray(words)) { + reject("No words Array found") + return + } + + const ENDINGS = [".", "!", "?"]; // '...' auch als Satzende ? + const ABBREVIATIONS = new Set(["z.B.", "bzw.", "u.a.", "Dr.", "Mr.", "Mrs.", "Prof.", "etc."]); //TODO weitere Ergaenzen + + const result = []; + let currentSentence = ""; + let currentSpeaker = null; + let startTime = null; + let endTime = null; + + for (const w of words) { + if (!currentSpeaker) currentSpeaker = w.speaker; + if (startTime === null) startTime = w.start; + endTime = w.end; + + //speaker changing + if (currentSpeaker !== w.speaker && currentSentence) { + const lastEntry = result[result.length - 1]; + if (lastEntry && lastEntry.speaker === currentSpeaker) { + lastEntry.sentence += " " + currentSentence; + lastEntry.end = endTime; + } else { + result.push({ + speaker: currentSpeaker, + sentence: currentSentence, + start: startTime, + end: endTime + }); + } + currentSentence = ""; + startTime = w.start; + } + currentSpeaker = w.speaker; + currentSentence += (currentSentence ? " " : "") + w.text; //sentence beginning or not + const lastWord = w.text.trim(); + const lastChar = lastWord.slice(-1); + const isAbbreviation = ABBREVIATIONS.has(lastWord); + + //sentence ending + if (ENDINGS.includes(lastChar) && !isAbbreviation) { + const lastEntry = result[result.length - 1]; + if (lastEntry && lastEntry.speaker === currentSpeaker) { + lastEntry.sentence += " " + currentSentence; + lastEntry.end = endTime; + } else { + result.push({ + speaker: currentSpeaker, + sentence: currentSentence, + start: startTime, + end: endTime + }); + } + currentSentence = ""; + startTime = null; + endTime = null; + currentSpeaker = null; + } + } + + // safe last sentence + if (currentSentence) { + const lastEntry = result[result.length - 1]; + if (lastEntry && lastEntry.speaker === currentSpeaker) { + lastEntry.sentence += " " + currentSentence; + lastEntry.end = endTime; + } else { + result.push({ + speaker: currentSpeaker, + sentence: currentSentence, + start: startTime, + end: endTime + }); + } + } + + // Output as Text + const output = result.map(r => + `Sprecher ${r.speaker} [${r.start.toFixed(2)} - ${r.end.toFixed(2)}]: ${r.sentence}` + ); + + // Output on cosole + //console.log("\n------------\nMerged Transcription Result:\n", output, "\n------------\n"); + + try { + const jsonPath = path.join(outputDir, "transcription_result.json"); + fs.writeFileSync(jsonPath, JSON.stringify(result, null, 2), "utf-8"); + + const txtPath = path.join(outputDir, "transcription_result.txt"); + fs.writeFileSync(txtPath, output.join("\n"), "utf-8"); + + // console.log(`Summary successfully saved:\n- ${jsonPath}\n- ${txtPath}`); + + resolve(jsonPath); + } catch (err) { + // console.error("Error saving Summary:", err); + reject(err); + } + }) + } +} diff --git a/services/modules/jsonTools/transcriptionSummarizer2.js b/services/modules/jsonTools/transcriptionSummarizer2.js new file mode 100644 index 0000000..aefe70c --- /dev/null +++ b/services/modules/jsonTools/transcriptionSummarizer2.js @@ -0,0 +1,149 @@ + +// Prepare output directory (always storage/transcriptionSummaries under project root) +const outputDir = `${__dirname}/../../../storage/transcriptionSummaries`; +if (!fs.existsSync(outputDir)) { + fs.mkdirSync(outputDir, { recursive: true }); +} + +function getSessionId(inputPath) { + try { + const parsed = new URL(inputPath); + const base = path.basename(parsed.pathname); + return base.replace(/\.[^.]+$/, ''); + } catch { + return path.basename(inputPath, path.extname(inputPath)); + } +} + +//Speaker, Sentence, Start, End + +module.exports = { + name: "summarize-transcription2", // Unique name for our function that will later be used to get the function from the map via "mapFunctions.get("example").function()" + type: "summarizer", // value used to differentiate each module to order them in the UI + displayname: "Summarizer", // The displayname used within the UI + async function(args) { + return new Promise(async (resolve, reject) => { + let inputJson = args.json; + + //JSON Path + if (args.jsonPath) { + try { + const raw = fs.readFileSync(args.jsonPath, "utf-8"); + inputJson = JSON.parse(raw); + } catch (e) { + console.error("Failed to load JSON from file:", e); + reject("Could not read JSON from file path.") + return + } + } + // JSON parsen + if (typeof args === "string") { + try { + await new Promise((res, rej) => { + fs.readFile(args, 'utf8', function (err, data) { + if (err){ + rej(err) + return + } + inputJson = JSON.parse(data); + res() + }); + }) + } catch (e) { + // console.log("Invalid JSON in summarize-transcription"); + // console.log(e) + reject(e) + return + } + } + + const words = inputJson.words; + if (!Array.isArray(words)) { + reject("No words Array found") + return; + } + + const ENDINGS = [".", "!", "?"]; // '...' auch als Satzende ? + const ABBREVIATIONS = new Set(["z.B.", "bzw.", "u.a.", "Dr.", "Mr.", "Mrs.", "Prof.", "etc."]); //TODO weitere Ergaenzen + + const result = []; + let currentSentence = ""; + let currentSpeaker = null; + let startTime = null; + let endTime = null; + + for (const w of words) { + if (!currentSpeaker) currentSpeaker = w.speaker; + if (startTime === null) startTime = w.start; + endTime = w.end; + + //speaker changing + if (currentSpeaker !== w.speaker && currentSentence) { + result.push({ + speaker: currentSpeaker, + sentence: currentSentence, + start: startTime, + end: endTime + }); + currentSentence = ""; + startTime = w.start; + } + currentSpeaker = w.speaker; + currentSentence += (currentSentence ? " " : "") + w.text; //sentence beginning or not + const lastWord = w.text.trim(); + const lastChar = lastWord.slice(-1); + const isAbbreviation = ABBREVIATIONS.has(lastWord); + + //sentence ending + if (ENDINGS.includes(lastChar) && !isAbbreviation) { + result.push({ + speaker: currentSpeaker, + sentence: currentSentence, + start: startTime, + end: endTime + }); + currentSentence = ""; + startTime = null; + endTime = null; + currentSpeaker = null; + } + } + + // safe last sentence + if (currentSentence) { + result.push({ + speaker: currentSpeaker, + sentence: currentSentence, + start: startTime, + end: endTime + }); + } + + + // Output as Text + const output = result.map(r => + `Sprecher ${r.speaker} [${r.start.toFixed(2)} - ${r.end.toFixed(2)}]: ${r.sentence}` + ); + + // Output on cosole + //console.log("\n------------\nMerged Transcription Result:\n", output, "\n------------\n"); + + try { + + let filename = getSessionId(args); + + const jsonPath = path.join(outputDir, `${filename}-${new Date().getTime()}.json`); + fs.writeFileSync(jsonPath, JSON.stringify(result, null, 2), "utf-8"); + + const txtPath = path.join(outputDir, `${filename}-${new Date().getTime()}.txt`); + fs.writeFileSync(txtPath, output.join("\n"), "utf-8"); + + // console.log(`Summary successfully saved:\n- ${jsonPath}\n- ${txtPath}`); + resolve(jsonPath); + } catch (err) { + // console.error("Error saving Summary:", err); + reject(err); + } + }) + } +} diff --git a/services/modules/llm-chat_gpt/chatgpt.js b/services/modules/llm-chat_gpt/chatgpt.js new file mode 100644 index 0000000..93b9746 --- /dev/null +++ b/services/modules/llm-chat_gpt/chatgpt.js @@ -0,0 +1,137 @@ +// const fs = require('fs'); +// const path = require('path'); + +const outputDir = path.join(__dirname, "../../../storage/documents"); // path for output directory + +if (!fs.existsSync(outputDir)) { + fs.mkdirSync(outputDir, { recursive: true }); // Create output directory if it doesn't exist +} + +// Ensure SAIA API key is set in environment variables: export SAIA_API_KEY="your_api_key_here" +const SAIA_API_KEY = process.env.SAIA_API_KEY; // Ensure SAIA API key is set in environment variables +const SAIA_URL = "https://chat-ai.academiccloud.de/v1/chat/completions"; // URL for the REST call, used model and action + +const module_exports = { + name: "llm-saia_openai_gpt", + type: "llm", + displayname: "GPT 120B", + description: "Generates documents using OpenAI GPT OSS 120B via SAIA platform", + + async function(parameter) { + return new Promise(async (resolve, reject) => { + try { + // console.log("SAIA OpenAI GPT module invoked with parameters:", parameter); + + resolve(await this.createDocumentFromTranscript( //Call the function to create document with transcript, document type and language + parameter.inputTranscriptPath, // Path to input transcript file + parameter.documentTypePath, // Path to document type file which is chosen in the front end by the user + parameter.language // Language for the document which is chosen in the front end by the user + )); + + } catch (error) { + // console.error("Error in SAIA OpenAI GPT module:", error); + reject(error) + } + }) + + }, + + createDocumentFromTranscript: async function(transcriptPath, documentTypePath, language = "en") { // default language is English + return new Promise(async(resolve, reject) => { + try { + const transcript = await fs.promises.readFile(transcriptPath, "utf-8"); //read transcript file from Path + const documentType = await fs.promises.readFile(documentTypePath, "utf-8"); //read document type from Path + const promptText = `${documentType}, in language ${language}, transcript:\n\n${transcript}`; //combine doc type, language and transcript - Change prompt here if needed + + // return + // --- REST CALL --- + const response = await fetch(SAIA_URL, { //safe model response in variable + method: "POST", + headers: { + "Authorization": `Bearer ${SAIA_API_KEY}`, + "Accept": "application/json", + "Content-Type": "application/json" + }, + body: JSON.stringify({ + model: "openai-gpt-oss-120b", + messages: [ + { role: "system", content: "You are a helpful assistant that generates HTML documents from transcripts. Output only valid HTML content without any preamble, explanations, or markdown formatting." }, + { role: "user", content: promptText } + ], + temperature: 0 + }) + }); + + if (!response.ok) { //ok is true when a responce was successfull + const text = await response.text(); + throw new Error(`SAIA API error (${response.status}): ${text}`); + } + + const data = await response.json(); + + // Get generated text from response or default to empty string (if null) + // SAIA uses OpenAI-compatible structure: data.choices[x].message.content + const output = data.choices?.[0]?.message?.content || ""; + let inputTranscriptName = path.basename(transcriptPath, path.extname(transcriptPath)); // Name for the output file + // console.log(inputTranscriptName); + const outPath = path.join(outputDir, `${inputTranscriptName}.html`); // Output file path & name to make naming dynamic. Pulled from input transcript name + fs.writeFileSync(outPath, output, "utf8"); // Write output to file + + // console.log("Generated document written to:", outPath); + resolve(outPath) + + } catch (error) { + // console.error("Error generating SAIA content:", error); + reject(error) + } + }) + } +}; + +module.exports = module_exports; + +// CLI Mode: Allow direct execution +if (require.main === module) { + (async () => { + const args = process.argv.slice(2); + + if (args.length < 2) { + console.error("Usage: node llm-openai-gpt.js [language]"); + console.error("Example: node llm-openai-gpt.js ./transcript.json ./docType.txt de"); + process.exit(1); + } + + const [transcriptPath, documentTypePath, language] = args; + + // Check if API key is set + if (!SAIA_API_KEY) { + console.error("ERROR: SAIA_API_KEY environment variable is not set!"); + console.error("Please set it with: export SAIA_API_KEY='your_api_key_here'"); + process.exit(1); + } + + // Check if files exist + if (!fs.existsSync(transcriptPath)) { + console.error(`ERROR: Transcript file not found: ${transcriptPath}`); + process.exit(1); + } + + if (!fs.existsSync(documentTypePath)) { + console.error(`ERROR: Document type file not found: ${documentTypePath}`); + process.exit(1); + } + + console.log("Starting document generation..."); + console.log(`Transcript: ${transcriptPath}`); + console.log(`Document Type: ${documentTypePath}`); + console.log(`Language: ${language || 'en (default)'}`); + + await module_exports.createDocumentFromTranscript( + transcriptPath, + documentTypePath, + language || 'en' + ); + + console.log("Done!"); + })(); +} \ No newline at end of file diff --git a/services/modules/llm-gemini/gemini.js b/services/modules/llm-gemini/gemini.js new file mode 100644 index 0000000..beff750 --- /dev/null +++ b/services/modules/llm-gemini/gemini.js @@ -0,0 +1,134 @@ +const fs = require('fs'); +const path = require('path'); + +const outputDir = path.join(__dirname, "../../../storage/documents"); // path for output directory + +if (!fs.existsSync(outputDir)) { + fs.mkdirSync(outputDir, { recursive: true }); // Create output directory if it doesn't exist +} + +// Ensure Google API key is set in environment variables: export GOOGLE_API_KEY="your_api_key_here" +const GEMINI_API_KEY = process.env.GOOGLE_API_KEY; // Ensure Google API key is set in environment variables: export GOOGLE_API_KEY="your_api_key_here" +const GEMINI_URL = "https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-flash:generateContent"; // URL for the REST call, used model and action + +const module_exports = { + name: "llm-gemini", + type: "llm", + displayname: "Gemini LLM", + description: "Generates documents using Google Gemini LLM", + + async function(parameter) { + return new Promise(async (resolve, reject) => { + try { + // console.log("Gemini LLM module invoked with parameters:", parameter); + + resolve(await this.createDocumentFromTranscript( //Call the function to create document with transcript, document type and language + parameter.inputTranscriptPath, // Path to input transcript file + parameter.documentTypePath, // Path to document type file which is chosen in the front end by the user + parameter.language // Language for the document which is chosen in the front end by the user + )); + + } catch (error) { + // console.error("Error in Gemini LLM module:", error); + reject(error) + } + }) + + }, + + createDocumentFromTranscript: async function(transcriptPath, documentTypePath, language = "en") { // default language is English + return new Promise(async(resolve, reject) => { + try { + const transcript = await fs.promises.readFile(transcriptPath, "utf-8"); //read transcript file from Path + const documentType = await fs.promises.readFile(documentTypePath, "utf-8"); //read document type from Path + const promptText = `${documentType}, in language ${language}, transcript:\n\n${transcript}`; //combine doc type, language and transcript - Change prompt here if needed + + // --- REST CALL --- + const response = await fetch(`${GEMINI_URL}?key=${GEMINI_API_KEY}`, { //safe model response in variable + method: "POST", + headers: { + "Content-Type": "application/json" + }, + body: JSON.stringify({ + contents: [ + { + parts: [ + { text: promptText } // Input prompt for content generation + ] + } + ] + }) + }); + + if (!response.ok) { //ok is true when a responce was successfull + const text = await response.text(); + throw new Error(`Gemini API error (${response.status}): ${text}`); + } + + const data = await response.json(); + + // Get generated text from response or default to empty string (if null) + const output = data?.candidates?.[0]?.content?.parts?.[0]?.text || ""; + let inputTranscriptName = path.basename(transcriptPath, path.extname(transcriptPath)); // Name for the output file + // console.log(inputTranscriptName); + const outPath = path.join(outputDir, `${inputTranscriptName}.html`); // Output file path & name to make naming dynamic. Pulled from input transcript name + fs.writeFileSync(outPath, output, "utf8"); // Write output to file + + // console.log("Generated document written to:", outPath); + resolve(outPath) + + } catch (error) { + // console.error("Error generating Gemini content:", error); + reject(error) + } + }) + } +}; + +module.exports = module_exports; + +// CLI Mode: Allow direct execution +if (require.main === module) { + (async () => { + const args = process.argv.slice(2); + + if (args.length < 2) { + console.error("Usage: node llm-gemini.js [language]"); + console.error("Example: node llm-gemini.js ./transcript.json ./docType.txt de"); + process.exit(1); + } + + const [transcriptPath, documentTypePath, language] = args; + + // Check if API key is set + if (!GEMINI_API_KEY) { + console.error("ERROR: GOOGLE_API_KEY environment variable is not set!"); + console.error("Please set it with: export GOOGLE_API_KEY='your_api_key_here'"); + process.exit(1); + } + + // Check if files exist + if (!fs.existsSync(transcriptPath)) { + console.error(`ERROR: Transcript file not found: ${transcriptPath}`); + process.exit(1); + } + + if (!fs.existsSync(documentTypePath)) { + console.error(`ERROR: Document type file not found: ${documentTypePath}`); + process.exit(1); + } + + console.log("Starting document generation..."); + console.log(`Transcript: ${transcriptPath}`); + console.log(`Document Type: ${documentTypePath}`); + console.log(`Language: ${language || 'en (default)'}`); + + await module_exports.createDocumentFromTranscript( + transcriptPath, + documentTypePath, + language || 'en' + ); + + console.log("Done!"); + })(); +} \ No newline at end of file diff --git a/services/modules/quen3/qwen3.js b/services/modules/quen3/qwen3.js new file mode 100644 index 0000000..0bc913a --- /dev/null +++ b/services/modules/quen3/qwen3.js @@ -0,0 +1,136 @@ +const fs = require('fs'); +const path = require('path'); + +const outputDir = path.join(__dirname, "../../../storage/documents"); // path for output directory + +if (!fs.existsSync(outputDir)) { + fs.mkdirSync(outputDir, { recursive: true }); // Create output directory if it doesn't exist +} + +// Ensure SAIA API key is set in environment variables: export SAIA_API_KEY="your_api_key_here" +const SAIA_API_KEY = process.env.SAIA_API_KEY; +const SAIA_URL = "https://chat-ai.academiccloud.de/v1/chat/completions"; // URL for the REST call, used model and action + +const module_exports = { + name: "qwen3-235b-a22b", + type: "llm", + displayname: "QWEN 3 235B", + description: "Generates documents using QWEN 3 235B via SAIA platform", + + async function(parameter) { + return new Promise(async (resolve, reject) => { + try { + // console.log("SAIA QWEN 3 235B module invoked with parameters:", parameter); + + resolve(await this.createDocumentFromTranscript( //Call the function to create document with transcript, document type and language + parameter.inputTranscriptPath, // Path to input transcript file + parameter.documentTypePath, // Path to document type file which is chosen in the front end by the user + parameter.language // Language for the document which is chosen in the front end by the user + )); + + } catch (error) { + // console.error("Error in SAIA QWEN 3 235B module:", error); + reject(error) + } + }) + + }, + + createDocumentFromTranscript: async function(transcriptPath, documentTypePath, language = "en") { // default language is English + return new Promise(async(resolve, reject) => { + try { + const transcript = await fs.promises.readFile(transcriptPath, "utf-8"); //read transcript file from Path + const documentType = await fs.promises.readFile(documentTypePath, "utf-8"); //read document type from Path + const promptText = `${documentType}, in language ${language}, transcript:\n\n${transcript}`; //combine doc type, language and transcript - Change prompt here if needed + + // --- REST CALL --- + const response = await fetch(SAIA_URL, { //safe model response in variable + method: "POST", + headers: { + "Authorization": `Bearer ${SAIA_API_KEY}`, + "Accept": "application/json", + "Content-Type": "application/json" + }, + body: JSON.stringify({ + model: "qwen3-235b-a22b", + messages: [ + { role: "system", content: "You are a helpful assistant that generates HTML documents from transcripts. Output only valid HTML content without any preamble, explanations, or markdown formatting." }, + { role: "user", content: promptText } + ], + temperature: 0 + }) + }); + + if (!response.ok) { //ok is true when a responce was successfull + const text = await response.text(); + throw new Error(`SAIA API error (${response.status}): ${text}`); + } + + const data = await response.json(); + + // Get generated text from response or default to empty string (if null) + // SAIA uses OpenAI-compatible structure: data.choices[x].message.content + const output = data.choices?.[0]?.message?.content || ""; + let inputTranscriptName = path.basename(transcriptPath, path.extname(transcriptPath)); // Name for the output file + // console.log(inputTranscriptName); + const outPath = path.join(outputDir, `${inputTranscriptName}.html`); // Output file path & name to make naming dynamic. Pulled from input transcript name + fs.writeFileSync(outPath, output, "utf8"); // Write output to file + + // console.log("Generated document written to:", outPath); + resolve(outPath) + + } catch (error) { + // console.error("Error generating SAIA content:", error); + reject(error) + } + }) + } +}; + +module.exports = module_exports; + +// CLI Mode: Allow direct execution +if (require.main === module) { + (async () => { + const args = process.argv.slice(2); + + if (args.length < 2) { + console.error("Usage: node qwen3.js [language]"); + console.error("Example: node qwen3.js ./transcript.json ./docType.txt de"); + process.exit(1); + } + + const [transcriptPath, documentTypePath, language] = args; + + // Check if API key is set + if (!SAIA_API_KEY) { + console.error("ERROR: SAIA_API_KEY environment variable is not set!"); + console.error("Please set it with: export SAIA_API_KEY='your_api_key_here'"); + process.exit(1); + } + + // Check if files exist + if (!fs.existsSync(transcriptPath)) { + console.error(`ERROR: Transcript file not found: ${transcriptPath}`); + process.exit(1); + } + + if (!fs.existsSync(documentTypePath)) { + console.error(`ERROR: Document type file not found: ${documentTypePath}`); + process.exit(1); + } + + console.log("Starting document generation..."); + console.log(`Transcript: ${transcriptPath}`); + console.log(`Document Type: ${documentTypePath}`); + console.log(`Language: ${language || 'en (default)'}`); + + await module_exports.createDocumentFromTranscript( + transcriptPath, + documentTypePath, + language || 'en' + ); + + console.log("Done!"); + })(); +} \ No newline at end of file diff --git a/services/modules/transcription-local/whisper.cpp b/services/modules/transcription-local/whisper.cpp new file mode 160000 index 0000000..999a7e0 --- /dev/null +++ b/services/modules/transcription-local/whisper.cpp @@ -0,0 +1 @@ +Subproject commit 999a7e0cbf8484dc2cea1e9f855d6b39f34f7ae9 diff --git a/services/modules/transcription-remote/assembly.js b/services/modules/transcription-remote/assembly.js index 3b28dad..442d290 100644 --- a/services/modules/transcription-remote/assembly.js +++ b/services/modules/transcription-remote/assembly.js @@ -1,8 +1,125 @@ -module.exports = { - name:"assembly", // Unique name for our function that will later be used to get the function from the map via "mapFunctions.get("example").function()" - type:"transcription", // value used to differentiate each module to order them in the UI - displayname:"Assembly", // The displayname used within the UI - async function(parameter){ - // TODO add code to actually process the audio file +const API_KEY = process.env.ASSEMBLYAI_API_KEY; +const BASE_URL = 'https://api.assemblyai.com/v2'; + +//---------------------------------------------------Upload audio--------------------------------------------------- + +async function uploadAudio(audioPath) { + const audioData = fs.readFileSync(audioPath); + + const response = await axios.post(`${BASE_URL}/upload`, audioData, { + headers: { + authorization: API_KEY, + 'content-type': 'application/octet-stream' } -} \ No newline at end of file + }); + + return response.data.upload_url; +} + +////---------------------------------------------------Extract session id--------------------------------------------------- + +function getSessionId(inputPath) { + try { + const parsed = new URL(inputPath); + const base = path.basename(parsed.pathname); + return base.replace(/\.[^.]+$/, ''); + } catch { + return path.basename(inputPath, path.extname(inputPath)); + } +} + +//---------------------------------------------------Create transcript--------------------------------------------------- + +async function createTranscript(audioUrl) { + const response = await axios.post( + `${BASE_URL}/transcript`, + { + audio_url: audioUrl, + speaker_labels: true, + language_detection: true + }, + { + headers: { + authorization: API_KEY, + 'content-type': 'application/json' + } + } + ); + + return response.data.id; +} + +//---------------------------------------------------Poll transcript--------------------------------------------------- + +async function pollTranscript(transcriptId) { + while (true) { + const response = await axios.get(`${BASE_URL}/transcript/${transcriptId}`, { + headers: { authorization: API_KEY } + }); + + const status = response.data.status; + + if (status === 'completed') return response.data; + if (status === 'error') throw new Error(`Transcription failed: ${response.data.error}`); + + await new Promise(res => setTimeout(res, 3000)); + } +} + +//---------------------------------------------------Save transcript--------------------------------------------------- + +function saveTranscript(transcript, sessionId) { + const outputDir = path.join(__dirname, '../../../storage/transcripts'); + + if (!fs.existsSync(outputDir)) { + fs.mkdirSync(outputDir, { recursive: true }); + } + + const outputPath = path.join(outputDir, `${sessionId}.json`); + fs.writeFileSync(outputPath, JSON.stringify(transcript, null, 2)); + + // console.log(`Transcript saved: ${outputPath}`); + + return outputPath; +} + +//---------------------------------------------------Modul--------------------------------------------------- + +module.exports = { + name: 'assembly', + type: 'transcription', + displayname: 'AssemblyAI', + audioformat: "mp3", + + async function(audioFileName) { + return new Promise(async (resolve, reject) => { + try { + // audioFileName ist nur "datei.mp3" + const audioPath = audioFileName; + + let audioUrl; + + if (/^https?:\/\//i.test(audioFileName)) { + audioUrl = audioFileName; + } else { + if (!fs.existsSync(audioPath)) { + throw new Error(`Audio file not found: ${audioPath}`); + } + audioUrl = await uploadAudio(audioPath); + } + + const transcriptId = await createTranscript(audioUrl); + const transcript = await pollTranscript(transcriptId); + + const sessionId = getSessionId(audioFileName); + + resolve(saveTranscript(transcript, sessionId)); + + } catch (error) { + // console.error('Transcription error:', error.message); + reject(error); + return + } + }) + } +}; diff --git a/services/modules/utility/@startup.js b/services/modules/utility/@startup.js index dcf64c8..09b1ae5 100644 --- a/services/modules/utility/@startup.js +++ b/services/modules/utility/@startup.js @@ -1,3 +1,4 @@ + module.exports = { name:"Startup_function", async function(){ @@ -6,8 +7,19 @@ module.exports = { // We are now calling the example function from the example folder mapFunctions.get("example").function("Startup") + // let transcript = await mapFunctions.get("assembly").function('../../storage/audio/IMG_2978.wav'); + + // let summary = await mapFunctions.get("summarize-transcription").function({jsonPath:'/Users/santa/Proj25/video2document/storage/transcripts/IMG_2978.json'}); + // let snippets = await mapFunctions.get("extract-speaker-snippets").function({audioPath:'/Users/santa/Proj25/video2document/storage/audio/KittyKat.wav', jsonPath1: '/Users/santa/Proj25/video2document/storage/transcriptionSummaries/KittyKat-1765806474958.json' }); + + + + // mapFunctions.get("extraction-video-to-audio").function({inputVideoPath:"./a.mp4", outputType:"wav"}) // mapFunctions.get("extraction-video-to-audio").function({inputVideoPath:"./b.mp4", outputType:"wav"}) // mapFunctions.get("extraction-video-to-audio").function({inputVideoPath:"./b.mp4", outputType:"flac"}) + + // mapFunctions.get("ipc-handler").function("extraction-video-to-audio", {inputVideoPath:"./a.mp4", outputType:"flac"}) + } } \ No newline at end of file diff --git a/services/modules/utility/module-handler.js b/services/modules/utility/module-handler.js new file mode 100644 index 0000000..1e06115 --- /dev/null +++ b/services/modules/utility/module-handler.js @@ -0,0 +1,16 @@ +module.exports = { + name:"module-handler", // Unique name for our function that will later be used to get the function from the map via "mapFunctions.get("example").function()" + async function(module,parameter){ + return new Promise(async (resolve, reject) => { + if(mapFunctions.get(module) == undefined){ + reject("requested modules not found") + return + } + mapFunctions.get(module).function(parameter).then((result) => { + resolve(result) + }).catch((err) => { + reject(err) + }); + }) + } +} \ No newline at end of file diff --git a/services/pipeline/jobs/transcribeLatest.ts b/services/pipeline/jobs/transcribeLatest.ts index fc75ad5..f632eee 100644 --- a/services/pipeline/jobs/transcribeLatest.ts +++ b/services/pipeline/jobs/transcribeLatest.ts @@ -1,6 +1,7 @@ // services/pipeline/jobs/transcribeLatest.ts import path from 'path'; import fs from 'fs'; +// @ts-ignore: module has no type declarations or cannot be resolved in current TS config import assembly from '../../modules/transcription/assembly'; /** diff --git a/storage/.DS_Store b/storage/.DS_Store new file mode 100644 index 0000000..7cbbcbf Binary files /dev/null and b/storage/.DS_Store differ diff --git a/storage/audio/.DS_Store b/storage/audio/.DS_Store new file mode 100644 index 0000000..5008ddf Binary files /dev/null and b/storage/audio/.DS_Store differ diff --git a/test/.gitkeep b/storage/documentType/.gitkeep similarity index 100% rename from test/.gitkeep rename to storage/documentType/.gitkeep diff --git a/storage/documentType/agenda.txt b/storage/documentType/agenda.txt new file mode 100644 index 0000000..02d4d47 --- /dev/null +++ b/storage/documentType/agenda.txt @@ -0,0 +1,26 @@ +Du bist ein erfahrener Moderator und Projektmanager. + +AUFGABE: +Erstelle eine sinnvolle Meeting-Agenda basierend auf dem folgenden Transkript. + +ANFORDERUNGEN: +- Rekonstruiere die tatsächlichen Themenblöcke +- Ordne sie logisch und chronologisch +- Fasse ähnliche Diskussionen zusammen +- Keine irrelevanten Details aufnehmen + +STRUKTUR: +- Titel der Agenda +- Ziel des Meetings (1–2 Sätze) +- Agenda-Punkte (nummeriert) + - Thema + - Kurzbeschreibung + - Ziel des Punktes (Information, Entscheidung, Diskussion) + +STIL: +- Klar, kompakt +- Business-orientiert +- Keine Sprecher- oder Zeitangaben +- Namen aus dem Transkript speakerA, speakerB etc. sollen weiterhin bestehen bleiben wie sie sind und nicht im Dokument ersetzt werden + +TRANSKRIPT: diff --git a/storage/documentType/custom_document.txt b/storage/documentType/custom_document.txt new file mode 100644 index 0000000..58cc983 --- /dev/null +++ b/storage/documentType/custom_document.txt @@ -0,0 +1,22 @@ +Du bist ein intelligenter Dokumenten-Generator. + +AUFGABE: +Erstelle ein individuelles Dokument basierend auf: +1) dem Meeting-Transkript +2) der zusätzlichen Nutzeranweisung + +WICHTIG: +- Priorisiere die Nutzeranweisung +- Nutze das Transkript als Wissensquelle +- Struktur, Tonalität und Detailgrad anpassen +- Inhalte logisch zusammenführen +- Namen aus dem Transkript speakerA, speakerB etc. sollen weiterhin bestehen bleiben wie sie sind und nicht im Dokument ersetzt werden + +FORMAT: +- Passe Struktur und Stil an den Nutzerwunsch an +- Klare Überschriften +- Keine Sprecher- oder Zeitangaben + +TRANSKRIPT & NUTZERANWEISUNG: + + diff --git a/storage/documentType/followup_report.txt b/storage/documentType/followup_report.txt new file mode 100644 index 0000000..048d05d --- /dev/null +++ b/storage/documentType/followup_report.txt @@ -0,0 +1,45 @@ +Du bist ein professioneller Meeting-Analyst und Business Writer. + +AUFGABE: +Erstelle einen strukturierten Follow-up Report basierend auf dem folgenden Meeting-Transkript. + +ANFORDERUNGEN: +- Fasse Inhalte sinngemäß zusammen +- Entferne Redundanzen und Smalltalk +- Formuliere klar, präzise und professionell +- Verwende neutrale Business-Sprache +- Keine Zeitstempel oder Sprecher-Namen zitieren +- Leite Entscheidungen und Aufgaben logisch ab, wenn sie implizit sind +- Markiere offene Punkte klar +- Namen aus dem Transkript speakerA, speakerB etc. sollen weiterhin bestehen bleiben wie sie sind und nicht im Dokument ersetzt werden + +STRUKTUR DES DOKUMENTS: +1. Titel & Metadaten + - Meetingtitel (ableiten) + - Datum (falls im Transkript erwähnt, sonst „nicht angegeben“) + - Teilnehmer (zusammengefasst) + +2. Executive Summary (max. 5 Bullet Points) + +3. Besprochene Themen + - Thema + - Kernaussagen + - Relevante Erkenntnisse + +4. Entscheidungen + - Entscheidung + - Kontext / Begründung + +5. Action Items + - Aufgabe + - Verantwortlich (falls ableitbar) + - Ziel / Zweck + +6. Offene Fragen & Risiken + +STIL: +- Überschriften klar strukturiert +- Bullet Points bevorzugen +- Präzise, keine Umgangssprache + +TRANSKRIPT: diff --git a/storage/documentType/result_protocol.txt b/storage/documentType/result_protocol.txt new file mode 100644 index 0000000..867289f --- /dev/null +++ b/storage/documentType/result_protocol.txt @@ -0,0 +1,27 @@ +Du bist ein professioneller Protokollführer. + +AUFGABE: +Erstelle ein Ergebnisprotokoll basierend auf dem Meeting-Transkript. + +FOKUS: +- Ergebnisse statt Diskussionen +- Entscheidungen, Beschlüsse, Vereinbarungen +- Klare, überprüfbare Aussagen + +STRUKTUR: +1. Meeting-Informationen +2. Ergebnisse je Thema + - Thema + - Ergebnis / Beschluss +3. Entscheidungen +4. Aufgaben & Verantwortlichkeiten +5. Offene Punkte + +REGELN: +- Keine Meinungen oder Spekulationen +- Keine Zeit- oder Sprecherangaben +- Sachlich, formal +- Namen aus dem Transkript speakerA, speakerB etc. sollen weiterhin bestehen bleiben wie sie sind und nicht im Dokument ersetzt werden + + +TRANSKRIPT: diff --git a/storage/documentType/sprint_planning_note.txt b/storage/documentType/sprint_planning_note.txt new file mode 100644 index 0000000..0193922 --- /dev/null +++ b/storage/documentType/sprint_planning_note.txt @@ -0,0 +1,35 @@ +Du bist ein erfahrener Scrum Master. + +AUFGABE: +Erstelle Sprint Planning Notes aus dem folgenden Meeting-Transkript. + +FOKUS: +- Sprint-Ziele +- User Stories / Tasks +- Abhängigkeiten +- Risiken +- Commitments + +STRUKTUR: +1. Sprint Overview + - Sprint-Ziel + - Zeitraum (falls erwähnt) + +2. Geplante Arbeit + - User Story / Task + - Beschreibung + - Akzeptanzkriterien (falls ableitbar) + +3. Abhängigkeiten & Blocker + +4. Risiken & Annahmen + +5. Vereinbarungen / Team-Commitments + +STIL: +- Agile-konform +- Klar & umsetzungsorientiert +- Bullet Points bevorzugen +- Namen aus dem Transkript speakerA, speakerB etc. sollen weiterhin bestehen bleiben wie sie sind und nicht im Dokument ersetzt werden + +TRANSKRIPT: diff --git a/test/unit/.gitkeep b/storage/documents/.gitkeep similarity index 100% rename from test/unit/.gitkeep rename to storage/documents/.gitkeep diff --git a/storage/transcriptionSummaries/.gitkeep b/storage/transcriptionSummaries/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/test/integration/assemblyTest.js b/test/integration/assemblyTest.js new file mode 100644 index 0000000..76a17ba --- /dev/null +++ b/test/integration/assemblyTest.js @@ -0,0 +1,18 @@ +require('dotenv').config(); +const path = require('path'); +const assemblyModule = require('../../services/modules/transcription-remote/assembly.js'); + +// Audio-Datei oder URL aus Kommandozeile, Standard: test.wav +const audioPath = process.argv[2] || './storage/audio/IMG_2978.wav'; + +(async () => { + try { + const transcript = await assemblyModule.run(audioPath); + + console.log('Transcription succesful'); + console.log('Transcript ID:', transcript?.id); + console.log('Speaker labels:', transcript?.utterances?.length || 0); + } catch (error) { + console.error('Error in Transcription:', error?.message || error); + } +})(); diff --git a/test/integration/gemini/documentType.json b/test/integration/gemini/documentType.json new file mode 100644 index 0000000..f305f06 --- /dev/null +++ b/test/integration/gemini/documentType.json @@ -0,0 +1,39 @@ + +**Goal:** Generate a structured meeting report (Markdown). **Output ONLY:** final .md. No meta. + +```json +{ + "FORMAT": "markdown", + + "STRUCTURE": { + "titlepage": ["title","date","start","end","duration","location","host","participants"], + "toc": "[section](#anchor) — HH:MM:SS", + "section": { + "h2": " — HH:MM:SS", + "summary": "1 sentence", + "key_points": "<=5 bullets, quotes optional", + "decisions": "list: text | owner | due", + "actions": "table: id | task | owner | due | status" + }, + "exec_summary": "3 short sentences", + "consolidated": ["decisions", "actions"], + "appendix": "optional" + }, + + "STYLE": { + "tone": "neutral, concise", + "ts_format": "HH:MM:SS", + "no_meta": true + }, + + "PROCESS": { + "timestamps": "use if present; else estimate minimal", + "speakers": "use labels; else Speaker X", + "long_transcripts": "chunk → summarize → merge", + "unclear": "UNKLAR:" + }, + + "JSON_OUTPUT_OPTIONAL": true, + + "PROMPT_SNIPPET": "Generate meeting report in markdown using STRUCTURE and STYLE. Output only the report." +} \ No newline at end of file diff --git a/test/integration/gemini/test-gemini.js b/test/integration/gemini/test-gemini.js new file mode 100644 index 0000000..7072c43 --- /dev/null +++ b/test/integration/gemini/test-gemini.js @@ -0,0 +1,7 @@ +const gemini = require("../../../services/modules/llm-gemini/gemini.js"); + +gemini.function({ + inputTranscriptPath: "./transcript.json", + documentTypePath: "./documentType.json", + language: "de" +}); \ No newline at end of file diff --git a/test/integration/gemini/transcript.json b/test/integration/gemini/transcript.json new file mode 100644 index 0000000..ca5b9d5 --- /dev/null +++ b/test/integration/gemini/transcript.json @@ -0,0 +1,122 @@ +[ + { + "speaker": "A", + "sentence": "Smoke from hundreds of wildfires in Canada is triggering air quality alerts throughout the US Skylines from Maine to Maryland to Minnesota are gray and smoggy. And in some places, the air quality warnings include the warning to stay inside. We wanted to better understand what's happening here and why, so we called Peter DeCarlo, an associate professor in the Department of Environmental Health and Engineering at Johns Hopkins University. Good morning, Professor.", + "start": 240, + "end": 26560 + }, + { + "speaker": "B", + "sentence": "Good morning.", + "start": 28060, + "end": 28620 + }, + { + "speaker": "A", + "sentence": "So what is it about the conditions right now that have caused this round of wildfires to affect so many people so far away?", + "start": 29100, + "end": 37100 + }, + { + "speaker": "B", + "sentence": "Well, there's a couple of things. The season has been pretty dry already, and then the fact that we're getting hit in the US is because there's a couple weather systems that are essentially channeling the smoke from those Canadian wildfires through Pennsylvania into the mid Atlantic and the Northeast and kind of just dropping the smoke there.", + "start": 39100, + "end": 55820 + }, + { + "speaker": "A", + "sentence": "So what is it in this haze that makes it harmful? And I'm assuming it is harmful.", + "start": 56590, + "end": 60670 + }, + { + "speaker": "B", + "sentence": "It is, it is. The levels outside right now in Baltimore are considered unhealthy. And most of that is due to what's called particulate matter, which are tiny particles, microscopic, smaller than the width of your hair, that can get into your lungs and impact your respiratory system, your cardiovascular system, and even your neurological, your brain.", + "start": 62350, + "end": 82590 + }, + { + "speaker": "A", + "sentence": "What makes this particularly harmful? Is it the volume of particulate? Is it something in particular? What is it exactly? Can you just drill down on that a little bit more?", + "start": 83630, + "end": 92190 + }, + { + "speaker": "B", + "sentence": "Yeah. So the concentration of particulate matter, I was looking at some of the monitors that we have was reaching levels of what are, in science speak, 150 micrograms per meter cubed, which is more than 10 times what the annual average should be in about four times higher than what you're supposed to have on a 24 hour average. And so the concentrations of these particles in the air are just much, much, much higher than we typically see. And exposure to those high levels can lead to a host of health problems.", + "start": 93550, + "end": 123350 + }, + { + "speaker": "A", + "sentence": "And who is most vulnerable? I noticed that in New York City, for example, they're canceling outdoor activities. And so here it is in the early days of summer and they have to keep all the kids inside. So who tends to be vulnerable in a situation like this?", + "start": 123430, + "end": 135990 + }, + { + "speaker": "B", + "sentence": "It's the youngest. So children, obviously, whose bodies are still developing, the elderly who are, you know, their bodies are more in decline and they're more susceptible to the health impacts of breathing, the poor air quality. And then people who have pre existing health conditions, people with respiratory conditions or heart conditions, can be triggered by high levels of air pollution.", + "start": 137610, + "end": 156650 + }, + { + "speaker": "A", + "sentence": "Could this get worse?", + "start": 157450, + "end": 158650 + }, + { + "speaker": "B", + "sentence": "That's a good question. I mean, I think if in some areas it's much worse than others and it just depends on kind of where the smoke is concentrated. I think New York has some of the higher concentrations right now, but that's going to change as that air moves away from the New York area. But over the course of the next few days, we will see different areas being hit at different times with the highest concentrations.", + "start": 162170, + "end": 183420 + }, + { + "speaker": "A", + "sentence": "I was going to ask you about.", + "start": 183740, + "end": 184660 + }, + { + "speaker": "B", + "sentence": "More fires start burning. I don't expect the concentrations to go up too much higher.", + "start": 184660, + "end": 189020 + }, + { + "speaker": "A", + "sentence": "I was going to ask you how and you started to answer this, but how much longer could this last? Forgive me if I'm asking you to speculate, but what do you think?", + "start": 189100, + "end": 196220 + }, + { + "speaker": "B", + "sentence": "Well, I think the fires are going to burn for a little bit longer. But the key for us in the US Is the weather system changing. Right now it's the weather systems that are pulling that air into our Mid Atlantic and Northeast region. As those weather systems change and shift, we'll see that smoke going elsewhere and not impact us in this region as much. I think that's going to be the defining factor. I think the next couple days we're going to see a shift in that weather pattern and start to push the smoke away from where we are.", + "start": 198280, + "end": 227480 + }, + { + "speaker": "A", + "sentence": "And finally, with the impacts of climate change, we are seeing more wildfires. Will we be seeing more of these kinds of wide ranging air quality consequences or circumstances?", + "start": 227930, + "end": 239850 + }, + { + "speaker": "B", + "sentence": "I mean, that is one of the predictions for climate change. Looking into the future, the fire season is starting earlier and lasting longer and we're seeing more frequent fires. So yeah, this is probably something that we'll be seeing more, more frequently. This tends to be much more of an issue in the western U.S. so the eastern U.S. getting hit right now is a little bit new. But yeah, I think with climate change moving forward, this is something that is going to happen more frequently.", + "start": 241370, + "end": 267570 + }, + { + "speaker": "A", + "sentence": "That's Peter DeCarlo, associate professor in the Department of Environmental Health and Engineering at Johns Hopkins University. Professor DeCarlo, thanks so much for joining us and sharing this expertise with us.", + "start": 267970, + "end": 278210 + }, + { + "speaker": "B", + "sentence": "Thank you for having me.", + "start": 279410, + "end": 280530 + } +] \ No newline at end of file diff --git a/test/integration/testFile.json b/test/integration/testFile.json new file mode 100644 index 0000000..a1de5d5 --- /dev/null +++ b/test/integration/testFile.json @@ -0,0 +1,12320 @@ +{ + "id": "e5c8854a-3ac4-4069-a0f4-3a0ef4d3dd57", + "language_model": "assemblyai_default", + "acoustic_model": "assemblyai_default", + "language_code": "en", + "speech_understanding": null, + "translated_texts": null, + "status": "completed", + "audio_url": "https://github.com/AssemblyAI-Examples/audio-examples/raw/main/20230607_me_canadian_wildfires.mp3", + "text": "Smoke from hundreds of wildfires in Canada is triggering air quality alerts throughout the US Skylines from Maine to Maryland to Minnesota are gray and smoggy. And in some places, the air quality warnings include the warning to stay inside. We wanted to better understand what's happening here and why, so we called Peter DeCarlo, an associate professor in the Department of Environmental Health and Engineering at Johns Hopkins University. Good morning, Professor. Good morning. So what is it about the conditions right now that have caused this round of wildfires to affect so many people so far away? Well, there's a couple of things. The season has been pretty dry already, and then the fact that we're getting hit in the US is because there's a couple weather systems that are essentially channeling the smoke from those Canadian wildfires through Pennsylvania into the mid Atlantic and the Northeast and kind of just dropping the smoke there. So what is it in this haze that makes it harmful? And I'm assuming it is harmful. It is, it is. The levels outside right now in Baltimore are considered unhealthy. And most of that is due to what's called particulate matter, which are tiny particles, microscopic, smaller than the width of your hair, that can get into your lungs and impact your respiratory system, your cardiovascular system, and even your neurological, your brain. What makes this particularly harmful? Is it the volume of particulate? Is it something in particular? What is it exactly? Can you just drill down on that a little bit more? Yeah. So the concentration of particulate matter, I was looking at some of the monitors that we have was reaching levels of what are, in science speak, 150 micrograms per meter cubed, which is more than 10 times what the annual average should be in about four times higher than what you're supposed to have on a 24 hour average. And so the concentrations of these particles in the air are just much, much, much higher than we typically see. And exposure to those high levels can lead to a host of health problems. And who is most vulnerable? I noticed that in New York City, for example, they're canceling outdoor activities. And so here it is in the early days of summer and they have to keep all the kids inside. So who tends to be vulnerable in a situation like this? It's the youngest. So children, obviously, whose bodies are still developing, the elderly who are, you know, their bodies are more in decline and they're more susceptible to the health impacts of breathing, the poor air quality. And then people who have pre existing health conditions, people with respiratory conditions or heart conditions, can be triggered by high levels of air pollution. Could this get worse? That's a good question. I mean, I think if in some areas it's much worse than others and it just depends on kind of where the smoke is concentrated. I think New York has some of the higher concentrations right now, but that's going to change as that air moves away from the New York area. But over the course of the next few days, we will see different areas being hit at different times with the highest concentrations. I was going to ask you about. More fires start burning. I don't expect the concentrations to go up too much higher. I was going to ask you how and you started to answer this, but how much longer could this last? Forgive me if I'm asking you to speculate, but what do you think? Well, I think the fires are going to burn for a little bit longer. But the key for us in the US Is the weather system changing. Right now it's the weather systems that are pulling that air into our Mid Atlantic and Northeast region. As those weather systems change and shift, we'll see that smoke going elsewhere and not impact us in this region as much. I think that's going to be the defining factor. I think the next couple days we're going to see a shift in that weather pattern and start to push the smoke away from where we are. And finally, with the impacts of climate change, we are seeing more wildfires. Will we be seeing more of these kinds of wide ranging air quality consequences or circumstances? I mean, that is one of the predictions for climate change. Looking into the future, the fire season is starting earlier and lasting longer and we're seeing more frequent fires. So yeah, this is probably something that we'll be seeing more, more frequently. This tends to be much more of an issue in the western U.S. so the eastern U.S. getting hit right now is a little bit new. But yeah, I think with climate change moving forward, this is something that is going to happen more frequently. That's Peter DeCarlo, associate professor in the Department of Environmental Health and Engineering at Johns Hopkins University. Professor DeCarlo, thanks so much for joining us and sharing this expertise with us. Thank you for having me.", + "words": [ + { + "text": "Smoke", + "start": 240, + "end": 640, + "confidence": 0.90152997, + "speaker": "A" + }, + { + "text": "from", + "start": 640, + "end": 1000, + "confidence": 0.9995117, + "speaker": "A" + }, + { + "text": "hundreds", + "start": 1000, + "end": 1480, + "confidence": 0.99902344, + "speaker": "A" + }, + { + "text": "of", + "start": 1480, + "end": 1640, + "confidence": 0.99902344, + "speaker": "A" + }, + { + "text": "wildfires", + "start": 1640, + "end": 2320, + "confidence": 0.99970704, + "speaker": "A" + }, + { + "text": "in", + "start": 2320, + "end": 2480, + "confidence": 0.9980469, + "speaker": "A" + }, + { + "text": "Canada", + "start": 2480, + "end": 2800, + "confidence": 1, + "speaker": "A" + }, + { + "text": "is", + "start": 3120, + "end": 3440, + "confidence": 0.99658203, + "speaker": "A" + }, + { + "text": "triggering", + "start": 3440, + "end": 3920, + "confidence": 0.9998779, + "speaker": "A" + }, + { + "text": "air", + "start": 3920, + "end": 4160, + "confidence": 1, + "speaker": "A" + }, + { + "text": "quality", + "start": 4160, + "end": 4640, + "confidence": 0.78100586, + "speaker": "A" + }, + { + "text": "alerts", + "start": 4640, + "end": 5120, + "confidence": 0.9013672, + "speaker": "A" + }, + { + "text": "throughout", + "start": 5120, + "end": 5480, + "confidence": 0.9995117, + "speaker": "A" + }, + { + "text": "the", + "start": 5480, + "end": 5680, + "confidence": 0.9995117, + "speaker": "A" + }, + { + "text": "US", + "start": 5680, + "end": 6000, + "confidence": 0.9770508, + "speaker": "A" + }, + { + "text": "Skylines", + "start": 6480, + "end": 7280, + "confidence": 0.9996338, + "speaker": "A" + }, + { + "text": "from", + "start": 7280, + "end": 7440, + "confidence": 0.99853516, + "speaker": "A" + }, + { + "text": "Maine", + "start": 7440, + "end": 7920, + "confidence": 0.84106445, + "speaker": "A" + }, + { + "text": "to", + "start": 8000, + "end": 8280, + "confidence": 0.9975586, + "speaker": "A" + }, + { + "text": "Maryland", + "start": 8280, + "end": 8680, + "confidence": 0.9978841, + "speaker": "A" + }, + { + "text": "to", + "start": 8680, + "end": 8920, + "confidence": 0.99609375, + "speaker": "A" + }, + { + "text": "Minnesota", + "start": 8920, + "end": 9640, + "confidence": 0.99975586, + "speaker": "A" + }, + { + "text": "are", + "start": 9640, + "end": 9920, + "confidence": 0.99902344, + "speaker": "A" + }, + { + "text": "gray", + "start": 9920, + "end": 10200, + "confidence": 0.7348633, + "speaker": "A" + }, + { + "text": "and", + "start": 10200, + "end": 10400, + "confidence": 0.9995117, + "speaker": "A" + }, + { + "text": "smoggy.", + "start": 10400, + "end": 11040, + "confidence": 0.9984131, + "speaker": "A" + }, + { + "text": "And", + "start": 11040, + "end": 11360, + "confidence": 0.97021484, + "speaker": "A" + }, + { + "text": "in", + "start": 11360, + "end": 11560, + "confidence": 0.99853516, + "speaker": "A" + }, + { + "text": "some", + "start": 11560, + "end": 11760, + "confidence": 1, + "speaker": "A" + }, + { + "text": "places,", + "start": 11760, + "end": 12120, + "confidence": 0.99902344, + "speaker": "A" + }, + { + "text": "the", + "start": 12120, + "end": 12320, + "confidence": 0.9975586, + "speaker": "A" + }, + { + "text": "air", + "start": 12320, + "end": 12560, + "confidence": 0.9995117, + "speaker": "A" + }, + { + "text": "quality", + "start": 12560, + "end": 12960, + "confidence": 1, + "speaker": "A" + }, + { + "text": "warnings", + "start": 12960, + "end": 13400, + "confidence": 0.99820966, + "speaker": "A" + }, + { + "text": "include", + "start": 13400, + "end": 13680, + "confidence": 0.99902344, + "speaker": "A" + }, + { + "text": "the", + "start": 13680, + "end": 13960, + "confidence": 0.9980469, + "speaker": "A" + }, + { + "text": "warning", + "start": 13960, + "end": 14240, + "confidence": 0.9992676, + "speaker": "A" + }, + { + "text": "to", + "start": 14240, + "end": 14480, + "confidence": 0.99902344, + "speaker": "A" + }, + { + "text": "stay", + "start": 14480, + "end": 14800, + "confidence": 0.99902344, + "speaker": "A" + }, + { + "text": "inside.", + "start": 14880, + "end": 15520, + "confidence": 1, + "speaker": "A" + }, + { + "text": "We", + "start": 15919, + "end": 16199, + "confidence": 0.99853516, + "speaker": "A" + }, + { + "text": "wanted", + "start": 16199, + "end": 16400, + "confidence": 0.99243164, + "speaker": "A" + }, + { + "text": "to", + "start": 16400, + "end": 16520, + "confidence": 0.9975586, + "speaker": "A" + }, + { + "text": "better", + "start": 16520, + "end": 16720, + "confidence": 0.9980469, + "speaker": "A" + }, + { + "text": "understand", + "start": 16720, + "end": 17040, + "confidence": 0.9995117, + "speaker": "A" + }, + { + "text": "what's", + "start": 17040, + "end": 17440, + "confidence": 0.9926758, + "speaker": "A" + }, + { + "text": "happening", + "start": 17440, + "end": 17760, + "confidence": 0.8527832, + "speaker": "A" + }, + { + "text": "here", + "start": 17760, + "end": 18000, + "confidence": 0.9970703, + "speaker": "A" + }, + { + "text": "and", + "start": 18000, + "end": 18200, + "confidence": 0.99609375, + "speaker": "A" + }, + { + "text": "why,", + "start": 18200, + "end": 18440, + "confidence": 0.9995117, + "speaker": "A" + }, + { + "text": "so", + "start": 18440, + "end": 18640, + "confidence": 0.9863281, + "speaker": "A" + }, + { + "text": "we", + "start": 18640, + "end": 18760, + "confidence": 0.9838867, + "speaker": "A" + }, + { + "text": "called", + "start": 18760, + "end": 18920, + "confidence": 0.99560547, + "speaker": "A" + }, + { + "text": "Peter", + "start": 18920, + "end": 19240, + "confidence": 0.9980469, + "speaker": "A" + }, + { + "text": "DeCarlo,", + "start": 19240, + "end": 19920, + "confidence": 0.88265, + "speaker": "A" + }, + { + "text": "an", + "start": 20000, + "end": 20280, + "confidence": 0.9604492, + "speaker": "A" + }, + { + "text": "associate", + "start": 20280, + "end": 20720, + "confidence": 1, + "speaker": "A" + }, + { + "text": "professor", + "start": 20720, + "end": 21160, + "confidence": 1, + "speaker": "A" + }, + { + "text": "in", + "start": 21160, + "end": 21320, + "confidence": 0.99316406, + "speaker": "A" + }, + { + "text": "the", + "start": 21320, + "end": 21480, + "confidence": 0.99853516, + "speaker": "A" + }, + { + "text": "Department", + "start": 21480, + "end": 21760, + "confidence": 0.99902344, + "speaker": "A" + }, + { + "text": "of", + "start": 21760, + "end": 22040, + "confidence": 0.9995117, + "speaker": "A" + }, + { + "text": "Environmental", + "start": 22040, + "end": 22720, + "confidence": 0.9987793, + "speaker": "A" + }, + { + "text": "Health", + "start": 22720, + "end": 22960, + "confidence": 0.9975586, + "speaker": "A" + }, + { + "text": "and", + "start": 22960, + "end": 23200, + "confidence": 0.9951172, + "speaker": "A" + }, + { + "text": "Engineering", + "start": 23200, + "end": 23680, + "confidence": 1, + "speaker": "A" + }, + { + "text": "at", + "start": 23680, + "end": 23920, + "confidence": 0.99853516, + "speaker": "A" + }, + { + "text": "Johns", + "start": 23920, + "end": 24360, + "confidence": 0.9733887, + "speaker": "A" + }, + { + "text": "Hopkins", + "start": 24360, + "end": 24840, + "confidence": 1, + "speaker": "A" + }, + { + "text": "University.", + "start": 24840, + "end": 25200, + "confidence": 0.9995117, + "speaker": "A" + }, + { + "text": "Good", + "start": 25520, + "end": 25800, + "confidence": 0.9995117, + "speaker": "A" + }, + { + "text": "morning,", + "start": 25800, + "end": 26000, + "confidence": 1, + "speaker": "A" + }, + { + "text": "Professor.", + "start": 26000, + "end": 26560, + "confidence": 0.9995117, + "speaker": "A" + }, + { + "text": "Good", + "start": 28060, + "end": 28260, + "confidence": 0.96484375, + "speaker": "B" + }, + { + "text": "morning.", + "start": 28260, + "end": 28620, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "So", + "start": 29100, + "end": 29500, + "confidence": 0.6220703, + "speaker": "A" + }, + { + "text": "what", + "start": 29660, + "end": 29940, + "confidence": 0.9995117, + "speaker": "A" + }, + { + "text": "is", + "start": 29940, + "end": 30100, + "confidence": 0.9980469, + "speaker": "A" + }, + { + "text": "it", + "start": 30100, + "end": 30260, + "confidence": 0.9941406, + "speaker": "A" + }, + { + "text": "about", + "start": 30260, + "end": 30500, + "confidence": 0.9995117, + "speaker": "A" + }, + { + "text": "the", + "start": 30500, + "end": 30740, + "confidence": 0.99853516, + "speaker": "A" + }, + { + "text": "conditions", + "start": 30740, + "end": 31260, + "confidence": 1, + "speaker": "A" + }, + { + "text": "right", + "start": 31260, + "end": 31660, + "confidence": 0.99902344, + "speaker": "A" + }, + { + "text": "now", + "start": 31660, + "end": 32060, + "confidence": 0.9995117, + "speaker": "A" + }, + { + "text": "that", + "start": 32140, + "end": 32420, + "confidence": 0.99902344, + "speaker": "A" + }, + { + "text": "have", + "start": 32420, + "end": 32620, + "confidence": 0.99121094, + "speaker": "A" + }, + { + "text": "caused", + "start": 32620, + "end": 32980, + "confidence": 0.9707031, + "speaker": "A" + }, + { + "text": "this", + "start": 32980, + "end": 33260, + "confidence": 0.99853516, + "speaker": "A" + }, + { + "text": "round", + "start": 33260, + "end": 33500, + "confidence": 1, + "speaker": "A" + }, + { + "text": "of", + "start": 33500, + "end": 33740, + "confidence": 0.9995117, + "speaker": "A" + }, + { + "text": "wildfires", + "start": 33740, + "end": 34540, + "confidence": 0.9995117, + "speaker": "A" + }, + { + "text": "to", + "start": 34540, + "end": 34700, + "confidence": 0.99853516, + "speaker": "A" + }, + { + "text": "affect", + "start": 34700, + "end": 35140, + "confidence": 0.9914551, + "speaker": "A" + }, + { + "text": "so", + "start": 35140, + "end": 35380, + "confidence": 0.99902344, + "speaker": "A" + }, + { + "text": "many", + "start": 35380, + "end": 35580, + "confidence": 0.9995117, + "speaker": "A" + }, + { + "text": "people", + "start": 35580, + "end": 35900, + "confidence": 0.9995117, + "speaker": "A" + }, + { + "text": "so", + "start": 36300, + "end": 36580, + "confidence": 1, + "speaker": "A" + }, + { + "text": "far", + "start": 36580, + "end": 36780, + "confidence": 1, + "speaker": "A" + }, + { + "text": "away?", + "start": 36780, + "end": 37100, + "confidence": 0.9975586, + "speaker": "A" + }, + { + "text": "Well,", + "start": 39100, + "end": 39380, + "confidence": 0.9394531, + "speaker": "B" + }, + { + "text": "there's", + "start": 39380, + "end": 39580, + "confidence": 0.98844403, + "speaker": "B" + }, + { + "text": "a", + "start": 39580, + "end": 39660, + "confidence": 0.99902344, + "speaker": "B" + }, + { + "text": "couple", + "start": 39660, + "end": 39860, + "confidence": 0.99902344, + "speaker": "B" + }, + { + "text": "of", + "start": 39860, + "end": 40020, + "confidence": 0.94628906, + "speaker": "B" + }, + { + "text": "things.", + "start": 40020, + "end": 40300, + "confidence": 0.9428711, + "speaker": "B" + }, + { + "text": "The", + "start": 41020, + "end": 41340, + "confidence": 0.99853516, + "speaker": "B" + }, + { + "text": "season", + "start": 41340, + "end": 41620, + "confidence": 1, + "speaker": "B" + }, + { + "text": "has", + "start": 41620, + "end": 41820, + "confidence": 0.9980469, + "speaker": "B" + }, + { + "text": "been", + "start": 41820, + "end": 41940, + "confidence": 0.99853516, + "speaker": "B" + }, + { + "text": "pretty", + "start": 41940, + "end": 42140, + "confidence": 0.99902344, + "speaker": "B" + }, + { + "text": "dry", + "start": 42140, + "end": 42340, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "already,", + "start": 42340, + "end": 42620, + "confidence": 0.99853516, + "speaker": "B" + }, + { + "text": "and", + "start": 43020, + "end": 43340, + "confidence": 0.9794922, + "speaker": "B" + }, + { + "text": "then", + "start": 43340, + "end": 43660, + "confidence": 0.9892578, + "speaker": "B" + }, + { + "text": "the", + "start": 43660, + "end": 43940, + "confidence": 0.99902344, + "speaker": "B" + }, + { + "text": "fact", + "start": 43940, + "end": 44100, + "confidence": 1, + "speaker": "B" + }, + { + "text": "that", + "start": 44100, + "end": 44260, + "confidence": 0.99609375, + "speaker": "B" + }, + { + "text": "we're", + "start": 44260, + "end": 44500, + "confidence": 0.8828125, + "speaker": "B" + }, + { + "text": "getting", + "start": 44500, + "end": 44740, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "hit", + "start": 44740, + "end": 44980, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "in", + "start": 44980, + "end": 45140, + "confidence": 0.99902344, + "speaker": "B" + }, + { + "text": "the", + "start": 45140, + "end": 45300, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "US", + "start": 45300, + "end": 45580, + "confidence": 0.9863281, + "speaker": "B" + }, + { + "text": "is", + "start": 46140, + "end": 46460, + "confidence": 0.9975586, + "speaker": "B" + }, + { + "text": "because", + "start": 46460, + "end": 46700, + "confidence": 0.99902344, + "speaker": "B" + }, + { + "text": "there's", + "start": 46700, + "end": 47020, + "confidence": 0.99316406, + "speaker": "B" + }, + { + "text": "a", + "start": 47020, + "end": 47100, + "confidence": 0.99902344, + "speaker": "B" + }, + { + "text": "couple", + "start": 47100, + "end": 47340, + "confidence": 0.9975586, + "speaker": "B" + }, + { + "text": "weather", + "start": 47340, + "end": 47660, + "confidence": 0.9992676, + "speaker": "B" + }, + { + "text": "systems", + "start": 47660, + "end": 47980, + "confidence": 0.9987793, + "speaker": "B" + }, + { + "text": "that", + "start": 47980, + "end": 48060, + "confidence": 0.9941406, + "speaker": "B" + }, + { + "text": "are", + "start": 48060, + "end": 48180, + "confidence": 0.99658203, + "speaker": "B" + }, + { + "text": "essentially", + "start": 48180, + "end": 48580, + "confidence": 0.99853516, + "speaker": "B" + }, + { + "text": "channeling", + "start": 48580, + "end": 49020, + "confidence": 0.970459, + "speaker": "B" + }, + { + "text": "the", + "start": 49020, + "end": 49140, + "confidence": 0.98828125, + "speaker": "B" + }, + { + "text": "smoke", + "start": 49140, + "end": 49380, + "confidence": 0.9682617, + "speaker": "B" + }, + { + "text": "from", + "start": 49380, + "end": 49540, + "confidence": 0.99902344, + "speaker": "B" + }, + { + "text": "those", + "start": 49540, + "end": 49700, + "confidence": 0.96875, + "speaker": "B" + }, + { + "text": "Canadian", + "start": 49700, + "end": 50100, + "confidence": 0.99902344, + "speaker": "B" + }, + { + "text": "wildfires", + "start": 50100, + "end": 50780, + "confidence": 0.9993164, + "speaker": "B" + }, + { + "text": "through", + "start": 51260, + "end": 51620, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "Pennsylvania", + "start": 51620, + "end": 52340, + "confidence": 0.9989692, + "speaker": "B" + }, + { + "text": "into", + "start": 52340, + "end": 52500, + "confidence": 0.9980469, + "speaker": "B" + }, + { + "text": "the", + "start": 52500, + "end": 52660, + "confidence": 0.99902344, + "speaker": "B" + }, + { + "text": "mid", + "start": 52660, + "end": 52820, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "Atlantic", + "start": 52820, + "end": 53180, + "confidence": 0.99902344, + "speaker": "B" + }, + { + "text": "and", + "start": 53180, + "end": 53300, + "confidence": 0.52978516, + "speaker": "B" + }, + { + "text": "the", + "start": 53300, + "end": 53420, + "confidence": 0.9785156, + "speaker": "B" + }, + { + "text": "Northeast", + "start": 53420, + "end": 53860, + "confidence": 0.9975586, + "speaker": "B" + }, + { + "text": "and", + "start": 53860, + "end": 54140, + "confidence": 0.8803711, + "speaker": "B" + }, + { + "text": "kind", + "start": 54220, + "end": 54460, + "confidence": 0.8515625, + "speaker": "B" + }, + { + "text": "of", + "start": 54460, + "end": 54580, + "confidence": 0.98779297, + "speaker": "B" + }, + { + "text": "just", + "start": 54580, + "end": 54740, + "confidence": 0.98583984, + "speaker": "B" + }, + { + "text": "dropping", + "start": 54740, + "end": 55140, + "confidence": 0.99975586, + "speaker": "B" + }, + { + "text": "the", + "start": 55140, + "end": 55260, + "confidence": 0.9824219, + "speaker": "B" + }, + { + "text": "smoke", + "start": 55260, + "end": 55540, + "confidence": 0.99902344, + "speaker": "B" + }, + { + "text": "there.", + "start": 55540, + "end": 55820, + "confidence": 0.9975586, + "speaker": "B" + }, + { + "text": "So", + "start": 56590, + "end": 56670, + "confidence": 0.8666992, + "speaker": "A" + }, + { + "text": "what", + "start": 56670, + "end": 56790, + "confidence": 0.9995117, + "speaker": "A" + }, + { + "text": "is", + "start": 56790, + "end": 56950, + "confidence": 0.9980469, + "speaker": "A" + }, + { + "text": "it", + "start": 56950, + "end": 57110, + "confidence": 0.9814453, + "speaker": "A" + }, + { + "text": "in", + "start": 57110, + "end": 57270, + "confidence": 0.9980469, + "speaker": "A" + }, + { + "text": "this", + "start": 57270, + "end": 57470, + "confidence": 0.99853516, + "speaker": "A" + }, + { + "text": "haze", + "start": 57470, + "end": 57910, + "confidence": 0.9347331, + "speaker": "A" + }, + { + "text": "that", + "start": 57910, + "end": 58110, + "confidence": 0.99902344, + "speaker": "A" + }, + { + "text": "makes", + "start": 58110, + "end": 58430, + "confidence": 0.99902344, + "speaker": "A" + }, + { + "text": "it", + "start": 58510, + "end": 58830, + "confidence": 0.99853516, + "speaker": "A" + }, + { + "text": "harmful?", + "start": 58830, + "end": 59310, + "confidence": 0.9998372, + "speaker": "A" + }, + { + "text": "And", + "start": 59310, + "end": 59470, + "confidence": 0.71435547, + "speaker": "A" + }, + { + "text": "I'm", + "start": 59470, + "end": 59670, + "confidence": 0.98307294, + "speaker": "A" + }, + { + "text": "assuming", + "start": 59670, + "end": 59990, + "confidence": 1, + "speaker": "A" + }, + { + "text": "it", + "start": 59990, + "end": 60110, + "confidence": 0.99902344, + "speaker": "A" + }, + { + "text": "is", + "start": 60110, + "end": 60230, + "confidence": 0.99853516, + "speaker": "A" + }, + { + "text": "harmful.", + "start": 60230, + "end": 60670, + "confidence": 0.91780597, + "speaker": "A" + }, + { + "text": "It", + "start": 62350, + "end": 62630, + "confidence": 0.9238281, + "speaker": "B" + }, + { + "text": "is,", + "start": 62630, + "end": 62870, + "confidence": 0.99316406, + "speaker": "B" + }, + { + "text": "it", + "start": 62870, + "end": 63110, + "confidence": 0.8666992, + "speaker": "B" + }, + { + "text": "is.", + "start": 63110, + "end": 63350, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "The", + "start": 63350, + "end": 63590, + "confidence": 0.99560547, + "speaker": "B" + }, + { + "text": "levels", + "start": 63590, + "end": 64030, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "outside", + "start": 64030, + "end": 64430, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "right", + "start": 64510, + "end": 64790, + "confidence": 0.9980469, + "speaker": "B" + }, + { + "text": "now", + "start": 64790, + "end": 64950, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "in", + "start": 64950, + "end": 65110, + "confidence": 0.99658203, + "speaker": "B" + }, + { + "text": "Baltimore", + "start": 65110, + "end": 65590, + "confidence": 0.9998047, + "speaker": "B" + }, + { + "text": "are", + "start": 65590, + "end": 65750, + "confidence": 0.99658203, + "speaker": "B" + }, + { + "text": "considered", + "start": 65750, + "end": 66070, + "confidence": 0.99975586, + "speaker": "B" + }, + { + "text": "unhealthy.", + "start": 66070, + "end": 66750, + "confidence": 0.99902344, + "speaker": "B" + }, + { + "text": "And", + "start": 67790, + "end": 68110, + "confidence": 0.67822266, + "speaker": "B" + }, + { + "text": "most", + "start": 68110, + "end": 68310, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "of", + "start": 68310, + "end": 68470, + "confidence": 0.99902344, + "speaker": "B" + }, + { + "text": "that", + "start": 68470, + "end": 68630, + "confidence": 0.99902344, + "speaker": "B" + }, + { + "text": "is", + "start": 68630, + "end": 68790, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "due", + "start": 68790, + "end": 68990, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "to", + "start": 68990, + "end": 69270, + "confidence": 0.99902344, + "speaker": "B" + }, + { + "text": "what's", + "start": 69270, + "end": 69630, + "confidence": 0.9916992, + "speaker": "B" + }, + { + "text": "called", + "start": 69630, + "end": 69750, + "confidence": 1, + "speaker": "B" + }, + { + "text": "particulate", + "start": 69750, + "end": 70310, + "confidence": 0.99886066, + "speaker": "B" + }, + { + "text": "matter,", + "start": 70310, + "end": 70470, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "which", + "start": 70470, + "end": 70670, + "confidence": 0.9970703, + "speaker": "B" + }, + { + "text": "are", + "start": 70670, + "end": 70870, + "confidence": 0.99902344, + "speaker": "B" + }, + { + "text": "tiny", + "start": 70870, + "end": 71190, + "confidence": 1, + "speaker": "B" + }, + { + "text": "particles,", + "start": 71190, + "end": 71630, + "confidence": 0.7578125, + "speaker": "B" + }, + { + "text": "microscopic,", + "start": 72110, + "end": 72910, + "confidence": 0.97957355, + "speaker": "B" + }, + { + "text": "smaller", + "start": 72910, + "end": 73310, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "than", + "start": 73310, + "end": 73390, + "confidence": 0.99902344, + "speaker": "B" + }, + { + "text": "the", + "start": 73390, + "end": 73470, + "confidence": 0.99902344, + "speaker": "B" + }, + { + "text": "width", + "start": 73470, + "end": 73670, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "of", + "start": 73670, + "end": 73950, + "confidence": 0.98095703, + "speaker": "B" + }, + { + "text": "your", + "start": 73950, + "end": 74270, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "hair,", + "start": 74270, + "end": 74670, + "confidence": 0.99975586, + "speaker": "B" + }, + { + "text": "that", + "start": 75230, + "end": 75550, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "can", + "start": 75550, + "end": 75750, + "confidence": 0.99902344, + "speaker": "B" + }, + { + "text": "get", + "start": 75750, + "end": 75910, + "confidence": 1, + "speaker": "B" + }, + { + "text": "into", + "start": 75910, + "end": 76070, + "confidence": 0.99853516, + "speaker": "B" + }, + { + "text": "your", + "start": 76070, + "end": 76230, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "lungs", + "start": 76230, + "end": 76550, + "confidence": 1, + "speaker": "B" + }, + { + "text": "and", + "start": 76550, + "end": 76830, + "confidence": 0.9145508, + "speaker": "B" + }, + { + "text": "impact", + "start": 76910, + "end": 77270, + "confidence": 1, + "speaker": "B" + }, + { + "text": "your", + "start": 77270, + "end": 77590, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "respiratory", + "start": 77590, + "end": 78150, + "confidence": 0.99886066, + "speaker": "B" + }, + { + "text": "system,", + "start": 78150, + "end": 78470, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "your", + "start": 78470, + "end": 78710, + "confidence": 0.99316406, + "speaker": "B" + }, + { + "text": "cardiovascular", + "start": 78710, + "end": 79470, + "confidence": 0.99958146, + "speaker": "B" + }, + { + "text": "system,", + "start": 79470, + "end": 79790, + "confidence": 1, + "speaker": "B" + }, + { + "text": "and", + "start": 80430, + "end": 80710, + "confidence": 0.99121094, + "speaker": "B" + }, + { + "text": "even", + "start": 80710, + "end": 80910, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "your", + "start": 80910, + "end": 81230, + "confidence": 0.53027344, + "speaker": "B" + }, + { + "text": "neurological,", + "start": 81310, + "end": 82030, + "confidence": 0.99768066, + "speaker": "B" + }, + { + "text": "your", + "start": 82030, + "end": 82230, + "confidence": 0.9746094, + "speaker": "B" + }, + { + "text": "brain.", + "start": 82230, + "end": 82590, + "confidence": 0.9992676, + "speaker": "B" + }, + { + "text": "What", + "start": 83630, + "end": 83790, + "confidence": 0.99609375, + "speaker": "A" + }, + { + "text": "makes", + "start": 83790, + "end": 83990, + "confidence": 0.99902344, + "speaker": "A" + }, + { + "text": "this", + "start": 83990, + "end": 84190, + "confidence": 0.9423828, + "speaker": "A" + }, + { + "text": "particularly", + "start": 84190, + "end": 84990, + "confidence": 0.9992676, + "speaker": "A" + }, + { + "text": "harmful?", + "start": 84990, + "end": 85550, + "confidence": 0.9998372, + "speaker": "A" + }, + { + "text": "Is", + "start": 85550, + "end": 85750, + "confidence": 0.9980469, + "speaker": "A" + }, + { + "text": "it", + "start": 85750, + "end": 85870, + "confidence": 0.9946289, + "speaker": "A" + }, + { + "text": "the", + "start": 85870, + "end": 86110, + "confidence": 0.59228516, + "speaker": "A" + }, + { + "text": "volume", + "start": 86670, + "end": 87150, + "confidence": 0.8741862, + "speaker": "A" + }, + { + "text": "of", + "start": 87150, + "end": 87390, + "confidence": 0.9995117, + "speaker": "A" + }, + { + "text": "particulate?", + "start": 87390, + "end": 88030, + "confidence": 0.8585612, + "speaker": "A" + }, + { + "text": "Is", + "start": 88030, + "end": 88230, + "confidence": 0.9892578, + "speaker": "A" + }, + { + "text": "it", + "start": 88230, + "end": 88390, + "confidence": 0.99609375, + "speaker": "A" + }, + { + "text": "something", + "start": 88390, + "end": 88590, + "confidence": 0.99902344, + "speaker": "A" + }, + { + "text": "in", + "start": 88590, + "end": 88790, + "confidence": 0.96435547, + "speaker": "A" + }, + { + "text": "particular?", + "start": 88790, + "end": 89070, + "confidence": 0.97753906, + "speaker": "A" + }, + { + "text": "What", + "start": 89390, + "end": 89670, + "confidence": 0.9975586, + "speaker": "A" + }, + { + "text": "is", + "start": 89670, + "end": 89790, + "confidence": 0.99902344, + "speaker": "A" + }, + { + "text": "it", + "start": 89790, + "end": 89910, + "confidence": 0.9946289, + "speaker": "A" + }, + { + "text": "exactly?", + "start": 89910, + "end": 90350, + "confidence": 0.92545575, + "speaker": "A" + }, + { + "text": "Can", + "start": 90350, + "end": 90510, + "confidence": 0.99902344, + "speaker": "A" + }, + { + "text": "you", + "start": 90510, + "end": 90590, + "confidence": 1, + "speaker": "A" + }, + { + "text": "just", + "start": 90590, + "end": 90790, + "confidence": 0.98095703, + "speaker": "A" + }, + { + "text": "drill", + "start": 90790, + "end": 91070, + "confidence": 1, + "speaker": "A" + }, + { + "text": "down", + "start": 91070, + "end": 91190, + "confidence": 1, + "speaker": "A" + }, + { + "text": "on", + "start": 91190, + "end": 91350, + "confidence": 0.9980469, + "speaker": "A" + }, + { + "text": "that", + "start": 91350, + "end": 91510, + "confidence": 0.99902344, + "speaker": "A" + }, + { + "text": "a", + "start": 91510, + "end": 91630, + "confidence": 0.9980469, + "speaker": "A" + }, + { + "text": "little", + "start": 91630, + "end": 91750, + "confidence": 0.9995117, + "speaker": "A" + }, + { + "text": "bit", + "start": 91750, + "end": 91910, + "confidence": 0.9970703, + "speaker": "A" + }, + { + "text": "more?", + "start": 91910, + "end": 92190, + "confidence": 0.99902344, + "speaker": "A" + }, + { + "text": "Yeah.", + "start": 93550, + "end": 93950, + "confidence": 0.9145508, + "speaker": "B" + }, + { + "text": "So", + "start": 93950, + "end": 94150, + "confidence": 0.5620117, + "speaker": "B" + }, + { + "text": "the", + "start": 94150, + "end": 94310, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "concentration", + "start": 94310, + "end": 94830, + "confidence": 1, + "speaker": "B" + }, + { + "text": "of", + "start": 94830, + "end": 95070, + "confidence": 1, + "speaker": "B" + }, + { + "text": "particulate", + "start": 95070, + "end": 95630, + "confidence": 0.99934894, + "speaker": "B" + }, + { + "text": "matter,", + "start": 95630, + "end": 95950, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "I", + "start": 96350, + "end": 96590, + "confidence": 0.99316406, + "speaker": "B" + }, + { + "text": "was", + "start": 96590, + "end": 96710, + "confidence": 0.99902344, + "speaker": "B" + }, + { + "text": "looking", + "start": 96710, + "end": 96870, + "confidence": 0.99902344, + "speaker": "B" + }, + { + "text": "at", + "start": 96870, + "end": 96990, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "some", + "start": 96990, + "end": 97110, + "confidence": 0.99853516, + "speaker": "B" + }, + { + "text": "of", + "start": 97110, + "end": 97230, + "confidence": 0.99853516, + "speaker": "B" + }, + { + "text": "the", + "start": 97230, + "end": 97310, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "monitors", + "start": 97310, + "end": 97630, + "confidence": 0.99934894, + "speaker": "B" + }, + { + "text": "that", + "start": 97630, + "end": 97750, + "confidence": 0.9824219, + "speaker": "B" + }, + { + "text": "we", + "start": 97750, + "end": 97910, + "confidence": 0.99560547, + "speaker": "B" + }, + { + "text": "have", + "start": 97910, + "end": 98190, + "confidence": 0.94677734, + "speaker": "B" + }, + { + "text": "was", + "start": 98270, + "end": 98550, + "confidence": 0.9838867, + "speaker": "B" + }, + { + "text": "reaching", + "start": 98550, + "end": 98869, + "confidence": 1, + "speaker": "B" + }, + { + "text": "levels", + "start": 98869, + "end": 99150, + "confidence": 1, + "speaker": "B" + }, + { + "text": "of", + "start": 99150, + "end": 99270, + "confidence": 0.9921875, + "speaker": "B" + }, + { + "text": "what", + "start": 99270, + "end": 99430, + "confidence": 0.88671875, + "speaker": "B" + }, + { + "text": "are,", + "start": 99430, + "end": 99710, + "confidence": 0.97509766, + "speaker": "B" + }, + { + "text": "in", + "start": 100910, + "end": 101190, + "confidence": 0.9838867, + "speaker": "B" + }, + { + "text": "science", + "start": 101190, + "end": 101430, + "confidence": 0.99731445, + "speaker": "B" + }, + { + "text": "speak,", + "start": 101430, + "end": 101710, + "confidence": 0.8635254, + "speaker": "B" + }, + { + "text": "150", + "start": 101710, + "end": 102350, + "confidence": 0.98551, + "speaker": "B" + }, + { + "text": "micrograms", + "start": 102350, + "end": 102910, + "confidence": 0.9963379, + "speaker": "B" + }, + { + "text": "per", + "start": 102910, + "end": 103030, + "confidence": 0.9941406, + "speaker": "B" + }, + { + "text": "meter", + "start": 103030, + "end": 103350, + "confidence": 0.99853516, + "speaker": "B" + }, + { + "text": "cubed,", + "start": 103350, + "end": 103670, + "confidence": 0.9954427, + "speaker": "B" + }, + { + "text": "which", + "start": 103670, + "end": 103830, + "confidence": 1, + "speaker": "B" + }, + { + "text": "is", + "start": 103830, + "end": 104110, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "more", + "start": 104270, + "end": 104550, + "confidence": 1, + "speaker": "B" + }, + { + "text": "than", + "start": 104550, + "end": 104790, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "10", + "start": 104790, + "end": 105110, + "confidence": 1, + "speaker": "B" + }, + { + "text": "times", + "start": 105110, + "end": 105390, + "confidence": 0.9980469, + "speaker": "B" + }, + { + "text": "what", + "start": 105390, + "end": 105590, + "confidence": 0.99365234, + "speaker": "B" + }, + { + "text": "the", + "start": 105590, + "end": 105750, + "confidence": 1, + "speaker": "B" + }, + { + "text": "annual", + "start": 105750, + "end": 106110, + "confidence": 1, + "speaker": "B" + }, + { + "text": "average", + "start": 106110, + "end": 106510, + "confidence": 1, + "speaker": "B" + }, + { + "text": "should", + "start": 106510, + "end": 106790, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "be", + "start": 106790, + "end": 107150, + "confidence": 0.9970703, + "speaker": "B" + }, + { + "text": "in", + "start": 107390, + "end": 107670, + "confidence": 0.87841797, + "speaker": "B" + }, + { + "text": "about", + "start": 107670, + "end": 107950, + "confidence": 0.9711914, + "speaker": "B" + }, + { + "text": "four", + "start": 109110, + "end": 109270, + "confidence": 0.98046875, + "speaker": "B" + }, + { + "text": "times", + "start": 109270, + "end": 109550, + "confidence": 0.99902344, + "speaker": "B" + }, + { + "text": "higher", + "start": 109550, + "end": 109790, + "confidence": 1, + "speaker": "B" + }, + { + "text": "than", + "start": 109790, + "end": 109950, + "confidence": 0.9980469, + "speaker": "B" + }, + { + "text": "what", + "start": 109950, + "end": 110070, + "confidence": 0.9975586, + "speaker": "B" + }, + { + "text": "you're", + "start": 110070, + "end": 110270, + "confidence": 0.99316406, + "speaker": "B" + }, + { + "text": "supposed", + "start": 110270, + "end": 110510, + "confidence": 0.998291, + "speaker": "B" + }, + { + "text": "to", + "start": 110510, + "end": 110670, + "confidence": 0.99902344, + "speaker": "B" + }, + { + "text": "have", + "start": 110670, + "end": 110950, + "confidence": 1, + "speaker": "B" + }, + { + "text": "on", + "start": 111350, + "end": 111670, + "confidence": 1, + "speaker": "B" + }, + { + "text": "a", + "start": 111670, + "end": 111910, + "confidence": 0.9975586, + "speaker": "B" + }, + { + "text": "24", + "start": 111910, + "end": 112390, + "confidence": 1, + "speaker": "B" + }, + { + "text": "hour", + "start": 112390, + "end": 112630, + "confidence": 0.99853516, + "speaker": "B" + }, + { + "text": "average.", + "start": 112630, + "end": 113110, + "confidence": 0.99975586, + "speaker": "B" + }, + { + "text": "And", + "start": 113350, + "end": 113710, + "confidence": 0.8989258, + "speaker": "B" + }, + { + "text": "so", + "start": 113710, + "end": 114070, + "confidence": 0.99853516, + "speaker": "B" + }, + { + "text": "the", + "start": 114070, + "end": 114390, + "confidence": 0.99853516, + "speaker": "B" + }, + { + "text": "concentrations", + "start": 114390, + "end": 115110, + "confidence": 0.99816895, + "speaker": "B" + }, + { + "text": "of", + "start": 115110, + "end": 115230, + "confidence": 0.99902344, + "speaker": "B" + }, + { + "text": "these", + "start": 115230, + "end": 115390, + "confidence": 0.99902344, + "speaker": "B" + }, + { + "text": "particles", + "start": 115390, + "end": 115710, + "confidence": 0.9970703, + "speaker": "B" + }, + { + "text": "in", + "start": 115710, + "end": 115830, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "the", + "start": 115830, + "end": 115950, + "confidence": 0.98583984, + "speaker": "B" + }, + { + "text": "air", + "start": 115950, + "end": 116230, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "are", + "start": 116550, + "end": 116870, + "confidence": 0.99902344, + "speaker": "B" + }, + { + "text": "just", + "start": 116870, + "end": 117190, + "confidence": 0.9838867, + "speaker": "B" + }, + { + "text": "much,", + "start": 117350, + "end": 117710, + "confidence": 0.9873047, + "speaker": "B" + }, + { + "text": "much,", + "start": 117710, + "end": 117950, + "confidence": 1, + "speaker": "B" + }, + { + "text": "much", + "start": 117950, + "end": 118150, + "confidence": 1, + "speaker": "B" + }, + { + "text": "higher", + "start": 118150, + "end": 118350, + "confidence": 1, + "speaker": "B" + }, + { + "text": "than", + "start": 118350, + "end": 118630, + "confidence": 0.9970703, + "speaker": "B" + }, + { + "text": "we", + "start": 118630, + "end": 118910, + "confidence": 0.99902344, + "speaker": "B" + }, + { + "text": "typically", + "start": 118910, + "end": 119270, + "confidence": 1, + "speaker": "B" + }, + { + "text": "see.", + "start": 119270, + "end": 119590, + "confidence": 1, + "speaker": "B" + }, + { + "text": "And", + "start": 119750, + "end": 120110, + "confidence": 0.98291016, + "speaker": "B" + }, + { + "text": "exposure", + "start": 120110, + "end": 120710, + "confidence": 0.9996745, + "speaker": "B" + }, + { + "text": "to", + "start": 120710, + "end": 120910, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "those", + "start": 120910, + "end": 121110, + "confidence": 0.99560547, + "speaker": "B" + }, + { + "text": "high", + "start": 121110, + "end": 121350, + "confidence": 0.99902344, + "speaker": "B" + }, + { + "text": "levels", + "start": 121350, + "end": 121710, + "confidence": 0.99975586, + "speaker": "B" + }, + { + "text": "can", + "start": 121710, + "end": 121870, + "confidence": 0.99902344, + "speaker": "B" + }, + { + "text": "lead", + "start": 121870, + "end": 122030, + "confidence": 1, + "speaker": "B" + }, + { + "text": "to", + "start": 122030, + "end": 122150, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "a", + "start": 122150, + "end": 122270, + "confidence": 0.9970703, + "speaker": "B" + }, + { + "text": "host", + "start": 122270, + "end": 122430, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "of", + "start": 122430, + "end": 122630, + "confidence": 0.99902344, + "speaker": "B" + }, + { + "text": "health", + "start": 122630, + "end": 122870, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "problems.", + "start": 122870, + "end": 123350, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "And", + "start": 123430, + "end": 123710, + "confidence": 0.94970703, + "speaker": "A" + }, + { + "text": "who", + "start": 123710, + "end": 123870, + "confidence": 0.9995117, + "speaker": "A" + }, + { + "text": "is", + "start": 123870, + "end": 124070, + "confidence": 0.9975586, + "speaker": "A" + }, + { + "text": "most", + "start": 124070, + "end": 124310, + "confidence": 0.99902344, + "speaker": "A" + }, + { + "text": "vulnerable?", + "start": 124310, + "end": 124949, + "confidence": 1, + "speaker": "A" + }, + { + "text": "I", + "start": 124949, + "end": 125230, + "confidence": 0.9975586, + "speaker": "A" + }, + { + "text": "noticed", + "start": 125230, + "end": 125510, + "confidence": 0.882487, + "speaker": "A" + }, + { + "text": "that", + "start": 125510, + "end": 125630, + "confidence": 0.97998047, + "speaker": "A" + }, + { + "text": "in", + "start": 125630, + "end": 125750, + "confidence": 0.99853516, + "speaker": "A" + }, + { + "text": "New", + "start": 125750, + "end": 125870, + "confidence": 0.9975586, + "speaker": "A" + }, + { + "text": "York", + "start": 125870, + "end": 126030, + "confidence": 1, + "speaker": "A" + }, + { + "text": "City,", + "start": 126030, + "end": 126190, + "confidence": 0.99902344, + "speaker": "A" + }, + { + "text": "for", + "start": 126190, + "end": 126350, + "confidence": 0.99658203, + "speaker": "A" + }, + { + "text": "example,", + "start": 126350, + "end": 126750, + "confidence": 0.96435547, + "speaker": "A" + }, + { + "text": "they're", + "start": 126750, + "end": 127190, + "confidence": 0.9485677, + "speaker": "A" + }, + { + "text": "canceling", + "start": 127190, + "end": 127790, + "confidence": 0.87597656, + "speaker": "A" + }, + { + "text": "outdoor", + "start": 127790, + "end": 128190, + "confidence": 0.9984131, + "speaker": "A" + }, + { + "text": "activities.", + "start": 128190, + "end": 128670, + "confidence": 0.99975586, + "speaker": "A" + }, + { + "text": "And", + "start": 128670, + "end": 128990, + "confidence": 0.9458008, + "speaker": "A" + }, + { + "text": "so", + "start": 128990, + "end": 129230, + "confidence": 0.99560547, + "speaker": "A" + }, + { + "text": "here", + "start": 129230, + "end": 129390, + "confidence": 0.99902344, + "speaker": "A" + }, + { + "text": "it", + "start": 129390, + "end": 129510, + "confidence": 0.9970703, + "speaker": "A" + }, + { + "text": "is", + "start": 129510, + "end": 129630, + "confidence": 0.9975586, + "speaker": "A" + }, + { + "text": "in", + "start": 129630, + "end": 129910, + "confidence": 0.94921875, + "speaker": "A" + }, + { + "text": "the", + "start": 130070, + "end": 130470, + "confidence": 0.85595703, + "speaker": "A" + }, + { + "text": "early", + "start": 130550, + "end": 130830, + "confidence": 0.9995117, + "speaker": "A" + }, + { + "text": "days", + "start": 130830, + "end": 130990, + "confidence": 1, + "speaker": "A" + }, + { + "text": "of", + "start": 130990, + "end": 131150, + "confidence": 0.99853516, + "speaker": "A" + }, + { + "text": "summer", + "start": 131150, + "end": 131390, + "confidence": 0.9995117, + "speaker": "A" + }, + { + "text": "and", + "start": 131390, + "end": 131510, + "confidence": 0.9663086, + "speaker": "A" + }, + { + "text": "they", + "start": 131510, + "end": 131630, + "confidence": 0.9296875, + "speaker": "A" + }, + { + "text": "have", + "start": 131630, + "end": 131750, + "confidence": 0.99853516, + "speaker": "A" + }, + { + "text": "to", + "start": 131750, + "end": 131830, + "confidence": 0.9980469, + "speaker": "A" + }, + { + "text": "keep", + "start": 131830, + "end": 131950, + "confidence": 0.9995117, + "speaker": "A" + }, + { + "text": "all", + "start": 131950, + "end": 132110, + "confidence": 0.9970703, + "speaker": "A" + }, + { + "text": "the", + "start": 132110, + "end": 132230, + "confidence": 0.9902344, + "speaker": "A" + }, + { + "text": "kids", + "start": 132230, + "end": 132470, + "confidence": 0.9995117, + "speaker": "A" + }, + { + "text": "inside.", + "start": 132470, + "end": 132950, + "confidence": 0.99975586, + "speaker": "A" + }, + { + "text": "So", + "start": 132950, + "end": 133350, + "confidence": 0.95214844, + "speaker": "A" + }, + { + "text": "who", + "start": 133350, + "end": 133670, + "confidence": 1, + "speaker": "A" + }, + { + "text": "tends", + "start": 133670, + "end": 133950, + "confidence": 0.99902344, + "speaker": "A" + }, + { + "text": "to", + "start": 133950, + "end": 134110, + "confidence": 0.9995117, + "speaker": "A" + }, + { + "text": "be", + "start": 134110, + "end": 134270, + "confidence": 0.99902344, + "speaker": "A" + }, + { + "text": "vulnerable", + "start": 134270, + "end": 134670, + "confidence": 1, + "speaker": "A" + }, + { + "text": "in", + "start": 134670, + "end": 134830, + "confidence": 0.9926758, + "speaker": "A" + }, + { + "text": "a", + "start": 134830, + "end": 134990, + "confidence": 0.99609375, + "speaker": "A" + }, + { + "text": "situation", + "start": 134990, + "end": 135430, + "confidence": 1, + "speaker": "A" + }, + { + "text": "like", + "start": 135510, + "end": 135750, + "confidence": 0.99853516, + "speaker": "A" + }, + { + "text": "this?", + "start": 135750, + "end": 135990, + "confidence": 0.99658203, + "speaker": "A" + }, + { + "text": "It's", + "start": 137610, + "end": 137930, + "confidence": 0.9005534, + "speaker": "B" + }, + { + "text": "the", + "start": 137930, + "end": 138250, + "confidence": 0.5307617, + "speaker": "B" + }, + { + "text": "youngest.", + "start": 138250, + "end": 138810, + "confidence": 0.9851074, + "speaker": "B" + }, + { + "text": "So", + "start": 138810, + "end": 139090, + "confidence": 0.6489258, + "speaker": "B" + }, + { + "text": "children,", + "start": 139090, + "end": 139330, + "confidence": 1, + "speaker": "B" + }, + { + "text": "obviously,", + "start": 139330, + "end": 140010, + "confidence": 0.99886066, + "speaker": "B" + }, + { + "text": "whose", + "start": 140890, + "end": 141450, + "confidence": 0.79467773, + "speaker": "B" + }, + { + "text": "bodies", + "start": 141450, + "end": 141730, + "confidence": 0.99886066, + "speaker": "B" + }, + { + "text": "are", + "start": 141730, + "end": 141850, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "still", + "start": 141850, + "end": 141970, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "developing,", + "start": 141970, + "end": 142450, + "confidence": 1, + "speaker": "B" + }, + { + "text": "the", + "start": 142450, + "end": 142730, + "confidence": 0.99902344, + "speaker": "B" + }, + { + "text": "elderly", + "start": 142730, + "end": 143250, + "confidence": 1, + "speaker": "B" + }, + { + "text": "who", + "start": 143250, + "end": 143530, + "confidence": 0.89160156, + "speaker": "B" + }, + { + "text": "are,", + "start": 143530, + "end": 143810, + "confidence": 0.70458984, + "speaker": "B" + }, + { + "text": "you", + "start": 143810, + "end": 144010, + "confidence": 0.5307617, + "speaker": "B" + }, + { + "text": "know,", + "start": 144010, + "end": 144170, + "confidence": 0.9980469, + "speaker": "B" + }, + { + "text": "their", + "start": 144170, + "end": 144370, + "confidence": 0.99658203, + "speaker": "B" + }, + { + "text": "bodies", + "start": 144370, + "end": 144570, + "confidence": 0.9996745, + "speaker": "B" + }, + { + "text": "are", + "start": 144570, + "end": 144690, + "confidence": 0.9970703, + "speaker": "B" + }, + { + "text": "more", + "start": 144690, + "end": 144850, + "confidence": 0.99853516, + "speaker": "B" + }, + { + "text": "in", + "start": 144850, + "end": 144970, + "confidence": 0.96435547, + "speaker": "B" + }, + { + "text": "decline", + "start": 144970, + "end": 145250, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "and", + "start": 145250, + "end": 145410, + "confidence": 0.9975586, + "speaker": "B" + }, + { + "text": "they're", + "start": 145410, + "end": 145610, + "confidence": 0.9921875, + "speaker": "B" + }, + { + "text": "more", + "start": 145610, + "end": 145730, + "confidence": 0.99853516, + "speaker": "B" + }, + { + "text": "susceptible", + "start": 145730, + "end": 146250, + "confidence": 0.99960935, + "speaker": "B" + }, + { + "text": "to", + "start": 146250, + "end": 146450, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "the", + "start": 146450, + "end": 146570, + "confidence": 0.99902344, + "speaker": "B" + }, + { + "text": "health", + "start": 146570, + "end": 146770, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "impacts", + "start": 146770, + "end": 147250, + "confidence": 0.99902344, + "speaker": "B" + }, + { + "text": "of", + "start": 147250, + "end": 147530, + "confidence": 0.95751953, + "speaker": "B" + }, + { + "text": "breathing,", + "start": 147690, + "end": 148130, + "confidence": 0.95426434, + "speaker": "B" + }, + { + "text": "the", + "start": 148130, + "end": 148410, + "confidence": 0.7241211, + "speaker": "B" + }, + { + "text": "poor", + "start": 148490, + "end": 148810, + "confidence": 0.9980469, + "speaker": "B" + }, + { + "text": "air", + "start": 148810, + "end": 148970, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "quality.", + "start": 148970, + "end": 149450, + "confidence": 1, + "speaker": "B" + }, + { + "text": "And", + "start": 150570, + "end": 150850, + "confidence": 0.8666992, + "speaker": "B" + }, + { + "text": "then", + "start": 150850, + "end": 151050, + "confidence": 0.9975586, + "speaker": "B" + }, + { + "text": "people", + "start": 151050, + "end": 151290, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "who", + "start": 151290, + "end": 151490, + "confidence": 0.99902344, + "speaker": "B" + }, + { + "text": "have", + "start": 151490, + "end": 151610, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "pre", + "start": 151610, + "end": 151770, + "confidence": 0.99902344, + "speaker": "B" + }, + { + "text": "existing", + "start": 151770, + "end": 152169, + "confidence": 0.98828125, + "speaker": "B" + }, + { + "text": "health", + "start": 152169, + "end": 152369, + "confidence": 0.99902344, + "speaker": "B" + }, + { + "text": "conditions,", + "start": 152369, + "end": 152650, + "confidence": 0.9987793, + "speaker": "B" + }, + { + "text": "people", + "start": 152650, + "end": 152850, + "confidence": 0.9707031, + "speaker": "B" + }, + { + "text": "with", + "start": 152850, + "end": 153010, + "confidence": 0.9951172, + "speaker": "B" + }, + { + "text": "respiratory", + "start": 153010, + "end": 153410, + "confidence": 0.9978841, + "speaker": "B" + }, + { + "text": "conditions", + "start": 153410, + "end": 153770, + "confidence": 0.9992676, + "speaker": "B" + }, + { + "text": "or", + "start": 153770, + "end": 153970, + "confidence": 0.9946289, + "speaker": "B" + }, + { + "text": "heart", + "start": 153970, + "end": 154130, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "conditions,", + "start": 154130, + "end": 154490, + "confidence": 0.99975586, + "speaker": "B" + }, + { + "text": "can", + "start": 154490, + "end": 154690, + "confidence": 0.99902344, + "speaker": "B" + }, + { + "text": "be", + "start": 154690, + "end": 154850, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "triggered", + "start": 154850, + "end": 155210, + "confidence": 1, + "speaker": "B" + }, + { + "text": "by", + "start": 155210, + "end": 155370, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "high", + "start": 155370, + "end": 155610, + "confidence": 0.99902344, + "speaker": "B" + }, + { + "text": "levels", + "start": 155610, + "end": 155850, + "confidence": 0.99975586, + "speaker": "B" + }, + { + "text": "of", + "start": 155850, + "end": 155970, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "air", + "start": 155970, + "end": 156170, + "confidence": 1, + "speaker": "B" + }, + { + "text": "pollution.", + "start": 156170, + "end": 156650, + "confidence": 1, + "speaker": "B" + }, + { + "text": "Could", + "start": 157450, + "end": 157770, + "confidence": 0.99902344, + "speaker": "A" + }, + { + "text": "this", + "start": 157770, + "end": 158010, + "confidence": 0.9995117, + "speaker": "A" + }, + { + "text": "get", + "start": 158010, + "end": 158210, + "confidence": 0.9995117, + "speaker": "A" + }, + { + "text": "worse?", + "start": 158210, + "end": 158650, + "confidence": 0.99975586, + "speaker": "A" + }, + { + "text": "That's", + "start": 162170, + "end": 162490, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "a", + "start": 162490, + "end": 162610, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "good", + "start": 162610, + "end": 162770, + "confidence": 1, + "speaker": "B" + }, + { + "text": "question.", + "start": 162770, + "end": 163050, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "I", + "start": 163130, + "end": 163410, + "confidence": 0.93896484, + "speaker": "B" + }, + { + "text": "mean,", + "start": 163410, + "end": 163570, + "confidence": 0.9970703, + "speaker": "B" + }, + { + "text": "I", + "start": 163570, + "end": 163690, + "confidence": 0.9941406, + "speaker": "B" + }, + { + "text": "think", + "start": 163690, + "end": 163850, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "if", + "start": 163850, + "end": 164170, + "confidence": 0.98779297, + "speaker": "B" + }, + { + "text": "in", + "start": 165260, + "end": 165380, + "confidence": 0.9824219, + "speaker": "B" + }, + { + "text": "some", + "start": 165380, + "end": 165540, + "confidence": 1, + "speaker": "B" + }, + { + "text": "areas", + "start": 165540, + "end": 165820, + "confidence": 0.99902344, + "speaker": "B" + }, + { + "text": "it's", + "start": 165900, + "end": 166220, + "confidence": 0.99820966, + "speaker": "B" + }, + { + "text": "much", + "start": 166220, + "end": 166340, + "confidence": 0.99902344, + "speaker": "B" + }, + { + "text": "worse", + "start": 166340, + "end": 166540, + "confidence": 1, + "speaker": "B" + }, + { + "text": "than", + "start": 166540, + "end": 166660, + "confidence": 0.9980469, + "speaker": "B" + }, + { + "text": "others", + "start": 166660, + "end": 166860, + "confidence": 1, + "speaker": "B" + }, + { + "text": "and", + "start": 166860, + "end": 167180, + "confidence": 0.97314453, + "speaker": "B" + }, + { + "text": "it", + "start": 167180, + "end": 167460, + "confidence": 0.99121094, + "speaker": "B" + }, + { + "text": "just", + "start": 167460, + "end": 167620, + "confidence": 0.99853516, + "speaker": "B" + }, + { + "text": "depends", + "start": 167620, + "end": 167980, + "confidence": 0.90201825, + "speaker": "B" + }, + { + "text": "on", + "start": 167980, + "end": 168180, + "confidence": 0.9951172, + "speaker": "B" + }, + { + "text": "kind", + "start": 168180, + "end": 168340, + "confidence": 0.79785156, + "speaker": "B" + }, + { + "text": "of", + "start": 168340, + "end": 168500, + "confidence": 0.99853516, + "speaker": "B" + }, + { + "text": "where", + "start": 168500, + "end": 168700, + "confidence": 1, + "speaker": "B" + }, + { + "text": "the", + "start": 168700, + "end": 168860, + "confidence": 0.9980469, + "speaker": "B" + }, + { + "text": "smoke", + "start": 168860, + "end": 169140, + "confidence": 0.9503581, + "speaker": "B" + }, + { + "text": "is", + "start": 169140, + "end": 169340, + "confidence": 0.99902344, + "speaker": "B" + }, + { + "text": "concentrated.", + "start": 169340, + "end": 170140, + "confidence": 0.99990237, + "speaker": "B" + }, + { + "text": "I", + "start": 171020, + "end": 171300, + "confidence": 0.9970703, + "speaker": "B" + }, + { + "text": "think", + "start": 171300, + "end": 171460, + "confidence": 1, + "speaker": "B" + }, + { + "text": "New", + "start": 171460, + "end": 171620, + "confidence": 1, + "speaker": "B" + }, + { + "text": "York", + "start": 171620, + "end": 171900, + "confidence": 1, + "speaker": "B" + }, + { + "text": "has", + "start": 171980, + "end": 172260, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "some", + "start": 172260, + "end": 172420, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "of", + "start": 172420, + "end": 172540, + "confidence": 0.9980469, + "speaker": "B" + }, + { + "text": "the", + "start": 172540, + "end": 172660, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "higher", + "start": 172660, + "end": 172860, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "concentrations", + "start": 172860, + "end": 173540, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "right", + "start": 173540, + "end": 173700, + "confidence": 0.99853516, + "speaker": "B" + }, + { + "text": "now,", + "start": 173700, + "end": 173860, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "but", + "start": 173860, + "end": 174020, + "confidence": 0.9970703, + "speaker": "B" + }, + { + "text": "that's", + "start": 174020, + "end": 174220, + "confidence": 0.9983724, + "speaker": "B" + }, + { + "text": "going", + "start": 174220, + "end": 174340, + "confidence": 0.7973633, + "speaker": "B" + }, + { + "text": "to", + "start": 174340, + "end": 174460, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "change", + "start": 174460, + "end": 174620, + "confidence": 1, + "speaker": "B" + }, + { + "text": "as", + "start": 174620, + "end": 174820, + "confidence": 0.99121094, + "speaker": "B" + }, + { + "text": "that", + "start": 174820, + "end": 174980, + "confidence": 0.99609375, + "speaker": "B" + }, + { + "text": "air", + "start": 174980, + "end": 175180, + "confidence": 0.9970703, + "speaker": "B" + }, + { + "text": "moves", + "start": 175180, + "end": 175500, + "confidence": 1, + "speaker": "B" + }, + { + "text": "away", + "start": 175500, + "end": 175660, + "confidence": 1, + "speaker": "B" + }, + { + "text": "from", + "start": 175660, + "end": 175860, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "the", + "start": 175860, + "end": 175980, + "confidence": 0.99902344, + "speaker": "B" + }, + { + "text": "New", + "start": 175980, + "end": 176100, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "York", + "start": 176100, + "end": 176300, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "area.", + "start": 176300, + "end": 176620, + "confidence": 1, + "speaker": "B" + }, + { + "text": "But", + "start": 177100, + "end": 177380, + "confidence": 0.9819336, + "speaker": "B" + }, + { + "text": "over", + "start": 177380, + "end": 177540, + "confidence": 1, + "speaker": "B" + }, + { + "text": "the", + "start": 177540, + "end": 177660, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "course", + "start": 177660, + "end": 177780, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "of", + "start": 177780, + "end": 177900, + "confidence": 0.82958984, + "speaker": "B" + }, + { + "text": "the", + "start": 177900, + "end": 177980, + "confidence": 0.9667969, + "speaker": "B" + }, + { + "text": "next", + "start": 177980, + "end": 178100, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "few", + "start": 178100, + "end": 178300, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "days,", + "start": 178300, + "end": 178500, + "confidence": 1, + "speaker": "B" + }, + { + "text": "we", + "start": 178500, + "end": 178660, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "will", + "start": 178660, + "end": 178860, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "see", + "start": 178860, + "end": 179180, + "confidence": 1, + "speaker": "B" + }, + { + "text": "different", + "start": 179580, + "end": 179940, + "confidence": 1, + "speaker": "B" + }, + { + "text": "areas", + "start": 179940, + "end": 180220, + "confidence": 1, + "speaker": "B" + }, + { + "text": "being", + "start": 180220, + "end": 180539, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "hit", + "start": 180539, + "end": 180940, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "at", + "start": 180940, + "end": 181220, + "confidence": 0.99902344, + "speaker": "B" + }, + { + "text": "different", + "start": 181220, + "end": 181460, + "confidence": 1, + "speaker": "B" + }, + { + "text": "times", + "start": 181460, + "end": 181820, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "with", + "start": 181980, + "end": 182260, + "confidence": 0.99853516, + "speaker": "B" + }, + { + "text": "the", + "start": 182260, + "end": 182380, + "confidence": 0.99902344, + "speaker": "B" + }, + { + "text": "highest", + "start": 182380, + "end": 182660, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "concentrations.", + "start": 182660, + "end": 183420, + "confidence": 0.998291, + "speaker": "B" + }, + { + "text": "I", + "start": 183740, + "end": 183980, + "confidence": 0.9140625, + "speaker": "A" + }, + { + "text": "was", + "start": 183980, + "end": 184100, + "confidence": 0.9980469, + "speaker": "A" + }, + { + "text": "going", + "start": 184100, + "end": 184220, + "confidence": 0.96484375, + "speaker": "A" + }, + { + "text": "to", + "start": 184220, + "end": 184300, + "confidence": 0.9897461, + "speaker": "A" + }, + { + "text": "ask", + "start": 184300, + "end": 184380, + "confidence": 0.9975586, + "speaker": "A" + }, + { + "text": "you", + "start": 184380, + "end": 184460, + "confidence": 0.86083984, + "speaker": "A" + }, + { + "text": "about.", + "start": 184460, + "end": 184660, + "confidence": 0.84472656, + "speaker": "A" + }, + { + "text": "More", + "start": 184660, + "end": 184900, + "confidence": 0.57958984, + "speaker": "B" + }, + { + "text": "fires", + "start": 184900, + "end": 185220, + "confidence": 0.8249512, + "speaker": "B" + }, + { + "text": "start", + "start": 185220, + "end": 185380, + "confidence": 0.94628906, + "speaker": "B" + }, + { + "text": "burning.", + "start": 185380, + "end": 185660, + "confidence": 0.99902344, + "speaker": "B" + }, + { + "text": "I", + "start": 185660, + "end": 185860, + "confidence": 0.9970703, + "speaker": "B" + }, + { + "text": "don't", + "start": 185860, + "end": 186060, + "confidence": 0.9998372, + "speaker": "B" + }, + { + "text": "expect", + "start": 186060, + "end": 186300, + "confidence": 0.99902344, + "speaker": "B" + }, + { + "text": "the", + "start": 186940, + "end": 187220, + "confidence": 0.9980469, + "speaker": "B" + }, + { + "text": "concentrations", + "start": 187220, + "end": 187780, + "confidence": 0.99890137, + "speaker": "B" + }, + { + "text": "to", + "start": 187780, + "end": 187900, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "go", + "start": 187900, + "end": 188020, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "up", + "start": 188020, + "end": 188300, + "confidence": 0.99902344, + "speaker": "B" + }, + { + "text": "too", + "start": 188300, + "end": 188580, + "confidence": 0.98583984, + "speaker": "B" + }, + { + "text": "much", + "start": 188580, + "end": 188740, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "higher.", + "start": 188740, + "end": 189020, + "confidence": 0.99902344, + "speaker": "B" + }, + { + "text": "I", + "start": 189100, + "end": 189340, + "confidence": 0.99609375, + "speaker": "A" + }, + { + "text": "was", + "start": 189340, + "end": 189420, + "confidence": 0.9995117, + "speaker": "A" + }, + { + "text": "going", + "start": 189420, + "end": 189540, + "confidence": 0.97998047, + "speaker": "A" + }, + { + "text": "to", + "start": 189540, + "end": 189660, + "confidence": 0.9975586, + "speaker": "A" + }, + { + "text": "ask", + "start": 189660, + "end": 189780, + "confidence": 0.9995117, + "speaker": "A" + }, + { + "text": "you", + "start": 189780, + "end": 189940, + "confidence": 0.9819336, + "speaker": "A" + }, + { + "text": "how", + "start": 189940, + "end": 190100, + "confidence": 0.7294922, + "speaker": "A" + }, + { + "text": "and", + "start": 190100, + "end": 190260, + "confidence": 0.94677734, + "speaker": "A" + }, + { + "text": "you", + "start": 190260, + "end": 190420, + "confidence": 0.9975586, + "speaker": "A" + }, + { + "text": "started", + "start": 190420, + "end": 190620, + "confidence": 0.99560547, + "speaker": "A" + }, + { + "text": "to", + "start": 190620, + "end": 190780, + "confidence": 0.9404297, + "speaker": "A" + }, + { + "text": "answer", + "start": 190780, + "end": 190980, + "confidence": 0.96809894, + "speaker": "A" + }, + { + "text": "this,", + "start": 190980, + "end": 191140, + "confidence": 0.99560547, + "speaker": "A" + }, + { + "text": "but", + "start": 191140, + "end": 191420, + "confidence": 0.9013672, + "speaker": "A" + }, + { + "text": "how", + "start": 191420, + "end": 191700, + "confidence": 1, + "speaker": "A" + }, + { + "text": "much", + "start": 191700, + "end": 191940, + "confidence": 0.9995117, + "speaker": "A" + }, + { + "text": "longer", + "start": 191940, + "end": 192420, + "confidence": 0.9992676, + "speaker": "A" + }, + { + "text": "could", + "start": 192420, + "end": 192700, + "confidence": 0.9995117, + "speaker": "A" + }, + { + "text": "this", + "start": 192700, + "end": 192940, + "confidence": 0.9995117, + "speaker": "A" + }, + { + "text": "last?", + "start": 192940, + "end": 193260, + "confidence": 0.9995117, + "speaker": "A" + }, + { + "text": "Forgive", + "start": 193420, + "end": 193820, + "confidence": 0.99934894, + "speaker": "A" + }, + { + "text": "me", + "start": 193820, + "end": 193900, + "confidence": 0.9980469, + "speaker": "A" + }, + { + "text": "if", + "start": 193900, + "end": 193980, + "confidence": 0.98095703, + "speaker": "A" + }, + { + "text": "I'm", + "start": 193980, + "end": 194140, + "confidence": 0.9920247, + "speaker": "A" + }, + { + "text": "asking", + "start": 194140, + "end": 194300, + "confidence": 1, + "speaker": "A" + }, + { + "text": "you", + "start": 194300, + "end": 194380, + "confidence": 0.99902344, + "speaker": "A" + }, + { + "text": "to", + "start": 194380, + "end": 194500, + "confidence": 0.9980469, + "speaker": "A" + }, + { + "text": "speculate,", + "start": 194500, + "end": 194900, + "confidence": 1, + "speaker": "A" + }, + { + "text": "but", + "start": 194900, + "end": 195180, + "confidence": 0.953125, + "speaker": "A" + }, + { + "text": "what", + "start": 195340, + "end": 195620, + "confidence": 0.9926758, + "speaker": "A" + }, + { + "text": "do", + "start": 195620, + "end": 195780, + "confidence": 0.99658203, + "speaker": "A" + }, + { + "text": "you", + "start": 195780, + "end": 195940, + "confidence": 0.9946289, + "speaker": "A" + }, + { + "text": "think?", + "start": 195940, + "end": 196220, + "confidence": 0.9980469, + "speaker": "A" + }, + { + "text": "Well,", + "start": 198280, + "end": 198400, + "confidence": 0.9091797, + "speaker": "B" + }, + { + "text": "I", + "start": 198400, + "end": 198520, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "think", + "start": 198520, + "end": 198640, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "the", + "start": 198640, + "end": 198760, + "confidence": 0.99853516, + "speaker": "B" + }, + { + "text": "fires", + "start": 198760, + "end": 199080, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "are", + "start": 199080, + "end": 199160, + "confidence": 0.99902344, + "speaker": "B" + }, + { + "text": "going", + "start": 199160, + "end": 199280, + "confidence": 0.67089844, + "speaker": "B" + }, + { + "text": "to", + "start": 199280, + "end": 199400, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "burn", + "start": 199400, + "end": 199560, + "confidence": 0.9992676, + "speaker": "B" + }, + { + "text": "for", + "start": 199560, + "end": 199680, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "a", + "start": 199680, + "end": 199800, + "confidence": 0.99902344, + "speaker": "B" + }, + { + "text": "little", + "start": 199800, + "end": 199920, + "confidence": 0.99902344, + "speaker": "B" + }, + { + "text": "bit", + "start": 199920, + "end": 200080, + "confidence": 0.99658203, + "speaker": "B" + }, + { + "text": "longer.", + "start": 200080, + "end": 200440, + "confidence": 1, + "speaker": "B" + }, + { + "text": "But", + "start": 200440, + "end": 200640, + "confidence": 0.98876953, + "speaker": "B" + }, + { + "text": "the", + "start": 200640, + "end": 200840, + "confidence": 0.9975586, + "speaker": "B" + }, + { + "text": "key", + "start": 200840, + "end": 201120, + "confidence": 1, + "speaker": "B" + }, + { + "text": "for", + "start": 201120, + "end": 201400, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "us", + "start": 201400, + "end": 201640, + "confidence": 1, + "speaker": "B" + }, + { + "text": "in", + "start": 201640, + "end": 201800, + "confidence": 0.9980469, + "speaker": "B" + }, + { + "text": "the", + "start": 201800, + "end": 201920, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "US", + "start": 201920, + "end": 202200, + "confidence": 0.98876953, + "speaker": "B" + }, + { + "text": "Is", + "start": 202200, + "end": 202480, + "confidence": 0.99902344, + "speaker": "B" + }, + { + "text": "the", + "start": 202480, + "end": 202680, + "confidence": 0.9975586, + "speaker": "B" + }, + { + "text": "weather", + "start": 202680, + "end": 203000, + "confidence": 1, + "speaker": "B" + }, + { + "text": "system", + "start": 203000, + "end": 203280, + "confidence": 0.99902344, + "speaker": "B" + }, + { + "text": "changing.", + "start": 203280, + "end": 203800, + "confidence": 0.98828125, + "speaker": "B" + }, + { + "text": "Right", + "start": 203960, + "end": 204280, + "confidence": 0.9819336, + "speaker": "B" + }, + { + "text": "now", + "start": 204280, + "end": 204600, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "it's", + "start": 204680, + "end": 205080, + "confidence": 0.98258466, + "speaker": "B" + }, + { + "text": "the", + "start": 205080, + "end": 205280, + "confidence": 0.9980469, + "speaker": "B" + }, + { + "text": "weather", + "start": 205280, + "end": 205520, + "confidence": 0.99975586, + "speaker": "B" + }, + { + "text": "systems", + "start": 205520, + "end": 205840, + "confidence": 0.9987793, + "speaker": "B" + }, + { + "text": "that", + "start": 205840, + "end": 205960, + "confidence": 0.9941406, + "speaker": "B" + }, + { + "text": "are", + "start": 205960, + "end": 206080, + "confidence": 0.9980469, + "speaker": "B" + }, + { + "text": "pulling", + "start": 206080, + "end": 206320, + "confidence": 0.9996745, + "speaker": "B" + }, + { + "text": "that", + "start": 206320, + "end": 206480, + "confidence": 0.9975586, + "speaker": "B" + }, + { + "text": "air", + "start": 206480, + "end": 206760, + "confidence": 0.99853516, + "speaker": "B" + }, + { + "text": "into", + "start": 207320, + "end": 207640, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "our", + "start": 207640, + "end": 207960, + "confidence": 0.99609375, + "speaker": "B" + }, + { + "text": "Mid", + "start": 209080, + "end": 209400, + "confidence": 1, + "speaker": "B" + }, + { + "text": "Atlantic", + "start": 209400, + "end": 209920, + "confidence": 0.88134766, + "speaker": "B" + }, + { + "text": "and", + "start": 209920, + "end": 210160, + "confidence": 0.87353516, + "speaker": "B" + }, + { + "text": "Northeast", + "start": 210160, + "end": 210720, + "confidence": 0.99886066, + "speaker": "B" + }, + { + "text": "region.", + "start": 210720, + "end": 211000, + "confidence": 1, + "speaker": "B" + }, + { + "text": "As", + "start": 211080, + "end": 211360, + "confidence": 0.9975586, + "speaker": "B" + }, + { + "text": "those", + "start": 211360, + "end": 211560, + "confidence": 0.9609375, + "speaker": "B" + }, + { + "text": "weather", + "start": 211560, + "end": 211960, + "confidence": 0.99194336, + "speaker": "B" + }, + { + "text": "systems", + "start": 212920, + "end": 213480, + "confidence": 0.99780273, + "speaker": "B" + }, + { + "text": "change", + "start": 213480, + "end": 213720, + "confidence": 1, + "speaker": "B" + }, + { + "text": "and", + "start": 213720, + "end": 213960, + "confidence": 0.99560547, + "speaker": "B" + }, + { + "text": "shift,", + "start": 213960, + "end": 214360, + "confidence": 0.99975586, + "speaker": "B" + }, + { + "text": "we'll", + "start": 214520, + "end": 214840, + "confidence": 0.9785156, + "speaker": "B" + }, + { + "text": "see", + "start": 214840, + "end": 214960, + "confidence": 0.99902344, + "speaker": "B" + }, + { + "text": "that", + "start": 214960, + "end": 215120, + "confidence": 0.9970703, + "speaker": "B" + }, + { + "text": "smoke", + "start": 215120, + "end": 215400, + "confidence": 0.9900716, + "speaker": "B" + }, + { + "text": "going", + "start": 215400, + "end": 215640, + "confidence": 0.99853516, + "speaker": "B" + }, + { + "text": "elsewhere", + "start": 215640, + "end": 216120, + "confidence": 0.977417, + "speaker": "B" + }, + { + "text": "and", + "start": 216600, + "end": 216880, + "confidence": 0.9946289, + "speaker": "B" + }, + { + "text": "not", + "start": 216880, + "end": 217080, + "confidence": 0.9980469, + "speaker": "B" + }, + { + "text": "impact", + "start": 217080, + "end": 217400, + "confidence": 1, + "speaker": "B" + }, + { + "text": "us", + "start": 217400, + "end": 217800, + "confidence": 0.99902344, + "speaker": "B" + }, + { + "text": "in", + "start": 217880, + "end": 218160, + "confidence": 0.99853516, + "speaker": "B" + }, + { + "text": "this", + "start": 218160, + "end": 218360, + "confidence": 0.99902344, + "speaker": "B" + }, + { + "text": "region", + "start": 218360, + "end": 218640, + "confidence": 1, + "speaker": "B" + }, + { + "text": "as", + "start": 218640, + "end": 218880, + "confidence": 0.99902344, + "speaker": "B" + }, + { + "text": "much.", + "start": 218880, + "end": 219160, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "I", + "start": 219320, + "end": 219560, + "confidence": 0.9736328, + "speaker": "B" + }, + { + "text": "think", + "start": 219560, + "end": 219680, + "confidence": 0.9975586, + "speaker": "B" + }, + { + "text": "that's", + "start": 219680, + "end": 219960, + "confidence": 0.9938151, + "speaker": "B" + }, + { + "text": "going", + "start": 219960, + "end": 220040, + "confidence": 0.9824219, + "speaker": "B" + }, + { + "text": "to", + "start": 220040, + "end": 220120, + "confidence": 0.99609375, + "speaker": "B" + }, + { + "text": "be", + "start": 220120, + "end": 220240, + "confidence": 0.99853516, + "speaker": "B" + }, + { + "text": "the", + "start": 220240, + "end": 220400, + "confidence": 0.9946289, + "speaker": "B" + }, + { + "text": "defining", + "start": 220400, + "end": 220760, + "confidence": 1, + "speaker": "B" + }, + { + "text": "factor.", + "start": 220760, + "end": 221080, + "confidence": 0.99975586, + "speaker": "B" + }, + { + "text": "I", + "start": 221080, + "end": 221240, + "confidence": 0.97314453, + "speaker": "B" + }, + { + "text": "think", + "start": 221240, + "end": 221360, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "the", + "start": 221360, + "end": 221480, + "confidence": 0.9902344, + "speaker": "B" + }, + { + "text": "next", + "start": 221480, + "end": 221600, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "couple", + "start": 221600, + "end": 221840, + "confidence": 0.9992676, + "speaker": "B" + }, + { + "text": "days", + "start": 221840, + "end": 222000, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "we're", + "start": 222000, + "end": 222200, + "confidence": 0.98844403, + "speaker": "B" + }, + { + "text": "going", + "start": 222200, + "end": 222320, + "confidence": 0.67578125, + "speaker": "B" + }, + { + "text": "to", + "start": 222320, + "end": 222600, + "confidence": 0.9819336, + "speaker": "B" + }, + { + "text": "see", + "start": 222600, + "end": 222880, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "a", + "start": 222880, + "end": 223040, + "confidence": 0.99902344, + "speaker": "B" + }, + { + "text": "shift", + "start": 223040, + "end": 223400, + "confidence": 1, + "speaker": "B" + }, + { + "text": "in", + "start": 224120, + "end": 224400, + "confidence": 0.99560547, + "speaker": "B" + }, + { + "text": "that", + "start": 224400, + "end": 224560, + "confidence": 0.99853516, + "speaker": "B" + }, + { + "text": "weather", + "start": 224560, + "end": 224800, + "confidence": 0.99853516, + "speaker": "B" + }, + { + "text": "pattern", + "start": 224800, + "end": 225120, + "confidence": 1, + "speaker": "B" + }, + { + "text": "and", + "start": 225120, + "end": 225360, + "confidence": 0.99609375, + "speaker": "B" + }, + { + "text": "start", + "start": 225360, + "end": 225520, + "confidence": 0.9980469, + "speaker": "B" + }, + { + "text": "to", + "start": 225520, + "end": 225640, + "confidence": 0.99902344, + "speaker": "B" + }, + { + "text": "push", + "start": 225640, + "end": 225800, + "confidence": 1, + "speaker": "B" + }, + { + "text": "the", + "start": 225800, + "end": 225920, + "confidence": 0.9970703, + "speaker": "B" + }, + { + "text": "smoke", + "start": 225920, + "end": 226160, + "confidence": 0.8540039, + "speaker": "B" + }, + { + "text": "away", + "start": 226160, + "end": 226400, + "confidence": 1, + "speaker": "B" + }, + { + "text": "from", + "start": 226400, + "end": 226760, + "confidence": 0.6513672, + "speaker": "B" + }, + { + "text": "where", + "start": 226760, + "end": 227040, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "we", + "start": 227040, + "end": 227200, + "confidence": 0.99902344, + "speaker": "B" + }, + { + "text": "are.", + "start": 227200, + "end": 227480, + "confidence": 0.99853516, + "speaker": "B" + }, + { + "text": "And", + "start": 227930, + "end": 228050, + "confidence": 0.9433594, + "speaker": "A" + }, + { + "text": "finally,", + "start": 228050, + "end": 228410, + "confidence": 0.9992676, + "speaker": "A" + }, + { + "text": "with", + "start": 228410, + "end": 228650, + "confidence": 0.99853516, + "speaker": "A" + }, + { + "text": "the", + "start": 228650, + "end": 228930, + "confidence": 0.99902344, + "speaker": "A" + }, + { + "text": "impacts", + "start": 228930, + "end": 229370, + "confidence": 0.9921875, + "speaker": "A" + }, + { + "text": "of", + "start": 229370, + "end": 229530, + "confidence": 0.99853516, + "speaker": "A" + }, + { + "text": "climate", + "start": 229530, + "end": 229890, + "confidence": 0.99975586, + "speaker": "A" + }, + { + "text": "change,", + "start": 229890, + "end": 230210, + "confidence": 0.9995117, + "speaker": "A" + }, + { + "text": "we", + "start": 230210, + "end": 230450, + "confidence": 0.9980469, + "speaker": "A" + }, + { + "text": "are", + "start": 230450, + "end": 230650, + "confidence": 0.9980469, + "speaker": "A" + }, + { + "text": "seeing", + "start": 230650, + "end": 230970, + "confidence": 1, + "speaker": "A" + }, + { + "text": "more", + "start": 230970, + "end": 231290, + "confidence": 0.9995117, + "speaker": "A" + }, + { + "text": "wildfires.", + "start": 231290, + "end": 232250, + "confidence": 0.9993164, + "speaker": "A" + }, + { + "text": "Will", + "start": 232410, + "end": 232730, + "confidence": 0.9995117, + "speaker": "A" + }, + { + "text": "we", + "start": 232730, + "end": 232970, + "confidence": 0.99658203, + "speaker": "A" + }, + { + "text": "be", + "start": 232970, + "end": 233210, + "confidence": 0.99902344, + "speaker": "A" + }, + { + "text": "seeing", + "start": 233210, + "end": 233610, + "confidence": 0.99975586, + "speaker": "A" + }, + { + "text": "more", + "start": 233690, + "end": 234050, + "confidence": 1, + "speaker": "A" + }, + { + "text": "of", + "start": 234050, + "end": 234290, + "confidence": 0.9995117, + "speaker": "A" + }, + { + "text": "these", + "start": 234290, + "end": 234530, + "confidence": 0.99902344, + "speaker": "A" + }, + { + "text": "kinds", + "start": 234530, + "end": 234890, + "confidence": 0.9914551, + "speaker": "A" + }, + { + "text": "of", + "start": 234890, + "end": 235130, + "confidence": 0.9995117, + "speaker": "A" + }, + { + "text": "wide", + "start": 235450, + "end": 235850, + "confidence": 0.99902344, + "speaker": "A" + }, + { + "text": "ranging", + "start": 235850, + "end": 236410, + "confidence": 0.9998372, + "speaker": "A" + }, + { + "text": "air", + "start": 237290, + "end": 237610, + "confidence": 0.9995117, + "speaker": "A" + }, + { + "text": "quality", + "start": 237610, + "end": 238050, + "confidence": 1, + "speaker": "A" + }, + { + "text": "consequences", + "start": 238050, + "end": 238690, + "confidence": 0.9385742, + "speaker": "A" + }, + { + "text": "or", + "start": 238690, + "end": 239050, + "confidence": 0.87841797, + "speaker": "A" + }, + { + "text": "circumstances?", + "start": 239130, + "end": 239850, + "confidence": 0.93204755, + "speaker": "A" + }, + { + "text": "I", + "start": 241370, + "end": 241650, + "confidence": 0.9238281, + "speaker": "B" + }, + { + "text": "mean,", + "start": 241650, + "end": 241810, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "that", + "start": 241810, + "end": 241930, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "is", + "start": 241930, + "end": 242090, + "confidence": 0.9970703, + "speaker": "B" + }, + { + "text": "one", + "start": 242090, + "end": 242250, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "of", + "start": 242250, + "end": 242330, + "confidence": 0.99902344, + "speaker": "B" + }, + { + "text": "the", + "start": 242330, + "end": 242450, + "confidence": 0.99902344, + "speaker": "B" + }, + { + "text": "predictions", + "start": 242450, + "end": 243050, + "confidence": 0.8977051, + "speaker": "B" + }, + { + "text": "for", + "start": 243050, + "end": 243450, + "confidence": 0.73095703, + "speaker": "B" + }, + { + "text": "climate", + "start": 244490, + "end": 244890, + "confidence": 1, + "speaker": "B" + }, + { + "text": "change.", + "start": 244890, + "end": 245130, + "confidence": 1, + "speaker": "B" + }, + { + "text": "Looking", + "start": 245130, + "end": 245370, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "into", + "start": 245370, + "end": 245570, + "confidence": 0.9980469, + "speaker": "B" + }, + { + "text": "the", + "start": 245570, + "end": 245730, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "future,", + "start": 245730, + "end": 246010, + "confidence": 0.99902344, + "speaker": "B" + }, + { + "text": "the", + "start": 246410, + "end": 246730, + "confidence": 0.99902344, + "speaker": "B" + }, + { + "text": "fire", + "start": 246730, + "end": 247010, + "confidence": 1, + "speaker": "B" + }, + { + "text": "season", + "start": 247010, + "end": 247290, + "confidence": 1, + "speaker": "B" + }, + { + "text": "is", + "start": 247290, + "end": 247490, + "confidence": 0.9970703, + "speaker": "B" + }, + { + "text": "starting", + "start": 247490, + "end": 247730, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "earlier", + "start": 247730, + "end": 247970, + "confidence": 0.9975586, + "speaker": "B" + }, + { + "text": "and", + "start": 247970, + "end": 248210, + "confidence": 0.9980469, + "speaker": "B" + }, + { + "text": "lasting", + "start": 248210, + "end": 248570, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "longer", + "start": 248570, + "end": 249050, + "confidence": 1, + "speaker": "B" + }, + { + "text": "and", + "start": 249610, + "end": 249890, + "confidence": 0.9736328, + "speaker": "B" + }, + { + "text": "we're", + "start": 249890, + "end": 250090, + "confidence": 0.93815106, + "speaker": "B" + }, + { + "text": "seeing", + "start": 250090, + "end": 250290, + "confidence": 0.99975586, + "speaker": "B" + }, + { + "text": "more", + "start": 250290, + "end": 250450, + "confidence": 1, + "speaker": "B" + }, + { + "text": "frequent", + "start": 250450, + "end": 250810, + "confidence": 0.99975586, + "speaker": "B" + }, + { + "text": "fires.", + "start": 250810, + "end": 251290, + "confidence": 0.98950195, + "speaker": "B" + }, + { + "text": "So", + "start": 251290, + "end": 251610, + "confidence": 0.94628906, + "speaker": "B" + }, + { + "text": "yeah,", + "start": 252010, + "end": 252370, + "confidence": 0.9715169, + "speaker": "B" + }, + { + "text": "this", + "start": 252370, + "end": 252530, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "is", + "start": 252530, + "end": 252690, + "confidence": 0.9975586, + "speaker": "B" + }, + { + "text": "probably", + "start": 252690, + "end": 252970, + "confidence": 0.9973958, + "speaker": "B" + }, + { + "text": "something", + "start": 252970, + "end": 253290, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "that", + "start": 253290, + "end": 253690, + "confidence": 0.9863281, + "speaker": "B" + }, + { + "text": "we'll", + "start": 253770, + "end": 254090, + "confidence": 0.9835612, + "speaker": "B" + }, + { + "text": "be", + "start": 254090, + "end": 254210, + "confidence": 0.99853516, + "speaker": "B" + }, + { + "text": "seeing", + "start": 254210, + "end": 254530, + "confidence": 0.9992676, + "speaker": "B" + }, + { + "text": "more,", + "start": 254530, + "end": 254780, + "confidence": 0.5083008, + "speaker": "B" + }, + { + "text": "more", + "start": 254930, + "end": 255050, + "confidence": 0.8666992, + "speaker": "B" + }, + { + "text": "frequently.", + "start": 255050, + "end": 255570, + "confidence": 1, + "speaker": "B" + }, + { + "text": "This", + "start": 255650, + "end": 255930, + "confidence": 0.99902344, + "speaker": "B" + }, + { + "text": "tends", + "start": 255930, + "end": 256170, + "confidence": 0.99853516, + "speaker": "B" + }, + { + "text": "to", + "start": 256170, + "end": 256290, + "confidence": 1, + "speaker": "B" + }, + { + "text": "be", + "start": 256290, + "end": 256410, + "confidence": 0.99902344, + "speaker": "B" + }, + { + "text": "much", + "start": 256410, + "end": 256570, + "confidence": 0.9916992, + "speaker": "B" + }, + { + "text": "more", + "start": 256570, + "end": 256690, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "of", + "start": 256690, + "end": 256770, + "confidence": 0.9970703, + "speaker": "B" + }, + { + "text": "an", + "start": 256770, + "end": 256890, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "issue", + "start": 256890, + "end": 257090, + "confidence": 1, + "speaker": "B" + }, + { + "text": "in", + "start": 257090, + "end": 257250, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "the", + "start": 257250, + "end": 257330, + "confidence": 0.99902344, + "speaker": "B" + }, + { + "text": "western", + "start": 257330, + "end": 257610, + "confidence": 1, + "speaker": "B" + }, + { + "text": "U.S.", + "start": 257610, + "end": 257890, + "confidence": 0.99023, + "speaker": "B" + }, + { + "text": "so", + "start": 258130, + "end": 258410, + "confidence": 0.75439453, + "speaker": "B" + }, + { + "text": "the", + "start": 258410, + "end": 258530, + "confidence": 0.9975586, + "speaker": "B" + }, + { + "text": "eastern", + "start": 258530, + "end": 258770, + "confidence": 0.9916992, + "speaker": "B" + }, + { + "text": "U.S.", + "start": 258770, + "end": 259050, + "confidence": 0.99121, + "speaker": "B" + }, + { + "text": "getting", + "start": 259050, + "end": 259290, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "hit", + "start": 259290, + "end": 259490, + "confidence": 0.99658203, + "speaker": "B" + }, + { + "text": "right", + "start": 259490, + "end": 259690, + "confidence": 0.9980469, + "speaker": "B" + }, + { + "text": "now", + "start": 259690, + "end": 259970, + "confidence": 1, + "speaker": "B" + }, + { + "text": "is", + "start": 260370, + "end": 260690, + "confidence": 0.99316406, + "speaker": "B" + }, + { + "text": "a", + "start": 260690, + "end": 260850, + "confidence": 0.99902344, + "speaker": "B" + }, + { + "text": "little", + "start": 260850, + "end": 260970, + "confidence": 1, + "speaker": "B" + }, + { + "text": "bit", + "start": 260970, + "end": 261170, + "confidence": 0.99902344, + "speaker": "B" + }, + { + "text": "new.", + "start": 261170, + "end": 261490, + "confidence": 1, + "speaker": "B" + }, + { + "text": "But", + "start": 262210, + "end": 262530, + "confidence": 0.9819336, + "speaker": "B" + }, + { + "text": "yeah,", + "start": 262530, + "end": 262850, + "confidence": 0.97314453, + "speaker": "B" + }, + { + "text": "I", + "start": 262850, + "end": 263010, + "confidence": 0.9946289, + "speaker": "B" + }, + { + "text": "think", + "start": 263010, + "end": 263130, + "confidence": 1, + "speaker": "B" + }, + { + "text": "with", + "start": 263130, + "end": 263330, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "climate", + "start": 263330, + "end": 263650, + "confidence": 1, + "speaker": "B" + }, + { + "text": "change", + "start": 263650, + "end": 263930, + "confidence": 1, + "speaker": "B" + }, + { + "text": "moving", + "start": 263930, + "end": 264330, + "confidence": 1, + "speaker": "B" + }, + { + "text": "forward,", + "start": 264330, + "end": 264690, + "confidence": 1, + "speaker": "B" + }, + { + "text": "this", + "start": 264690, + "end": 264970, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "is", + "start": 264970, + "end": 265130, + "confidence": 0.99853516, + "speaker": "B" + }, + { + "text": "something", + "start": 265130, + "end": 265330, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "that", + "start": 265330, + "end": 265650, + "confidence": 0.9951172, + "speaker": "B" + }, + { + "text": "is", + "start": 266130, + "end": 266410, + "confidence": 0.97558594, + "speaker": "B" + }, + { + "text": "going", + "start": 266410, + "end": 266530, + "confidence": 0.66503906, + "speaker": "B" + }, + { + "text": "to", + "start": 266530, + "end": 266610, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "happen", + "start": 266610, + "end": 266770, + "confidence": 1, + "speaker": "B" + }, + { + "text": "more", + "start": 266770, + "end": 266970, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "frequently.", + "start": 266970, + "end": 267570, + "confidence": 0.959668, + "speaker": "B" + }, + { + "text": "That's", + "start": 267970, + "end": 268290, + "confidence": 0.9977214, + "speaker": "A" + }, + { + "text": "Peter", + "start": 268290, + "end": 268610, + "confidence": 0.99780273, + "speaker": "A" + }, + { + "text": "DeCarlo,", + "start": 268610, + "end": 269290, + "confidence": 0.94775, + "speaker": "A" + }, + { + "text": "associate", + "start": 269290, + "end": 269730, + "confidence": 0.9992676, + "speaker": "A" + }, + { + "text": "professor", + "start": 269730, + "end": 270170, + "confidence": 1, + "speaker": "A" + }, + { + "text": "in", + "start": 270170, + "end": 270290, + "confidence": 0.99658203, + "speaker": "A" + }, + { + "text": "the", + "start": 270290, + "end": 270410, + "confidence": 0.9995117, + "speaker": "A" + }, + { + "text": "Department", + "start": 270410, + "end": 270690, + "confidence": 1, + "speaker": "A" + }, + { + "text": "of", + "start": 270770, + "end": 271009, + "confidence": 0.9995117, + "speaker": "A" + }, + { + "text": "Environmental", + "start": 271009, + "end": 271610, + "confidence": 0.9992676, + "speaker": "A" + }, + { + "text": "Health", + "start": 271610, + "end": 271850, + "confidence": 0.9975586, + "speaker": "A" + }, + { + "text": "and", + "start": 271850, + "end": 272090, + "confidence": 0.9980469, + "speaker": "A" + }, + { + "text": "Engineering", + "start": 272090, + "end": 272610, + "confidence": 1, + "speaker": "A" + }, + { + "text": "at", + "start": 272770, + "end": 273090, + "confidence": 0.9995117, + "speaker": "A" + }, + { + "text": "Johns", + "start": 273090, + "end": 273530, + "confidence": 0.9777832, + "speaker": "A" + }, + { + "text": "Hopkins", + "start": 273530, + "end": 274050, + "confidence": 1, + "speaker": "A" + }, + { + "text": "University.", + "start": 274130, + "end": 274530, + "confidence": 1, + "speaker": "A" + }, + { + "text": "Professor", + "start": 274610, + "end": 275130, + "confidence": 0.99902344, + "speaker": "A" + }, + { + "text": "DeCarlo,", + "start": 275130, + "end": 275650, + "confidence": 0.96191, + "speaker": "A" + }, + { + "text": "thanks", + "start": 275650, + "end": 275890, + "confidence": 0.9951172, + "speaker": "A" + }, + { + "text": "so", + "start": 275890, + "end": 275970, + "confidence": 0.99853516, + "speaker": "A" + }, + { + "text": "much", + "start": 275970, + "end": 276090, + "confidence": 0.9995117, + "speaker": "A" + }, + { + "text": "for", + "start": 276090, + "end": 276250, + "confidence": 0.9995117, + "speaker": "A" + }, + { + "text": "joining", + "start": 276250, + "end": 276490, + "confidence": 0.90201825, + "speaker": "A" + }, + { + "text": "us", + "start": 276490, + "end": 276650, + "confidence": 0.99853516, + "speaker": "A" + }, + { + "text": "and", + "start": 276650, + "end": 276810, + "confidence": 0.9926758, + "speaker": "A" + }, + { + "text": "sharing", + "start": 276810, + "end": 277050, + "confidence": 0.99731445, + "speaker": "A" + }, + { + "text": "this", + "start": 277050, + "end": 277250, + "confidence": 0.9975586, + "speaker": "A" + }, + { + "text": "expertise", + "start": 277250, + "end": 277730, + "confidence": 0.89729816, + "speaker": "A" + }, + { + "text": "with", + "start": 277730, + "end": 277930, + "confidence": 0.9995117, + "speaker": "A" + }, + { + "text": "us.", + "start": 277930, + "end": 278210, + "confidence": 0.9995117, + "speaker": "A" + }, + { + "text": "Thank", + "start": 279410, + "end": 279770, + "confidence": 0.99365234, + "speaker": "B" + }, + { + "text": "you", + "start": 279770, + "end": 279930, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "for", + "start": 279930, + "end": 280050, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "having", + "start": 280050, + "end": 280210, + "confidence": 0.9980469, + "speaker": "B" + }, + { + "text": "me.", + "start": 280210, + "end": 280530, + "confidence": 0.9980469, + "speaker": "B" + } + ], + "utterances": [ + { + "speaker": "A", + "text": "Smoke from hundreds of wildfires in Canada is triggering air quality alerts throughout the US Skylines from Maine to Maryland to Minnesota are gray and smoggy. And in some places, the air quality warnings include the warning to stay inside. We wanted to better understand what's happening here and why, so we called Peter DeCarlo, an associate professor in the Department of Environmental Health and Engineering at Johns Hopkins University. Good morning, Professor.", + "confidence": 0.9815734, + "start": 240, + "end": 26560, + "words": [ + { + "text": "Smoke", + "start": 240, + "end": 640, + "confidence": 0.90152997, + "speaker": "A" + }, + { + "text": "from", + "start": 640, + "end": 1000, + "confidence": 0.9995117, + "speaker": "A" + }, + { + "text": "hundreds", + "start": 1000, + "end": 1480, + "confidence": 0.99902344, + "speaker": "A" + }, + { + "text": "of", + "start": 1480, + "end": 1640, + "confidence": 0.99902344, + "speaker": "A" + }, + { + "text": "wildfires", + "start": 1640, + "end": 2320, + "confidence": 0.99970704, + "speaker": "A" + }, + { + "text": "in", + "start": 2320, + "end": 2480, + "confidence": 0.9980469, + "speaker": "A" + }, + { + "text": "Canada", + "start": 2480, + "end": 2800, + "confidence": 1, + "speaker": "A" + }, + { + "text": "is", + "start": 3120, + "end": 3440, + "confidence": 0.99658203, + "speaker": "A" + }, + { + "text": "triggering", + "start": 3440, + "end": 3920, + "confidence": 0.9998779, + "speaker": "A" + }, + { + "text": "air", + "start": 3920, + "end": 4160, + "confidence": 1, + "speaker": "A" + }, + { + "text": "quality", + "start": 4160, + "end": 4640, + "confidence": 0.78100586, + "speaker": "A" + }, + { + "text": "alerts", + "start": 4640, + "end": 5120, + "confidence": 0.9013672, + "speaker": "A" + }, + { + "text": "throughout", + "start": 5120, + "end": 5480, + "confidence": 0.9995117, + "speaker": "A" + }, + { + "text": "the", + "start": 5480, + "end": 5680, + "confidence": 0.9995117, + "speaker": "A" + }, + { + "text": "US", + "start": 5680, + "end": 6000, + "confidence": 0.9770508, + "speaker": "A" + }, + { + "text": "Skylines", + "start": 6480, + "end": 7280, + "confidence": 0.9996338, + "speaker": "A" + }, + { + "text": "from", + "start": 7280, + "end": 7440, + "confidence": 0.99853516, + "speaker": "A" + }, + { + "text": "Maine", + "start": 7440, + "end": 7920, + "confidence": 0.84106445, + "speaker": "A" + }, + { + "text": "to", + "start": 8000, + "end": 8280, + "confidence": 0.9975586, + "speaker": "A" + }, + { + "text": "Maryland", + "start": 8280, + "end": 8680, + "confidence": 0.9978841, + "speaker": "A" + }, + { + "text": "to", + "start": 8680, + "end": 8920, + "confidence": 0.99609375, + "speaker": "A" + }, + { + "text": "Minnesota", + "start": 8920, + "end": 9640, + "confidence": 0.99975586, + "speaker": "A" + }, + { + "text": "are", + "start": 9640, + "end": 9920, + "confidence": 0.99902344, + "speaker": "A" + }, + { + "text": "gray", + "start": 9920, + "end": 10200, + "confidence": 0.7348633, + "speaker": "A" + }, + { + "text": "and", + "start": 10200, + "end": 10400, + "confidence": 0.9995117, + "speaker": "A" + }, + { + "text": "smoggy.", + "start": 10400, + "end": 11040, + "confidence": 0.9984131, + "speaker": "A" + }, + { + "text": "And", + "start": 11040, + "end": 11360, + "confidence": 0.97021484, + "speaker": "A" + }, + { + "text": "in", + "start": 11360, + "end": 11560, + "confidence": 0.99853516, + "speaker": "A" + }, + { + "text": "some", + "start": 11560, + "end": 11760, + "confidence": 1, + "speaker": "A" + }, + { + "text": "places,", + "start": 11760, + "end": 12120, + "confidence": 0.99902344, + "speaker": "A" + }, + { + "text": "the", + "start": 12120, + "end": 12320, + "confidence": 0.9975586, + "speaker": "A" + }, + { + "text": "air", + "start": 12320, + "end": 12560, + "confidence": 0.9995117, + "speaker": "A" + }, + { + "text": "quality", + "start": 12560, + "end": 12960, + "confidence": 1, + "speaker": "A" + }, + { + "text": "warnings", + "start": 12960, + "end": 13400, + "confidence": 0.99820966, + "speaker": "A" + }, + { + "text": "include", + "start": 13400, + "end": 13680, + "confidence": 0.99902344, + "speaker": "A" + }, + { + "text": "the", + "start": 13680, + "end": 13960, + "confidence": 0.9980469, + "speaker": "A" + }, + { + "text": "warning", + "start": 13960, + "end": 14240, + "confidence": 0.9992676, + "speaker": "A" + }, + { + "text": "to", + "start": 14240, + "end": 14480, + "confidence": 0.99902344, + "speaker": "A" + }, + { + "text": "stay", + "start": 14480, + "end": 14800, + "confidence": 0.99902344, + "speaker": "A" + }, + { + "text": "inside.", + "start": 14880, + "end": 15520, + "confidence": 1, + "speaker": "A" + }, + { + "text": "We", + "start": 15919, + "end": 16199, + "confidence": 0.99853516, + "speaker": "A" + }, + { + "text": "wanted", + "start": 16199, + "end": 16400, + "confidence": 0.99243164, + "speaker": "A" + }, + { + "text": "to", + "start": 16400, + "end": 16520, + "confidence": 0.9975586, + "speaker": "A" + }, + { + "text": "better", + "start": 16520, + "end": 16720, + "confidence": 0.9980469, + "speaker": "A" + }, + { + "text": "understand", + "start": 16720, + "end": 17040, + "confidence": 0.9995117, + "speaker": "A" + }, + { + "text": "what's", + "start": 17040, + "end": 17440, + "confidence": 0.9926758, + "speaker": "A" + }, + { + "text": "happening", + "start": 17440, + "end": 17760, + "confidence": 0.8527832, + "speaker": "A" + }, + { + "text": "here", + "start": 17760, + "end": 18000, + "confidence": 0.9970703, + "speaker": "A" + }, + { + "text": "and", + "start": 18000, + "end": 18200, + "confidence": 0.99609375, + "speaker": "A" + }, + { + "text": "why,", + "start": 18200, + "end": 18440, + "confidence": 0.9995117, + "speaker": "A" + }, + { + "text": "so", + "start": 18440, + "end": 18640, + "confidence": 0.9863281, + "speaker": "A" + }, + { + "text": "we", + "start": 18640, + "end": 18760, + "confidence": 0.9838867, + "speaker": "A" + }, + { + "text": "called", + "start": 18760, + "end": 18920, + "confidence": 0.99560547, + "speaker": "A" + }, + { + "text": "Peter", + "start": 18920, + "end": 19240, + "confidence": 0.9980469, + "speaker": "A" + }, + { + "text": "DeCarlo,", + "start": 19240, + "end": 19920, + "confidence": 0.88265, + "speaker": "A" + }, + { + "text": "an", + "start": 20000, + "end": 20280, + "confidence": 0.9604492, + "speaker": "A" + }, + { + "text": "associate", + "start": 20280, + "end": 20720, + "confidence": 1, + "speaker": "A" + }, + { + "text": "professor", + "start": 20720, + "end": 21160, + "confidence": 1, + "speaker": "A" + }, + { + "text": "in", + "start": 21160, + "end": 21320, + "confidence": 0.99316406, + "speaker": "A" + }, + { + "text": "the", + "start": 21320, + "end": 21480, + "confidence": 0.99853516, + "speaker": "A" + }, + { + "text": "Department", + "start": 21480, + "end": 21760, + "confidence": 0.99902344, + "speaker": "A" + }, + { + "text": "of", + "start": 21760, + "end": 22040, + "confidence": 0.9995117, + "speaker": "A" + }, + { + "text": "Environmental", + "start": 22040, + "end": 22720, + "confidence": 0.9987793, + "speaker": "A" + }, + { + "text": "Health", + "start": 22720, + "end": 22960, + "confidence": 0.9975586, + "speaker": "A" + }, + { + "text": "and", + "start": 22960, + "end": 23200, + "confidence": 0.9951172, + "speaker": "A" + }, + { + "text": "Engineering", + "start": 23200, + "end": 23680, + "confidence": 1, + "speaker": "A" + }, + { + "text": "at", + "start": 23680, + "end": 23920, + "confidence": 0.99853516, + "speaker": "A" + }, + { + "text": "Johns", + "start": 23920, + "end": 24360, + "confidence": 0.9733887, + "speaker": "A" + }, + { + "text": "Hopkins", + "start": 24360, + "end": 24840, + "confidence": 1, + "speaker": "A" + }, + { + "text": "University.", + "start": 24840, + "end": 25200, + "confidence": 0.9995117, + "speaker": "A" + }, + { + "text": "Good", + "start": 25520, + "end": 25800, + "confidence": 0.9995117, + "speaker": "A" + }, + { + "text": "morning,", + "start": 25800, + "end": 26000, + "confidence": 1, + "speaker": "A" + }, + { + "text": "Professor.", + "start": 26000, + "end": 26560, + "confidence": 0.9995117, + "speaker": "A" + } + ] + }, + { + "speaker": "B", + "text": "Good morning.", + "confidence": 0.98217773, + "start": 28060, + "end": 28620, + "words": [ + { + "text": "Good", + "start": 28060, + "end": 28260, + "confidence": 0.96484375, + "speaker": "B" + }, + { + "text": "morning.", + "start": 28260, + "end": 28620, + "confidence": 0.9995117, + "speaker": "B" + } + ] + }, + { + "speaker": "A", + "text": "So what is it about the conditions right now that have caused this round of wildfires to affect so many people so far away?", + "confidence": 0.9814351, + "start": 29100, + "end": 37100, + "words": [ + { + "text": "So", + "start": 29100, + "end": 29500, + "confidence": 0.6220703, + "speaker": "A" + }, + { + "text": "what", + "start": 29660, + "end": 29940, + "confidence": 0.9995117, + "speaker": "A" + }, + { + "text": "is", + "start": 29940, + "end": 30100, + "confidence": 0.9980469, + "speaker": "A" + }, + { + "text": "it", + "start": 30100, + "end": 30260, + "confidence": 0.9941406, + "speaker": "A" + }, + { + "text": "about", + "start": 30260, + "end": 30500, + "confidence": 0.9995117, + "speaker": "A" + }, + { + "text": "the", + "start": 30500, + "end": 30740, + "confidence": 0.99853516, + "speaker": "A" + }, + { + "text": "conditions", + "start": 30740, + "end": 31260, + "confidence": 1, + "speaker": "A" + }, + { + "text": "right", + "start": 31260, + "end": 31660, + "confidence": 0.99902344, + "speaker": "A" + }, + { + "text": "now", + "start": 31660, + "end": 32060, + "confidence": 0.9995117, + "speaker": "A" + }, + { + "text": "that", + "start": 32140, + "end": 32420, + "confidence": 0.99902344, + "speaker": "A" + }, + { + "text": "have", + "start": 32420, + "end": 32620, + "confidence": 0.99121094, + "speaker": "A" + }, + { + "text": "caused", + "start": 32620, + "end": 32980, + "confidence": 0.9707031, + "speaker": "A" + }, + { + "text": "this", + "start": 32980, + "end": 33260, + "confidence": 0.99853516, + "speaker": "A" + }, + { + "text": "round", + "start": 33260, + "end": 33500, + "confidence": 1, + "speaker": "A" + }, + { + "text": "of", + "start": 33500, + "end": 33740, + "confidence": 0.9995117, + "speaker": "A" + }, + { + "text": "wildfires", + "start": 33740, + "end": 34540, + "confidence": 0.9995117, + "speaker": "A" + }, + { + "text": "to", + "start": 34540, + "end": 34700, + "confidence": 0.99853516, + "speaker": "A" + }, + { + "text": "affect", + "start": 34700, + "end": 35140, + "confidence": 0.9914551, + "speaker": "A" + }, + { + "text": "so", + "start": 35140, + "end": 35380, + "confidence": 0.99902344, + "speaker": "A" + }, + { + "text": "many", + "start": 35380, + "end": 35580, + "confidence": 0.9995117, + "speaker": "A" + }, + { + "text": "people", + "start": 35580, + "end": 35900, + "confidence": 0.9995117, + "speaker": "A" + }, + { + "text": "so", + "start": 36300, + "end": 36580, + "confidence": 1, + "speaker": "A" + }, + { + "text": "far", + "start": 36580, + "end": 36780, + "confidence": 1, + "speaker": "A" + }, + { + "text": "away?", + "start": 36780, + "end": 37100, + "confidence": 0.9975586, + "speaker": "A" + } + ] + }, + { + "speaker": "B", + "text": "Well, there's a couple of things. The season has been pretty dry already, and then the fact that we're getting hit in the US is because there's a couple weather systems that are essentially channeling the smoke from those Canadian wildfires through Pennsylvania into the mid Atlantic and the Northeast and kind of just dropping the smoke there.", + "confidence": 0.97739446, + "start": 39100, + "end": 55820, + "words": [ + { + "text": "Well,", + "start": 39100, + "end": 39380, + "confidence": 0.9394531, + "speaker": "B" + }, + { + "text": "there's", + "start": 39380, + "end": 39580, + "confidence": 0.98844403, + "speaker": "B" + }, + { + "text": "a", + "start": 39580, + "end": 39660, + "confidence": 0.99902344, + "speaker": "B" + }, + { + "text": "couple", + "start": 39660, + "end": 39860, + "confidence": 0.99902344, + "speaker": "B" + }, + { + "text": "of", + "start": 39860, + "end": 40020, + "confidence": 0.94628906, + "speaker": "B" + }, + { + "text": "things.", + "start": 40020, + "end": 40300, + "confidence": 0.9428711, + "speaker": "B" + }, + { + "text": "The", + "start": 41020, + "end": 41340, + "confidence": 0.99853516, + "speaker": "B" + }, + { + "text": "season", + "start": 41340, + "end": 41620, + "confidence": 1, + "speaker": "B" + }, + { + "text": "has", + "start": 41620, + "end": 41820, + "confidence": 0.9980469, + "speaker": "B" + }, + { + "text": "been", + "start": 41820, + "end": 41940, + "confidence": 0.99853516, + "speaker": "B" + }, + { + "text": "pretty", + "start": 41940, + "end": 42140, + "confidence": 0.99902344, + "speaker": "B" + }, + { + "text": "dry", + "start": 42140, + "end": 42340, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "already,", + "start": 42340, + "end": 42620, + "confidence": 0.99853516, + "speaker": "B" + }, + { + "text": "and", + "start": 43020, + "end": 43340, + "confidence": 0.9794922, + "speaker": "B" + }, + { + "text": "then", + "start": 43340, + "end": 43660, + "confidence": 0.9892578, + "speaker": "B" + }, + { + "text": "the", + "start": 43660, + "end": 43940, + "confidence": 0.99902344, + "speaker": "B" + }, + { + "text": "fact", + "start": 43940, + "end": 44100, + "confidence": 1, + "speaker": "B" + }, + { + "text": "that", + "start": 44100, + "end": 44260, + "confidence": 0.99609375, + "speaker": "B" + }, + { + "text": "we're", + "start": 44260, + "end": 44500, + "confidence": 0.8828125, + "speaker": "B" + }, + { + "text": "getting", + "start": 44500, + "end": 44740, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "hit", + "start": 44740, + "end": 44980, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "in", + "start": 44980, + "end": 45140, + "confidence": 0.99902344, + "speaker": "B" + }, + { + "text": "the", + "start": 45140, + "end": 45300, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "US", + "start": 45300, + "end": 45580, + "confidence": 0.9863281, + "speaker": "B" + }, + { + "text": "is", + "start": 46140, + "end": 46460, + "confidence": 0.9975586, + "speaker": "B" + }, + { + "text": "because", + "start": 46460, + "end": 46700, + "confidence": 0.99902344, + "speaker": "B" + }, + { + "text": "there's", + "start": 46700, + "end": 47020, + "confidence": 0.99316406, + "speaker": "B" + }, + { + "text": "a", + "start": 47020, + "end": 47100, + "confidence": 0.99902344, + "speaker": "B" + }, + { + "text": "couple", + "start": 47100, + "end": 47340, + "confidence": 0.9975586, + "speaker": "B" + }, + { + "text": "weather", + "start": 47340, + "end": 47660, + "confidence": 0.9992676, + "speaker": "B" + }, + { + "text": "systems", + "start": 47660, + "end": 47980, + "confidence": 0.9987793, + "speaker": "B" + }, + { + "text": "that", + "start": 47980, + "end": 48060, + "confidence": 0.9941406, + "speaker": "B" + }, + { + "text": "are", + "start": 48060, + "end": 48180, + "confidence": 0.99658203, + "speaker": "B" + }, + { + "text": "essentially", + "start": 48180, + "end": 48580, + "confidence": 0.99853516, + "speaker": "B" + }, + { + "text": "channeling", + "start": 48580, + "end": 49020, + "confidence": 0.970459, + "speaker": "B" + }, + { + "text": "the", + "start": 49020, + "end": 49140, + "confidence": 0.98828125, + "speaker": "B" + }, + { + "text": "smoke", + "start": 49140, + "end": 49380, + "confidence": 0.9682617, + "speaker": "B" + }, + { + "text": "from", + "start": 49380, + "end": 49540, + "confidence": 0.99902344, + "speaker": "B" + }, + { + "text": "those", + "start": 49540, + "end": 49700, + "confidence": 0.96875, + "speaker": "B" + }, + { + "text": "Canadian", + "start": 49700, + "end": 50100, + "confidence": 0.99902344, + "speaker": "B" + }, + { + "text": "wildfires", + "start": 50100, + "end": 50780, + "confidence": 0.9993164, + "speaker": "B" + }, + { + "text": "through", + "start": 51260, + "end": 51620, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "Pennsylvania", + "start": 51620, + "end": 52340, + "confidence": 0.9989692, + "speaker": "B" + }, + { + "text": "into", + "start": 52340, + "end": 52500, + "confidence": 0.9980469, + "speaker": "B" + }, + { + "text": "the", + "start": 52500, + "end": 52660, + "confidence": 0.99902344, + "speaker": "B" + }, + { + "text": "mid", + "start": 52660, + "end": 52820, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "Atlantic", + "start": 52820, + "end": 53180, + "confidence": 0.99902344, + "speaker": "B" + }, + { + "text": "and", + "start": 53180, + "end": 53300, + "confidence": 0.52978516, + "speaker": "B" + }, + { + "text": "the", + "start": 53300, + "end": 53420, + "confidence": 0.9785156, + "speaker": "B" + }, + { + "text": "Northeast", + "start": 53420, + "end": 53860, + "confidence": 0.9975586, + "speaker": "B" + }, + { + "text": "and", + "start": 53860, + "end": 54140, + "confidence": 0.8803711, + "speaker": "B" + }, + { + "text": "kind", + "start": 54220, + "end": 54460, + "confidence": 0.8515625, + "speaker": "B" + }, + { + "text": "of", + "start": 54460, + "end": 54580, + "confidence": 0.98779297, + "speaker": "B" + }, + { + "text": "just", + "start": 54580, + "end": 54740, + "confidence": 0.98583984, + "speaker": "B" + }, + { + "text": "dropping", + "start": 54740, + "end": 55140, + "confidence": 0.99975586, + "speaker": "B" + }, + { + "text": "the", + "start": 55140, + "end": 55260, + "confidence": 0.9824219, + "speaker": "B" + }, + { + "text": "smoke", + "start": 55260, + "end": 55540, + "confidence": 0.99902344, + "speaker": "B" + }, + { + "text": "there.", + "start": 55540, + "end": 55820, + "confidence": 0.9975586, + "speaker": "B" + } + ] + }, + { + "speaker": "A", + "text": "So what is it in this haze that makes it harmful? And I'm assuming it is harmful.", + "confidence": 0.9638959, + "start": 56590, + "end": 60670, + "words": [ + { + "text": "So", + "start": 56590, + "end": 56670, + "confidence": 0.8666992, + "speaker": "A" + }, + { + "text": "what", + "start": 56670, + "end": 56790, + "confidence": 0.9995117, + "speaker": "A" + }, + { + "text": "is", + "start": 56790, + "end": 56950, + "confidence": 0.9980469, + "speaker": "A" + }, + { + "text": "it", + "start": 56950, + "end": 57110, + "confidence": 0.9814453, + "speaker": "A" + }, + { + "text": "in", + "start": 57110, + "end": 57270, + "confidence": 0.9980469, + "speaker": "A" + }, + { + "text": "this", + "start": 57270, + "end": 57470, + "confidence": 0.99853516, + "speaker": "A" + }, + { + "text": "haze", + "start": 57470, + "end": 57910, + "confidence": 0.9347331, + "speaker": "A" + }, + { + "text": "that", + "start": 57910, + "end": 58110, + "confidence": 0.99902344, + "speaker": "A" + }, + { + "text": "makes", + "start": 58110, + "end": 58430, + "confidence": 0.99902344, + "speaker": "A" + }, + { + "text": "it", + "start": 58510, + "end": 58830, + "confidence": 0.99853516, + "speaker": "A" + }, + { + "text": "harmful?", + "start": 58830, + "end": 59310, + "confidence": 0.9998372, + "speaker": "A" + }, + { + "text": "And", + "start": 59310, + "end": 59470, + "confidence": 0.71435547, + "speaker": "A" + }, + { + "text": "I'm", + "start": 59470, + "end": 59670, + "confidence": 0.98307294, + "speaker": "A" + }, + { + "text": "assuming", + "start": 59670, + "end": 59990, + "confidence": 1, + "speaker": "A" + }, + { + "text": "it", + "start": 59990, + "end": 60110, + "confidence": 0.99902344, + "speaker": "A" + }, + { + "text": "is", + "start": 60110, + "end": 60230, + "confidence": 0.99853516, + "speaker": "A" + }, + { + "text": "harmful.", + "start": 60230, + "end": 60670, + "confidence": 0.91780597, + "speaker": "A" + } + ] + }, + { + "speaker": "B", + "text": "It is, it is. The levels outside right now in Baltimore are considered unhealthy. And most of that is due to what's called particulate matter, which are tiny particles, microscopic, smaller than the width of your hair, that can get into your lungs and impact your respiratory system, your cardiovascular system, and even your neurological, your brain.", + "confidence": 0.9743181, + "start": 62350, + "end": 82590, + "words": [ + { + "text": "It", + "start": 62350, + "end": 62630, + "confidence": 0.9238281, + "speaker": "B" + }, + { + "text": "is,", + "start": 62630, + "end": 62870, + "confidence": 0.99316406, + "speaker": "B" + }, + { + "text": "it", + "start": 62870, + "end": 63110, + "confidence": 0.8666992, + "speaker": "B" + }, + { + "text": "is.", + "start": 63110, + "end": 63350, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "The", + "start": 63350, + "end": 63590, + "confidence": 0.99560547, + "speaker": "B" + }, + { + "text": "levels", + "start": 63590, + "end": 64030, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "outside", + "start": 64030, + "end": 64430, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "right", + "start": 64510, + "end": 64790, + "confidence": 0.9980469, + "speaker": "B" + }, + { + "text": "now", + "start": 64790, + "end": 64950, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "in", + "start": 64950, + "end": 65110, + "confidence": 0.99658203, + "speaker": "B" + }, + { + "text": "Baltimore", + "start": 65110, + "end": 65590, + "confidence": 0.9998047, + "speaker": "B" + }, + { + "text": "are", + "start": 65590, + "end": 65750, + "confidence": 0.99658203, + "speaker": "B" + }, + { + "text": "considered", + "start": 65750, + "end": 66070, + "confidence": 0.99975586, + "speaker": "B" + }, + { + "text": "unhealthy.", + "start": 66070, + "end": 66750, + "confidence": 0.99902344, + "speaker": "B" + }, + { + "text": "And", + "start": 67790, + "end": 68110, + "confidence": 0.67822266, + "speaker": "B" + }, + { + "text": "most", + "start": 68110, + "end": 68310, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "of", + "start": 68310, + "end": 68470, + "confidence": 0.99902344, + "speaker": "B" + }, + { + "text": "that", + "start": 68470, + "end": 68630, + "confidence": 0.99902344, + "speaker": "B" + }, + { + "text": "is", + "start": 68630, + "end": 68790, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "due", + "start": 68790, + "end": 68990, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "to", + "start": 68990, + "end": 69270, + "confidence": 0.99902344, + "speaker": "B" + }, + { + "text": "what's", + "start": 69270, + "end": 69630, + "confidence": 0.9916992, + "speaker": "B" + }, + { + "text": "called", + "start": 69630, + "end": 69750, + "confidence": 1, + "speaker": "B" + }, + { + "text": "particulate", + "start": 69750, + "end": 70310, + "confidence": 0.99886066, + "speaker": "B" + }, + { + "text": "matter,", + "start": 70310, + "end": 70470, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "which", + "start": 70470, + "end": 70670, + "confidence": 0.9970703, + "speaker": "B" + }, + { + "text": "are", + "start": 70670, + "end": 70870, + "confidence": 0.99902344, + "speaker": "B" + }, + { + "text": "tiny", + "start": 70870, + "end": 71190, + "confidence": 1, + "speaker": "B" + }, + { + "text": "particles,", + "start": 71190, + "end": 71630, + "confidence": 0.7578125, + "speaker": "B" + }, + { + "text": "microscopic,", + "start": 72110, + "end": 72910, + "confidence": 0.97957355, + "speaker": "B" + }, + { + "text": "smaller", + "start": 72910, + "end": 73310, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "than", + "start": 73310, + "end": 73390, + "confidence": 0.99902344, + "speaker": "B" + }, + { + "text": "the", + "start": 73390, + "end": 73470, + "confidence": 0.99902344, + "speaker": "B" + }, + { + "text": "width", + "start": 73470, + "end": 73670, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "of", + "start": 73670, + "end": 73950, + "confidence": 0.98095703, + "speaker": "B" + }, + { + "text": "your", + "start": 73950, + "end": 74270, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "hair,", + "start": 74270, + "end": 74670, + "confidence": 0.99975586, + "speaker": "B" + }, + { + "text": "that", + "start": 75230, + "end": 75550, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "can", + "start": 75550, + "end": 75750, + "confidence": 0.99902344, + "speaker": "B" + }, + { + "text": "get", + "start": 75750, + "end": 75910, + "confidence": 1, + "speaker": "B" + }, + { + "text": "into", + "start": 75910, + "end": 76070, + "confidence": 0.99853516, + "speaker": "B" + }, + { + "text": "your", + "start": 76070, + "end": 76230, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "lungs", + "start": 76230, + "end": 76550, + "confidence": 1, + "speaker": "B" + }, + { + "text": "and", + "start": 76550, + "end": 76830, + "confidence": 0.9145508, + "speaker": "B" + }, + { + "text": "impact", + "start": 76910, + "end": 77270, + "confidence": 1, + "speaker": "B" + }, + { + "text": "your", + "start": 77270, + "end": 77590, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "respiratory", + "start": 77590, + "end": 78150, + "confidence": 0.99886066, + "speaker": "B" + }, + { + "text": "system,", + "start": 78150, + "end": 78470, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "your", + "start": 78470, + "end": 78710, + "confidence": 0.99316406, + "speaker": "B" + }, + { + "text": "cardiovascular", + "start": 78710, + "end": 79470, + "confidence": 0.99958146, + "speaker": "B" + }, + { + "text": "system,", + "start": 79470, + "end": 79790, + "confidence": 1, + "speaker": "B" + }, + { + "text": "and", + "start": 80430, + "end": 80710, + "confidence": 0.99121094, + "speaker": "B" + }, + { + "text": "even", + "start": 80710, + "end": 80910, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "your", + "start": 80910, + "end": 81230, + "confidence": 0.53027344, + "speaker": "B" + }, + { + "text": "neurological,", + "start": 81310, + "end": 82030, + "confidence": 0.99768066, + "speaker": "B" + }, + { + "text": "your", + "start": 82030, + "end": 82230, + "confidence": 0.9746094, + "speaker": "B" + }, + { + "text": "brain.", + "start": 82230, + "end": 82590, + "confidence": 0.9992676, + "speaker": "B" + } + ] + }, + { + "speaker": "A", + "text": "What makes this particularly harmful? Is it the volume of particulate? Is it something in particular? What is it exactly? Can you just drill down on that a little bit more?", + "confidence": 0.9699182, + "start": 83630, + "end": 92190, + "words": [ + { + "text": "What", + "start": 83630, + "end": 83790, + "confidence": 0.99609375, + "speaker": "A" + }, + { + "text": "makes", + "start": 83790, + "end": 83990, + "confidence": 0.99902344, + "speaker": "A" + }, + { + "text": "this", + "start": 83990, + "end": 84190, + "confidence": 0.9423828, + "speaker": "A" + }, + { + "text": "particularly", + "start": 84190, + "end": 84990, + "confidence": 0.9992676, + "speaker": "A" + }, + { + "text": "harmful?", + "start": 84990, + "end": 85550, + "confidence": 0.9998372, + "speaker": "A" + }, + { + "text": "Is", + "start": 85550, + "end": 85750, + "confidence": 0.9980469, + "speaker": "A" + }, + { + "text": "it", + "start": 85750, + "end": 85870, + "confidence": 0.9946289, + "speaker": "A" + }, + { + "text": "the", + "start": 85870, + "end": 86110, + "confidence": 0.59228516, + "speaker": "A" + }, + { + "text": "volume", + "start": 86670, + "end": 87150, + "confidence": 0.8741862, + "speaker": "A" + }, + { + "text": "of", + "start": 87150, + "end": 87390, + "confidence": 0.9995117, + "speaker": "A" + }, + { + "text": "particulate?", + "start": 87390, + "end": 88030, + "confidence": 0.8585612, + "speaker": "A" + }, + { + "text": "Is", + "start": 88030, + "end": 88230, + "confidence": 0.9892578, + "speaker": "A" + }, + { + "text": "it", + "start": 88230, + "end": 88390, + "confidence": 0.99609375, + "speaker": "A" + }, + { + "text": "something", + "start": 88390, + "end": 88590, + "confidence": 0.99902344, + "speaker": "A" + }, + { + "text": "in", + "start": 88590, + "end": 88790, + "confidence": 0.96435547, + "speaker": "A" + }, + { + "text": "particular?", + "start": 88790, + "end": 89070, + "confidence": 0.97753906, + "speaker": "A" + }, + { + "text": "What", + "start": 89390, + "end": 89670, + "confidence": 0.9975586, + "speaker": "A" + }, + { + "text": "is", + "start": 89670, + "end": 89790, + "confidence": 0.99902344, + "speaker": "A" + }, + { + "text": "it", + "start": 89790, + "end": 89910, + "confidence": 0.9946289, + "speaker": "A" + }, + { + "text": "exactly?", + "start": 89910, + "end": 90350, + "confidence": 0.92545575, + "speaker": "A" + }, + { + "text": "Can", + "start": 90350, + "end": 90510, + "confidence": 0.99902344, + "speaker": "A" + }, + { + "text": "you", + "start": 90510, + "end": 90590, + "confidence": 1, + "speaker": "A" + }, + { + "text": "just", + "start": 90590, + "end": 90790, + "confidence": 0.98095703, + "speaker": "A" + }, + { + "text": "drill", + "start": 90790, + "end": 91070, + "confidence": 1, + "speaker": "A" + }, + { + "text": "down", + "start": 91070, + "end": 91190, + "confidence": 1, + "speaker": "A" + }, + { + "text": "on", + "start": 91190, + "end": 91350, + "confidence": 0.9980469, + "speaker": "A" + }, + { + "text": "that", + "start": 91350, + "end": 91510, + "confidence": 0.99902344, + "speaker": "A" + }, + { + "text": "a", + "start": 91510, + "end": 91630, + "confidence": 0.9980469, + "speaker": "A" + }, + { + "text": "little", + "start": 91630, + "end": 91750, + "confidence": 0.9995117, + "speaker": "A" + }, + { + "text": "bit", + "start": 91750, + "end": 91910, + "confidence": 0.9970703, + "speaker": "A" + }, + { + "text": "more?", + "start": 91910, + "end": 92190, + "confidence": 0.99902344, + "speaker": "A" + } + ] + }, + { + "speaker": "B", + "text": "Yeah. So the concentration of particulate matter, I was looking at some of the monitors that we have was reaching levels of what are, in science speak, 150 micrograms per meter cubed, which is more than 10 times what the annual average should be in about four times higher than what you're supposed to have on a 24 hour average. And so the concentrations of these particles in the air are just much, much, much higher than we typically see. And exposure to those high levels can lead to a host of health problems.", + "confidence": 0.9856108, + "start": 93550, + "end": 123350, + "words": [ + { + "text": "Yeah.", + "start": 93550, + "end": 93950, + "confidence": 0.9145508, + "speaker": "B" + }, + { + "text": "So", + "start": 93950, + "end": 94150, + "confidence": 0.5620117, + "speaker": "B" + }, + { + "text": "the", + "start": 94150, + "end": 94310, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "concentration", + "start": 94310, + "end": 94830, + "confidence": 1, + "speaker": "B" + }, + { + "text": "of", + "start": 94830, + "end": 95070, + "confidence": 1, + "speaker": "B" + }, + { + "text": "particulate", + "start": 95070, + "end": 95630, + "confidence": 0.99934894, + "speaker": "B" + }, + { + "text": "matter,", + "start": 95630, + "end": 95950, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "I", + "start": 96350, + "end": 96590, + "confidence": 0.99316406, + "speaker": "B" + }, + { + "text": "was", + "start": 96590, + "end": 96710, + "confidence": 0.99902344, + "speaker": "B" + }, + { + "text": "looking", + "start": 96710, + "end": 96870, + "confidence": 0.99902344, + "speaker": "B" + }, + { + "text": "at", + "start": 96870, + "end": 96990, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "some", + "start": 96990, + "end": 97110, + "confidence": 0.99853516, + "speaker": "B" + }, + { + "text": "of", + "start": 97110, + "end": 97230, + "confidence": 0.99853516, + "speaker": "B" + }, + { + "text": "the", + "start": 97230, + "end": 97310, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "monitors", + "start": 97310, + "end": 97630, + "confidence": 0.99934894, + "speaker": "B" + }, + { + "text": "that", + "start": 97630, + "end": 97750, + "confidence": 0.9824219, + "speaker": "B" + }, + { + "text": "we", + "start": 97750, + "end": 97910, + "confidence": 0.99560547, + "speaker": "B" + }, + { + "text": "have", + "start": 97910, + "end": 98190, + "confidence": 0.94677734, + "speaker": "B" + }, + { + "text": "was", + "start": 98270, + "end": 98550, + "confidence": 0.9838867, + "speaker": "B" + }, + { + "text": "reaching", + "start": 98550, + "end": 98869, + "confidence": 1, + "speaker": "B" + }, + { + "text": "levels", + "start": 98869, + "end": 99150, + "confidence": 1, + "speaker": "B" + }, + { + "text": "of", + "start": 99150, + "end": 99270, + "confidence": 0.9921875, + "speaker": "B" + }, + { + "text": "what", + "start": 99270, + "end": 99430, + "confidence": 0.88671875, + "speaker": "B" + }, + { + "text": "are,", + "start": 99430, + "end": 99710, + "confidence": 0.97509766, + "speaker": "B" + }, + { + "text": "in", + "start": 100910, + "end": 101190, + "confidence": 0.9838867, + "speaker": "B" + }, + { + "text": "science", + "start": 101190, + "end": 101430, + "confidence": 0.99731445, + "speaker": "B" + }, + { + "text": "speak,", + "start": 101430, + "end": 101710, + "confidence": 0.8635254, + "speaker": "B" + }, + { + "text": "150", + "start": 101710, + "end": 102350, + "confidence": 0.98551, + "speaker": "B" + }, + { + "text": "micrograms", + "start": 102350, + "end": 102910, + "confidence": 0.9963379, + "speaker": "B" + }, + { + "text": "per", + "start": 102910, + "end": 103030, + "confidence": 0.9941406, + "speaker": "B" + }, + { + "text": "meter", + "start": 103030, + "end": 103350, + "confidence": 0.99853516, + "speaker": "B" + }, + { + "text": "cubed,", + "start": 103350, + "end": 103670, + "confidence": 0.9954427, + "speaker": "B" + }, + { + "text": "which", + "start": 103670, + "end": 103830, + "confidence": 1, + "speaker": "B" + }, + { + "text": "is", + "start": 103830, + "end": 104110, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "more", + "start": 104270, + "end": 104550, + "confidence": 1, + "speaker": "B" + }, + { + "text": "than", + "start": 104550, + "end": 104790, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "10", + "start": 104790, + "end": 105110, + "confidence": 1, + "speaker": "B" + }, + { + "text": "times", + "start": 105110, + "end": 105390, + "confidence": 0.9980469, + "speaker": "B" + }, + { + "text": "what", + "start": 105390, + "end": 105590, + "confidence": 0.99365234, + "speaker": "B" + }, + { + "text": "the", + "start": 105590, + "end": 105750, + "confidence": 1, + "speaker": "B" + }, + { + "text": "annual", + "start": 105750, + "end": 106110, + "confidence": 1, + "speaker": "B" + }, + { + "text": "average", + "start": 106110, + "end": 106510, + "confidence": 1, + "speaker": "B" + }, + { + "text": "should", + "start": 106510, + "end": 106790, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "be", + "start": 106790, + "end": 107150, + "confidence": 0.9970703, + "speaker": "B" + }, + { + "text": "in", + "start": 107390, + "end": 107670, + "confidence": 0.87841797, + "speaker": "B" + }, + { + "text": "about", + "start": 107670, + "end": 107950, + "confidence": 0.9711914, + "speaker": "B" + }, + { + "text": "four", + "start": 109110, + "end": 109270, + "confidence": 0.98046875, + "speaker": "B" + }, + { + "text": "times", + "start": 109270, + "end": 109550, + "confidence": 0.99902344, + "speaker": "B" + }, + { + "text": "higher", + "start": 109550, + "end": 109790, + "confidence": 1, + "speaker": "B" + }, + { + "text": "than", + "start": 109790, + "end": 109950, + "confidence": 0.9980469, + "speaker": "B" + }, + { + "text": "what", + "start": 109950, + "end": 110070, + "confidence": 0.9975586, + "speaker": "B" + }, + { + "text": "you're", + "start": 110070, + "end": 110270, + "confidence": 0.99316406, + "speaker": "B" + }, + { + "text": "supposed", + "start": 110270, + "end": 110510, + "confidence": 0.998291, + "speaker": "B" + }, + { + "text": "to", + "start": 110510, + "end": 110670, + "confidence": 0.99902344, + "speaker": "B" + }, + { + "text": "have", + "start": 110670, + "end": 110950, + "confidence": 1, + "speaker": "B" + }, + { + "text": "on", + "start": 111350, + "end": 111670, + "confidence": 1, + "speaker": "B" + }, + { + "text": "a", + "start": 111670, + "end": 111910, + "confidence": 0.9975586, + "speaker": "B" + }, + { + "text": "24", + "start": 111910, + "end": 112390, + "confidence": 1, + "speaker": "B" + }, + { + "text": "hour", + "start": 112390, + "end": 112630, + "confidence": 0.99853516, + "speaker": "B" + }, + { + "text": "average.", + "start": 112630, + "end": 113110, + "confidence": 0.99975586, + "speaker": "B" + }, + { + "text": "And", + "start": 113350, + "end": 113710, + "confidence": 0.8989258, + "speaker": "B" + }, + { + "text": "so", + "start": 113710, + "end": 114070, + "confidence": 0.99853516, + "speaker": "B" + }, + { + "text": "the", + "start": 114070, + "end": 114390, + "confidence": 0.99853516, + "speaker": "B" + }, + { + "text": "concentrations", + "start": 114390, + "end": 115110, + "confidence": 0.99816895, + "speaker": "B" + }, + { + "text": "of", + "start": 115110, + "end": 115230, + "confidence": 0.99902344, + "speaker": "B" + }, + { + "text": "these", + "start": 115230, + "end": 115390, + "confidence": 0.99902344, + "speaker": "B" + }, + { + "text": "particles", + "start": 115390, + "end": 115710, + "confidence": 0.9970703, + "speaker": "B" + }, + { + "text": "in", + "start": 115710, + "end": 115830, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "the", + "start": 115830, + "end": 115950, + "confidence": 0.98583984, + "speaker": "B" + }, + { + "text": "air", + "start": 115950, + "end": 116230, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "are", + "start": 116550, + "end": 116870, + "confidence": 0.99902344, + "speaker": "B" + }, + { + "text": "just", + "start": 116870, + "end": 117190, + "confidence": 0.9838867, + "speaker": "B" + }, + { + "text": "much,", + "start": 117350, + "end": 117710, + "confidence": 0.9873047, + "speaker": "B" + }, + { + "text": "much,", + "start": 117710, + "end": 117950, + "confidence": 1, + "speaker": "B" + }, + { + "text": "much", + "start": 117950, + "end": 118150, + "confidence": 1, + "speaker": "B" + }, + { + "text": "higher", + "start": 118150, + "end": 118350, + "confidence": 1, + "speaker": "B" + }, + { + "text": "than", + "start": 118350, + "end": 118630, + "confidence": 0.9970703, + "speaker": "B" + }, + { + "text": "we", + "start": 118630, + "end": 118910, + "confidence": 0.99902344, + "speaker": "B" + }, + { + "text": "typically", + "start": 118910, + "end": 119270, + "confidence": 1, + "speaker": "B" + }, + { + "text": "see.", + "start": 119270, + "end": 119590, + "confidence": 1, + "speaker": "B" + }, + { + "text": "And", + "start": 119750, + "end": 120110, + "confidence": 0.98291016, + "speaker": "B" + }, + { + "text": "exposure", + "start": 120110, + "end": 120710, + "confidence": 0.9996745, + "speaker": "B" + }, + { + "text": "to", + "start": 120710, + "end": 120910, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "those", + "start": 120910, + "end": 121110, + "confidence": 0.99560547, + "speaker": "B" + }, + { + "text": "high", + "start": 121110, + "end": 121350, + "confidence": 0.99902344, + "speaker": "B" + }, + { + "text": "levels", + "start": 121350, + "end": 121710, + "confidence": 0.99975586, + "speaker": "B" + }, + { + "text": "can", + "start": 121710, + "end": 121870, + "confidence": 0.99902344, + "speaker": "B" + }, + { + "text": "lead", + "start": 121870, + "end": 122030, + "confidence": 1, + "speaker": "B" + }, + { + "text": "to", + "start": 122030, + "end": 122150, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "a", + "start": 122150, + "end": 122270, + "confidence": 0.9970703, + "speaker": "B" + }, + { + "text": "host", + "start": 122270, + "end": 122430, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "of", + "start": 122430, + "end": 122630, + "confidence": 0.99902344, + "speaker": "B" + }, + { + "text": "health", + "start": 122630, + "end": 122870, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "problems.", + "start": 122870, + "end": 123350, + "confidence": 0.9995117, + "speaker": "B" + } + ] + }, + { + "speaker": "A", + "text": "And who is most vulnerable? I noticed that in New York City, for example, they're canceling outdoor activities. And so here it is in the early days of summer and they have to keep all the kids inside. So who tends to be vulnerable in a situation like this?", + "confidence": 0.9823397, + "start": 123430, + "end": 135990, + "words": [ + { + "text": "And", + "start": 123430, + "end": 123710, + "confidence": 0.94970703, + "speaker": "A" + }, + { + "text": "who", + "start": 123710, + "end": 123870, + "confidence": 0.9995117, + "speaker": "A" + }, + { + "text": "is", + "start": 123870, + "end": 124070, + "confidence": 0.9975586, + "speaker": "A" + }, + { + "text": "most", + "start": 124070, + "end": 124310, + "confidence": 0.99902344, + "speaker": "A" + }, + { + "text": "vulnerable?", + "start": 124310, + "end": 124949, + "confidence": 1, + "speaker": "A" + }, + { + "text": "I", + "start": 124949, + "end": 125230, + "confidence": 0.9975586, + "speaker": "A" + }, + { + "text": "noticed", + "start": 125230, + "end": 125510, + "confidence": 0.882487, + "speaker": "A" + }, + { + "text": "that", + "start": 125510, + "end": 125630, + "confidence": 0.97998047, + "speaker": "A" + }, + { + "text": "in", + "start": 125630, + "end": 125750, + "confidence": 0.99853516, + "speaker": "A" + }, + { + "text": "New", + "start": 125750, + "end": 125870, + "confidence": 0.9975586, + "speaker": "A" + }, + { + "text": "York", + "start": 125870, + "end": 126030, + "confidence": 1, + "speaker": "A" + }, + { + "text": "City,", + "start": 126030, + "end": 126190, + "confidence": 0.99902344, + "speaker": "A" + }, + { + "text": "for", + "start": 126190, + "end": 126350, + "confidence": 0.99658203, + "speaker": "A" + }, + { + "text": "example,", + "start": 126350, + "end": 126750, + "confidence": 0.96435547, + "speaker": "A" + }, + { + "text": "they're", + "start": 126750, + "end": 127190, + "confidence": 0.9485677, + "speaker": "A" + }, + { + "text": "canceling", + "start": 127190, + "end": 127790, + "confidence": 0.87597656, + "speaker": "A" + }, + { + "text": "outdoor", + "start": 127790, + "end": 128190, + "confidence": 0.9984131, + "speaker": "A" + }, + { + "text": "activities.", + "start": 128190, + "end": 128670, + "confidence": 0.99975586, + "speaker": "A" + }, + { + "text": "And", + "start": 128670, + "end": 128990, + "confidence": 0.9458008, + "speaker": "A" + }, + { + "text": "so", + "start": 128990, + "end": 129230, + "confidence": 0.99560547, + "speaker": "A" + }, + { + "text": "here", + "start": 129230, + "end": 129390, + "confidence": 0.99902344, + "speaker": "A" + }, + { + "text": "it", + "start": 129390, + "end": 129510, + "confidence": 0.9970703, + "speaker": "A" + }, + { + "text": "is", + "start": 129510, + "end": 129630, + "confidence": 0.9975586, + "speaker": "A" + }, + { + "text": "in", + "start": 129630, + "end": 129910, + "confidence": 0.94921875, + "speaker": "A" + }, + { + "text": "the", + "start": 130070, + "end": 130470, + "confidence": 0.85595703, + "speaker": "A" + }, + { + "text": "early", + "start": 130550, + "end": 130830, + "confidence": 0.9995117, + "speaker": "A" + }, + { + "text": "days", + "start": 130830, + "end": 130990, + "confidence": 1, + "speaker": "A" + }, + { + "text": "of", + "start": 130990, + "end": 131150, + "confidence": 0.99853516, + "speaker": "A" + }, + { + "text": "summer", + "start": 131150, + "end": 131390, + "confidence": 0.9995117, + "speaker": "A" + }, + { + "text": "and", + "start": 131390, + "end": 131510, + "confidence": 0.9663086, + "speaker": "A" + }, + { + "text": "they", + "start": 131510, + "end": 131630, + "confidence": 0.9296875, + "speaker": "A" + }, + { + "text": "have", + "start": 131630, + "end": 131750, + "confidence": 0.99853516, + "speaker": "A" + }, + { + "text": "to", + "start": 131750, + "end": 131830, + "confidence": 0.9980469, + "speaker": "A" + }, + { + "text": "keep", + "start": 131830, + "end": 131950, + "confidence": 0.9995117, + "speaker": "A" + }, + { + "text": "all", + "start": 131950, + "end": 132110, + "confidence": 0.9970703, + "speaker": "A" + }, + { + "text": "the", + "start": 132110, + "end": 132230, + "confidence": 0.9902344, + "speaker": "A" + }, + { + "text": "kids", + "start": 132230, + "end": 132470, + "confidence": 0.9995117, + "speaker": "A" + }, + { + "text": "inside.", + "start": 132470, + "end": 132950, + "confidence": 0.99975586, + "speaker": "A" + }, + { + "text": "So", + "start": 132950, + "end": 133350, + "confidence": 0.95214844, + "speaker": "A" + }, + { + "text": "who", + "start": 133350, + "end": 133670, + "confidence": 1, + "speaker": "A" + }, + { + "text": "tends", + "start": 133670, + "end": 133950, + "confidence": 0.99902344, + "speaker": "A" + }, + { + "text": "to", + "start": 133950, + "end": 134110, + "confidence": 0.9995117, + "speaker": "A" + }, + { + "text": "be", + "start": 134110, + "end": 134270, + "confidence": 0.99902344, + "speaker": "A" + }, + { + "text": "vulnerable", + "start": 134270, + "end": 134670, + "confidence": 1, + "speaker": "A" + }, + { + "text": "in", + "start": 134670, + "end": 134830, + "confidence": 0.9926758, + "speaker": "A" + }, + { + "text": "a", + "start": 134830, + "end": 134990, + "confidence": 0.99609375, + "speaker": "A" + }, + { + "text": "situation", + "start": 134990, + "end": 135430, + "confidence": 1, + "speaker": "A" + }, + { + "text": "like", + "start": 135510, + "end": 135750, + "confidence": 0.99853516, + "speaker": "A" + }, + { + "text": "this?", + "start": 135750, + "end": 135990, + "confidence": 0.99658203, + "speaker": "A" + } + ] + }, + { + "speaker": "B", + "text": "It's the youngest. So children, obviously, whose bodies are still developing, the elderly who are, you know, their bodies are more in decline and they're more susceptible to the health impacts of breathing, the poor air quality. And then people who have pre existing health conditions, people with respiratory conditions or heart conditions, can be triggered by high levels of air pollution.", + "confidence": 0.95734787, + "start": 137610, + "end": 156650, + "words": [ + { + "text": "It's", + "start": 137610, + "end": 137930, + "confidence": 0.9005534, + "speaker": "B" + }, + { + "text": "the", + "start": 137930, + "end": 138250, + "confidence": 0.5307617, + "speaker": "B" + }, + { + "text": "youngest.", + "start": 138250, + "end": 138810, + "confidence": 0.9851074, + "speaker": "B" + }, + { + "text": "So", + "start": 138810, + "end": 139090, + "confidence": 0.6489258, + "speaker": "B" + }, + { + "text": "children,", + "start": 139090, + "end": 139330, + "confidence": 1, + "speaker": "B" + }, + { + "text": "obviously,", + "start": 139330, + "end": 140010, + "confidence": 0.99886066, + "speaker": "B" + }, + { + "text": "whose", + "start": 140890, + "end": 141450, + "confidence": 0.79467773, + "speaker": "B" + }, + { + "text": "bodies", + "start": 141450, + "end": 141730, + "confidence": 0.99886066, + "speaker": "B" + }, + { + "text": "are", + "start": 141730, + "end": 141850, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "still", + "start": 141850, + "end": 141970, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "developing,", + "start": 141970, + "end": 142450, + "confidence": 1, + "speaker": "B" + }, + { + "text": "the", + "start": 142450, + "end": 142730, + "confidence": 0.99902344, + "speaker": "B" + }, + { + "text": "elderly", + "start": 142730, + "end": 143250, + "confidence": 1, + "speaker": "B" + }, + { + "text": "who", + "start": 143250, + "end": 143530, + "confidence": 0.89160156, + "speaker": "B" + }, + { + "text": "are,", + "start": 143530, + "end": 143810, + "confidence": 0.70458984, + "speaker": "B" + }, + { + "text": "you", + "start": 143810, + "end": 144010, + "confidence": 0.5307617, + "speaker": "B" + }, + { + "text": "know,", + "start": 144010, + "end": 144170, + "confidence": 0.9980469, + "speaker": "B" + }, + { + "text": "their", + "start": 144170, + "end": 144370, + "confidence": 0.99658203, + "speaker": "B" + }, + { + "text": "bodies", + "start": 144370, + "end": 144570, + "confidence": 0.9996745, + "speaker": "B" + }, + { + "text": "are", + "start": 144570, + "end": 144690, + "confidence": 0.9970703, + "speaker": "B" + }, + { + "text": "more", + "start": 144690, + "end": 144850, + "confidence": 0.99853516, + "speaker": "B" + }, + { + "text": "in", + "start": 144850, + "end": 144970, + "confidence": 0.96435547, + "speaker": "B" + }, + { + "text": "decline", + "start": 144970, + "end": 145250, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "and", + "start": 145250, + "end": 145410, + "confidence": 0.9975586, + "speaker": "B" + }, + { + "text": "they're", + "start": 145410, + "end": 145610, + "confidence": 0.9921875, + "speaker": "B" + }, + { + "text": "more", + "start": 145610, + "end": 145730, + "confidence": 0.99853516, + "speaker": "B" + }, + { + "text": "susceptible", + "start": 145730, + "end": 146250, + "confidence": 0.99960935, + "speaker": "B" + }, + { + "text": "to", + "start": 146250, + "end": 146450, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "the", + "start": 146450, + "end": 146570, + "confidence": 0.99902344, + "speaker": "B" + }, + { + "text": "health", + "start": 146570, + "end": 146770, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "impacts", + "start": 146770, + "end": 147250, + "confidence": 0.99902344, + "speaker": "B" + }, + { + "text": "of", + "start": 147250, + "end": 147530, + "confidence": 0.95751953, + "speaker": "B" + }, + { + "text": "breathing,", + "start": 147690, + "end": 148130, + "confidence": 0.95426434, + "speaker": "B" + }, + { + "text": "the", + "start": 148130, + "end": 148410, + "confidence": 0.7241211, + "speaker": "B" + }, + { + "text": "poor", + "start": 148490, + "end": 148810, + "confidence": 0.9980469, + "speaker": "B" + }, + { + "text": "air", + "start": 148810, + "end": 148970, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "quality.", + "start": 148970, + "end": 149450, + "confidence": 1, + "speaker": "B" + }, + { + "text": "And", + "start": 150570, + "end": 150850, + "confidence": 0.8666992, + "speaker": "B" + }, + { + "text": "then", + "start": 150850, + "end": 151050, + "confidence": 0.9975586, + "speaker": "B" + }, + { + "text": "people", + "start": 151050, + "end": 151290, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "who", + "start": 151290, + "end": 151490, + "confidence": 0.99902344, + "speaker": "B" + }, + { + "text": "have", + "start": 151490, + "end": 151610, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "pre", + "start": 151610, + "end": 151770, + "confidence": 0.99902344, + "speaker": "B" + }, + { + "text": "existing", + "start": 151770, + "end": 152169, + "confidence": 0.98828125, + "speaker": "B" + }, + { + "text": "health", + "start": 152169, + "end": 152369, + "confidence": 0.99902344, + "speaker": "B" + }, + { + "text": "conditions,", + "start": 152369, + "end": 152650, + "confidence": 0.9987793, + "speaker": "B" + }, + { + "text": "people", + "start": 152650, + "end": 152850, + "confidence": 0.9707031, + "speaker": "B" + }, + { + "text": "with", + "start": 152850, + "end": 153010, + "confidence": 0.9951172, + "speaker": "B" + }, + { + "text": "respiratory", + "start": 153010, + "end": 153410, + "confidence": 0.9978841, + "speaker": "B" + }, + { + "text": "conditions", + "start": 153410, + "end": 153770, + "confidence": 0.9992676, + "speaker": "B" + }, + { + "text": "or", + "start": 153770, + "end": 153970, + "confidence": 0.9946289, + "speaker": "B" + }, + { + "text": "heart", + "start": 153970, + "end": 154130, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "conditions,", + "start": 154130, + "end": 154490, + "confidence": 0.99975586, + "speaker": "B" + }, + { + "text": "can", + "start": 154490, + "end": 154690, + "confidence": 0.99902344, + "speaker": "B" + }, + { + "text": "be", + "start": 154690, + "end": 154850, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "triggered", + "start": 154850, + "end": 155210, + "confidence": 1, + "speaker": "B" + }, + { + "text": "by", + "start": 155210, + "end": 155370, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "high", + "start": 155370, + "end": 155610, + "confidence": 0.99902344, + "speaker": "B" + }, + { + "text": "levels", + "start": 155610, + "end": 155850, + "confidence": 0.99975586, + "speaker": "B" + }, + { + "text": "of", + "start": 155850, + "end": 155970, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "air", + "start": 155970, + "end": 156170, + "confidence": 1, + "speaker": "B" + }, + { + "text": "pollution.", + "start": 156170, + "end": 156650, + "confidence": 1, + "speaker": "B" + } + ] + }, + { + "speaker": "A", + "text": "Could this get worse?", + "confidence": 0.9994507, + "start": 157450, + "end": 158650, + "words": [ + { + "text": "Could", + "start": 157450, + "end": 157770, + "confidence": 0.99902344, + "speaker": "A" + }, + { + "text": "this", + "start": 157770, + "end": 158010, + "confidence": 0.9995117, + "speaker": "A" + }, + { + "text": "get", + "start": 158010, + "end": 158210, + "confidence": 0.9995117, + "speaker": "A" + }, + { + "text": "worse?", + "start": 158210, + "end": 158650, + "confidence": 0.99975586, + "speaker": "A" + } + ] + }, + { + "speaker": "B", + "text": "That's a good question. I mean, I think if in some areas it's much worse than others and it just depends on kind of where the smoke is concentrated. I think New York has some of the higher concentrations right now, but that's going to change as that air moves away from the New York area. But over the course of the next few days, we will see different areas being hit at different times with the highest concentrations.", + "confidence": 0.9877186, + "start": 162170, + "end": 183420, + "words": [ + { + "text": "That's", + "start": 162170, + "end": 162490, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "a", + "start": 162490, + "end": 162610, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "good", + "start": 162610, + "end": 162770, + "confidence": 1, + "speaker": "B" + }, + { + "text": "question.", + "start": 162770, + "end": 163050, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "I", + "start": 163130, + "end": 163410, + "confidence": 0.93896484, + "speaker": "B" + }, + { + "text": "mean,", + "start": 163410, + "end": 163570, + "confidence": 0.9970703, + "speaker": "B" + }, + { + "text": "I", + "start": 163570, + "end": 163690, + "confidence": 0.9941406, + "speaker": "B" + }, + { + "text": "think", + "start": 163690, + "end": 163850, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "if", + "start": 163850, + "end": 164170, + "confidence": 0.98779297, + "speaker": "B" + }, + { + "text": "in", + "start": 165260, + "end": 165380, + "confidence": 0.9824219, + "speaker": "B" + }, + { + "text": "some", + "start": 165380, + "end": 165540, + "confidence": 1, + "speaker": "B" + }, + { + "text": "areas", + "start": 165540, + "end": 165820, + "confidence": 0.99902344, + "speaker": "B" + }, + { + "text": "it's", + "start": 165900, + "end": 166220, + "confidence": 0.99820966, + "speaker": "B" + }, + { + "text": "much", + "start": 166220, + "end": 166340, + "confidence": 0.99902344, + "speaker": "B" + }, + { + "text": "worse", + "start": 166340, + "end": 166540, + "confidence": 1, + "speaker": "B" + }, + { + "text": "than", + "start": 166540, + "end": 166660, + "confidence": 0.9980469, + "speaker": "B" + }, + { + "text": "others", + "start": 166660, + "end": 166860, + "confidence": 1, + "speaker": "B" + }, + { + "text": "and", + "start": 166860, + "end": 167180, + "confidence": 0.97314453, + "speaker": "B" + }, + { + "text": "it", + "start": 167180, + "end": 167460, + "confidence": 0.99121094, + "speaker": "B" + }, + { + "text": "just", + "start": 167460, + "end": 167620, + "confidence": 0.99853516, + "speaker": "B" + }, + { + "text": "depends", + "start": 167620, + "end": 167980, + "confidence": 0.90201825, + "speaker": "B" + }, + { + "text": "on", + "start": 167980, + "end": 168180, + "confidence": 0.9951172, + "speaker": "B" + }, + { + "text": "kind", + "start": 168180, + "end": 168340, + "confidence": 0.79785156, + "speaker": "B" + }, + { + "text": "of", + "start": 168340, + "end": 168500, + "confidence": 0.99853516, + "speaker": "B" + }, + { + "text": "where", + "start": 168500, + "end": 168700, + "confidence": 1, + "speaker": "B" + }, + { + "text": "the", + "start": 168700, + "end": 168860, + "confidence": 0.9980469, + "speaker": "B" + }, + { + "text": "smoke", + "start": 168860, + "end": 169140, + "confidence": 0.9503581, + "speaker": "B" + }, + { + "text": "is", + "start": 169140, + "end": 169340, + "confidence": 0.99902344, + "speaker": "B" + }, + { + "text": "concentrated.", + "start": 169340, + "end": 170140, + "confidence": 0.99990237, + "speaker": "B" + }, + { + "text": "I", + "start": 171020, + "end": 171300, + "confidence": 0.9970703, + "speaker": "B" + }, + { + "text": "think", + "start": 171300, + "end": 171460, + "confidence": 1, + "speaker": "B" + }, + { + "text": "New", + "start": 171460, + "end": 171620, + "confidence": 1, + "speaker": "B" + }, + { + "text": "York", + "start": 171620, + "end": 171900, + "confidence": 1, + "speaker": "B" + }, + { + "text": "has", + "start": 171980, + "end": 172260, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "some", + "start": 172260, + "end": 172420, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "of", + "start": 172420, + "end": 172540, + "confidence": 0.9980469, + "speaker": "B" + }, + { + "text": "the", + "start": 172540, + "end": 172660, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "higher", + "start": 172660, + "end": 172860, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "concentrations", + "start": 172860, + "end": 173540, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "right", + "start": 173540, + "end": 173700, + "confidence": 0.99853516, + "speaker": "B" + }, + { + "text": "now,", + "start": 173700, + "end": 173860, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "but", + "start": 173860, + "end": 174020, + "confidence": 0.9970703, + "speaker": "B" + }, + { + "text": "that's", + "start": 174020, + "end": 174220, + "confidence": 0.9983724, + "speaker": "B" + }, + { + "text": "going", + "start": 174220, + "end": 174340, + "confidence": 0.7973633, + "speaker": "B" + }, + { + "text": "to", + "start": 174340, + "end": 174460, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "change", + "start": 174460, + "end": 174620, + "confidence": 1, + "speaker": "B" + }, + { + "text": "as", + "start": 174620, + "end": 174820, + "confidence": 0.99121094, + "speaker": "B" + }, + { + "text": "that", + "start": 174820, + "end": 174980, + "confidence": 0.99609375, + "speaker": "B" + }, + { + "text": "air", + "start": 174980, + "end": 175180, + "confidence": 0.9970703, + "speaker": "B" + }, + { + "text": "moves", + "start": 175180, + "end": 175500, + "confidence": 1, + "speaker": "B" + }, + { + "text": "away", + "start": 175500, + "end": 175660, + "confidence": 1, + "speaker": "B" + }, + { + "text": "from", + "start": 175660, + "end": 175860, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "the", + "start": 175860, + "end": 175980, + "confidence": 0.99902344, + "speaker": "B" + }, + { + "text": "New", + "start": 175980, + "end": 176100, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "York", + "start": 176100, + "end": 176300, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "area.", + "start": 176300, + "end": 176620, + "confidence": 1, + "speaker": "B" + }, + { + "text": "But", + "start": 177100, + "end": 177380, + "confidence": 0.9819336, + "speaker": "B" + }, + { + "text": "over", + "start": 177380, + "end": 177540, + "confidence": 1, + "speaker": "B" + }, + { + "text": "the", + "start": 177540, + "end": 177660, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "course", + "start": 177660, + "end": 177780, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "of", + "start": 177780, + "end": 177900, + "confidence": 0.82958984, + "speaker": "B" + }, + { + "text": "the", + "start": 177900, + "end": 177980, + "confidence": 0.9667969, + "speaker": "B" + }, + { + "text": "next", + "start": 177980, + "end": 178100, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "few", + "start": 178100, + "end": 178300, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "days,", + "start": 178300, + "end": 178500, + "confidence": 1, + "speaker": "B" + }, + { + "text": "we", + "start": 178500, + "end": 178660, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "will", + "start": 178660, + "end": 178860, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "see", + "start": 178860, + "end": 179180, + "confidence": 1, + "speaker": "B" + }, + { + "text": "different", + "start": 179580, + "end": 179940, + "confidence": 1, + "speaker": "B" + }, + { + "text": "areas", + "start": 179940, + "end": 180220, + "confidence": 1, + "speaker": "B" + }, + { + "text": "being", + "start": 180220, + "end": 180539, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "hit", + "start": 180539, + "end": 180940, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "at", + "start": 180940, + "end": 181220, + "confidence": 0.99902344, + "speaker": "B" + }, + { + "text": "different", + "start": 181220, + "end": 181460, + "confidence": 1, + "speaker": "B" + }, + { + "text": "times", + "start": 181460, + "end": 181820, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "with", + "start": 181980, + "end": 182260, + "confidence": 0.99853516, + "speaker": "B" + }, + { + "text": "the", + "start": 182260, + "end": 182380, + "confidence": 0.99902344, + "speaker": "B" + }, + { + "text": "highest", + "start": 182380, + "end": 182660, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "concentrations.", + "start": 182660, + "end": 183420, + "confidence": 0.998291, + "speaker": "B" + } + ] + }, + { + "speaker": "A", + "text": "I was going to ask you about.", + "confidence": 0.9385463, + "start": 183740, + "end": 184660, + "words": [ + { + "text": "I", + "start": 183740, + "end": 183980, + "confidence": 0.9140625, + "speaker": "A" + }, + { + "text": "was", + "start": 183980, + "end": 184100, + "confidence": 0.9980469, + "speaker": "A" + }, + { + "text": "going", + "start": 184100, + "end": 184220, + "confidence": 0.96484375, + "speaker": "A" + }, + { + "text": "to", + "start": 184220, + "end": 184300, + "confidence": 0.9897461, + "speaker": "A" + }, + { + "text": "ask", + "start": 184300, + "end": 184380, + "confidence": 0.9975586, + "speaker": "A" + }, + { + "text": "you", + "start": 184380, + "end": 184460, + "confidence": 0.86083984, + "speaker": "A" + }, + { + "text": "about.", + "start": 184460, + "end": 184660, + "confidence": 0.84472656, + "speaker": "A" + } + ] + }, + { + "speaker": "B", + "text": "More fires start burning. I don't expect the concentrations to go up too much higher.", + "confidence": 0.9550103, + "start": 184660, + "end": 189020, + "words": [ + { + "text": "More", + "start": 184660, + "end": 184900, + "confidence": 0.57958984, + "speaker": "B" + }, + { + "text": "fires", + "start": 184900, + "end": 185220, + "confidence": 0.8249512, + "speaker": "B" + }, + { + "text": "start", + "start": 185220, + "end": 185380, + "confidence": 0.94628906, + "speaker": "B" + }, + { + "text": "burning.", + "start": 185380, + "end": 185660, + "confidence": 0.99902344, + "speaker": "B" + }, + { + "text": "I", + "start": 185660, + "end": 185860, + "confidence": 0.9970703, + "speaker": "B" + }, + { + "text": "don't", + "start": 185860, + "end": 186060, + "confidence": 0.9998372, + "speaker": "B" + }, + { + "text": "expect", + "start": 186060, + "end": 186300, + "confidence": 0.99902344, + "speaker": "B" + }, + { + "text": "the", + "start": 186940, + "end": 187220, + "confidence": 0.9980469, + "speaker": "B" + }, + { + "text": "concentrations", + "start": 187220, + "end": 187780, + "confidence": 0.99890137, + "speaker": "B" + }, + { + "text": "to", + "start": 187780, + "end": 187900, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "go", + "start": 187900, + "end": 188020, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "up", + "start": 188020, + "end": 188300, + "confidence": 0.99902344, + "speaker": "B" + }, + { + "text": "too", + "start": 188300, + "end": 188580, + "confidence": 0.98583984, + "speaker": "B" + }, + { + "text": "much", + "start": 188580, + "end": 188740, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "higher.", + "start": 188740, + "end": 189020, + "confidence": 0.99902344, + "speaker": "B" + } + ] + }, + { + "speaker": "A", + "text": "I was going to ask you how and you started to answer this, but how much longer could this last? Forgive me if I'm asking you to speculate, but what do you think?", + "confidence": 0.97967714, + "start": 189100, + "end": 196220, + "words": [ + { + "text": "I", + "start": 189100, + "end": 189340, + "confidence": 0.99609375, + "speaker": "A" + }, + { + "text": "was", + "start": 189340, + "end": 189420, + "confidence": 0.9995117, + "speaker": "A" + }, + { + "text": "going", + "start": 189420, + "end": 189540, + "confidence": 0.97998047, + "speaker": "A" + }, + { + "text": "to", + "start": 189540, + "end": 189660, + "confidence": 0.9975586, + "speaker": "A" + }, + { + "text": "ask", + "start": 189660, + "end": 189780, + "confidence": 0.9995117, + "speaker": "A" + }, + { + "text": "you", + "start": 189780, + "end": 189940, + "confidence": 0.9819336, + "speaker": "A" + }, + { + "text": "how", + "start": 189940, + "end": 190100, + "confidence": 0.7294922, + "speaker": "A" + }, + { + "text": "and", + "start": 190100, + "end": 190260, + "confidence": 0.94677734, + "speaker": "A" + }, + { + "text": "you", + "start": 190260, + "end": 190420, + "confidence": 0.9975586, + "speaker": "A" + }, + { + "text": "started", + "start": 190420, + "end": 190620, + "confidence": 0.99560547, + "speaker": "A" + }, + { + "text": "to", + "start": 190620, + "end": 190780, + "confidence": 0.9404297, + "speaker": "A" + }, + { + "text": "answer", + "start": 190780, + "end": 190980, + "confidence": 0.96809894, + "speaker": "A" + }, + { + "text": "this,", + "start": 190980, + "end": 191140, + "confidence": 0.99560547, + "speaker": "A" + }, + { + "text": "but", + "start": 191140, + "end": 191420, + "confidence": 0.9013672, + "speaker": "A" + }, + { + "text": "how", + "start": 191420, + "end": 191700, + "confidence": 1, + "speaker": "A" + }, + { + "text": "much", + "start": 191700, + "end": 191940, + "confidence": 0.9995117, + "speaker": "A" + }, + { + "text": "longer", + "start": 191940, + "end": 192420, + "confidence": 0.9992676, + "speaker": "A" + }, + { + "text": "could", + "start": 192420, + "end": 192700, + "confidence": 0.9995117, + "speaker": "A" + }, + { + "text": "this", + "start": 192700, + "end": 192940, + "confidence": 0.9995117, + "speaker": "A" + }, + { + "text": "last?", + "start": 192940, + "end": 193260, + "confidence": 0.9995117, + "speaker": "A" + }, + { + "text": "Forgive", + "start": 193420, + "end": 193820, + "confidence": 0.99934894, + "speaker": "A" + }, + { + "text": "me", + "start": 193820, + "end": 193900, + "confidence": 0.9980469, + "speaker": "A" + }, + { + "text": "if", + "start": 193900, + "end": 193980, + "confidence": 0.98095703, + "speaker": "A" + }, + { + "text": "I'm", + "start": 193980, + "end": 194140, + "confidence": 0.9920247, + "speaker": "A" + }, + { + "text": "asking", + "start": 194140, + "end": 194300, + "confidence": 1, + "speaker": "A" + }, + { + "text": "you", + "start": 194300, + "end": 194380, + "confidence": 0.99902344, + "speaker": "A" + }, + { + "text": "to", + "start": 194380, + "end": 194500, + "confidence": 0.9980469, + "speaker": "A" + }, + { + "text": "speculate,", + "start": 194500, + "end": 194900, + "confidence": 1, + "speaker": "A" + }, + { + "text": "but", + "start": 194900, + "end": 195180, + "confidence": 0.953125, + "speaker": "A" + }, + { + "text": "what", + "start": 195340, + "end": 195620, + "confidence": 0.9926758, + "speaker": "A" + }, + { + "text": "do", + "start": 195620, + "end": 195780, + "confidence": 0.99658203, + "speaker": "A" + }, + { + "text": "you", + "start": 195780, + "end": 195940, + "confidence": 0.9946289, + "speaker": "A" + }, + { + "text": "think?", + "start": 195940, + "end": 196220, + "confidence": 0.9980469, + "speaker": "A" + } + ] + }, + { + "speaker": "B", + "text": "Well, I think the fires are going to burn for a little bit longer. But the key for us in the US Is the weather system changing. Right now it's the weather systems that are pulling that air into our Mid Atlantic and Northeast region. As those weather systems change and shift, we'll see that smoke going elsewhere and not impact us in this region as much. I think that's going to be the defining factor. I think the next couple days we're going to see a shift in that weather pattern and start to push the smoke away from where we are.", + "confidence": 0.9817744, + "start": 198280, + "end": 227480, + "words": [ + { + "text": "Well,", + "start": 198280, + "end": 198400, + "confidence": 0.9091797, + "speaker": "B" + }, + { + "text": "I", + "start": 198400, + "end": 198520, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "think", + "start": 198520, + "end": 198640, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "the", + "start": 198640, + "end": 198760, + "confidence": 0.99853516, + "speaker": "B" + }, + { + "text": "fires", + "start": 198760, + "end": 199080, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "are", + "start": 199080, + "end": 199160, + "confidence": 0.99902344, + "speaker": "B" + }, + { + "text": "going", + "start": 199160, + "end": 199280, + "confidence": 0.67089844, + "speaker": "B" + }, + { + "text": "to", + "start": 199280, + "end": 199400, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "burn", + "start": 199400, + "end": 199560, + "confidence": 0.9992676, + "speaker": "B" + }, + { + "text": "for", + "start": 199560, + "end": 199680, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "a", + "start": 199680, + "end": 199800, + "confidence": 0.99902344, + "speaker": "B" + }, + { + "text": "little", + "start": 199800, + "end": 199920, + "confidence": 0.99902344, + "speaker": "B" + }, + { + "text": "bit", + "start": 199920, + "end": 200080, + "confidence": 0.99658203, + "speaker": "B" + }, + { + "text": "longer.", + "start": 200080, + "end": 200440, + "confidence": 1, + "speaker": "B" + }, + { + "text": "But", + "start": 200440, + "end": 200640, + "confidence": 0.98876953, + "speaker": "B" + }, + { + "text": "the", + "start": 200640, + "end": 200840, + "confidence": 0.9975586, + "speaker": "B" + }, + { + "text": "key", + "start": 200840, + "end": 201120, + "confidence": 1, + "speaker": "B" + }, + { + "text": "for", + "start": 201120, + "end": 201400, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "us", + "start": 201400, + "end": 201640, + "confidence": 1, + "speaker": "B" + }, + { + "text": "in", + "start": 201640, + "end": 201800, + "confidence": 0.9980469, + "speaker": "B" + }, + { + "text": "the", + "start": 201800, + "end": 201920, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "US", + "start": 201920, + "end": 202200, + "confidence": 0.98876953, + "speaker": "B" + }, + { + "text": "Is", + "start": 202200, + "end": 202480, + "confidence": 0.99902344, + "speaker": "B" + }, + { + "text": "the", + "start": 202480, + "end": 202680, + "confidence": 0.9975586, + "speaker": "B" + }, + { + "text": "weather", + "start": 202680, + "end": 203000, + "confidence": 1, + "speaker": "B" + }, + { + "text": "system", + "start": 203000, + "end": 203280, + "confidence": 0.99902344, + "speaker": "B" + }, + { + "text": "changing.", + "start": 203280, + "end": 203800, + "confidence": 0.98828125, + "speaker": "B" + }, + { + "text": "Right", + "start": 203960, + "end": 204280, + "confidence": 0.9819336, + "speaker": "B" + }, + { + "text": "now", + "start": 204280, + "end": 204600, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "it's", + "start": 204680, + "end": 205080, + "confidence": 0.98258466, + "speaker": "B" + }, + { + "text": "the", + "start": 205080, + "end": 205280, + "confidence": 0.9980469, + "speaker": "B" + }, + { + "text": "weather", + "start": 205280, + "end": 205520, + "confidence": 0.99975586, + "speaker": "B" + }, + { + "text": "systems", + "start": 205520, + "end": 205840, + "confidence": 0.9987793, + "speaker": "B" + }, + { + "text": "that", + "start": 205840, + "end": 205960, + "confidence": 0.9941406, + "speaker": "B" + }, + { + "text": "are", + "start": 205960, + "end": 206080, + "confidence": 0.9980469, + "speaker": "B" + }, + { + "text": "pulling", + "start": 206080, + "end": 206320, + "confidence": 0.9996745, + "speaker": "B" + }, + { + "text": "that", + "start": 206320, + "end": 206480, + "confidence": 0.9975586, + "speaker": "B" + }, + { + "text": "air", + "start": 206480, + "end": 206760, + "confidence": 0.99853516, + "speaker": "B" + }, + { + "text": "into", + "start": 207320, + "end": 207640, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "our", + "start": 207640, + "end": 207960, + "confidence": 0.99609375, + "speaker": "B" + }, + { + "text": "Mid", + "start": 209080, + "end": 209400, + "confidence": 1, + "speaker": "B" + }, + { + "text": "Atlantic", + "start": 209400, + "end": 209920, + "confidence": 0.88134766, + "speaker": "B" + }, + { + "text": "and", + "start": 209920, + "end": 210160, + "confidence": 0.87353516, + "speaker": "B" + }, + { + "text": "Northeast", + "start": 210160, + "end": 210720, + "confidence": 0.99886066, + "speaker": "B" + }, + { + "text": "region.", + "start": 210720, + "end": 211000, + "confidence": 1, + "speaker": "B" + }, + { + "text": "As", + "start": 211080, + "end": 211360, + "confidence": 0.9975586, + "speaker": "B" + }, + { + "text": "those", + "start": 211360, + "end": 211560, + "confidence": 0.9609375, + "speaker": "B" + }, + { + "text": "weather", + "start": 211560, + "end": 211960, + "confidence": 0.99194336, + "speaker": "B" + }, + { + "text": "systems", + "start": 212920, + "end": 213480, + "confidence": 0.99780273, + "speaker": "B" + }, + { + "text": "change", + "start": 213480, + "end": 213720, + "confidence": 1, + "speaker": "B" + }, + { + "text": "and", + "start": 213720, + "end": 213960, + "confidence": 0.99560547, + "speaker": "B" + }, + { + "text": "shift,", + "start": 213960, + "end": 214360, + "confidence": 0.99975586, + "speaker": "B" + }, + { + "text": "we'll", + "start": 214520, + "end": 214840, + "confidence": 0.9785156, + "speaker": "B" + }, + { + "text": "see", + "start": 214840, + "end": 214960, + "confidence": 0.99902344, + "speaker": "B" + }, + { + "text": "that", + "start": 214960, + "end": 215120, + "confidence": 0.9970703, + "speaker": "B" + }, + { + "text": "smoke", + "start": 215120, + "end": 215400, + "confidence": 0.9900716, + "speaker": "B" + }, + { + "text": "going", + "start": 215400, + "end": 215640, + "confidence": 0.99853516, + "speaker": "B" + }, + { + "text": "elsewhere", + "start": 215640, + "end": 216120, + "confidence": 0.977417, + "speaker": "B" + }, + { + "text": "and", + "start": 216600, + "end": 216880, + "confidence": 0.9946289, + "speaker": "B" + }, + { + "text": "not", + "start": 216880, + "end": 217080, + "confidence": 0.9980469, + "speaker": "B" + }, + { + "text": "impact", + "start": 217080, + "end": 217400, + "confidence": 1, + "speaker": "B" + }, + { + "text": "us", + "start": 217400, + "end": 217800, + "confidence": 0.99902344, + "speaker": "B" + }, + { + "text": "in", + "start": 217880, + "end": 218160, + "confidence": 0.99853516, + "speaker": "B" + }, + { + "text": "this", + "start": 218160, + "end": 218360, + "confidence": 0.99902344, + "speaker": "B" + }, + { + "text": "region", + "start": 218360, + "end": 218640, + "confidence": 1, + "speaker": "B" + }, + { + "text": "as", + "start": 218640, + "end": 218880, + "confidence": 0.99902344, + "speaker": "B" + }, + { + "text": "much.", + "start": 218880, + "end": 219160, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "I", + "start": 219320, + "end": 219560, + "confidence": 0.9736328, + "speaker": "B" + }, + { + "text": "think", + "start": 219560, + "end": 219680, + "confidence": 0.9975586, + "speaker": "B" + }, + { + "text": "that's", + "start": 219680, + "end": 219960, + "confidence": 0.9938151, + "speaker": "B" + }, + { + "text": "going", + "start": 219960, + "end": 220040, + "confidence": 0.9824219, + "speaker": "B" + }, + { + "text": "to", + "start": 220040, + "end": 220120, + "confidence": 0.99609375, + "speaker": "B" + }, + { + "text": "be", + "start": 220120, + "end": 220240, + "confidence": 0.99853516, + "speaker": "B" + }, + { + "text": "the", + "start": 220240, + "end": 220400, + "confidence": 0.9946289, + "speaker": "B" + }, + { + "text": "defining", + "start": 220400, + "end": 220760, + "confidence": 1, + "speaker": "B" + }, + { + "text": "factor.", + "start": 220760, + "end": 221080, + "confidence": 0.99975586, + "speaker": "B" + }, + { + "text": "I", + "start": 221080, + "end": 221240, + "confidence": 0.97314453, + "speaker": "B" + }, + { + "text": "think", + "start": 221240, + "end": 221360, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "the", + "start": 221360, + "end": 221480, + "confidence": 0.9902344, + "speaker": "B" + }, + { + "text": "next", + "start": 221480, + "end": 221600, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "couple", + "start": 221600, + "end": 221840, + "confidence": 0.9992676, + "speaker": "B" + }, + { + "text": "days", + "start": 221840, + "end": 222000, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "we're", + "start": 222000, + "end": 222200, + "confidence": 0.98844403, + "speaker": "B" + }, + { + "text": "going", + "start": 222200, + "end": 222320, + "confidence": 0.67578125, + "speaker": "B" + }, + { + "text": "to", + "start": 222320, + "end": 222600, + "confidence": 0.9819336, + "speaker": "B" + }, + { + "text": "see", + "start": 222600, + "end": 222880, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "a", + "start": 222880, + "end": 223040, + "confidence": 0.99902344, + "speaker": "B" + }, + { + "text": "shift", + "start": 223040, + "end": 223400, + "confidence": 1, + "speaker": "B" + }, + { + "text": "in", + "start": 224120, + "end": 224400, + "confidence": 0.99560547, + "speaker": "B" + }, + { + "text": "that", + "start": 224400, + "end": 224560, + "confidence": 0.99853516, + "speaker": "B" + }, + { + "text": "weather", + "start": 224560, + "end": 224800, + "confidence": 0.99853516, + "speaker": "B" + }, + { + "text": "pattern", + "start": 224800, + "end": 225120, + "confidence": 1, + "speaker": "B" + }, + { + "text": "and", + "start": 225120, + "end": 225360, + "confidence": 0.99609375, + "speaker": "B" + }, + { + "text": "start", + "start": 225360, + "end": 225520, + "confidence": 0.9980469, + "speaker": "B" + }, + { + "text": "to", + "start": 225520, + "end": 225640, + "confidence": 0.99902344, + "speaker": "B" + }, + { + "text": "push", + "start": 225640, + "end": 225800, + "confidence": 1, + "speaker": "B" + }, + { + "text": "the", + "start": 225800, + "end": 225920, + "confidence": 0.9970703, + "speaker": "B" + }, + { + "text": "smoke", + "start": 225920, + "end": 226160, + "confidence": 0.8540039, + "speaker": "B" + }, + { + "text": "away", + "start": 226160, + "end": 226400, + "confidence": 1, + "speaker": "B" + }, + { + "text": "from", + "start": 226400, + "end": 226760, + "confidence": 0.6513672, + "speaker": "B" + }, + { + "text": "where", + "start": 226760, + "end": 227040, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "we", + "start": 227040, + "end": 227200, + "confidence": 0.99902344, + "speaker": "B" + }, + { + "text": "are.", + "start": 227200, + "end": 227480, + "confidence": 0.99853516, + "speaker": "B" + } + ] + }, + { + "speaker": "A", + "text": "And finally, with the impacts of climate change, we are seeing more wildfires. Will we be seeing more of these kinds of wide ranging air quality consequences or circumstances?", + "confidence": 0.9881684, + "start": 227930, + "end": 239850, + "words": [ + { + "text": "And", + "start": 227930, + "end": 228050, + "confidence": 0.9433594, + "speaker": "A" + }, + { + "text": "finally,", + "start": 228050, + "end": 228410, + "confidence": 0.9992676, + "speaker": "A" + }, + { + "text": "with", + "start": 228410, + "end": 228650, + "confidence": 0.99853516, + "speaker": "A" + }, + { + "text": "the", + "start": 228650, + "end": 228930, + "confidence": 0.99902344, + "speaker": "A" + }, + { + "text": "impacts", + "start": 228930, + "end": 229370, + "confidence": 0.9921875, + "speaker": "A" + }, + { + "text": "of", + "start": 229370, + "end": 229530, + "confidence": 0.99853516, + "speaker": "A" + }, + { + "text": "climate", + "start": 229530, + "end": 229890, + "confidence": 0.99975586, + "speaker": "A" + }, + { + "text": "change,", + "start": 229890, + "end": 230210, + "confidence": 0.9995117, + "speaker": "A" + }, + { + "text": "we", + "start": 230210, + "end": 230450, + "confidence": 0.9980469, + "speaker": "A" + }, + { + "text": "are", + "start": 230450, + "end": 230650, + "confidence": 0.9980469, + "speaker": "A" + }, + { + "text": "seeing", + "start": 230650, + "end": 230970, + "confidence": 1, + "speaker": "A" + }, + { + "text": "more", + "start": 230970, + "end": 231290, + "confidence": 0.9995117, + "speaker": "A" + }, + { + "text": "wildfires.", + "start": 231290, + "end": 232250, + "confidence": 0.9993164, + "speaker": "A" + }, + { + "text": "Will", + "start": 232410, + "end": 232730, + "confidence": 0.9995117, + "speaker": "A" + }, + { + "text": "we", + "start": 232730, + "end": 232970, + "confidence": 0.99658203, + "speaker": "A" + }, + { + "text": "be", + "start": 232970, + "end": 233210, + "confidence": 0.99902344, + "speaker": "A" + }, + { + "text": "seeing", + "start": 233210, + "end": 233610, + "confidence": 0.99975586, + "speaker": "A" + }, + { + "text": "more", + "start": 233690, + "end": 234050, + "confidence": 1, + "speaker": "A" + }, + { + "text": "of", + "start": 234050, + "end": 234290, + "confidence": 0.9995117, + "speaker": "A" + }, + { + "text": "these", + "start": 234290, + "end": 234530, + "confidence": 0.99902344, + "speaker": "A" + }, + { + "text": "kinds", + "start": 234530, + "end": 234890, + "confidence": 0.9914551, + "speaker": "A" + }, + { + "text": "of", + "start": 234890, + "end": 235130, + "confidence": 0.9995117, + "speaker": "A" + }, + { + "text": "wide", + "start": 235450, + "end": 235850, + "confidence": 0.99902344, + "speaker": "A" + }, + { + "text": "ranging", + "start": 235850, + "end": 236410, + "confidence": 0.9998372, + "speaker": "A" + }, + { + "text": "air", + "start": 237290, + "end": 237610, + "confidence": 0.9995117, + "speaker": "A" + }, + { + "text": "quality", + "start": 237610, + "end": 238050, + "confidence": 1, + "speaker": "A" + }, + { + "text": "consequences", + "start": 238050, + "end": 238690, + "confidence": 0.9385742, + "speaker": "A" + }, + { + "text": "or", + "start": 238690, + "end": 239050, + "confidence": 0.87841797, + "speaker": "A" + }, + { + "text": "circumstances?", + "start": 239130, + "end": 239850, + "confidence": 0.93204755, + "speaker": "A" + } + ] + }, + { + "speaker": "B", + "text": "I mean, that is one of the predictions for climate change. Looking into the future, the fire season is starting earlier and lasting longer and we're seeing more frequent fires. So yeah, this is probably something that we'll be seeing more, more frequently. This tends to be much more of an issue in the western U.S. so the eastern U.S. getting hit right now is a little bit new. But yeah, I think with climate change moving forward, this is something that is going to happen more frequently.", + "confidence": 0.9763954, + "start": 241370, + "end": 267570, + "words": [ + { + "text": "I", + "start": 241370, + "end": 241650, + "confidence": 0.9238281, + "speaker": "B" + }, + { + "text": "mean,", + "start": 241650, + "end": 241810, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "that", + "start": 241810, + "end": 241930, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "is", + "start": 241930, + "end": 242090, + "confidence": 0.9970703, + "speaker": "B" + }, + { + "text": "one", + "start": 242090, + "end": 242250, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "of", + "start": 242250, + "end": 242330, + "confidence": 0.99902344, + "speaker": "B" + }, + { + "text": "the", + "start": 242330, + "end": 242450, + "confidence": 0.99902344, + "speaker": "B" + }, + { + "text": "predictions", + "start": 242450, + "end": 243050, + "confidence": 0.8977051, + "speaker": "B" + }, + { + "text": "for", + "start": 243050, + "end": 243450, + "confidence": 0.73095703, + "speaker": "B" + }, + { + "text": "climate", + "start": 244490, + "end": 244890, + "confidence": 1, + "speaker": "B" + }, + { + "text": "change.", + "start": 244890, + "end": 245130, + "confidence": 1, + "speaker": "B" + }, + { + "text": "Looking", + "start": 245130, + "end": 245370, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "into", + "start": 245370, + "end": 245570, + "confidence": 0.9980469, + "speaker": "B" + }, + { + "text": "the", + "start": 245570, + "end": 245730, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "future,", + "start": 245730, + "end": 246010, + "confidence": 0.99902344, + "speaker": "B" + }, + { + "text": "the", + "start": 246410, + "end": 246730, + "confidence": 0.99902344, + "speaker": "B" + }, + { + "text": "fire", + "start": 246730, + "end": 247010, + "confidence": 1, + "speaker": "B" + }, + { + "text": "season", + "start": 247010, + "end": 247290, + "confidence": 1, + "speaker": "B" + }, + { + "text": "is", + "start": 247290, + "end": 247490, + "confidence": 0.9970703, + "speaker": "B" + }, + { + "text": "starting", + "start": 247490, + "end": 247730, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "earlier", + "start": 247730, + "end": 247970, + "confidence": 0.9975586, + "speaker": "B" + }, + { + "text": "and", + "start": 247970, + "end": 248210, + "confidence": 0.9980469, + "speaker": "B" + }, + { + "text": "lasting", + "start": 248210, + "end": 248570, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "longer", + "start": 248570, + "end": 249050, + "confidence": 1, + "speaker": "B" + }, + { + "text": "and", + "start": 249610, + "end": 249890, + "confidence": 0.9736328, + "speaker": "B" + }, + { + "text": "we're", + "start": 249890, + "end": 250090, + "confidence": 0.93815106, + "speaker": "B" + }, + { + "text": "seeing", + "start": 250090, + "end": 250290, + "confidence": 0.99975586, + "speaker": "B" + }, + { + "text": "more", + "start": 250290, + "end": 250450, + "confidence": 1, + "speaker": "B" + }, + { + "text": "frequent", + "start": 250450, + "end": 250810, + "confidence": 0.99975586, + "speaker": "B" + }, + { + "text": "fires.", + "start": 250810, + "end": 251290, + "confidence": 0.98950195, + "speaker": "B" + }, + { + "text": "So", + "start": 251290, + "end": 251610, + "confidence": 0.94628906, + "speaker": "B" + }, + { + "text": "yeah,", + "start": 252010, + "end": 252370, + "confidence": 0.9715169, + "speaker": "B" + }, + { + "text": "this", + "start": 252370, + "end": 252530, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "is", + "start": 252530, + "end": 252690, + "confidence": 0.9975586, + "speaker": "B" + }, + { + "text": "probably", + "start": 252690, + "end": 252970, + "confidence": 0.9973958, + "speaker": "B" + }, + { + "text": "something", + "start": 252970, + "end": 253290, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "that", + "start": 253290, + "end": 253690, + "confidence": 0.9863281, + "speaker": "B" + }, + { + "text": "we'll", + "start": 253770, + "end": 254090, + "confidence": 0.9835612, + "speaker": "B" + }, + { + "text": "be", + "start": 254090, + "end": 254210, + "confidence": 0.99853516, + "speaker": "B" + }, + { + "text": "seeing", + "start": 254210, + "end": 254530, + "confidence": 0.9992676, + "speaker": "B" + }, + { + "text": "more,", + "start": 254530, + "end": 254780, + "confidence": 0.5083008, + "speaker": "B" + }, + { + "text": "more", + "start": 254930, + "end": 255050, + "confidence": 0.8666992, + "speaker": "B" + }, + { + "text": "frequently.", + "start": 255050, + "end": 255570, + "confidence": 1, + "speaker": "B" + }, + { + "text": "This", + "start": 255650, + "end": 255930, + "confidence": 0.99902344, + "speaker": "B" + }, + { + "text": "tends", + "start": 255930, + "end": 256170, + "confidence": 0.99853516, + "speaker": "B" + }, + { + "text": "to", + "start": 256170, + "end": 256290, + "confidence": 1, + "speaker": "B" + }, + { + "text": "be", + "start": 256290, + "end": 256410, + "confidence": 0.99902344, + "speaker": "B" + }, + { + "text": "much", + "start": 256410, + "end": 256570, + "confidence": 0.9916992, + "speaker": "B" + }, + { + "text": "more", + "start": 256570, + "end": 256690, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "of", + "start": 256690, + "end": 256770, + "confidence": 0.9970703, + "speaker": "B" + }, + { + "text": "an", + "start": 256770, + "end": 256890, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "issue", + "start": 256890, + "end": 257090, + "confidence": 1, + "speaker": "B" + }, + { + "text": "in", + "start": 257090, + "end": 257250, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "the", + "start": 257250, + "end": 257330, + "confidence": 0.99902344, + "speaker": "B" + }, + { + "text": "western", + "start": 257330, + "end": 257610, + "confidence": 1, + "speaker": "B" + }, + { + "text": "U.S.", + "start": 257610, + "end": 257890, + "confidence": 0.99023, + "speaker": "B" + }, + { + "text": "so", + "start": 258130, + "end": 258410, + "confidence": 0.75439453, + "speaker": "B" + }, + { + "text": "the", + "start": 258410, + "end": 258530, + "confidence": 0.9975586, + "speaker": "B" + }, + { + "text": "eastern", + "start": 258530, + "end": 258770, + "confidence": 0.9916992, + "speaker": "B" + }, + { + "text": "U.S.", + "start": 258770, + "end": 259050, + "confidence": 0.99121, + "speaker": "B" + }, + { + "text": "getting", + "start": 259050, + "end": 259290, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "hit", + "start": 259290, + "end": 259490, + "confidence": 0.99658203, + "speaker": "B" + }, + { + "text": "right", + "start": 259490, + "end": 259690, + "confidence": 0.9980469, + "speaker": "B" + }, + { + "text": "now", + "start": 259690, + "end": 259970, + "confidence": 1, + "speaker": "B" + }, + { + "text": "is", + "start": 260370, + "end": 260690, + "confidence": 0.99316406, + "speaker": "B" + }, + { + "text": "a", + "start": 260690, + "end": 260850, + "confidence": 0.99902344, + "speaker": "B" + }, + { + "text": "little", + "start": 260850, + "end": 260970, + "confidence": 1, + "speaker": "B" + }, + { + "text": "bit", + "start": 260970, + "end": 261170, + "confidence": 0.99902344, + "speaker": "B" + }, + { + "text": "new.", + "start": 261170, + "end": 261490, + "confidence": 1, + "speaker": "B" + }, + { + "text": "But", + "start": 262210, + "end": 262530, + "confidence": 0.9819336, + "speaker": "B" + }, + { + "text": "yeah,", + "start": 262530, + "end": 262850, + "confidence": 0.97314453, + "speaker": "B" + }, + { + "text": "I", + "start": 262850, + "end": 263010, + "confidence": 0.9946289, + "speaker": "B" + }, + { + "text": "think", + "start": 263010, + "end": 263130, + "confidence": 1, + "speaker": "B" + }, + { + "text": "with", + "start": 263130, + "end": 263330, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "climate", + "start": 263330, + "end": 263650, + "confidence": 1, + "speaker": "B" + }, + { + "text": "change", + "start": 263650, + "end": 263930, + "confidence": 1, + "speaker": "B" + }, + { + "text": "moving", + "start": 263930, + "end": 264330, + "confidence": 1, + "speaker": "B" + }, + { + "text": "forward,", + "start": 264330, + "end": 264690, + "confidence": 1, + "speaker": "B" + }, + { + "text": "this", + "start": 264690, + "end": 264970, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "is", + "start": 264970, + "end": 265130, + "confidence": 0.99853516, + "speaker": "B" + }, + { + "text": "something", + "start": 265130, + "end": 265330, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "that", + "start": 265330, + "end": 265650, + "confidence": 0.9951172, + "speaker": "B" + }, + { + "text": "is", + "start": 266130, + "end": 266410, + "confidence": 0.97558594, + "speaker": "B" + }, + { + "text": "going", + "start": 266410, + "end": 266530, + "confidence": 0.66503906, + "speaker": "B" + }, + { + "text": "to", + "start": 266530, + "end": 266610, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "happen", + "start": 266610, + "end": 266770, + "confidence": 1, + "speaker": "B" + }, + { + "text": "more", + "start": 266770, + "end": 266970, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "frequently.", + "start": 266970, + "end": 267570, + "confidence": 0.959668, + "speaker": "B" + } + ] + }, + { + "speaker": "A", + "text": "That's Peter DeCarlo, associate professor in the Department of Environmental Health and Engineering at Johns Hopkins University. Professor DeCarlo, thanks so much for joining us and sharing this expertise with us.", + "confidence": 0.9886564, + "start": 267970, + "end": 278210, + "words": [ + { + "text": "That's", + "start": 267970, + "end": 268290, + "confidence": 0.9977214, + "speaker": "A" + }, + { + "text": "Peter", + "start": 268290, + "end": 268610, + "confidence": 0.99780273, + "speaker": "A" + }, + { + "text": "DeCarlo,", + "start": 268610, + "end": 269290, + "confidence": 0.94775, + "speaker": "A" + }, + { + "text": "associate", + "start": 269290, + "end": 269730, + "confidence": 0.9992676, + "speaker": "A" + }, + { + "text": "professor", + "start": 269730, + "end": 270170, + "confidence": 1, + "speaker": "A" + }, + { + "text": "in", + "start": 270170, + "end": 270290, + "confidence": 0.99658203, + "speaker": "A" + }, + { + "text": "the", + "start": 270290, + "end": 270410, + "confidence": 0.9995117, + "speaker": "A" + }, + { + "text": "Department", + "start": 270410, + "end": 270690, + "confidence": 1, + "speaker": "A" + }, + { + "text": "of", + "start": 270770, + "end": 271009, + "confidence": 0.9995117, + "speaker": "A" + }, + { + "text": "Environmental", + "start": 271009, + "end": 271610, + "confidence": 0.9992676, + "speaker": "A" + }, + { + "text": "Health", + "start": 271610, + "end": 271850, + "confidence": 0.9975586, + "speaker": "A" + }, + { + "text": "and", + "start": 271850, + "end": 272090, + "confidence": 0.9980469, + "speaker": "A" + }, + { + "text": "Engineering", + "start": 272090, + "end": 272610, + "confidence": 1, + "speaker": "A" + }, + { + "text": "at", + "start": 272770, + "end": 273090, + "confidence": 0.9995117, + "speaker": "A" + }, + { + "text": "Johns", + "start": 273090, + "end": 273530, + "confidence": 0.9777832, + "speaker": "A" + }, + { + "text": "Hopkins", + "start": 273530, + "end": 274050, + "confidence": 1, + "speaker": "A" + }, + { + "text": "University.", + "start": 274130, + "end": 274530, + "confidence": 1, + "speaker": "A" + }, + { + "text": "Professor", + "start": 274610, + "end": 275130, + "confidence": 0.99902344, + "speaker": "A" + }, + { + "text": "DeCarlo,", + "start": 275130, + "end": 275650, + "confidence": 0.96191, + "speaker": "A" + }, + { + "text": "thanks", + "start": 275650, + "end": 275890, + "confidence": 0.9951172, + "speaker": "A" + }, + { + "text": "so", + "start": 275890, + "end": 275970, + "confidence": 0.99853516, + "speaker": "A" + }, + { + "text": "much", + "start": 275970, + "end": 276090, + "confidence": 0.9995117, + "speaker": "A" + }, + { + "text": "for", + "start": 276090, + "end": 276250, + "confidence": 0.9995117, + "speaker": "A" + }, + { + "text": "joining", + "start": 276250, + "end": 276490, + "confidence": 0.90201825, + "speaker": "A" + }, + { + "text": "us", + "start": 276490, + "end": 276650, + "confidence": 0.99853516, + "speaker": "A" + }, + { + "text": "and", + "start": 276650, + "end": 276810, + "confidence": 0.9926758, + "speaker": "A" + }, + { + "text": "sharing", + "start": 276810, + "end": 277050, + "confidence": 0.99731445, + "speaker": "A" + }, + { + "text": "this", + "start": 277050, + "end": 277250, + "confidence": 0.9975586, + "speaker": "A" + }, + { + "text": "expertise", + "start": 277250, + "end": 277730, + "confidence": 0.89729816, + "speaker": "A" + }, + { + "text": "with", + "start": 277730, + "end": 277930, + "confidence": 0.9995117, + "speaker": "A" + }, + { + "text": "us.", + "start": 277930, + "end": 278210, + "confidence": 0.9995117, + "speaker": "A" + } + ] + }, + { + "speaker": "B", + "text": "Thank you for having me.", + "confidence": 0.9977539, + "start": 279410, + "end": 280530, + "words": [ + { + "text": "Thank", + "start": 279410, + "end": 279770, + "confidence": 0.99365234, + "speaker": "B" + }, + { + "text": "you", + "start": 279770, + "end": 279930, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "for", + "start": 279930, + "end": 280050, + "confidence": 0.9995117, + "speaker": "B" + }, + { + "text": "having", + "start": 280050, + "end": 280210, + "confidence": 0.9980469, + "speaker": "B" + }, + { + "text": "me.", + "start": 280210, + "end": 280530, + "confidence": 0.9980469, + "speaker": "B" + } + ] + } + ], + "confidence": 0.97860795, + "audio_duration": 282, + "punctuate": true, + "format_text": true, + "dual_channel": false, + "webhook_url": null, + "webhook_status_code": null, + "webhook_auth": false, + "webhook_auth_header_name": null, + "speed_boost": false, + "auto_highlights_result": null, + "auto_highlights": false, + "audio_start_from": null, + "audio_end_at": null, + "word_boost": [], + "boost_param": null, + "prompt": null, + "keyterms_prompt": [], + "filter_profanity": false, + "redact_pii": false, + "redact_pii_audio": false, + "redact_pii_audio_quality": null, + "redact_pii_audio_options": null, + "redact_pii_policies": null, + "redact_pii_sub": null, + "speaker_labels": true, + "speaker_options": null, + "content_safety": false, + "iab_categories": false, + "content_safety_labels": { + "status": "unavailable", + "results": [], + "summary": {} + }, + "iab_categories_result": { + "status": "unavailable", + "results": [], + "summary": {} + }, + "language_detection": true, + "language_detection_options": null, + "language_detection_results": null, + "language_confidence_threshold": null, + "language_confidence": 0.9982, + "custom_spelling": null, + "throttled": false, + "auto_chapters": false, + "summarization": false, + "summary_type": null, + "summary_model": null, + "custom_topics": false, + "topics": [], + "speech_threshold": null, + "speech_model": null, + "speech_models": [ + "universal" + ], + "speech_model_used": "universal", + "chapters": null, + "disfluencies": false, + "entity_detection": false, + "sentiment_analysis": false, + "sentiment_analysis_results": null, + "entities": null, + "speakers_expected": null, + "summary": null, + "custom_topics_results": null, + "is_deleted": null, + "multichannel": null, + "project_id": 1448960, + "token_id": 1461435 +} \ No newline at end of file diff --git a/test/integration/transcriptionSummarizerTest.js b/test/integration/transcriptionSummarizerTest.js new file mode 100644 index 0000000..22e51f7 --- /dev/null +++ b/test/integration/transcriptionSummarizerTest.js @@ -0,0 +1,12 @@ +const fs = require('fs'); +const transSummarizer = require("../../services/modules/jsonTools/transcriptionSummarizer.js"); + +// JSON-Datei laden +const inputJson = JSON.parse(fs.readFileSync("./testFile.json", "utf8")); + +// Übergabe an den Summarizer +transSummarizer.function({ + json: inputJson +}); + + diff --git a/test/test_health.py b/test/test_health.py deleted file mode 100644 index 7b088a7..0000000 --- a/test/test_health.py +++ /dev/null @@ -1,8 +0,0 @@ -from fastapi.testclient import TestClient -from app.main import app - -client = TestClient(app) - -def test_health(): - response = client.get("/health") - assert response.status_code == 200 diff --git a/test/unit/test.js b/test/unit/test.js new file mode 100644 index 0000000..b5c12ee --- /dev/null +++ b/test/unit/test.js @@ -0,0 +1,243 @@ +// DO NOT TOUCH THIS +require("../../requires.js") + +mapFunctions = new Map() +// Loading the Function Map +var path = `${mainDir}/services/modules` +var folders = fs.readdirSync(path).filter(function (file) { + return fs.statSync(path+'/'+file).isDirectory(); +}); +folders.forEach(element => { + var commandFiles = fs.readdirSync(`${path}/${element}`).filter(file => file.endsWith('.js') && !file.startsWith("index")); + for (const file of commandFiles) { + delete require.cache[require.resolve(`${path}/${element}/${file}`)]; + const command = require(`${path}/${element}/${file}`); + mapFunctions.set(command.name, command); + } +}); +// You can touch beyond this point + +let audiopath +let transcriptPath +let summarizePath +let llmpath +let speakers + +describe("Unit Tests", function() { + + describe('Audio Extraction', function () { + this.slow(1000) + this.timeout(3000) + it('Extract .mp4 to .mp3', function (done) { + + mapFunctions.get("extraction-video-to-audio").function({inputVideoPath: __dirname.replaceAll("\\","/")+"/testvideo.mp4", outputType: "mp3"}).then(resp => { + audiopath = resp + // console.log(resp); + done() + }).catch(err => { + done(err); + }) + }) + it('Extract .mp4 to .flac', function (done) { + + mapFunctions.get("extraction-video-to-audio").function({inputVideoPath: __dirname.replaceAll("\\","/")+"/testvideo.mp4", outputType: "flac"}).then(resp => { + // console.log(resp); + done() + }).catch(err => { + done(err); + }) + }) + it('Extracting to a nonexistant format', function (done) { + + mapFunctions.get("extraction-video-to-audio").function({inputVideoPath: __dirname.replaceAll("\\","/")+"/testvideo.mp4", outputType: "qqq"}).then(resp => { + // console.log(resp); + done("Didnt crash") + }).catch(err => { + done() + }) + }) + it('Extracting from nonexistant file', function (done) { + + mapFunctions.get("extraction-video-to-audio").function({inputVideoPath: "a", outputType: "mp3"}).then(resp => { + // console.log(resp); + done("Didnt crash") + }).catch(err => { + done() + }) + }) + it('Extracting from nonexistant file to nonexistant format', function (done) { + + mapFunctions.get("extraction-video-to-audio").function({inputVideoPath: "a", outputType: "qqq"}).then(resp => { + // console.log(resp); + done("Didnt crash") + }).catch(err => { + done() + }) + }) + }); + + + describe("Audio Transcription", function() { + this.slow(20000) + this.timeout(120000) + + it('Assembly', function (done) { + mapFunctions.get("assembly").function(audiopath).then(resp => { + // console.log(resp); + transcriptPath = resp + done() + }).catch(err => { + done(err) + }) + }) + + it('Assembly Wrong file', function (done) { + mapFunctions.get("assembly").function("a").then(resp => { + // console.log(resp); + // transcriptPath = resp + done("Didnt crash") + }).catch(err => { + // console.log(err); + done() + }) + }) + // TODO add more Transcription Tool tests here + }) + + describe("Transcript Summarizer", function() { + this.slow(100) + this.timeout(1000) + + it("Summarizer 1", function (done){ + mapFunctions.get("summarize-transcription").function(transcriptPath).then(resp => { + done() + }).catch(err => { + done(err) + }) + }) + + it("Summarizer 1 Wrong File", function (done){ + mapFunctions.get("summarize-transcription").function("a").then(resp => { + done("Didnt crash") + }).catch(err => { + done() + }) + }) + + it("Summarizer 2 (Main)", function (done){ + mapFunctions.get("summarize-transcription2").function(transcriptPath).then(resp => { + summarizePath = resp + done() + }).catch(err => { + done(err) + }) + }) + + it("Summarizer 2 (Main) Wrong File", function (done){ + mapFunctions.get("summarize-transcription2").function("a").then(resp => { + done("Didnt crash") + }).catch(err => { + done() + }) + }) + }) + + describe("Large Language Model", function() { + this.slow(30000) + this.timeout(120000) + + it("ChatGPT", function (done){ + mapFunctions.get("llm-saia_openai_gpt").function({inputTranscriptPath: summarizePath, documentTypePath: "./storage/documentType/followup_report.txt", language: "en"}).then(resp => { + llmpath = resp + done() + }).catch(err => { + done(err) + }) + }) + + + it("Gemini", function (done){ + mapFunctions.get("llm-gemini").function({inputTranscriptPath: summarizePath, documentTypePath: "./storage/documentType/followup_report.txt", language: "en"}).then(resp => { + done() + }).catch(err => { + if(err.includes("(503)")){done()} // Error 503 is gemini overload, so an Error that they can at any time throw at us which would crash the pipeline, so we just ignore it and we just imagine that the test passed + else{ + console.log(err); + done(err) + } + }) + }) + + it("Qwen3", function (done){ + mapFunctions.get("qwen3-235b-a22b").function({inputTranscriptPath: summarizePath, documentTypePath: "./storage/documentType/followup_report.txt", language: "en"}).then(resp => { + done() + }).catch(err => { + done(err) + }) + }) + + + it("ChatGPT (Nonexistant Type File)", function (done){ + mapFunctions.get("llm-saia_openai_gpt").function({inputTranscriptPath: summarizePath, documentTypePath: "a", language: "en"}).then(resp => { + done("Didnt crash") + }).catch(err => { + done() + }) + }) + it("Gemini (Nonexistant Type File)", function (done){ + mapFunctions.get("llm-gemini").function({inputTranscriptPath: summarizePath, documentTypePath: "a", language: "en"}).then(resp => { + done("Didnt crash") + }).catch(err => { + done() + }) + }) + it("Qwen3 (Nonexistant Type File)", function (done){ + mapFunctions.get("qwen3-235b-a22b").function({inputTranscriptPath: summarizePath, documentTypePath: "a", language: "en"}).then(resp => { + done("Didnt crash") + }).catch(err => { + done() + }) + }) + }) + + describe("Audio Snippet", function() { + this.slow(1000) + this.timeout(5000) + + // transcriptPath = "A:\\programing\\@projects\\video2document\\storage\\transcriptionSummaries\\testvideo-1765900665001.json" + // audiopath = "A:\\programing\\@projects\\video2document\\storage\\audio\\testvideo.mp3" + + + it("Audio Snipper Generator", function (done){ + mapFunctions.get("extract-speaker-snippets").function({audioPath: audiopath, jsonPath: summarizePath }).then(resp => { + speakers = resp + done() + }).catch(err => { + done(err) + }) + }) + + it("Audio Snipper Generator (Nonexistant Transcript File)", function (done){ + mapFunctions.get("extract-speaker-snippets").function({audioPath: audiopath, jsonPath: "a" }).then(resp => { + speakers = resp + done("Didnt crash") + }).catch(err => { + done() + }) + }) + + it("Audio Snipper Generator (Nonexistant Audio File)", function (done){ + mapFunctions.get("extract-speaker-snippets").function({audioPath: "a", jsonPath: summarizePath }).then(resp => { + speakers = resp + done("Didnt crash") + }).catch(err => { + done() + }) + }) + }) + after(function() { + console.log(`\n\n\n${audiopath} \n${transcriptPath} \n${summarizePath} \n${llmpath}`); + }) +}) + + diff --git a/test/unit/testvideo.mp4 b/test/unit/testvideo.mp4 new file mode 100644 index 0000000..625a31f Binary files /dev/null and b/test/unit/testvideo.mp4 differ