§ À•¿jNTãóΗdZddlZddlZddlZddlZddlZddlZddlZddlZddl Z ddl Z dZ dZ dZ dZdZdZd Zd Zd Zd Zed dddddddddej ejd¦«dddddej ejdd¦«f¦«ZdZej ed¦«Zej ed ¦«Zejd!¦«Zejd"¦«Zejd#¦«Z d$Z!d%Z"d&Z#d'Z$d(Z%d)d*d+d,dd-œZ&d.d/d0d1d2d-œZ'd3gZ(dZ)d4Z*d5Z+d6Z,d7Z-d8Z.d9Z/d:Z0ed;¦«Z1Gd<„d=e2¦«Z3Gd>„d?e3¦«Z4e fd@„Z5dA„Z6dB„Z7dC„Z8dD„Z9dE„Z:dF„Z;dG„Zd‰dJ„Z?efdK„Z@d‰dL„ZAdM„ZBe fdN„ZCdO„ZDdP„ZEdQ„ZFdR„ZGdS„ZHdT„ZIe fdU„ZJe fdV„ZKdW„ZLdX„ZMdY„ZNdZ„ZOd[„ZPdŠd]„ZQd^„ZRd_„ZSd`„ZTda„ZUGdb„dceV¦«ZWedfdd„ZXedfde„ZY d‹df„ZZdŒdg„Z[dh„Z\di„Z]d‰dj„Z^d�dk„Z_d‰dl„Z`d‰dm„Zadn„ZbdŠdo„Zcdp„Zdd‰dq„Zeedfdr„Zfds„Zgdt„Zhdu„Zidv„Zjdw„Zkdx„Zle fdy„Zmdz„Znd{„Zod|„Zpd}„Zqd~„Zre dfd„Zsd€„Ztd�„Zud‚„Zvdƒ„Zwd„„Zxe dddddfd…„Zyd†„Zz dŠd‡„Z{edfdˆ„Z|dS)Ža›Configuration for the server-wide shared Node modules storage. The account-readable file contains non-sensitive delivery policy. Account names excluded by the administrator live in a separate root-only sidecar; accounts learn only their own current decision from the authenticated daemon. Unknown JSON keys survive writes so a newer package can add settings without an older administrator CLI discarding them. éNz/opt/cl-bun/bunz¼Shared node_modules Store requires a usable cl-bun engine. Ask the administrator to run cl-node-modules-storage enable to restore it, or cl-node-modules-storage disable to use classic npm.z)/opt/cl-bun/etc/node-modules-storage.jsonz.excluded-usersz /var/lib/cl-node-modules-storageiz /proc/sys/fs/protected_hardlinksé¤é€iÀú/z/bootz/devz/etcz/homez/optz/procz/rootz/runz/sysÚtmpz/usrz/varz /var/cachez/var/libz/var/logÚvarz$/run/cloudlinux-node-modules-storagez storage.lockz config.lockz-^\.[0-9a-f]{1,16}-[0-9A-F]+\.[A-Za-z0-9_.-]+$z^entry-[0-9a-f]{32}$z^[0-9]+$z .prune-trashz.cl-node-modules-check-é@ég333333Ó?é<éÈééx)Úaccount_deliveries_per_hourÚaccount_deliveries_per_dayÚconcurrent_deliveriesÚdelivery_queue_timeout_secondsÚsoft_storage_limit_gb)éi †)ri@B)ri)ri€Q)rizhttps://registry.npmjs.org/éé i-1i„z.cl-storage-usage.jsonz.cl-shared-node-modules.jsoné)ÚschemaÚengineÚ delivered_atÚ shared_filesÚ private_filesÚquarantined_filesÚ shared_bytesÚ shared_inodecó—eZdZdZdS)Ú StorageErrorz4A safe-to-display administrator configuration error.N©Ú__name__Ú __module__Ú __qualname__Ú__doc__©óúV/opt/cloudlinux/venv/lib64/python3.11/site-packages/clselector/node_modules_storage.pyr r ws€€€€€Ø>Ð>Ð>Ð>r'r có—eZdZdZdS)ÚCachePopulationBusyz@A daemon retry may wait outside its scarce global delivery gate.Nr!r&r'r(r*r*{s€€€€€ØJÐJÐJÐJr'r*có$— tj|¦«}n#t$rYdSwxYwtj|j¦«oP|jdkoEtj|j¦«dz o(ttj|j¦«dz¦«S)z7Check the packaged engine without executing it as root.FrééI)ÚosÚstatÚOSErrorÚS_ISREGÚst_modeÚst_uidÚS_IMODEÚbool)ÚpathÚinfos r(Úengine_availabler8s—€ðÝŒw�t‰}Œ}ˆˆøÝ ððð؈uˆuðøøøå ŒL˜œÑ &Ô &ð 9¨4¬;¸!Ò+;ð 9Ý”L ¤Ñ.Ô.°Ñ6Ð6ð 9å•T”\ $¤,Ñ/Ô/°%Ñ7Ñ8Ô8ð:s ‚— %¤%cóJ—i}|D]\}}||vrtd¦«‚|||<Œ|S)zBjson object_pairs_hook rejecting ambiguous duplicate member names.zduplicate JSON member)Ú ValueError)ÚpairsÚresultÚkeyÚvalues r(Ú_unique_objectr?ŠsB€à €FØðð‰ ˆˆUØ �&ˆ=ˆ=ÝÐ4Ñ5Ô5Ð 5؈ˆs‰ ˆ Ø €Mr'có—d} t|t¦«rtj|¦«}n9tj|tjtjztjz¦«}t|¦«|�& tj |¦«S#t$rYSwxYwS#ttf$r.Y|�( tj |¦«dS#t$rYdSwxYwdSwxYw#|�& tj |¦«w#t$rYwwxYwwxYw)aSReturn a valid delivered-tree marker, or ``None`` for inactive. The marker is account-readable input when the selector lists applications. It is deliberately a tiny, flat, exact schema: malformed data, a symlink, or any read failure is an inactive shared-node-modules state rather than an application-listing failure. N) Ú isinstanceÚintr.ÚdupÚopenÚO_RDONLYÚ O_DIRECTORYÚ O_NOFOLLOWÚ"read_shared_node_modules_marker_fdÚcloser0Ú TypeError)Ú node_modulesÚroot_fds r(Úread_shared_node_modules_markerrM”sc€ð€GðÝ �l¥CÑ (Ô (ð LÝ”f˜\Ñ*Ô*ˆGˆGå”g˜lÝ œk­B¬NÑ:½R¼]ÑJñLôLˆGå1°'Ñ:Ô:ð Ð ð Ý”˜Ñ!Ô!Ð!Ð!øÝð ð ð Ø�ð øøøð øõ •YÐ ðððØà Ð ð Ý”˜Ñ!Ô!Ð!Ð!Ð!øÝð ð ð Ø��ð øøøð Ð ðøøøøð Ð ð Ý”˜Ñ!Ô!Ð!Ð!øÝð ð ð Ø�ð øøøð øøøsl„A1BÁ8B  BÂBÂCÂ/C Â3C à CÃCÃCÃC à D Ã$C9Ã8D Ã9 DÄD ÄDÄD cóx—d} tjttjtjztjz|¬¦«}tj|¦«}tj|j ¦«r|j tkr- |�( tj |¦«dS#t$rYdSwxYwdSg}tdz}|rOtj|td|¦«¦«}|sn)| |¦«|t#|¦«z}|°Od |¦«}t#|¦«tkr- |�( tj |¦«dS#t$rYdSwxYwdSt'j| d¦«t,¬¦«}nN#tt.t0t2f$r.Y|�( tj |¦«dS#t$rYdSwxYwdSwxYw |�& tj |¦«n>#t$rYn2wxYwn-#|�& tj |¦«w#t$rYwwxYwwxYwt5|t6¦«rt9|¦«t:krdSt=| d¦«¦«t@us |dd krdS| d ¦«d krdS| d ¦«}t=|¦«t@ur@ tCj"tG|¦«¦«} n#tH$rd } YnwxYw|dks| sdSn2t=|¦«tFustCj"|¦«r|dkrdSdD]:} t=| | ¦«¦«t@us || dkrdSŒ;|d} |ddkstK|| ¦«sdS|S)z=Read a marker below an already-pinned node_modules directory.N©Údir_fdrrr'úutf-8)Úobject_pairs_hookrérÚbunrFr)rrrrrr)&r.rDÚSHARED_NODE_MODULES_MARKERrEÚ O_NONBLOCKrGÚfstatr/r1r2Úst_sizeÚ$MAX_SHARED_NODE_MODULES_MARKER_BYTESrIr0ÚreadÚminÚappendÚlenÚjoinÚjsonÚloadsÚdecoder?Ú UnicodeErrorr:ÚRecursionErrorrAÚdictÚsetÚ _SHARED_NODE_MODULES_MARKER_KEYSÚtypeÚgetrBÚmathÚisfiniteÚfloatÚ OverflowErrorÚ_shared_inode_matches) rLÚ marker_fdr7ÚchunksÚ remainingÚchunkÚdatar>rÚtimestamp_finiteÚnameÚproofs r(rHrH®sq€à€IðÝ”GÕ6ÝœK­"¬-Ñ7½"¼-ÑGØ#*ð,ñ,ô,ˆ õŒx˜ Ñ"Ô"ˆÝ” ˜Tœ\Ñ*Ô*ð Ø”<Õ"FÒFÐFØð Ð ð Ý”˜Ñ#Ô#Ð#Ð#Ð#øÝð ð ð Ø��ð øøøð !Ð ðˆÝ8¸1Ñ<ˆ Øð $Ý”G˜I¥s¨4°Ñ';Ô';Ñ<Ô<ˆEØð ØØ �MŠM˜%Ñ Ô Ð Ø �˜U™œÑ #ˆIð ð $ð �xŠx˜ÑÔˆÝ ˆt‰9Œ9Õ;Ò ;Ð ;Øð Ð ð Ý”˜Ñ#Ô#Ð#Ð#Ð#øÝð ð ð Ø��ð øøøð !Ð õ ” ˜4Ÿ;š; wÑ/Ô/Å>ÐRÑRÔRˆˆøÝ •\¥:­~Ð >ðððØà Ð ð Ý”˜Ñ#Ô#Ð#Ð#Ð#øÝð ð ð Ø��ð øøøð !Ð ðøøøð ð Ð ð Ý”˜Ñ#Ô#Ð#Ð#øÝð ð ð Ø�ð øøøð !øˆ9Ð ð Ý”˜Ñ#Ô#Ð#Ð#øÝð ð ð Ø�ð øøøð !øøøõ �e�TÑ "Ô "ð¥c¨%¡j¤jÕ4TÒ&TÐ&T؈tÝ ˆE�IŠI�hÑ Ô Ñ Ô ­Ð+Ð+¨u°X¬À!Ò/CÐ/C؈tØ ‡y‚y�ÑÔ˜eÒ#Ð#؈tØ—9’9˜^Ñ,Ô,€LÝ ˆLÑÔ�SÐ Ð ð %Ý#œ}­U°<Ñ-@Ô-@ÑAÔAÐ Ð øÝð %ð %ð %Ø$Ð Ð Ð ð %øøøà ˜!Ò Ð Ð#3Ð Ø�4ð å ˆ|Ñ Ô ¥EÐ )Ð )Ý”˜|Ñ,Ô,ð *Ø0<¸qÒ0@Ð0@؈tð!ððˆå �— ’ ˜$‘”Ñ Ô ­Ð +Ð +¨u°T¬{¸Qª¨Ø�4�4ð0?à �.Ô !€EØ ˆ^Ô Ò!Ð!Õ)>¸wÈÑ)NÔ)NÐ!؈tØ €Lsµ„A=FÂB B)Â(B)Â.B FÄ<EÅ E ÅE Å%.FÆH ÆGÆ1H Æ5G Ç GÇGÇGÇH Ç&G;Ç; HÈHÈ H6ÈH%È$H6È% H2È/H6È1H2È2H6Ë&!LÌ LÌLcó®—t|t¦«r§t|¦«hd£ks’t| d¦«t¦«rjt | d¦«¦«t usA|ddks5t | d¦«¦«t us |ddkrdS|d}| d¦«}|r8tj   |¦«std„|D¦«¦«rdStj |¦«} |d d …D]S}tj |tjtjztjz|¬ ¦«}tj|¦«|}ŒTtj|d |d¬ ¦«}t%j|j¦«o;|j|dko*|j|dko|jd kot1|¦« tj|¦«S#t2t4f$rYtj|¦«dSwxYw#tj|¦«wxYw)z?Verify one inode that proves the restored tree is still shared.>r6ÚinodeÚdevicer6rxrrwFrc3óK—|]}|dvV—Œ dS©)Úú.ú..Nr&)Ú.0Úparts r(ú z(_shared_inode_matches..ós'èè€Ð=Ð=¨t�4˜?Ð*Ð=Ð=Ð=Ð=Ð=Ð=r'NéÿÿÿÿrO©rPÚfollow_symlinksr)rArdrerhÚstrrgrBÚsplitr.r6ÚisabsÚanyrCrDrErFrGrIr/r1r2Úst_devÚst_inoÚst_nlinkÚis_sound_shared_inoder0r:)rLrur6ÚpartsÚcurrentrÚchildr7s r(rmrmèsO€å �u�dÑ #Ô #ðÝ�5‰zŒzÐ8Ð8Ð8Ò8Ð8ݘeŸiši¨Ñ/Ô/µÑ5Ô5ð9å�E—I’I˜hÑ'Ô'Ñ(Ô(µÐ3Ð3°u¸X´ÈÒ7JÐ7JÝ�E—I’I˜gÑ&Ô&Ñ'Ô'­sÐ2Ð2°e¸G´nÀqÒ6HÐ6H؈uØ �Œ=€DØ �JŠJ�s‰OŒO€EØ ð•B”G—M’M $Ñ'Ô'ðÝÐ=Ð=°uÐ=Ñ=Ô=Ñ=Ô=ðàˆuÝŒf�W‰oŒo€Gðؘ#˜2˜#”Jð ð ˆDÝ”G˜D¥"¤+µ´Ñ">ÅÄÑ"NØ#*ð,ñ,ô,ˆEå ŒH�WÑ Ô Ð ØˆGˆGÝŒw�u˜R”y¨À%ÐHÑHÔHˆÝ” ˜Tœ\Ñ*Ô*ð0Ø”K 5¨¤?Ò2ð0à”K 5¨¤>Ò1ð0ð”M AÒ%ð0õ*¨$Ñ/Ô/ð  1õ Œ�ÑÔÐÐøõ •ZÐ ðððØå Œ�ÑÔÐÐÐðøøøøõ Œ�ÑÔÐÐøøøs%Ä-CHÈH;È#H>È:H;È;H>È>IcóÈ— ddlm}m}||j¦«}n"#t$r}t d¦«|‚d}~wwxYwt |¦«turt d¦«‚|S)aReturn the panel capability without hiding probe failures. ``False`` is reserved for a successful, authoritative "unsupported" answer. Callers must refuse on ``StorageError`` so a transient panel API failure can never select classic npm and detach a live shared tree. r)ÚFeatureÚis_panel_feature_supportedz)cannot determine Node.js Selector supportN)Úclcommon.cpapir�r‘ÚNODEJS_SELECTORÚ Exceptionr rgr5)r�r‘Ú supportedÚexcs r(Únodejs_selector_supportedr—s�€ðQØFÐFÐFÐFÐFÐFÐFÐFØ.Ð.¨wÔ/FÑGÔGˆ ˆ øÝ ðQðQðQÝÐFÑGÔGÈSÐPøøøøðQøøøå ˆI�„�dÐ"Ð"ÝÐFÑGÔGÐGØ Ðs‚› :¥5µ:cóЗt|t¦«rQtj |¦«r2t |¦«t ust|ttf¦«sdStd„|D¦«¦«rdSd} tj |tj tj ztj z¦«}tj|¦«j|kr |�tj|¦«dSdS|D]‹}tj |tj tj ztj z|¬¦«}tj|¦«|}tj|¦«j|kr|�tj|¦«dSdSŒŒ|}d}||�tj|¦«SS#t"$rY|�tj|¦«dSdSwxYw#|�tj|¦«wwxYw)zBPin a user-owned directory below an account home without symlinks.Nc3ó¼K—|]W}t|t¦« p<|dvp8tjj|vp%tjjduotjj|vV—ŒXdSrz)rAr„r.r6ÚsepÚaltsep)r~Ú components r(r€z/_open_user_directory_beneath..s„èè€ð (ð (ðõ˜)¥SÑ)Ô)Ð )ð K¨Y¸/Ð-Ið KÝŒgŒk˜YÐ&ð KåŒwŒ~ TÐ)ÐI­b¬g¬nÀ Ð.Ið (ð (ð (ð (ð (ð (r'rO)rAr„r.r6r†rgrBÚlistÚtupler‡rDrErFrGrWr3rIr0)ÚhomeÚuidÚ componentsÚ directory_fdrœÚchild_fdr<s r(Ú_open_user_directory_beneathr¤s&€å �t�SÑ !Ô !𭬯ª°tÑ)<Ô)<ðÝ�C‰yŒy¥Ð#Ð#­:°jÅ4ÍÀ-Ñ+PÔ+PÐ#؈tÝ ð (ð (ð'ð (ñ (ô (ñ(ô(ððˆtØ€Lð#Ý”w˜t¥R¤[µ2´>Ñ%AÅBÄMÑ%QÑRÔRˆ Ý Œ8�LÑ !Ô !Ô (¨CÒ /Ð /Øð Ð #Ý ŒH�\Ñ "Ô "Ð "Ð "Ð "ð $Ð #ð$ð ð ˆIÝ”w˜yÝ!œ{­R¬^Ñ;½b¼mÑKØ&2ð4ñ4ô4ˆHõ ŒH�\Ñ "Ô "Ð "Ø#ˆLÝŒx˜ Ñ%Ô%Ô,°Ò3Ð3Øð Ð #Ý ŒH�\Ñ "Ô "Ð "Ð "Ð "ð $Ð #ð4àˆØˆ Øð Ð #Ý ŒH�\Ñ "Ô "Ð "Ð "ð $øõ ðððØà Ð #Ý ŒH�\Ñ "Ô "Ð "Ð "Ð "ð $Ð #ðøøøøð Ð #Ý ŒH�\Ñ "Ô "Ð "Ð "ð $øøøs2ÂAF#Ã8A3F#ÆF#Æ# G Æ-G ÇG Ç G Ç G%có—t|||¦«}|€dS tj|¦«jtj|¦«S#t $rYtj|¦«dSwxYw#tj|¦«wxYw)zÐ.>Ý”< ¤ Ñ-Ô-°Ñ5ð/?à!Ð-Ýœ  T¤\Ñ2Ô2°mÒCÐCØ”<Õ"2Ò2Ð2Øõ Œ�‰ Œ ˆ ˆ ˆ ðˆÝ�$‰iŒiÕ+Ò+Ð+Ý”7˜2�s 4Õ)9¸AÑ)=ÅÀDÁ Ä Ñ)IÑJÔJÑKÔKˆDØð Øõ Œ�‰ Œ ˆ ˆ ð �D‰LˆDõ �$‰iŒiÕ+Ò+Ð+ð å Œ�‰ Œ ˆ ˆ ˆ ø�Œ�‰ Œ ˆ ˆ øøøs&‚,/¯ =¼=ÁBE<ÃAE<ÅE<Å<Fcó(—t|¦«}|dvS)aReturn true only for the kernel's exact enabled sysctl value. The kernel state is external input: read it with the same bounded, no-follow, root-owned-file contract used for administrator configuration. Missing or malformed state fails closed. )ó1s1 )r±)r6r>s r(Úprotected_hardlinks_enabledr´|s€õ ˜Ñ Ô €EØ �NÐ "Ð"r'cóì—t||¬¦«}|€dS tj| d¦«¦«}n#tt t f$rYdSwxYwt|t¦«r|ndS)N©r¯rQ) r±r_r`rarbr:rcrArd)r6r¯rrr>s r(Ú _read_rawr·‡s‚€Ý �t¨=Ð 9Ñ 9Ô 9€DØ €|؈tðÝ” ˜4Ÿ;š; wÑ/Ô/Ñ0Ô0ˆˆøÝ �*¥nÐ 5ððð؈tˆtðøøøå˜u¥dÑ+Ô+Ð 5ˆ5ˆ5°Ð5s—'?¿AÁAcór—| |¦«}t|t¦«sgSd„|D¦«S)zôA list of account names, or nothing. Wrong types are ignored per key -- same policy as every other key in this file -- so a hand-edited `"excluded_users": "bob"` reads as an empty list, not as a crash and not as the letters b, o, b.có<—g|]}t|t¦«¯|‘ŒSr&©rAr„©r~Úentrys r(ú z_user_list..šs'€Ð ?Ð ?Ð ?�e­ °5½#Ñ(>Ô(>Ð ?ˆEÐ ?Ð ?Ð ?r')rhrAr�)Úrawr=r>s r(Ú _user_listr¿’s>€ð �GŠG�C‰LŒL€EÝ �e�TÑ "Ô "ðØˆ Ø ?Ð ?˜uÐ ?Ñ ?Ô ?Ð?r'có—|tzS)z?Root-only account-exclusion authority beside the public policy.)ÚEXCLUSIONS_SUFFIX©r6s r(Úexclusions_pathrÃ�s€à Õ#Ñ #Ð#r'cój—t|¦«}tj |¦«st |d¦«dfSt |t ¬¦«}|€gdfS| d¦«}t|t¦«rtd„|D¦«¦«rgdfSt|¦«dfS)aReturn (account names, valid). A pre-release configuration may still carry the list in its public JSON; reconcile migrates it. Once the private sidecar exists, malformed or unreadable content is never interpreted as an empty allow-all list. Úexcluded_usersTr¶NFc3óBK—|]}t|t¦« V—ŒdS©Nrºr»s r(r€z_exclusions..±s/èè€ÐAÐA°%•z %­Ñ-Ô-Ð-ÐAÐAÐAÐAÐAÐAr') rÃr.r6Úlexistsr¿r·ÚEXCLUSIONS_MODErhrAr�r‡)r6Ú public_rawÚ private_pathÚ private_rawr>s r(Ú _exclusionsrÍ¢s½€õ# 4Ñ(Ô(€LÝ Œ7�?Š?˜<Ñ (Ô (ð>ݘ*Ð&6Ñ7Ô7¸Ð=Ð=ݘL½ÐHÑHÔH€KØÐØ�5ˆyÐØ �OŠOÐ,Ñ -Ô -€EÝ �u�dÑ #Ô #ðÝÐAÐA¸5ÐAÑAÔAÑAÔAðà�5ˆyÐÝ �‰;Œ;˜Ð Ðr'cón—tt¦«}| d¦«}t|t¦«rvt ¦«D]\\}\}}| |¦«}t|t ¦«r*t|t¦«s||cxkr|krnŒW|||<Œ]|S)zÒFill every ceiling from defaults, taking only values that are sane integers within bounds. A hand-edited garbage value reads as the default for that key alone -- the same per-key tolerance as the lists.Úlimits)rdÚDEFAULT_LIMITSrhrAÚ LIMIT_BOUNDSÚitemsrBr5)r¾rÏÚgivenr=ÚlowÚhighr>s r(Ú_limitsrÖ¶s»€õ•.Ñ !Ô !€FØ �GŠG�HÑ Ô €EÝ�%�ÑÔð$Ý ,× 2Ò 2Ñ 4Ô 4ð $ð $Ñ ˆC‘�#�tØ—I’I˜c‘N”NˆEݘ5¥#Ñ&Ô&ð $­z¸%ÅÑ/FÔ/Fð $ؘuÐ,Ð,Ò,Ð,¨Ò,Ð,Ð,Ð,Ð,Ø#��s‘ øØ €Mr'cóÊ—| d¦«}t|t¦«stt¦«S|sgSd„|D¦«}|ptt¦«S)a The allowlist of registries a lockfile may name. Preserve an exact empty or multi-entry list so status can diagnose a hand-edited or legacy configuration and delivery can fail closed. Missing and malformed values retain the safe npm-default behaviour. Úallowed_registriescód—g|]-}t|t¦«¯| ¦«¯+|‘Œ.Sr&)rAr„Ústripr»s r(r½z_registries..ÑsF€ð?ð?ð?˜EÝ ¥sÑ+Ô+ð?Ø05· ² ± ´ ð?�%ð?ð?ð?r')rhrAr�ÚDEFAULT_REGISTRIES)r¾rÓÚ registriess r(Ú _registriesrÝÅsu€ð �GŠGÐ(Ñ )Ô )€EÝ �e�TÑ "Ô "ð(ÝÕ&Ñ'Ô'Ð'Ø ðØˆ ð?ð? Uð?ñ?ô?€Jà Ð 1�Õ0Ñ1Ô1Ð1r'có`—d|vr d|vrtgS| d¦«}t|t¦«s/| d¦«}t|t¦«r|gng}g}|D]?}t|t¦«r(t |¦«r||vr| |¦«Œ@|S)añThe list of storage directories, newest key first, legacy folded in. `storage_paths` (a list) is authoritative; a legacy single `storage_path` string is read as a one-element list. With neither key present the store defaults to DEFAULT_STORAGE_PATH (unchanged behaviour). Only syntactically valid, de-duplicated paths survive; a present-but-all-invalid setting yields the empty result, which the caller then treats as off -- exactly what an invalid single path did before.Ú storage_pathsÚ storage_path)ÚDEFAULT_STORAGE_PATHrhrAr�r„Ú_valid_path_syntaxr\)r¾Ú candidatesÚlegacyÚpathsr¼s r(Ú_storage_pathsræÖsÊ€ð˜cÐ!Ð! n¸CÐ&?Ð&?Ý$Ð%Ð%Ø—’˜Ñ)Ô)€JÝ �j¥$Ñ 'Ô 'ðAØ—’˜Ñ(Ô(ˆÝ!+¨FµCÑ!8Ô!8Ð@�f�X�X¸bˆ Ø €EØð ð ˆÝ �u�cÑ "Ô "ð Õ'9¸%Ñ'@Ô'@ð Ø Ð&Ð&Ø �LŠL˜Ñ Ô Ð øØ €Lr'cóþ—| d¦«}t|t¦«sdSg}|D]K}t|t¦«r4t|t¦«s|dkr||vr| |¦«ŒL|S)alRoot-published device IDs used by account-side eligibility checks. Storage is deliberately root-private. The identifiers are not sensitive, but they let a selector running as an account determine same-filesystem eligibility without opening a protected storage path. ``None`` means an older configuration did not publish the information yet. Ústorage_devicesNr)rhrAr�rBr5r\)r¾r>Údevicesrxs r(Ú_storage_devicesrêís�€ð �GŠGÐ%Ñ &Ô &€EÝ �e�TÑ "Ô "ð؈tØ€GØð#ð#ˆÝ �v�sÑ #Ô #ð #­J°v½tÑ,DÔ,Dð #ؘa’K�K F°'Ð$9Ð$9Ø �NŠN˜6Ñ "Ô "Ð "øØ €Nr'c óx—|�t|¦«ng}t|duo |od|vpd|v¦«}|�|s;dtgtdd||tt¦«t t ¦«dœ S| d¦«du||dt|¦«|||t|¦«t|¦«dœ S) zBBuild the complete caller shape from already selected authorities.NrßràF) ÚenabledrßràrèÚstorage_configuredrÅÚexclusions_validrÏrØrìTr) rær5rárdrÐr�rÛrhrêrÖrÝ)r¾rÅrîråÚ configureds r(Ú_effective_configrðsò€à#& ?�N˜3Ñ Ô Ð ¸€Eõ�c �oðL¨%ðLØ*¨cÐ1ÐJ°^ÀsÐ5JñMôM€Jà €{˜%€{Ø Ý"6Ð!7Ý 4Ø#'Ø&+Ø"0Ø$4Ý�~Ñ.Ô.Ý&*Õ+=Ñ&>Ô&>ð@ð@ð @ð—w’w˜yÑ)Ô)¨TÐ1Ø"Ø! !œHÝ/°Ñ4Ô4Ø",Ø,Ø 0ݘc‘l”lÝ"-¨cÑ"2Ô"2ð 4ð 4ð4r'cól—t|¦«}t||pi¦«\}}t|||¦«S)a%Return root-authoritative policy; invalid input is always off. Every key is present on every return path so no caller has to guess: a partial or malformed public file yields the safe disabled shape with defaults. A malformed private exclusion authority refuses every account. )r·rÍrð)r6r¾rÅrîs r(Ú read_configròs;€õ �D‰/Œ/€CÝ'2°4¸¸ÀÑ'CÔ'CÑ$€NÐ$Ý ˜S .Ð2BÑ CÔ CÐCr'có>—tt|¦«gd¦«S)aReturn only CageFS-readable policy without opening account names. ``exclusions_valid`` is unknown rather than true. Passing this view to ``is_user_included`` therefore fails closed; callers that need an account decision must ask the authenticated daemon. N)rðr·rÂs r(Úread_public_configrô)s€õ �Y t™_œ_¨b°$Ñ 7Ô 7Ð7r'có,—| ¦«D]~\}}|tvrtd|z¦«‚t|\}}t|t¦«s$t|t ¦«r||cxkr|ksntd|||fz¦«‚ŒdS)z|Range-check a partial {key: int} the CLI is about to write. Raises StorageError naming the offending key and its bounds.zunknown limit: %sz'%s must be an integer between %d and %dN)rÒrÑr rAr5rB)Úpartialr=r>rÔrÕs r(Úvalidate_limitsr÷3sÀð—m’m‘o”oð3ð3‰ ˆˆUØ •lÐ "Ð "ÝÐ2°SÑ8Ñ9Ô9Ð 9Ý  Ô%‰ ˆˆTÝ �e�TÑ "Ô "ð 3­*°U½CÑ*@Ô*@ð 3ÈÈuÐH\ÐH\ÒH\ÐH\ÐX\ÒH\ÐH\ÐH\ÐH\ÝÐHØ"% s¨DÐ!1ñ 2ñ3ô3ð 3ðI]ð 3ð3r'có`—| dd¦«o|| d¦«pgvS)aYPer-account carve-out on top of the global `enabled` flag. The feature is for everyone; `excluded_users` is the handle for the account it cannot serve -- a git or tarball dependency, say -- carved out without touching the flag for the rest of the server. An excluded account takes the ordinary npm path: that is the point of the knob, not a failure. There is deliberately no allowlist counterpart: an administrator cannot know in advance which accounts are safe, so an allowlist rollout degenerates into more work than excluding the few that surface (and the config's unknown-key tolerance leaves room to add one later without migration, should a real need appear). Takes the dict `read_config` returned; an absent key reads as an empty list, so a partial dict from an older caller means everyone included. rîTrÅ)rh)ÚuserÚconfigs r(Úis_user_includedrû?s<€ð �JŠJÐ)¨4Ñ 0Ô 0ð AؘVŸZšZÐ(8Ñ9Ô9Ð?¸RÐ@ðBr'có¶—t|¦«oJtj |¦«o+|tj |¦«ko|t vSrÇ)r5r.r6r†ÚnormpathÚ_DANGEROUS_PATHSrÂs r(rârâSsO€Ý �‰JŒJð -�2œ7Ÿ=š=¨Ñ.Ô.ð -°4½2¼7×;KÒ;KÈDÑ;QÔ;QÒ3Qð -ØÕ,Ð,ð.r'cóR—tj}| tj¦«dd…D]r}tj ||¦«} tj|¦«}n#t $rYdSwxYwtj|j ¦«rtd¦«‚ŒsdS)zCReject every lexical symlink component before creating or using it.rNz path must not traverse a symlink) r.ršr…r6r^Úlstatr0r/ÚS_ISLNKr2r )r6r�rœr7s r(Ú_reject_symlink_ancestorsrXs¶€åŒf€GØ—Z’Z¥¤Ñ'Ô'¨¨¨Ô+ðCðCˆ Ý”'—,’,˜w¨ Ñ2Ô2ˆð Ý”8˜GÑ$Ô$ˆDˆDøÝð ð ð Ø ˆFˆFˆFð øøøå Œ<˜œ Ñ %Ô %ð CÝÐAÑBÔBÐ Bð Cð CðCsÁA,Á, A;Á:A;cóÒ—tj|¦«}tj|j¦«r'|jdkstj|j¦«dzrtd|z¦«‚dS)Nrr,z.%s must be a root-owned non-writable directory)r.rWr/ÚS_ISDIRr2r3r4r )r°Úlabelr7s r(Ú_require_root_private_dirrese€Ý Œ8�B‰<Œ<€DÝ ŒL˜œÑ &Ô &ðU¨$¬+¸Ò*:Ð*:ÝŒ|˜DœLÑ)Ô)¨EÑ1ð+;åÐKÈeÑSÑTÔTÐTð+;Ð*:r'Fcó$—t|t¦«rt|¦«std¦«‚| t j¦«dd…}d}t jt jt jt j zt j z¦«} t|d¦«t|¦«D�])\}} t j|t jt j zt j z|¬¦«}nÀ#t$r³}|r|t|¦«dz krtd|z¦«‚ t j|t |¬¦«d}t j|t jt j zt j z|¬¦«}n$#t$r} td | z¦«‚d} ~ wwxYwYd}~nd}~wwxYwt|d ¦«t j|¦«|}�Œ+||fS#t$$rt j|¦«‚wxYw) zýOpen a configured cache directory without ever following a component. The fd is the authority for all later cache work. Rechecking names with lstat and then reopening them would leave a replacement window for a hostile path component. z6storage path must be an absolute, non-system directoryrNFzstorage path ancestorrOzstorage path is not usable: %sTzcannot create storage path: %szstorage path component)rAr„râr r…r.ršrDrErFrGrÚ enumerater0r]ÚmkdirÚ STORAGE_MODErIr”) r6Úcreater¡Úcreatedr°ÚindexrœrŽr–Ú create_excs r(Ú_open_storage_dirrls.€õ �d�CÑ Ô ðUÕ(:¸4Ñ(@Ô(@ðUÝÐSÑTÔTÐTØ—’�BœFÑ#Ô# A B BÔ'€JØ€GÝ Œ•”�œ¥r¤~Ñ5½¼ ÑEÑ FÔ F€BðÝ! "Ð&=Ñ>Ô>Ð>Ý )¨*Ñ 5Ô 5ð ñ Ñ ˆE�9ð VÝœ  Ý "¤ ­b¬nÑ <½r¼}Ñ LØ')ð+ñ+ô+��øõð Vð Vð VØðO ­#¨j©/¬/¸AÑ*=Ò!=Ð!=Ý&Ð'GÈ#Ñ'MÑNÔNÐNðVÝ”H˜Y­ ¸RÐ@Ñ@Ô@Ð@Ø"�GÝœG IÝ$&¤Kµ"´.Ñ$@Å2Ä=Ñ$PØ+-ð/ñ/ô/�E�EøõðVðVðVÝ&Ð'GÈ*Ñ'TÑUÔUÐUøøøøðVøøøð�E�E�E�Eøøøøð Vøøøõ & eÐ-EÑ FÔ FÐ FÝ ŒH�R‰LŒLˆL؈B‰BØ�7ˆ{ÐøÝ ðððÝ Œ�‰ Œ ˆ Ø ðøøøs[Â!%G/Ã;DÄG/Ä GÄ *F;Ä8AFÆF;Æ F3ÆF.Æ.F3Æ3F;Æ6G/Æ;GÇ.G/Ç/ Hcó´—t|d¬¦«\}} |rtj|t¦«nCt jtj|¦«j¦«tkrtd¦«‚n$#t$r}td|z¦«‚d}~wwxYwt|¦«tj |¦«dS#tj |¦«wxYw)aPrepare one explicit storage directory and prove local hardlinks work. Only an absolute, normalized path below an existing non-symlink directory is accepted. The final directory may be created root-private; existing storage is required to be a real root-owned mode-0700 directory and is never chmodded by this command. A probe proves hardlinks work *inside* it. It cannot prove compatibility with every account home, so delivery reports a clear cross-device failure when its own staging/cache operation needs it. T©r ú1existing storage path must already have mode 0700zcannot secure storage path: %sN) rr.Úfchmodr r/r4rWr2r r0Ú_check_hardlinks_fdrI)r6r°r r–s r(Úvalidate_storage_pathr“sÛ€õ$ D°Ð6Ñ6Ô6�K€Bˆð ð GØð XÝ” ˜"�lÑ+Ô+Ð+Ð+Ý”�bœh r™lœlÔ2Ñ3Ô3µ|ÒCÐCÝ"Ð#VÑWÔWÐWøøÝð Gð Gð GÝÐ?À#ÑEÑFÔFÐ Føøøøð Gøøøå˜BÑÔÐå Œ�‰ Œ ˆ ˆ ˆ ø�Œ�‰ Œ ˆ ˆ øøøs*—A A8Á7CÁ8 BÂBÂBÂCÃCcóÔ—t|¦«\}} tj|¦«}n$#t$r}t d|z¦«‚d}~wwxYw|D�]h}|t ks| t¦«r€ tj||d¬¦«}n&#t$rYtj |¦«dSwxYwtj |j ¦«r|j tkrŒ‘tj |¦«dS|ddtfvrtj |¦«dS tj|tjtjztjz|¬¦«}n&#t$rYtj |¦«dSwxYw tj|¦«}|dkrt)|d¦«n^|j tks"tj|j ¦«t,kr, tj |¦«tj |¦«dStj|¦«r, tj |¦«tj |¦«dSnA#ttf$r-Ytj |¦«tj |¦«dSwxYw tj |¦«�ŒQ#tj |¦«wxYw tj |¦«d S#tj |¦«wxYw) aÎWhether a registry may safely be changed for this storage. Bun does not include the registry in its cache identity. Keep the check fd-relative and conservative: the usage snapshot, an empty delivery staging directory, an empty prune quarantine and a leftover hardlink probe file are metadata this code wrote itself, never content from the former registry; every other entry means the cache is not safe to reuse for another registry. z cannot inspect storage cache: %sNFr‚z.delivery-stagingú.tmprOúBun temporary directoryT)rr.Úlistdirr0r ÚSTORAGE_USAGE_FILEÚ startswithÚHARDLINK_PROBE_PREFIXr/rIr1r2r3r«ÚPRUNE_TRASH_DIRECTORYrDrErFrGrWrr4r )r6rLÚ_createdÚnamesr–rtr7Ú staging_fds r(Ústorage_cache_is_emptyr!«sY€õ*¨$Ñ/Ô/Ñ€GˆXð*ð IÝ”J˜wÑ'Ô'ˆEˆEøÝð Ið Ið IÝÐAÀCÑGÑHÔHÐ Høøøøð Iøøøàð" %ñ" %ˆDØÕ*Ò*Ð*Ø—’Õ'<Ñ=Ô=ð+ð!Ýœ7 4°ÈÐOÑOÔO�D�DøÝð!ð!ð!Ø ˜5õ: Œ�ÑÔÐÐÐð=!øøøå”< ¤ Ñ-Ô-ð°$´+ÅÒ2IÐ2IØØõ4 Œ�ÑÔÐÐÐð3Ð/°Ý1ð3ð3ð3àõ. Œ�ÑÔÐÐÐð- ÝœWØ�"œ+­¬Ñ6½¼ÑFØ"ð$ñ$ô$� � øõð ð ð Ø�uõ" Œ�ÑÔÐÐÐð% øøøð %Ý”x  Ñ+Ô+�ؘ6’>�>Ý-¨jØ.GñIôIðIðIà”k¥XÒ-Ð-Ýœ d¤lÑ3Ô3µ|ÒCÐCØ õ ”˜Ñ$Ô$Ð$Ð$õ Œ�ÑÔÐÐÐõ”:˜jÑ)Ô)ð!Ø õ”˜Ñ$Ô$Ð$Ð$õ Œ�ÑÔÐÐÐð!øå�\Ð*ð ð ð Øå”˜Ñ$Ô$Ð$Ð$õ Œ�ÑÔÐÐÐð  øøøð!õ ”˜Ñ$Ô$Ð$Ñ$ø•”˜Ñ$Ô$Ð$Ð$øøøØå Œ�ÑÔÐÐÐø�Œ�ÑÔÐÐøøøs•*©Kª A ´AÁA Á -KÁ9BÂK B4ÂKÂ3B4Â4.KÃ8 KÄ;EÅKÅ E;Å"KÅ:E;Å;KÅ?AI ÇKÈI ÈKÉJ!É JÉJ!ÉKÊJÊJ!Ê KÊ!J7Ê7KËK'cóL—dx}}d}d} td¦«D]ª}ttjd¦« ¦«z} tj|tjtjztjztj zd|¬¦«}d}n<#t$r }|j tj kr‚Yd}~Œ£d}~wwxYwtd¦«‚tj|¦«|dz}tj||||d¬ ¦«d}n$#t$r}td |z¦«‚d}~wwxYw |r|nd|r|ndfD],}|r( tj||¬¦«Œ#t$rYŒ(wxYwŒ-dS#|r|nd|r|ndfD],}|r( tj||¬¦«Œ#t$rYŒ(wxYwŒ-wxYw) NFéé rrOTz#cannot create unique hardlink probez.link)Ú src_dir_fdÚ dst_dir_fdrƒz+storage path does not support hardlinks: %s)Úrangerr.ÚurandomÚhexrDÚO_WRONLYÚO_CREATÚO_EXCLrGr0ÚerrnoÚEEXISTr rIÚlinkÚunlink) r¢ÚsourceÚtargetr ÚlinkedÚ_unusedr°r–Ú candidates r(rrãs]€ØÐ€FˆVØ€GØ €FðݘR‘y”yð Fð FˆGÝ*­R¬Z¸©^¬^×-?Ò-?Ñ-AÔ-AÑAˆFð Ý”W˜VÝœ[­2¬:Ñ5½¼ ÑAÅBÄMÑQØ"¨<ð9ñ9ô9�ð�Ø�øÝð ð ð Ø”9¥¤ Ò,Ð,Øð-Ð,Ð,Ð,Ð,øøøøð øøøõÐDÑEÔEÐ EÝ Œ�‰ Œ ˆ ؘ'Ñ!ˆÝ Œ�˜¨<ÀLØ %ð 'ñ 'ô 'ð 'àˆˆøÝ ðPðPðPÝÐHÈ3ÑNÑOÔOÐOøøøøðPøøøð ð%+Ð4˜&˜&°ÀÐ6Q°f°fÈTÐRð ð ˆIØð ðÝ”I˜i° Ð=Ñ=Ô=Ð=Ð=øÝðððØ�Dðøøøð ð ð ø FÐ4˜&˜&°ÀÐ6Q°f°fÈTÐRð ð ˆIØð ðÝ”I˜i° Ð=Ñ=Ô=Ð=Ð=øÝðððØ�Dðøøøð ð øøøs‹Š?DÁ A BÂD CÂ!B<Â7DÂ<CÃADÄE(Ä D)ÄD$Ä$D)Ä)E(Ä>EÅ E"Å!E"Å(F#Å:FÆF#Æ F ÆF#ÆF ÆF#cóŽ—t|t¦«rBtj |¦«r#|tj |¦«krt d¦«‚tj |¦«\}}|st d¦«‚tjtj tj tj ztj z¦«} t|d¦«| tj ¦«dd…}t|¦«D�]ú\}} tj|tj tj ztj z|¬¦«}�n#t$�r}|t!|¦«dz ks|jt"jkrt d|z¦«‚ tj|t(|¬¦«n>#t$r1} | jt"jkrt d| z¦«‚Yd} ~ nd} ~ wwxYw tj|tj tj ztj z|¬¦«}n$#t$r} t d| z¦«‚d} ~ wwxYwYd}~nd}~wwxYw t|d¦«|t!|¦«dz krCt-jtj|¦«j¦«t(krt d ¦«‚n##t4$rtj|¦«‚wxYwtj|¦«|}�Œü||fS#t4$rtj|¦«‚wxYw) zBOpen the root-private parent for a lock without trusting its name.zstorage lock path is invalidzstorage lock ancestorrNrOz(storage lock directory is not usable: %sz(cannot create storage lock directory: %szstorage lock directoryz*storage lock directory must have mode 0700)rAr„r.r6r†rýr r…rDršrErFrGrrr0r]r-ÚENOENTr r r.r/r4rWr2r”rI) r6Ú directoryrtr°r¡r rœrŽr–Ú mkdir_excÚopen_excs r(Ú_open_lock_directoryr;sL€å �t�SÑ !Ô !ð;­¬¯ª°tÑ)<Ô)<ð;Ø•r”w×'Ò'¨Ñ-Ô-Ò-Ð-ÝÐ9Ñ:Ô:Ð:Ý”g—m’m DÑ)Ô)�O€IˆtØ ð;ÝÐ9Ñ:Ô:Ð:Ý Œ•”�œ¥r¤~Ñ5½¼ ÑEÑ FÔ F€Bð#Ý! "Ð&=Ñ>Ô>Ð>Ø—_’_¥R¤VÑ,Ô,¨Q¨R¨RÔ0ˆ Ý )¨*Ñ 5Ô 5ð ñ Ñ ˆE�9ð ^Ýœ  Ý "¤ ­b¬nÑ <½r¼}Ñ LØ')ð+ñ+ô+�‘øõð ^ñ ^ð ^Ø�C  ™OœO¨aÑ/Ò/Ð/°3´9ÅÄ Ò3LÐ3LÝ&Ð'QÐTWÑ'WÑXÔXÐXðcÝ”H˜Y­ ¸RÐ@Ñ@Ô@Ð@Ð@øÝðcðcðcØ ”­%¬,Ò6Ð6Ý*Ð+UÐXaÑ+aÑbÔbÐbð7Ð6Ð6Ð6Ð6øøøøðcøøøð^ÝœG IÝ$&¤Kµ"´.Ñ$@Å2Ä=Ñ$PØ+-ð/ñ/ô/�E�Eøõð^ð^ð^Ý&Ð'QÐT\Ñ'\Ñ]Ô]Ð]øøøøð^øøøð�E�E�E�Eøøøøð ^øøøð Ý)¨%Ð1IÑJÔJÐJØ�S ™_œ_¨qÑ0Ò0Ð0Ý œL­¬°%©¬Ô)@ÑAÔAÅ\ÒQÐQÝ&Ð'SÑTÔTÐTøøÝð ð ð Ý”˜‘”�Øð øøøõ ŒH�R‰LŒLˆL؈B‰BØ�4ˆxˆøÝ ðððÝ Œ�‰ Œ ˆ Ø ðøøøsžÃA L$Ä+;E(Å&L$Å( I7Å3=I2Æ1GÇ I2Ç H Ç'HÇ?I2ÈH È I2È ;I ÉI2É I*ÉI%É%I*É*I2É-L$É2I7É7L$É;A)K%Ë$L$Ë% LÌL$Ì$ Mcó(—eZdZeddfd„Zd„Zd„ZdS)Ú _StorageLockFNcóL—||_||_||_||_d|_dSrÇ)Ú _exclusiveÚ_pathÚ _nonblockingÚ_timeoutÚ_fd)ÚselfÚ exclusiver6Ú nonblockingÚtimeouts r(Ú__init__z_StorageLock.__init__5s*€à#ˆŒØˆŒ Ø'ˆÔ؈Œ ؈Œˆˆr'có6—t|j¦«\}} tj|tjtjz|¬¦«|_d}ná#t$rÔ}|jtj kr‚ tj|tjtj ztj ztjzd|¬¦«|_d}nb#t$rU}|jtj kr‚tj|tjtjz|¬¦«|_d}Yd}~nd}~wwxYwYd}~nd}~wwxYw|rtj |jd¦«tj|j¦«}tj|j¦«r'|jdkstj|j¦«dzrt)d¦«‚|jr t,jn t,j}d}|j�5|jdkrt)d¦«‚t5j¦«|jz}|js|�|t,jz} t-j|j|¦«n¦#t$r˜}|jtjtj tj!fvr‚|jrtEd ¦«‚|t5j¦«z } | dkrt)d ¦«‚t5j#tId | ¦«¦«Yd}~nd}~wwxYwŒÂn|#t($r)|j� tj%|j¦«d|_‚t$r>}|j� tj%|j¦«d|_t)d |z¦«‚d}~wwxYw tj%|¦«n#tj%|¦«wxYw|S) NrOFrTré?z6storage lock must be a root-owned private regular filez)storage lock timeout must be non-negativezstorage lock is busyzstorage lock wait timed outgš™™™™™©?zcannot open storage lock: %s)&r;r@r.rDÚO_RDWRrGrCr0r-r7r+r,r.rrWr/r1r2r3r4r r?ÚfcntlÚLOCK_EXÚLOCK_SHrBÚtimeÚ monotonicrAÚLOCK_NBÚflockÚEACCESÚEAGAINÚ EWOULDBLOCKr*Úsleepr[rI) rDr¢rtr r–rr7ÚflagsÚdeadlinerps r(Ú __enter__z_StorageLock.__enter__=sÀ€Ý1°$´*Ñ=Ô=ш �dð: #ð $Ýœ7 4­¬µR´]Ñ)BØ*6ð8ñ8ô8�”à��øÝð $ð $ð $Ø”9¥¤ Ò,Ð,Øð $Ý!œwØ�bœi­"¬*Ñ4µr´yÑ@Å2Ä=ÑPØ lð 4ñ 4ô 4�D”Hð#�G�GøÝð$ð$ð$Ø!Ô'­5¬<Ò7Ð7ØÝ!œw t­R¬Y½¼Ñ-FØ.:ð <ñ <ô <�D”Hà#�G�G�G�G�G�Gøøøøð $øøøøøøøøøøøøð $øøøðð +Ý” ˜$œ( EÑ*Ô*Ð*Ý”8˜DœHÑ%Ô%ˆDÝ”L ¤Ñ.Ô.ð ]°$´+ÀÒ2BÐ2BÝ”| D¤LÑ1Ô1°EÑ9ð3Cå"Ð#[Ñ\Ô\Ð\Ø%)¤_ÐG•E”M�M½%¼-ˆE؈HØŒ}Ð(Ø”= 1Ò$Ð$Ý&Ð'RÑSÔSÐSÝœ>Ñ+Ô+¨d¬mÑ;�ØÔ ð ' HÐ$8Ø�œÑ&�ð 5ð 5Ý”K ¤¨%Ñ0Ô0Ð0ØøÝð 5ð 5ð 5Ø”yÝ!œL­%¬,½Ô8Ið)KðKðKàØÔ(ðJÝ1Ð2HÑIÔIÐIØ (­4¬>Ñ+;Ô+;Ñ ;�IØ  A’~�~Ý*Ð+HÑIÔIÐIÝ”J�s 4¨Ñ3Ô3Ñ4Ô4Ð4Ð4Ð4Ð4Ð4Ð4øøøøð 5øøøð 5ðøõð ð ð ØŒxÐ#Ý”˜œÑ"Ô"Ð"Ø�”Ø Ýð Eð Eð EØŒxÐ#Ý”˜œÑ"Ô"Ð"Ø�”ÝÐ=ÀÑCÑDÔDÐ Døøøøð  Eøøøð!õ, ŒH�\Ñ "Ô "Ð "Ð "ø�BŒH�\Ñ "Ô "Ð "Ð "øøøØˆ s¥š5AÁK.Á D.ÁD)Á1ACÃD)à D!à A DÄD)ÄD!Ä!D)Ä$K.Ä)D.Ä.C=K.È,IÉK.É K)ÉBK$ËK.Ë$K)Ë)K.Ë-NË.;M'Ì)9M"Í"M'Í'NÎNcóX—|j�"tj|j¦«d|_dSdSrÇ)rCr.rI)rDr–s r(Ú__exit__z_StorageLock.__exit__|s/€Ø Œ8Ð Ý ŒH�T”XÑ Ô Ð ØˆDŒHˆHˆHð Ð r')r"r#r$Ú LOCK_PATHrHrYr[r&r'r(r=r=4sO€€€€€Ø'0¸eØððððð=ð=ð=ð~ððððr'r=có&—t|||¬¦«S)N©rG©r=)rEr6rGs r(Ú storage_lockr`‚s€Ý ˜  4°Ð 9Ñ 9Ô 9Ð9r'có&—td||¬¦«S)z@Serialize the supported CLI's complete config read-modify-write.Tr^r_)r6rGs r(Ú config_lockrb†s€å ˜˜d¨GÐ 4Ñ 4Ô 4Ð4r'cóB—t|¦«\}} tj|¦«}tj|¦«n#tj|¦«wxYw|€t}d|j|jfz}tdtj  ||¦«||¬¦«S)aSerialize Bun cache writers for one pinned storage directory. Delivery keeps its existing shared storage lock for the complete transaction, while this narrower lock covers only Bun's cache mutation. Distinct storage directories therefore remain independent. Nzbun-cache-%x-%x.lockT)rFrG© rr.rWrIÚLOCK_DIRECTORYrˆr‰r=r6r^)r6Úlock_directoryrFrGrLrr7rts r(Úcache_population_lockrg‹s¥€õ*¨$Ñ/Ô/Ñ€GˆXðÝŒx˜Ñ Ô ˆå Œ�ÑÔÐÐø�Œ�ÑÔÐÐøøøØÐÝ'ˆØ ! T¤[°$´+Ð$>Ñ >€DÝ ˜�bœgŸlšl¨>¸4Ñ@Ô@Ø$/¸ð Bñ Bô BðBó ”=½Acó@—t|¦«\}} tj|¦«}tj|¦«n#tj|¦«wxYw|€t}d|j|jfz}tdtj  ||¦«|¬¦«S)zESerialize prune commands without making deliveries wait on this lock.Nzbun-prune-%x-%x.lockTr^rd)r6rfrGrLrr7rts r(Ú_prune_maintenance_lockrjŸs�€å)¨$Ñ/Ô/Ñ€GˆXðÝŒx˜Ñ Ô ˆå Œ�ÑÔÐÐø�Œ�ÑÔÐÐøøøØÐÝ'ˆØ ! T¤[°$´+Ð$>Ñ >€DÝ ˜�bœgŸlšl¨>¸4Ñ@Ô@Ø 'ð )ñ )ô )ð)rhcóœ—| d¦«}|dks%t ||dzd…¦«sdS|d|…}| d¦«}||dzd…}|dkoX|oVtd¦«t|d¦«cxkotd ¦«kncod |vo| d ¦« S) z:Measured Bun 1.4 name: package@version@@@cache-generation.ú@@@réNFú@rÚ0Ú9rr|)ÚrfindÚ _ASCII_DIGITSÚmatchÚordr)rtÚmarkerÚpackage_versionÚ separatorÚversions r(Ú_is_canonical_namery­sê€à �ZŠZ˜Ñ Ô €FØ �‚{€{�-×-Ò-¨d°6¸A±:°;°;Ô.?Ñ@Ô@€{؈uؘ7˜F˜7”m€OØ×%Ò% cÑ*Ô*€Iؘi¨!™m˜n˜nÔ-€GØ ˜ŠMð S˜gð SÝ�C‘”�C ¨¤ ™OœOÐ7Ð7Ò7Ð7­s°3©x¬xÒ7Ð7Ð7Ð7ð Sà˜?Ð*ð Sà3B×3MÒ3MÈcÑ3RÔ3RÐ/RðTr'có®—| d¦«}|d|…}| d¦«}|d|…||dzd…||d…zfS)Nrlrnr)rq)rtrurvrws r(Ú_canonical_partsr{ºsa€Ø �ZŠZ˜Ñ Ô €Fؘ7˜F˜7”m€OØ×%Ò% cÑ*Ô*€IØ ˜:˜I˜:Ô &¨¸ ÀA¹ ¸¸Ô(GÈ$ÈvÈwÈwÌ-Ñ(WÐ WÐWr'có( —d}t¦«}d}tj|¦«g} |�rÈ|�Ftj¦«|kr/ |r*tj| ¦«¦«|°(dSdS| ¦«} tj|¦«D�]#}|�Ztj¦«|krCtj|¦«|r*tj| ¦«¦«|°(dSdS tj||d¬¦«}nR#t$rEYtj|¦«|r*tj| ¦«¦«|°(dSdSwxYwtj |j ¦«�r|j dkstj |j ¦«dzrCtj|¦«|r*tj| ¦«¦«|°(dSdS tj|tjtjztjz|¬¦«} nR#t$rEYtj|¦«|r*tj| ¦«¦«|°(dSdSwxYw| | ¦«�Œôtj|j ¦«rÕd }t)|¦«sCtj|¦«|r*tj| ¦«¦«|°(dSdS|jd krCtj|¦«|r*tj| ¦«¦«|°(d Sd S|j|jf} | |vr| | ¦«||jz }�Œâtj|¦«|r*tj| ¦«¦«|°(dSdS tj|¦«n#tj|¦«wxYw|�°Èn=#t$r0Y|r*tj| ¦«¦«|°(dSdSwxYw|r(tj| ¦«¦«|°(n/#|r(tj| ¦«¦«|°(wxYw|rd |fndS) a.Return (state, bytes): removable, kept (linked), poisoned, or skipped. ``poisoned`` is an owner/mode anomaly on a directory or regular file -- the trace a ``chown -R`` leaves -- and is reported separately from the other anomalies because it is the one the administrator has to act on. rFN©Úskippedrr‚r,©ÚpoisonedrrOTr©ÚkeptrÚ removable)rer.rCrOrPrIÚpoprr/r0rr2r3r4rDrErFrGr\r1r‹rŠrˆr‰ÚaddrX) r°rXÚtotalÚseenÚ has_regularÚstackr�rtr7rŽrws r(Ú_safe_entry_treerŠÁs‹€ð €EÝ ‰5Œ5€DØ€KÝ ŒV�B‰ZŒZˆL€Eð)"Øñ# "ØÐ#­¬Ñ(8Ô(8¸HÒ(DÐ(DØ#ðJð "Ý ŒH�U—Y’Y‘[”[Ñ !Ô !Ð !ðð "ð "ð "ð "ð "ðI—i’i‘k”kˆGð "ÝœJ wÑ/Ô/ð,ñ,�DØÐ+µ´Ñ0@Ô0@ÀHÒ0LÐ0LØ+õ8”˜Ñ!Ô!Ð!ðð "Ý ŒH�U—Y’Y‘[”[Ñ !Ô !Ð !ðð "ð "ð "ð "ð "ð?,Ý!œw t°GÈUÐSÑSÔS˜˜øÝ"ð,ð,ð,Ø+˜|õ0”˜Ñ!Ô!Ð!ðð "Ý ŒH�U—Y’Y‘[”[Ñ !Ô !Ð !ðð "ð "ð "ð "ð "ð;,øøøå”| D¤LÑ1Ô1ñ,Øœ;¨!Ò+Ð+­t¬|¸D¼LÑ/IÔ/IÈEÑ/QÐ+Ø#0õ*”˜Ñ!Ô!Ð!ðð "Ý ŒH�U—Y’Y‘[”[Ñ !Ô !Ð !ðð "ð "ð "ð "ð "ð10Ý$&¤G¨DÝ,.¬K½"¼.Ñ,HÍ2Ì=Ñ,XØ3:ð%<ñ%<ô%<˜E˜Eøõ 'ð0ð0ð0Ø#/ <õ”˜Ñ!Ô!Ð!ðð "Ý ŒH�U—Y’Y‘[”[Ñ !Ô !Ð !ðð "ð "ð "ð "ð "ð)0øøøàŸ š  UÑ+Ô+Ð+Ñ+Ýœ d¤lÑ3Ô3ð ,Ø&*˜ Ý4°TÑ:Ô:ð1Ø#0õ”˜Ñ!Ô!Ð!ðð "Ý ŒH�U—Y’Y‘[”[Ñ !Ô !Ð !ðð "ð "ð "ð "ð "ð œ=¨1Ò,Ð,Ø#,õ”˜Ñ!Ô!Ð!ðð "Ý ŒH�U—Y’Y‘[”[Ñ !Ô !Ð !ðð "ð "ð "ð "ð "ð"&¤¨d¬kÐ :˜Ø ¨Ð,Ð,Ø ŸHšH U™OœO˜OØ! T¤\Ñ1˜Eùà+唘Ñ!Ô!Ð!ðð "Ý ŒH�U—Y’Y‘[”[Ñ !Ô !Ð !ðð "ð "ð "ð "ð "ðE,õ<”˜Ñ!Ô!Ð!Ð!ø•”˜Ñ!Ô!Ð!Ð!øøøðGñ# "øøõH ðððØàð "Ý ŒH�U—Y’Y‘[”[Ñ !Ô !Ð !ðð "ð "ð "ð "ð "ðøøøðð "Ý ŒH�U—Y’Y‘[”[Ñ !Ô !Ð !ðð "øøˆeð "Ý ŒH�U—Y’Y‘[”[Ñ !Ô !Ð !ðð "ð "ð "ð "ð "à#.Ð BˆK˜Ð Ð °NÐBsÇ©O5Á4O5 1OÂ:O5Ã=DÄOÄ E$ÄOÄ!O5Å#E$Å$AOÆ)O5Ç,;H(È'OÈ( I7È2OÈ4O5É6I7É7AOÊ<O5Ë> OÌ O5Í 4OÎO5ÏO5ÏO.Ï.O5Ï4QÏ5 P/Ï?QÐ.P/Ð/QÑ,R cóî—d„}tj|¦«}tj|¦«}ddd|j|jdœg} |�r…|�&t j¦«|krtd¦«‚|d}|d€tj|¦«|d<|dt|d¦«krÒ|d €|  ¦«ŒŽ||d ¦«\}} |d } | j| d ks| j| d krtd¦«‚tj |d |¬¦«n##t$rtj |¦«‚wxYwtj |¦«|}|  ¦«�ŒC|d|d} |dxxdz cc<tj| |d¬¦«} tj| j¦«rrt|¦«t"krtd¦«‚||| ¦«\} }tj |¦«| }| | dd|j|jdœ¦«n|tj| j¦«r"| jdkrtj| |¬¦«nA|r0tj| j¦«rtj| |¬¦«ntd¦«‚|�°…tj |¦«dS#tj |¦«wxYw)a0Remove a previously scanned tree, still refusing all unsafe nodes. A tree deeper than `MAX_REMOVAL_DEPTH` is refused rather than removed: every caller counts that as `skipped`, so the entry stays quarantined for the next prune instead of costing this one unbounded time under the locks. cóì—tj|tjtjztjz|¬¦«} |tj|¦«fS#t $rtj|¦«‚wxYw)NrO)r.rDrErFrGrWÚ BaseExceptionrI)rPrtrŽs r(Úopen_dirz_remove_tree..open_dir sr€Ý”˜�bœk­B¬NÑ:½R¼]ÑJØ%ð'ñ'ô'ˆð Ø�"œ( 5™/œ/Ð)Ð )øÝð ð ð Ý ŒH�U‰OŒOˆOØ ð øøøs ½AÁ A3Nr)rtrr ÚdevÚinozprune maintenance slice expiredr�rr rtr}éþÿÿÿr�r�zentry changed while pruningrOrFr‚zentry is too deep to prune)r.rCrWrˆr‰rOrPr rr]r„Úrmdirr�rIr/rr2ÚMAX_REMOVAL_DEPTHr\r1rŠr0r)r°Úallow_symlinksrXrŽr�Ú root_infoÚframesÚframeÚparentÚ parent_infoÚabovertr7rŽÚ child_infos r(Ú _remove_treerœùs=€ð"ððõŒf�R‰jŒj€GÝ”˜Ñ!Ô!€IØ d°QØÔ&¨yÔ/?ðAðAðB€Fð,Øñ) BØÐ#­¬Ñ(8Ô(8¸HÒ(DÐ(DÝ"Ð#DÑEÔEÐEؘ2”JˆEØ�WŒ~Ð%Ý!#¤¨GÑ!4Ô!4��g‘Ø�WŒ~¥ U¨7¤^Ñ!4Ô!4Ò4Ð4ؘ”=Ð(Ø—J’J‘L”L�LØØ&. h¨w¸Ñ&=Ô&=Ñ#�˜ ؘrœ �ðØ#Ô*¨e°E¬lÒ:Ð:Ø*Ô1°U¸5´\ÒAÐAÝ*Ð+HÑIÔIÐIÝ”H˜U 6œ]°6Ð:Ñ:Ô:Ð:Ð:øÝ$ðððÝ”H˜VÑ$Ô$Ð$Øðøøøõ”˜Ñ!Ô!Ð!Ø �Ø— ’ ‘ ” � ÙØ˜”> %¨¤.Ô1ˆDØ �'ˆNˆNŒN˜aÑ ˆNˆN‰NÝ”7˜4¨ÀÐGÑGÔGˆDÝŒ|˜DœLÑ)Ô)ð BÝ�v‘;”;Õ"3Ò3Ð3Ý&Ð'CÑDÔDÐDØ$, H¨W°dÑ$;Ô$;Ñ!��zÝ”˜Ñ!Ô!Ð!Ø�Ø— ’  t°dÀQØ&0Ô&7Ø&0Ô&7ð9ð9ñ:ô:ð:ð:õ”˜dœlÑ+Ô+ð B°´ ÀÒ0BÐ0BÝ” ˜$ wÐ/Ñ/Ô/Ð/Ð/Øð B¥D¤L°´Ñ$>Ô$>ð BÝ” ˜$ wÐ/Ñ/Ô/Ð/Ð/å"Ð#@ÑAÔAÐAðSñ) BõV Œ�ÑÔÐÐÐø�Œ�ÑÔÐÐøøøs'ÁB%KÃ&A D4Ä3KÄ4 EÅE4KËK4có —d}t¦«}tj|¦«g} |�r:|�Ftj¦«|kr/ |r*tj| ¦«¦«|°(dSdS| ¦«} tj|¦«D�]•}|�Ztj¦«|krCtj|¦«|r*tj| ¦«¦«|°(dSdS tj||d¬¦«}nR#t$rEYtj|¦«|r*tj| ¦«¦«|°(dSdSwxYwtj |j ¦«�r|j tkstj|j ¦«dzrCtj|¦«|r*tj| ¦«¦«|°(dSdS tj|tjtjztjz|¬¦«}nR#t$rEYtj|¦«|r*tj| ¦«¦«|°(dSdSwxYw| |¦«�Œùtj|j ¦«rÔ|j tkrCtj|¦«|r*tj| ¦«¦«|°(dSdS|jd krCtj|¦«|r*tj| ¦«¦«|°(d Sd S|j|jf} | |vr| | ¦«||jz }�Œætj|j ¦«rU|j tkrCtj|¦«|r*tj| ¦«¦«|°(dSdS�ŒTtj|¦«|r*tj| ¦«¦«|°(dSdS tj|¦«n#tj|¦«wxYw|�°:n=#t$r0Y|r*tj| ¦«¦«|°(dSdSwxYw|r(tj| ¦«¦«|°(n/#|r(tj| ¦«¦«|°(wxYwd |fS) aAClassify one observed Bun 1.4 temporary cache entry. Symlinks are data inside npm tarballs and are safe to unlink without following. A regular file with another hardlink means a delivered tree still uses this otherwise non-reusable temporary entry, so retain the whole directory until a later prune. rNr}Fr‚r,rrOrr�rƒ)rer.rCrOrPrIr„rr/r0rr2r3r«r4rDrErFrGr\r1rŠrˆr‰r…rXr) r°rXr†r‡r‰r�rtr7rŽrws r(Ú_safe_temporary_treeržFsø€ð €EÝ ‰5Œ5€DÝ ŒV�B‰ZŒZˆL€Eð."Øñ( "ØÐ#­¬Ñ(8Ô(8¸HÒ(DÐ(DØ#ðTð "Ý ŒH�U—Y’Y‘[”[Ñ !Ô !Ð !ðð "ð "ð "ð "ð "ðS—i’i‘k”kˆGð$ "ÝœJ wÑ/Ô/ð!,ñ!,�DØÐ+µ´Ñ0@Ô0@ÀHÒ0LÐ0LØ+õB”˜Ñ!Ô!Ð!ðð "Ý ŒH�U—Y’Y‘[”[Ñ !Ô !Ð !ðð "ð "ð "ð "ð "ðI,Ý!œw t°GÈUÐSÑSÔS˜˜øÝ"ð,ð,ð,Ø+˜|õ:”˜Ñ!Ô!Ð!ðð "Ý ŒH�U—Y’Y‘[”[Ñ !Ô !Ð !ðð "ð "ð "ð "ð "ðE,øøøå”| D¤LÑ1Ô1ñ,Øœ;­(Ò2Ð2µd´lÀ4Ä<Ñ6PÔ6PÐSXÑ6XÐ2Ø#0õ4”˜Ñ!Ô!Ð!ðð "Ý ŒH�U—Y’Y‘[”[Ñ !Ô !Ð !ðð "ð "ð "ð "ð "ð;0Ý$&¤GØ $¥b¤kµB´NÑ&BÅRÄ]Ñ&RØ'.ð%0ñ%0ô%0˜E˜Eøõ 'ð0ð0ð0Ø#/ <õ(”˜Ñ!Ô!Ð!ðð "Ý ŒH�U—Y’Y‘[”[Ñ !Ô !Ð !ðð "ð "ð "ð "ð "ð30øøøàŸ š  UÑ+Ô+Ð+Ñ+Ýœ d¤lÑ3Ô3ð,ð œ;­(Ò2Ð2Ø#0õ”˜Ñ!Ô!Ð!ðð "Ý ŒH�U—Y’Y‘[”[Ñ !Ô !Ð !ðð "ð "ð "ð "ð "ð! œ=¨1Ò,Ð,Ø#,õ”˜Ñ!Ô!Ð!ðð "Ý ŒH�U—Y’Y‘[”[Ñ !Ô !Ð !ðð "ð "ð "ð "ð "ð"&¤¨d¬kÐ :˜Ø ¨Ð,Ð,Ø ŸHšH U™OœO˜OØ! T¤\Ñ1˜EùÝœ d¤lÑ3Ô3ð,Øœ;­(Ò2Ð2Ø#0õ”˜Ñ!Ô!Ð!ðð "Ý ŒH�U—Y’Y‘[”[Ñ !Ô !Ð !ðð "ð "ð "ð "ð "ñ3ð ,唘Ñ!Ô!Ð!ðð "Ý ŒH�U—Y’Y‘[”[Ñ !Ô !Ð !ðð "ð "ð "ð "ð "ðO!,õF”˜Ñ!Ô!Ð!Ð!ø•”˜Ñ!Ô!Ð!Ð!øøøðQñ( "øøõR ðððØàð "Ý ŒH�U—Y’Y‘[”[Ñ !Ô !Ð !ðð "ð "ð "ð "ð "ðøøøðð "Ý ŒH�U—Y’Y‘[”[Ñ !Ô !Ð !ðð "øøˆeð "Ý ŒH�U—Y’Y‘[”[Ñ !Ô !Ð !ðð "ð "ð "ð "ð "à ˜Ð ÐsÔ§Q%Á2Q%Â1QÂ8Q%Ã;DÄQÄ E"ÄQÄQ%Å!E"Å"A QÆ,Q%Ç/;H+È*QÈ+ I:È5QÈ7Q%É9I:É:AQÊ>Q%Ì QÌ Q%ÍAQÎ+Q%Ï-QÏ0Q%Ð3Q%ÑQÑQ%Ñ$S Ñ% RÑ/S ÒRÒS Ó ,S9có†— tjdtjtjztjz|¬¦«}n=#t $r0}|jt jkr|dxxdz cc<Yd}~dSd}~wwxYw t|d¦«n5#t$r(|dxxdz cc<Ytj |¦«dSwxYw ttj |¦«¦«}n5#t $r(|dxxdz cc<Ytj |¦«dSwxYw|D�]Ì}|�tj¦«|kr�n¯t |¦«s|dxxdz cc<ŒJ tj|tjtjztjz|¬¦«}n #t $r|dxxdz cc<YŒ£wxYw t|d¦«n4#t$r'|dxxdz cc<Ytj |¦«ŒêwxYwt#||¬ ¦«\}} |d kr'||xxdz cc< tj |¦«�Œ/t%|d |¬ ¦«tj||¬¦«|d xxdz cc<|dxx| z cc<n'#t tf$r|dxxdz cc<YnwxYwtj |¦«�Œµ#tj |¦«wxYwtj |¦«n#tj |¦«wxYw tjd|¬¦«dS#t $rYdSwxYw)z?Remove only inactive Bun 1.4 race/crash residue below ``.tmp``.rrOr~rNrr€zBun temporary entry©rXrƒT)r”rXÚremovedÚbytes)r.rDrErFrGr0r-r7rr rIÚsortedrrOrPÚ_BUN_TEMPORARY_ENTRYrsržrœr’) rLÚsummaryrXÚ temporary_fdr–rrtÚentry_fdÚstateÚ reclaimeds r(Ú_prune_bun_temporary_entriesrªƒsX€ðÝ”wØ •B”K¥"¤.Ñ0µ2´=Ñ@Øðñôˆ ˆ øõ ðððØ Œ9�œ Ò $Ð $Ø �IÐ Ð Ô  !Ñ #Ð Ð Ñ Øˆˆˆˆˆøøøøðøøøð-ð Ý % lÐ4MÑ NÔ NÐ NÐ NøÝð ð ð Ø �JÐ Ð Ô  1Ñ $Ð Ð Ñ Ø õP Œ�ÑÔÐÐÐðU øøøð Ý�2œ: lÑ3Ô3Ñ4Ô4ˆEˆEøÝð ð ð Ø �IÐ Ð Ô  !Ñ #Ð Ð Ñ Ø õF Œ�ÑÔÐÐÐðK øøøðð #ñ #ˆDØÐ#­¬Ñ(8Ô(8¸HÒ(DÐ(DØ‘Ý'×-Ò-¨dÑ3Ô3ð Ø˜ Ð"Ð"Ô" aÑ'Ð"Ð"Ñ"Øð Ýœ7Ø�"œ+­¬Ñ6½¼ÑFØ'ð)ñ)ô)��øõð ð ð Ø˜ Ð"Ð"Ô" aÑ'Ð"Ð"Ñ"Ø�ð øøøð #ðÝ-¨hÐ8MÑNÔNÐNÐNøÝ#ðððؘJÐ'Ð'Ô'¨1Ñ,Ð'Ð'Ñ'Øõ”˜Ñ"Ô"Ð"Ð"ð!øøøõ$8Ø xð$1ñ$1ô$1Ñ ��yà˜KÒ'Ð'ؘE�N�N”N aÑ'�N�N‘NØõ”˜Ñ"Ô"Ð"Ñ"õ˜X°dØ&.ð0ñ0ô0ð0唘 lÐ3Ñ3Ô3Ð3ؘ Ð"Ð"Ô" aÑ'Ð"Ð"Ñ"Ø˜Ð Ð Ô  IÑ-Ð Ð Ñ Ð øÝ�\Ð*ð (ð (ð (ؘ Ð"Ð"Ô" aÑ'Ð"Ð"Ñ"Ð"Ð"ð (øøøõ”˜Ñ"Ô"Ð"Ñ"ø•”˜Ñ"Ô"Ð"Ð"øøøå Œ�ÑÔÐÐø�Œ�ÑÔÐÐøøøð Ý Œ� Ð(Ñ(Ô(Ð(Ð(Ð(øÝ ð ð ð Ø ˆˆð øøøs‚;>¾ A8Á%A3Á3A8Á=B LÂCÂ(LÂ?CÃLÃ!C&Ã%LÃ&DÄLÄDÄALÅ(;F$Æ#LÆ$GÆ>LÇGÇLÇGÇJÇHÇ1JÇ2LÈHÈ-JÈ6LÉ AJÊKÊ!J9Ê6KÊ8J9Ê9KÊ<LËK(Ë(LÌLÌL2Ì2 MÌ?McóL— tj|tjtjztjz|¬¦«}n#t $rYdSwxYw t |d¦«tj||¬¦«|kr tj|¦«dStj ||¬¦«n%#t $rYtj|¦«dSwxYw tj|¦«n#tj|¦«wxYw tj ||¬¦«dS#t $rYdSwxYw)zCDrop only Bun's exact lookup symlink; unknown lookup data survives.rONúBun lookup directory) r.rDrErFrGr0rÚreadlinkrIr0r’)Ú parent_fdÚpackagerxÚ canonicalÚexpected_targetÚ lookup_fds r(Ú_remove_lookupr³Ásf€ðÝ”G˜GÝœK­"¬.Ñ8½2¼=ÑHØ#,ð.ñ.ô.ˆ ˆ øõ ðððØˆˆðøøøðÝ! )Ð-CÑDÔDÐDÝ Œ;�w yÐ 1Ñ 1Ô 1°_Ò DÐ DØ õ Œ�ÑÔÐÐÐõ Œ �' )Ð,Ñ,Ô,Ð,Ð,øÝ ðððØå Œ�ÑÔÐÐÐðøøøð -õ Œ�ÑÔÐÐø�Œ�ÑÔÐÐøøøð Ý Œ� Ð+Ñ+Ô+Ð+Ð+Ð+øÝ ð ð ð Ø ˆˆð øøøsQ‚;>¾ A Á A Á*B(ÂB(Â'C#Â( C Â2C#à C à C#Ã#C9Ã=DÄ D#Ä"D#cóŽ— tjttjtjztjz|¬¦«}nÍ#t $rÀ}|sYd}~dS|jtjkrtd|z¦«‚ tj tt|¬¦«tjttjtjztjz|¬¦«}n$#t $r}td|z¦«‚d}~wwxYwYd}~nd}~wwxYw t|d¦«n##t$rtj|¦«‚wxYw|S)NrOz cannot open prune quarantine: %sz"cannot create prune quarantine: %szprune quarantine)r.rDrrErFrGr0r-r7r r r rr”rI)rLr r°r–rs r(Ú_open_prune_trashrµØsv€ðRÝ ŒWÕ*Ý”[¥2¤>Ñ1µB´MÑAØ#ð%ñ%ô%ˆˆøõ ð Rð Rð RØð Ø�4�4�4�4�4Ø Œ9�œ Ò $Ð $ÝÐAÀCÑGÑHÔHÐ Hð RÝ ŒHÕ*­LÀÐ IÑ IÔ IÐ IÝ”Õ.Ýœ¥r¤~Ñ5½¼ ÑEØ 'ð)ñ)ô)ˆBˆBøõð Rð Rð RÝÐCÀjÑPÑQÔQÐ Qøøøøð Røøøð ˆBˆBˆBˆBøøøøð RøøøðÝ! "Ð&8Ñ9Ô9Ð9Ð9øÝ ðððÝ Œ�‰ Œ ˆ Ø ðøøøð €IsO‚AAÁ D Á DÁ'DÁ=A!CÃDà DÃ)C;Ã;DÄDÄD ÄD"Ä" EcóT—t|¦«}|€dS tj|¦«}n$#t$r}t d|z¦«‚d}~wwxYw|D]ú}t  |¦«s|dxxdz cc<Œ-d} tj|tjtj ztj z|¬¦«}t|d¦«t|¦«tj ||¬¦«n'#ttf$r|dxxdz cc<YnwxYw|�tj|¦«Œß#|�tj|¦«wwxYw tj|¦«n#tj|¦«wxYw tj t|¬¦«dS#t$rYdSwxYw)z>Finish deletions whose canonical name was already quarantined.Nz cannot list prune quarantine: %sr~rrOzquarantined cache entry)rµr.rr0r Ú_PRUNE_TRASH_ENTRYrsrDrErFrGrrœr’rIr)rLr¥Útrash_fdrr–rtr§s r(Ú_clean_prune_trashr¹ñs€å  Ñ)Ô)€HØÐ؈ðð IÝ”J˜xÑ(Ô(ˆEˆEøÝð Ið Ið IÝÐAÀCÑGÑHÔHÐ Høøøøð Iøøøàð 'ð 'ˆDÝ%×+Ò+¨DÑ1Ô1ð Ø˜ Ð"Ð"Ô" aÑ'Ð"Ð"Ñ"ØØˆHð 'Ýœ7 4Ý#%¤;µ´Ñ#?Å"Ä-Ñ#OØ*2ð4ñ4ô4�õ*¨(Ð4MÑNÔNÐNݘXÑ&Ô&Ð&Ý”˜ hÐ/Ñ/Ô/Ð/Ð/øÝ�\Ð*ð (ð (ð (ؘ Ð"Ð"Ô" aÑ'Ð"Ð"Ñ"Ð"Ð"ð (øøøðÐ'Ý”H˜XÑ&Ô&Ð&øøðÐ'Ý”H˜XÑ&Ô&Ð&Ð&ð(øøøð 'õ$ Œ�ÑÔÐÐø�Œ�ÑÔÐÐøøøð Ý ŒÕ&¨wÐ7Ñ7Ô7Ð7Ð7Ð7øÝ ð ð ð Ø ˆˆð øøøsn–+ªE"« A µAÁA Á 4E"ÂA0C2Ã1D0Ã2!DÄD0ÄDÄD0ÄE"Ä0E Å E"Å"E8Å<FÆ F'Æ&F'có(—|\}}}}}|�)tj¦«|kr|dxxdz cc<dS tj|tjtjztjz|¬¦«} n#t$rd} YnwxYw| �v t| d¦«n5#t$r(|dxxdz cc<Ytj | ¦«dSwxYw tj | ¦«n#tj | ¦«wxYw tj|tjtjztjz|¬¦«} n!#t$r|dxxdz cc<YdSwxYw t| d¦«n5#t$r(|dxxdz cc<Ytj | ¦«dSwxYwt| |¬¦«\} } | d kr'|| xxdz cc< tj | ¦«dSt|d ¬ ¦«} d tj d ¦« ¦«z} tj|||| ¬¦«t!|||||¦«t#| |¬¦«tj|| ¬¦«tj | ¦«n#tj | ¦«wxYw|dxxdz cc<|dxx| z cc<n'#ttf$r|dxxdz cc<YnwxYwtj | ¦«dS#tj | ¦«wxYw)zCClassify and remove one canonical entry while population is paused.Nr~rrOr¬zBun canonical entryr€r rƒTrzentry-%sr#©r%r&r¡r¢)rOrPr.rDrErFrGr0rr rIrŠrµr(r)Úrenamer³rœr’)rLr5r¥rXr®r°r¯rxr±r²r§r¨r©r¸Ú trash_names r(Ú_prune_canonical_entryr¾sø€à>GÑ;€Iˆy˜' 7¨OØÐ¥¤Ñ 0Ô 0°HÒ <Ð <Ø� ÐÐÔ˜aÑÐÐÑØˆðÝ”G˜GÝœK­"¬.Ñ8½2¼=ÑHØ#,ð.ñ.ô.ˆ ˆ øõ ðððØˆ ˆ ˆ ðøøøàÐð Ý % iÐ1GÑ HÔ HÐ HÐ HøÝð ð ð Ø �IÐ Ð Ô  !Ñ #Ð Ð Ñ Ø å ŒH�YÑ Ô Ð Ð Ð ð  øøøð Iõ ŒH�YÑ Ô Ð Ð ø�BŒH�YÑ Ô Ð Ð øøøðÝ”7˜9Ýœ;­¬Ñ7½"¼-ÑGØ"+ð-ñ-ô-ˆˆøõ ðððØ� ÐÐÔ˜aÑÐÐÑØˆˆðøøøðð Ý % hÐ0EÑ FÔ FÐ FÐ FøÝð ð ð Ø �JÐ Ð Ô  1Ñ $Ð Ð Ñ Ø õ. Œ�ÑÔÐÐÐð3 øøøõ,¨H¸xÐHÑHÔHшˆyØ �KÒ Ð Ø �EˆNˆNŒN˜aÑ ˆNˆN‰NØ õ& Œ�ÑÔÐÐÐõ%% W°TÐ:Ñ:Ô:ˆØ¥"¤*¨R¡.¤.×"4Ò"4Ñ"6Ô"6Ñ6ˆ ð Ý ŒI�i Ø!*°xð Añ Aô Að Aõ ˜9 g¨w¸ Ø*ñ ,ô ,ð ,å ˜¨HÐ 5Ñ 5Ô 5Ð 5Ý ŒH�Z¨Ð 1Ñ 1Ô 1Ð 1å ŒH�XÑ Ô Ð Ð ø�BŒH�XÑ Ô Ð Ð øøøØ� ÐÐÔ˜aÑÐÐÑØ�ÐÐÔ˜IÑ%ÐÐÑÐøÝ •\Ð "ð ð ð Ø� ÐÐÔ˜aÑÐÐÑÐÐð øøøõ Œ�ÑÔÐÐÐø�Œ�ÑÔÐÐøøøs´µ;A1Á1 BÁ?BÂBÂC"ÂC Â1C"ÃC à C"Ã"C8Ã<;D8Ä8EÅEÅE,Å+J>Å,FÆJ>ÆFÆ-J>Ç":J>ÈAJÉ/J>ÊJÊ#J>Ê=K;Ê>!K"ËK;Ë!K"Ë"K;Ë;LcóH —ddddddœ}|€ td}tj |¦«}t d||¬¦«5t |||¬¦«5t |¦«\}}g}t¦«} tj tj |¦«j ¦«tkrtd¦«‚ ttj|¦«¦«} n$#t $r} td| z¦«‚d} ~ wwxYwt#||¦«t%|||¬¦«5t'||t)j¦«t,z¬ ¦«ddd¦«n #1swxYwYt#||¦«g} | D�]c} tj| |d¬ ¦«} n#t $rYŒ(wxYwtj| j ¦«rZt1| ¦«rKt3| ¦«\}}|  || ||tj || ¦«f¦«ŒŸtj| j ¦«�rª|  d ¦«�r”d | v�r�|  d ¦«�syd} tj| tjtjztj z|¬¦«}tC|d¦«ttj|¦«¦«}n>#t tf$r*|�tj"|¦«|dxxdz cc<Y�Œ”wxYw| |¦«|D]³} tj||d¬ ¦«}n#t $rYŒ'wxYwtj|j ¦«rot1|¦«r`t3|¦«\}}|  ||||tj || |¦«f¦«| #| ¦«Œ´�Œed}|tI| ¦«krûtK|tLztI| ¦«¦«}t%|||¬¦«5t)j¦«t,z}||krÑ+Ô+¨xÒ7Ð7Ø!ð ! 9Ò,Ð,ð "ð "ð "ñ "ô "ð "ð "ð "ð "ð "ð "øøøð "ð "ð "ð "õ# 7¨GÑ4Ô4Ð4Ø�C  ™OœOÒ+Ð+Ý”JÕ;Ñ<Ô<Ð<ð#�3˜z™?œ?Ò*Ð*õ*'ؘ.°'ð;ñ;ô;ð ð à-ðð�EðÝœ ¨wÐ7Ñ7Ô7Ð7Ð7øÝ"ðððØ˜ðøøøðð ð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð ð EÝ.¨wÑ7Ô7�ݘD %Ñ(Ô(Ð(Ð(øÝð Eð Eð EðDð'E�˜ Ñ#Ð#Ð#ð Eøøøð à%ð #ð #�Ý”˜Ñ"Ô"Ð"Ð"Ý ŒH�WÑ Ô Ð ðOgðgðgðgñgôgðgðgðgðgðgñgôgðgðgøðJ&ð #ð #�Ý”˜Ñ"Ô"Ð"Ð"Ý ŒH�WÑ Ô Ð Ð øøøðOgðgðgðgøøøðgðgðgðgðgðgðgñgôgðgðgðgðgðgðgðgøøøðgðgðgðgðgðgs˜Á XÁ#W?ÂAW Ã!C&Ã%W Ã& DÃ0DÄDÄ%W Ä,,E$Å W Å$E( Å(W Å+E( Å,W ÆFÆW Æ F, Æ)W Æ+F, Æ,CW É0A,KËW Ë7L ÌW ÌL ÌW Ì5M Í W Í M ÍW ÍM ÍCW Ð4ARÒ W ÒR" Ò"W Ò%R" Ò&A$W Ô UÔT'Ô&UÔ' T4 Ô1UÔ3T4 Ô4UÔ8 W ÕU ÕW Õ U Õ W ÕU0Õ/W Õ0VÖW ÖVÖW Ö-W?Ö4 X× /W<×<W?×?X ØXØX ØXØXØXc óþ —dx}x}x}x}}t¦«}t¦«}d}g} d} tj¦«tz} |  t j|¦«dddddœ¦«| �rîtj¦«| krd}�nÓ| d} | d€] t j| d¦«| d<n>#t$r1t j | d¦«|   ¦«YŒ‡wxYw| dt| d¦«kr/t j | d¦«|   ¦«ŒÙ| d| d} | dxxd z cc<| d z } | tkrd }�nà t j | | dd ¬ ¦«}n#t$rY�Œ=wxYw| d }tj|j¦«�rÇ| dd z}|t krt#d¦«‚|}|€m| ddkrt%| ¦«sD| dd krF|  dd¦« d¦«rt%| ¦«r|j|jf}|�A|jt0kstj|j¦«dzr| |¦«d} t j| t jt jzt jz| d¬¦«}t j|¦«}tj|j¦«r |j|jks|j|jkrt j |¦«d}�Œån'#t$r|�t j |¦«Y�Œ wxYw|  |dd||| dœ¦«nÄtj |j¦«r”|�$tC|¦«s| |¦«|j|jf}||vr[| |¦«||j"z }|j#dz}||z }|j$d kr"|d z }||j$d z z }|||j$d z zz }n|�| |¦«| �°î| D]-} t j | d¦«Œ#t$rYŒ*wxYwn5#| D]-} t j | d¦«Œ#t$rYŒ*wxYwwxYw|||||t|¦«|r||ztK|¦«z nd|du|dœ S)aUnique logical and allocated bytes below a pinned storage root fd. Hardlinks are the whole point of the store, so a file linked N times must count once: dedup by (dev, ino). Odd nodes do not contribute bytes; inside a canonical entry they mark that entry poisoned. This is accounting telemetry, never a delivery decision. Which is why its own entry/time bounds do not refuse. Raising on a real server-wide cache stopped the snapshot advancing at all: every delivery and prune logged the same failure, `status` froze on an old number, and a missing record made `over_soft_storage_limit` refuse every delivery with a "run prune" that could not help. A bound returns what it counted so far, marked `stale` with the bound it hit -- a floor, not a size.rN)r°rr Údepthr°z!maximum measurement time exceededr�rr°r rz(maximum measurement entry count exceededFr‚r°rÓzmaximum tree depth exceededÚ child_namer{rnr,rO)r°rr rÓr°rÔigð?) Ú used_bytesÚallocated_bytesÚ shared_inodesÚ shared_linksÚestimated_saved_bytesÚpoisoned_entriesÚdeduplication_ratioÚstaleÚ stale_reason)&rerOrPÚMEASURE_MAX_SECONDSr\r.rCrr0rIr„r]ÚMEASURE_MAX_ENTRIESr/rr2ÚMAX_TREE_WALK_DEPTHr ryrhrrˆr‰r3r«r4r…rDrErFrGrWr1r‹rXÚ st_blocksrŠrk)rLÚusedÚ allocatedr×rØÚsavedr‡rÚrÝr–ÚentriesrXr—rtr7r°rÓÚchild_canonicalr£Úopenedr=Úblockss r(rÅrÅÆsà€ð?@Ð?€DÐ?ˆ9Ð?�}Ð? |°eÝ ‰5Œ5€DÝ‘u”uÐØ€Lð€FØ€GÝŒ~ÑÔÕ"5Ñ5€HðTØ� Š �RœV G™_œ_°tÀaØ !°ð6ð6ñ 7ô 7ð 7àñK 0ÝŒ~ÑÔ (Ò*Ð*ØB� ÙØ˜2”JˆEØ�WŒ~Ð%ðÝ%'¤Z°°d´ Ñ%<Ô%<�E˜'‘N�NøÝðððÝ”H˜U 4œ[Ñ)Ô)Ð)Ø—J’J‘L”L�LØ�Hðøøøð�WŒ~¥ U¨7¤^Ñ!4Ô!4Ò4Ð4Ý”˜˜tœÑ%Ô%Ð%Ø— ’ ‘ ” � ØØ˜”> %¨¤.Ô1ˆDØ �'ˆNˆNŒN˜aÑ ˆNˆN‰NØ �q‰LˆGØÕ,Ò,Ð,ØI� Ùð Ý”w˜t¨E°$¬KÈÐOÑOÔO��øÝð ð ð Ø‘ð øøøà˜kÔ*ˆIÝŒ|˜DœLÑ)Ô)ñ0 0ؘgœ¨Ñ*�ØÕ.Ò.Ð.Ý&Ð'DÑEÔEÐEØ"+�ØÐ$ؘwœ¨1Ò,Ð,Õ1CÀDÑ1IÔ1IÐ,Ø! 'œN¨aÒ/Ð/Ø %§ ¢ ¨,¸Ñ ;Ô ;× FÒ FÀsÑ KÔ Kð0å 2°4Ñ 8Ô 8ð0ð(,¤{°D´KÐ&@�OØ#Ð/Ø!œ[­HÒ4Ð4Ý $¤ ¨T¬\Ñ :Ô :¸UÑ Bð5à$×(Ò(¨Ñ9Ô9Ð9Ø�ðÝ!œwØ�bœk­B¬NÑ:½R¼]ÑJØ$ Tœ{ð ,ñ ,ô ,�Hõ œX hÑ/Ô/�FÝ œL¨¬Ñ8Ô8ð!Ø%œ}°´ Ò;Ð;Ø%œ}°´ Ò;Ð;Ýœ Ñ*Ô*Ð*Ø#'˜Ù ð <øõðððØÐ+Ýœ Ñ*Ô*Ð*Ø‘Hðøøøð— ’  X¸ÀqØ(-¸OØ-1ð3ð3ñ4ô4ð4ð4õ”˜dœlÑ+Ô+ð 0ØÐ(Õ1FÀtÑ1LÔ1LÐ(Ø$×(Ò(¨Ñ3Ô3Ð3Ø”{ D¤KÐ0�ؘd�?�?Ø—H’H˜S‘M”M�MؘDœLÑ(�DØ!œ^¨cÑ1�FØ Ñ'�IØ”} qÒ(Ð(Ø%¨Ñ*˜ Ø$¨¬ ¸Ñ(9Ñ9˜ Ø ¨4¬=¸1Ñ+<Ñ!=Ñ=˜øØÐ&Ø ×$Ò$ YÑ/Ô/Ð/ðWñK 0ðZð ð ˆEð Ý”˜˜tœÑ%Ô%Ð%Ð%øÝð ð ð Ø�ð øøøð ø�Vð ð ˆEð Ý”˜˜tœÑ%Ô%Ð%Ð%øÝð ð ð Ø�ð øøøð øøøð Ø$Ø&Ø$Ø!&ÝÐ 0Ñ1Ô1à#,ð!6 ¨UÑ!2µe¸IÑ6FÔ6FÑ FÐ FØ25Ø TÐ)Ø$ð ð ð s³Á ARÂ%CÃRÃ8C>Ã;RÃ=C>Ã>B RÆF&Æ%RÆ& F4Æ0RÆ3F4Æ4DRÊ5B$MÍRÍ NÍ<RÍ?NÎC'RÑ,RÒ RÒRÒS ÒR9Ò8S Ò9 S ÓS ÓS ÓS có,—t|¦«dS)z7Compatibility helper for the existing logical-size API.rÕ)rÅ)rLs r(Ú_measure_tree_fdrê@s€å ! 'Ñ *Ô *¨<Ô 8Ð8r'có,—t|¦«dS)z;Walk one storage directory and return its unique byte size.rÕ)Úmeasure_storage_usagerÂs r(Úmeasure_storageríEs€å  Ñ &Ô & |Ô 4Ð4r'có —t|¦«\}} t|¦«tj|¦«S#tj|¦«wxYw)zñ >ô >ð >àˆtÝ ˜3Ñ Ô €EØ ð;ÝÐ9Ñ:Ô:Ð:Ø€GØð #ð #ˆ Ý(¨Ñ6Ô6‰ ˆˆHð ÝŒ|�BœH R™LœLÔ0Ñ1Ô1µ\ÒAÐAÝ"Ð#VÑWÔWÐWÝ  Ñ #Ô #Ð #Ý”X˜b‘\”\Ô(ˆFå ŒH�R‰LŒLˆLˆLø�BŒH�R‰LŒLˆLˆLøøøØ ˜Ð Ð Ø �NŠN˜6Ñ "Ô "Ð "øÝ& sÑ+Ô+¨wÒ6€OØ ðÐ#5ð؈uØð)Ø!(ˆÐ ÑØ‡G‚GÐ ˜dÑ#Ô#Ð#Ý Ø ˆc�>Ð4FðHñHôHðHà ˆ4s à A+E Å E!cóL—tj |t¦«SrÇ)r.r6r^rrÂs r(Ú _usage_pathrþªs€Ý Œ7�<Š<˜Õ0Ñ 1Ô 1Ð1r'có¨— tjt|¦«tjtjz¦«}n#t $rYdSwxYw tj|¦«}tj|j ¦«r |j dkr tj |¦«dStj |d¦«}tj |¦«n#tj |¦«wxYw tj| d¦«¦«}n#t t"f$rYdSwxYwt%|t&¦«r5t)| d¦«¦«t,us |ddkrdS|d| d¦«| d¦«du| d ¦«d œ}d D]}| |¦«||<Œ|S) aThe last recorded size of a storage directory, or None if never measured / unreadable. The file is 0644, but it sits inside the 0700 store, so only root can read it. Non-root status reports unknown rather than activating the privileged daemon for server-wide statistics.NrrQrÕrÚ measured_atrÜTrÝ)rÕrrÜrÝ)rÖr×rØrÙrÛrÚ)r.rDrþrErGr0rWr/r1r2rXrIrZr_r`rarbr:rArdrgrhrB)r6r°r7rrr>r<rts r(Ú read_usager®sÍ€ð Ý ŒW•[ Ñ&Ô&­¬ µb´mÑ(CÑ DÔ DˆˆøÝ ððð؈tˆtðøøøðÝŒx˜‰|Œ|ˆÝŒ|˜DœLÑ)Ô)ð ¨T¬\¸DÒ-@Ð-@Øõ Œ�‰ Œ ˆ ˆ ˆ õŒw�r˜4Ñ Ô ˆå Œ�‰ Œ ˆ ˆ ø�Œ�‰ Œ ˆ ˆ øøøðÝ” ˜4Ÿ;š; wÑ/Ô/Ñ0Ô0ˆˆøÝ �*Ð %ððð؈tˆtðøøøå �u�dÑ #Ô #ðÝ�E—I’I˜lÑ+Ô+Ñ,Ô,µCÐ7Ð7Ø�\Ô" QÒ&Ð&؈tØ! ,Ô/Ø"ŸYšY }Ñ5Ô5ð—y’y Ñ)Ô)¨TÐ1Ø#Ÿiši¨Ñ7Ô7ð 9ð9€Fð %ð'ð'ˆð—y’y ‘”ˆˆt‰ ˆ Ø €Ms3‚9<¼ A Á A Á8CÂCÃCÃ!'D Ä DÄDcóh— ddlm}|¦« ¦«}d|vsd|vst|dt¦«sdSt ¦«}d}|d ¦«D�]}t|t¦«sdS| d¦«}|€Œ3t|t¦«sdS| ¦«D]½\}}t|t¦«sdS| d¦«}t|t¦«sdS| ¦«D]\} t| t¦«rE|  d i¦« d ¦«d ur|  |¦«|d z }Œ]Œ¾�Œt|¦«|fS#t$rYdSwxYw) zBReturn aggregate active user/application counts, never identities.r)ÚApplicationsManagerÚwarningÚavailable_versions©NNÚusersNÚ applicationsÚshared_node_modulesÚactiveTr) Ú$clselect.clselectnodejs.apps_managerrÚget_applications_users_inforArdreÚvaluesrhrÒr…r]r”) rr7Ú active_usersÚactive_applicationsrxrrùÚ user_inforÚ applications r(Ú"_active_shared_node_modules_countsrÓsþ€ð!ØLÐLÐLÐLÐLÐLØ"Ð"Ñ$Ô$×@Ò@ÑBÔBˆØ ˜Ð Ð Ð!5¸TÐ!AÐ!AÝ! $Ð';Ô"<½dÑCÔCð"Bà�:Ý‘u”uˆ ØÐØÐ0Ô1×8Ò8Ñ:Ô:ð 1ñ 1ˆGݘg¥tÑ,Ô,ð "Ø!�z�zð —K’K Ñ(Ô(ˆE؈}ØÝ˜e¥TÑ*Ô*ð "Ø!�z�zØ#(§;¢;¡=¤=ð 1ð 1‘��iÝ! )­TÑ2Ô2ð&Ø%˜:˜:˜:Ø(Ÿ}š}¨^Ñ<Ô<� Ý! ,µÑ5Ô5ð&Ø%˜:˜:˜:Ø#/×#6Ò#6Ñ#8Ô#8ð1ð1�KÝ" ;µÑ5Ô5ð1Ø +§¢Ð0EÀrÑ JÔ J× NÒ NÈxÑ XÔ XÐ\`Ð `Ð `Ø$×(Ò(¨Ñ.Ô.Ð.Ø+¨qÑ0Ð+øð 1ñ 1õ�<Ñ Ô Ð"5Ð5Ð5øÝ ððð؈zˆzðøøøs2‚AF#Á AF#Â.F#Â>0F#Ã0,F#ÄBF#Æ# F1Æ0F1cóx‡—ˆfd„|D¦«}|rtd„|D¦«¦«sdSt|¦«S)z6Sum one non-negative integer field, or return unknown.cóh•—g|].}t|t¦«r| ‰¦«nd‘Œ/SrÇ©rArdrh)r~Úrecordrts €r(r½z'_sum_recorded_usage..ûsIø€ð%ð%ð%Øõ#-¨VµTÑ":Ô":ÐDˆf�jŠj˜ÑÔÐÀð%ð%ð%r'c3óNK—|] }t|¦«tuo|dkV—Œ!dS©rN©rgrB©r~r>s r(r€z&_sum_recorded_usage..ýsJèè€ð2ð2Ø!&õ" %™[œ[­CÐ/Ð>°E¸Q²Jð2ð2ð2ð2ð2ð2r'N)ÚallÚsum)Úrecordsrtr s ` r(Ú_sum_recorded_usagerùsqø€ð%ð%ð%ð%Ø#ð%ñ%ô%€Fà ð�ð2ð2Ø*0ð2ñ2ô2ñ2ô2ðàˆtÝ ˆv‰;Œ;Ðr'cór—td„|D¦«¦«rdStd„|D¦«¦«rdSdS)a�Whether any contributing measurement stopped at one of its own bounds. A measurement that hit MEASURE_MAX_ENTRIES / MEASURE_MAX_SECONDS records a floor, so every aggregate built from it is a floor too. One known floor is a more useful answer than "cannot tell" and outranks an unreadable record; with no floor but a record missing, completeness is simply unknown. c3ónK—|]0}t|t¦«o| d¦«duV—Œ1dS)rÜTNr©r~rs r(r€z%_measurement_stale.. sVèè€ð "ð "Øõ �f�dÑ #Ô #Ð C¨¯ ª °7Ñ(;Ô(;¸tÐ(Cð "ð "ð "ð "ð "ð "r'Tc3óBK—|]}t|t¦« V—ŒdSrÇ)rArdr!s r(r€z%_measurement_stale..s/èè€Ð >Ð >¨F�z˜&¥$Ñ'Ô'Ð 'Ð >Ð >Ð >Ð >Ð >Ð >r'NF)r‡)rs r(Ú_measurement_staler#s`€õ ð "ð "Ø ð "ñ "ô "ñ"ô"ðàˆtÝ Ð >Ð >°gÐ >Ñ >Ô >Ñ>Ô>ð؈tØ ˆ5r'cóª—t|¦«}t|t¦«r2t|¦«dkrt d„|D¦«¦«r|\}}n|€t ¦«\}}nd\}}d„|dD¦«}t |¦«}t|d¦«}|dur|sd}|d ||t|d ¦«t|d ¦«||d œS) a Return privacy-safe aggregates for ``cloudlinux-summary``. Storage sizes come only from existing accounting snapshots. This function deliberately never walks the shared storage tree; delivery and prune own those comparatively expensive measurements. rSc3óNK—|] }t|¦«tuo|dkV—Œ!dSrrrs r(r€z2get_shared_node_modules_summary..sJèè€ð0ð0Øõ˜‘K”K¥3Ð&Ð5¨5°Aª:ð0ð0ð0ð0ð0ð0r'Nrcó,—g|]}t|¦«‘ŒSr&)r)r~ràs r(r½z3get_shared_node_modules_summary..$s0€ð<ð<ð<Øõ˜,Ñ'Ô'ð<ð<ðÑ?Ô?€HØ �€}€}˜X€}؈à˜)Ô$Ø2Ø$Ý#6Ø Ð&ñ$(ô$(å!4Ø Ð,ñ".ô".à#+Ø"ð ð ð r'cóÔ—t|¦«\}}dtjd¦« ¦«z}t |t ¦«rt |¦«}ndt |¦«i}t |d¦«|d<t| d¦«¦«|d<| d¦«pd|d<tj ¦«|d<tj |¦«dz  d ¦«}d}d } tj |tjtjztjztjzd |¬ ¦«}d }tj|d ¦«tj|dd¦«d} | t)|¦«kr3| tj||| d…¦«z } | t)|¦«k°3tj|¦«tj|¦«d}tj|t2||¬¦«d }n$#t4$r} t7d| z¦«‚d} ~ wwxYw |�tj|¦«|r( tj||¬ ¦«n#t4$rYnwxYwtj|¦«dS#|�tj|¦«|r( tj||¬ ¦«n#t4$rYnwxYwtj|¦«wxYw)z^Record a storage directory's size beside it, atomically and root-owned but world-readable.z.cl-storage-usage-%sérÕrÜrÝNrú rQFrrOTrr»zcannot record storage usage: %s)rr.r(r)rArdrBr5rhrOr_ÚdumpsÚencoderDr*r+r,rGrÚfchownr]ÚwriteÚfsyncrIÚreplacerr0r r0) r6rÐrLrÚ temporaryrÚbodyr°r Úwrittenr–s r(rÆrÆ:s€õ*¨$Ñ/Ô/Ñ€GˆXØ&­¬°A©¬×):Ò):Ñ)<Ô)<Ñ<€IÝ�%�ÑÔð,Ý�e‘”ˆˆà¥ E¡ ¤ Ð+ˆÝ˜v lÔ3Ñ4Ô4€Fˆ<Ñõ˜6Ÿ:š: gÑ.Ô.Ñ/Ô/€Fˆ7�OØ#ŸZšZ¨Ñ7Ô7Ð?¸4€Fˆ>ÑÝ œI™KœK€Fˆ=ÑÝ ŒJ�vÑ Ô  Ñ %× -Ò -¨gÑ 6Ô 6€DØ €BØ€GðÝ ŒW�Y¥¤ ­b¬jÑ 8½2¼9Ñ DÅrÄ}Ñ TØ 7ð,ñ,ô,ˆàˆÝ Œ �"�eÑÔÐÝ Œ �"�a˜ÑÔÐØˆØ�˜D™ œ Ò!Ð!Ø •r”x  D¨¨¨¤NÑ3Ô3Ñ 3ˆGð�˜D™ œ Ò!Ð!å Œ�‰ Œ ˆ Ý Œ�‰ Œ ˆ Ø ˆÝ Œ �9Õ0Ø%°'ð ;ñ ;ô ;ð ;àˆˆøÝ ðDðDðDÝÐ<¸sÑBÑCÔCÐCøøøøðDøøøð ð ˆ>Ý ŒH�R‰LŒLˆLØ ð ð Ý” ˜)¨GÐ4Ñ4Ô4Ð4Ð4øÝð ð ð Ø�ð øøøå Œ�ÑÔÐÐÐøð ˆ>Ý ŒH�R‰LŒLˆLØ ð ð Ý” ˜)¨GÐ4Ñ4Ô4Ð4Ð4øÝð ð ð Ø�ð øøøå Œ�ÑÔÐÐøøøsaÄDHÈJÈ H7È H2È2H7È7JÉI+É+ I8É7I8ÊK'Ê+KËK'Ë KË K'ËKËK'cóP—t|¦«}t||¦«|dS)a?Re-measure and record a storage directory's size, every time. This runs after the account already has its answer. The soft threshold is deliberately a post-fact guardrail rather than a synchronous filesystem quota: a delivery reads this last complete snapshot and the next deferred refresh advances it.rÕ)rìrÆ)r6rÐs r(Ú refresh_usager;hs,€õ " $Ñ 'Ô '€EÝ��eÑÔÐØ �Ô Ðr'cón—|sdSt|¦«}|€td|z¦«‚|d|dzkS)aìWhether recorded usage has reached the configured soft threshold. Reads the recorded size, never walks: deferred refresh can lag admissions (the trees that tip it over still land), which is fine for a guardrail against a shared filesystem, not a billing quota. A threshold of 0 disables the check entirely. Missing or malformed accounting fails closed. A snapshot that stopped at a measurement bound counted part of the store, so its number is a floor rather than a size -- and a floor is compared before it is doubted. Over the threshold it is conclusive: 300 GB counted is 300 GB there, whatever the rest holds. Below it, it says nothing about the whole, and an advisory guardrail must not turn a partial count into a server-wide refusal. Checking staleness first switched the guardrail off permanently for exactly the store that outgrew its own accounting, because every later walk stops at the same bound. Administrator operations create a fresh snapshot before enabling a non-zero threshold, and delivery refreshes it after Bun has changed the store. This is intentionally not a hard quota: a delivery that crosses the threshold and already-admitted concurrent deliveries may exceed it.FNzfshared storage usage snapshot is unavailable for %s; run cl-node-modules-storage prune before retryingrÕi@)rr )r6rrÐs r(Úover_soft_storage_limitr=ts^€ð( !ð؈uÝ �tÑ Ô €EØ €}Ýð <Ø>Bñ CñDôDð Dð �Ô Ð"7¸7Ñ"CÒ CÐCr'có"—ddlm}|¦«S)zÿThe panel's hosting accounts. Imported here rather than at module scope because `read_config` runs as the account inside a cage on every `npm install`: importing cpapi costs a panel probe (0.17 s measured) that has no business happening there.r©Úcpusers)r’r@r?s r(Ú_cpusersrA•s"€ð 'Ð&Ð&Ð&Ð&Ð&Ø ˆ7‰9Œ9Ðr'có¨—t¦«}|D]?} | tj|¦«j¦«Œ0#t $rYŒÝÐ<Ñ=Ô=Ð =؈ØÐ Øð HÝÐFÑGÔGÐ GØ)ð 0ð 0ˆLÝ ! ,Ñ /Ô /Ð /Ð /Ý# MÑ2Ô2ˆˆOÑÝ!3°MÑ!BÔ!BˆÐ ÑØ �Š� Ñ%Ô%Ð%ØÐݘg™œˆˆI‰Ø€OØ%¨TÐ1ÐØð(Ý)¨$°Ñ4Ô4шРØð IÝÐGÑHÔHÐ HÝ  Ñ0Ô0ˆØ �ŠÐ  $Ñ'Ô'Ð'Ø ÐݘÑÔÐݘ‘”ˆØ� Š �fÑÔÐØˆˆH‰ ØÐ%Ý$(Ð);Ñ$<Ô$<ˆÐ Ñ!Ý Ø ˆc�?Ð5EðGñGôGðGðGðGsÁ.:B)Â) C Â3CÃC có¾—tj|dd¬¦«dz d¦«}t|¦«tkrt dtz¦«‚|S)NT)ú,ú:)Ú sort_keysÚ separatorsr0rQz'configuration exceeds the %d byte limit)r_r1r2r]r®r )r¾Úencodeds r(Ú_encoded_configr\ sc€ÝŒz˜#¨¸*ÐEÑEÔEØñß’v˜g‘”ð å ˆ7�|„|Õ&Ò&Ð&ÝØ 5Õ8HÑ HñJôJð Jà €Nr'cóÖ—t|¦«}|rEdt|¦«i}t|¦«}tt|¦«|t|¬¦«t|||¬¦«dS)z@Publish a requested private authority, then the public snapshot.rÅ)r¬r[)r[N)r\r�Ú _atomic_writerÃrÉ)r6r¾rÅröÚpublic_encodedÚprivateÚprivate_encodeds r(r÷r÷s€€õ% SÑ)Ô)€NØðEØ#¥T¨.Ñ%9Ô%9Ð:ˆÝ)¨'Ñ2Ô2ˆÝ•o dÑ+Ô+¨WÝ*°Oð Eñ Eô Eð Eå�$˜ ^Ð4Ñ4Ô4Ð4Ð4Ð4r'cóV—tj |¦«}|€t|¦«}d}d} t j|dd¬¦«\}}tj||¦«tj|dd¦«d}|t|¦«kr3|tj |||d…¦«z }|t|¦«k°3tj |¦«tj |¦«d}tj ||¦«tj |tjtjztjz¦«} tj |¦«tj |¦«n#tj |¦«wxYwd}n$#t"$r} t%d| z¦«‚d} ~ wwxYw |�tj |¦«|�( tj|¦«dS#t"$rYdSwxYwdS#|�tj |¦«|�& tj|¦«w#t"$rYwwxYwwxYw)Nz.node-modules-storage-F)ÚdirÚprefixÚtextrzcannot write configuration: %s)r.r6rÁr\ÚtempfileÚmkstemprr3r]r4r5rIr6rDrErFrGr0r r0) r6r¾r¬r[r8r°r7r9r¢r–s r(r^r^sN€Ý”—’ Ñ%Ô%€IØ€Ý! #Ñ&Ô&ˆØ €BØ€IðÝ Ô(¨YÐ?WÐ^cÐdÑdÔd‰ ˆˆIÝ Œ �"�dÑÔÐÝ Œ �"�a˜ÑÔÐØˆØ�˜G™ œ Ò$Ð$Ø •r”x  G¨G¨H¨HÔ$5Ñ6Ô6Ñ 6ˆGð�˜G™ œ Ò$Ð$å Œ�‰ Œ ˆ Ý Œ�‰ Œ ˆ Ø ˆÝ Œ �9˜dÑ#Ô#Ð#Ý”w˜y­"¬+½¼Ñ*FÍÌÑ*VÑWÔWˆ ð #Ý ŒH�\Ñ "Ô "Ð "å ŒH�\Ñ "Ô "Ð "Ð "ø�BŒH�\Ñ "Ô "Ð "Ð "øøøØˆ ˆ øÝ ðCðCðCÝÐ;¸cÑAÑBÔBÐBøøøøðCøøøð ð ˆ>Ý ŒH�R‰LŒLˆLØ Ð ð Ý” ˜)Ñ$Ô$Ð$Ð$Ð$øÝð ð ð Ø��ð øøøð !Ð øð ˆ>Ý ŒH�R‰LŒLˆLØ Ð ð Ý” ˜)Ñ$Ô$Ð$Ð$øÝð ð ð Ø�ð øøøð !øøøsx¶DFÄ<E%ÅFÅ%E;Å;FÆG(Æ F"Æ FÆF"Æ"G(Æ?GÇ G#Ç"G#Ç(H(ÈHÈH(È H$È!H(È#H$È$H(rÇ)F)NFNr)FN)}r%r-rLr_rir.rCÚrer/rfrOÚBUN_BINÚENGINE_UNAVAILABLEÚ CONFIG_PATHrÁrár®ÚPROTECTED_HARDLINKS_PATHÚ CONFIG_MODErÉr Ú frozensetr6r^ršrþrer\ÚCONFIG_LOCK_PATHÚcompiler¤r·rrrrrÃrÂrÄrÐrÑrÛr«ràr“rßrÞrrUrYrfr”r r*r8r?rMrHrmr—r¤r§r©r‹r±r´r·r¿rÃrÍrÖrÝrærêrðròrôr÷rûrârrrrr!rr;Úobjectr=r`rbrgrjryr{rŠrœržrªr³rµr¹r¾rÑrÅrêrírìrðròrürþrrrr#r-rÆr;r=rArLrUr\r÷r^r&r'r(úrrsþðððð € € € Ø € € € Ø € € € Ø € € € Ø € € € Ø € € € Ø € € € Ø € € € Ø€€€Ø € € € à €ð=ðð:€ Ø%ÐØ9ÐØÐØ=ÐØ€ ؀؀ Ø�9؈�&˜& '¨6°7¸GÀVØ ˆBŒG�LŠL˜œ Ñ 'Ô '¨°¸ÀzÐS]Ø„G‡L‚L�”˜ Ñ&Ô&ð(ñ)ô)Ðð8€Ø ŒG�LŠL˜¨Ñ 8Ô 8€ Ø”7—<’< ° Ñ>Ô>ÐØ!�r”zØ4ñ6ô6Ðà�R”ZÐ 7Ñ8Ô8ÐØ�” ˜;Ñ'Ô'€ Ø&ÐØ1ÐØÐØÐð #Ðð$&Ø"%ØØ&)Øð ð€ð$/Ø".Ø&Ø&0Ø)ð ð€ ð4Ð4ÐØ €ØÐð Ðð ÐØÐð.ÐØ;ÐØ'+Ð$Ø#, 9ð.9ñ$:ô$:Ð ð ?ð?ð?ð?ð?�9ñ?ô?ð?ðKðKðKðKðK˜,ñKôKðKð"ð:ð:ð:ð:ððððððð47ð7ð7ðtððð@ððð"#ð#ð#ðB ð ð ððððPðPðPð$ðððð0&>ð#ð#ð#ð#ð6ð6ð6ð6ð@ð@ð@ð%ð$ð$ð$ð$ð ððð( ð ð ð2ð2ð2ð"ððð.ððð&4ð4ð4ð:!ð Dð Dð Dð Dð(ð8ð8ð8ð8ð 3ð 3ð 3ðBðBðBð(.ð.ð.ð Cð Cð CðUðUðUð$ð$ð$ð$ðNððð05ð5ð5ðpðððD,ð,ð,ð^KðKðKðKðK�6ñKôKðKð\"+°Dð:ð:ð:ð:ð&¨tð5ð5ð5ð5ð BGØ"&ðBðBðBðBð( )ð )ð )ð )ð Tð Tð TðXðXðXð5Cð5Cð5Cð5CðpJðJðJðJðZ:ð:ð:ð:ðz; ð; ð; ð; ð| ð ð ð.ðððð2  ð  ð  ðF9ð9ð9ð9ðx#,°Tðqðqðqðqðlwðwðwðt9ð9ð9ð 5ð5ð5ð ðððððð& ð ð ð$/ð3ð3ð3ð3ðl2ð2ð2ð"ð"ð"ðJ#ð#ð#ðLððð ð ð ð *5ÀDð$ð$ð$ð$ðN+ð+ð+ð\ ð ð ðDðDðDðBððð/$ð/$ð/$ðd#¨DÀØ!%¨dÀtð7Gð7Gð7Gð7Gðtððð38ð 5ð 5ð 5ð 5ð#.°tð ð ð ð ð ð r'