ksaa 2025.11b3__py3-none-any.whl → 2025.11.post1__py3-none-any.whl

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 (303) hide show
  1. kaa/__init__.py +0 -0
  2. kaa/application/__init__.py +0 -0
  3. kaa/application/services/__init__.py +0 -0
  4. kaa/application/services/config_service.py +112 -0
  5. kaa/application/{core → services}/feedback_service.py +1 -1
  6. kaa/application/services/produce_solution_service.py +83 -0
  7. kaa/application/services/task_service.py +145 -0
  8. kaa/application/ui/__init__.py +0 -0
  9. kaa/application/ui/common.py +123 -0
  10. kaa/application/ui/components/alert.py +251 -0
  11. kaa/application/ui/components/alert.pyi +257 -0
  12. kaa/application/ui/components/categorized_select.pyi +697 -0
  13. kaa/application/ui/facade.py +189 -0
  14. kaa/application/ui/gradio_view.py +135 -0
  15. kaa/application/ui/views/__init__.py +0 -0
  16. kaa/application/ui/views/feedback_view.py +65 -0
  17. kaa/application/ui/views/produce_view.py +251 -0
  18. kaa/application/ui/views/settings_view.py +581 -0
  19. kaa/application/ui/views/status_view.py +171 -0
  20. kaa/application/ui/views/task_view.py +102 -0
  21. kaa/application/ui/views/update_view.py +106 -0
  22. kaa/config/schema.py +2 -0
  23. kaa/db/constants.py +3 -2
  24. kaa/main/gr.py +71 -2733
  25. kaa/metadata.py +71 -1
  26. kaa/resources/__pycache__/__init__.cpython-310.pyc +0 -0
  27. kaa/resources/game.db +0 -0
  28. kaa/resources/game_ver.txt +0 -0
  29. kaa/sprites/41904062-e218-4b28-972a-b5cfcd058d2c.png +0 -0
  30. kaa/sprites/5c49d3b3-656e-4c8c-ae1a-9b0209b9dcc3.png +0 -0
  31. kaa/sprites/__pycache__/__init__.cpython-310.pyc +0 -0
  32. kaa/sprites/ae4742aa-acda-442d-bf73-b3fe7b66e85c.png +0 -0
  33. kaa/tasks/R.py +136 -128
  34. kaa/tasks/R2.py +24 -0
  35. kaa/tasks/daily/club_reward.py +1 -0
  36. kaa/tasks/daily/purchase.py +33 -1
  37. kaa/tasks/daily/upgrade_support_card.py +12 -2
  38. kaa/tasks/produce/common.py +1 -0
  39. kaa/tasks/produce/in_purodyuusu.py +21 -7
  40. kaa/util/reactive.py +182 -0
  41. {ksaa-2025.11b3.dist-info → ksaa-2025.11.post1.dist-info}/METADATA +21 -21
  42. {ksaa-2025.11b3.dist-info → ksaa-2025.11.post1.dist-info}/RECORD +303 -278
  43. /kaa/application/{core → services}/update_service.py +0 -0
  44. /kaa/sprites/{3cda578a-fa75-4bbd-9cff-be4bc4355a58.png → 01e93c2c-28dc-41f8-8f9a-ec62ec12aa01.png} +0 -0
  45. /kaa/sprites/{03d22cb3-0193-4dcb-8a0d-98b7ca9c2b4c.png → 02ac01e0-00b0-46d8-a6db-56248c843c6d.png} +0 -0
  46. /kaa/sprites/{3ffd2992-fa55-499c-8c3b-193518ebbe07.png → 033e73d1-9f45-4bca-bf96-6778410f2fc4.png} +0 -0
  47. /kaa/sprites/{9f46f543-d7dc-4836-a210-125d686475f9.png → 04036690-5b0f-4ee0-a9d0-022ee822bf0e.png} +0 -0
  48. /kaa/sprites/{ae106b38-da4f-4b0d-b9c3-541fd58f4de7.png → 041bd3fc-d040-4773-8641-4e4509300d2f.png} +0 -0
  49. /kaa/sprites/{2abce6a4-111f-42bb-9255-f98d544108de.png → 04974917-b1e8-4ccc-807b-6f651026c955.png} +0 -0
  50. /kaa/sprites/{114730f6-eddd-4381-b723-aee18cde0d90.png → 04c4e4c2-9908-4be7-bcbe-4d926ca76737.png} +0 -0
  51. /kaa/sprites/{b76add75-2187-428c-9ede-fb43086bacb6.png → 052ab0f5-8d95-4b5d-8678-3838322d9e5e.png} +0 -0
  52. /kaa/sprites/{a3fe5859-62ba-403e-9367-65db0ad15943.png → 05b97cdf-f7df-4d91-9ec8-5e9594a46382.png} +0 -0
  53. /kaa/sprites/{0b436edb-8f6a-429d-87b7-5d4250f651ac.png → 061b032f-860b-4c53-889b-aa126797f062.png} +0 -0
  54. /kaa/sprites/{7c4ca388-5167-478a-a32b-0e108edad888.png → 07b43eb9-db32-4046-96d3-9f4314bfd80a.png} +0 -0
  55. /kaa/sprites/{3eb9b21b-abbe-49fd-a3a9-6e1c1a6e91d9.png → 08b12ded-8230-4c7e-bb9f-27c85b0fdabb.png} +0 -0
  56. /kaa/sprites/{218a6ab3-93f6-4bb1-9848-8c97ff695945.png → 09364c3a-f892-4911-abdc-2f5fea09289f.png} +0 -0
  57. /kaa/sprites/{307b58f0-20c1-41bd-9eaa-1337fd0e6563.png → 09d2a63d-d2f0-4b97-b3cb-22a61b1530f7.png} +0 -0
  58. /kaa/sprites/{ae0ce964-eb8f-45a1-aa4d-f47a5c8c720f.png → 0cad6e46-276f-424e-a79e-d272ebaa7c8e.png} +0 -0
  59. /kaa/sprites/{5a49b6d2-2bcb-49bc-a28f-b8bd1441f60a.png → 0e49fbde-6be6-42b3-b8d1-36e0cb9cc35d.png} +0 -0
  60. /kaa/sprites/{1a5c147b-e28e-42ad-893a-7430d8f4fc35.png → 0e51d671-928c-4972-8ac0-de446202070b.png} +0 -0
  61. /kaa/sprites/{a4c6d967-0251-4b33-acb3-81d24f82d5a4.png → 0e6f8981-f46c-4c7d-9d90-fe349f0a1d77.png} +0 -0
  62. /kaa/sprites/{12455dbd-7d70-4435-a3ba-f40654e75c37.png → 0e9e3dbf-6e94-4a12-b558-3d8ab500c0a6.png} +0 -0
  63. /kaa/sprites/{95d715c3-d569-48b5-be7b-c21cd2a160db.png → 0eafb6c1-9d85-4fe0-8011-7235704ca9d3.png} +0 -0
  64. /kaa/sprites/{22071c63-a1bc-4163-8d5a-973b3d579c76.png → 1002a830-1ad5-47a7-b7dd-ed2989e6fc1b.png} +0 -0
  65. /kaa/sprites/{8d416e23-04ef-47bd-8cc8-7f18d1bab736.png → 10943367-c1d8-41c7-a831-d5d05288875a.png} +0 -0
  66. /kaa/sprites/{8f9dd0f0-f9af-4eec-a89e-8f2c92f88a98.png → 10f37db0-8c3e-4790-a5c3-cdb841f106a7.png} +0 -0
  67. /kaa/sprites/{aeab8f9a-fe61-4c2d-a494-ffc19a9cae91.png → 11f65378-b982-4936-9ac7-68560a74a042.png} +0 -0
  68. /kaa/sprites/{71913fde-c3db-463d-800d-e1b35fa2c8b4.png → 1660acf7-a420-4d92-a90c-55c5ff208da6.png} +0 -0
  69. /kaa/sprites/{88be2dcc-68ca-4596-9b2c-544a196cab64.png → 170d28bf-d262-4bf1-b35f-8f3d4b4fff6e.png} +0 -0
  70. /kaa/sprites/{bd4cd421-f702-47c0-9f8b-77914973108c.png → 182d8c71-5ce5-4ee1-9f66-ef99aadae654.png} +0 -0
  71. /kaa/sprites/{ff8efb8f-e1a4-4202-a6e1-680eb44f58da.png → 18adb1a5-b95d-41ff-9cb9-16613fa4cf6a.png} +0 -0
  72. /kaa/sprites/{3a211792-1243-496a-b41e-0e3fd121cd5b.png → 18d26894-fd12-4644-8269-a09d11be9520.png} +0 -0
  73. /kaa/sprites/{4f370ff6-61d1-405a-b29e-e6d0b3072194.png → 1b0dd18b-eb41-4c9c-b031-bab91c93fd5d.png} +0 -0
  74. /kaa/sprites/{11bc7d35-e58d-4301-a0b0-f557dbd73c7b.png → 1e7a6e19-760c-4fbc-b0f1-f620f51056b9.png} +0 -0
  75. /kaa/sprites/{6f50cd3b-6e46-46c5-99ed-26728d3212ad.png → 1fbe13d6-3a4d-4935-b687-a76a76a1e32c.png} +0 -0
  76. /kaa/sprites/{2f9e2dbb-66a1-4b13-9b9e-d62e10efa6d3.png → 1fe31432-a050-48db-acc1-becde42deaf9.png} +0 -0
  77. /kaa/sprites/{1b3c84c5-16d1-43a7-8513-719bd7a10450.png → 20146fe6-e62b-4c57-b229-901994903b70.png} +0 -0
  78. /kaa/sprites/{1e57ab88-9962-4024-81df-746529a758f9.png → 20c673e9-fcbe-469b-be35-7844a1d5a9cd.png} +0 -0
  79. /kaa/sprites/{9f3bfe36-8462-404f-94da-9bc324b1beed.png → 21747ae5-d94d-45d1-bda8-939389dc4874.png} +0 -0
  80. /kaa/sprites/{12f330a6-4eab-4015-b0e3-4e1a35a7b676.png → 21fbbe96-02bf-4835-aa04-068bc5cc6ca3.png} +0 -0
  81. /kaa/sprites/{6069f8bc-2a06-45a4-95ca-1ac9d8fa3b04.png → 24be7d90-7944-4a0a-a60c-67c9737b322c.png} +0 -0
  82. /kaa/sprites/{63b74752-73ce-4020-a7c8-0a71a9f67415.png → 24d6a47c-2099-45e2-9a67-b37767f459fc.png} +0 -0
  83. /kaa/sprites/{80800c2e-417d-4118-b726-93aaabfc08bd.png → 2568d3d3-b642-4ea4-b929-4dee0b09738a.png} +0 -0
  84. /kaa/sprites/{4eb665ef-7741-40f9-8174-7b6ca66d045b.png → 263b1037-fb51-4eb1-8c71-5232b03235d2.png} +0 -0
  85. /kaa/sprites/{81b1b160-2d0f-42ad-924a-9572a54f343a.png → 27dbd535-7f95-4698-8fea-2bed67dd6968.png} +0 -0
  86. /kaa/sprites/{2a82e2d6-0722-433a-87fa-f1752ce0b9b7.png → 286801f7-3af5-4cd0-9c25-46c12c2cd8f8.png} +0 -0
  87. /kaa/sprites/{5f2d0b2b-8425-4dd8-8b85-d62f4b75286c.png → 298182ae-747a-44e3-8511-a64d3532b8ac.png} +0 -0
  88. /kaa/sprites/{f7e34403-a53c-4d3f-935b-25b4acb7f7a5.png → 2aac3a97-435e-4c02-925f-e2d1673b7982.png} +0 -0
  89. /kaa/sprites/{a2dd125b-9868-4e01-9a46-3b552c2ebdc9.png → 2cc63c6d-5988-4f72-ae88-b03b8246ad97.png} +0 -0
  90. /kaa/sprites/{0db579bf-d555-4468-8104-c2d2e68d33b1.png → 2d3470f8-a714-4175-a8fe-71eef80921b6.png} +0 -0
  91. /kaa/sprites/{87ed135a-2eb1-4e21-8928-d0307a22ea66.png → 2e3b2982-d14b-4b49-bb64-da8178311d75.png} +0 -0
  92. /kaa/sprites/{7e8904fd-5863-471f-8e9a-d69d9ca72f8f.png → 2e41df89-a8d7-4e7e-96cb-7f551414823b.png} +0 -0
  93. /kaa/sprites/{11870372-dc78-4a80-8320-15bb24da6f25.png → 31e02e56-f266-47b5-8b10-fe79fe06d614.png} +0 -0
  94. /kaa/sprites/{ed6df33a-c7aa-4542-a87b-9cc9cae0465c.png → 3208d803-2c92-4775-80dc-0527df4b63d9.png} +0 -0
  95. /kaa/sprites/{330c2207-af32-453b-8db7-889cda83e7cc.png → 3314dc6c-868f-4045-9f60-1f3a17fed324.png} +0 -0
  96. /kaa/sprites/{ad17ae00-f6ce-4f32-9386-9a8073b5e79a.png → 345435d0-5a5c-494b-95ab-1e086fb88f51.png} +0 -0
  97. /kaa/sprites/{03d0acec-15fd-4c21-82ce-122764def185.png → 358f1561-c16f-45a0-842d-d62fc735dc80.png} +0 -0
  98. /kaa/sprites/{3c490171-6810-44f0-b28d-c6b664347a3c.png → 3782897a-f1c2-4f05-a02d-4c760672f52a.png} +0 -0
  99. /kaa/sprites/{ec35a0b8-1afa-48ff-ae66-9c1ef966348d.png → 385e60df-2063-4caf-b1ea-e6ac909bc49d.png} +0 -0
  100. /kaa/sprites/{5ec51718-1403-4a79-bd85-46e1fe04d8c9.png → 39450419-26b5-4fbd-a5d4-1bab369ced30.png} +0 -0
  101. /kaa/sprites/{9088f8c0-59f8-41c6-994c-ae283ac94c24.png → 397c0e24-f35a-48c9-a576-aa1fcfc517b5.png} +0 -0
  102. /kaa/sprites/{e79a2a08-3b58-4ab0-8c2b-769f30cc8591.png → 3ad30d90-8b57-4641-a9e2-33970e5cea1d.png} +0 -0
  103. /kaa/sprites/{2d8e6464-aceb-41fd-9e78-7523738d5720.png → 3adef8f4-629d-4cb7-b54a-dadabfea155e.png} +0 -0
  104. /kaa/sprites/{3fb84a71-ed15-4989-9598-34e7342f38f5.png → 3b86b4ac-aa29-4309-82da-f47a174d88cc.png} +0 -0
  105. /kaa/sprites/{2460d0c9-50e2-451b-b609-ad466b574395.png → 3c6bbcea-488d-4df8-ab40-21e263aa0b16.png} +0 -0
  106. /kaa/sprites/{15605f7a-2206-436c-8a71-011d9f95cf4e.png → 3db54e0b-672d-4dfd-8a9b-5db37a08be74.png} +0 -0
  107. /kaa/sprites/{f237d88e-92ac-4ebf-85e1-80a696b5203a.png → 3e0da5df-a4de-42bd-83bd-13df3c393af4.png} +0 -0
  108. /kaa/sprites/{9acd9a59-004f-4e1d-a208-0c293f2702d5.png → 402d430d-b507-4aa6-b3e1-db66b38c71b4.png} +0 -0
  109. /kaa/sprites/{455dcf19-63f5-4b0a-99e6-b23d3876d199.png → 414140a2-de67-4c7f-a7f6-c8b30a6c8d6a.png} +0 -0
  110. /kaa/sprites/{97a3791d-fa9d-453d-8081-c574fe88b823.png → 4147514f-4f3f-4dd5-952b-0f2cf5f62181.png} +0 -0
  111. /kaa/sprites/{cb15d9a3-78fe-4f03-bd23-90ba6169ddff.png → 43e53b71-9d69-4f4f-b217-a1abeea8991e.png} +0 -0
  112. /kaa/sprites/{f333118a-81c2-417f-b54f-64dc4e8df613.png → 44a50906-1835-4e29-ae97-496b4cdde9e9.png} +0 -0
  113. /kaa/sprites/{3192a62f-224d-44b1-a0b9-b1fc22de8ec1.png → 44fab632-3920-4cd8-9967-f7a8a1ee29a0.png} +0 -0
  114. /kaa/sprites/{31b4c370-696f-4dfc-a918-839495520266.png → 45f705f9-58fb-4729-ae55-ee10848678d6.png} +0 -0
  115. /kaa/sprites/{3ea8e354-2684-46f3-9f5a-43f094717c95.png → 4678a5fa-5b1c-4fdc-b7c4-e0b820039546.png} +0 -0
  116. /kaa/sprites/{affc87db-2f63-4e4a-855e-6ff608226f1e.png → 4738974e-60b8-4583-8548-94211c164291.png} +0 -0
  117. /kaa/sprites/{0c266b0e-de7a-49c1-9709-b01fb5086f75.png → 474c1678-9c36-495b-aef2-cadbb47b237d.png} +0 -0
  118. /kaa/sprites/{5a677634-99cf-45b5-bc0c-94120872a518.png → 47783412-9cc7-4ba0-904d-8cd300222889.png} +0 -0
  119. /kaa/sprites/{72a8bcd2-3f32-4ee5-8295-eedf441d6a1a.png → 47ed66a4-9e7e-4646-b554-469dc86322db.png} +0 -0
  120. /kaa/sprites/{a9c5aeb0-c0c9-47da-8793-ffe8d172bea0.png → 488a1403-d300-4fa6-94c7-da71d09fd4bb.png} +0 -0
  121. /kaa/sprites/{d23a600a-7002-4268-96a4-18dc54928ec6.png → 48c16d60-05d6-43bc-97c3-7f099bfc0881.png} +0 -0
  122. /kaa/sprites/{7b4c3a81-8f09-4a00-90ee-d4df3f57e863.png → 4d0074ad-6db4-4060-b71a-05c0e36e57a6.png} +0 -0
  123. /kaa/sprites/{e30922ed-a02f-4ede-9968-1656be5a05b2.png → 4e3dbeb5-70bb-4642-9f73-01f9f98bc3aa.png} +0 -0
  124. /kaa/sprites/{b7f62cab-cc24-480e-bf4c-25c43a1e801e.png → 4f2f8328-a698-40d3-a40f-1f1ae77dc843.png} +0 -0
  125. /kaa/sprites/{45f09e08-53ea-4e08-97dc-70f689bab002.png → 52d0ff68-7a55-4d53-bc20-a1fa05cfe876.png} +0 -0
  126. /kaa/sprites/{60896822-de58-4e07-b2d9-86a7f4068de1.png → 52d737a7-5b0b-4ce0-ae3f-5d4048060f12.png} +0 -0
  127. /kaa/sprites/{bbe59f62-c3e7-404c-a313-b50db70de7b5.png → 54987de4-3e1b-4640-b203-1e4c82d7e98d.png} +0 -0
  128. /kaa/sprites/{568608bd-a1fa-4faf-ae15-179563a7e84f.png → 54a9cae1-62e5-4546-a46a-a5157f51e8b4.png} +0 -0
  129. /kaa/sprites/{71976c1a-5df9-44a5-b4ea-08b5d617d813.png → 56d35e14-ada9-4bfa-a48f-e4601054e7eb.png} +0 -0
  130. /kaa/sprites/{0814c0fd-6f89-47d3-8089-e8cfde569750.png → 575784c1-7c4a-4484-9f38-aa3c280ce56e.png} +0 -0
  131. /kaa/sprites/{28335ba3-9a0f-46cd-b66d-047781773264.png → 577417ee-6635-4cb4-9f28-d1e1b47ae2cd.png} +0 -0
  132. /kaa/sprites/{3ea03db7-4de9-45c4-a07b-a9bbc2c63e70.png → 58358122-984b-4c31-91d7-eaf5c8c9353d.png} +0 -0
  133. /kaa/sprites/{3a4e2d8a-deca-4980-b6c2-37bfc17d2720.png → 5a06a662-ffa9-49a9-a86d-136e5983abdd.png} +0 -0
  134. /kaa/sprites/{545a9032-a676-4d9d-ac74-2b2c9b330d1a.png → 5a0bfeac-fb22-4b0c-b775-4aa6220bae89.png} +0 -0
  135. /kaa/sprites/{fe993a91-1a49-488e-b7ff-c1b05b8f2b5f.png → 5aad0930-54a3-4b6d-bec8-250228963f69.png} +0 -0
  136. /kaa/sprites/{c76c6ccb-d099-4c3c-9eda-13be33aa48ae.png → 5c8eebc5-6d5e-445e-a3d1-66dce2bb6338.png} +0 -0
  137. /kaa/sprites/{803fb770-6982-4460-8fe0-f9ccd67367c2.png → 5c9a1581-a14a-449b-a1b0-7a31a965facc.png} +0 -0
  138. /kaa/sprites/{d1bdfa3b-34df-488d-9f9b-8c7b04dd4ab3.png → 5d2b03a2-acb6-4bd2-86e8-1b203d1aeaec.png} +0 -0
  139. /kaa/sprites/{264d021a-b322-4472-8a7b-5f1322aba993.png → 5f02656f-1314-44d0-ae31-a176c24d758c.png} +0 -0
  140. /kaa/sprites/{8bf08bab-7c55-45e1-8433-c2213a323480.png → 608c12e2-95dd-4efa-93b2-e648e9583062.png} +0 -0
  141. /kaa/sprites/{bb3990c8-4618-4d96-9365-a4d1213b59f7.png → 62411b55-7be8-46d9-aa4a-fb56dab6658c.png} +0 -0
  142. /kaa/sprites/{a42ac612-acbd-45cc-88fb-104ff9b7d2d8.png → 647bb09a-13f8-4d54-a8ac-5b534f1a8d87.png} +0 -0
  143. /kaa/sprites/{8805fead-f7e2-4905-a42e-05ebba2fbe21.png → 6483c406-26cc-44ee-ad12-2a30ec47aedb.png} +0 -0
  144. /kaa/sprites/{acd741da-d4ab-4b76-a6a3-4a2fd25870ef.png → 6580ea89-553e-4445-a855-f834d580e6e6.png} +0 -0
  145. /kaa/sprites/{622d700e-0fd8-4a92-a286-1e8143c70570.png → 67d6a201-dfb9-4c88-b42b-d968cf9a034c.png} +0 -0
  146. /kaa/sprites/{8d09178a-251e-4f74-b023-12233417621b.png → 686a2bf5-0498-4d53-8ba1-1110ff36f046.png} +0 -0
  147. /kaa/sprites/{cf49878d-a1c5-4b9f-9502-1e0d9eaadc49.png → 699ca639-3006-45c1-b5fd-8cf9631fd3ea.png} +0 -0
  148. /kaa/sprites/{15dd89cc-53ed-4c77-a355-62e3bd7a15dd.png → 6a93b483-0848-45e4-a937-51850f296c3d.png} +0 -0
  149. /kaa/sprites/{20bd834e-c99c-4e80-92db-0740e5bbe746.png → 6b4e4351-b370-48cd-8e8f-ca663d44aa0c.png} +0 -0
  150. /kaa/sprites/{04ea8503-cdd5-4b3e-a33b-63893b92f6ba.png → 6c961dee-87f3-42f1-acef-9fe7d6be4df1.png} +0 -0
  151. /kaa/sprites/{6f6d7af3-8380-439b-9d26-3fbd5a103b49.png → 6d22b7ee-6e0f-4f5d-96a4-d4cba26a4d04.png} +0 -0
  152. /kaa/sprites/{28df544b-72f2-4ed8-8bf3-609ff99633d9.png → 6d5a3e08-257c-4394-96a6-e0719a66e5ae.png} +0 -0
  153. /kaa/sprites/{e687c2ba-2c30-4fc8-804f-fea5815f6765.png → 6e8325f9-7fdb-4729-ac13-ca67244d97bc.png} +0 -0
  154. /kaa/sprites/{d91483a2-83fa-4664-8eda-52498c0e77bc.png → 71051aa7-81f1-4144-9318-4405e10547ee.png} +0 -0
  155. /kaa/sprites/{05251a85-2883-4098-842e-6544391de919.png → 71d0d086-50f1-4f50-bb24-a0190827bd08.png} +0 -0
  156. /kaa/sprites/{08bde3ff-7554-4bdb-a7f0-193323489d5b.png → 71f87e1c-77f1-45c7-bb9c-16f14498682b.png} +0 -0
  157. /kaa/sprites/{321b7040-87d7-4f87-9b44-ad2972584a11.png → 732ffc6c-6a17-41f8-9cd1-f218ebc0c23f.png} +0 -0
  158. /kaa/sprites/{205e03de-46d9-4983-a2ea-a7f7500d508f.png → 737570a7-b8f9-4cd7-b5bd-f40cd51b49f8.png} +0 -0
  159. /kaa/sprites/{cb0bbf0f-a25b-4ec4-99bd-f5742270a062.png → 744ea25a-9b6e-4f8f-9a00-0ac714571b09.png} +0 -0
  160. /kaa/sprites/{06cf74aa-635f-48ab-b965-36981f2063d3.png → 745ee069-0f22-4b99-9327-513f365eb922.png} +0 -0
  161. /kaa/sprites/{67edcd91-d2c1-418b-987a-e60263626f56.png → 74b50642-0b18-45c3-8a5d-013ef1e0eb78.png} +0 -0
  162. /kaa/sprites/{c4505a31-74c5-4b3d-bfcf-a67c3ef0039e.png → 7601152e-a216-4bf8-92a6-4e3e6ea01d3d.png} +0 -0
  163. /kaa/sprites/{5f6fafd9-43aa-443e-994e-f2688af5e238.png → 77e7262f-0d12-4bd9-9f22-e8f41a600bf8.png} +0 -0
  164. /kaa/sprites/{3ae72684-1d40-43cf-9508-511c010de64f.png → 78b928c6-0d24-4e87-a84f-0091d42f8e49.png} +0 -0
  165. /kaa/sprites/{65f79941-1c78-496a-a67c-c50f4227bd34.png → 7a23d548-4395-40cc-ac19-4497fa3d9fe2.png} +0 -0
  166. /kaa/sprites/{7d4709f8-6d0d-493f-819e-74cb0f7c166b.png → 7a7871dd-fd07-4234-bd01-c3c9e41bad45.png} +0 -0
  167. /kaa/sprites/{f7264cee-fea6-47b5-9f9b-8f3f31c03ea0.png → 7c193df5-0a1d-444d-9f92-e9c0db79e53a.png} +0 -0
  168. /kaa/sprites/{861a4faa-2522-41e9-8e20-7bd9180bea5a.png → 7d3c3a12-8d0f-48a7-9fd4-66db5e58488f.png} +0 -0
  169. /kaa/sprites/{51eb4be2-22fa-4683-82c7-513f5934f7b9.png → 7d9f8ea3-1fdf-4675-8ddf-38393e235746.png} +0 -0
  170. /kaa/sprites/{fda4b3eb-e31a-448b-8cb3-9126e1ab7deb.png → 7e729638-f54a-48bb-8bbf-eeaa4d697502.png} +0 -0
  171. /kaa/sprites/{b9770cd2-b55f-44dc-965f-f29686fba7da.png → 802e717f-d70a-4f34-8b96-be586a8dfde9.png} +0 -0
  172. /kaa/sprites/{ccfab3e2-7b6d-4ae3-998b-4e5c1863884a.png → 831cac7e-49e9-45d1-bb65-b1db733cda90.png} +0 -0
  173. /kaa/sprites/{6005bf30-fd7c-401e-8efd-050fa97ad7f3.png → 83f258af-35b8-4918-a971-80ea938a854e.png} +0 -0
  174. /kaa/sprites/{e05f2c16-926f-48be-bdd0-16182e879394.png → 8411b102-866d-4e41-ab12-507397b80ca5.png} +0 -0
  175. /kaa/sprites/{09222fb0-78a6-4663-8c1f-1d44e881513d.png → 848a6c94-97a5-44f7-b84b-2f3283dc446b.png} +0 -0
  176. /kaa/sprites/{e2a0c1a6-c0cf-400e-99be-1ed0d35c6ed8.png → 84b3c8e2-6e37-443c-be9b-8a95aedc6f37.png} +0 -0
  177. /kaa/sprites/{fa5b5b92-9c60-4811-a44c-8e897c9632c3.png → 85308e03-ba72-499a-9d12-870269fa3cd0.png} +0 -0
  178. /kaa/sprites/{38426696-ff13-4f20-9f74-b05855990153.png → 86a56df9-47ff-4741-822d-5b7e024d1598.png} +0 -0
  179. /kaa/sprites/{89437aca-7339-4795-b848-ec529b1e5e8d.png → 8922feef-17db-4b10-93da-1bad30492ac2.png} +0 -0
  180. /kaa/sprites/{61229c71-303b-4dc9-ba4e-6a14e5ab161e.png → 8a6ed80c-79c6-4df6-ab65-64d67afb2d5b.png} +0 -0
  181. /kaa/sprites/{504e4927-bfeb-43ee-aa5c-35cec664a4c8.png → 8b04d1a8-6cd6-4d2e-91e7-bdc58c46d939.png} +0 -0
  182. /kaa/sprites/{648d43f6-b251-4d6f-a808-ae7325c91a59.png → 8b60ce9f-09c0-48a0-93f0-d51e0aa16afb.png} +0 -0
  183. /kaa/sprites/{76970b91-7864-4413-bfc7-79c04a48dce7.png → 8c0439d9-9eb7-43f3-8d1e-7e41c57c1bbd.png} +0 -0
  184. /kaa/sprites/{922af7d1-75e9-4ac8-a4e7-2dad8bb1ca87.png → 8c59d3ca-baff-4260-aa0a-6cedac1c2771.png} +0 -0
  185. /kaa/sprites/{e7630ccb-6824-49e3-986f-2a65a2c4a948.png → 8d7b4761-2555-4398-bb74-b70de3b75e22.png} +0 -0
  186. /kaa/sprites/{fbbb73f9-880e-4c7f-9ec9-276bdab4b394.png → 8dd3de6d-07d5-4d93-9663-71a3a4c57a32.png} +0 -0
  187. /kaa/sprites/{ddb59f04-91a0-4fbd-8921-be13acdab291.png → 9009323d-1418-4aed-8a93-075b326d2e7a.png} +0 -0
  188. /kaa/sprites/{82259f79-2bef-442b-bf16-78cb4f22e3be.png → 901a2e7a-37f3-4dda-a58b-5a7644ead6b9.png} +0 -0
  189. /kaa/sprites/{fd8a7a5d-f021-4bfd-83f7-a2dd33325837.png → 904d22f7-51be-486f-8dd1-1871c0cf28e3.png} +0 -0
  190. /kaa/sprites/{bff753bb-b02e-441b-89e5-14845f18c6f6.png → 90943f62-0a03-4a75-804a-0c2fa7b27af4.png} +0 -0
  191. /kaa/sprites/{e392856d-ac59-4414-8fb8-df93a1a99be4.png → 9180e0e7-2cc4-46c7-95ff-fbe83806baf2.png} +0 -0
  192. /kaa/sprites/{f9157db8-d70b-4d46-9800-5a833ce7eda8.png → 93f5c33e-ec81-4a70-a11f-b2e8cb1751ee.png} +0 -0
  193. /kaa/sprites/{ed98a341-5dff-4af7-a194-d28232d481a4.png → 9558b2a5-3961-4ad0-9ce8-379d71920d78.png} +0 -0
  194. /kaa/sprites/{64dfeb35-61ad-4e9b-9847-a18530f02584.png → 968dff88-5a2f-42c7-b64b-406801e22c87.png} +0 -0
  195. /kaa/sprites/{8661bc83-9b0a-4555-8b21-2258b31c7f57.png → 99d99d78-ee37-4e84-8768-b5a7f4f9bd51.png} +0 -0
  196. /kaa/sprites/{6c032aa7-20e3-4e2e-b1a4-1585141ba22b.png → 9caa102c-70af-4a8c-b595-82df9f4c05d8.png} +0 -0
  197. /kaa/sprites/{73b6f3aa-5179-41d6-a82e-22e14aa8cd6a.png → 9cc77f5e-e7d0-4de4-aeb8-587ab8cb212a.png} +0 -0
  198. /kaa/sprites/{e57db8c2-c050-43fb-8205-339aeb5875e8.png → 9e06b7d6-5d15-4844-bbfe-ad1af7da3113.png} +0 -0
  199. /kaa/sprites/{14a697d4-0b58-4644-bb2d-8823d2fefcb8.png → 9e45adeb-4637-4b8b-a687-f1d2cd8c6c18.png} +0 -0
  200. /kaa/sprites/{38186efc-850c-4d83-97bc-9417f1494b94.png → a006054e-61fb-4d2b-a98e-45ce3c663662.png} +0 -0
  201. /kaa/sprites/{b77a7e97-dc59-493d-9d76-4ea9c2876978.png → a04ed558-25e3-42d7-a662-250cad9fa5df.png} +0 -0
  202. /kaa/sprites/{c78fb143-18e3-4697-a0c1-6151514f2a7c.png → a0a62dbf-a027-4b63-86e4-2e863b2edb01.png} +0 -0
  203. /kaa/sprites/{b02c15b5-04b4-40d9-bb13-267786e8e049.png → a0f98517-e4cf-422c-b29f-395a55939772.png} +0 -0
  204. /kaa/sprites/{dcea5aae-322e-4cd4-b218-0eac48690755.png → a4b898aa-405e-4235-8075-a34640a2b023.png} +0 -0
  205. /kaa/sprites/{b40bebbf-2800-40fb-b7a2-1c2d5995e747.png → a5c3108f-c92d-4ce7-8c4e-93b79f55ceb3.png} +0 -0
  206. /kaa/sprites/{fac7b90a-1174-477b-803b-28798647c307.png → a7e6222f-f8ca-47c2-af1e-f158a87f6a03.png} +0 -0
  207. /kaa/sprites/{d8ba1932-978c-451c-a717-d7d2b6db35d9.png → a94d76ef-db70-45a9-aeca-ba16344cc572.png} +0 -0
  208. /kaa/sprites/{cec36685-85a7-4e84-bbbc-4df70b4f7bac.png → ab3d3301-8297-43a8-bf0b-85413c115a7d.png} +0 -0
  209. /kaa/sprites/{bdb72f31-5808-4451-827f-fffc3b616083.png → ad589feb-6d19-47c7-a582-55ee130ee89d.png} +0 -0
  210. /kaa/sprites/{c035ac76-39e9-466b-a606-28bc52bc73e8.png → aed87cd4-eb05-4c24-8adf-cd3fab20e9a3.png} +0 -0
  211. /kaa/sprites/{a888e87e-49fe-405d-b074-3dda30304808.png → afb9e4a9-29a5-4202-9f75-e7d2f1b64aa4.png} +0 -0
  212. /kaa/sprites/{56ac84af-4c85-4b69-b449-98981c1df292.png → afe7f086-723e-4999-a7aa-3342a797d828.png} +0 -0
  213. /kaa/sprites/{fce4a481-e71c-4dab-aeac-59ff8b18201b.png → b1f547d4-c1ba-43fc-9398-4ccdc25b8b62.png} +0 -0
  214. /kaa/sprites/{0455e229-75c9-44ba-8729-745799746979.png → b2036053-36fb-4aa7-8348-e31942731a93.png} +0 -0
  215. /kaa/sprites/{8a0260f5-b32e-430e-bc98-7b5a77cab6ab.png → b61bd48f-1fe7-49fd-a588-09aac3b66f5a.png} +0 -0
  216. /kaa/sprites/{5247b052-5b45-4e64-b7fc-d566f5d4bc82.png → b6219452-323a-44eb-9f44-97b2ad0ee49a.png} +0 -0
  217. /kaa/sprites/{049ecbf6-d434-46fa-a42c-a447475269bb.png → b6da02bf-3f43-4ed0-9b13-f15becb42ce9.png} +0 -0
  218. /kaa/sprites/{f4195ceb-586a-4a8c-9424-4962239d2120.png → b7550a50-5943-45e7-9c1b-771117364844.png} +0 -0
  219. /kaa/sprites/{82200c8c-0916-4601-839a-945f96cc4ebc.png → b865eedf-7bea-46f6-bf14-7f8f4e9ab000.png} +0 -0
  220. /kaa/sprites/{c8c17304-e949-4dfc-b07d-9e7133483e31.png → b8f0ed47-6115-4b88-848a-2fc4a1ab25d8.png} +0 -0
  221. /kaa/sprites/{bdb1460e-c5db-494a-a58a-688f72b6bdba.png → b9224799-d0c1-43d9-9f11-1d35903fc4d9.png} +0 -0
  222. /kaa/sprites/{89841ff0-e834-4a7e-b9d5-00a9490b6b7f.png → ba2fd21c-6228-4e2d-b2db-a6d085cb38a6.png} +0 -0
  223. /kaa/sprites/{c2100faf-1234-49db-b6d4-5a08a4b08272.png → baa9c530-68cb-4111-85f6-060823ad32c4.png} +0 -0
  224. /kaa/sprites/{7a74b5f5-7a04-4678-8e6e-57b5de127182.png → bb224de8-828e-4bc5-a986-632c72fc9157.png} +0 -0
  225. /kaa/sprites/{a34502b4-10bd-42ca-9ada-a9cdb57097dc.png → bcc6ee72-ad5a-4d5c-b6c7-1b3fdfc5fa81.png} +0 -0
  226. /kaa/sprites/{a6ed21f0-4da4-4065-bb59-062a70e132ca.png → bebf9f6d-7cca-44c5-9b9f-fa36e29e97b3.png} +0 -0
  227. /kaa/sprites/{de81f919-4d01-4a4e-bdc1-ffe6e23a5c22.png → bed54f67-d828-403c-9cb3-6a7c85695c2a.png} +0 -0
  228. /kaa/sprites/{a2545c5c-b5cc-4fd2-93c1-04c74c17ee16.png → befadc5e-862a-4818-9223-5d58e4ac03cb.png} +0 -0
  229. /kaa/sprites/{8fdc102b-d8f3-4d16-b8ef-1d804f5aff07.png → c0d1896c-71a1-47d6-9847-b87543a942e9.png} +0 -0
  230. /kaa/sprites/{cdf310f0-b917-4f92-95a9-893af76e3c3a.png → c2984c0f-3e17-45c3-9d7c-dc4f14440b13.png} +0 -0
  231. /kaa/sprites/{054db45e-1434-4604-91ec-7ac586ca11b5.png → c4d0b0c9-ffbe-4b6c-9bf3-b05919e1a07c.png} +0 -0
  232. /kaa/sprites/{64f8ef99-4766-471b-aeb0-b109704d9615.png → c6b53acc-bc89-465e-9814-0138513327ac.png} +0 -0
  233. /kaa/sprites/{7c62081d-097a-4514-a69d-69e96201e816.png → c72a4609-6bf0-4568-8ebc-73c30d67c61e.png} +0 -0
  234. /kaa/sprites/{7e16af89-bb51-4889-8a7e-25715ff5faa1.png → c7829f82-bfce-4259-9ec6-f1cfb7bac925.png} +0 -0
  235. /kaa/sprites/{99a27ff1-bc1c-48a2-9f9b-0803338d1bd8.png → c82ebc01-0127-417f-831a-9d17a84b2691.png} +0 -0
  236. /kaa/sprites/{f1eb4089-8cd1-4830-b00e-40535ddcd116.png → c8747b3b-745c-45ed-84b6-dde1b2558ce8.png} +0 -0
  237. /kaa/sprites/{5f4abae0-a1f0-4c8c-9d93-a8525caa9dd0.png → c893e762-f328-4ef6-b862-5da8eb049f9c.png} +0 -0
  238. /kaa/sprites/{3a4ec054-2c48-4359-afb9-fa5ea8191d16.png → c944d298-a46b-4799-aea3-eec22fc7d4ac.png} +0 -0
  239. /kaa/sprites/{c9245201-4d29-4088-a5e0-f4e93d4494b5.png → c98ef89e-4a1c-40f0-a82e-6851f7b6bbc9.png} +0 -0
  240. /kaa/sprites/{cea8f98d-ba68-498f-bd3d-cc10f0d4575b.png → cb04d87c-f5a9-405c-92ac-b3603e482221.png} +0 -0
  241. /kaa/sprites/{f34e8026-bdfc-47e6-a0ed-49e587ef0f40.png → cb43f670-6623-4af9-ac1d-746372e40511.png} +0 -0
  242. /kaa/sprites/{c0801be3-f07a-4afc-ab0d-7f5d3c4afbd3.png → ce357023-436b-4a39-882f-8410acd8f0d7.png} +0 -0
  243. /kaa/sprites/{19513e9f-2cbb-4f66-84b7-2ad2faed252d.png → cea9f5ea-5923-4c6e-bd24-90d2e084112c.png} +0 -0
  244. /kaa/sprites/{1ef5fa52-b6e1-42d0-947a-ce970eba057d.png → cf62e2df-3be1-4d03-9f34-1518280abd90.png} +0 -0
  245. /kaa/sprites/{fda78372-04b4-4d55-92b1-aedec20d0913.png → d0a483a9-400f-4b6e-87a0-9781b4454da0.png} +0 -0
  246. /kaa/sprites/{7efce7bc-12a5-4a53-9a0a-9fa755649ebd.png → d10d480c-e96e-475e-815c-0969f37fe3bc.png} +0 -0
  247. /kaa/sprites/{5e2b4bb9-f200-4723-96ac-5f907e28eaaa.png → d1839450-8d60-41a4-b035-8e1acd0f1c7a.png} +0 -0
  248. /kaa/sprites/{3e669188-5933-4502-b039-38f4d4649664.png → d19859f3-f7cc-46ef-8bc6-86df7856fd53.png} +0 -0
  249. /kaa/sprites/{18b13508-c46f-4134-b991-975c0a1b9a74.png → d28a18db-0f66-45a6-b3cd-69173ecdd790.png} +0 -0
  250. /kaa/sprites/{6fadb00b-e32e-4c45-a738-f21b8f48c139.png → d2d3d77d-a06f-4167-b02b-5ca688c0c0c3.png} +0 -0
  251. /kaa/sprites/{c05a600a-d79e-432d-a49f-5b2443d67bd4.png → d38c5015-e461-4e09-8b56-731472bdf59e.png} +0 -0
  252. /kaa/sprites/{e388db01-0870-412d-b8bc-5a512ec997c8.png → d473b5bd-4be3-4f0f-bb92-b909050f273a.png} +0 -0
  253. /kaa/sprites/{aba47934-f264-49f9-a72c-6ed90b112701.png → d609a029-5407-43c2-a9a9-07bfd43fcbb8.png} +0 -0
  254. /kaa/sprites/{318abb8a-5950-4d22-ac42-77219b5bc1a0.png → d6491f82-9637-47eb-8f35-eb272b5ef8df.png} +0 -0
  255. /kaa/sprites/{41ff9641-d200-4caa-bcfa-d8389a3438eb.png → d8d5019c-52e6-4767-a9aa-d8da6ffcbd00.png} +0 -0
  256. /kaa/sprites/{8299e3e2-cfd5-4380-adce-a46c93b1be4d.png → d8dd8b59-c05c-4350-a15d-be75c94d46cc.png} +0 -0
  257. /kaa/sprites/{a7f25aeb-d91b-47e0-ba1a-0c6382380102.png → d98263bf-15fb-430e-ba39-2558fa99cac0.png} +0 -0
  258. /kaa/sprites/{f8d8c943-1b36-4391-a7fc-2a49f8966d53.png → d9bc9bbb-9a1a-4cbe-b6ed-24112d7c5ac7.png} +0 -0
  259. /kaa/sprites/{4729b509-0f4a-4e96-b186-ec56c680c9e6.png → d9cb2f43-2786-48d8-90f8-8cf1929f6172.png} +0 -0
  260. /kaa/sprites/{677933e9-1481-4f01-95b4-d55bea51db8c.png → da922566-97ba-4477-bcad-35ea02a3ee48.png} +0 -0
  261. /kaa/sprites/{abe2757f-84f3-4967-bd05-79c17cb1f32c.png → dac8d8fd-006c-4f50-a4e0-d79dbf3f5915.png} +0 -0
  262. /kaa/sprites/{9a9a1f40-d308-4aa5-8d91-60342bc6a4e0.png → db33ab8d-160d-48c7-b464-dfe194e762d4.png} +0 -0
  263. /kaa/sprites/{c6b6b77b-2ec7-4fb7-8033-f4d061f4e9c8.png → dbc5db78-81f5-41e6-bdc4-dafaa9173320.png} +0 -0
  264. /kaa/sprites/{4fb1d36c-5fb6-4fe5-9ba3-07e056eb1dfc.png → dcfdfab4-8dfb-4069-bf88-8e8401ef86f3.png} +0 -0
  265. /kaa/sprites/{ebe22aea-0318-49d8-ab07-ce2eef34265f.png → de354b53-2fd0-4039-87e2-fcad2e070579.png} +0 -0
  266. /kaa/sprites/{c6b0f9ba-a976-474b-b22d-6fe4391d9373.png → e28ea25e-0bcf-4d52-b501-9ef7a4863870.png} +0 -0
  267. /kaa/sprites/{a97e2840-1575-4f2c-97df-6a720c644969.png → e2ac106f-edeb-4375-af8c-45f33e9bfae6.png} +0 -0
  268. /kaa/sprites/{a9ba2741-38da-4448-ab80-f0e5b3c3847f.png → e2ac927f-257e-4537-995d-fbfbe4983b70.png} +0 -0
  269. /kaa/sprites/{83c27159-36d2-4ccf-ace7-e5d2169e7e52.png → e642b9ef-c8a7-41d5-8d71-5cfbaf3017a1.png} +0 -0
  270. /kaa/sprites/{719297ec-82be-4820-8ecf-8bf6322b81fe.png → e749feec-6bf2-4c24-bb12-948e696b8116.png} +0 -0
  271. /kaa/sprites/{94ed55fe-3ef8-46bc-855a-a7b1dedab801.png → e8a33d3f-a4fb-4851-b47a-b5f3d85e882f.png} +0 -0
  272. /kaa/sprites/{93e91dd0-0050-48b4-8bf8-c732cd76f0e3.png → ed3aa6e6-4256-416b-9d04-d57ca340e39d.png} +0 -0
  273. /kaa/sprites/{dc51eccf-9470-495a-9e38-59d4481adbd4.png → ed4c0554-84df-4c29-af18-7c38523cc59b.png} +0 -0
  274. /kaa/sprites/{8c3bc157-022a-4bb1-be74-af1ad254e67f.png → ef1bfd47-78e9-4cb7-a344-53d980fc3e5e.png} +0 -0
  275. /kaa/sprites/{f3a5992b-dabf-4c2b-83e9-4c91c3b7aac8.png → ef1ddc7d-75f9-4798-afa1-733e16794a81.png} +0 -0
  276. /kaa/sprites/{e6e66204-8a2f-4377-8674-b7d663ff0081.png → efb01328-b6e1-438e-9471-bef3ea77a22c.png} +0 -0
  277. /kaa/sprites/{d6dd92b3-310f-4f5d-a8ef-b941c3659c0c.png → f06b1a4f-eeb6-4dea-9543-5ec27640bdd9.png} +0 -0
  278. /kaa/sprites/{dcf465c6-ad64-48e7-9c3c-7bc7cfc13a44.png → f07bac27-9201-498f-9f26-a58291a70542.png} +0 -0
  279. /kaa/sprites/{f2f818c9-b0cf-436d-9d3e-6544c5399063.png → f0fd613b-d2f8-4b18-90d8-0b328373e715.png} +0 -0
  280. /kaa/sprites/{ae73d26b-2d47-4921-a6ec-5bbea32773a3.png → f1fbe46a-759d-467d-b8ca-2158f530f7c5.png} +0 -0
  281. /kaa/sprites/{ed854df1-878c-4e0b-8138-9b28d314ede6.png → f2314c76-3a2b-4644-831a-343a601145df.png} +0 -0
  282. /kaa/sprites/{993a33ac-994b-4eb0-9c1e-b9412d499d67.png → f329d4ba-e836-4be6-a05b-879b53667df3.png} +0 -0
  283. /kaa/sprites/{c91874f4-363f-4997-a38e-3e486dfd8043.png → f469d235-552f-4b07-9d03-9bcae425b6d8.png} +0 -0
  284. /kaa/sprites/{9f573ac2-9d28-4d92-8e3f-1b78031220dd.png → f5177258-a3cf-4d4f-9c69-0b49556f754f.png} +0 -0
  285. /kaa/sprites/{f9a353b2-958d-4aae-ade4-66bdc6481e35.png → f5dcac82-7c54-4020-84c5-b1334b595612.png} +0 -0
  286. /kaa/sprites/{d57f792a-f086-4fbe-b4d9-5db629a78d42.png → f6656842-1460-41ab-95ed-561aefaf08e2.png} +0 -0
  287. /kaa/sprites/{d9a636be-a017-4ef5-a70c-c374827008a0.png → f70e9455-7cc8-449c-8282-89a9e69f7ac3.png} +0 -0
  288. /kaa/sprites/{1b847790-90e2-44f8-b6d9-4814812006bd.png → f7facb3a-1b41-4409-b128-d4ad03245845.png} +0 -0
  289. /kaa/sprites/{b10281ae-cfaf-4400-b2fb-c8c2b432c8e7.png → f7fd469f-791e-4bf7-ae3f-b5aaed92f999.png} +0 -0
  290. /kaa/sprites/{ba8ee2cd-f662-440c-90b3-1e4bfe7bab6b.png → f873280f-bc68-40d1-8d8d-3d86964264f0.png} +0 -0
  291. /kaa/sprites/{bf3ff37e-d4fc-42ee-87d6-db1e2040aed5.png → f9da6eeb-ff9e-45b3-94b0-e7ba34938dec.png} +0 -0
  292. /kaa/sprites/{4370013d-f052-4314-94ff-a342d70754c3.png → fa24f5d5-d7e5-4421-8cbc-2ce3a0189654.png} +0 -0
  293. /kaa/sprites/{57741798-65dd-47eb-b4b1-b3f0e3c3e318.png → fb61dbf3-fbc1-400a-adde-83ea08b5027d.png} +0 -0
  294. /kaa/sprites/{f0ed1dd3-b227-48c1-8c8c-858dbd84fcc7.png → fc8457b6-f8a3-4b01-9864-0cd624c312b6.png} +0 -0
  295. /kaa/sprites/{f485db66-2159-4d31-ba53-0fbb726e7f64.png → fdbf6a89-b95a-481f-a269-be53e05b18de.png} +0 -0
  296. /kaa/sprites/{dae37bd7-6a34-4eb4-8cd0-3c0c03b4575a.png → fed11307-2186-4ede-875f-ffa0383f410c.png} +0 -0
  297. /kaa/sprites/{8fbee6fe-9409-407e-8f55-d2d36ab37f6a.png → ff0d3db2-c4e5-41e7-a85b-df4fd392924c.png} +0 -0
  298. /kaa/sprites/{d8967770-c64a-4609-a0a5-f46ba81edceb.png → ff40ff91-4e8c-46cb-a254-66cd5ffd363e.png} +0 -0
  299. /kaa/sprites/{62f93327-5946-4a48-aff8-a203483b0562.png → ff614071-c318-4263-af3e-01ea0ab45b73.png} +0 -0
  300. {ksaa-2025.11b3.dist-info → ksaa-2025.11.post1.dist-info}/WHEEL +0 -0
  301. {ksaa-2025.11b3.dist-info → ksaa-2025.11.post1.dist-info}/entry_points.txt +0 -0
  302. {ksaa-2025.11b3.dist-info → ksaa-2025.11.post1.dist-info}/licenses/LICENSE +0 -0
  303. {ksaa-2025.11b3.dist-info → ksaa-2025.11.post1.dist-info}/top_level.txt +0 -0
kaa/__init__.py ADDED
File without changes
File without changes
File without changes
@@ -0,0 +1,112 @@
1
+ import logging
2
+ from typing import Any
3
+
4
+ from kaa.config.schema import BaseConfig
5
+ from kotonebot.config.base_config import BackendConfig, UserConfig
6
+ from kotonebot.config.manager import load_config, save_config, RootConfig
7
+
8
+ logger = logging.getLogger(__name__)
9
+
10
+
11
+ class ConfigValidationError(ValueError):
12
+ """Custom exception for configuration validation errors."""
13
+ pass
14
+
15
+
16
+ class ConfigService:
17
+ """
18
+ Manages application configuration, including loading, saving, and validation.
19
+ """
20
+
21
+ def __init__(self, config_path: str = "config.json"):
22
+ self.config_path = config_path
23
+ self._root_config: RootConfig[BaseConfig] | None = None
24
+ self._current_user_config: UserConfig[BaseConfig] | None = None
25
+ self.load()
26
+
27
+ def load(self):
28
+ """
29
+ Loads the configuration from the specified config file.
30
+ If the file does not exist or is empty, it creates and saves a default configuration.
31
+ It populates the root configuration and sets the current user config.
32
+ """
33
+ self._root_config = load_config(self.config_path, type=BaseConfig, use_default_if_not_found=True)
34
+
35
+ if not self._root_config.user_configs:
36
+ logger.info("config.json not found or is empty, creating a default configuration.")
37
+ default_config = UserConfig[BaseConfig](
38
+ name="默认配置",
39
+ category="default",
40
+ description="默认配置",
41
+ backend=BackendConfig(),
42
+ options=BaseConfig()
43
+ )
44
+ self._root_config.user_configs.append(default_config)
45
+ save_config(self._root_config, self.config_path)
46
+ logger.info("New default configuration created at %s", self.config_path)
47
+
48
+ self._current_user_config = self._root_config.user_configs[0]
49
+
50
+ def reload(self):
51
+ """Reloads configuration from disk."""
52
+ self.load()
53
+ logger.info("Configuration reloaded from disk.")
54
+
55
+ def get_root_config(self) -> RootConfig[BaseConfig]:
56
+ """Returns the entire root configuration object."""
57
+ if not self._root_config:
58
+ raise RuntimeError("Root config not loaded.")
59
+ return self._root_config
60
+
61
+ def get_current_user_config(self) -> UserConfig[BaseConfig]:
62
+ """Returns the currently active user configuration."""
63
+ if not self._current_user_config:
64
+ raise RuntimeError("User config not loaded.")
65
+ return self._current_user_config
66
+
67
+ def get_options(self) -> BaseConfig:
68
+ """Returns the 'options' part of the current user configuration."""
69
+ if not self._current_user_config:
70
+ raise RuntimeError("User config not loaded.")
71
+ return self._current_user_config.options
72
+
73
+ def save(self):
74
+ """
75
+ Validates and saves the current configuration state to disk.
76
+ """
77
+ if not self._root_config or not self._current_user_config:
78
+ raise RuntimeError("Config not loaded, cannot save.")
79
+
80
+ self._validate(self._current_user_config.backend, self._current_user_config.options)
81
+ save_config(self._root_config, self.config_path)
82
+ logger.info("Configuration saved successfully to %s", self.config_path)
83
+
84
+ def _validate(self, backend_config: BackendConfig, options: BaseConfig):
85
+ """
86
+ Performs validation checks on the configuration.
87
+ Raises ConfigValidationError if any check fails.
88
+ """
89
+ # Rule 1: Validate screenshot method against the backend type
90
+ valid_screenshot_methods = {
91
+ 'mumu12': ['adb', 'adb_raw', 'uiautomator2', 'nemu_ipc'],
92
+ 'mumu12v5': ['adb', 'adb_raw', 'uiautomator2', 'nemu_ipc'],
93
+ 'leidian': ['adb', 'adb_raw', 'uiautomator2'],
94
+ 'custom': ['adb', 'adb_raw', 'uiautomator2'],
95
+ 'dmm': ['remote_windows', 'windows']
96
+ }
97
+ if backend_config.screenshot_impl not in valid_screenshot_methods.get(backend_config.type, []):
98
+ raise ConfigValidationError(
99
+ f"截图方法 '{backend_config.screenshot_impl}' "
100
+ f"不适用于当前选择的模拟器类型 '{backend_config.type}'。"
101
+ )
102
+
103
+ # Rule 2: Ensure a produce solution is selected if produce is enabled
104
+ if options.produce.enabled and not options.produce.selected_solution_id:
105
+ raise ConfigValidationError("启用培育时,必须选择培育方案。")
106
+
107
+ # Rule 3: Ensure item lists are not empty if purchasing is enabled
108
+ if options.purchase.ap_enabled and not options.purchase.ap_items:
109
+ raise ConfigValidationError("启用AP购买时,AP商店购买物品不能为空。")
110
+
111
+ if options.purchase.money_enabled and not options.purchase.money_items:
112
+ raise ConfigValidationError("启用金币购买时,金币商店购买物品不能为空。")
@@ -114,7 +114,7 @@ class FeedbackService:
114
114
  final_msg = (
115
115
  f"报告导出成功:{url}\n\n"
116
116
  f"此链接将于 {expire_time.strftime('%Y-%m-%d %H:%M:%S')}(7 天后)过期\n\n"
117
- '复制以上文本并反馈给开发者'
117
+ '**复制以上文本并发送至 QQ 群、Github issue、B站私信等**'
118
118
  )
119
119
  _progress({'type': 'done', 'url': url, 'step': 6, 'total_steps': total_steps})
120
120
  return BugReportResult(file_path=file_path, upload_url=url, message=final_msg)
@@ -0,0 +1,83 @@
1
+ import logging
2
+ from typing import List
3
+
4
+ from kaa.config.produce import ProduceSolution, ProduceSolutionManager, ProduceData
5
+
6
+ logger = logging.getLogger(__name__)
7
+
8
+
9
+ class ProduceSolutionService:
10
+ """
11
+ Service layer for managing produce solutions.
12
+ This service acts as a wrapper around ProduceSolutionManager,
13
+ decoupling the UI/facade from the direct file system operations.
14
+ """
15
+
16
+ def __init__(self):
17
+ self._manager = ProduceSolutionManager()
18
+
19
+ def list_solutions(self) -> List[ProduceSolution]:
20
+ """
21
+ Retrieves a list of all available produce solutions.
22
+
23
+ :return: A list of ProduceSolution objects.
24
+ """
25
+ return self._manager.list()
26
+
27
+ def get_solution(self, solution_id: str) -> ProduceSolution:
28
+ """
29
+ Retrieves a single produce solution by its ID.
30
+
31
+ :param solution_id: The ID of the solution to retrieve.
32
+ :return: The ProduceSolution object.
33
+ :raises ProduceSolutionNotFoundError: If no solution with the given ID is found.
34
+ """
35
+ return self._manager.read(solution_id)
36
+
37
+ def create_solution(self, name: str = "新培育方案") -> ProduceSolution:
38
+ """
39
+ Creates a new, empty produce solution with a unique ID and saves it.
40
+
41
+ :param name: The name for the new solution.
42
+ :return: The newly created ProduceSolution object.
43
+ """
44
+ new_solution = self._manager.new(name)
45
+ self._manager.save(new_solution.id, new_solution)
46
+ logger.info(f"Created new produce solution '{name}' with ID {new_solution.id}")
47
+ return new_solution
48
+
49
+ def delete_solution(self, solution_id: str) -> None:
50
+ """
51
+ Deletes a produce solution by its ID.
52
+
53
+ :param solution_id: The ID of the solution to delete.
54
+ """
55
+ self._manager.delete(solution_id)
56
+ logger.info(f"Deleted produce solution with ID {solution_id}")
57
+
58
+ def save_solution(self, solution: ProduceSolution) -> None:
59
+ """
60
+ Saves a ProduceSolution object to the filesystem.
61
+ This can be used for both updating existing solutions and saving new ones.
62
+
63
+ :param solution: The ProduceSolution object to save.
64
+ """
65
+ self._manager.save(solution.id, solution)
66
+ logger.info(f"Saved produce solution '{solution.name}' with ID {solution.id}")
67
+
68
+ def update_solution_data(self, solution_id: str, name: str, description: str, data: ProduceData) -> ProduceSolution:
69
+ """
70
+ Updates an existing produce solution with new data and saves it.
71
+
72
+ :param solution_id: The ID of the solution to update.
73
+ :param name: The new name for the solution.
74
+ :param description: The new description for the solution.
75
+ :param data: The new ProduceData object.
76
+ :return: The updated ProduceSolution object.
77
+ """
78
+ solution = self.get_solution(solution_id)
79
+ solution.name = name
80
+ solution.description = description
81
+ solution.data = data
82
+ self.save_solution(solution)
83
+ return solution
@@ -0,0 +1,145 @@
1
+ import logging
2
+ from datetime import datetime, timedelta
3
+ from typing import List, Tuple, Optional
4
+
5
+ from kaa.main.kaa import Kaa
6
+ from kotonebot.backend.context import task_registry, vars as context_vars
7
+ from kotonebot.backend.bot import RunStatus
8
+ from kotonebot.errors import ContextNotInitializedError
9
+
10
+ logger = logging.getLogger(__name__)
11
+
12
+
13
+ class TaskService:
14
+ """
15
+ Manages the lifecycle of Kaa tasks, including starting, stopping,
16
+ and pausing. It encapsulates the state related to task execution.
17
+ """
18
+
19
+ def __init__(self, kaa_instance: Kaa):
20
+ self._kaa = kaa_instance
21
+ self.run_status: RunStatus | None = None
22
+ self.is_running_all: bool = False
23
+ self.is_running_single: bool = False
24
+ self.is_stopping: bool = False
25
+ self.task_start_time: Optional[datetime] = None
26
+
27
+ def is_running(self) -> bool:
28
+ """Checks if any task (either all or single) is currently running."""
29
+ return self.is_running_all or self.is_running_single
30
+
31
+ def start_all_tasks(self) -> None:
32
+ """Starts all registered tasks."""
33
+ if self.is_running():
34
+ logger.warning("Cannot start all tasks, a task is already running.")
35
+ return
36
+
37
+ logger.info("Starting all tasks...")
38
+ self.is_running_all = True
39
+ self.is_stopping = False
40
+ self.task_start_time = datetime.now()
41
+ self.run_status = self._kaa.start_all()
42
+
43
+ def start_single_task(self, task_name: str) -> None:
44
+ """
45
+ Starts a single task by its name.
46
+
47
+ :param task_name: The name of the task to start.
48
+ :raises ValueError: If the task name is not found.
49
+ """
50
+ if self.is_running():
51
+ logger.warning(f"Cannot start task '{task_name}', a task is already running.")
52
+ return
53
+
54
+ task = task_registry.get(task_name)
55
+ if not task:
56
+ raise ValueError(f"Task '{task_name}' not found in task registry.")
57
+
58
+ logger.info(f"Starting single task: {task_name}")
59
+ self.is_running_single = True
60
+ self.is_stopping = False
61
+ self.task_start_time = datetime.now()
62
+ self.run_status = self._kaa.start([task])
63
+
64
+ def stop_tasks(self) -> None:
65
+ """Stops the currently running tasks."""
66
+ if not self.is_running() or self.is_stopping:
67
+ logger.warning("No tasks are running or tasks are already stopping.")
68
+ return
69
+
70
+ logger.info("Stopping tasks...")
71
+ self.is_stopping = True
72
+ try:
73
+ if context_vars.flow.is_paused:
74
+ logger.info("Tasks are paused, resuming before stopping.")
75
+ context_vars.flow.request_resume()
76
+ except ContextNotInitializedError:
77
+ pass # Context might not be ready if stopping very early
78
+
79
+ if self.run_status:
80
+ self.run_status.interrupt()
81
+
82
+ def get_task_statuses(self) -> List[Tuple[str, str]]:
83
+ """
84
+ Gets the current status of all registered tasks.
85
+
86
+ :return: A list of tuples, where each tuple contains the task name and its status.
87
+ """
88
+ if not self.run_status:
89
+ return [(task.name, "pending") for task in task_registry.values()]
90
+
91
+ # Reset running flags if the underlying run_status is no longer running
92
+ if not self.run_status.running:
93
+ self.is_running_all = False
94
+ self.is_running_single = False
95
+ self.is_stopping = False
96
+ self.task_start_time = None
97
+
98
+ status_list: List[Tuple[str, str]] = []
99
+ for task_status in self.run_status.tasks:
100
+ status_list.append((task_status.task.name, task_status.status))
101
+ return status_list
102
+
103
+ def toggle_pause(self) -> bool | None:
104
+ """
105
+ Toggles the pause/resume state of the running tasks.
106
+
107
+ :return: True if paused, False if resumed, None if context not initialized.
108
+ """
109
+ try:
110
+ if context_vars.flow.is_paused:
111
+ context_vars.flow.request_resume()
112
+ logger.info("Tasks resumed.")
113
+ return False
114
+ else:
115
+ context_vars.flow.request_pause()
116
+ logger.info("Tasks paused.")
117
+ return True
118
+ except ContextNotInitializedError:
119
+ logger.warning("Cannot toggle pause, context not initialized.")
120
+ return None
121
+
122
+ def get_pause_status(self) -> bool | None:
123
+ """
124
+ Gets the current pause status.
125
+
126
+ :return: True if paused, False if resumed, None if context not initialized.
127
+ """
128
+ try:
129
+ return context_vars.flow.is_paused
130
+ except ContextNotInitializedError:
131
+ return None
132
+
133
+ def get_all_task_names(self) -> List[str]:
134
+ """Returns a list of all registered task names."""
135
+ return list(task_registry.keys())
136
+
137
+ def get_task_runtime(self) -> Optional[timedelta]:
138
+ """
139
+ Gets the current task runtime.
140
+
141
+ :return: A timedelta object representing the runtime, or None if no task is running.
142
+ """
143
+ if self.task_start_time is None:
144
+ return None
145
+ return datetime.now() - self.task_start_time
File without changes
@@ -0,0 +1,123 @@
1
+ from typing import List, Dict, Tuple, Callable, Any, Literal, Optional
2
+ from dataclasses import dataclass, field
3
+ import gradio as gr
4
+ from kaa.config.schema import BaseConfig
5
+
6
+ # Type hints
7
+ GradioInput = gr.Textbox | gr.Number | gr.Checkbox | gr.Dropdown | gr.Radio | gr.Slider | gr.State
8
+ ConfigKey = Literal[
9
+ # backend
10
+ 'backend_type', 'adb_ip', 'adb_port',
11
+ 'screenshot_method', 'keep_screenshots',
12
+ 'check_emulator', 'emulator_path',
13
+ 'adb_emulator_name', 'emulator_args',
14
+ '_mumu_index', '_mumu12v5_index', '_leidian_index',
15
+ 'mumu_background_mode_v4', 'mumu_background_mode_v5', 'target_screenshot_interval',
16
+
17
+ # purchase
18
+ 'purchase_enabled',
19
+ 'money_enabled', 'ap_enabled',
20
+ 'ap_items', 'money_items', 'money_refresh',
21
+ 'weekly_enabled',
22
+
23
+ # assignment
24
+ 'assignment_enabled',
25
+ 'mini_live_reassign', 'mini_live_duration',
26
+ 'online_live_reassign', 'online_live_duration',
27
+ 'contest_enabled',
28
+ 'select_which_contestant', 'when_no_set',
29
+
30
+ # produce
31
+ 'produce_enabled', 'selected_solution_id', 'produce_count', 'produce_timeout_cd', 'interrupt_timeout', 'enable_fever_month',
32
+ 'mission_reward_enabled',
33
+
34
+ # club reward
35
+ 'club_reward_enabled',
36
+ 'selected_note',
37
+
38
+ # upgrade support card
39
+ 'upgrade_support_card_enabled',
40
+
41
+ # capsule toys
42
+ 'capsule_toys_enabled', 'friend_capsule_toys_count',
43
+ 'sense_capsule_toys_count', 'logic_capsule_toys_count',
44
+ 'anomaly_capsule_toys_count',
45
+
46
+ # start game
47
+ 'start_game_enabled', 'start_through_kuyo',
48
+ 'game_package_name', 'kuyo_package_name',
49
+ 'disable_gakumas_localify', 'dmm_game_path', 'dmm_bypass',
50
+
51
+ # end game
52
+ 'exit_kaa', 'kill_game', 'kill_dmm',
53
+ 'kill_emulator', 'shutdown', 'hibernate',
54
+ 'restore_gakumas_localify',
55
+
56
+ 'activity_funds',
57
+ 'presents',
58
+ 'mission_reward',
59
+ 'activity_funds_enabled',
60
+ 'presents_enabled',
61
+ 'trace_recommend_card_detection',
62
+
63
+ # misc
64
+ 'check_update', 'auto_install_update', 'expose_to_lan', 'update_channel', 'log_level',
65
+
66
+ # idle
67
+ 'idle_enabled', 'idle_seconds', 'idle_minimize_on_pause',
68
+
69
+ '_selected_backend_index'
70
+
71
+ ]
72
+ ConfigSetFunction = Callable[[BaseConfig, Dict[ConfigKey, Any]], None]
73
+ ConfigBuilderReturnValue = Tuple[ConfigSetFunction, Dict[ConfigKey, GradioInput]]
74
+
75
+
76
+ @dataclass
77
+ class GradioComponents:
78
+ """Dataclass to hold all Gradio UI components that need to be accessed across methods."""
79
+
80
+ # Main tabs
81
+ tabs: Optional[gr.Tabs] = None
82
+
83
+ # Status tab components
84
+ run_btn: Optional[gr.Button] = None
85
+ pause_btn: Optional[gr.Button] = None
86
+ end_action_dropdown: Optional[gr.Dropdown] = None
87
+ quick_checkboxes: List[gr.Checkbox] = field(default_factory=list)
88
+ task_runtime_text: Optional[gr.Textbox] = None
89
+ task_status_df: Optional[gr.Dataframe] = None
90
+
91
+ # Update tab components
92
+ update_info_md: Optional[gr.Markdown] = None
93
+ update_status_text: Optional[gr.Markdown] = None
94
+ update_version_dropdown: Optional[gr.Dropdown] = None
95
+ update_install_btn: Optional[gr.Button] = None
96
+
97
+ # Produce tab components
98
+ produce_tab_solution_dropdown: Optional[gr.Dropdown] = None
99
+ produce_solution_settings_group: Optional[gr.Group] = None
100
+ produce_solution_name: Optional[gr.Textbox] = None
101
+ produce_solution_description: Optional[gr.Textbox] = None
102
+ produce_mode: Optional[gr.Dropdown] = None
103
+ produce_idols: Optional[gr.Dropdown] = None
104
+ produce_auto_set_memory: Optional[gr.Checkbox] = None
105
+ produce_memory_sets_group: Optional[gr.Group] = None
106
+ produce_memory_sets: Optional[gr.Dropdown] = None
107
+ produce_auto_set_support: Optional[gr.Checkbox] = None
108
+ produce_support_card_sets_group: Optional[gr.Group] = None
109
+ produce_support_card_sets: Optional[gr.Dropdown] = None
110
+ produce_use_pt_boost: Optional[gr.Checkbox] = None
111
+ produce_use_note_boost: Optional[gr.Checkbox] = None
112
+ produce_follow_producer: Optional[gr.Checkbox] = None
113
+ produce_self_study_lesson: Optional[gr.Dropdown] = None
114
+ produce_prefer_lesson_ap: Optional[gr.Checkbox] = None
115
+ produce_actions_order: Optional[gr.Dropdown] = None
116
+ produce_recommend_card_detection_mode: Optional[gr.Dropdown] = None
117
+ produce_use_ap_drink: Optional[gr.Checkbox] = None
118
+ produce_skip_commu: Optional[gr.Checkbox] = None
119
+ produce_all_detail_components: List[Any] = field(default_factory=list)
120
+
121
+ # Settings tab components
122
+ settings_solution_dropdown: Optional[gr.Dropdown] = None
123
+ save_settings_btn: Optional[gr.Button] = None