@wix/himalaya-cli 0.1318.0 → 0.1319.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (80) hide show
  1. package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/_types/core/sdk/sdk-types/src/capabilities.generated.d.ts +2 -1
  2. package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/_types/core/sdk/theme/src/index.d.ts +21 -0
  3. package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/_types/core/sdk/webview-page/src/capabilities.generated.d.ts +2 -0
  4. package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/_types/core/ts/src/brand-color-math.d.ts +98 -0
  5. package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/_types/core/ts/src/define-app.d.ts +1 -1
  6. package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/_types/core/ts/src/schema.d.ts +9 -0
  7. package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/audio-record.mjs +1 -0
  8. package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/calendar.mjs +1 -0
  9. package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/calls.mjs +1 -0
  10. package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/contacts.mjs +1 -0
  11. package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/core/brand-color-math.mjs +183 -0
  12. package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/location.mjs +1 -0
  13. package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/motion.mjs +1 -0
  14. package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/photos.mjs +1 -0
  15. package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/sdk-types.mjs +1 -0
  16. package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/tasks.mjs +1 -0
  17. package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/theme.mjs +189 -0
  18. package/dist/authoring-runtime/node_modules/@wix/himalaya/package.json +8 -0
  19. package/dist/cli.mjs +473 -372
  20. package/dist/preview-assets.generated.bin +0 -0
  21. package/guides/app-config.md +1 -1
  22. package/guides/importable-sdks.md +1 -0
  23. package/guides/sdk-reference.json +39 -2
  24. package/guides/web-page-sdk-reference.md +1 -0
  25. package/package.json +2 -2
  26. package/templates/beauty-salon-owner/config.ts +1 -1
  27. package/templates/beauty-salon-owner/dev/index.ts +125 -24
  28. package/templates/beauty-salon-owner/tier5-src/_shared/aria-attachments.ts +41 -2
  29. package/templates/beauty-salon-owner/tier5-src/_shared/aria-chat.ts +59 -31
  30. package/templates/beauty-salon-owner/tier5-src/himi-owner-lite-aria/index.ts +154 -13
  31. package/templates/community-club-owner/config.ts +1 -1
  32. package/templates/community-club-owner/dev/index.ts +125 -24
  33. package/templates/community-club-owner/tier5-src/_shared/aria-attachments.ts +41 -2
  34. package/templates/community-club-owner/tier5-src/_shared/aria-chat.ts +59 -31
  35. package/templates/community-club-owner/tier5-src/himi-owner-lite-aria/index.ts +154 -13
  36. package/templates/events-meetups-owner/config.ts +1 -1
  37. package/templates/events-meetups-owner/dev/index.ts +125 -24
  38. package/templates/events-meetups-owner/tier5-src/_shared/aria-attachments.ts +41 -2
  39. package/templates/events-meetups-owner/tier5-src/_shared/aria-chat.ts +59 -31
  40. package/templates/events-meetups-owner/tier5-src/himi-owner-lite-aria/index.ts +154 -13
  41. package/templates/gym-fitness-owner/config.ts +1 -1
  42. package/templates/gym-fitness-owner/dev/index.ts +125 -24
  43. package/templates/gym-fitness-owner/tier5-src/_shared/aria-attachments.ts +41 -2
  44. package/templates/gym-fitness-owner/tier5-src/_shared/aria-chat.ts +59 -31
  45. package/templates/gym-fitness-owner/tier5-src/himi-owner-lite-aria/index.ts +154 -13
  46. package/templates/nonprofit-cause-owner/config.ts +1 -1
  47. package/templates/nonprofit-cause-owner/dev/index.ts +125 -24
  48. package/templates/nonprofit-cause-owner/tier5-src/_shared/aria-attachments.ts +41 -2
  49. package/templates/nonprofit-cause-owner/tier5-src/_shared/aria-chat.ts +59 -31
  50. package/templates/nonprofit-cause-owner/tier5-src/himi-owner-lite-aria/index.ts +154 -13
  51. package/templates/owner-lite/config.ts +1 -1
  52. package/templates/owner-lite/dev/index.ts +125 -24
  53. package/templates/owner-lite/tier5-src/_shared/aria-attachments.ts +41 -2
  54. package/templates/owner-lite/tier5-src/_shared/aria-chat.ts +59 -31
  55. package/templates/owner-lite/tier5-src/himi-owner-lite-aria/index.ts +154 -13
  56. package/templates/podcast-creator-owner/config.ts +1 -1
  57. package/templates/podcast-creator-owner/dev/index.ts +125 -24
  58. package/templates/podcast-creator-owner/tier5-src/_shared/aria-attachments.ts +41 -2
  59. package/templates/podcast-creator-owner/tier5-src/_shared/aria-chat.ts +59 -31
  60. package/templates/podcast-creator-owner/tier5-src/himi-owner-lite-aria/index.ts +154 -13
  61. package/templates/portfolio-creative-owner/config.ts +1 -1
  62. package/templates/portfolio-creative-owner/dev/index.ts +125 -24
  63. package/templates/portfolio-creative-owner/tier5-src/_shared/aria-attachments.ts +41 -2
  64. package/templates/portfolio-creative-owner/tier5-src/_shared/aria-chat.ts +59 -31
  65. package/templates/portfolio-creative-owner/tier5-src/himi-owner-lite-aria/index.ts +154 -13
  66. package/templates/restaurant-owner/config.ts +1 -1
  67. package/templates/restaurant-owner/dev/index.ts +125 -24
  68. package/templates/restaurant-owner/tier5-src/_shared/aria-attachments.ts +41 -2
  69. package/templates/restaurant-owner/tier5-src/_shared/aria-chat.ts +59 -31
  70. package/templates/restaurant-owner/tier5-src/himi-owner-lite-aria/index.ts +154 -13
  71. package/templates/retail-store-owner/config.ts +1 -1
  72. package/templates/retail-store-owner/dev/index.ts +125 -24
  73. package/templates/retail-store-owner/tier5-src/_shared/aria-attachments.ts +41 -2
  74. package/templates/retail-store-owner/tier5-src/_shared/aria-chat.ts +59 -31
  75. package/templates/retail-store-owner/tier5-src/himi-owner-lite-aria/index.ts +154 -13
  76. package/templates/yoga-studio-owner/config.ts +1 -1
  77. package/templates/yoga-studio-owner/dev/index.ts +125 -24
  78. package/templates/yoga-studio-owner/tier5-src/_shared/aria-attachments.ts +41 -2
  79. package/templates/yoga-studio-owner/tier5-src/_shared/aria-chat.ts +59 -31
  80. package/templates/yoga-studio-owner/tier5-src/himi-owner-lite-aria/index.ts +154 -13
package/dist/cli.mjs CHANGED
@@ -5031,6 +5031,10 @@ var init_build_lib = __esm({
5031
5031
  "@himalaya/share": resolve8(REPO_ROOT4, "core/sdk/share/src/index.ts"),
5032
5032
  "@himalaya/open-url": resolve8(REPO_ROOT4, "core/sdk/open-url/src/index.ts"),
5033
5033
  "@himalaya/clipboard": resolve8(REPO_ROOT4, "core/sdk/clipboard/src/index.ts"),
5034
+ // RFC 0070 §3 — runtime brand overlay; and the brand colour rules it derives with, so a worker
5035
+ // can import the ONE implementation (filesystem-free, pinned by a test).
5036
+ "@himalaya/theme": resolve8(REPO_ROOT4, "core/sdk/theme/src/index.ts"),
5037
+ "@himalaya/core/brand-color-math": resolve8(REPO_ROOT4, "core/ts/src/brand-color-math.ts"),
5034
5038
  "@himalaya/photos": resolve8(REPO_ROOT4, "core/sdk/photos/src/index.ts"),
5035
5039
  // Credential-free raw binary PUT to a pre-signed upload URL (RFC 0002 capability).
5036
5040
  "@himalaya/presigned-upload": resolve8(REPO_ROOT4, "core/sdk/presigned-upload/src/index.ts"),
@@ -5571,8 +5575,8 @@ var init_catalog_v2 = __esm({
5571
5575
  "../html-to-t5/catalog.v2.json"() {
5572
5576
  catalog_v2_default = {
5573
5577
  encoding: "gzip-base64",
5574
- sha256: "6a0d15071955c9294aa10c4341cd562bcdb168fb147bb4bf8c677f87f3bae63b",
5575
- data: "H4sIAAAAAAAC/+y963bbOpoo+Cp76dS/tmtPd9f0OWvPn6PYTqIqO3ZbSlLV3RkviIQklEGADYCylVpZax5innCeZBYuJAESICVbEuVs/ElMACJx+W74rv8YrSHjiJLRb6PVKv/1X377nxD+8/85/9M//9u//B/Jv/zbv/7P0dmIJyuYgdFv/xj9AaWj30YJzXJKIBF/1D1//DunZHQ2EkhgOPpt9BFlAIMN+GV6+XnySzV6dDZ6SGiWyT9/G324+nR1P55dXf6yYDT7JaEM/ir4r5wlv5q3Cv7LfPPLEpJz+f5z05r9nf/y//0//+8vKf2FUPHLCpD0HKZI/PGXa0gQJOIXSn4pyCOhT+SXnNGc/1+/cMFQojoY/O8CMZj+8k+/QFJk/I+js9EfGFyMfhv9j1//kMIF/9Wer2qRC68bf/vHSGxyuUw6/ztM5Cj5FcgEgmqo3KJqjPwyWY5+nI3mNN2oLXS/ppp/nI0ymqIFgoy3P/DjbJSsEE4ZJFYnYAxsRmcjJGDGPS+uZ/zjxw/r+83Jlzsy+u0/dd+35oJykDyCJdTbQLg8vJU5YTk3/ULPitXme5bz42wEML5djH77z3+M0EJ9wvlg+cbya1+mAiSP6oft2coZrPTONKbt/3xzda/cWrkWtCSZAQ0JVHJuGIJUbsPZKIFEQCaxgwGEZZucMs9BIv+uP0qKbA5Za5HV9L6pY9xuwz7GDdttw/7jZ9uwfWzKNfi+uUZcHGhbqrW/aE9WlKHvlAiArVfMKcUQkFEnvJyNuADLJWQ33NtLyV2B8YzewwWDfDX67R+SloElIkAoRvkP9QqUPG4+QpBC1j3XsxGjT9MnlMNxIn/P9QvUKu+AWHlJJyAoAwJOGltkrY9BybjhNdjQQviHJJQISMSEcChmNPcu1h7zjgpBs34M0we0CyR9YCg9SShKKC4ywgNbo/puYIqKrGvE1XMOSApTP6x1wGE3DHRBqfdE6uXscjYXgKWnSvhykKZBJO7Y2IQyAtk9SFHhP9s5SB6XjBbEL6sNRHCnOUbiC4JPBzqPnKEMsE0fvUqhAAj3jTIvuwHPX1HqgHAASMuvVx/YZWsu0RqlnpfuZWN+7HRGIDnUPEZrgAu/LJ1QjEHO4dcVJFdZLjY+kr/LOtRLpgIIeKC1mMugj7AV83AnSijx42RSc1/99zWYQ+wdq14/FZueCYRH6A9U/SUJqEGYw4SSVP+dY4CI2jDzM/Td+RXPRmejLG0TCb0Lu6DBDD4fShwT8tXezYRZjiWcqK0XKIP3kirIhwwRlBXZNAEYvgeJoMxLbTNKqCTXML1ESyQCEo1gBUlKEcvHDkOHlVDsfLjuycDzNSLQzwMywB5T+kQCs4HPYizZwLYs4Gz094ILtNjoo4DP4hIxWAJt9QpQCDo6G2Ehf8wEVqNTmFAGmkMLkkKGEYES3gRDj1CsGC2WK/Ub2THt5IFbUIxK0vzSoDztEfdwDf3C9i5kZ5JJTcJhILhgfmoAOId+0EYECQQw93Y+Bdja2WgF0XIluuTpS8gThvIgMJthNzR1KMUCyVUtEMb6yKFI9GHnGCRwRbG5bXiWmMNE3EsQ8gtLK5A7X2JG+SNFIJhKgEYswfoQgiRYTqzJ7G2UQcS/zQxKSEZk2VxvRVrORpQhecMyUsH28CTnehhwIiCD2y2nDTpNAKm71oAhMMcthKvPCi4WcjpeGmg4S+s3wa3fCh4b26cWvgtXelcIcbBjYDRA9sMyhC0qhNlGirg8iNQPzGVv8HpmeMEkhCwlYwgOwBQ0Lje2+iIgQ5yNsNaHLYpOXJQ4fEvwJqQZ6LkfZYh8DBE5rxBTbfqu0sx7BPGh7p99VDMsbque4NFTcrECZGkkoke4mVN5idbwBpOCBThpVmAhYQLedMslz9eQLAO8R8oPFyBHAmD0vSUyEKqkhSfKUq6kVIn9CVS6gRVgIBHSwvBNrWFazDMkzKyL5RLyUj1VvU5ZdehioTWwanwldJdjUv3JpZRqiJQh1WdT9R9ghn8taFLww6FSgiFghgp5d34FcQ7ZLCTiQsYcCdL6Zc7gAj0HrhGLUNecMim7QR6QddcAo9RSJ6oJBPdH9QYmvwuznNHlEh9K+sLB29g6LFvugmeCgeTxNgghyePtYuHvXBXZfF8iXmPv9Np2UvIImOdH0yDUK+re6gyREDEKKMnro3n1lozXQIBD7QiSN47PgatB5wUgIG3tgnHvQHqw607wwh4WeQR9hCTcE4CO5uzld3di82B5dJ3FIAu9Y3TJIOfvDgbMufmCFyfLziCSB28JinxeBNUoYaKCSAoFZJm0jXWrD9LwnTE832pa2x1YtTu7HNp7yrJDkZ40cI2GOH25zUrLYbW006Wkt6W8ps0oHVVTabx01+07pAwf2MOwtCFFvaCgV89va6nsBnJuvF+6oQ+lu22c3LQrJXgemz9I0zHSCsFSitcS8NnoCTBSulzIFwRxc404mmMvzr+ajKLk8WACEs2rW04A+xSOQQwTAdNJuoVg2nfNNJ8MbqVCQvMqBuWdrXWvyyAp5OmsIFSqwRWEom1PKNe2k2ENCHjQDVfM4zNBzyFFQ7gPPIf7GprEVGsRpXVCGhiBgOrPb63D6hKDd7IDStPZosBTo+I/zOZxYfhqZYGgpQUCKp3+WYW5KRBAGwZqvVIXa4DGJmBdf3+Yt/RxIHudeoY7XYAeIYaH0xe+UG3foxBLaEHEKy8D7xlYSqeCKaaHMuIlgIfveLKzj/ClcAEKLC4A34LjVV8r3+3+fheg+ErZI2TTYi4YPNiFiUH4Z05JcINyilFicGIBMJZeIjshg/OF6n3Wy3bCE6U+O039qEtTXV1iCue0IAn0Oy7tJCFhAdnFCuX8cA5K+faiQKfI3sYUpe2dql/7xc3GJnZKCW33opzveAmfH2oXhXz1HuUp3nS7EDSXQo/0odQcvUegkqaINdzh4qhW4MxyN0RVZB2mF5QIRvHbkVx3grny+y/epwvAaMEhPk1P0IIx5Qibwn6NpzbD5BhsJtINZA1wwJe4y8Pz1V61d2B5MKk9B0t4tM3kK/o0ISlKgPCbYZp6HjW5XZXu9RcOJavDfEcW0btPLVKYUiExcA6kyK/HQY9nmZ5L4wM74ar2HkJkaXzch1DOy85x0HnnhQ6G0Hhrf+y6DWjXqc4xr/dtZgBj8Bz0m3u1s6A2q0wFQ/mBjg+oL3QwYt3fx7JCXi10DRkGeditKQPPX1p6KNvriT7driFbYPoUEMFM70XgeicvNmEvLkpmINckTDZ9YCBFkLzWSvsOEHIwhPPp/hBZUKUCThKpPK+VgFIdQCSP+daJbllQQ+q64qSIZ4gH1YZ9br1NEleu5OwFqDElIHmcH8xMs/WOFNrrMyA9vPywdtrJcrY70RYMmbhEANPl0f3Hu3Y3oWSBWDa2NjkBJIHYbkkhF6xQl4Rg5JR8S9jBXL8z3J/RNOAr63eecqe9y0Hco2R1QK9wVvTcOBpfVeN3UvzA+QEjXoqg3V+6YX0UWciGFOT7vZ62CaMYX5EO10J12MsSOHMwRxjJCd+3jVO9MuQujEXGcsqIwkM5AMGt9M4vFNuULCB94bscxPrNoRXDBop+UrbxuM8lK7hmyvctWcHkUQYK1CzwNWElqjtsZy9fEB5R7kJoxE4WDHy4iKoOl4FdPY3kVWaLOyQzf3rwrZD+Vl9e6BgV9JnoVHN2exfvdEpK14IoOaxy6UXee49Ix0+W6KOwZU6fZWABSBFV05JhlvlW2qjug+h21+51RNllzyUbXiOxObTG4KXOelt43eweKcACvug7XV1UBPlUWacPpLHX8QxbhLBCIrbRxli37d77ibxPfmBgPocspNG/1O9wrPkhmK26w46/6dLR/sx1hP6ZFYjmJMkIi507HOKN9DU4kL6AJCvamy+hT5H7w6sYYzRX0Xwm5kU5outr0EPpLtEXcb+X7ZtRisXhNC5b7WDYLzKsFmuAmra5dAGcVoLrJTEkUxU4vwfy95iS5UPO9E21Gu6gyS57e0dzKQENurdbUqBX7eerCUeDEO0FsKUh9ujSR1PEAJzLjDSSB+aFijWpIld05KQwGpC+mBLTr3WkIQ00gxldgyA/sK4TlNzLsaVBwxjIAmzE9IbJPobrDpfZoG9zt4jU6fm8Ixzwidr+A4pFO1pS9G/Cnh19LnpknKa+k9yfGH9IN7FVlYeo7VxIqQh0vdqEgYhrm3nRzlwinmDKCwY/yJvCaWWjgO3UPhZGlb1hj6uaV7xogykxIVs78kmlmNT+CF43pSNfGb0b0pmucLeVHtuBOhggv3uOih+7ufAcLHqvnQhrC6LL6FOfnC6H7IHnfADFweKojhUyt72QI5UnQPp5S1UfKM1vHff2vlN4cQzOLmckdeJkeXx9YmC7kfTMAR1GHlf5FE4iE8T2bvDg4SxAOwlbgB1WzgpHeGwrhlkqlBKSd8jR02Fr4ZChHo/lnSQNSgpxyA3lGCW9HtZ6UC/YtBV3K5Q8klDsn85HNAsKMrp/2iXr7INFXcOljP0fxsHvR6+ChzJkR9e8YqGXQIBh+fHrGfDZaIVS+LF5d3CujEIHR1d/h7kheL53Z1MD53c4Z+C19wRp6D6sQJvSpJCOvJ0xAvagwFXyGpHHnYIIXrYLVyk6nGkimPyoXP/LN6jvLi4oxX1Q7fLuIpcxT1PI1iiBwcxV4zVAOKzM6Up5c4iTlHllwSGjO7rFk/49w9t5D9Wfab70JW4sA4QSd+yT9NIUAjJZHeH//q//+gPXK/vtj//0X//1xz/+0x+6xfp+pVMoiOZ1kcVfKErgJ3qwzJ5PYA0XMmp+J9Gw/FWYcHQ7w9XdHfFbHHW8oe7uyrksYLgnPHeI0RqyTWdnh7b+DoNNCQZ3oOA1TED4WOklgYAuxNxDwTal/4PYVVhn7lrrjWJdSw1eROeAXewhSvIGsP8u4NGTpvS5Yh5Ws4MyqJybDrNoSETvReqsHLUHTYAMTDmsu0oS9tfeJfRkl0V9lbH3by01QU+A124BIZQdPlHANuGBT0Akq10NRD3a6j3s0K3ID2kVw+GcgPvJYyhdzLIcQwH7MhnuFMQL5ocS54Km3eBRO4lBG/o5BpcFVmFVPAMqAS8GbAm7lK+7sbXDGc8FEkXqZ+XSASPc+53SLJgbG/YG7phRYfVC+D7Vq51ltHCkE79uoxCwlVMYKY96XS1MoETnrlzRp88csmvayjBufXNBMd5qHBIzetGy7dmXSZC3ksdzAWTGeJUZEwiIMVIpS1abOVMCvsTAG5BbLgU3an8dH4Mlari9yi3oyPiQQQbC0q7MCt3Lb9SgDhoylQOqScrtn9KCJTsz2C8ohfTIcQA55SHreBnhG66tw1w9hdWLqVNux0kBGzTDvDjoYCfRLF0MEG7RpeNf0SdLXgxsKBeAiTs36MclY2HFDpBIPV2B1/MypbKRV7UDhudxWYwxINtt5xgJWGdAsdxIcxGeqiIWoWSC/kxUOnJGZXxRpExqv4BaiSwGMVI65RTqchg2klQurAXCYkLM+EyZOZOCa684FX/xrYF8VXCGjIaT+YhJAnUuLFIGf9o/UW0yomYzW8n6XRT7CzN1YGKJvo2wEP2vlA3KBNw8YRAaeSJHiSgYnJA7/YdurQsNSbgxGkTlOiLVSgC7rbl5ut/9Mr+g7AmwdPqI8q5jlW/fZpxEy38vYNHhCX2xArlwhYTGiBkDROed3zPF26aAwreKvIe8+0CeQ8BkJJ+RCDEVvGa1IK1VMiH1zBWpvMau6iRalNzVeTrV8/sKWFyJW4ZjOWklJK26gBgrUTTk/CmVrIEwiK58E7vY8agQ6FDqCF6KB76c+CHG2c2OeQ4D9dfCiZx30k6vB9gMwESZWD6gj7wBySoUE9e9YXvZlhtKxOoCYCjl2gPtzwaCYFGhwHW41JBcBnW51oAOlW5Zk6c/Z1o1siPHI+PiK4SPqXMitlpKR3pdVpWWKNH720iUMk7/DhJF+ohYBYiv3LSOKAciVl1eTcF9y8BzZx8VvONApHK1Qa5lfhF1W9PRe9+ss5lKQaX3BKtR4TuOGXlF+uHBjOm666iR9y/RH0od7wHrYLYTYkow/Vf935O0IighSYU4BDei7g77pq97Aqt+VIO6rCxMfKSFH7EhSYN9vWgkMeQTfbp2qaLj9aXP8GqtL+/GskKWjmlFLWBWFz7rru8KNRHvdcUox3XEeyERvshwAvIbRAoBQ4Vr1aIaOj0GK4oi3drHPaXzGJSKse5RO8VSSocgcCjDxj6AUQXsz2iYOlgDOkC6rgccIMoq4WowM7UHLncCwhTyBJK0K4jz2w9d8tb8Sk3TlFa3q7zXxd3PRgIsdQM6X3M10k5fbgcQaH3bK5KaswVQKPSfI0RVtBhJGVVJyjOQqJYnOJesgtSdYi3nuNa90ipAuSxfr70Q6+k1K7rWcwVkY+rQl/BaBmZJ+C7bTLE/u6mK2vrx7UCz10p9t9Bta5Mtwne4KQRL2+75qwrpp80lHqWo+r7g4CVF6s9GH7dGwlVEwoiEEQkPgYT/sTUSfo9IOAQSRgzY7hA6ofwafN/IPFDbwDkG3zfnWIdb16BeLeuU4fxsNEeVMGzqa1jKUZlDLlkBgng2+k36eK7UlFaUoe+UCB0r31qffRX7qXmNuqHLhA43fMhJUHJXyIvXPVxIQ453KqFUDur+GjCjycyrmfd2CdJUGcYAvvNcam13IsCWO72hhdmkwFhicHN27U32wF/Xfbdna36E5rgAmENNPpq2vzZZygu+cgiQTrFitzCo/J+dNpNhx2lT1i+7QRrWHoxlzW4HMuWk+9Eqi2eL6lUA8K17vYcBYeNnpGBNVrUuN3Jb8E0KxkMZ4Mg1BekNdazZEQsiFrwOC2RK9Wmg3mWjDEANgIPglsWjapWbi1xderJDTImrgj4q1m4qi1Ro7SnfBeOt5Jk9Nv+dszGUfpIV/ErgqYE5iHrhlm8/vtnOlJEKRSq0HyrUk5i58V4N8nXl+e63N9LERiyLWBaxbP9Y9mNQmcDxf2rxXjvp0wEnYbKtTIKKkmMpEpj0mOTwGmxoIQadiXHXm8iEYTPt4jWUVsGeis5XezJKfVMCakh95uuKaLkKNJ+bXkg131A5eXwbWrqgyA8jP9zX3dfS0UTNTITO34FmpqE86fRva6s1ojIjIm5E3KjMiFgWsez3rMzoTjfYVAR4otybN3R/pHHj6hyKhmvcabulhare8NlIhSVs4RCyZOoG+rvwBbESMA6nqVBTkFHHRXYCE7mykqEP5pgyvG/MSegYT8BBx0tPasR5w2qsdvJVpza0i5ShEVft0gHWsXQowrp5SpearO9E5IALE1DaR+tNeP+bdHHNJdMe2IFueDqVUEYguwcpKgZlY3UKhEGNMtHt+ZTcni0U3Yk4NoHam+Cihra2SH5cd+tpjpFQCXe2ILlcDj5fy9E24c0ZyoBOLTq8i1MKBUD4NOZiNuYGPH9FaUAcG0ISKg+s2q1BUdUCn56KmeZgu0Z5trxbBmnvhRxxidbIKJ77kCI1Qy2McD8x5Ob+0DgOku3WwvVIG7mr1I2D8EXv1bjssq/FUp+EiKm0lFCMQc7h1xUkVzKoeUDXgtOBhc6qV54N84Ron41U77RMQt0HTyqi/FznrLaBqqrxMdjt1KozMtQcSh22R9bbkzb7sPJqsmvQQFSaR6X5ScS8ADd5yFAEQFGgKgvr0KRw8InoU/FMwwPpRmhz4E4lC2y25hggMjoWNSzdILrmzjNngll67Au6ZnyDSiIvLHYarb6Rgb0RBgZ6sli5JDeIBuERDWq5JxrpkrEtiZefvsjmMplU3z1BFT1xLgjmh6dz6TRTDN45hZUGa1uB2P7NAehJ81zKr+0kfckt9MouGbyHixCz66GjoruETRvu5OdYgxDIsgLrBiWQy3P0oChzG+hiIUuCe1Bb9O7Lz7msg4tGKo12kU0TgOF7kAjKdlaElnNgxPsBSqjSXKWXaInEfkNafLDPCpKEQ+a7SFT3QvjQInhVKmqoCWTgWWbGHNQcKIuGpPSJDBqPJNnNWJqC9m4NtBr/XnCBFpsjXI/kci4Rgx6dUXtJMjG0M08sGkRS4CPMuc6a3DfhgqSQ6fJotrAlGHqEYsVosVwdYb5yAtNTsOqfjvK98nD8ErRiHHki93ANB83edFR7BMDYoMq2omGg/GFLlH0WMjnvCwTsNyWKB3+2xdJrAf1nlFpbd069WqXP6c1E7hVIffn7W2KlpwK5Iwx6vOF2LcvpCkGtWf3k5+qKX57ttuWiA0pDLYHlNWKKK0m8Qn5osHifZ2e/HbfNFIMjam7VNgarw51kpuRVn4YHqYG2iseU4jodDY+cUIeCB3AJ00PaiwkSCGA+5ByehvVjssvCDJye4RLqwlEv0QLsfzZl3ZKuW4osPeVoxGURqgbBgSI5xlWlUXh+MIujW8NrMFdsWZ+y7/QkK3K5i3QhhanL6hBLMDzCAb5x3xUJ+mGXzKPpeBAZlKEwKOUORJbbUI/q7uEIegzJzBT4yCbsQW3XoRKilXzQNltbjLvV+RRwU+0sPujnQZ4rhsMcXssSGlTbswPdJRErOrcH6nYoVwCHMniuH/462x5cegEGKTXBxCysV6CW42x5moAMvmGS3EGMtrar+ATWsLz4ovetAUOyAFZYodhvx/K8Fi4WEgP2yAx8ckbLO+m4cs7Q/O6UJPeGYkQh76BsrSQf+yYaLbxuc8Amn6u7WtjWrsVXIU779Pw5iTqI+FZs1XtysvVdIcR2tHuuR9rUm9FhLb/DesP7PW7UlLo0MtEDPTrwvU0P9ME9PVLEJWFNh7sAe3G+nFZX4hNnzIBbaGwNk7etCilNIW98GbLifMjx4WhlkV7m/W9bkI5RKVAS0uGVX/L+ekvwZuCsz6eRgSJD5OPAhg2vE7edh2y4q0kpG/ud6Du846NAGAXC/QmEQU8OW5ZqE7CmuNL6eUOO2DfbbTL4fb/f4rwe6r1LJImHETq8qv16m4n4EhP2pGJxyG53mogmPSyjW95rwXW7EJdzLeY6uVNOwxJ6qlkeuu4B9YABN46SixUgSxi1EJHpvC0txNkIrk2aqUe4sXARkoRqZLRh6hFu5tSk5uu64KRwAQrsbgXMZGIdJ+RwRRvebhZEVW5xzP1RChNJWo9RTB0mBRvWXzwrsJB8G96cREjM8zUky2Fdv6S/5QXIkQAYfd8qLoM0geyJspQ3ImKlyl9O2bE0rwADiYCMHwHYKJkW8wyJyEIiC/mpWQgvlkvIPZVH2/tPSdOh/BhUX6GhJy2Mh8s1KcvSdQUnMkClQWfSRgNgR/G1XNCk4FFXHnXltdYTQ8Bqa/VgIs4K4hyy2ZCpHqQHAWOBmOfhzGBqTl1335zBBXoeNm3UYuAZzCmTYTOQD1vDcg0wSsGungg1L/dX3VjCZ39sGCK1JN5WaNlyuk/dFXakycBzuFM3+BjhNle75j3Oc9VDRMClblP0L4Ocm8ii9hYEPSxxM1SNkoc5LlizTTN687Fh68HWmD40CRyWDp+Qg3efm3M4jaqjkfSUX6xVhfF2F293e7nd2Wq5AZVxlb6szcu8iqwdOZdf9XNAhY+tk4m4GnF1T5oYR/+xi9bDUUwcWh3haAx+NnN14/LbplfurbS1/Oq62P5lfSnzSE6LUJd7jWm/1b1fxFvFT3KrcAR/P5QFYFCFic3ocom3yrwg9Ejb6QAPnfl6PWw6puhvEEWUKKKcoLHIroorGEgebwdNrqGnsFgMOodVkc1jypfT8YzWrYNqqMJ10dfhlE5RORW5yZG5iUXC2777Fm1td5ZEbx/pMvz4qwqjCZjnW1ZGM0O3K412DLr0hoXYDJGBvdmG/HwU4SPR/XlFeKTq556ezLQOqqG6BSNDq3yaLW97FKQiTu8Zp8MCzHgNBNhKfgF6pC2+qJSsnxnuqeHSpVA/unxTzbkjLYg/T+qJr6ucc8e6hk3fdOJ5421g3iUBXwO3qtdskUa8M61fx3yanyxfs1Xu8kBSI5OO+R1It0vHPFcD33bFrcFzqAj6CMmJ7ZmcUtf9rx5wKqnPdC2HQatRhmy94ZDv6uj9PQFp0l/FQlrzwHIrUx5YvvUqeRFlfm6U2TNi3DG6ZJDzd9tJubkZfj5vyLplx2lp68pZdXv6W2MGTRBITo3WICI68VZqmC8GrWjnn3c1r15F7ZBqSkRSKCDLEAlVNT1y6ax08GTtg+OgCzmnwo4q4jqs275F4luY0qSinlRSgZywLhXpNbjWn2zhT7DKThrONR6ebwsUullqfUay5z1l2Tb8dCHHOTqjdEj4r+fRmkFTyTj6A5NFskb/49c/pHDBf01ollMClXL6MLNMVginDJI6ktgXYhme1mFmxTEVMclAVFC/4Wy5TX2ZlUCrgWmD8h/kxxPrtv4ySuVSki76EYNWImYf1vTUhXulXLF1RjwpXHgy4g0rYgzuGi/DT4ZOiWCHkcS4+hgB81bj6m/q1Q6FSvrZb4ju/qsuG9WI3TMBPdpaWBfq0v6JbmuOksdWo67f++1HS1e1x40wFXR3wdwYdh+lohh2H8Pu4w0m4moMu49h9zHsPl46TirsvlcmOKg0XcX78xgkGNlzDBI8SpDgoCjP6+hEHoNcIiH4PQa5DIqARnu2A/7RvLpmhKx9LzIihnk5VxPeNQRBV046hJzfVQvLZ0zSK+uHDQ4xTARMA5QkEqRIkPYumfRppA22B7nqorSEdkOkvomGXcx0/9egTPOqMmcS5tNG/Tbr1Su4ZpSUSoE2vtQ7FJp/77WpH6QySApXvbiCEPuArHXYJUEelpGkIQ/aLjHuM0HPoeMM94HncF/wqq0tQraJCWUN9AQC6sZvkdpGansIatt1QxlS99KWWo4W/LpnWdF2LWl1duswozb059WG3gQn5AF97zUhAAil70PDk6EZPBb9ASLziv4A0R8g+gNEXI3+ANEfIPoDRAn47fsDNMiTkoXPyswGZzuLzsbn13YEiOb/yI2j+X84838AwzV+vgDHKxd+x/QfDf4R9aPBvxPlSmx5Ac6VATK2sT+a+KOJP5KgaOKPJv6fycTvZx2G6r+AcxibeWXbjxb9SFwjcd2XRd+PrQqqvykxRCabkLT3qtQD9mabkKPPtdrw9HOodmUG5HANGRKbUFh5pb1Ta3WIKmDkCBnOjYl36Gx5a8TRHA+ZuvANZTq2YGpnSLIPu61trE+h57JgZX2t7mK9CV/1SBuhrQtaf5a4eFV72VXtuBTRlsKDRNG+PMbqrFGgiln2XlXayUIop76TBViNy/NgSOfe0QdNTroL4v/OlQIHPYwmWeiSk3fRPRxTXLQUG8NJjFHdHdXdUYCI6u6o7j41dbfsuAQCbn9Zluoz343ZUU4fotyEvwTwsb9YK9KP9UWjnu8SPnZV1O9zfvG2GpnNSdxWfVC6Q8nhgqDncw4TSlJ+boHSwWudH7BI5ovKG0cDY6Qw0cBoDlq+diqAgIsCT2FSbkifkMTNTyRBMRTIKjsjWpH8Hkd1qiIzGtFeudi4LS2bSgoEOIJprpzeSZSl0fuyg/whkAiU5OTFPNx5KOUASLaLCIlELRK1LYmaHnkd1I8pIJ8GK9OWaBAeoT9Q9Xs2k6EMsE0jME2KV83WHANERhYmTE156vZLeeb8Mks9m6Tx99vwhQOOQJEYFGwTCUckHHsjHAqiQnTjBDFNyTsnIIU0tkbLeIMaXSox8xDCpSX/de13JZlFeSyS1SiPRXmsJ4Y6CkoRo3+/glIpy3TW8vRIGUpJ9QgxFFtqp8qxtlaqinceqlR8HVY91AyaFuPh5lGQATdif/aHV8uwLwjC38LwX+1vM35fBYQwsMwgEVMp1m8TEmLGn6t7gI1RCeBwaH9COYdDerEnVGbgEn33AJAkkHM0RxiJzZgQWpAEZpCIrfIF1p8Z0qlcEmidgu0C8AHLQTb2p4Ky8rDdae4bfeVJMIqVK5tgBdwRoW2caANTCaw/N4g2oKj73X3HK8d/pewRsmkxFwzCbWjWk/rBOTe/cCLZGIR/5pQMTbhyilGyk1EHYEyfYDrb5FsBkS2U61+Ojey3468z8Hwl3Qhg+m4jwhkRP9E03HkJ83C+ro9b5ptxNsCzqvZUrYlZ07A/OqxybwEwVnL+6Sn4HDypwNWa8okR3iZet2+3FcJFNDs9NLMxYevrYT+Mqpujyhb5vnTK7b08quE6EtrhHCcSyFMls4rhe1HvFMP3XhW+53GTtGDKzqscAT0C+k8L6Cmcq9vgDY9KuVfVVIj+u5FO7J1OxPT+Eaj2DlQuyffaCRAWkF2sUM63yxwlh58narxjJSjfcPQ8MwdO/h+0spxkyhgnlnq387AIwEHnp4qvTNUkB0xHFS+4kfT+hPlpuE/6P9fH+eNU8sM0bUOKdQx6F6i4V+RZ/Sk6dtV4u/S+TeXjdSqS3/1fpzqzd/gpkGyegflWgrCQ4xyLs/nh0eXfOUi3LFh5cgJqtG9E+hPFv2OkJ+SlR31XsLagubsRTyiHR4jCPpGkhXJ711BlOjop+diwGuuUh82bbBjdW2ZvMd1cZAjHZgjhmKYOutuXhM5Ds3piONrERHvPKO9vmF5o/6ztXGjMb86NU9fJpB5/WyJxTPMdyWYkm29Djj5F/WlJaU9HRDx+ouQoJUZy97tTW/oRX466AIwWHG4lxiXlWFt6q/C0X3br9OM+BBVMVginDBK/4KTm1SU2JQVjkIgJSeHzkOGxUXCKlORtCk5yrwtBcww2EyIgWwN8M2ikeY3zpyKTacAdVAhrilq7Ee4mlYxV0CPROkJ+IS9ZacGeg+89Er9GRFVJDyy3LKSnBjpBYWAJT14cirJNJBNRtnm9bMNX9GlCUpQAEch+OkjFVE2Dhg2ZKclgFCkirXgrtKKJzT11ywya6Yz5MHd+2p8vH+bnqPqFmy0f5qfpj38qMsNWLiopFU3wcnO76snC9NgFCvX5NnZz4MS5MN/RVbeXQncYsXc6ma02TykyKcYg54gsP0KQbie+J9Vvzlf6R45m06qbeDp17qtZuUpLSaYRkdXQyoqPY86hGNLeWyUnHWoCdoLUoeYAn3NAUph+PIFkjwrYT2Iq5UX09O/JUkTEGDy/B0lIxh8gHL5OsDqg1rCzrKxDgfzZn3dPatxGJk+qyxaUe6pZ1uD3IqBrA0V3+Iw5Ldk8XgMB2FQwlG/DoYAarsqz5Q5z0h3De8LqaezFd6sTnggSCGC+e2HR43No+2hCDlkmwfhgWrc1ZBjk9/JiN+Q8MvD8BXE0x4Puhrz43a4hW2D6NGygsZnExbD5kGXmzbxdA35oybecVIfgS8kM5FGVHNVDb06VLE/1AwMpgkScim16UPGyIeC0/dlryePk5A3D3dtq6wbb9WXltPhhm+Y3GJUnQrrJQdrCb03aPY6KhnxGohmJ5n6KhjTImq/c7DtAyHb6urke6WjL4Roy1KyG2t5TRBbUXV6h8p87bU+AkWaZsFTamdgRYhsHV1VlkHOwhEMHVgbEzkiLIi06ZQHOrDh4lz3WHbJReO0kfBwrIn12CopLm2UciFGEVZgWkQ2UtIs0L9K8/aV1dKlSmxZ112nsxWPl/FBOdBu/h3KsLcNFwSMiYRQ8Xix4FExt47CBFT/PPewUBaiSQg4qN0XRJVLNY4ouDl1rU7PDS/E7yUYViiorv9ySSwQwXW5l5ZfDz1M93kkVGHVC8mQWiGXjKKFFWvM2JbQEkATiCMARgN/qFQNywQqVQGxQ3aZhBQPL5iVCDz6NjKYAn07YmRZWmgx72AyUL9LDtiSOSKYjmd4LmW5KAhGwImDtqXyTw6HbbKDJOj216B2e1iaYJbPpiYoMcAE57B4lqxl8FttciRlKVudCDrbvw6zYT57QRKZB9UcmmPm1OXkZ0NbeGcAeO/3Q2pA3pzh1gAAJgFHiNBUkhQwj4gKfrLLsNGBEHg3oyD8jbYm0Za+0pYneEj8GLQvRmJAiCYMKmSVRiqQokqJIik6MFHmphWz9CudfEHzaRhZ5gvPztRxriyLFHgPDa2LkS1lHJOZ9FNmRvrfab3hw57cAz2Ei9huG1vlBnjCK8RUBcwzT/alOOr+pJOHlLopfiWbvCiGCGE1zH9I9wbkE04cV4oKyzYNYQfKQy5IBypqFMX2C6S1DS0R2TPcAnwVkBOBrRB55yOL2YL7vov2GC5g9zBl94qVdLQHJCt5I7uHPDwEXoMBNAoUpcPkUXSwkYjxAzOGD7v2mwFcmcnglxyg4ZOOl32f9bJQXGM/oPVwwyFcB0FnRpztGlwxy/g4w/yA5aUSWsxCfh4xRNguqsBCR6/ozv6RJIcsrTAVgYquRVySUNXtDCxE6X95gGjBdwgdBH+T/xi9jQ5KpAKKQax7nOQRM3ioDnmcSHrmEqDsG14YUt4ctIRcFg1tIUiniEq3HGPvfZPrvEElW/0Fp1jlKHoouRejKMO2Rsg4GfBY3kBSd4z5zyC4ZWHZ/FuQf0XKFG7Hr7YFTRcjeqZrNWwyskhPxzsGXQIBLKGASGvmjTxGRwRRtY9qShz9RnO0Og42SK/xQYvI8dsDQ+wJjQw3Dg+5QIsFoQswfHUPHiIW+2Lv8nNEsF+/ggjJ4ZRFN/+cWmAKByPKdQ++7dw7WvKv9QrmPS0YLkl6ErxWIiHCv9QbOv4COV4S6e/cIyZSdCcyFyt1pcxX/8d8r2n9LLhgIkVvDC7bw/V7J2DhCJF6vkdgEabOivbcqXi8AewwmMtpu0zFoC3CBCyiS1Ta1tNgSipewtV72rk5dJKupP2yxdxGYJgCrXB/vCpIGmFVKs6mgDCzhVRcAixVi6R1gYnNB6SOCvHM0XwEmCxH1j3yC80s4L5ZLRJadA+cMpUs4hUlROhf1OMWB5zFbTtU6ryFZOtGqTmDnmC0vYR7uv9EWqXcbAf0eTwwIeI0yJG7A8wXAuGfUV0RS+uT1nuo9UlmmCRLxHmEB2X2BvXLS2QjkueRA6SXNwO4yZb6CGWQAS6YjYQN2ncgnkEGea2l8p0RllHCK4XvKngArMwp4RDG0gMkmwfBKFnoJECNFuPRldQYxzKBgm9BICSyXkKMlmdFHSELkDS8pQ2KVoeQSsEdIghNcoRR+pFzAdIoErFOceb6dZZDxoCFAUUBMOWwxHGvQI4T5GAffkSOi59I5D5u6j/lUcWgeoqXqIvhRiPxCXg5CNow1ZO9AF3OT2/QVPY9Tvs02vqdUhKbPIeeIkncK+gIvq140TkFu3tSWnN07GnpuaFQ4/NOfzNXFmVxIoPyxP1+Q7msryMEcYSRffl+pUA6dlrJjSq9ITuC8dSflbhFMEGBrZdpwGM4+1dB5tDUdTRVFwJi3jHqEqEeIeoSoR4h6hKhHiHqEqEeIeoSoR4h6hKhHiHqEqEfYhx4hpADYmh/IT1wjLiYCZtv4WWDExbl8neNogSEo8a1WPYTTMx/G94xjKoZP0uVNi1o63AaTog6eBt877WpWXelc18bt7KRmXs2qY+aCAYRPBmpjWtzokvdGq8eqqH3KevOKENr0Tl3BNaOk2ZY8Sh/ZY6VznLYrFQ1TAmXwiahZVPLW0Nsx+ERKHjLwRE4o37Ml5nWxyRdWDrElibYaymLWXd+O6ZEj89xzFWObve2HqbnkPogl4REugQy+IDyiRdt8SZ+nGG1ZpI3rkfaVUFOv/TuMv+w+oLq6qr1kiAxcZGXYao0wjxWmIwn/3d9/drn6nI3g2rgNPMKNRX8gSagmQKOUFjKtq5p6EMCPlZqlyHPIvuyVLr9gFjUpHvSqQwatu5nCuTLnD5sQ1HgCpCeTn2bQ200lsbQtdoiELHmBwrowjzXRI3c7Uv2WBkRZiOtS/BY4OqTY6/nht+87xKv1VpuqtAxa6l5R+lpJdypG8VY3jPI354n5kWN/GjrNV/i2cxQy+rI7j35Ft85W3Vzn1DVkymJB9Aj6WemclE/SQZWA8WYSafebtMxscz2xHQ1OQi4/AYlUerOkUECWIQIEjLKxw2Bb4NCUmm3PIsNfducqFuH3FECMMnSkw3umw92ScJdE6yEXXqF3bLyQK+/8rZLOmx+do+pXh9OxH0foPAk2cyoUfvgq80MrwljLASuqn3a7pveSn45ix8ErPgs4J+tisFQImk0Vsd+mIqwafq6Zg02+jOf5afjfyU003uBbR89aPvaHlopPom6l9Cf/wMB8Dtmg86Dk0sgQ8VYepcG35i9ptnLIS65XdKvm1SW+uYMGFBxg2lTK+fKmSs7j5j81Lmx2W+VbdniN5mmVgxhU3rG4fxfPt/jy9ty4t6Rqg5N5okxtFhMZS2Qse2EsDun3xNo1iWs7TYShenuideGCAXKNZVRan4CfyXG2YA9Ismq6TA8l11dU4rX1CFAoj0ZIM4qSBkTLc6gPLoiM4ZZv6tB660h0q6tiGdBI1g6Z8lthrcaKIWsQeEVcdcZd4i1vx+B4khYxmqf0qeHirVPDuNutdvDBHOzBhct6dbHg2SlIuDUb7GJ+TfYT2VJkS5EtDcyWSjawV+Lv0OcdinfJGc0oxQLl24jjwgw9VYm8rJkzaJjrqauuhEzlePaK650NiYU4hreeYGi5bFoGPCsD7sowJcsHSZf4EJOOpoTIg96qKeHNibrBamnhoPCwwuswFNIiYnsgXVGLHGnK3uVa+cM7mssQ7m3EwdwMPVVx8KS8QH5S0SyanKOsGOn679vtJCpmd5RWt3RQOLaE+mobchRKI/HaP/HqVl9erLbTXSarhuJy8MjebYJkAeeIu3uKSF40drlYyvoWqJEaaqHybh9BBjSkZmLMP5717MkQdIxVjNdAAPaZDQoaDGZ0DYZ2yo6JYyNRf5sSKSX3EoNibH0E3rcHvDohyclpVMppdTo52WOGtINiuAZi4GB/IUt2nFi1ADmlrgM8iSwJ9SxjauSuBAnhLAj7ujY0JPt9y/M+kbsdMGrLwr5wipiWOXL3fXJ3W3iMQBWBaj8ioyXU+cpEuXJT21nBEmg89e5KSWPH/CIOo/Xl6ZbKNT5RnGNLFRs/14ymlUyEH7569P7SjPDePCODe8MrsF9RnMJhS1mQcZrGa3akmQe+ZksAfVEiOgsyolYoguvPm3HRgqmYfbuV/mjHgq8uj28jvst8PYZwwxUjcYnEJV5KI1CdJlBtkU+9ip3sT6Nesqr64reqCjsPdT1ZVLWZh5pBskI4ZQFDQIsThd3BDjTPanoq3x+HIsoMLuS2oGXRLPddd9ln/aITrk7Ai42XiCeY8oLBDzKL8TZYmVY/OVeZjx30HDxccfDa1FKz9pwDkp6ctbWcVpciyhkzJInzxVmcJIWjZEaXSxw1AFGeiiGZL2aOL6zCa1PaNn1tErM2c62pzItoi437EeMjxu8rYPJa+mfA9KIGzz6hDOtfnJcQfTpe6V5RRE/JlUHkCSMCca0sO605l13BOZ9QbOibLMbipcsd9LfClK0RxL2qDJzZBb3t2AZP8rljXxEwZdGdz4Lko2VP48Fa70lXifZZ6XLXmxRKDXSrL+AiIyfo8CHBgD7tJWdrAjHeyabUEDH0708ujaXcni6VQ9UfUdmB8+2huwTA0wY7+5x91OEDKJZbUYelGhhLS+0j/ykiQ9ZzMiWph/r8W7wYbRPhK2sTAuyG7iMCwTECdwct0eUPUEFEdPIfRJZ74d/r/Zau/jEgI5ffJigbPt6pPLsoG7wcvgyRb/3KUN9W+0uig3pITmfpNv6GUM7GCo/zuwWuPhHnHghDnPpkHKZHvnUhZ2AGj4iADFRZvgfMehDrskeLwc/qJYyMNWxghdyb16iexI2wXeK3jTrcTQuWpQe/V7wJKSwkTzW4kC/eOBaJj0xhz0whpIk/nFWgW+QuCcuW5MTEigK2ZZioHNgOEB2amr4gTPUoZZpfGKbaVj79rkx+Z6MVRMuVGPJKwyFDcC/qqh7D/I5FTHuim8LUqISp9kEKRh/hqSnGTi4ILbjlLznF4GGEz69GiTYiVLAaIbTh4yVd7ykpxNYcLpWjPXyOY5QchR54Tzho7j81I7Teps48Y/WIk7p+HZe9iBVKHgkMZI0/0iQSmRKazQYN4/BCkT2xLkdANWw6dCRKxxKquXW6M0b/KtigsW+CsjqELHgPa33RQf32fFycbLPPFszv5ht2DZdQs9leT0490maCeyubHT6psHgQdmPNAHuEb4I99pYaPolqvZQhW33zu6dLryzGezLA3l1qtHHqPuJxCQTY2rk0BQLsycM0sLHKUrJT4TiA0dKfbe0pdL0a2D1kX06vgYrQL3FKjG6vO6uzUAo/hhMqHC85rwB4pzpVR4KaAZIpy53oAhtrxJB+o+D5PkQAjnRJ/A7nDMTMErs5jZ82w3qdH/vxOEmHJ3uTpvoSpJbE7kRInEtRPHJdheotBK9w0Jtb5B4lqx1CWBlKVt741ZQmRQaJ+DOnZGjCZ8/ltBQ7rV0KMBBKrhF5jJ5o0engzVUxWQCM1QpjhLWNDj762M7a3SBcnvySJV2I1CBSg71QAxtfe+L4LVnhKkWCsl0lhnOof2YLDgRk8BSEhSi0nFR+eUEp3k539SMGBkQC/JOIY/sOBEgRE5tguvAixxSkU8jWKBmUBi8QxuM1QHjw0qcZIh8Hdx98MyL0YUXmUjIIiskvl6P78rhX3KeD58SAgMgM9s4MWiS5nYa4SSvbFNIhYi3StYPAfwNTBN5r3VW/pJ/J0eda1dXy8j+keO0hoUdhbcfOVtFj3nAifd0N+Pa6r+7u8Rwkzf0AHvJ42H6x5V11Bp/F1tCr7qkySZcHglE6eHzK0NfTYdOwnFLds3gZjPz/jermKZkW8wyJCLwReN90GnTJkYf16kzDnpdB2Sfsy9lfVyzeNSO67r20WM0NIlBFoNpHYvw2lZZtXyhK4CcqtnL9XsvB50SOtu9gT2ANF5RlbyROv5xul5ePM2ZI02PBFHDe8NPKXFbPq2sXG6OGvKJSjk5xH+t5de1jY9SQ8bUCiBOLyFRT6oxMrgYMicgQozVkmxNzejSz6kRie8yg6p07DDbxfhxlozeo3LkDBY+KyQi7b1IxCWH0d4+g+xZB9x4IGI1CEYDfLgBDwaLMG2H37cEuA+IUM3eamZ2WFoj1aDDYCSgwBi1M8+NsNAfsghZkQO/fEwpZszXu22NVU6ndds51tM2tvW2rc9scxtGztt7QVmR6kkIa9PT3hOduKdiCneEkOZVyKbLXyF73ZMOtlD4RpiJM7csvwChjIkhFkNoTSLlKkghYEbD2BVil8iLCVISpvcBUpVTY/tLD3OtEfRdhXbeJYMFF+xra/JiKywLsvwu4lTdVZobarlRlKfrfsb+RuultMPwdF0o5IU1DCZC76gqqI9wtjfUMZVAWPt0Gf0Q51kYgSMS+CryEs/fxrjTdclpHrRuVUuKNNj25lK7mbLo0nfaQiH4OOEcg9gNxA2R8VOUOLKHMjsQo3oaw5GAJVV4kOd7NcT2oAvpslBSMQSImJIWDFgaOoZZRzP8potUGzjvsv0i08bw1IEadRbTbd4CQ/OHXFYT4DiWmFEUfp3ySw89zPd7mlDSXnzlkhYNwxCZX+OiXXjKwhJ8ZPq5og7hMCJMGxJtGVFa5sm+nJr2bI+2MtIAYJgKmk/TEQkTqeXUU7IpCTaSub1OoaSUXdADen2HQRud403Y4VuRT++VTDleICRQisT2C8dGlbj6l0IXUQ28v6iq1tU/UrUq6nY68YydgCxSxiKJOxL6fQtQp0cAv5Wgeu6M9yP79T5247wTSF56QBBiuzRlFlEgk908kLdK0PUHqqYXdJfDcinxC8mKrYmJU5OdIDbZFHQzJMkAsjmR42lXYKj94HLHqJNLBRtkukq0j18Q4tBRHyQXNcgxFBOoI1D8LUHOYFAyeagXeHXZhJyG7FiFagkNY/u7O3Rql80gRDhC9YLOcCFYRrPbDaCqi7y35/B7Mt7mdLcDcLYKRNAsT7ts29HYLsZyV7DlKjhGhT0jV7cuZwtF3GMBja2OWBQbMXUkGMHZaMGBLONo76h4yCcgBVcM7lxA4kIU9rLyraVSkTJEy7YcyGWKyBxISiIY0AY/5dsGOuatKBgKJIj1YIiaf3EHJ8tjf/E5pdsTPZYA9QrYXt1v7gFpzdray3RskcwEfqWC07WEIcQOlqpXa6zqg++1WtgZzkl3WBnvI8aTp1UFr8Ho+iIiATJK99eGUZb4scbQIqJsjIr0lRFLn2JlcTw64oWmv5C0Qdrm+HixQsn9Bm6/o02cO2TVNQPD2eiDIX1CMB/w6EjMqgzVh4KpxoO9mIJ+20w60oYALQFLAUhcSgIAYI+HCx2ozZyjdP3BQcgPymZa7okojXhxOWaUhYVWKKRFcI7i+CXC9h0sUXWgixL4ViK3l2+PdAROQQQaO/FG+Ajk8ZESx/qAP9lSWIRsMcoo3S+oCS4JYgo3CLKeICB7vjAe7MzKQooLfBFJPMfrodyRZIByIxVO/+YpSr2/Kj4HvsBr0OyOv6xHHw0hKpvKzUbSLjPINMEqpvpnSgiU7iXUFwzOY5TiUlB4IwdC8aFjv6v4MPP+HsQHsRlR+DkvqKxjZd/+2OUaOyF0Pwl0bloXW3GsbQGuDGtr6ts6u0qvHszuMZGSrs1+gxPYontuH6FcRe8Y1lLntEbbadW/KVltBGoWRKIzsySPY0WRGuIpwtbc8+a7KMYJWBK39pMu3dYPtRNyOFq+tKaj0bVHLFrVsp6Flc7RcnkAwWx8VqWikonuhoq7i6ETVRcoX9wtKId3GG3etBtr+uAXbX0hOp9I4p1xAdpxvgULQ3NR13I8fUbdZTKeM50f6HKY0P9KnskLA9Ejf2rODaTeA8Bwm4l7SsWN88BV62JerYItAGskaEdtUysKb9jnbYN7uLaHSo+opgajd1aFQbByRr+bSXbr4guDTVqUd0sX5Wo4dhPYdE7SlIs+qe3EsosQFYOIOLOFxVimNBDJp6ZFWB6Tac7oC7DgfPCl60YGjPljzbIkNGl5zT3mS7d+6G++Nnb6BKQKyivN2+TwzOfw81+NtasAh59XV4EiW9OrCenTXFlCkiDoys5YN3Xt4mgDeEN6B+p28hgcZDKPyXayzM3ADy1AGZ6rRf42EICu7fWsSjQUwumTyWNcNmwF2bxopkJcWHfEWqowEmEDcf5UHeF5koR89UfYYyuhc1lKbwoSS1F9QDQctaskK5OJVBtGgziJYO0qictdsOxfcf9GXVedmDCSPx8zHjQFZFi552gaDyjpaLiglwOQTdxrLk+rEG8Qv4QIUWLykHtbQrkrqcDo9lSToHLSAVVAqoRw1sOxIn2+qS7riSxBp6UGTpgU0oVkOEpcgZ4ggl7ihNJUKkn1Hn/hvue2FzAuExYS0JpkBN844KbigmdNEZDG4vU/crw1oT5zANXSDoylpqKmeVpB8QRzN8QHnqT6AMBKb2YpBvqI4PWYo8X6v/NuEZzfVGZ6joQ3UaD6rIPZ9H4jUNxp1oz2/Hy16+PKPSiKBElEwOCF3+o9DfkuqVJeMFiSVArNSsB7wa/BZQCbZ0RG+lZtv3JeVoreWqC1F636jKdkTYOn0EeXHZzxyJ4b7urwW/nsBi6PGbcuPXlgS8TG/O2OA8ISh/KiRq0ePyD+E1nQ7uQMSsU2k9gK5spEySO6dLWgF6md21FxmeQ4BAyTZMTYtgURclIW3d7Auu8zipW9YUAZf9wauiBdgm5e+oFQBvHgTisUCMvjiBRipeRpMyuOT6X2Jeqy0PAllBLIO98mWuNTO8iPVYEXm+4KtPzH4c0SX9bMRx1TwXaC8Nmj8gcHF6LfR//j1Dylc8F/l1lIiXVCVmAnKO2vXMMgY7X2XfRXqGkfXkJmLR9cwpYt7V2Fb3/BaLL3d7v0wy0XPoKOesPR8A+kmBg9Ft43Tjwu/C/kRREiNkHpakAoKHlMXRFB9A6B6RdIIqBFQ3wCglteBCKoRVE+c/RtNR4TWCK2nD63vKyVGTLkVofatQO1EwCzCa4TXtwGvynn2AmKsjAlHtEzmDEp1+zE/Wfuf/fxlShxP5bYbYcO/IXoSR0/i6EkcPYn36EnsuPJ6IsT9Tretgf2c/SBOsbb19kDuq7bL6X4cTXucQ9vJ0sJBd6XD5WvcLB3XSL8TY8jd0O8Y6HPh295xz+9s19qUgFucN66pcmDzyC0NVzP/CNcpbI+xjy2XqF0coRznpTaXcdyMonNRdC46Beei0iEougEN7gZkue5EnUfUeewpEdqdm3MgglQEqVeDVOkME2EqwtSeYMp4rUSIihC1L4gqxcwIUxGm9sX5LD+QCFYRrPYEVj6HjQheEbz2BF6uZ0UErAhYewGslgtEWw9vOSu0Ox23giagyGldUyEQ3CbxGNYjnZRj4bJEe89BeMSsoUdOv8pzCNPjpB08XiLHQVIA8ma2Y8u0HUzv2Z00tDqc1jYF7V8Kr+6Ns0IfVjE5biicAkzMqbRHH+VrXAABb0CykibxnzGP8u8Xu2xA8rnKOOe+Y9rebjy7oUSsLgCG0hC6Vf5M+YPzpPyFjXobGHAz3ENikLORWOteIJIV5dtlpZMz6kpKpxZzWlNWU+pMpAcxTARML02u+UM4O75s6vbMtl3BIV02e1chHedgQrXr3F7ysKahAgApFRe0IH5/D9WJKZvRR+ivD5AiLpPkBqTUOUi9TmcHTAr5MgixdrsLQJrDBoSPBWJcfIXwMQ2wwWMQCl3jRGFNEOvjXTnelQeKPeiAXzt4RosaMXomQvDbhGDp1DlO/w4S5XpJxOpweQa34QiVbDsgd6yF1SEngcigsrAu33QKUwglTjuSjKLleiQpfX+uRo7IslGSmCnW8Lp8jdvPE6ZTGahwuteoanrb3KXcwQPCYTmhK3LCN1QzuW021h464LaW8v99FJ+i+PQGxaf9Rcv6PraTHrZUU7ZjpkptYJttNnRubdz3qLTaShxX1/T70DB5dDmewrGukqU1/ab2I5K8SPL25HjS0EpEyIqQtR9m6tUWtCmrfY1vJzGw79eeFAckyJCsG6m3zw2pa3I66w63883Nd7kK8svWtSU40rpP9I3pKhTuCtER2yO27wHblSV9hjL4gemcEX1GdIEyeL5kStit7efZFmoTKSHZs//XZsMThI9H0KEAkqwoO70bfj2vrst9Y9SA93q4hkQcsgRoRwoWk3YknJ/F2wNJGshdgy/DpaM77x4oaZAICdA7xML7ouO/Gc+ZggdYwQzkkQVEFrA3gQ8+CwZeBwwMah8xL7ydnDOHJl1dZNYaMaRGWpKyj7RgQ9pGIEmHnsKpuLLIm9En+nQdcmM9lgG1vA1cSSiNKvXIFN6gT426yUafmgjBbxSClYQwg1mOWzfJrlRGh5iUTDM1soSwE7yUdV6jTk4+rDayS0R0Bw15EU+RkAawQUUSTkB+g0gRqmF8NGdjJRNFvhL5ypuVjC4YjK7yEXjfIvBmdA3H6um6TDU9FFdkkKPvpzGZE/IgyoK20R3MM64Fpa1Ob5ko2pr4ynYQLQbRYhC5SLQY7HojdBX0fpQu1datK4il0m719Xr0NZTAbQLQ0s5GtItotyefv4bWNEJWhKz9EPSmNrNLh+noGX8C7WJLk9eWAy0Vm0ex5uq+PD7gDaVURNuItntiCLWyKAJVBKq9AJVHidOCGK92xZdlcLyU2Za28SwFeqTtVhpdDKPCINKUqDCILoaHs9smjGI8oycY8W7NrDPcvTluUIdNlDxuPkKQmgJ7g9njVcmsGXwWpxD6H/0UI2eJXl578vJKIU9gRS0HIjAnZNKMtsR4NYgEPF4NDmdLbIjInQM6LJIN0bCN7Y7MFgwBj2bFiIEDGn9c8aN5Llrpl9EULZCB81x+PCCsBGAXQ9D4QG1MEQwgHOx0Sj1Y5dOpkCXvvRXYu/emcU/do5jjlBLfZXdE2NBln78e9m3QBeqS3PcgRUWfW/hB5/GE0t5s+QedwFYFIg46gwXC+AY8fw3uhMWIDjqRrGsSx4KHwY8Dgw0txCViOmdNX/IMLNyy90y4desxlXUttHvmQedNFwsOxV+H3Do9hb8NOoXyFhQVWlEa27M05uqg9g+5l7SYYxjhN8LvW4RfkCSQczRHGInNNnEdhxXrUJpCMqg4paewheHrwAzxmpLlXVm9OZKVSFbeGFsc53moCFwE3gi8pwy8YgWzneKFlVnplcDJc5C4arhtX2Lp3lilGXr5O8Qmp0sG8tXmBe8JFbxE36H3VvkUKkl5NsJuQJAVUQQyhDf+2rRQCMimra20t8gCODWtahLmk9967RsZEJAh4PfkXAOGABGBtO+EI7EJJPgtMbdtOgXzd4qUDqxe5SuQ0qefVLVa644/SCza0cHmTS90aGG3npGqTHA605lkYAmHvwrcQMALthNH0vrxoPFU6e9DxewHhU534kPtubM/Q03CGPpmND+RmbxTVr+hJ7N8AXnWE/IaAhCR1xQ3hX0qmbvx3KH5K3yhRNDVCIh+8WQrbvECH6mmFKTWOCxTygB/jAf6Ex3onLIU7nT9r2zKLYFfXa+OK4M1fqPnVs5k2J2l8nYjNkOa6wDPVe0Mgeig09hZxfSGxHT7kvkTLs+6Jg8lSFi38aGmUF/6BxPtpInhPYSpUukNafoBuUDJ/mbQ+KbOs4UkVl1QIiARU6OTGszSJBiQABgCgJB7PhGQ+WWDZxRQO9leMf2Kp6MQlxRxAUgCT86HkME1BPiWTJUT8qAAIm0eGIPnQXmsxplupdjxMWaSDkq2IV+dxIYklCygEGjQSWhP/GGnoJD1jtFl0GJ+rKmsYSIoGxOUDQmhiktcQgw2N4M6Civx4obuyuTekCDLn1AOL42NdGdrd7SKR6v43qziXXKe96UDow6DWo8A0yKBaQeVOB4bAYG0/0cil4zWoDrUHL5PSAoHlTnnuLc81oFdAMUM8q1qQBxYh/o83dnk3lSWWjmmms4h9XY+e1s3/Rpt/bXq3cPSE8eX9Z7i/hKqpiL92qXtQoaM2g0rEz9ntyFpG3bJfyEEdQk9RsTlCIIumxWTkxVMHuf0uWWyoO4vwbz5jBF35wnSvxcGbh3mAgFLVq0l6sQwzlRoNqfNqbS+Ihskl3YaM0iKVkNrlLTD0GUPL8yNGD9vmHF4kWWAuUnUTWS93SRN93mjBaWthgRifIT4HgcmP6JhNZ6NyQzva63x6hquA27nx1Jy2PvyRX3iVE5pxgDaNmWfp0C7KYfeFF0liXAbizwFAvKHhaTukAjs4lmOwYY/cBVa28A/JvhDBlMEjOx62KhLmhT8NmhaPFbsp5zFB0VnhkQfRJBAAL+Xsxl0IoAQWhhl7rZySk4xEpAYdY3nXqb6XVbBufz92sRlilBmB8HQcqkhpP1eSh4SnTjYfjUlD8aa6HB0Kly2SSiBBsyHlHOyudQ87q5WKb0m2jYARD6A/MYvHGbgOdT5in1Qm4iynDJN3v53mcX019VKoVUCcqBoINLjpYHDjP7PkbThSJUflMJn/aBzeUjT3gIR6AwilGUAo++wPVrTvneSuGniLzf5fz+h519PbU7VfKTcA3tn9Ams34Hk8ZaV+qkz2WSCpNdQP87oVGsozNMMSDi8oxjbA6eQrVECL+UikPG6N20fAUmxGiMYBJnzK9VSrukLwChV99v3AGHp0ehpuy/Uu/RumS+MpEIzoSmcFnPBoHxGXP3yiwEsAtZoKbdEWpbVG+0/xxjXT9JTX3r4iZWenee04+7ueXernZVJiUXvznLl+YC+w/eUjdUv2mf0qjdVb0kog7+uq13qfd895BSvYVpv7I2sALXz7oMCixvIubxDno3gYqEP9b28kplRkDHKzJj36pKNshwjmP4FbuYUsLQ+p5HSBHP4qcggQ8lIZ3DCa2gNNS1munxFC5zeK1vnlfzQlkfbPoe4gy/YwWr3BMr6Cc14DRDW3ZsppuIaPcpPXAAsM3xXLEOmyzJdl2BzaXQbipZcgo0WV9Wff4Hy2qAabnM5QqKsiv2tH28oEasLqGYvvzlOQS4gqweUJX2UBHAJNrItLd+dAhNLrP7k76B40jQwLfScyl51WX+3uVQvWq2yTB3JFGRQN2VyGjdAMPQs9xxTwWe0XhqvG6902kLjPHm70L+X+1t+S/6t6r3Iv3X2sTNVhe12Yf4op+2D83hSJ3xS1Sk9oXQJ+9nCVMuhM8Dk6LPRFwSfHOb7Vb3nokrUVbZ4Br3X4WjVIwMZrJ7u4YJBvrqjGCX1mKmOO9NcWH67etD9HvD7mRZWLUrZ3tpL0jY5d2GXEKM1ZDD9RAVaoKTEF/uxRK+7gq/uIJMymRGlkhVMCwyvZVafGjES6YCExxir9qqhesIQsHcgVWCoHqpJSHyAouxT2yclKZ1ZVDXU359qFeWZ0pvab6A5JFPpvUGWXLEXkPpWoxQyXDgL4vaC5HM9mTVkalAbhOJuH3i3q51OEc/lfb0XXS/NwHqXqp+2z29vb61l6EL0v21cCOtN8uke8gIL8zAVmjxfXr0ff76ePYw/zz4+3N1fvZ/8VXIcawSDS8QFZDdQKQ+UQAXFHeD8iSoBi6MlmZDqD33VMY+3RfkXTCfkKgMI+y4FP8GCaslaGoZo0U/0r4jKn5xpCP5wP/40mz6MLy6uplOJn2BzW4iEKuJ9Bzb3GsLVrc/+HeLmPVoY3lwAvkKQaWWratF/eq4AJzzRapII5OdbT3SsVPD3EMhPjPMcwwnIL8pft5suYQ5JCkkiX9buvlsBDj3tJSC9Y5I71ovXz/dwUXBFcMwK72mhhk9AfoXR0lgIdINashH9rJaJtMCdjXSvEDIjbvloblQX+jqjmu4AE0oG0LKharuHC+vPaoTVNhX6DlY/U2aOUJ6Y3sv6ufLSkyoORWKVlkuvWYosUoeYAKw//BU9Vz0JBpyjxeZCRkedjRJVqstzOrrjK2WPBiqsSVEiA8TUHECmOrlSkyKZMeAOA1K1cfkLfsdoWiTCtLZhP4JVBKv9gFWtfVQKQ74VH7ug+abkW+pnLmMzGr66sVyO+V0FMY3fVu3N38ul3NMnJeXJn1yRNcQ0hyVnLHWdifPielfrOVVtjW81yL1HORu3p7E91dYUyCffF6gh3Y+ly4W1E/KxEoGmxhOx7i9bZtL4dWYcNs5ql8WuO8dJzKiazZzRJw7ZeUBMHJn+B9XvzvCd7nJlR6uxmq3VVt1FdDxv1z6d1MzqWQEO//Qn73x0Txvj7hhdIy2IOR96p35QKkr1k8YU/fdnrn6jJLtNZfP4M1csQf53W5o0rxG3QOWaLhGplqi258zMrvyYwhfNQRcFScpfIu7OSVD3ueOw4rY0IeVxM5fQm6NesvwXOXKco1q6r1t4TgmH9S288xSO88ma7eQQeu/eI9MT1gSPzkbvEa4tefcwoUuCvluMo2qqqV4OwaNF8tRHGm/Vja4ZcCZjpBKG8pqA1k1TuDSXKOC+iVVTIorHcPl1La3k6j/5iU/S4aJ8mBrKUT6pccJ8aQ7lgjuPL+7nq/fTvoT4NlI2N3bx7u766mE6vr56uP98fSVv3VqOrgjSOM/f6dqBU1UCprxeTAEujW/qWe1BlX/vAgjp2HkPF5BBveILTJNH5QiR5RjKQi5KTFdkxFwOGl3V/pp2W5unYnaf6yFGs7eRBniZE6NusT9QtsnrSqXWMW3l5al8LvtdHcV7RBBfWYutZvBBanpaS6pbq4EfJzfj6/Hfxg/Tq/svVw+T8d3D/e3n2ZXsolxcAIyvnmUcRKlkla2TVJHnTXUIstHcayxeYrUabbt8/cV4Nr6+/fDwl8mny6m+tY3zXI6tHjA0NxDdYs5vQvKi0aIvenXDX5Da7brhTt9xnLZpomVe5yqbIKNOnYBcvracMMhvQJ7bADcBebmJ9dW06TIhmxhKoBHVy8f3utjx2Uh+QrWUB3sz/qvU5d3ejGeTi4fxbHZ1czebmo77q9n93x4ur67Hf3u4UY1Kp2fArnpuHcsd2DwBjC8oWSC5B2Y3HC8f09a4zJvWcsvLR73f5slsTKvBggDTUe54+WjWbB4/E0OeMLyHQAsPd4wqN1OyHCePhD5hmC5LqK9hw/w12+i3FyyRaFNvS91CWYqINHH7W5urNyMqLCkbKowvG3hNkeqrvbUBpmVKQM5XVFF6SUk9uGm312yhmGdIKg/owqXvGt3t31vNtYeC1VjqAj6ThaIaMLU6efX2L5BVVofWNnxFzxJpMCptc/VjYwd1Vz0R59lgqW67zWFlXtYtZhOaz9Xe69YS+b6iZ7UQyUVGKusKhjeAgCVMyyVL/8giqy+tFl2q2nwkQ/f4kMb0eMHLKGLcrbJuxUqkbRJuYyhq4Kts0iDO9ZP/8KTJu17Se0azD5jOlRINNQlP5lAKZbF2tEMGxXOzNOvP95TZwGGsVOWblDpLGxnMroeFqygQRIEgCgRRIIgCQRQIokDw+xQI6tgFlKFzkOc+k8lIdj6oTlcwUDyHLKg0wOWQjJnympF/Gv9X+WcFpQkg8ln+VTCm939Vv4HqvrC8cppTrN1K8vwcyXGe2YE8f1B9DcEqz6/IGjFKDGKN89x8apzndxiIBWWZcc3BYPPFfFjBXOdeDT2ZaiIMYgg4PE80mvrmY4Y8lEOa5nDJuu/1GKW0U39JTXb9VHHW8tlEAUtCL4MbLZWeeq6V3qVgULE64xVWOurM6LUMeVRKN/XTzm3/6VdbrVTVPjxP574lqr6HFAggjQlNr8G5tlMo+0MC8L8XUE39Tte3/cqQYh+q+YKStLT4q4bbvPrLOPI0VKoJLXQcFQOI/HsBC20L/W/zl4bUJRTa4z4vmDLu/7eZgxp2CXNlCGEwo2qzipzDHsvc7343qp1YIAy9BFp3uKt3FPTyQcoSNkiCVNqV/u1P5mGmxcdqLlwPX1eU6EntV/t8TmZWtWVjBRj0GjZUR8eMpnJAjeKNI9c/77SpHPPL1Vcl6zwvmJckyr4H2ed+22LSNV8ug3p0e6/McLzP1o6OGOU6GsjzzbrT/egK8AqMKohqQJBq9ThWHv57tXf4igrqRSTT0wE9HvfrO5RY1jYZGgDW0DMuR0opxMEazug1mjPN7Tq82E93nvUcGdSOvedFjinwHl815sGMcectdRCTT9eTT1cP78bTq3/708O7v82uSu3E57vr2/Fl1fRZveEGihVNq8d6Vfq5EhW0fiEvRK+N9g2vw+EP5/L0dEIAH5d4MN09vMIFFQMQ8j+thaJs856yq2dzKw7v6knMqKYxJjbNS2LKvkagu2muXDCb8W2f4FOzyYNS+tZeh8dLzW/5FI7pqKLHfJEaOmq+fEn4CH4vi7aidIkAifDSzaqvnc4AJIFl+KdqINAbQ6NzUHUeymnOsY4ABfzROznd4c7M8+WZrHGi/+O1mWJe/aVBoxMObFnUvwJR2lDSzr1+42uxAn5SRM+lt41fSFL9D6a/6ZaXIqpTT53ph3s1TCsi++SGaqyRG6vn2iXIairXVDcZfXzV8FWGZ5U4rCPjqj/q3/t3U0ot1RC5tWYOvHpUnQr6QcFDG86gUdnyyhUJMOvNle8Sza3GYq4dlMqdtCRNuSTj46T+Ll2czAPNvRFc8UDf+oHabBbzAI/FvNvDz368h0aEUbZRklY2K/Vs9lj+bcwc8s/SnCv/Lg0X8u9meN/k4kobYu+VZTRRWVGUxuW2EHOpYp+iJVGafc9JTWefPz3cfrr+28P15GYyG88mt58kXSwYuZfZt1UyJ/7k1eCUk5HWA20yWaClzHEhf8jtlrRqSqE+HHsTwjBklirTXamMAivAy1lhoC3NtwtpoU+rZqSb5Ruo7NK+jBCtYbUNDBqXY6ZmJadvHJIDQCizZlQbyzVpvyk0WedQ3COyVKmT1ZPy01Tf5eqDpZOkeqicJM2TgV/TWEJuJS11CoARMiNkngZk2j7R8gvnKQIMfQ/l0xmZYQ/2sE6IvawHhnuqe7WrGNTfshydCcCb76U/cgNyOt29f6KlVctSiS/Ppc2srJ/UXJEa8VCN6LjR38iRl/SJOFoO1Xpnfn5hv7zRV7m1NBuLaqiyExhzs2owbF/HROqWR5RPZPGINcAmos15e2rmVycN069wdGiNaVoITzTOlFJLjhJRMDghd/oP2aTR3STuf19gzMsguZzBNaKFvgeXZjR9h7isp8UhfDT/zWgLpUtTicRuPSX+iAyuliFRGndLnK22sCDttjDAR8iIkOG3rYZoX9XnQsIHSBfGhbL8sxQsyucbSpD2hGm01HtfdszqomN1o7qrKM52beYwTpKCgWRjNX11U4o4zeq35puSZS+tjCqN5trBy6OMp9XUrHeYRIJlm3mfvHMVeemClKaNz5RJZBrNtQquvXdlSbIbKLQwIOG18hXxyzJZ+/UsOEsNkO2JerUfUnR4V1UinzGQPOqLrIRCb0fjolb+Xy60yiLb2hK/0TuCaQTT0wPTmr/SEICanmaEuUCiSOEUSJWi9JTWueerZ51NuSFD6sbGmCkknLLqsQFwVqP2x/VczQTMPyLptLdx2qrvNERP5cahp6+fzNy7b1gwvzA+Iir1lfVNKNSdy3eezcPxyDVx34+177V7JATYnxfA9DQcI6/G17OPD7O/3Smrqnn8/GmivNs/qp80Nlw3viuSR+U4pB/LkG/ryXg+6xZ3B+r20tNJP9knj8XKeI7rB+UEZVq+3t7/5fbz7GF8MZt8mcwmau4y24rOvmL+Ul50es7t0/Icidmg8o9ySYi7Sywdo7w0DqxhPY8OJ9Z4Sqd5StUJLfPn/izuuOBO+tQP+fMlTYoyaVn+fEdR+adcgBmjOJykQyC/QyqeAhHzLp3MW+ehtvIh6s47VGboU1y9TsCq8hF/yFU21fLX5lGlMV6orKn0pvbLF8xcx7pvpr/bXaiVUenjuaxksEUSoS/jyfX43eR6Mvvbw/XVl6vraUMDLJW347tyiESL208PExVmZbXfX32YTGf3f2sZoq7ubybTqfzNdDaefZ4qfPLxrrS+4m/s0gGtsR7d20+/XCtN7rPUuWh/dg8lfkLPD1V/I48OqmR+GX7HkBMWdIfI8l7le6xCZ6Ymd6MGWTtW5l3BkaxsYnzsZWCKidlwn0qaip7dd9ntApahXGUWF6S07TBXxcXUEsxkVZgLBioMAv3z/yKKguo4tXuoFORZJe4rFYsW1GvTn/ZIDlOOuLt73l1nZzHOehH0AyQydks5cJaRgnZbtaPXOJtkOoGejiFwqK7029DOFc8lW9bv+HNpuKlfqTRe5g290PEG11A7FJPzVCUWPgferGWUPOj+B4C6jRJbr/CW6FTGjd+XzVdkici2y28JWq8/0bgjTRxNdMrMEPEruxv+Uzqaso4JboScNqMtER9bQTwV66td2GSkLkxntA7b7MbKNzFrZ8aSGv/6pFJt9gstOkHz7V//VqdpHicqQKbOYlCI1Q1NgX5FtSbZLJmF1hG6ySGpBIY7VWC7hNh308nD/e1sPLt6mHyaXd1/GV/r4PCL8d3s4uP44Wp6Mb5WpvaHi9tLJdxcgFwkK3AlawuDKjuCapshJRUbgJfpKsvYVaupnGrdVN6G6hYrC0LZNJNykraKW40yYzp3mmhlZj0bTcgNzJSiQvGsyWUZzVt1NHgyZZo631zNxtPJ7Orh49X48upeaWPmSMaWq3ua8X34pCqt2iv4RGcog6x8vFUnKf+5vZ/8x9XD1afLu9vJp5kCNs4f4eYCUwLL4TLx/DjPGV2Dynfi/upyfDG7ujRq2FKesBOD1a11PjjzV1XNYHqlhdR3t58/XZoM1Q/Ti9s7maRhOvnw6eryYfJpOht/urh6uPrrXb3wau+0I5jdUmfwbG2wu7GmRA5rdRjJZUoTBHAjreDXyV8fplefppPZ5MvVw1+u/jatGtVa/vVhevt+9jD5NJk9TO+uLrQEVOJJJaXINgdXdJt1diUF/oqeb2XDJc2Auurp8nxyxkoBNk7Xcs6pka3uGH3eVKKb0yrValqVXTXdcViktFy36TGYStklEEB9Q3uvuMhqt3xmEgHmHE11tR5qwGReIJyGkF91+qEn0Yhbpg2sQrzLFMIVcBsNTFoArPdnbE2JKxOp3MYphjDXtLNcubVmxN8jxoVMjrz5ip5Nvg7EpSIUqWJHDCr29UlX5rB6dKZlxF34uXrOka6GUPbokIqqXIgKaLwEG10C3KLi+n3qMq5px7+z8rn1CdmhEEnXXGIwBYl4R9NN9XBB6SOCU2FEZd1YQ4F+Nmxa11ky5BMayhngc5FrRK4RuUbkGpFrRK4R5BoOx5BKmXMVjRK4G8n8wi7j+IqelXtqXV8NPSuwktokXlOHRnOVaFi2F4xTdgeWeiWNlhsogMwpoHuUmab9arvZfvUUCeuvGQN8NS7zlDWG8fcIa1woG0qTUFLNuzS6lA/aN0A+Seda9fo6A4359pPeoACPjjt+4B13b/4dMXW7bHYZZlc/jNPUlNtotV1CARD2dkG3VZc9arW4g0odoNVSaX5NQ1k4sG75VBarKxvuVpR4WtxP1c6GVhtDMgVL65vcgSanzYWnsq88a6tpqj1uZIsu9qDbXZB2e2yYulTho96uDzJ6ztOudsrfIx3szbzagL9Nj/021aVLNLodn1W0qm+hjZ7qR4m9AVXQbP28rJaqogfq9ZVRAyUOGMxqPptCktKNs/Hrwp6RhWfqL7XCOyBWIaVbRL2IehH1joB6DtrNpZQoazzugna2teGKiBJW3lH6KEvqOhgpG2F6ZRkcdYu8f5nkXaatAlHzME51kieA1RXA7RNCpg4gCayh3XSZTXBQ23S9pyxrjZee8U5D6QPrNBot/DuAzb2h1eX7oNyNVkPrg19QCqnUQajkv81t+Iqe72TV4/bby5xYdYuD6W6bi+lln4XpZZOF6S3qquDbDPSgftXjyJKqy9zLPT+qetr0wtv1AQrr5EJ9rXbvuyQlKdftTM3tsH+iaq8lKAdENKq9lrTEDXhskRrv9xo9rR+V2OLrMyvzid9Vj/2je1hWaPXulYuYU5XkwfuJZpcjvquceTA1uKGhqOwqNTT1g71lF5RInQDSLgT+MQ5Umv736Ln6ntNxQwncOC2+UTKIxWLOprUszus0WnhXrt7CI6epRqayWe+ajaduj/UmzWa8h6S7fEjV6Kl+NDfEuYqqr0mu8zzmVX1WFbbKMmugjeXVc32gKUxkotZ6QAp1ZFM9wEJrK/LJ2dZlhcTOgyGbS2jVdkO8pMFKF/IF0Ur9iy0MLvln87nCquoW2Qa1Rlc9VIDFQl8tXWyqMqNYv+DVKsZlMl2rqeJlFSOvV7iTDB2ZeWTmkZlHZh6ZeWTmkZm/LWbuMHIV674DF5/89eHyajaeXD9MbsYfroxR8noyndUN6Fmpp6baZw/xz4Sj7zD9ip5VvLqelPpTGvT8AsaJzMuZE0PJSmkPJRHYemr3k4uPDxe3n2ZXn2Y65ctUmaj/rrKEm4Qs9yih3IrjUM+ln4J6+KRNkBr071GyujATORutRIYnfMbQGulCB/wOA0TUz0qznnowNrhc9kpD44yWY1j9wts1ZNcoQ8K0Uz6jd+UvAqcVd0b4bJiqovj2+6HcBz5UdS4sKqx6Km5oPV2sqPFBqNs0E7WG1kVi7MdpmVTRbnT48XY4NU5T82OFOg0pzi8LVitsiXXttVdinbfLu10NTJePREaCU11gytNk8eaq/QtgCJTsXmfaqOTyekvrh5KINFrqL5pWVYTkspKpy+k7gOu2W7MrD0/oml11S3sMd2X3stWWIco2S3pQf1Z74JEba0hpyo0+GELPCry4vEMBIUU7Vktxqsdq0EJI4OO60wc5jZ7qR8CFTCWyVNXM78DGZB9JbMCr845XqGWebbRKbYCU4SeUqRwqqmiOU6SjHqNikB1slA4e5p1lQs0AX8pK6NMeMBWZ0t7b8nUfgCzHs6kbSguRebSyEVtQWEol1ZaXDVapHSO2WDSiTtFlUGSS1tJLYyAvV1gXzCjcU65a6o1xpJceQSES2UhkI5GNRDYS2f0RWYfAwoRmu6l503RGLwATfVQK1BpDZvSg9fM1IrDGarvFHdkqZypbTSlL96nxRm1BN30+3aPO1d81QpUAcjuuEpq1fdpkq0soVEutYZKPtdJHOiq09u8DFJ7vSY2jam5UMLSGlIWKyj/fFRvIan22antf4AXCuFZvNVvdzVO9HU2XKueoOuzr2r24Y0TtmuKMCjTfWahZ9jnKOd2iaopWGFE238NFUdZcLHdOpUBqbEmjqmDZ/BWJlbUvvr3mFdfXSng5zjrrKl6vnof+23S4RL/Z5epclwUGzGdJuFfeieWGtdSscn56rh7dbNnRZgzl+/69AJZlxu3jZafLJGbU5MIyaC8/hNawBE6tTKyeHORsNUiHS/dtSY2P7pML2HVGLvO7pUEqxRKuslxsrP4624nekfeUzVGaQlJ2YB/ySU4C2KNqH/M7gHQpSPsUK+/Ras/aK+LWUVTUu7XHvV69kXpH6h2pd6TekXq/Aert6tRhqkjYjj4WOgKsxgarwaVh2qRUZtmUDUKAZDXGeAYzmSymYbf1ddswpvvvwNL7O9Pu/KCMoXKGyzKPalJez4OGwY4HmRPGMgVyFUJWEf0xoWST0YLfm+2t8im3tCQ9QyfaJkCgKhy9xa/aHKgxxKPD8Y8IfLp/STutpHsBBReSK0qbrzQtmlnr6DgLqKwGGTNmfUT79uhPpdYvdLvWRrXbNbVy2tvAohMNlT4Wlx3tk9SakevBcwM5B0t4RdYQ0zIx0SfIBUxlmKulppI+8+YqrWi3s23eRhUeaMFmo7s0OMv/txhWEtaOoeU2O4tpjFHCT/+r5DCbZ5fBth2/UMUVtnj1NV0i0t3f/QINj9zQvI6BkrDfYUC2mdUdK+VTf3+pYdMaH+c9Sjld02IZWzkhn++vXbZdtzpsvgIw+VfDt8C0uk43n++vHSniC8BIOesbatj8sLffnsJXgIT0bNNFwRIfVei9gEQ2FtlYZGORjUU2FtnY22FjrrM7psuduNc7TJcXQMAlrbykMV06TtbVc4M/YLq0nasxXfY6Vl8ysBB3lPssvVZf29Yb6iybG4+W8fMqm8PUMsV+gCLwMmk6bk6tanNVYY+w3Wp9Q9t567jXeobyL9suTLkx4ZkHqfRxrL46RlMfEPI6R1er8Vhg7b624db/G8/wli1a8wT/abb66khQXbjSOJPaZ5e4EFBZVO2WpXVwxpaq/8LmOFQh7zlGfGWP+293A8uWemcqE6d5YHANmfMp7plxQazPFu6SewXNiKURSyOWnhiWOhhacKkN3QVFbza11PuZS6MAXegigCnisuyYMTEsoaiGIoIEkpXQ/GRiiEk4EyDw6dzUQtvxTkwILcj/396bLjeSIwnCrxKmPyVNidJU9TGzqm8+M0qiMjmtg01SWdvft21KMAIi0QoGIuOQkjXWY/sQ+wz7YPska+4OBI5AkFReXT0dfySGAwEgcDj89pgbRYkNaTwEfHhZ8kB1e5uDINwp65i6v5uRu/eCClI2eOQ8edWwrzhPdMKMa7k0uwAKnPgfADDKNHhSlk+WmyNAraEveaXf6prvv5uRuwaZGM7ulWPWqXWnI8pc0Dm45uwp7WkzEl+3pvQ5RoNIiNZqMrVfR+zH4mourRp1hrAG0mGB+l/8g91InpCKtRLxKxDAJcTyFmuuc1Ri7gmeJk3MLfpxIbNEZ28jCHCs4iMGJMcQXEPdtyGvGmpNuztS4EzlxrgGNVsMeeNTOALmrsbolsPb4fWf5uOL2cN0BC4oECHycoiBFvWrOE4dptFuzn/WrsYO0CyFBr9jaU0hH4uqoTKbz4Ix6uwtNvyGs7IuHOypSjxJpAEDvQIiC6XqRMIMGwFHGVakgpdVExX8kqIo8sdHsCJ85v8fRQVClzn3m5feQhgQLLB6T6h1voLIjhuKQN4aEexFp/XSxCusSJTVPE1ZhuQkAm5EkonlqrqvYuNj5y10VxTafu/2e/fvY+86+1ZkC/nxs6OVQUx/Sy5sQ5SMeALJevmLZbDUxNlqqvosYrhOIIZWU1q2i1X/bV96U+CymwjVD479vW13b1zu0XaaYmLZ0wAUe9PWMvwxJmCW+YKdsoh+xX7lK+asFmRCzT83HCAlhYWWAgIeBW8LdwIFCLJ+DuOYlzCfVSEsTgnLLuQzLyxpCwL/XYos0GTjn+8CSnX72JsESi05Ej4H6nUvJNa1OwnIYKjVkJ1aexYduBcET89XYiaU9ob++RcpMv075ey5qfPBDEM/qeE2gg1ddftx7zdQv4Fes4ECDoyDWKbKiee1zoxBEaldsvGfm+RdyhdSwz3deDMi/9kS4xqgtd4GWPphP5sCN1JoA7YDgirMrsuCEUBNYSgIaLgU44CGi1T0zmY4odCeVmHbBe+GCXt6FNATiuuonsEvaxdaUmRaJ53HOPbWM/YmxQoMaoGW9udbPnPWbvngfanjoeZIlGtvtLvDjPfbvd/u/2W3u+t7gwYj+2/v0TsIhGLlX0WLk6lU9H3D886FyjNt2TiVwLZWXQZa5XOQeKD2XQ8YzyKJcmJwG2StLD679kbUpq81Q6hSfxm/mmc7TZ0G2ApMnED0eLEBYaceKrPcZd7wisYnAurOwKe/gU15xWKuI4ghAF10bEKtgQbehom2Hu2FsmO86SUMUTXqM+werdUdZ8+y8eQ2vVFzlpM3ASw/A1JAEthqD0rMbNpQ3Dh6N8TNNmoeQk1R3C79UmL2GIbnSRrpCB4MEywdHy2XIg0aZcmNSFPR1NE7jx7KCUMkwr1NiM83LCftMlebrKjctn5ecYUN9Aj1z2aBLVizr5oUKvotFzBs9K7+Ums4NQeqVRhTMyWVqFJ+wUoTzIs66PDq6zFLj1l6zNJjls/FLF7MPeJdX2eoT1pmk7+rDdScv70jr2SayhesUDZHRyftdkWHRupAvy9kltmEegM1Wm0CWehEWXjbylTFqbsUuy3SUJCN6a8V09UTWDSyCp+KbgsxGGa6483XLVIZPzVPtMGbx0ecrOYRFPDu9C313FGaMSxEqzUF80UTmdNiVwTGfjf8w+4GL2FOnb+KT6d8X7nhpOH3LG4s9hUg57EXCJkKApJCzf9C8ZaCEFPcLkGGuA3eIY1UYwtnbmmNyy1o5W1Rk5NYY9Ssqvr9werTYjyxtCuvUb9Mv75lchUFPBN8EK/YK6KkDqfj4cPddPxmDEZC+DQdDa/n45vRw3AyebgcXT2ML3XRbHw5ehhdXY0u5g8Xb4e3t6PrUNHs+v6Nht/fjq/Go8uH4Ww2hhyoc9XcQhZggycgE6TWur3hGS98bmBYCDYTCR+hEh4A+i2TmRe955QVwIVcr+tM7agbit4aUG56UGORYEPBIFPVt0a0VcNJhVci5ZQu01DEfon10lWdUQwxcpCyHxvLjTej2/Ho4X5yfTe8fJhdvB3djNAAJBP8YsWagARvXK1mQGPq1fCKZvVyif5bZDhpUfSBQutVNPvC82JPvApIQDccPjTx0pRRmAu0ctQCJYuJQtMUDdUQbvfYLIyJ76JBMrWeGk6N4uJ51m1/rEX8NOV5ioLd+zdvRrM5bFe0m5s93E+v0UolS1RrZj4soC0rdqfo4PjA2kQWdmHbDwBGwRCsvddZs9dLJMBjaynHSQtkdW4n9rLV2bG3L02IdPvUPVp7knpe+lsPAXpvP7Y17Hovtku0uYy3vZDCaO1wAStIdjCsbE2h0s+3dw7G4MvotJods6a3VMAY9USt5/pNfPrQbB4MwJEl7UOqS8xISv8wIctUiOUS4n+0Bl5bCXaJC6zN8qnF3aEr7q+A/gror4D+CuivgH+QK8BB/3khIFXTIAev7f1vADSt24CrN8WUcqS4QwrGBaV+0D4QzTZvBYPgZZB6JVAMloKmTBkatr0Gw22rkrbdoPmCcFkIDI5tcaDQCsrWHqnmDuuSd4wRwOaXJd1vHi31QAPTYb42ccq9ogktrYFOePFUWo9++ZTH2FpstRRMuwU7d931HTOa63eiFK3kUczsjEZSb39t7O8BZVUZms4l9WN+6RdSb28qUBDQ/DaLink47GWiyMf2B1PeG/crO8ir/nz156s/X1/sfHlW7agiLF8bT7aJsOJtYaVy9HIK2HpI9RDKzaiLMICPk3DAgO1AqarADXuqgE70UQWby4p5fQX3zoT8roPfosP8y3CePVPi7rcsCbb2TopAAUus7HXLZlKNR7gBfLA7VWSQKX02zXd6NfTr/w+0/q4vMkuW/LNjuPmh2spSLLNzaNqNtWbD7SlAkPWTKvLEAmn9X51VFvQ+Y07VgLtNnVVtiKvEIEjgkg9FPAtELXMjj/lhpm2IZ0eKJbatKAJKW4PidKhBjqLl28c0g7yqMPta8+u7InmFHnrwa3t44hODo6GPEqo+sfdxEvJh8srb3k9tza4Db8X4tjcIWfh4r4bU3HoAWwK5tdRfTk9tBV1A994O72U7eOqD0z6kXklb3YYFZN7ijKpVGtDIOaXtpgPtBRqxsaQZKspeasv4iPCmShpq70hNezWa8rS9OTRaRT262wvpApsf1ie9Ott2j3x75Nsj3x759sj3qyNfB/E+ymL9mX6dkJPN/Hq9EyS+FUrfXi/WAmNX+vxDU+A/46+qscuzWvBGhSZlOGyU91vtfWiG1PjImFZ26j776fyc6fSnsn5FYp8rqH7++OjGOwwEnHaL6anbzmvd5uuxJ3vaLYC7NljQsudHqImm6MYPbI+kHYxwd9hAP8yf0q1Bx+qTTPZBFZJPlGBwDU+qBn0ez4JgXByC6i9bGrdDL4JfWXmLQ55mkGAE6kAypua9XGTbY/uZSH4Y2klVpnQlNFVMazzrzLS289j2e63fa19jr7n7jH34ZkkCyEXEdTAaZvEK4v40b2VibRfnOUZUtSpYkGGewz+L2h3meaooYSuWkR3VsE6ENK2ds/gpKWRuniCuRJb4z28KlghuOCwNtwzcz1mW6XupKxMBmJh/qGVlZclVkdhtgFHb0O8LmTa8D0F+FkkTN/+8Tp+Gymfa6axOn4hz+SMcJ5iRrKITY+dM6K7l8KF1+kQ0pl3NJb476rS6C9bZo7PG4IeqIE8GnIQ1dXVV2awRPc+qTcq70z3kLjt1wYqk/eTvDIC77eqTihjovBZps4hemf0ZYXwcjLivCzUzGiwksirnsQvWjKr7Dk9T/AQr599CfnRn9CKVGb9UeYMtnGvfFR1VXD//hOPmv3T89FleikXKvS5htwceW0tgnQp1XzUxBtpXWTj8AJZ179Zg+ReWaShWSNVfSZt396QesSws1GiePRyorPtDk+EXhZwCsqpJE9hGDKHmtszPJQf+UP0Wa56V5uRdCjQiMittAeyjdSnjeo1ef81efY1kJxGVLFJelq7ozMB9SZl332CKuy+cdiSrClBbe3edBjeWZdoN1hpM+04Zfax4lvCEXHsVjSVS64aBp5mV68E8exvnSmbVFVuL1Aq+DDDINm8gb8ZXzQ8LSmm6WwDX2daBXbNNk3HUiRDiSsHCu/UN+MN27ct2oRtYyb7L385vrs2o9ZM3M285S5xL+i2HmIKfJZizSAf8ab2oHy8ayqQB2ScDgQ7AKFkhYaj7DQDyct1UfG2dqmu24Kn+ueEa79AywW1hRkiw0LOPpUMl1pdfi+zJ/LIaVE+OIDN7UpYbbj0LaE8GRtRr7qOWQLLjNvOLfMEm5liVCbeHUFYe7dTqbBsFFiz3u9WBQDHVkMw9zAEgG2vcsNyM74blM14B56Llqqx84olzQAIpBTJ3MweFsbCdIJgnuqux1EJxoRIV5NpaUnc7Qkj3Mmcx2LRmS42Ob8leWv3y9gSArB18l3BE6y6q11Af0d+BYFP/zs1s0m/76iKIja9QqumTn5PLK3emXTLg3Y9NxEW2LFi+st7khSWBAoCIWVlK90MU0P+OSco2kIPH2XWTtF6KDI04RGbfsoEC5Ca2l3rzjlFneWHvuYlMU/PL6k892bOHMGt+zbOPPkIl5pczojR1uiDDNDOOltigFXVpm0iBKDGbdEfwtnMfqtDudevJ9wrbrEWogjdI/5A7oGFWvvDCmkanNMiHODWCzIhTw+NInLIgWzLlaYeaZioWC5ebawmXpnWm7NsRO6oyNzt0RxXXHAj5aUWQaljxDGZLYPsOB1WfPgWn7NENzKU/8GZ1d0e4ipdaOlzFM5S08M1sxXLrZmoe7TkDrKwW1gDUOhrAW+B7feANK554Mix1Fsd2iXo0BcpSy25lUhdLngDZWmQsTTemZMoztrarYpLoR14UNvA+S/yB3Wd5u5/7InUuktkTr2IL50ISNO/JQkmzNSsqZFldysfALZitP5zlUqTNpqEHq2qlKbpZBZIoF8ETbP7SBfYxPxW0odZq429bpDQHiab7TXMV1Fs/8o+V++RdswCyH1f1epEZK8G5jK3kLeSc7cg5XFjINzxI8lOZy+8E9KJuhUDrfoV2HwG0uUuwtVOoBf5GxKYimXVJEuckWDjKrLJ3IuHS+mnmlqfuPuGpsxUWXaI9VRb+1tiRlzQAv1riSBIagF+tJRb3K6QOva0A7fF2iMPbFcsg0jRRAsxg6sBmaMD+MF9lOtTL1HuZei9T72XqvUy9l6n3MvVept7L1HuZei9T72XqvUy9l6n3MvVept7L1HuZei9T72XqvUy9l6n3MvXdHmEJK1cLyYpkUPKqzl/jFRHXpVpb/D2reG7/vnCLmoB46D2k3w0L+X8Ng3JDUa9YNXjhi/1HArHjrKCP5skEyAFgIeUacxAD12EBVCAeC6I2sAHAVl2xai6fuJtJtHRTiV6KgseV9SJuYfWI3hKseNLP95AwPVGxNOxv6AjR3c9LV9aJwSPnyQA+iRf7T8/N4/M4Rsbu5vFZCRtuHp9vZWWHLH94KHjJq5vH56ms0ftmzsl3BcY8hNCAOFh4Uj8R/djNlNvTJPydDN8ZemaVD/JCB1wsX7U7swwJesjX4HQ4Me25sUvtSnOZu5nAb+rKhAK9vZuPr8YXQ8xuPpmOrkbT0e3FaPZwPpxBWNWO7rwS7OOSP4pMZ2g3dRXzYQDQN4xjymORgxBRJ1AHuEKU93nJi72+NuGpeAY5wvkGR6GO16Z74MvQ/CgnLlPxClhVNUAMv3mpO7rFlE4ClLBPSCSsmwm9Qm2pWWZ6hmPqDgEgTb/19m/tOBP9xuo31pfYWM6mKnhZsbpgr0p8FlIJu1J0TG1lhQmr+DrkVJ7V5tcup3Mr1iH+DHiS+m7pfsBjkyomq0PwUIxHEsWEk3XaGXLUQ9tJXU0MUgD4vXj7JyZnjI6s+6EZmn5oAhF+sAex07O4X9O/+zV16dtiPahY+fTK1Wxp2fE75tCQ982NrzYUml9a607ErSpb8kr9+tA01zCAWNJBpP8dfoR3qoAOfcXwp/gCRIMngwM7c6LaUtiiH7vGBIKl35biTzVpNE4E0N8YUzQnGqf+5KkVCrX5/cHqv3Ev16HgS6hIP2lGWt/QhXf6GXJmyI2hLIvqUaZCvuoAoGa1K1s0Bhou5F94XAXQolXqxyD2UklP9ND8bN1NgWonDFXYMHWHqmPmWuNzQRhD1/T8DHGRHrsCUPeTt/fkORMnMSjyIC/ksmCvDBME8bDpPXcG/l2KrLOAJxNWVCIWOcuaO7wboKKsTniWmCjTplgT+KibxB6dBzcJqYFf1Y1alQCWAZmSQzZdBOOLqOmyipbNZBwcH/zFzAAGgt6A5FllKfjgt9/A9BqEt3i/Ur/SlXJWKZUbllabV8TApxcgOIyKngwJXgh4qSXMAZD1Qaro7hmUpvrmU0BnrhVsyl+oTQOaCx0l3YzH7t0UmAYB2zgtli4Q2tzNjPQTtn3CnMmqYHcC/6aTNL8aDXRmFn/L08QqdKJ+q2iNukz7GoTOm1WtRZbZqaVdgOu9YBU0dBkG+Q+ltPbGrak0G5B2DN9QcdZ8Yph+Xjxzt41ah1fUsK2Ubr9Ov8p1ctV3MvuEpfkcT52gF02XU8sW/xOlGVLjv2DrnIllVrbcRjrqtVxHOuv57iN+Fc93ROm+/VpztizPN1cirbyoqPu90uHpsv2VsONL6J1XjOgVI3nNCPabxX0Huu8o9x5iU3HXDgh4AVGlN5KltutHu5GWd0igH9dBBATWmxteFSTY/sZeI0R5DNetCNqv8KHwPzEMDVoL+pWCBoN+Jc9m0C8mPKlsu7a3BJv2RibiUeyqGbRFbG2wtgVmuIq92b6GA8mebiAyZima6jZuEf5w1b70vSc6q3kuGFvPR7D8C0QJbzsykEV7eJuGDdfrtBL6bKI2QHNuPAGFHU/oxOy2AN6O1Lqq7B/i29nsWha8BPKpeSjNL73XbZu08LSEywImbVuWcNF9IzsmZqFTubOCviG3Viwboi3wlcv2/gtDDXL+EFyvhlgLNLedZewpt55y6ym3nnLrKbeecuspt55y6ym3Xynl5lBtS/FYDWKUen/b0DjOw9vm9A+Xy4Iv7ag4BmAFxjHAPwjHN9IqMTnOg3D6t/XVWcxS5pwm+8BZkXY6ic5SZLwsZ/GKJ3UTfaQj+4NoAqzgOXKiUzigtnPxBez1rJrIVMQbK0fYG/FYQfiWsp1QrClqZxazitoRRHRhINWYLgrQH6bom4cUmXEw/G9D9opDAiJyUVaoK2ptTafU3iWBAhPYpOCsbObjnKUgm3dpnnAdLxpJR51dUU7IFSu4Uq2yT03a9glhSL4F8XFVp48iTZsN3Mr4Fa7gEhPyQsoiERmr9Gl9w6vgdDpwpxEFdZ+ChKku9GhNDaaNHIBjxBPAxday6MIgDdkc+WGeuy7D69xyQG2qtUlMt8g+DW8KWefnGwzr4ByGT6WssjitE34DQQSyJTbr4rdxtvuQddRxVrCzjm9y1Hz7+cZNz9wKfrGl5pZGR2sm0m1tqQpOE0BW868Z0AKo01Rky1pzox1BLXhZ8aSFPFtgY7YcLPLu+VYdZ2d1lbbufKpIYCvuSAu89UWnU6ze6lmH8DDb2pBOr4zkAVjJvPyq4BmFzHlRNXSGeaYF281HhIkGv8jhG6Dh1uL7ULsjLDuv4yduA1o1nKm3HTWC4RTsykTVtcbUJvYIvTq6fAKFp6FV5mcy10V4Wr0ICV6p13Cr1G/6kyI3QHSE1KrzbaMlNJvPwjxugef69ysMs+AGQ0Bs+VbWxYQXQjYRCmQB05qIavvd+hWDJNQ58G48uWaArfVBn4s1t0eKU5Nasz0vxHLJiy7a4CqVL9bafbrT/29bO89HomGoOkIWVt6GfC083gKUewUZiB3mqGHqLXoucUloYuStp3QbCdAux8OuGX6749JFNcq32MERrw2O2wsCekFALwjoBQG9IKAXBPSCgF4Q0AsCekFALwjoBQG9IKAXBPSCgP+6ggBHCFCKig/W6Ia/txDgDc/AiZ7f50AX3BcWygoUWf6eXtlOA9Nf0+DcCAoiXg1iCq47oMt6/xFejq6G99fzh5vhf3+4n1zfDS8fzv80H80gPpKIZUlD0LEZbZCyebVA2pu3sECE77tiP/y9jNwL8VixVwmpkHNoqEp4skUNGDW4iUMyziAYk34jYCelSsqtRe04q+0WwcbHDEw4/TZWPrrJJpiFVaN2Gt5toN1P2x7T5kzZQsntBpWU6bcUjGovS4iM5sxYq8yesmGSAHAudRX/Vb/Ue3mbODaY0Iwiam4FukPwyxyT6W7LfaIJgk2Gin1DbENJQkjI1ut+cdiOu7N3v9h9nTaQvuBbEuFJIR+dDDa6YMqXws3v9c1EyOu1zILrHZIud6/MtlV5jRTxG5sjM5HyxB27XeKu9lZpYHBWHLhnqNyEl6UMY13vd1bzmnOZKFfq9WkSt2sMi6AcwFuZXyzPdk9C1eHzboum3BnVTwphkH2xK7bSVYLyUl3oyUs1eMYrb/LCrwdFpM3HtGWfbpHNY3RK3oCqDU9coNSJaNQSu9m3c0hzsp/YZwuy3IYoTZm77YJT6Bd39KILW3ESrJ/h7egWtWmObUEY7h4fMVKYJWdqfS3JTzpv6VBx+3WAXxVyHTznXVW2G+W39nUX3M++sRWX7CUg2kOOA2GDOmQ5u2Q9/n56jdyl4LxyqJtPlYPcZ2wLcRMobdOzHkEQyOng1Qg4O7RqdHejyIst3agaW7ppanR3Q8TKll6owpZOdIXuPjThs6URU6XdjEO7hPJwuOXtBtwTtYUm7KQHmUu7E8QlyU2YeguyaJG4jcjJAiy5fehT+9bVbJENUDHpixamaoA+7qEIim38Uoc2ZQuudlELTgvfAltkbt1enwZqDeNV1i49Y9czdj1j1zN2PWPXM3Y9Y9czdj1j1zN2PWPXM3Y9Y/f3xdi1FJyD2ArH/u3YugtWsVQuKaW0c1z8Qp9z8wo9xu1iXXa0qQta7ZkCry0g+kyw+nCzoTp+D+E6fmcFe6QI+B0deeWtTlrlXgc2lRTuol3D7yRUw+tGGZmFe3AK/ca9Qq9ddadZydD990M1vEbui1T8wpPw4JxCv3GvsFtckKbyheOSt/K26zJYqXZhnrsDCgZrGxYF21zKuF6bwwSgmfiFTw3lSrCqaCiCIVi37RQuvCFLAStBw4Qt+flmlrG8XMmqHdpr3zfmPGNZBelD2qZne7bjyyLar+wxOs+LhqVxnbJKz655nrAKTCJtYUBAvgB4KCRz2CAb7ZasfU8iPaYLG+F6ZU6COBI7JKHHuxysr5rP8MH6f+k6PlElddP5oLvHUGXL0tuF4R/7DbyUh3luTb5ezIBspKti24vKXdDARHfVCgV5C9Xa1eXOdnY3sW0mOmu2Gx1nCf8YaELB2y/ciCUY6SX7jWRrbUeE5Qw5BNNR3Swpl1uOLFVn8ehZxFWrvIVCwXmsEmvuPikyzd+guviG4c9Qicj8Ep3XuoM6CZYH/MqCd3irrP3irr3fWSvQ0c69H6oWuDi7q+3sdN8P3dnQ7ibC+3xHzUCj24i0cJVQh1tJNaqzgxbrrtRuqpvoCpa3G+gmjILlbgM5B+8j94K65HnBbR7yEhKqZzbAIXFeE9Ry6wqFCydMFDaa29JcG+cEibnLQuZt7GxB7TnSRudfyZ0zq9fk6aefn0UhM5hcj5oIlRhSwlJDfKhZ6i5oUKOQ80KEumkK3DaUusG7RwBaF2qmEEtZP9ukE4HdDhFGy9cCtKlRwoRwXb1jqUhYsJym2QKUimA0ITIdpOLswlZpK7zmFuSGGY27mKB24fZXqXTnHoe0W909dvb3qU6qJuccHhbrZ1DBgSXBALRYYu0ZfL4Wa9G40QLgj7WsWAsaFNZTOjFve13zJYs3FzLVG/laPHF3a4PiZ/jMRIpZuaB53tYMtSv4fq3eRdXSOm1jh4Llfgeq51bDXUMOjhTdlN6wNG20E2GND1GXFMh4KlOv+VBxS+cz1Smf23og5xtu6/WCFxZ/fLeA5ILW1gBu81pkT+5T4ArZqVlyYO9+1NAqXoXI5EBBm2DrruSondq1drXiNeCfewtgIzwbldJvn7ntwq0Ed9pCIabng2vBDA3gQx3th19Y7lWKt5Y9PKpXVytZiF8a7BRoy0MBBLx7ybT2kwDoo+N/Qcu1uFNe5u1uUoPtEIN1V/K0ZRjnwH1CIbGlTVOulu6GVYq2Lfuso0ZAW+fhI5CwB8n0fapvVQZORby6IKctA5g3ZiAzAe6k3pp6QEvwESrxucuZyJYpx3Ti7YXFCAGNI9AsrbXaTn2NP+dW3YCWr3Vs2/CdN3z7lVmNKNL+JIimjCI8+wCTkPGaZ8tqZSFY9brz4JjezJ1fhtQKwaxBzBv2HmRULuq1Ifq/9apxj9rGQnfWCsXQ3oWSQ9V2ttPVRNeR76jRbmR7Azte7tpsXaWBHnZhJfIapR/AT95l6cYhq7ul9+9EwtVZf0DZt/p9LmXKmXr94bLZtfizQzCEZW2pEIFbIqEHoi3Uw53e9Sys9aGS4FzGAelfB1jTLbGR9jVJvlsNJF3Sno6yZqCJ5laNC6HT8NJjJ1RKWgeQBuhaBfawuYKaOnmQZMo7SKFGVRuc2yJ0gTiOjTvBupfaPywNLNjzq2xse3Vsr47t1bG9OrZXx/bq2F4d26tje3Vsr47t1bG9OrZXx/bq2F4d26tje3Vsr47t1bG9OrZXx/bq2F4d26tje3Vsr47t1bG9OrZXx34JdayjiuUgBBisIQQ/YvhvpYklj+dg3vZWmaP0okJFxAyrisUrSydVV3JNbs3KkV8WzgXcoYQKKFnsZPP6CbRZhjDS0CB3qAuDDGJTKMqqEIu6swLlQ7I0JRoOqwaT+mzJXoIt3BWiIZo1bMLqsqt+kzohXNxk0XBSXphSQENd72r/7q7iilWirCiRfRCOfuaiIXZ1hTns/CwwBamIn5oAR7ksudFTKX91enjmRWXtHHnzl3XqpTzrqOOoOmS+gRwGOsHFXFJ2CaedcBW3mTqr9KcFMq9ZRW1FixkhUKnB07W9YrvJLY1sew2a1Z8ZeNUtDr9uz1RHE26VdjMBDd2OVre02JGJzlICGSrxkseAZfWDufBLV2MTmFu/yBFrG4ThASDCkXeAXhNwK4BPukuwBdTVei3Yo3Gm/osJlctKrHH7EiJG8wN78sIVHKm3qnEl0ooXnQ3Yxc7r7cvjDa90d76M0sA9geiWi6rdxpaqXrN619ywPBfZ0m+qVdzxui82Du5TB+43pPBt64UG7r2gjgiWZyAqacmm2xW8Jq7Zgqet9zTUqzxJWcxXEsJ4/YFv2rJlv9h7vR13DRMshVK6tQu9V+9LYC22DidYxW4GMi6dy7ohTd5W6/TzhOFUvKGhK0sjN/NduIYjiM8qvmzipMFC6J9ZIrIlSDt9nAXS3eaGa8mDw9eiV+ILlxuSpd2eKWo1aBf5LZpBt16zi1ph7wwfeC3lU51vO60dNRxRNMu3ybllxhU7epfzbJcU2UiM65IrSs0fU6vMFQMDUanlrc1edajvNhy0hF1lPoM8SZnIjPxmUvBnwV+CuKlV5oatw0JXckxkbxABemVuR36Z05GbHkw9imxpjuGUxzKLBYr1WqG/2oWutJGIbfvJOeJTXobiZ9lgT3rJs2Qub9F+K+NF6UmF/WK/1VaxL/pNn/kwrmqWAukWwindlbaLWXldhmkpr8QJcKe5ETszn5roUNI+U+Qn1pvzsgKrv1ZCPlMQeqWV3Q+AwTZCufy8lIMWKMgOzuRjZV8Qs3pRxoVYULQvg4/d/jsr2eMx7Jd6lhVLfbzeBMoLLlOg1BHQ6eLEjd5GtERAjBokP/yitqwxKH/svNiD5e0G5qIKBrBTcPeF0uUyt5KGe9RuN27FNww05pR2v9z0ME62NOLUshtTAnYORApoO91pDZSGXoai4HtU4LzCC/EYyn9LBbSC7ZSagVL75UbeS9LQRqppSY6WXGWlsuRGS0M1qycjmlh6pCIksQpRWUpmqf4ZSkUBnLOXu3c2QOj6g190IZlf1siK5pagBw+5EzCIrLGoLrn+bzVaKoRmRfhrPr5uH6eD44NnfzdYMKU3fzbL+1o/lF742Qs/e+FnL/zshZ+98LMXfvbCz1742Qs/e+FnL/zshZ+98LMXfvbCz1742Qs/e+FnL/z8ryD8dASfTPG0AxRZwid9K9Gn6viC+g0CvQRuXmkQw3t1AmnagjXshF97C0ftkb9KyvDlXWzD7Lj3pS2WulX+JZwns7hAl6OtvW+p5XryBUj6XQ5wfpK4rQPpqLFXXrh2/rWtXc22zviyXQqIr2uedFanALwMtqQxQlj/0aOBHg30aOAfDQ04KOCbKz/3PWAq0oge3pwtdxSH4pQ4xYFgJ1b5ux93tP/uxx09QIVfX8LjKxbzhZRPE/FRiyBJvK8wgZTLlA91KmT1mLF0Y/hXD6jS8oFHpl0+Z8sblrGl27KBtl4Dsna0Xuj8yuq4f3ayYntJ2lJPp7QlwfRKXYGjKWpDJqxga9vlPIi8WlhjzpZBBfqcLYO68zlbBi++uXiaO0tM3Gjn8QgV2x/7Jwb+cDccXG9Zw915U5AEToDiwpx5RP7G7++1pho9nurxVI+nejz1K8NTLjvViCNfyUiNfVz0Oqxl/76Q2aNY1kUrgGuIBZMZNGntBgJOCvksEuDAZMXsUUBhEDjjFcxXacPuYV/N6vWaaYKc4Ca+Qmt4XhH+aY3OVLJGkVBMDJZasDzHMKY8cWYpHN7WQG2bsWFZ8soEsrVXRD86xxrk0cpGr0la7Bjm+c/Oam0ttAdraoTOpCkOHk1TTF/q74Cm2Oe/mwJvsRt4mCVvisPr3lXcWntztgJcvVe4B0MPqinaF204Mk5Wmz+LaoWhTFw0vb1qKyjwtqp+jGFaOatyq7VAjXAj9lxczIed4ozERJaxzwsUzDKR57zywu+6tRRw9DEHMbiQ2ZtC1rmx/LO2nduvXdSyF7SLdhn8acO1cbLT5M+uuq3ZrQ0Fw+3Cer5iWDvq7+wgFIHYrbG701A3k4KLrKwgmFqytbdwxUCnXRXbfSfnm2Gej5P2/dFlhBiSA1GJJQ2yAE39lbSxt2vRyFO2sbe4f+ACRHbXdymjRjsMkRWQdWuTW9dKhVHdvVbbKoYCs+6xVlRzVrF0/3a31nYtPdc8s8OavjYOa3NPU5hU1xSFkK5Vp6bL30YSsqBAgK0P2VXXMZdEA/aUl6UbaM7A/aBsjnS4ELZ1v3kuvzovNvpYgSoyoRCjbWaMfqOJ0oy7YVOxBKLu+OSXbqauaoyIw1FMSXsVxataMp1BBEuuydO8rpT9l40cPRvNfV7x5N/7veJaK9I7e5y37VWDI9nnWCipPVI5iggPSfXdcr+B5bLgS9gCiF+R+vMMXgNVWt2EqnRa+SoeIV7xNes28HVrdTbW3cDWl55FGYiH266xrXldw+vmrth9826r9iX0LhVfu0f4hhdLbt9fCLh75kUhEme3AR06rTOIPP+OF605eNV7O9U3MEgMQ0hBqyw0FCqZsE0qmf2hKjzrO55K+rguGnl7RXuct2zNy5zFXCULUFCpzVXhl9oxdwlH1O2icw31kbmN1ojXMmMwt89dXeV1NXRjs6p4mBMRs7KUXphSArbieaasiQpa2jFCg4gFZtmMwa5j879aENDFiaqLddvG76rS0rFZ6+OcUr8woMDrWlm/tIOP6662ta8u/g3rES1p814I9qYh0EG7Rqvt8IqWV7Lwc/nsrt4ewI7q+45m74b9JqXR5DqCpikaPa1F5T0O20Fiba1s8SxijvsYMJQxeEU4Ra1tYNU7VgigXUq7UUBKisoyAEVeGQA4IbSAKEhMhqUmKNol6tEUeLQqgQrIYfIRAlKyNN2YkinP2NquiuaHj7wobOB9lvgDu8/ydj/3ReqgQC/oa+rO9ayC1E4uaiLY/KUL7OMsKvChDZFnYaJ5IZaNxF49dGElVeyKqRSwzVSqgqB0Klzmi6aIpPaFfD40YAXbhQ9VZFUXE2wpCoVl3YZvVeDV3XTstoqhUK570LD3+bJgCW8kUeBySNwcxm+/FCUcwCRYOMqsMm3yajo634zdmLrhKkHDWb9KyOq2Y5LaxTt6CLbekqvy1D1EPHXOyWKrRFFVaAkJwWLXEas1JrxbQa5cykSHbe3QeLdUq6kV3i2NviYAaveXbJFXoFnNPmyeVXFLSy3WSkHbnJA2e/ZebzESBO9gC4xdcrvgg0eJBEDOVviw5frdUUzXfmOh7Ayj7kBT9RZkYFkw7wDCOXytkUCvgOsVcL0CrlfA9Qq4XgHXK+B6BVyvgOsVcL0CrlfA9Qq4XgHXK+B6BVyvgOsVcL0CrlfA9Qq4XgHXK+B6BVyvgOsVcL0C7tMVcI7y7UUWT4+pfHml6o3iJkGISEsF40U2D0QoLxLzy5Ab8FReC1fy+bMaWEAoaoraorXga36Rx4kG33HgfjhNXdL2AG1KWt6fVokbhHIJoeja+dXtkBkr1oDhp8WCwKM1d34gjfBw/CI3Vl9V58EZ8Uqcl2yah261YBN+kd2GhrpP6lNjZ+EbFGYBlma9lJto84HN4bIqvEpD3R+S/pD0h2TLLbIQKYTqG1Ts4zcLRhW2SEBST8vdPlmVTc2MPvJ1XunG2lrsYK2Wyrmjlq92plN7w7KapXP2URFcAdV5uF5bb95Vz+/YHZljA1CnT34DfrmSHeweT3dFf0Bbajpda8J+1zJ11GuNsLOeo2xt4evgPAcQcmAm90jV8JWUtHzHkLuqfGoEkm8SP40WzgkzTCA0qhgnLloIaeve8GrrtATLv4oiguKFbDtUHTXcqCJucRgaNIfyKwWNovxKnu2TXxy0dGp9QttOKVzFRgdBpck2ifL2qe2qsjWkt3u9K1zibjmaAHfjBSRHboUAbeBXaEupwisfLgt0sGWTL7quNC1dCd87qrQDxzbES2DcSRAVETETgKahY6HZ9VBBHZjSBhzo4FWcQ08Y9YRRTxj1hFFPGPWEUU8Y9YTRPyph5BBFmTQn/pUiVUhgcbnJ2FrEaEfpC1XbZe17acWyjKelk+ZJAw1iardkQ+4eg8kELYwbp3UCKhxKo1E2+a/a7d7IhUqYZKy6TCasW2uyLMgGzb2dHerAHVMtLHAmgUCB19037X1okh2FEiBZ7+HybnaGse93wT/gLnB2QMnlq9a9tYh/4JsXqdUlkOYJjBLN9ButgTNIoClmXLYCuLaLQ5/oFAfShW1p2S2ChmCs1vZx64V6d4v2aCI0Qki2E2Mqwy1j9SsFR9Ou5GpJJNklN48qYCvpSSyrjVlaWxnmKIBr0ZpvA2wD/JG8llHv92K/F/9Ge9HZh7Fck7PK3pvx/PruzcPF3c3N6HY+exhOJg/jy09ziLaFSElyQSOZcha3rLNCxU7K+6DqO4tXsjBTO8yE496b580PDNxt1bQg4CDjbjNfpW6e0fzN8YZNhLSarauVLM5ZsuRlG2Km7ZzFT0khc/O0LGSdJf7zm4LBPV/58PG6iTx+DgRGsV38lsr46UMtKwt7nKdyqSdcK3/PpXxyEnOey6LhDOn3hUwb2QZBfhZJtSp9Z1fVdEtA5JR2+NI2pb60inIn23ukLYEK1Gl1E6zjd/ZWJJ1fYZW1GnfK/EYhmHyhbbUUZdZqPVSp1U24Uru/Zz2Y8w25hAW6a9UJ9Bao43em08B2TJpb3OrCL/ZaR5EIyGGs3VlXlS34oedZtUl52WkKk7vCIrCBaT/5BxLgTrs8TfFZE/k8flrIj+7wwGEbT54NSlOWl2KRcr9uauOx5rE1EOv4qZlyHgjbBEAkFKtsQaEqh2E2x8ArsRkZB+aYpweLXPmQrhISf6kyx2bfhQXrvxVJwrMAKFibzPwDoHBtdbi8F4yLgg0JtuB5D/jQ4DueSM9DUa4Dtoe+LKOu5vzIuoh5szb19pUBiZoDuM/W7SnTwGATQZGjKgtIGp0SJzYC5Rh2ZMtqb7nb2wLRX2dzwwerLtoJ23SJF+fAKWk7xIcwm1MSUEUE8dm31EBc1GUl100SkEseSzvKiXn2aCA6e+bW4O5bVDgGoWqgJDQfWy73S15SblT6XTl8TcsHXaArnCVRMQAbSV/KuMatbRD1q9QoDr34NbQqWVWwLOYe0arBo8dHHtsKGGswgaw5Qn8j/Lp04DPEBP6zt9xXMquu2FqkG+tlmVUz8YvV3JvxVfPDgoJtebFpAVwnXwd2zTayNpqe0H6xwZ7lqILPVwVnie9K7BR2tKgLnXYdWvvt/ObafJB+8ibtLWeJQzC/5WK50i10EImdBOKnKrQML4A/rRf140XDajQg+6Qg0AFk5OKmj1AYSlu6A0OEK3dU0qoWSNicLVuVtE/CBYtXPAh8w6vzjafkM7+8VUOe2yCFa7bhGlnStgTyzswiwULPPnUWKrFWR6VqVr+sBtWTkxcqe5pQimq3ngW0FwyoSX1znW+ay791zYTrtayp21Va6tBQFd9cGyb6Vib80lG1WhLqaylzD/0ByEZ9INk2vvQsdyUrQMOFzpgDd33hE9E45me2U37mHjoFCNDNne70ls//LjZvJ4u3m727bfKS6Sm2xggga4vfcbjN1O/cfDX9tm9fgtjY+Q6YfJ/1mlxeuQsxaXY5/GqABVsWLF/ZQsuCN0SWAvFiLUrrgp+kbLNg8ZMzY5O0XooMaUOR2bd/oABFEttLvfmaSAGoyN54E5mm5pfVn3qy5whh1iyaZx9FhErML2dEaep0UYjYuWq2sNPbWGnS1IcIY6ekraMPE8Ydiv+pzutGjt3bBH8dNVzJbp4KcrdoF2wM67KF6ekwJJiKxcIVGUxFvHIY3xlF1VFEZlC8u2K5heOaR7vZ2ROvYusczFJZeU/W/pmtWVGh7MC9igzcgrnO4VKkzSjpwapaaTLAGRr+tkV9c/DudXtGkPXIP1buk4dxAGQ/rur1IjP83FzG5vX76bj5oY0zkNEM7W2vpG2O4eAWBxQwvtjSjk/AlBbpvq1GQ71Yh1mFZeFJN99kqqjWxklHQZCSeicSLq2fZnbxETUatVVdVpbzPWvJ3sGExBcQL3wBrYIFpKmqxKJ0FSR0rTVFLRGjKnHRGdivsIovZSHImMWSPn2sLAj9VDcnOfoSyOLyG2MYSxzewMxz4n32klehB+IqDo4PVs6Hg5mM1X6pQG0K6uD4wNrc8BSertyfkA82gga1EdPoqQhhVzC5ydyeau/svIhkyatX6zx7XVOva+p1Tb2uqdc19bqmXtfU65p6XVOva+p1Tb2uqdc19bqmXtfU65p6XVOva+p1Tb2uqdc19bqmXtfU65p6XVOva9pH1/TXY0+d9B8HrKHlzv7jYI1iCVAo/RnGsRRlBYTErC4eWcwVHBh9cjIVBW/UVELivzJfTwqZ1DGppd4qrdaFLCymGZReLEsKKRJ4BwJop/yS5/jKWSwLPigoEceAOS/lhXhm8QZeIqKaclmc/f/mM86ia1lVgkcsS6KpeOZRAV7yRSSzKOEQJB9LYplCnp8ok9VKZMufIha9pxV9H91PryNRRo+A/nkSpeIJ3tlEslrxIrqbDyMGeRRPaEIzzpPyFucEhWUHZ1VRc/jCPH8QcG05Ewt776BrdnEWzdwcH7zwxUHnlG+ZjTwfQNdnEezuMpJZuomqlSgjlufflZF8yaIFDDb6Hr9nrUjh6PCZUNexKs7q9YIX8JQlKY9EchwVPOUQxDM5jkpePPNIYlj7o+ixkOtIZIO8kDEvy4ims4z+z//8X1Em9eQLxRnzojwGcF3yIoK+j/Va6LXhSSSLCCQr5VpUFU9Ooluoz5Y8KqsCap5GBc1JMig4K2UWDSdjqFbxSFRRwlOxwNOYbqJE8jK6vZtHoDUteTS+vBqeDm8vp3fjy4fx5Skc3PT0bjZQU3AWsQQkBbj0rcFHK17w6EXWaRIR6olY9CiyJS/yQmRwlgcsSwZVwWJQ0EVqsaJHKSusQetRyBcaWSarKJbPMNmljKoVq6IFT2W2LCORRSwqec7gS6LmAG+iF1GtIlHReiY8ThndL50785GlJW5NUIE+FCBHTLztGYMgK0WMDT9mlPyQcKYh+8GTsi4JaqoAipzxpY0xVSE85qzG67qgO900Rg6a9RoKy4ohaYj/TcslkUHwzwLWizIuxIJf82cc8gur4tUt5aTD3zPVmnqQ+Rc6eQrZ4V6c4VaENv7j4IlvDs4Obmc3Ii5kvpIZxyDqlxzGqZm4sl4ueQmairODKS5BhOtBy7mRdRGtm/dPDv765+OtWBVeReS4ZvE3Hhby2amZlliuT1iep/yk5HFdiGpzQgfnBFsaCAhYr/CjewXkFkOJ2BxLTgz4ZDq6uJtePgzvL8d3u+4Ca3efRcN3OEX0SbyITiMUKOjnk2hInUV4XCK7n+gwAU6kkHV5HKkb6egkoldhdiMGSKAA7JRFIqvg4HLAsVHJsmQhP0aHjyLlEezUCk7v0U8Nlks5e+YlvqCwS51BCj3TBM+SMhK77xnrcx8Whnn9Ivf5N9hL0csK5ojhVTDAg8+TqKRjDhcxUEDPasvBrTYBxAKDux8bPhzIVLP6uEP6U+OemuNQjau76ejN9O7+9vJhNpq+G1+M9q33cDO+mN5N3t7ddrwyuZvNH27v5uOr8cVwPr67nQFGfZQFpyVTSYsgUguO30wU1CuplNYC0gIdnB0IeaLtpE6ATDyxjvaV3+5BR18HZ3ZPf90fl1iH64xIqtCOLaM120TAxYis1pvbvMmTnyJxN4NX1VHH7WIqRECIII2qERNWZfaJMd8VqWmi/caiHIiXEpiOyA7jswuHLFgRy4Q/lDGZJn1d3HHB1rxgO07TfcmTqJIRDCn64zSC8ZU4L2qw5Qkt3qsOxMXwZjQd4j7kDDJ3OvtLv7BiRfLCCn4S40gV0QJ0pqahdk1nyX/7W4+yYnW1upZLkb0TDMMRTVhZqsgkdtldldsQyHyi89YZOAkZ4eGGqx9TtUbNY8krr4uGbIMHFTdNv/6OFxCFCDtHFCV4aaJyWsAWgCQMFqARBWjAG0wbqJ9UvH/9SOOA01pn2jTiWT7xL88lNYwFiFo02vmPg4qQwu1sQlUv/GqQtgnNKVORgX0FLvPxgabt1Z4AJr8A1gLH2N3ahGoN8/xKfTADah5uoz3GgjtHWVZ+/RH9+fgAeLMZe+TVBidLCXLgIE94UULVSJBwNlHN0eEtovElkv3U+MHZgTI8jdYsY0tcoAP45P1axO8Glkx9+PZmces4iJyO5FkEElsgv0SmCCzAwYDHvysjjn0cAo7J1cEBFlRmfACkH6Kgo8hQed+V0Tk2i+ibZ8kxoPt4FRW8qousVDRNJJKTiEwKgN8zFB5QjryMlpLaBJaP2okqKZFvJqaOxA+PdYECCGTUYZ+U1jiAA9QHKlrJNIkOAacdR/lKVrI8jlJlhft//uf/PtrJHy6EXPOqEHHp47BnJlKQK5Og7lEU62/EUl2xmI8v97wz6gwE7mae4W6EBqLx5U6G6tx8+6tvl/vZ6OF8fHczmk/HF/Ct20RbC7ejbhrEVDzTXxGVFduUlkxLCVkaDDfAXcKzqtggY8OTnSQAbE1ePMBd4K06MeX/cOj4qyO/AJaiRRjAIpxFLFJNARdkpGKVjKAcjjsM6CQaJklE+FFdDNFpBEHOIvGoSMxqFeWKhjDICfCM5jVBx4b4ZL0TOcQs5VnCCl9whGSB1riQ+F0/hWVHwMZhjbJDKqTinGIj3wbLXKhvK38G1HyXpZthDMLMHXgHFoDjl8DiINenZ+kE77hW+1d1mu7V9GwlX3CpaOO4jatOO/r4Mi1vx5a6sz156a/2/fvx1bk6tCgcL0hhcKIbKz+Zxx5ePlwMr0e3l8NpmBP+eTqej0ydHRdDbM9p97Wgq51FeEL+IKroEDjLH/7le6IsBsijnkaPdZpGDCf7KDqN9BpopqItAbO+J/o+cgcfkokN1OHlydEJDabEC8q6nzzZlpbq70A56mqKWZq2KJGsfCFeh0gSlIhvFVNXxGWAcUGda4Uetnx8IB8fsbGCx1w885lYZizF57+QdUkIPZW8uqnJ4rzk1VRkSyDf6GmWc/aETZbYlpJK04MWS+snJdtWQC3VVqjxVyaxnrP0CZBczmWe8rBAL6lRO8PgnKaKS/+CcrZPGsKvVlqNm/ss+uHsB1DWpcRpkFAI1EHRz3wxnV+cRPMVtz+wrArO1kAY5JwXg0oO4D9iSkF6LhJakRatzlPJ4Pdig2fQUiIB5SgqeIlnwOAk2EYJEqREFDyuQHVILA8pQHNWVCIWOcuq6PByfj0bzKbzydHJwbH+FtrXMP+Hs8tJxD/GaNFzBJ1AO8PJ5LsyKsiCQ9A4UP3nje07Uh56AwbuBvRloKcFZVn8xCv4Rp4lOdiEnUQ/r1jFYe40uoEM4sAYwWhwUkUZvQC/BRhIa+YSUcapLOuCR+u6VNq4n/CdmNH7Rlj/XYkcVYqThcr9OBpPNH8KsqlmNmbz+1tCxSKLZhVcYj+cRIh5QEyYgRq6ZGs+yHgF+SyxSZlFejs98+h2OEfo1XB8DUXlZk0cwSmNrIAaoMOe309vQUPLNs0nPoqPHNQIemuUNaSh4TDqgqNauJD1coXf9l7EHCSlvCjfR7GdjjwqU1ntxtMoLfMVijnI2YAYFvGTZZ4Mgr0/Tr8ZYfcKkWPFnrhinCORlSLheie5lNYEqlyLRcGKzZ5NwxzoplFhjogrpTb2RpVf7mtehRf1+n4SSvxyktft2BReO2sEJ7hE5SlaVJURs9ko5JDvbq//BGyS2qVJtAblIJyTBmUCu0WmDsVPeGgimQ0UWaNe062WWru386SkIl9I1tK+r1g5J0oBDDfUTyTm8PfXthtphnUWgWUWYq1j63NJyuBZaZw6JhpAgZLRSVWI5VIh4XJTVnwNUrUKlCGgY4gOf/j990c/NcSnZalCOpNHGdewhQ9/+Ofvj/a1/djJvJKnWtk2yglQjXBYO2k/VsSrb4W81KB3HPgrkdHlzZJEE0cGx+gv383S6SnaExd9+cF9Kienbt+FlE+fxcvd3c6HF/PZTj7Nnqgth0pVO0Pkf3hENJvuEtmiQ1lXA/nYmE7dzbAuL45+iminHR4p7kxPt2Lowsyb+oAO+4VL9NmJK5p/P8q5av7wZ/Exmo5m86NduAwsHB5ouN6pUucH730kJWWxuZLFCMNWfKGz02zQPTYNjLQ8IaUtJ+R1AmhngBjWbJnutYQWBvStZ6T9xfsCrxNF2aiFiQ7vx5rYmeAL0Wk0G14dIRLNeTFAy5BlwbJKGcI5yM3alBG+n0Q4fDQ5iWUOFFzI4mQnBsRWvIVKSSNn3TlkhEpsaXMHfVF0584zTRpPhrkofVFrI7sd6kqT8YUqBufIuVjzsmLrnD6hVMf7N+e/+/HkB5LjBpaxPINpG5SxzO3VA0koLYQrYD800nUgh0/9JTsiDs0ZT+iGgtOviJMkWvAYjOKgs+oUFkEJZ8EGAMwMk2EFun618i7xRjhT4E2qmqcvprtSowWzj3Djqc/VMl+25Ds3zFImsvI3jGTJhKnbEe1B8U7Mkq9OouBoznASliDi5tlSZBywWxmNbufj6ej6T2Fb34Y408oS3xSVZSzdVCKmJ82N8SVK1OWjtrTEhS64YmYLDsYYAd0LqDGALQ3tgUrqPUDMarOmoip5+hgVHAP7RGwh6wq/MweW7rCE++cYRPk4KCGzIxClPfO0dPg4pRMEIzVWbKKKA14EVZDiAZsNiB9ArDf8Aq4VJxitgnMWP5VnNM3KKp9eTsUzrC6Q0wyZfZ6czqbjQS6yjCfRyS8ib6ynWaVvHpLighKEJyS0mRQSxGvaNecEdtVDoSzrH6D7Q3WsLPZ/Orq6n41mMIfYGBi9sPgJW4TZYtEarD1hncsV+/F3v49m03GUCKBEYGOAYGATsWKN0tJTdU5OX/jiSJneihI+E+aEZVGdPYNhBKBbPQcxJaM6ieAElFGKk5rhxF8ML96OlNxEFhs4mYNEvmTwZaA2PQZhCGaeossX1cMgNazzI1qGxjPFrMX30TDPoxmoaKIfT3538uOZWZ7G2IiJLHpzOUPqS6uh4UPA4SUvwL8d1dcwnSAEWIkcsRsS57DA3y02UQ7iTzgU36GZMgrQSOjBlZ9vNBe8GPwu+vdZBIeDF3oyosPfnPzm5OPRMW6KDIysUxELEB4Bas+h/5wITth9gi42NNRG8Y5c52DORIxFBsaSIqvOojcwAbCVHx9FLFjaoDXFMUdLBhr087v522gwgMAAA9wMsCSDQc6qVbTgKyA9E1HCAjwA7EHqvFlqxXm0kLKCAcJ+JPEPTJGNchd0lqBlmH2wSkJmZXh5CXtRVCfR+BGL/gka+yfcaIjh1zzKONxc8L6olNW4wgsgosRwDxqToeG9WXzVbSl+4WcRKDxhinBJqDpLkjL6z3/5Mbo5R041Qw4McImy2T/8z9/99uRfoFg19X30nz/8/uRfATJ7EY8VzvHJY8HWHNb0CD/xP3/8kV4Cz85Ib+HoNPrP3//ryW+hQGRlBfEBUFall+WQFevf/3bw/K8MJ+enaPhmopWLJyUo5mGlUUSWwNTr92A212sGCPBIbVFRRjKvBgIFYfhBsD1FCTIrfW/KRzSbAMlXJrOBzGnPIvZTXwucfEbyx2TnVbeCWEOxT8WmbPOFrrVX8SLvxufT4Xy0g/pecZa2FPZ76UQ+qPgkQfaWPfOfZfEEZmbfhsd9i98xW7Fit5ktS4hrLCuel8fRirOiisC8+jjiGS+WdEpfaPxKzgbJt3lEvaBZIegVsRU0Lwb2wJHtUU2yTdulomTPhCKaHjeyRpQGOnDozO58F4ubcHJSL05oaZ9E1Sz2Fq6dGn+9yQp1Qozv8GI+foeqvrvpeDR7OL+f3o4uwypN+73L8Ww+vO2yHLZrjv77aHoxnu1R8+1oOJ0/4AHYWXc2H01mW6uRDvMTvo9e3OsDqWrzhX8+PlA7S3QbMatXafEsr/opI0MUPlSb80BHezT2LgKpEbK1pA60K6dZ6Y+6B/j0u9uH2du7nx8mo+nNeDYDg2yY4PHd7fAa0AwaIO4a5DvBX8xA8WRYY6xYseRVA/hyH2um2xIWW2swm8N2eTce2Z/3cD8bvoFF22eqTqjSCZWchJv6s+PJ2n5Zc60nb0fD6/lbe6pxgv9MaFdoydD6ZCnlMuUnuh2W56WaKIxNsUMEtTKn/gsYVikcYgyrlCHV38TQ9UpUmWvj+rVGs9XOS90YcKE8NiOyjL1UubICs+y9QO3odOTZuu5qWH3/Xi23JRy0Mc7UnaNtQ8D8Q/V7oTSPh4oEOzpRt9SbWgCHl/Hodyc/nPwGB/gGNynSgt+Vfgu5TEW8iRayWoGwYoEeC0CH0RhIzwJSDJY886ISWCaLqOQp6ohFdUxm/dCAoYq1WlY1j+axgJyIIbHbBrEVEMzWKHU7wKB6w7X8JGFUa8264WsXMisl6h4KzSh24vt/smUrjQXMT0CCo4kLDJj4rGrFS27VLhtmlRTvZGXC8SOAegdfdBLlRgnPBAMtslnIDBkLLSJ4WXHUysMkaNHjC4M2H0F7ggzO+wAB+D4iC5oyep9BJIsKyjOevMdvJ2UMiutxCJz0M1Ep1nm6aUwIMwnMY56SvhsYdTNMi8Ixq1E5VSyuXrGisLfHlzgES4Az52V1lUKYLuKOyl0i6ZVYiwdApW3n1rscI1DGdVGQGnolSx0cWULZ1xZgwdgGMLazCPqDWSa7Ck3N4e55BiWk5Uv9Iqp4FR3CJuXFERwfaOfs9DRasSyRj49aqKUVI3Q0mpvgJ8dZG+UbZCHBnnhGFDKgWTDuYOtyJ6MkWO5PrcyUC69D2oK8ORPlag46wiaUAexHtnlhaXqBRgYKpElbfLrP6E2eWO8qm9p4RRJH/fNKFui+YvJwFxQ25ssyL1vI7/Fw8pqwBjB/27fwE9+EFMSJKOEYf/Vdqrs/i1SP6vDKbFDGBedZpGvgxkNhiNYSv4gskS+nqL+FPa6QLQgEwHmWkfXOE9+UVSGfOIlbG9UzPoH2+SxCFJGBVEwuaPuiRQugNyAfkmOSwIBXOA5ufDOKFpwkfyiovd0RUeCngOLlU7TKIBB9YA3V66wYxzhS2rqPTJq/7LZ0fGJvZ7M6x6vhWjxrihrpzd08pPXG5vWcZMDds9stdDK9u7mbjy7b/qHbjg3M80BP4dbjg8ZZD4ADwfFnu3gEDfMJ6dDfIcZOyesCA6RpOcmHmtcwLqSQ6QGklPphlOE/W3dW5yX/UorO7ftPh9h3v9M4lWqLUxuCVqcQCae5CsNyIhi7zIZJ0vy+SDkrmqdrrTyEh1utPlxiSDA1EfSoNmaHyOlXE7xB5yv4ecWzcXZf8t12VsqKS73YiJcyzooFUEsQZW234UWTKGE/wwtd/csN7/hbTcKnGniYff5J1h3Di4vRbPZwNb4dPVzfEc4J4yhV8+JuOJ1Zdfc1XkulRYh45ms7MJy9B7qvZ13tLLI3DjAD2UBkA5CNn0YafIOeEwVe1ODLWK6kNgs9NOef5P7GzV+7sMu6VMbGaNCLp/HINzsJzSzorYLTuCusBrFOpISpi2cwgDV4CzlGYOtmo8kQxIM2Q3cWvdczYznrvz/Z47Lw3vnKHvBf8XgFDvEwfWGbcpgl+3anIllgj4WsKx3GoFFTl5prNjO2b3wOZ4fvgw2Pg2ArSmePLn+l6HJb3fPhxR9UPJHt9T8jQMn2hjvCk3w+fu+OcGL2/u74Jrruid5brwlw0nT0qffNp4qQJ6SjtQ7v31R6a43DEq2qQUbWMr5SvBq4Mc60DLCMhtc/D/80Q7dbWYhf6ICjV40WB6KSvrmr3rfCv3wPHLW+YgPRXg47N8Uxssb/pps+1oFhQD+uWHnIZRPJbCnhLrWjxDTeNnezwZplCdk1Nm4x6OID0zPFyYjKuKgrkNHw0v6ABqWtOHsW6eZMhViwuGy822HPK+OPLAYLFTKofGQQNDlS55BoASUFQHssMxvkVHPIT5Yn0XeFdWWtIGIj3VikJyaJhUA7ku+UoQ2LlqAsFnH0nViDc7SqzD/moKDJYv7dSTT6mIPMmCkRLYoxQFj3Iko0lvK2u2Nb1XY20GYLzPhm4XEgc6NizVLwxzHiidNyk8VgVD9+hOGKZ06i5SfOYRsVaAAEU4pOWpatInK/g2QRkQE/ifq0Q8PRcQR5zNTU+8f81BwmFT4AhLG4CnjzZ2gGR1TPgFyEosacZhehhcayD7kKFu6LtpSRieJK7TiljgNnRjyiDieYixg2yjib0A8AgcUGoDMObmzgakw7gGDPQiq+VhsuEsN+afovOX9S/+ay5en5R8Xng9MnDal8EsqFk1hmHa5Qu3I2vHSd+bCvJwnaGh3ttbTA54QJG12Ohw+T6+Gf4M7f/y7eygC5O+nMwj+nEPpDCyl1BYqhpUIBqgiSOhKgfkRNnEEuGtU6CLJUC4QmtjiGQYrhtgBl4Rl3IjUsIHLoI6vTna5zaxmQ37TNeIZpJaoaswgseaVymWz3eub5hZJvgboBnt8KkI1vZryq81+7MOZG7kGz4wdaJkEU2gIxK0/5My2d9gjOOgx+vhwJrzxa1hBDCC5B5FmD3W+XB9G3z3iGmaH+/HryfT5+N57/6QGckd/cjl8lwSix1xOYThSPKu94l9Y93vn+ghUQu+YT31Zz+HopijpNX4im/TuxRPg8gwGaMpIn0caLDi9uJjyh9Yu+jy5uAPvg05ETn5B2qJYyHc7/NBmhSdbDxd397Xw0jU4jhE2mo9nsfjrSzzfDN7ej+fji4Wo8ur48OlENKeXz6wJIHB+Etjsq19WeQE8b11r1h3/+Hj+EjIjRFRTtoSsO3hW465Ekbnaxciegkw1UGJKkcK5B8qa0+aQvR8V7ozzHzonsTTjsXN70VEYVEKoFQyVwtWIkWHlZgR0CXWONXYDCJY4R/mLjyACJuDWreKbtEcgm4z0i8MP/iOiInUXfqUa/i/569J5GOLye3TUOtBaTgoHRMLYYkoMG1ZA+mtrRimXwS3/mxpYXP1dkYKCxluhdv15LcHQhujmrYFrw96JewgffSmve0f68MViHuZiJdZ2yCsKzFdSiXlWuCsqTiGIaWpeAxn0RmmywNNIoB9f5vX3hHh6dML3f32M8eDjjKhi37lytcvNMLEkFrgbIUhifE3LlwO2r7vAITNFx56qBJ0ygNpPnUSUrlpJ4trnBKXIBQydapWM9gmlUfpSggiV7aWxhNr+bjjTpjxVcH5Oz9lYntgKCS2D3sFyxsoxHJhKCuMNJIXOdxsyFqyB35DKhTH/IC0CAAXot1IZRwVXIbISOOsXvwVnMZPQXuYDVZCl4Z4BJOLquQ+TTJEPrj4L2GPmEoIIfuiW7n+9KS4I8nIyPMVAFmYhzPTWhawI47hoM5Y1FO0Tiaz4bXi/QeeRRbdejE9+oSJ3IJtg8MZiqfRoobLBCH+BKH4n3ZEz03rKFOUZ8hJ5byoZfnSKIFY/m/mTmoU2PFnwjARsH8J92BIGenMkhsT1sPhd82DFHR2e2DZgWQ5SKjy29vaTdmGCb0KaqYUtHP/xzlIBX3d1tNH87ii5HwB8cN5tL9cAoUtpPzYZV7uQQewPtz2h3IsZlmrfXpjSJDqqoHfEjRe1GqIEvI+Vs9SgKVC8sGvIuOjRwRNdHjXMIARMKqoHhTxh4/0AcFmPKFZwfsrGK3peG7D6L/geygTkZuP6Pg/d0pbM0RS5GB1sB/E7TqT0L6XqHG39QEoOOO2IhsSIE7YhE9YoA4+YO3R1kXGYP1MgDE7u4lAxPwRcMWLDb/OYuu8TRDcc7+Eb7O86AVOIFiHo6/QcPySjyClhCukKAlU4hwp6K1YcmaYhchuOjJtkFsIKtBdAbitCWXifjDOiIjGjVEykLhcRLkfIMBD2PGDrG3itxKmvP8tBywOJlzFIkcSrpuXun6Vp3XiqLRZVnAiRrOrVEK3eFpf8zZj9q4fEo3VxHYOD3hmfDcXQaveFrkYnolmUSLduGY1i0I0KbEJyHJ2jtQ8pExIuWbfQ6fRLV2ZJnTAz+6X1EhH+U8BwSu2Qx+q0NFuyJN2545AFkUKpO/Ee2SkkCfdWYFUazHoaboMweiCaAyMGIQrsOR86zh7pIO60Nv4lhIXQyqIv0DO8Hov6VwJXCchjpM5q0gDvcoIxXfA3Ipqxg8q5nsN+VtOOPZKk+wypldAhWkic5VD0C3a7aACz6f5RJ+/8LMfrEI1yVC4y/CrOtJkFZanHcZjAwpKRZ9h2kOYHNyiA0OrrPHYrsmRUCCOYffnd0Ep2DXTByA2DqOCCp+h7OXHny6C2IKIdW/Npvsih58ogmdCCIAq1142dONBvEsEJZUl7IimRG2v+VDINZ4iMNb2mBYLKIAcuz+OCYelc5bqK3w9vLGV28dxf3N6PbeTS/i4a3d/O3oynE5LIcm8E72lifwhdRBiWSAxdrMiuGGTw8et9crVmk3EzAeSIil4gmzChkVSJTwQTN+JoAXVCAFy5F+2qwJmUrQvEzUjH4gqHR1KDilIk11tTb9jRPHoHwwU+p0EF2AR7E6I6M7CW6zZNYHZGzXhO83QXFfNZSfiLGjunL0fDAihP2IotqFa0ZsIDHzZe+nySP4CbzPrq4u5nc3cJMH+rA0IB1gEcHE+AmINqCVxX60koIs7RzY2NMo3YEG/BD645iAy59cx2t6htJ7+wAWcMk2TfiP/jTqYBVOpyqiZD1efG3tre9nyXB1/iqz9DyU5sD1dY+UUzoDYpHYxJReDFoJm9V2JJDh91A81xsQPcYKUNZzMlwpKyMANnbG05d7Tsnz4oXcBJtX2F9n0nZKNbw7ocoDr8A05syyNCTbeBTrHbANUJRfYfj+c1s8N/++ff/+huKmgGhUu3vQori+QdD7tCXUwSY6HulQED+DtcXvtJjz2QW/fCb709//G/f7yIjQF+FwRQeSFXn+yHXlEiwwsTxv5po3BRhTRYUYu1X4jyGeh6VUPNvKrSl2cGr4VlPkG2JQKj8VY5j+G0UEsZt7B3cHuhZhXr4oklT9XppsL8Vz5T2uIwWm0rhi/vZaApXVsmjQ0bxqtT5OLY13M9SadEodQKLILAURdkD15tGqlXwAXVJNNHcpGWICwxKAeEffDkLxDllVUV3u7ZeAIJCR+zULAyGJEWDAoyCo8J8GA5YxfbQAjOhcoifRPNCrF1VOYV3oUQOkjwSyI88z0G3U6MWX03XmcOTKRoYsk5oLtlEHoKgHBgYolHO41yeUihYUMXD99hiYpi5gU3ttRZtNrq4n47nfyLppkId7y2BCjFKJviRzlOG9F0jAsa99j5imI4Q4mEIJZ3RkV2ARkKHDi2htTy7hOHKyIAC7T6QChRpqiLVktOfoGhHG1lrwdWaM0yjoWJZ0IiQ6oWp9D+YZIYyQf8/FoPZS/NFKG2NGvc5VmJELVmgkwgw0CXSlCy6GE6G5+NrkKSNbybX49EMg7HS+TmjhayAhdBEa1nDtcwrJRdFqA7SQVJ8Ct9kzckhCqlOye7glDgqDN6xUSIBZfSithHRnS8YvR8bbLQEIKwVFXxbvEKtNN6yrHG4G0AsWFJOrtQyNdkmV+x5n22DssPRbI6RlGlkN+Pb+Swyw4MDdwgESXn6/NvTsl5ozeQpqcipGvCmR4qriVc4g4sNnPwUYtewTGabNRgbQ95fFK1rKbNfElUSnNZgfhYQExnVOloGTjtaReSNU4FpmQGdsIqEKRhXBNP1aQkCGs88EkawxbC0BZtAL3BwNfqTxLrRdGCzLIVTBRLCssYcX43VEgwQF0qxvABD0gJmFgmISOvOQKYDKIezysQfJVzJII5JVdQlciN1xqqqEIu6MnGJdvMNdbkKZvscpimoj0zWz+YJHD0utaqJLArOWbJU9gckc5vDamxN8mC3gEYIJhd7MPgIYPM65XoUpe70izItPrnN8nLAs2dRyAwDFJ8dqEgcKlHRHsY1cJ4rPrAtRnZZOU9gTRy2Y5/IIDvG+gU8t3Yo2HM97C9AQNIuchK6/E1INRpHw/yrDC4WfRWu8FrKqi4xswv8V4jsUDU8vjxyzYfIDRrPzgalFfgSsT1wVV2JgoN723HzK2JpKdVtaYgfNVEgvyNlC/9YFSzk6bjTgk8ZzT0AzimkL/GkTJ0mKQPK2VRwSYq4+dUFbmqAAzXAMxRtlnbya5WKXUkbVX0VJQi9TPW7zT1yTMrcDHDj4LHgPFoppZKOOU/WvU0SHSKLM9040EBokgkOsLedPtqtdNc397M5ST5RCHUWvVcNEmf+HpXRea7NMA/ztEYBFV/US/KUP2rCwFPW6xKjLZDOeiXynG4PcNwudMAsdUOlHFz4MflkUUY5kXDrkqfP+v4DQRxvPhGzlUkkLDBymhMFgVdKuwA8OYZBJ3QIhAlFP+PFbqdzFIPwBxW3crsWCi5Y2xXzC8Yv3T5GCGC1fWhU5RsMhVKQPCSCaSP0Vg4VFJWgPMFLpPK1j2lgcGdRqXKHWySfqkdJ0JET0oRWk8dApbRgeY5UV0Pf8qyQaXqsw3xCIPOCmA8KP30SjSF0BfSI/Zdk/UKBNYDC0jiMVM2ZtHRdKvgemaXs3rg55/Fq14aN5TITv/C7DD078MPtzOfggaezyOBDk0VGPWE9xB9oX/wFpURfLHmMloXqsPnIN5OAAO86EVcqXa0t5p3h9E1pgvZz4aLEBxBJl6xCsQUVL5l/rHaaXlKXXzpB9K/r838t+XA+lW4Myfj+FpkAKZf415LE0dqdRc3Xej4mZY1+uZSfYoDSmdl8jtRiYbYM2q/VKXqJDLQxAl2OFHenad2KcY3uH7sIQsI+n+Uum9VpuhV9YvKIB9Inli2vkYx8MAr+WPByNVvJoorrb5Y4ayYKseeBLOpMCwnxukGKE96HyPB62Ce7MpLTbAzUbJxF4SGgmAOkFpT8s8kEmecRzVip9LNIzEELuxa6YuVTGQgwQfFNYp0UulsKYJNjHenULlTMzOQbLd4U7FJAIft56QgL3YyLuJvWv2Cbn5XcsWlTy7ZAuotcS2JlUWvyIe68JZsP3GF0hVvnDG1Q/s0kK2xGEx3utRIghlX5DY+jLbOLqoQf/sWyUfq3iOlsXSbiv7HKbOk3O+zndp2QumUZl3Ki0DIWPy0goWPXrv5EKroWZ1ZEJuzuVHcWKfc3E3xJfyxkF3H1uS4f6ib0uTCR32H2tPkNEhLKngEDybeiz78Qy7jbnuGFL+CrPjPkQvcsqfbPNBLk6wVPACn+zBdgpwG8bqkYXTLqi1ixEBUqgXXQdwjpC6YkqOFl0TnUg12izUuNVchPZP1bV1IrZ3bbKr2Ijw8sF1/1GoU+YlauRCtPi2sXhQYAPJnLCdusv3jq3T1iqH0JpTQNXcX1+1tSh1cCxEYimChajfITPXb02ypeYzp4kUWK7ilrDvZjh5AHCa68UxJMneaFANfqQZ6yrETJUMmrKiUWGrSyqkU3lwStZqR2zk+gWU2iBGyoUkpGg0JM8Qs1Q+ayEwZ5Z7VFNKN43KR4Axu+1OHad6FV2Ld5yipQMO13QF6zMbefGsgYVuK+VTZ8EFuBbcDeG1MWZBQ46zHlHweU9YEiFJcVWOcayPHBEiImHpQ5erfD4FKxzAai4usSPODgSeVFzFmCXp1nzS+YgwSCvNP/00eRpjfs488IhBDw4BxxcKZ/AM/6caBfWZuKOMxlIV+gJV03lqksDs7oPy2mEyjs4Mx6CJQPdAOBWo8SlRPVJpfLguWrTVOC6eXwq6Gcf6yG+Pv4YAFWA8WgYImoSxxWkfFiSo+6GHqjHwD5OChXLMGvoh9NLxKmG+NQ61/HB6wEl/4BWirDzOMjhqDW4hPaaJATuOTVKRhP89NCVjpUxC8DoDs+Hpwd/DLGH5hTqaJRpTWMCRSVSrJzdrASSUK+57IUzf4Q8RNayxciGVR8DRscBM9pvc7os/HXqfoPasJ6rZ9Gylz24K9//b8UfnqoRxwIAA=="
5578
+ sha256: "5f2471098dd499be17cb0e1aea71e52ba7ea49200cad460cc862b7973e64f171",
5579
+ data: "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"
5576
5580
  };
5577
5581
  }
5578
5582
  });
@@ -7530,7 +7534,6 @@ function buttonVariant(style) {
7530
7534
  var SYSTEM_FONT_FAMILY, TONAL_ELEVATION_ALPHA, BUTTON_MIN_HIT_TARGET, nonNegative, nonEmpty, own, COLOR_TOKEN_PROPS, TYPOGRAPHY_TOKEN_PROPS, BUTTON_VARIANTS;
7531
7535
  var init_tokens = __esm({
7532
7536
  "../../core/ts/src/tokens.ts"() {
7533
- "use strict";
7534
7537
  SYSTEM_FONT_FAMILY = "$system";
7535
7538
  TONAL_ELEVATION_ALPHA = [0, 0.05, 0.08, 0.11, 0.12, 0.14];
7536
7539
  BUTTON_MIN_HIT_TARGET = 44;
@@ -13418,6 +13421,7 @@ var init_player_host_manifest = __esm({
13418
13421
  "speaker_diarization",
13419
13422
  "speech",
13420
13423
  "stream",
13424
+ "theme",
13421
13425
  "ui",
13422
13426
  "wix_api",
13423
13427
  "wix_cashier",
@@ -16624,7 +16628,6 @@ function resolveIdiom(tokens2, ctx = {}) {
16624
16628
  var IDIOM_CONTEXTS, UNSAFE_KEYS;
16625
16629
  var init_idiom = __esm({
16626
16630
  "../../core/ts/src/idiom.ts"() {
16627
- "use strict";
16628
16631
  IDIOM_CONTEXTS = {
16629
16632
  ios: { native: ["ios"] },
16630
16633
  android: { native: ["material"] },
@@ -20700,6 +20703,14 @@ var init_native_requirements = __esm({
20700
20703
  ]
20701
20704
  }
20702
20705
  },
20706
+ theme: {
20707
+ // RFC 0070 §3 — an in-memory token overlay in the shell. No OS permission, no framework.
20708
+ privacy: {
20709
+ reviewNotes: [
20710
+ "theme: recolours the app's accent tokens in memory for the hosted site \u2014 an on-device UI operation only. Nothing collected or transmitted; no usage string / required-reason API."
20711
+ ]
20712
+ }
20713
+ },
20703
20714
  presigned_upload: {
20704
20715
  // No OS permission and no new native dependency: an HTTPS request on a
20705
20716
  // credential-free URLSession / HttpURLConnection. INTERNET is already implied by
@@ -21463,6 +21474,7 @@ var init_builtins = __esm({
21463
21474
  "speech",
21464
21475
  "system_intents",
21465
21476
  "tasks",
21477
+ "theme",
21466
21478
  "wix_cashier",
21467
21479
  "wix_platform"
21468
21480
  ];
@@ -27291,6 +27303,7 @@ var init_capabilities_generated = __esm({
27291
27303
  "speech": ["availability", "recognizeOnce", "speak", "stop", "streamNext", "streamStart", "streamStop", "transcribeFile"],
27292
27304
  "system_intents": ["donate", "refreshShortcuts"],
27293
27305
  "tasks": ["backend", "create", "getPermissionStatus", "list", "remove", "requestPermission", "setCompleted"],
27306
+ "theme": ["applyOverlay", "clearOverlay", "surfaces"],
27294
27307
  "ui": ["alert", "snackbar"],
27295
27308
  "wix_cashier": ["isAvailable", "proceedToPayment"]
27296
27309
  };
@@ -27334,6 +27347,7 @@ var init_capabilities_generated = __esm({
27334
27347
  "speech": ["@himalaya/speech"],
27335
27348
  "system_intents": ["@himalaya/system-intents"],
27336
27349
  "tasks": ["@himalaya/tasks"],
27350
+ "theme": ["@himalaya/theme"],
27337
27351
  "ui": ["@himalaya/ui"],
27338
27352
  "webview": ["@himalaya/webview"],
27339
27353
  "wix_cashier": ["@himalaya/wix-cashier"],
@@ -27379,15 +27393,15 @@ var init_shell_capabilities_generated = __esm({
27379
27393
  appDir: "apps/himi-owner-lite",
27380
27394
  shared: false,
27381
27395
  extensible: true,
27382
- built: ["app_info", "biometrics", "camera", "clipboard", "live_activity", "local_database", "open_url", "presigned_upload", "push", "secure_storage", "share", "speech", "ui"],
27383
- serves: ["app_info", "biometrics", "camera", "clipboard", "live_activity", "local_database", "open_url", "presigned_upload", "push", "secure_storage", "share", "speech", "ui"]
27396
+ built: ["app_info", "biometrics", "camera", "clipboard", "live_activity", "local_database", "open_url", "presigned_upload", "push", "secure_storage", "share", "speech", "ui", "wix_platform"],
27397
+ serves: ["app_info", "biometrics", "camera", "clipboard", "live_activity", "local_database", "open_url", "presigned_upload", "push", "secure_storage", "share", "speech", "ui", "wix_platform"]
27384
27398
  },
27385
27399
  "player": {
27386
27400
  appDir: "apps/himi-player",
27387
27401
  shared: true,
27388
27402
  extensible: false,
27389
27403
  built: ["animation", "audio_record_background", "biometrics", "calendar", "calls", "camera", "clipboard", "contacts", "haptic", "iap", "location", "media_playback", "motion", "on_device_ai", "photos", "push", "speech"],
27390
- serves: ["animation", "app_info", "audio_record", "audio_record_background", "biometrics", "browser_auth", "calendar", "calls", "camera", "clipboard", "contacts", "file_picker", "files", "haptic", "himi_apps", "iap", "keyboard", "local_database", "location", "media_playback", "motion", "on_device_ai", "open_url", "pdf", "photos", "presigned_upload", "push", "release_control", "secure_storage", "share", "speaker_diarization", "speech", "stream", "ui", "wix_api", "wix_cashier", "wix_platform"]
27404
+ serves: ["animation", "app_info", "audio_record", "audio_record_background", "biometrics", "browser_auth", "calendar", "calls", "camera", "clipboard", "contacts", "file_picker", "files", "haptic", "himi_apps", "iap", "keyboard", "local_database", "location", "media_playback", "motion", "on_device_ai", "open_url", "pdf", "photos", "presigned_upload", "push", "release_control", "secure_storage", "share", "speaker_diarization", "speech", "stream", "theme", "ui", "wix_api", "wix_cashier", "wix_platform"]
27391
27405
  }
27392
27406
  };
27393
27407
  }
@@ -42293,7 +42307,7 @@ var init_pdf = __esm({
42293
42307
  var defineProperty = Object.defineProperty;
42294
42308
  var stringSlice = uncurryThis("".slice);
42295
42309
  var replace = uncurryThis("".replace);
42296
- var join82 = uncurryThis([].join);
42310
+ var join83 = uncurryThis([].join);
42297
42311
  var CONFIGURABLE_LENGTH = DESCRIPTORS && !fails(function() {
42298
42312
  return defineProperty(function() {
42299
42313
  }, "length", { value: 8 }).length !== 8;
@@ -42320,7 +42334,7 @@ var init_pdf = __esm({
42320
42334
  }
42321
42335
  var state = enforceInternalState(value);
42322
42336
  if (!hasOwn(state, "source")) {
42323
- state.source = join82(TEMPLATE, typeof name == "string" ? name : "");
42337
+ state.source = join83(TEMPLATE, typeof name == "string" ? name : "");
42324
42338
  }
42325
42339
  return value;
42326
42340
  };
@@ -44843,7 +44857,7 @@ var init_pdf = __esm({
44843
44857
  var charAt = uncurryThis("".charAt);
44844
44858
  var Uint8Array2 = globalThis2.Uint8Array;
44845
44859
  var $Array = globalThis2.Array;
44846
- var join82 = uncurryThis([].join);
44860
+ var join83 = uncurryThis([].join);
44847
44861
  var INCORRECT_BEHAVIOR_OR_DOESNT_EXISTS = !Uint8Array2 || !Uint8Array2.prototype.toBase64 || !(function() {
44848
44862
  try {
44849
44863
  var target = new Uint8Array2();
@@ -44889,7 +44903,7 @@ var init_pdf = __esm({
44889
44903
  result[written++] = "=";
44890
44904
  }
44891
44905
  }
44892
- return join82(result, "");
44906
+ return join83(result, "");
44893
44907
  }
44894
44908
  });
44895
44909
  },
@@ -44901,7 +44915,7 @@ var init_pdf = __esm({
44901
44915
  var anUint8Array = __webpack_require__3(4154);
44902
44916
  var notDetached = __webpack_require__3(5169);
44903
44917
  var numberToString2 = uncurryThis(1.1.toString);
44904
- var join82 = uncurryThis([].join);
44918
+ var join83 = uncurryThis([].join);
44905
44919
  var $Array = Array;
44906
44920
  var Uint8Array2 = globalThis2.Uint8Array;
44907
44921
  var INCORRECT_BEHAVIOR_OR_DOESNT_EXISTS = !Uint8Array2 || !Uint8Array2.prototype.toHex || !(function() {
@@ -44921,7 +44935,7 @@ var init_pdf = __esm({
44921
44935
  var hex2 = numberToString2(this[i2], 16);
44922
44936
  result[i2] = hex2.length === 1 ? "0" + hex2 : hex2;
44923
44937
  }
44924
- return join82(result, "");
44938
+ return join83(result, "");
44925
44939
  }
44926
44940
  });
44927
44941
  },
@@ -147709,6 +147723,25 @@ var init_studio_reel = __esm({
147709
147723
  }
147710
147724
  });
147711
147725
 
147726
+ // src/home-screen-id.ts
147727
+ import { readFileSync as readFileSync64 } from "node:fs";
147728
+ import { join as join56 } from "node:path";
147729
+ function homeScreenIdOf(dir) {
147730
+ let src;
147731
+ try {
147732
+ src = readFileSync64(join56(dir, "dev", "index.ts"), "utf8");
147733
+ } catch {
147734
+ return null;
147735
+ }
147736
+ const m2 = /^[ \t]*homeScreenId[ \t]*:[ \t]*(?:"((?:[^"\\\n]|\\.)*)"|'((?:[^'\\\n]|\\.)*)')/m.exec(src);
147737
+ const id = m2 ? m2[1] ?? m2[2] : void 0;
147738
+ return id && /^[A-Za-z0-9_.\-/{}]+$/.test(id) ? id : null;
147739
+ }
147740
+ var init_home_screen_id = __esm({
147741
+ "src/home-screen-id.ts"() {
147742
+ }
147743
+ });
147744
+
147712
147745
  // src/milestones.ts
147713
147746
  var milestones_exports = {};
147714
147747
  __export(milestones_exports, {
@@ -147764,20 +147797,9 @@ __export(milestones_exports, {
147764
147797
  });
147765
147798
  import { createHash as createHash32, randomUUID as randomUUID7 } from "node:crypto";
147766
147799
  import { spawn as spawn5 } from "node:child_process";
147767
- import { closeSync as closeSync5, existsSync as existsSync56, lstatSync as lstatSync19, readFileSync as readFileSync64, statSync as statSync15 } from "node:fs";
147800
+ import { closeSync as closeSync5, existsSync as existsSync56, lstatSync as lstatSync19, readFileSync as readFileSync65, statSync as statSync15 } from "node:fs";
147768
147801
  import { createServer as createServer4 } from "node:net";
147769
- import { basename as basename15, dirname as dirname32, isAbsolute as isAbsolute6, join as join56, relative as relative11, resolve as resolve48, sep as sep15 } from "node:path";
147770
- function homeScreenIdOf(dir) {
147771
- let src;
147772
- try {
147773
- src = readFileSync64(join56(dir, "dev", "index.ts"), "utf8");
147774
- } catch {
147775
- return null;
147776
- }
147777
- const m2 = /^[ \t]*homeScreenId[ \t]*:[ \t]*(?:"((?:[^"\\\n]|\\.)*)"|'((?:[^'\\\n]|\\.)*)')/m.exec(src);
147778
- const id = m2 ? m2[1] ?? m2[2] : void 0;
147779
- return id && /^[A-Za-z0-9_.\-/{}]+$/.test(id) ? id : null;
147780
- }
147802
+ import { basename as basename15, dirname as dirname32, isAbsolute as isAbsolute6, join as join57, relative as relative11, resolve as resolve48, sep as sep15 } from "node:path";
147781
147803
  function homeShotPath(dir, home) {
147782
147804
  const root = resolve48(dir);
147783
147805
  const base = resolve48(root, ".himi", "shots");
@@ -147888,7 +147910,7 @@ function autoPictureGate(dir) {
147888
147910
  }
147889
147911
  async function homePictureAtValidate(dir, opts) {
147890
147912
  if (!opts.ok) return { skipped: "validate found errors, so the picture was left as it is" };
147891
- if (!existsSync56(join56(dir, "himalaya.content.json"))) return { skipped: "not a content package" };
147913
+ if (!existsSync56(join57(dir, "himalaya.content.json"))) return { skipped: "not a content package" };
147892
147914
  const env = opts.env ?? process.env;
147893
147915
  if (ciSet(env)) return { skipped: "the CI environment variable is set" };
147894
147916
  if (env.NODE_TEST_CONTEXT) return { skipped: "running under `node --test`" };
@@ -148112,16 +148134,16 @@ function rememberDraft(dir, releaseId, m2) {
148112
148134
  ...m2.tokensHash ? { tokensHash: m2.tokensHash } : {},
148113
148135
  ...m2.appConfigHash ? { appConfigHash: m2.appConfigHash } : {}
148114
148136
  };
148115
- writeFileAtomic(join56(dir, LAST_DRAFT_FILE), `${JSON.stringify({ v: 1, releaseId, manifest })}
148137
+ writeFileAtomic(join57(dir, LAST_DRAFT_FILE), `${JSON.stringify({ v: 1, releaseId, manifest })}
148116
148138
  `);
148117
148139
  } catch {
148118
148140
  }
148119
148141
  }
148120
148142
  function lastDraft(dir) {
148121
148143
  try {
148122
- const file2 = join56(dir, LAST_DRAFT_FILE);
148144
+ const file2 = join57(dir, LAST_DRAFT_FILE);
148123
148145
  if (!lstatSync19(file2).isFile()) return null;
148124
- const r2 = JSON.parse(readFileSync64(file2, "utf8"));
148146
+ const r2 = JSON.parse(readFileSync65(file2, "utf8"));
148125
148147
  const m2 = r2.manifest;
148126
148148
  if (r2.v !== 1 || typeof r2.releaseId !== "string" || !m2 || typeof m2.screens !== "object" || !m2.screens || typeof m2.bundles !== "object" || !m2.bundles) return null;
148127
148149
  return { releaseId: r2.releaseId, manifest: m2 };
@@ -148172,7 +148194,7 @@ function recordInitSource(dir, opts = {}) {
148172
148194
  template: opts.template && TEMPLATE_NAME.test(opts.template) ? opts.template : null,
148173
148195
  ...opts.source ? { source: opts.source } : {}
148174
148196
  };
148175
- writeFileAtomic(join56(dir, INIT_SOURCE_FILE), `${JSON.stringify(record2, null, 2)}
148197
+ writeFileAtomic(join57(dir, INIT_SOURCE_FILE), `${JSON.stringify(record2, null, 2)}
148176
148198
  `);
148177
148199
  return true;
148178
148200
  } catch {
@@ -148180,10 +148202,10 @@ function recordInitSource(dir, opts = {}) {
148180
148202
  }
148181
148203
  }
148182
148204
  function readInitSource(dir) {
148183
- const file2 = join56(dir, INIT_SOURCE_FILE);
148205
+ const file2 = join57(dir, INIT_SOURCE_FILE);
148184
148206
  try {
148185
148207
  if (!lstatSync19(file2).isFile()) return null;
148186
- const r2 = JSON.parse(readFileSync64(file2, "utf8"));
148208
+ const r2 = JSON.parse(readFileSync65(file2, "utf8"));
148187
148209
  if (r2.v !== 1 || typeof r2.fingerprint !== "string" || !/^[0-9a-f]{64}$/.test(r2.fingerprint) || typeof r2.newestMs !== "number") return null;
148188
148210
  return {
148189
148211
  v: 1,
@@ -148252,10 +148274,10 @@ function homeShotForPostcard(dir, opts = {}) {
148252
148274
  function contentHomePictures(dir, home) {
148253
148275
  const out2 = [];
148254
148276
  const shot = homeShotPath(dir, home);
148255
- const hist = realDirIn(dir, HISTORY_DIR) ? join56(dir, HISTORY_DIR) : null;
148277
+ const hist = realDirIn(dir, HISTORY_DIR) ? join57(dir, HISTORY_DIR) : null;
148256
148278
  for (const r2 of recordedShots(dir, home)) {
148257
148279
  if (r2.state.state !== "content") continue;
148258
- for (const file2 of [shot, hist && join56(hist, `${r2.sha256}.png`)]) {
148280
+ for (const file2 of [shot, hist && join57(hist, `${r2.sha256}.png`)]) {
148259
148281
  try {
148260
148282
  if (!file2 || !lstatSync19(file2).isFile() || sha256Of2(file2) !== r2.sha256) continue;
148261
148283
  } catch {
@@ -148268,10 +148290,10 @@ function contentHomePictures(dir, home) {
148268
148290
  return out2;
148269
148291
  }
148270
148292
  function readInitWatch(dir) {
148271
- const file2 = join56(dir, INIT_WATCH_FILE);
148293
+ const file2 = join57(dir, INIT_WATCH_FILE);
148272
148294
  try {
148273
148295
  if (!lstatSync19(file2).isFile()) return null;
148274
- const r2 = JSON.parse(readFileSync64(file2, "utf8"));
148296
+ const r2 = JSON.parse(readFileSync65(file2, "utf8"));
148275
148297
  if (r2.v !== 1 || typeof r2.pid !== "number" || !Number.isInteger(r2.pid) || r2.pid < 1) return null;
148276
148298
  if (typeof r2.url !== "string" || !/^http:\/\/127\.0\.0\.1:\d+\//.test(r2.url) || typeof r2.board !== "string" || typeof r2.log !== "string" || typeof r2.startedAt !== "string") return null;
148277
148299
  if (r2.root !== runRootId(dir)) return null;
@@ -148296,14 +148318,14 @@ function liveWatchRunning(dir, isAlive = pidAlive, now) {
148296
148318
  }
148297
148319
  function watchReminder(dir, opts = {}) {
148298
148320
  try {
148299
- if (!existsSync56(join56(dir, "himalaya.content.json"))) return void 0;
148321
+ if (!existsSync56(join57(dir, "himalaya.content.json"))) return void 0;
148300
148322
  const nowDate = opts.now ?? /* @__PURE__ */ new Date();
148301
148323
  const live3 = liveWatch(dir, opts.isAlive, nowDate);
148302
148324
  const now = nowDate.getTime();
148303
- const file2 = join56(dir, REMINDERS_FILE);
148325
+ const file2 = join57(dir, REMINDERS_FILE);
148304
148326
  let last = Number.NaN;
148305
148327
  try {
148306
- if (lstatSync19(file2).isFile()) last = Date.parse(JSON.parse(readFileSync64(file2, "utf8")).watch ?? "");
148328
+ if (lstatSync19(file2).isFile()) last = Date.parse(JSON.parse(readFileSync65(file2, "utf8")).watch ?? "");
148307
148329
  } catch {
148308
148330
  }
148309
148331
  if (Number.isFinite(last) && now - last >= 0 && now - last < WATCH_REMINDER_EVERY_MS) return void 0;
@@ -148315,7 +148337,7 @@ function watchReminder(dir, opts = {}) {
148315
148337
  }
148316
148338
  const content = opts.content ?? displayPath(dir);
148317
148339
  const remote = readInitSource(dir)?.source === "remote" ? "init did not start it because this template came off the serve plane \u2014 once you have read its code, " : "";
148318
- return `${remote}start the live preview and leave it running: \`himi run --watch --content ${shellQuote(content)} &\` (the consent preflight first, if a worker or config calls Wix at boot) \u2014 it repaints on every save; the build board is ${shellQuote(join56(content, ".himi", "studio", "index.html"))}, or /__himi/studio/ on the preview`;
148340
+ return `${remote}start the live preview and leave it running: \`himi run --watch --content ${shellQuote(content)} &\` (the consent preflight first, if a worker or config calls Wix at boot) \u2014 it repaints on every save; the build board is ${shellQuote(join57(content, ".himi", "studio", "index.html"))}, or /__himi/studio/ on the preview`;
148319
148341
  } catch {
148320
148342
  return void 0;
148321
148343
  }
@@ -148381,7 +148403,7 @@ async function startWatchAtInit(dir, opts) {
148381
148403
  child.unref();
148382
148404
  if (!child.pid) return { skipped: "the live preview did not start (no process) \u2014 start it yourself: `himi run --watch --content <dir> &`", ...note };
148383
148405
  const record2 = { v: 1, pid: child.pid, root: runRootId(dir), url, board, log: WATCH_LOG, startedAt: now.toISOString() };
148384
- if (realDirIn(dir, ".himi")) writeFileAtomic(join56(dir, INIT_WATCH_FILE), `${JSON.stringify(record2, null, 2)}
148406
+ if (realDirIn(dir, ".himi")) writeFileAtomic(join57(dir, INIT_WATCH_FILE), `${JSON.stringify(record2, null, 2)}
148385
148407
  `);
148386
148408
  return { started: true, pid: child.pid, url, board, log: WATCH_LOG, ...note };
148387
148409
  } catch (e2) {
@@ -148396,7 +148418,7 @@ function watchRunning(w2) {
148396
148418
  function doNowBlock(opts) {
148397
148419
  const content = displayPath(opts.dir, opts.cwd);
148398
148420
  const home = opts.home ?? "<homeScreenId>";
148399
- const board = join56(content, ".himi", "studio", "index.html");
148421
+ const board = join57(content, ".himi", "studio", "index.html");
148400
148422
  const running = watchRunning(opts.watch);
148401
148423
  const who = running?.by === "init" ? "init started it" : "already running";
148402
148424
  const watch2 = running ? `${running.url} (${who}; the board: ${running.board}) \u2014 leave it running, and do not start another` : `\`himi run --watch${contentArg(content)} &\` and leave it running (the board: ${shellQuote(board)}, or /__himi/studio/ on the preview)`;
@@ -148415,7 +148437,7 @@ function writeHandoverReel(dir) {
148415
148437
  try {
148416
148438
  if (!realDirIn(dir, ".himi")) return { skipped: ".himi is not a real directory inside the package (a symlink?), so no making-of was written" };
148417
148439
  const { html } = buildReel(dir);
148418
- const file2 = join56(dir, ".himi", "making-of.html");
148440
+ const file2 = join57(dir, ".himi", "making-of.html");
148419
148441
  writeFileAtomic(file2, html);
148420
148442
  return { file: file2, hint: `hand ${basename15(file2)} to the owner at the handover \u2014 one self-contained page of their app taking shape; send it beside the preview link, never instead of it` };
148421
148443
  } catch (e2) {
@@ -148423,11 +148445,11 @@ function writeHandoverReel(dir) {
148423
148445
  }
148424
148446
  }
148425
148447
  function afterHandoverPostcard(dir, opts = {}) {
148426
- const file2 = join56(dir, ".himi", "making-of.html");
148448
+ const file2 = join57(dir, ".himi", "making-of.html");
148427
148449
  let fresh = false;
148428
148450
  try {
148429
148451
  const st2 = lstatSync19(file2);
148430
- fresh = st2.isFile() && !st2.isSymbolicLink() && st2.mtimeMs >= statSync15(join56(dir, ".himi", "progress.jsonl")).mtimeMs;
148452
+ fresh = st2.isFile() && !st2.isSymbolicLink() && st2.mtimeMs >= statSync15(join57(dir, ".himi", "progress.jsonl")).mtimeMs;
148431
148453
  } catch {
148432
148454
  fresh = false;
148433
148455
  }
@@ -148446,6 +148468,7 @@ var init_milestones = __esm({
148446
148468
  init_screen_state();
148447
148469
  init_shell_quote();
148448
148470
  init_studio_reel();
148471
+ init_home_screen_id();
148449
148472
  contentArg = (content) => content ? ` --content ${shellQuote(content)}` : "";
148450
148473
  CONSENT_PREFLIGHT = "Consent preflight before a template preview";
148451
148474
  CONSENT_PREFLIGHT_STEP = `consent preflight (skill: "${CONSENT_PREFLIGHT}"): if any worker or config can make Wix or external requests at boot, authorize or mock them first; if none can, go straight on`;
@@ -148458,13 +148481,13 @@ var init_milestones = __esm({
148458
148481
  STILL_BUILDING_MESSAGE = "Still building: here's the home screen now.";
148459
148482
  yourFirstLookMessage = (dir) => `First look at your app: ${appName(dir)}'s home screen, with your changes.`;
148460
148483
  homeCaveat = (dir, image) => homeStateCaveat(shotStateFor(dir, image));
148461
- LAST_DRAFT_FILE = join56(".himi", "last-draft.json");
148462
- INIT_SOURCE_FILE = join56(".himi", "init-source.json");
148484
+ LAST_DRAFT_FILE = join57(".himi", "last-draft.json");
148485
+ INIT_SOURCE_FILE = join57(".himi", "init-source.json");
148463
148486
  STARTING_POINT_REF = "starting-point";
148464
148487
  TEMPLATE_NAME = /^[A-Za-z0-9._-]{1,64}$/;
148465
- sha256Of2 = (file2) => createHash32("sha256").update(readFileSync64(file2)).digest("hex");
148488
+ sha256Of2 = (file2) => createHash32("sha256").update(readFileSync65(file2)).digest("hex");
148466
148489
  WATCH_REMINDER_EVERY_MS = 10 * 60 * 1e3;
148467
- REMINDERS_FILE = join56(".himi", "reminders.json");
148490
+ REMINDERS_FILE = join57(".himi", "reminders.json");
148468
148491
  pidAlive = (pid) => {
148469
148492
  try {
148470
148493
  process.kill(pid, 0);
@@ -148473,7 +148496,7 @@ var init_milestones = __esm({
148473
148496
  return e2.code === "EPERM";
148474
148497
  }
148475
148498
  };
148476
- INIT_WATCH_FILE = join56(".himi", "watch.json");
148499
+ INIT_WATCH_FILE = join57(".himi", "watch.json");
148477
148500
  INIT_WATCH_STARTING_MS = 5 * 60 * 1e3;
148478
148501
  INIT_WATCH_IDLE_MINUTES = 30;
148479
148502
  WATCH_LOG = ".himi/watch.log";
@@ -148509,8 +148532,8 @@ __export(template_sweep_exports, {
148509
148532
  sweepCopy: () => sweepCopy,
148510
148533
  sweepPairs: () => sweepPairs
148511
148534
  });
148512
- import { readFileSync as readFileSync65, writeFileSync as writeFileSync24 } from "node:fs";
148513
- import { join as join57 } from "node:path";
148535
+ import { readFileSync as readFileSync66, writeFileSync as writeFileSync24 } from "node:fs";
148536
+ import { join as join58 } from "node:path";
148514
148537
  import ts7 from "typescript";
148515
148538
  function isCopy(node, file2) {
148516
148539
  const parent = node.parent;
@@ -148551,7 +148574,7 @@ function sweepCopy(dir, pairs, dryRun) {
148551
148574
  const next = /* @__PURE__ */ new Map();
148552
148575
  const replaced = pairs.map(([from, to2]) => ({ from, to: to2, files: {} }));
148553
148576
  for (const f2 of files) {
148554
- const text9 = readFileSync65(join57(dir, f2), "utf8");
148577
+ const text9 = readFileSync66(join58(dir, f2), "utf8");
148555
148578
  if (!pairs.some(([from]) => text9.includes(from) || text9.includes(JSON.stringify(from).slice(1, -1)))) continue;
148556
148579
  const kind = f2.endsWith(".json") ? ts7.ScriptKind.JSON : f2.endsWith("x") ? ts7.ScriptKind.TSX : ts7.ScriptKind.TS;
148557
148580
  const sf2 = ts7.createSourceFile(f2, text9, ts7.ScriptTarget.Latest, true, kind);
@@ -148580,16 +148603,16 @@ function sweepCopy(dir, pairs, dryRun) {
148580
148603
  if (errors.length) throw new TrimRefusal(`the sweep would break ${f2} \u2014 nothing written: ${errors[0]}`);
148581
148604
  next.set(f2, out2);
148582
148605
  }
148583
- const dev = next.get("dev/index.ts") ?? readFileSync65(join57(dir, "dev", "index.ts"), "utf8");
148584
- const config = next.get("config.ts") ?? readFileSync65(join57(dir, "config.ts"), "utf8");
148606
+ const dev = next.get("dev/index.ts") ?? readFileSync66(join58(dir, "dev", "index.ts"), "utf8");
148607
+ const config = next.get("config.ts") ?? readFileSync66(join58(dir, "config.ts"), "utf8");
148585
148608
  try {
148586
148609
  parseApp(dev, config);
148587
148610
  } catch (e2) {
148588
148611
  throw new TrimRefusal(`the sweep would leave dev/index.ts or config.ts unparseable \u2014 nothing written: ${e2.message}`);
148589
148612
  }
148590
- if (!dryRun) for (const [f2, t2] of next) writeFileSync24(join57(dir, f2), t2);
148613
+ if (!dryRun) for (const [f2, t2] of next) writeFileSync24(join58(dir, f2), t2);
148591
148614
  const g2 = new RegExp(PLACEHOLDER.source, `${PLACEHOLDER.flags.replace("g", "")}g`);
148592
- const placeholdersLeft = all.reduce((n2, f2) => n2 + [...(next.get(f2) ?? readFileSync65(join57(dir, f2), "utf8")).matchAll(g2)].length, 0);
148615
+ const placeholdersLeft = all.reduce((n2, f2) => n2 + [...(next.get(f2) ?? readFileSync66(join58(dir, f2), "utf8")).matchAll(g2)].length, 0);
148593
148616
  return {
148594
148617
  ok: true,
148595
148618
  dryRun,
@@ -148606,7 +148629,7 @@ function sweepPairs(set, mapFile) {
148606
148629
  pairs.push([s2.slice(0, at2), s2.slice(at2 + 2)]);
148607
148630
  }
148608
148631
  if (mapFile) {
148609
- const map = JSON.parse(readFileSync65(mapFile, "utf8"));
148632
+ const map = JSON.parse(readFileSync66(mapFile, "utf8"));
148610
148633
  for (const [k2, v2] of Object.entries(map)) {
148611
148634
  if (typeof v2 !== "string") throw new TrimRefusal(`--map ${mapFile}: "${k2}" must map to a string`);
148612
148635
  pairs.push([k2, v2]);
@@ -148851,18 +148874,18 @@ __export(template_recommend_exports, {
148851
148874
  recommendTemplates: () => recommendTemplates,
148852
148875
  verticalsFromBook: () => verticalsFromBook
148853
148876
  });
148854
- import { existsSync as existsSync57, readFileSync as readFileSync66 } from "node:fs";
148855
- import { join as join58 } from "node:path";
148877
+ import { existsSync as existsSync57, readFileSync as readFileSync67 } from "node:fs";
148878
+ import { join as join59 } from "node:path";
148856
148879
  function verticalsFromBook(path2) {
148857
- const dir = existsSync57(join58(path2, "book.json")) || existsSync57(join58(path2, "provisioning.overlay.json")) ? path2 : join58(path2, ".himi", "business-book");
148858
- const overlay = join58(dir, "provisioning.overlay.json");
148880
+ const dir = existsSync57(join59(path2, "book.json")) || existsSync57(join59(path2, "provisioning.overlay.json")) ? path2 : join59(path2, ".himi", "business-book");
148881
+ const overlay = join59(dir, "provisioning.overlay.json");
148859
148882
  if (existsSync57(overlay)) {
148860
- const v2 = JSON.parse(readFileSync66(overlay, "utf8")).installedVerticals;
148883
+ const v2 = JSON.parse(readFileSync67(overlay, "utf8")).installedVerticals;
148861
148884
  if (Array.isArray(v2) && v2.length) return v2.filter((x2) => typeof x2 === "string");
148862
148885
  }
148863
- const book = join58(dir, "book.json");
148886
+ const book = join59(dir, "book.json");
148864
148887
  if (existsSync57(book)) {
148865
- const probes = JSON.parse(readFileSync66(book, "utf8")).probes;
148888
+ const probes = JSON.parse(readFileSync67(book, "utf8")).probes;
148866
148889
  if (Array.isArray(probes)) return installedFromProbes(probes);
148867
148890
  }
148868
148891
  throw new Error(`no book.json / provisioning.overlay.json under ${path2} \u2014 run \`himi site analyze\` first, or pass --verticals`);
@@ -148922,6 +148945,78 @@ var init_template_recommend = __esm({
148922
148945
  }
148923
148946
  });
148924
148947
 
148948
+ // ../../core/ts/src/nav-slots.ts
148949
+ function navPathError(raw) {
148950
+ if (raw === void 0 || raw === null || raw === "") return null;
148951
+ if (typeof raw !== "string") return `${JSON.stringify(raw)} is not a $service: binding ($service:<service>.<path>)`;
148952
+ const t2 = raw.trim();
148953
+ if (t2.startsWith("$item.")) return `"${raw}": $item. means nothing outside a list row \u2014 nav chrome binds $service:<service>.<path>`;
148954
+ if (!t2.startsWith("$service:")) return `"${raw}" is not a $service: binding ($service:<service>.<path>)`;
148955
+ const path2 = t2.slice("$service:".length);
148956
+ if (path2.includes("/")) return `"${raw}": the separator is a dot, not a slash ($service:<service>.<path>)`;
148957
+ if (!/^[^.\s]+(\.[^.\s]+)+$/.test(path2)) return `"${raw}" must be $service:<service>.<dot.path>`;
148958
+ return null;
148959
+ }
148960
+ function navConfigPathErrors(config) {
148961
+ const errors = [];
148962
+ const list = (v2) => Array.isArray(v2) ? v2.flatMap((x2, i2) => x2 !== null && typeof x2 === "object" ? [[x2, i2]] : []) : [];
148963
+ const obj3 = (v2) => v2 !== null && typeof v2 === "object" && !Array.isArray(v2) ? v2 : void 0;
148964
+ const check = (where, raw) => {
148965
+ const e2 = navPathError(raw);
148966
+ if (e2) errors.push(`${where}: ${e2}`);
148967
+ };
148968
+ const item = (where, it2) => {
148969
+ check(`${where}.hiddenPath`, it2.hiddenPath);
148970
+ check(`${where}.labelPath`, it2.labelPath);
148971
+ check(`${where}.iconPath`, it2.iconPath);
148972
+ check(`${where}.badge.valuePath`, obj3(it2.badge)?.valuePath);
148973
+ if (it2.hiddenUntilResolved && !it2.hiddenPath) {
148974
+ errors.push(`${where}: hiddenUntilResolved without hiddenPath can never resolve, so the item would never show`);
148975
+ }
148976
+ };
148977
+ const header = (where, h2) => {
148978
+ if (!h2) return;
148979
+ check(`${where}.titlePath`, h2.titlePath);
148980
+ check(`${where}.subtitlePath`, h2.subtitlePath);
148981
+ check(`${where}.imageUrlPath`, h2.imageUrlPath);
148982
+ };
148983
+ for (const [it2, i2] of list(obj3(config.tabBar)?.items)) item(`tabBar.items[${i2}] "${it2.id}"`, it2);
148984
+ for (const [it2, i2] of list(obj3(config.sidebar)?.items)) item(`sidebar.items[${i2}] "${it2.id}"`, it2);
148985
+ for (const [it2, i2] of list(obj3(config.drawer)?.items)) item(`drawer.items[${i2}] "${it2.id}"`, it2);
148986
+ for (const [it2, i2] of list(obj3(config.topBarDefault)?.actions)) item(`topBarDefault.actions[${i2}] "${it2.id}"`, it2);
148987
+ header("drawer.header", obj3(obj3(config.drawer)?.header));
148988
+ const sidebarHeader = obj3(obj3(config.sidebar)?.header);
148989
+ header("sidebar.header", sidebarHeader);
148990
+ for (const key2 of ["titlePath", "subtitlePath", "imageUrlPath"]) {
148991
+ if (sidebarHeader?.[key2]) {
148992
+ errors.push(`sidebar.header.${key2}: sidebar header bindings are not rendered yet (#4116) \u2014 bind drawer.header, which the sidebar shows`);
148993
+ }
148994
+ }
148995
+ const firstOf = (v2, skip = false) => list(v2).find(([it2]) => !skip || it2.role !== "section" && it2.role !== "note");
148996
+ const tabs = firstOf(obj3(config.tabBar)?.items);
148997
+ const kind = typeof config.navKind === "string" ? config.navKind : "";
148998
+ const rail = kind === "drawer" ? void 0 : firstOf(obj3(config.sidebar)?.items);
148999
+ const homes = [];
149000
+ if (tabs && !(kind === "sidebar" && rail)) homes.push(["tabBar.items", tabs]);
149001
+ if (rail && (kind === "sidebar" || kind === "responsive" || !tabs)) homes.push(["sidebar.items", rail]);
149002
+ if (!tabs && !rail) {
149003
+ const home = typeof config.homeScreenId === "string" && config.homeScreenId.length > 0 ? config.homeScreenId : void 0;
149004
+ const rows = list(obj3(config.drawer)?.items);
149005
+ const row = home !== void 0 ? rows.find(([it2]) => it2.screenId === home) : firstOf(obj3(config.drawer)?.items, true);
149006
+ homes.push(["drawer.items", row]);
149007
+ }
149008
+ for (const [where, first] of homes) {
149009
+ if (first && first[0].hiddenUntilResolved) {
149010
+ errors.push(`${where}[${first[1]}] "${first[0].id}": the home destination cannot be hiddenUntilResolved \u2014 the boot route, deep links and push taps root on it; gate a later item instead`);
149011
+ }
149012
+ }
149013
+ return errors;
149014
+ }
149015
+ var init_nav_slots = __esm({
149016
+ "../../core/ts/src/nav-slots.ts"() {
149017
+ }
149018
+ });
149019
+
148925
149020
  // src/nav-lint.ts
148926
149021
  var nav_lint_exports = {};
148927
149022
  __export(nav_lint_exports, {
@@ -149002,6 +149097,10 @@ async function navIssues(dir, strict) {
149002
149097
  `navigation.navKind: unknown value ${JSON.stringify(nav.navKind)} \u2014 the client coalesces an unrecognized kind to "bottomTabs" (invariant 6) rather than failing, so this silently selects chrome you did not ask for. Valid kinds: ${[...NAV_KINDS].sort().join(", ")}.`
149003
149098
  );
149004
149099
  }
149100
+ const servedHome = homeScreenIdOf(dir) ?? void 0;
149101
+ for (const message of navConfigPathErrors({ ...nav, homeScreenId: servedHome })) {
149102
+ error("nav-path-malformed", `navigation.${message}`);
149103
+ }
149005
149104
  const navKind = nav.navKind;
149006
149105
  const effectiveBottomTabs = navKind === void 0 || navKind === "bottomTabs" || typeof navKind !== "string" || !NAV_KINDS.has(navKind);
149007
149106
  const declaresOtherChrome = itemCount(nav.drawer) > 0 || itemCount(nav.sidebar) > 0;
@@ -149114,6 +149213,8 @@ var init_nav_lint = __esm({
149114
149213
  "src/nav-lint.ts"() {
149115
149214
  init_app_config_loader();
149116
149215
  init_provisioning_facts();
149216
+ init_nav_slots();
149217
+ init_home_screen_id();
149117
149218
  init_wix_push_links();
149118
149219
  NAVIGATION_KEYS = /* @__PURE__ */ new Set([
149119
149220
  "tabBar",
@@ -149169,8 +149270,8 @@ __export(eject_exports, {
149169
149270
  EJECTABLE: () => EJECTABLE,
149170
149271
  ejectModule: () => ejectModule
149171
149272
  });
149172
- import { existsSync as existsSync58, mkdirSync as mkdirSync28, readFileSync as readFileSync67, writeFileSync as writeFileSync25 } from "node:fs";
149173
- import { dirname as dirname33, join as join59, relative as relative12, resolve as resolve49, sep as sep16 } from "node:path";
149273
+ import { existsSync as existsSync58, mkdirSync as mkdirSync28, readFileSync as readFileSync68, writeFileSync as writeFileSync25 } from "node:fs";
149274
+ import { dirname as dirname33, join as join60, relative as relative12, resolve as resolve49, sep as sep16 } from "node:path";
149174
149275
  function locate(repoRootOrCwd, mod) {
149175
149276
  const inRepo = resolve49(repoRootOrCwd, `stdlib/flows/${mod}/src/index.ts`);
149176
149277
  if (existsSync58(inRepo)) return { path: inRepo, form: "source" };
@@ -149199,7 +149300,7 @@ function ejectModule(opts) {
149199
149300
  };
149200
149301
  }
149201
149302
  const ext = found.form === "source" ? "ts" : "mjs";
149202
- const target = join59(contentDir2, "tier5-src", "_ejected", `${mod}.${ext}`);
149303
+ const target = join60(contentDir2, "tier5-src", "_ejected", `${mod}.${ext}`);
149203
149304
  mkdirSync28(dirname33(target), { recursive: true });
149204
149305
  const banner = `// EJECTED from @wix/himalaya/${mod}. This app owns this file now.
149205
149306
  //
@@ -149213,7 +149314,7 @@ function ejectModule(opts) {
149213
149314
  // gate still applies. Ejecting buys layout and flow, never the floor.
149214
149315
 
149215
149316
  `;
149216
- const normalized = readFileSync67(found.path, "utf8").replace(
149317
+ const normalized = readFileSync68(found.path, "utf8").replace(
149217
149318
  /(["'])@himalaya\/([a-z0-9-]+(?:\/[a-z0-9-]+)?)\1/g,
149218
149319
  (_m, q2, sub) => `${q2}@wix/himalaya/${sub}${q2}`
149219
149320
  );
@@ -149221,7 +149322,7 @@ function ejectModule(opts) {
149221
149322
  const rewired = [];
149222
149323
  for (const f2 of files) {
149223
149324
  if (!existsSync58(f2)) continue;
149224
- const before = readFileSync67(f2, "utf8");
149325
+ const before = readFileSync68(f2, "utf8");
149225
149326
  let after = before;
149226
149327
  let rel = relative12(dirname33(f2), target).split(sep16).join("/").replace(/\.tsx?$/, ".js");
149227
149328
  if (!rel.startsWith(".")) rel = `./${rel}`;
@@ -149341,8 +149442,8 @@ var init_app_map = __esm({
149341
149442
  });
149342
149443
 
149343
149444
  // src/wix-writes.ts
149344
- import { existsSync as existsSync59, readFileSync as readFileSync68 } from "node:fs";
149345
- import { join as join60 } from "node:path";
149445
+ import { existsSync as existsSync59, readFileSync as readFileSync69 } from "node:fs";
149446
+ import { join as join61 } from "node:path";
149346
149447
  function isProvenRead(method, path2) {
149347
149448
  if (/[#\x00-\x1F\x7F]/.test(path2)) return false;
149348
149449
  const verb = method.toUpperCase();
@@ -149460,11 +149561,11 @@ function parseDataAccess(text9, from) {
149460
149561
  }
149461
149562
  function readDataAccess(dir) {
149462
149563
  for (const name of ["SPEC.md", "MOBILE-UX.md"]) {
149463
- const p2 = join60(dir, name);
149564
+ const p2 = join61(dir, name);
149464
149565
  if (!existsSync59(p2)) continue;
149465
149566
  let text9;
149466
149567
  try {
149467
- text9 = readFileSync68(p2, "utf8");
149568
+ text9 = readFileSync69(p2, "utf8");
149468
149569
  } catch {
149469
149570
  continue;
149470
149571
  }
@@ -149578,14 +149679,14 @@ __export(test_exports, {
149578
149679
  scopeDescriptors: () => scopeDescriptors,
149579
149680
  writeRecordedMocks: () => writeRecordedMocks
149580
149681
  });
149581
- import { existsSync as existsSync60, mkdirSync as mkdirSync29, readFileSync as readFileSync69, writeFileSync as writeFileSync26 } from "node:fs";
149582
- import { join as join61, resolve as resolve50 } from "node:path";
149682
+ import { existsSync as existsSync60, mkdirSync as mkdirSync29, readFileSync as readFileSync70, writeFileSync as writeFileSync26 } from "node:fs";
149683
+ import { join as join62, resolve as resolve50 } from "node:path";
149583
149684
  function readTestConfig(dir) {
149584
149685
  const p2 = resolve50(dir, TEST_CONFIG_FILE);
149585
149686
  if (!existsSync60(p2)) return {};
149586
149687
  let parsed;
149587
149688
  try {
149588
- parsed = JSON.parse(readFileSync69(p2, "utf8"));
149689
+ parsed = JSON.parse(readFileSync70(p2, "utf8"));
149589
149690
  } catch (e2) {
149590
149691
  throw new Error(`${TEST_CONFIG_FILE} is not valid JSON \u2014 ${e2.message}`);
149591
149692
  }
@@ -149632,7 +149733,7 @@ function readTestConfig(dir) {
149632
149733
  function readNetRules(path2) {
149633
149734
  let parsed;
149634
149735
  try {
149635
- parsed = JSON.parse(readFileSync69(path2, "utf8"));
149736
+ parsed = JSON.parse(readFileSync70(path2, "utf8"));
149636
149737
  } catch (e2) {
149637
149738
  throw new Error(`--net ${path2} could not be read as JSON \u2014 ${e2.message}`);
149638
149739
  }
@@ -149669,7 +149770,7 @@ function readCannedResponses() {
149669
149770
  ];
149670
149771
  for (const url of candidates) {
149671
149772
  try {
149672
- const parsed = JSON.parse(readFileSync69(url, "utf8"));
149773
+ const parsed = JSON.parse(readFileSync70(url, "utf8"));
149673
149774
  const byKey = {};
149674
149775
  for (const [k2, v2] of Object.entries(parsed)) {
149675
149776
  if (!k2.startsWith("//")) byKey[k2] = v2;
@@ -149759,8 +149860,8 @@ function writeRecordedMocks(opts) {
149759
149860
  mkdir: (p2) => mkdirSync29(p2, { recursive: true }),
149760
149861
  write: (p2, s2) => writeFileSync26(p2, s2)
149761
149862
  };
149762
- fs2.mkdir(join61(opts.dir, "dev"));
149763
- fs2.write(join61(opts.dir, "dev", "net-mocks.json"), JSON.stringify(opts.mocks, null, 2) + "\n");
149863
+ fs2.mkdir(join62(opts.dir, "dev"));
149864
+ fs2.write(join62(opts.dir, "dev", "net-mocks.json"), JSON.stringify(opts.mocks, null, 2) + "\n");
149764
149865
  return { ok: true, rules, to: "dev/net-mocks.json" };
149765
149866
  }
149766
149867
  function scopeDescriptors(descriptors, requestedIds, invalidScreens) {
@@ -150306,14 +150407,14 @@ var mobile_ux_lint_exports = {};
150306
150407
  __export(mobile_ux_lint_exports, {
150307
150408
  mobileUxIssues: () => mobileUxIssues
150308
150409
  });
150309
- import { existsSync as existsSync61, readFileSync as readFileSync70 } from "node:fs";
150310
- import { join as join62 } from "node:path";
150410
+ import { existsSync as existsSync61, readFileSync as readFileSync71 } from "node:fs";
150411
+ import { join as join63 } from "node:path";
150311
150412
  function mobileUxIssues(dir, strict) {
150312
- const file2 = join62(dir, "MOBILE-UX.md");
150413
+ const file2 = join63(dir, "MOBILE-UX.md");
150313
150414
  if (!existsSync61(file2)) return [];
150314
150415
  let text9;
150315
150416
  try {
150316
- text9 = readFileSync70(file2, "utf8");
150417
+ text9 = readFileSync71(file2, "utf8");
150317
150418
  } catch {
150318
150419
  return [];
150319
150420
  }
@@ -151994,8 +152095,8 @@ __export(functions_exports, {
151994
152095
  resolveFunctionsTarget: () => resolveFunctionsTarget,
151995
152096
  runRemoteFunctionOperation: () => runRemoteFunctionOperation
151996
152097
  });
151997
- import { readFileSync as readFileSync71, existsSync as existsSync62 } from "node:fs";
151998
- import { join as join63, resolve as resolve51 } from "node:path";
152098
+ import { readFileSync as readFileSync72, existsSync as existsSync62 } from "node:fs";
152099
+ import { join as join64, resolve as resolve51 } from "node:path";
151999
152100
  function resolveFunctionsTarget(input) {
152000
152101
  const explicitUrl = input.functionsUrl?.trim();
152001
152102
  if (explicitUrl) return { mode: "remote", baseUrl: explicitUrl };
@@ -152014,9 +152115,9 @@ async function loadFunctionsApp(dir) {
152014
152115
  }
152015
152116
  const sources = {};
152016
152117
  for (const definition of config.functions.functions) {
152017
- const source = [".ts", ".js", ".mts", ".mjs"].map((extension) => join63(loaded.dir, "functions", `${definition.name}${extension}`)).find(existsSync62);
152118
+ const source = [".ts", ".js", ".mts", ".mjs"].map((extension) => join64(loaded.dir, "functions", `${definition.name}${extension}`)).find(existsSync62);
152018
152119
  if (!source) throw new Error(`missing source for function ${definition.name}; expected functions/${definition.name}.ts`);
152019
- sources[definition.name] = readFileSync71(source, "utf8");
152120
+ sources[definition.name] = readFileSync72(source, "utf8");
152020
152121
  }
152021
152122
  const data = config.cms || config.data ? mergeDataResources(config) : void 0;
152022
152123
  const dataErrors = validateDataResources(data, loaded.name).filter((issue2) => issue2.severity === "error");
@@ -152204,9 +152305,9 @@ var init_cli_bridge = __esm({
152204
152305
  });
152205
152306
 
152206
152307
  // src/mcp/file-tools.ts
152207
- import { closeSync as closeSync6, constants as constants3, lstatSync as lstatSync20, mkdirSync as mkdirSync30, openSync as openSync5, readdirSync as readdirSync30, readFileSync as readFileSync72, realpathSync as realpathSync10, renameSync as renameSync11, rmSync as rmSync15, statSync as statSync16, writeSync, existsSync as existsSync63 } from "node:fs";
152308
+ import { closeSync as closeSync6, constants as constants3, lstatSync as lstatSync20, mkdirSync as mkdirSync30, openSync as openSync5, readdirSync as readdirSync30, readFileSync as readFileSync73, realpathSync as realpathSync10, renameSync as renameSync11, rmSync as rmSync15, statSync as statSync16, writeSync, existsSync as existsSync63 } from "node:fs";
152208
152309
  import { randomBytes as randomBytes4 } from "node:crypto";
152209
- import { dirname as dirname34, isAbsolute as isAbsolute7, join as join64, relative as relative13, resolve as resolve52, sep as sep17 } from "node:path";
152310
+ import { dirname as dirname34, isAbsolute as isAbsolute7, join as join65, relative as relative13, resolve as resolve52, sep as sep17 } from "node:path";
152210
152311
  import * as z2 from "zod";
152211
152312
  function within(root, p2) {
152212
152313
  return p2 === root || p2.startsWith(root.endsWith(sep17) ? root : root + sep17);
@@ -152220,12 +152321,12 @@ function realish(p2) {
152220
152321
  tail.unshift(cur.slice(up.length + (up.endsWith(sep17) ? 0 : 1)));
152221
152322
  cur = up;
152222
152323
  }
152223
- return join64(realpathSync10(cur), ...tail);
152324
+ return join65(realpathSync10(cur), ...tail);
152224
152325
  }
152225
152326
  function symlinkComponent(base, abs) {
152226
152327
  let cur = base;
152227
152328
  for (const part of relative13(base, abs).split(sep17).filter(Boolean)) {
152228
- cur = join64(cur, part);
152329
+ cur = join65(cur, part);
152229
152330
  try {
152230
152331
  if (lstatSync20(cur).isSymbolicLink()) return relative13(base, cur);
152231
152332
  } catch {
@@ -152252,7 +152353,7 @@ async function confinedAppDir(args, deps) {
152252
152353
  if (link) return refuse5("outside_workspace", `"${link}" is a symlink \u2014 the app folder must be a real folder in the workspace`);
152253
152354
  const rel = relative13(root, dir);
152254
152355
  if (rel && (isDeniedSourcePath(`${rel}/x`) || isDeniedSourcePath(`${rel.toLowerCase()}/x`))) return refuse5("denied", `"${rel}" is a folder this tool does not touch`);
152255
- if (!existsSync63(join64(dir, CONTENT_MARKER))) {
152356
+ if (!existsSync63(join65(dir, CONTENT_MARKER))) {
152256
152357
  return refuse5("not_an_app", `"${rel || "."}" is not an app folder (no ${CONTENT_MARKER}) \u2014 see himi_list_apps, or create one with himi_init`);
152257
152358
  }
152258
152359
  return dir;
@@ -152266,7 +152367,7 @@ function onDiskSpelling(abs) {
152266
152367
  tail.unshift(cur.slice(up.length + (up.endsWith(sep17) ? 0 : 1)));
152267
152368
  cur = up;
152268
152369
  }
152269
- return join64(realpathSync10.native(cur), ...tail);
152370
+ return join65(realpathSync10.native(cur), ...tail);
152270
152371
  }
152271
152372
  function denied(appDir3, abs) {
152272
152373
  const rel = relative13(appDir3, abs);
@@ -152295,7 +152396,7 @@ function writeNoFollow2(appDir3, abs, content) {
152295
152396
  mkdirSync30(dirname34(abs), { recursive: true });
152296
152397
  const before = symlinkComponent(appDir3, abs);
152297
152398
  if (before) throw new Error(`"${before}" became a symlink`);
152298
- const tmp = join64(dirname34(abs), `.himi-write-${process.pid}-${randomBytes4(6).toString("hex")}.tmp`);
152399
+ const tmp = join65(dirname34(abs), `.himi-write-${process.pid}-${randomBytes4(6).toString("hex")}.tmp`);
152299
152400
  const fd = openSync5(tmp, constants3.O_WRONLY | constants3.O_CREAT | constants3.O_EXCL | (constants3.O_NOFOLLOW ?? 0), 420);
152300
152401
  try {
152301
152402
  writeSync(fd, content);
@@ -152315,7 +152416,7 @@ function listFiles(appDir3) {
152315
152416
  const parentRel = relative13(appDir3, d2);
152316
152417
  for (const e2 of readdirSync30(d2, { withFileTypes: true }).sort((a2, b2) => a2.name.localeCompare(b2.name))) {
152317
152418
  if (e2.isSymbolicLink()) continue;
152318
- const p2 = join64(d2, e2.name);
152419
+ const p2 = join65(d2, e2.name);
152319
152420
  if (e2.isDirectory()) {
152320
152421
  if (isDeniedSourceDir(e2.name, parentRel) || isDeniedSourceDir(e2.name.toLowerCase(), parentRel)) continue;
152321
152422
  if (!walk2(p2)) return false;
@@ -152343,9 +152444,9 @@ function fileTools() {
152343
152444
  const root = resolve52(await d2.defaultDir());
152344
152445
  if (!existsSync63(root)) return ok({ ok: true, workspace: root, apps: [] });
152345
152446
  const apps = [];
152346
- if (existsSync63(join64(root, CONTENT_MARKER))) apps.push(".");
152447
+ if (existsSync63(join65(root, CONTENT_MARKER))) apps.push(".");
152347
152448
  for (const e2 of readdirSync30(root, { withFileTypes: true })) {
152348
- if (e2.isDirectory() && !e2.name.startsWith(".") && existsSync63(join64(root, e2.name, CONTENT_MARKER))) apps.push(e2.name);
152449
+ if (e2.isDirectory() && !e2.name.startsWith(".") && existsSync63(join65(root, e2.name, CONTENT_MARKER))) apps.push(e2.name);
152349
152450
  }
152350
152451
  return ok({ ok: true, workspace: root, apps: apps.sort() });
152351
152452
  }
@@ -152377,7 +152478,7 @@ function fileTools() {
152377
152478
  if (!existsSync63(p2) || !lstatSync20(p2).isFile()) return refuse5("not_found", `no file "${String(a2.path)}"`);
152378
152479
  const size = statSync16(p2).size;
152379
152480
  if (size > MAX_FILE_BYTES) return refuse5("too_large", `"${String(a2.path)}" is ${size} bytes \u2014 over the ${MAX_FILE_BYTES}-byte read limit`);
152380
- return ok({ ok: true, path: a2.path, bytes: size, content: readFileSync72(p2, "utf8") });
152481
+ return ok({ ok: true, path: a2.path, bytes: size, content: readFileSync73(p2, "utf8") });
152381
152482
  }
152382
152483
  },
152383
152484
  {
@@ -152989,7 +153090,7 @@ __export(server_exports, {
152989
153090
  protectStdout: () => protectStdout,
152990
153091
  startMcpServer: () => startMcpServer
152991
153092
  });
152992
- import { mkdirSync as mkdirSync31, readFileSync as readFileSync73 } from "node:fs";
153093
+ import { mkdirSync as mkdirSync31, readFileSync as readFileSync74 } from "node:fs";
152993
153094
  import { fileURLToPath as fileURLToPath22 } from "node:url";
152994
153095
  import { McpServer } from "@modelcontextprotocol/server";
152995
153096
  import { serveStdio, StdioServerTransport } from "@modelcontextprotocol/server/stdio";
@@ -153049,7 +153150,7 @@ async function startMcpServer(opts) {
153049
153150
  status: (dir) => previewStatus(dir, previewDeps),
153050
153151
  stop: (dir) => stopPreview(dir, previewDeps)
153051
153152
  },
153052
- readFile: (p2) => readFileSync73(p2),
153153
+ readFile: (p2) => readFileSync74(p2),
153053
153154
  login: createLoginSession({ ...defaultLoginDeps, selfCommand: previewDeps.selfCommand, ...opts.login }),
153054
153155
  ...opts.workspace ? { workspaceBoundary: opts.workspace } : {}
153055
153156
  };
@@ -153093,9 +153194,9 @@ __export(native_decode_exports, {
153093
153194
  runNativeDecode: () => runNativeDecode
153094
153195
  });
153095
153196
  import { execFileSync as execFileSync5, spawnSync as spawnSync2 } from "node:child_process";
153096
- import { existsSync as existsSync64, mkdtempSync as mkdtempSync2, readFileSync as readFileSync74, rmSync as rmSync16, writeFileSync as writeFileSync27 } from "node:fs";
153197
+ import { existsSync as existsSync64, mkdtempSync as mkdtempSync2, readFileSync as readFileSync75, rmSync as rmSync16, writeFileSync as writeFileSync27 } from "node:fs";
153097
153198
  import { tmpdir as tmpdir3 } from "node:os";
153098
- import { join as join65 } from "node:path";
153199
+ import { join as join66 } from "node:path";
153099
153200
  import { fileURLToPath as fileURLToPath23 } from "node:url";
153100
153201
  function nativeDecodePackageDir() {
153101
153202
  return fileURLToPath23(new URL("../../../core/runtime/ios/HimalayaCore/", import.meta.url));
@@ -153105,8 +153206,8 @@ function nativeDecodeAndroidHarnessDir() {
153105
153206
  }
153106
153207
  function nativeOracleShipped() {
153107
153208
  return {
153108
- ios: existsSync64(join65(nativeDecodePackageDir(), "Package.swift")),
153109
- android: existsSync64(join65(nativeDecodeAndroidHarnessDir(), "gradlew"))
153209
+ ios: existsSync64(join66(nativeDecodePackageDir(), "Package.swift")),
153210
+ android: existsSync64(join66(nativeDecodeAndroidHarnessDir(), "gradlew"))
153110
153211
  };
153111
153212
  }
153112
153213
  function detectNativeDecode(options = {}) {
@@ -153117,7 +153218,7 @@ function detectNativeDecode(options = {}) {
153117
153218
  return { platform: "ios", available: false, reason: `the iOS decoder oracle requires macOS (darwin); this host is ${hostPlatform}` };
153118
153219
  }
153119
153220
  if (!swiftAvailable) return { platform: "ios", available: false, reason: "swift is not on PATH" };
153120
- const packageAvailable = options.packageAvailable ?? existsSync64(join65(packageDir, "Package.swift"));
153221
+ const packageAvailable = options.packageAvailable ?? existsSync64(join66(packageDir, "Package.swift"));
153121
153222
  if (!packageAvailable) {
153122
153223
  return {
153123
153224
  platform: "ios",
@@ -153129,7 +153230,7 @@ function detectNativeDecode(options = {}) {
153129
153230
  }
153130
153231
  function localPropertiesSdk(harnessDir) {
153131
153232
  try {
153132
- const match = readFileSync74(join65(harnessDir, "local.properties"), "utf8").match(/^sdk\.dir\s*=\s*(.+)$/m);
153233
+ const match = readFileSync75(join66(harnessDir, "local.properties"), "utf8").match(/^sdk\.dir\s*=\s*(.+)$/m);
153133
153234
  return match?.[1]?.trim().replace(/\\([ :\\])/g, "$1") ?? null;
153134
153235
  } catch {
153135
153236
  return null;
@@ -153137,7 +153238,7 @@ function localPropertiesSdk(harnessDir) {
153137
153238
  }
153138
153239
  function detectAndroidNativeDecode(options = {}) {
153139
153240
  const harnessDir = options.harnessDir ?? nativeDecodeAndroidHarnessDir();
153140
- const gradlew = join65(harnessDir, "gradlew");
153241
+ const gradlew = join66(harnessDir, "gradlew");
153141
153242
  const gradlewAvailable = options.gradlewAvailable ?? existsSync64(gradlew);
153142
153243
  if (!gradlewAvailable) {
153143
153244
  return {
@@ -153220,14 +153321,14 @@ function parseNativeDecodeOutput(stdout, expectedScreenIds, platform = "ios") {
153220
153321
  return verdicts;
153221
153322
  }
153222
153323
  function runNativeDecode(options) {
153223
- const descriptorDir = mkdtempSync2(join65(tmpdir3(), "himi-native-decode-"));
153324
+ const descriptorDir = mkdtempSync2(join66(tmpdir3(), "himi-native-decode-"));
153224
153325
  const startedAt = Date.now();
153225
153326
  try {
153226
153327
  for (const descriptor of options.descriptors) {
153227
153328
  if (typeof descriptor.descriptorJson !== "string") {
153228
153329
  throw new Error(`native decode cannot judge ${descriptor.screenId}: the release builder did not return its exact baked JSON bytes`);
153229
153330
  }
153230
- writeFileSync27(join65(descriptorDir, `${encodeURIComponent(descriptor.screenId)}.json`), descriptor.descriptorJson);
153331
+ writeFileSync27(join66(descriptorDir, `${encodeURIComponent(descriptor.screenId)}.json`), descriptor.descriptorJson);
153231
153332
  }
153232
153333
  options.progress?.("building cached Swift oracle");
153233
153334
  execFileSync5("swift", ["build", "--package-path", options.packageDir, "--product", "himi-decode-oracle"], {
@@ -153239,7 +153340,7 @@ function runNativeDecode(options) {
153239
153340
  encoding: "utf8"
153240
153341
  }).trim();
153241
153342
  options.progress?.(`running real Swift decoder over ${options.descriptors.length} screen${options.descriptors.length === 1 ? "" : "s"}`);
153242
- const stdout = execFileSync5(join65(binPath, "himi-decode-oracle"), ["--dir", descriptorDir], {
153343
+ const stdout = execFileSync5(join66(binPath, "himi-decode-oracle"), ["--dir", descriptorDir], {
153243
153344
  stdio: ["ignore", "pipe", "pipe"],
153244
153345
  encoding: "utf8"
153245
153346
  });
@@ -153257,15 +153358,15 @@ function runNativeDecode(options) {
153257
153358
  }
153258
153359
  }
153259
153360
  function runAndroidNativeDecode(options) {
153260
- const descriptorDir = mkdtempSync2(join65(tmpdir3(), "himi-native-decode-android-"));
153261
- const outputPath = join65(descriptorDir, "verdicts.ndjson");
153361
+ const descriptorDir = mkdtempSync2(join66(tmpdir3(), "himi-native-decode-android-"));
153362
+ const outputPath = join66(descriptorDir, "verdicts.ndjson");
153262
153363
  const startedAt = Date.now();
153263
153364
  try {
153264
153365
  for (const descriptor of options.descriptors) {
153265
153366
  if (typeof descriptor.descriptorJson !== "string") {
153266
153367
  throw new Error(`native decode cannot judge ${descriptor.screenId}: the release builder did not return its exact baked JSON bytes`);
153267
153368
  }
153268
- writeFileSync27(join65(descriptorDir, `${encodeURIComponent(descriptor.screenId)}.json`), descriptor.descriptorJson);
153369
+ writeFileSync27(join66(descriptorDir, `${encodeURIComponent(descriptor.screenId)}.json`), descriptor.descriptorJson);
153269
153370
  }
153270
153371
  options.progress?.(`running real Kotlin decoder over ${options.descriptors.length} screen${options.descriptors.length === 1 ? "" : "s"}`);
153271
153372
  execFileSync5(options.gradlew, [
@@ -153280,7 +153381,7 @@ function runAndroidNativeDecode(options) {
153280
153381
  stdio: ["ignore", "ignore", "pipe"],
153281
153382
  encoding: "utf8"
153282
153383
  });
153283
- const stdout = readFileSync74(outputPath, "utf8");
153384
+ const stdout = readFileSync75(outputPath, "utf8");
153284
153385
  return {
153285
153386
  platform: "android",
153286
153387
  verdicts: parseNativeDecodeOutput(stdout, options.descriptors.map((descriptor) => descriptor.screenId), "android"),
@@ -153350,13 +153451,13 @@ __export(browser_authoring_exports, {
153350
153451
  });
153351
153452
  import { createServer as createServer5 } from "node:http";
153352
153453
  import { createHash as createHash35, randomBytes as randomBytes5 } from "node:crypto";
153353
- import { existsSync as existsSync65, readdirSync as readdirSync31, readFileSync as readFileSync75, realpathSync as realpathSync11, statSync as statSync17 } from "node:fs";
153354
- import { join as join66, posix as posix3, relative as relative14, sep as sep18 } from "node:path";
153454
+ import { existsSync as existsSync65, readdirSync as readdirSync31, readFileSync as readFileSync76, realpathSync as realpathSync11, statSync as statSync17 } from "node:fs";
153455
+ import { join as join67, posix as posix3, relative as relative14, sep as sep18 } from "node:path";
153355
153456
  function humanMs(ms2) {
153356
153457
  return ms2 < 1e3 ? `${ms2}ms` : `${Math.round(ms2 / 1e3)}s`;
153357
153458
  }
153358
153459
  function collectWorkerSources(tier5SrcDir, bundleName) {
153359
- const root = join66(tier5SrcDir, bundleName);
153460
+ const root = join67(tier5SrcDir, bundleName);
153360
153461
  const files = {};
153361
153462
  const visitedDirs = /* @__PURE__ */ new Set();
153362
153463
  const walk2 = (abs, rel) => {
@@ -153364,12 +153465,12 @@ function collectWorkerSources(tier5SrcDir, bundleName) {
153364
153465
  if (visitedDirs.has(real)) return;
153365
153466
  visitedDirs.add(real);
153366
153467
  for (const name of readdirSync31(abs).sort()) {
153367
- const childAbs = join66(abs, name);
153468
+ const childAbs = join67(abs, name);
153368
153469
  const childRel = posix3.join(rel, name);
153369
153470
  if (statSync17(childAbs).isDirectory()) {
153370
153471
  walk2(childAbs, childRel);
153371
153472
  } else if (/\.(ts|tsx|js|mjs|json)$/.test(name)) {
153372
- files[childRel] = readFileSync75(childAbs, "utf8");
153473
+ files[childRel] = readFileSync76(childAbs, "utf8");
153373
153474
  }
153374
153475
  }
153375
153476
  };
@@ -153390,20 +153491,20 @@ function collectRelativeSiblings(files, tier5SrcDir) {
153390
153491
  const spec = m2[1];
153391
153492
  const virtual = posix3.normalize(posix3.join(dir, spec));
153392
153493
  if (!virtual.startsWith("/tier5-src/")) continue;
153393
- const onDisk = join66(tier5SrcDir, virtual.slice("/tier5-src/".length));
153494
+ const onDisk = join67(tier5SrcDir, virtual.slice("/tier5-src/".length));
153394
153495
  const candidates = [
153395
153496
  onDisk,
153396
153497
  `${onDisk}.ts`,
153397
153498
  `${onDisk}.js`,
153398
153499
  onDisk.replace(/\.js$/, ".ts"),
153399
- join66(onDisk, "index.ts"),
153400
- join66(onDisk, "index.js")
153500
+ join67(onDisk, "index.ts"),
153501
+ join67(onDisk, "index.js")
153401
153502
  ];
153402
153503
  for (const abs of candidates) {
153403
153504
  if (!existsSync65(abs) || statSync17(abs).isDirectory()) continue;
153404
153505
  const key2 = `/tier5-src/${relative14(tier5SrcDir, abs).split(sep18).join(posix3.sep)}`;
153405
153506
  if (key2 in files) break;
153406
- files[key2] = readFileSync75(abs, "utf8");
153507
+ files[key2] = readFileSync76(abs, "utf8");
153407
153508
  queue.push(key2);
153408
153509
  break;
153409
153510
  }
@@ -153438,7 +153539,7 @@ function collectSdkModules(files, resolveSubpath) {
153438
153539
  function sdkSubpathReader(resolve61) {
153439
153540
  return (sub) => {
153440
153541
  try {
153441
- return readFileSync75(resolve61(`@wix/himalaya/${sub}`), "utf8");
153542
+ return readFileSync76(resolve61(`@wix/himalaya/${sub}`), "utf8");
153442
153543
  } catch {
153443
153544
  return null;
153444
153545
  }
@@ -153610,8 +153711,8 @@ __export(coverage_exports, {
153610
153711
  suppressedNativeKeys: () => suppressedNativeKeys,
153611
153712
  trendAndStore: () => trendAndStore
153612
153713
  });
153613
- import { existsSync as existsSync66, mkdirSync as mkdirSync32, readFileSync as readFileSync76, writeFileSync as writeFileSync28 } from "node:fs";
153614
- import { dirname as dirname35, join as join67 } from "node:path";
153714
+ import { existsSync as existsSync66, mkdirSync as mkdirSync32, readFileSync as readFileSync77, writeFileSync as writeFileSync28 } from "node:fs";
153715
+ import { dirname as dirname35, join as join68 } from "node:path";
153615
153716
  function suppressedNativeKeys(oracle) {
153616
153717
  return [...oracle.ios ? [] : ["native-decode|ios"], ...oracle.android ? [] : ["native-decode|android"]];
153617
153718
  }
@@ -153791,11 +153892,11 @@ function assembleLedger(r2, options = {}) {
153791
153892
  return out2;
153792
153893
  }
153793
153894
  function trendAndStore(dir, entries, suppressed) {
153794
- const p2 = join67(dir, LEDGER_FILE);
153895
+ const p2 = join68(dir, LEDGER_FILE);
153795
153896
  let previous = null;
153796
153897
  try {
153797
153898
  if (existsSync66(p2)) {
153798
- const parsed = JSON.parse(readFileSync76(p2, "utf8"));
153899
+ const parsed = JSON.parse(readFileSync77(p2, "utf8"));
153799
153900
  if (Array.isArray(parsed.keys)) previous = parsed.keys.filter((k2) => typeof k2 === "string");
153800
153901
  }
153801
153902
  } catch {
@@ -153834,11 +153935,11 @@ function formatLedger(entries, trend) {
153834
153935
  return out2.join("\n");
153835
153936
  }
153836
153937
  function diffAndStoreObservations(dir, current) {
153837
- const p2 = join67(dir, OBS_FILE);
153938
+ const p2 = join68(dir, OBS_FILE);
153838
153939
  let previous = null;
153839
153940
  try {
153840
153941
  if (existsSync66(p2)) {
153841
- const parsed = JSON.parse(readFileSync76(p2, "utf8"));
153942
+ const parsed = JSON.parse(readFileSync77(p2, "utf8"));
153842
153943
  if (parsed.screens && typeof parsed.screens === "object" && !Array.isArray(parsed.screens) && Object.values(parsed.screens).every(
153843
153944
  (v2) => Array.isArray(v2) && v2.every((l2) => typeof l2 === "string")
153844
153945
  )) {
@@ -153887,8 +153988,8 @@ var LEDGER_FILE, OBS_FILE;
153887
153988
  var init_coverage = __esm({
153888
153989
  "src/coverage.ts"() {
153889
153990
  init_native_decode();
153890
- LEDGER_FILE = join67(".himi", "test-ledger.json");
153891
- OBS_FILE = join67(".himi", "test-observations.json");
153991
+ LEDGER_FILE = join68(".himi", "test-ledger.json");
153992
+ OBS_FILE = join68(".himi", "test-observations.json");
153892
153993
  }
153893
153994
  });
153894
153995
 
@@ -153899,8 +154000,8 @@ __export(design_kits_exports, {
153899
154000
  kitsDir: () => kitsDir,
153900
154001
  listKits: () => listKits2
153901
154002
  });
153902
- import { existsSync as existsSync67, readFileSync as readFileSync77, readdirSync as readdirSync32 } from "node:fs";
153903
- import { join as join68, basename as basename16 } from "node:path";
154003
+ import { existsSync as existsSync67, readFileSync as readFileSync78, readdirSync as readdirSync32 } from "node:fs";
154004
+ import { join as join69, basename as basename16 } from "node:path";
153904
154005
  import { fileURLToPath as fileURLToPath24 } from "node:url";
153905
154006
  function kitsDir() {
153906
154007
  return KIT_DIR_CANDIDATES.find((p2) => existsSync67(p2));
@@ -153927,7 +154028,7 @@ In a published @wix/himalaya-cli this is a packaging bug \u2014 the kits should
153927
154028
  if (!kits.includes(name)) {
153928
154029
  return { ok: false, kit: name, kits, problems: [`no design kit named "${name}". Available: ${kits.join(", ")}`] };
153929
154030
  }
153930
- const raw = readFileSync77(join68(dir, `${name}.json`), "utf8");
154031
+ const raw = readFileSync78(join69(dir, `${name}.json`), "utf8");
153931
154032
  let parsed;
153932
154033
  try {
153933
154034
  parsed = JSON.parse(raw);
@@ -153951,9 +154052,9 @@ var init_design_kits = __esm({
153951
154052
  "src/design-kits.ts"() {
153952
154053
  KIT_DIR_CANDIDATES = [
153953
154054
  // in-repo: tools/himi-cli/src/design-kits.ts → <repo>/stdlib/design-kits/
153954
- join68(fileURLToPath24(new URL("../../..", import.meta.url)), "stdlib", "design-kits"),
154055
+ join69(fileURLToPath24(new URL("../../..", import.meta.url)), "stdlib", "design-kits"),
153955
154056
  // published CLI: <pkg>/dist/cli.mjs → <pkg>/stdlib/design-kits/
153956
- join68(fileURLToPath24(new URL("..", import.meta.url)), "stdlib", "design-kits")
154057
+ join69(fileURLToPath24(new URL("..", import.meta.url)), "stdlib", "design-kits")
153957
154058
  ];
153958
154059
  }
153959
154060
  });
@@ -153967,11 +154068,11 @@ __export(assets_exports, {
153967
154068
  removeAssetPayload: () => removeAssetPayload,
153968
154069
  verifyReport: () => verifyReport
153969
154070
  });
153970
- import { readFileSync as readFileSync78 } from "node:fs";
154071
+ import { readFileSync as readFileSync79 } from "node:fs";
153971
154072
  import { basename as basename17 } from "node:path";
153972
154073
  function declaredAssets(dir) {
153973
154074
  return collectAssets(dir).map((a2) => {
153974
- const bytes2 = readFileSync78(a2.path);
154075
+ const bytes2 = readFileSync79(a2.path);
153975
154076
  return {
153976
154077
  name: a2.name,
153977
154078
  sha256: assetSha256(bytes2),
@@ -154048,7 +154149,7 @@ function verifyReport(dir, app, manifest) {
154048
154149
  };
154049
154150
  }
154050
154151
  function addAssetPayload(manifest, filePath, opts) {
154051
- const bytes2 = readFileSync78(filePath);
154152
+ const bytes2 = readFileSync79(filePath);
154052
154153
  const name = opts.name ?? basename17(filePath);
154053
154154
  const sha2566 = assetSha256(bytes2);
154054
154155
  const record2 = {
@@ -155803,25 +155904,25 @@ var init_preview_assets_generated = __esm({
155803
155904
  "../../packages/serve/src/preview-assets.generated.ts"() {
155804
155905
  init_preview_assets_format();
155805
155906
  PREVIEW_ASSET_MANIFEST = [
155806
- { key: "assets/index-BIlXpj1h.js", contentType: "application/javascript; charset=utf-8", offset: 8, length: 1257735, sha256: "6d808a71fd48dfe402d9cdace4e2a6ce1a8d686068d1812eb08ef418f2284533" },
155807
- { key: "assets/pdf-DKCzctsR.js", contentType: "application/javascript; charset=utf-8", offset: 1257743, length: 488199, sha256: "580e24333dcc9b041e8720577be50a8da5a50800f4d5e948e28edf9c8dd7d9e0" },
155808
- { key: "assets/pdf.worker.min-BQa_JDET.js", contentType: "application/javascript; charset=utf-8", offset: 1745942, length: 73, sha256: "41bcfda4f3c8c0a81c785ea87c69afc8e7d0ed8c333324aee94c273d881bb6aa" },
155809
- { key: "assets/pdf.worker.min-BmVo14Nb.mjs", contentType: "application/javascript; charset=utf-8", offset: 1746015, length: 1317034, sha256: "a33cfe728c584fdba4fcc1fd54bcdc2f9f2f13889ddbb5b2bd1d0f8cbe49b84e" },
155810
- { key: "assets/pdfDocument-DCdoA9nd.js", contentType: "application/javascript; charset=utf-8", offset: 3063049, length: 2858, sha256: "ea99eb8d79920cd5c7ca2c83faa495c5287ff04d1c96bbfe3d034b8925075ad2" },
155811
- { key: "fonts/Roboto-LICENSE.txt", contentType: "application/octet-stream", offset: 3065907, length: 4610, sha256: "994062dd7af4186a739de55dd9e151c63b6301f8e2cbafc608d35c2e87da0cd2" },
155812
- { key: "fonts/Roboto-Variable.ttf", contentType: "font/ttf", offset: 3070517, length: 488584, sha256: "d7598e12c5dbef095ff8272cfc55da0250bd07fbdecbac8a530b9b277872a134" },
155813
- { key: "fonts/WixMadeforDisplay-Bold.ttf", contentType: "font/ttf", offset: 3559101, length: 90924, sha256: "ec4c7d63772d980d6e147b2df6215fd2737e4b04cebe0cf7e11dc695fb63cdcf" },
155814
- { key: "fonts/WixMadeforDisplay-ExtraBold.ttf", contentType: "font/ttf", offset: 3650025, length: 90984, sha256: "bf4c16a2774edd38a921edf3099469866cd74c094fd596f3fa4e81f54a04dfaa" },
155815
- { key: "fonts/WixMadeforDisplay-Medium.ttf", contentType: "font/ttf", offset: 3741009, length: 90980, sha256: "368faca44fb9f7207e4af784e94750b1ee59c1098b8689e0f4a918926f244fb5" },
155816
- { key: "fonts/WixMadeforDisplay-Regular.ttf", contentType: "font/ttf", offset: 3831989, length: 90872, sha256: "97ed8f1a6772abe26e3d8af5cecfc4b02faa94497d585b0398b5053b739a70c1" },
155817
- { key: "fonts/WixMadeforDisplay-SemiBold.ttf", contentType: "font/ttf", offset: 3922861, length: 90980, sha256: "642feab8a48ddf6c7a89d7c2a7c0edfa0e6e773f671287e460e222703563191e" },
155818
- { key: "fonts/WixMadeforText-Bold.ttf", contentType: "font/ttf", offset: 4013841, length: 108636, sha256: "37c179b4fefb63ea9637322b84583a2df53aa226c150294eea1675c14b1b8e29" },
155819
- { key: "fonts/WixMadeforText-ExtraBold.ttf", contentType: "font/ttf", offset: 4122477, length: 109084, sha256: "62e2fe4718129f36ecdb0ae4de385bd6b81ecc876146447167c6c140fad699a9" },
155820
- { key: "fonts/WixMadeforText-Medium.ttf", contentType: "font/ttf", offset: 4231561, length: 109048, sha256: "4ecf270136af928612c76fe4ebade91d8156975e5ea4c0cf9225501dd1788e02" },
155821
- { key: "fonts/WixMadeforText-Regular.ttf", contentType: "font/ttf", offset: 4340609, length: 107700, sha256: "dee56f09fd3efc127c1ea95557edc74110c1460a46287da36e0af25efd341ef5" },
155822
- { key: "fonts/WixMadeforText-SemiBold.ttf", contentType: "font/ttf", offset: 4448309, length: 88108, sha256: "dced97a77624bc5f8b1ae65850360908297f4588e09feb6f22792d29dc7e765b" },
155823
- { key: "index.html", contentType: "text/html; charset=utf-8", offset: 4536417, length: 4947, sha256: "31a68c99003ad579052a0dccccfa5d861146fe209bbc6ea0c264162026d7b35f" },
155824
- { key: "t5-frame.html", contentType: "text/html; charset=utf-8", offset: 4541364, length: 17344, sha256: "d057298d75e7373e5e2c4d11b7d1bcbea88e03af555ba63d97641c78509c58e4" }
155907
+ { key: "assets/index-CoUR7qoz.js", contentType: "application/javascript; charset=utf-8", offset: 8, length: 1266053, sha256: "25b34055136947d515d6057238d0dafc333d6009da327f01b74e06c4e462dd95" },
155908
+ { key: "assets/pdf-BChnv3CJ.js", contentType: "application/javascript; charset=utf-8", offset: 1266061, length: 488199, sha256: "c6dab79264bcb608690696b385acfefd82a0e9734edd29763d1a0d12640f2487" },
155909
+ { key: "assets/pdf.worker.min-BQa_JDET.js", contentType: "application/javascript; charset=utf-8", offset: 1754260, length: 73, sha256: "41bcfda4f3c8c0a81c785ea87c69afc8e7d0ed8c333324aee94c273d881bb6aa" },
155910
+ { key: "assets/pdf.worker.min-BmVo14Nb.mjs", contentType: "application/javascript; charset=utf-8", offset: 1754333, length: 1317034, sha256: "a33cfe728c584fdba4fcc1fd54bcdc2f9f2f13889ddbb5b2bd1d0f8cbe49b84e" },
155911
+ { key: "assets/pdfDocument-BEWILVUm.js", contentType: "application/javascript; charset=utf-8", offset: 3071367, length: 2858, sha256: "e99ccba3f1701bb444031ce7b5797d5e5bd1fb3a8ff9cbdb89eca78eaadbdddd" },
155912
+ { key: "fonts/Roboto-LICENSE.txt", contentType: "application/octet-stream", offset: 3074225, length: 4610, sha256: "994062dd7af4186a739de55dd9e151c63b6301f8e2cbafc608d35c2e87da0cd2" },
155913
+ { key: "fonts/Roboto-Variable.ttf", contentType: "font/ttf", offset: 3078835, length: 488584, sha256: "d7598e12c5dbef095ff8272cfc55da0250bd07fbdecbac8a530b9b277872a134" },
155914
+ { key: "fonts/WixMadeforDisplay-Bold.ttf", contentType: "font/ttf", offset: 3567419, length: 90924, sha256: "ec4c7d63772d980d6e147b2df6215fd2737e4b04cebe0cf7e11dc695fb63cdcf" },
155915
+ { key: "fonts/WixMadeforDisplay-ExtraBold.ttf", contentType: "font/ttf", offset: 3658343, length: 90984, sha256: "bf4c16a2774edd38a921edf3099469866cd74c094fd596f3fa4e81f54a04dfaa" },
155916
+ { key: "fonts/WixMadeforDisplay-Medium.ttf", contentType: "font/ttf", offset: 3749327, length: 90980, sha256: "368faca44fb9f7207e4af784e94750b1ee59c1098b8689e0f4a918926f244fb5" },
155917
+ { key: "fonts/WixMadeforDisplay-Regular.ttf", contentType: "font/ttf", offset: 3840307, length: 90872, sha256: "97ed8f1a6772abe26e3d8af5cecfc4b02faa94497d585b0398b5053b739a70c1" },
155918
+ { key: "fonts/WixMadeforDisplay-SemiBold.ttf", contentType: "font/ttf", offset: 3931179, length: 90980, sha256: "642feab8a48ddf6c7a89d7c2a7c0edfa0e6e773f671287e460e222703563191e" },
155919
+ { key: "fonts/WixMadeforText-Bold.ttf", contentType: "font/ttf", offset: 4022159, length: 108636, sha256: "37c179b4fefb63ea9637322b84583a2df53aa226c150294eea1675c14b1b8e29" },
155920
+ { key: "fonts/WixMadeforText-ExtraBold.ttf", contentType: "font/ttf", offset: 4130795, length: 109084, sha256: "62e2fe4718129f36ecdb0ae4de385bd6b81ecc876146447167c6c140fad699a9" },
155921
+ { key: "fonts/WixMadeforText-Medium.ttf", contentType: "font/ttf", offset: 4239879, length: 109048, sha256: "4ecf270136af928612c76fe4ebade91d8156975e5ea4c0cf9225501dd1788e02" },
155922
+ { key: "fonts/WixMadeforText-Regular.ttf", contentType: "font/ttf", offset: 4348927, length: 107700, sha256: "dee56f09fd3efc127c1ea95557edc74110c1460a46287da36e0af25efd341ef5" },
155923
+ { key: "fonts/WixMadeforText-SemiBold.ttf", contentType: "font/ttf", offset: 4456627, length: 88108, sha256: "dced97a77624bc5f8b1ae65850360908297f4588e09feb6f22792d29dc7e765b" },
155924
+ { key: "index.html", contentType: "text/html; charset=utf-8", offset: 4544735, length: 4947, sha256: "2b60c2689097b5247dae440b6ad4d7816290fc6014b2d4000cf7c279e9fa2cd6" },
155925
+ { key: "t5-frame.html", contentType: "text/html; charset=utf-8", offset: 4549682, length: 17344, sha256: "d057298d75e7373e5e2c4d11b7d1bcbea88e03af555ba63d97641c78509c58e4" }
155825
155926
  ];
155826
155927
  }
155827
155928
  });
@@ -155839,9 +155940,9 @@ __export(run_exports, {
155839
155940
  runPackage: () => runPackage,
155840
155941
  withoutProdServe: () => withoutProdServe
155841
155942
  });
155842
- import { cpSync as cpSync2, existsSync as existsSync68, mkdirSync as mkdirSync33, mkdtempSync as mkdtempSync3, readFileSync as readFileSync79, rmSync as rmSync17, statSync as statSync18 } from "node:fs";
155943
+ import { cpSync as cpSync2, existsSync as existsSync68, mkdirSync as mkdirSync33, mkdtempSync as mkdtempSync3, readFileSync as readFileSync80, rmSync as rmSync17, statSync as statSync18 } from "node:fs";
155843
155944
  import { networkInterfaces as osNetworkInterfaces, tmpdir as tmpdir4 } from "node:os";
155844
- import { dirname as dirname36, join as join69 } from "node:path";
155945
+ import { dirname as dirname36, join as join70 } from "node:path";
155845
155946
  import { fileURLToPath as fileURLToPath25 } from "node:url";
155846
155947
  function makePackageRunHandler(opts) {
155847
155948
  const store = new FileReleaseStore(opts.releaseRoot);
@@ -155870,7 +155971,7 @@ async function fetchBytes(url) {
155870
155971
  async function resolvePackage(source, workDir) {
155871
155972
  const isUrl2 = /^https?:\/\//i.test(source);
155872
155973
  if (!isUrl2 && existsSync68(source) && statSync18(source).isDirectory()) {
155873
- const appDirManifest = join69(source, "release-manifest.json");
155974
+ const appDirManifest = join70(source, "release-manifest.json");
155874
155975
  if (existsSync68(appDirManifest)) {
155875
155976
  const opened2 = openPackageDir(source);
155876
155977
  if (!opened2.validation.ok) {
@@ -155880,9 +155981,9 @@ async function resolvePackage(source, workDir) {
155880
155981
  const app2 = opened2.header?.app ?? opened2.manifest?.app;
155881
155982
  if (!app2) throw new Error(`${source} has no app id (no himi-package.json and no manifest.app)`);
155882
155983
  if (!isSafeAppId(app2)) throw new Error(`${source} declares an unsafe app id ${JSON.stringify(app2)} \u2014 refusing to open it`);
155883
- const root2 = workDir ?? mkdtempSync3(join69(tmpdir4(), "himi-run-"));
155884
- const target = join69(root2, app2);
155885
- if (join69(source) !== target) {
155984
+ const root2 = workDir ?? mkdtempSync3(join70(tmpdir4(), "himi-run-"));
155985
+ const target = join70(root2, app2);
155986
+ if (join70(source) !== target) {
155886
155987
  mkdirSync33(root2, { recursive: true });
155887
155988
  rmSync17(target, { recursive: true, force: true });
155888
155989
  cpSync2(source, target, { recursive: true });
@@ -155899,8 +156000,8 @@ async function resolvePackage(source, workDir) {
155899
156000
  }
155900
156001
  throw new Error(`${source} is a directory but has no release-manifest.json \u2014 is it a package?`);
155901
156002
  }
155902
- const bytes2 = isUrl2 ? await fetchBytes(source) : readFileSync79(source);
155903
- const root = workDir ?? mkdtempSync3(join69(tmpdir4(), "himi-run-"));
156003
+ const bytes2 = isUrl2 ? await fetchBytes(source) : readFileSync80(source);
156004
+ const root = workDir ?? mkdtempSync3(join70(tmpdir4(), "himi-run-"));
155904
156005
  const { app, appDir: appDir3 } = unpackTo(bytes2, root);
155905
156006
  const opened = openPackageDir(appDir3);
155906
156007
  if (!opened.validation.ok) {
@@ -155923,14 +156024,14 @@ async function loadPreviewAssets() {
155923
156024
  const mod = await Promise.resolve().then(() => (init_preview_assets_generated(), preview_assets_generated_exports));
155924
156025
  const here = dirname36(fileURLToPath25(import.meta.url));
155925
156026
  const candidates = [
155926
- join69(here, "preview-assets.generated.bin"),
156027
+ join70(here, "preview-assets.generated.bin"),
155927
156028
  // published: copied next to the bundled CLI
155928
- join69(here, "../../../packages/serve/src/preview-assets.generated.bin")
156029
+ join70(here, "../../../packages/serve/src/preview-assets.generated.bin")
155929
156030
  // in-repo checkout
155930
156031
  ];
155931
156032
  for (const path2 of candidates) {
155932
156033
  if (!existsSync68(path2)) continue;
155933
- const blob = readFileSync79(path2);
156034
+ const blob = readFileSync80(path2);
155934
156035
  return mod.assemblePreviewAssetsFromBlob(new Uint8Array(blob.buffer, blob.byteOffset, blob.byteLength));
155935
156036
  }
155936
156037
  return /* @__PURE__ */ new Map();
@@ -156067,7 +156168,7 @@ __export(run_browser_exports, {
156067
156168
  runInBrowser: () => runInBrowser
156068
156169
  });
156069
156170
  import { createServer as createServer7 } from "node:http";
156070
- import { existsSync as existsSync69, readFileSync as readFileSync80 } from "node:fs";
156171
+ import { existsSync as existsSync69, readFileSync as readFileSync81 } from "node:fs";
156071
156172
  import { spawnSync as spawnSync3 } from "node:child_process";
156072
156173
  import { dirname as dirname37, resolve as resolve54 } from "node:path";
156073
156174
  import { fileURLToPath as fileURLToPath26 } from "node:url";
@@ -156175,7 +156276,7 @@ async function runInBrowser(releaseRoot, app, header, opts = {}) {
156175
156276
  }
156176
156277
  let bytes2;
156177
156278
  try {
156178
- bytes2 = readFileSync80(resolve54(stagedDir(), name));
156279
+ bytes2 = readFileSync81(resolve54(stagedDir(), name));
156179
156280
  } catch (e2) {
156180
156281
  res.writeHead(503, { "content-type": "application/json" });
156181
156282
  res.end(JSON.stringify({ error: "browser_plane_unstaged", file: name, detail: String(e2) }));
@@ -156228,14 +156329,14 @@ var hhp_preview_exports = {};
156228
156329
  __export(hhp_preview_exports, {
156229
156330
  hhpPreviewResponse: () => hhpPreviewResponse
156230
156331
  });
156231
- import { existsSync as existsSync70, readFileSync as readFileSync81 } from "node:fs";
156232
- import { join as join70 } from "node:path";
156332
+ import { existsSync as existsSync70, readFileSync as readFileSync82 } from "node:fs";
156333
+ import { join as join71 } from "node:path";
156233
156334
  function hhpPreviewResponse(root, request) {
156234
- if (new URL(request.url).pathname !== "/__himi/hhp-preview" || !existsSync70(join70(root, "hhp.json"))) return null;
156335
+ if (new URL(request.url).pathname !== "/__himi/hhp-preview" || !existsSync70(join71(root, "hhp.json"))) return null;
156235
156336
  if (request.method !== "GET") return new Response(null, { status: 405 });
156236
156337
  try {
156237
156338
  const file2 = localPath(root, ".himi/hhp-preview.json");
156238
- const authored2 = existsSync70(file2) ? JSON.parse(readFileSync81(file2, "utf8")) : {};
156339
+ const authored2 = existsSync70(file2) ? JSON.parse(readFileSync82(file2, "utf8")) : {};
156239
156340
  if (authored2.mockCapabilities && (!Array.isArray(authored2.mockCapabilities) || authored2.mockCapabilities.some((v2) => typeof v2 !== "string"))) throw new Error("mockCapabilities must be a string array.");
156240
156341
  const fixtures = authored2.fixtures ?? {};
156241
156342
  if (typeof fixtures !== "object" || Array.isArray(fixtures) || fixtures === null) throw new Error("fixtures must be an object.");
@@ -156385,7 +156486,7 @@ var init_embedded_bundles = __esm({
156385
156486
  });
156386
156487
 
156387
156488
  // ../store-release/register-bundle.ts
156388
- import { readFileSync as readFileSync82 } from "node:fs";
156489
+ import { readFileSync as readFileSync83 } from "node:fs";
156389
156490
  import { createPrivateKey as createPrivateKey4, sign as sign2 } from "node:crypto";
156390
156491
  function b64url2(b2) {
156391
156492
  return Buffer.from(b2).toString("base64").replace(/\+/g, "-").replace(/\//g, "_").replace(/=+$/, "");
@@ -156403,7 +156504,7 @@ function bundleIdBody(identifier, name, platform = "IOS") {
156403
156504
  async function registerBundleId(opts) {
156404
156505
  const env = requireEnv(["ASC_KEY_ID", "ASC_ISSUER_ID", "ASC_KEY_PATH"]);
156405
156506
  assertCredentialOutsideRepo("ASC_KEY_PATH", env.ASC_KEY_PATH);
156406
- const jwt = ascJwt(env.ASC_KEY_ID, env.ASC_ISSUER_ID, readFileSync82(env.ASC_KEY_PATH, "utf8"), Math.floor(Date.now() / 1e3));
156507
+ const jwt = ascJwt(env.ASC_KEY_ID, env.ASC_ISSUER_ID, readFileSync83(env.ASC_KEY_PATH, "utf8"), Math.floor(Date.now() / 1e3));
156407
156508
  const res = await fetch(`${ASC_API}/v1/bundleIds`, {
156408
156509
  method: "POST",
156409
156510
  headers: { Authorization: `Bearer ${jwt}`, "Content-Type": "application/json" },
@@ -156433,7 +156534,7 @@ async function main() {
156433
156534
  }
156434
156535
  const ni2 = rest.indexOf("--name");
156435
156536
  const name = ni2 >= 0 ? rest[ni2 + 1] : cfg.app ?? app;
156436
- const yml = readFileSync82(iosProjectYml(app), "utf8");
156537
+ const yml = readFileSync83(iosProjectYml(app), "utf8");
156437
156538
  for (const { id, label: label2 } of [{ id: identifier, label: name }, ...embeddedBundles(yml).map((b2) => ({
156438
156539
  id: embeddedBundleId(identifier, b2),
156439
156540
  label: `${name} ${embeddedAppIdLabel(b2)}`
@@ -157842,19 +157943,19 @@ __export(credential_profile_exports, {
157842
157943
  profilePath: () => profilePath,
157843
157944
  resolveStoreCredentials: () => resolveStoreCredentials
157844
157945
  });
157845
- import { existsSync as existsSync71, readFileSync as readFileSync83 } from "node:fs";
157946
+ import { existsSync as existsSync71, readFileSync as readFileSync84 } from "node:fs";
157846
157947
  import { homedir as homedir6 } from "node:os";
157847
- import { join as join71 } from "node:path";
157948
+ import { join as join72 } from "node:path";
157848
157949
  function credentialsDir(home = homedir6()) {
157849
- return join71(home, ".himalaya", "store-credentials");
157950
+ return join72(home, ".himalaya", "store-credentials");
157850
157951
  }
157851
157952
  function profilePath(name, home = homedir6()) {
157852
157953
  if (!PROFILE_NAME.test(name)) {
157853
157954
  throw new Error(
157854
- `credential profile ${JSON.stringify(name)} is not a profile name \u2014 use letters, digits, ".", "_" or "-" starting with a letter or digit. It names ${join71(credentialsDir(home), "<name>.json")}; it is never a path.`
157955
+ `credential profile ${JSON.stringify(name)} is not a profile name \u2014 use letters, digits, ".", "_" or "-" starting with a letter or digit. It names ${join72(credentialsDir(home), "<name>.json")}; it is never a path.`
157855
157956
  );
157856
157957
  }
157857
- return join71(credentialsDir(home), `${name}.json`);
157958
+ return join72(credentialsDir(home), `${name}.json`);
157858
157959
  }
157859
157960
  function parseProfile(text9, label2) {
157860
157961
  let doc;
@@ -157885,7 +157986,7 @@ function resolveStoreCredentials(opts) {
157885
157986
  const { app, cfg } = opts;
157886
157987
  const env = opts.env ?? process.env;
157887
157988
  const home = opts.home ?? homedir6();
157888
- const read = opts.readProfile ?? ((p2) => readFileSync83(p2, "utf8"));
157989
+ const read = opts.readProfile ?? ((p2) => readFileSync84(p2, "utf8"));
157889
157990
  const exists = opts.profileExists ?? existsSync71;
157890
157991
  const ios = cfg.ios ?? {};
157891
157992
  const flagName = opts.profileFlag?.trim();
@@ -157952,7 +158053,7 @@ var init_credential_profile = __esm({
157952
158053
 
157953
158054
  // ../store-release/iap-credentials.ts
157954
158055
  import { createHash as createHash37 } from "node:crypto";
157955
- import { existsSync as existsSync72, readFileSync as readFileSync84, realpathSync as realpathSync12 } from "node:fs";
158056
+ import { existsSync as existsSync72, readFileSync as readFileSync85, realpathSync as realpathSync12 } from "node:fs";
157956
158057
  import { homedir as homedir7 } from "node:os";
157957
158058
  function accountFingerprint(keyId, issuerId) {
157958
158059
  return `sha256:${createHash37("sha256").update(`${issuerId}:${keyId}`).digest("hex").slice(0, 16)}`;
@@ -157986,7 +158087,7 @@ function canonicalKeyPath(path2, profile, realpath) {
157986
158087
  function resolveIapCredentials(options) {
157987
158088
  const { target } = options;
157988
158089
  const home = options.home ?? homedir7();
157989
- const readFile3 = options.readFile ?? ((p2) => readFileSync84(p2, "utf8"));
158090
+ const readFile3 = options.readFile ?? ((p2) => readFileSync85(p2, "utf8"));
157990
158091
  const realpath = options.realpath ?? realpathSync12;
157991
158092
  const profile = requireExplicitProfile(options.profileFlag, target);
157992
158093
  const creds = resolveStoreCredentials({
@@ -158307,7 +158408,7 @@ __export(version_exports, {
158307
158408
  stampTargetVersion: () => stampTargetVersion,
158308
158409
  stampVersionKeys: () => stampVersionKeys
158309
158410
  });
158310
- import { readFileSync as readFileSync85, writeFileSync as writeFileSync29 } from "node:fs";
158411
+ import { readFileSync as readFileSync86, writeFileSync as writeFileSync29 } from "node:fs";
158311
158412
  function readIosVersion(projectYml) {
158312
158413
  const marketing = matchScalar(projectYml, "CFBundleShortVersionString");
158313
158414
  const build3 = matchScalar(projectYml, "CFBundleVersion");
@@ -158454,8 +158555,8 @@ function setAndroidVersion(gradle, v2) {
158454
158555
  function bumpVersion(app, opts) {
158455
158556
  const iosPath = iosProjectYml(app);
158456
158557
  const gradlePath = androidGradle(app);
158457
- const iosYml = readFileSync85(iosPath, "utf8");
158458
- const gradle = readFileSync85(gradlePath, "utf8");
158558
+ const iosYml = readFileSync86(iosPath, "utf8");
158559
+ const gradle = readFileSync86(gradlePath, "utf8");
158459
158560
  const current = readIosVersion(iosYml);
158460
158561
  const next = {
158461
158562
  marketing: opts.marketing ?? current.marketing,
@@ -158485,8 +158586,8 @@ var init_store_spec = __esm({
158485
158586
  });
158486
158587
 
158487
158588
  // src/iap-config-edit.ts
158488
- import { existsSync as existsSync73, readFileSync as readFileSync86 } from "node:fs";
158489
- import { basename as basename18, join as join72 } from "node:path";
158589
+ import { existsSync as existsSync73, readFileSync as readFileSync87 } from "node:fs";
158590
+ import { basename as basename18, join as join73 } from "node:path";
158490
158591
  import ts8 from "typescript";
158491
158592
  function bindPurchasesAppInConfig(source, options) {
158492
158593
  const fileName = options.fileName ?? "config.ts";
@@ -158565,16 +158666,16 @@ function capabilityFinding(app, fileName) {
158565
158666
  }
158566
158667
  function withStoreBundle(dir, options) {
158567
158668
  if (options.storeBundleId) return options;
158568
- const path2 = join72(dir, "store", "store.config.yaml");
158669
+ const path2 = join73(dir, "store", "store.config.yaml");
158569
158670
  if (!existsSync73(path2)) return options;
158570
- const storeBundleId = parseStoreConfig(readFileSync86(path2, "utf8")).ios?.bundleId;
158671
+ const storeBundleId = parseStoreConfig(readFileSync87(path2, "utf8")).ios?.bundleId;
158571
158672
  return storeBundleId ? { ...options, storeBundleId } : options;
158572
158673
  }
158573
158674
  function previewIapConfigEdit(dir, options) {
158574
158675
  const path2 = configEntry(dir);
158575
158676
  if (!path2) return void 0;
158576
158677
  if (isSymlink2(path2)) return { path: path2, changed: false, applied: [], conflicts: [], instructions: [`${basename18(path2)} is a symlink, so it would not be edited: add the purchases app in the file it points to.`] };
158577
- const { changed, applied, conflicts, instructions } = bindPurchasesAppInConfig(readFileSync86(path2, "utf8"), { ...withStoreBundle(dir, options), fileName: basename18(path2) });
158678
+ const { changed, applied, conflicts, instructions } = bindPurchasesAppInConfig(readFileSync87(path2, "utf8"), { ...withStoreBundle(dir, options), fileName: basename18(path2) });
158578
158679
  return { path: path2, changed, applied, conflicts, instructions };
158579
158680
  }
158580
158681
  async function applyIapConfigEdit(dir, options, validate4) {
@@ -158583,7 +158684,7 @@ async function applyIapConfigEdit(dir, options, validate4) {
158583
158684
  const fileName = basename18(path2);
158584
158685
  const refuse7 = (why) => ({ path: path2, changed: false, applied: [], conflicts: [], instructions: [why] });
158585
158686
  if (isSymlink2(path2)) return refuse7(`${fileName} is a symlink, so it was not edited: add the purchases app in the file it points to.`);
158586
- const original = readFileSync86(path2, "utf8");
158687
+ const original = readFileSync87(path2, "utf8");
158587
158688
  const edit = bindPurchasesAppInConfig(original, { ...withStoreBundle(dir, options), fileName });
158588
158689
  const { applied, conflicts, instructions } = edit;
158589
158690
  if (!edit.changed) return { path: path2, changed: false, applied, conflicts, instructions };
@@ -159056,9 +159157,9 @@ __export(store_iap_exports, {
159056
159157
  runStoreIap: () => runStoreIap
159057
159158
  });
159058
159159
  import { randomUUID as randomUUID8 } from "node:crypto";
159059
- import { appendFileSync as appendFileSync2, mkdirSync as mkdirSync34, readFileSync as readFileSync87, realpathSync as realpathSync13, rmSync as rmSync18, writeFileSync as writeFileSync30 } from "node:fs";
159160
+ import { appendFileSync as appendFileSync2, mkdirSync as mkdirSync34, readFileSync as readFileSync88, realpathSync as realpathSync13, rmSync as rmSync18, writeFileSync as writeFileSync30 } from "node:fs";
159060
159161
  import { homedir as homedir8, hostname } from "node:os";
159061
- import { join as join73 } from "node:path";
159162
+ import { join as join74 } from "node:path";
159062
159163
  function scrubDeep(value, scrub) {
159063
159164
  if (typeof value === "string") return scrub(value);
159064
159165
  if (Array.isArray(value)) return value.map((v2) => scrubDeep(v2, scrub));
@@ -159514,14 +159615,14 @@ function fileJournal(path2) {
159514
159615
  }
159515
159616
  function readLockSummary(path2) {
159516
159617
  try {
159517
- const { pid, host, at: at2 } = JSON.parse(readFileSync87(path2, "utf8"));
159618
+ const { pid, host, at: at2 } = JSON.parse(readFileSync88(path2, "utf8"));
159518
159619
  return `pid ${pid} on ${host} since ${at2}`;
159519
159620
  } catch {
159520
159621
  return "unreadable lock";
159521
159622
  }
159522
159623
  }
159523
159624
  function acquireApplyLock(dir, appleAppId) {
159524
- const path2 = join73(dir, "apply.lock");
159625
+ const path2 = join74(dir, "apply.lock");
159525
159626
  const stamp = JSON.stringify({ pid: process.pid, host: hostname(), at: (/* @__PURE__ */ new Date()).toISOString(), token: randomUUID8() });
159526
159627
  try {
159527
159628
  writeFileSync30(path2, stamp, { flag: "wx", mode: 384 });
@@ -159534,7 +159635,7 @@ function acquireApplyLock(dir, appleAppId) {
159534
159635
  return () => {
159535
159636
  let current = "";
159536
159637
  try {
159537
- current = readFileSync87(path2, "utf8");
159638
+ current = readFileSync88(path2, "utf8");
159538
159639
  } catch {
159539
159640
  return;
159540
159641
  }
@@ -159542,7 +159643,7 @@ function acquireApplyLock(dir, appleAppId) {
159542
159643
  };
159543
159644
  }
159544
159645
  function stateDir(appleAppId) {
159545
- const dir = join73(homedir8(), ".himalaya", "store-iap", appleAppId);
159646
+ const dir = join74(homedir8(), ".himalaya", "store-iap", appleAppId);
159546
159647
  mkdirSync34(dir, { recursive: true, mode: 448 });
159547
159648
  return dir;
159548
159649
  }
@@ -159558,11 +159659,11 @@ async function confirmOnTerminal(question) {
159558
159659
  }
159559
159660
  function defaultStoreIapDeps() {
159560
159661
  return {
159561
- readFile: (path2) => readFileSync87(path2, "utf8"),
159662
+ readFile: (path2) => readFileSync88(path2, "utf8"),
159562
159663
  writeFileAtomic,
159563
159664
  resolveCredentials: ({ profileFlag, target }) => resolveIapCredentials({ profileFlag, target }),
159564
159665
  createApi: (key2) => createIapApi(createAscClient({ key: key2 })),
159565
- openJournal: (appleAppId) => fileJournal(join73(stateDir(appleAppId), "journal.jsonl")),
159666
+ openJournal: (appleAppId) => fileJournal(join74(stateDir(appleAppId), "journal.jsonl")),
159566
159667
  acquireLock: (appleAppId) => acquireApplyLock(stateDir(appleAppId), appleAppId),
159567
159668
  canPrompt: () => process.stdin.isTTY === true,
159568
159669
  wixTransport: (siteId) => ownerTransport(siteId),
@@ -160040,9 +160141,9 @@ __export(preflight_app_exports, {
160040
160141
  preflightApp: () => preflightApp,
160041
160142
  profileAccount: () => profileAccount
160042
160143
  });
160043
- import { readFileSync as readFileSync88, existsSync as existsSync74, readdirSync as readdirSync33, statSync as statSync19 } from "node:fs";
160144
+ import { readFileSync as readFileSync89, existsSync as existsSync74, readdirSync as readdirSync33, statSync as statSync19 } from "node:fs";
160044
160145
  import { createHash as createHash39 } from "node:crypto";
160045
- import { join as join74 } from "node:path";
160146
+ import { join as join75 } from "node:path";
160046
160147
  function analyze(projectYml, storeConfig, icon, account) {
160047
160148
  const f2 = [];
160048
160149
  const has = (re2, s2) => re2.test(s2);
@@ -160106,13 +160207,13 @@ function profileAccount(app, storeConfig, opts = {}) {
160106
160207
  }
160107
160208
  }
160108
160209
  async function preflightApp(app, opts = {}) {
160109
- const projectYml = existsSync74(iosProjectYml(app)) ? readFileSync88(iosProjectYml(app), "utf8") : "";
160110
- const storeConfig = existsSync74(storeConfigPath(app)) ? readFileSync88(storeConfigPath(app), "utf8") : "";
160210
+ const projectYml = existsSync74(iosProjectYml(app)) ? readFileSync89(iosProjectYml(app), "utf8") : "";
160211
+ const storeConfig = existsSync74(storeConfigPath(app)) ? readFileSync89(storeConfigPath(app), "utf8") : "";
160111
160212
  if (!storeConfig) return [{ level: "error", message: `no apps/${app}/store/store.config.yaml \u2014 run /setup-store-signing first.` }];
160112
160213
  const findings = analyze(
160113
160214
  projectYml,
160114
160215
  storeConfig,
160115
- await appIconState(join74(appDir(app), "ios")),
160216
+ await appIconState(join75(appDir(app), "ios")),
160116
160217
  profileAccount(app, storeConfig, opts)
160117
160218
  );
160118
160219
  findings.push(...analyzeListing(metadataFilesPresent(app), listScreenshots(app)));
@@ -160141,16 +160242,16 @@ function analyzeSubmissionRecord(appLevel, review, opts) {
160141
160242
  return f2;
160142
160243
  }
160143
160244
  function appLevelMetadataFiles(app, locale = "en-US") {
160144
- const root = join74(storeDir(app), "metadata");
160245
+ const root = join75(storeDir(app), "metadata");
160145
160246
  const out2 = /* @__PURE__ */ new Set();
160146
160247
  if (existsSync74(root)) {
160147
160248
  for (const n2 of readdirSync33(root)) if (n2.endsWith(".txt")) out2.add(n2);
160148
160249
  }
160149
- if (existsSync74(join74(root, locale, "privacy_url.txt"))) out2.add("privacy_url.txt");
160250
+ if (existsSync74(join75(root, locale, "privacy_url.txt"))) out2.add("privacy_url.txt");
160150
160251
  return out2;
160151
160252
  }
160152
160253
  function reviewInfoFiles(app) {
160153
- const dir = join74(storeDir(app), "review_information");
160254
+ const dir = join75(storeDir(app), "review_information");
160154
160255
  if (!existsSync74(dir)) return /* @__PURE__ */ new Set();
160155
160256
  return new Set(readdirSync33(dir).filter((n2) => n2.endsWith(".txt")));
160156
160257
  }
@@ -160261,12 +160362,12 @@ function analyzePlayListing(assets) {
160261
160362
  return f2;
160262
160363
  }
160263
160364
  function playListingAssets(app, locale = "en-US") {
160264
- const dir = join74(storeDir(app), "play", locale, "images");
160365
+ const dir = join75(storeDir(app), "play", locale, "images");
160265
160366
  const read = (names) => {
160266
160367
  for (const name of names) {
160267
- const p2 = join74(dir, name);
160368
+ const p2 = join75(dir, name);
160268
160369
  try {
160269
- if (statSync19(p2).isFile()) return { name, bytes: readFileSync88(p2) };
160370
+ if (statSync19(p2).isFile()) return { name, bytes: readFileSync89(p2) };
160270
160371
  } catch {
160271
160372
  }
160272
160373
  }
@@ -160297,26 +160398,26 @@ function analyzeListing(metaFiles, shots) {
160297
160398
  return f2;
160298
160399
  }
160299
160400
  function metadataFilesPresent(app, locale = "en-US") {
160300
- const dir = join74(storeDir(app), "metadata", locale);
160401
+ const dir = join75(storeDir(app), "metadata", locale);
160301
160402
  if (!existsSync74(dir)) return /* @__PURE__ */ new Set();
160302
160403
  return new Set(readdirSync33(dir).filter((n2) => n2.endsWith(".txt")));
160303
160404
  }
160304
160405
  function listScreenshots(app, locale = "en-US") {
160305
160406
  const out2 = [];
160306
- const flat = join74(storeDir(app), "screenshots", locale);
160407
+ const flat = join75(storeDir(app), "screenshots", locale);
160307
160408
  if (existsSync74(flat)) {
160308
160409
  for (const png of readdirSync33(flat).filter((n2) => n2.endsWith(".png"))) {
160309
- const sz = pngSize(readFileSync88(join74(flat, png)));
160410
+ const sz = pngSize(readFileSync89(join75(flat, png)));
160310
160411
  if (sz) out2.push({ name: png, w: sz.w, h: sz.h });
160311
160412
  }
160312
160413
  }
160313
- const legacy = join74(storeDir(app), "metadata", locale, "screenshots");
160414
+ const legacy = join75(storeDir(app), "metadata", locale, "screenshots");
160314
160415
  if (existsSync74(legacy)) {
160315
160416
  for (const deviceDir of readdirSync33(legacy)) {
160316
- const d2 = join74(legacy, deviceDir);
160417
+ const d2 = join75(legacy, deviceDir);
160317
160418
  if (!statSync19(d2).isDirectory()) continue;
160318
160419
  for (const png of readdirSync33(d2).filter((n2) => n2.endsWith(".png"))) {
160319
- const sz = pngSize(readFileSync88(join74(d2, png)));
160420
+ const sz = pngSize(readFileSync89(join75(d2, png)));
160320
160421
  if (sz) out2.push({ name: `${deviceDir}/${png}`, w: sz.w, h: sz.h });
160321
160422
  }
160322
160423
  }
@@ -160324,13 +160425,13 @@ function listScreenshots(app, locale = "en-US") {
160324
160425
  return out2;
160325
160426
  }
160326
160427
  function placeholderHashes2() {
160327
- const templateIos = join74(appDir("_template"), "ios");
160428
+ const templateIos = join75(appDir("_template"), "ios");
160328
160429
  if (!existsSync74(templateIos)) return [LEGACY_PLACEHOLDER_SHA2562];
160329
160430
  for (const target of readdirSync33(templateIos)) {
160330
- const p2 = join74(templateIos, target, "Assets.xcassets", "AppIcon.appiconset", "icon_1024.png");
160431
+ const p2 = join75(templateIos, target, "Assets.xcassets", "AppIcon.appiconset", "icon_1024.png");
160331
160432
  try {
160332
160433
  if (!statSync19(p2).isFile()) continue;
160333
- return [LEGACY_PLACEHOLDER_SHA2562, createHash39("sha256").update(readFileSync88(p2)).digest("hex")];
160434
+ return [LEGACY_PLACEHOLDER_SHA2562, createHash39("sha256").update(readFileSync89(p2)).digest("hex")];
160334
160435
  } catch {
160335
160436
  }
160336
160437
  }
@@ -160363,10 +160464,10 @@ async function pixelIssues(bytes2) {
160363
160464
  async function appIconState(iosDir) {
160364
160465
  if (!existsSync74(iosDir)) return { exists: false, isPlaceholder: false, storeIssues: [] };
160365
160466
  for (const target of readdirSync33(iosDir)) {
160366
- const p2 = join74(iosDir, target, "Assets.xcassets", "AppIcon.appiconset", "icon_1024.png");
160467
+ const p2 = join75(iosDir, target, "Assets.xcassets", "AppIcon.appiconset", "icon_1024.png");
160367
160468
  try {
160368
160469
  if (!statSync19(p2).isFile()) continue;
160369
- const bytes2 = readFileSync88(p2);
160470
+ const bytes2 = readFileSync89(p2);
160370
160471
  const hash2 = createHash39("sha256").update(bytes2).digest("hex");
160371
160472
  const pixels = await pixelIssues(bytes2);
160372
160473
  return {
@@ -160433,7 +160534,7 @@ __export(asc_status_exports, {
160433
160534
  ascStatus: () => ascStatus,
160434
160535
  buildVerdict: () => buildVerdict
160435
160536
  });
160436
- import { readFileSync as readFileSync89 } from "node:fs";
160537
+ import { readFileSync as readFileSync90 } from "node:fs";
160437
160538
  function buildVerdict(builds) {
160438
160539
  if (!builds.length) {
160439
160540
  return "NO builds registered \u2014 if you uploaded recently and it's been >15 min, the binary was REJECTED IN PROCESSING (reason is email-only; run validate-binary.ts / scan-purpose-strings.ts to reproduce it).";
@@ -160447,7 +160548,7 @@ function buildVerdict(builds) {
160447
160548
  function client(creds) {
160448
160549
  const env = creds ?? requireEnv(["ASC_KEY_ID", "ASC_ISSUER_ID", "ASC_KEY_PATH"]);
160449
160550
  assertCredentialOutsideRepo("ASC_KEY_PATH", env.ASC_KEY_PATH);
160450
- const jwt = ascJwt(env.ASC_KEY_ID, env.ASC_ISSUER_ID, readFileSync89(env.ASC_KEY_PATH, "utf8"), Math.floor(Date.now() / 1e3));
160551
+ const jwt = ascJwt(env.ASC_KEY_ID, env.ASC_ISSUER_ID, readFileSync90(env.ASC_KEY_PATH, "utf8"), Math.floor(Date.now() / 1e3));
160451
160552
  return async (path2) => {
160452
160553
  const r2 = await fetch(`${ASC}${path2}`, { headers: { Authorization: `Bearer ${jwt}` } });
160453
160554
  return { status: r2.status, json: await r2.json().catch(() => ({})) };
@@ -160607,7 +160708,7 @@ __export(secrets_exports, {
160607
160708
  runRemoteSecretsCommand: () => runRemoteSecretsCommand,
160608
160709
  runSecretsCommand: () => runSecretsCommand
160609
160710
  });
160610
- import { readFileSync as readFileSync90 } from "node:fs";
160711
+ import { readFileSync as readFileSync91 } from "node:fs";
160611
160712
  function environment(value) {
160612
160713
  if (value === "preview" || value === "production") return value;
160613
160714
  throw new Error("--environment must be preview or production");
@@ -160638,7 +160739,7 @@ async function runSecretsCommand(operation, flags, io2, options = {}) {
160638
160739
  io2.log(JSON.stringify(await vault.list({ app, environment: env })));
160639
160740
  return 0;
160640
160741
  }
160641
- const value = options.readValue ? options.readValue() : readFileSync90(0, "utf8").replace(/\r?\n$/, "");
160742
+ const value = options.readValue ? options.readValue() : readFileSync91(0, "utf8").replace(/\r?\n$/, "");
160642
160743
  if (operation === "set") await vault.set({ app, environment: env, name, value });
160643
160744
  else if (operation === "rotate") await vault.rotate({ app, environment: env, name, value });
160644
160745
  else throw new Error(`unknown secrets operation ${operation}`);
@@ -160667,7 +160768,7 @@ async function runRemoteSecretsCommand(operation, flags, io2, options) {
160667
160768
  }
160668
160769
  let body;
160669
160770
  if (operation !== "list") {
160670
- const value = options.readValue ? options.readValue() : readFileSync90(0, "utf8").replace(/\r?\n$/, "");
160771
+ const value = options.readValue ? options.readValue() : readFileSync91(0, "utf8").replace(/\r?\n$/, "");
160671
160772
  body = JSON.stringify({ value });
160672
160773
  }
160673
160774
  const response = await (options.fetchImpl ?? fetch)(url, { method: operation === "list" ? "GET" : operation === "set" ? "PUT" : "POST", headers: headers2, body });
@@ -161165,15 +161266,15 @@ __export(notify_exports, {
161165
161266
  runNotify: () => runNotify,
161166
161267
  saveAdminSession: () => saveAdminSession
161167
161268
  });
161168
- import { chmodSync as chmodSync3, mkdirSync as mkdirSync35, readFileSync as readFileSync91, writeFileSync as writeFileSync31 } from "node:fs";
161269
+ import { chmodSync as chmodSync3, mkdirSync as mkdirSync35, readFileSync as readFileSync92, writeFileSync as writeFileSync31 } from "node:fs";
161169
161270
  import { homedir as homedir9 } from "node:os";
161170
- import { dirname as dirname39, join as join75 } from "node:path";
161271
+ import { dirname as dirname39, join as join76 } from "node:path";
161171
161272
  function defaultSessionsPath() {
161172
- return process.env.HIMI_ADMIN_SESSIONS_FILE ?? join75(homedir9(), ".himalaya", "admin-sessions.json");
161273
+ return process.env.HIMI_ADMIN_SESSIONS_FILE ?? join76(homedir9(), ".himalaya", "admin-sessions.json");
161173
161274
  }
161174
161275
  function loadSessionsFile(path2 = defaultSessionsPath()) {
161175
161276
  try {
161176
- return JSON.parse(readFileSync91(path2, "utf8"));
161277
+ return JSON.parse(readFileSync92(path2, "utf8"));
161177
161278
  } catch {
161178
161279
  return {};
161179
161280
  }
@@ -161550,20 +161651,20 @@ __export(base44_auth_exports, {
161550
161651
  usableBase44Auth: () => usableBase44Auth,
161551
161652
  writeBase44Session: () => writeBase44Session
161552
161653
  });
161553
- import { chmodSync as chmodSync4, existsSync as existsSync75, mkdirSync as mkdirSync36, readFileSync as readFileSync92, rmSync as rmSync19, writeFileSync as writeFileSync32 } from "node:fs";
161654
+ import { chmodSync as chmodSync4, existsSync as existsSync75, mkdirSync as mkdirSync36, readFileSync as readFileSync93, rmSync as rmSync19, writeFileSync as writeFileSync32 } from "node:fs";
161554
161655
  import { homedir as homedir10 } from "node:os";
161555
- import { dirname as dirname40, join as join76 } from "node:path";
161656
+ import { dirname as dirname40, join as join77 } from "node:path";
161556
161657
  function base44ApiBase(env = process.env) {
161557
161658
  return (env.BASE44_API_URL?.trim() || "https://app.base44.com").replace(/\/+$/, "");
161558
161659
  }
161559
161660
  function base44SessionPath(home = homedir10()) {
161560
- return join76(home, ".himi", "base44", "session.json");
161661
+ return join77(home, ".himi", "base44", "session.json");
161561
161662
  }
161562
161663
  function readBase44Session(home) {
161563
161664
  const p2 = base44SessionPath(home);
161564
161665
  if (!existsSync75(p2)) return void 0;
161565
161666
  try {
161566
- const s2 = JSON.parse(readFileSync92(p2, "utf8"));
161667
+ const s2 = JSON.parse(readFileSync93(p2, "utf8"));
161567
161668
  return typeof s2.accessToken === "string" && s2.accessToken ? s2 : void 0;
161568
161669
  } catch {
161569
161670
  return void 0;
@@ -161674,9 +161775,9 @@ async function base44DeviceLogin(opts) {
161674
161775
  throw new Error("the Base44 sign-in code expired before it was approved \u2014 run `himi base44 login` again");
161675
161776
  }
161676
161777
  function importBase44CliSession(home = homedir10(), env = process.env) {
161677
- const src = join76(home, ".base44", "auth", "auth.json");
161778
+ const src = join77(home, ".base44", "auth", "auth.json");
161678
161779
  if (!existsSync75(src)) throw new Error(`no Base44 CLI session at ${src} \u2014 run \`npx base44 login\` first, or use \`himi base44 login\``);
161679
- const a2 = JSON.parse(readFileSync92(src, "utf8"));
161780
+ const a2 = JSON.parse(readFileSync93(src, "utf8"));
161680
161781
  if (typeof a2.accessToken !== "string" || !a2.accessToken) throw new Error(`${src} holds no access token`);
161681
161782
  const session = {
161682
161783
  accessToken: a2.accessToken,
@@ -163811,7 +163912,7 @@ var init_brand_font = __esm({
163811
163912
 
163812
163913
  // src/site-analyze/write-artifacts.ts
163813
163914
  import { mkdirSync as mkdirSync37, writeFileSync as writeFileSync33 } from "node:fs";
163814
- import { join as join77 } from "node:path";
163915
+ import { join as join78 } from "node:path";
163815
163916
  function attachVeloSources(book, sources, put) {
163816
163917
  const byPath = new Map((sources ?? []).map((s2) => [s2.path, s2.text]));
163817
163918
  for (const f2 of book.velo.files) {
@@ -163966,12 +164067,12 @@ async function downloadMedia(book, fetchImpl, put) {
163966
164067
  }
163967
164068
  async function writeBusinessBook(result, opts) {
163968
164069
  const out2 = opts.outDir;
163969
- mkdirSync37(join77(out2, "evidence/pages"), { recursive: true });
163970
- mkdirSync37(join77(out2, "media/catalog"), { recursive: true });
164070
+ mkdirSync37(join78(out2, "evidence/pages"), { recursive: true });
164071
+ mkdirSync37(join78(out2, "media/catalog"), { recursive: true });
163971
164072
  const files = [];
163972
164073
  const put = (rel, body) => {
163973
- const p2 = join77(out2, rel);
163974
- mkdirSync37(join77(p2, ".."), { recursive: true });
164074
+ const p2 = join78(out2, rel);
164075
+ mkdirSync37(join78(p2, ".."), { recursive: true });
163975
164076
  writeFileSync33(p2, body);
163976
164077
  files.push(rel);
163977
164078
  };
@@ -164875,11 +164976,11 @@ var init_analyze = __esm({
164875
164976
  });
164876
164977
 
164877
164978
  // src/base44-analyze/write-artifacts.ts
164878
- import { existsSync as existsSync76, mkdirSync as mkdirSync38, readFileSync as readFileSync93, rmSync as rmSync20, writeFileSync as writeFileSync34 } from "node:fs";
164879
- import { dirname as dirname41, join as join78, resolve as resolve56, sep as sep19 } from "node:path";
164979
+ import { existsSync as existsSync76, mkdirSync as mkdirSync38, readFileSync as readFileSync94, rmSync as rmSync20, writeFileSync as writeFileSync34 } from "node:fs";
164980
+ import { dirname as dirname41, join as join79, resolve as resolve56, sep as sep19 } from "node:path";
164880
164981
  function isBookFolder(dir) {
164881
164982
  try {
164882
- return JSON.parse(readFileSync93(join78(dir, "book.json"), "utf8")).kind === "base44-app-book";
164983
+ return JSON.parse(readFileSync94(join79(dir, "book.json"), "utf8")).kind === "base44-app-book";
164883
164984
  } catch {
164884
164985
  return false;
164885
164986
  }
@@ -164966,24 +165067,24 @@ function writeBase44Book(result, outDir, opts = {}) {
164966
165067
  const md = renderBookMd(book);
164967
165068
  assertNoSecrets(json6);
164968
165069
  assertNoSecrets(md);
164969
- const owned = ["book.json", "BOOK.md", "source", "screenshots"].filter((n2) => existsSync76(join78(out2, n2)));
165070
+ const owned = ["book.json", "BOOK.md", "source", "screenshots"].filter((n2) => existsSync76(join79(out2, n2)));
164970
165071
  if (owned.length) {
164971
165072
  if (!isBookFolder(out2)) throw new Error(`refusing to write the app book into ${out2}: it already has ${owned.join(", ")} that ${owned.length === 1 ? "is" : "are"} not from an app book \u2014 pick an empty --out`);
164972
- for (const d2 of ["source", "screenshots"]) rmSync20(join78(out2, d2), { recursive: true, force: true });
165073
+ for (const d2 of ["source", "screenshots"]) rmSync20(join79(out2, d2), { recursive: true, force: true });
164973
165074
  }
164974
165075
  mkdirSync38(out2, { recursive: true });
164975
- writeFileSync34(join78(out2, "book.json"), json6);
164976
- writeFileSync34(join78(out2, "BOOK.md"), md);
165076
+ writeFileSync34(join79(out2, "book.json"), json6);
165077
+ writeFileSync34(join79(out2, "BOOK.md"), md);
164977
165078
  files.push("book.json", "BOOK.md");
164978
165079
  for (const s2 of shots) {
164979
- mkdirSync38(join78(out2, "screenshots"), { recursive: true });
164980
- writeFileSync34(join78(out2, "screenshots", s2.filename), s2.bytes);
165080
+ mkdirSync38(join79(out2, "screenshots"), { recursive: true });
165081
+ writeFileSync34(join79(out2, "screenshots", s2.filename), s2.bytes);
164981
165082
  files.push(`screenshots/${s2.filename}`);
164982
165083
  }
164983
- const sourceRoot = join78(out2, "source");
165084
+ const sourceRoot = join79(out2, "source");
164984
165085
  for (const f2 of result.sourceFiles) {
164985
165086
  if (!safeRel(f2.path)) continue;
164986
- const dest = join78(sourceRoot, ...f2.path.split("/"));
165087
+ const dest = join79(sourceRoot, ...f2.path.split("/"));
164987
165088
  if (!dest.startsWith(sourceRoot + sep19)) continue;
164988
165089
  mkdirSync38(dirname41(dest), { recursive: true });
164989
165090
  writeFileSync34(dest, f2.bytes);
@@ -168529,7 +168630,7 @@ __export(cli_exports, {
168529
168630
  import { execFile } from "node:child_process";
168530
168631
  import { mkdirSync as mkdirSync39, mkdtempSync as mkdtempSync4, rmSync as rmSync21, writeFileSync as writeFileSync35 } from "node:fs";
168531
168632
  import { tmpdir as tmpdir5 } from "node:os";
168532
- import { join as join79, resolve as resolve57 } from "node:path";
168633
+ import { join as join80, resolve as resolve57 } from "node:path";
168533
168634
  import { promisify } from "node:util";
168534
168635
  function projectDownloader(apiFetch, apiBase, token, extract = systemTar) {
168535
168636
  return async (appId2) => {
@@ -168542,11 +168643,11 @@ function projectDownloader(apiFetch, apiBase, token, extract = systemTar) {
168542
168643
  }
168543
168644
  const bytes2 = await readCapped(res, MAX_TARBALL_BYTES);
168544
168645
  if (!bytes2) throw new Error(`project download is over the ${MAX_TARBALL_BYTES}-byte cap`);
168545
- const root = mkdtempSync4(join79(tmpdir5(), "himi-base44-"));
168646
+ const root = mkdtempSync4(join80(tmpdir5(), "himi-base44-"));
168546
168647
  const cleanup = () => rmSync21(root, { recursive: true, force: true });
168547
168648
  try {
168548
- const archive = join79(root, "project.tar");
168549
- const dir = join79(root, "project");
168649
+ const archive = join80(root, "project.tar");
168650
+ const dir = join80(root, "project");
168550
168651
  writeFileSync35(archive, bytes2);
168551
168652
  mkdirSync39(dir);
168552
168653
  await extract(archive, dir);
@@ -169841,8 +169942,8 @@ var init_customer_build = __esm({
169841
169942
  });
169842
169943
 
169843
169944
  // src/site-analyze/apply.ts
169844
- import { existsSync as existsSync77, readFileSync as readFileSync94, writeFileSync as writeFileSync36, copyFileSync as copyFileSync2, mkdirSync as mkdirSync40, realpathSync as realpathSync14, statSync as statSync20 } from "node:fs";
169845
- import { dirname as dirname42, isAbsolute as isAbsolute8, join as join80, resolve as resolve58, sep as sep20 } from "node:path";
169945
+ import { existsSync as existsSync77, readFileSync as readFileSync95, writeFileSync as writeFileSync36, copyFileSync as copyFileSync2, mkdirSync as mkdirSync40, realpathSync as realpathSync14, statSync as statSync20 } from "node:fs";
169946
+ import { dirname as dirname42, isAbsolute as isAbsolute8, join as join81, resolve as resolve58, sep as sep20 } from "node:path";
169846
169947
  import { spawnSync as spawnSync4 } from "node:child_process";
169847
169948
  function unpairedRedirectNote(overlay) {
169848
169949
  if (!overlay.wix?.clientId || overlay.wix.redirectUri) return void 0;
@@ -169857,7 +169958,7 @@ function committedShellProvisioning(path2) {
169857
169958
  function findRepoRoot(cwd) {
169858
169959
  let dir = cwd;
169859
169960
  for (let i2 = 0; i2 < 8; i2++) {
169860
- if (SHELL_NAMES2.some((name) => existsSync77(join80(dir, shellAppDir(name), "package.json")))) return dir;
169961
+ if (SHELL_NAMES2.some((name) => existsSync77(join81(dir, shellAppDir(name), "package.json")))) return dir;
169861
169962
  const next = dirname42(dir);
169862
169963
  if (next === dir) break;
169863
169964
  dir = next;
@@ -169960,11 +170061,11 @@ function sameKnownSite(previous, next) {
169960
170061
  }
169961
170062
  function buildMergedContract(options) {
169962
170063
  const { appDir: appDir3, packageDir, overlay } = options;
169963
- const committedPath = join80(appDir3, "provisioning.json");
170064
+ const committedPath = join81(appDir3, "provisioning.json");
169964
170065
  if (!existsSync77(committedPath)) {
169965
170066
  throw new Error(`shell has no committed provisioning.json at ${committedPath} to build a contract from`);
169966
170067
  }
169967
- const committed = JSON.parse(readFileSync94(committedPath, "utf8"));
170068
+ const committed = JSON.parse(readFileSync95(committedPath, "utf8"));
169968
170069
  const merged = mergeCustomerOwned(committed, overlay);
169969
170070
  const overlayFontFamily = (overlay.branding ?? {}).fontFamily;
169970
170071
  const branding = merged.branding ?? {};
@@ -169976,7 +170077,7 @@ function buildMergedContract(options) {
169976
170077
  };
169977
170078
  const stage = (fromRel, toRel) => {
169978
170079
  const from = contained(packageDir, fromRel);
169979
- const to2 = contained(join80(appDir3, STAGED), toRel.slice(STAGED.length + 1));
170080
+ const to2 = contained(join81(appDir3, STAGED), toRel.slice(STAGED.length + 1));
169980
170081
  if (!from || !to2 || !existsSync77(from)) return void 0;
169981
170082
  let real;
169982
170083
  let realRoot;
@@ -169999,11 +170100,11 @@ function buildMergedContract(options) {
169999
170100
  };
170000
170101
  const icon = stage("media/icon.png", `${STAGED}/icon.png`);
170001
170102
  if (icon) branding.appIconPath = icon;
170002
- const facesPath = join80(packageDir, "media/fonts/faces.json");
170103
+ const facesPath = join81(packageDir, "media/fonts/faces.json");
170003
170104
  if (existsSync77(facesPath)) {
170004
170105
  let faces = [];
170005
170106
  try {
170006
- const parsed = JSON.parse(readFileSync94(facesPath, "utf8"));
170107
+ const parsed = JSON.parse(readFileSync95(facesPath, "utf8"));
170007
170108
  faces = Array.isArray(parsed) ? parsed : [];
170008
170109
  } catch {
170009
170110
  faces = [];
@@ -170024,9 +170125,9 @@ function buildMergedContract(options) {
170024
170125
  merged.branding = branding;
170025
170126
  const body = `${JSON.stringify(merged, null, 2)}
170026
170127
  `;
170027
- const path2 = join80(packageDir, "provisioning.contract.json");
170128
+ const path2 = join81(packageDir, "provisioning.contract.json");
170028
170129
  writeFileSync36(path2, body);
170029
- const localPath2 = join80(appDir3, LOCAL_CONTRACT_REL);
170130
+ const localPath2 = join81(appDir3, LOCAL_CONTRACT_REL);
170030
170131
  mkdirSync40(dirname42(localPath2), { recursive: true });
170031
170132
  writeFileSync36(localPath2, body);
170032
170133
  staged.push(localPath2);
@@ -170061,10 +170162,10 @@ function catalogTypography(overlay, template) {
170061
170162
  function staticFaqFor(overlay, overlayPath) {
170062
170163
  const own4 = overlay.faq;
170063
170164
  if (own4 !== void 0) return deriveStaticFaq(own4);
170064
- const bookPath = join80(dirname42(resolve58(overlayPath)), "book.json");
170165
+ const bookPath = join81(dirname42(resolve58(overlayPath)), "book.json");
170065
170166
  if (!existsSync77(bookPath)) return void 0;
170066
170167
  try {
170067
- const book = JSON.parse(readFileSync94(bookPath, "utf8"));
170168
+ const book = JSON.parse(readFileSync95(bookPath, "utf8"));
170068
170169
  const copy = book?.copy;
170069
170170
  if (!copy || typeof copy !== "object" || copy.unavailable) return void 0;
170070
170171
  const pairs = deriveStaticFaq(copy.faq);
@@ -170078,10 +170179,10 @@ function staticGalleriesFor(overlay, overlayPath) {
170078
170179
  if (overlay.galleries !== void 0) return deriveStaticGalleries(
170079
170180
  overlay.galleries.map((gallery) => ({ role: "gallery", title: gallery.title, galleryImageUrls: gallery.photos }))
170080
170181
  );
170081
- const bookPath = join80(dirname42(resolve58(overlayPath)), "book.json");
170182
+ const bookPath = join81(dirname42(resolve58(overlayPath)), "book.json");
170082
170183
  if (!existsSync77(bookPath)) return void 0;
170083
170184
  try {
170084
- const book = JSON.parse(readFileSync94(bookPath, "utf8"));
170185
+ const book = JSON.parse(readFileSync95(bookPath, "utf8"));
170085
170186
  if (!book.look || book.look.unavailable || !Array.isArray(book.look.pages)) return void 0;
170086
170187
  const galleries = deriveStaticGalleries(book.look.pages);
170087
170188
  return galleries.length || book.look.complete === true ? galleries : void 0;
@@ -170093,8 +170194,8 @@ async function applyOverlays(input) {
170093
170194
  const cwd = resolve58(input.cwd);
170094
170195
  const shell = input.shell ?? DEFAULT_BRANDABLE_SHELL;
170095
170196
  assertKnownShell(shell);
170096
- const overlay = JSON.parse(readFileSync94(input.overlayPath, "utf8"));
170097
- const tokens2 = JSON.parse(readFileSync94(input.tokensPath, "utf8"));
170197
+ const overlay = JSON.parse(readFileSync95(input.overlayPath, "utf8"));
170198
+ const tokens2 = JSON.parse(readFileSync95(input.tokensPath, "utf8"));
170098
170199
  const faq = staticFaqFor(overlay, input.overlayPath);
170099
170200
  if (faq !== void 0) overlay.faq = faq;
170100
170201
  const galleries = staticGalleriesFor(overlay, input.overlayPath);
@@ -170111,9 +170212,9 @@ async function applyOverlays(input) {
170111
170212
  `shell "${shell}" cannot bake a customer brand \u2014 it ships no prepare:customer script`
170112
170213
  );
170113
170214
  }
170114
- const appDir3 = join80(repoRoot2, shellAppDir(shell));
170115
- const committedPath = join80(appDir3, "provisioning.json");
170116
- const committedSite = existsSync77(committedPath) ? JSON.parse(readFileSync94(committedPath, "utf8")).site : void 0;
170215
+ const appDir3 = join81(repoRoot2, shellAppDir(shell));
170216
+ const committedPath = join81(appDir3, "provisioning.json");
170217
+ const committedSite = existsSync77(committedPath) ? JSON.parse(readFileSync95(committedPath, "utf8")).site : void 0;
170117
170218
  if (committedSite !== void 0 && overlay.site === void 0) {
170118
170219
  throw new Error(
170119
170220
  `shell "${shell}" is a site shell: its contract names the customer's website (a \`site\` block), and this overlay has none. Re-run \`himi site analyze --url <site> --shell ${shell}\` to derive the site's page map (edit \`site.pages\` in provisioning.overlay.json if needed), then --apply.`
@@ -170140,9 +170241,9 @@ async function applyOverlays(input) {
170140
170241
  note: `prepare:customer --contract with a merged contract (committed provisioning.json untouched)${unpairedInRepo ? ` \xB7 ${unpairedInRepo}` : ""}`
170141
170242
  };
170142
170243
  }
170143
- const pkgProv = join80(cwd, "provisioning.json");
170244
+ const pkgProv = join81(cwd, "provisioning.json");
170144
170245
  assertNotCommitted(pkgProv, input.forbiddenProvisioning);
170145
- const contentPath = join80(cwd, "himalaya.content.json");
170246
+ const contentPath = join81(cwd, "himalaya.content.json");
170146
170247
  const syncViewNames = (before, after) => {
170147
170248
  const content = readContentManifest(cwd);
170148
170249
  if (!content) return;
@@ -170155,7 +170256,7 @@ async function applyOverlays(input) {
170155
170256
  let packageFaq = faq;
170156
170257
  let packageGalleries = galleries;
170157
170258
  if (existsSync77(pkgProv)) {
170158
- const cur = JSON.parse(readFileSync94(pkgProv, "utf8"));
170259
+ const cur = JSON.parse(readFileSync95(pkgProv, "utf8"));
170159
170260
  if (galleries === void 0 && !sameKnownSite(cur, overlay)) overlay.galleries = [];
170160
170261
  const merged = deepMerge4(cur, overlay);
170161
170262
  packageFaq = merged.faq;
@@ -170171,9 +170272,9 @@ async function applyOverlays(input) {
170171
170272
  if (Array.isArray(packageGalleries) && packageGalleries.length && !overlay.installedVerticals.includes("galleries")) {
170172
170273
  overlay.installedVerticals.push("galleries");
170173
170274
  }
170174
- const pkgTokens = join80(cwd, "tokens.json");
170275
+ const pkgTokens = join81(cwd, "tokens.json");
170175
170276
  if (existsSync77(pkgTokens) && (tokens2.colors || tokens2.typography)) {
170176
- const cur = JSON.parse(readFileSync94(pkgTokens, "utf8"));
170277
+ const cur = JSON.parse(readFileSync95(pkgTokens, "utf8"));
170177
170278
  let tokensIn = tokens2;
170178
170279
  if (tokens2.typography) {
170179
170280
  const fonts = catalogTypography(tokens2.typography, cur.typography);
@@ -170198,9 +170299,9 @@ async function applyOverlays(input) {
170198
170299
  wrote.push(pkgTokens);
170199
170300
  }
170200
170301
  const homeAction = homeRefreshActionId(shell);
170201
- const homeSrc = join80(cwd, "dev/index.ts");
170302
+ const homeSrc = join81(cwd, "dev/index.ts");
170202
170303
  if (homeAction && existsSync77(homeSrc)) {
170203
- const prev = readFileSync94(homeSrc, "utf8");
170304
+ const prev = readFileSync95(homeSrc, "utf8");
170204
170305
  const patched = patchBrandParams(prev, overlay, homeAction);
170205
170306
  let next = patched.src;
170206
170307
  if (!patched.foreign && faq?.length && prev.includes('"tier5.himiBrandedFaq.load"') && !prev.includes('"staticFaq"')) {
@@ -171199,7 +171300,7 @@ __export(cli_exports2, {
171199
171300
  runSiteAnalyze: () => runSiteAnalyze,
171200
171301
  runSiteFunctionCli: () => runSiteFunctionCli
171201
171302
  });
171202
- import { existsSync as existsSync78, readFileSync as readFileSync95 } from "node:fs";
171303
+ import { existsSync as existsSync78, readFileSync as readFileSync96 } from "node:fs";
171203
171304
  import { resolve as resolve59 } from "node:path";
171204
171305
  function applyNeedsClient(shell) {
171205
171306
  if (shell === void 0 || !SHELL_NAMES2.includes(shell)) return true;
@@ -171258,7 +171359,7 @@ async function runSiteAnalyze(opts) {
171258
171359
  const prevOverlayPath = resolve59(outDir, "provisioning.overlay.json");
171259
171360
  const prevSite = existsSync78(prevOverlayPath) ? (() => {
171260
171361
  try {
171261
- return JSON.parse(readFileSync95(prevOverlayPath, "utf8")).site;
171362
+ return JSON.parse(readFileSync96(prevOverlayPath, "utf8")).site;
171262
171363
  } catch {
171263
171364
  return void 0;
171264
171365
  }
@@ -171277,7 +171378,7 @@ async function runSiteAnalyze(opts) {
171277
171378
  }
171278
171379
  const previousOverlay = resolve59(outDir, "provisioning.overlay.json");
171279
171380
  carryOverGoals(
171280
- existsSync78(previousOverlay) ? readFileSync95(previousOverlay, "utf8") : void 0,
171381
+ existsSync78(previousOverlay) ? readFileSync96(previousOverlay, "utf8") : void 0,
171281
171382
  result.provisioningOverlay
171282
171383
  );
171283
171384
  const ownerCall = ownerAuth ? ownerTransportFrom(fetchImpl, ownerAuth) : void 0;
@@ -171335,7 +171436,7 @@ async function runSiteFunctionCli(opts) {
171335
171436
  let source;
171336
171437
  if (opts.sourcePath) {
171337
171438
  const p2 = resolve59(opts.cwd ?? process.cwd(), opts.sourcePath);
171338
- source = readFileSync95(p2, "utf8");
171439
+ source = readFileSync96(p2, "utf8");
171339
171440
  }
171340
171441
  let body;
171341
171442
  if (opts.bodyRaw != null) {
@@ -171365,7 +171466,7 @@ async function runSiteFunctionCli(opts) {
171365
171466
  function base44BookRoutes(bookPath, siteUrl) {
171366
171467
  if (!existsSync78(bookPath)) return void 0;
171367
171468
  try {
171368
- const book = JSON.parse(readFileSync95(bookPath, "utf8"));
171469
+ const book = JSON.parse(readFileSync96(bookPath, "utf8"));
171369
171470
  if (book.kind !== "base44-app-book" || !Array.isArray(book.routes)) return void 0;
171370
171471
  const host = (u2) => {
171371
171472
  try {
@@ -171620,7 +171721,7 @@ __export(site_create_exports, {
171620
171721
  runSiteList: () => runSiteList,
171621
171722
  writeProvisioningBinding: () => writeProvisioningBinding
171622
171723
  });
171623
- import { existsSync as existsSync79, readFileSync as readFileSync96, writeFileSync as writeFileSync37 } from "node:fs";
171724
+ import { existsSync as existsSync79, readFileSync as readFileSync97, writeFileSync as writeFileSync37 } from "node:fs";
171624
171725
  import { resolve as resolvePath2 } from "node:path";
171625
171726
  function oauthClientName(projectName) {
171626
171727
  return `${projectName} client`;
@@ -171769,7 +171870,7 @@ async function runSiteCreate(opts) {
171769
171870
  if (!wantOauthApp) return { ...base, nextSteps: nextSteps(metaSiteId) };
171770
171871
  return { ...base, clientId, redirectUri, nextSteps: nextSteps(metaSiteId, clientId) };
171771
171872
  }
171772
- function writeProvisioningBinding(target, binding2, fs2 = { existsSync: existsSync79, readFileSync: readFileSync96, writeFileSync: writeFileSync37 }) {
171873
+ function writeProvisioningBinding(target, binding2, fs2 = { existsSync: existsSync79, readFileSync: readFileSync97, writeFileSync: writeFileSync37 }) {
171773
171874
  const msid = binding2.siteId;
171774
171875
  const path2 = resolvePath2(target);
171775
171876
  const committed = committedShellProvisioning(path2);
@@ -172445,12 +172546,12 @@ var init_context = __esm({
172445
172546
  });
172446
172547
 
172447
172548
  // src/cli.ts
172448
- import { mkdtempSync as mkdtempSync5, readFileSync as readFileSync97, mkdirSync as mkdirSync41, writeFileSync as writeFileSync38, existsSync as existsSync80, rmSync as rmSync22, readdirSync as readdirSync34, statSync as statSync21, lstatSync as lstatSync21, accessSync, constants as constants4, renameSync as renameSync12, cpSync as cpSync3 } from "node:fs";
172549
+ import { mkdtempSync as mkdtempSync5, readFileSync as readFileSync98, mkdirSync as mkdirSync41, writeFileSync as writeFileSync38, existsSync as existsSync80, rmSync as rmSync22, readdirSync as readdirSync34, statSync as statSync21, lstatSync as lstatSync21, accessSync, constants as constants4, renameSync as renameSync12, cpSync as cpSync3 } from "node:fs";
172449
172550
  import { execFile as execFile2, execFileSync as execFileSync7, spawnSync as spawnSync5, spawn as spawn7 } from "node:child_process";
172450
172551
  import { AsyncLocalStorage as AsyncLocalStorage2 } from "node:async_hooks";
172451
172552
  import { createHash as createHash41, randomUUID as randomUUID11 } from "node:crypto";
172452
172553
  import { tmpdir as tmpdir6, homedir as homedir11, hostname as hostname2 } from "node:os";
172453
- import { join as join81, resolve as resolve60, relative as relative15, basename as basename19, dirname as dirname43 } from "node:path";
172554
+ import { join as join82, resolve as resolve60, relative as relative15, basename as basename19, dirname as dirname43 } from "node:path";
172454
172555
  import { fileURLToPath as fileURLToPath27 } from "node:url";
172455
172556
 
172456
172557
  // ../serve-cli/src/client.ts
@@ -174604,8 +174705,8 @@ var str9 = (v2) => typeof v2 === "string" ? v2 : void 0;
174604
174705
  var num3 = (v2) => typeof v2 === "string" && v2 !== "" && Number.isFinite(Number(v2)) ? Number(v2) : void 0;
174605
174706
  function embeddedTemplateCatalog() {
174606
174707
  return availableTemplates().map((name) => {
174607
- const path2 = join81(templateSourceDir(name), TEMPLATE_META_FILE);
174608
- const meta = JSON.parse(readFileSync97(path2, "utf8"));
174708
+ const path2 = join82(templateSourceDir(name), TEMPLATE_META_FILE);
174709
+ const meta = JSON.parse(readFileSync98(path2, "utf8"));
174609
174710
  if (!meta || typeof meta.title !== "string" || typeof meta.description !== "string" || !Array.isArray(meta.tags)) {
174610
174711
  throw new Error(`${path2} must be { title: string, description: string, tags: string[], category?: string }`);
174611
174712
  }
@@ -175476,7 +175577,7 @@ var COMMANDS2 = [
175476
175577
  ];
175477
175578
  function cliVersion() {
175478
175579
  try {
175479
- return JSON.parse(readFileSync97(new URL("../package.json", import.meta.url), "utf8")).version ?? "unknown";
175580
+ return JSON.parse(readFileSync98(new URL("../package.json", import.meta.url), "utf8")).version ?? "unknown";
175480
175581
  } catch {
175481
175582
  return "unknown";
175482
175583
  }
@@ -175601,7 +175702,7 @@ function ageInDays(publishedAt, now = Date.now()) {
175601
175702
  }
175602
175703
  function packageVersion(path2) {
175603
175704
  try {
175604
- const version4 = JSON.parse(readFileSync97(path2, "utf8")).version;
175705
+ const version4 = JSON.parse(readFileSync98(path2, "utf8")).version;
175605
175706
  return typeof version4 === "string" && version4 ? version4 : void 0;
175606
175707
  } catch {
175607
175708
  return void 0;
@@ -175610,7 +175711,7 @@ function packageVersion(path2) {
175610
175711
  function resolvedSdkVersion(fromDir = process.cwd(), bundledManifest = new URL("./authoring-runtime/node_modules/@wix/himalaya/package.json", import.meta.url)) {
175611
175712
  let dir = resolve60(fromDir);
175612
175713
  for (; ; ) {
175613
- const version4 = packageVersion(join81(dir, "node_modules", "@wix", "himalaya", "package.json"));
175714
+ const version4 = packageVersion(join82(dir, "node_modules", "@wix", "himalaya", "package.json"));
175614
175715
  if (version4) return { version: version4, source: "local" };
175615
175716
  const parent = dirname43(dir);
175616
175717
  if (parent === dir) break;
@@ -175620,7 +175721,7 @@ function resolvedSdkVersion(fromDir = process.cwd(), bundledManifest = new URL("
175620
175721
  if (bundled) return { version: bundled, source: "bundled" };
175621
175722
  try {
175622
175723
  const root = execFileSync7("npm", ["root", "-g"], { stdio: ["ignore", "pipe", "ignore"] }).toString().trim();
175623
- const version4 = root ? packageVersion(join81(root, "@wix", "himalaya", "package.json")) : void 0;
175724
+ const version4 = root ? packageVersion(join82(root, "@wix", "himalaya", "package.json")) : void 0;
175624
175725
  return version4 ? { version: version4, source: "global" } : {};
175625
175726
  } catch {
175626
175727
  return {};
@@ -175667,11 +175768,11 @@ var UPDATE_RETRY_AFTER_FAILURE_MS = 60 * 60 * 1e3;
175667
175768
  var UPDATE_SNOOZE_MS = 24 * 60 * 60 * 1e3;
175668
175769
  var UPDATE_REEXEC_ENV = "HIMI_UPDATED_ONCE";
175669
175770
  function updateCachePath(env = process.env) {
175670
- return env.HIMI_UPDATE_CACHE_FILE ?? join81(homedir11(), ".himalaya", "update-check.json");
175771
+ return env.HIMI_UPDATE_CACHE_FILE ?? join82(homedir11(), ".himalaya", "update-check.json");
175671
175772
  }
175672
175773
  function readUpdateCache(path2) {
175673
175774
  try {
175674
- const parsed = JSON.parse(readFileSync97(path2, "utf8"));
175775
+ const parsed = JSON.parse(readFileSync98(path2, "utf8"));
175675
175776
  return parsed && typeof parsed === "object" ? parsed : {};
175676
175777
  } catch {
175677
175778
  return {};
@@ -175740,11 +175841,11 @@ function createUpdateRunner(spawn8 = spawnSync5) {
175740
175841
  },
175741
175842
  installedVersion: () => {
175742
175843
  const root = globalNodeModulesRoot();
175743
- return root ? packageVersion(join81(root, "@wix", "himalaya-cli", "package.json")) : void 0;
175844
+ return root ? packageVersion(join82(root, "@wix", "himalaya-cli", "package.json")) : void 0;
175744
175845
  },
175745
175846
  reexec: (argv) => {
175746
175847
  const root = globalNodeModulesRoot();
175747
- const entry = root ? join81(root, "@wix", "himalaya-cli", "dist", "cli.mjs") : void 0;
175848
+ const entry = root ? join82(root, "@wix", "himalaya-cli", "dist", "cli.mjs") : void 0;
175748
175849
  if (!entry || !existsSync80(entry)) return void 0;
175749
175850
  const result = spawnSync5(process.execPath, [entry, ...argv], {
175750
175851
  // inherit keeps PIPED STDIN working — commands that read stdin must survive a re-exec.
@@ -175792,7 +175893,7 @@ function staleUpdateLockFile(cachePath, now) {
175792
175893
  for (const path2 of [`${cachePath}.lock.break`, `${cachePath}.lock`]) {
175793
175894
  let content;
175794
175895
  try {
175795
- content = readFileSync97(path2, "utf8");
175896
+ content = readFileSync98(path2, "utf8");
175796
175897
  } catch {
175797
175898
  continue;
175798
175899
  }
@@ -175815,7 +175916,7 @@ function acquireUpdateLock(cachePath, now, hooks = {}) {
175815
175916
  const mine = lockStamp(now);
175816
175917
  const readLock = (path2) => {
175817
175918
  try {
175818
- return readFileSync97(path2, "utf8");
175919
+ return readFileSync98(path2, "utf8");
175819
175920
  } catch {
175820
175921
  return void 0;
175821
175922
  }
@@ -176407,7 +176508,7 @@ function executableOnPath(name, env = process.env) {
176407
176508
  const suffixes = process.platform === "win32" ? (env.PATHEXT ?? ".COM;.EXE;.BAT;.CMD").split(";").filter(Boolean) : [""];
176408
176509
  for (const dir of entries) {
176409
176510
  for (const suffix of suffixes) {
176410
- const candidate = join81(dir, `${name}${suffix}`);
176511
+ const candidate = join82(dir, `${name}${suffix}`);
176411
176512
  try {
176412
176513
  if (!statSync21(candidate).isFile()) continue;
176413
176514
  if (process.platform !== "win32") accessSync(candidate, constants4.X_OK);
@@ -176516,7 +176617,7 @@ async function nativeConfigAdvisories(app, configSource) {
176516
176617
  const { iosProjectYml: iosProjectYml2 } = await Promise.resolve().then(() => (init_paths2(), paths_exports));
176517
176618
  const { androidOptedIn: androidOptedIn3, LABEL_IOS_SPLASH: LABEL_IOS_SPLASH2 } = await Promise.resolve().then(() => (init_splash(), splash_exports));
176518
176619
  const iosYmlPath = iosProjectYml2(app);
176519
- const iosYml = existsSync80(iosYmlPath) ? readFileSync97(iosYmlPath, "utf8") : "";
176620
+ const iosYml = existsSync80(iosYmlPath) ? readFileSync98(iosYmlPath, "utf8") : "";
176520
176621
  let optedIn = iosYml.includes(LABEL_IOS_SPLASH2);
176521
176622
  if (!optedIn) {
176522
176623
  const { androidManifestPath: androidManifestPath3 } = await Promise.resolve().then(() => (init_gen_native_config(), gen_native_config_exports));
@@ -176530,7 +176631,7 @@ async function nativeConfigAdvisories(app, configSource) {
176530
176631
  }
176531
176632
  function readConfigSource(dir) {
176532
176633
  try {
176533
- return readFileSync97(join81(dir, "config.ts"), "utf8");
176634
+ return readFileSync98(join82(dir, "config.ts"), "utf8");
176534
176635
  } catch {
176535
176636
  return null;
176536
176637
  }
@@ -176584,7 +176685,7 @@ var NoBase44SlotError = class extends Error {
176584
176685
  };
176585
176686
  async function initFromRemoteTemplate(name, parentDir, template, c2, opts = {}) {
176586
176687
  const dir = resolve60(parentDir, name);
176587
- if (existsSync80(join81(dir, "himalaya.content.json"))) {
176688
+ if (existsSync80(join82(dir, "himalaya.content.json"))) {
176588
176689
  throw new Error(`content package already exists at ${dir}`);
176589
176690
  }
176590
176691
  const r2 = await c2.fetchTemplateSource(TEMPLATE_APP_PREFIX + template);
@@ -176645,7 +176746,7 @@ function restoreDestinationIssue(dest, force) {
176645
176746
  function isHimalayaMonorepoCheckout(start) {
176646
176747
  let dir = resolve60(start);
176647
176748
  for (; ; ) {
176648
- if (existsSync80(join81(dir, "tools", "himi-cli", "src", "cli.ts")) && existsSync80(join81(dir, "core", "serve", "src", "server.ts"))) return true;
176749
+ if (existsSync80(join82(dir, "tools", "himi-cli", "src", "cli.ts")) && existsSync80(join82(dir, "core", "serve", "src", "server.ts"))) return true;
176649
176750
  const parent = dirname43(dir);
176650
176751
  if (parent === dir) return false;
176651
176752
  dir = parent;
@@ -176706,7 +176807,7 @@ function materializeForPreview(appDir3, slug, displayName2) {
176706
176807
  Object.entries(files).map(([rel, body]) => [rel, rel === "himalaya.content.json" ? substituteIdentity(body, slug) : body])
176707
176808
  );
176708
176809
  const repoRoot2 = resolve60(fileURLToPath27(new URL("../../..", import.meta.url)));
176709
- const root = join81(repoRoot2, "node_modules", ".cache", "himi-template-preview");
176810
+ const root = join82(repoRoot2, "node_modules", ".cache", "himi-template-preview");
176710
176811
  const stillRunning = (pid) => {
176711
176812
  try {
176712
176813
  process.kill(pid, 0);
@@ -176720,12 +176821,12 @@ function materializeForPreview(appDir3, slug, displayName2) {
176720
176821
  if (!entry.isDirectory()) continue;
176721
176822
  const pid = Number(entry.name.startsWith(`${slug}-`) ? entry.name.slice(slug.length + 1) : NaN);
176722
176823
  if (Number.isInteger(pid) && pid > 0 && pid !== process.pid && !stillRunning(pid)) {
176723
- rmSync22(join81(root, entry.name), { recursive: true, force: true });
176824
+ rmSync22(join82(root, entry.name), { recursive: true, force: true });
176724
176825
  }
176725
176826
  }
176726
176827
  } catch {
176727
176828
  }
176728
- const dest = join81(root, `${slug}-${process.pid}`);
176829
+ const dest = join82(root, `${slug}-${process.pid}`);
176729
176830
  rmSync22(dest, { recursive: true, force: true });
176730
176831
  mkdirSync41(dest, { recursive: true });
176731
176832
  try {
@@ -176738,8 +176839,8 @@ function materializeForPreview(appDir3, slug, displayName2) {
176738
176839
  }
176739
176840
  async function appId(dir) {
176740
176841
  try {
176741
- const { readFileSync: readFileSync98 } = await import("node:fs");
176742
- const m2 = JSON.parse(readFileSync98(join81(dir, "himalaya.content.json"), "utf8"));
176842
+ const { readFileSync: readFileSync99 } = await import("node:fs");
176843
+ const m2 = JSON.parse(readFileSync99(join82(dir, "himalaya.content.json"), "utf8"));
176743
176844
  if (m2.name) return m2.name;
176744
176845
  } catch {
176745
176846
  }
@@ -176747,8 +176848,8 @@ async function appId(dir) {
176747
176848
  }
176748
176849
  async function contentVisibility(dir) {
176749
176850
  try {
176750
- const { readFileSync: readFileSync98 } = await import("node:fs");
176751
- const m2 = JSON.parse(readFileSync98(join81(dir, "himalaya.content.json"), "utf8"));
176851
+ const { readFileSync: readFileSync99 } = await import("node:fs");
176852
+ const m2 = JSON.parse(readFileSync99(join82(dir, "himalaya.content.json"), "utf8"));
176752
176853
  if (m2.visibility === "public" || m2.visibility === "unlisted") return m2.visibility;
176753
176854
  } catch {
176754
176855
  }
@@ -177037,7 +177138,7 @@ Seed your coding agent with \`himi agent-init\`. Guides: ${idx.portalUrl}`);
177037
177138
  ...res.removed.length ? { removed: res.removed, note: "older copies at the app root, moved to .himi/legacy-agent-files/ (a backup, in case one became app code) \u2014 the current ones live in .agents/skills/himalaya/" } : {},
177038
177139
  // In a git repo the refresh moves the diff identity an earlier `himi test` attested (that
177039
177140
  // hash is shared with the repo gates and deliberately exempts nothing but its own metadata).
177040
- ...existsSync80(join81(dir, ".himi", "attestations", "latest.json")) ? { next: "if `himi push` then refuses the attestation as stale, re-run `himi test` \u2014 in a git checkout this refresh changed the tree it covered" } : {},
177141
+ ...existsSync80(join82(dir, ".himi", "attestations", "latest.json")) ? { next: "if `himi push` then refuses the attestation as stale, re-run `himi test` \u2014 in a git checkout this refresh changed the tree it covered" } : {},
177041
177142
  ...res.skipped.length ? { skipped: res.skipped } : {},
177042
177143
  portalUrl: idx.portalUrl
177043
177144
  });
@@ -177060,7 +177161,7 @@ async function recordedReleaseForContentQuietly(dir, resolution, onDrift) {
177060
177161
  try {
177061
177162
  const { buildContentForValidation: buildContentForValidation2, buildReleaseFromContent: buildReleaseFromContent2, bundleOutDir: bundleOutDir2 } = await loadAuthoring();
177062
177163
  const bres = await buildContentForValidation2(dir, { resolution });
177063
- out2 = mkdtempSync5(join81(tmpdir6(), "himi-ux-record-"));
177164
+ out2 = mkdtempSync5(join82(tmpdir6(), "himi-ux-record-"));
177064
177165
  const hasWorkers = bres.built.length > 0 || bres.compileErrors.length > 0;
177065
177166
  const outcome = await buildReleaseFromContent2(dir, out2, { ...hasWorkers ? { tier5Dir: bundleOutDir2(dir) } : {}, collect: { lint: true } });
177066
177167
  const releaseId = outcome.manifest.releaseId;
@@ -177239,7 +177340,7 @@ async function producedWidgetFamilies(dir) {
177239
177340
  let js2;
177240
177341
  for (const candidate of [`${name}.bundle.js`, `${name}.js`, name]) {
177241
177342
  try {
177242
- js2 = readFileSync97(join81(outDir, candidate), "utf8");
177343
+ js2 = readFileSync98(join82(outDir, candidate), "utf8");
177243
177344
  break;
177244
177345
  } catch {
177245
177346
  }
@@ -177270,7 +177371,7 @@ async function producedWidgetFamilies(dir) {
177270
177371
  }
177271
177372
  return { families, source: "dist/bundles" };
177272
177373
  }
177273
- var boardOpen = (dir) => existsSync80(join81(dir, ".himi", "studio", "index.html"));
177374
+ var boardOpen = (dir) => existsSync80(join82(dir, ".himi", "studio", "index.html"));
177274
177375
  var BOARD_REFRESHERS = /* @__PURE__ */ new Set(["render", "test", "validate", "build", "push", "icon", "site", "ux", "progress"]);
177275
177376
  async function leaveForBoard(dir, record2, value) {
177276
177377
  if (!boardOpen(dir)) return;
@@ -177294,7 +177395,7 @@ async function liveMapFor(dir) {
177294
177395
  }
177295
177396
  var commandScratch = new AsyncLocalStorage2();
177296
177397
  function commandScratchDir(prefix) {
177297
- const dir = mkdtempSync5(join81(tmpdir6(), prefix));
177398
+ const dir = mkdtempSync5(join82(tmpdir6(), prefix));
177298
177399
  commandScratch.getStore()?.push(dir);
177299
177400
  return dir;
177300
177401
  }
@@ -177648,7 +177749,7 @@ himi v${cliVersion()} \u2014 run \`himi --version\`. If authoring commands fail
177648
177749
  const owed = openApprovals2(readApprovals2(dir).events).length;
177649
177750
  next.push(`carried the planning journal into the app (${carried.join(", ")}${owed ? `; ${owed} approval${owed === 1 ? "" : "s"} still owed` : ""}) \u2014 \`himi progress --brief\` there shows it`);
177650
177751
  }
177651
- const planInParent = ["SPEC.md", "MOBILE-UX.md"].filter((f2) => existsSync80(join81(parentDir, f2)));
177752
+ const planInParent = ["SPEC.md", "MOBILE-UX.md"].filter((f2) => existsSync80(join82(parentDir, f2)));
177652
177753
  if (planInParent.length) {
177653
177754
  next.push(`${planInParent.join(" and ")} in ${parentDir} ${planInParent.length > 1 ? "are" : "is"} not the app's \u2014 if that is the approved plan, move it over the template's boilerplate in ${dir}`);
177654
177755
  }
@@ -177809,13 +177910,13 @@ ${doNow.map((l2) => ` ${l2}`).join("\n")}`);
177809
177910
  if (adding) {
177810
177911
  const from = str9(flags.from);
177811
177912
  if (!from) throw new TrimRefusal2('--add <id> needs --from <file> holding the whole new SCREENS entry (` "<id>": { "screenId": "<id>", \u2026 },`)');
177812
- print(adopt.addScreen(dir, adding, readFileSync97(from, "utf8"), { parent: str9(flags.parent), tab: str9(flags.tab), displayName: str9(flags["display-name"]) }));
177913
+ print(adopt.addScreen(dir, adding, readFileSync98(from, "utf8"), { parent: str9(flags.parent), tab: str9(flags.tab), displayName: str9(flags["display-name"]) }));
177813
177914
  return 0;
177814
177915
  }
177815
177916
  if (target) {
177816
177917
  const from = str9(flags.from);
177817
177918
  if (!from) throw new TrimRefusal2("--write <id> needs --from <file> holding the whole entry, as --show prints it");
177818
- print(adopt.replaceScreen(dir, target, readFileSync97(from, "utf8")));
177919
+ print(adopt.replaceScreen(dir, target, readFileSync98(from, "utf8")));
177819
177920
  return 0;
177820
177921
  }
177821
177922
  if (show) {
@@ -177897,7 +177998,7 @@ ${doNow.map((l2) => ` ${l2}`).join("\n")}`);
177897
177998
  const { keepFromSpec: keepFromSpec2 } = await Promise.resolve().then(() => (init_template_adopt(), template_adopt_exports));
177898
177999
  const dir = contentDir(flags);
177899
178000
  try {
177900
- const spec = keepFromSpec2(dir, str9(flags["from-spec"]) ?? join81(dir, "SPEC.md"));
178001
+ const spec = keepFromSpec2(dir, str9(flags["from-spec"]) ?? join82(dir, "SPEC.md"));
177901
178002
  const own4 = typeof keep === "string" ? keep.split(",").map((k2) => k2.trim()).filter(Boolean) : [];
177902
178003
  keep = [.../* @__PURE__ */ new Set([...spec.keep, ...own4])].join(",");
177903
178004
  fromSpec = { fromSpec: {
@@ -177938,7 +178039,7 @@ ${doNow.map((l2) => ` ${l2}`).join("\n")}`);
177938
178039
  const result = { ...outcome.result, ...fromSpec };
177939
178040
  const adoptDir = contentDir(flags);
177940
178041
  const kept = flags["dry-run"] !== true && (outcome.code === 0 || outcome.result.forcedKeep === true);
177941
- if (kept && existsSync80(join81(adoptDir, adoptBits.ADOPT_FILE))) {
178042
+ if (kept && existsSync80(join82(adoptDir, adoptBits.ADOPT_FILE))) {
177942
178043
  try {
177943
178044
  const inv = adoptBits.inspectApp(adoptDir);
177944
178045
  adoptBits.writeInventory(adoptDir, inv, { companions: "if-missing" });
@@ -177967,7 +178068,7 @@ ${doNow.map((l2) => ` ${l2}`).join("\n")}`);
177967
178068
  const sourceDir = resolve60(str9(flags["source-dir"]) ?? appDir3);
177968
178069
  let meta;
177969
178070
  try {
177970
- meta = JSON.parse(readFileSync97(join81(sourceDir, TEMPLATE_META_FILE), "utf8"));
178071
+ meta = JSON.parse(readFileSync98(join82(sourceDir, TEMPLATE_META_FILE), "utf8"));
177971
178072
  } catch {
177972
178073
  io2.error(JSON.stringify({ error: `no ${TEMPLATE_META_FILE} in ${sourceDir} \u2014 a template must declare { title, description, tags } to be published`, hint: `add ${TEMPLATE_META_FILE} next to himalaya.content.json (or pass --source-dir <dir>)` }));
177973
178074
  return 2;
@@ -177977,7 +178078,7 @@ ${doNow.map((l2) => ` ${l2}`).join("\n")}`);
177977
178078
  return 2;
177978
178079
  }
177979
178080
  try {
177980
- const appearance = extractTemplateAppearance(JSON.parse(readFileSync97(join81(sourceDir, "tokens.json"), "utf8")));
178081
+ const appearance = extractTemplateAppearance(JSON.parse(readFileSync98(join82(sourceDir, "tokens.json"), "utf8")));
177981
178082
  meta = { ...appearance, ...meta };
177982
178083
  } catch {
177983
178084
  }
@@ -177999,7 +178100,7 @@ ${doNow.map((l2) => ` ${l2}`).join("\n")}`);
177999
178100
  const force = flags.force === true;
178000
178101
  const { buildContentForValidation: buildContentForValidation2, buildReleaseFromContent: buildReleaseFromContent2, bundleOutDir: bundleOutDir2 } = await loadAuthoring();
178001
178102
  const bres = await buildContentForValidation2(buildDir, { resolution: resolutionFlag(flags) });
178002
- const out2 = mkdtempSync5(join81(tmpdir6(), "himi-template-"));
178103
+ const out2 = mkdtempSync5(join82(tmpdir6(), "himi-template-"));
178003
178104
  publishScratch.push(out2);
178004
178105
  const hasWorkers = bres.built.length > 0 || bres.compileErrors.length > 0;
178005
178106
  const outcome = await buildReleaseFromContent2(buildDir, out2, {
@@ -178056,7 +178157,7 @@ ${doNow.map((l2) => ` ${l2}`).join("\n")}`);
178056
178157
  let iconHash;
178057
178158
  if (iconPath) {
178058
178159
  try {
178059
- const bytes2 = readFileSync97(iconPath);
178160
+ const bytes2 = readFileSync98(iconPath);
178060
178161
  payload.icon = bytes2.toString("base64");
178061
178162
  iconHash = createHash41("sha256").update(bytes2).digest("hex");
178062
178163
  } catch {
@@ -178355,7 +178456,7 @@ ${doNow.map((l2) => ` ${l2}`).join("\n")}`);
178355
178456
  const path2 = dpxSessionTokenPath();
178356
178457
  let raw;
178357
178458
  try {
178358
- raw = readFileSync97(path2, "utf8");
178459
+ raw = readFileSync98(path2, "utf8");
178359
178460
  } catch {
178360
178461
  throw new Error(`no DPX BO session at ${path2}; run dpx auth login, write dpx auth token to that path, then himi login --dpx --target bo`);
178361
178462
  }
@@ -178489,8 +178590,8 @@ ${doNow.map((l2) => ` ${l2}`).join("\n")}`);
178489
178590
  const dir = resolve60(out2);
178490
178591
  const files = himiPluginFiles2(skills.skillMd);
178491
178592
  for (const f2 of files) {
178492
- mkdirSync41(dirname43(join81(dir, f2.path)), { recursive: true });
178493
- writeFileSync38(join81(dir, f2.path), f2.text);
178593
+ mkdirSync41(dirname43(join82(dir, f2.path)), { recursive: true });
178594
+ writeFileSync38(join82(dir, f2.path), f2.text);
178494
178595
  }
178495
178596
  print({ ok: true, dir, files: files.map((f2) => f2.path), next: [`claude plugin validate ${dir}`, `claude --plugin-dir ${dir}`] });
178496
178597
  return 0;
@@ -178507,13 +178608,13 @@ ${doNow.map((l2) => ` ${l2}`).join("\n")}`);
178507
178608
  case "studio": {
178508
178609
  const { openStudio: openStudio2 } = await Promise.resolve().then(() => (init_studio(), studio_exports));
178509
178610
  const dir = contentDir(flags);
178510
- if (!existsSync80(join81(dir, "himalaya.content.json"))) {
178611
+ if (!existsSync80(join82(dir, "himalaya.content.json"))) {
178511
178612
  io2.error(JSON.stringify({ ok: false, error: "not_a_content_package", dir, hint: "run from the app directory (or pass --content <dir>) \u2014 the board reads that package's .himi/" }));
178512
178613
  return 2;
178513
178614
  }
178514
178615
  if (pos[1] === "reel") {
178515
178616
  const { buildReel: buildReel2 } = await Promise.resolve().then(() => (init_studio_reel(), studio_reel_exports));
178516
- const out2 = resolve60(str9(flags.out) ?? join81(dir, ".himi", "making-of.html"));
178617
+ const out2 = resolve60(str9(flags.out) ?? join82(dir, ".himi", "making-of.html"));
178517
178618
  const { html, plan } = buildReel2(dir);
178518
178619
  mkdirSync41(dirname43(out2), { recursive: true });
178519
178620
  writeFileSync38(out2, html);
@@ -178585,7 +178686,7 @@ ${handover.hint[0].toUpperCase()}${handover.hint.slice(1)}.`);
178585
178686
  } = await Promise.resolve().then(() => (init_progress(), progress_exports));
178586
178687
  const dir = contentDir(flags);
178587
178688
  const journal2 = journalPath2(dir);
178588
- const isContentPackage = existsSync80(join81(dir, "himalaya.content.json"));
178689
+ const isContentPackage = existsSync80(join82(dir, "himalaya.content.json"));
178589
178690
  const hint = isContentPackage ? {} : { hint: "no himalaya.content.json here \u2014 run from the app directory (or pass --content <dir>) so the build board finds this journal" };
178590
178691
  const message = pos.slice(1).join(" ").trim();
178591
178692
  const approvalFlags = ["approve", "done", "drop"].filter((f2) => flags[f2] !== void 0);
@@ -178737,7 +178838,7 @@ ${handover.hint[0].toUpperCase()}${handover.hint.slice(1)}.`);
178737
178838
  case "test": {
178738
178839
  const dir = contentDir(flags);
178739
178840
  const structuredOutput = flags.json === true || io2.isTTY !== true;
178740
- if (existsSync80(join81(dir, "functions"))) {
178841
+ if (existsSync80(join82(dir, "functions"))) {
178741
178842
  const { invokeLocalFunction: invokeLocalFunction2, loadFunctionsApp: loadFunctionsApp2 } = await Promise.resolve().then(() => (init_functions(), functions_exports));
178742
178843
  const loaded = await loadFunctionsApp2(dir);
178743
178844
  const results = [];
@@ -178869,7 +178970,7 @@ ${handover.hint[0].toUpperCase()}${handover.hint.slice(1)}.`);
178869
178970
  io2.error(JSON.stringify({ error: `screen "${screen.screenId}" has no Tier-5 worker, so there is nothing for the browser loop to build` }));
178870
178971
  return 2;
178871
178972
  }
178872
- const sources = collectWorkerSources2(join81(dir, "tier5-src"), screen.bundleName);
178973
+ const sources = collectWorkerSources2(join82(dir, "tier5-src"), screen.bundleName);
178873
178974
  if (!sources) {
178874
178975
  io2.error(JSON.stringify({ error: `no worker source found at tier5-src/${screen.bundleName} \u2014 the browser loop compiles SOURCE, not the built bundle` }));
178875
178976
  return 2;
@@ -179047,7 +179148,7 @@ ${handover.hint[0].toUpperCase()}${handover.hint.slice(1)}.`);
179047
179148
  const sp = await runShotsPass2({
179048
179149
  descriptors: scopeDescriptors2(outcome.descriptors ?? [], pos.slice(1), invalidScreens),
179049
179150
  tokens: outcome.tokens,
179050
- outDir: join81(dir, ".himi", "shots"),
179151
+ outDir: join82(dir, ".himi", "shots"),
179051
179152
  width: 390,
179052
179153
  layers: { rules: shotRules, ...cmsSeed ? { cmsSeed } : {}, ...canned ? { canned: canned.byKey } : {} },
179053
179154
  ...budgetMs ? { budgetMs } : {},
@@ -179087,7 +179188,7 @@ ${handover.hint[0].toUpperCase()}${handover.hint.slice(1)}.`);
179087
179188
  releaseId: result.releaseId,
179088
179189
  releasePayload: release2,
179089
179190
  descriptors: attestedDescriptors,
179090
- screenshots: Object.fromEntries(writtenShots.filter((name) => crawledScreens.has(name.replace(/\.png$/, ""))).map((name) => [name.replace(/\.png$/, ""), join81(dir, ".himi", "shots", name)])),
179191
+ screenshots: Object.fromEntries(writtenShots.filter((name) => crawledScreens.has(name.replace(/\.png$/, ""))).map((name) => [name.replace(/\.png$/, ""), join82(dir, ".himi", "shots", name)])),
179091
179192
  coverage: {
179092
179193
  screens: crawledScreens.size,
179093
179194
  actionsDispatched: result.actions.exercised,
@@ -179212,7 +179313,7 @@ ${[...afterRun.next, ...testReminder ? [testReminder] : []].join("\n")}`);
179212
179313
  return 2;
179213
179314
  }
179214
179315
  try {
179215
- const raw = stateArg.trim().startsWith("{") ? stateArg : readFileSync97(stateArg.replace(/^@/, ""), "utf8");
179316
+ const raw = stateArg.trim().startsWith("{") ? stateArg : readFileSync98(stateArg.replace(/^@/, ""), "utf8");
179216
179317
  injectedState = JSON.parse(raw);
179217
179318
  } catch (e2) {
179218
179319
  io2.error(JSON.stringify({ error: `--state must be inline JSON or a path to a .json file \u2014 ${e2.message}` }));
@@ -179227,7 +179328,7 @@ ${[...afterRun.next, ...testReminder ? [testReminder] : []].join("\n")}`);
179227
179328
  return 2;
179228
179329
  }
179229
179330
  try {
179230
- const raw = inputArg.trim().startsWith("{") ? inputArg : readFileSync97(inputArg.replace(/^@/, ""), "utf8");
179331
+ const raw = inputArg.trim().startsWith("{") ? inputArg : readFileSync98(inputArg.replace(/^@/, ""), "utf8");
179231
179332
  const parsed = JSON.parse(raw);
179232
179333
  if (!parsed || typeof parsed !== "object" || Array.isArray(parsed)) throw new Error("must be a JSON object");
179233
179334
  injectedInput = parsed;
@@ -179309,7 +179410,7 @@ ${[...afterRun.next, ...testReminder ? [testReminder] : []].join("\n")}`);
179309
179410
  const diagnostics = (outcome.lint ?? []).find((s2) => s2.screenId === screenId)?.issues ?? [];
179310
179411
  let pngFile;
179311
179412
  let attestationPngFile;
179312
- const shotPath = join81(dir, ".himi", "shots", `${screenId}.png`);
179413
+ const shotPath = join82(dir, ".himi", "shots", `${screenId}.png`);
179313
179414
  const pngTarget = typeof flags.png === "string" ? str9(flags.png) : flags.png === true ? shotPath : void 0;
179314
179415
  if (pngTarget && r2.pngBase64) {
179315
179416
  pngFile = writePngFile(pngTarget, r2.pngBase64);
@@ -179681,7 +179782,7 @@ default (no --glyph): ${DEFAULT_GLYPH2} \u2014 a mark that claims nothing, so th
179681
179782
  io2.error(JSON.stringify({ error: `${dest} already exists and is not empty`, hint: "pass --force to write into it anyway (merging, and naming what it keeps), --replace to restore exactly what was archived, or --out/--name to land somewhere else" }));
179682
179783
  return 1;
179683
179784
  }
179684
- if (replace && occupied && !existsSync80(join81(dest, "himalaya.content.json"))) {
179785
+ if (replace && occupied && !existsSync80(join82(dest, "himalaya.content.json"))) {
179685
179786
  io2.error(JSON.stringify({
179686
179787
  error: `${dest} is not a content package \u2014 refusing to --replace it`,
179687
179788
  hint: "--replace only clears a directory that holds himalaya.content.json. Check --out/--name, or pass --force to merge into it instead."
@@ -180389,7 +180490,7 @@ default (no --glyph): ${DEFAULT_GLYPH2} \u2014 a mark that claims nothing, so th
180389
180490
  }
180390
180491
  const { buildContentForValidation: buildContentForValidation2, buildReleaseFromContent: buildReleaseFromContent2, bundleOutDir: bundleOutDir2 } = await loadAuthoring();
180391
180492
  const bres = await buildContentForValidation2(dir, { resolution: resolutionFlag(flags) });
180392
- const built = mkdtempSync5(join81(tmpdir6(), "himi-pack-"));
180493
+ const built = mkdtempSync5(join82(tmpdir6(), "himi-pack-"));
180393
180494
  const hasWorkers = bres.built.length > 0 || bres.compileErrors.length > 0;
180394
180495
  const outcome = await buildReleaseFromContent2(dir, built, {
180395
180496
  ...hasWorkers ? { tier5Dir: bundleOutDir2(dir) } : {},
@@ -180596,7 +180697,7 @@ default (no --glyph): ${DEFAULT_GLYPH2} \u2014 a mark that claims nothing, so th
180596
180697
  }));
180597
180698
  return 1;
180598
180699
  }
180599
- const archive = readFileSync97(resolve60(file2));
180700
+ const archive = readFileSync98(resolve60(file2));
180600
180701
  const result = await client2().createPackageShare({
180601
180702
  app: opened.header.app,
180602
180703
  releaseId: opened.header.releaseId,
@@ -180693,11 +180794,11 @@ default (no --glyph): ${DEFAULT_GLYPH2} \u2014 a mark that claims nothing, so th
180693
180794
  const app = await appId(dir2);
180694
180795
  const { buildContentBundles: buildContentBundles2, buildReleaseFromContent: buildReleaseFromContent2, bundleOutDir: bundleOutDir2 } = await loadAuthoring();
180695
180796
  const bres = await buildContentBundles2(dir2, { resolution: resolutionFlag(flags) });
180696
- temp = mkdtempSync5(join81(tmpdir6(), "himi-run-build-"));
180797
+ temp = mkdtempSync5(join82(tmpdir6(), "himi-run-build-"));
180697
180798
  const hasWorkers = bres.built.length > 0 || bres.compileErrors.length > 0;
180698
180799
  const initial = await buildReleaseFromContent2(dir2, temp, { ...hasWorkers ? { tier5Dir: bundleOutDir2(dir2) } : {} });
180699
180800
  servedMissing = initial.missingBundles;
180700
- source = join81(temp, app);
180801
+ source = join82(temp, app);
180701
180802
  }
180702
180803
  const chromeArg = str9(flags.chrome) ?? "preview";
180703
180804
  if (chromeArg !== "preview" && chromeArg !== "app") {
@@ -180736,7 +180837,7 @@ default (no --glyph): ${DEFAULT_GLYPH2} \u2014 a mark that claims nothing, so th
180736
180837
  if (!recordKit) return;
180737
180838
  startedAt = (/* @__PURE__ */ new Date()).toISOString();
180738
180839
  const failure = record2(served2, { ok: true, at: startedAt });
180739
- if (!recorded) io2.error(JSON.stringify({ run: "run_record_skipped", message: `${failure ?? `${join81(dir, ".himi")} is not a real directory`}, so the build board will not frame this preview.` }));
180840
+ if (!recorded) io2.error(JSON.stringify({ run: "run_record_skipped", message: `${failure ?? `${join82(dir, ".himi")} is not a real directory`}, so the build board will not frame this preview.` }));
180740
180841
  await refreshBoard();
180741
180842
  };
180742
180843
  const retract = async () => {
@@ -180772,7 +180873,7 @@ default (no --glyph): ${DEFAULT_GLYPH2} \u2014 a mark that claims nothing, so th
180772
180873
  const watchKit = watch2 ? await Promise.resolve().then(() => (init_run_watch(), run_watch_exports)) : null;
180773
180874
  const hhpPreviewRoute = watch2 ? (await Promise.resolve().then(() => (init_hhp_preview(), hhp_preview_exports))).hhpPreviewResponse : null;
180774
180875
  const bus = watchKit ? new watchKit.ReloadBus() : void 0;
180775
- if (watch2) served = mkdtempSync5(join81(tmpdir6(), "himi-run-served-"));
180876
+ if (watch2) served = mkdtempSync5(join82(tmpdir6(), "himi-run-served-"));
180776
180877
  const running = await runPackage2(source, {
180777
180878
  port,
180778
180879
  chrome: chromeArg,
@@ -180801,8 +180902,8 @@ default (no --glyph): ${DEFAULT_GLYPH2} \u2014 a mark that claims nothing, so th
180801
180902
  await announce(running);
180802
180903
  if (watchKit && bus) {
180803
180904
  const { buildContentBundles: buildContentBundles2, buildReleaseFromContent: buildReleaseFromContent2, bundleOutDir: bundleOutDir2 } = await loadAuthoring();
180804
- const live3 = join81(running.releaseRoot, running.app);
180805
- const manifestOf = (tree) => JSON.parse(readFileSync97(join81(tree, "release-manifest.json"), "utf8"));
180905
+ const live3 = join82(running.releaseRoot, running.app);
180906
+ const manifestOf = (tree) => JSON.parse(readFileSync98(join82(tree, "release-manifest.json"), "utf8"));
180806
180907
  let current = manifestOf(live3);
180807
180908
  const failed3 = async (message) => {
180808
180909
  if (stopping) return;
@@ -180813,7 +180914,7 @@ default (no --glyph): ${DEFAULT_GLYPH2} \u2014 a mark that claims nothing, so th
180813
180914
  };
180814
180915
  rebuild = watchKit.serialize(async () => {
180815
180916
  const t0 = Date.now();
180816
- const next = mkdtempSync5(join81(tmpdir6(), "himi-run-build-"));
180917
+ const next = mkdtempSync5(join82(tmpdir6(), "himi-run-build-"));
180817
180918
  try {
180818
180919
  const bres = await buildContentBundles2(dir, { resolution: resolutionFlag(flags) });
180819
180920
  if (bres.compileErrors.length) {
@@ -180830,16 +180931,16 @@ default (no --glyph): ${DEFAULT_GLYPH2} \u2014 a mark that claims nothing, so th
180830
180931
  return;
180831
180932
  }
180832
180933
  if (stopping) return;
180833
- const fresh = manifestOf(join81(next, running.app));
180934
+ const fresh = manifestOf(join82(next, running.app));
180834
180935
  const diff = watchKit.diffReleases(current, fresh);
180835
180936
  const { describeChanges: describeChanges2, headline: headline2 } = await Promise.resolve().then(() => (init_build_changes(), build_changes_exports));
180836
- const changes = describeChanges2(live3, join81(next, running.app), diff);
180937
+ const changes = describeChanges2(live3, join82(next, running.app), diff);
180837
180938
  const retired = `${live3}.retired-${Date.now()}`;
180838
180939
  renameSync12(live3, retired);
180839
180940
  try {
180840
- renameSync12(join81(next, running.app), live3);
180941
+ renameSync12(join82(next, running.app), live3);
180841
180942
  } catch {
180842
- cpSync3(join81(next, running.app), live3, { recursive: true });
180943
+ cpSync3(join82(next, running.app), live3, { recursive: true });
180843
180944
  }
180844
180945
  rmSync22(retired, { recursive: true, force: true });
180845
180946
  current = fresh;
@@ -181522,7 +181623,7 @@ default (no --glyph): ${DEFAULT_GLYPH2} \u2014 a mark that claims nothing, so th
181522
181623
  lintNote: "`himi patch` sends a raw file. Nothing here built or linted your app \u2014 `himi push --only <selector>` is the same edit with the full lint gate in front of it."
181523
181624
  };
181524
181625
  if (kind === "tokens" || kind === "app-config") {
181525
- const body = readFileSync97(file2, "utf8");
181626
+ const body = readFileSync98(file2, "utf8");
181526
181627
  const patch2 = kind === "tokens" ? { tokens: body } : { appConfig: body };
181527
181628
  return runReleasePatch({
181528
181629
  ...common,
@@ -181537,7 +181638,7 @@ default (no --glyph): ${DEFAULT_GLYPH2} \u2014 a mark that claims nothing, so th
181537
181638
  io2.error(JSON.stringify({ error: "patch screen needs a <screenId>", usage: PATCH_USAGE }));
181538
181639
  return 2;
181539
181640
  }
181540
- const descriptor = readFileSync97(file2, "utf8");
181641
+ const descriptor = readFileSync98(file2, "utf8");
181541
181642
  try {
181542
181643
  JSON.parse(descriptor);
181543
181644
  } catch (e2) {
@@ -181577,7 +181678,7 @@ default (no --glyph): ${DEFAULT_GLYPH2} \u2014 a mark that claims nothing, so th
181577
181678
  extra: { kind, screen: id, file: { path: file2, bytes: Buffer.byteLength(descriptor, "utf8") } }
181578
181679
  });
181579
181680
  }
181580
- const bytes2 = readFileSync97(file2);
181681
+ const bytes2 = readFileSync98(file2);
181581
181682
  const sha2 = createHash41("sha256").update(bytes2).digest("hex");
181582
181683
  const forScreens = (str9(flags["for-screen"]) ?? "").split(",").map((s2) => s2.trim()).filter(Boolean);
181583
181684
  if (flags["no-rebind"] !== void 0 && flags["no-rebind"] !== true) {
@@ -181721,7 +181822,7 @@ default (no --glyph): ${DEFAULT_GLYPH2} \u2014 a mark that claims nothing, so th
181721
181822
  }
181722
181823
  let def;
181723
181824
  try {
181724
- const parsed = JSON.parse(arg.startsWith("@") ? readFileSync97(arg.slice(1), "utf8") : arg);
181825
+ const parsed = JSON.parse(arg.startsWith("@") ? readFileSync98(arg.slice(1), "utf8") : arg);
181725
181826
  if (parsed === null || typeof parsed !== "object" || Array.isArray(parsed)) {
181726
181827
  io2.error(JSON.stringify({ error: "invalid_definition", problems: [`--definition must be a JSON object, got ${Array.isArray(parsed) ? "an array" : parsed === null ? "null" : typeof parsed}`] }));
181727
181828
  return 2;
@@ -182003,7 +182104,7 @@ default (no --glyph): ${DEFAULT_GLYPH2} \u2014 a mark that claims nothing, so th
182003
182104
  const rememberLastDist = async (jobs2) => {
182004
182105
  try {
182005
182106
  const dir = contentDir(flags);
182006
- if (!existsSync80(join81(dir, "himalaya.content.json"))) return;
182107
+ if (!existsSync80(join82(dir, "himalaya.content.json"))) return;
182007
182108
  const { lastDistFromJob: lastDistFromJob2, writeLastDist: writeLastDist2 } = await Promise.resolve().then(() => (init_capabilities(), capabilities_exports));
182008
182109
  const own4 = await appId(dir);
182009
182110
  for (const job of jobs2) {
@@ -182241,7 +182342,7 @@ ${label2}`);
182241
182342
  const platform = str9(flags.platform)?.split(",").map((p2) => p2.trim()).filter(Boolean);
182242
182343
  {
182243
182344
  const distDir = contentDir(flags);
182244
- if (existsSync80(join81(distDir, "himalaya.content.json"))) {
182345
+ if (existsSync80(join82(distDir, "himalaya.content.json"))) {
182245
182346
  const issues = await iconIssues(distDir, flags.strict === true, { requireDeclared: true, requireVerified: true });
182246
182347
  const errors = issues.filter((i2) => i2.severity === "error");
182247
182348
  for (const i2 of issues.filter((i3) => i3.severity === "warning")) {
@@ -182580,7 +182681,7 @@ ${label2}`);
182580
182681
  const dpxPath = dpxSessionTokenPath();
182581
182682
  let dpx;
182582
182683
  try {
182583
- dpx = readFileSync97(dpxPath, "utf8").trim();
182684
+ dpx = readFileSync98(dpxPath, "utf8").trim();
182584
182685
  } catch {
182585
182686
  io2.error(JSON.stringify({ error: `no dpx session at ${dpxPath} \u2014 run \`dpx auth login\` then \`dpx auth token > ${dpxPath}\` (dpx 2.x keeps its own state in ~/.dpx/auth.json and does NOT write the legacy session file), or omit --dpx` }));
182586
182687
  return 1;
@@ -183001,7 +183102,7 @@ ${report3.ok ? "OK \u2014 data + serve plane reachable." : typeof report3.hint =
183001
183102
  const path2 = dpxSessionTokenPath();
183002
183103
  let raw;
183003
183104
  try {
183004
- raw = readFileSync97(path2, "utf8");
183105
+ raw = readFileSync98(path2, "utf8");
183005
183106
  } catch {
183006
183107
  io2.error(JSON.stringify({ error: `no DPX BO session at ${path2}` }));
183007
183108
  return 1;