From bce691acb4f137d7a41c07ad810b657921fe1e59 Mon Sep 17 00:00:00 2001 From: Duc Trung Le Date: Mon, 22 Jan 2024 00:54:02 +0100 Subject: [PATCH] Add UI test job --- .github/workflows/build.yml | 99 +- .gitignore | 8 +- frontend/ui-tests/package.json | 16 + frontend/ui-tests/playwright.config.js | 22 + frontend/ui-tests/tests/ui.test.ts | 17 + ...o2docker-UI-Tests-Render-Login-1-linux.png | Bin 0 -> 32575 bytes frontend/ui-tests/yarn.lock | 935 ++++++++++++++++++ 7 files changed, 1087 insertions(+), 10 deletions(-) create mode 100644 frontend/ui-tests/package.json create mode 100644 frontend/ui-tests/playwright.config.js create mode 100644 frontend/ui-tests/tests/ui.test.ts create mode 100644 frontend/ui-tests/tests/ui.test.ts-snapshots/tljh-repo2docker-UI-Tests-Render-Login-1-linux.png create mode 100644 frontend/ui-tests/yarn.lock diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index ffe20a0..855156d 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -4,7 +4,7 @@ on: push: branches: master pull_request: - branches: '*' + branches: "*" jobs: build: @@ -19,6 +19,8 @@ jobs: uses: mamba-org/setup-micromamba@v1 with: environment-name: tljh + micromamba-version: "1.5.5-0" + init-shell: bash create-args: >- python=3.10 nodejs=18 @@ -39,7 +41,7 @@ jobs: - name: Setup yarn cache uses: actions/cache@v2 - id: yarn-cache + id: yarn-cache with: path: ${{ steps.yarn-cache-dir-path.outputs.dir }} key: yarn-${{ hashFiles('frontend/yarn.lock') }} @@ -50,7 +52,7 @@ jobs: shell: bash -l {0} run: | set -eux - pip install build + python -m pip install build python -m build . - name: Upload package @@ -69,8 +71,8 @@ jobs: - name: Install Python uses: actions/setup-python@v4 with: - python-version: '3.10' - architecture: 'x64' + python-version: "3.10" + architecture: "x64" - uses: actions/download-artifact@v3 with: @@ -83,8 +85,91 @@ jobs: sudo rm -rf $(which node) sudo rm -rf $(which node) - python -m pip install tljh_repo2docker*.whl + python -m pip install git+https://github.com/jupyterhub/the-littlest-jupyterhub tljh_repo2docker*.whl - name: Test import shell: bash -l {0} - run: python -c "import tljh_repo2docker" \ No newline at end of file + run: python -c "import tljh_repo2docker" + + integration-tests: + name: Integration tests + needs: build + runs-on: ubuntu-latest + + env: + PLAYWRIGHT_BROWSERS_PATH: ${{ github.workspace }}/pw-browsers + + steps: + - name: Checkout + uses: actions/checkout@v3 + + - name: Install Conda environment with Micromamba + uses: mamba-org/setup-micromamba@v1 + with: + micromamba-version: "1.5.5-0" + environment-name: tljh + init-shell: bash + create-args: >- + python=3.10 + nodejs=18 + yarn=3 + + - name: Download app package + uses: actions/download-artifact@v3 + with: + name: tljh_repo2docker-artifacts + + - name: Install package + shell: bash -l {0} + run: | + set -eux + # Remove NodeJS, twice to take care of system and locally installed node versions. + + python -m pip install -r dev-requirements.txt + python -m pip install tljh_repo2docker*.whl + npm -g install configurable-http-proxy + + - name: Install UI test dependencies + shell: bash -l {0} + working-directory: frontend/ui-tests + env: + PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD: 1 + run: yarn install + + - name: Set up browser cache + uses: actions/cache@v3 + with: + path: | + ${{ github.workspace }}/pw-browsers + key: ${{ runner.os }}-${{ hashFiles('frontend/ui-tests/yarn.lock') }} + + - name: Install browser + shell: bash -l {0} + run: npx playwright install chromium + working-directory: frontend/ui-tests + + - name: Start JupyterHub + shell: bash -l {0} + run: | + python -m jupyterhub -f ./jupyterhub_config.py & + + - name: Wait for JupyterHub + uses: ifaxity/wait-on-action@v1 + with: + resource: http-get://localhost:8000 + timeout: 360000 + + - name: Execute integration tests + shell: bash -l {0} + working-directory: frontend/ui-tests + run: | + npx playwright test + + - name: Upload Playwright Test report + if: always() + uses: actions/upload-artifact@v3 + with: + name: tljh-playwright-tests + path: | + frontend/ui-tests/test-results + frontend/ui-tests/playwright-report diff --git a/.gitignore b/.gitignore index d5b6cdb..d6aeecc 100644 --- a/.gitignore +++ b/.gitignore @@ -7,8 +7,8 @@ docs/_build docs/build .ipynb_checkpoints jupyterhub_cookie_secret -jupyterhub.sqlite -jupyterhub-proxy.pid +**/jupyterhub.sqlite +**/jupyterhub-proxy.pid *.egg-info MANIFEST .coverage @@ -24,4 +24,6 @@ config.yaml node_modules frontend/dist frontend/lib -**/js/react/ \ No newline at end of file +frontend/ui-tests/playwright-report +frontend/ui-tests/test-results +**/js/react/ diff --git a/frontend/ui-tests/package.json b/frontend/ui-tests/package.json new file mode 100644 index 0000000..8bdf775 --- /dev/null +++ b/frontend/ui-tests/package.json @@ -0,0 +1,16 @@ +{ + "name": "tljh_repo2docker-ui-tests", + "version": "1.0.0", + "description": "tljh_repo2docker UI Tests", + "private": true, + "scripts": { + "test": "npx playwright test --workers 1", + "test:update": "npx playwright test --update-snapshots", + "test:debug": "PWDEBUG=1 npx playwright test --workers 1" + }, + "license": "BSD-3-Clause", + "dependencies": { + "@playwright/test": "^1.31.0", + "rimraf": "^4.1.2" + } +} diff --git a/frontend/ui-tests/playwright.config.js b/frontend/ui-tests/playwright.config.js new file mode 100644 index 0000000..037c497 --- /dev/null +++ b/frontend/ui-tests/playwright.config.js @@ -0,0 +1,22 @@ +module.exports = { + timeout: 120000, + reporter: [[process.env.CI ? "dot" : "list"], ["html"]], + use: { + baseURL: "http://localhost:8000", + video: "retain-on-failure", + }, + retries: 0, + expect: { + toMatchSnapshot: { + maxDiffPixelRatio: 0.02, + }, + }, + webServer: [ + { + command: "yarn start", + port: 8000, + timeout: 120 * 1000, + reuseExistingServer: false, + }, + ], +}; diff --git a/frontend/ui-tests/tests/ui.test.ts b/frontend/ui-tests/tests/ui.test.ts new file mode 100644 index 0000000..2ee3e69 --- /dev/null +++ b/frontend/ui-tests/tests/ui.test.ts @@ -0,0 +1,17 @@ +import { expect, test } from '@playwright/test'; + +test.describe('tljh_repo2docker UI Tests', () => { + test.beforeEach(({ page }) => { + page.setDefaultTimeout(60000); + }); + + test.afterEach(async ({ page }) => { + await page.close({ runBeforeUnload: true }); + }); + + test('Render Login', async ({ page }) => { + await page.goto('hub/login'); + await page.getByText('Sign in'); + expect(await page.screenshot()).toMatchSnapshot(); + }); +}); diff --git a/frontend/ui-tests/tests/ui.test.ts-snapshots/tljh-repo2docker-UI-Tests-Render-Login-1-linux.png b/frontend/ui-tests/tests/ui.test.ts-snapshots/tljh-repo2docker-UI-Tests-Render-Login-1-linux.png new file mode 100644 index 0000000000000000000000000000000000000000..ac9342d2b3c0c95dc337e8cf994233add798bb2e GIT binary patch literal 32575 zcmeFZXH-*LxGs!syA_dbMWk(|2?!`vI*Ndyx6sR01O$Z8ODMqx3euZ&k)8mNUIQv3 zy@n8}0qKM!QbOq58Qu4s`{SG+-xzm%Y;h7;iMX#byofIodf6UN}r5l;j4dkm$$>`M#`e=|Vt-!<|}Uzzarx`dnj zw(8IeVZL_i)L(yJd&S4=byqK(>3(>Kfzj8~N8x4fA2n=+Uu3*~dG^EWkOvhJCteCY zfBrX52#@k&%u9ysu(;U-|HD7onIL~F-?~NHHH*k|u;0uiWU`lUm<9An>7?IzXm4lN zLGob)cL81@lHZ?7oj7r#Lr6$S^Vzd!YinzQq}1QNm> zaWEF~Sl~hplwZ%z39(9@IDWj-zM`Y6OY`91fW_kcY1{g_1CnhWUNokJq&$M=@^ggI z+Md>(Z%!bEsy~LU|K!E6{JvJW&%lwX#_jd0N3Ey5SHA1xC14^DG3LAuOF0vA0A!0Q*&Mf`g5I$cCO~vXaEHpSFT$Go)pLpKSNON7}G7!s81Xd zknwyx&mMm^uOp*T*?vveqlb%oWTjlP4s$#d>XEKfu;SBjCdbQxKQ-TMS@QSbQ=Nv_ z8yM2Ue7mRwr^yH zm|gfLc>>iyuGiGp*N@AM=ht=G+gb&Nx;$2czJC4sTGdE}Lo}amX7SITZd3|^;2DU` z*WURNA$pO6qomZTLGaqOyM!QGMm3BeVq;^|+SZ1$sBsOCh=`wXP3GxIlh#F^^LYe#c~x`NBI9^og@!s!eQK7P zZ|~?B*r5`s`!s?Ocr)KoP*&EQL)NPwXJR7^F4kAIw6v5e?hy6m%aSGx7{oC*Jamjr)EDm;^k`$(nSngdH zQOL8oHL9JfnIJ9POzgT-$M8;e<42m7`er+3$GPrs&sw(Lfl7A}T*D>3OqzJTPz_;XkZgrAY+HRxlCtmXVL!7iWwk{p9&b1=qd<$HE-hFn0D zOok3GKYtg=hdA32e_}NKj{805;bQ$nLFj3A!pDa%qB!L8bJU}kYY4%Hz@c$SsF2G< zJ@nM6Q=^Uk6`b(JYm!P;Ban%DZ%OZEBbV`7ed$TRoO}1~tx;3b(~B<&85jDHMo*tT zn>0o;Ha1Qw5cwUBmWH%CvE>yNlFq|7g)M9KVq;^M$LlIQJUl9aTWY7@(Fe1+j6)?a z>|h^0G&Oza;ps`m>MC{M@%RfynH?AyN@C{r($-zpxtYhDn~8OvRq0E*os-j!BdL2; z7st941ZYWl2INyC>?0>82cK|u!~|f^vzA(pjQ1X;iIqopY>$YGF;kL+#jFKQpyUkH ztodH{I9qTMX7>hbVySGGF6-|(Wy!gJRM}!bDh@W)O11s|*r?gKbJTZ$*XlL4E3n3O z0$Eupp|IX9j*INYaI1#Wu;Z49V84Hd=)1_oZdbSV#2TCdU3(P3WiRV3@P z@($gHLz#eCM|l&6GecloKc~&h9=)0jT-U~xSeWQ4P>r6M4;P!|oM60M2&XPzmGvq- zdh{p{L;=3h-=D2QolCYsszzK!npZhBjrvk1OS-$YCW3cK%flrWO?s=8Zl=S;5^_(u z(k<1s)nxV&kDee^a+T-Yfo;@Ns_cW{yS!_bR?Ud(-1AQUN^7rXxo$$rIYzkg1<~!} z4Q8dPGjq5Z?~bwN`{a|qW+7xxB)E-9G%JGn@Zj5@NWDiv8O&)t^V<$tib3+zSv=d@ z+m8M3?}kT4;-*`|s{Z+Ww6AWyC#}o1h8V4Mpy%ULy|6`p<6+AmuU@`fOm!}mL7N9} zO`jYg`7p8H>A!H0QJND#Ba59;u|e!tEo?3M9`Y3^Sgvi#0+cdxMe#_vZ}8^}2avdP?ALa+qvwKr4e*`v3D%EjzayS< z@G!xHCVwR~yT4x#2V%u186_p9Dwi?ixXPy^VtuQ!-phqgN6JSr0X2iz!_(!Lh0Sx* z)7j~tI5=p{n(*2B`7kdxw@@we>WN948xY_kaambeQZA!BVJ)#}9|Qu?w>Dc*rYe0P zv?n*wWSL;ZXXznl$EhXkgIRbqRHv_I`k8k^jhZBO^xoslJ2y!XfwJA-nd9%~^CQQ< zYV7Up%`TXTaE-2$&;ik%6kaySs*#mXU@=I1-A=2kA%Hyz;@3 zBS#h#c42K%9AesrY|^eq&B6Pp(|zkKW&PK3_xAS_K`w&9V0|*+_7VjQ=hJDoNQwr} zYPKP2dj2V9DF(f(>&Wfmd&rByUu|;3Vq@# z5r@Hb6Rxjbz4D)Ay#ZNWT@8>F^2>)0sv8}g>OB}kL&z0My4*EWI^F&mb#`QeNJq>$%d(f@bWF#<@G0e{G+CEw}82BvBg?Nd3+-iZR`p(1h`FIuO-o!M*qj(aP{vnLee>qc>C>mzUIrmd3UoNY z%sF<%@oGRI`hkIs*SWbFG3st^lTo!rMMWNW*u}K5o}ye_Tvd)(HGbX9p{>;!fQZTh zyHd2VHzn>g8UY|6kX!z^es1#P1CROH47Y~dZeg)_ge>$sYXzTfkQ6gHVK+J@u4@}# zH-5oG^w7xTao6j&$@)V9M}I$$+ki;$sgGUP#BE=^ZQo)H(j2!*ml5;j?w zod*$6o1SujU8_ZNmZVBLFN0KMUSS_uS~q`H*rutm-LC2G-Mbo^n%JMyEx3;lRRH*V z0xX^$GLIfR=1sxSF8k3kd0vHup+K-SZwdrXlT5CiiMmdVjEXY$^Q+yY5YS+@1O){( z1_lP|H%FcG3@c7a!zPQVM7;BCd#uyapvgirUEO@+va__8-q0sg*p=NQk{o zWRX*o-&a%;Menr~8WqI>$Wd_W0^bc888eVS%153q4;97J(MoPEPoF)T0|4W=W6bjJ ziwp~v*ZY+EgnA?{oj?EK$gw{PAGUnL7wRO`%kQ)+FABH??FOnZEfus z8*6Ac2QWj@{l|S_t9qlLoeh0pWqmR#u)a)%(JJR;dM>|kAtxp#<|v+B*6RUqB6^sm zpFVdk8%*B(*vqeT9`vv=STxtFN&{rMY#kDzu3s_*puSfWelD?o>aRIBC(ck+){VaIRi7bxq1ZY=$YR$ zruhS40NzT*k2P5<6Y3o@>$mHg*sl4Ggp1wdw)-lPB#4U@E=JC#)v%SOWbkrm#HW4D#ba%G-?*%$8Cd!vaH-RO{;B8Z=a-E?e)1&Bedc-B8%D;_-p4g# z&>S@;T%mrBDYe+9*&0L^L5u2QddMrDt2=k@T&7<6jqL1fSrcXFnz8j)DXM~oTb^q- z0yZc7B7d5)PM2*nk2bD-nG`<(y^}*ZE!H{dRu=K~->{IW!N-u0JN4&C!x=!55MABl zg6j`LD{b?5I=rLu)$&k}DT?N&BV-m_w6H^;U!0^)hjDdEXjg%7zsL$ZWC&}?PDr?j zS?`qtaSZV=7gmc*tifQY2(0lF}WY_ z*~eyl21|vZO&U5mAq@--p;b;$@5TP?*+1NlC?0Itg7~fl=xBzV?`C5g^RJ0#sAW%h zz_92g3(}8B+C#&<&cs=q>+2O0S`rZt@hI4fV>zB`Kl#UBq1vIzSx+S`I-X!{)E;)J zNBmPWmKYcJ;R3%-q5t}P{o%oGU!DAB;Lh1IXA+v55B*7{X(=fJz;40g6#>d}*xlRs z`;yAHtv2}n2Gm$63EdAeU!I}d(4^Z86XL`}nKnC4jrj8Dxf3A=c6Kk-G!&1pcr_0V z8G%Hf|Mht@RtvkaQoc)LlIjJST6m30g&G+dy&3+O0$LUW(80scuMW6jW*^;_gZFAX z6FSB=RGOXv)?u~cA}<2%x4-i3M9(D38neS&^cxH^+&I;mwQPJGB#u`v52{eEAiy3y zD)Q9lUwI)U&U-+d0fWKdip|79Q0}t-ev#uskhSKMe;3G7mbd)W17+n9I<`A+_3zmm zceQZ;-rCK#41fK8{ExTNdhFw|OE*cfzfUkE{9S+*NbBL7`TFL9Jzx~$uD*`=e`SjI zFaK3SZh`zodi3u%EUz{m`;Xy{D*rzFU&|c-$94bbga59}|Dgi?&-DC{_5609|1paH zj8Oldjuasgv%TZiqr40ucB^ui8A2i!pre5IxaD~`xF*{!8Oh)eZme&89uzsraI@pj zoBZfMIA()LnDWGEVUh;}L+$n3Aa;f@&YIq~h_cH%e{kdzFAy|uw3X}5nci-oOP^EW zstkWJd^+L57YGH{`E+{m} z=4%CMfW)!I`lA9>6e9SerH`;J*Z5yJnCb`uBZ?Wl7vi&C)B^^nnMxJZAZSAYNd z{twTYzgdItc4o>x=$$>Wtvk9>{>r!mvEuRPgjUULw*X0y{^5(yfQf~4y*_6Q71NfH z77_FtB*pE1Dh&)f`Uiq{1mpFiq<1?iz{azn(PBc>qV7Q*vqSsp?wJ&zyQ2H#IuB}_ z)7jQ`Xc*gs#x!dGs(#7b*ukk0XB*KLe&x~)p1EEQUVLfQLh%S{le*S$_#!Yn&tzt7 z79a3dM~BQGfcs<3bx<3y7Y{BC6EcFoJ>}$%^eTD?k(rpp7$tG_I;>jAm%!eewm1$a}$ zckIB!#YVu_++b2kye6vxbMCL3Sw1i3bSw(uDYVU-=X~~7Q;ue4+B}w9ScWAw{8Z?3 z5MOw?cQQ~At(Gxosz`j^X3MEzxViB;vyYs@_88$_)M&98>#Y9e1dU!*dB63`df(R4 zTyPyVvYidM{c?Ph^(20LNoHZROhYD10Wth{zx9l4N0&*RrcwtjSb2Txu8c{r2t|td z(r9nWmUmNM>5z9EkA+{iYGhkVOtX#nLTz`Dg=oDExBx?|I^AjPz6IUVmLW7=4_Xg@ z8}iSHZE8DeiL{2q>jcxZhu*kb@u>S`ySU6<=Y`BSm7Lh^88_Zgh+gSHd~!GNXvhtT ziD2tW+1C*BjGDs`=@{pe(sN(nTW+l4y6mx@`+c36o3GP57#|C92?ea+92_57ewV@C zY<%TjeGs1WI=IiAAABh!?mqoyE`7;pvW|Pq_~yn=s)}PAPfnoaGtcU^vgD7yuvfCs zQDp`O5pHX5*BgNgRxl-h9L6kecGAMlpW;}m-3;lq+_nseetbyO=2BCB-B{W*GkB2+ z3_n%=O^zN5-ul&$M4KDhI#Sk9;|=&=XgN&&9RGyiK1)g%iAPkff;~F z9uJTfau_)2v3Gl6Jm}_5ba%S#S`*oN+b2+m%pEXmsi-o)s9{fnrv#r<3#|n$e{EYTDf3%5K*-1B=vA3JFgt64C5UkhZmK^xLKqlK zBa?NXsi-M`1P+$4`ww#bq;H~z8U6k=PHKi6Vfc6jZSFGbIioCt?@8Wmw;s7C)U})1 z@c8&k!G*4e=i?7S3<^0EI8GnxZNQ;VUB%h<-TDB#<1ahC9(QGA=8pGe#yextc~+cY z%n-z{5P5lKvO#r(izY-811A|Q`TS1)O+R2@_`e%C|N9Z=|4ktpi+3O{qm=^SMy3#7 zezZok!YqM>oDu&o3W)zdgO2Dy5%Bzbt%>o*V7-;!eB4z_@;L=;`J(;*d#UTcUx8m) zQ{yYPFKU?0R_O*w%&l`)z;i?S&_Sc&ta8C(*DM@dd0!&uHyE_pBU<(dhyC_+&CiGXbtv8#LtNyxkgCOzy>YxaK z8B^uTzamSaWBg8MZ|}ekQ<_3s93EznBKB-FvECx=EY~W#u4x7j7Yv4rZeDJr*rw)N zikOs@l5jcku8xHHM#_;nMvrHV(_WV;6afZ?EyCkC;okwlhvh9w)``ywk@Xk!tV z5L2tulR9j&L&gA|d@xelk|@K;WuvL6sAyif<*R+T;p{?)6%-Y1SZ=e)#TRtzSJgh5o1I@ywn^&x$hthf#K*LPs5#RT zqa%EzRPUOWuF{B2+|UQ8uYy8u^JP)9Y>vImAqIxuy#U@2fzzi%Puy^LEMLk>2| z(qSuL6>r83+M#$L74zMRJUyAKnU6kjSJ^tGPI4$g-@GBt0tN6}Bys7@XJ+KRSGSgi z$_E!0A7seKmJpIkjHpfn@WY97t(-F!FhuT9<(bH!8P&cr(dNtoU5CID(fK`oLRA)G zJ11Xj*HS&&zNl3)k~-dh7d)`Vlje~TnX7WHaluyg25se0C`;4V^}a6X07{)ooY&sg zDa`JH(SEsKokzK+QI1;i0ku6S98JS__x*T_v5z#B$q?E9IddJqFrw$g-{GT(dth-)>7rKx* zS0_Xb&(b^_8vA-$w`1DP>B~v1B<$c3heB%JGVamF;`=72(cA;GteTeTA)+mx)1+>M zUCo%6#X_3o6J?u`r)p(cT`9einRd?cNcrGj=R?omltD+S8p;*x{OvMY5_;Q>~W6J;(r6AmSILJ`Y7?p%Tj zF40ayuLl%@>a(cZ^!&qhhTYaE&D#)_EY9}}p=aZ;{*Lwxu7qmM zW?`$Mnzp9gm6fNF?E9H&Z{a4k)&bf5#Dd_pSHrw{izT-YjZN$RvRmmGnhe@iSjf66 zYcM%Ed3Aks{q(6*!+jA+OE%HXxn@`b^#1+rN74IZb&R-~sHoJfgB$y0P9>9p&T+vO z^%_iULjxx%(Zg|sgZ@SQqzRU9H5@F5kjZ`#Ghfe8`?PM6anBtNMGqqso`*#?R3lOF zNvFCk-ToY>_jE5A@%4L>mAC?tT*0Qf3t2(;fdW6wVslW)AKLg~M4Yhxa_ZH#J^ARw z0Om!0ki2nP%~SkqeG1aD?ym{lZuKLDWbq7VdHUrR4);Sjx%NU*rHar%wOxvo<`(efobt0n?+a_S>8GO0A|k3f2dOT;BMw!GhVcW^9hW2irt?mKYX4bRag zZf#f-^Cy1l#WAElcrui1kprBeF7GCNrIZ?WqXSntqmk(W)N-o&9HPZh2KbaRQ3(=z!U zy6=01F75|%8EK9)Y6^TuPbq1zMxD4yxORD5oYWF7Rt1W76;?HVqeoDjfEM_8_t<>g zYW!whVPDKi_Dx1YBZf0D^@Rp`r^{JG$;~xk^fN(06g@pK9mQs%kkJZSEG_3# zFL7Gy;83lFZ6ppx4i$ZRkz%2OBH^aYRppA)x;+pJUt0~kcnJ!rSP1kTu8xIX-)R5T z6kdEjn>bcUzrLjHa7}Blh=VNNPcd^R1-`kMTWU2bP_FUv>JYkwpNmoeTM$VYbAgu< zCrOv-=`{3VJAt5EQ|X*DJFBgs+4a*>9P#-M)t#!~ZJhk8L`GZ;|BjF#vfRAJ zDc@Q_E(2cy%qf|Rj*#45ISt;i231Q94UJgGRN!_7j}!j{-_dt64+TY++?QYJO#?{R zjMTVXmoeX^{lmZyxw+c1fwP5L;-XsL8>9`v^ul+dcE_5tE^}D%5*A|m{~-|&KZ_;5 zrH}B{7N6ymzX=(w6W5+=X_41d;T7QHGXObad-N@*`;t$2iN1mqVIfuW5w+{bTwLzj zT+2|o>V=+tax*>P30oz-2WmWWqNk*Hbm3d1MU{wvDp-5-DNFbcXP-frll#D{YRYgG zrrsCBODKcQi}ZuIkwM!+8okkb^5Elw=Y*^zsFBc<>W2@4EVWI}$v*HOMJ7W;vO4aA zzirjif%`qBt})W32_>E0cf9s{d@sYZ)>#8eQgLe;jLeMC9>crEJglMFA3y4G$S2UO z9C65${J^zWt__%Gb8DnW5bKbWQVKhG`8_YH60UTQ1;XEOg{gb*X z;-=J4GWF$IbDx^v+maZm`68+O@F&ihm_E-kR<-Q52@&6Cwhkf~h4pop4A}6`b1>rS zXPPtFm(hEMiWj_fYpR&$o0eY+8~e~t!|rG3Uh6ZB`_lOeX&?DrJnGf#?$e86-@be^ zxw3w92X1CPhY!tTNfB~BqM`xM zR{i|v4*LvdV1&e&sq$3GeXA17Dq|tz(t)i*E$ml_xCAvv8k*ldg5Y!zTp78vnkW;| zocYi_lMW3yv7})`-A%cLn{8j3RB9?=C6uN^Gv-Nx=K8#-amydx@?9|z7AP945+e+D zkbHz8M2Le<3u~WCy0D|c8iB}K@GWvip^Z(lxBz;JnD9}yqhe25eEt3AN{N^qpZ8w?uQ+wGiT^MY-hO?mt}l57H@-$ zRQah2Q9AaHvOcOLEy%|=xV}A_q&-U{=7=_>7UVVa7iuo-bs<2FX4YeYd6J&NmvJ4S z0Q6Nga^~qhl^2X}9Zaru!LeA{?ASS3|9yMVhS7Ro{c`PQC1{gdOxkpjSZV!ymD-8j z@gET5Pzt_hg6j-0nMmndp@__V2Lsc+P2u*|-JZQ!4!g%I*kwtGsx?ad-hg1DP-oki zg)_dC#xAaHh&ZUbTUMs;fbli(&}ix-#z`Rq{bWx3@yA7CT{^|j35U$*Z7!8ZALuv} zN+S)hVhIW9A5I+Z3lr>RTZ<&6_%tl4$=$wByOKCqi~yOh4g8B9e@-}q_yg$>(6G*; z9W-OFN+VHOmk*FCVNr!0MgM#RDfYyP#MKqc05D&X95nr=yx_y!eC;2XSS+BT(S8;d zHDsgCe3z?K(57Ieb7(vm(emxd{0giOMM0$vEnZwUt1Bq^x(N{tUmCVPfZ{bz!c=+|EQnK^gyeF|o}h0Ea+- zV|`A*NmeNpT_rhl=fm;$6RZJM9=I&H-K<<^r>xJlXk`DY%lD6}9YkqJ+;FiKnrnXF zU`iGyDvH_b92>0;N(Pi_a1sBF2o{;q>Ocr$sI+a_eABuVunzhS(GP)BUi@ncP0#6& z8Ti%BHB&kY_i>WYl zKa+dxv9K=V<^E}IS@$3G!uJr$fghvfUQb8+0AV_=)Iv10d-N!r8H}WbN;-AOx~1*7 z6j1qOl|sjh6CiiY z0jF&zmsfa71bhn!e-ky7`v&c}_tNp|TK5Cc(IfcbQ7!0&@w28B%caRyIWLx}Q}7j{ zjeKD(MSoD8iM`et)RyRoH7gc26R5C-#K2VBp{{xqCswkDZE4%#s`!L$m{ayNVGni)5er3SVo6Cs)47WOZ#vEdYE&?X?hf z9-K9UFHUEJ78m4IXkGh3?@)G-MP%@PkQE_cwaF?b!qC~zPbSizLS;p+%Nu_nmj$Cq>~@Dh-OVm)s`~>}piP7=RCCeLepVkly|R z>E->Cn@9ctUh!Gv6L<%_{-0J+EFa2x2kC(nCPEU^dudj&u-vN%y3*;*C(OTfF$P{@ z16S~{5I12UJkN&Z4*p*eL@DZbt?6d(3p|{!#!^@7f9%mxZJAWN|hCIa|?$8W2N4_D&XM&@#=)eH}grXuDMt z!>!x5Ay%@4y=XkBYH6H2@;4y$H-N{U;?lwcLgu~kB#BOhb6)Hq!5Y&QoTY=9oz11v zOkb~!$`PQ5DZrTrE2GcQLVA6( zfJGmC;q7eyUI0Li(?oq8C#zrd-u~WNuWm{XP)65;et-!qZzMqnGF}D$w-+lf3 zdFMshZ>^ffi+R(qrQ}x?@@+mVT88KbPTV+J(csnThnZIiSJz?mfX*5qcIkqZD)?F< zU@b{JdHLkwv>84}t3frO-#|-^^bg^))&K#2#V$0=6bRmS&!FduT6YD22tEf+<0xGh zsME7%poctcZ!gdY5T!`Y)wkdfw=mg;1AaddWMa}s6+O$weaN7M`MHuaSd`)$%^a*8 zkzCv#%9Q4f&#=N#K2Mr&20RBIWoS`DGN|+T3<45y!>w6vZf1rXLVx~PbW=f}y(*Euu*!jn<mb@Zvm!Wj-6b5^(e!wMpN@&H zsqx@A3+Q@b+exMOGFgZ$%7_D5sW4xAnT5y-ykCfm!T_q4r$NY9#4#(~9IVh~9@;3H zxoCqI0TO%c3jq_7pcL#;-lTz$^~g5I2xXtnvs9GLT@^sHrbpc%G4J%!hE1n^ z;%aiGgRXs(&%a`m<0`_T2oSkf!!vWFylh>jp%q;M_K+#y9*CjNdoOj@tSTI_Qh9ll z0s0#zS-L}+3Mr{~9PQu8N3&Km4UE~^3_j;l(gz%$j!XLLOw=$av1dni{06V|9Be2s z1#c+!bytI4Kj%;HSuS2OgTw=taoDJ2;L~8GlF2%qGO^j#DG6U&I_ETc$J&rTdf+8Z zZ4o4vIiH3;)Hk|D61F>$m&MX;l+{r0G>258?llwi@MEKn^BcYrdwKj-KcaE)U5vnB z(ND)kMznx5KD#4+vj6q8%Er=LwD;@-<2UjZnyr0(CUFUA#2XuX&yIx+AwGF})LFt8 zN|LD^ZML}esHn^Z4B#D+a8l3&;L$zl2T?nd6IQV1-LhcwpUzFe`9Ptfv;PCRLqjTJ zQ3oR*m<}Y&*@pS2goqz|D@wqWxq>A$Y2y>x75UAm0q!ut>(?#gHhNgNIsqR?M+fT& zB?XsoE$9e%HS)@2RycwOmXWE`(3#|cXlRV)PEGyoU7J^8U?>h+vL8YWfI7atvr}k| zNo|D#c0SeltL}K|hP1Sar{b;-04%@MoC_R9bVXcWKT#r}*EcSguJU-S@#W>&`HceM z;y%Y{O)O7|b$l`4=y2~@JsiqH6UYohHM+jIA}gzPmRaVrT&&+s&YhbBNgfal!zbE7 zyIv+UYTk4XBk5{na(LAX9c=!Qhah=y5DZ_jVQvSrdH1f}P#sp=yw1brjeNZN$qCfY zpB_N^Tb{_NsD3)JbV`16r32{1R3o7FU%%do0#Y;X<6REOpb4Sdi>#FtF8N))Aqd z=3BQ+>WU9>>jb zQCzh*qc>$3@+@(Ws+{bzJYG~{-($8|nGwdd@;>z;?(vn-(V7Uo)v<6#%?*(PyHZ+H z?SM04Y0$1`->VFMSW_VD`!okMv=-`+^a?sLjqQCib(!@4pN<%eZtO}y2J;CuMfxvB z1%HrAu4Z2wt@Llm!MJ8zUEBECj@<=~fa5z?=&GXdqT83-dAa$rCvJv51ikvV0P*I5 zAgzTTe7^f^XR|>PzTDwDTINY7uSg#kv7?_RZkK65w4o@e3G`^Nva)|c+vm^Eq*t)I zM5#rDxDx(gf3@E4cE>u2+ujOsfg2(lG+(Td zv;n25%Px^laXHTUIuBL42dUndFnln7n>5LRav8H7s`O7rRr_!K)W;QZAm1tMUL09? z(>&f5Gu5dR?c4U%2@Bw*=P-+jaKPHEV{0pi!IDAn8d|S+fb;6rAB7(qVplx(?EF9A z8KrSFwxuz|OCA*vlY*OgH`e+e0L#CPx1+606u`Zm?u5!LTx4NESC>#coKQB>S~kK~ zyjTglE1^6^8r68q6wmXSy{p0Xle<6E(3pZS?PSq{LiZfFzale&wmSYGC)B%giRJ>Y z$8*zHpzW`fP$nlwaDPMdnQ~Q*>ptEAg)b7?Xi5MFQ|bLRZj4>0&!&%+?u|E1Seb89 zofN2#rAxM?G^j+J(e|1h55%WIfN)-MXEV)AdOSM0pv^l=$?fOI&@*hPg{%N`-5t{HyC&I^&8Dm3u<53aJcX8T#H{`-6wr7Qx|0>@3}Bj0hB6!j({%c$D8DWQ zjR~4FPSJA<&4c@sX?VnQ;S$D$W<%~PwL-M_p@f7lVVyQ-LUU#YHqYrYCf-_ z(=;nFOP%`sGHuj21R+CToo~@>rI{0Q&P(MKUPw0XMV0^h*#cy1`aKnu%7-&mVS>Bc ziTz;ojM1~4_3lb4;PiX}6FyK8+z#0FTf)e4p2I~wIz#W#kE-2e!GnXji|5%3#q2aD zZmpay;Vdp0^Re-~;i;#m>hflCX{eePo{Tg)+in<>WFieGp^Qpzh>GgEeD@;ZC+#aH z+)Taiazu+Q9MOVkv<~dyCt=OiV*H!VhI{3KfW^Ab=o9q;ChF zx;(qIROHI++rMkLuvp;DR(Yu0$fuQB3Y3+_*f3eyBq5v9x65FRcVHbJJ&GfD_^1y6 zQ$^{wj9%SdKE8j28gV{~9UGMqAmKeK@ACc1e!-4mokvJ-x=evpgZTWJh)9L^{#hd1 zU2SHPx#4?(nv3hNy7IbzI)Cf#JKXU3hEaev!zN2@+jN~MT)WiWd5);*B4!_qNoZ^T z`)fH>lJI2u1wtbS;QKutQBx#Bv{GTAWb@*Fk>|yl!0pnj)8~b*i^(z9fdO z-^tzkj*d%UYt2Beul=mKfRE79j&cBq+fNp|V2*9Qm~f>)BSKKK@$HmLzR^lMq9uD| ze&MaBMQ1rQ=q1CdSyUpt*a06%YKycE05u4D#OBhV1=ZEatKzCGB0NZ^2bZ+jmF`^T$;T*TC-;ubPA;pjSb?& zYpSSgrhK+V^K%Us-ZnfKybTWsSc=43_iw$yN_uXxAg}0IE7W@r3ZbnOY9^>Wy!^x} zX@25Rhq$0|V6{&nQ0yhidG zRvpy+W(Bftlpp??lCsWymSfx^&MTlIl%AV=(%19&bW^~FVa+1MY`oJL&?h#zMbY~e zeH%kAHJ7mb;>{IqIV%6V7oh)pjbcKU&8fCXFCKw%nk_uwi$qY>)5O5Q@C7*k)Shf+ z$v}gbZE~mcHn?ioQr2nHKv-b8;<=^K%MgB*>rt7aho{O&)0%kz&WXVwQoy1vfx0#o3 z$n6uS9jqppAcG{~`sD?i;O6;t8G>jd;vgMtzYvw*C61h76w;z`D8iKJHaLMJvJX$v6CK^BUn^LGirw5N$k24Z4PPJyet-R#8G+M2oHp8!NqM?DzBoZ_|=Y@yW zu}aXxc7CH~YhkOVK(m0&Z%d11@p#e<2**fhMLkG^{@At-3TTTYzo7TOSq$|x@0Btu zrlR(DnLDs8DtGTDZtNUl-bXgWu)umB#HC76u0yWMFPeFi2CZvq7Lf}(G=rg3n<{6# zHFa@P_0WI$oUm23hWJ8Y5x0623gElt)d&0q%OA!pym0SXGWF>nb_sYJsJT_BOKBV0 zA~V1d+u2^zRUF`WEFAc1P{z< zCPPciV|J+fHOoV1y=85%_TBhN%T($2ALmHhQ=i z!SI#!T7Ux*d0ZkV^BmyJxRVr2_Nn-M;-}BYaY!?5SmVy~vz!|JTM(=_0Dh8%CWhSV zXJWEorwR^y$lukt`b^)ivz*7}Q!}paJ%R~aua(&MnibB@cGaVUG!^j8$v2bUep*y( zi^pZXfkpSzqgDIB1*CzDa!c5KL7v?5nRg4KrpOV`W}_diJQMB#+~BgLPzq}Q-unu#DgZkya#s6@~3>l6W55)0IGC^7+^8I)fzS`*n`Wka`|G6eHb z4WT;@b}CDrsuDNfZISE0-aOda?Wxyb?;TX<_v&)+<}_1ZYnACu(4E2PAwPK)V;Bkm zqj{T?evv_NoyZKBYEZ4wh`V=B(3zHLs=B{{qT8xc$-cG=xemKTEAuJoM^(pKjqP$` z>pWR1UH8>`(wgsQ$W{;kycP>K$5npQO)a$vp16sXxHMT9g(Z5F5JdkIOC+QRLSBSL z4j?j@ORHVX7uV)4(s5g8t6tbHdAP1(0WEXfZ!=w#I!}CIRHMUWRqtg+L`>%D+Y(F; z+YzX3j_J`#$24$}{PT*6AP~Q@#iUfQIBl?r3KXkBgBm;{t%F?RmT^Vd048-vXftuj znl}M--q8jV5*F454u}W$?Llg8eN>3uFR9ufLUoQznb@EWdOkYUg(A!zJ=!cXe{iWM zYrPb7e(_-LY-#)Z`7M&lT4sqB_fQB^bZ{T$!?x!n6hLZ_rG??a{cP~!g=294C%K^Z z6Fl}23K&5g=$!MU_DCx|`5x1B`pgFYi)ga*6eHUCa{)!>l`$pgmgYWp*01D|mP5dP zJO}Fld*`>0=z?vDnrO^zGef0R)HPA6dvOH<(KuW>RtUO$z*bQ4tE-3$UO&D%UJ^3D z4~u5a&uPnplJE21_$$Q48M$)Si_x4l_LTIothPlZJ_iG zF&@h@j{iozbcq_FcrYuzZD*V@H@~q|0k7_JtAep)w<|_##wi{U9N^P=()5Yza_TAk zV+?dBIK6^mpVv_YBqgEynY&8b83#qy>|0!rL6ErNKgtjScM9X;M6HGo?So5`L*EV; zA8IGGKDx6>`#dDGOrR02$`{rc1Av5XQiLQPJ9g1HXIXOh-9+S0*-jWWb!R}H3BKBV z8fK(U9EJ@IIc6bW>aMc6jwLo?8WTKZRO5{5y&$B~{V<(O*_^?=y|v1NPME#(C(wq( zb4L$MX97=3eo=C0WUQk!by5!9XNy(Eza=$4G8OVoh+Gx zu4Ka@P`pnRvM>ka*&DW-Bxq8-!GtFPXoo|w@wMDC%6(m9-?wkzVo{?TEAYk&U`;7vjj68BsFpg}b>Iwf}p%32ggS$rQf z_#9q?Xz1$V*Dfg`4a0`)L10f;mO+r%B9l+71Oq&p4OFSnvvjWYP@h%UhFvh>8m3I7=kfI6u%$}tsAN_>Vq zclE=(?@J;%sm8gjR{?JKl>z)t%8ehT`A)&=wNg(<1tI>joa%@j`Ru_wO#nfc0W(;R z{(ek0Xs0-V^=vgPAi3Vh5gmSH4p*Vh0=oBz^$R`&aWH7vBY%2?eU3CT&`Z>~y6u4= z5xCG94F_&FO~Azeu|eboNO{7?!rgnN-<(bAskc0#$>k;4Y2ZHitr0x{2P8cF5Upgn z!rJ|?^i4edJ&=Kq?sYA_X*$lj-fm!{+8#J)dLIUr3>B$3gMeBPcHrHd zDpi_X;6jTEGy~F$`%dTf=)82pMCqbSLseia=-Dfb;wger+UBO0vZJivMGF`D99Jy3 z0O^fHz{k>RR{DE00;r=x$3S_;8%)U}^)TRW*jbJNU1#Y#NnP8!peJ_x*rgDs3;R`W8N`>Cwk-_~{-$sT7eB<2c21+Ar(Zy4q$kZUoqNg}(}4<(UK6Fb_V|HcO? z+pP_h6#sw#8BV~Kp&Cx$heMV!iREz@ffrxjm5(KEp5k2p^i4` zp8r6(CBCnEE)B9S$X3Fus||vItdfqEO%&WlJ%|;Oes}}gsS6b}NpPr6GfNPeD|pG> zwiYOFCg>2L9k?$hxC?v=6~`NNiN$vjnT@9|4;xuV*><|p$fho1oHJKsGbg57)HzgQ zj_q~H^)M|g5OWMuC?_Dm9rP%OI~HR#lmS49L4OI)()Y3pr%#>rx@po-y{Zb0rUW1cfSC8B-nQQTan^}AY&8lJph{RYw8EZA(sd(7-ed`=Rk`5yp+#}c zIVE08aX>040ETtZ-30q~e{O3Z>|!GS+NNU>^YF@5Ij7e?E90mv#7HhI>9CNd^sa=) z*PL%IiL&vv($$T&tnuYGQ#oECPGbEWB_K{q>~^knSRO9}^lyek0e=XgBQaW~Qz`Iw zYhMms(S?RjqojNQy%xt{_ErITY#S>0J11q*(qXUvvBcS53FTht49a+G=iyx8kl7{A zq08qif`$zH@N~4aY-hnatBHr$KG#$y+?r3MzvoZyAo-v`4Qhw5 zQDc;^C17^*a@7-RjDaDxv|&QNQOlnk22{cB7aEs@EG2Dh2CgIeCcIjljBu}~_W>G) zmOfpwJXSmPUirky6U)y;NI-05R8U%EQiY9`z`a}68nc}DlN=CP3wysO>Dnh?^Ix2B z#rXvR3Lg%&5t?^DKihG|nM2}wTISyo$ZF4@3p#0T=oC~74>TC%c_?S1B9KOm__chNlc#UhD4<6W0SOW%g9)1~ zQL^MDK@kxU8WRQ(utAUv5*oS*k~7T_0g)u3K|qq^sDvidJ!|86b>CFIJNMn0_oim5 z?k=kuyZ8S0AJ_k{Z>{yMKGMk0>ijv)&=QxSY*==KE7cx&owBzu@}phFVhyA3ldc{T zezIpj{`L)}1pIf}Z83i3a4dGYGITgeRmO8O3r^3Th4FIU#!nB2@MWkDd-i}-C{dtQ z0`*)uZ|k7bX7C1^)c*6{Am6SCC{UiAl3QF8MwZqQSgx%JvY3IgbxzERh4IFKmhq2X z9S)g@Brx1LH5v+#uearRFKFFMk)c0G-$ih%O!@MK?nQ5bR!Y5QBkP1uJVU!v5x#b3 z&EeDj0_I_hR!3G>bCAC#FWI}hKN|8*HDp*sxR1So)}&;1PDoGO+*%uD;&*Bh_QA{? zubWp)h3Q{7T#yEGB@&0jmCJus{;n0DlGyF?nL@W1BjQ+okVEFJ3g^td+MUUg%Hvw* zcL3G^tTXLR^GFUNA=d~!W?u38D+UE>tsFjwwZp1Y`$Z+h5&UbaC=)hjrD1PyJCSFn z!4xKt<2frfktvH&xOVuo-`t($(6a&tR~$E9aCx2|d1KeIp+j`}f>+^eC3;Xk)^d=^ zaK4((*H=A%TixR9_7$S*7avbY`;(F@VOoCgdB|!(8bEiO5z)}9&ukNFYsO;@&U_t4f!XWo#AlEZT?G{;jc%tKR@~PIX?*8 za``Uhc-i7t+ym`d$;d|Jw-wq2zx}0kDfGAufY~^(y2}JnvKn>m@Q9MdwK2vx`K?LF z`RY$n`5q8;zC?j8ncAE7WYX}O9!hP{w@>~!7bt3 zr{wmMEeC)O=RsVMKJ1k<-M{EgYP#^C|1RQFm8r0E#9KO{@>wY%^Ba?5)`LfbVRa(R z%*+`Jp?5k;1bR$8;z9gL_|06`*tijCes5aCtUB)P(zq%C9lp8rY4o#pYzzKcE>p*2 zuXN|tua^-xC&52I_U=NTFDbu@x|LCFUTvIGuYRo&TkSJGPJ?GN5NvC>cM8Dei!kWZ z0Leu}L}bajx}`1*$P9`c5L5@9kR&DG|M@M?&0oI z%|Gu1?dCu$T)NP(xoxW#!5Bf@xf5#9qe1 z=A##1W+p_Qm`D(-UftxB%r>h~ZX&+y0LDRLBe*XFR3HwPsEt1s-(S{vBW}j48K?70 zVn6d>Mh+-hvoTG=7KEj`OGA7647WWlWp7;O(n!RC+Pl|asfTbXQ8!37 zwzS*?1r(Jpc7-fApxQM>=k~Co0^UDj!~8S24itiNx84%~^WEhpXwT^_6=!&O>PWj3 z4fKq(N(g|6Xd_jpo*rHIpKLYBQc1igG*s-BJ^GP;d6nx~TZtd?Lh7YG0Z<4JKqqDc zAl*>ITz^i?0PGX6eQq&6)bkAG+38Ahe#(4Poq)L4pq1eE+(op`Simd#Eas%3qv3_O zbPIKKbV&eylD$`N8J!J`6f#Le;GKLPF`EJ-j(#?UZ-QyKe$UDHmlEEec(JKa*Q?ll zOg_N>RM-O&95I${o|`#pR(;2agx{NKF@zz2H4EJltfkP|M?Q9>{q1uEUe%13A&{L} zCN|dJc5mYi&0{mT3|qVk=M{g;b(R04=uUeBqM)bvEl0-3Y!6cJ{J8NDQHQ70s*bR; zFGaP2Hj8p6yrl&=2J@!QB3ln|%EFtC3@z&paR&Zt;S-qE*W8(&v$C(TG5Eypor&v| z?F|^lX(`W{FUA}T6(&1d6ccb5YR{czneFimA{D9mqC0{f4e4EYf38aY?i;(dxK!C# zDFfo9d3$>b@A3W@&wFu?ACJZ;PMT#KpPO`(t@py+e|vNvMWw)AQ?D*yiT(T(qAG8= z^~0h-X}`Hf1L2*D>hXQa zpU%AgLB0kp$ti1TF}drowJML8iTI5RpK(tws#HKs6sD(S=rSCtIU~5eeZGjh*XROp zcH5Y`)*^fS$dio`B6T_$V1G4iAXAWDgOJv2|M%_;j|Rz&VuVa(*gzQx3{zAua#Gd| zB^dtN{roWQ&Y~3-jEs1p_`aD&-2UmYOfi15Pg-hG**X9RMAqG&e?V7ZZH08CflIjs z*%UDkCVB*7uzIIJpL%*lrf9zR7_Mh1?!IorbwmT6{9|wsZ=U_)+qZ)QUB&R;022R)habHi@zFt>S)-jmRJE zfTol$+)gl0C@VfHIFmgi{jhOtOieRXFw!)n&7ZtDUN7DvC%7NpQhI6vmUfNC`rqt1 zs-;e4F8z09u>rozZ_RH_gj#U1ep()OxSQ?;H0c;zx!jD)WD1G_xf<&U$goS+LwAh2~Hst7e9nMgxUMt_v| z70oiiPNjk^w4K%TEBMwxh*Ud&+w{9;bmn@k3iu8xI=AA2NL41hI9ouCJ}(}|72azE ztSzso(*rCHa0)23TAk~J<2OQG^S`v<#0xhV{>@awg9aPb=iunX$?~}_$K@3;(8z#Y zaqu`f0S-}pMOA9MdPl;vyx!uX%2JvIR9wlj;iq}xu5USjx1+ZJeqsM@BQ=nLivY3? zRPS`yA7*0570+k)fK=c)ZQeDir63$s_f{yrAHQ{~mFC9cx635__`Gq2Yl`t@aSxw` z5IaUs!=TfMj2AM!+BK})hIfuyWmjCV^*is9gMdbzxVB82#^3QK6@d#)l_MW509{Oz zGWS&mXsxHY*CNA8$(uaYjn1uT_8 zTdQs0N%P|MHGl;wI5&IzHmd#L?Wny$yW4=(V8VF~%m+>cq&U9ZH;&^BWzxQVJAYF} zA@kD%n*aG`ZbK%TeF5)-ktdls8Nh#V_xj(r5Fn5L+)0qX{-M#q&chSdP0bO5+!r|u zyVMX;7x$h(9tBbHPZ}qXXa0#-|7YwSe=Cw%bZ3*S3xr1tWs{t^Rdo1iJ~=tlk&zJ@ z-_@+9O=R&8cV7U}hPn;Ggzyh6BFNL2S1lwC_>>YB64Lx$y_EwvPR{aVTT?@W%AbG! z=`#^+-v!Ke=#D499$f*dD}<>I82KV{a}nZOW;Ql(U9Hf-io1S2@3-1(4+_b{&DD7V zlj62EaIpd>S2V;q6}dskfbaJzzi;))aDt&a0*f51Yj}+YB|F@cM89K`^JstfPpZI<4^O**8+x4i{I+_4RhjzOiPpC+u3j} zgGX%;l9yDC4nwpW^z+-3%{HEY&*IDVk3?A3g;N5AuHiRMG1@=~;!6InH zN`|6tk@PnD&0vyy9d_zXd-d+xJ`t#x5rR8N^7!QO&bq835XF74A+>Tut*MQZF z6fI^Chv?KdZ&<5VI@Ex%5<=X*B>RwOq{&3z20&1oEYuAmJl z4=us(D$Rd~Y>4hizW5aJnMQXw=T@Zyq30*plE1i-kVCOG`SyD$av8Adnn;fz`Re{cAt~3W6P!aaxIY<%lp|8u2pv zIL-KSCq+0Rm*TT^ahljM@%tqnldafPph9&5=FgD%?_bNn#;1x6WIQ&(dL?e>e10&y z#7y}loH9-l?s4Ob|047|3MrW+8m9Fa~_EK7k?< z;TfguY)LqEol$WxNWFSUe)~tQ;kB$Ku2?@^J=$~&ajOnM zjCmJ$#l`gyerg||@`<*@+@}yVx}S-&OG|MFJf?KgUdYMI^Ppk1BeMe-Ao4atI-B;q4nBc$Z2+VMZ2?nYJjtvoZEiq|J<4x3Yg{OgmfEe@3%bVpADdoVX zUFbgYo>)0>7O3rKfFl}_Y#?_XfsT40ymXTFN3Aj9?xU+v!6+*;eW62J( z9hZpytg;S|+6+d_&H=0@eeZ6ifV&A&O*m)ihjPk`x~{%rI{-r295Ch2zm z8tJ(77hVHSUGC0^C>$gkeT|-w-F9KOLFbC9ufOqC|@+1Czdu(nBnAA+IcxaZ% z+sELKvt}5YdtZjhN~-t&rTcdjij#!o2zYtSb79V?YW-Uf`#Gx*ugSN8X~(y6JnWxrdWJzy|Z(^37?gDERo>UAlak z5B3L)WaMn3HRTdrDQWEY?Qvb!H@Q8)#6hvlfO%i@I_@D+&R~Q_DcN@7z;>`ej~E`v zS>4%?ZZSPsGThd@C~q%|Vm1hI7Z&@`ln^wQrun>DNy?$ zlNLlo4H7%1ourPlB(f=6IMo{(f0!gPkC-{0RZSLJ`T6x#xzHLE& zF`a>p<&^a^cNRP#5odnev)gr(Gm5>PV(+U8yMliR^PufiZ`ZGNsp+WZHy1`UqeKMz z;{v|It%NZKswh9zCJ!yC)mU)#%DTN)lx3e7KQ+Q7M5#8cc}{BY$!$7R(uv&;_N-5eW@&0298;`i)~5)E&wD33z9>jwX!u;kFC-z_t5!^#rP62uUsk)PTm zo-L|g;c?^yNZfwJW8{Zdg;S}k!QLdZeEZg&C?B+HSw@$J1%K5Rb6V7|p4aSYhI8{c zgI+1j3ph{3iwYXB889`*@b|i4>k_^R=j@KaFA#>o-j|qFO&5hOwaC zohA=HD!5q`)7PwsN3RwJ|0Y7lB4GJNmZ0%+6S{y4!Z0ibm(t}muJ{yts~6-v63zF6 zLmh@!!3-4Xn&zywYP*T2mcB8~D}}+w{Na!+R0;$33^ZB#b>=R&pV zXfHZVElP6DVFQ9 zN|>aiFhHAW5neSV<)-anXZ}g;8x;iKeW(py=T>4?GSO)MF_go6o>mE7`p2Y(vM7Ou zrpC-he@B{eiw8!s<_O}_<9p2fy5D1e56(y4I*S3A*<_~+efMe&*Mkgn}8jXR` zqi0VPhgLa6>x*3J#xSVWM?Fz&LVbN!cYAy@(vMr@HB$0<1$Ze8iNZR2FP_2>WRs^F zNFr6y1#DYihf#?XAO-a1K7g_NDI%rxhDwZ4Ehby^YN~Bo`5LKnxnUh9hILUWDc8@Uzq0PrQjdF4* z*6V-)?tO@qOZz&TUYmt2Qee^I${C07tW44QY0-{OQ9LE?y&|3p^S76PD!8C@YPNNv zJ6M{U#rFC^h$Q^**Se&CkwPybu%|iWapM7+fzDP(PYftV+hg=`61+*4Evo}QX-mQasAh#w81A1tMd=Gm zo4|lT2DK~t!H&ixYTeP5~0ca`Gz$7{b$bC@<+3A^o@a&dv}bnW z$jfdx@@)MOdEs#hDfQN=9*)|fv*0Mg$;oM`Xi08fEr2<^@ ziO#}Mdk4}C31Kh>-EG{X-vu<=>P?kZ{ki}YTIVZe$7ii-t;nz8U_8-X85Cczj&+D> zDW(N7it_(r-x5vWQHz?HYPZfeK8t90>=I5H$-;~s9l1n^LMHNQX=z>dqsGh0$%)_l z;_gS>-0!*YMfp@9QzsaD%5i4Ch)3-)c~!3xCq8f&koK6ICfHicx?gw*hj#D<(2yUP zMK|~pEp{I5V>%{;W|y*q6K?`x;M_U(jV1Sip6Yo2VB?g=?;7px)(sGP^(Mh*sZjvO zH)}@+Nd{aAA3j`?U;L6X(^I1Lpz<;5w)-9*>AqXwqg<#Ru!)coJW*NBjmg^HR>(|ctt~!lOCN|m?IDY(b2y%Al-?)(k zRLnRqwVv_mm#pJBpA`6#9S+!B;u}?b5RmKCk^0;w=0!gjj>|u|RzI~8W;=H@a!b8pPqWtulC zuV+cOItsa<=*?Sa^>gO`Z5JI@E!+DbdZ;a47RPc(5J?OHx^QzHBPcgjSWAblShtTo zJ%-@leN9IP3#Pr5j^UF(RphUk<({*MMvP6R>}*1crvqpm9i4n^csO^hHcT08>brOB zK3mzhmR6cs?R=-SD{WZu!xqXE%8`gL_e&s)QVGf2yna>A4xF`cyw_LLlF%%==gY2n* zz6hK@f4wC}5>bM<*_^(X<|)Lx-s0X>qNjo*A*Qo?P})Z+f)6UYPf z`t`7Mq%UN~u`RG=m?p2RbZ}ulsDgW5wg842Jkrdu@ZFsU)m%&g()p#4y{NF<13MtV z^mcdBRMm(x$=``og`P<(YikLg6$kL{f_ygwU{#XwT8OKEd5jmGADeCiju`);I#0J> z9MpMIwxJee)X1x*Y&s*T7NmLrJG$4VKiLUM5CwSw=$V*$K=KxO&Kf}I+$Vsw1}eOI zvWyA}Z;f7=2b=*5xJwFQVa4(K*|PmK(vbpY>FPO6y>fEL=Q$G+dQ4$SqH2namfnGG zf5rwXYil=nbqvwEp;JUB+M3`c%JROeU5|e`jO1AWO;!zC=(lwj-2q7|!2FsDXv_>i zSnYtzjg5>XudJ*zt5#)wQkZUz7K5BWuiw9a56*9nfUh`%A`jkOuPj;FXp&NaF+gUO z2pN>nI#yP1p>ueV;Pr};#V3y+U&X?}AVZ19O1gf1Gn-!<$k^%8CXWN0Zs)leK$fU& z4{gL!BzOjp2m^vXq+s&dA@>|%VMzz<$h^oDvi*#WkEhktD1k4L?1e%QlUK3bIc9{# z(FP>-2AIQxLpbH};7JYsBtR$wumnI|kgo&DGk|2Tfm9USXwcIQZ{Doe9)LLcMgTyu zkV-BC+y)$=EiqDV2}p?r_H8qOEkd}P58$0{_wI)(Y-Si_T~CG|@b+y9u*7cdc_#gr zwjc5tj(?~CF~mk&x>rBP)F`)d=>?=rLWT^<#DySIxyCtuTdVx$m8A$g29+S(Tm0rT z{9ykI+yL#n!`9_c5}c@5{$i^MfHp z0|N0u4j?3X27p=;jvbdEorZEfqmpY9^aQ(@T`<2sKK1eAJsb-6zqH#!^-!1)OS_j` zfP!LF0YL!0-4wv#b(P^5U=wIb0Sn^p^g8EohIV|~HS$L9uCz7`!VxYmEkqqTxvSBh z#70J@|IVWd2Z2)CG#qaBbMnQU1+W@?+&x}hs7F+)UprTzt*DP&_sfw=!1aI4p776s z`bgFOp^4(ZzexH+u`LMVX6QwSay5qC3J@Sd1q}+7KO!s!MVkYhEKu9%Jpu3m*ZxbH58JC#38*hEkPvs#$)iJt3x%QBh z*=~En(@OP>*W+i3k@9q6Zd%$seH8=o@f)j8lcwU`eaodva((3}{k?7XC+jGA3~d9^ z4{p$&Kb;h{ zye8KiJ6A(N*Iqq+{rOQ%d^=+-VR@l|K<&6G=u(w@MbXnm(6y>MvSi3eUw_vB$35iM zi}vQ%=fek0S`v;rInFW`ZMP{_jl}gRwqCO+E846`Cj?$`n#u~o$M}14m8V2fwny>l zMpcPG?W8>}kD@tIv!o;8JBcr#RN_bS=qj`b`qohcdL;3pNn9e~Nq-K0WVu=|`?>X+ zw9L}0-0pAkQr+A21JS&?gJt!Gz{zwW8T?JGrE=SLaayfo!Y`gCWVM^@eRF+GP# zn2C1d%28SUiz!=iW}90sB+TY3e0t{iyq7`24;@cU|DhMFf?A5&O|lF4nKitktXUQB zg0J*-5RU{+=wcN7m$1>og|AX1Rz`AFmB{cW=#Lsws{~3S2wL8Xb4iHxp6^)})|;IgH7LyO-Pv@Ov&i-or~oPK?!HF}b+!Gw{&x!|L$7|p zqP3$@hHKRpq$%ENbJD`xr28zRQ2zIM4I(koTELgSUEGbr4ri7>7n_fvE|3#3<#;jE z?BrK|#1h|h<8WP4%zd)%!~TXun=kTwBhJ@gC?R;qr9jT5D2bY&LXXcSn`fJXJwM_tz40qm*NkJ?j#f49eFW<368@ zMT!;E;|E~*e{hg^skls6^XHdh7n67lWy5V+g6h}E=Q-!N<=a+G>hbCSMPhNDNJ=;+ zoCC{)$)@(fy~RfJ_)^=+Bzx4;FHYO7djn2Ap~6U<>iRs*m2EeIAz>CWow&Ag*vr=Y zW)zpFEIAO(_cgK>uS(oif9bzj?xdxuFGjUO*4UE@qSTZ=^q`6QZXrvnf<={nO;9?F zaF+ZOOe*+s<`5iDP^c4cc7+z|PZ%V)4x9!o5QS0_fu4Zt;V%IwcUH$xEj_nnww2&o z1GnVN)%6cZQ8h85;!so#;dJho>mJ0fdOPyVj}mTQcM8?&8ar}qzdS7QZe}Rv;Hkq$ zZ)QCIRgwYWeE97HLOS=Kc`w}b8#Dku0{)%w`7d~Me`e>jUP(X43PZrX0oM|l_*Q67 zO$-l;wnjN7CI-(Td-quYijdJi-wkO=ot>PVKI@`xv^YsP} zyTK2Cc*?{hPr(t6$%h`5W%QSzT>kwA)b&5=Q26%0r(sa=-yg<*y%l=kAJ6uGb<@AP n33}k)3&4L(iT_Wg1a<#Oe?8W;{ssZ4FbaKH^HR=*8xQ{n6_6cu literal 0 HcmV?d00001 diff --git a/frontend/ui-tests/yarn.lock b/frontend/ui-tests/yarn.lock new file mode 100644 index 0000000..2a12f71 --- /dev/null +++ b/frontend/ui-tests/yarn.lock @@ -0,0 +1,935 @@ +# This file is generated by running "yarn install" inside your project. +# Manual changes might be lost - proceed with caution! + +__metadata: + version: 6 + cacheKey: 8 + +"@isaacs/cliui@npm:^8.0.2": + version: 8.0.2 + resolution: "@isaacs/cliui@npm:8.0.2" + 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" + checksum: 4a473b9b32a7d4d3cfb7a614226e555091ff0c5a29a1734c28c72a182c2f6699b26fc6b5c2131dfd841e86b185aea714c72201d7c98c2fba5f17709333a67aeb + languageName: node + linkType: hard + +"@npmcli/agent@npm:^2.0.0": + version: 2.2.0 + resolution: "@npmcli/agent@npm:2.2.0" + dependencies: + agent-base: ^7.1.0 + http-proxy-agent: ^7.0.0 + https-proxy-agent: ^7.0.1 + lru-cache: ^10.0.1 + socks-proxy-agent: ^8.0.1 + checksum: 3b25312edbdfaa4089af28e2d423b6f19838b945e47765b0c8174c1395c79d43c3ad6d23cb364b43f59fd3acb02c93e3b493f72ddbe3dfea04c86843a7311fc4 + languageName: node + linkType: hard + +"@npmcli/fs@npm:^3.1.0": + version: 3.1.0 + resolution: "@npmcli/fs@npm:3.1.0" + dependencies: + semver: ^7.3.5 + checksum: a50a6818de5fc557d0b0e6f50ec780a7a02ab8ad07e5ac8b16bf519e0ad60a144ac64f97d05c443c3367235d337182e1d012bbac0eb8dbae8dc7b40b193efd0e + languageName: node + linkType: hard + +"@pkgjs/parseargs@npm:^0.11.0": + version: 0.11.0 + resolution: "@pkgjs/parseargs@npm:0.11.0" + checksum: 6ad6a00fc4f2f2cfc6bff76fb1d88b8ee20bc0601e18ebb01b6d4be583733a860239a521a7fbca73b612e66705078809483549d2b18f370eb346c5155c8e4a0f + languageName: node + linkType: hard + +"@playwright/test@npm:^1.31.0": + version: 1.41.1 + resolution: "@playwright/test@npm:1.41.1" + dependencies: + playwright: 1.41.1 + bin: + playwright: cli.js + checksum: d9877e777a1a7f60f097df57b6abc2478e2ae342930a409c8546c8aa40d6e206cbc16bf1c71b23414ac3fbad36dcae1ad79635d7f4eb705ab54d3c705e82ea04 + languageName: node + linkType: hard + +"abbrev@npm:^2.0.0": + version: 2.0.0 + resolution: "abbrev@npm:2.0.0" + checksum: 0e994ad2aa6575f94670d8a2149afe94465de9cedaaaac364e7fb43a40c3691c980ff74899f682f4ca58fa96b4cbd7421a015d3a6defe43a442117d7821a2f36 + languageName: node + linkType: hard + +"agent-base@npm:^7.0.2, agent-base@npm:^7.1.0": + version: 7.1.0 + resolution: "agent-base@npm:7.1.0" + dependencies: + debug: ^4.3.4 + checksum: f7828f991470a0cc22cb579c86a18cbae83d8a3cbed39992ab34fc7217c4d126017f1c74d0ab66be87f71455318a8ea3e757d6a37881b8d0f2a2c6aa55e5418f + languageName: node + linkType: hard + +"aggregate-error@npm:^3.0.0": + version: 3.1.0 + resolution: "aggregate-error@npm:3.1.0" + dependencies: + clean-stack: ^2.0.0 + indent-string: ^4.0.0 + checksum: 1101a33f21baa27a2fa8e04b698271e64616b886795fd43c31068c07533c7b3facfcaf4e9e0cab3624bd88f729a592f1c901a1a229c9e490eafce411a8644b79 + languageName: node + linkType: hard + +"ansi-regex@npm:^5.0.1": + version: 5.0.1 + resolution: "ansi-regex@npm:5.0.1" + checksum: 2aa4bb54caf2d622f1afdad09441695af2a83aa3fe8b8afa581d205e57ed4261c183c4d3877cee25794443fde5876417d859c108078ab788d6af7e4fe52eb66b + languageName: node + linkType: hard + +"ansi-regex@npm:^6.0.1": + version: 6.0.1 + resolution: "ansi-regex@npm:6.0.1" + checksum: 1ff8b7667cded1de4fa2c9ae283e979fc87036864317da86a2e546725f96406746411d0d85e87a2d12fa5abd715d90006de7fa4fa0477c92321ad3b4c7d4e169 + languageName: node + linkType: hard + +"ansi-styles@npm:^4.0.0": + version: 4.3.0 + resolution: "ansi-styles@npm:4.3.0" + dependencies: + color-convert: ^2.0.1 + checksum: 513b44c3b2105dd14cc42a19271e80f386466c4be574bccf60b627432f9198571ebf4ab1e4c3ba17347658f4ee1711c163d574248c0c1cdc2d5917a0ad582ec4 + languageName: node + linkType: hard + +"ansi-styles@npm:^6.1.0": + version: 6.2.1 + resolution: "ansi-styles@npm:6.2.1" + checksum: ef940f2f0ced1a6347398da88a91da7930c33ecac3c77b72c5905f8b8fe402c52e6fde304ff5347f616e27a742da3f1dc76de98f6866c69251ad0b07a66776d9 + languageName: node + linkType: hard + +"balanced-match@npm:^1.0.0": + version: 1.0.2 + resolution: "balanced-match@npm:1.0.2" + checksum: 9706c088a283058a8a99e0bf91b0a2f75497f185980d9ffa8b304de1d9e58ebda7c72c07ebf01dadedaac5b2907b2c6f566f660d62bd336c3468e960403b9d65 + languageName: node + linkType: hard + +"brace-expansion@npm:^2.0.1": + version: 2.0.1 + resolution: "brace-expansion@npm:2.0.1" + dependencies: + balanced-match: ^1.0.0 + checksum: a61e7cd2e8a8505e9f0036b3b6108ba5e926b4b55089eeb5550cd04a471fe216c96d4fe7e4c7f995c728c554ae20ddfc4244cad10aef255e72b62930afd233d1 + languageName: node + linkType: hard + +"cacache@npm:^18.0.0": + version: 18.0.2 + resolution: "cacache@npm:18.0.2" + dependencies: + "@npmcli/fs": ^3.1.0 + fs-minipass: ^3.0.0 + glob: ^10.2.2 + lru-cache: ^10.0.1 + minipass: ^7.0.3 + minipass-collect: ^2.0.1 + minipass-flush: ^1.0.5 + minipass-pipeline: ^1.2.4 + p-map: ^4.0.0 + ssri: ^10.0.0 + tar: ^6.1.11 + unique-filename: ^3.0.0 + checksum: 0250df80e1ad0c828c956744850c5f742c24244e9deb5b7dc81bca90f8c10e011e132ecc58b64497cc1cad9a98968676147fb6575f4f94722f7619757b17a11b + languageName: node + linkType: hard + +"chownr@npm:^2.0.0": + version: 2.0.0 + resolution: "chownr@npm:2.0.0" + checksum: c57cf9dd0791e2f18a5ee9c1a299ae6e801ff58fee96dc8bfd0dcb4738a6ce58dd252a3605b1c93c6418fe4f9d5093b28ffbf4d66648cb2a9c67eaef9679be2f + languageName: node + linkType: hard + +"clean-stack@npm:^2.0.0": + version: 2.2.0 + resolution: "clean-stack@npm:2.2.0" + checksum: 2ac8cd2b2f5ec986a3c743935ec85b07bc174d5421a5efc8017e1f146a1cf5f781ae962618f416352103b32c9cd7e203276e8c28241bbe946160cab16149fb68 + languageName: node + linkType: hard + +"color-convert@npm:^2.0.1": + version: 2.0.1 + resolution: "color-convert@npm:2.0.1" + dependencies: + color-name: ~1.1.4 + checksum: 79e6bdb9fd479a205c71d89574fccfb22bd9053bd98c6c4d870d65c132e5e904e6034978e55b43d69fcaa7433af2016ee203ce76eeba9cfa554b373e7f7db336 + languageName: node + linkType: hard + +"color-name@npm:~1.1.4": + version: 1.1.4 + resolution: "color-name@npm:1.1.4" + checksum: b0445859521eb4021cd0fb0cc1a75cecf67fceecae89b63f62b201cca8d345baf8b952c966862a9d9a2632987d4f6581f0ec8d957dfacece86f0a7919316f610 + languageName: node + linkType: hard + +"cross-spawn@npm:^7.0.0": + version: 7.0.3 + resolution: "cross-spawn@npm:7.0.3" + dependencies: + path-key: ^3.1.0 + shebang-command: ^2.0.0 + which: ^2.0.1 + checksum: 671cc7c7288c3a8406f3c69a3ae2fc85555c04169e9d611def9a675635472614f1c0ed0ef80955d5b6d4e724f6ced67f0ad1bb006c2ea643488fcfef994d7f52 + languageName: node + linkType: hard + +"debug@npm:4, debug@npm:^4.3.4": + version: 4.3.4 + resolution: "debug@npm:4.3.4" + dependencies: + ms: 2.1.2 + peerDependenciesMeta: + supports-color: + optional: true + checksum: 3dbad3f94ea64f34431a9cbf0bafb61853eda57bff2880036153438f50fb5a84f27683ba0d8e5426bf41a8c6ff03879488120cf5b3a761e77953169c0600a708 + languageName: node + linkType: hard + +"eastasianwidth@npm:^0.2.0": + version: 0.2.0 + resolution: "eastasianwidth@npm:0.2.0" + checksum: 7d00d7cd8e49b9afa762a813faac332dee781932d6f2c848dc348939c4253f1d4564341b7af1d041853bc3f32c2ef141b58e0a4d9862c17a7f08f68df1e0f1ed + languageName: node + linkType: hard + +"emoji-regex@npm:^8.0.0": + version: 8.0.0 + resolution: "emoji-regex@npm:8.0.0" + checksum: d4c5c39d5a9868b5fa152f00cada8a936868fd3367f33f71be515ecee4c803132d11b31a6222b2571b1e5f7e13890156a94880345594d0ce7e3c9895f560f192 + languageName: node + linkType: hard + +"emoji-regex@npm:^9.2.2": + version: 9.2.2 + resolution: "emoji-regex@npm:9.2.2" + checksum: 8487182da74aabd810ac6d6f1994111dfc0e331b01271ae01ec1eb0ad7b5ecc2bbbbd2f053c05cb55a1ac30449527d819bbfbf0e3de1023db308cbcb47f86601 + languageName: node + linkType: hard + +"encoding@npm:^0.1.13": + version: 0.1.13 + resolution: "encoding@npm:0.1.13" + dependencies: + iconv-lite: ^0.6.2 + checksum: bb98632f8ffa823996e508ce6a58ffcf5856330fde839ae42c9e1f436cc3b5cc651d4aeae72222916545428e54fd0f6aa8862fd8d25bdbcc4589f1e3f3715e7f + languageName: node + linkType: hard + +"env-paths@npm:^2.2.0": + version: 2.2.1 + resolution: "env-paths@npm:2.2.1" + checksum: 65b5df55a8bab92229ab2b40dad3b387fad24613263d103a97f91c9fe43ceb21965cd3392b1ccb5d77088021e525c4e0481adb309625d0cb94ade1d1fb8dc17e + languageName: node + linkType: hard + +"err-code@npm:^2.0.2": + version: 2.0.3 + resolution: "err-code@npm:2.0.3" + checksum: 8b7b1be20d2de12d2255c0bc2ca638b7af5171142693299416e6a9339bd7d88fc8d7707d913d78e0993176005405a236b066b45666b27b797252c771156ace54 + languageName: node + linkType: hard + +"exponential-backoff@npm:^3.1.1": + version: 3.1.1 + resolution: "exponential-backoff@npm:3.1.1" + checksum: 3d21519a4f8207c99f7457287291316306255a328770d320b401114ec8481986e4e467e854cb9914dd965e0a1ca810a23ccb559c642c88f4c7f55c55778a9b48 + languageName: node + linkType: hard + +"foreground-child@npm:^3.1.0": + version: 3.1.1 + resolution: "foreground-child@npm:3.1.1" + dependencies: + cross-spawn: ^7.0.0 + signal-exit: ^4.0.1 + checksum: 139d270bc82dc9e6f8bc045fe2aae4001dc2472157044fdfad376d0a3457f77857fa883c1c8b21b491c6caade9a926a4bed3d3d2e8d3c9202b151a4cbbd0bcd5 + languageName: node + linkType: hard + +"fs-minipass@npm:^2.0.0": + version: 2.1.0 + resolution: "fs-minipass@npm:2.1.0" + dependencies: + minipass: ^3.0.0 + checksum: 1b8d128dae2ac6cc94230cc5ead341ba3e0efaef82dab46a33d171c044caaa6ca001364178d42069b2809c35a1c3c35079a32107c770e9ffab3901b59af8c8b1 + languageName: node + linkType: hard + +"fs-minipass@npm:^3.0.0": + version: 3.0.3 + resolution: "fs-minipass@npm:3.0.3" + dependencies: + minipass: ^7.0.3 + checksum: 8722a41109130851d979222d3ec88aabaceeaaf8f57b2a8f744ef8bd2d1ce95453b04a61daa0078822bc5cd21e008814f06fe6586f56fef511e71b8d2394d802 + languageName: node + linkType: hard + +"fs.realpath@npm:^1.0.0": + version: 1.0.0 + resolution: "fs.realpath@npm:1.0.0" + checksum: 99ddea01a7e75aa276c250a04eedeffe5662bce66c65c07164ad6264f9de18fb21be9433ead460e54cff20e31721c811f4fb5d70591799df5f85dce6d6746fd0 + languageName: node + linkType: hard + +"fsevents@npm:2.3.2": + version: 2.3.2 + resolution: "fsevents@npm:2.3.2" + dependencies: + node-gyp: latest + checksum: 97ade64e75091afee5265e6956cb72ba34db7819b4c3e94c431d4be2b19b8bb7a2d4116da417950c3425f17c8fe693d25e20212cac583ac1521ad066b77ae31f + conditions: os=darwin + languageName: node + linkType: hard + +"fsevents@patch:fsevents@2.3.2#~builtin": + version: 2.3.2 + resolution: "fsevents@patch:fsevents@npm%3A2.3.2#~builtin::version=2.3.2&hash=df0bf1" + dependencies: + node-gyp: latest + conditions: os=darwin + languageName: node + linkType: hard + +"glob@npm:^10.2.2, glob@npm:^10.3.10": + version: 10.3.10 + resolution: "glob@npm:10.3.10" + dependencies: + foreground-child: ^3.1.0 + jackspeak: ^2.3.5 + minimatch: ^9.0.1 + minipass: ^5.0.0 || ^6.0.2 || ^7.0.0 + path-scurry: ^1.10.1 + bin: + glob: dist/esm/bin.mjs + checksum: 4f2fe2511e157b5a3f525a54092169a5f92405f24d2aed3142f4411df328baca13059f4182f1db1bf933e2c69c0bd89e57ae87edd8950cba8c7ccbe84f721cf3 + languageName: node + linkType: hard + +"glob@npm:^9.2.0": + version: 9.3.5 + resolution: "glob@npm:9.3.5" + dependencies: + fs.realpath: ^1.0.0 + minimatch: ^8.0.2 + minipass: ^4.2.4 + path-scurry: ^1.6.1 + checksum: 94b093adbc591bc36b582f77927d1fb0dbf3ccc231828512b017601408be98d1fe798fc8c0b19c6f2d1a7660339c3502ce698de475e9d938ccbb69b47b647c84 + languageName: node + linkType: hard + +"graceful-fs@npm:^4.2.6": + version: 4.2.11 + resolution: "graceful-fs@npm:4.2.11" + checksum: ac85f94da92d8eb6b7f5a8b20ce65e43d66761c55ce85ac96df6865308390da45a8d3f0296dd3a663de65d30ba497bd46c696cc1e248c72b13d6d567138a4fc7 + languageName: node + linkType: hard + +"http-cache-semantics@npm:^4.1.1": + version: 4.1.1 + resolution: "http-cache-semantics@npm:4.1.1" + checksum: 83ac0bc60b17a3a36f9953e7be55e5c8f41acc61b22583060e8dedc9dd5e3607c823a88d0926f9150e571f90946835c7fe150732801010845c72cd8bbff1a236 + languageName: node + linkType: hard + +"http-proxy-agent@npm:^7.0.0": + version: 7.0.0 + resolution: "http-proxy-agent@npm:7.0.0" + dependencies: + agent-base: ^7.1.0 + debug: ^4.3.4 + checksum: 48d4fac997917e15f45094852b63b62a46d0c8a4f0b9c6c23ca26d27b8df8d178bed88389e604745e748bd9a01f5023e25093722777f0593c3f052009ff438b6 + languageName: node + linkType: hard + +"https-proxy-agent@npm:^7.0.1": + version: 7.0.2 + resolution: "https-proxy-agent@npm:7.0.2" + dependencies: + agent-base: ^7.0.2 + debug: 4 + checksum: 088969a0dd476ea7a0ed0a2cf1283013682b08f874c3bc6696c83fa061d2c157d29ef0ad3eb70a2046010bb7665573b2388d10fdcb3e410a66995e5248444292 + languageName: node + linkType: hard + +"iconv-lite@npm:^0.6.2": + version: 0.6.3 + resolution: "iconv-lite@npm:0.6.3" + dependencies: + safer-buffer: ">= 2.1.2 < 3.0.0" + checksum: 3f60d47a5c8fc3313317edfd29a00a692cc87a19cac0159e2ce711d0ebc9019064108323b5e493625e25594f11c6236647d8e256fbe7a58f4a3b33b89e6d30bf + languageName: node + linkType: hard + +"imurmurhash@npm:^0.1.4": + version: 0.1.4 + resolution: "imurmurhash@npm:0.1.4" + checksum: 7cae75c8cd9a50f57dadd77482359f659eaebac0319dd9368bcd1714f55e65badd6929ca58569da2b6494ef13fdd5598cd700b1eba23f8b79c5f19d195a3ecf7 + languageName: node + linkType: hard + +"indent-string@npm:^4.0.0": + version: 4.0.0 + resolution: "indent-string@npm:4.0.0" + checksum: 824cfb9929d031dabf059bebfe08cf3137365e112019086ed3dcff6a0a7b698cb80cf67ccccde0e25b9e2d7527aa6cc1fed1ac490c752162496caba3e6699612 + languageName: node + linkType: hard + +"ip@npm:^2.0.0": + version: 2.0.0 + resolution: "ip@npm:2.0.0" + checksum: cfcfac6b873b701996d71ec82a7dd27ba92450afdb421e356f44044ed688df04567344c36cbacea7d01b1c39a4c732dc012570ebe9bebfb06f27314bca625349 + languageName: node + linkType: hard + +"is-fullwidth-code-point@npm:^3.0.0": + version: 3.0.0 + resolution: "is-fullwidth-code-point@npm:3.0.0" + checksum: 44a30c29457c7fb8f00297bce733f0a64cd22eca270f83e58c105e0d015e45c019491a4ab2faef91ab51d4738c670daff901c799f6a700e27f7314029e99e348 + languageName: node + linkType: hard + +"is-lambda@npm:^1.0.1": + version: 1.0.1 + resolution: "is-lambda@npm:1.0.1" + checksum: 93a32f01940220532e5948538699ad610d5924ac86093fcee83022252b363eb0cc99ba53ab084a04e4fb62bf7b5731f55496257a4c38adf87af9c4d352c71c35 + languageName: node + linkType: hard + +"isexe@npm:^2.0.0": + version: 2.0.0 + resolution: "isexe@npm:2.0.0" + checksum: 26bf6c5480dda5161c820c5b5c751ae1e766c587b1f951ea3fcfc973bafb7831ae5b54a31a69bd670220e42e99ec154475025a468eae58ea262f813fdc8d1c62 + languageName: node + linkType: hard + +"isexe@npm:^3.1.1": + version: 3.1.1 + resolution: "isexe@npm:3.1.1" + checksum: 7fe1931ee4e88eb5aa524cd3ceb8c882537bc3a81b02e438b240e47012eef49c86904d0f0e593ea7c3a9996d18d0f1f3be8d3eaa92333977b0c3a9d353d5563e + languageName: node + linkType: hard + +"jackspeak@npm:^2.3.5": + version: 2.3.6 + resolution: "jackspeak@npm:2.3.6" + dependencies: + "@isaacs/cliui": ^8.0.2 + "@pkgjs/parseargs": ^0.11.0 + dependenciesMeta: + "@pkgjs/parseargs": + optional: true + checksum: 57d43ad11eadc98cdfe7496612f6bbb5255ea69fe51ea431162db302c2a11011642f50cfad57288bd0aea78384a0612b16e131944ad8ecd09d619041c8531b54 + languageName: node + linkType: hard + +"lru-cache@npm:^10.0.1, lru-cache@npm:^9.1.1 || ^10.0.0": + version: 10.1.0 + resolution: "lru-cache@npm:10.1.0" + checksum: 58056d33e2500fbedce92f8c542e7c11b50d7d086578f14b7074d8c241422004af0718e08a6eaae8705cee09c77e39a61c1c79e9370ba689b7010c152e6a76ab + languageName: node + linkType: hard + +"lru-cache@npm:^6.0.0": + version: 6.0.0 + resolution: "lru-cache@npm:6.0.0" + dependencies: + yallist: ^4.0.0 + checksum: f97f499f898f23e4585742138a22f22526254fdba6d75d41a1c2526b3b6cc5747ef59c5612ba7375f42aca4f8461950e925ba08c991ead0651b4918b7c978297 + languageName: node + linkType: hard + +"make-fetch-happen@npm:^13.0.0": + version: 13.0.0 + resolution: "make-fetch-happen@npm:13.0.0" + dependencies: + "@npmcli/agent": ^2.0.0 + cacache: ^18.0.0 + http-cache-semantics: ^4.1.1 + is-lambda: ^1.0.1 + minipass: ^7.0.2 + minipass-fetch: ^3.0.0 + minipass-flush: ^1.0.5 + minipass-pipeline: ^1.2.4 + negotiator: ^0.6.3 + promise-retry: ^2.0.1 + ssri: ^10.0.0 + checksum: 7c7a6d381ce919dd83af398b66459a10e2fe8f4504f340d1d090d3fa3d1b0c93750220e1d898114c64467223504bd258612ba83efbc16f31b075cd56de24b4af + languageName: node + linkType: hard + +"minimatch@npm:^8.0.2": + version: 8.0.4 + resolution: "minimatch@npm:8.0.4" + dependencies: + brace-expansion: ^2.0.1 + checksum: 2e46cffb86bacbc524ad45a6426f338920c529dd13f3a732cc2cf7618988ee1aae88df4ca28983285aca9e0f45222019ac2d14ebd17c1edadd2ee12221ab801a + languageName: node + linkType: hard + +"minimatch@npm:^9.0.1": + version: 9.0.3 + resolution: "minimatch@npm:9.0.3" + dependencies: + brace-expansion: ^2.0.1 + checksum: 253487976bf485b612f16bf57463520a14f512662e592e95c571afdab1442a6a6864b6c88f248ce6fc4ff0b6de04ac7aa6c8bb51e868e99d1d65eb0658a708b5 + languageName: node + linkType: hard + +"minipass-collect@npm:^2.0.1": + version: 2.0.1 + resolution: "minipass-collect@npm:2.0.1" + dependencies: + minipass: ^7.0.3 + checksum: b251bceea62090f67a6cced7a446a36f4cd61ee2d5cea9aee7fff79ba8030e416327a1c5aa2908dc22629d06214b46d88fdab8c51ac76bacbf5703851b5ad342 + languageName: node + linkType: hard + +"minipass-fetch@npm:^3.0.0": + version: 3.0.4 + resolution: "minipass-fetch@npm:3.0.4" + dependencies: + encoding: ^0.1.13 + minipass: ^7.0.3 + minipass-sized: ^1.0.3 + minizlib: ^2.1.2 + dependenciesMeta: + encoding: + optional: true + checksum: af7aad15d5c128ab1ebe52e043bdf7d62c3c6f0cecb9285b40d7b395e1375b45dcdfd40e63e93d26a0e8249c9efd5c325c65575aceee192883970ff8cb11364a + languageName: node + linkType: hard + +"minipass-flush@npm:^1.0.5": + version: 1.0.5 + resolution: "minipass-flush@npm:1.0.5" + dependencies: + minipass: ^3.0.0 + checksum: 56269a0b22bad756a08a94b1ffc36b7c9c5de0735a4dd1ab2b06c066d795cfd1f0ac44a0fcae13eece5589b908ecddc867f04c745c7009be0b566421ea0944cf + languageName: node + linkType: hard + +"minipass-pipeline@npm:^1.2.4": + version: 1.2.4 + resolution: "minipass-pipeline@npm:1.2.4" + dependencies: + minipass: ^3.0.0 + checksum: b14240dac0d29823c3d5911c286069e36d0b81173d7bdf07a7e4a91ecdef92cdff4baaf31ea3746f1c61e0957f652e641223970870e2353593f382112257971b + languageName: node + linkType: hard + +"minipass-sized@npm:^1.0.3": + version: 1.0.3 + resolution: "minipass-sized@npm:1.0.3" + dependencies: + minipass: ^3.0.0 + checksum: 79076749fcacf21b5d16dd596d32c3b6bf4d6e62abb43868fac21674078505c8b15eaca4e47ed844985a4514854f917d78f588fcd029693709417d8f98b2bd60 + languageName: node + linkType: hard + +"minipass@npm:^3.0.0": + version: 3.3.6 + resolution: "minipass@npm:3.3.6" + dependencies: + yallist: ^4.0.0 + checksum: a30d083c8054cee83cdcdc97f97e4641a3f58ae743970457b1489ce38ee1167b3aaf7d815cd39ec7a99b9c40397fd4f686e83750e73e652b21cb516f6d845e48 + languageName: node + linkType: hard + +"minipass@npm:^4.2.4": + version: 4.2.8 + resolution: "minipass@npm:4.2.8" + checksum: 7f4914d5295a9a30807cae5227a37a926e6d910c03f315930fde52332cf0575dfbc20295318f91f0baf0e6bb11a6f668e30cde8027dea7a11b9d159867a3c830 + languageName: node + linkType: hard + +"minipass@npm:^5.0.0": + version: 5.0.0 + resolution: "minipass@npm:5.0.0" + checksum: 425dab288738853fded43da3314a0b5c035844d6f3097a8e3b5b29b328da8f3c1af6fc70618b32c29ff906284cf6406b6841376f21caaadd0793c1d5a6a620ea + languageName: node + linkType: hard + +"minipass@npm:^5.0.0 || ^6.0.2 || ^7.0.0, minipass@npm:^7.0.2, minipass@npm:^7.0.3": + version: 7.0.4 + resolution: "minipass@npm:7.0.4" + checksum: 87585e258b9488caf2e7acea242fd7856bbe9a2c84a7807643513a338d66f368c7d518200ad7b70a508664d408aa000517647b2930c259a8b1f9f0984f344a21 + languageName: node + linkType: hard + +"minizlib@npm:^2.1.1, minizlib@npm:^2.1.2": + version: 2.1.2 + resolution: "minizlib@npm:2.1.2" + dependencies: + minipass: ^3.0.0 + yallist: ^4.0.0 + checksum: f1fdeac0b07cf8f30fcf12f4b586795b97be856edea22b5e9072707be51fc95d41487faec3f265b42973a304fe3a64acd91a44a3826a963e37b37bafde0212c3 + languageName: node + linkType: hard + +"mkdirp@npm:^1.0.3": + version: 1.0.4 + resolution: "mkdirp@npm:1.0.4" + bin: + mkdirp: bin/cmd.js + checksum: a96865108c6c3b1b8e1d5e9f11843de1e077e57737602de1b82030815f311be11f96f09cce59bd5b903d0b29834733e5313f9301e3ed6d6f6fba2eae0df4298f + languageName: node + linkType: hard + +"ms@npm:2.1.2": + version: 2.1.2 + resolution: "ms@npm:2.1.2" + checksum: 673cdb2c3133eb050c745908d8ce632ed2c02d85640e2edb3ace856a2266a813b30c613569bf3354fdf4ea7d1a1494add3bfa95e2713baa27d0c2c71fc44f58f + languageName: node + linkType: hard + +"negotiator@npm:^0.6.3": + version: 0.6.3 + resolution: "negotiator@npm:0.6.3" + checksum: b8ffeb1e262eff7968fc90a2b6767b04cfd9842582a9d0ece0af7049537266e7b2506dfb1d107a32f06dd849ab2aea834d5830f7f4d0e5cb7d36e1ae55d021d9 + languageName: node + linkType: hard + +"node-gyp@npm:latest": + version: 10.0.1 + resolution: "node-gyp@npm:10.0.1" + dependencies: + env-paths: ^2.2.0 + exponential-backoff: ^3.1.1 + glob: ^10.3.10 + graceful-fs: ^4.2.6 + make-fetch-happen: ^13.0.0 + nopt: ^7.0.0 + proc-log: ^3.0.0 + semver: ^7.3.5 + tar: ^6.1.2 + which: ^4.0.0 + bin: + node-gyp: bin/node-gyp.js + checksum: 60a74e66d364903ce02049966303a57f898521d139860ac82744a5fdd9f7b7b3b61f75f284f3bfe6e6add3b8f1871ce305a1d41f775c7482de837b50c792223f + languageName: node + linkType: hard + +"nopt@npm:^7.0.0": + version: 7.2.0 + resolution: "nopt@npm:7.2.0" + dependencies: + abbrev: ^2.0.0 + bin: + nopt: bin/nopt.js + checksum: a9c0f57fb8cb9cc82ae47192ca2b7ef00e199b9480eed202482c962d61b59a7fbe7541920b2a5839a97b42ee39e288c0aed770e38057a608d7f579389dfde410 + languageName: node + linkType: hard + +"p-map@npm:^4.0.0": + version: 4.0.0 + resolution: "p-map@npm:4.0.0" + dependencies: + aggregate-error: ^3.0.0 + checksum: cb0ab21ec0f32ddffd31dfc250e3afa61e103ef43d957cc45497afe37513634589316de4eb88abdfd969fe6410c22c0b93ab24328833b8eb1ccc087fc0442a1c + languageName: node + linkType: hard + +"path-key@npm:^3.1.0": + version: 3.1.1 + resolution: "path-key@npm:3.1.1" + checksum: 55cd7a9dd4b343412a8386a743f9c746ef196e57c823d90ca3ab917f90ab9f13dd0ded27252ba49dbdfcab2b091d998bc446f6220cd3cea65db407502a740020 + languageName: node + linkType: hard + +"path-scurry@npm:^1.10.1, path-scurry@npm:^1.6.1": + version: 1.10.1 + resolution: "path-scurry@npm:1.10.1" + dependencies: + lru-cache: ^9.1.1 || ^10.0.0 + minipass: ^5.0.0 || ^6.0.2 || ^7.0.0 + checksum: e2557cff3a8fb8bc07afdd6ab163a92587884f9969b05bbbaf6fe7379348bfb09af9ed292af12ed32398b15fb443e81692047b786d1eeb6d898a51eb17ed7d90 + languageName: node + linkType: hard + +"playwright-core@npm:1.41.1": + version: 1.41.1 + resolution: "playwright-core@npm:1.41.1" + bin: + playwright-core: cli.js + checksum: c83446a560c6bd85f6f0cd586ff8c643b77e2005567386e12f85890936cc370673114b94cd883246018797cc1580e93b0296ade7d07275bb611b8962f5bb9693 + languageName: node + linkType: hard + +"playwright@npm:1.41.1": + version: 1.41.1 + resolution: "playwright@npm:1.41.1" + dependencies: + fsevents: 2.3.2 + playwright-core: 1.41.1 + dependenciesMeta: + fsevents: + optional: true + bin: + playwright: cli.js + checksum: 3da7fb929abdec6adbdd8829f840580f5f210713214a8d230b130127f2270403eb2113c6c1418012221149707250fff896794c7c22c260dd09a92bf800227f31 + languageName: node + linkType: hard + +"proc-log@npm:^3.0.0": + version: 3.0.0 + resolution: "proc-log@npm:3.0.0" + checksum: 02b64e1b3919e63df06f836b98d3af002b5cd92655cab18b5746e37374bfb73e03b84fe305454614b34c25b485cc687a9eebdccf0242cda8fda2475dd2c97e02 + languageName: node + linkType: hard + +"promise-retry@npm:^2.0.1": + version: 2.0.1 + resolution: "promise-retry@npm:2.0.1" + dependencies: + err-code: ^2.0.2 + retry: ^0.12.0 + checksum: f96a3f6d90b92b568a26f71e966cbbc0f63ab85ea6ff6c81284dc869b41510e6cdef99b6b65f9030f0db422bf7c96652a3fff9f2e8fb4a0f069d8f4430359429 + languageName: node + linkType: hard + +"retry@npm:^0.12.0": + version: 0.12.0 + resolution: "retry@npm:0.12.0" + checksum: 623bd7d2e5119467ba66202d733ec3c2e2e26568074923bc0585b6b99db14f357e79bdedb63cab56cec47491c4a0da7e6021a7465ca6dc4f481d3898fdd3158c + languageName: node + linkType: hard + +"rimraf@npm:^4.1.2": + version: 4.4.1 + resolution: "rimraf@npm:4.4.1" + dependencies: + glob: ^9.2.0 + bin: + rimraf: dist/cjs/src/bin.js + checksum: b786adc02651e2e24bbedb04bbdea80652fc9612632931ff2d9f898c5e4708fe30956186597373c568bd5230a4dc2fadfc816ccacba8a1daded3a006a6b74f1a + languageName: node + linkType: hard + +"safer-buffer@npm:>= 2.1.2 < 3.0.0": + version: 2.1.2 + resolution: "safer-buffer@npm:2.1.2" + checksum: cab8f25ae6f1434abee8d80023d7e72b598cf1327164ddab31003c51215526801e40b66c5e65d658a0af1e9d6478cadcb4c745f4bd6751f97d8644786c0978b0 + languageName: node + linkType: hard + +"semver@npm:^7.3.5": + version: 7.5.4 + resolution: "semver@npm:7.5.4" + dependencies: + lru-cache: ^6.0.0 + bin: + semver: bin/semver.js + checksum: 12d8ad952fa353b0995bf180cdac205a4068b759a140e5d3c608317098b3575ac2f1e09182206bf2eb26120e1c0ed8fb92c48c592f6099680de56bb071423ca3 + languageName: node + linkType: hard + +"shebang-command@npm:^2.0.0": + version: 2.0.0 + resolution: "shebang-command@npm:2.0.0" + dependencies: + shebang-regex: ^3.0.0 + checksum: 6b52fe87271c12968f6a054e60f6bde5f0f3d2db483a1e5c3e12d657c488a15474121a1d55cd958f6df026a54374ec38a4a963988c213b7570e1d51575cea7fa + languageName: node + linkType: hard + +"shebang-regex@npm:^3.0.0": + version: 3.0.0 + resolution: "shebang-regex@npm:3.0.0" + checksum: 1a2bcae50de99034fcd92ad4212d8e01eedf52c7ec7830eedcf886622804fe36884278f2be8be0ea5fde3fd1c23911643a4e0f726c8685b61871c8908af01222 + languageName: node + linkType: hard + +"signal-exit@npm:^4.0.1": + version: 4.1.0 + resolution: "signal-exit@npm:4.1.0" + checksum: 64c757b498cb8629ffa5f75485340594d2f8189e9b08700e69199069c8e3070fb3e255f7ab873c05dc0b3cec412aea7402e10a5990cb6a050bd33ba062a6c549 + languageName: node + linkType: hard + +"smart-buffer@npm:^4.2.0": + version: 4.2.0 + resolution: "smart-buffer@npm:4.2.0" + checksum: b5167a7142c1da704c0e3af85c402002b597081dd9575031a90b4f229ca5678e9a36e8a374f1814c8156a725d17008ae3bde63b92f9cfd132526379e580bec8b + languageName: node + linkType: hard + +"socks-proxy-agent@npm:^8.0.1": + version: 8.0.2 + resolution: "socks-proxy-agent@npm:8.0.2" + dependencies: + agent-base: ^7.0.2 + debug: ^4.3.4 + socks: ^2.7.1 + checksum: 4fb165df08f1f380881dcd887b3cdfdc1aba3797c76c1e9f51d29048be6e494c5b06d68e7aea2e23df4572428f27a3ec22b3d7c75c570c5346507433899a4b6d + languageName: node + linkType: hard + +"socks@npm:^2.7.1": + version: 2.7.1 + resolution: "socks@npm:2.7.1" + dependencies: + ip: ^2.0.0 + smart-buffer: ^4.2.0 + checksum: 259d9e3e8e1c9809a7f5c32238c3d4d2a36b39b83851d0f573bfde5f21c4b1288417ce1af06af1452569cd1eb0841169afd4998f0e04ba04656f6b7f0e46d748 + languageName: node + linkType: hard + +"ssri@npm:^10.0.0": + version: 10.0.5 + resolution: "ssri@npm:10.0.5" + dependencies: + minipass: ^7.0.3 + checksum: 0a31b65f21872dea1ed3f7c200d7bc1c1b91c15e419deca14f282508ba917cbb342c08a6814c7f68ca4ca4116dd1a85da2bbf39227480e50125a1ceffeecb750 + languageName: node + linkType: hard + +"string-width-cjs@npm:string-width@^4.2.0, string-width@npm:^4.1.0": + version: 4.2.3 + resolution: "string-width@npm:4.2.3" + dependencies: + emoji-regex: ^8.0.0 + is-fullwidth-code-point: ^3.0.0 + strip-ansi: ^6.0.1 + checksum: e52c10dc3fbfcd6c3a15f159f54a90024241d0f149cf8aed2982a2d801d2e64df0bf1dc351cf8e95c3319323f9f220c16e740b06faecd53e2462df1d2b5443fb + languageName: node + linkType: hard + +"string-width@npm:^5.0.1, string-width@npm:^5.1.2": + version: 5.1.2 + resolution: "string-width@npm:5.1.2" + dependencies: + eastasianwidth: ^0.2.0 + emoji-regex: ^9.2.2 + strip-ansi: ^7.0.1 + checksum: 7369deaa29f21dda9a438686154b62c2c5f661f8dda60449088f9f980196f7908fc39fdd1803e3e01541970287cf5deae336798337e9319a7055af89dafa7193 + languageName: node + linkType: hard + +"strip-ansi-cjs@npm:strip-ansi@^6.0.1, strip-ansi@npm:^6.0.0, strip-ansi@npm:^6.0.1": + version: 6.0.1 + resolution: "strip-ansi@npm:6.0.1" + dependencies: + ansi-regex: ^5.0.1 + checksum: f3cd25890aef3ba6e1a74e20896c21a46f482e93df4a06567cebf2b57edabb15133f1f94e57434e0a958d61186087b1008e89c94875d019910a213181a14fc8c + languageName: node + linkType: hard + +"strip-ansi@npm:^7.0.1": + version: 7.1.0 + resolution: "strip-ansi@npm:7.1.0" + dependencies: + ansi-regex: ^6.0.1 + checksum: 859c73fcf27869c22a4e4d8c6acfe690064659e84bef9458aa6d13719d09ca88dcfd40cbf31fd0be63518ea1a643fe070b4827d353e09533a5b0b9fd4553d64d + languageName: node + linkType: hard + +"tar@npm:^6.1.11, tar@npm:^6.1.2": + version: 6.2.0 + resolution: "tar@npm:6.2.0" + dependencies: + chownr: ^2.0.0 + fs-minipass: ^2.0.0 + minipass: ^5.0.0 + minizlib: ^2.1.1 + mkdirp: ^1.0.3 + yallist: ^4.0.0 + checksum: db4d9fe74a2082c3a5016630092c54c8375ff3b280186938cfd104f2e089c4fd9bad58688ef6be9cf186a889671bf355c7cda38f09bbf60604b281715ca57f5c + languageName: node + linkType: hard + +"tljh_repo2docker-ui-tests@workspace:.": + version: 0.0.0-use.local + resolution: "tljh_repo2docker-ui-tests@workspace:." + dependencies: + "@playwright/test": ^1.31.0 + rimraf: ^4.1.2 + languageName: unknown + linkType: soft + +"unique-filename@npm:^3.0.0": + version: 3.0.0 + resolution: "unique-filename@npm:3.0.0" + dependencies: + unique-slug: ^4.0.0 + checksum: 8e2f59b356cb2e54aab14ff98a51ac6c45781d15ceaab6d4f1c2228b780193dc70fae4463ce9e1df4479cb9d3304d7c2043a3fb905bdeca71cc7e8ce27e063df + languageName: node + linkType: hard + +"unique-slug@npm:^4.0.0": + version: 4.0.0 + resolution: "unique-slug@npm:4.0.0" + dependencies: + imurmurhash: ^0.1.4 + checksum: 0884b58365af59f89739e6f71e3feacb5b1b41f2df2d842d0757933620e6de08eff347d27e9d499b43c40476cbaf7988638d3acb2ffbcb9d35fd035591adfd15 + languageName: node + linkType: hard + +"which@npm:^2.0.1": + version: 2.0.2 + resolution: "which@npm:2.0.2" + dependencies: + isexe: ^2.0.0 + bin: + node-which: ./bin/node-which + checksum: 1a5c563d3c1b52d5f893c8b61afe11abc3bab4afac492e8da5bde69d550de701cf9806235f20a47b5c8fa8a1d6a9135841de2596535e998027a54589000e66d1 + languageName: node + linkType: hard + +"which@npm:^4.0.0": + version: 4.0.0 + resolution: "which@npm:4.0.0" + dependencies: + isexe: ^3.1.1 + bin: + node-which: bin/which.js + checksum: f17e84c042592c21e23c8195108cff18c64050b9efb8459589116999ea9da6dd1509e6a1bac3aeebefd137be00fabbb61b5c2bc0aa0f8526f32b58ee2f545651 + languageName: node + linkType: hard + +"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0": + version: 7.0.0 + resolution: "wrap-ansi@npm:7.0.0" + dependencies: + ansi-styles: ^4.0.0 + string-width: ^4.1.0 + strip-ansi: ^6.0.0 + checksum: a790b846fd4505de962ba728a21aaeda189b8ee1c7568ca5e817d85930e06ef8d1689d49dbf0e881e8ef84436af3a88bc49115c2e2788d841ff1b8b5b51a608b + languageName: node + linkType: hard + +"wrap-ansi@npm:^8.1.0": + version: 8.1.0 + resolution: "wrap-ansi@npm:8.1.0" + dependencies: + ansi-styles: ^6.1.0 + string-width: ^5.0.1 + strip-ansi: ^7.0.1 + checksum: 371733296dc2d616900ce15a0049dca0ef67597d6394c57347ba334393599e800bab03c41d4d45221b6bc967b8c453ec3ae4749eff3894202d16800fdfe0e238 + languageName: node + linkType: hard + +"yallist@npm:^4.0.0": + version: 4.0.0 + resolution: "yallist@npm:4.0.0" + checksum: 343617202af32df2a15a3be36a5a8c0c8545208f3d3dfbc6bb7c3e3b7e8c6f8e7485432e4f3b88da3031a6e20afa7c711eded32ddfb122896ac5d914e75848d5 + languageName: node + linkType: hard