{"ast":null,"code":"var _jsxFileName = \"/Users/shanyi/Desktop/Projects/UC_Trains_Voice/react-demo/src/gavt/Wave/WaveCanvas.jsx\",\n  _s = $RefreshSig$();\n// Manually created for GAVT project on 2024-06-03, based on commit 10df1d9 of the original project\n// Update according to \nimport { useRef, useState, useEffect } from 'react';\nimport useUserMedia from './useUserMedia';\nimport { getSnapData, initAudio, updateCoeffsOffline, updateData, FRAME_SIZE } from './waveAudio';\nimport { Button } from 'antd';\nimport { CameraOutlined, ClearOutlined } from '@ant-design/icons';\nimport './Wave.css';\n\n// =====================================================\nimport { jsxDEV as _jsxDEV } from \"react/jsx-dev-runtime\";\nconst WaveCanvas = props => {\n  _s();\n  const DEFAULT_FILTER_ORDER = 40;\n  const {\n    draw,\n    // this is the drawLoop sketch\n    isPaused,\n    // req'd for renderer\n    isTracking,\n    strokeStyle = \"#50D3D6\",\n    ...rest\n  } = props;\n\n  // Audio Vars ------\n  const SAMPLE_RATE = 44100;\n  const refAudioCtx = useRef(null);\n  const analyser = useRef();\n  let microphone = useRef(null);\n  let audioData = []; // Holds the time domain data.\n  let lastReceivedCoeffs = useRef([1, 2, 3]); // self-explanatory\n  const BROADCASTS_PER_SECOND = 6; // used in audioData Interval, affects drawing smoothness, and will eventually be used with Vonage\n\n  // Canvas Vars -------\n  const refCanvas = useRef(); // html holds canvasEle\n  const refCtx = useRef(); // holds canvas drawing ctx\n  const refAniId = useRef(); // holds window.requestAnimationFrame\n  let count = 0; // just a var to count the draw loops\n  let drawData = {\n    magnitudes: [],\n    peaks: []\n  }; // set each audio interval\n  let receiveEnabled = useRef(false);\n  let [sensitivity, setSensitivity] = useState(50);\n\n  // Snapshot Feature --------------\n  const snapCtx = useRef();\n  const refSnapCanvas = useRef(); // ------------------ #snap\n  let snapshotCoeffs = useRef(null); // ------------------ #snap\n\n  let getMediaInitiated = useRef(false);\n\n  // Services ---------\n  const {\n    stream,\n    error,\n    getMedia\n  } = useUserMedia();\n\n  // ------------------------------------------------\n  const renderer = () => {\n    let ctx = refCtx.current;\n    count++;\n    drawData = updateData(drawData, lastReceivedCoeffs.current, isTracking);\n    if (!isPaused) {\n      // drawLoop. Drawing is passed in thru props.\n      draw(ctx, count, drawData.magnitudes, drawData.peaks, strokeStyle); // FOR WAVE CUSTOMIZATION!\n    } else {\n      return;\n    }\n    if (snapshotCoeffs.current !== null) {\n      displaySnapshot();\n    }\n    refAniId.current = window.requestAnimationFrame(renderer);\n  };\n  const displaySnapshot = () => {\n    let snapData = getSnapData(snapshotCoeffs.current, sensitivity);\n    // console.log(snapData)\n    draw(snapCtx.current, 0, snapData.magnitudes, snapData.peaks, 'blue');\n  };\n  const unpackArrayFromSignal = signalString => {\n    if (signalString === '') {\n      return [];\n    }\n    const coeffsStrings = signalString.split(' ');\n    const newArray = [];\n    for (const element of coeffsStrings) {\n      newArray.push(parseFloat(element));\n    }\n    return newArray;\n  };\n  const onClickClearSnapshot = () => {\n    clearSnapshot();\n  };\n  const onClickTakeSnapshot = () => {\n    takeSnapshot();\n    displaySnapshot();\n  };\n  const copyArray = arr => {\n    const newArr = [];\n    for (let i = 0; i < arr.length; i++) {\n      newArr[i] = arr[i];\n    }\n    return newArr;\n  };\n  const takeSnapshot = () => {\n    snapshotCoeffs.current = 0.8 * copyArray(lastReceivedCoeffs.current);\n    // console.log(\"snapshot\", snapshotCoeffs.current);\n  };\n  const clearSnapshot = () => {\n    snapshotCoeffs.current = null;\n    let canvas = refSnapCanvas.current;\n    const context = refSnapCanvas.current.getContext('2d');\n    context.clearRect(0, 0, canvas.width, canvas.height);\n  };\n\n  // onMount & onWillUnmount ------------------------------------------------\n  useEffect(() => {\n    refCtx.current = refCanvas.current.getContext('2d');\n    snapCtx.current = refSnapCanvas.current.getContext('2d');\n    let interval;\n    if (!stream) {\n      getMedia();\n    }\n    if (stream) {\n      // console.log('canvas has stream')\n      // console.log('stream.active = ' + stream.active)\n\n      // Anything that attaches to a DOM ele should be CREATED here with a ref.\n      // Once the refs are init'd/created, they can be passed to external scripts for maipulation.\n      refAudioCtx.current = new AudioContext({\n        sampleRate: SAMPLE_RATE\n      });\n      analyser.current = refAudioCtx.current.createAnalyser();\n\n      // I assume this will be needed later...but I don't really know\n      microphone.current = refAudioCtx.current.createMediaStreamSource(stream);\n\n      // configs the analyser to our mic input\n      analyser.current = initAudio(microphone.current, refAudioCtx.current, analyser.current);\n\n      // ready to send to audioData to LPC script, which we will do at an interval\n      interval = setInterval(() => {\n        // console.log('audioData interval');\n        // creates a 1D array\n        audioData = new Float32Array(analyser.current.fftSize);\n        // updates that array with analyser data\n        analyser.current.getFloatTimeDomainData(audioData);\n\n        // call to audio script\n        lastReceivedCoeffs.current = updateCoeffsOffline(audioData, DEFAULT_FILTER_ORDER);\n      }, Math.round(1000 * (FRAME_SIZE / SAMPLE_RATE)));\n      console.log(Math.round(1000 * (FRAME_SIZE / SAMPLE_RATE)));\n      console.log('audioReady. Starting render');\n      renderer();\n    }\n\n    // onUnmount -----------------\n    return () => {\n      clearInterval(interval);\n      console.log('cancel render / cancelAnimationFrame');\n      window.cancelAnimationFrame(refAniId.current);\n    };\n  }, [stream, isPaused, isTracking]);\n\n  // _________________________________________\n  return /*#__PURE__*/_jsxDEV(\"div\", {\n    className: \"canvas-container\",\n    style: {\n      position: \"relative\"\n    },\n    children: [/*#__PURE__*/_jsxDEV(\"canvas\", {\n      ref: refCanvas,\n      ...rest,\n      style: {\n        position: 'absolute'\n      },\n      children: \"Please use an HTML5 browser.\"\n    }, void 0, false, {\n      fileName: _jsxFileName,\n      lineNumber: 169,\n      columnNumber: 7\n    }, this), /*#__PURE__*/_jsxDEV(\"canvas\", {\n      className: \"snapCanvas\",\n      style: {\n        opacity: .4\n      },\n      ref: refSnapCanvas,\n      ...rest,\n      children: \"Please use an HTML5 browser.\"\n    }, void 0, false, {\n      fileName: _jsxFileName,\n      lineNumber: 177,\n      columnNumber: 7\n    }, this), /*#__PURE__*/_jsxDEV(\"div\", {\n      style: {\n        position: \"absolute\",\n        left: \"85%\",\n        top: \"5%\",\n        zIndex: 999\n      },\n      children: /*#__PURE__*/_jsxDEV(\"div\", {\n        style: {\n          marginBottom: \"10px\"\n        },\n        children: [/*#__PURE__*/_jsxDEV(Button, {\n          color: \"primary\",\n          onClick: onClickTakeSnapshot,\n          icon: /*#__PURE__*/_jsxDEV(CameraOutlined, {}, void 0, false, {\n            fileName: _jsxFileName,\n            lineNumber: 182,\n            columnNumber: 77\n          }, this)\n        }, void 0, false, {\n          fileName: _jsxFileName,\n          lineNumber: 182,\n          columnNumber: 17\n        }, this), /*#__PURE__*/_jsxDEV(Button, {\n          color: \"primary\",\n          onClick: onClickClearSnapshot,\n          icon: /*#__PURE__*/_jsxDEV(ClearOutlined, {}, void 0, false, {\n            fileName: _jsxFileName,\n            lineNumber: 183,\n            columnNumber: 78\n          }, this)\n        }, void 0, false, {\n          fileName: _jsxFileName,\n          lineNumber: 183,\n          columnNumber: 17\n        }, this)]\n      }, void 0, true, {\n        fileName: _jsxFileName,\n        lineNumber: 181,\n        columnNumber: 15\n      }, this)\n    }, void 0, false, {\n      fileName: _jsxFileName,\n      lineNumber: 180,\n      columnNumber: 7\n    }, this)]\n  }, void 0, true, {\n    fileName: _jsxFileName,\n    lineNumber: 168,\n    columnNumber: 5\n  }, this);\n};\n_s(WaveCanvas, \"qXTmW7gyGJrSqK6lIVPEPGtJ9uo=\", false, function () {\n  return [useUserMedia];\n});\n_c = WaveCanvas;\nexport default WaveCanvas;\nvar _c;\n$RefreshReg$(_c, \"WaveCanvas\");","map":{"version":3,"names":["useRef","useState","useEffect","useUserMedia","getSnapData","initAudio","updateCoeffsOffline","updateData","FRAME_SIZE","Button","CameraOutlined","ClearOutlined","jsxDEV","_jsxDEV","WaveCanvas","props","_s","DEFAULT_FILTER_ORDER","draw","isPaused","isTracking","strokeStyle","rest","SAMPLE_RATE","refAudioCtx","analyser","microphone","audioData","lastReceivedCoeffs","BROADCASTS_PER_SECOND","refCanvas","refCtx","refAniId","count","drawData","magnitudes","peaks","receiveEnabled","sensitivity","setSensitivity","snapCtx","refSnapCanvas","snapshotCoeffs","getMediaInitiated","stream","error","getMedia","renderer","ctx","current","displaySnapshot","window","requestAnimationFrame","snapData","unpackArrayFromSignal","signalString","coeffsStrings","split","newArray","element","push","parseFloat","onClickClearSnapshot","clearSnapshot","onClickTakeSnapshot","takeSnapshot","copyArray","arr","newArr","i","length","canvas","context","getContext","clearRect","width","height","interval","AudioContext","sampleRate","createAnalyser","createMediaStreamSource","setInterval","Float32Array","fftSize","getFloatTimeDomainData","Math","round","console","log","clearInterval","cancelAnimationFrame","className","style","position","children","ref","fileName","_jsxFileName","lineNumber","columnNumber","opacity","left","top","zIndex","marginBottom","color","onClick","icon","_c","$RefreshReg$"],"sources":["/Users/shanyi/Desktop/Projects/UC_Trains_Voice/react-demo/src/gavt/Wave/WaveCanvas.jsx"],"sourcesContent":["// Manually created for GAVT project on 2024-06-03, based on commit 10df1d9 of the original project\n// Update according to \nimport { useRef, useState, useEffect } from 'react'\nimport useUserMedia from './useUserMedia'\n\nimport { getSnapData, initAudio, updateCoeffsOffline, updateData, FRAME_SIZE } from './waveAudio'\nimport { Button } from 'antd'\nimport { CameraOutlined, ClearOutlined } from '@ant-design/icons'\n\nimport './Wave.css'\n\n\n// =====================================================\nconst WaveCanvas = props => {  \n\n  const DEFAULT_FILTER_ORDER = 40;\n\n  const {draw, // this is the drawLoop sketch\n    isPaused, // req'd for renderer\n    isTracking,\n    strokeStyle = \"#50D3D6\",\n    ...rest} = props;\n\n  // Audio Vars ------\n  const SAMPLE_RATE = 44100;\n  const refAudioCtx = useRef(null);       \n  const analyser = useRef();\n  let microphone = useRef(null);\n  let audioData = [];                   // Holds the time domain data.\n  let lastReceivedCoeffs = useRef([1, 2, 3]);  // self-explanatory\n  const BROADCASTS_PER_SECOND = 6; // used in audioData Interval, affects drawing smoothness, and will eventually be used with Vonage\n\n  // Canvas Vars -------\n  const refCanvas = useRef();   // html holds canvasEle\n  const refCtx = useRef();      // holds canvas drawing ctx\n  const refAniId = useRef();    // holds window.requestAnimationFrame\n  let count = 0                 // just a var to count the draw loops\n  let drawData = { magnitudes: [], peaks: [], } // set each audio interval\n  let receiveEnabled = useRef(false);\n  let [sensitivity, setSensitivity] = useState(50);\n\n  // Snapshot Feature --------------\n  const snapCtx = useRef();\n  const refSnapCanvas = useRef();             // ------------------ #snap\n  let snapshotCoeffs = useRef(null);          // ------------------ #snap\n\n  let getMediaInitiated = useRef(false);\n\n  // Services ---------\n  const { stream, error, getMedia } = useUserMedia();\n\n  // ------------------------------------------------\n  const renderer = () => {\n    let ctx = refCtx.current;\n    count++\n    drawData = updateData(drawData, lastReceivedCoeffs.current, isTracking)\n\n    if(!isPaused) { // drawLoop. Drawing is passed in thru props.\n      draw(ctx, count, drawData.magnitudes, drawData.peaks, strokeStyle) // FOR WAVE CUSTOMIZATION!\n    } else {\n      return;\n    }\n    if (snapshotCoeffs.current !== null) {\n      displaySnapshot();\n    }\n    refAniId.current = window.requestAnimationFrame(renderer)\n  }\n\n  const displaySnapshot = () => {\n    let snapData = getSnapData(snapshotCoeffs.current, sensitivity);\n    // console.log(snapData)\n    draw(snapCtx.current, 0, snapData.magnitudes, snapData.peaks, 'blue');\n  }\n\n  const unpackArrayFromSignal = (signalString) => {\n    if (signalString === '') {\n      return [];\n    }\n    const coeffsStrings = signalString.split(' ');\n    const newArray = [];\n    for (const element of coeffsStrings) {\n      newArray.push(parseFloat(element));\n    }\n    return newArray;\n  };\n\n  const onClickClearSnapshot = () => {\n    clearSnapshot();\n  }\n\n  const onClickTakeSnapshot = () => {\n      takeSnapshot();\n      displaySnapshot();\n  };\n\n  const copyArray = (arr) => {\n    const newArr = [];\n    for (let i = 0; i < arr.length; i++) {\n      newArr[i] = arr[i];\n    }\n    return newArr;\n  }\n\n  const takeSnapshot = () => {\n    snapshotCoeffs.current = 0.8 * copyArray(lastReceivedCoeffs.current);\n    // console.log(\"snapshot\", snapshotCoeffs.current);\n  }\n\n  const clearSnapshot = () => {\n    snapshotCoeffs.current = null;\n    let canvas = refSnapCanvas.current\n    const context = refSnapCanvas.current.getContext('2d');\n    context.clearRect(0, 0, canvas.width, canvas.height);\n  }\n\n  // onMount & onWillUnmount ------------------------------------------------\n  useEffect(() => { \n    refCtx.current = refCanvas.current.getContext('2d');\n    snapCtx.current = refSnapCanvas.current.getContext('2d');\n    let interval;\n\n    if(!stream) { getMedia(); }\n\n    if(stream) {\n      // console.log('canvas has stream')\n      // console.log('stream.active = ' + stream.active)\n\n      // Anything that attaches to a DOM ele should be CREATED here with a ref.\n      // Once the refs are init'd/created, they can be passed to external scripts for maipulation.\n      refAudioCtx.current = new AudioContext({sampleRate: SAMPLE_RATE,});\n      analyser.current = refAudioCtx.current.createAnalyser();\n\n      // I assume this will be needed later...but I don't really know\n      microphone.current = refAudioCtx.current.createMediaStreamSource(stream);\n\n      // configs the analyser to our mic input\n      analyser.current = initAudio(microphone.current, refAudioCtx.current, analyser.current)\n\n      // ready to send to audioData to LPC script, which we will do at an interval\n      interval = setInterval(() => {\n        // console.log('audioData interval');\n        // creates a 1D array\n        audioData= new Float32Array(analyser.current.fftSize);\n        // updates that array with analyser data\n        analyser.current.getFloatTimeDomainData(audioData);\n\n        // call to audio script\n        lastReceivedCoeffs.current = updateCoeffsOffline(audioData, DEFAULT_FILTER_ORDER);\n      }, Math.round(1000 * (FRAME_SIZE / SAMPLE_RATE)));\n      console.log(Math.round(1000 * (FRAME_SIZE/SAMPLE_RATE)));\n\n\n      console.log('audioReady. Starting render')\n      renderer()\n    }\n\n    // onUnmount -----------------\n    return () => {\n      clearInterval(interval);\n      console.log('cancel render / cancelAnimationFrame')\n      window.cancelAnimationFrame(refAniId.current)\n    } \n  }, [stream, isPaused, isTracking])\n\n\n  // _________________________________________\n  return (\n    <div className=\"canvas-container\" style={{position: \"relative\"}}>\n      <canvas \n        ref={refCanvas} {...rest}\n        style={{\n          position: 'absolute',\n        }}\n      >\n        Please use an HTML5 browser.\n      </canvas>\n      <canvas className=\"snapCanvas\" style={{opacity: .4}} ref={refSnapCanvas} {...rest} >\n        Please use an HTML5 browser.\n      </canvas>\n      <div style={ {position: \"absolute\", left: \"85%\", top: \"5%\", zIndex: 999} }>\n              <div style={{ marginBottom: \"10px\" }}>\n                <Button color=\"primary\" onClick={onClickTakeSnapshot} icon={<CameraOutlined />}></Button>\n                <Button color=\"primary\" onClick={onClickClearSnapshot} icon={<ClearOutlined />}></Button>\n              </div>\n      </div>\n    </div>\n  )\n}\n\nexport default WaveCanvas"],"mappings":";;AAAA;AACA;AACA,SAASA,MAAM,EAAEC,QAAQ,EAAEC,SAAS,QAAQ,OAAO;AACnD,OAAOC,YAAY,MAAM,gBAAgB;AAEzC,SAASC,WAAW,EAAEC,SAAS,EAAEC,mBAAmB,EAAEC,UAAU,EAAEC,UAAU,QAAQ,aAAa;AACjG,SAASC,MAAM,QAAQ,MAAM;AAC7B,SAASC,cAAc,EAAEC,aAAa,QAAQ,mBAAmB;AAEjE,OAAO,YAAY;;AAGnB;AAAA,SAAAC,MAAA,IAAAC,OAAA;AACA,MAAMC,UAAU,GAAGC,KAAK,IAAI;EAAAC,EAAA;EAE1B,MAAMC,oBAAoB,GAAG,EAAE;EAE/B,MAAM;IAACC,IAAI;IAAE;IACXC,QAAQ;IAAE;IACVC,UAAU;IACVC,WAAW,GAAG,SAAS;IACvB,GAAGC;EAAI,CAAC,GAAGP,KAAK;;EAElB;EACA,MAAMQ,WAAW,GAAG,KAAK;EACzB,MAAMC,WAAW,GAAGxB,MAAM,CAAC,IAAI,CAAC;EAChC,MAAMyB,QAAQ,GAAGzB,MAAM,CAAC,CAAC;EACzB,IAAI0B,UAAU,GAAG1B,MAAM,CAAC,IAAI,CAAC;EAC7B,IAAI2B,SAAS,GAAG,EAAE,CAAC,CAAmB;EACtC,IAAIC,kBAAkB,GAAG5B,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAE;EAC7C,MAAM6B,qBAAqB,GAAG,CAAC,CAAC,CAAC;;EAEjC;EACA,MAAMC,SAAS,GAAG9B,MAAM,CAAC,CAAC,CAAC,CAAG;EAC9B,MAAM+B,MAAM,GAAG/B,MAAM,CAAC,CAAC,CAAC,CAAM;EAC9B,MAAMgC,QAAQ,GAAGhC,MAAM,CAAC,CAAC,CAAC,CAAI;EAC9B,IAAIiC,KAAK,GAAG,CAAC,EAAiB;EAC9B,IAAIC,QAAQ,GAAG;IAAEC,UAAU,EAAE,EAAE;IAAEC,KAAK,EAAE;EAAI,CAAC,EAAC;EAC9C,IAAIC,cAAc,GAAGrC,MAAM,CAAC,KAAK,CAAC;EAClC,IAAI,CAACsC,WAAW,EAAEC,cAAc,CAAC,GAAGtC,QAAQ,CAAC,EAAE,CAAC;;EAEhD;EACA,MAAMuC,OAAO,GAAGxC,MAAM,CAAC,CAAC;EACxB,MAAMyC,aAAa,GAAGzC,MAAM,CAAC,CAAC,CAAC,CAAa;EAC5C,IAAI0C,cAAc,GAAG1C,MAAM,CAAC,IAAI,CAAC,CAAC,CAAU;;EAE5C,IAAI2C,iBAAiB,GAAG3C,MAAM,CAAC,KAAK,CAAC;;EAErC;EACA,MAAM;IAAE4C,MAAM;IAAEC,KAAK;IAAEC;EAAS,CAAC,GAAG3C,YAAY,CAAC,CAAC;;EAElD;EACA,MAAM4C,QAAQ,GAAGA,CAAA,KAAM;IACrB,IAAIC,GAAG,GAAGjB,MAAM,CAACkB,OAAO;IACxBhB,KAAK,EAAE;IACPC,QAAQ,GAAG3B,UAAU,CAAC2B,QAAQ,EAAEN,kBAAkB,CAACqB,OAAO,EAAE7B,UAAU,CAAC;IAEvE,IAAG,CAACD,QAAQ,EAAE;MAAE;MACdD,IAAI,CAAC8B,GAAG,EAAEf,KAAK,EAAEC,QAAQ,CAACC,UAAU,EAAED,QAAQ,CAACE,KAAK,EAAEf,WAAW,CAAC,EAAC;IACrE,CAAC,MAAM;MACL;IACF;IACA,IAAIqB,cAAc,CAACO,OAAO,KAAK,IAAI,EAAE;MACnCC,eAAe,CAAC,CAAC;IACnB;IACAlB,QAAQ,CAACiB,OAAO,GAAGE,MAAM,CAACC,qBAAqB,CAACL,QAAQ,CAAC;EAC3D,CAAC;EAED,MAAMG,eAAe,GAAGA,CAAA,KAAM;IAC5B,IAAIG,QAAQ,GAAGjD,WAAW,CAACsC,cAAc,CAACO,OAAO,EAAEX,WAAW,CAAC;IAC/D;IACApB,IAAI,CAACsB,OAAO,CAACS,OAAO,EAAE,CAAC,EAAEI,QAAQ,CAAClB,UAAU,EAAEkB,QAAQ,CAACjB,KAAK,EAAE,MAAM,CAAC;EACvE,CAAC;EAED,MAAMkB,qBAAqB,GAAIC,YAAY,IAAK;IAC9C,IAAIA,YAAY,KAAK,EAAE,EAAE;MACvB,OAAO,EAAE;IACX;IACA,MAAMC,aAAa,GAAGD,YAAY,CAACE,KAAK,CAAC,GAAG,CAAC;IAC7C,MAAMC,QAAQ,GAAG,EAAE;IACnB,KAAK,MAAMC,OAAO,IAAIH,aAAa,EAAE;MACnCE,QAAQ,CAACE,IAAI,CAACC,UAAU,CAACF,OAAO,CAAC,CAAC;IACpC;IACA,OAAOD,QAAQ;EACjB,CAAC;EAED,MAAMI,oBAAoB,GAAGA,CAAA,KAAM;IACjCC,aAAa,CAAC,CAAC;EACjB,CAAC;EAED,MAAMC,mBAAmB,GAAGA,CAAA,KAAM;IAC9BC,YAAY,CAAC,CAAC;IACdf,eAAe,CAAC,CAAC;EACrB,CAAC;EAED,MAAMgB,SAAS,GAAIC,GAAG,IAAK;IACzB,MAAMC,MAAM,GAAG,EAAE;IACjB,KAAK,IAAIC,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGF,GAAG,CAACG,MAAM,EAAED,CAAC,EAAE,EAAE;MACnCD,MAAM,CAACC,CAAC,CAAC,GAAGF,GAAG,CAACE,CAAC,CAAC;IACpB;IACA,OAAOD,MAAM;EACf,CAAC;EAED,MAAMH,YAAY,GAAGA,CAAA,KAAM;IACzBvB,cAAc,CAACO,OAAO,GAAG,GAAG,GAAGiB,SAAS,CAACtC,kBAAkB,CAACqB,OAAO,CAAC;IACpE;EACF,CAAC;EAED,MAAMc,aAAa,GAAGA,CAAA,KAAM;IAC1BrB,cAAc,CAACO,OAAO,GAAG,IAAI;IAC7B,IAAIsB,MAAM,GAAG9B,aAAa,CAACQ,OAAO;IAClC,MAAMuB,OAAO,GAAG/B,aAAa,CAACQ,OAAO,CAACwB,UAAU,CAAC,IAAI,CAAC;IACtDD,OAAO,CAACE,SAAS,CAAC,CAAC,EAAE,CAAC,EAAEH,MAAM,CAACI,KAAK,EAAEJ,MAAM,CAACK,MAAM,CAAC;EACtD,CAAC;;EAED;EACA1E,SAAS,CAAC,MAAM;IACd6B,MAAM,CAACkB,OAAO,GAAGnB,SAAS,CAACmB,OAAO,CAACwB,UAAU,CAAC,IAAI,CAAC;IACnDjC,OAAO,CAACS,OAAO,GAAGR,aAAa,CAACQ,OAAO,CAACwB,UAAU,CAAC,IAAI,CAAC;IACxD,IAAII,QAAQ;IAEZ,IAAG,CAACjC,MAAM,EAAE;MAAEE,QAAQ,CAAC,CAAC;IAAE;IAE1B,IAAGF,MAAM,EAAE;MACT;MACA;;MAEA;MACA;MACApB,WAAW,CAACyB,OAAO,GAAG,IAAI6B,YAAY,CAAC;QAACC,UAAU,EAAExD;MAAY,CAAC,CAAC;MAClEE,QAAQ,CAACwB,OAAO,GAAGzB,WAAW,CAACyB,OAAO,CAAC+B,cAAc,CAAC,CAAC;;MAEvD;MACAtD,UAAU,CAACuB,OAAO,GAAGzB,WAAW,CAACyB,OAAO,CAACgC,uBAAuB,CAACrC,MAAM,CAAC;;MAExE;MACAnB,QAAQ,CAACwB,OAAO,GAAG5C,SAAS,CAACqB,UAAU,CAACuB,OAAO,EAAEzB,WAAW,CAACyB,OAAO,EAAExB,QAAQ,CAACwB,OAAO,CAAC;;MAEvF;MACA4B,QAAQ,GAAGK,WAAW,CAAC,MAAM;QAC3B;QACA;QACAvD,SAAS,GAAE,IAAIwD,YAAY,CAAC1D,QAAQ,CAACwB,OAAO,CAACmC,OAAO,CAAC;QACrD;QACA3D,QAAQ,CAACwB,OAAO,CAACoC,sBAAsB,CAAC1D,SAAS,CAAC;;QAElD;QACAC,kBAAkB,CAACqB,OAAO,GAAG3C,mBAAmB,CAACqB,SAAS,EAAEV,oBAAoB,CAAC;MACnF,CAAC,EAAEqE,IAAI,CAACC,KAAK,CAAC,IAAI,IAAI/E,UAAU,GAAGe,WAAW,CAAC,CAAC,CAAC;MACjDiE,OAAO,CAACC,GAAG,CAACH,IAAI,CAACC,KAAK,CAAC,IAAI,IAAI/E,UAAU,GAACe,WAAW,CAAC,CAAC,CAAC;MAGxDiE,OAAO,CAACC,GAAG,CAAC,6BAA6B,CAAC;MAC1C1C,QAAQ,CAAC,CAAC;IACZ;;IAEA;IACA,OAAO,MAAM;MACX2C,aAAa,CAACb,QAAQ,CAAC;MACvBW,OAAO,CAACC,GAAG,CAAC,sCAAsC,CAAC;MACnDtC,MAAM,CAACwC,oBAAoB,CAAC3D,QAAQ,CAACiB,OAAO,CAAC;IAC/C,CAAC;EACH,CAAC,EAAE,CAACL,MAAM,EAAEzB,QAAQ,EAAEC,UAAU,CAAC,CAAC;;EAGlC;EACA,oBACEP,OAAA;IAAK+E,SAAS,EAAC,kBAAkB;IAACC,KAAK,EAAE;MAACC,QAAQ,EAAE;IAAU,CAAE;IAAAC,QAAA,gBAC9DlF,OAAA;MACEmF,GAAG,EAAElE,SAAU;MAAA,GAAKR,IAAI;MACxBuE,KAAK,EAAE;QACLC,QAAQ,EAAE;MACZ,CAAE;MAAAC,QAAA,EACH;IAED;MAAAE,QAAA,EAAAC,YAAA;MAAAC,UAAA;MAAAC,YAAA;IAAA,OAAQ,CAAC,eACTvF,OAAA;MAAQ+E,SAAS,EAAC,YAAY;MAACC,KAAK,EAAE;QAACQ,OAAO,EAAE;MAAE,CAAE;MAACL,GAAG,EAAEvD,aAAc;MAAA,GAAKnB,IAAI;MAAAyE,QAAA,EAAG;IAEpF;MAAAE,QAAA,EAAAC,YAAA;MAAAC,UAAA;MAAAC,YAAA;IAAA,OAAQ,CAAC,eACTvF,OAAA;MAAKgF,KAAK,EAAG;QAACC,QAAQ,EAAE,UAAU;QAAEQ,IAAI,EAAE,KAAK;QAAEC,GAAG,EAAE,IAAI;QAAEC,MAAM,EAAE;MAAG,CAAG;MAAAT,QAAA,eAClElF,OAAA;QAAKgF,KAAK,EAAE;UAAEY,YAAY,EAAE;QAAO,CAAE;QAAAV,QAAA,gBACnClF,OAAA,CAACJ,MAAM;UAACiG,KAAK,EAAC,SAAS;UAACC,OAAO,EAAE3C,mBAAoB;UAAC4C,IAAI,eAAE/F,OAAA,CAACH,cAAc;YAAAuF,QAAA,EAAAC,YAAA;YAAAC,UAAA;YAAAC,YAAA;UAAA,OAAE;QAAE;UAAAH,QAAA,EAAAC,YAAA;UAAAC,UAAA;UAAAC,YAAA;QAAA,OAAS,CAAC,eACzFvF,OAAA,CAACJ,MAAM;UAACiG,KAAK,EAAC,SAAS;UAACC,OAAO,EAAE7C,oBAAqB;UAAC8C,IAAI,eAAE/F,OAAA,CAACF,aAAa;YAAAsF,QAAA,EAAAC,YAAA;YAAAC,UAAA;YAAAC,YAAA;UAAA,OAAE;QAAE;UAAAH,QAAA,EAAAC,YAAA;UAAAC,UAAA;UAAAC,YAAA;QAAA,OAAS,CAAC;MAAA;QAAAH,QAAA,EAAAC,YAAA;QAAAC,UAAA;QAAAC,YAAA;MAAA,OACtF;IAAC;MAAAH,QAAA,EAAAC,YAAA;MAAAC,UAAA;MAAAC,YAAA;IAAA,OACT,CAAC;EAAA;IAAAH,QAAA,EAAAC,YAAA;IAAAC,UAAA;IAAAC,YAAA;EAAA,OACH,CAAC;AAEV,CAAC;AAAApF,EAAA,CA9KKF,UAAU;EAAA,QAoCsBX,YAAY;AAAA;AAAA0G,EAAA,GApC5C/F,UAAU;AAgLhB,eAAeA,UAAU;AAAA,IAAA+F,EAAA;AAAAC,YAAA,CAAAD,EAAA","ignoreList":[]},"metadata":{},"sourceType":"module","externalDependencies":[]}