From 3fd54800e01567b00877b85da70008ebcc28b7ab Mon Sep 17 00:00:00 2001 From: Mathijs Miermans Date: Wed, 20 Dec 2023 12:36:18 -0800 Subject: [PATCH 1/6] feat: initial implementation of New Tab scheduler --- Pipfile | 1 + Pipfile.lock | 3110 ++++++++++-------- app/models/prospect_model.py | 8 + app/rankers/new_tab_scheduler.py | 31 + tests/assets/json/get_prospects.json | 2798 ++++++++++++++++ tests/unit/rankers/test_new_tab_scheduler.py | 26 + 6 files changed, 4628 insertions(+), 1346 deletions(-) create mode 100644 app/models/prospect_model.py create mode 100644 app/rankers/new_tab_scheduler.py create mode 100644 tests/assets/json/get_prospects.json create mode 100644 tests/unit/rankers/test_new_tab_scheduler.py diff --git a/Pipfile b/Pipfile index 7821bd077..7971528d8 100644 --- a/Pipfile +++ b/Pipfile @@ -49,6 +49,7 @@ opentelemetry-sdk-extension-aws = "*" opentelemetry-exporter-otlp-proto-grpc = "*" opentelemetry-instrumentation-aiohttp-client = "==0.41b0" opentelemetry-instrumentation-fastapi = "==0.41b0" +pymoo = "*" [requires] python_version = "3.8" diff --git a/Pipfile.lock b/Pipfile.lock index 3dcfed323..ca55de9a7 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -1,7 +1,7 @@ { "_meta": { "hash": { - "sha256": "3eca9fb4d5a07e06d1f6fa839cafe2c49125218cebed97785182e0b1450e8120" + "sha256": "4c86364f8d3c3787cc44675ad28152129a1d96c9e515f48ade6910cae056b285" }, "pipfile-spec": 6, "requires": { @@ -16,6 +16,14 @@ ] }, "default": { + "about-time": { + "hashes": [ + "sha256:6a538862d33ce67d997429d14998310e1dbfda6cb7d9bbfbf799c4709847fece", + "sha256:8bbf4c75fe13cbd3d72f49a03b02c5c7dca32169b6d49117c257e7eb3eaee341" + ], + "markers": "python_version >= '3.7' and python_version < '4'", + "version": "==4.2.1" + }, "aio-snowplow-tracker": { "hashes": [ "sha256:449e464f0dee429699814c75106bf2d6966afa0012878d3615c08db872370a95", @@ -26,22 +34,22 @@ }, "aioboto3": { "hashes": [ - "sha256:11e6df5bf317e0dfc1390a29fea9e9f3afd8be99bad2cc9719d2cf44080a16fb", - "sha256:6f504ac312f62be5199033af97f51b20fac31df7f42c128d6643241c8e5741a9" + "sha256:8eae15dd52c9a43845448508ad0f912028a0a176bbd85b78e1377bb5f2a4d450", + "sha256:9f9e07261ddf3d6fec04dd8d5f5a55e0cb3250089f4282f7a60054495ad9699b" ], "index": "pypi", - "version": "==11.3.0" + "version": "==12.1.0" }, "aiobotocore": { "extras": [ "boto3" ], "hashes": [ - "sha256:0186e6a843364748cdbbf76ee98e9337c44f71a4e694ad1b110d5c516fbce909", - "sha256:4805d0140bdfa17bfc2d0ba1243c8cc4273e927201fca5cf2e497c0004a9fab7" + "sha256:32e632fea387acd45416c2bbc03828ee2c2a66a7dc4bd3a9bcb808dea249c469", + "sha256:f160497cef21cfffc1a8d4219eeb27bb7b243389c2d021a812b9c0e3fb8e2bd1" ], - "markers": "python_version >= '3.7'", - "version": "==2.6.0" + "markers": "python_version >= '3.8'", + "version": "==2.8.0" }, "aiocache": { "extras": [ @@ -56,96 +64,85 @@ }, "aiohttp": { "hashes": [ - "sha256:002f23e6ea8d3dd8d149e569fd580c999232b5fbc601c48d55398fbc2e582e8c", - "sha256:01770d8c04bd8db568abb636c1fdd4f7140b284b8b3e0b4584f070180c1e5c62", - "sha256:0912ed87fee967940aacc5306d3aa8ba3a459fcd12add0b407081fbefc931e53", - "sha256:0cccd1de239afa866e4ce5c789b3032442f19c261c7d8a01183fd956b1935349", - "sha256:0fa375b3d34e71ccccf172cab401cd94a72de7a8cc01847a7b3386204093bb47", - "sha256:13da35c9ceb847732bf5c6c5781dcf4780e14392e5d3b3c689f6d22f8e15ae31", - "sha256:14cd52ccf40006c7a6cd34a0f8663734e5363fd981807173faf3a017e202fec9", - "sha256:16d330b3b9db87c3883e565340d292638a878236418b23cc8b9b11a054aaa887", - "sha256:1bed815f3dc3d915c5c1e556c397c8667826fbc1b935d95b0ad680787896a358", - "sha256:1d84166673694841d8953f0a8d0c90e1087739d24632fe86b1a08819168b4566", - "sha256:1f13f60d78224f0dace220d8ab4ef1dbc37115eeeab8c06804fec11bec2bbd07", - "sha256:229852e147f44da0241954fc6cb910ba074e597f06789c867cb7fb0621e0ba7a", - "sha256:253bf92b744b3170eb4c4ca2fa58f9c4b87aeb1df42f71d4e78815e6e8b73c9e", - "sha256:255ba9d6d5ff1a382bb9a578cd563605aa69bec845680e21c44afc2670607a95", - "sha256:2817b2f66ca82ee699acd90e05c95e79bbf1dc986abb62b61ec8aaf851e81c93", - "sha256:2b8d4e166e600dcfbff51919c7a3789ff6ca8b3ecce16e1d9c96d95dd569eb4c", - "sha256:2d5b785c792802e7b275c420d84f3397668e9d49ab1cb52bd916b3b3ffcf09ad", - "sha256:3161ce82ab85acd267c8f4b14aa226047a6bee1e4e6adb74b798bd42c6ae1f80", - "sha256:33164093be11fcef3ce2571a0dccd9041c9a93fa3bde86569d7b03120d276c6f", - "sha256:39a312d0e991690ccc1a61f1e9e42daa519dcc34ad03eb6f826d94c1190190dd", - "sha256:3b2ab182fc28e7a81f6c70bfbd829045d9480063f5ab06f6e601a3eddbbd49a0", - "sha256:3c68330a59506254b556b99a91857428cab98b2f84061260a67865f7f52899f5", - "sha256:3f0e27e5b733803333bb2371249f41cf42bae8884863e8e8965ec69bebe53132", - "sha256:3f5c7ce535a1d2429a634310e308fb7d718905487257060e5d4598e29dc17f0b", - "sha256:3fd194939b1f764d6bb05490987bfe104287bbf51b8d862261ccf66f48fb4096", - "sha256:41bdc2ba359032e36c0e9de5a3bd00d6fb7ea558a6ce6b70acedf0da86458321", - "sha256:41d55fc043954cddbbd82503d9cc3f4814a40bcef30b3569bc7b5e34130718c1", - "sha256:42c89579f82e49db436b69c938ab3e1559e5a4409eb8639eb4143989bc390f2f", - "sha256:45ad816b2c8e3b60b510f30dbd37fe74fd4a772248a52bb021f6fd65dff809b6", - "sha256:4ac39027011414dbd3d87f7edb31680e1f430834c8cef029f11c66dad0670aa5", - "sha256:4d4cbe4ffa9d05f46a28252efc5941e0462792930caa370a6efaf491f412bc66", - "sha256:4fcf3eabd3fd1a5e6092d1242295fa37d0354b2eb2077e6eb670accad78e40e1", - "sha256:5d791245a894be071d5ab04bbb4850534261a7d4fd363b094a7b9963e8cdbd31", - "sha256:6c43ecfef7deaf0617cee936836518e7424ee12cb709883f2c9a1adda63cc460", - "sha256:6c5f938d199a6fdbdc10bbb9447496561c3a9a565b43be564648d81e1102ac22", - "sha256:6e2f9cc8e5328f829f6e1fb74a0a3a939b14e67e80832975e01929e320386b34", - "sha256:713103a8bdde61d13490adf47171a1039fd880113981e55401a0f7b42c37d071", - "sha256:71783b0b6455ac8f34b5ec99d83e686892c50498d5d00b8e56d47f41b38fbe04", - "sha256:76b36b3124f0223903609944a3c8bf28a599b2cc0ce0be60b45211c8e9be97f8", - "sha256:7bc88fc494b1f0311d67f29fee6fd636606f4697e8cc793a2d912ac5b19aa38d", - "sha256:7ee912f7e78287516df155f69da575a0ba33b02dd7c1d6614dbc9463f43066e3", - "sha256:86f20cee0f0a317c76573b627b954c412ea766d6ada1a9fcf1b805763ae7feeb", - "sha256:89341b2c19fb5eac30c341133ae2cc3544d40d9b1892749cdd25892bbc6ac951", - "sha256:8a9b5a0606faca4f6cc0d338359d6fa137104c337f489cd135bb7fbdbccb1e39", - "sha256:8d399dade330c53b4106160f75f55407e9ae7505263ea86f2ccca6bfcbdb4921", - "sha256:8e31e9db1bee8b4f407b77fd2507337a0a80665ad7b6c749d08df595d88f1cf5", - "sha256:90c72ebb7cb3a08a7f40061079817133f502a160561d0675b0a6adf231382c92", - "sha256:918810ef188f84152af6b938254911055a72e0f935b5fbc4c1a4ed0b0584aed1", - "sha256:93c15c8e48e5e7b89d5cb4613479d144fda8344e2d886cf694fd36db4cc86865", - "sha256:96603a562b546632441926cd1293cfcb5b69f0b4159e6077f7c7dbdfb686af4d", - "sha256:99c5ac4ad492b4a19fc132306cd57075c28446ec2ed970973bbf036bcda1bcc6", - "sha256:9c19b26acdd08dd239e0d3669a3dddafd600902e37881f13fbd8a53943079dbc", - "sha256:9de50a199b7710fa2904be5a4a9b51af587ab24c8e540a7243ab737b45844543", - "sha256:9e2ee0ac5a1f5c7dd3197de309adfb99ac4617ff02b0603fd1e65b07dc772e4b", - "sha256:a2ece4af1f3c967a4390c284797ab595a9f1bc1130ef8b01828915a05a6ae684", - "sha256:a3628b6c7b880b181a3ae0a0683698513874df63783fd89de99b7b7539e3e8a8", - "sha256:ad1407db8f2f49329729564f71685557157bfa42b48f4b93e53721a16eb813ed", - "sha256:b04691bc6601ef47c88f0255043df6f570ada1a9ebef99c34bd0b72866c217ae", - "sha256:b0cf2a4501bff9330a8a5248b4ce951851e415bdcce9dc158e76cfd55e15085c", - "sha256:b2fe42e523be344124c6c8ef32a011444e869dc5f883c591ed87f84339de5976", - "sha256:b30e963f9e0d52c28f284d554a9469af073030030cef8693106d918b2ca92f54", - "sha256:bb54c54510e47a8c7c8e63454a6acc817519337b2b78606c4e840871a3e15349", - "sha256:bd111d7fc5591ddf377a408ed9067045259ff2770f37e2d94e6478d0f3fc0c17", - "sha256:bdf70bfe5a1414ba9afb9d49f0c912dc524cf60141102f3a11143ba3d291870f", - "sha256:ca80e1b90a05a4f476547f904992ae81eda5c2c85c66ee4195bb8f9c5fb47f28", - "sha256:caf486ac1e689dda3502567eb89ffe02876546599bbf915ec94b1fa424eeffd4", - "sha256:ccc360e87341ad47c777f5723f68adbb52b37ab450c8bc3ca9ca1f3e849e5fe2", - "sha256:d25036d161c4fe2225d1abff2bd52c34ed0b1099f02c208cd34d8c05729882f0", - "sha256:d52d5dc7c6682b720280f9d9db41d36ebe4791622c842e258c9206232251ab2b", - "sha256:d67f8baed00870aa390ea2590798766256f31dc5ed3ecc737debb6e97e2ede78", - "sha256:d76e8b13161a202d14c9584590c4df4d068c9567c99506497bdd67eaedf36403", - "sha256:d95fc1bf33a9a81469aa760617b5971331cdd74370d1214f0b3109272c0e1e3c", - "sha256:de6a1c9f6803b90e20869e6b99c2c18cef5cc691363954c93cb9adeb26d9f3ae", - "sha256:e1d8cb0b56b3587c5c01de3bf2f600f186da7e7b5f7353d1bf26a8ddca57f965", - "sha256:e2a988a0c673c2e12084f5e6ba3392d76c75ddb8ebc6c7e9ead68248101cd446", - "sha256:e3f1e3f1a1751bb62b4a1b7f4e435afcdade6c17a4fd9b9d43607cebd242924a", - "sha256:e6a00ffcc173e765e200ceefb06399ba09c06db97f401f920513a10c803604ca", - "sha256:e827d48cf802de06d9c935088c2924e3c7e7533377d66b6f31ed175c1620e05e", - "sha256:ebf3fd9f141700b510d4b190094db0ce37ac6361a6806c153c161dc6c041ccda", - "sha256:ec00c3305788e04bf6d29d42e504560e159ccaf0be30c09203b468a6c1ccd3b2", - "sha256:ec4fd86658c6a8964d75426517dc01cbf840bbf32d055ce64a9e63a40fd7b771", - "sha256:efd2fcf7e7b9d7ab16e6b7d54205beded0a9c8566cb30f09c1abe42b4e22bdcb", - "sha256:f0f03211fd14a6a0aed2997d4b1c013d49fb7b50eeb9ffdf5e51f23cfe2c77fa", - "sha256:f628dbf3c91e12f4d6c8b3f092069567d8eb17814aebba3d7d60c149391aee3a", - "sha256:f8ef51e459eb2ad8e7a66c1d6440c808485840ad55ecc3cafefadea47d1b1ba2", - "sha256:fc37e9aef10a696a5a4474802930079ccfc14d9f9c10b4662169671ff034b7df", - "sha256:fdee8405931b0615220e5ddf8cd7edd8592c606a8e4ca2a00704883c396e4479" + "sha256:02ab6006ec3c3463b528374c4cdce86434e7b89ad355e7bf29e2f16b46c7dd6f", + "sha256:04fa38875e53eb7e354ece1607b1d2fdee2d175ea4e4d745f6ec9f751fe20c7c", + "sha256:0b0a6a36ed7e164c6df1e18ee47afbd1990ce47cb428739d6c99aaabfaf1b3af", + "sha256:0d406b01a9f5a7e232d1b0d161b40c05275ffbcbd772dc18c1d5a570961a1ca4", + "sha256:0e49b08eafa4f5707ecfb321ab9592717a319e37938e301d462f79b4e860c32a", + "sha256:0e7ba7ff228c0d9a2cd66194e90f2bca6e0abca810b786901a569c0de082f489", + "sha256:11cb254e397a82efb1805d12561e80124928e04e9c4483587ce7390b3866d213", + "sha256:11ff168d752cb41e8492817e10fb4f85828f6a0142b9726a30c27c35a1835f01", + "sha256:176df045597e674fa950bf5ae536be85699e04cea68fa3a616cf75e413737eb5", + "sha256:219a16763dc0294842188ac8a12262b5671817042b35d45e44fd0a697d8c8361", + "sha256:22698f01ff5653fe66d16ffb7658f582a0ac084d7da1323e39fd9eab326a1f26", + "sha256:237533179d9747080bcaad4d02083ce295c0d2eab3e9e8ce103411a4312991a0", + "sha256:289ba9ae8e88d0ba16062ecf02dd730b34186ea3b1e7489046fc338bdc3361c4", + "sha256:2c59e0076ea31c08553e868cec02d22191c086f00b44610f8ab7363a11a5d9d8", + "sha256:2c9376e2b09895c8ca8b95362283365eb5c03bdc8428ade80a864160605715f1", + "sha256:3135713c5562731ee18f58d3ad1bf41e1d8883eb68b363f2ffde5b2ea4b84cc7", + "sha256:3b9c7426923bb7bd66d409da46c41e3fb40f5caf679da624439b9eba92043fa6", + "sha256:3c0266cd6f005e99f3f51e583012de2778e65af6b73860038b968a0a8888487a", + "sha256:41473de252e1797c2d2293804e389a6d6986ef37cbb4a25208de537ae32141dd", + "sha256:4831df72b053b1eed31eb00a2e1aff6896fb4485301d4ccb208cac264b648db4", + "sha256:49f0c1b3c2842556e5de35f122fc0f0b721334ceb6e78c3719693364d4af8499", + "sha256:4b4c452d0190c5a820d3f5c0f3cd8a28ace48c54053e24da9d6041bf81113183", + "sha256:4ee8caa925aebc1e64e98432d78ea8de67b2272252b0a931d2ac3bd876ad5544", + "sha256:500f1c59906cd142d452074f3811614be04819a38ae2b3239a48b82649c08821", + "sha256:5216b6082c624b55cfe79af5d538e499cd5f5b976820eac31951fb4325974501", + "sha256:54311eb54f3a0c45efb9ed0d0a8f43d1bc6060d773f6973efd90037a51cd0a3f", + "sha256:54631fb69a6e44b2ba522f7c22a6fb2667a02fd97d636048478db2fd8c4e98fe", + "sha256:565760d6812b8d78d416c3c7cfdf5362fbe0d0d25b82fed75d0d29e18d7fc30f", + "sha256:598db66eaf2e04aa0c8900a63b0101fdc5e6b8a7ddd805c56d86efb54eb66672", + "sha256:5c4fa235d534b3547184831c624c0b7c1e262cd1de847d95085ec94c16fddcd5", + "sha256:69985d50a2b6f709412d944ffb2e97d0be154ea90600b7a921f95a87d6f108a2", + "sha256:69da0f3ed3496808e8cbc5123a866c41c12c15baaaead96d256477edf168eb57", + "sha256:6c93b7c2e52061f0925c3382d5cb8980e40f91c989563d3d32ca280069fd6a87", + "sha256:70907533db712f7aa791effb38efa96f044ce3d4e850e2d7691abd759f4f0ae0", + "sha256:81b77f868814346662c96ab36b875d7814ebf82340d3284a31681085c051320f", + "sha256:82eefaf1a996060602f3cc1112d93ba8b201dbf5d8fd9611227de2003dddb3b7", + "sha256:85c3e3c9cb1d480e0b9a64c658cd66b3cfb8e721636ab8b0e746e2d79a7a9eed", + "sha256:8a22a34bc594d9d24621091d1b91511001a7eea91d6652ea495ce06e27381f70", + "sha256:8cef8710fb849d97c533f259103f09bac167a008d7131d7b2b0e3a33269185c0", + "sha256:8d44e7bf06b0c0a70a20f9100af9fcfd7f6d9d3913e37754c12d424179b4e48f", + "sha256:8d7f98fde213f74561be1d6d3fa353656197f75d4edfbb3d94c9eb9b0fc47f5d", + "sha256:8d8e4450e7fe24d86e86b23cc209e0023177b6d59502e33807b732d2deb6975f", + "sha256:8fc49a87ac269d4529da45871e2ffb6874e87779c3d0e2ccd813c0899221239d", + "sha256:90ec72d231169b4b8d6085be13023ece8fa9b1bb495e4398d847e25218e0f431", + "sha256:91c742ca59045dce7ba76cab6e223e41d2c70d79e82c284a96411f8645e2afff", + "sha256:9b05d33ff8e6b269e30a7957bd3244ffbce2a7a35a81b81c382629b80af1a8bf", + "sha256:9b05d5cbe9dafcdc733262c3a99ccf63d2f7ce02543620d2bd8db4d4f7a22f83", + "sha256:9c5857612c9813796960c00767645cb5da815af16dafb32d70c72a8390bbf690", + "sha256:a34086c5cc285be878622e0a6ab897a986a6e8bf5b67ecb377015f06ed316587", + "sha256:ab221850108a4a063c5b8a70f00dd7a1975e5a1713f87f4ab26a46e5feac5a0e", + "sha256:b796b44111f0cab6bbf66214186e44734b5baab949cb5fb56154142a92989aeb", + "sha256:b8c3a67eb87394386847d188996920f33b01b32155f0a94f36ca0e0c635bf3e3", + "sha256:bcb6532b9814ea7c5a6a3299747c49de30e84472fa72821b07f5a9818bce0f66", + "sha256:bcc0ea8d5b74a41b621ad4a13d96c36079c81628ccc0b30cfb1603e3dfa3a014", + "sha256:bea94403a21eb94c93386d559bce297381609153e418a3ffc7d6bf772f59cc35", + "sha256:bff7e2811814fa2271be95ab6e84c9436d027a0e59665de60edf44e529a42c1f", + "sha256:c72444d17777865734aa1a4d167794c34b63e5883abb90356a0364a28904e6c0", + "sha256:c7b5d5d64e2a14e35a9240b33b89389e0035e6de8dbb7ffa50d10d8b65c57449", + "sha256:c7e939f1ae428a86e4abbb9a7c4732bf4706048818dfd979e5e2839ce0159f23", + "sha256:c88a15f272a0ad3d7773cf3a37cc7b7d077cbfc8e331675cf1346e849d97a4e5", + "sha256:c9110c06eaaac7e1f5562caf481f18ccf8f6fdf4c3323feab28a93d34cc646bd", + "sha256:ca7ca5abfbfe8d39e653870fbe8d7710be7a857f8a8386fc9de1aae2e02ce7e4", + "sha256:cae4c0c2ca800c793cae07ef3d40794625471040a87e1ba392039639ad61ab5b", + "sha256:cdefe289681507187e375a5064c7599f52c40343a8701761c802c1853a504558", + "sha256:cf2a0ac0615842b849f40c4d7f304986a242f1e68286dbf3bd7a835e4f83acfd", + "sha256:cfeadf42840c1e870dc2042a232a8748e75a36b52d78968cda6736de55582766", + "sha256:d737e69d193dac7296365a6dcb73bbbf53bb760ab25a3727716bbd42022e8d7a", + "sha256:d7481f581251bb5558ba9f635db70908819caa221fc79ee52a7f58392778c636", + "sha256:df9cf74b9bc03d586fc53ba470828d7b77ce51b0582d1d0b5b2fb673c0baa32d", + "sha256:e1f80197f8b0b846a8d5cf7b7ec6084493950d0882cc5537fb7b96a69e3c8590", + "sha256:ecca113f19d5e74048c001934045a2b9368d77b0b17691d905af18bd1c21275e", + "sha256:ee2527134f95e106cc1653e9ac78846f3a2ec1004cf20ef4e02038035a74544d", + "sha256:f27fdaadce22f2ef950fc10dcdf8048407c3b42b73779e48a4e76b3c35bca26c", + "sha256:f694dc8a6a3112059258a725a4ebe9acac5fe62f11c77ac4dcf896edfa78ca28", + "sha256:f800164276eec54e0af5c99feb9494c295118fc10a11b997bbb1348ba1a52065", + "sha256:ffcd828e37dc219a72c9012ec44ad2e7e3066bec6ff3aaa19e7d435dbf4032ca" ], "index": "pypi", - "version": "==3.8.6" + "version": "==3.9.1" }, "aioitertools": { "hashes": [ @@ -171,6 +168,14 @@ "markers": "python_version >= '3.7'", "version": "==1.3.1" }, + "alive-progress": { + "hashes": [ + "sha256:347220c1858e3abe137fa0746895668c04df09c5261a13dc03f05795e8a29be5", + "sha256:42e399a66c8150dc507602dff7b7953f105ef11faf97ddaa6d27b1cbf45c4c98" + ], + "markers": "python_version >= '3.7' and python_version < '4'", + "version": "==3.1.5" + }, "anyio": { "hashes": [ "sha256:44a3c9aba0f5defa43261a8b3efb97891f2bd7d804e0e1f56419befa1adfc780", @@ -200,7 +205,7 @@ "sha256:4640d96be84d82d02ed59ea2b7105a0f7b33abe8703703cd0ab0bf87c427522f", "sha256:7405140ff1230c310e51dc27b3145b9092d659ce68ff733fb0cefe3ee42be028" ], - "markers": "python_version >= '3.7'", + "markers": "python_version < '3.11'", "version": "==4.0.3" }, "attrs": { @@ -211,6 +216,13 @@ "markers": "python_version >= '3.7'", "version": "==23.1.0" }, + "autograd": { + "hashes": [ + "sha256:208dde2a938e63b4f8f5049b1985505139e529068b0d26f8cd7771fd3eb145d5", + "sha256:8731e08a0c4e389d8695a40072ada4512641c113b6cace8f4cfbe8eb7e9aedeb" + ], + "version": "==1.6.2" + }, "backoff": { "hashes": [ "sha256:03f829f5bb1923180821643f8753b0502c3b682293992485b0eef2807afa5cba", @@ -221,122 +233,26 @@ }, "boto3": { "hashes": [ - "sha256:90f7cfb5e1821af95b1fc084bc50e6c47fa3edc99f32de1a2591faa0c546bea7", - "sha256:bca0526f819e0f19c0f1e6eba3e2d1d6b6a92a45129f98c0d716e5aab6d9444b" + "sha256:1fe5fa75ff0f0c29a6f55e818d149d33571731e692a7b785ded7a28ac832cae8", + "sha256:fa5aa92d16763cb906fb4a83d6eba887342202a980bea07862af5ba40827aa5a" ], - "version": "==1.28.17" + "version": "==1.33.1" }, "botocore": { "hashes": [ - "sha256:396459065dba4339eb4da4ec8b4e6599728eb89b7caaceea199e26f7d824a41c", - "sha256:6ac34a1d34aa3750e78b77b8596617e2bab938964694d651939dba2cbde2c12b" + "sha256:c744b90980786c610dd9ad9c50cf2cdde3f1c4634b954a33613f6f8a1865a1de", + "sha256:d22d29916905e5f0670b91f07688e92b2c4a2075f9a474d6edbe7d22040d8fbf" ], "markers": "python_version >= '3.7'", - "version": "==1.31.17" + "version": "==1.33.1" }, "certifi": { "hashes": [ - "sha256:539cc1d13202e33ca466e88b2807e29f4c13049d6d87031a3c110744495cb082", - "sha256:92d6037539857d8206b8f6ae472e8b77db8058fec5937a1ef3f54304089edbb9" + "sha256:9b469f3a900bf28dc19b8cfbf8019bf47f7fdd1a65a1d4ffb98fc14166beb4d1", + "sha256:e036ab49d5b79556f99cfc2d9320b34cfbe5be05c5871b51de9329f0603b0474" ], "markers": "python_version >= '3.6'", - "version": "==2023.7.22" - }, - "charset-normalizer": { - "hashes": [ - "sha256:02673e456dc5ab13659f85196c534dc596d4ef260e4d86e856c3b2773ce09843", - "sha256:02af06682e3590ab952599fbadac535ede5d60d78848e555aa58d0c0abbde786", - "sha256:03680bb39035fbcffe828eae9c3f8afc0428c91d38e7d61aa992ef7a59fb120e", - "sha256:0570d21da019941634a531444364f2482e8db0b3425fcd5ac0c36565a64142c8", - "sha256:09c77f964f351a7369cc343911e0df63e762e42bac24cd7d18525961c81754f4", - "sha256:0d3d5b7db9ed8a2b11a774db2bbea7ba1884430a205dbd54a32d61d7c2a190fa", - "sha256:1063da2c85b95f2d1a430f1c33b55c9c17ffaf5e612e10aeaad641c55a9e2b9d", - "sha256:12ebea541c44fdc88ccb794a13fe861cc5e35d64ed689513a5c03d05b53b7c82", - "sha256:153e7b6e724761741e0974fc4dcd406d35ba70b92bfe3fedcb497226c93b9da7", - "sha256:15b26ddf78d57f1d143bdf32e820fd8935d36abe8a25eb9ec0b5a71c82eb3895", - "sha256:1872d01ac8c618a8da634e232f24793883d6e456a66593135aeafe3784b0848d", - "sha256:187d18082694a29005ba2944c882344b6748d5be69e3a89bf3cc9d878e548d5a", - "sha256:1b2919306936ac6efb3aed1fbf81039f7087ddadb3160882a57ee2ff74fd2382", - "sha256:232ac332403e37e4a03d209a3f92ed9071f7d3dbda70e2a5e9cff1c4ba9f0678", - "sha256:23e8565ab7ff33218530bc817922fae827420f143479b753104ab801145b1d5b", - "sha256:24817cb02cbef7cd499f7c9a2735286b4782bd47a5b3516a0e84c50eab44b98e", - "sha256:249c6470a2b60935bafd1d1d13cd613f8cd8388d53461c67397ee6a0f5dce741", - "sha256:24a91a981f185721542a0b7c92e9054b7ab4fea0508a795846bc5b0abf8118d4", - "sha256:2502dd2a736c879c0f0d3e2161e74d9907231e25d35794584b1ca5284e43f596", - "sha256:250c9eb0f4600361dd80d46112213dff2286231d92d3e52af1e5a6083d10cad9", - "sha256:278c296c6f96fa686d74eb449ea1697f3c03dc28b75f873b65b5201806346a69", - "sha256:2935ffc78db9645cb2086c2f8f4cfd23d9b73cc0dc80334bc30aac6f03f68f8c", - "sha256:2f4a0033ce9a76e391542c182f0d48d084855b5fcba5010f707c8e8c34663d77", - "sha256:30a85aed0b864ac88309b7d94be09f6046c834ef60762a8833b660139cfbad13", - "sha256:380c4bde80bce25c6e4f77b19386f5ec9db230df9f2f2ac1e5ad7af2caa70459", - "sha256:3ae38d325b512f63f8da31f826e6cb6c367336f95e418137286ba362925c877e", - "sha256:3b447982ad46348c02cb90d230b75ac34e9886273df3a93eec0539308a6296d7", - "sha256:3debd1150027933210c2fc321527c2299118aa929c2f5a0a80ab6953e3bd1908", - "sha256:4162918ef3098851fcd8a628bf9b6a98d10c380725df9e04caf5ca6dd48c847a", - "sha256:468d2a840567b13a590e67dd276c570f8de00ed767ecc611994c301d0f8c014f", - "sha256:4cc152c5dd831641e995764f9f0b6589519f6f5123258ccaca8c6d34572fefa8", - "sha256:542da1178c1c6af8873e143910e2269add130a299c9106eef2594e15dae5e482", - "sha256:557b21a44ceac6c6b9773bc65aa1b4cc3e248a5ad2f5b914b91579a32e22204d", - "sha256:5707a746c6083a3a74b46b3a631d78d129edab06195a92a8ece755aac25a3f3d", - "sha256:588245972aca710b5b68802c8cad9edaa98589b1b42ad2b53accd6910dad3545", - "sha256:5adf257bd58c1b8632046bbe43ee38c04e1038e9d37de9c57a94d6bd6ce5da34", - "sha256:619d1c96099be5823db34fe89e2582b336b5b074a7f47f819d6b3a57ff7bdb86", - "sha256:63563193aec44bce707e0c5ca64ff69fa72ed7cf34ce6e11d5127555756fd2f6", - "sha256:67b8cc9574bb518ec76dc8e705d4c39ae78bb96237cb533edac149352c1f39fe", - "sha256:6a685067d05e46641d5d1623d7c7fdf15a357546cbb2f71b0ebde91b175ffc3e", - "sha256:70f1d09c0d7748b73290b29219e854b3207aea922f839437870d8cc2168e31cc", - "sha256:750b446b2ffce1739e8578576092179160f6d26bd5e23eb1789c4d64d5af7dc7", - "sha256:7966951325782121e67c81299a031f4c115615e68046f79b85856b86ebffc4cd", - "sha256:7b8b8bf1189b3ba9b8de5c8db4d541b406611a71a955bbbd7385bbc45fcb786c", - "sha256:7f5d10bae5d78e4551b7be7a9b29643a95aded9d0f602aa2ba584f0388e7a557", - "sha256:805dfea4ca10411a5296bcc75638017215a93ffb584c9e344731eef0dcfb026a", - "sha256:81bf654678e575403736b85ba3a7867e31c2c30a69bc57fe88e3ace52fb17b89", - "sha256:82eb849f085624f6a607538ee7b83a6d8126df6d2f7d3b319cb837b289123078", - "sha256:85a32721ddde63c9df9ebb0d2045b9691d9750cb139c161c80e500d210f5e26e", - "sha256:86d1f65ac145e2c9ed71d8ffb1905e9bba3a91ae29ba55b4c46ae6fc31d7c0d4", - "sha256:86f63face3a527284f7bb8a9d4f78988e3c06823f7bea2bd6f0e0e9298ca0403", - "sha256:8eaf82f0eccd1505cf39a45a6bd0a8cf1c70dcfc30dba338207a969d91b965c0", - "sha256:93aa7eef6ee71c629b51ef873991d6911b906d7312c6e8e99790c0f33c576f89", - "sha256:96c2b49eb6a72c0e4991d62406e365d87067ca14c1a729a870d22354e6f68115", - "sha256:9cf3126b85822c4e53aa28c7ec9869b924d6fcfb76e77a45c44b83d91afd74f9", - "sha256:9fe359b2e3a7729010060fbca442ca225280c16e923b37db0e955ac2a2b72a05", - "sha256:a0ac5e7015a5920cfce654c06618ec40c33e12801711da6b4258af59a8eff00a", - "sha256:a3f93dab657839dfa61025056606600a11d0b696d79386f974e459a3fbc568ec", - "sha256:a4b71f4d1765639372a3b32d2638197f5cd5221b19531f9245fcc9ee62d38f56", - "sha256:aae32c93e0f64469f74ccc730a7cb21c7610af3a775157e50bbd38f816536b38", - "sha256:aaf7b34c5bc56b38c931a54f7952f1ff0ae77a2e82496583b247f7c969eb1479", - "sha256:abecce40dfebbfa6abf8e324e1860092eeca6f7375c8c4e655a8afb61af58f2c", - "sha256:abf0d9f45ea5fb95051c8bfe43cb40cda383772f7e5023a83cc481ca2604d74e", - "sha256:ac71b2977fb90c35d41c9453116e283fac47bb9096ad917b8819ca8b943abecd", - "sha256:ada214c6fa40f8d800e575de6b91a40d0548139e5dc457d2ebb61470abf50186", - "sha256:b09719a17a2301178fac4470d54b1680b18a5048b481cb8890e1ef820cb80455", - "sha256:b1121de0e9d6e6ca08289583d7491e7fcb18a439305b34a30b20d8215922d43c", - "sha256:b3b2316b25644b23b54a6f6401074cebcecd1244c0b8e80111c9a3f1c8e83d65", - "sha256:b3d9b48ee6e3967b7901c052b670c7dda6deb812c309439adaffdec55c6d7b78", - "sha256:b5bcf60a228acae568e9911f410f9d9e0d43197d030ae5799e20dca8df588287", - "sha256:b8f3307af845803fb0b060ab76cf6dd3a13adc15b6b451f54281d25911eb92df", - "sha256:c2af80fb58f0f24b3f3adcb9148e6203fa67dd3f61c4af146ecad033024dde43", - "sha256:c350354efb159b8767a6244c166f66e67506e06c8924ed74669b2c70bc8735b1", - "sha256:c5a74c359b2d47d26cdbbc7845e9662d6b08a1e915eb015d044729e92e7050b7", - "sha256:c71f16da1ed8949774ef79f4a0260d28b83b3a50c6576f8f4f0288d109777989", - "sha256:d47ecf253780c90ee181d4d871cd655a789da937454045b17b5798da9393901a", - "sha256:d7eff0f27edc5afa9e405f7165f85a6d782d308f3b6b9d96016c010597958e63", - "sha256:d97d85fa63f315a8bdaba2af9a6a686e0eceab77b3089af45133252618e70884", - "sha256:db756e48f9c5c607b5e33dd36b1d5872d0422e960145b08ab0ec7fd420e9d649", - "sha256:dc45229747b67ffc441b3de2f3ae5e62877a282ea828a5bdb67883c4ee4a8810", - "sha256:e0fc42822278451bc13a2e8626cf2218ba570f27856b536e00cfa53099724828", - "sha256:e39c7eb31e3f5b1f88caff88bcff1b7f8334975b46f6ac6e9fc725d829bc35d4", - "sha256:e46cd37076971c1040fc8c41273a8b3e2c624ce4f2be3f5dfcb7a430c1d3acc2", - "sha256:e5c1502d4ace69a179305abb3f0bb6141cbe4714bc9b31d427329a95acfc8bdd", - "sha256:edfe077ab09442d4ef3c52cb1f9dab89bff02f4524afc0acf2d46be17dc479f5", - "sha256:effe5406c9bd748a871dbcaf3ac69167c38d72db8c9baf3ff954c344f31c4cbe", - "sha256:f0d1e3732768fecb052d90d62b220af62ead5748ac51ef61e7b32c266cac9293", - "sha256:f5969baeaea61c97efa706b9b107dcba02784b1601c74ac84f2a532ea079403e", - "sha256:f8888e31e3a85943743f8fc15e71536bda1c81d5aa36d014a3c0c44481d7db6e", - "sha256:fc52b79d83a3fe3a360902d3f5d79073a993597d48114c29485e9431092905d8" - ], - "markers": "python_full_version >= '3.7.0'", - "version": "==3.3.0" + "version": "==2023.11.17" }, "click": { "hashes": [ @@ -346,6 +262,79 @@ "markers": "python_version >= '3.7'", "version": "==8.1.7" }, + "cma": { + "hashes": [ + "sha256:0e3994b1f93c065b3eb2e68dbc589d9e694e191698d0aa58cb70cbdb803ade4e", + "sha256:47ac71ddd2b9a922daa601516064a585a1a3dbbae7802bca935db25e525547eb" + ], + "version": "==3.2.2" + }, + "contourpy": { + "hashes": [ + "sha256:059c3d2a94b930f4dafe8105bcdc1b21de99b30b51b5bce74c753686de858cb6", + "sha256:0683e1ae20dc038075d92e0e0148f09ffcefab120e57f6b4c9c0f477ec171f33", + "sha256:07d6f11dfaf80a84c97f1a5ba50d129d9303c5b4206f776e94037332e298dda8", + "sha256:081f3c0880712e40effc5f4c3b08feca6d064cb8cfbb372ca548105b86fd6c3d", + "sha256:0e48694d6a9c5a26ee85b10130c77a011a4fedf50a7279fa0bdaf44bafb4299d", + "sha256:11b836b7dbfb74e049c302bbf74b4b8f6cb9d0b6ca1bf86cfa8ba144aedadd9c", + "sha256:19557fa407e70f20bfaba7d55b4d97b14f9480856c4fb65812e8a05fe1c6f9bf", + "sha256:229a25f68046c5cf8067d6d6351c8b99e40da11b04d8416bf8d2b1d75922521e", + "sha256:24216552104ae8f3b34120ef84825400b16eb6133af2e27a190fdc13529f023e", + "sha256:3b53d5769aa1f2d4ea407c65f2d1d08002952fac1d9e9d307aa2e1023554a163", + "sha256:3de23ca4f381c3770dee6d10ead6fff524d540c0f662e763ad1530bde5112532", + "sha256:407d864db716a067cc696d61fa1ef6637fedf03606e8417fe2aeed20a061e6b2", + "sha256:41339b24471c58dc1499e56783fedc1afa4bb018bcd035cfb0ee2ad2a7501ef8", + "sha256:462c59914dc6d81e0b11f37e560b8a7c2dbab6aca4f38be31519d442d6cde1a1", + "sha256:46e24f5412c948d81736509377e255f6040e94216bf1a9b5ea1eaa9d29f6ec1b", + "sha256:498e53573e8b94b1caeb9e62d7c2d053c263ebb6aa259c81050766beb50ff8d9", + "sha256:4ebf42695f75ee1a952f98ce9775c873e4971732a87334b099dde90b6af6a916", + "sha256:4f9147051cb8fdb29a51dc2482d792b3b23e50f8f57e3720ca2e3d438b7adf23", + "sha256:549174b0713d49871c6dee90a4b499d3f12f5e5f69641cd23c50a4542e2ca1eb", + "sha256:560f1d68a33e89c62da5da4077ba98137a5e4d3a271b29f2f195d0fba2adcb6a", + "sha256:566f0e41df06dfef2431defcfaa155f0acfa1ca4acbf8fd80895b1e7e2ada40e", + "sha256:56de98a2fb23025882a18b60c7f0ea2d2d70bbbcfcf878f9067234b1c4818442", + "sha256:66544f853bfa85c0d07a68f6c648b2ec81dafd30f272565c37ab47a33b220684", + "sha256:6c06e4c6e234fcc65435223c7b2a90f286b7f1b2733058bdf1345d218cc59e34", + "sha256:6d0a8efc258659edc5299f9ef32d8d81de8b53b45d67bf4bfa3067f31366764d", + "sha256:70e5a10f8093d228bb2b552beeb318b8928b8a94763ef03b858ef3612b29395d", + "sha256:8394e652925a18ef0091115e3cc191fef350ab6dc3cc417f06da66bf98071ae9", + "sha256:8636cd2fc5da0fb102a2504fa2c4bea3cbc149533b345d72cdf0e7a924decc45", + "sha256:93df44ab351119d14cd1e6b52a5063d3336f0754b72736cc63db59307dabb718", + "sha256:96ba37c2e24b7212a77da85004c38e7c4d155d3e72a45eeaf22c1f03f607e8ab", + "sha256:a10dab5ea1bd4401c9483450b5b0ba5416be799bbd50fc7a6cc5e2a15e03e8a3", + "sha256:a66045af6cf00e19d02191ab578a50cb93b2028c3eefed999793698e9ea768ae", + "sha256:a75cc163a5f4531a256f2c523bd80db509a49fc23721b36dd1ef2f60ff41c3cb", + "sha256:b04c2f0adaf255bf756cf08ebef1be132d3c7a06fe6f9877d55640c5e60c72c5", + "sha256:ba42e3810999a0ddd0439e6e5dbf6d034055cdc72b7c5c839f37a7c274cb4eba", + "sha256:bfc8a5e9238232a45ebc5cb3bfee71f1167064c8d382cadd6076f0d51cff1da0", + "sha256:c5bd5680f844c3ff0008523a71949a3ff5e4953eb7701b28760805bc9bcff217", + "sha256:c84fdf3da00c2827d634de4fcf17e3e067490c4aea82833625c4c8e6cdea0887", + "sha256:ca6fab080484e419528e98624fb5c4282148b847e3602dc8dbe0cb0669469887", + "sha256:d0c188ae66b772d9d61d43c6030500344c13e3f73a00d1dc241da896f379bb62", + "sha256:d6ab42f223e58b7dac1bb0af32194a7b9311065583cc75ff59dcf301afd8a431", + "sha256:dfe80c017973e6a4c367e037cb31601044dd55e6bfacd57370674867d15a899b", + "sha256:e0c02b75acfea5cab07585d25069207e478d12309557f90a61b5a3b4f77f46ce", + "sha256:e30aaf2b8a2bac57eb7e1650df1b3a4130e8d0c66fc2f861039d507a11760e1b", + "sha256:eafbef886566dc1047d7b3d4b14db0d5b7deb99638d8e1be4e23a7c7ac59ff0f", + "sha256:efe0fab26d598e1ec07d72cf03eaeeba8e42b4ecf6b9ccb5a356fde60ff08b85", + "sha256:f08e469821a5e4751c97fcd34bcb586bc243c39c2e39321822060ba902eac49e", + "sha256:f1eaac5257a8f8a047248d60e8f9315c6cff58f7803971170d952555ef6344a7", + "sha256:f29fb0b3f1217dfe9362ec55440d0743fe868497359f2cf93293f4b2701b8251", + "sha256:f44d78b61740e4e8c71db1cf1fd56d9050a4747681c59ec1094750a658ceb970", + "sha256:f6aec19457617ef468ff091669cca01fa7ea557b12b59a7908b9474bb9674cf0", + "sha256:f9dc7f933975367251c1b34da882c4f0e0b2e24bb35dc906d2f598a40b72bfc7" + ], + "markers": "python_version >= '3.8'", + "version": "==1.1.1" + }, + "cycler": { + "hashes": [ + "sha256:85cef7cff222d8644161529808465972e51340599459b8ac3ccbac5a854e0d30", + "sha256:88bb128f02ba341da8ef447245a9e138fae777f6a23943da4540077d3601eb1c" + ], + "markers": "python_version >= '3.8'", + "version": "==0.12.1" + }, "deprecated": { "hashes": [ "sha256:6fac8b097794a90302bdbb17b9b815e732d3c4720583ff1b198499d78470466c", @@ -354,96 +343,175 @@ "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", "version": "==1.2.14" }, + "dill": { + "hashes": [ + "sha256:76b122c08ef4ce2eedcd4d1abd8e641114bfc6c2867f49f3c41facf65bf19f5e", + "sha256:cc1c8b182eb3013e24bd475ff2e9295af86c1a38eb1aff128dac8962a9ce3c03" + ], + "markers": "python_version >= '3.7'", + "version": "==0.3.7" + }, "exceptiongroup": { "hashes": [ - "sha256:097acd85d473d75af5bb98e41b61ff7fe35efe6675e4f9370ec6ec5126d160e9", - "sha256:343280667a4585d195ca1cf9cef84a4e178c4b6cf2274caef9859782b567d5e3" + "sha256:4bfd3996ac73b41e9b9628b04e079f193850720ea5945fc96a08633c66912f14", + "sha256:91f5c769735f051a4290d52edd0858999b57e5876e9f85937691bd4c9fa3ed68" ], "markers": "python_version < '3.11'", - "version": "==1.1.3" + "version": "==1.2.0" }, "fastapi": { "hashes": [ - "sha256:3270de872f0fe9ec809d4bd3d4d890c6d5cc7b9611d721d6438f9dacc8c4ef2e", - "sha256:75a11f6bfb8fc4d2bec0bd710c2d5f2829659c0e8c0afd5560fdda6ce25ec653" + "sha256:4d12838819aa52af244580675825e750ad67c9df4614f557a769606af902cf22", + "sha256:f19ebf6fdc82a3281d10f2cb4774bdfa90238e3b40af3525a0c09fd08ad1c480" ], "index": "pypi", - "version": "==0.103.2" + "version": "==0.105.0" + }, + "fonttools": { + "hashes": [ + "sha256:084511482dd265bce6dca24c509894062f0117e4e6869384d853f46c0e6d43be", + "sha256:1193fb090061efa2f9e2d8d743ae9850c77b66746a3b32792324cdce65784154", + "sha256:174995f7b057e799355b393e97f4f93ef1f2197cbfa945e988d49b2a09ecbce8", + "sha256:253bb46bab970e8aae254cebf2ae3db98a4ef6bd034707aa68a239027d2b198d", + "sha256:2a78dba8c2a1e9d53a0fb5382979f024200dc86adc46a56cbb668a2249862fda", + "sha256:2d2404107626f97a221dc1a65b05396d2bb2ce38e435f64f26ed2369f68675d9", + "sha256:40bdbe90b33897d9cc4a39f8e415b0fcdeae4c40a99374b8a4982f127ff5c767", + "sha256:495369c660e0c27233e3c572269cbe520f7f4978be675f990f4005937337d391", + "sha256:4a9a51745c0439516d947480d4d884fa18bd1458e05b829e482b9269afa655bc", + "sha256:511482df31cfea9f697930f61520f6541185fa5eeba2fa760fe72e8eee5af88b", + "sha256:52c82df66201f3a90db438d9d7b337c7c98139de598d0728fb99dab9fd0495ca", + "sha256:562681188c62c024fe2c611b32e08b8de2afa00c0c4e72bed47c47c318e16d5c", + "sha256:59a6c8b71a245800e923cb684a2dc0eac19c56493e2f896218fcf2571ed28984", + "sha256:5dde0eab40faaa5476133123f6a622a1cc3ac9b7af45d65690870620323308b4", + "sha256:61df4dee5d38ab65b26da8efd62d859a1eef7a34dcbc331299a28e24d04c59a7", + "sha256:62d8ddb058b8e87018e5dc26f3258e2c30daad4c87262dfeb0e2617dd84750e6", + "sha256:66c92ec7f95fd9732550ebedefcd190a8d81beaa97e89d523a0d17198a8bda4d", + "sha256:843509ae9b93db5aaf1a6302085e30bddc1111d31e11d724584818f5b698f500", + "sha256:854421e328d47d70aa5abceacbe8eef231961b162c71cbe7ff3f47e235e2e5c5", + "sha256:97620c4af36e4c849e52661492e31dc36916df12571cb900d16960ab8e92a980", + "sha256:9acfa1cdc479e0dde528b61423855913d949a7f7fe09e276228298fef4589540", + "sha256:a77a60315c33393b2bd29d538d1ef026060a63d3a49a9233b779261bad9c3f71", + "sha256:b4fabb8cc9422efae1a925160083fdcbab8fdc96a8483441eb7457235df625bd", + "sha256:bf1810635c00f7c45d93085611c995fc130009cec5abdc35b327156aa191f982", + "sha256:c01f409be619a9a0f5590389e37ccb58b47264939f0e8d58bfa1f3ba07d22671", + "sha256:c59227d7ba5b232281c26ae04fac2c73a79ad0e236bca5c44aae904a18f14faf", + "sha256:c75e19971209fbbce891ebfd1b10c37320a5a28e8d438861c21d35305aedb81c", + "sha256:ce0e2c88c8c985b7b9a7efcd06511fb0a1fe3ddd9a6cd2895ef1dbf9059719d7", + "sha256:d6477ba902dd2d7adda7f0fd3bfaeb92885d45993c9e1928c9f28fc3961415f7", + "sha256:d986b66ff722ef675b7ee22fbe5947a41f60a61a4da15579d5e276d897fbc7fa", + "sha256:dd23848f877c3754f53a4903fb7a593ed100924f9b4bff7d5a4e2e8a7001ae11", + "sha256:e3f4d61f3a8195eac784f1d0c16c0a3105382c1b9a74d99ac4ba421da39a8826", + "sha256:e6b968543fde4119231c12c2a953dcf83349590ca631ba8216a8edf9cd4d36a9", + "sha256:e77bdf52185bdaf63d39f3e1ac3212e6cfa3ab07d509b94557a8902ce9c13c82", + "sha256:e79f1a3970d25f692bbb8c8c2637e621a66c0d60c109ab48d4a160f50856deff", + "sha256:e7a0a8848726956e9d9fb18c977a279013daadf0cbb6725d2015a6dd57527992", + "sha256:e869da810ae35afb3019baa0d0306cdbab4760a54909c89ad8904fa629991812", + "sha256:e8acf6dd0434b211b3bd30d572d9e019831aae17a54016629fa8224783b22df8", + "sha256:e8fa20748de55d0021f83754b371432dca0439e02847962fc4c42a0e444c2d78", + "sha256:ea592e6a09b71cb7a7661dd93ac0b877a6228e2d677ebacbad0a4d118494c86d", + "sha256:ec13a10715eef0e031858c1c23bfaee6cba02b97558e4a7bfa089dba4a8c2ebf", + "sha256:f4da089f6dfdb822293bde576916492cd708c37c2501c3651adde39804630538" + ], + "markers": "python_version >= '3.8'", + "version": "==4.47.0" }, "frozenlist": { "hashes": [ - "sha256:007df07a6e3eb3e33e9a1fe6a9db7af152bbd8a185f9aaa6ece10a3529e3e1c6", - "sha256:008eb8b31b3ea6896da16c38c1b136cb9fec9e249e77f6211d479db79a4eaf01", - "sha256:09163bdf0b2907454042edb19f887c6d33806adc71fbd54afc14908bfdc22251", - "sha256:0c7c1b47859ee2cac3846fde1c1dc0f15da6cec5a0e5c72d101e0f83dcb67ff9", - "sha256:0e5c8764c7829343d919cc2dfc587a8db01c4f70a4ebbc49abde5d4b158b007b", - "sha256:10ff5faaa22786315ef57097a279b833ecab1a0bfb07d604c9cbb1c4cdc2ed87", - "sha256:17ae5cd0f333f94f2e03aaf140bb762c64783935cc764ff9c82dff626089bebf", - "sha256:19488c57c12d4e8095a922f328df3f179c820c212940a498623ed39160bc3c2f", - "sha256:1a0848b52815006ea6596c395f87449f693dc419061cc21e970f139d466dc0a0", - "sha256:1e78fb68cf9c1a6aa4a9a12e960a5c9dfbdb89b3695197aa7064705662515de2", - "sha256:261b9f5d17cac914531331ff1b1d452125bf5daa05faf73b71d935485b0c510b", - "sha256:2b8bcf994563466db019fab287ff390fffbfdb4f905fc77bc1c1d604b1c689cc", - "sha256:38461d02d66de17455072c9ba981d35f1d2a73024bee7790ac2f9e361ef1cd0c", - "sha256:490132667476f6781b4c9458298b0c1cddf237488abd228b0b3650e5ecba7467", - "sha256:491e014f5c43656da08958808588cc6c016847b4360e327a62cb308c791bd2d9", - "sha256:515e1abc578dd3b275d6a5114030b1330ba044ffba03f94091842852f806f1c1", - "sha256:556de4430ce324c836789fa4560ca62d1591d2538b8ceb0b4f68fb7b2384a27a", - "sha256:5833593c25ac59ede40ed4de6d67eb42928cca97f26feea219f21d0ed0959b79", - "sha256:6221d84d463fb110bdd7619b69cb43878a11d51cbb9394ae3105d082d5199167", - "sha256:6918d49b1f90821e93069682c06ffde41829c346c66b721e65a5c62b4bab0300", - "sha256:6c38721585f285203e4b4132a352eb3daa19121a035f3182e08e437cface44bf", - "sha256:71932b597f9895f011f47f17d6428252fc728ba2ae6024e13c3398a087c2cdea", - "sha256:7211ef110a9194b6042449431e08c4d80c0481e5891e58d429df5899690511c2", - "sha256:764226ceef3125e53ea2cb275000e309c0aa5464d43bd72abd661e27fffc26ab", - "sha256:7645a8e814a3ee34a89c4a372011dcd817964ce8cb273c8ed6119d706e9613e3", - "sha256:76d4711f6f6d08551a7e9ef28c722f4a50dd0fc204c56b4bcd95c6cc05ce6fbb", - "sha256:7f4f399d28478d1f604c2ff9119907af9726aed73680e5ed1ca634d377abb087", - "sha256:88f7bc0fcca81f985f78dd0fa68d2c75abf8272b1f5c323ea4a01a4d7a614efc", - "sha256:8d0edd6b1c7fb94922bf569c9b092ee187a83f03fb1a63076e7774b60f9481a8", - "sha256:901289d524fdd571be1c7be054f48b1f88ce8dddcbdf1ec698b27d4b8b9e5d62", - "sha256:93ea75c050c5bb3d98016b4ba2497851eadf0ac154d88a67d7a6816206f6fa7f", - "sha256:981b9ab5a0a3178ff413bca62526bb784249421c24ad7381e39d67981be2c326", - "sha256:9ac08e601308e41eb533f232dbf6b7e4cea762f9f84f6357136eed926c15d12c", - "sha256:a02eb8ab2b8f200179b5f62b59757685ae9987996ae549ccf30f983f40602431", - "sha256:a0c6da9aee33ff0b1a451e867da0c1f47408112b3391dd43133838339e410963", - "sha256:a6c8097e01886188e5be3e6b14e94ab365f384736aa1fca6a0b9e35bd4a30bc7", - "sha256:aa384489fefeb62321b238e64c07ef48398fe80f9e1e6afeff22e140e0850eef", - "sha256:ad2a9eb6d9839ae241701d0918f54c51365a51407fd80f6b8289e2dfca977cc3", - "sha256:b206646d176a007466358aa21d85cd8600a415c67c9bd15403336c331a10d956", - "sha256:b826d97e4276750beca7c8f0f1a4938892697a6bcd8ec8217b3312dad6982781", - "sha256:b89ac9768b82205936771f8d2eb3ce88503b1556324c9f903e7156669f521472", - "sha256:bd7bd3b3830247580de99c99ea2a01416dfc3c34471ca1298bccabf86d0ff4dc", - "sha256:bdf1847068c362f16b353163391210269e4f0569a3c166bc6a9f74ccbfc7e839", - "sha256:c11b0746f5d946fecf750428a95f3e9ebe792c1ee3b1e96eeba145dc631a9672", - "sha256:c5374b80521d3d3f2ec5572e05adc94601985cc526fb276d0c8574a6d749f1b3", - "sha256:ca265542ca427bf97aed183c1676e2a9c66942e822b14dc6e5f42e038f92a503", - "sha256:ce31ae3e19f3c902de379cf1323d90c649425b86de7bbdf82871b8a2a0615f3d", - "sha256:ceb6ec0a10c65540421e20ebd29083c50e6d1143278746a4ef6bcf6153171eb8", - "sha256:d081f13b095d74b67d550de04df1c756831f3b83dc9881c38985834387487f1b", - "sha256:d5655a942f5f5d2c9ed93d72148226d75369b4f6952680211972a33e59b1dfdc", - "sha256:d5a32087d720c608f42caed0ef36d2b3ea61a9d09ee59a5142d6070da9041b8f", - "sha256:d6484756b12f40003c6128bfcc3fa9f0d49a687e171186c2d85ec82e3758c559", - "sha256:dd65632acaf0d47608190a71bfe46b209719bf2beb59507db08ccdbe712f969b", - "sha256:de343e75f40e972bae1ef6090267f8260c1446a1695e77096db6cfa25e759a95", - "sha256:e29cda763f752553fa14c68fb2195150bfab22b352572cb36c43c47bedba70eb", - "sha256:e41f3de4df3e80de75845d3e743b3f1c4c8613c3997a912dbf0229fc61a8b963", - "sha256:e66d2a64d44d50d2543405fb183a21f76b3b5fd16f130f5c99187c3fb4e64919", - "sha256:e74b0506fa5aa5598ac6a975a12aa8928cbb58e1f5ac8360792ef15de1aa848f", - "sha256:f0ed05f5079c708fe74bf9027e95125334b6978bf07fd5ab923e9e55e5fbb9d3", - "sha256:f61e2dc5ad442c52b4887f1fdc112f97caeff4d9e6ebe78879364ac59f1663e1", - "sha256:fec520865f42e5c7f050c2a79038897b1c7d1595e907a9e08e3353293ffc948e" + "sha256:04ced3e6a46b4cfffe20f9ae482818e34eba9b5fb0ce4056e4cc9b6e212d09b7", + "sha256:0633c8d5337cb5c77acbccc6357ac49a1770b8c487e5b3505c57b949b4b82e98", + "sha256:068b63f23b17df8569b7fdca5517edef76171cf3897eb68beb01341131fbd2ad", + "sha256:0c250a29735d4f15321007fb02865f0e6b6a41a6b88f1f523ca1596ab5f50bd5", + "sha256:1979bc0aeb89b33b588c51c54ab0161791149f2461ea7c7c946d95d5f93b56ae", + "sha256:1a4471094e146b6790f61b98616ab8e44f72661879cc63fa1049d13ef711e71e", + "sha256:1b280e6507ea8a4fa0c0a7150b4e526a8d113989e28eaaef946cc77ffd7efc0a", + "sha256:1d0ce09d36d53bbbe566fe296965b23b961764c0bcf3ce2fa45f463745c04701", + "sha256:20b51fa3f588ff2fe658663db52a41a4f7aa6c04f6201449c6c7c476bd255c0d", + "sha256:23b2d7679b73fe0e5a4560b672a39f98dfc6f60df63823b0a9970525325b95f6", + "sha256:23b701e65c7b36e4bf15546a89279bd4d8675faabc287d06bbcfac7d3c33e1e6", + "sha256:2471c201b70d58a0f0c1f91261542a03d9a5e088ed3dc6c160d614c01649c106", + "sha256:27657df69e8801be6c3638054e202a135c7f299267f1a55ed3a598934f6c0d75", + "sha256:29acab3f66f0f24674b7dc4736477bcd4bc3ad4b896f5f45379a67bce8b96868", + "sha256:32453c1de775c889eb4e22f1197fe3bdfe457d16476ea407472b9442e6295f7a", + "sha256:3a670dc61eb0d0eb7080890c13de3066790f9049b47b0de04007090807c776b0", + "sha256:3e0153a805a98f5ada7e09826255ba99fb4f7524bb81bf6b47fb702666484ae1", + "sha256:410478a0c562d1a5bcc2f7ea448359fcb050ed48b3c6f6f4f18c313a9bdb1826", + "sha256:442acde1e068288a4ba7acfe05f5f343e19fac87bfc96d89eb886b0363e977ec", + "sha256:48f6a4533887e189dae092f1cf981f2e3885175f7a0f33c91fb5b7b682b6bab6", + "sha256:4f57dab5fe3407b6c0c1cc907ac98e8a189f9e418f3b6e54d65a718aaafe3950", + "sha256:4f9c515e7914626b2a2e1e311794b4c35720a0be87af52b79ff8e1429fc25f19", + "sha256:55fdc093b5a3cb41d420884cdaf37a1e74c3c37a31f46e66286d9145d2063bd0", + "sha256:5667ed53d68d91920defdf4035d1cdaa3c3121dc0b113255124bcfada1cfa1b8", + "sha256:590344787a90ae57d62511dd7c736ed56b428f04cd8c161fcc5e7232c130c69a", + "sha256:5a7d70357e7cee13f470c7883a063aae5fe209a493c57d86eb7f5a6f910fae09", + "sha256:5c3894db91f5a489fc8fa6a9991820f368f0b3cbdb9cd8849547ccfab3392d86", + "sha256:5c849d495bf5154cd8da18a9eb15db127d4dba2968d88831aff6f0331ea9bd4c", + "sha256:64536573d0a2cb6e625cf309984e2d873979709f2cf22839bf2d61790b448ad5", + "sha256:693945278a31f2086d9bf3df0fe8254bbeaef1fe71e1351c3bd730aa7d31c41b", + "sha256:6db4667b187a6742b33afbbaf05a7bc551ffcf1ced0000a571aedbb4aa42fc7b", + "sha256:6eb73fa5426ea69ee0e012fb59cdc76a15b1283d6e32e4f8dc4482ec67d1194d", + "sha256:722e1124aec435320ae01ee3ac7bec11a5d47f25d0ed6328f2273d287bc3abb0", + "sha256:7268252af60904bf52c26173cbadc3a071cece75f873705419c8681f24d3edea", + "sha256:74fb4bee6880b529a0c6560885fce4dc95936920f9f20f53d99a213f7bf66776", + "sha256:780d3a35680ced9ce682fbcf4cb9c2bad3136eeff760ab33707b71db84664e3a", + "sha256:82e8211d69a4f4bc360ea22cd6555f8e61a1bd211d1d5d39d3d228b48c83a897", + "sha256:89aa2c2eeb20957be2d950b85974b30a01a762f3308cd02bb15e1ad632e22dc7", + "sha256:8aefbba5f69d42246543407ed2461db31006b0f76c4e32dfd6f42215a2c41d09", + "sha256:96ec70beabbd3b10e8bfe52616a13561e58fe84c0101dd031dc78f250d5128b9", + "sha256:9750cc7fe1ae3b1611bb8cfc3f9ec11d532244235d75901fb6b8e42ce9229dfe", + "sha256:9acbb16f06fe7f52f441bb6f413ebae6c37baa6ef9edd49cdd567216da8600cd", + "sha256:9d3e0c25a2350080e9319724dede4f31f43a6c9779be48021a7f4ebde8b2d742", + "sha256:a06339f38e9ed3a64e4c4e43aec7f59084033647f908e4259d279a52d3757d09", + "sha256:a0cb6f11204443f27a1628b0e460f37fb30f624be6051d490fa7d7e26d4af3d0", + "sha256:a7496bfe1da7fb1a4e1cc23bb67c58fab69311cc7d32b5a99c2007b4b2a0e932", + "sha256:a828c57f00f729620a442881cc60e57cfcec6842ba38e1b19fd3e47ac0ff8dc1", + "sha256:a9b2de4cf0cdd5bd2dee4c4f63a653c61d2408055ab77b151c1957f221cabf2a", + "sha256:b46c8ae3a8f1f41a0d2ef350c0b6e65822d80772fe46b653ab6b6274f61d4a49", + "sha256:b7e3ed87d4138356775346e6845cccbe66cd9e207f3cd11d2f0b9fd13681359d", + "sha256:b7f2f9f912dca3934c1baec2e4585a674ef16fe00218d833856408c48d5beee7", + "sha256:ba60bb19387e13597fb059f32cd4d59445d7b18b69a745b8f8e5db0346f33480", + "sha256:beee944ae828747fd7cb216a70f120767fc9f4f00bacae8543c14a6831673f89", + "sha256:bfa4a17e17ce9abf47a74ae02f32d014c5e9404b6d9ac7f729e01562bbee601e", + "sha256:c037a86e8513059a2613aaba4d817bb90b9d9b6b69aace3ce9c877e8c8ed402b", + "sha256:c302220494f5c1ebeb0912ea782bcd5e2f8308037b3c7553fad0e48ebad6ad82", + "sha256:c6321c9efe29975232da3bd0af0ad216800a47e93d763ce64f291917a381b8eb", + "sha256:c757a9dd70d72b076d6f68efdbb9bc943665ae954dad2801b874c8c69e185068", + "sha256:c99169d4ff810155ca50b4da3b075cbde79752443117d89429595c2e8e37fed8", + "sha256:c9c92be9fd329ac801cc420e08452b70e7aeab94ea4233a4804f0915c14eba9b", + "sha256:cc7b01b3754ea68a62bd77ce6020afaffb44a590c2289089289363472d13aedb", + "sha256:db9e724bebd621d9beca794f2a4ff1d26eed5965b004a97f1f1685a173b869c2", + "sha256:dca69045298ce5c11fd539682cff879cc1e664c245d1c64da929813e54241d11", + "sha256:dd9b1baec094d91bf36ec729445f7769d0d0cf6b64d04d86e45baf89e2b9059b", + "sha256:e02a0e11cf6597299b9f3bbd3f93d79217cb90cfd1411aec33848b13f5c656cc", + "sha256:e6a20a581f9ce92d389a8c7d7c3dd47c81fd5d6e655c8dddf341e14aa48659d0", + "sha256:e7004be74cbb7d9f34553a5ce5fb08be14fb33bc86f332fb71cbe5216362a497", + "sha256:e774d53b1a477a67838a904131c4b0eef6b3d8a651f8b138b04f748fccfefe17", + "sha256:edb678da49d9f72c9f6c609fbe41a5dfb9a9282f9e6a2253d5a91e0fc382d7c0", + "sha256:f146e0911cb2f1da549fc58fc7bcd2b836a44b79ef871980d605ec392ff6b0d2", + "sha256:f56e2333dda1fe0f909e7cc59f021eba0d2307bc6f012a1ccf2beca6ba362439", + "sha256:f9a3ea26252bd92f570600098783d1371354d89d5f6b7dfd87359d669f2109b5", + "sha256:f9aa1878d1083b276b0196f2dfbe00c9b7e752475ed3b682025ff20c1c1f51ac", + "sha256:fb3c2db03683b5767dedb5769b8a40ebb47d6f7f45b1b3e3b4b51ec8ad9d9825", + "sha256:fbeb989b5cc29e8daf7f976b421c220f1b8c731cbf22b9130d8815418ea45887", + "sha256:fde5bd59ab5357e3853313127f4d3565fc7dad314a74d7b5d43c22c6a5ed2ced", + "sha256:fe1a06da377e3a1062ae5fe0926e12b84eceb8a50b350ddca72dc85015873f74" ], "markers": "python_version >= '3.8'", - "version": "==1.4.0" + "version": "==1.4.1" + }, + "future": { + "hashes": [ + "sha256:34a17436ed1e96697a86f9de3d15a3b0be01d8bc8de9c1dffd59fb8234ed5307" + ], + "markers": "python_version >= '2.6' and python_version not in '3.0, 3.1, 3.2, 3.3'", + "version": "==0.18.3" }, "googleapis-common-protos": { "hashes": [ - "sha256:69f9bbcc6acde92cab2db95ce30a70bd2b81d20b12eff3f1aabaffcbe8a93918", - "sha256:e73ebb404098db405ba95d1e1ae0aa91c3e15a71da031a2eeb6b2e23e7bc3708" + "sha256:4750113612205514f9f6aa4cb00d523a94f3e8c06c5ad2fee466387dc4875f07", + "sha256:83f0ece9f94e5672cced82f592d2a5edf527a96ed1794f0bab36d5735c996277" ], "markers": "python_version >= '3.7'", - "version": "==1.60.0" + "version": "==1.62.0" }, "gql": { "hashes": [ @@ -453,6 +521,12 @@ "index": "pypi", "version": "==3.4.1" }, + "grapheme": { + "hashes": [ + "sha256:44c2b9f21bbe77cfb05835fec230bd435954275267fea1858013b102f8603cca" + ], + "version": "==0.6.0" + }, "graphql-core": { "hashes": [ "sha256:06d2aad0ac723e35b1cb47885d3e5c45e956a53bc1b209a9fc5369007fe46676", @@ -463,123 +537,123 @@ }, "grpcio": { "hashes": [ - "sha256:0ae444221b2c16d8211b55326f8ba173ba8f8c76349bfc1768198ba592b58f74", - "sha256:0b84445fa94d59e6806c10266b977f92fa997db3585f125d6b751af02ff8b9fe", - "sha256:14890da86a0c0e9dc1ea8e90101d7a3e0e7b1e71f4487fab36e2bfd2ecadd13c", - "sha256:15f03bd714f987d48ae57fe092cf81960ae36da4e520e729392a59a75cda4f29", - "sha256:1a839ba86764cc48226f50b924216000c79779c563a301586a107bda9cbe9dcf", - "sha256:225e5fa61c35eeaebb4e7491cd2d768cd8eb6ed00f2664fa83a58f29418b39fd", - "sha256:228b91ce454876d7eed74041aff24a8f04c0306b7250a2da99d35dd25e2a1211", - "sha256:2ea95cd6abbe20138b8df965b4a8674ec312aaef3147c0f46a0bac661f09e8d0", - "sha256:2f120d27051e4c59db2f267b71b833796770d3ea36ca712befa8c5fff5da6ebd", - "sha256:34341d9e81a4b669a5f5dca3b2a760b6798e95cdda2b173e65d29d0b16692857", - "sha256:3859917de234a0a2a52132489c4425a73669de9c458b01c9a83687f1f31b5b10", - "sha256:38823bd088c69f59966f594d087d3a929d1ef310506bee9e3648317660d65b81", - "sha256:38da5310ef84e16d638ad89550b5b9424df508fd5c7b968b90eb9629ca9be4b9", - "sha256:3b8ff795d35a93d1df6531f31c1502673d1cebeeba93d0f9bd74617381507e3f", - "sha256:50eff97397e29eeee5df106ea1afce3ee134d567aa2c8e04fabab05c79d791a7", - "sha256:5711c51e204dc52065f4a3327dca46e69636a0b76d3e98c2c28c4ccef9b04c52", - "sha256:598f3530231cf10ae03f4ab92d48c3be1fee0c52213a1d5958df1a90957e6a88", - "sha256:611d9aa0017fa386809bddcb76653a5ab18c264faf4d9ff35cb904d44745f575", - "sha256:61bc72a00ecc2b79d9695220b4d02e8ba53b702b42411397e831c9b0589f08a3", - "sha256:63982150a7d598281fa1d7ffead6096e543ff8be189d3235dd2b5604f2c553e5", - "sha256:6c4b1cc3a9dc1924d2eb26eec8792fedd4b3fcd10111e26c1d551f2e4eda79ce", - "sha256:81d86a096ccd24a57fa5772a544c9e566218bc4de49e8c909882dae9d73392df", - "sha256:849c47ef42424c86af069a9c5e691a765e304079755d5c29eff511263fad9c2a", - "sha256:871371ce0c0055d3db2a86fdebd1e1d647cf21a8912acc30052660297a5a6901", - "sha256:8cd2d38c2d52f607d75a74143113174c36d8a416d9472415eab834f837580cf7", - "sha256:936b2e04663660c600d5173bc2cc84e15adbad9c8f71946eb833b0afc205b996", - "sha256:93e9cb546e610829e462147ce724a9cb108e61647a3454500438a6deef610be1", - "sha256:956f0b7cb465a65de1bd90d5a7475b4dc55089b25042fe0f6c870707e9aabb1d", - "sha256:986de4aa75646e963466b386a8c5055c8b23a26a36a6c99052385d6fe8aaf180", - "sha256:aca8a24fef80bef73f83eb8153f5f5a0134d9539b4c436a716256b311dda90a6", - "sha256:acf70a63cf09dd494000007b798aff88a436e1c03b394995ce450be437b8e54f", - "sha256:b34c7a4c31841a2ea27246a05eed8a80c319bfc0d3e644412ec9ce437105ff6c", - "sha256:b95ec8ecc4f703f5caaa8d96e93e40c7f589bad299a2617bdb8becbcce525539", - "sha256:ba0ca727a173ee093f49ead932c051af463258b4b493b956a2c099696f38aa66", - "sha256:c041a91712bf23b2a910f61e16565a05869e505dc5a5c025d429ca6de5de842c", - "sha256:c0488c2b0528e6072010182075615620071371701733c63ab5be49140ed8f7f0", - "sha256:c173a87d622ea074ce79be33b952f0b424fa92182063c3bda8625c11d3585d09", - "sha256:c251d22de8f9f5cca9ee47e4bade7c5c853e6e40743f47f5cc02288ee7a87252", - "sha256:c4dfdb49f4997dc664f30116af2d34751b91aa031f8c8ee251ce4dcfc11277b0", - "sha256:ca87ee6183421b7cea3544190061f6c1c3dfc959e0b57a5286b108511fd34ff4", - "sha256:ceb1e68135788c3fce2211de86a7597591f0b9a0d2bb80e8401fd1d915991bac", - "sha256:d09bd2a4e9f5a44d36bb8684f284835c14d30c22d8ec92ce796655af12163588", - "sha256:d0fcf53df684fcc0154b1e61f6b4a8c4cf5f49d98a63511e3f30966feff39cd0", - "sha256:d74f7d2d7c242a6af9d4d069552ec3669965b74fed6b92946e0e13b4168374f9", - "sha256:de2599985b7c1b4ce7526e15c969d66b93687571aa008ca749d6235d056b7205", - "sha256:e5378785dce2b91eb2e5b857ec7602305a3b5cf78311767146464bfa365fc897", - "sha256:ec78aebb9b6771d6a1de7b6ca2f779a2f6113b9108d486e904bde323d51f5589", - "sha256:f1feb034321ae2f718172d86b8276c03599846dc7bb1792ae370af02718f91c5", - "sha256:f21917aa50b40842b51aff2de6ebf9e2f6af3fe0971c31960ad6a3a2b24988f4", - "sha256:f367e4b524cb319e50acbdea57bb63c3b717c5d561974ace0b065a648bb3bad3", - "sha256:f6cfe44a5d7c7d5f1017a7da1c8160304091ca5dc64a0f85bca0d63008c3137a", - "sha256:fa66cac32861500f280bb60fe7d5b3e22d68c51e18e65367e38f8669b78cea3b", - "sha256:fc8bf2e7bc725e76c0c11e474634a08c8f24bcf7426c0c6d60c8f9c6e70e4d4a", - "sha256:fe976910de34d21057bcb53b2c5e667843588b48bf11339da2a75f5c4c5b4055" + "sha256:073f959c6f570797272f4ee9464a9997eaf1e98c27cb680225b82b53390d61e6", + "sha256:0fd3b3968ffe7643144580f260f04d39d869fcc2cddb745deef078b09fd2b328", + "sha256:1434ca77d6fed4ea312901122dc8da6c4389738bf5788f43efb19a838ac03ead", + "sha256:1c30bb23a41df95109db130a6cc1b974844300ae2e5d68dd4947aacba5985aa5", + "sha256:20e7a4f7ded59097c84059d28230907cd97130fa74f4a8bfd1d8e5ba18c81491", + "sha256:2199165a1affb666aa24adf0c97436686d0a61bc5fc113c037701fb7c7fceb96", + "sha256:297eef542156d6b15174a1231c2493ea9ea54af8d016b8ca7d5d9cc65cfcc444", + "sha256:2aef56e85901c2397bd557c5ba514f84de1f0ae5dd132f5d5fed042858115951", + "sha256:30943b9530fe3620e3b195c03130396cd0ee3a0d10a66c1bee715d1819001eaf", + "sha256:3b36a2c6d4920ba88fa98075fdd58ff94ebeb8acc1215ae07d01a418af4c0253", + "sha256:428d699c8553c27e98f4d29fdc0f0edc50e9a8a7590bfd294d2edb0da7be3629", + "sha256:43e636dc2ce9ece583b3e2ca41df5c983f4302eabc6d5f9cd04f0562ee8ec1ae", + "sha256:452ca5b4afed30e7274445dd9b441a35ece656ec1600b77fff8c216fdf07df43", + "sha256:467a7d31554892eed2aa6c2d47ded1079fc40ea0b9601d9f79204afa8902274b", + "sha256:4b44d7e39964e808b071714666a812049765b26b3ea48c4434a3b317bac82f14", + "sha256:4c86343cf9ff7b2514dd229bdd88ebba760bd8973dac192ae687ff75e39ebfab", + "sha256:5208a57eae445ae84a219dfd8b56e04313445d146873117b5fa75f3245bc1390", + "sha256:5ff21e000ff2f658430bde5288cb1ac440ff15c0d7d18b5fb222f941b46cb0d2", + "sha256:675997222f2e2f22928fbba640824aebd43791116034f62006e19730715166c0", + "sha256:676e4a44e740deaba0f4d95ba1d8c5c89a2fcc43d02c39f69450b1fa19d39590", + "sha256:6e306b97966369b889985a562ede9d99180def39ad42c8014628dd3cc343f508", + "sha256:6fd9584bf1bccdfff1512719316efa77be235469e1e3295dce64538c4773840b", + "sha256:705a68a973c4c76db5d369ed573fec3367d7d196673fa86614b33d8c8e9ebb08", + "sha256:74d7d9fa97809c5b892449b28a65ec2bfa458a4735ddad46074f9f7d9550ad13", + "sha256:77c8a317f0fd5a0a2be8ed5cbe5341537d5c00bb79b3bb27ba7c5378ba77dbca", + "sha256:79a050889eb8d57a93ed21d9585bb63fca881666fc709f5d9f7f9372f5e7fd03", + "sha256:7db16dd4ea1b05ada504f08d0dca1cd9b926bed3770f50e715d087c6f00ad748", + "sha256:83f2292ae292ed5a47cdcb9821039ca8e88902923198f2193f13959360c01860", + "sha256:87c9224acba0ad8bacddf427a1c2772e17ce50b3042a789547af27099c5f751d", + "sha256:8a97a681e82bc11a42d4372fe57898d270a2707f36c45c6676e49ce0d5c41353", + "sha256:9073513ec380434eb8d21970e1ab3161041de121f4018bbed3146839451a6d8e", + "sha256:90bdd76b3f04bdb21de5398b8a7c629676c81dfac290f5f19883857e9371d28c", + "sha256:91229d7203f1ef0ab420c9b53fe2ca5c1fbeb34f69b3bc1b5089466237a4a134", + "sha256:92f88ca1b956eb8427a11bb8b4a0c0b2b03377235fc5102cb05e533b8693a415", + "sha256:95ae3e8e2c1b9bf671817f86f155c5da7d49a2289c5cf27a319458c3e025c320", + "sha256:9e30be89a75ee66aec7f9e60086fadb37ff8c0ba49a022887c28c134341f7179", + "sha256:a48edde788b99214613e440fce495bbe2b1e142a7f214cce9e0832146c41e324", + "sha256:a7152fa6e597c20cb97923407cf0934e14224af42c2b8d915f48bc3ad2d9ac18", + "sha256:a9c7b71211f066908e518a2ef7a5e211670761651039f0d6a80d8d40054047df", + "sha256:b0571a5aef36ba9177e262dc88a9240c866d903a62799e44fd4aae3f9a2ec17e", + "sha256:b0fb2d4801546598ac5cd18e3ec79c1a9af8b8f2a86283c55a5337c5aeca4b1b", + "sha256:b10241250cb77657ab315270b064a6c7f1add58af94befa20687e7c8d8603ae6", + "sha256:b87efe4a380887425bb15f220079aa8336276398dc33fce38c64d278164f963d", + "sha256:b98f43fcdb16172dec5f4b49f2fece4b16a99fd284d81c6bbac1b3b69fcbe0ff", + "sha256:c193109ca4070cdcaa6eff00fdb5a56233dc7610216d58fb81638f89f02e4968", + "sha256:c826f93050c73e7769806f92e601e0efdb83ec8d7c76ddf45d514fee54e8e619", + "sha256:d020cfa595d1f8f5c6b343530cd3ca16ae5aefdd1e832b777f9f0eb105f5b139", + "sha256:d6a478581b1a1a8fdf3318ecb5f4d0cda41cacdffe2b527c23707c9c1b8fdb55", + "sha256:de2ad69c9a094bf37c1102b5744c9aec6cf74d2b635558b779085d0263166454", + "sha256:e278eafb406f7e1b1b637c2cf51d3ad45883bb5bd1ca56bc05e4fc135dfdaa65", + "sha256:e381fe0c2aa6c03b056ad8f52f8efca7be29fb4d9ae2f8873520843b6039612a", + "sha256:e61e76020e0c332a98290323ecfec721c9544f5b739fab925b6e8cbe1944cf19", + "sha256:f897c3b127532e6befdcf961c415c97f320d45614daf84deba0a54e64ea2457b", + "sha256:fb464479934778d7cc5baf463d959d361954d6533ad34c3a4f1d267e86ee25fd" ], "markers": "python_version >= '3.7'", - "version": "==1.59.0" + "version": "==1.60.0" }, "grpcio-tools": { "hashes": [ - "sha256:0548e901894399886ff4a4cd808cb850b60c021feb4a8977a0751f14dd7e55d9", - "sha256:05bf7b3ed01c8a562bb7e840f864c58acedbd6924eb616367c0bd0a760bdf483", - "sha256:1d551ff42962c7c333c3da5c70d5e617a87dee581fa2e2c5ae2d5137c8886779", - "sha256:1df755951f204e65bf9232a9cac5afe7d6b8e4c87ac084d3ecd738fdc7aa4174", - "sha256:204e08f807b1d83f5f0efea30c4e680afe26a43dec8ba614a45fa698a7ef0a19", - "sha256:240a7a3c2c54f77f1f66085a635bca72003d02f56a670e7db19aec531eda8f78", - "sha256:26eb2eebf150a33ebf088e67c1acf37eb2ac4133d9bfccbaa011ad2148c08b42", - "sha256:27a7f226b741b2ebf7e2d0779d2c9b17f446d1b839d59886c1619e62cc2ae472", - "sha256:2d970aa26854f535ffb94ea098aa8b43de020d9a14682e4a15dcdaeac7801b27", - "sha256:2ee960904dde12a7fa48e1591a5b3eeae054bdce57bacf9fd26685a98138f5bf", - "sha256:335e2f355a0c544a88854e2c053aff8a3f398b84a263a96fa19d063ca1fe513a", - "sha256:387662bee8e4c0b52cc0f61eaaca0ca583f5b227103f685b76083a3590a71a3e", - "sha256:40cbf712769242c2ba237745285ef789114d7fcfe8865fc4817d87f20015e99a", - "sha256:4499d4bc5aa9c7b645018d8b0db4bebd663d427aabcd7bee7777046cb1bcbca7", - "sha256:498e7be0b14385980efa681444ba481349c131fc5ec88003819f5d929646947c", - "sha256:4a10e59cca462208b489478340b52a96d64e8b8b6f1ac097f3e8cb211d3f66c0", - "sha256:4ee443abcd241a5befb05629013fbf2eac637faa94aaa3056351aded8a31c1bc", - "sha256:51d9595629998d8b519126c5a610f15deb0327cd6325ed10796b47d1d292e70b", - "sha256:520c0c83ea79d14b0679ba43e19c64ca31d30926b26ad2ca7db37cbd89c167e2", - "sha256:5b2d6da553980c590487f2e7fd3ec9c1ad8805ff2ec77977b92faa7e3ca14e1f", - "sha256:6119f62c462d119c63227b9534210f0f13506a888151b9bf586f71e7edf5088b", - "sha256:6aec8a4ed3808b7dfc1276fe51e3e24bec0eeaf610d395bcd42934647cf902a3", - "sha256:71cc6db1d66da3bc3730d9937bddc320f7b1f1dfdff6342bcb5741515fe4110b", - "sha256:784aa52965916fec5afa1a28eeee6f0073bb43a2a1d7fedf963393898843077a", - "sha256:821dba464d84ebbcffd9d420302404db2fa7a40c7ff4c4c4c93726f72bfa2769", - "sha256:868892ad9e00651a38dace3e4924bae82fc4fd4df2c65d37b74381570ee8deb1", - "sha256:882b809b42b5464bee55288f4e60837297f9618e53e69ae3eea6d61b05ce48fa", - "sha256:8c4634b3589efa156a8d5860c0a2547315bd5c9e52d14c960d716fe86e0927be", - "sha256:8f0da5861ee276ca68493b217daef358960e8527cc63c7cb292ca1c9c54939af", - "sha256:962d1a3067129152cee3e172213486cb218a6bad703836991f46f216caefcf00", - "sha256:99b3bde646720bbfb77f263f5ba3e1a0de50632d43c38d405a0ef9c7e94373cd", - "sha256:9af7e138baa9b2895cf1f3eb718ac96fc5ae2f8e31fca405e21e0e5cd1643c52", - "sha256:9ed05197c5ab071e91bcef28901e97ca168c4ae94510cb67a14cb4931b94255a", - "sha256:9fc02a6e517c34dcf885ff3b57260b646551083903e3d2c780b4971ce7d4ab7c", - "sha256:a4f6cae381f21fee1ef0a5cbbbb146680164311157ae618edf3061742d844383", - "sha256:aa4018f2d8662ac4d9830445d3d253a11b3e096e8afe20865547137aa1160e93", - "sha256:b519f2ecde9a579cad2f4a7057d5bb4e040ad17caab8b5e691ed7a13b9db0be9", - "sha256:b8e95d921cc2a1521d4750eedefec9f16031457920a6677edebe9d1b2ad6ae60", - "sha256:bb87158dbbb9e5a79effe78d54837599caa16df52d8d35366e06a91723b587ae", - "sha256:bfa4b2b7d21c5634b62e5f03462243bd705adc1a21806b5356b8ce06d902e160", - "sha256:c683be38a9bf4024c223929b4cd2f0a0858c94e9dc8b36d7eaa5a48ce9323a6f", - "sha256:cb63055739808144b541986291679d643bae58755d0eb082157c4d4c04443905", - "sha256:d0f0806de1161c7f248e4c183633ee7a58dfe45c2b77ddf0136e2e7ad0650b1b", - "sha256:db030140d0da2368319e2f23655df3baec278c7e0078ecbe051eaf609a69382c", - "sha256:de156c18b0c638aaee3be6ad650c8ba7dec94ed4bac26403aec3dce95ffe9407", - "sha256:df85096fcac7cea8aa5bd84b7a39c4cdbf556b93669bb4772eb96aacd3222a4e", - "sha256:e312ddc2d8bec1a23306a661ad52734f984c9aad5d8f126ebb222a778d95407d", - "sha256:eeed386971bb8afc3ec45593df6a1154d680d87be1209ef8e782e44f85f47e64", - "sha256:ef3e8aca2261f7f07436d4e2111556c1fb9bf1f9cfcdf35262743ccdee1b6ce9", - "sha256:f14a6e4f700dfd30ff8f0e6695f944affc16ae5a1e738666b3fae4e44b65637e", - "sha256:f1c684c0d9226d04cadafced620a46ab38c346d0780eaac7448da96bf12066a3", - "sha256:f381ae3ad6a5eb27aad8d810438937d8228977067c54e0bd456fce7e11fdbf3d", - "sha256:f6263b85261b62471cb97b7505df72d72b8b62e5e22d8184924871a6155b4dbf", - "sha256:f965707da2b48a33128615bcfebedd215a3a30e346447e885bb3da37a143177a" + "sha256:081336d8258f1a56542aa8a7a5dec99a2b38d902e19fbdd744594783301b0210", + "sha256:1748893efd05cf4a59a175d7fa1e4fbb652f4d84ccaa2109f7869a2be48ed25e", + "sha256:17a32b3da4fc0798cdcec0a9c974ac2a1e98298f151517bf9148294a3b1a5742", + "sha256:18976684a931ca4bcba65c78afa778683aefaae310f353e198b1823bf09775a0", + "sha256:1b93ae8ffd18e9af9a965ebca5fa521e89066267de7abdde20721edc04e42721", + "sha256:1fbb9554466d560472f07d906bfc8dcaf52f365c2a407015185993e30372a886", + "sha256:24c4ead4a03037beaeb8ef2c90d13d70101e35c9fae057337ed1a9144ef10b53", + "sha256:2a8a758701f3ac07ed85f5a4284c6a9ddefcab7913a8e552497f919349e72438", + "sha256:2dd01257e4feff986d256fa0bac9f56de59dc735eceeeb83de1c126e2e91f653", + "sha256:2e00de389729ca8d8d1a63c2038703078a887ff738dc31be640b7da9c26d0d4f", + "sha256:2fb4cf74bfe1e707cf10bc9dd38a1ebaa145179453d150febb121c7e9cd749bf", + "sha256:2fd1671c52f96e79a2302c8b1c1f78b8a561664b8b3d6946f20d8f1cc6b4225a", + "sha256:321b18f42a70813545e416ddcb8bf20defa407a8114906711c9710a69596ceda", + "sha256:3456df087ea61a0972a5bc165aed132ed6ddcc63f5749e572f9fff84540bdbad", + "sha256:4041538f55aad5b3ae7e25ab314d7995d689e968bfc8aa169d939a3160b1e4c6", + "sha256:559ce714fe212aaf4abbe1493c5bb8920def00cc77ce0d45266f4fd9d8b3166f", + "sha256:5a907a4f1ffba86501b2cdb8682346249ea032b922fc69a92f082ba045cca548", + "sha256:5ce6bbd4936977ec1114f2903eb4342781960d521b0d82f73afedb9335251f6f", + "sha256:6170873b1e5b6580ebb99e87fb6e4ea4c48785b910bd7af838cc6e44b2bccb04", + "sha256:6192184b1f99372ff1d9594bd4b12264e3ff26440daba7eb043726785200ff77", + "sha256:6807b7a3f3e6e594566100bd7fe04a2c42ce6d5792652677f1aaf5aa5adaef3d", + "sha256:687f576d7ff6ce483bc9a196d1ceac45144e8733b953620a026daed8e450bc38", + "sha256:74025fdd6d1cb7ba4b5d087995339e9a09f0c16cf15dfe56368b23e41ffeaf7a", + "sha256:7a5263a0f2ddb7b1cfb2349e392cfc4f318722e0f48f886393e06946875d40f3", + "sha256:7a6fe752205caae534f29fba907e2f59ff79aa42c6205ce9a467e9406cbac68c", + "sha256:7c1cde49631732356cb916ee1710507967f19913565ed5f9991e6c9cb37e3887", + "sha256:811abb9c4fb6679e0058dfa123fb065d97b158b71959c0e048e7972bbb82ba0f", + "sha256:857c5351e9dc33a019700e171163f94fcc7e3ae0f6d2b026b10fda1e3c008ef1", + "sha256:87cf439178f3eb45c1a889b2e4a17cbb4c450230d92c18d9c57e11271e239c55", + "sha256:9970d384fb0c084b00945ef57d98d57a8d32be106d8f0bd31387f7cbfe411b5b", + "sha256:9ee35234f1da8fba7ddbc544856ff588243f1128ea778d7a1da3039be829a134", + "sha256:addc9b23d6ff729d9f83d4a2846292d4c84f5eb2ec38f08489a6a0d66ac2b91e", + "sha256:b22b1299b666eebd5752ba7719da536075eae3053abcf2898b65f763c314d9da", + "sha256:b8f7a5094adb49e85db13ea3df5d99a976c2bdfd83b0ba26af20ebb742ac6786", + "sha256:b96981f3a31b85074b73d97c8234a5ed9053d65a36b18f4a9c45a2120a5b7a0a", + "sha256:bbf0ed772d2ae7e8e5d7281fcc00123923ab130b94f7a843eee9af405918f924", + "sha256:bd2a17b0193fbe4793c215d63ce1e01ae00a8183d81d7c04e77e1dfafc4b2b8a", + "sha256:c771b19dce2bfe06899247168c077d7ab4e273f6655d8174834f9a6034415096", + "sha256:d941749bd8dc3f8be58fe37183143412a27bec3df8482d5abd6b4ec3f1ac2924", + "sha256:dba6e32c87b4af29b5f475fb2f470f7ee3140bfc128644f17c6c59ddeb670680", + "sha256:dd1e68c232fe01dd5312a8dbe52c50ecd2b5991d517d7f7446af4ba6334ba872", + "sha256:e5614cf0960456d21d8a0f4902e3e5e3bcacc4e400bf22f196e5dd8aabb978b7", + "sha256:e5c519a0d4ba1ab44a004fa144089738c59278233e2010b2cf4527dc667ff297", + "sha256:e68dc4474f30cad11a965f0eb5d37720a032b4720afa0ec19dbcea2de73b5aae", + "sha256:e70d867c120d9849093b0ac24d861e378bc88af2552e743d83b9f642d2caa7c2", + "sha256:e87cabac7969bdde309575edc2456357667a1b28262b2c1f12580ef48315b19d", + "sha256:eae27f9b16238e2aaee84c77b5923c6924d6dccb0bdd18435bf42acc8473ae1a", + "sha256:ec0e401e9a43d927d216d5169b03c61163fb52b665c5af2fed851357b15aef88", + "sha256:ed30499340228d733ff69fcf4a66590ed7921f94eb5a2bf692258b1280b9dac7", + "sha256:f10ef47460ce3c6fd400f05fe757b90df63486c9b84d1ecad42dcc5f80c8ac14", + "sha256:f3d916606dcf5610d4367918245b3d9d8cd0d2ec0b7043d1bbb8c50fe9815c3a", + "sha256:f610384dee4b1ca705e8da66c5b5fe89a2de3d165c5282c3d1ddf40cb18924e4", + "sha256:fb4df80868b3e397d5fbccc004c789d2668b622b51a9d2387b4c89c80d31e2c5", + "sha256:fc01bc1079279ec342f0f1b6a107b3f5dc3169c33369cf96ada6e2e171f74e86" ], "markers": "python_version >= '3.7'", - "version": "==1.59.0" + "version": "==1.60.0" }, "gunicorn": { "hashes": [ @@ -614,63 +688,64 @@ }, "httpcore": { "hashes": [ - "sha256:13b5e5cd1dca1a6636a6aaea212b19f4f85cd88c366a2b82304181b769aab3c9", - "sha256:adc5398ee0a476567bf87467063ee63584a8bce86078bf748e48754f60202ced" + "sha256:096cc05bca73b8e459a1fc3dcf585148f63e534eae4339559c9b8a8d6399acc7", + "sha256:9fc092e4799b26174648e54b74ed5f683132a464e95643b226e00c2ed2fa6535" ], "markers": "python_version >= '3.8'", - "version": "==0.18.0" + "version": "==1.0.2" }, "httptools": { "hashes": [ - "sha256:03bfd2ae8a2d532952ac54445a2fb2504c804135ed28b53fefaf03d3a93eb1fd", - "sha256:0781fedc610293a2716bc7fa142d4c85e6776bc59d617a807ff91246a95dea35", - "sha256:0d0b0571806a5168013b8c3d180d9f9d6997365a4212cb18ea20df18b938aa0b", - "sha256:0fb4a608c631f7dcbdf986f40af7a030521a10ba6bc3d36b28c1dc9e9035a3c0", - "sha256:22c01fcd53648162730a71c42842f73b50f989daae36534c818b3f5050b54589", - "sha256:23b09537086a5a611fad5696fc8963d67c7e7f98cb329d38ee114d588b0b74cd", - "sha256:259920bbae18740a40236807915def554132ad70af5067e562f4660b62c59b90", - "sha256:26326e0a8fe56829f3af483200d914a7cd16d8d398d14e36888b56de30bec81a", - "sha256:274bf20eeb41b0956e34f6a81f84d26ed57c84dd9253f13dcb7174b27ccd8aaf", - "sha256:33eb1d4e609c835966e969a31b1dedf5ba16b38cab356c2ce4f3e33ffa94cad3", - "sha256:35a541579bed0270d1ac10245a3e71e5beeb1903b5fbbc8d8b4d4e728d48ff1d", - "sha256:38f3cafedd6aa20ae05f81f2e616ea6f92116c8a0f8dcb79dc798df3356836e2", - "sha256:3f96d2a351b5625a9fd9133c95744e8ca06f7a4f8f0b8231e4bbaae2c485046a", - "sha256:463c3bc5ef64b9cf091be9ac0e0556199503f6e80456b790a917774a616aff6e", - "sha256:47043a6e0ea753f006a9d0dd076a8f8c99bc0ecae86a0888448eb3076c43d717", - "sha256:4e748fc0d5c4a629988ef50ac1aef99dfb5e8996583a73a717fc2cac4ab89932", - "sha256:5dcc14c090ab57b35908d4a4585ec5c0715439df07be2913405991dbb37e049d", - "sha256:65d802e7b2538a9756df5acc062300c160907b02e15ed15ba035b02bce43e89c", - "sha256:6bdc6675ec6cb79d27e0575750ac6e2b47032742e24eed011b8db73f2da9ed40", - "sha256:6e22896b42b95b3237eccc42278cd72c0df6f23247d886b7ded3163452481e38", - "sha256:721e503245d591527cddd0f6fd771d156c509e831caa7a57929b55ac91ee2b51", - "sha256:72205730bf1be875003692ca54a4a7c35fac77b4746008966061d9d41a61b0f5", - "sha256:72ec7c70bd9f95ef1083d14a755f321d181f046ca685b6358676737a5fecd26a", - "sha256:73e9d66a5a28b2d5d9fbd9e197a31edd02be310186db423b28e6052472dc8201", - "sha256:818325afee467d483bfab1647a72054246d29f9053fd17cc4b86cda09cc60339", - "sha256:82c723ed5982f8ead00f8e7605c53e55ffe47c47465d878305ebe0082b6a1755", - "sha256:82f228b88b0e8c6099a9c4757ce9fdbb8b45548074f8d0b1f0fc071e35655d1c", - "sha256:93f89975465133619aea8b1952bc6fa0e6bad22a447c6d982fc338fbb4c89649", - "sha256:9fc6e409ad38cbd68b177cd5158fc4042c796b82ca88d99ec78f07bed6c6b796", - "sha256:b0a816bb425c116a160fbc6f34cece097fd22ece15059d68932af686520966bd", - "sha256:b703d15dbe082cc23266bf5d9448e764c7cb3fcfe7cb358d79d3fd8248673ef9", - "sha256:cf8169e839a0d740f3d3c9c4fa630ac1a5aaf81641a34575ca6773ed7ce041a1", - "sha256:dea66d94e5a3f68c5e9d86e0894653b87d952e624845e0b0e3ad1c733c6cc75d", - "sha256:e41ccac9e77cd045f3e4ee0fc62cbf3d54d7d4b375431eb855561f26ee7a9ec4", - "sha256:f959e4770b3fc8ee4dbc3578fd910fab9003e093f20ac8c621452c4d62e517cb" + "sha256:00d5d4b68a717765b1fabfd9ca755bd12bf44105eeb806c03d1962acd9b8e563", + "sha256:0ac5a0ae3d9f4fe004318d64b8a854edd85ab76cffbf7ef5e32920faef62f142", + "sha256:0cf2372e98406efb42e93bfe10f2948e467edfd792b015f1b4ecd897903d3e8d", + "sha256:1ed99a373e327f0107cb513b61820102ee4f3675656a37a50083eda05dc9541b", + "sha256:3c3b214ce057c54675b00108ac42bacf2ab8f85c58e3f324a4e963bbc46424f4", + "sha256:3e802e0b2378ade99cd666b5bffb8b2a7cc8f3d28988685dc300469ea8dd86cb", + "sha256:3f30d3ce413088a98b9db71c60a6ada2001a08945cb42dd65a9a9fe228627658", + "sha256:405784577ba6540fa7d6ff49e37daf104e04f4b4ff2d1ac0469eaa6a20fde084", + "sha256:48ed8129cd9a0d62cf4d1575fcf90fb37e3ff7d5654d3a5814eb3d55f36478c2", + "sha256:4bd3e488b447046e386a30f07af05f9b38d3d368d1f7b4d8f7e10af85393db97", + "sha256:4f0f8271c0a4db459f9dc807acd0eadd4839934a4b9b892f6f160e94da309837", + "sha256:5cceac09f164bcba55c0500a18fe3c47df29b62353198e4f37bbcc5d591172c3", + "sha256:639dc4f381a870c9ec860ce5c45921db50205a37cc3334e756269736ff0aac58", + "sha256:678fcbae74477a17d103b7cae78b74800d795d702083867ce160fc202104d0da", + "sha256:6a4f5ccead6d18ec072ac0b84420e95d27c1cdf5c9f1bc8fbd8daf86bd94f43d", + "sha256:6f58e335a1402fb5a650e271e8c2d03cfa7cea46ae124649346d17bd30d59c90", + "sha256:75c8022dca7935cba14741a42744eee13ba05db00b27a4b940f0d646bd4d56d0", + "sha256:7a7ea483c1a4485c71cb5f38be9db078f8b0e8b4c4dc0210f531cdd2ddac1ef1", + "sha256:7d9ceb2c957320def533671fc9c715a80c47025139c8d1f3797477decbc6edd2", + "sha256:7ebaec1bf683e4bf5e9fbb49b8cc36da482033596a415b3e4ebab5a4c0d7ec5e", + "sha256:85ed077c995e942b6f1b07583e4eb0a8d324d418954fc6af913d36db7c05a5a0", + "sha256:8ae5b97f690badd2ca27cbf668494ee1b6d34cf1c464271ef7bfa9ca6b83ffaf", + "sha256:8b0bb634338334385351a1600a73e558ce619af390c2b38386206ac6a27fecfc", + "sha256:8e216a038d2d52ea13fdd9b9c9c7459fb80d78302b257828285eca1c773b99b3", + "sha256:93ad80d7176aa5788902f207a4e79885f0576134695dfb0fefc15b7a4648d503", + "sha256:95658c342529bba4e1d3d2b1a874db16c7cca435e8827422154c9da76ac4e13a", + "sha256:95fb92dd3649f9cb139e9c56604cc2d7c7bf0fc2e7c8d7fbd58f96e35eddd2a3", + "sha256:97662ce7fb196c785344d00d638fc9ad69e18ee4bfb4000b35a52efe5adcc949", + "sha256:9bb68d3a085c2174c2477eb3ffe84ae9fb4fde8792edb7bcd09a1d8467e30a84", + "sha256:b512aa728bc02354e5ac086ce76c3ce635b62f5fbc32ab7082b5e582d27867bb", + "sha256:c6e26c30455600b95d94b1b836085138e82f177351454ee841c148f93a9bad5a", + "sha256:d2f6c3c4cb1948d912538217838f6e9960bc4a521d7f9b323b3da579cd14532f", + "sha256:dcbab042cc3ef272adc11220517278519adf8f53fd3056d0e68f0a6f891ba94e", + "sha256:e0b281cf5a125c35f7f6722b65d8542d2e57331be573e9e88bc8b0115c4a7a81", + "sha256:e57997ac7fb7ee43140cc03664de5f268813a481dff6245e0075925adc6aa185", + "sha256:fe467eb086d80217b7584e61313ebadc8d187a4d95bb62031b7bab4b205c3ba3" ], "index": "pypi", - "version": "==0.6.0" + "version": "==0.6.1" }, "httpx": { "extras": [ "http2" ], "hashes": [ - "sha256:181ea7f8ba3a82578be86ef4171554dd45fec26a02556a744db029a0a27b7100", - "sha256:47ecda285389cb32bb2691cc6e069e3ab0205956f681c5b2ad2325719751d875" + "sha256:451b55c30d5185ea6b23c2c793abf9bb237d2a7dfb901ced6ff69ad37ec1dfaf", + "sha256:8915f5a3627c4d47b73e8202457cb28f1266982d1159bd5779d86a80c0eab1cd" ], "markers": "python_version >= '3.8'", - "version": "==0.25.0" + "version": "==0.26.0" }, "hyperframe": { "hashes": [ @@ -682,27 +757,27 @@ }, "idna": { "hashes": [ - "sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4", - "sha256:90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2" + "sha256:9ecdbbd083b06798ae1e86adcbfe8ab1479cf864e4ee30fe4e46a003d12491ca", + "sha256:c05567e9c24a6b9faaa835c4821bad0590fbb9d5779e7caa6e1cc4978e7eb24f" ], "markers": "python_version >= '3.5'", - "version": "==3.4" + "version": "==3.6" }, "importlib-metadata": { "hashes": [ - "sha256:3ebb78df84a805d7698245025b975d9d67053cd94c79245ba4b3eb694abe68bb", - "sha256:dbace7892d8c0c4ac1ad096662232f831d4e64f4c4545bd53016a3e9d4654743" + "sha256:1231cf92d825c9e03cfc4da076a16de6422c863558229ea0b22b675657463443", + "sha256:f0afba6205ad8f8947c7d338b5342d5db2afbfd82f9cbef7879a9539cc12eb9b" ], "markers": "python_version >= '3.8'", - "version": "==6.8.0" + "version": "==6.11.0" }, "importlib-resources": { "hashes": [ - "sha256:9d48dcccc213325e810fd723e7fbb45ccb39f6cf5c31f00cf2b965f5f10f3cb9", - "sha256:aa50258bbfa56d4e33fbd8aa3ef48ded10d1735f11532b8df95388cc6bdb7e83" + "sha256:3893a00122eafde6894c59914446a512f728a0c1a45f9bb9b63721b6bacf0b4a", + "sha256:e8bf90d8213b486f428c9c39714b920041cb02c184686a3dee24905aaa8105d6" ], "markers": "python_version < '3.9'", - "version": "==6.1.0" + "version": "==6.1.1" }, "jmespath": { "hashes": [ @@ -714,19 +789,129 @@ }, "jsonschema": { "hashes": [ - "sha256:cd5f1f9ed9444e554b38ba003af06c0a8c2868131e56bfbef0550fb450c0330e", - "sha256:ec84cc37cfa703ef7cd4928db24f9cb31428a5d0fa77747b8b51a847458e0bbf" + "sha256:4f614fd46d8d61258610998997743ec5492a648b33cf478c1ddc23ed4598a5fa", + "sha256:ed6231f0429ecf966f5bc8dfef245998220549cbbcf140f913b7464c52c3b6b3" ], "index": "pypi", - "version": "==4.19.1" + "version": "==4.20.0" }, "jsonschema-specifications": { "hashes": [ - "sha256:05adf340b659828a004220a9613be00fa3f223f2b82002e273dee62fd50524b1", - "sha256:c91a50404e88a1f6ba40636778e2ee08f6e24c5613fe4c53ac24578a5a7f72bb" + "sha256:9472fc4fea474cd74bea4a2b190daeccb5a9e4db2ea80efcf7a1b582fc9a81b8", + "sha256:e74ba7c0a65e8cb49dc26837d6cfe576557084a8b423ed16a420984228104f93" ], "markers": "python_version >= '3.8'", - "version": "==2023.7.1" + "version": "==2023.11.2" + }, + "kiwisolver": { + "hashes": [ + "sha256:00bd361b903dc4bbf4eb165f24d1acbee754fce22ded24c3d56eec268658a5cf", + "sha256:040c1aebeda72197ef477a906782b5ab0d387642e93bda547336b8957c61022e", + "sha256:05703cf211d585109fcd72207a31bb170a0f22144d68298dc5e61b3c946518af", + "sha256:06f54715b7737c2fecdbf140d1afb11a33d59508a47bf11bb38ecf21dc9ab79f", + "sha256:0dc9db8e79f0036e8173c466d21ef18e1befc02de8bf8aa8dc0813a6dc8a7046", + "sha256:0f114aa76dc1b8f636d077979c0ac22e7cd8f3493abbab152f20eb8d3cda71f3", + "sha256:11863aa14a51fd6ec28688d76f1735f8f69ab1fabf388851a595d0721af042f5", + "sha256:11c7de8f692fc99816e8ac50d1d1aef4f75126eefc33ac79aac02c099fd3db71", + "sha256:11d011a7574eb3b82bcc9c1a1d35c1d7075677fdd15de527d91b46bd35e935ee", + "sha256:146d14bebb7f1dc4d5fbf74f8a6cb15ac42baadee8912eb84ac0b3b2a3dc6ac3", + "sha256:15568384086b6df3c65353820a4473575dbad192e35010f622c6ce3eebd57af9", + "sha256:19df6e621f6d8b4b9c4d45f40a66839294ff2bb235e64d2178f7522d9170ac5b", + "sha256:1b04139c4236a0f3aff534479b58f6f849a8b351e1314826c2d230849ed48985", + "sha256:210ef2c3a1f03272649aff1ef992df2e724748918c4bc2d5a90352849eb40bea", + "sha256:2270953c0d8cdab5d422bee7d2007f043473f9d2999631c86a223c9db56cbd16", + "sha256:2400873bccc260b6ae184b2b8a4fec0e4082d30648eadb7c3d9a13405d861e89", + "sha256:2a40773c71d7ccdd3798f6489aaac9eee213d566850a9533f8d26332d626b82c", + "sha256:2c5674c4e74d939b9d91dda0fae10597ac7521768fec9e399c70a1f27e2ea2d9", + "sha256:3195782b26fc03aa9c6913d5bad5aeb864bdc372924c093b0f1cebad603dd712", + "sha256:31a82d498054cac9f6d0b53d02bb85811185bcb477d4b60144f915f3b3126342", + "sha256:32d5cf40c4f7c7b3ca500f8985eb3fb3a7dfc023215e876f207956b5ea26632a", + "sha256:346f5343b9e3f00b8db8ba359350eb124b98c99efd0b408728ac6ebf38173958", + "sha256:378a214a1e3bbf5ac4a8708304318b4f890da88c9e6a07699c4ae7174c09a68d", + "sha256:39b42c68602539407884cf70d6a480a469b93b81b7701378ba5e2328660c847a", + "sha256:3a2b053a0ab7a3960c98725cfb0bf5b48ba82f64ec95fe06f1d06c99b552e130", + "sha256:3aba7311af82e335dd1e36ffff68aaca609ca6290c2cb6d821a39aa075d8e3ff", + "sha256:3cd32d6c13807e5c66a7cbb79f90b553642f296ae4518a60d8d76243b0ad2898", + "sha256:3edd2fa14e68c9be82c5b16689e8d63d89fe927e56debd6e1dbce7a26a17f81b", + "sha256:4c380469bd3f970ef677bf2bcba2b6b0b4d5c75e7a020fb863ef75084efad66f", + "sha256:4e66e81a5779b65ac21764c295087de82235597a2293d18d943f8e9e32746265", + "sha256:53abb58632235cd154176ced1ae8f0d29a6657aa1aa9decf50b899b755bc2b93", + "sha256:5794cf59533bc3f1b1c821f7206a3617999db9fbefc345360aafe2e067514929", + "sha256:59415f46a37f7f2efeec758353dd2eae1b07640d8ca0f0c42548ec4125492635", + "sha256:59ec7b7c7e1a61061850d53aaf8e93db63dce0c936db1fda2658b70e4a1be709", + "sha256:59edc41b24031bc25108e210c0def6f6c2191210492a972d585a06ff246bb79b", + "sha256:5a580c91d686376f0f7c295357595c5a026e6cbc3d77b7c36e290201e7c11ecb", + "sha256:5b94529f9b2591b7af5f3e0e730a4e0a41ea174af35a4fd067775f9bdfeee01a", + "sha256:5c7b3b3a728dc6faf3fc372ef24f21d1e3cee2ac3e9596691d746e5a536de920", + "sha256:5c90ae8c8d32e472be041e76f9d2f2dbff4d0b0be8bd4041770eddb18cf49a4e", + "sha256:5e7139af55d1688f8b960ee9ad5adafc4ac17c1c473fe07133ac092310d76544", + "sha256:5ff5cf3571589b6d13bfbfd6bcd7a3f659e42f96b5fd1c4830c4cf21d4f5ef45", + "sha256:620ced262a86244e2be10a676b646f29c34537d0d9cc8eb26c08f53d98013390", + "sha256:6512cb89e334e4700febbffaaa52761b65b4f5a3cf33f960213d5656cea36a77", + "sha256:6c08e1312a9cf1074d17b17728d3dfce2a5125b2d791527f33ffbe805200a355", + "sha256:6c3bd3cde54cafb87d74d8db50b909705c62b17c2099b8f2e25b461882e544ff", + "sha256:6ef7afcd2d281494c0a9101d5c571970708ad911d028137cd558f02b851c08b4", + "sha256:7269d9e5f1084a653d575c7ec012ff57f0c042258bf5db0954bf551c158466e7", + "sha256:72d40b33e834371fd330fb1472ca19d9b8327acb79a5821d4008391db8e29f20", + "sha256:74d1b44c6cfc897df648cc9fdaa09bc3e7679926e6f96df05775d4fb3946571c", + "sha256:74db36e14a7d1ce0986fa104f7d5637aea5c82ca6326ed0ec5694280942d1162", + "sha256:763773d53f07244148ccac5b084da5adb90bfaee39c197554f01b286cf869228", + "sha256:76c6a5964640638cdeaa0c359382e5703e9293030fe730018ca06bc2010c4437", + "sha256:76d9289ed3f7501012e05abb8358bbb129149dbd173f1f57a1bf1c22d19ab7cc", + "sha256:7931d8f1f67c4be9ba1dd9c451fb0eeca1a25b89e4d3f89e828fe12a519b782a", + "sha256:7b8b454bac16428b22560d0a1cf0a09875339cab69df61d7805bf48919415901", + "sha256:7e5bab140c309cb3a6ce373a9e71eb7e4873c70c2dda01df6820474f9889d6d4", + "sha256:83d78376d0d4fd884e2c114d0621624b73d2aba4e2788182d286309ebdeed770", + "sha256:852542f9481f4a62dbb5dd99e8ab7aedfeb8fb6342349a181d4036877410f525", + "sha256:85267bd1aa8880a9c88a8cb71e18d3d64d2751a790e6ca6c27b8ccc724bcd5ad", + "sha256:88a2df29d4724b9237fc0c6eaf2a1adae0cdc0b3e9f4d8e7dc54b16812d2d81a", + "sha256:88b9f257ca61b838b6f8094a62418421f87ac2a1069f7e896c36a7d86b5d4c29", + "sha256:8ab3919a9997ab7ef2fbbed0cc99bb28d3c13e6d4b1ad36e97e482558a91be90", + "sha256:92dea1ffe3714fa8eb6a314d2b3c773208d865a0e0d35e713ec54eea08a66250", + "sha256:9407b6a5f0d675e8a827ad8742e1d6b49d9c1a1da5d952a67d50ef5f4170b18d", + "sha256:9408acf3270c4b6baad483865191e3e582b638b1654a007c62e3efe96f09a9a3", + "sha256:955e8513d07a283056b1396e9a57ceddbd272d9252c14f154d450d227606eb54", + "sha256:9db8ea4c388fdb0f780fe91346fd438657ea602d58348753d9fb265ce1bca67f", + "sha256:9eaa8b117dc8337728e834b9c6e2611f10c79e38f65157c4c38e9400286f5cb1", + "sha256:a51a263952b1429e429ff236d2f5a21c5125437861baeed77f5e1cc2d2c7c6da", + "sha256:a6aa6315319a052b4ee378aa171959c898a6183f15c1e541821c5c59beaa0238", + "sha256:aa12042de0171fad672b6c59df69106d20d5596e4f87b5e8f76df757a7c399aa", + "sha256:aaf7be1207676ac608a50cd08f102f6742dbfc70e8d60c4db1c6897f62f71523", + "sha256:b0157420efcb803e71d1b28e2c287518b8808b7cf1ab8af36718fd0a2c453eb0", + "sha256:b3f7e75f3015df442238cca659f8baa5f42ce2a8582727981cbfa15fee0ee205", + "sha256:b9098e0049e88c6a24ff64545cdfc50807818ba6c1b739cae221bbbcbc58aad3", + "sha256:ba55dce0a9b8ff59495ddd050a0225d58bd0983d09f87cfe2b6aec4f2c1234e4", + "sha256:bb86433b1cfe686da83ce32a9d3a8dd308e85c76b60896d58f082136f10bffac", + "sha256:bbea0db94288e29afcc4c28afbf3a7ccaf2d7e027489c449cf7e8f83c6346eb9", + "sha256:bbf1d63eef84b2e8c89011b7f2235b1e0bf7dacc11cac9431fc6468e99ac77fb", + "sha256:c7940c1dc63eb37a67721b10d703247552416f719c4188c54e04334321351ced", + "sha256:c9bf3325c47b11b2e51bca0824ea217c7cd84491d8ac4eefd1e409705ef092bd", + "sha256:cdc8a402aaee9a798b50d8b827d7ecf75edc5fb35ea0f91f213ff927c15f4ff0", + "sha256:ceec1a6bc6cab1d6ff5d06592a91a692f90ec7505d6463a88a52cc0eb58545da", + "sha256:cfe6ab8da05c01ba6fbea630377b5da2cd9bcbc6338510116b01c1bc939a2c18", + "sha256:d099e745a512f7e3bbe7249ca835f4d357c586d78d79ae8f1dcd4d8adeb9bda9", + "sha256:d0ef46024e6a3d79c01ff13801cb19d0cad7fd859b15037aec74315540acc276", + "sha256:d2e5a98f0ec99beb3c10e13b387f8db39106d53993f498b295f0c914328b1333", + "sha256:da4cfb373035def307905d05041c1d06d8936452fe89d464743ae7fb8371078b", + "sha256:da802a19d6e15dffe4b0c24b38b3af68e6c1a68e6e1d8f30148c83864f3881db", + "sha256:dced8146011d2bc2e883f9bd68618b8247387f4bbec46d7392b3c3b032640126", + "sha256:dfdd7c0b105af050eb3d64997809dc21da247cf44e63dc73ff0fd20b96be55a9", + "sha256:e368f200bbc2e4f905b8e71eb38b3c04333bddaa6a2464a6355487b02bb7fb09", + "sha256:e391b1f0a8a5a10ab3b9bb6afcfd74f2175f24f8975fb87ecae700d1503cdee0", + "sha256:e57e563a57fb22a142da34f38acc2fc1a5c864bc29ca1517a88abc963e60d6ec", + "sha256:e5d706eba36b4c4d5bc6c6377bb6568098765e990cfc21ee16d13963fab7b3e7", + "sha256:ec20916e7b4cbfb1f12380e46486ec4bcbaa91a9c448b97023fde0d5bbf9e4ff", + "sha256:f1d072c2eb0ad60d4c183f3fb44ac6f73fb7a8f16a2694a91f988275cbf352f9", + "sha256:f846c260f483d1fd217fe5ed7c173fb109efa6b1fc8381c8b7552c5781756192", + "sha256:f91de7223d4c7b793867797bacd1ee53bfe7359bd70d27b7b58a04efbb9436c8", + "sha256:faae4860798c31530dd184046a900e652c95513796ef51a12bc086710c2eec4d", + "sha256:fc579bf0f502e54926519451b920e875f433aceb4624a3646b3252b5caa9e0b6", + "sha256:fcc700eadbbccbf6bc1bcb9dbe0786b4b1cb91ca0dcda336eef5c2beed37b797", + "sha256:fd32ea360bcbb92d28933fc05ed09bffcb1704ba3fc7942e81db0fd4f81a7892", + "sha256:fdb7adb641a0d13bdcd4ef48e062363d8a9ad4a182ac7647ec88f695e719ae9f" + ], + "markers": "python_version >= '3.7'", + "version": "==1.4.5" }, "libcst": { "hashes": [ @@ -772,6 +957,59 @@ "markers": "python_version >= '3.8'", "version": "==3.0.0" }, + "matplotlib": { + "hashes": [ + "sha256:0037d066cca1f4bda626c507cddeb6f7da8283bc6a214da2db13ff2162933c52", + "sha256:0604880e4327114054199108b7390f987f4f40ee5ce728985836889e11a780ba", + "sha256:08372696b3bb45c563472a552a705bfa0942f0a8ffe084db8a4e8f9153fbdf9d", + "sha256:0c698b33f9a3f0b127a8e614c8fb4087563bb3caa9c9d95298722fa2400cdd3f", + "sha256:116ef0b43aa00ff69260b4cce39c571e4b8c6f893795b708303fa27d9b9d7548", + "sha256:1707b20b25e90538c2ce8d4409e30f0ef1df4017cc65ad0439633492a973635b", + "sha256:1e6abcde6fc52475f9d6a12b9f1792aee171ce7818ef6df5d61cb0b82816e6e8", + "sha256:24b8f28af3e766195c09b780b15aa9f6710192b415ae7866b9c03dee7ec86370", + "sha256:286332f8f45f8ffde2d2119b9fdd42153dccd5025fa9f451b4a3b5c086e26da5", + "sha256:32183d4be84189a4c52b4b8861434d427d9118db2cec32986f98ed6c02dcfbb6", + "sha256:3640f33632beb3993b698b1be9d1c262b742761d6101f3c27b87b2185d25c875", + "sha256:390920a3949906bc4b0216198d378f2a640c36c622e3584dd0c79a7c59ae9f50", + "sha256:3c557d9165320dff3c5f2bb99bfa0b6813d3e626423ff71c40d6bc23b83c3339", + "sha256:3fa193286712c3b6c3cfa5fe8a6bb563f8c52cc750006c782296e0807ce5e799", + "sha256:44856632ebce88abd8efdc0a0dceec600418dcac06b72ae77af0019d260aa243", + "sha256:55eec941a4743f0bd3e5b8ee180e36b7ea8e62f867bf2613937c9f01b9ac06a2", + "sha256:5661c8639aded7d1bbf781373a359011cb1dd09199dee49043e9e68dd16f07ba", + "sha256:568574756127791903604e315c11aef9f255151e4cfe20ec603a70f9dda8e259", + "sha256:5c9133f230945fe10652eb33e43642e933896194ef6a4f8d5e79bb722bdb2000", + "sha256:62e094d8da26294634da9e7f1856beee3978752b1b530c8e1763d2faed60cc10", + "sha256:632fc938c22117d4241411191cfb88ac264a4c0a9ac702244641ddf30f0d739c", + "sha256:798ff59022eeb276380ce9a73ba35d13c3d1499ab9b73d194fd07f1b0a41c304", + "sha256:7a7709796ac59fe8debde68272388be6ed449c8971362eb5b60d280eac8dadde", + "sha256:7a9981b2a2dd9da06eca4ab5855d09b54b8ce7377c3e0e3957767b83219d652d", + "sha256:7cd4fef8187d1dd0d9dcfdbaa06ac326d396fb8c71c647129f0bf56835d77026", + "sha256:7d479aac338195e2199a8cfc03c4f2f55914e6a120177edae79e0340a6406457", + "sha256:7dfe6821f1944cb35603ff22e21510941bbcce7ccf96095beffaac890d39ce77", + "sha256:81e1a7ac818000e8ac3ca696c3fdc501bc2d3adc89005e7b4e22ee5e9d51de98", + "sha256:83859ac26839660ecd164ee8311272074250b915ac300f9b2eccc84410f8953b", + "sha256:8e6227ca8492baeef873cdd8e169a318efb5c3a25ce94e69727e7f964995b0b1", + "sha256:ab16868714e5cc90ec8f7ff5d83d23bcd6559224d8e9cb5227c9f58748889fe8", + "sha256:b167f54cb4654b210c9624ec7b54e2b3b8de68c93a14668937e7e53df60770ec", + "sha256:b1d70bc1ea1bf110bec64f4578de3e14947909a8887df4c1fd44492eca487955", + "sha256:b71079239bd866bf56df023e5146de159cb0c7294e508830901f4d79e2d89385", + "sha256:be3493bbcb4d255cb71de1f9050ac71682fce21a56089eadbcc8e21784cb12ee", + "sha256:bf91a42f6274a64cb41189120b620c02e574535ff6671fa836cade7701b06fbd", + "sha256:c83f49e795a5de6c168876eea723f5b88355202f9603c55977f5356213aa8280", + "sha256:c90590d4b46458677d80bc3218f3f1ac11fc122baa9134e0cb5b3e8fc3714052", + "sha256:ce163be048613b9d1962273708cc97e09ca05d37312e670d166cf332b80bbaff", + "sha256:de7c07069687be64fd9d119da3122ba13a8d399eccd3f844815f0dc78a870b2c", + "sha256:e4dfee00aa4bd291e08bb9461831c26ce0da85ca9781bb8794f2025c6e925281", + "sha256:e680f49bb8052ba3b2698e370155d2b4afb49f9af1cc611a26579d5981e2852a", + "sha256:f59a70e2ec3212033ef6633ed07682da03f5249379722512a3a2a26a7d9a738e", + "sha256:f757e8b42841d6add0cb69b42497667f0d25a404dcd50bd923ec9904e38414c4", + "sha256:f8c725d1dd2901b2e7ec6cd64165e00da2978cc23d4143cb9ef745bec88e6b04", + "sha256:f8fc2df756105784e650605e024d36dc2d048d68e5c1b26df97ee25d1bd41f9f", + "sha256:ff539c4a17ecdf076ed808ee271ffae4a30dcb7e157b99ccae2c837262c07db6" + ], + "markers": "python_version >= '3.8'", + "version": "==3.7.4" + }, "mdurl": { "hashes": [ "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8", @@ -1006,6 +1244,66 @@ "markers": "python_version >= '3.7'", "version": "==23.2" }, + "pillow": { + "hashes": [ + "sha256:00f438bb841382b15d7deb9a05cc946ee0f2c352653c7aa659e75e592f6fa17d", + "sha256:0248f86b3ea061e67817c47ecbe82c23f9dd5d5226200eb9090b3873d3ca32de", + "sha256:04f6f6149f266a100374ca3cc368b67fb27c4af9f1cc8cb6306d849dcdf12616", + "sha256:062a1610e3bc258bff2328ec43f34244fcec972ee0717200cb1425214fe5b839", + "sha256:0a026c188be3b443916179f5d04548092e253beb0c3e2ee0a4e2cdad72f66099", + "sha256:0f7c276c05a9767e877a0b4c5050c8bee6a6d960d7f0c11ebda6b99746068c2a", + "sha256:1a8413794b4ad9719346cd9306118450b7b00d9a15846451549314a58ac42219", + "sha256:1ab05f3db77e98f93964697c8efc49c7954b08dd61cff526b7f2531a22410106", + "sha256:1c3ac5423c8c1da5928aa12c6e258921956757d976405e9467c5f39d1d577a4b", + "sha256:1c41d960babf951e01a49c9746f92c5a7e0d939d1652d7ba30f6b3090f27e412", + "sha256:1fafabe50a6977ac70dfe829b2d5735fd54e190ab55259ec8aea4aaea412fa0b", + "sha256:1fb29c07478e6c06a46b867e43b0bcdb241b44cc52be9bc25ce5944eed4648e7", + "sha256:24fadc71218ad2b8ffe437b54876c9382b4a29e030a05a9879f615091f42ffc2", + "sha256:2cdc65a46e74514ce742c2013cd4a2d12e8553e3a2563c64879f7c7e4d28bce7", + "sha256:2ef6721c97894a7aa77723740a09547197533146fba8355e86d6d9a4a1056b14", + "sha256:3b834f4b16173e5b92ab6566f0473bfb09f939ba14b23b8da1f54fa63e4b623f", + "sha256:3d929a19f5469b3f4df33a3df2983db070ebb2088a1e145e18facbc28cae5b27", + "sha256:41f67248d92a5e0a2076d3517d8d4b1e41a97e2df10eb8f93106c89107f38b57", + "sha256:47e5bf85b80abc03be7455c95b6d6e4896a62f6541c1f2ce77a7d2bb832af262", + "sha256:4d0152565c6aa6ebbfb1e5d8624140a440f2b99bf7afaafbdbf6430426497f28", + "sha256:50d08cd0a2ecd2a8657bd3d82c71efd5a58edb04d9308185d66c3a5a5bed9610", + "sha256:61f1a9d247317fa08a308daaa8ee7b3f760ab1809ca2da14ecc88ae4257d6172", + "sha256:6932a7652464746fcb484f7fc3618e6503d2066d853f68a4bd97193a3996e273", + "sha256:7a7e3daa202beb61821c06d2517428e8e7c1aab08943e92ec9e5755c2fc9ba5e", + "sha256:7dbaa3c7de82ef37e7708521be41db5565004258ca76945ad74a8e998c30af8d", + "sha256:7df5608bc38bd37ef585ae9c38c9cd46d7c81498f086915b0f97255ea60c2818", + "sha256:806abdd8249ba3953c33742506fe414880bad78ac25cc9a9b1c6ae97bedd573f", + "sha256:883f216eac8712b83a63f41b76ddfb7b2afab1b74abbb413c5df6680f071a6b9", + "sha256:912e3812a1dbbc834da2b32299b124b5ddcb664ed354916fd1ed6f193f0e2d01", + "sha256:937bdc5a7f5343d1c97dc98149a0be7eb9704e937fe3dc7140e229ae4fc572a7", + "sha256:9882a7451c680c12f232a422730f986a1fcd808da0fd428f08b671237237d651", + "sha256:9a92109192b360634a4489c0c756364c0c3a2992906752165ecb50544c251312", + "sha256:9d7bc666bd8c5a4225e7ac71f2f9d12466ec555e89092728ea0f5c0c2422ea80", + "sha256:a5f63b5a68daedc54c7c3464508d8c12075e56dcfbd42f8c1bf40169061ae666", + "sha256:a646e48de237d860c36e0db37ecaecaa3619e6f3e9d5319e527ccbc8151df061", + "sha256:a89b8312d51715b510a4fe9fc13686283f376cfd5abca8cd1c65e4c76e21081b", + "sha256:a92386125e9ee90381c3369f57a2a50fa9e6aa8b1cf1d9c4b200d41a7dd8e992", + "sha256:ae88931f93214777c7a3aa0a8f92a683f83ecde27f65a45f95f22d289a69e593", + "sha256:afc8eef765d948543a4775f00b7b8c079b3321d6b675dde0d02afa2ee23000b4", + "sha256:b0eb01ca85b2361b09480784a7931fc648ed8b7836f01fb9241141b968feb1db", + "sha256:b1c25762197144e211efb5f4e8ad656f36c8d214d390585d1d21281f46d556ba", + "sha256:b4005fee46ed9be0b8fb42be0c20e79411533d1fd58edabebc0dd24626882cfd", + "sha256:b920e4d028f6442bea9a75b7491c063f0b9a3972520731ed26c83e254302eb1e", + "sha256:baada14941c83079bf84c037e2d8b7506ce201e92e3d2fa0d1303507a8538212", + "sha256:bb40c011447712d2e19cc261c82655f75f32cb724788df315ed992a4d65696bb", + "sha256:c0949b55eb607898e28eaccb525ab104b2d86542a85c74baf3a6dc24002edec2", + "sha256:c9aeea7b63edb7884b031a35305629a7593272b54f429a9869a4f63a1bf04c34", + "sha256:cfe96560c6ce2f4c07d6647af2d0f3c54cc33289894ebd88cfbb3bcd5391e256", + "sha256:d27b5997bdd2eb9fb199982bb7eb6164db0426904020dc38c10203187ae2ff2f", + "sha256:d921bc90b1defa55c9917ca6b6b71430e4286fc9e44c55ead78ca1a9f9eba5f2", + "sha256:e6bf8de6c36ed96c86ea3b6e1d5273c53f46ef518a062464cd7ef5dd2cf92e38", + "sha256:eaed6977fa73408b7b8a24e8b14e59e1668cfc0f4c40193ea7ced8e210adf996", + "sha256:fa1d323703cfdac2036af05191b969b910d8f115cf53093125e4058f62012c9a", + "sha256:fe1e26e1ffc38be097f0ba1d0d07fcade2bcfd1d023cda5b29935ae8052bd793" + ], + "markers": "python_version >= '3.8'", + "version": "==10.1.0" + }, "pkgutil-resolve-name": { "hashes": [ "sha256:357d6c9e6a755653cfd78893817c0853af365dd51ec97f3d358a819373bbd174", @@ -1016,22 +1314,20 @@ }, "protobuf": { "hashes": [ - "sha256:02212557a76cd99574775a81fefeba8738d0f668d6abd0c6b1d3adcc75503dbe", - "sha256:1badab72aa8a3a2b812eacfede5020472e16c6b2212d737cefd685884c191085", - "sha256:2fa3886dfaae6b4c5ed2730d3bf47c7a38a72b3a1f0acb4d4caf68e6874b947b", - "sha256:5a70731910cd9104762161719c3d883c960151eea077134458503723b60e3667", - "sha256:6b7d2e1c753715dcfe9d284a25a52d67818dd43c4932574307daf836f0071e37", - "sha256:80797ce7424f8c8d2f2547e2d42bfbb6c08230ce5832d6c099a37335c9c90a92", - "sha256:8e61a27f362369c2f33248a0ff6896c20dcd47b5d48239cb9720134bef6082e4", - "sha256:9fee5e8aa20ef1b84123bb9232b3f4a5114d9897ed89b4b8142d81924e05d79b", - "sha256:b493cb590960ff863743b9ff1452c413c2ee12b782f48beca77c8da3e2ffe9d9", - "sha256:b77272f3e28bb416e2071186cb39efd4abbf696d682cbb5dc731308ad37fa6dd", - "sha256:bffa46ad9612e6779d0e51ae586fde768339b791a50610d85eb162daeb23661e", - "sha256:dbbed8a56e56cee8d9d522ce844a1379a72a70f453bde6243e3c86c30c2a3d46", - "sha256:ec9912d5cb6714a5710e28e592ee1093d68c5ebfeda61983b3f40331da0b1ebb" + "sha256:0bf384e75b92c42830c0a679b0cd4d6e2b36ae0cf3dbb1e1dfdda48a244f4bcd", + "sha256:0f881b589ff449bf0b931a711926e9ddaad3b35089cc039ce1af50b21a4ae8cb", + "sha256:1484f9e692091450e7edf418c939e15bfc8fc68856e36ce399aed6889dae8bb0", + "sha256:193f50a6ab78a970c9b4f148e7c750cfde64f59815e86f686c22e26b4fe01ce7", + "sha256:3497c1af9f2526962f09329fd61a36566305e6c72da2590ae0d7d1322818843b", + "sha256:57d65074b4f5baa4ab5da1605c02be90ac20c8b40fb137d6a8df9f416b0d0ce2", + "sha256:8bdbeaddaac52d15c6dce38c71b03038ef7772b977847eb6d374fc86636fa510", + "sha256:a19731d5e83ae4737bb2a089605e636077ac001d18781b3cf489b9546c7c80d6", + "sha256:abc0525ae2689a8000837729eef7883b9391cd6aa7950249dcf5a4ede230d5dd", + "sha256:becc576b7e6b553d22cbdf418686ee4daa443d7217999125c045ad56322dda10", + "sha256:ca37bf6a6d0046272c152eea90d2e4ef34593aaa32e8873fc14c16440f22d4b7" ], - "markers": "python_version >= '3.7'", - "version": "==4.24.4" + "markers": "python_version >= '3.8'", + "version": "==4.25.1" }, "pydantic": { "hashes": [ @@ -1077,10 +1373,40 @@ }, "pygments": { "hashes": [ - "sha256:13fc09fa63bc8d8671a6d247e1eb303c4b343eaee81d861f3404db2935653692", - "sha256:1daff0494820c69bc8941e407aa20f577374ee88364ee10a98fdbe0aece96e29" + "sha256:b27c2826c47d0f3219f29554824c30c5e8945175d888647acd804ddd04af846c", + "sha256:da46cec9fd2de5be3a8a784f434e4c4ab670b4ff54d605c4c2717e9d49c4c367" + ], + "version": "==2.17.2" + }, + "pymoo": { + "hashes": [ + "sha256:040b75309a81f5fc92e27a6dff659a34b80c4ea95cbe5c46f55689d3e196d9c1", + "sha256:538638a166b3f4493f6fc9d1fa7051a8fb0c3529a2d078dd47ea1472fc3c8ccf", + "sha256:572451e67320c8eeb46c4e45a503916f64066a3c8ef6ef1689d7259b4bfc7fe9", + "sha256:5e83a86d1b358669fd5a254a4631eb69c488aacf7416315dc5882fdd69d82d24", + "sha256:65637ea2a49fb836b638fd5d63a5da4f3bfa713fe8b283e0c22c5e9af3b024db", + "sha256:6cf33e66aad531c357592a20f1f2351135dc776a6d95e0fe71e80c06ddc67dc4", + "sha256:8097f8282a6347be5125667c0f138edc4d1e415bf441bc35606d23f4253d97b3", + "sha256:847a57f580e139e37185787a39d9bc32b35fd2bf09af3fd53d4a3235dcba5c54", + "sha256:86af470bb692bdf30819e85c35fdaaefb2935f202c40d8f463f2f5767e1bc205", + "sha256:993fbfb4a271b57c5bfe26b9835e61c10ddedde53193aae8339d0e80f5f4b563", + "sha256:b08f392037fbd773b1913d1c29e3bc9d131bd173ad343674a70d0782c741143a", + "sha256:b586ea4b50d86fb5d4daa2c7cadeed3a79f1e06be13d89daa1b6f07b6493716e", + "sha256:cbd0d1a6487093f8bf3cc8db4b105d8f512dc82b9b5a00c3045a36f166f8d3c5", + "sha256:d760867c7cb06be883778436f604bba78b791df7bd4dd99fd79e776109cfcc7c", + "sha256:ecafd7b0f37b762d4aab7c2d04ffda42db22372e30be29bf527c15300e1042cb", + "sha256:f5556c7150d7e4a6b62c4adf0a12776d80b61b044312fcce0b377480f22f33c2" ], - "version": "==2.16.1" + "index": "pypi", + "version": "==0.6.1.1" + }, + "pyparsing": { + "hashes": [ + "sha256:32c7c0b711493c72ff18a981d24f28aaf9c1fb7ed5e9667c9e84e3db623bdbfb", + "sha256:ede28a1a32462f5a9705e07aea48001a08f7cf81a021585011deba701581a0db" + ], + "markers": "python_full_version >= '3.6.8'", + "version": "==3.1.1" }, "python-dateutil": { "hashes": [ @@ -1177,131 +1503,131 @@ }, "referencing": { "hashes": [ - "sha256:449b6669b6121a9e96a7f9e410b245d471e8d48964c67113ce9afe50c8dd7bdf", - "sha256:794ad8003c65938edcdbc027f1933215e0d0ccc0291e3ce20a4d87432b59efc0" + "sha256:689e64fe121843dcfd57b71933318ef1f91188ffb45367332700a86ac8fd6161", + "sha256:bdcd3efb936f82ff86f993093f6da7435c7de69a3b3a5a06678a6050184bee99" ], "markers": "python_version >= '3.8'", - "version": "==0.30.2" + "version": "==0.32.0" }, "rich": { "hashes": [ - "sha256:2b38e2fe9ca72c9a00170a1a2d20c63c790d0e10ef1fe35eba76e1e7b1d7d245", - "sha256:5c14d22737e6d5084ef4771b62d5d4363165b403455a30a1c8ca39dc7b644bef" + "sha256:5cb5123b5cf9ee70584244246816e9114227e0b98ad9176eede6ad54bf5403fa", + "sha256:6da14c108c4866ee9520bbffa71f6fe3962e193b7da68720583850cd4548e235" ], - "version": "==13.6.0" + "version": "==13.7.0" }, "rpds-py": { "hashes": [ - "sha256:023574366002bf1bd751ebaf3e580aef4a468b3d3c216d2f3f7e16fdabd885ed", - "sha256:031f76fc87644a234883b51145e43985aa2d0c19b063e91d44379cd2786144f8", - "sha256:052a832078943d2b2627aea0d19381f607fe331cc0eb5df01991268253af8417", - "sha256:0699ab6b8c98df998c3eacf51a3b25864ca93dab157abe358af46dc95ecd9801", - "sha256:0713631d6e2d6c316c2f7b9320a34f44abb644fc487b77161d1724d883662e31", - "sha256:0774a46b38e70fdde0c6ded8d6d73115a7c39d7839a164cc833f170bbf539116", - "sha256:0898173249141ee99ffcd45e3829abe7bcee47d941af7434ccbf97717df020e5", - "sha256:09586f51a215d17efdb3a5f090d7cbf1633b7f3708f60a044757a5d48a83b393", - "sha256:102eac53bb0bf0f9a275b438e6cf6904904908562a1463a6fc3323cf47d7a532", - "sha256:10f32b53f424fc75ff7b713b2edb286fdbfc94bf16317890260a81c2c00385dc", - "sha256:150eec465dbc9cbca943c8e557a21afdcf9bab8aaabf386c44b794c2f94143d2", - "sha256:1d7360573f1e046cb3b0dceeb8864025aa78d98be4bb69f067ec1c40a9e2d9df", - "sha256:1f36a9d751f86455dc5278517e8b65580eeee37d61606183897f122c9e51cef3", - "sha256:24656dc36f866c33856baa3ab309da0b6a60f37d25d14be916bd3e79d9f3afcf", - "sha256:25860ed5c4e7f5e10c496ea78af46ae8d8468e0be745bd233bab9ca99bfd2647", - "sha256:26857f0f44f0e791f4a266595a7a09d21f6b589580ee0585f330aaccccb836e3", - "sha256:2bb2e4826be25e72013916eecd3d30f66fd076110de09f0e750163b416500721", - "sha256:2f6da6d842195fddc1cd34c3da8a40f6e99e4a113918faa5e60bf132f917c247", - "sha256:30adb75ecd7c2a52f5e76af50644b3e0b5ba036321c390b8e7ec1bb2a16dd43c", - "sha256:3339eca941568ed52d9ad0f1b8eb9fe0958fa245381747cecf2e9a78a5539c42", - "sha256:34ad87a831940521d462ac11f1774edf867c34172010f5390b2f06b85dcc6014", - "sha256:3777cc9dea0e6c464e4b24760664bd8831738cc582c1d8aacf1c3f546bef3f65", - "sha256:3953c6926a63f8ea5514644b7afb42659b505ece4183fdaaa8f61d978754349e", - "sha256:3c4eff26eddac49d52697a98ea01b0246e44ca82ab09354e94aae8823e8bda02", - "sha256:40578a6469e5d1df71b006936ce95804edb5df47b520c69cf5af264d462f2cbb", - "sha256:40f93086eef235623aa14dbddef1b9fb4b22b99454cb39a8d2e04c994fb9868c", - "sha256:4134aa2342f9b2ab6c33d5c172e40f9ef802c61bb9ca30d21782f6e035ed0043", - "sha256:442626328600bde1d09dc3bb00434f5374948838ce75c41a52152615689f9403", - "sha256:4a5ee600477b918ab345209eddafde9f91c0acd931f3776369585a1c55b04c57", - "sha256:4ce5a708d65a8dbf3748d2474b580d606b1b9f91b5c6ab2a316e0b0cf7a4ba50", - "sha256:516a611a2de12fbea70c78271e558f725c660ce38e0006f75139ba337d56b1f6", - "sha256:52c215eb46307c25f9fd2771cac8135d14b11a92ae48d17968eda5aa9aaf5071", - "sha256:53c43e10d398e365da2d4cc0bcaf0854b79b4c50ee9689652cdc72948e86f487", - "sha256:5752b761902cd15073a527b51de76bbae63d938dc7c5c4ad1e7d8df10e765138", - "sha256:5e8a78bd4879bff82daef48c14d5d4057f6856149094848c3ed0ecaf49f5aec2", - "sha256:5ed505ec6305abd2c2c9586a7b04fbd4baf42d4d684a9c12ec6110deefe2a063", - "sha256:5ee97c683eaface61d38ec9a489e353d36444cdebb128a27fe486a291647aff6", - "sha256:61fa268da6e2e1cd350739bb61011121fa550aa2545762e3dc02ea177ee4de35", - "sha256:64ccc28683666672d7c166ed465c09cee36e306c156e787acef3c0c62f90da5a", - "sha256:66414dafe4326bca200e165c2e789976cab2587ec71beb80f59f4796b786a238", - "sha256:68fe9199184c18d997d2e4293b34327c0009a78599ce703e15cd9a0f47349bba", - "sha256:6a555ae3d2e61118a9d3e549737bb4a56ff0cec88a22bd1dfcad5b4e04759175", - "sha256:6bdc11f9623870d75692cc33c59804b5a18d7b8a4b79ef0b00b773a27397d1f6", - "sha256:6cf4393c7b41abbf07c88eb83e8af5013606b1cdb7f6bc96b1b3536b53a574b8", - "sha256:6eef672de005736a6efd565577101277db6057f65640a813de6c2707dc69f396", - "sha256:734c41f9f57cc28658d98270d3436dba65bed0cfc730d115b290e970150c540d", - "sha256:73e0a78a9b843b8c2128028864901f55190401ba38aae685350cf69b98d9f7c9", - "sha256:775049dfa63fb58293990fc59473e659fcafd953bba1d00fc5f0631a8fd61977", - "sha256:7854a207ef77319ec457c1eb79c361b48807d252d94348305db4f4b62f40f7f3", - "sha256:78ca33811e1d95cac8c2e49cb86c0fb71f4d8409d8cbea0cb495b6dbddb30a55", - "sha256:79edd779cfc46b2e15b0830eecd8b4b93f1a96649bcb502453df471a54ce7977", - "sha256:7bf347b495b197992efc81a7408e9a83b931b2f056728529956a4d0858608b80", - "sha256:7fde6d0e00b2fd0dbbb40c0eeec463ef147819f23725eda58105ba9ca48744f4", - "sha256:81de24a1c51cfb32e1fbf018ab0bdbc79c04c035986526f76c33e3f9e0f3356c", - "sha256:879fb24304ead6b62dbe5034e7b644b71def53c70e19363f3c3be2705c17a3b4", - "sha256:8e7f2219cb72474571974d29a191714d822e58be1eb171f229732bc6fdedf0ac", - "sha256:9164ec8010327ab9af931d7ccd12ab8d8b5dc2f4c6a16cbdd9d087861eaaefa1", - "sha256:945eb4b6bb8144909b203a88a35e0a03d22b57aefb06c9b26c6e16d72e5eb0f0", - "sha256:99a57006b4ec39dbfb3ed67e5b27192792ffb0553206a107e4aadb39c5004cd5", - "sha256:9e9184fa6c52a74a5521e3e87badbf9692549c0fcced47443585876fcc47e469", - "sha256:9ff93d3aedef11f9c4540cf347f8bb135dd9323a2fc705633d83210d464c579d", - "sha256:a360cfd0881d36c6dc271992ce1eda65dba5e9368575663de993eeb4523d895f", - "sha256:a5d7ed104d158c0042a6a73799cf0eb576dfd5fc1ace9c47996e52320c37cb7c", - "sha256:ac17044876e64a8ea20ab132080ddc73b895b4abe9976e263b0e30ee5be7b9c2", - "sha256:ad857f42831e5b8d41a32437f88d86ead6c191455a3499c4b6d15e007936d4cf", - "sha256:b2039f8d545f20c4e52713eea51a275e62153ee96c8035a32b2abb772b6fc9e5", - "sha256:b455492cab07107bfe8711e20cd920cc96003e0da3c1f91297235b1603d2aca7", - "sha256:b4a9fe992887ac68256c930a2011255bae0bf5ec837475bc6f7edd7c8dfa254e", - "sha256:b5a53f5998b4bbff1cb2e967e66ab2addc67326a274567697379dd1e326bded7", - "sha256:b788276a3c114e9f51e257f2a6f544c32c02dab4aa7a5816b96444e3f9ffc336", - "sha256:bddd4f91eede9ca5275e70479ed3656e76c8cdaaa1b354e544cbcf94c6fc8ac4", - "sha256:c0503c5b681566e8b722fe8c4c47cce5c7a51f6935d5c7012c4aefe952a35eed", - "sha256:c1b3cd23d905589cb205710b3988fc8f46d4a198cf12862887b09d7aaa6bf9b9", - "sha256:c48f3fbc3e92c7dd6681a258d22f23adc2eb183c8cb1557d2fcc5a024e80b094", - "sha256:c63c3ef43f0b3fb00571cff6c3967cc261c0ebd14a0a134a12e83bdb8f49f21f", - "sha256:c6c45a2d2b68c51fe3d9352733fe048291e483376c94f7723458cfd7b473136b", - "sha256:caa1afc70a02645809c744eefb7d6ee8fef7e2fad170ffdeacca267fd2674f13", - "sha256:cc435d059f926fdc5b05822b1be4ff2a3a040f3ae0a7bbbe672babb468944722", - "sha256:cf693eb4a08eccc1a1b636e4392322582db2a47470d52e824b25eca7a3977b53", - "sha256:cf71343646756a072b85f228d35b1d7407da1669a3de3cf47f8bbafe0c8183a4", - "sha256:d08f63561c8a695afec4975fae445245386d645e3e446e6f260e81663bfd2e38", - "sha256:d29ddefeab1791e3c751e0189d5f4b3dbc0bbe033b06e9c333dca1f99e1d523e", - "sha256:d7f5e15c953ace2e8dde9824bdab4bec50adb91a5663df08d7d994240ae6fa31", - "sha256:d858532212f0650be12b6042ff4378dc2efbb7792a286bee4489eaa7ba010586", - "sha256:d97dd44683802000277bbf142fd9f6b271746b4846d0acaf0cefa6b2eaf2a7ad", - "sha256:dcdc88b6b01015da066da3fb76545e8bb9a6880a5ebf89e0f0b2e3ca557b3ab7", - "sha256:dd609fafdcdde6e67a139898196698af37438b035b25ad63704fd9097d9a3482", - "sha256:defa2c0c68734f4a82028c26bcc85e6b92cced99866af118cd6a89b734ad8e0d", - "sha256:e22260a4741a0e7a206e175232867b48a16e0401ef5bce3c67ca5b9705879066", - "sha256:e225a6a14ecf44499aadea165299092ab0cba918bb9ccd9304eab1138844490b", - "sha256:e3df0bc35e746cce42579826b89579d13fd27c3d5319a6afca9893a9b784ff1b", - "sha256:e6fcc026a3f27c1282c7ed24b7fcac82cdd70a0e84cc848c0841a3ab1e3dea2d", - "sha256:e782379c2028a3611285a795b89b99a52722946d19fc06f002f8b53e3ea26ea9", - "sha256:e8cdd52744f680346ff8c1ecdad5f4d11117e1724d4f4e1874f3a67598821069", - "sha256:e9616f5bd2595f7f4a04b67039d890348ab826e943a9bfdbe4938d0eba606971", - "sha256:e98c4c07ee4c4b3acf787e91b27688409d918212dfd34c872201273fdd5a0e18", - "sha256:ebdab79f42c5961682654b851f3f0fc68e6cc7cd8727c2ac4ffff955154123c1", - "sha256:f0f17f2ce0f3529177a5fff5525204fad7b43dd437d017dd0317f2746773443d", - "sha256:f4e56860a5af16a0fcfa070a0a20c42fbb2012eed1eb5ceeddcc7f8079214281" + "sha256:02744236ac1895d7be837878e707a5c35fb8edc5137602f253b63623d7ad5c8c", + "sha256:03f9c5875515820633bd7709a25c3e60c1ea9ad1c5d4030ce8a8c203309c36fd", + "sha256:044f6f46d62444800402851afa3c3ae50141f12013060c1a3a0677e013310d6d", + "sha256:07a2e1d78d382f7181789713cdf0c16edbad4fe14fe1d115526cb6f0eef0daa3", + "sha256:082e0e55d73690ffb4da4352d1b5bbe1b5c6034eb9dc8c91aa2a3ee15f70d3e2", + "sha256:13152dfe7d7c27c40df8b99ac6aab12b978b546716e99f67e8a67a1d441acbc3", + "sha256:13716e53627ad97babf72ac9e01cf9a7d4af2f75dd5ed7b323a7a9520e948282", + "sha256:13ff62d3561a23c17341b4afc78e8fcfd799ab67c0b1ca32091d71383a98ba4b", + "sha256:1607cda6129f815493a3c184492acb5ae4aa6ed61d3a1b3663aa9824ed26f7ac", + "sha256:164fcee32f15d04d61568c9cb0d919e37ff3195919cd604039ff3053ada0461b", + "sha256:1c24e30d720c0009b6fb2e1905b025da56103c70a8b31b99138e4ed1c2a6c5b0", + "sha256:1e6fcd0a0f62f2997107f758bb372397b8d5fd5f39cc6dcb86f7cb98a2172d6c", + "sha256:1fd0f0b1ccd7d537b858a56355a250108df692102e08aa2036e1a094fd78b2dc", + "sha256:2181e86d4e1cdf49a7320cb72a36c45efcb7670d0a88f09fd2d3a7967c0540fd", + "sha256:2974e6dff38afafd5ccf8f41cb8fc94600b3f4fd9b0a98f6ece6e2219e3158d5", + "sha256:2dccc623725d0b298f557d869a68496a2fd2a9e9c41107f234fa5f7a37d278ac", + "sha256:2df3d07a16a3bef0917b28cd564778fbb31f3ffa5b5e33584470e2d1b0f248f0", + "sha256:2e7e5633577b3bd56bf3af2ef6ae3778bbafb83743989d57f0e7edbf6c0980e4", + "sha256:2ee066a64f0d2ba45391cac15b3a70dcb549e968a117bd0500634754cfe0e5fc", + "sha256:2f1f295a5c28cfa74a7d48c95acc1c8a7acd49d7d9072040d4b694fe11cd7166", + "sha256:2faa97212b0dc465afeedf49045cdd077f97be1188285e646a9f689cb5dfff9e", + "sha256:30479a9f1fce47df56b07460b520f49fa2115ec2926d3b1303c85c81f8401ed1", + "sha256:337a8653fb11d2fbe7157c961cc78cb3c161d98cf44410ace9a3dc2db4fad882", + "sha256:3423007fc0661827e06f8a185a3792c73dda41f30f3421562f210cf0c9e49569", + "sha256:373b76eeb79e8c14f6d82cb1d4d5293f9e4059baec6c1b16dca7ad13b6131b39", + "sha256:3b79c63d29101cbaa53a517683557bb550462394fb91044cc5998dd2acff7340", + "sha256:3bbc89ce2a219662ea142f0abcf8d43f04a41d5b1880be17a794c39f0d609cb0", + "sha256:3c11bc5814554b018f6c5d6ae0969e43766f81e995000b53a5d8c8057055e886", + "sha256:3cd61e759c4075510052d1eca5cddbd297fe1164efec14ef1fce3f09b974dfe4", + "sha256:3d40fb3ca22e3d40f494d577441b263026a3bd8c97ae6ce89b2d3c4b39ac9581", + "sha256:3db0c998c92b909d7c90b66c965590d4f3cd86157176a6cf14aa1f867b77b889", + "sha256:422b0901878a31ef167435c5ad46560362891816a76cc0d150683f3868a6f0d1", + "sha256:46b4f3d47d1033db569173be62365fbf7808c2bd3fb742314d251f130d90d44c", + "sha256:485fbdd23becb822804ed05622907ee5c8e8a5f43f6f43894a45f463b2217045", + "sha256:53304cc14b1d94487d70086e1cb0cb4c29ec6da994d58ae84a4d7e78c6a6d04d", + "sha256:5595c80dd03d7e6c6afb73f3594bf3379a7d79fa57164b591d012d4b71d6ac4c", + "sha256:56b51ba29a18e5f5810224bcf00747ad931c0716e3c09a76b4a1edd3d4aba71f", + "sha256:580182fa5b269c2981e9ce9764367cb4edc81982ce289208d4607c203f44ffde", + "sha256:5e99d6510c8557510c220b865d966b105464740dcbebf9b79ecd4fbab30a13d9", + "sha256:5eb05b654a41e0f81ab27a7c3e88b6590425eb3e934e1d533ecec5dc88a6ffff", + "sha256:62b292fff4739c6be89e6a0240c02bda5a9066a339d90ab191cf66e9fdbdc193", + "sha256:6a5122b17a4faf5d7a6d91fa67b479736c0cacc7afe791ddebb7163a8550b799", + "sha256:6a8ff8e809da81363bffca2b965cb6e4bf6056b495fc3f078467d1f8266fe27f", + "sha256:6c43e1b89099279cc03eb1c725c5de12af6edcd2f78e2f8a022569efa639ada3", + "sha256:709dc11af2f74ba89c68b1592368c6edcbccdb0a06ba77eb28c8fe08bb6997da", + "sha256:7e072f5da38d6428ba1fc1115d3cc0dae895df671cb04c70c019985e8c7606be", + "sha256:813a65f95bfcb7c8f2a70dd6add9b51e9accc3bdb3e03d0ff7a9e6a2d3e174bf", + "sha256:86c01299942b0f4b5b5f28c8701689181ad2eab852e65417172dbdd6c5b3ccc8", + "sha256:893e38d0f4319dfa70c0f36381a37cc418985c87b11d9784365b1fff4fa6973b", + "sha256:8a5f574b92b3ee7d254e56d56e37ec0e1416acb1ae357c4956d76a1788dc58fb", + "sha256:8b9650f92251fdef843e74fc252cdfd6e3c700157ad686eeb0c6d7fdb2d11652", + "sha256:8ec464f20fe803ae00419bd1610934e3bda963aeba1e6181dfc9033dc7e8940c", + "sha256:8f333bfe782a2d05a67cfaa0cc9cd68b36b39ee6acfe099f980541ed973a7093", + "sha256:8ffdeb7dbd0160d4e391e1f857477e4762d00aa2199c294eb95dfb9451aa1d9f", + "sha256:911e600e798374c0d86235e7ef19109cf865d1336942d398ff313375a25a93ba", + "sha256:9235be95662559141934fced8197de6fee8c58870f36756b0584424b6d708393", + "sha256:938518a11780b39998179d07f31a4a468888123f9b00463842cd40f98191f4d3", + "sha256:93c18a1696a8e0388ed84b024fe1a188a26ba999b61d1d9a371318cb89885a8c", + "sha256:97532802f14d383f37d603a56e226909f825a83ff298dc1b6697de00d2243999", + "sha256:98ee201a52a7f65608e5494518932e1473fd43535f12cade0a1b4ab32737fe28", + "sha256:9d2ae79f31da5143e020a8d4fc74e1f0cbcb8011bdf97453c140aa616db51406", + "sha256:9d38494a8d21c246c535b41ecdb2d562c4b933cf3d68de03e8bc43a0d41be652", + "sha256:9d41ebb471a6f064c0d1c873c4f7dded733d16ca5db7d551fb04ff3805d87802", + "sha256:9e09d017e3f4d9bd7d17a30d3f59e4d6d9ba2d2ced280eec2425e84112cf623f", + "sha256:a6945c2d61c42bb7e818677f43638675b8c1c43e858b67a96df3eb2426a86c9d", + "sha256:a72e00826a2b032dda3eb25aa3e3579c6d6773d22d8446089a57a123481cc46c", + "sha256:aa1e626c524d2c7972c0f3a8a575d654a3a9c008370dc2a97e46abd0eaa749b9", + "sha256:ab095edf1d840a6a6a4307e1a5b907a299a94e7b90e75436ee770b8c35d22a25", + "sha256:ac2ac84a4950d627d84b61f082eba61314373cfab4b3c264b62efab02ababe83", + "sha256:ac7187bee72384b9cfedf09a29a3b2b6e8815cc64c095cdc8b5e6aec81e9fd5f", + "sha256:ae9d83a81b09ce3a817e2cbb23aabc07f86a3abc664c613cd283ce7a03541e95", + "sha256:afeabb382c1256a7477b739820bce7fe782bb807d82927102cee73e79b41b38b", + "sha256:b2a4cd924d0e2f4b1a68034abe4cadc73d69ad5f4cf02db6481c0d4d749f548f", + "sha256:b414ef79f1f06fb90b5165db8aef77512c1a5e3ed1b4807da8476b7e2c853283", + "sha256:b4ecbba7efd82bd2a4bb88aab7f984eb5470991c1347bdd1f35fb34ea28dba6e", + "sha256:b61d5096e75fd71018b25da50b82dd70ec39b5e15bb2134daf7eb7bbbc103644", + "sha256:b629db53fe17e6ce478a969d30bd1d0e8b53238c46e3a9c9db39e8b65a9ef973", + "sha256:b70b45a40ad0798b69748b34d508259ef2bdc84fb2aad4048bc7c9cafb68ddb3", + "sha256:b88c3ab98556bc351b36d6208a6089de8c8db14a7f6e1f57f82a334bd2c18f0b", + "sha256:baf744e5f9d5ee6531deea443be78b36ed1cd36c65a0b95ea4e8d69fa0102268", + "sha256:bbc7421cbd28b4316d1d017db338039a7943f945c6f2bb15e1439b14b5682d28", + "sha256:c31272c674f725dfe0f343d73b0abe8c878c646967ec1c6106122faae1efc15b", + "sha256:c51a899792ee2c696072791e56b2020caff58b275abecbc9ae0cb71af0645c95", + "sha256:c61e42b4ceb9759727045765e87d51c1bb9f89987aca1fcc8a040232138cad1c", + "sha256:c7cd0841a586b7105513a7c8c3d5c276f3adc762a072d81ef7fae80632afad1e", + "sha256:c827a931c6b57f50f1bb5de400dcfb00bad8117e3753e80b96adb72d9d811514", + "sha256:d2aa3ca9552f83b0b4fa6ca8c6ce08da6580f37e3e0ab7afac73a1cfdc230c0e", + "sha256:d46ee458452727a147d7897bb33886981ae1235775e05decae5d5d07f537695a", + "sha256:d64a657de7aae8db2da60dc0c9e4638a0c3893b4d60101fd564a3362b2bfeb34", + "sha256:d800a8e2ac62db1b9ea5d6d1724f1a93c53907ca061de4d05ed94e8dfa79050c", + "sha256:d9d7ebcd11ea76ba0feaae98485cd8e31467c3d7985210fab46983278214736b", + "sha256:dd7d3608589072f63078b4063a6c536af832e76b0b3885f1bfe9e892abe6c207", + "sha256:ec19e823b4ccd87bd69e990879acbce9e961fc7aebe150156b8f4418d4b27b7f", + "sha256:ee40206d1d6e95eaa2b7b919195e3689a5cf6ded730632de7f187f35a1b6052c", + "sha256:f138f550b83554f5b344d6be35d3ed59348510edc3cb96f75309db6e9bfe8210", + "sha256:f3e6e2e502c4043c52a99316d89dc49f416acda5b0c6886e0dd8ea7bb35859e8", + "sha256:fb10bb720348fe1647a94eb605accb9ef6a9b1875d8845f9e763d9d71a706387", + "sha256:fc066395e6332da1e7525d605b4c96055669f8336600bef8ac569d5226a7c76f", + "sha256:fc33267d58dfbb2361baed52668c5d8c15d24bc0372cecbb79fed77339b55e0d" ], "markers": "python_version >= '3.8'", - "version": "==0.10.6" + "version": "==0.15.2" }, "s3transfer": { "hashes": [ - "sha256:b014be3a8a2aab98cfe1abc7229cc5a9a0cf05eb9c1f2b86b230fd8df3f78084", - "sha256:cab66d3380cca3e70939ef2255d01cd8aece6a4907a9528740f668c4b0611861" + "sha256:baa479dc2e63e5c2ed51611b4d46cdf0295e2070d8d0b86b22f335ee5b954986", + "sha256:e8d6bd52ffd99841e3a57b34370a54841f12d3aab072af862cdcc50955288002" ], "markers": "python_version >= '3.7'", - "version": "==0.6.2" + "version": "==0.8.0" }, "scipy": { "hashes": [ @@ -1332,19 +1658,19 @@ }, "sentry-sdk": { "hashes": [ - "sha256:935e8fbd7787a3702457393b74b13d89a5afb67185bc0af85c00cb27cbd42e7c", - "sha256:eeb0b3550536f3bbc05bb1c7e0feb3a78d74acb43b607159a606ed2ec0a33a4d" + "sha256:320a55cdf9da9097a0bead239c35b7e61f53660ef9878861824fd6d9b2eaf3b5", + "sha256:81b5b9ffdd1a374e9eb0c053b5d2012155db9cbe76393a8585677b753bd5fdc1" ], "index": "pypi", - "version": "==1.32.0" + "version": "==1.39.1" }, "setuptools": { "hashes": [ - "sha256:4ac1475276d2f1c48684874089fefcd83bd7162ddaafb81fac866ba0db282a87", - "sha256:b454a35605876da60632df1a60f736524eb73cc47bbc9f3f1ef1b644de74fd2a" + "sha256:1e8fdff6797d3865f37397be788a4e3cba233608e9b509382a2777d25ebde7f2", + "sha256:735896e78a4742605974de002ac60562d286fa8051a7e2299445e8e8fbb01aa6" ], "markers": "python_version >= '3.8'", - "version": "==68.2.2" + "version": "==69.0.2" }, "six": { "hashes": [ @@ -1377,11 +1703,11 @@ "opentelemetry" ], "hashes": [ - "sha256:abd6c3b3a8ddb2e28a16142e7a6b1a380e4c00f5a72caa2eba6bdc2a99e50fb5", - "sha256:b92f42612633264fd2d815ae811cb619350926be63d2330913c4b1bcc7d0dd78" + "sha256:10e21ff8af08de002b3be39444dfb45c5baa8da34a4a2c00223aeb35cdf8205e", + "sha256:c0b55bd2a76b7ae76e2c595c998dbe17ff5d957e5a5a8cd846d1d8b3dabaf1d3" ], "index": "pypi", - "version": "==0.209.6" + "version": "==0.217.0" }, "typer": { "hashes": [ @@ -1392,11 +1718,11 @@ }, "typing-extensions": { "hashes": [ - "sha256:8f92fc8806f9a6b641eaa5318da32b44d401efaac0f6678c9bc448ba3605faa0", - "sha256:df8e4339e9cb77357558cbdbceca33c303714cf861d1eef15e1070055ae8b7ef" + "sha256:23478f88c37f27d76ac8aee6c905017a143b0b1b886c3c9f66bc2fd94f9f5783", + "sha256:af72aea155e91adfc61c3ae9e0e342dbc0cba726d6cba4b6c72c1f34e47291cd" ], "markers": "python_version >= '3.8'", - "version": "==4.8.0" + "version": "==4.9.0" }, "typing-inspect": { "hashes": [ @@ -1407,395 +1733,466 @@ }, "ujson": { "hashes": [ - "sha256:07d459aca895eb17eb463b00441986b021b9312c6c8cc1d06880925c7f51009c", - "sha256:0be81bae295f65a6896b0c9030b55a106fb2dec69ef877253a87bc7c9c5308f7", - "sha256:0fe1b7edaf560ca6ab023f81cbeaf9946a240876a993b8c5a21a1c539171d903", - "sha256:102bf31c56f59538cccdfec45649780ae00657e86247c07edac434cb14d5388c", - "sha256:11da6bed916f9bfacf13f4fc6a9594abd62b2bb115acfb17a77b0f03bee4cfd5", - "sha256:16fde596d5e45bdf0d7de615346a102510ac8c405098e5595625015b0d4b5296", - "sha256:193349a998cd821483a25f5df30b44e8f495423840ee11b3b28df092ddfd0f7f", - "sha256:20768961a6a706170497129960762ded9c89fb1c10db2989c56956b162e2a8a3", - "sha256:27a2a3c7620ebe43641e926a1062bc04e92dbe90d3501687957d71b4bdddaec4", - "sha256:2873d196725a8193f56dde527b322c4bc79ed97cd60f1d087826ac3290cf9207", - "sha256:299a312c3e85edee1178cb6453645217ba23b4e3186412677fa48e9a7f986de6", - "sha256:2a64cc32bb4a436e5813b83f5aab0889927e5ea1788bf99b930fad853c5625cb", - "sha256:2b852bdf920fe9f84e2a2c210cc45f1b64f763b4f7d01468b33f7791698e455e", - "sha256:2e72ba76313d48a1a3a42e7dc9d1db32ea93fac782ad8dde6f8b13e35c229130", - "sha256:3659deec9ab9eb19e8646932bfe6fe22730757c4addbe9d7d5544e879dc1b721", - "sha256:3b27a8da7a080add559a3b73ec9ebd52e82cc4419f7c6fb7266e62439a055ed0", - "sha256:3f9b63530a5392eb687baff3989d0fb5f45194ae5b1ca8276282fb647f8dcdb3", - "sha256:407d60eb942c318482bbfb1e66be093308bb11617d41c613e33b4ce5be789adc", - "sha256:40931d7c08c4ce99adc4b409ddb1bbb01635a950e81239c2382cfe24251b127a", - "sha256:48c7d373ff22366eecfa36a52b9b55b0ee5bd44c2b50e16084aa88b9de038916", - "sha256:4ddeabbc78b2aed531f167d1e70387b151900bc856d61e9325fcdfefb2a51ad8", - "sha256:5ac97b1e182d81cf395ded620528c59f4177eee024b4b39a50cdd7b720fdeec6", - "sha256:5ce24909a9c25062e60653073dd6d5e6ec9d6ad7ed6e0069450d5b673c854405", - "sha256:69b3104a2603bab510497ceabc186ba40fef38ec731c0ccaa662e01ff94a985c", - "sha256:6a4dafa9010c366589f55afb0fd67084acd8added1a51251008f9ff2c3e44042", - "sha256:6d230d870d1ce03df915e694dcfa3f4e8714369cce2346686dbe0bc8e3f135e7", - "sha256:78e318def4ade898a461b3d92a79f9441e7e0e4d2ad5419abed4336d702c7425", - "sha256:7a42baa647a50fa8bed53d4e242be61023bd37b93577f27f90ffe521ac9dc7a3", - "sha256:7cba16b26efe774c096a5e822e4f27097b7c81ed6fb5264a2b3f5fd8784bab30", - "sha256:7d8283ac5d03e65f488530c43d6610134309085b71db4f675e9cf5dff96a8282", - "sha256:7ecc33b107ae88405aebdb8d82c13d6944be2331ebb04399134c03171509371a", - "sha256:9249fdefeb021e00b46025e77feed89cd91ffe9b3a49415239103fc1d5d9c29a", - "sha256:9399eaa5d1931a0ead49dce3ffacbea63f3177978588b956036bfe53cdf6af75", - "sha256:94c7bd9880fa33fcf7f6d7f4cc032e2371adee3c5dba2922b918987141d1bf07", - "sha256:9571de0c53db5cbc265945e08f093f093af2c5a11e14772c72d8e37fceeedd08", - "sha256:9721cd112b5e4687cb4ade12a7b8af8b048d4991227ae8066d9c4b3a6642a582", - "sha256:9ab282d67ef3097105552bf151438b551cc4bedb3f24d80fada830f2e132aeb9", - "sha256:9d9707e5aacf63fb919f6237d6490c4e0244c7f8d3dc2a0f84d7dec5db7cb54c", - "sha256:a70f776bda2e5072a086c02792c7863ba5833d565189e09fabbd04c8b4c3abba", - "sha256:a89cf3cd8bf33a37600431b7024a7ccf499db25f9f0b332947fbc79043aad879", - "sha256:a8c91b6f4bf23f274af9002b128d133b735141e867109487d17e344d38b87d94", - "sha256:ad24ec130855d4430a682c7a60ca0bc158f8253ec81feed4073801f6b6cb681b", - "sha256:ae7f4725c344bf437e9b881019c558416fe84ad9c6b67426416c131ad577df67", - "sha256:b748797131ac7b29826d1524db1cc366d2722ab7afacc2ce1287cdafccddbf1f", - "sha256:bdf04c6af3852161be9613e458a1fb67327910391de8ffedb8332e60800147a2", - "sha256:bf5737dbcfe0fa0ac8fa599eceafae86b376492c8f1e4b84e3adf765f03fb564", - "sha256:c4e7bb7eba0e1963f8b768f9c458ecb193e5bf6977090182e2b4f4408f35ac76", - "sha256:d524a8c15cfc863705991d70bbec998456a42c405c291d0f84a74ad7f35c5109", - "sha256:d53039d39de65360e924b511c7ca1a67b0975c34c015dd468fca492b11caa8f7", - "sha256:d6f84a7a175c75beecde53a624881ff618e9433045a69fcfb5e154b73cdaa377", - "sha256:e0147d41e9fb5cd174207c4a2895c5e24813204499fd0839951d4c8784a23bf5", - "sha256:e3673053b036fd161ae7a5a33358ccae6793ee89fd499000204676baafd7b3aa", - "sha256:e54578fa8838ddc722539a752adfce9372474114f8c127bb316db5392d942f8b", - "sha256:eb0142f6f10f57598655340a3b2c70ed4646cbe674191da195eb0985a9813b83", - "sha256:efeddf950fb15a832376c0c01d8d7713479fbeceaed1eaecb2665aa62c305aec", - "sha256:f26629ac531d712f93192c233a74888bc8b8212558bd7d04c349125f10199fcf", - "sha256:f2e385a7679b9088d7bc43a64811a7713cc7c33d032d020f757c54e7d41931ae", - "sha256:f3554eaadffe416c6f543af442066afa6549edbc34fe6a7719818c3e72ebfe95", - "sha256:f4511560d75b15ecb367eef561554959b9d49b6ec3b8d5634212f9fed74a6df1", - "sha256:f504117a39cb98abba4153bf0b46b4954cc5d62f6351a14660201500ba31fe7f", - "sha256:fb87decf38cc82bcdea1d7511e73629e651bdec3a43ab40985167ab8449b769c" + "sha256:07e0cfdde5fd91f54cd2d7ffb3482c8ff1bf558abf32a8b953a5d169575ae1cd", + "sha256:0b159efece9ab5c01f70b9d10bbb77241ce111a45bc8d21a44c219a2aec8ddfd", + "sha256:0c4d6adb2c7bb9eb7c71ad6f6f612e13b264942e841f8cc3314a21a289a76c4e", + "sha256:10ca3c41e80509fd9805f7c149068fa8dbee18872bbdc03d7cca928926a358d5", + "sha256:20509a8c9f775b3a511e308bbe0b72897ba6b800767a7c90c5cca59d20d7c42c", + "sha256:25fa46e4ff0a2deecbcf7100af3a5d70090b461906f2299506485ff31d9ec437", + "sha256:2a8ea0f55a1396708e564595aaa6696c0d8af532340f477162ff6927ecc46e21", + "sha256:2fbb90aa5c23cb3d4b803c12aa220d26778c31b6e4b7a13a1f49971f6c7d088e", + "sha256:323279e68c195110ef85cbe5edce885219e3d4a48705448720ad925d88c9f851", + "sha256:32bba5870c8fa2a97f4a68f6401038d3f1922e66c34280d710af00b14a3ca562", + "sha256:3382a3ce0ccc0558b1c1668950008cece9bf463ebb17463ebf6a8bfc060dae34", + "sha256:37ef92e42535a81bf72179d0e252c9af42a4ed966dc6be6967ebfb929a87bc60", + "sha256:3b23bbb46334ce51ddb5dded60c662fbf7bb74a37b8f87221c5b0fec1ec6454b", + "sha256:473fb8dff1d58f49912323d7cb0859df5585cfc932e4b9c053bf8cf7f2d7c5c4", + "sha256:4a566e465cb2fcfdf040c2447b7dd9718799d0d90134b37a20dff1e27c0e9096", + "sha256:4e35d7885ed612feb6b3dd1b7de28e89baaba4011ecdf995e88be9ac614765e9", + "sha256:506a45e5fcbb2d46f1a51fead991c39529fc3737c0f5d47c9b4a1d762578fc30", + "sha256:5635b78b636a54a86fdbf6f027e461aa6c6b948363bdf8d4fbb56a42b7388320", + "sha256:5ca35f484622fd208f55041b042d9d94f3b2c9c5add4e9af5ee9946d2d30db01", + "sha256:60718f1720a61560618eff3b56fd517d107518d3c0160ca7a5a66ac949c6cf1c", + "sha256:63fb2e6599d96fdffdb553af0ed3f76b85fda63281063f1cb5b1141a6fcd0617", + "sha256:6974b3a7c17bbf829e6c3bfdc5823c67922e44ff169851a755eab79a3dd31ec0", + "sha256:6adef377ed583477cf005b58c3025051b5faa6b8cc25876e594afbb772578f21", + "sha256:6bbd91a151a8f3358c29355a491e915eb203f607267a25e6ab10531b3b157c5e", + "sha256:6eecbd09b316cea1fd929b1e25f70382917542ab11b692cb46ec9b0a26c7427f", + "sha256:70e06849dfeb2548be48fdd3ceb53300640bc8100c379d6e19d78045e9c26120", + "sha256:7309d063cd392811acc49b5016728a5e1b46ab9907d321ebbe1c2156bc3c0b99", + "sha256:779a2a88c53039bebfbccca934430dabb5c62cc179e09a9c27a322023f363e0d", + "sha256:7a365eac66f5aa7a7fdf57e5066ada6226700884fc7dce2ba5483538bc16c8c5", + "sha256:7b1c0991c4fe256f5fdb19758f7eac7f47caac29a6c57d0de16a19048eb86bad", + "sha256:7cc7e605d2aa6ae6b7321c3ae250d2e050f06082e71ab1a4200b4ae64d25863c", + "sha256:829a69d451a49c0de14a9fecb2a2d544a9b2c884c2b542adb243b683a6f15908", + "sha256:829b824953ebad76d46e4ae709e940bb229e8999e40881338b3cc94c771b876c", + "sha256:82b5a56609f1235d72835ee109163c7041b30920d70fe7dac9176c64df87c164", + "sha256:89cc92e73d5501b8a7f48575eeb14ad27156ad092c2e9fc7e3cf949f07e75532", + "sha256:8ba7cac47dd65ff88571eceeff48bf30ed5eb9c67b34b88cb22869b7aa19600d", + "sha256:8fc2aa18b13d97b3c8ccecdf1a3c405f411a6e96adeee94233058c44ff92617d", + "sha256:9ac92d86ff34296f881e12aa955f7014d276895e0e4e868ba7fddebbde38e378", + "sha256:9d302bd17989b6bd90d49bade66943c78f9e3670407dbc53ebcf61271cadc399", + "sha256:9f21315f51e0db8ee245e33a649dd2d9dce0594522de6f278d62f15f998e050e", + "sha256:a6d3f10eb8ccba4316a6b5465b705ed70a06011c6f82418b59278fbc919bef6f", + "sha256:a807ae73c46ad5db161a7e883eec0fbe1bebc6a54890152ccc63072c4884823b", + "sha256:ab71bf27b002eaf7d047c54a68e60230fbd5cd9da60de7ca0aa87d0bccead8fa", + "sha256:b048aa93eace8571eedbd67b3766623e7f0acbf08ee291bef7d8106210432427", + "sha256:b28407cfe315bd1b34f1ebe65d3bd735d6b36d409b334100be8cdffae2177b2f", + "sha256:b5964ea916edfe24af1f4cc68488448fbb1ec27a3ddcddc2b236da575c12c8ae", + "sha256:b68a0caab33f359b4cbbc10065c88e3758c9f73a11a65a91f024b2e7a1257106", + "sha256:ba0823cb70866f0d6a4ad48d998dd338dce7314598721bc1b7986d054d782dfd", + "sha256:bd4ea86c2afd41429751d22a3ccd03311c067bd6aeee2d054f83f97e41e11d8f", + "sha256:bdf7fc21a03bafe4ba208dafa84ae38e04e5d36c0e1c746726edf5392e9f9f36", + "sha256:c4eec2ddc046360d087cf35659c7ba0cbd101f32035e19047013162274e71fcf", + "sha256:cdcb02cabcb1e44381221840a7af04433c1dc3297af76fde924a50c3054c708c", + "sha256:d0fd2eba664a22447102062814bd13e63c6130540222c0aa620701dd01f4be81", + "sha256:d581db9db9e41d8ea0b2705c90518ba623cbdc74f8d644d7eb0d107be0d85d9c", + "sha256:dc80f0f5abf33bd7099f7ac94ab1206730a3c0a2d17549911ed2cb6b7aa36d2d", + "sha256:e015122b337858dba5a3dc3533af2a8fc0410ee9e2374092f6a5b88b182e9fcc", + "sha256:e208d3bf02c6963e6ef7324dadf1d73239fb7008491fdf523208f60be6437402", + "sha256:e2f909bc08ce01f122fd9c24bc6f9876aa087188dfaf3c4116fe6e4daf7e194f", + "sha256:f0cb4a7814940ddd6619bdce6be637a4b37a8c4760de9373bac54bb7b229698b", + "sha256:f4b3917296630a075e04d3d07601ce2a176479c23af838b6cf90a2d6b39b0d95", + "sha256:f69f16b8f1c69da00e38dc5f2d08a86b0e781d0ad3e4cc6a13ea033a439c4844", + "sha256:f833c529e922577226a05bc25b6a8b3eb6c4fb155b72dd88d33de99d53113124", + "sha256:f91719c6abafe429c1a144cfe27883eace9fb1c09a9c5ef1bcb3ae80a3076a4e", + "sha256:ff741a5b4be2d08fceaab681c9d4bc89abf3c9db600ab435e20b9b6d4dfef12e", + "sha256:ffdfebd819f492e48e4f31c97cb593b9c1a8251933d8f8972e81697f00326ff1" ], "index": "pypi", - "version": "==5.8.0" + "version": "==5.9.0" }, "urllib3": { "hashes": [ - "sha256:24d6a242c28d29af46c3fae832c36db3bbebcc533dd1bb549172cd739c82df21", - "sha256:94a757d178c9be92ef5539b8840d48dc9cf1b2709c9d6b588232a055c524458b" + "sha256:34b97092d7e0a3a8cf7cd10e386f401b3737364026c45e622aa02903dffe0f07", + "sha256:f8ecc1bba5667413457c529ab955bf8c67b45db799d159066261719e328580a0" ], "markers": "python_version >= '3.6'", - "version": "==1.26.17" + "version": "==1.26.18" }, "uvicorn": { "extras": [ "standard" ], "hashes": [ - "sha256:1f9be6558f01239d4fdf22ef8126c39cb1ad0addf76c40e760549d2c2f43ab53", - "sha256:4d3cc12d7727ba72b64d12d3cc7743124074c0a69f7b201512fc50c3e3f1569a" + "sha256:09c8e5a79dc466bdf28dead50093957db184de356fcdc48697bad3bde4c2588e", + "sha256:7c84fea70c619d4a710153482c0d230929af7bcf76c7bfa6de151f0a3a80121e" ], "index": "pypi", - "version": "==0.23.2" + "version": "==0.24.0.post1" }, "uvloop": { "hashes": [ - "sha256:0949caf774b9fcefc7c5756bacbbbd3fc4c05a6b7eebc7c7ad6f825b23998d6d", - "sha256:0ddf6baf9cf11a1a22c71487f39f15b2cf78eb5bde7e5b45fbb99e8a9d91b9e1", - "sha256:1436c8673c1563422213ac6907789ecb2b070f5939b9cbff9ef7113f2b531595", - "sha256:23609ca361a7fc587031429fa25ad2ed7242941adec948f9d10c045bfecab06b", - "sha256:2a6149e1defac0faf505406259561bc14b034cdf1d4711a3ddcdfbaa8d825a05", - "sha256:2deae0b0fb00a6af41fe60a675cec079615b01d68beb4cc7b722424406b126a8", - "sha256:307958f9fc5c8bb01fad752d1345168c0abc5d62c1b72a4a8c6c06f042b45b20", - "sha256:30babd84706115626ea78ea5dbc7dd8d0d01a2e9f9b306d24ca4ed5796c66ded", - "sha256:3378eb62c63bf336ae2070599e49089005771cc651c8769aaad72d1bd9385a7c", - "sha256:3d97672dc709fa4447ab83276f344a165075fd9f366a97b712bdd3fee05efae8", - "sha256:3db8de10ed684995a7f34a001f15b374c230f7655ae840964d51496e2f8a8474", - "sha256:3ebeeec6a6641d0adb2ea71dcfb76017602ee2bfd8213e3fcc18d8f699c5104f", - "sha256:45cea33b208971e87a31c17622e4b440cac231766ec11e5d22c76fab3bf9df62", - "sha256:6708f30db9117f115eadc4f125c2a10c1a50d711461699a0cbfaa45b9a78e376", - "sha256:68532f4349fd3900b839f588972b3392ee56042e440dd5873dfbbcd2cc67617c", - "sha256:6aafa5a78b9e62493539456f8b646f85abc7093dd997f4976bb105537cf2635e", - "sha256:7d37dccc7ae63e61f7b96ee2e19c40f153ba6ce730d8ba4d3b4e9738c1dccc1b", - "sha256:864e1197139d651a76c81757db5eb199db8866e13acb0dfe96e6fc5d1cf45fc4", - "sha256:8887d675a64cfc59f4ecd34382e5b4f0ef4ae1da37ed665adba0c2badf0d6578", - "sha256:8efcadc5a0003d3a6e887ccc1fb44dec25594f117a94e3127954c05cf144d811", - "sha256:9b09e0f0ac29eee0451d71798878eae5a4e6a91aa275e114037b27f7db72702d", - "sha256:a4aee22ece20958888eedbad20e4dbb03c37533e010fb824161b4f05e641f738", - "sha256:a5abddb3558d3f0a78949c750644a67be31e47936042d4f6c888dd6f3c95f4aa", - "sha256:c092a2c1e736086d59ac8e41f9c98f26bbf9b9222a76f21af9dfe949b99b2eb9", - "sha256:c686a47d57ca910a2572fddfe9912819880b8765e2f01dc0dd12a9bf8573e539", - "sha256:cbbe908fda687e39afd6ea2a2f14c2c3e43f2ca88e3a11964b297822358d0e6c", - "sha256:ce9f61938d7155f79d3cb2ffa663147d4a76d16e08f65e2c66b77bd41b356718", - "sha256:dbbaf9da2ee98ee2531e0c780455f2841e4675ff580ecf93fe5c48fe733b5667", - "sha256:f1e507c9ee39c61bfddd79714e4f85900656db1aec4d40c6de55648e85c2799c", - "sha256:ff3d00b70ce95adce264462c930fbaecb29718ba6563db354608f37e49e09024" - ], - "version": "==0.17.0" + "sha256:0246f4fd1bf2bf702e06b0d45ee91677ee5c31242f39aab4ea6fe0c51aedd0fd", + "sha256:02506dc23a5d90e04d4f65c7791e65cf44bd91b37f24cfc3ef6cf2aff05dc7ec", + "sha256:13dfdf492af0aa0a0edf66807d2b465607d11c4fa48f4a1fd41cbea5b18e8e8b", + "sha256:2693049be9d36fef81741fddb3f441673ba12a34a704e7b4361efb75cf30befc", + "sha256:271718e26b3e17906b28b67314c45d19106112067205119dddbd834c2b7ce797", + "sha256:2df95fca285a9f5bfe730e51945ffe2fa71ccbfdde3b0da5772b4ee4f2e770d5", + "sha256:31e672bb38b45abc4f26e273be83b72a0d28d074d5b370fc4dcf4c4eb15417d2", + "sha256:34175c9fd2a4bc3adc1380e1261f60306344e3407c20a4d684fd5f3be010fa3d", + "sha256:45bf4c24c19fb8a50902ae37c5de50da81de4922af65baf760f7c0c42e1088be", + "sha256:472d61143059c84947aa8bb74eabbace30d577a03a1805b77933d6bd13ddebbd", + "sha256:47bf3e9312f63684efe283f7342afb414eea4d3011542155c7e625cd799c3b12", + "sha256:492e2c32c2af3f971473bc22f086513cedfc66a130756145a931a90c3958cb17", + "sha256:4ce6b0af8f2729a02a5d1575feacb2a94fc7b2e983868b009d51c9a9d2149bef", + "sha256:5138821e40b0c3e6c9478643b4660bd44372ae1e16a322b8fc07478f92684e24", + "sha256:5588bd21cf1fcf06bded085f37e43ce0e00424197e7c10e77afd4bbefffef428", + "sha256:570fc0ed613883d8d30ee40397b79207eedd2624891692471808a95069a007c1", + "sha256:5a05128d315e2912791de6088c34136bfcdd0c7cbc1cf85fd6fd1bb321b7c849", + "sha256:5daa304d2161d2918fa9a17d5635099a2f78ae5b5960e742b2fcfbb7aefaa593", + "sha256:5f17766fb6da94135526273080f3455a112f82570b2ee5daa64d682387fe0dcd", + "sha256:6e3d4e85ac060e2342ff85e90d0c04157acb210b9ce508e784a944f852a40e67", + "sha256:7010271303961c6f0fe37731004335401eb9075a12680738731e9c92ddd96ad6", + "sha256:7207272c9520203fea9b93843bb775d03e1cf88a80a936ce760f60bb5add92f3", + "sha256:78ab247f0b5671cc887c31d33f9b3abfb88d2614b84e4303f1a63b46c046c8bd", + "sha256:7b1fd71c3843327f3bbc3237bedcdb6504fd50368ab3e04d0410e52ec293f5b8", + "sha256:8ca4956c9ab567d87d59d49fa3704cf29e37109ad348f2d5223c9bf761a332e7", + "sha256:91ab01c6cd00e39cde50173ba4ec68a1e578fee9279ba64f5221810a9e786533", + "sha256:cd81bdc2b8219cb4b2556eea39d2e36bfa375a2dd021404f90a62e44efaaf957", + "sha256:da8435a3bd498419ee8c13c34b89b5005130a476bda1d6ca8cfdde3de35cd650", + "sha256:de4313d7f575474c8f5a12e163f6d89c0a878bc49219641d49e6f1444369a90e", + "sha256:e27f100e1ff17f6feeb1f33968bc185bf8ce41ca557deee9d9bbbffeb72030b7", + "sha256:f467a5fd23b4fc43ed86342641f3936a68ded707f4627622fa3f82a120e18256" + ], + "version": "==0.19.0" }, "watchfiles": { "hashes": [ - "sha256:007dcc4a401093010b389c044e81172c8a2520dba257c88f8828b3d460c6bb38", - "sha256:08dc702529bb06a2b23859110c214db245455532da5eaea602921687cfcd23db", - "sha256:0d82dbc1832da83e441d112069833eedd4cf583d983fb8dd666fbefbea9d99c0", - "sha256:13f995d5152a8ba4ed7c2bbbaeee4e11a5944defc7cacd0ccb4dcbdcfd78029a", - "sha256:3796312bd3587e14926013612b23066912cf45a14af71cf2b20db1c12dadf4e9", - "sha256:5392dd327a05f538c56edb1c6ebba6af91afc81b40822452342f6da54907bbdf", - "sha256:570848706440373b4cd8017f3e850ae17f76dbdf1e9045fc79023b11e1afe490", - "sha256:608cd94a8767f49521901aff9ae0c92cc8f5a24d528db7d6b0295290f9d41193", - "sha256:728575b6b94c90dd531514677201e8851708e6e4b5fe7028ac506a200b622019", - "sha256:7d4e66a857621584869cfbad87039e65dadd7119f0d9bb9dbc957e089e32c164", - "sha256:835df2da7a5df5464c4a23b2d963e1a9d35afa422c83bf4ff4380b3114603644", - "sha256:87d9e1f75c4f86c93d73b5bd1ebe667558357548f11b4f8af4e0e272f79413ce", - "sha256:89d1de8218874925bce7bb2ae9657efc504411528930d7a83f98b1749864f2ef", - "sha256:99f4c65fd2fce61a571b2a6fcf747d6868db0bef8a934e8ca235cc8533944d95", - "sha256:9a0351d20d03c6f7ad6b2e8a226a5efafb924c7755ee1e34f04c77c3682417fa", - "sha256:9b5c8d3be7b502f8c43a33c63166ada8828dbb0c6d49c8f9ce990a96de2f5a49", - "sha256:a03d1e6feb7966b417f43c3e3783188167fd69c2063e86bad31e62c4ea794cc5", - "sha256:b17d4176c49d207865630da5b59a91779468dd3e08692fe943064da260de2c7c", - "sha256:d0002d81c89a662b595645fb684a371b98ff90a9c7d8f8630c82f0fde8310458", - "sha256:d97db179f7566dcf145c5179ddb2ae2a4450e3a634eb864b09ea04e68c252e8e", - "sha256:e43af4464daa08723c04b43cf978ab86cc55c684c16172622bdac64b34e36af0", - "sha256:eccc8942bcdc7d638a01435d915b913255bbd66f018f1af051cd8afddb339ea3" - ], - "version": "==0.20.0" + "sha256:02b73130687bc3f6bb79d8a170959042eb56eb3a42df3671c79b428cd73f17cc", + "sha256:02d91cbac553a3ad141db016e3350b03184deaafeba09b9d6439826ee594b365", + "sha256:06247538e8253975bdb328e7683f8515ff5ff041f43be6c40bff62d989b7d0b0", + "sha256:08dca260e85ffae975448e344834d765983237ad6dc308231aa16e7933db763e", + "sha256:0d9ac347653ebd95839a7c607608703b20bc07e577e870d824fa4801bc1cb124", + "sha256:0dd5fad9b9c0dd89904bbdea978ce89a2b692a7ee8a0ce19b940e538c88a809c", + "sha256:11cd0c3100e2233e9c53106265da31d574355c288e15259c0d40a4405cbae317", + "sha256:18722b50783b5e30a18a8a5db3006bab146d2b705c92eb9a94f78c72beb94094", + "sha256:18d5b4da8cf3e41895b34e8c37d13c9ed294954907929aacd95153508d5d89d7", + "sha256:1ad7247d79f9f55bb25ab1778fd47f32d70cf36053941f07de0b7c4e96b5d235", + "sha256:1b8d1eae0f65441963d805f766c7e9cd092f91e0c600c820c764a4ff71a0764c", + "sha256:1bd467213195e76f838caf2c28cd65e58302d0254e636e7c0fca81efa4a2e62c", + "sha256:1c9198c989f47898b2c22201756f73249de3748e0fc9de44adaf54a8b259cc0c", + "sha256:1fd9a5205139f3c6bb60d11f6072e0552f0a20b712c85f43d42342d162be1235", + "sha256:214cee7f9e09150d4fb42e24919a1e74d8c9b8a9306ed1474ecaddcd5479c293", + "sha256:27b4035013f1ea49c6c0b42d983133b136637a527e48c132d368eb19bf1ac6aa", + "sha256:3a23092a992e61c3a6a70f350a56db7197242f3490da9c87b500f389b2d01eef", + "sha256:3ad692bc7792be8c32918c699638b660c0de078a6cbe464c46e1340dadb94c19", + "sha256:3ccceb50c611c433145502735e0370877cced72a6c70fd2410238bcbc7fe51d8", + "sha256:3d0f32ebfaa9c6011f8454994f86108c2eb9c79b8b7de00b36d558cadcedaa3d", + "sha256:3f92944efc564867bbf841c823c8b71bb0be75e06b8ce45c084b46411475a915", + "sha256:40bca549fdc929b470dd1dbfcb47b3295cb46a6d2c90e50588b0a1b3bd98f429", + "sha256:43babacef21c519bc6631c5fce2a61eccdfc011b4bcb9047255e9620732c8097", + "sha256:4566006aa44cb0d21b8ab53baf4b9c667a0ed23efe4aaad8c227bfba0bf15cbe", + "sha256:49f56e6ecc2503e7dbe233fa328b2be1a7797d31548e7a193237dcdf1ad0eee0", + "sha256:4c48a10d17571d1275701e14a601e36959ffada3add8cdbc9e5061a6e3579a5d", + "sha256:4ea10a29aa5de67de02256a28d1bf53d21322295cb00bd2d57fcd19b850ebd99", + "sha256:511f0b034120cd1989932bf1e9081aa9fb00f1f949fbd2d9cab6264916ae89b1", + "sha256:51ddac60b96a42c15d24fbdc7a4bfcd02b5a29c047b7f8bf63d3f6f5a860949a", + "sha256:57d430f5fb63fea141ab71ca9c064e80de3a20b427ca2febcbfcef70ff0ce895", + "sha256:59137c0c6826bd56c710d1d2bda81553b5e6b7c84d5a676747d80caf0409ad94", + "sha256:5a03651352fc20975ee2a707cd2d74a386cd303cc688f407296064ad1e6d1562", + "sha256:5eb86c6acb498208e7663ca22dbe68ca2cf42ab5bf1c776670a50919a56e64ab", + "sha256:642d66b75eda909fd1112d35c53816d59789a4b38c141a96d62f50a3ef9b3360", + "sha256:6674b00b9756b0af620aa2a3346b01f8e2a3dc729d25617e1b89cf6af4a54eb1", + "sha256:668c265d90de8ae914f860d3eeb164534ba2e836811f91fecc7050416ee70aa7", + "sha256:66fac0c238ab9a2e72d026b5fb91cb902c146202bbd29a9a1a44e8db7b710b6f", + "sha256:6c107ea3cf2bd07199d66f156e3ea756d1b84dfd43b542b2d870b77868c98c03", + "sha256:6c889025f59884423428c261f212e04d438de865beda0b1e1babab85ef4c0f01", + "sha256:6cb8fdc044909e2078c248986f2fc76f911f72b51ea4a4fbbf472e01d14faa58", + "sha256:6e9be3ef84e2bb9710f3f777accce25556f4a71e15d2b73223788d528fcc2052", + "sha256:7f762a1a85a12cc3484f77eee7be87b10f8c50b0b787bb02f4e357403cad0c0e", + "sha256:83a696da8922314ff2aec02987eefb03784f473281d740bf9170181829133765", + "sha256:853853cbf7bf9408b404754b92512ebe3e3a83587503d766d23e6bf83d092ee6", + "sha256:8ad3fe0a3567c2f0f629d800409cd528cb6251da12e81a1f765e5c5345fd0137", + "sha256:8c6ed10c2497e5fedadf61e465b3ca12a19f96004c15dcffe4bd442ebadc2d85", + "sha256:8d5f400326840934e3507701f9f7269247f7c026d1b6cfd49477d2be0933cfca", + "sha256:927c589500f9f41e370b0125c12ac9e7d3a2fd166b89e9ee2828b3dda20bfe6f", + "sha256:9a0aa47f94ea9a0b39dd30850b0adf2e1cd32a8b4f9c7aa443d852aacf9ca214", + "sha256:9b37a7ba223b2f26122c148bb8d09a9ff312afca998c48c725ff5a0a632145f7", + "sha256:9c873345680c1b87f1e09e0eaf8cf6c891b9851d8b4d3645e7efe2ec20a20cc7", + "sha256:9d09869f2c5a6f2d9df50ce3064b3391d3ecb6dced708ad64467b9e4f2c9bef3", + "sha256:9d353c4cfda586db2a176ce42c88f2fc31ec25e50212650c89fdd0f560ee507b", + "sha256:a1e3014a625bcf107fbf38eece0e47fa0190e52e45dc6eee5a8265ddc6dc5ea7", + "sha256:a3b9bec9579a15fb3ca2d9878deae789df72f2b0fdaf90ad49ee389cad5edab6", + "sha256:ab03a90b305d2588e8352168e8c5a1520b721d2d367f31e9332c4235b30b8994", + "sha256:aff06b2cac3ef4616e26ba17a9c250c1fe9dd8a5d907d0193f84c499b1b6e6a9", + "sha256:b3cab0e06143768499384a8a5efb9c4dc53e19382952859e4802f294214f36ec", + "sha256:b4a21f71885aa2744719459951819e7bf5a906a6448a6b2bbce8e9cc9f2c8128", + "sha256:b6d45d9b699ecbac6c7bd8e0a2609767491540403610962968d258fd6405c17c", + "sha256:be6dd5d52b73018b21adc1c5d28ac0c68184a64769052dfeb0c5d9998e7f56a2", + "sha256:c550a56bf209a3d987d5a975cdf2063b3389a5d16caf29db4bdddeae49f22078", + "sha256:c76c635fabf542bb78524905718c39f736a98e5ab25b23ec6d4abede1a85a6a3", + "sha256:c81818595eff6e92535ff32825f31c116f867f64ff8cdf6562cd1d6b2e1e8f3e", + "sha256:cfb92d49dbb95ec7a07511bc9efb0faff8fe24ef3805662b8d6808ba8409a71a", + "sha256:d23bcd6c8eaa6324fe109d8cac01b41fe9a54b8c498af9ce464c1aeeb99903d6", + "sha256:d5b1dc0e708fad9f92c296ab2f948af403bf201db8fb2eb4c8179db143732e49", + "sha256:d78f30cbe8b2ce770160d3c08cff01b2ae9306fe66ce899b73f0409dc1846c1b", + "sha256:d8f57c4461cd24fda22493109c45b3980863c58a25b8bec885ca8bea6b8d4b28", + "sha256:d9792dff410f266051025ecfaa927078b94cc7478954b06796a9756ccc7e14a9", + "sha256:e7941bbcfdded9c26b0bf720cb7e6fd803d95a55d2c14b4bd1f6a2772230c586", + "sha256:ebe684d7d26239e23d102a2bad2a358dedf18e462e8808778703427d1f584400", + "sha256:ec8c8900dc5c83650a63dd48c4d1d245343f904c4b64b48798c67a3767d7e165", + "sha256:f564bf68404144ea6b87a78a3f910cc8de216c6b12a4cf0b27718bf4ec38d303", + "sha256:fd7ac678b92b29ba630d8c842d8ad6c555abda1b9ef044d6cc092dacbfc9719d" + ], + "version": "==0.21.0" }, "websockets": { "hashes": [ - "sha256:01f5567d9cf6f502d655151645d4e8b72b453413d3819d2b6f1185abc23e82dd", - "sha256:03aae4edc0b1c68498f41a6772d80ac7c1e33c06c6ffa2ac1c27a07653e79d6f", - "sha256:0ac56b661e60edd453585f4bd68eb6a29ae25b5184fd5ba51e97652580458998", - "sha256:0ee68fe502f9031f19d495dae2c268830df2760c0524cbac5d759921ba8c8e82", - "sha256:1553cb82942b2a74dd9b15a018dce645d4e68674de2ca31ff13ebc2d9f283788", - "sha256:1a073fc9ab1c8aff37c99f11f1641e16da517770e31a37265d2755282a5d28aa", - "sha256:1d2256283fa4b7f4c7d7d3e84dc2ece74d341bce57d5b9bf385df109c2a1a82f", - "sha256:1d5023a4b6a5b183dc838808087033ec5df77580485fc533e7dab2567851b0a4", - "sha256:1fdf26fa8a6a592f8f9235285b8affa72748dc12e964a5518c6c5e8f916716f7", - "sha256:2529338a6ff0eb0b50c7be33dc3d0e456381157a31eefc561771ee431134a97f", - "sha256:279e5de4671e79a9ac877427f4ac4ce93751b8823f276b681d04b2156713b9dd", - "sha256:2d903ad4419f5b472de90cd2d40384573b25da71e33519a67797de17ef849b69", - "sha256:332d126167ddddec94597c2365537baf9ff62dfcc9db4266f263d455f2f031cb", - "sha256:34fd59a4ac42dff6d4681d8843217137f6bc85ed29722f2f7222bd619d15e95b", - "sha256:3580dd9c1ad0701169e4d6fc41e878ffe05e6bdcaf3c412f9d559389d0c9e016", - "sha256:3ccc8a0c387629aec40f2fc9fdcb4b9d5431954f934da3eaf16cdc94f67dbfac", - "sha256:41f696ba95cd92dc047e46b41b26dd24518384749ed0d99bea0a941ca87404c4", - "sha256:42cc5452a54a8e46a032521d7365da775823e21bfba2895fb7b77633cce031bb", - "sha256:4841ed00f1026dfbced6fca7d963c4e7043aa832648671b5138008dc5a8f6d99", - "sha256:4b253869ea05a5a073ebfdcb5cb3b0266a57c3764cf6fe114e4cd90f4bfa5f5e", - "sha256:54c6e5b3d3a8936a4ab6870d46bdd6ec500ad62bde9e44462c32d18f1e9a8e54", - "sha256:619d9f06372b3a42bc29d0cd0354c9bb9fb39c2cbc1a9c5025b4538738dbffaf", - "sha256:6505c1b31274723ccaf5f515c1824a4ad2f0d191cec942666b3d0f3aa4cb4007", - "sha256:660e2d9068d2bedc0912af508f30bbeb505bbbf9774d98def45f68278cea20d3", - "sha256:6681ba9e7f8f3b19440921e99efbb40fc89f26cd71bf539e45d8c8a25c976dc6", - "sha256:68b977f21ce443d6d378dbd5ca38621755f2063d6fdb3335bda981d552cfff86", - "sha256:69269f3a0b472e91125b503d3c0b3566bda26da0a3261c49f0027eb6075086d1", - "sha256:6f1a3f10f836fab6ca6efa97bb952300b20ae56b409414ca85bff2ad241d2a61", - "sha256:7622a89d696fc87af8e8d280d9b421db5133ef5b29d3f7a1ce9f1a7bf7fcfa11", - "sha256:777354ee16f02f643a4c7f2b3eff8027a33c9861edc691a2003531f5da4f6bc8", - "sha256:84d27a4832cc1a0ee07cdcf2b0629a8a72db73f4cf6de6f0904f6661227f256f", - "sha256:8531fdcad636d82c517b26a448dcfe62f720e1922b33c81ce695d0edb91eb931", - "sha256:86d2a77fd490ae3ff6fae1c6ceaecad063d3cc2320b44377efdde79880e11526", - "sha256:88fc51d9a26b10fc331be344f1781224a375b78488fc343620184e95a4b27016", - "sha256:8a34e13a62a59c871064dfd8ffb150867e54291e46d4a7cf11d02c94a5275bae", - "sha256:8c82f11964f010053e13daafdc7154ce7385ecc538989a354ccc7067fd7028fd", - "sha256:92b2065d642bf8c0a82d59e59053dd2fdde64d4ed44efe4870fa816c1232647b", - "sha256:97b52894d948d2f6ea480171a27122d77af14ced35f62e5c892ca2fae9344311", - "sha256:9d9acd80072abcc98bd2c86c3c9cd4ac2347b5a5a0cae7ed5c0ee5675f86d9af", - "sha256:9f59a3c656fef341a99e3d63189852be7084c0e54b75734cde571182c087b152", - "sha256:aa5003845cdd21ac0dc6c9bf661c5beddd01116f6eb9eb3c8e272353d45b3288", - "sha256:b16fff62b45eccb9c7abb18e60e7e446998093cdcb50fed33134b9b6878836de", - "sha256:b30c6590146e53149f04e85a6e4fcae068df4289e31e4aee1fdf56a0dead8f97", - "sha256:b58cbf0697721120866820b89f93659abc31c1e876bf20d0b3d03cef14faf84d", - "sha256:b67c6f5e5a401fc56394f191f00f9b3811fe843ee93f4a70df3c389d1adf857d", - "sha256:bceab846bac555aff6427d060f2fcfff71042dba6f5fca7dc4f75cac815e57ca", - "sha256:bee9fcb41db2a23bed96c6b6ead6489702c12334ea20a297aa095ce6d31370d0", - "sha256:c114e8da9b475739dde229fd3bc6b05a6537a88a578358bc8eb29b4030fac9c9", - "sha256:c1f0524f203e3bd35149f12157438f406eff2e4fb30f71221c8a5eceb3617b6b", - "sha256:c792ea4eabc0159535608fc5658a74d1a81020eb35195dd63214dcf07556f67e", - "sha256:c7f3cb904cce8e1be667c7e6fef4516b98d1a6a0635a58a57528d577ac18a128", - "sha256:d67ac60a307f760c6e65dad586f556dde58e683fab03323221a4e530ead6f74d", - "sha256:dcacf2c7a6c3a84e720d1bb2b543c675bf6c40e460300b628bab1b1efc7c034c", - "sha256:de36fe9c02995c7e6ae6efe2e205816f5f00c22fd1fbf343d4d18c3d5ceac2f5", - "sha256:def07915168ac8f7853812cc593c71185a16216e9e4fa886358a17ed0fd9fcf6", - "sha256:df41b9bc27c2c25b486bae7cf42fccdc52ff181c8c387bfd026624a491c2671b", - "sha256:e052b8467dd07d4943936009f46ae5ce7b908ddcac3fda581656b1b19c083d9b", - "sha256:e063b1865974611313a3849d43f2c3f5368093691349cf3c7c8f8f75ad7cb280", - "sha256:e1459677e5d12be8bbc7584c35b992eea142911a6236a3278b9b5ce3326f282c", - "sha256:e1a99a7a71631f0efe727c10edfba09ea6bee4166a6f9c19aafb6c0b5917d09c", - "sha256:e590228200fcfc7e9109509e4d9125eace2042fd52b595dd22bbc34bb282307f", - "sha256:e6316827e3e79b7b8e7d8e3b08f4e331af91a48e794d5d8b099928b6f0b85f20", - "sha256:e7837cb169eca3b3ae94cc5787c4fed99eef74c0ab9506756eea335e0d6f3ed8", - "sha256:e848f46a58b9fcf3d06061d17be388caf70ea5b8cc3466251963c8345e13f7eb", - "sha256:ed058398f55163a79bb9f06a90ef9ccc063b204bb346c4de78efc5d15abfe602", - "sha256:f2e58f2c36cc52d41f2659e4c0cbf7353e28c8c9e63e30d8c6d3494dc9fdedcf", - "sha256:f467ba0050b7de85016b43f5a22b46383ef004c4f672148a8abf32bc999a87f0", - "sha256:f61bdb1df43dc9c131791fbc2355535f9024b9a04398d3bd0684fc16ab07df74", - "sha256:fb06eea71a00a7af0ae6aefbb932fb8a7df3cb390cc217d51a9ad7343de1b8d0", - "sha256:ffd7dcaf744f25f82190856bc26ed81721508fc5cbf2a330751e135ff1283564" - ], - "version": "==11.0.3" + "sha256:00700340c6c7ab788f176d118775202aadea7602c5cc6be6ae127761c16d6b0b", + "sha256:0bee75f400895aef54157b36ed6d3b308fcab62e5260703add87f44cee9c82a6", + "sha256:0e6e2711d5a8e6e482cacb927a49a3d432345dfe7dea8ace7b5790df5932e4df", + "sha256:12743ab88ab2af1d17dd4acb4645677cb7063ef4db93abffbf164218a5d54c6b", + "sha256:1a9d160fd080c6285e202327aba140fc9a0d910b09e423afff4ae5cbbf1c7205", + "sha256:1bf386089178ea69d720f8db6199a0504a406209a0fc23e603b27b300fdd6892", + "sha256:1df2fbd2c8a98d38a66f5238484405b8d1d16f929bb7a33ed73e4801222a6f53", + "sha256:1e4b3f8ea6a9cfa8be8484c9221ec0257508e3a1ec43c36acdefb2a9c3b00aa2", + "sha256:1f38a7b376117ef7aff996e737583172bdf535932c9ca021746573bce40165ed", + "sha256:23509452b3bc38e3a057382c2e941d5ac2e01e251acce7adc74011d7d8de434c", + "sha256:248d8e2446e13c1d4326e0a6a4e9629cb13a11195051a73acf414812700badbd", + "sha256:25eb766c8ad27da0f79420b2af4b85d29914ba0edf69f547cc4f06ca6f1d403b", + "sha256:27a5e9964ef509016759f2ef3f2c1e13f403725a5e6a1775555994966a66e931", + "sha256:2c71bd45a777433dd9113847af751aae36e448bc6b8c361a566cb043eda6ec30", + "sha256:2cb388a5bfb56df4d9a406783b7f9dbefb888c09b71629351cc6b036e9259370", + "sha256:2d225bb6886591b1746b17c0573e29804619c8f755b5598d875bb4235ea639be", + "sha256:2e5fc14ec6ea568200ea4ef46545073da81900a2b67b3e666f04adf53ad452ec", + "sha256:363f57ca8bc8576195d0540c648aa58ac18cf85b76ad5202b9f976918f4219cf", + "sha256:3c6cc1360c10c17463aadd29dd3af332d4a1adaa8796f6b0e9f9df1fdb0bad62", + "sha256:3d829f975fc2e527a3ef2f9c8f25e553eb7bc779c6665e8e1d52aa22800bb38b", + "sha256:3e3aa8c468af01d70332a382350ee95f6986db479ce7af14d5e81ec52aa2b402", + "sha256:3f61726cae9f65b872502ff3c1496abc93ffbe31b278455c418492016e2afc8f", + "sha256:423fc1ed29f7512fceb727e2d2aecb952c46aa34895e9ed96071821309951123", + "sha256:46e71dbbd12850224243f5d2aeec90f0aaa0f2dde5aeeb8fc8df21e04d99eff9", + "sha256:4d87be612cbef86f994178d5186add3d94e9f31cc3cb499a0482b866ec477603", + "sha256:5693ef74233122f8ebab026817b1b37fe25c411ecfca084b29bc7d6efc548f45", + "sha256:5aa9348186d79a5f232115ed3fa9020eab66d6c3437d72f9d2c8ac0c6858c558", + "sha256:5d873c7de42dea355d73f170be0f23788cf3fa9f7bed718fd2830eefedce01b4", + "sha256:5f6ffe2c6598f7f7207eef9a1228b6f5c818f9f4d53ee920aacd35cec8110438", + "sha256:604428d1b87edbf02b233e2c207d7d528460fa978f9e391bd8aaf9c8311de137", + "sha256:6350b14a40c95ddd53e775dbdbbbc59b124a5c8ecd6fbb09c2e52029f7a9f480", + "sha256:6e2df67b8014767d0f785baa98393725739287684b9f8d8a1001eb2839031447", + "sha256:6e96f5ed1b83a8ddb07909b45bd94833b0710f738115751cdaa9da1fb0cb66e8", + "sha256:6e9e7db18b4539a29cc5ad8c8b252738a30e2b13f033c2d6e9d0549b45841c04", + "sha256:70ec754cc2a769bcd218ed8d7209055667b30860ffecb8633a834dde27d6307c", + "sha256:7b645f491f3c48d3f8a00d1fce07445fab7347fec54a3e65f0725d730d5b99cb", + "sha256:7fa3d25e81bfe6a89718e9791128398a50dec6d57faf23770787ff441d851967", + "sha256:81df9cbcbb6c260de1e007e58c011bfebe2dafc8435107b0537f393dd38c8b1b", + "sha256:8572132c7be52632201a35f5e08348137f658e5ffd21f51f94572ca6c05ea81d", + "sha256:87b4aafed34653e465eb77b7c93ef058516cb5acf3eb21e42f33928616172def", + "sha256:8e332c210b14b57904869ca9f9bf4ca32f5427a03eeb625da9b616c85a3a506c", + "sha256:9893d1aa45a7f8b3bc4510f6ccf8db8c3b62120917af15e3de247f0780294b92", + "sha256:9edf3fc590cc2ec20dc9d7a45108b5bbaf21c0d89f9fd3fd1685e223771dc0b2", + "sha256:9fdf06fd06c32205a07e47328ab49c40fc1407cdec801d698a7c41167ea45113", + "sha256:a02413bc474feda2849c59ed2dfb2cddb4cd3d2f03a2fedec51d6e959d9b608b", + "sha256:a1d9697f3337a89691e3bd8dc56dea45a6f6d975f92e7d5f773bc715c15dde28", + "sha256:a571f035a47212288e3b3519944f6bf4ac7bc7553243e41eac50dd48552b6df7", + "sha256:ab3d732ad50a4fbd04a4490ef08acd0517b6ae6b77eb967251f4c263011a990d", + "sha256:ae0a5da8f35a5be197f328d4727dbcfafa53d1824fac3d96cdd3a642fe09394f", + "sha256:b067cb952ce8bf40115f6c19f478dc71c5e719b7fbaa511359795dfd9d1a6468", + "sha256:b2ee7288b85959797970114deae81ab41b731f19ebcd3bd499ae9ca0e3f1d2c8", + "sha256:b81f90dcc6c85a9b7f29873beb56c94c85d6f0dac2ea8b60d995bd18bf3e2aae", + "sha256:ba0cab91b3956dfa9f512147860783a1829a8d905ee218a9837c18f683239611", + "sha256:baa386875b70cbd81798fa9f71be689c1bf484f65fd6fb08d051a0ee4e79924d", + "sha256:bbe6013f9f791944ed31ca08b077e26249309639313fff132bfbf3ba105673b9", + "sha256:bea88d71630c5900690fcb03161ab18f8f244805c59e2e0dc4ffadae0a7ee0ca", + "sha256:befe90632d66caaf72e8b2ed4d7f02b348913813c8b0a32fae1cc5fe3730902f", + "sha256:c3181df4583c4d3994d31fb235dc681d2aaad744fbdbf94c4802485ececdecf2", + "sha256:c4e37d36f0d19f0a4413d3e18c0d03d0c268ada2061868c1e6f5ab1a6d575077", + "sha256:c588f6abc13f78a67044c6b1273a99e1cf31038ad51815b3b016ce699f0d75c2", + "sha256:cbe83a6bbdf207ff0541de01e11904827540aa069293696dd528a6640bd6a5f6", + "sha256:d554236b2a2006e0ce16315c16eaa0d628dab009c33b63ea03f41c6107958374", + "sha256:dbcf72a37f0b3316e993e13ecf32f10c0e1259c28ffd0a85cee26e8549595fbc", + "sha256:dc284bbc8d7c78a6c69e0c7325ab46ee5e40bb4d50e494d8131a07ef47500e9e", + "sha256:dff6cdf35e31d1315790149fee351f9e52978130cef6c87c4b6c9b3baf78bc53", + "sha256:e469d01137942849cff40517c97a30a93ae79917752b34029f0ec72df6b46399", + "sha256:eb809e816916a3b210bed3c82fb88eaf16e8afcf9c115ebb2bacede1797d2547", + "sha256:ed2fcf7a07334c77fc8a230755c2209223a7cc44fc27597729b8ef5425aa61a3", + "sha256:f44069528d45a933997a6fef143030d8ca8042f0dfaad753e2906398290e2870", + "sha256:f764ba54e33daf20e167915edc443b6f88956f37fb606449b4a5b10ba42235a5", + "sha256:fc4e7fa5414512b481a2483775a8e8be7803a35b30ca805afa4998a84f9fd9e8", + "sha256:ffefa1374cd508d633646d51a8e9277763a9b78ae71324183693959cf94635a7" + ], + "version": "==12.0" }, "wheel": { "hashes": [ - "sha256:0c5ac5ff2afb79ac23ab82bab027a0be7b5dbcf2e54dc50efe4bf507de1f7985", - "sha256:75909db2664838d015e3d9139004ee16711748a52c8f336b52882266540215d8" + "sha256:177f9c9b0d45c47873b619f5b650346d632cdc35fb5e4d25058e09c9e581433d", + "sha256:c45be39f7882c9d34243236f2d63cbd58039e360f85d0913425fbd7ceea617a8" ], "markers": "python_version >= '3.7'", - "version": "==0.41.2" + "version": "==0.42.0" }, "wrapt": { "hashes": [ - "sha256:02fce1852f755f44f95af51f69d22e45080102e9d00258053b79367d07af39c0", - "sha256:077ff0d1f9d9e4ce6476c1a924a3332452c1406e59d90a2cf24aeb29eeac9420", - "sha256:078e2a1a86544e644a68422f881c48b84fef6d18f8c7a957ffd3f2e0a74a0d4a", - "sha256:0970ddb69bba00670e58955f8019bec4a42d1785db3faa043c33d81de2bf843c", - "sha256:1286eb30261894e4c70d124d44b7fd07825340869945c79d05bda53a40caa079", - "sha256:21f6d9a0d5b3a207cdf7acf8e58d7d13d463e639f0c7e01d82cdb671e6cb7923", - "sha256:230ae493696a371f1dbffaad3dafbb742a4d27a0afd2b1aecebe52b740167e7f", - "sha256:26458da5653aa5b3d8dc8b24192f574a58984c749401f98fff994d41d3f08da1", - "sha256:2cf56d0e237280baed46f0b5316661da892565ff58309d4d2ed7dba763d984b8", - "sha256:2e51de54d4fb8fb50d6ee8327f9828306a959ae394d3e01a1ba8b2f937747d86", - "sha256:2fbfbca668dd15b744418265a9607baa970c347eefd0db6a518aaf0cfbd153c0", - "sha256:38adf7198f8f154502883242f9fe7333ab05a5b02de7d83aa2d88ea621f13364", - "sha256:3a8564f283394634a7a7054b7983e47dbf39c07712d7b177b37e03f2467a024e", - "sha256:3abbe948c3cbde2689370a262a8d04e32ec2dd4f27103669a45c6929bcdbfe7c", - "sha256:3bbe623731d03b186b3d6b0d6f51865bf598587c38d6f7b0be2e27414f7f214e", - "sha256:40737a081d7497efea35ab9304b829b857f21558acfc7b3272f908d33b0d9d4c", - "sha256:41d07d029dd4157ae27beab04d22b8e261eddfc6ecd64ff7000b10dc8b3a5727", - "sha256:46ed616d5fb42f98630ed70c3529541408166c22cdfd4540b88d5f21006b0eff", - "sha256:493d389a2b63c88ad56cdc35d0fa5752daac56ca755805b1b0c530f785767d5e", - "sha256:4ff0d20f2e670800d3ed2b220d40984162089a6e2c9646fdb09b85e6f9a8fc29", - "sha256:54accd4b8bc202966bafafd16e69da9d5640ff92389d33d28555c5fd4f25ccb7", - "sha256:56374914b132c702aa9aa9959c550004b8847148f95e1b824772d453ac204a72", - "sha256:578383d740457fa790fdf85e6d346fda1416a40549fe8db08e5e9bd281c6a475", - "sha256:58d7a75d731e8c63614222bcb21dd992b4ab01a399f1f09dd82af17bbfc2368a", - "sha256:5c5aa28df055697d7c37d2099a7bc09f559d5053c3349b1ad0c39000e611d317", - "sha256:5fc8e02f5984a55d2c653f5fea93531e9836abbd84342c1d1e17abc4a15084c2", - "sha256:63424c681923b9f3bfbc5e3205aafe790904053d42ddcc08542181a30a7a51bd", - "sha256:64b1df0f83706b4ef4cfb4fb0e4c2669100fd7ecacfb59e091fad300d4e04640", - "sha256:74934ebd71950e3db69960a7da29204f89624dde411afbfb3b4858c1409b1e98", - "sha256:75669d77bb2c071333417617a235324a1618dba66f82a750362eccbe5b61d248", - "sha256:75760a47c06b5974aa5e01949bf7e66d2af4d08cb8c1d6516af5e39595397f5e", - "sha256:76407ab327158c510f44ded207e2f76b657303e17cb7a572ffe2f5a8a48aa04d", - "sha256:76e9c727a874b4856d11a32fb0b389afc61ce8aaf281ada613713ddeadd1cfec", - "sha256:77d4c1b881076c3ba173484dfa53d3582c1c8ff1f914c6461ab70c8428b796c1", - "sha256:780c82a41dc493b62fc5884fb1d3a3b81106642c5c5c78d6a0d4cbe96d62ba7e", - "sha256:7dc0713bf81287a00516ef43137273b23ee414fe41a3c14be10dd95ed98a2df9", - "sha256:7eebcdbe3677e58dd4c0e03b4f2cfa346ed4049687d839adad68cc38bb559c92", - "sha256:896689fddba4f23ef7c718279e42f8834041a21342d95e56922e1c10c0cc7afb", - "sha256:96177eb5645b1c6985f5c11d03fc2dbda9ad24ec0f3a46dcce91445747e15094", - "sha256:96e25c8603a155559231c19c0349245eeb4ac0096fe3c1d0be5c47e075bd4f46", - "sha256:9d37ac69edc5614b90516807de32d08cb8e7b12260a285ee330955604ed9dd29", - "sha256:9ed6aa0726b9b60911f4aed8ec5b8dd7bf3491476015819f56473ffaef8959bd", - "sha256:a487f72a25904e2b4bbc0817ce7a8de94363bd7e79890510174da9d901c38705", - "sha256:a4cbb9ff5795cd66f0066bdf5947f170f5d63a9274f99bdbca02fd973adcf2a8", - "sha256:a74d56552ddbde46c246b5b89199cb3fd182f9c346c784e1a93e4dc3f5ec9975", - "sha256:a89ce3fd220ff144bd9d54da333ec0de0399b52c9ac3d2ce34b569cf1a5748fb", - "sha256:abd52a09d03adf9c763d706df707c343293d5d106aea53483e0ec8d9e310ad5e", - "sha256:abd8f36c99512755b8456047b7be10372fca271bf1467a1caa88db991e7c421b", - "sha256:af5bd9ccb188f6a5fdda9f1f09d9f4c86cc8a539bd48a0bfdc97723970348418", - "sha256:b02f21c1e2074943312d03d243ac4388319f2456576b2c6023041c4d57cd7019", - "sha256:b06fa97478a5f478fb05e1980980a7cdf2712015493b44d0c87606c1513ed5b1", - "sha256:b0724f05c396b0a4c36a3226c31648385deb6a65d8992644c12a4963c70326ba", - "sha256:b130fe77361d6771ecf5a219d8e0817d61b236b7d8b37cc045172e574ed219e6", - "sha256:b56d5519e470d3f2fe4aa7585f0632b060d532d0696c5bdfb5e8319e1d0f69a2", - "sha256:b67b819628e3b748fd3c2192c15fb951f549d0f47c0449af0764d7647302fda3", - "sha256:ba1711cda2d30634a7e452fc79eabcadaffedf241ff206db2ee93dd2c89a60e7", - "sha256:bbeccb1aa40ab88cd29e6c7d8585582c99548f55f9b2581dfc5ba68c59a85752", - "sha256:bd84395aab8e4d36263cd1b9308cd504f6cf713b7d6d3ce25ea55670baec5416", - "sha256:c99f4309f5145b93eca6e35ac1a988f0dc0a7ccf9ccdcd78d3c0adf57224e62f", - "sha256:ca1cccf838cd28d5a0883b342474c630ac48cac5df0ee6eacc9c7290f76b11c1", - "sha256:cd525e0e52a5ff16653a3fc9e3dd827981917d34996600bbc34c05d048ca35cc", - "sha256:cdb4f085756c96a3af04e6eca7f08b1345e94b53af8921b25c72f096e704e145", - "sha256:ce42618f67741d4697684e501ef02f29e758a123aa2d669e2d964ff734ee00ee", - "sha256:d06730c6aed78cee4126234cf2d071e01b44b915e725a6cb439a879ec9754a3a", - "sha256:d5fe3e099cf07d0fb5a1e23d399e5d4d1ca3e6dfcbe5c8570ccff3e9208274f7", - "sha256:d6bcbfc99f55655c3d93feb7ef3800bd5bbe963a755687cbf1f490a71fb7794b", - "sha256:d787272ed958a05b2c86311d3a4135d3c2aeea4fc655705f074130aa57d71653", - "sha256:e169e957c33576f47e21864cf3fc9ff47c223a4ebca8960079b8bd36cb014fd0", - "sha256:e20076a211cd6f9b44a6be58f7eeafa7ab5720eb796975d0c03f05b47d89eb90", - "sha256:e826aadda3cae59295b95343db8f3d965fb31059da7de01ee8d1c40a60398b29", - "sha256:eef4d64c650f33347c1f9266fa5ae001440b232ad9b98f1f43dfe7a79435c0a6", - "sha256:f2e69b3ed24544b0d3dbe2c5c0ba5153ce50dcebb576fdc4696d52aa22db6034", - "sha256:f87ec75864c37c4c6cb908d282e1969e79763e0d9becdfe9fe5473b7bb1e5f09", - "sha256:fbec11614dba0424ca72f4e8ba3c420dba07b4a7c206c8c8e4e73f2e98f4c559", - "sha256:fd69666217b62fa5d7c6aa88e507493a34dec4fa20c5bd925e4bc12fce586639" - ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", - "version": "==1.15.0" + "sha256:0d2691979e93d06a95a26257adb7bfd0c93818e89b1406f5a28f36e0d8c1e1fc", + "sha256:14d7dc606219cdd7405133c713f2c218d4252f2a469003f8c46bb92d5d095d81", + "sha256:1a5db485fe2de4403f13fafdc231b0dbae5eca4359232d2efc79025527375b09", + "sha256:1acd723ee2a8826f3d53910255643e33673e1d11db84ce5880675954183ec47e", + "sha256:1ca9b6085e4f866bd584fb135a041bfc32cab916e69f714a7d1d397f8c4891ca", + "sha256:1dd50a2696ff89f57bd8847647a1c363b687d3d796dc30d4dd4a9d1689a706f0", + "sha256:2076fad65c6736184e77d7d4729b63a6d1ae0b70da4868adeec40989858eb3fb", + "sha256:2a88e6010048489cda82b1326889ec075a8c856c2e6a256072b28eaee3ccf487", + "sha256:3ebf019be5c09d400cf7b024aa52b1f3aeebeff51550d007e92c3c1c4afc2a40", + "sha256:418abb18146475c310d7a6dc71143d6f7adec5b004ac9ce08dc7a34e2babdc5c", + "sha256:43aa59eadec7890d9958748db829df269f0368521ba6dc68cc172d5d03ed8060", + "sha256:44a2754372e32ab315734c6c73b24351d06e77ffff6ae27d2ecf14cf3d229202", + "sha256:490b0ee15c1a55be9c1bd8609b8cecd60e325f0575fc98f50058eae366e01f41", + "sha256:49aac49dc4782cb04f58986e81ea0b4768e4ff197b57324dcbd7699c5dfb40b9", + "sha256:5eb404d89131ec9b4f748fa5cfb5346802e5ee8836f57d516576e61f304f3b7b", + "sha256:5f15814a33e42b04e3de432e573aa557f9f0f56458745c2074952f564c50e664", + "sha256:5f370f952971e7d17c7d1ead40e49f32345a7f7a5373571ef44d800d06b1899d", + "sha256:66027d667efe95cc4fa945af59f92c5a02c6f5bb6012bff9e60542c74c75c362", + "sha256:66dfbaa7cfa3eb707bbfcd46dab2bc6207b005cbc9caa2199bcbc81d95071a00", + "sha256:685f568fa5e627e93f3b52fda002c7ed2fa1800b50ce51f6ed1d572d8ab3e7fc", + "sha256:6906c4100a8fcbf2fa735f6059214bb13b97f75b1a61777fcf6432121ef12ef1", + "sha256:6a42cd0cfa8ffc1915aef79cb4284f6383d8a3e9dcca70c445dcfdd639d51267", + "sha256:6dcfcffe73710be01d90cae08c3e548d90932d37b39ef83969ae135d36ef3956", + "sha256:6f6eac2360f2d543cc875a0e5efd413b6cbd483cb3ad7ebf888884a6e0d2e966", + "sha256:72554a23c78a8e7aa02abbd699d129eead8b147a23c56e08d08dfc29cfdddca1", + "sha256:73870c364c11f03ed072dda68ff7aea6d2a3a5c3fe250d917a429c7432e15228", + "sha256:73aa7d98215d39b8455f103de64391cb79dfcad601701a3aa0dddacf74911d72", + "sha256:75ea7d0ee2a15733684badb16de6794894ed9c55aa5e9903260922f0482e687d", + "sha256:7bd2d7ff69a2cac767fbf7a2b206add2e9a210e57947dd7ce03e25d03d2de292", + "sha256:807cc8543a477ab7422f1120a217054f958a66ef7314f76dd9e77d3f02cdccd0", + "sha256:8e9723528b9f787dc59168369e42ae1c3b0d3fadb2f1a71de14531d321ee05b0", + "sha256:9090c9e676d5236a6948330e83cb89969f433b1943a558968f659ead07cb3b36", + "sha256:9153ed35fc5e4fa3b2fe97bddaa7cbec0ed22412b85bcdaf54aeba92ea37428c", + "sha256:9159485323798c8dc530a224bd3ffcf76659319ccc7bbd52e01e73bd0241a0c5", + "sha256:941988b89b4fd6b41c3f0bfb20e92bd23746579736b7343283297c4c8cbae68f", + "sha256:94265b00870aa407bd0cbcfd536f17ecde43b94fb8d228560a1e9d3041462d73", + "sha256:98b5e1f498a8ca1858a1cdbffb023bfd954da4e3fa2c0cb5853d40014557248b", + "sha256:9b201ae332c3637a42f02d1045e1d0cccfdc41f1f2f801dafbaa7e9b4797bfc2", + "sha256:a0ea261ce52b5952bf669684a251a66df239ec6d441ccb59ec7afa882265d593", + "sha256:a33a747400b94b6d6b8a165e4480264a64a78c8a4c734b62136062e9a248dd39", + "sha256:a452f9ca3e3267cd4d0fcf2edd0d035b1934ac2bd7e0e57ac91ad6b95c0c6389", + "sha256:a86373cf37cd7764f2201b76496aba58a52e76dedfaa698ef9e9688bfd9e41cf", + "sha256:ac83a914ebaf589b69f7d0a1277602ff494e21f4c2f743313414378f8f50a4cf", + "sha256:aefbc4cb0a54f91af643660a0a150ce2c090d3652cf4052a5397fb2de549cd89", + "sha256:b3646eefa23daeba62643a58aac816945cadc0afaf21800a1421eeba5f6cfb9c", + "sha256:b47cfad9e9bbbed2339081f4e346c93ecd7ab504299403320bf85f7f85c7d46c", + "sha256:b935ae30c6e7400022b50f8d359c03ed233d45b725cfdd299462f41ee5ffba6f", + "sha256:bb2dee3874a500de01c93d5c71415fcaef1d858370d405824783e7a8ef5db440", + "sha256:bc57efac2da352a51cc4658878a68d2b1b67dbe9d33c36cb826ca449d80a8465", + "sha256:bf5703fdeb350e36885f2875d853ce13172ae281c56e509f4e6eca049bdfb136", + "sha256:c31f72b1b6624c9d863fc095da460802f43a7c6868c5dda140f51da24fd47d7b", + "sha256:c5cd603b575ebceca7da5a3a251e69561bec509e0b46e4993e1cac402b7247b8", + "sha256:d2efee35b4b0a347e0d99d28e884dfd82797852d62fcd7ebdeee26f3ceb72cf3", + "sha256:d462f28826f4657968ae51d2181a074dfe03c200d6131690b7d65d55b0f360f8", + "sha256:d5e49454f19ef621089e204f862388d29e6e8d8b162efce05208913dde5b9ad6", + "sha256:da4813f751142436b075ed7aa012a8778aa43a99f7b36afe9b742d3ed8bdc95e", + "sha256:db2e408d983b0e61e238cf579c09ef7020560441906ca990fe8412153e3b291f", + "sha256:db98ad84a55eb09b3c32a96c576476777e87c520a34e2519d3e59c44710c002c", + "sha256:dbed418ba5c3dce92619656802cc5355cb679e58d0d89b50f116e4a9d5a9603e", + "sha256:dcdba5c86e368442528f7060039eda390cc4091bfd1dca41e8046af7c910dda8", + "sha256:decbfa2f618fa8ed81c95ee18a387ff973143c656ef800c9f24fb7e9c16054e2", + "sha256:e4fdb9275308292e880dcbeb12546df7f3e0f96c6b41197e0cf37d2826359020", + "sha256:eb1b046be06b0fce7249f1d025cd359b4b80fc1c3e24ad9eca33e0dcdb2e4a35", + "sha256:eb6e651000a19c96f452c85132811d25e9264d836951022d6e81df2fff38337d", + "sha256:ed867c42c268f876097248e05b6117a65bcd1e63b779e916fe2e33cd6fd0d3c3", + "sha256:edfad1d29c73f9b863ebe7082ae9321374ccb10879eeabc84ba3b69f2579d537", + "sha256:f2058f813d4f2b5e3a9eb2eb3faf8f1d99b81c3e51aeda4b168406443e8ba809", + "sha256:f6b2d0c6703c988d334f297aa5df18c45e97b0af3679bb75059e0e0bd8b1069d", + "sha256:f8212564d49c50eb4565e502814f694e240c55551a5f1bc841d4fcaabb0a9b8a", + "sha256:ffa565331890b90056c01db69c0fe634a776f8019c143a5ae265f9c6bc4bd6d4" + ], + "markers": "python_version >= '3.6'", + "version": "==1.16.0" }, "yarl": { "hashes": [ - "sha256:04ab9d4b9f587c06d801c2abfe9317b77cdf996c65a90d5e84ecc45010823571", - "sha256:066c163aec9d3d073dc9ffe5dd3ad05069bcb03fcaab8d221290ba99f9f69ee3", - "sha256:13414591ff516e04fcdee8dc051c13fd3db13b673c7a4cb1350e6b2ad9639ad3", - "sha256:149ddea5abf329752ea5051b61bd6c1d979e13fbf122d3a1f9f0c8be6cb6f63c", - "sha256:159d81f22d7a43e6eabc36d7194cb53f2f15f498dbbfa8edc8a3239350f59fe7", - "sha256:1b1bba902cba32cdec51fca038fd53f8beee88b77efc373968d1ed021024cc04", - "sha256:22a94666751778629f1ec4280b08eb11815783c63f52092a5953faf73be24191", - "sha256:2a96c19c52ff442a808c105901d0bdfd2e28575b3d5f82e2f5fd67e20dc5f4ea", - "sha256:2b0738fb871812722a0ac2154be1f049c6223b9f6f22eec352996b69775b36d4", - "sha256:2c315df3293cd521033533d242d15eab26583360b58f7ee5d9565f15fee1bef4", - "sha256:32f1d071b3f362c80f1a7d322bfd7b2d11e33d2adf395cc1dd4df36c9c243095", - "sha256:3458a24e4ea3fd8930e934c129b676c27452e4ebda80fbe47b56d8c6c7a63a9e", - "sha256:38a3928ae37558bc1b559f67410df446d1fbfa87318b124bf5032c31e3447b74", - "sha256:3da8a678ca8b96c8606bbb8bfacd99a12ad5dd288bc6f7979baddd62f71c63ef", - "sha256:494053246b119b041960ddcd20fd76224149cfea8ed8777b687358727911dd33", - "sha256:50f33040f3836e912ed16d212f6cc1efb3231a8a60526a407aeb66c1c1956dde", - "sha256:52a25809fcbecfc63ac9ba0c0fb586f90837f5425edfd1ec9f3372b119585e45", - "sha256:53338749febd28935d55b41bf0bcc79d634881195a39f6b2f767870b72514caf", - "sha256:5415d5a4b080dc9612b1b63cba008db84e908b95848369aa1da3686ae27b6d2b", - "sha256:5610f80cf43b6202e2c33ba3ec2ee0a2884f8f423c8f4f62906731d876ef4fac", - "sha256:566185e8ebc0898b11f8026447eacd02e46226716229cea8db37496c8cdd26e0", - "sha256:56ff08ab5df8429901ebdc5d15941b59f6253393cb5da07b4170beefcf1b2528", - "sha256:59723a029760079b7d991a401386390c4be5bfec1e7dd83e25a6a0881859e716", - "sha256:5fcd436ea16fee7d4207c045b1e340020e58a2597301cfbcfdbe5abd2356c2fb", - "sha256:61016e7d582bc46a5378ffdd02cd0314fb8ba52f40f9cf4d9a5e7dbef88dee18", - "sha256:63c48f6cef34e6319a74c727376e95626f84ea091f92c0250a98e53e62c77c72", - "sha256:646d663eb2232d7909e6601f1a9107e66f9791f290a1b3dc7057818fe44fc2b6", - "sha256:662e6016409828ee910f5d9602a2729a8a57d74b163c89a837de3fea050c7582", - "sha256:674ca19cbee4a82c9f54e0d1eee28116e63bc6fd1e96c43031d11cbab8b2afd5", - "sha256:6a5883464143ab3ae9ba68daae8e7c5c95b969462bbe42e2464d60e7e2698368", - "sha256:6e7221580dc1db478464cfeef9b03b95c5852cc22894e418562997df0d074ccc", - "sha256:75df5ef94c3fdc393c6b19d80e6ef1ecc9ae2f4263c09cacb178d871c02a5ba9", - "sha256:783185c75c12a017cc345015ea359cc801c3b29a2966c2655cd12b233bf5a2be", - "sha256:822b30a0f22e588b32d3120f6d41e4ed021806418b4c9f0bc3048b8c8cb3f92a", - "sha256:8288d7cd28f8119b07dd49b7230d6b4562f9b61ee9a4ab02221060d21136be80", - "sha256:82aa6264b36c50acfb2424ad5ca537a2060ab6de158a5bd2a72a032cc75b9eb8", - "sha256:832b7e711027c114d79dffb92576acd1bd2decc467dec60e1cac96912602d0e6", - "sha256:838162460b3a08987546e881a2bfa573960bb559dfa739e7800ceeec92e64417", - "sha256:83fcc480d7549ccebe9415d96d9263e2d4226798c37ebd18c930fce43dfb9574", - "sha256:84e0b1599334b1e1478db01b756e55937d4614f8654311eb26012091be109d59", - "sha256:891c0e3ec5ec881541f6c5113d8df0315ce5440e244a716b95f2525b7b9f3608", - "sha256:8c2ad583743d16ddbdf6bb14b5cd76bf43b0d0006e918809d5d4ddf7bde8dd82", - "sha256:8c56986609b057b4839968ba901944af91b8e92f1725d1a2d77cbac6972b9ed1", - "sha256:8ea48e0a2f931064469bdabca50c2f578b565fc446f302a79ba6cc0ee7f384d3", - "sha256:8ec53a0ea2a80c5cd1ab397925f94bff59222aa3cf9c6da938ce05c9ec20428d", - "sha256:95d2ecefbcf4e744ea952d073c6922e72ee650ffc79028eb1e320e732898d7e8", - "sha256:9b3152f2f5677b997ae6c804b73da05a39daa6a9e85a512e0e6823d81cdad7cc", - "sha256:9bf345c3a4f5ba7f766430f97f9cc1320786f19584acc7086491f45524a551ac", - "sha256:a60347f234c2212a9f0361955007fcf4033a75bf600a33c88a0a8e91af77c0e8", - "sha256:a74dcbfe780e62f4b5a062714576f16c2f3493a0394e555ab141bf0d746bb955", - "sha256:a83503934c6273806aed765035716216cc9ab4e0364f7f066227e1aaea90b8d0", - "sha256:ac9bb4c5ce3975aeac288cfcb5061ce60e0d14d92209e780c93954076c7c4367", - "sha256:aff634b15beff8902d1f918012fc2a42e0dbae6f469fce134c8a0dc51ca423bb", - "sha256:b03917871bf859a81ccb180c9a2e6c1e04d2f6a51d953e6a5cdd70c93d4e5a2a", - "sha256:b124e2a6d223b65ba8768d5706d103280914d61f5cae3afbc50fc3dfcc016623", - "sha256:b25322201585c69abc7b0e89e72790469f7dad90d26754717f3310bfe30331c2", - "sha256:b7232f8dfbd225d57340e441d8caf8652a6acd06b389ea2d3222b8bc89cbfca6", - "sha256:b8cc1863402472f16c600e3e93d542b7e7542a540f95c30afd472e8e549fc3f7", - "sha256:b9a4e67ad7b646cd6f0938c7ebfd60e481b7410f574c560e455e938d2da8e0f4", - "sha256:be6b3fdec5c62f2a67cb3f8c6dbf56bbf3f61c0f046f84645cd1ca73532ea051", - "sha256:bf74d08542c3a9ea97bb8f343d4fcbd4d8f91bba5ec9d5d7f792dbe727f88938", - "sha256:c027a6e96ef77d401d8d5a5c8d6bc478e8042f1e448272e8d9752cb0aff8b5c8", - "sha256:c0c77533b5ed4bcc38e943178ccae29b9bcf48ffd1063f5821192f23a1bd27b9", - "sha256:c1012fa63eb6c032f3ce5d2171c267992ae0c00b9e164efe4d73db818465fac3", - "sha256:c3a53ba34a636a256d767c086ceb111358876e1fb6b50dfc4d3f4951d40133d5", - "sha256:d4e2c6d555e77b37288eaf45b8f60f0737c9efa3452c6c44626a5455aeb250b9", - "sha256:de119f56f3c5f0e2fb4dee508531a32b069a5f2c6e827b272d1e0ff5ac040333", - "sha256:e65610c5792870d45d7b68c677681376fcf9cc1c289f23e8e8b39c1485384185", - "sha256:e9fdc7ac0d42bc3ea78818557fab03af6181e076a2944f43c38684b4b6bed8e3", - "sha256:ee4afac41415d52d53a9833ebae7e32b344be72835bbb589018c9e938045a560", - "sha256:f364d3480bffd3aa566e886587eaca7c8c04d74f6e8933f3f2c996b7f09bee1b", - "sha256:f3b078dbe227f79be488ffcfc7a9edb3409d018e0952cf13f15fd6512847f3f7", - "sha256:f4e2d08f07a3d7d3e12549052eb5ad3eab1c349c53ac51c209a0e5991bbada78", - "sha256:f7a3d8146575e08c29ed1cd287068e6d02f1c7bdff8970db96683b9591b86ee7" + "sha256:008d3e808d03ef28542372d01057fd09168419cdc8f848efe2804f894ae03e51", + "sha256:03caa9507d3d3c83bca08650678e25364e1843b484f19986a527630ca376ecce", + "sha256:07574b007ee20e5c375a8fe4a0789fad26db905f9813be0f9fef5a68080de559", + "sha256:09efe4615ada057ba2d30df871d2f668af661e971dfeedf0c159927d48bbeff0", + "sha256:0d2454f0aef65ea81037759be5ca9947539667eecebca092733b2eb43c965a81", + "sha256:0e9d124c191d5b881060a9e5060627694c3bdd1fe24c5eecc8d5d7d0eb6faabc", + "sha256:18580f672e44ce1238b82f7fb87d727c4a131f3a9d33a5e0e82b793362bf18b4", + "sha256:1f23e4fe1e8794f74b6027d7cf19dc25f8b63af1483d91d595d4a07eca1fb26c", + "sha256:206a55215e6d05dbc6c98ce598a59e6fbd0c493e2de4ea6cc2f4934d5a18d130", + "sha256:23d32a2594cb5d565d358a92e151315d1b2268bc10f4610d098f96b147370136", + "sha256:26a1dc6285e03f3cc9e839a2da83bcbf31dcb0d004c72d0730e755b33466c30e", + "sha256:29e0f83f37610f173eb7e7b5562dd71467993495e568e708d99e9d1944f561ec", + "sha256:2b134fd795e2322b7684155b7855cc99409d10b2e408056db2b93b51a52accc7", + "sha256:2d47552b6e52c3319fede1b60b3de120fe83bde9b7bddad11a69fb0af7db32f1", + "sha256:357495293086c5b6d34ca9616a43d329317feab7917518bc97a08f9e55648455", + "sha256:35a2b9396879ce32754bd457d31a51ff0a9d426fd9e0e3c33394bf4b9036b099", + "sha256:3777ce5536d17989c91696db1d459574e9a9bd37660ea7ee4d3344579bb6f129", + "sha256:3986b6f41ad22988e53d5778f91855dc0399b043fc8946d4f2e68af22ee9ff10", + "sha256:44d8ffbb9c06e5a7f529f38f53eda23e50d1ed33c6c869e01481d3fafa6b8142", + "sha256:49a180c2e0743d5d6e0b4d1a9e5f633c62eca3f8a86ba5dd3c471060e352ca98", + "sha256:4aa9741085f635934f3a2583e16fcf62ba835719a8b2b28fb2917bb0537c1dfa", + "sha256:4b21516d181cd77ebd06ce160ef8cc2a5e9ad35fb1c5930882baff5ac865eee7", + "sha256:4b3c1ffe10069f655ea2d731808e76e0f452fc6c749bea04781daf18e6039525", + "sha256:4c7d56b293cc071e82532f70adcbd8b61909eec973ae9d2d1f9b233f3d943f2c", + "sha256:4e9035df8d0880b2f1c7f5031f33f69e071dfe72ee9310cfc76f7b605958ceb9", + "sha256:54525ae423d7b7a8ee81ba189f131054defdb122cde31ff17477951464c1691c", + "sha256:549d19c84c55d11687ddbd47eeb348a89df9cb30e1993f1b128f4685cd0ebbf8", + "sha256:54beabb809ffcacbd9d28ac57b0db46e42a6e341a030293fb3185c409e626b8b", + "sha256:566db86717cf8080b99b58b083b773a908ae40f06681e87e589a976faf8246bf", + "sha256:5a2e2433eb9344a163aced6a5f6c9222c0786e5a9e9cac2c89f0b28433f56e23", + "sha256:5aef935237d60a51a62b86249839b51345f47564208c6ee615ed2a40878dccdd", + "sha256:604f31d97fa493083ea21bd9b92c419012531c4e17ea6da0f65cacdcf5d0bd27", + "sha256:63b20738b5aac74e239622d2fe30df4fca4942a86e31bf47a81a0e94c14df94f", + "sha256:686a0c2f85f83463272ddffd4deb5e591c98aac1897d65e92319f729c320eece", + "sha256:6a962e04b8f91f8c4e5917e518d17958e3bdee71fd1d8b88cdce74dd0ebbf434", + "sha256:6ad6d10ed9b67a382b45f29ea028f92d25bc0bc1daf6c5b801b90b5aa70fb9ec", + "sha256:6f5cb257bc2ec58f437da2b37a8cd48f666db96d47b8a3115c29f316313654ff", + "sha256:6fe79f998a4052d79e1c30eeb7d6c1c1056ad33300f682465e1b4e9b5a188b78", + "sha256:7855426dfbddac81896b6e533ebefc0af2f132d4a47340cee6d22cac7190022d", + "sha256:7d5aaac37d19b2904bb9dfe12cdb08c8443e7ba7d2852894ad448d4b8f442863", + "sha256:801e9264d19643548651b9db361ce3287176671fb0117f96b5ac0ee1c3530d53", + "sha256:81eb57278deb6098a5b62e88ad8281b2ba09f2f1147c4767522353eaa6260b31", + "sha256:824d6c50492add5da9374875ce72db7a0733b29c2394890aef23d533106e2b15", + "sha256:8397a3817d7dcdd14bb266283cd1d6fc7264a48c186b986f32e86d86d35fbac5", + "sha256:848cd2a1df56ddbffeb375535fb62c9d1645dde33ca4d51341378b3f5954429b", + "sha256:84fc30f71689d7fc9168b92788abc977dc8cefa806909565fc2951d02f6b7d57", + "sha256:8619d6915b3b0b34420cf9b2bb6d81ef59d984cb0fde7544e9ece32b4b3043c3", + "sha256:8a854227cf581330ffa2c4824d96e52ee621dd571078a252c25e3a3b3d94a1b1", + "sha256:8be9e837ea9113676e5754b43b940b50cce76d9ed7d2461df1af39a8ee674d9f", + "sha256:928cecb0ef9d5a7946eb6ff58417ad2fe9375762382f1bf5c55e61645f2c43ad", + "sha256:957b4774373cf6f709359e5c8c4a0af9f6d7875db657adb0feaf8d6cb3c3964c", + "sha256:992f18e0ea248ee03b5a6e8b3b4738850ae7dbb172cc41c966462801cbf62cf7", + "sha256:9fc5fc1eeb029757349ad26bbc5880557389a03fa6ada41703db5e068881e5f2", + "sha256:a00862fb23195b6b8322f7d781b0dc1d82cb3bcac346d1e38689370cc1cc398b", + "sha256:a3a6ed1d525bfb91b3fc9b690c5a21bb52de28c018530ad85093cc488bee2dd2", + "sha256:a6327976c7c2f4ee6816eff196e25385ccc02cb81427952414a64811037bbc8b", + "sha256:a7409f968456111140c1c95301cadf071bd30a81cbd7ab829169fb9e3d72eae9", + "sha256:a825ec844298c791fd28ed14ed1bffc56a98d15b8c58a20e0e08c1f5f2bea1be", + "sha256:a8c1df72eb746f4136fe9a2e72b0c9dc1da1cbd23b5372f94b5820ff8ae30e0e", + "sha256:a9bd00dc3bc395a662900f33f74feb3e757429e545d831eef5bb280252631984", + "sha256:aa102d6d280a5455ad6a0f9e6d769989638718e938a6a0a2ff3f4a7ff8c62cc4", + "sha256:aaaea1e536f98754a6e5c56091baa1b6ce2f2700cc4a00b0d49eca8dea471074", + "sha256:ad4d7a90a92e528aadf4965d685c17dacff3df282db1121136c382dc0b6014d2", + "sha256:b8477c1ee4bd47c57d49621a062121c3023609f7a13b8a46953eb6c9716ca392", + "sha256:ba6f52cbc7809cd8d74604cce9c14868306ae4aa0282016b641c661f981a6e91", + "sha256:bac8d525a8dbc2a1507ec731d2867025d11ceadcb4dd421423a5d42c56818541", + "sha256:bef596fdaa8f26e3d66af846bbe77057237cb6e8efff8cd7cc8dff9a62278bbf", + "sha256:c0ec0ed476f77db9fb29bca17f0a8fcc7bc97ad4c6c1d8959c507decb22e8572", + "sha256:c38c9ddb6103ceae4e4498f9c08fac9b590c5c71b0370f98714768e22ac6fa66", + "sha256:c7224cab95645c7ab53791022ae77a4509472613e839dab722a72abe5a684575", + "sha256:c74018551e31269d56fab81a728f683667e7c28c04e807ba08f8c9e3bba32f14", + "sha256:ca06675212f94e7a610e85ca36948bb8fc023e458dd6c63ef71abfd482481aa5", + "sha256:d1d2532b340b692880261c15aee4dc94dd22ca5d61b9db9a8a361953d36410b1", + "sha256:d25039a474c4c72a5ad4b52495056f843a7ff07b632c1b92ea9043a3d9950f6e", + "sha256:d5ff2c858f5f6a42c2a8e751100f237c5e869cbde669a724f2062d4c4ef93551", + "sha256:d7d7f7de27b8944f1fee2c26a88b4dabc2409d2fea7a9ed3df79b67277644e17", + "sha256:d7eeb6d22331e2fd42fce928a81c697c9ee2d51400bd1a28803965883e13cead", + "sha256:d8a1c6c0be645c745a081c192e747c5de06e944a0d21245f4cf7c05e457c36e0", + "sha256:d8b889777de69897406c9fb0b76cdf2fd0f31267861ae7501d93003d55f54fbe", + "sha256:d9e09c9d74f4566e905a0b8fa668c58109f7624db96a2171f21747abc7524234", + "sha256:db8e58b9d79200c76956cefd14d5c90af54416ff5353c5bfd7cbe58818e26ef0", + "sha256:ddb2a5c08a4eaaba605340fdee8fc08e406c56617566d9643ad8bf6852778fc7", + "sha256:e0381b4ce23ff92f8170080c97678040fc5b08da85e9e292292aba67fdac6c34", + "sha256:e23a6d84d9d1738dbc6e38167776107e63307dfc8ad108e580548d1f2c587f42", + "sha256:e516dc8baf7b380e6c1c26792610230f37147bb754d6426462ab115a02944385", + "sha256:ea65804b5dc88dacd4a40279af0cdadcfe74b3e5b4c897aa0d81cf86927fee78", + "sha256:ec61d826d80fc293ed46c9dd26995921e3a82146feacd952ef0757236fc137be", + "sha256:ee04010f26d5102399bd17f8df8bc38dc7ccd7701dc77f4a68c5b8d733406958", + "sha256:f3bc6af6e2b8f92eced34ef6a96ffb248e863af20ef4fde9448cc8c9b858b749", + "sha256:f7d6b36dd2e029b6bcb8a13cf19664c7b8e19ab3a58e0fefbb5b8461447ed5ec" ], "markers": "python_version >= '3.7'", - "version": "==1.9.2" + "version": "==1.9.4" }, "zipp": { "hashes": [ @@ -1809,104 +2206,93 @@ "develop": { "aiohttp": { "hashes": [ - "sha256:002f23e6ea8d3dd8d149e569fd580c999232b5fbc601c48d55398fbc2e582e8c", - "sha256:01770d8c04bd8db568abb636c1fdd4f7140b284b8b3e0b4584f070180c1e5c62", - "sha256:0912ed87fee967940aacc5306d3aa8ba3a459fcd12add0b407081fbefc931e53", - "sha256:0cccd1de239afa866e4ce5c789b3032442f19c261c7d8a01183fd956b1935349", - "sha256:0fa375b3d34e71ccccf172cab401cd94a72de7a8cc01847a7b3386204093bb47", - "sha256:13da35c9ceb847732bf5c6c5781dcf4780e14392e5d3b3c689f6d22f8e15ae31", - "sha256:14cd52ccf40006c7a6cd34a0f8663734e5363fd981807173faf3a017e202fec9", - "sha256:16d330b3b9db87c3883e565340d292638a878236418b23cc8b9b11a054aaa887", - "sha256:1bed815f3dc3d915c5c1e556c397c8667826fbc1b935d95b0ad680787896a358", - "sha256:1d84166673694841d8953f0a8d0c90e1087739d24632fe86b1a08819168b4566", - "sha256:1f13f60d78224f0dace220d8ab4ef1dbc37115eeeab8c06804fec11bec2bbd07", - "sha256:229852e147f44da0241954fc6cb910ba074e597f06789c867cb7fb0621e0ba7a", - "sha256:253bf92b744b3170eb4c4ca2fa58f9c4b87aeb1df42f71d4e78815e6e8b73c9e", - "sha256:255ba9d6d5ff1a382bb9a578cd563605aa69bec845680e21c44afc2670607a95", - "sha256:2817b2f66ca82ee699acd90e05c95e79bbf1dc986abb62b61ec8aaf851e81c93", - "sha256:2b8d4e166e600dcfbff51919c7a3789ff6ca8b3ecce16e1d9c96d95dd569eb4c", - "sha256:2d5b785c792802e7b275c420d84f3397668e9d49ab1cb52bd916b3b3ffcf09ad", - "sha256:3161ce82ab85acd267c8f4b14aa226047a6bee1e4e6adb74b798bd42c6ae1f80", - "sha256:33164093be11fcef3ce2571a0dccd9041c9a93fa3bde86569d7b03120d276c6f", - "sha256:39a312d0e991690ccc1a61f1e9e42daa519dcc34ad03eb6f826d94c1190190dd", - "sha256:3b2ab182fc28e7a81f6c70bfbd829045d9480063f5ab06f6e601a3eddbbd49a0", - "sha256:3c68330a59506254b556b99a91857428cab98b2f84061260a67865f7f52899f5", - "sha256:3f0e27e5b733803333bb2371249f41cf42bae8884863e8e8965ec69bebe53132", - "sha256:3f5c7ce535a1d2429a634310e308fb7d718905487257060e5d4598e29dc17f0b", - "sha256:3fd194939b1f764d6bb05490987bfe104287bbf51b8d862261ccf66f48fb4096", - "sha256:41bdc2ba359032e36c0e9de5a3bd00d6fb7ea558a6ce6b70acedf0da86458321", - "sha256:41d55fc043954cddbbd82503d9cc3f4814a40bcef30b3569bc7b5e34130718c1", - "sha256:42c89579f82e49db436b69c938ab3e1559e5a4409eb8639eb4143989bc390f2f", - "sha256:45ad816b2c8e3b60b510f30dbd37fe74fd4a772248a52bb021f6fd65dff809b6", - "sha256:4ac39027011414dbd3d87f7edb31680e1f430834c8cef029f11c66dad0670aa5", - "sha256:4d4cbe4ffa9d05f46a28252efc5941e0462792930caa370a6efaf491f412bc66", - "sha256:4fcf3eabd3fd1a5e6092d1242295fa37d0354b2eb2077e6eb670accad78e40e1", - "sha256:5d791245a894be071d5ab04bbb4850534261a7d4fd363b094a7b9963e8cdbd31", - "sha256:6c43ecfef7deaf0617cee936836518e7424ee12cb709883f2c9a1adda63cc460", - "sha256:6c5f938d199a6fdbdc10bbb9447496561c3a9a565b43be564648d81e1102ac22", - "sha256:6e2f9cc8e5328f829f6e1fb74a0a3a939b14e67e80832975e01929e320386b34", - "sha256:713103a8bdde61d13490adf47171a1039fd880113981e55401a0f7b42c37d071", - "sha256:71783b0b6455ac8f34b5ec99d83e686892c50498d5d00b8e56d47f41b38fbe04", - "sha256:76b36b3124f0223903609944a3c8bf28a599b2cc0ce0be60b45211c8e9be97f8", - "sha256:7bc88fc494b1f0311d67f29fee6fd636606f4697e8cc793a2d912ac5b19aa38d", - "sha256:7ee912f7e78287516df155f69da575a0ba33b02dd7c1d6614dbc9463f43066e3", - "sha256:86f20cee0f0a317c76573b627b954c412ea766d6ada1a9fcf1b805763ae7feeb", - "sha256:89341b2c19fb5eac30c341133ae2cc3544d40d9b1892749cdd25892bbc6ac951", - "sha256:8a9b5a0606faca4f6cc0d338359d6fa137104c337f489cd135bb7fbdbccb1e39", - "sha256:8d399dade330c53b4106160f75f55407e9ae7505263ea86f2ccca6bfcbdb4921", - "sha256:8e31e9db1bee8b4f407b77fd2507337a0a80665ad7b6c749d08df595d88f1cf5", - "sha256:90c72ebb7cb3a08a7f40061079817133f502a160561d0675b0a6adf231382c92", - "sha256:918810ef188f84152af6b938254911055a72e0f935b5fbc4c1a4ed0b0584aed1", - "sha256:93c15c8e48e5e7b89d5cb4613479d144fda8344e2d886cf694fd36db4cc86865", - "sha256:96603a562b546632441926cd1293cfcb5b69f0b4159e6077f7c7dbdfb686af4d", - "sha256:99c5ac4ad492b4a19fc132306cd57075c28446ec2ed970973bbf036bcda1bcc6", - "sha256:9c19b26acdd08dd239e0d3669a3dddafd600902e37881f13fbd8a53943079dbc", - "sha256:9de50a199b7710fa2904be5a4a9b51af587ab24c8e540a7243ab737b45844543", - "sha256:9e2ee0ac5a1f5c7dd3197de309adfb99ac4617ff02b0603fd1e65b07dc772e4b", - "sha256:a2ece4af1f3c967a4390c284797ab595a9f1bc1130ef8b01828915a05a6ae684", - "sha256:a3628b6c7b880b181a3ae0a0683698513874df63783fd89de99b7b7539e3e8a8", - "sha256:ad1407db8f2f49329729564f71685557157bfa42b48f4b93e53721a16eb813ed", - "sha256:b04691bc6601ef47c88f0255043df6f570ada1a9ebef99c34bd0b72866c217ae", - "sha256:b0cf2a4501bff9330a8a5248b4ce951851e415bdcce9dc158e76cfd55e15085c", - "sha256:b2fe42e523be344124c6c8ef32a011444e869dc5f883c591ed87f84339de5976", - "sha256:b30e963f9e0d52c28f284d554a9469af073030030cef8693106d918b2ca92f54", - "sha256:bb54c54510e47a8c7c8e63454a6acc817519337b2b78606c4e840871a3e15349", - "sha256:bd111d7fc5591ddf377a408ed9067045259ff2770f37e2d94e6478d0f3fc0c17", - "sha256:bdf70bfe5a1414ba9afb9d49f0c912dc524cf60141102f3a11143ba3d291870f", - "sha256:ca80e1b90a05a4f476547f904992ae81eda5c2c85c66ee4195bb8f9c5fb47f28", - "sha256:caf486ac1e689dda3502567eb89ffe02876546599bbf915ec94b1fa424eeffd4", - "sha256:ccc360e87341ad47c777f5723f68adbb52b37ab450c8bc3ca9ca1f3e849e5fe2", - "sha256:d25036d161c4fe2225d1abff2bd52c34ed0b1099f02c208cd34d8c05729882f0", - "sha256:d52d5dc7c6682b720280f9d9db41d36ebe4791622c842e258c9206232251ab2b", - "sha256:d67f8baed00870aa390ea2590798766256f31dc5ed3ecc737debb6e97e2ede78", - "sha256:d76e8b13161a202d14c9584590c4df4d068c9567c99506497bdd67eaedf36403", - "sha256:d95fc1bf33a9a81469aa760617b5971331cdd74370d1214f0b3109272c0e1e3c", - "sha256:de6a1c9f6803b90e20869e6b99c2c18cef5cc691363954c93cb9adeb26d9f3ae", - "sha256:e1d8cb0b56b3587c5c01de3bf2f600f186da7e7b5f7353d1bf26a8ddca57f965", - "sha256:e2a988a0c673c2e12084f5e6ba3392d76c75ddb8ebc6c7e9ead68248101cd446", - "sha256:e3f1e3f1a1751bb62b4a1b7f4e435afcdade6c17a4fd9b9d43607cebd242924a", - "sha256:e6a00ffcc173e765e200ceefb06399ba09c06db97f401f920513a10c803604ca", - "sha256:e827d48cf802de06d9c935088c2924e3c7e7533377d66b6f31ed175c1620e05e", - "sha256:ebf3fd9f141700b510d4b190094db0ce37ac6361a6806c153c161dc6c041ccda", - "sha256:ec00c3305788e04bf6d29d42e504560e159ccaf0be30c09203b468a6c1ccd3b2", - "sha256:ec4fd86658c6a8964d75426517dc01cbf840bbf32d055ce64a9e63a40fd7b771", - "sha256:efd2fcf7e7b9d7ab16e6b7d54205beded0a9c8566cb30f09c1abe42b4e22bdcb", - "sha256:f0f03211fd14a6a0aed2997d4b1c013d49fb7b50eeb9ffdf5e51f23cfe2c77fa", - "sha256:f628dbf3c91e12f4d6c8b3f092069567d8eb17814aebba3d7d60c149391aee3a", - "sha256:f8ef51e459eb2ad8e7a66c1d6440c808485840ad55ecc3cafefadea47d1b1ba2", - "sha256:fc37e9aef10a696a5a4474802930079ccfc14d9f9c10b4662169671ff034b7df", - "sha256:fdee8405931b0615220e5ddf8cd7edd8592c606a8e4ca2a00704883c396e4479" + "sha256:02ab6006ec3c3463b528374c4cdce86434e7b89ad355e7bf29e2f16b46c7dd6f", + "sha256:04fa38875e53eb7e354ece1607b1d2fdee2d175ea4e4d745f6ec9f751fe20c7c", + "sha256:0b0a6a36ed7e164c6df1e18ee47afbd1990ce47cb428739d6c99aaabfaf1b3af", + "sha256:0d406b01a9f5a7e232d1b0d161b40c05275ffbcbd772dc18c1d5a570961a1ca4", + "sha256:0e49b08eafa4f5707ecfb321ab9592717a319e37938e301d462f79b4e860c32a", + "sha256:0e7ba7ff228c0d9a2cd66194e90f2bca6e0abca810b786901a569c0de082f489", + "sha256:11cb254e397a82efb1805d12561e80124928e04e9c4483587ce7390b3866d213", + "sha256:11ff168d752cb41e8492817e10fb4f85828f6a0142b9726a30c27c35a1835f01", + "sha256:176df045597e674fa950bf5ae536be85699e04cea68fa3a616cf75e413737eb5", + "sha256:219a16763dc0294842188ac8a12262b5671817042b35d45e44fd0a697d8c8361", + "sha256:22698f01ff5653fe66d16ffb7658f582a0ac084d7da1323e39fd9eab326a1f26", + "sha256:237533179d9747080bcaad4d02083ce295c0d2eab3e9e8ce103411a4312991a0", + "sha256:289ba9ae8e88d0ba16062ecf02dd730b34186ea3b1e7489046fc338bdc3361c4", + "sha256:2c59e0076ea31c08553e868cec02d22191c086f00b44610f8ab7363a11a5d9d8", + "sha256:2c9376e2b09895c8ca8b95362283365eb5c03bdc8428ade80a864160605715f1", + "sha256:3135713c5562731ee18f58d3ad1bf41e1d8883eb68b363f2ffde5b2ea4b84cc7", + "sha256:3b9c7426923bb7bd66d409da46c41e3fb40f5caf679da624439b9eba92043fa6", + "sha256:3c0266cd6f005e99f3f51e583012de2778e65af6b73860038b968a0a8888487a", + "sha256:41473de252e1797c2d2293804e389a6d6986ef37cbb4a25208de537ae32141dd", + "sha256:4831df72b053b1eed31eb00a2e1aff6896fb4485301d4ccb208cac264b648db4", + "sha256:49f0c1b3c2842556e5de35f122fc0f0b721334ceb6e78c3719693364d4af8499", + "sha256:4b4c452d0190c5a820d3f5c0f3cd8a28ace48c54053e24da9d6041bf81113183", + "sha256:4ee8caa925aebc1e64e98432d78ea8de67b2272252b0a931d2ac3bd876ad5544", + "sha256:500f1c59906cd142d452074f3811614be04819a38ae2b3239a48b82649c08821", + "sha256:5216b6082c624b55cfe79af5d538e499cd5f5b976820eac31951fb4325974501", + "sha256:54311eb54f3a0c45efb9ed0d0a8f43d1bc6060d773f6973efd90037a51cd0a3f", + "sha256:54631fb69a6e44b2ba522f7c22a6fb2667a02fd97d636048478db2fd8c4e98fe", + "sha256:565760d6812b8d78d416c3c7cfdf5362fbe0d0d25b82fed75d0d29e18d7fc30f", + "sha256:598db66eaf2e04aa0c8900a63b0101fdc5e6b8a7ddd805c56d86efb54eb66672", + "sha256:5c4fa235d534b3547184831c624c0b7c1e262cd1de847d95085ec94c16fddcd5", + "sha256:69985d50a2b6f709412d944ffb2e97d0be154ea90600b7a921f95a87d6f108a2", + "sha256:69da0f3ed3496808e8cbc5123a866c41c12c15baaaead96d256477edf168eb57", + "sha256:6c93b7c2e52061f0925c3382d5cb8980e40f91c989563d3d32ca280069fd6a87", + "sha256:70907533db712f7aa791effb38efa96f044ce3d4e850e2d7691abd759f4f0ae0", + "sha256:81b77f868814346662c96ab36b875d7814ebf82340d3284a31681085c051320f", + "sha256:82eefaf1a996060602f3cc1112d93ba8b201dbf5d8fd9611227de2003dddb3b7", + "sha256:85c3e3c9cb1d480e0b9a64c658cd66b3cfb8e721636ab8b0e746e2d79a7a9eed", + "sha256:8a22a34bc594d9d24621091d1b91511001a7eea91d6652ea495ce06e27381f70", + "sha256:8cef8710fb849d97c533f259103f09bac167a008d7131d7b2b0e3a33269185c0", + "sha256:8d44e7bf06b0c0a70a20f9100af9fcfd7f6d9d3913e37754c12d424179b4e48f", + "sha256:8d7f98fde213f74561be1d6d3fa353656197f75d4edfbb3d94c9eb9b0fc47f5d", + "sha256:8d8e4450e7fe24d86e86b23cc209e0023177b6d59502e33807b732d2deb6975f", + "sha256:8fc49a87ac269d4529da45871e2ffb6874e87779c3d0e2ccd813c0899221239d", + "sha256:90ec72d231169b4b8d6085be13023ece8fa9b1bb495e4398d847e25218e0f431", + "sha256:91c742ca59045dce7ba76cab6e223e41d2c70d79e82c284a96411f8645e2afff", + "sha256:9b05d33ff8e6b269e30a7957bd3244ffbce2a7a35a81b81c382629b80af1a8bf", + "sha256:9b05d5cbe9dafcdc733262c3a99ccf63d2f7ce02543620d2bd8db4d4f7a22f83", + "sha256:9c5857612c9813796960c00767645cb5da815af16dafb32d70c72a8390bbf690", + "sha256:a34086c5cc285be878622e0a6ab897a986a6e8bf5b67ecb377015f06ed316587", + "sha256:ab221850108a4a063c5b8a70f00dd7a1975e5a1713f87f4ab26a46e5feac5a0e", + "sha256:b796b44111f0cab6bbf66214186e44734b5baab949cb5fb56154142a92989aeb", + "sha256:b8c3a67eb87394386847d188996920f33b01b32155f0a94f36ca0e0c635bf3e3", + "sha256:bcb6532b9814ea7c5a6a3299747c49de30e84472fa72821b07f5a9818bce0f66", + "sha256:bcc0ea8d5b74a41b621ad4a13d96c36079c81628ccc0b30cfb1603e3dfa3a014", + "sha256:bea94403a21eb94c93386d559bce297381609153e418a3ffc7d6bf772f59cc35", + "sha256:bff7e2811814fa2271be95ab6e84c9436d027a0e59665de60edf44e529a42c1f", + "sha256:c72444d17777865734aa1a4d167794c34b63e5883abb90356a0364a28904e6c0", + "sha256:c7b5d5d64e2a14e35a9240b33b89389e0035e6de8dbb7ffa50d10d8b65c57449", + "sha256:c7e939f1ae428a86e4abbb9a7c4732bf4706048818dfd979e5e2839ce0159f23", + "sha256:c88a15f272a0ad3d7773cf3a37cc7b7d077cbfc8e331675cf1346e849d97a4e5", + "sha256:c9110c06eaaac7e1f5562caf481f18ccf8f6fdf4c3323feab28a93d34cc646bd", + "sha256:ca7ca5abfbfe8d39e653870fbe8d7710be7a857f8a8386fc9de1aae2e02ce7e4", + "sha256:cae4c0c2ca800c793cae07ef3d40794625471040a87e1ba392039639ad61ab5b", + "sha256:cdefe289681507187e375a5064c7599f52c40343a8701761c802c1853a504558", + "sha256:cf2a0ac0615842b849f40c4d7f304986a242f1e68286dbf3bd7a835e4f83acfd", + "sha256:cfeadf42840c1e870dc2042a232a8748e75a36b52d78968cda6736de55582766", + "sha256:d737e69d193dac7296365a6dcb73bbbf53bb760ab25a3727716bbd42022e8d7a", + "sha256:d7481f581251bb5558ba9f635db70908819caa221fc79ee52a7f58392778c636", + "sha256:df9cf74b9bc03d586fc53ba470828d7b77ce51b0582d1d0b5b2fb673c0baa32d", + "sha256:e1f80197f8b0b846a8d5cf7b7ec6084493950d0882cc5537fb7b96a69e3c8590", + "sha256:ecca113f19d5e74048c001934045a2b9368d77b0b17691d905af18bd1c21275e", + "sha256:ee2527134f95e106cc1653e9ac78846f3a2ec1004cf20ef4e02038035a74544d", + "sha256:f27fdaadce22f2ef950fc10dcdf8048407c3b42b73779e48a4e76b3c35bca26c", + "sha256:f694dc8a6a3112059258a725a4ebe9acac5fe62f11c77ac4dcf896edfa78ca28", + "sha256:f800164276eec54e0af5c99feb9494c295118fc10a11b997bbb1348ba1a52065", + "sha256:ffcd828e37dc219a72c9012ec44ad2e7e3066bec6ff3aaa19e7d435dbf4032ca" ], "index": "pypi", - "version": "==3.8.6" + "version": "==3.9.1" }, "aioresponses": { "hashes": [ - "sha256:1160486b5ea96fcae6170cf2bdef029b9d3a283b7dbeabb3d7f1182769bfb6b7", - "sha256:9b8c108b36354c04633bad0ea752b55d956a7602fe3e3234b939fc44af96f1d8" + "sha256:d2c26defbb9b440ea2685ec132e90700907fd10bcca3e85ec2f157219f0d26f7", + "sha256:f795d9dbda2d61774840e7e32f5366f45752d1adc1b74c9362afd017296c7ee1" ], "index": "pypi", - "version": "==0.7.4" + "version": "==0.7.6" }, "aiosignal": { "hashes": [ @@ -1937,7 +2323,7 @@ "sha256:4640d96be84d82d02ed59ea2b7105a0f7b33abe8703703cd0ab0bf87c427522f", "sha256:7405140ff1230c310e51dc27b3145b9092d659ce68ff733fb0cefe3ee42be028" ], - "markers": "python_version >= '3.7'", + "markers": "python_version < '3.11'", "version": "==4.0.3" }, "attrs": { @@ -1969,264 +2355,280 @@ }, "botocore": { "hashes": [ - "sha256:396459065dba4339eb4da4ec8b4e6599728eb89b7caaceea199e26f7d824a41c", - "sha256:6ac34a1d34aa3750e78b77b8596617e2bab938964694d651939dba2cbde2c12b" + "sha256:c744b90980786c610dd9ad9c50cf2cdde3f1c4634b954a33613f6f8a1865a1de", + "sha256:d22d29916905e5f0670b91f07688e92b2c4a2075f9a474d6edbe7d22040d8fbf" ], "markers": "python_version >= '3.7'", - "version": "==1.31.17" + "version": "==1.33.1" }, "botocore-stubs": { "hashes": [ - "sha256:2ce555e5dff2e91fc22bd67106534bf3e0593b838d87f8a49d3b8e87fa83a440", - "sha256:d30217d8f6a0888616a44c83150490c5fbc899550ffe1896a2cd15a2205fd648" + "sha256:c408265a12d97a467d58e0940d52323dda1faf4a02a07a4105d00e384a4e39c2", + "sha256:efa7e2e8ea9f4881b60703c7ddf5a4e64e66d6d03a20db046653235753b8d829" ], "markers": "python_version >= '3.7' and python_version < '4.0'", - "version": "==1.31.62" + "version": "==1.34.4" }, "certifi": { "hashes": [ - "sha256:539cc1d13202e33ca466e88b2807e29f4c13049d6d87031a3c110744495cb082", - "sha256:92d6037539857d8206b8f6ae472e8b77db8058fec5937a1ef3f54304089edbb9" + "sha256:9b469f3a900bf28dc19b8cfbf8019bf47f7fdd1a65a1d4ffb98fc14166beb4d1", + "sha256:e036ab49d5b79556f99cfc2d9320b34cfbe5be05c5871b51de9329f0603b0474" ], "markers": "python_version >= '3.6'", - "version": "==2023.7.22" + "version": "==2023.11.17" }, "charset-normalizer": { "hashes": [ - "sha256:02673e456dc5ab13659f85196c534dc596d4ef260e4d86e856c3b2773ce09843", - "sha256:02af06682e3590ab952599fbadac535ede5d60d78848e555aa58d0c0abbde786", - "sha256:03680bb39035fbcffe828eae9c3f8afc0428c91d38e7d61aa992ef7a59fb120e", - "sha256:0570d21da019941634a531444364f2482e8db0b3425fcd5ac0c36565a64142c8", - "sha256:09c77f964f351a7369cc343911e0df63e762e42bac24cd7d18525961c81754f4", - "sha256:0d3d5b7db9ed8a2b11a774db2bbea7ba1884430a205dbd54a32d61d7c2a190fa", - "sha256:1063da2c85b95f2d1a430f1c33b55c9c17ffaf5e612e10aeaad641c55a9e2b9d", - "sha256:12ebea541c44fdc88ccb794a13fe861cc5e35d64ed689513a5c03d05b53b7c82", - "sha256:153e7b6e724761741e0974fc4dcd406d35ba70b92bfe3fedcb497226c93b9da7", - "sha256:15b26ddf78d57f1d143bdf32e820fd8935d36abe8a25eb9ec0b5a71c82eb3895", - "sha256:1872d01ac8c618a8da634e232f24793883d6e456a66593135aeafe3784b0848d", - "sha256:187d18082694a29005ba2944c882344b6748d5be69e3a89bf3cc9d878e548d5a", - "sha256:1b2919306936ac6efb3aed1fbf81039f7087ddadb3160882a57ee2ff74fd2382", - "sha256:232ac332403e37e4a03d209a3f92ed9071f7d3dbda70e2a5e9cff1c4ba9f0678", - "sha256:23e8565ab7ff33218530bc817922fae827420f143479b753104ab801145b1d5b", - "sha256:24817cb02cbef7cd499f7c9a2735286b4782bd47a5b3516a0e84c50eab44b98e", - "sha256:249c6470a2b60935bafd1d1d13cd613f8cd8388d53461c67397ee6a0f5dce741", - "sha256:24a91a981f185721542a0b7c92e9054b7ab4fea0508a795846bc5b0abf8118d4", - "sha256:2502dd2a736c879c0f0d3e2161e74d9907231e25d35794584b1ca5284e43f596", - "sha256:250c9eb0f4600361dd80d46112213dff2286231d92d3e52af1e5a6083d10cad9", - "sha256:278c296c6f96fa686d74eb449ea1697f3c03dc28b75f873b65b5201806346a69", - "sha256:2935ffc78db9645cb2086c2f8f4cfd23d9b73cc0dc80334bc30aac6f03f68f8c", - "sha256:2f4a0033ce9a76e391542c182f0d48d084855b5fcba5010f707c8e8c34663d77", - "sha256:30a85aed0b864ac88309b7d94be09f6046c834ef60762a8833b660139cfbad13", - "sha256:380c4bde80bce25c6e4f77b19386f5ec9db230df9f2f2ac1e5ad7af2caa70459", - "sha256:3ae38d325b512f63f8da31f826e6cb6c367336f95e418137286ba362925c877e", - "sha256:3b447982ad46348c02cb90d230b75ac34e9886273df3a93eec0539308a6296d7", - "sha256:3debd1150027933210c2fc321527c2299118aa929c2f5a0a80ab6953e3bd1908", - "sha256:4162918ef3098851fcd8a628bf9b6a98d10c380725df9e04caf5ca6dd48c847a", - "sha256:468d2a840567b13a590e67dd276c570f8de00ed767ecc611994c301d0f8c014f", - "sha256:4cc152c5dd831641e995764f9f0b6589519f6f5123258ccaca8c6d34572fefa8", - "sha256:542da1178c1c6af8873e143910e2269add130a299c9106eef2594e15dae5e482", - "sha256:557b21a44ceac6c6b9773bc65aa1b4cc3e248a5ad2f5b914b91579a32e22204d", - "sha256:5707a746c6083a3a74b46b3a631d78d129edab06195a92a8ece755aac25a3f3d", - "sha256:588245972aca710b5b68802c8cad9edaa98589b1b42ad2b53accd6910dad3545", - "sha256:5adf257bd58c1b8632046bbe43ee38c04e1038e9d37de9c57a94d6bd6ce5da34", - "sha256:619d1c96099be5823db34fe89e2582b336b5b074a7f47f819d6b3a57ff7bdb86", - "sha256:63563193aec44bce707e0c5ca64ff69fa72ed7cf34ce6e11d5127555756fd2f6", - "sha256:67b8cc9574bb518ec76dc8e705d4c39ae78bb96237cb533edac149352c1f39fe", - "sha256:6a685067d05e46641d5d1623d7c7fdf15a357546cbb2f71b0ebde91b175ffc3e", - "sha256:70f1d09c0d7748b73290b29219e854b3207aea922f839437870d8cc2168e31cc", - "sha256:750b446b2ffce1739e8578576092179160f6d26bd5e23eb1789c4d64d5af7dc7", - "sha256:7966951325782121e67c81299a031f4c115615e68046f79b85856b86ebffc4cd", - "sha256:7b8b8bf1189b3ba9b8de5c8db4d541b406611a71a955bbbd7385bbc45fcb786c", - "sha256:7f5d10bae5d78e4551b7be7a9b29643a95aded9d0f602aa2ba584f0388e7a557", - "sha256:805dfea4ca10411a5296bcc75638017215a93ffb584c9e344731eef0dcfb026a", - "sha256:81bf654678e575403736b85ba3a7867e31c2c30a69bc57fe88e3ace52fb17b89", - "sha256:82eb849f085624f6a607538ee7b83a6d8126df6d2f7d3b319cb837b289123078", - "sha256:85a32721ddde63c9df9ebb0d2045b9691d9750cb139c161c80e500d210f5e26e", - "sha256:86d1f65ac145e2c9ed71d8ffb1905e9bba3a91ae29ba55b4c46ae6fc31d7c0d4", - "sha256:86f63face3a527284f7bb8a9d4f78988e3c06823f7bea2bd6f0e0e9298ca0403", - "sha256:8eaf82f0eccd1505cf39a45a6bd0a8cf1c70dcfc30dba338207a969d91b965c0", - "sha256:93aa7eef6ee71c629b51ef873991d6911b906d7312c6e8e99790c0f33c576f89", - "sha256:96c2b49eb6a72c0e4991d62406e365d87067ca14c1a729a870d22354e6f68115", - "sha256:9cf3126b85822c4e53aa28c7ec9869b924d6fcfb76e77a45c44b83d91afd74f9", - "sha256:9fe359b2e3a7729010060fbca442ca225280c16e923b37db0e955ac2a2b72a05", - "sha256:a0ac5e7015a5920cfce654c06618ec40c33e12801711da6b4258af59a8eff00a", - "sha256:a3f93dab657839dfa61025056606600a11d0b696d79386f974e459a3fbc568ec", - "sha256:a4b71f4d1765639372a3b32d2638197f5cd5221b19531f9245fcc9ee62d38f56", - "sha256:aae32c93e0f64469f74ccc730a7cb21c7610af3a775157e50bbd38f816536b38", - "sha256:aaf7b34c5bc56b38c931a54f7952f1ff0ae77a2e82496583b247f7c969eb1479", - "sha256:abecce40dfebbfa6abf8e324e1860092eeca6f7375c8c4e655a8afb61af58f2c", - "sha256:abf0d9f45ea5fb95051c8bfe43cb40cda383772f7e5023a83cc481ca2604d74e", - "sha256:ac71b2977fb90c35d41c9453116e283fac47bb9096ad917b8819ca8b943abecd", - "sha256:ada214c6fa40f8d800e575de6b91a40d0548139e5dc457d2ebb61470abf50186", - "sha256:b09719a17a2301178fac4470d54b1680b18a5048b481cb8890e1ef820cb80455", - "sha256:b1121de0e9d6e6ca08289583d7491e7fcb18a439305b34a30b20d8215922d43c", - "sha256:b3b2316b25644b23b54a6f6401074cebcecd1244c0b8e80111c9a3f1c8e83d65", - "sha256:b3d9b48ee6e3967b7901c052b670c7dda6deb812c309439adaffdec55c6d7b78", - "sha256:b5bcf60a228acae568e9911f410f9d9e0d43197d030ae5799e20dca8df588287", - "sha256:b8f3307af845803fb0b060ab76cf6dd3a13adc15b6b451f54281d25911eb92df", - "sha256:c2af80fb58f0f24b3f3adcb9148e6203fa67dd3f61c4af146ecad033024dde43", - "sha256:c350354efb159b8767a6244c166f66e67506e06c8924ed74669b2c70bc8735b1", - "sha256:c5a74c359b2d47d26cdbbc7845e9662d6b08a1e915eb015d044729e92e7050b7", - "sha256:c71f16da1ed8949774ef79f4a0260d28b83b3a50c6576f8f4f0288d109777989", - "sha256:d47ecf253780c90ee181d4d871cd655a789da937454045b17b5798da9393901a", - "sha256:d7eff0f27edc5afa9e405f7165f85a6d782d308f3b6b9d96016c010597958e63", - "sha256:d97d85fa63f315a8bdaba2af9a6a686e0eceab77b3089af45133252618e70884", - "sha256:db756e48f9c5c607b5e33dd36b1d5872d0422e960145b08ab0ec7fd420e9d649", - "sha256:dc45229747b67ffc441b3de2f3ae5e62877a282ea828a5bdb67883c4ee4a8810", - "sha256:e0fc42822278451bc13a2e8626cf2218ba570f27856b536e00cfa53099724828", - "sha256:e39c7eb31e3f5b1f88caff88bcff1b7f8334975b46f6ac6e9fc725d829bc35d4", - "sha256:e46cd37076971c1040fc8c41273a8b3e2c624ce4f2be3f5dfcb7a430c1d3acc2", - "sha256:e5c1502d4ace69a179305abb3f0bb6141cbe4714bc9b31d427329a95acfc8bdd", - "sha256:edfe077ab09442d4ef3c52cb1f9dab89bff02f4524afc0acf2d46be17dc479f5", - "sha256:effe5406c9bd748a871dbcaf3ac69167c38d72db8c9baf3ff954c344f31c4cbe", - "sha256:f0d1e3732768fecb052d90d62b220af62ead5748ac51ef61e7b32c266cac9293", - "sha256:f5969baeaea61c97efa706b9b107dcba02784b1601c74ac84f2a532ea079403e", - "sha256:f8888e31e3a85943743f8fc15e71536bda1c81d5aa36d014a3c0c44481d7db6e", - "sha256:fc52b79d83a3fe3a360902d3f5d79073a993597d48114c29485e9431092905d8" + "sha256:06435b539f889b1f6f4ac1758871aae42dc3a8c0e24ac9e60c2384973ad73027", + "sha256:06a81e93cd441c56a9b65d8e1d043daeb97a3d0856d177d5c90ba85acb3db087", + "sha256:0a55554a2fa0d408816b3b5cedf0045f4b8e1a6065aec45849de2d6f3f8e9786", + "sha256:0b2b64d2bb6d3fb9112bafa732def486049e63de9618b5843bcdd081d8144cd8", + "sha256:10955842570876604d404661fbccbc9c7e684caf432c09c715ec38fbae45ae09", + "sha256:122c7fa62b130ed55f8f285bfd56d5f4b4a5b503609d181f9ad85e55c89f4185", + "sha256:1ceae2f17a9c33cb48e3263960dc5fc8005351ee19db217e9b1bb15d28c02574", + "sha256:1d3193f4a680c64b4b6a9115943538edb896edc190f0b222e73761716519268e", + "sha256:1f79682fbe303db92bc2b1136016a38a42e835d932bab5b3b1bfcfbf0640e519", + "sha256:2127566c664442652f024c837091890cb1942c30937add288223dc895793f898", + "sha256:22afcb9f253dac0696b5a4be4a1c0f8762f8239e21b99680099abd9b2b1b2269", + "sha256:25baf083bf6f6b341f4121c2f3c548875ee6f5339300e08be3f2b2ba1721cdd3", + "sha256:2e81c7b9c8979ce92ed306c249d46894776a909505d8f5a4ba55b14206e3222f", + "sha256:3287761bc4ee9e33561a7e058c72ac0938c4f57fe49a09eae428fd88aafe7bb6", + "sha256:34d1c8da1e78d2e001f363791c98a272bb734000fcef47a491c1e3b0505657a8", + "sha256:37e55c8e51c236f95b033f6fb391d7d7970ba5fe7ff453dad675e88cf303377a", + "sha256:3d47fa203a7bd9c5b6cee4736ee84ca03b8ef23193c0d1ca99b5089f72645c73", + "sha256:3e4d1f6587322d2788836a99c69062fbb091331ec940e02d12d179c1d53e25fc", + "sha256:42cb296636fcc8b0644486d15c12376cb9fa75443e00fb25de0b8602e64c1714", + "sha256:45485e01ff4d3630ec0d9617310448a8702f70e9c01906b0d0118bdf9d124cf2", + "sha256:4a78b2b446bd7c934f5dcedc588903fb2f5eec172f3d29e52a9096a43722adfc", + "sha256:4ab2fe47fae9e0f9dee8c04187ce5d09f48eabe611be8259444906793ab7cbce", + "sha256:4d0d1650369165a14e14e1e47b372cfcb31d6ab44e6e33cb2d4e57265290044d", + "sha256:549a3a73da901d5bc3ce8d24e0600d1fa85524c10287f6004fbab87672bf3e1e", + "sha256:55086ee1064215781fff39a1af09518bc9255b50d6333f2e4c74ca09fac6a8f6", + "sha256:572c3763a264ba47b3cf708a44ce965d98555f618ca42c926a9c1616d8f34269", + "sha256:573f6eac48f4769d667c4442081b1794f52919e7edada77495aaed9236d13a96", + "sha256:5b4c145409bef602a690e7cfad0a15a55c13320ff7a3ad7ca59c13bb8ba4d45d", + "sha256:6463effa3186ea09411d50efc7d85360b38d5f09b870c48e4600f63af490e56a", + "sha256:65f6f63034100ead094b8744b3b97965785388f308a64cf8d7c34f2f2e5be0c4", + "sha256:663946639d296df6a2bb2aa51b60a2454ca1cb29835324c640dafb5ff2131a77", + "sha256:6897af51655e3691ff853668779c7bad41579facacf5fd7253b0133308cf000d", + "sha256:68d1f8a9e9e37c1223b656399be5d6b448dea850bed7d0f87a8311f1ff3dabb0", + "sha256:6ac7ffc7ad6d040517be39eb591cac5ff87416c2537df6ba3cba3bae290c0fed", + "sha256:6b3251890fff30ee142c44144871185dbe13b11bab478a88887a639655be1068", + "sha256:6c4caeef8fa63d06bd437cd4bdcf3ffefe6738fb1b25951440d80dc7df8c03ac", + "sha256:6ef1d82a3af9d3eecdba2321dc1b3c238245d890843e040e41e470ffa64c3e25", + "sha256:753f10e867343b4511128c6ed8c82f7bec3bd026875576dfd88483c5c73b2fd8", + "sha256:7cd13a2e3ddeed6913a65e66e94b51d80a041145a026c27e6bb76c31a853c6ab", + "sha256:7ed9e526742851e8d5cc9e6cf41427dfc6068d4f5a3bb03659444b4cabf6bc26", + "sha256:7f04c839ed0b6b98b1a7501a002144b76c18fb1c1850c8b98d458ac269e26ed2", + "sha256:802fe99cca7457642125a8a88a084cef28ff0cf9407060f7b93dca5aa25480db", + "sha256:80402cd6ee291dcb72644d6eac93785fe2c8b9cb30893c1af5b8fdd753b9d40f", + "sha256:8465322196c8b4d7ab6d1e049e4c5cb460d0394da4a27d23cc242fbf0034b6b5", + "sha256:86216b5cee4b06df986d214f664305142d9c76df9b6512be2738aa72a2048f99", + "sha256:87d1351268731db79e0f8e745d92493ee2841c974128ef629dc518b937d9194c", + "sha256:8bdb58ff7ba23002a4c5808d608e4e6c687175724f54a5dade5fa8c67b604e4d", + "sha256:8c622a5fe39a48f78944a87d4fb8a53ee07344641b0562c540d840748571b811", + "sha256:8d756e44e94489e49571086ef83b2bb8ce311e730092d2c34ca8f7d925cb20aa", + "sha256:8f4a014bc36d3c57402e2977dada34f9c12300af536839dc38c0beab8878f38a", + "sha256:9063e24fdb1e498ab71cb7419e24622516c4a04476b17a2dab57e8baa30d6e03", + "sha256:90d558489962fd4918143277a773316e56c72da56ec7aa3dc3dbbe20fdfed15b", + "sha256:923c0c831b7cfcb071580d3f46c4baf50f174be571576556269530f4bbd79d04", + "sha256:95f2a5796329323b8f0512e09dbb7a1860c46a39da62ecb2324f116fa8fdc85c", + "sha256:96b02a3dc4381e5494fad39be677abcb5e6634bf7b4fa83a6dd3112607547001", + "sha256:9f96df6923e21816da7e0ad3fd47dd8f94b2a5ce594e00677c0013018b813458", + "sha256:a10af20b82360ab00827f916a6058451b723b4e65030c5a18577c8b2de5b3389", + "sha256:a50aebfa173e157099939b17f18600f72f84eed3049e743b68ad15bd69b6bf99", + "sha256:a981a536974bbc7a512cf44ed14938cf01030a99e9b3a06dd59578882f06f985", + "sha256:a9a8e9031d613fd2009c182b69c7b2c1ef8239a0efb1df3f7c8da66d5dd3d537", + "sha256:ae5f4161f18c61806f411a13b0310bea87f987c7d2ecdbdaad0e94eb2e404238", + "sha256:aed38f6e4fb3f5d6bf81bfa990a07806be9d83cf7bacef998ab1a9bd660a581f", + "sha256:b01b88d45a6fcb69667cd6d2f7a9aeb4bf53760d7fc536bf679ec94fe9f3ff3d", + "sha256:b261ccdec7821281dade748d088bb6e9b69e6d15b30652b74cbbac25e280b796", + "sha256:b2b0a0c0517616b6869869f8c581d4eb2dd83a4d79e0ebcb7d373ef9956aeb0a", + "sha256:b4a23f61ce87adf89be746c8a8974fe1c823c891d8f86eb218bb957c924bb143", + "sha256:bd8f7df7d12c2db9fab40bdd87a7c09b1530128315d047a086fa3ae3435cb3a8", + "sha256:beb58fe5cdb101e3a055192ac291b7a21e3b7ef4f67fa1d74e331a7f2124341c", + "sha256:c002b4ffc0be611f0d9da932eb0f704fe2602a9a949d1f738e4c34c75b0863d5", + "sha256:c083af607d2515612056a31f0a8d9e0fcb5876b7bfc0abad3ecd275bc4ebc2d5", + "sha256:c180f51afb394e165eafe4ac2936a14bee3eb10debc9d9e4db8958fe36afe711", + "sha256:c235ebd9baae02f1b77bcea61bce332cb4331dc3617d254df3323aa01ab47bd4", + "sha256:cd70574b12bb8a4d2aaa0094515df2463cb429d8536cfb6c7ce983246983e5a6", + "sha256:d0eccceffcb53201b5bfebb52600a5fb483a20b61da9dbc885f8b103cbe7598c", + "sha256:d965bba47ddeec8cd560687584e88cf699fd28f192ceb452d1d7ee807c5597b7", + "sha256:db364eca23f876da6f9e16c9da0df51aa4f104a972735574842618b8c6d999d4", + "sha256:ddbb2551d7e0102e7252db79ba445cdab71b26640817ab1e3e3648dad515003b", + "sha256:deb6be0ac38ece9ba87dea880e438f25ca3eddfac8b002a2ec3d9183a454e8ae", + "sha256:e06ed3eb3218bc64786f7db41917d4e686cc4856944f53d5bdf83a6884432e12", + "sha256:e27ad930a842b4c5eb8ac0016b0a54f5aebbe679340c26101df33424142c143c", + "sha256:e537484df0d8f426ce2afb2d0f8e1c3d0b114b83f8850e5f2fbea0e797bd82ae", + "sha256:eb00ed941194665c332bf8e078baf037d6c35d7c4f3102ea2d4f16ca94a26dc8", + "sha256:eb6904c354526e758fda7167b33005998fb68c46fbc10e013ca97f21ca5c8887", + "sha256:eb8821e09e916165e160797a6c17edda0679379a4be5c716c260e836e122f54b", + "sha256:efcb3f6676480691518c177e3b465bcddf57cea040302f9f4e6e191af91174d4", + "sha256:f27273b60488abe721a075bcca6d7f3964f9f6f067c8c4c605743023d7d3944f", + "sha256:f30c3cb33b24454a82faecaf01b19c18562b1e89558fb6c56de4d9118a032fd5", + "sha256:fb69256e180cb6c8a894fee62b3afebae785babc1ee98b81cdf68bbca1987f33", + "sha256:fd1abc0d89e30cc4e02e4064dc67fcc51bd941eb395c502aac3ec19fab46b519", + "sha256:ff8fa367d09b717b2a17a052544193ad76cd49979c805768879cb63d9ca50561" ], "markers": "python_full_version >= '3.7.0'", - "version": "==3.3.0" + "version": "==3.3.2" }, "coverage": { "hashes": [ - "sha256:0cbf38419fb1a347aaf63481c00f0bdc86889d9fbf3f25109cf96c26b403fda1", - "sha256:12d15ab5833a997716d76f2ac1e4b4d536814fc213c85ca72756c19e5a6b3d63", - "sha256:149de1d2401ae4655c436a3dced6dd153f4c3309f599c3d4bd97ab172eaf02d9", - "sha256:1981f785239e4e39e6444c63a98da3a1db8e971cb9ceb50a945ba6296b43f312", - "sha256:2443cbda35df0d35dcfb9bf8f3c02c57c1d6111169e3c85fc1fcc05e0c9f39a3", - "sha256:289fe43bf45a575e3ab10b26d7b6f2ddb9ee2dba447499f5401cfb5ecb8196bb", - "sha256:2f11cc3c967a09d3695d2a6f03fb3e6236622b93be7a4b5dc09166a861be6d25", - "sha256:307adb8bd3abe389a471e649038a71b4eb13bfd6b7dd9a129fa856f5c695cf92", - "sha256:310b3bb9c91ea66d59c53fa4989f57d2436e08f18fb2f421a1b0b6b8cc7fffda", - "sha256:315a989e861031334d7bee1f9113c8770472db2ac484e5b8c3173428360a9148", - "sha256:3a4006916aa6fee7cd38db3bfc95aa9c54ebb4ffbfc47c677c8bba949ceba0a6", - "sha256:3c7bba973ebee5e56fe9251300c00f1579652587a9f4a5ed8404b15a0471f216", - "sha256:4175e10cc8dda0265653e8714b3174430b07c1dca8957f4966cbd6c2b1b8065a", - "sha256:43668cabd5ca8258f5954f27a3aaf78757e6acf13c17604d89648ecc0cc66640", - "sha256:4cbae1051ab791debecc4a5dcc4a1ff45fc27b91b9aee165c8a27514dd160836", - "sha256:5c913b556a116b8d5f6ef834038ba983834d887d82187c8f73dec21049abd65c", - "sha256:5f7363d3b6a1119ef05015959ca24a9afc0ea8a02c687fe7e2d557705375c01f", - "sha256:630b13e3036e13c7adc480ca42fa7afc2a5d938081d28e20903cf7fd687872e2", - "sha256:72c0cfa5250f483181e677ebc97133ea1ab3eb68645e494775deb6a7f6f83901", - "sha256:7dbc3ed60e8659bc59b6b304b43ff9c3ed858da2839c78b804973f613d3e92ed", - "sha256:88ed2c30a49ea81ea3b7f172e0269c182a44c236eb394718f976239892c0a27a", - "sha256:89a937174104339e3a3ffcf9f446c00e3a806c28b1841c63edb2b369310fd074", - "sha256:9028a3871280110d6e1aa2df1afd5ef003bab5fb1ef421d6dc748ae1c8ef2ebc", - "sha256:99b89d9f76070237975b315b3d5f4d6956ae354a4c92ac2388a5695516e47c84", - "sha256:9f805d62aec8eb92bab5b61c0f07329275b6f41c97d80e847b03eb894f38d083", - "sha256:a889ae02f43aa45032afe364c8ae84ad3c54828c2faa44f3bfcafecb5c96b02f", - "sha256:aa72dbaf2c2068404b9870d93436e6d23addd8bbe9295f49cbca83f6e278179c", - "sha256:ac8c802fa29843a72d32ec56d0ca792ad15a302b28ca6203389afe21f8fa062c", - "sha256:ae97af89f0fbf373400970c0a21eef5aa941ffeed90aee43650b81f7d7f47637", - "sha256:af3d828d2c1cbae52d34bdbb22fcd94d1ce715d95f1a012354a75e5913f1bda2", - "sha256:b4275802d16882cf9c8b3d057a0839acb07ee9379fa2749eca54efbce1535b82", - "sha256:b4767da59464bb593c07afceaddea61b154136300881844768037fd5e859353f", - "sha256:b631c92dfe601adf8f5ebc7fc13ced6bb6e9609b19d9a8cd59fa47c4186ad1ce", - "sha256:be32ad29341b0170e795ca590e1c07e81fc061cb5b10c74ce7203491484404ef", - "sha256:beaa5c1b4777f03fc63dfd2a6bd820f73f036bfb10e925fce067b00a340d0f3f", - "sha256:c0ba320de3fb8c6ec16e0be17ee1d3d69adcda99406c43c0409cb5c41788a611", - "sha256:c9eacf273e885b02a0273bb3a2170f30e2d53a6d53b72dbe02d6701b5296101c", - "sha256:cb536f0dcd14149425996821a168f6e269d7dcd2c273a8bff8201e79f5104e76", - "sha256:d1bc430677773397f64a5c88cb522ea43175ff16f8bfcc89d467d974cb2274f9", - "sha256:d1c88ec1a7ff4ebca0219f5b1ef863451d828cccf889c173e1253aa84b1e07ce", - "sha256:d3d9df4051c4a7d13036524b66ecf7a7537d14c18a384043f30a303b146164e9", - "sha256:d51ac2a26f71da1b57f2dc81d0e108b6ab177e7d30e774db90675467c847bbdf", - "sha256:d872145f3a3231a5f20fd48500274d7df222e291d90baa2026cc5152b7ce86bf", - "sha256:d8f17966e861ff97305e0801134e69db33b143bbfb36436efb9cfff6ec7b2fd9", - "sha256:dbc1b46b92186cc8074fee9d9fbb97a9dd06c6cbbef391c2f59d80eabdf0faa6", - "sha256:e10c39c0452bf6e694511c901426d6b5ac005acc0f78ff265dbe36bf81f808a2", - "sha256:e267e9e2b574a176ddb983399dec325a80dbe161f1a32715c780b5d14b5f583a", - "sha256:f47d39359e2c3779c5331fc740cf4bce6d9d680a7b4b4ead97056a0ae07cb49a", - "sha256:f6e9589bd04d0461a417562649522575d8752904d35c12907d8c9dfeba588faf", - "sha256:f94b734214ea6a36fe16e96a70d941af80ff3bfd716c141300d95ebc85339738", - "sha256:fa28e909776dc69efb6ed975a63691bc8172b64ff357e663a1bb06ff3c9b589a", - "sha256:fe494faa90ce6381770746077243231e0b83ff3f17069d748f645617cefe19d4" + "sha256:020d56d2da5bc22a0e00a5b0d54597ee91ad72446fa4cf1b97c35022f6b6dbf0", + "sha256:11ab62d0ce5d9324915726f611f511a761efcca970bd49d876cf831b4de65be5", + "sha256:183c16173a70caf92e2dfcfe7c7a576de6fa9edc4119b8e13f91db7ca33a7923", + "sha256:27ee94f088397d1feea3cb524e4313ff0410ead7d968029ecc4bc5a7e1d34fbf", + "sha256:3024ec1b3a221bd10b5d87337d0373c2bcaf7afd86d42081afe39b3e1820323b", + "sha256:309ed6a559bc942b7cc721f2976326efbfe81fc2b8f601c722bff927328507dc", + "sha256:33e63c578f4acce1b6cd292a66bc30164495010f1091d4b7529d014845cd9bee", + "sha256:36797b3625d1da885b369bdaaa3b0d9fb8865caed3c2b8230afaa6005434aa2f", + "sha256:36d75ef2acab74dc948d0b537ef021306796da551e8ac8b467810911000af66a", + "sha256:38d0b307c4d99a7aca4e00cad4311b7c51b7ac38fb7dea2abe0d182dd4008e05", + "sha256:3d892a19ae24b9801771a5a989fb3e850bd1ad2e2b6e83e949c65e8f37bc67a1", + "sha256:3f477fb8a56e0c603587b8278d9dbd32e54bcc2922d62405f65574bd76eba78a", + "sha256:47ee56c2cd445ea35a8cc3ad5c8134cb9bece3a5cb50bb8265514208d0a65928", + "sha256:4a4184dcbe4f98d86470273e758f1d24191ca095412e4335ff27b417291f5964", + "sha256:5214362abf26e254d749fc0c18af4c57b532a4bfde1a057565616dd3b8d7cc94", + "sha256:607b6c6b35aa49defaebf4526729bd5238bc36fe3ef1a417d9839e1d96ee1e4c", + "sha256:610afaf929dc0e09a5eef6981edb6a57a46b7eceff151947b836d869d6d567c1", + "sha256:6879fe41c60080aa4bb59703a526c54e0412b77e649a0d06a61782ecf0853ee1", + "sha256:74397a1263275bea9d736572d4cf338efaade2de9ff759f9c26bcdceb383bb49", + "sha256:758ebaf74578b73f727acc4e8ab4b16ab6f22a5ffd7dd254e5946aba42a4ce76", + "sha256:782693b817218169bfeb9b9ba7f4a9f242764e180ac9589b45112571f32a0ba6", + "sha256:7c4277ddaad9293454da19121c59f2d850f16bcb27f71f89a5c4836906eb35ef", + "sha256:85072e99474d894e5df582faec04abe137b28972d5e466999bc64fc37f564a03", + "sha256:8a9c5bc5db3eb4cd55ecb8397d8e9b70247904f8eca718cc53c12dcc98e59fc8", + "sha256:8ce03e25e18dd9bf44723e83bc202114817f3367789052dc9e5b5c79f40cf59d", + "sha256:93698ac0995516ccdca55342599a1463ed2e2d8942316da31686d4d614597ef9", + "sha256:997aa14b3e014339d8101b9886063c5d06238848905d9ad6c6eabe533440a9a7", + "sha256:9ac17b94ab4ca66cf803f2b22d47e392f0977f9da838bf71d1f0db6c32893cb9", + "sha256:a02ac7c51819702b384fea5ee033a7c202f732a2a2f1fe6c41e3d4019828c8d3", + "sha256:a1c3e9d2bbd6f3f79cfecd6f20854f4dc0c6e0ec317df2b265266d0dc06535f1", + "sha256:a877810ef918d0d345b783fc569608804f3ed2507bf32f14f652e4eaf5d8f8d0", + "sha256:a8e258dcc335055ab59fe79f1dec217d9fb0cdace103d6b5c6df6b75915e7959", + "sha256:aefbb29dc56317a4fcb2f3857d5bce9b881038ed7e5aa5d3bcab25bd23f57328", + "sha256:aff2bd3d585969cc4486bfc69655e862028b689404563e6b549e6a8244f226df", + "sha256:b1e0f25ae99cf247abfb3f0fac7ae25739e4cd96bf1afa3537827c576b4847e5", + "sha256:b710869a15b8caf02e31d16487a931dbe78335462a122c8603bb9bd401ff6fb2", + "sha256:bfed0ec4b419fbc807dec417c401499ea869436910e1ca524cfb4f81cf3f60e7", + "sha256:c15fdfb141fcf6a900e68bfa35689e1256a670db32b96e7a931cab4a0e1600e5", + "sha256:c6a23ae9348a7a92e7f750f9b7e828448e428e99c24616dec93a0720342f241d", + "sha256:c75738ce13d257efbb6633a049fb2ed8e87e2e6c2e906c52d1093a4d08d67c6b", + "sha256:d1d0ce6c6947a3a4aa5479bebceff2c807b9f3b529b637e2b33dea4468d75fc7", + "sha256:d5b14abde6f8d969e6b9dd8c7a013d9a2b52af1235fe7bebef25ad5c8f47fa18", + "sha256:d6ed790728fb71e6b8247bd28e77e99d0c276dff952389b5388169b8ca7b1c28", + "sha256:e0d84099ea7cba9ff467f9c6f747e3fc3906e2aadac1ce7b41add72e8d0a3712", + "sha256:e4353923f38d752ecfbd3f1f20bf7a3546993ae5ecd7c07fd2f25d40b4e54571", + "sha256:e91029d7f151d8bf5ab7d8bfe2c3dbefd239759d642b211a677bc0709c9fdb96", + "sha256:ea473c37872f0159294f7073f3fa72f68b03a129799f3533b2bb44d5e9fa4f82", + "sha256:f154bd866318185ef5865ace5be3ac047b6d1cc0aeecf53bf83fe846f4384d5d", + "sha256:f97ff5a9fc2ca47f3383482858dd2cb8ddbf7514427eecf5aa5f7992d0571429", + "sha256:f99b7d3f7a7adfa3d11e3a48d1a91bb65739555dd6a0d3fa68aa5852d962e5b1", + "sha256:fb220b3596358a86361139edce40d97da7458412d412e1e10c8e1970ee8c09ab", + "sha256:fd2f8a641f8f193968afdc8fd1697e602e199931012b574194052d132a79be13" ], "index": "pypi", - "version": "==7.3.2" + "version": "==7.3.4" }, "exceptiongroup": { "hashes": [ - "sha256:097acd85d473d75af5bb98e41b61ff7fe35efe6675e4f9370ec6ec5126d160e9", - "sha256:343280667a4585d195ca1cf9cef84a4e178c4b6cf2274caef9859782b567d5e3" + "sha256:4bfd3996ac73b41e9b9628b04e079f193850720ea5945fc96a08633c66912f14", + "sha256:91f5c769735f051a4290d52edd0858999b57e5876e9f85937691bd4c9fa3ed68" ], "markers": "python_version < '3.11'", - "version": "==1.1.3" + "version": "==1.2.0" }, "freezegun": { "hashes": [ - "sha256:cd22d1ba06941384410cd967d8a99d5ae2442f57dfafeff2fda5de8dc5c05446", - "sha256:ea1b963b993cb9ea195adbd893a48d573fda951b0da64f60883d7e988b606c9f" + "sha256:10939b0ba0ff5adaecf3b06a5c2f73071d9678e507c5eaedb23c761d56ac774b", + "sha256:55e0fc3c84ebf0a96a5aa23ff8b53d70246479e9a68863f1fcac5a3e52f19dd6" ], "index": "pypi", - "version": "==1.2.2" + "version": "==1.4.0" }, "frozenlist": { "hashes": [ - "sha256:007df07a6e3eb3e33e9a1fe6a9db7af152bbd8a185f9aaa6ece10a3529e3e1c6", - "sha256:008eb8b31b3ea6896da16c38c1b136cb9fec9e249e77f6211d479db79a4eaf01", - "sha256:09163bdf0b2907454042edb19f887c6d33806adc71fbd54afc14908bfdc22251", - "sha256:0c7c1b47859ee2cac3846fde1c1dc0f15da6cec5a0e5c72d101e0f83dcb67ff9", - "sha256:0e5c8764c7829343d919cc2dfc587a8db01c4f70a4ebbc49abde5d4b158b007b", - "sha256:10ff5faaa22786315ef57097a279b833ecab1a0bfb07d604c9cbb1c4cdc2ed87", - "sha256:17ae5cd0f333f94f2e03aaf140bb762c64783935cc764ff9c82dff626089bebf", - "sha256:19488c57c12d4e8095a922f328df3f179c820c212940a498623ed39160bc3c2f", - "sha256:1a0848b52815006ea6596c395f87449f693dc419061cc21e970f139d466dc0a0", - "sha256:1e78fb68cf9c1a6aa4a9a12e960a5c9dfbdb89b3695197aa7064705662515de2", - "sha256:261b9f5d17cac914531331ff1b1d452125bf5daa05faf73b71d935485b0c510b", - "sha256:2b8bcf994563466db019fab287ff390fffbfdb4f905fc77bc1c1d604b1c689cc", - "sha256:38461d02d66de17455072c9ba981d35f1d2a73024bee7790ac2f9e361ef1cd0c", - "sha256:490132667476f6781b4c9458298b0c1cddf237488abd228b0b3650e5ecba7467", - "sha256:491e014f5c43656da08958808588cc6c016847b4360e327a62cb308c791bd2d9", - "sha256:515e1abc578dd3b275d6a5114030b1330ba044ffba03f94091842852f806f1c1", - "sha256:556de4430ce324c836789fa4560ca62d1591d2538b8ceb0b4f68fb7b2384a27a", - "sha256:5833593c25ac59ede40ed4de6d67eb42928cca97f26feea219f21d0ed0959b79", - "sha256:6221d84d463fb110bdd7619b69cb43878a11d51cbb9394ae3105d082d5199167", - "sha256:6918d49b1f90821e93069682c06ffde41829c346c66b721e65a5c62b4bab0300", - "sha256:6c38721585f285203e4b4132a352eb3daa19121a035f3182e08e437cface44bf", - "sha256:71932b597f9895f011f47f17d6428252fc728ba2ae6024e13c3398a087c2cdea", - "sha256:7211ef110a9194b6042449431e08c4d80c0481e5891e58d429df5899690511c2", - "sha256:764226ceef3125e53ea2cb275000e309c0aa5464d43bd72abd661e27fffc26ab", - "sha256:7645a8e814a3ee34a89c4a372011dcd817964ce8cb273c8ed6119d706e9613e3", - "sha256:76d4711f6f6d08551a7e9ef28c722f4a50dd0fc204c56b4bcd95c6cc05ce6fbb", - "sha256:7f4f399d28478d1f604c2ff9119907af9726aed73680e5ed1ca634d377abb087", - "sha256:88f7bc0fcca81f985f78dd0fa68d2c75abf8272b1f5c323ea4a01a4d7a614efc", - "sha256:8d0edd6b1c7fb94922bf569c9b092ee187a83f03fb1a63076e7774b60f9481a8", - "sha256:901289d524fdd571be1c7be054f48b1f88ce8dddcbdf1ec698b27d4b8b9e5d62", - "sha256:93ea75c050c5bb3d98016b4ba2497851eadf0ac154d88a67d7a6816206f6fa7f", - "sha256:981b9ab5a0a3178ff413bca62526bb784249421c24ad7381e39d67981be2c326", - "sha256:9ac08e601308e41eb533f232dbf6b7e4cea762f9f84f6357136eed926c15d12c", - "sha256:a02eb8ab2b8f200179b5f62b59757685ae9987996ae549ccf30f983f40602431", - "sha256:a0c6da9aee33ff0b1a451e867da0c1f47408112b3391dd43133838339e410963", - "sha256:a6c8097e01886188e5be3e6b14e94ab365f384736aa1fca6a0b9e35bd4a30bc7", - "sha256:aa384489fefeb62321b238e64c07ef48398fe80f9e1e6afeff22e140e0850eef", - "sha256:ad2a9eb6d9839ae241701d0918f54c51365a51407fd80f6b8289e2dfca977cc3", - "sha256:b206646d176a007466358aa21d85cd8600a415c67c9bd15403336c331a10d956", - "sha256:b826d97e4276750beca7c8f0f1a4938892697a6bcd8ec8217b3312dad6982781", - "sha256:b89ac9768b82205936771f8d2eb3ce88503b1556324c9f903e7156669f521472", - "sha256:bd7bd3b3830247580de99c99ea2a01416dfc3c34471ca1298bccabf86d0ff4dc", - "sha256:bdf1847068c362f16b353163391210269e4f0569a3c166bc6a9f74ccbfc7e839", - "sha256:c11b0746f5d946fecf750428a95f3e9ebe792c1ee3b1e96eeba145dc631a9672", - "sha256:c5374b80521d3d3f2ec5572e05adc94601985cc526fb276d0c8574a6d749f1b3", - "sha256:ca265542ca427bf97aed183c1676e2a9c66942e822b14dc6e5f42e038f92a503", - "sha256:ce31ae3e19f3c902de379cf1323d90c649425b86de7bbdf82871b8a2a0615f3d", - "sha256:ceb6ec0a10c65540421e20ebd29083c50e6d1143278746a4ef6bcf6153171eb8", - "sha256:d081f13b095d74b67d550de04df1c756831f3b83dc9881c38985834387487f1b", - "sha256:d5655a942f5f5d2c9ed93d72148226d75369b4f6952680211972a33e59b1dfdc", - "sha256:d5a32087d720c608f42caed0ef36d2b3ea61a9d09ee59a5142d6070da9041b8f", - "sha256:d6484756b12f40003c6128bfcc3fa9f0d49a687e171186c2d85ec82e3758c559", - "sha256:dd65632acaf0d47608190a71bfe46b209719bf2beb59507db08ccdbe712f969b", - "sha256:de343e75f40e972bae1ef6090267f8260c1446a1695e77096db6cfa25e759a95", - "sha256:e29cda763f752553fa14c68fb2195150bfab22b352572cb36c43c47bedba70eb", - "sha256:e41f3de4df3e80de75845d3e743b3f1c4c8613c3997a912dbf0229fc61a8b963", - "sha256:e66d2a64d44d50d2543405fb183a21f76b3b5fd16f130f5c99187c3fb4e64919", - "sha256:e74b0506fa5aa5598ac6a975a12aa8928cbb58e1f5ac8360792ef15de1aa848f", - "sha256:f0ed05f5079c708fe74bf9027e95125334b6978bf07fd5ab923e9e55e5fbb9d3", - "sha256:f61e2dc5ad442c52b4887f1fdc112f97caeff4d9e6ebe78879364ac59f1663e1", - "sha256:fec520865f42e5c7f050c2a79038897b1c7d1595e907a9e08e3353293ffc948e" + "sha256:04ced3e6a46b4cfffe20f9ae482818e34eba9b5fb0ce4056e4cc9b6e212d09b7", + "sha256:0633c8d5337cb5c77acbccc6357ac49a1770b8c487e5b3505c57b949b4b82e98", + "sha256:068b63f23b17df8569b7fdca5517edef76171cf3897eb68beb01341131fbd2ad", + "sha256:0c250a29735d4f15321007fb02865f0e6b6a41a6b88f1f523ca1596ab5f50bd5", + "sha256:1979bc0aeb89b33b588c51c54ab0161791149f2461ea7c7c946d95d5f93b56ae", + "sha256:1a4471094e146b6790f61b98616ab8e44f72661879cc63fa1049d13ef711e71e", + "sha256:1b280e6507ea8a4fa0c0a7150b4e526a8d113989e28eaaef946cc77ffd7efc0a", + "sha256:1d0ce09d36d53bbbe566fe296965b23b961764c0bcf3ce2fa45f463745c04701", + "sha256:20b51fa3f588ff2fe658663db52a41a4f7aa6c04f6201449c6c7c476bd255c0d", + "sha256:23b2d7679b73fe0e5a4560b672a39f98dfc6f60df63823b0a9970525325b95f6", + "sha256:23b701e65c7b36e4bf15546a89279bd4d8675faabc287d06bbcfac7d3c33e1e6", + "sha256:2471c201b70d58a0f0c1f91261542a03d9a5e088ed3dc6c160d614c01649c106", + "sha256:27657df69e8801be6c3638054e202a135c7f299267f1a55ed3a598934f6c0d75", + "sha256:29acab3f66f0f24674b7dc4736477bcd4bc3ad4b896f5f45379a67bce8b96868", + "sha256:32453c1de775c889eb4e22f1197fe3bdfe457d16476ea407472b9442e6295f7a", + "sha256:3a670dc61eb0d0eb7080890c13de3066790f9049b47b0de04007090807c776b0", + "sha256:3e0153a805a98f5ada7e09826255ba99fb4f7524bb81bf6b47fb702666484ae1", + "sha256:410478a0c562d1a5bcc2f7ea448359fcb050ed48b3c6f6f4f18c313a9bdb1826", + "sha256:442acde1e068288a4ba7acfe05f5f343e19fac87bfc96d89eb886b0363e977ec", + "sha256:48f6a4533887e189dae092f1cf981f2e3885175f7a0f33c91fb5b7b682b6bab6", + "sha256:4f57dab5fe3407b6c0c1cc907ac98e8a189f9e418f3b6e54d65a718aaafe3950", + "sha256:4f9c515e7914626b2a2e1e311794b4c35720a0be87af52b79ff8e1429fc25f19", + "sha256:55fdc093b5a3cb41d420884cdaf37a1e74c3c37a31f46e66286d9145d2063bd0", + "sha256:5667ed53d68d91920defdf4035d1cdaa3c3121dc0b113255124bcfada1cfa1b8", + "sha256:590344787a90ae57d62511dd7c736ed56b428f04cd8c161fcc5e7232c130c69a", + "sha256:5a7d70357e7cee13f470c7883a063aae5fe209a493c57d86eb7f5a6f910fae09", + "sha256:5c3894db91f5a489fc8fa6a9991820f368f0b3cbdb9cd8849547ccfab3392d86", + "sha256:5c849d495bf5154cd8da18a9eb15db127d4dba2968d88831aff6f0331ea9bd4c", + "sha256:64536573d0a2cb6e625cf309984e2d873979709f2cf22839bf2d61790b448ad5", + "sha256:693945278a31f2086d9bf3df0fe8254bbeaef1fe71e1351c3bd730aa7d31c41b", + "sha256:6db4667b187a6742b33afbbaf05a7bc551ffcf1ced0000a571aedbb4aa42fc7b", + "sha256:6eb73fa5426ea69ee0e012fb59cdc76a15b1283d6e32e4f8dc4482ec67d1194d", + "sha256:722e1124aec435320ae01ee3ac7bec11a5d47f25d0ed6328f2273d287bc3abb0", + "sha256:7268252af60904bf52c26173cbadc3a071cece75f873705419c8681f24d3edea", + "sha256:74fb4bee6880b529a0c6560885fce4dc95936920f9f20f53d99a213f7bf66776", + "sha256:780d3a35680ced9ce682fbcf4cb9c2bad3136eeff760ab33707b71db84664e3a", + "sha256:82e8211d69a4f4bc360ea22cd6555f8e61a1bd211d1d5d39d3d228b48c83a897", + "sha256:89aa2c2eeb20957be2d950b85974b30a01a762f3308cd02bb15e1ad632e22dc7", + "sha256:8aefbba5f69d42246543407ed2461db31006b0f76c4e32dfd6f42215a2c41d09", + "sha256:96ec70beabbd3b10e8bfe52616a13561e58fe84c0101dd031dc78f250d5128b9", + "sha256:9750cc7fe1ae3b1611bb8cfc3f9ec11d532244235d75901fb6b8e42ce9229dfe", + "sha256:9acbb16f06fe7f52f441bb6f413ebae6c37baa6ef9edd49cdd567216da8600cd", + "sha256:9d3e0c25a2350080e9319724dede4f31f43a6c9779be48021a7f4ebde8b2d742", + "sha256:a06339f38e9ed3a64e4c4e43aec7f59084033647f908e4259d279a52d3757d09", + "sha256:a0cb6f11204443f27a1628b0e460f37fb30f624be6051d490fa7d7e26d4af3d0", + "sha256:a7496bfe1da7fb1a4e1cc23bb67c58fab69311cc7d32b5a99c2007b4b2a0e932", + "sha256:a828c57f00f729620a442881cc60e57cfcec6842ba38e1b19fd3e47ac0ff8dc1", + "sha256:a9b2de4cf0cdd5bd2dee4c4f63a653c61d2408055ab77b151c1957f221cabf2a", + "sha256:b46c8ae3a8f1f41a0d2ef350c0b6e65822d80772fe46b653ab6b6274f61d4a49", + "sha256:b7e3ed87d4138356775346e6845cccbe66cd9e207f3cd11d2f0b9fd13681359d", + "sha256:b7f2f9f912dca3934c1baec2e4585a674ef16fe00218d833856408c48d5beee7", + "sha256:ba60bb19387e13597fb059f32cd4d59445d7b18b69a745b8f8e5db0346f33480", + "sha256:beee944ae828747fd7cb216a70f120767fc9f4f00bacae8543c14a6831673f89", + "sha256:bfa4a17e17ce9abf47a74ae02f32d014c5e9404b6d9ac7f729e01562bbee601e", + "sha256:c037a86e8513059a2613aaba4d817bb90b9d9b6b69aace3ce9c877e8c8ed402b", + "sha256:c302220494f5c1ebeb0912ea782bcd5e2f8308037b3c7553fad0e48ebad6ad82", + "sha256:c6321c9efe29975232da3bd0af0ad216800a47e93d763ce64f291917a381b8eb", + "sha256:c757a9dd70d72b076d6f68efdbb9bc943665ae954dad2801b874c8c69e185068", + "sha256:c99169d4ff810155ca50b4da3b075cbde79752443117d89429595c2e8e37fed8", + "sha256:c9c92be9fd329ac801cc420e08452b70e7aeab94ea4233a4804f0915c14eba9b", + "sha256:cc7b01b3754ea68a62bd77ce6020afaffb44a590c2289089289363472d13aedb", + "sha256:db9e724bebd621d9beca794f2a4ff1d26eed5965b004a97f1f1685a173b869c2", + "sha256:dca69045298ce5c11fd539682cff879cc1e664c245d1c64da929813e54241d11", + "sha256:dd9b1baec094d91bf36ec729445f7769d0d0cf6b64d04d86e45baf89e2b9059b", + "sha256:e02a0e11cf6597299b9f3bbd3f93d79217cb90cfd1411aec33848b13f5c656cc", + "sha256:e6a20a581f9ce92d389a8c7d7c3dd47c81fd5d6e655c8dddf341e14aa48659d0", + "sha256:e7004be74cbb7d9f34553a5ce5fb08be14fb33bc86f332fb71cbe5216362a497", + "sha256:e774d53b1a477a67838a904131c4b0eef6b3d8a651f8b138b04f748fccfefe17", + "sha256:edb678da49d9f72c9f6c609fbe41a5dfb9a9282f9e6a2253d5a91e0fc382d7c0", + "sha256:f146e0911cb2f1da549fc58fc7bcd2b836a44b79ef871980d605ec392ff6b0d2", + "sha256:f56e2333dda1fe0f909e7cc59f021eba0d2307bc6f012a1ccf2beca6ba362439", + "sha256:f9a3ea26252bd92f570600098783d1371354d89d5f6b7dfd87359d669f2109b5", + "sha256:f9aa1878d1083b276b0196f2dfbe00c9b7e752475ed3b682025ff20c1c1f51ac", + "sha256:fb3c2db03683b5767dedb5769b8a40ebb47d6f7f45b1b3e3b4b51ec8ad9d9825", + "sha256:fbeb989b5cc29e8daf7f976b421c220f1b8c731cbf22b9130d8815418ea45887", + "sha256:fde5bd59ab5357e3853313127f4d3565fc7dad314a74d7b5d43c22c6a5ed2ced", + "sha256:fe1a06da377e3a1062ae5fe0926e12b84eceb8a50b350ddca72dc85015873f74" ], "markers": "python_version >= '3.8'", - "version": "==1.4.0" + "version": "==1.4.1" }, "h11": { "hashes": [ @@ -2238,30 +2640,30 @@ }, "httpcore": { "hashes": [ - "sha256:13b5e5cd1dca1a6636a6aaea212b19f4f85cd88c366a2b82304181b769aab3c9", - "sha256:adc5398ee0a476567bf87467063ee63584a8bce86078bf748e48754f60202ced" + "sha256:096cc05bca73b8e459a1fc3dcf585148f63e534eae4339559c9b8a8d6399acc7", + "sha256:9fc092e4799b26174648e54b74ed5f683132a464e95643b226e00c2ed2fa6535" ], "markers": "python_version >= '3.8'", - "version": "==0.18.0" + "version": "==1.0.2" }, "httpx": { "extras": [ "http2" ], "hashes": [ - "sha256:181ea7f8ba3a82578be86ef4171554dd45fec26a02556a744db029a0a27b7100", - "sha256:47ecda285389cb32bb2691cc6e069e3ab0205956f681c5b2ad2325719751d875" + "sha256:451b55c30d5185ea6b23c2c793abf9bb237d2a7dfb901ced6ff69ad37ec1dfaf", + "sha256:8915f5a3627c4d47b73e8202457cb28f1266982d1159bd5779d86a80c0eab1cd" ], "markers": "python_version >= '3.8'", - "version": "==0.25.0" + "version": "==0.26.0" }, "idna": { "hashes": [ - "sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4", - "sha256:90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2" + "sha256:9ecdbbd083b06798ae1e86adcbfe8ab1479cf864e4ee30fe4e46a003d12491ca", + "sha256:c05567e9c24a6b9faaa835c4821bad0590fbb9d5779e7caa6e1cc4978e7eb24f" ], "markers": "python_version >= '3.5'", - "version": "==3.4" + "version": "==3.6" }, "iniconfig": { "hashes": [ @@ -2427,11 +2829,11 @@ }, "pytest": { "hashes": [ - "sha256:1d881c6124e08ff0a1bb75ba3ec0bfd8b5354a01c194ddd5a0a870a48d99b002", - "sha256:a766259cfab564a2ad52cb1aae1b881a75c3eb7e34ca3779697c23ed47c47069" + "sha256:0d009c083ea859a71b76adf7c1d502e4bc170b80a8ef002da5806527b9591fac", + "sha256:d989d136982de4e3b29dabcc838ad581c64e8ed52c11fbe86ddebd9da0818cd5" ], "index": "pypi", - "version": "==7.4.2" + "version": "==7.4.3" }, "pytest-aiohttp": { "hashes": [ @@ -2443,11 +2845,11 @@ }, "pytest-asyncio": { "hashes": [ - "sha256:40a7eae6dded22c7b604986855ea48400ab15b069ae38116e8c01238e9eeb64d", - "sha256:8666c1c8ac02631d7c51ba282e0c69a8a452b211ffedf2599099845da5c5c37b" + "sha256:c16052382554c7b22d48782ab3438d5b10f8cf7a4bdcae7f0f67f097d95beecc", + "sha256:ea9021364e32d58f0be43b91c6233fb8d2224ccef2398d6837559e587682808f" ], "index": "pypi", - "version": "==0.21.1" + "version": "==0.23.2" }, "pytest-cov": { "hashes": [ @@ -2459,11 +2861,11 @@ }, "pytest-mock": { "hashes": [ - "sha256:21c279fff83d70763b05f8874cc9cfb3fcacd6d354247a976f9529d19f9acf39", - "sha256:7f6b125602ac6d743e523ae0bfa71e1a697a2f5534064528c6ff84c2f7c2fc7f" + "sha256:0972719a7263072da3a21c7f4773069bcc7486027d7e8e1f81d98a47e701bc4f", + "sha256:31a40f038c22cad32287bb43932054451ff5583ff094bca6f675df2f8bc1a6e9" ], "index": "pypi", - "version": "==3.11.1" + "version": "==3.12.0" }, "python-dateutil": { "hashes": [ @@ -2507,107 +2909,123 @@ }, "types-awscrt": { "hashes": [ - "sha256:477a14565909312fe1de70d0b301548e83c038f436b8a1d7c83729e87cdd0b85", - "sha256:d8c379420ba75b1e43687d12b0b772a5bb17f352859a2bef6aa8f0abde123f55" + "sha256:99778c952e1eae10cc7a53468413001177026c9434345bf00120bb2ea5b79109", + "sha256:e872b65d041687ec7fb49fb4dcb871ff10ade5efeca02722e037a03bff81db7e" ], "markers": "python_version >= '3.7' and python_version < '4.0'", - "version": "==0.19.2" + "version": "==0.20.0" }, "typing-extensions": { "hashes": [ - "sha256:8f92fc8806f9a6b641eaa5318da32b44d401efaac0f6678c9bc448ba3605faa0", - "sha256:df8e4339e9cb77357558cbdbceca33c303714cf861d1eef15e1070055ae8b7ef" + "sha256:23478f88c37f27d76ac8aee6c905017a143b0b1b886c3c9f66bc2fd94f9f5783", + "sha256:af72aea155e91adfc61c3ae9e0e342dbc0cba726d6cba4b6c72c1f34e47291cd" ], "markers": "python_version >= '3.8'", - "version": "==4.8.0" + "version": "==4.9.0" }, "urllib3": { "hashes": [ - "sha256:24d6a242c28d29af46c3fae832c36db3bbebcc533dd1bb549172cd739c82df21", - "sha256:94a757d178c9be92ef5539b8840d48dc9cf1b2709c9d6b588232a055c524458b" + "sha256:34b97092d7e0a3a8cf7cd10e386f401b3737364026c45e622aa02903dffe0f07", + "sha256:f8ecc1bba5667413457c529ab955bf8c67b45db799d159066261719e328580a0" ], "markers": "python_version >= '3.6'", - "version": "==1.26.17" + "version": "==1.26.18" }, "yarl": { "hashes": [ - "sha256:04ab9d4b9f587c06d801c2abfe9317b77cdf996c65a90d5e84ecc45010823571", - "sha256:066c163aec9d3d073dc9ffe5dd3ad05069bcb03fcaab8d221290ba99f9f69ee3", - "sha256:13414591ff516e04fcdee8dc051c13fd3db13b673c7a4cb1350e6b2ad9639ad3", - "sha256:149ddea5abf329752ea5051b61bd6c1d979e13fbf122d3a1f9f0c8be6cb6f63c", - "sha256:159d81f22d7a43e6eabc36d7194cb53f2f15f498dbbfa8edc8a3239350f59fe7", - "sha256:1b1bba902cba32cdec51fca038fd53f8beee88b77efc373968d1ed021024cc04", - "sha256:22a94666751778629f1ec4280b08eb11815783c63f52092a5953faf73be24191", - "sha256:2a96c19c52ff442a808c105901d0bdfd2e28575b3d5f82e2f5fd67e20dc5f4ea", - "sha256:2b0738fb871812722a0ac2154be1f049c6223b9f6f22eec352996b69775b36d4", - "sha256:2c315df3293cd521033533d242d15eab26583360b58f7ee5d9565f15fee1bef4", - "sha256:32f1d071b3f362c80f1a7d322bfd7b2d11e33d2adf395cc1dd4df36c9c243095", - "sha256:3458a24e4ea3fd8930e934c129b676c27452e4ebda80fbe47b56d8c6c7a63a9e", - "sha256:38a3928ae37558bc1b559f67410df446d1fbfa87318b124bf5032c31e3447b74", - "sha256:3da8a678ca8b96c8606bbb8bfacd99a12ad5dd288bc6f7979baddd62f71c63ef", - "sha256:494053246b119b041960ddcd20fd76224149cfea8ed8777b687358727911dd33", - "sha256:50f33040f3836e912ed16d212f6cc1efb3231a8a60526a407aeb66c1c1956dde", - "sha256:52a25809fcbecfc63ac9ba0c0fb586f90837f5425edfd1ec9f3372b119585e45", - "sha256:53338749febd28935d55b41bf0bcc79d634881195a39f6b2f767870b72514caf", - "sha256:5415d5a4b080dc9612b1b63cba008db84e908b95848369aa1da3686ae27b6d2b", - "sha256:5610f80cf43b6202e2c33ba3ec2ee0a2884f8f423c8f4f62906731d876ef4fac", - "sha256:566185e8ebc0898b11f8026447eacd02e46226716229cea8db37496c8cdd26e0", - "sha256:56ff08ab5df8429901ebdc5d15941b59f6253393cb5da07b4170beefcf1b2528", - "sha256:59723a029760079b7d991a401386390c4be5bfec1e7dd83e25a6a0881859e716", - "sha256:5fcd436ea16fee7d4207c045b1e340020e58a2597301cfbcfdbe5abd2356c2fb", - "sha256:61016e7d582bc46a5378ffdd02cd0314fb8ba52f40f9cf4d9a5e7dbef88dee18", - "sha256:63c48f6cef34e6319a74c727376e95626f84ea091f92c0250a98e53e62c77c72", - "sha256:646d663eb2232d7909e6601f1a9107e66f9791f290a1b3dc7057818fe44fc2b6", - "sha256:662e6016409828ee910f5d9602a2729a8a57d74b163c89a837de3fea050c7582", - "sha256:674ca19cbee4a82c9f54e0d1eee28116e63bc6fd1e96c43031d11cbab8b2afd5", - "sha256:6a5883464143ab3ae9ba68daae8e7c5c95b969462bbe42e2464d60e7e2698368", - "sha256:6e7221580dc1db478464cfeef9b03b95c5852cc22894e418562997df0d074ccc", - "sha256:75df5ef94c3fdc393c6b19d80e6ef1ecc9ae2f4263c09cacb178d871c02a5ba9", - "sha256:783185c75c12a017cc345015ea359cc801c3b29a2966c2655cd12b233bf5a2be", - "sha256:822b30a0f22e588b32d3120f6d41e4ed021806418b4c9f0bc3048b8c8cb3f92a", - "sha256:8288d7cd28f8119b07dd49b7230d6b4562f9b61ee9a4ab02221060d21136be80", - "sha256:82aa6264b36c50acfb2424ad5ca537a2060ab6de158a5bd2a72a032cc75b9eb8", - "sha256:832b7e711027c114d79dffb92576acd1bd2decc467dec60e1cac96912602d0e6", - "sha256:838162460b3a08987546e881a2bfa573960bb559dfa739e7800ceeec92e64417", - "sha256:83fcc480d7549ccebe9415d96d9263e2d4226798c37ebd18c930fce43dfb9574", - "sha256:84e0b1599334b1e1478db01b756e55937d4614f8654311eb26012091be109d59", - "sha256:891c0e3ec5ec881541f6c5113d8df0315ce5440e244a716b95f2525b7b9f3608", - "sha256:8c2ad583743d16ddbdf6bb14b5cd76bf43b0d0006e918809d5d4ddf7bde8dd82", - "sha256:8c56986609b057b4839968ba901944af91b8e92f1725d1a2d77cbac6972b9ed1", - "sha256:8ea48e0a2f931064469bdabca50c2f578b565fc446f302a79ba6cc0ee7f384d3", - "sha256:8ec53a0ea2a80c5cd1ab397925f94bff59222aa3cf9c6da938ce05c9ec20428d", - "sha256:95d2ecefbcf4e744ea952d073c6922e72ee650ffc79028eb1e320e732898d7e8", - "sha256:9b3152f2f5677b997ae6c804b73da05a39daa6a9e85a512e0e6823d81cdad7cc", - "sha256:9bf345c3a4f5ba7f766430f97f9cc1320786f19584acc7086491f45524a551ac", - "sha256:a60347f234c2212a9f0361955007fcf4033a75bf600a33c88a0a8e91af77c0e8", - "sha256:a74dcbfe780e62f4b5a062714576f16c2f3493a0394e555ab141bf0d746bb955", - "sha256:a83503934c6273806aed765035716216cc9ab4e0364f7f066227e1aaea90b8d0", - "sha256:ac9bb4c5ce3975aeac288cfcb5061ce60e0d14d92209e780c93954076c7c4367", - "sha256:aff634b15beff8902d1f918012fc2a42e0dbae6f469fce134c8a0dc51ca423bb", - "sha256:b03917871bf859a81ccb180c9a2e6c1e04d2f6a51d953e6a5cdd70c93d4e5a2a", - "sha256:b124e2a6d223b65ba8768d5706d103280914d61f5cae3afbc50fc3dfcc016623", - "sha256:b25322201585c69abc7b0e89e72790469f7dad90d26754717f3310bfe30331c2", - "sha256:b7232f8dfbd225d57340e441d8caf8652a6acd06b389ea2d3222b8bc89cbfca6", - "sha256:b8cc1863402472f16c600e3e93d542b7e7542a540f95c30afd472e8e549fc3f7", - "sha256:b9a4e67ad7b646cd6f0938c7ebfd60e481b7410f574c560e455e938d2da8e0f4", - "sha256:be6b3fdec5c62f2a67cb3f8c6dbf56bbf3f61c0f046f84645cd1ca73532ea051", - "sha256:bf74d08542c3a9ea97bb8f343d4fcbd4d8f91bba5ec9d5d7f792dbe727f88938", - "sha256:c027a6e96ef77d401d8d5a5c8d6bc478e8042f1e448272e8d9752cb0aff8b5c8", - "sha256:c0c77533b5ed4bcc38e943178ccae29b9bcf48ffd1063f5821192f23a1bd27b9", - "sha256:c1012fa63eb6c032f3ce5d2171c267992ae0c00b9e164efe4d73db818465fac3", - "sha256:c3a53ba34a636a256d767c086ceb111358876e1fb6b50dfc4d3f4951d40133d5", - "sha256:d4e2c6d555e77b37288eaf45b8f60f0737c9efa3452c6c44626a5455aeb250b9", - "sha256:de119f56f3c5f0e2fb4dee508531a32b069a5f2c6e827b272d1e0ff5ac040333", - "sha256:e65610c5792870d45d7b68c677681376fcf9cc1c289f23e8e8b39c1485384185", - "sha256:e9fdc7ac0d42bc3ea78818557fab03af6181e076a2944f43c38684b4b6bed8e3", - "sha256:ee4afac41415d52d53a9833ebae7e32b344be72835bbb589018c9e938045a560", - "sha256:f364d3480bffd3aa566e886587eaca7c8c04d74f6e8933f3f2c996b7f09bee1b", - "sha256:f3b078dbe227f79be488ffcfc7a9edb3409d018e0952cf13f15fd6512847f3f7", - "sha256:f4e2d08f07a3d7d3e12549052eb5ad3eab1c349c53ac51c209a0e5991bbada78", - "sha256:f7a3d8146575e08c29ed1cd287068e6d02f1c7bdff8970db96683b9591b86ee7" + "sha256:008d3e808d03ef28542372d01057fd09168419cdc8f848efe2804f894ae03e51", + "sha256:03caa9507d3d3c83bca08650678e25364e1843b484f19986a527630ca376ecce", + "sha256:07574b007ee20e5c375a8fe4a0789fad26db905f9813be0f9fef5a68080de559", + "sha256:09efe4615ada057ba2d30df871d2f668af661e971dfeedf0c159927d48bbeff0", + "sha256:0d2454f0aef65ea81037759be5ca9947539667eecebca092733b2eb43c965a81", + "sha256:0e9d124c191d5b881060a9e5060627694c3bdd1fe24c5eecc8d5d7d0eb6faabc", + "sha256:18580f672e44ce1238b82f7fb87d727c4a131f3a9d33a5e0e82b793362bf18b4", + "sha256:1f23e4fe1e8794f74b6027d7cf19dc25f8b63af1483d91d595d4a07eca1fb26c", + "sha256:206a55215e6d05dbc6c98ce598a59e6fbd0c493e2de4ea6cc2f4934d5a18d130", + "sha256:23d32a2594cb5d565d358a92e151315d1b2268bc10f4610d098f96b147370136", + "sha256:26a1dc6285e03f3cc9e839a2da83bcbf31dcb0d004c72d0730e755b33466c30e", + "sha256:29e0f83f37610f173eb7e7b5562dd71467993495e568e708d99e9d1944f561ec", + "sha256:2b134fd795e2322b7684155b7855cc99409d10b2e408056db2b93b51a52accc7", + "sha256:2d47552b6e52c3319fede1b60b3de120fe83bde9b7bddad11a69fb0af7db32f1", + "sha256:357495293086c5b6d34ca9616a43d329317feab7917518bc97a08f9e55648455", + "sha256:35a2b9396879ce32754bd457d31a51ff0a9d426fd9e0e3c33394bf4b9036b099", + "sha256:3777ce5536d17989c91696db1d459574e9a9bd37660ea7ee4d3344579bb6f129", + "sha256:3986b6f41ad22988e53d5778f91855dc0399b043fc8946d4f2e68af22ee9ff10", + "sha256:44d8ffbb9c06e5a7f529f38f53eda23e50d1ed33c6c869e01481d3fafa6b8142", + "sha256:49a180c2e0743d5d6e0b4d1a9e5f633c62eca3f8a86ba5dd3c471060e352ca98", + "sha256:4aa9741085f635934f3a2583e16fcf62ba835719a8b2b28fb2917bb0537c1dfa", + "sha256:4b21516d181cd77ebd06ce160ef8cc2a5e9ad35fb1c5930882baff5ac865eee7", + "sha256:4b3c1ffe10069f655ea2d731808e76e0f452fc6c749bea04781daf18e6039525", + "sha256:4c7d56b293cc071e82532f70adcbd8b61909eec973ae9d2d1f9b233f3d943f2c", + "sha256:4e9035df8d0880b2f1c7f5031f33f69e071dfe72ee9310cfc76f7b605958ceb9", + "sha256:54525ae423d7b7a8ee81ba189f131054defdb122cde31ff17477951464c1691c", + "sha256:549d19c84c55d11687ddbd47eeb348a89df9cb30e1993f1b128f4685cd0ebbf8", + "sha256:54beabb809ffcacbd9d28ac57b0db46e42a6e341a030293fb3185c409e626b8b", + "sha256:566db86717cf8080b99b58b083b773a908ae40f06681e87e589a976faf8246bf", + "sha256:5a2e2433eb9344a163aced6a5f6c9222c0786e5a9e9cac2c89f0b28433f56e23", + "sha256:5aef935237d60a51a62b86249839b51345f47564208c6ee615ed2a40878dccdd", + "sha256:604f31d97fa493083ea21bd9b92c419012531c4e17ea6da0f65cacdcf5d0bd27", + "sha256:63b20738b5aac74e239622d2fe30df4fca4942a86e31bf47a81a0e94c14df94f", + "sha256:686a0c2f85f83463272ddffd4deb5e591c98aac1897d65e92319f729c320eece", + "sha256:6a962e04b8f91f8c4e5917e518d17958e3bdee71fd1d8b88cdce74dd0ebbf434", + "sha256:6ad6d10ed9b67a382b45f29ea028f92d25bc0bc1daf6c5b801b90b5aa70fb9ec", + "sha256:6f5cb257bc2ec58f437da2b37a8cd48f666db96d47b8a3115c29f316313654ff", + "sha256:6fe79f998a4052d79e1c30eeb7d6c1c1056ad33300f682465e1b4e9b5a188b78", + "sha256:7855426dfbddac81896b6e533ebefc0af2f132d4a47340cee6d22cac7190022d", + "sha256:7d5aaac37d19b2904bb9dfe12cdb08c8443e7ba7d2852894ad448d4b8f442863", + "sha256:801e9264d19643548651b9db361ce3287176671fb0117f96b5ac0ee1c3530d53", + "sha256:81eb57278deb6098a5b62e88ad8281b2ba09f2f1147c4767522353eaa6260b31", + "sha256:824d6c50492add5da9374875ce72db7a0733b29c2394890aef23d533106e2b15", + "sha256:8397a3817d7dcdd14bb266283cd1d6fc7264a48c186b986f32e86d86d35fbac5", + "sha256:848cd2a1df56ddbffeb375535fb62c9d1645dde33ca4d51341378b3f5954429b", + "sha256:84fc30f71689d7fc9168b92788abc977dc8cefa806909565fc2951d02f6b7d57", + "sha256:8619d6915b3b0b34420cf9b2bb6d81ef59d984cb0fde7544e9ece32b4b3043c3", + "sha256:8a854227cf581330ffa2c4824d96e52ee621dd571078a252c25e3a3b3d94a1b1", + "sha256:8be9e837ea9113676e5754b43b940b50cce76d9ed7d2461df1af39a8ee674d9f", + "sha256:928cecb0ef9d5a7946eb6ff58417ad2fe9375762382f1bf5c55e61645f2c43ad", + "sha256:957b4774373cf6f709359e5c8c4a0af9f6d7875db657adb0feaf8d6cb3c3964c", + "sha256:992f18e0ea248ee03b5a6e8b3b4738850ae7dbb172cc41c966462801cbf62cf7", + "sha256:9fc5fc1eeb029757349ad26bbc5880557389a03fa6ada41703db5e068881e5f2", + "sha256:a00862fb23195b6b8322f7d781b0dc1d82cb3bcac346d1e38689370cc1cc398b", + "sha256:a3a6ed1d525bfb91b3fc9b690c5a21bb52de28c018530ad85093cc488bee2dd2", + "sha256:a6327976c7c2f4ee6816eff196e25385ccc02cb81427952414a64811037bbc8b", + "sha256:a7409f968456111140c1c95301cadf071bd30a81cbd7ab829169fb9e3d72eae9", + "sha256:a825ec844298c791fd28ed14ed1bffc56a98d15b8c58a20e0e08c1f5f2bea1be", + "sha256:a8c1df72eb746f4136fe9a2e72b0c9dc1da1cbd23b5372f94b5820ff8ae30e0e", + "sha256:a9bd00dc3bc395a662900f33f74feb3e757429e545d831eef5bb280252631984", + "sha256:aa102d6d280a5455ad6a0f9e6d769989638718e938a6a0a2ff3f4a7ff8c62cc4", + "sha256:aaaea1e536f98754a6e5c56091baa1b6ce2f2700cc4a00b0d49eca8dea471074", + "sha256:ad4d7a90a92e528aadf4965d685c17dacff3df282db1121136c382dc0b6014d2", + "sha256:b8477c1ee4bd47c57d49621a062121c3023609f7a13b8a46953eb6c9716ca392", + "sha256:ba6f52cbc7809cd8d74604cce9c14868306ae4aa0282016b641c661f981a6e91", + "sha256:bac8d525a8dbc2a1507ec731d2867025d11ceadcb4dd421423a5d42c56818541", + "sha256:bef596fdaa8f26e3d66af846bbe77057237cb6e8efff8cd7cc8dff9a62278bbf", + "sha256:c0ec0ed476f77db9fb29bca17f0a8fcc7bc97ad4c6c1d8959c507decb22e8572", + "sha256:c38c9ddb6103ceae4e4498f9c08fac9b590c5c71b0370f98714768e22ac6fa66", + "sha256:c7224cab95645c7ab53791022ae77a4509472613e839dab722a72abe5a684575", + "sha256:c74018551e31269d56fab81a728f683667e7c28c04e807ba08f8c9e3bba32f14", + "sha256:ca06675212f94e7a610e85ca36948bb8fc023e458dd6c63ef71abfd482481aa5", + "sha256:d1d2532b340b692880261c15aee4dc94dd22ca5d61b9db9a8a361953d36410b1", + "sha256:d25039a474c4c72a5ad4b52495056f843a7ff07b632c1b92ea9043a3d9950f6e", + "sha256:d5ff2c858f5f6a42c2a8e751100f237c5e869cbde669a724f2062d4c4ef93551", + "sha256:d7d7f7de27b8944f1fee2c26a88b4dabc2409d2fea7a9ed3df79b67277644e17", + "sha256:d7eeb6d22331e2fd42fce928a81c697c9ee2d51400bd1a28803965883e13cead", + "sha256:d8a1c6c0be645c745a081c192e747c5de06e944a0d21245f4cf7c05e457c36e0", + "sha256:d8b889777de69897406c9fb0b76cdf2fd0f31267861ae7501d93003d55f54fbe", + "sha256:d9e09c9d74f4566e905a0b8fa668c58109f7624db96a2171f21747abc7524234", + "sha256:db8e58b9d79200c76956cefd14d5c90af54416ff5353c5bfd7cbe58818e26ef0", + "sha256:ddb2a5c08a4eaaba605340fdee8fc08e406c56617566d9643ad8bf6852778fc7", + "sha256:e0381b4ce23ff92f8170080c97678040fc5b08da85e9e292292aba67fdac6c34", + "sha256:e23a6d84d9d1738dbc6e38167776107e63307dfc8ad108e580548d1f2c587f42", + "sha256:e516dc8baf7b380e6c1c26792610230f37147bb754d6426462ab115a02944385", + "sha256:ea65804b5dc88dacd4a40279af0cdadcfe74b3e5b4c897aa0d81cf86927fee78", + "sha256:ec61d826d80fc293ed46c9dd26995921e3a82146feacd952ef0757236fc137be", + "sha256:ee04010f26d5102399bd17f8df8bc38dc7ccd7701dc77f4a68c5b8d733406958", + "sha256:f3bc6af6e2b8f92eced34ef6a96ffb248e863af20ef4fde9448cc8c9b858b749", + "sha256:f7d6b36dd2e029b6bcb8a13cf19664c7b8e19ab3a58e0fefbb5b8461447ed5ec" ], "markers": "python_version >= '3.7'", - "version": "==1.9.2" + "version": "==1.9.4" } } } diff --git a/app/models/prospect_model.py b/app/models/prospect_model.py new file mode 100644 index 000000000..7a3e7f6f7 --- /dev/null +++ b/app/models/prospect_model.py @@ -0,0 +1,8 @@ +from pydantic import BaseModel + + +class ProspectModel(BaseModel): + id: str + topic: str + publisher: str + url: str diff --git a/app/rankers/new_tab_scheduler.py b/app/rankers/new_tab_scheduler.py new file mode 100644 index 000000000..e663f83fc --- /dev/null +++ b/app/rankers/new_tab_scheduler.py @@ -0,0 +1,31 @@ +from pymoo.core.problem import ElementwiseProblem + + +class ArticleSelectionProblem(ElementwiseProblem): + def __init__(self, articles, n_articles=30): + super().__init__(n_var=len(articles), n_obj=1, n_constr=1 + 2 * len(set([a.topic for a in articles]))) + self.articles = articles + self.n_articles = n_articles + + def _evaluate(self, x, out, *args, **kwargs): + selected_articles = [article for article, flag in zip(self.articles, x) if flag == 1] + + # Objective: Maximize total quality score + total_quality_score = sum(article.quality_score for article in selected_articles) + out["F"] = -total_quality_score # Negative because we want to maximize + + # Constraints + topic_count = {} + publisher_count = {} + for article in selected_articles: + topic_count[article.topic] = topic_count.get(article.topic, 0) + 1 + publisher_count[article.publisher] = publisher_count.get(article.publisher, 0) + 1 + + # Constraint: No more than 2 articles from the same topic or publisher + topic_constraints = [count - 2 for count in topic_count.values()] + publisher_constraints = [count - 2 for count in publisher_count.values()] + + # Constraint: Exactly 30 articles + article_count_constraint = [len(selected_articles) - self.n_articles] + + out["G"] = topic_constraints + publisher_constraints + article_count_constraint diff --git a/tests/assets/json/get_prospects.json b/tests/assets/json/get_prospects.json new file mode 100644 index 000000000..339d0d11b --- /dev/null +++ b/tests/assets/json/get_prospects.json @@ -0,0 +1,2798 @@ +{ + "data": { + "getProspects": [ + { + "id": "ffba8b78-1b0a-4835-a224-682df208db94", + "prospectId": "05ba962e-5cbe-51d2-91bb-09b08f0ac638", + "scheduledSurfaceGuid": "NEW_TAB_EN_US", + "topic": "", + "prospectType": "RSS_LOGISTIC_RECENT", + "url": "https://www.vanityfair.com/hollywood/conan-obriens-wild-first-year-an-oral-history", + "createdAt": 1703095880, + "imageUrl": "https://media.vanityfair.com/photos/6579e0749adb7e7317b91d55/16:9/w_1280,c_limit/VF0224-Conan-Obrien.jpg", + "authors": "Andrew Buss", + "publisher": "Vanity Fair", + "domain": "vanityfair.com", + "title": "Conan O’Brien’s Wild First Year at ‘Late Night’", + "excerpt": "If you tuned in to NBC at 12:35 a.m. on September 13, 1993, you witnessed late-night history in the making. Jay Leno had inherited The Tonight Show from Johnny Carson in 1992, and a deeply pissed-off David Letterman had decamped to CBS. That meant a new host for Late Night had to be found.", + "language": "EN", + "saveCount": 0, + "isSyndicated": false, + "isCollection": false, + "approvedCorpusItem": null, + "rejectedCorpusItem": null, + "item": { + "givenUrl": "https://www.vanityfair.com/hollywood/conan-obriens-wild-first-year-an-oral-history", + "itemId": "3982855609", + "normalUrl": "http://vanityfair.com/hollywood/conan-obriens-wild-first-year-an-oral-history", + "datePublished": "2023-12-20 07:00:00", + "timeToRead": 27, + "__typename": "Item" + }, + "__typename": "Prospect" + }, + { + "id": "a2472bfe-6bd5-4e7d-9320-d0206a086400", + "prospectId": "99b0edcc-425f-5962-b7a7-4883fd2cf058", + "scheduledSurfaceGuid": "NEW_TAB_EN_US", + "topic": "", + "prospectType": "RSS_LOGISTIC_RECENT", + "url": "https://www.npr.org/2023/12/20/1220559009/congolese-head-to-the-polls-to-elect-their-next-president", + "createdAt": 1703095880, + "imageUrl": "https://media.npr.org/include/images/facebook-default-wide-s1400-c100.jpg", + "authors": "Michel Martin,Emmanuel Akinwotu", + "publisher": "NPR", + "domain": "npr.org", + "title": "Congolese head to the polls to elect their next president", + "excerpt": "Millions of Congolese will vote for a new president Wednesday, with hopes for a peaceful election. The Democratic Republic of Congo has vast mineral wealth, but is impacted by poverty and conflict.", + "language": "EN", + "saveCount": 0, + "isSyndicated": false, + "isCollection": false, + "approvedCorpusItem": null, + "rejectedCorpusItem": null, + "item": { + "givenUrl": "https://www.npr.org/2023/12/20/1220559009/congolese-head-to-the-polls-to-elect-their-next-president", + "itemId": "3982793091", + "normalUrl": "http://npr.org/2023/12/20/1220559009/congolese-head-to-the-polls-to-elect-their-next-president", + "datePublished": "2023-12-20 00:00:00", + "timeToRead": null, + "__typename": "Item" + }, + "__typename": "Prospect" + }, + { + "id": "d737ba90-3638-4db0-8245-cb7522c2db42", + "prospectId": "6a4115cc-96e5-5b6b-b7a0-9639def8d58c", + "scheduledSurfaceGuid": "NEW_TAB_EN_US", + "topic": "", + "prospectType": "RSS_LOGISTIC_RECENT", + "url": "https://nymag.com/intelligencer/2023/12/rudy-giuliani-is-really-really-broke.html", + "createdAt": 1703095880, + "imageUrl": "https://pyxis.nymag.com/v1/imgs/2c3/69b/304e99ff5f5885b27f354ee3341245ae94-giuliani.1x.rsocial.w1200.jpg", + "authors": "Nia Prater", + "publisher": "New York Magazine", + "domain": "nymag.com", + "title": "Rudy Is Really, Really Broke", + "excerpt": "In 2021, federal agents raided Rudy Giuliani’s home and office and seized his electronic devices as part of an inquiry into his dealings with Ukraine.", + "language": "EN", + "saveCount": 0, + "isSyndicated": false, + "isCollection": false, + "approvedCorpusItem": null, + "rejectedCorpusItem": null, + "item": { + "givenUrl": "https://nymag.com/intelligencer/2023/12/rudy-giuliani-is-really-really-broke.html", + "itemId": "3982967943", + "normalUrl": "http://nymag.com/intelligencer/2023/12/rudy-giuliani-is-really-really-broke.html", + "datePublished": "2023-12-20 11:06:33", + "timeToRead": 2, + "__typename": "Item" + }, + "__typename": "Prospect" + }, + { + "id": "198d2c90-3adb-4f16-95de-85d0d1011796", + "prospectId": "9355b362-2715-53d3-ae5f-664935efc599", + "scheduledSurfaceGuid": "NEW_TAB_EN_US", + "topic": "", + "prospectType": "RSS_LOGISTIC_RECENT", + "url": "https://www.cntraveler.com/story/where-you-should-travel-in-2024-according-to-your-sign", + "createdAt": 1703095880, + "imageUrl": "https://media.cntraveler.com/photos/6582078d3ac3bbf39799b40f/16:9/w_1280,c_limit/Guatemala_GettyImages-522674810.jpg", + "authors": "Steph Koyfman", + "publisher": "Condé Nast Traveler", + "domain": "cntraveler.com", + "title": "Where You Should Travel in 2024, According to Your Sign", + "excerpt": "After the year of revenge travel (and flight costs rising with a similar vengeance), tourism might be settling into relative homeostasis in 2024. Then again, everything has changed, including the terrain of where you’ll want to go next, and maybe even the order of your bucket list.", + "language": "EN", + "saveCount": 0, + "isSyndicated": false, + "isCollection": false, + "approvedCorpusItem": null, + "rejectedCorpusItem": null, + "item": { + "givenUrl": "https://www.cntraveler.com/story/where-you-should-travel-in-2024-according-to-your-sign", + "itemId": "3982655474", + "normalUrl": "http://cntraveler.com/story/where-you-should-travel-in-2024-according-to-your-sign", + "datePublished": "2023-12-19 18:23:51", + "timeToRead": 14, + "__typename": "Item" + }, + "__typename": "Prospect" + }, + { + "id": "2f4cc27f-371d-4f32-8cb8-d7d2304325c9", + "prospectId": "08d2cfab-046b-53b0-99f2-05e7b374ff7b", + "scheduledSurfaceGuid": "NEW_TAB_EN_US", + "topic": "", + "prospectType": "RSS_LOGISTIC_RECENT", + "url": "https://slate.com/human-interest/2023/12/dual-language-programs-admissions-outcomes.html", + "createdAt": 1703095880, + "imageUrl": "https://compote.slate.com/images/30d20a69-0acd-4dfe-a381-8d9b9f6fcea6.jpeg?crop=1560%2C1040%2Cx0%2Cy0&width=1560", + "authors": "Sarah Carr", + "publisher": "Slate", + "domain": "slate.com", + "title": "The New Gifted-and-Talented", + "excerpt": "This story about dual-language programs was produced by the Hechinger Report, a nonprofit, independent news organization focused on inequality and innovation in education. Sign up for the Hechinger newsletter.", + "language": "EN", + "saveCount": 0, + "isSyndicated": false, + "isCollection": false, + "approvedCorpusItem": { + "externalId": "08eb8420-7157-4968-9977-e3baaff33e56", + "prospectId": "08d2cfab-046b-53b0-99f2-05e7b374ff7b", + "title": "The New Gifted-and-Talented", + "language": "EN", + "publisher": "Slate", + "authors": [ + { + "name": "Sarah Carr", + "sortOrder": 0, + "__typename": "CorpusItemAuthor" + } + ], + "url": "https://slate.com/human-interest/2023/12/dual-language-programs-admissions-outcomes.html", + "imageUrl": "https://s3.us-east-1.amazonaws.com/pocket-curatedcorpusapi-prod-images/b64761e4-812d-4f4c-b139-92936d628dba.jpeg", + "excerpt": "For ambitious middle-class families, dual-language programs are the next big thing.", + "status": "RECOMMENDATION", + "source": "PROSPECT", + "topic": "EDUCATION", + "isCollection": false, + "isTimeSensitive": false, + "isSyndicated": false, + "createdBy": "ad|Mozilla-LDAP|amaoz2", + "createdAt": 1703003696, + "updatedBy": null, + "updatedAt": 1703003696, + "scheduledSurfaceHistory": [ + { + "externalId": "76496d7f-9129-47f2-b031-9abba4183fc7", + "createdBy": "ad|Mozilla-LDAP|amaoz2", + "scheduledDate": "2023-12-21", + "scheduledSurfaceGuid": "NEW_TAB_EN_US", + "__typename": "ApprovedCorpusItemScheduledSurfaceHistory" + } + ], + "__typename": "ApprovedCorpusItem" + }, + "rejectedCorpusItem": null, + "item": { + "givenUrl": "https://slate.com/human-interest/2023/12/dual-language-programs-admissions-outcomes.html", + "itemId": "3982310056", + "normalUrl": "http://slate.com/human-interest/2023/12/dual-language-programs-admissions-outcomes.html", + "datePublished": "2023-12-19 04:45:00", + "timeToRead": 11, + "__typename": "Item" + }, + "__typename": "Prospect" + }, + { + "id": "926fc369-2684-44a7-99ad-4cf5769369d6", + "prospectId": "a9524d79-26d4-569d-b801-d4f35f74dd99", + "scheduledSurfaceGuid": "NEW_TAB_EN_US", + "topic": "", + "prospectType": "RSS_LOGISTIC_RECENT", + "url": "https://www.texasmonthly.com/style/amanda-mccarty-clotheshorse-slow-fashion-advocate-holiday-shopping/", + "createdAt": 1703095880, + "imageUrl": "https://img.texasmonthly.com/2023/12/slow-fashion-guide-to-holiday-shopping.jpg?auto=compress&crop=faces&fit=fit&fm=pjpg&ixlib=php-3.3.1&q=45", + "authors": "Amanda O'Donnell", + "publisher": "Texas Monthly", + "domain": "texasmonthly.com", + "title": "How a Slow Fashion Advocate Gets Her Holiday Shopping Done", + "excerpt": "Like many before her, Amanda McCarty had a come-to-Jesus moment during an impromptu trip to furnishing-and-decor megastore HomeGoods.", + "language": "EN", + "saveCount": 0, + "isSyndicated": false, + "isCollection": false, + "approvedCorpusItem": { + "externalId": "a6dd7613-1a60-4a0d-8ad2-0569a7f09efa", + "prospectId": "a9524d79-26d4-569d-b801-d4f35f74dd99", + "title": "How a Slow Fashion Advocate Gets Her Holiday Shopping Done", + "language": "EN", + "publisher": "Texas Monthly", + "authors": [ + { + "name": "Amanda O'Donnell", + "sortOrder": 0, + "__typename": "CorpusItemAuthor" + } + ], + "url": "https://www.texasmonthly.com/style/amanda-mccarty-clotheshorse-slow-fashion-advocate-holiday-shopping/", + "imageUrl": "https://s3.us-east-1.amazonaws.com/pocket-curatedcorpusapi-prod-images/8d81f065-1c1e-44c4-b1a0-72e4f47b8c19.jpeg", + "excerpt": " Austin’s Amanda McCarty hosts the podcast “Clotheshorse,” which aims to demystify the fashion business and discourage overconsumption. ", + "status": "RECOMMENDATION", + "source": "PROSPECT", + "topic": "PERSONAL_FINANCE", + "isCollection": false, + "isTimeSensitive": true, + "isSyndicated": false, + "createdBy": "ad|Mozilla-LDAP|cevanoff", + "createdAt": 1703036012, + "updatedBy": "ad|Mozilla-LDAP|cevanoff", + "updatedAt": 1703047346, + "scheduledSurfaceHistory": [ + { + "externalId": "683022e6-dec3-4be0-a37e-a74accd04909", + "createdBy": "ad|Mozilla-LDAP|cevanoff", + "scheduledDate": "2023-12-21", + "scheduledSurfaceGuid": "NEW_TAB_EN_US", + "__typename": "ApprovedCorpusItemScheduledSurfaceHistory" + } + ], + "__typename": "ApprovedCorpusItem" + }, + "rejectedCorpusItem": null, + "item": { + "givenUrl": "https://www.texasmonthly.com/style/amanda-mccarty-clotheshorse-slow-fashion-advocate-holiday-shopping/", + "itemId": "3982602580", + "normalUrl": "http://texasmonthly.com/style/amanda-mccarty-clotheshorse-slow-fashion-advocate-holiday-shopping", + "datePublished": "2023-12-19 11:53:34", + "timeToRead": 5, + "__typename": "Item" + }, + "__typename": "Prospect" + }, + { + "id": "2b5eeb37-7cf5-4655-969e-9903565b32f2", + "prospectId": "15bf2c74-17e9-5a28-bf56-9af45a106ece", + "scheduledSurfaceGuid": "NEW_TAB_EN_US", + "topic": "", + "prospectType": "RSS_LOGISTIC_RECENT", + "url": "https://www.romper.com/entertainment/olivia-munn-son-malcolm-peeling-garlic-video", + "createdAt": 1703095880, + "imageUrl": "https://imgix.bustle.com/uploads/image/2023/12/19/58a5bf82-1e26-4956-9f21-a0d989d5942e-screen-shot-2023-12-19-at-11011-pm.jpg?w=1200&h=630&fit=crop&crop=faces&fm=jpg", + "authors": "Jen McGuire", + "publisher": "romper.com", + "domain": "romper.com", + "title": "Olivia Munn Says Her Son Malcolm Only Wants Garlic For Christmas In Adorable Video", + "excerpt": "If you were planning on buying any Christmas gifts for Olivia Munn’s 2-year-old son Malcolm, she has some advice for you. Go ahead and save your money for something else. Because all Malcolm wants is to peel garlic and lots of it.", + "language": "EN", + "saveCount": 0, + "isSyndicated": false, + "isCollection": false, + "approvedCorpusItem": null, + "rejectedCorpusItem": null, + "item": { + "givenUrl": "https://www.romper.com/entertainment/olivia-munn-son-malcolm-peeling-garlic-video", + "itemId": "3982602585", + "normalUrl": "http://romper.com/entertainment/olivia-munn-son-malcolm-peeling-garlic-video", + "datePublished": "2023-12-19 00:00:00", + "timeToRead": 2, + "__typename": "Item" + }, + "__typename": "Prospect" + }, + { + "id": "fdadfc9c-3d0e-4cbe-8119-c3169af73655", + "prospectId": "7f29dc19-c4e9-56b8-aa18-dc3d85889f65", + "scheduledSurfaceGuid": "NEW_TAB_EN_US", + "topic": "", + "prospectType": "RSS_LOGISTIC_RECENT", + "url": "https://www.latimes.com/sports/ucla/story/2023-12-19/ucla-basketball-vs-cal-state-northridge-recap", + "createdAt": 1703095881, + "imageUrl": "https://ca-times.brightspotcdn.com/dims4/default/196efb4/2147483647/strip/true/crop/2452x1287+1+80/resize/1200x630!/quality/75/?url=https%3A%2F%2Fcalifornia-times-brightspot.s3.amazonaws.com%2Fac%2F48%2F3b2864854d5cafc0eccd5a7ee180%2Fncaa-gonzaga-ucla-basketball-20427.jpg", + "authors": "Ben Bolch", + "publisher": "Los Angeles Times", + "domain": "latimes.com", + "title": "UCLA’s home winning streak ends with loss to Cal State Northridge", + "excerpt": "The streak is over. The stink is spreading. Bullied on its home court by Cal State Northridge on Tuesday night, UCLA was softer and sloppier than a fearless opponent from the Big West Conference.", + "language": "EN", + "saveCount": 0, + "isSyndicated": false, + "isCollection": false, + "approvedCorpusItem": null, + "rejectedCorpusItem": null, + "item": { + "givenUrl": "https://www.latimes.com/sports/ucla/story/2023-12-19/ucla-basketball-vs-cal-state-northridge-recap", + "itemId": "3982795980", + "normalUrl": "http://latimes.com/sports/ucla/story/2023-12-19/ucla-basketball-vs-cal-state-northridge-recap", + "datePublished": "2023-12-20 05:34:29", + "timeToRead": 3, + "__typename": "Item" + }, + "__typename": "Prospect" + }, + { + "id": "3d610952-0d8a-45ea-a46f-a9ccbabd7ef8", + "prospectId": "33ddb73a-bc1e-5cc5-895a-84b1093d17a6", + "scheduledSurfaceGuid": "NEW_TAB_EN_US", + "topic": "", + "prospectType": "RSS_LOGISTIC_RECENT", + "url": "https://www.gq.com/story/this-was-the-year-gay-sex-onscreen-got-really-good", + "createdAt": 1703095881, + "imageUrl": "https://media.gq.com/photos/6580b9e93b4faf42b37a2c4e/16:9/w_1280,c_limit/year_of_gaysex2.jpg", + "authors": "Raymond Ang", + "publisher": "GQ", + "domain": "gq.com", + "title": "This Was the Year Gay Sex Onscreen Got Really Good", + "excerpt": "I’m talking to Lopez via Zoom about the first gay sex scene he ever saw onscreen. And the usually articulate, quip-ready director and playwright seems absolutely stumped.", + "language": "EN", + "saveCount": 0, + "isSyndicated": false, + "isCollection": false, + "approvedCorpusItem": null, + "rejectedCorpusItem": null, + "item": { + "givenUrl": "https://www.gq.com/story/this-was-the-year-gay-sex-onscreen-got-really-good", + "itemId": "3982868255", + "normalUrl": "http://gq.com/story/this-was-the-year-gay-sex-onscreen-got-really-good", + "datePublished": "2023-12-20 07:05:00", + "timeToRead": 12, + "__typename": "Item" + }, + "__typename": "Prospect" + }, + { + "id": "f197e3a5-5754-4cf5-ae9a-890dd8dbe43b", + "prospectId": "7c1cc9be-a2da-5380-a5c5-64a34653f4ee", + "scheduledSurfaceGuid": "NEW_TAB_EN_US", + "topic": "", + "prospectType": "RSS_LOGISTIC_RECENT", + "url": "https://www.washingtonpost.com/food/2023/12/20/christmas-breakfast-recipes/", + "createdAt": 1703095881, + "imageUrl": "https://www.washingtonpost.com/wp-apps/imrs.php?src=https://arc-anglerfish-washpost-prod-washpost.s3.amazonaws.com/public/J2J4UUWIFHLVOMPHZDTGAWPWJE.jpg&w=1440", + "authors": "Anna Luisa Rodriguez", + "publisher": "The Washington Post", + "domain": "washingtonpost.com", + "title": "9 Christmas breakfast recipes that are quick and easy", + "excerpt": "Enjoy the holiday with your loved ones over a delicious low-effort breakfast.", + "language": "EN", + "saveCount": 0, + "isSyndicated": false, + "isCollection": false, + "approvedCorpusItem": null, + "rejectedCorpusItem": null, + "item": { + "givenUrl": "https://www.washingtonpost.com/food/2023/12/20/christmas-breakfast-recipes/", + "itemId": "3982965851", + "normalUrl": "http://washingtonpost.com/food/2023/12/20/christmas-breakfast-recipes", + "datePublished": "2023-12-20 11:00:59", + "timeToRead": null, + "__typename": "Item" + }, + "__typename": "Prospect" + }, + { + "id": "9be9ec4b-b400-40ee-8ab5-0ce9ef5321d6", + "prospectId": "3f28769c-0c84-5d34-98ab-96dbbfab23ef", + "scheduledSurfaceGuid": "NEW_TAB_EN_US", + "topic": "", + "prospectType": "RSS_LOGISTIC_RECENT", + "url": "https://www.menshealth.com/entertainment/g46129075/best-bradley-cooper-movies/", + "createdAt": 1703095881, + "imageUrl": "https://hips.hearstapps.com/hmg-prod/images/mh-12-7-cooper-657b251ca4028.png?crop=1xw:1xh;center,top&resize=1200:*", + "authors": "Carrie Wittmer", + "publisher": "Men's Health", + "domain": "menshealth.com", + "title": "Bradley Cooper’s Best (and Worst) Movies, Ranked", + "excerpt": "'Maestro,' out today, marks the actor/director's latest film. But how does it compare to some of his very best? It all started because people realized smoking is bad for you.", + "language": "EN", + "saveCount": 0, + "isSyndicated": false, + "isCollection": false, + "approvedCorpusItem": null, + "rejectedCorpusItem": null, + "item": { + "givenUrl": "https://www.menshealth.com/entertainment/g46129075/best-bradley-cooper-movies/", + "itemId": "3982894941", + "normalUrl": "http://menshealth.com/entertainment/g46129075/best-bradley-cooper-movies", + "datePublished": "2023-12-20 08:00:00", + "timeToRead": 10, + "__typename": "Item" + }, + "__typename": "Prospect" + }, + { + "id": "bd99924d-834f-44d1-8230-2e541c33249d", + "prospectId": "926de524-ff8b-55d2-bab8-3ac00f902da1", + "scheduledSurfaceGuid": "NEW_TAB_EN_US", + "topic": "", + "prospectType": "RSS_LOGISTIC_RECENT", + "url": "https://www.smithsonianmag.com/smithsonian-institution/lillian-vernons-catalog-empire-got-its-start-at-a-kitchen-table-180983440/", + "createdAt": 1703095881, + "imageUrl": "https://th-thumbnailer.cdn-si-edu.com/T1W71_AG95hd2Q6xQCuq0ED3zc4=/fit-in/1600x0/filters:focal(1500x1129:1501x1130)/https%3A%2F%2Ftf-cmsv2-smithsonianmag-media.s3.amazonaws.com%2Ffiler_public%2F5f%2F42%2F5f428475-c1b7-4da0-99be-63dcf0b32134%2Fkitchen-table-jn2020-00216.jpg", + "authors": "Alice George", + "publisher": "Smithsonian Magazine", + "domain": "smithsonianmag.com", + "title": "Lillian Vernon’s Catalog Empire Got Its Start at a Kitchen Table", + "excerpt": "Like many pieces of household furniture, this table bears the wear and tear caused by children making their mark on the world. Its small size says something about the compact apartment in Mount Vernon, New York, that once housed a family of four and a blossoming business.", + "language": "EN", + "saveCount": 0, + "isSyndicated": false, + "isCollection": false, + "approvedCorpusItem": { + "externalId": "5550ee4f-f96a-46cc-b357-d796f2dbd3cb", + "prospectId": "926de524-ff8b-55d2-bab8-3ac00f902da1", + "title": "Lillian Vernon’s Catalog Empire Got Its Start at a Kitchen Table", + "language": "EN", + "publisher": "Smithsonian Magazine", + "authors": [ + { + "name": "Alice George", + "sortOrder": 0, + "__typename": "CorpusItemAuthor" + } + ], + "url": "https://www.smithsonianmag.com/smithsonian-institution/lillian-vernons-catalog-empire-got-its-start-at-a-kitchen-table-180983440/", + "imageUrl": "https://s3.us-east-1.amazonaws.com/pocket-curatedcorpusapi-prod-images/c797c32c-a144-4cc6-90ed-1e680564db97.jpeg", + "excerpt": "A keen sense of what shoppers wanted made her eponymous company the first woman-owned business on the American Stock Exchange.", + "status": "CORPUS", + "source": "PROSPECT", + "topic": "BUSINESS", + "isCollection": false, + "isTimeSensitive": false, + "isSyndicated": false, + "createdBy": "ad|Mozilla-LDAP|kgoffe", + "createdAt": 1703018751, + "updatedBy": null, + "updatedAt": 1703018751, + "scheduledSurfaceHistory": [], + "__typename": "ApprovedCorpusItem" + }, + "rejectedCorpusItem": null, + "item": { + "givenUrl": "https://www.smithsonianmag.com/smithsonian-institution/lillian-vernons-catalog-empire-got-its-start-at-a-kitchen-table-180983440/", + "itemId": "3982414213", + "normalUrl": "http://smithsonianmag.com/smithsonian-institution/lillian-vernons-catalog-empire-got-its-start-at-a-kitchen-table-180983440", + "datePublished": "2023-12-19 09:39:00", + "timeToRead": 8, + "__typename": "Item" + }, + "__typename": "Prospect" + }, + { + "id": "78ca7a1d-3944-4a70-837f-b551593fba00", + "prospectId": "54785cf9-4b7c-5f01-bcf0-1acc13408291", + "scheduledSurfaceGuid": "NEW_TAB_EN_US", + "topic": "", + "prospectType": "RSS_LOGISTIC_RECENT", + "url": "https://www.vox.com/culture/24008240/2023-best-books-vaster-wild-lauren-groff-chain-gang-all-stars-nana-kwame-adjei-brenyah", + "createdAt": 1703095881, + "imageUrl": "https://cdn.vox-cdn.com/thumbor/u3zpa4dXjQgVIhl74lVAQcLLnL4=/0x38:1920x1043/fit-in/1200x630/cdn.vox-cdn.com/uploads/chorus_asset/file/25174394/Vox_BooksoftheYear_ConstanceGrady.png", + "authors": "Constance Grady", + "publisher": "Vox", + "domain": "vox.com", + "title": "The very best books of 2023", + "excerpt": "From buzzy novels to literary biographies, Vox’s book critic breaks down the year in reading. If you buy something from a Vox link, Vox Media may earn a commission. See our ethics statement.", + "language": "EN", + "saveCount": 0, + "isSyndicated": false, + "isCollection": false, + "approvedCorpusItem": null, + "rejectedCorpusItem": null, + "item": { + "givenUrl": "https://www.vox.com/culture/24008240/2023-best-books-vaster-wild-lauren-groff-chain-gang-all-stars-nana-kwame-adjei-brenyah", + "itemId": "3982841173", + "normalUrl": "http://vox.com/culture/24008240/2023-best-books-vaster-wild-lauren-groff-chain-gang-all-stars-nana-kwame-adjei-brenyah", + "datePublished": "2023-12-20 06:30:00", + "timeToRead": 17, + "__typename": "Item" + }, + "__typename": "Prospect" + }, + { + "id": "f7978ea7-a5d5-4f02-91df-5cd5471ba526", + "prospectId": "e8ae8f78-a788-5ede-bfd9-c46d1391d8fd", + "scheduledSurfaceGuid": "NEW_TAB_EN_US", + "topic": "", + "prospectType": "RSS_LOGISTIC_RECENT", + "url": "https://www.theguardian.com/us-news/2023/dec/20/women-dressing-women-metropolitan-museum-fashion-exhibit", + "createdAt": 1703095881, + "imageUrl": "https://i.guim.co.uk/img/media/cc3c109f189ee09497dd1d6abd88e1dad280d9d8/669_1061_5389_3235/master/5389.jpg?width=1200&height=630&quality=85&auto=format&fit=crop&overlay-align=bottom%2Cleft&overlay-width=100p&overlay-base64=L2ltZy9zdGF0aWMvb3ZlcmxheXMvdGctZGVmYXVsdC5wbmc&enable=upscale&s=0e775112c4ee7f297b45067cc290ff4b", + "authors": "Alaina Demopoulos", + "publisher": "The Guardian", + "domain": "theguardian.com", + "title": "Women Dressing Women: this Met exhibit is comically overdue – but still won me over", + "excerpt": "There weren’t many men visiting Women Dressing Women, the Metropolitan Museum of Art’s new exhibit on female designers through modern history.", + "language": "EN", + "saveCount": 0, + "isSyndicated": false, + "isCollection": false, + "approvedCorpusItem": null, + "rejectedCorpusItem": null, + "item": { + "givenUrl": "https://www.theguardian.com/us-news/2023/dec/20/women-dressing-women-metropolitan-museum-fashion-exhibit", + "itemId": "3982860697", + "normalUrl": "http://theguardian.com/us-news/2023/dec/20/women-dressing-women-metropolitan-museum-fashion-exhibit", + "datePublished": "2023-12-20 07:00:12", + "timeToRead": 6, + "__typename": "Item" + }, + "__typename": "Prospect" + }, + { + "id": "c045fc20-0a30-4cf0-aa32-39189b02375b", + "prospectId": "b2dfa52f-9276-5186-ba87-a34de9fea88c", + "scheduledSurfaceGuid": "NEW_TAB_EN_US", + "topic": "", + "prospectType": "RSS_LOGISTIC_RECENT", + "url": "https://www.outsideonline.com/outdoor-adventure/environment/eco-friendly-new-years-resolution/", + "createdAt": 1703095881, + "imageUrl": "https://cdn.outsideonline.com/wp-content/uploads/2023/12/plastic-bottle-climate-neutral-ish_h-1024x576.jpg?width=1200", + "authors": "Kristin Hostetter", + "publisher": "Outside Magazine", + "domain": "outsideonline.com", + "title": "Six Years Ago, I Swore Off One Thing That Changed My Life", + "excerpt": "Heading out the door? Read this article on the Outside app available now on iOS devices for members! Download the app. I’m sure I’ve made dozens of New Year’s resolutions in my life. I just can’t remember most of them because they didn’t stick. But one did, and it changed my life.", + "language": "EN", + "saveCount": 0, + "isSyndicated": false, + "isCollection": false, + "approvedCorpusItem": null, + "rejectedCorpusItem": null, + "item": { + "givenUrl": "https://www.outsideonline.com/outdoor-adventure/environment/eco-friendly-new-years-resolution/", + "itemId": "3982911035", + "normalUrl": "http://outsideonline.com/outdoor-adventure/environment/eco-friendly-new-years-resolution", + "datePublished": "2023-12-20 07:00:05", + "timeToRead": 5, + "__typename": "Item" + }, + "__typename": "Prospect" + }, + { + "id": "8cfdcc1b-9a5b-4dc2-b76c-b5abd6499e40", + "prospectId": "af86c2f6-2c83-5657-878c-a144b4104f75", + "scheduledSurfaceGuid": "NEW_TAB_EN_US", + "topic": "", + "prospectType": "RSS_LOGISTIC_RECENT", + "url": "https://www.businessinsider.com/how-to-stay-sober-during-holidays-tips-advice-2023-12", + "createdAt": 1703095882, + "imageUrl": "https://i.insider.com/656dfda158e7c0c29a293cb3?width=1200&format=jpeg", + "authors": "Ashley Couto", + "publisher": "Business Insider", + "domain": "businessinsider.com", + "title": "Follow these tips for how to stay sober during the holidays, according to experts", + "excerpt": "Though sobriety is on the rise among Gen Zers, the holidays can be a minefield of temptation, especially when it seems like everyone around you is drinking. Sarah Rollins, a licensed social worker, said that staying sober during the holidays can be difficult for a few reasons.", + "language": "EN", + "saveCount": 0, + "isSyndicated": false, + "isCollection": false, + "approvedCorpusItem": null, + "rejectedCorpusItem": null, + "item": { + "givenUrl": "https://www.businessinsider.com/how-to-stay-sober-during-holidays-tips-advice-2023-12", + "itemId": "3982859624", + "normalUrl": "http://businessinsider.com/how-to-stay-sober-during-holidays-tips-advice-2023-12", + "datePublished": "2023-12-20 00:00:00", + "timeToRead": 3, + "__typename": "Item" + }, + "__typename": "Prospect" + }, + { + "id": "62d29743-4c7e-4db4-8899-39df36747a27", + "prospectId": "93405072-9e77-599c-a343-331d0e9f8af2", + "scheduledSurfaceGuid": "NEW_TAB_EN_US", + "topic": "", + "prospectType": "RSS_LOGISTIC_RECENT", + "url": "https://www.hollywoodreporter.com/business/business-news/espn-josh-krulewitz-head-of-communications-1235766005/", + "createdAt": 1703095882, + "imageUrl": "https://www.hollywoodreporter.com/wp-content/uploads/2023/12/20120314_Leadership_Prem-1794-H-2023.jpg?w=1024", + "authors": "Alex Weprin", + "publisher": "The Hollywood Reporter", + "domain": "hollywoodreporter.com", + "title": "ESPN Promotes Josh Krulewitz to Head of Communications", + "excerpt": "Krulewitz succeeds Chris LaPlaca, who is retiring at the end of the year. ESPN has promoted Josh Krulewitz to lead its communications team.", + "language": "EN", + "saveCount": 0, + "isSyndicated": false, + "isCollection": false, + "approvedCorpusItem": null, + "rejectedCorpusItem": null, + "item": { + "givenUrl": "https://www.hollywoodreporter.com/business/business-news/espn-josh-krulewitz-head-of-communications-1235766005/", + "itemId": "3982602592", + "normalUrl": "http://hollywoodreporter.com/business/business-news/espn-josh-krulewitz-head-of-communications-1235766005", + "datePublished": "2023-12-19 12:32:47", + "timeToRead": null, + "__typename": "Item" + }, + "__typename": "Prospect" + }, + { + "id": "6fe468ed-e917-402b-9933-785e44ca0a01", + "prospectId": "1c47a9a9-fcc5-5a73-b37c-76efd200dd9a", + "scheduledSurfaceGuid": "NEW_TAB_EN_US", + "topic": "", + "prospectType": "RSS_LOGISTIC_RECENT", + "url": "https://www.insider.com/lgbtq-celebrities-actors-reality-stars-who-came-out-in-2023", + "createdAt": 1703095883, + "imageUrl": "https://i.insider.com/64785632df2567001837f120?width=1200&format=jpeg", + "authors": "Ayomikun Adekaiyero", + "publisher": "insider.com", + "domain": "insider.com", + "title": "11 celebrities, actors, and reality stars who came out in 2023", + "excerpt": "The Netflix reality star Chloe Veitch came out as bisexual in April in an interview with The Sun. \"Because I've been on heterosexual dating shows, I'm just a bit anxious of public opinion,\" Veitch continued. \"But at the end of the day, if I'm happy, that's all that matters.", + "language": "EN", + "saveCount": 0, + "isSyndicated": false, + "isCollection": false, + "approvedCorpusItem": null, + "rejectedCorpusItem": null, + "item": { + "givenUrl": "https://www.insider.com/lgbtq-celebrities-actors-reality-stars-who-came-out-in-2023", + "itemId": "3881277888", + "normalUrl": "http://insider.com/lgbtq-celebrities-actors-reality-stars-who-came-out-in-2023", + "datePublished": "2023-06-01 00:00:00", + "timeToRead": 9, + "__typename": "Item" + }, + "__typename": "Prospect" + }, + { + "id": "8d635f72-9ccb-458c-be05-ac4026ed7e2e", + "prospectId": "bda4e125-cbc6-58cd-ba79-39647de55fa9", + "scheduledSurfaceGuid": "NEW_TAB_EN_US", + "topic": "", + "prospectType": "RSS_LOGISTIC_RECENT", + "url": "https://www.dwell.com/article/before-and-after-bread-and-butter-best-practice-architecture-seattle-home-renovation-72b6e943", + "createdAt": 1703095884, + "imageUrl": "https://images.dwell.com/photos-6604448812773617664/7135342965907550208-large/the-garage-highlights-the-lubkes-structural-engineering-expertise-with-a-13-foot-concrete-wall-built-by-dolan-construction.jpg", + "authors": "Lauren Gallow", + "publisher": "dwell.com", + "domain": "dwell.com", + "title": "Before & After: Think Your Renovation Took Awhile? Try 14 Years", + "excerpt": "Best Practice Architecture tops off the lengthy transformation of a butter-yellow Seattle craftsman with an addition that resembles a loaf of bread.", + "language": null, + "saveCount": 0, + "isSyndicated": false, + "isCollection": false, + "approvedCorpusItem": null, + "rejectedCorpusItem": null, + "item": { + "givenUrl": "https://www.dwell.com/article/before-and-after-bread-and-butter-best-practice-architecture-seattle-home-renovation-72b6e943", + "itemId": "3982992184", + "normalUrl": "http://dwell.com/article/before-and-after-bread-and-butter-best-practice-architecture-seattle-home-renovation-72b6e943", + "datePublished": "2023-12-20 10:28:50", + "timeToRead": null, + "__typename": "Item" + }, + "__typename": "Prospect" + }, + { + "id": "2a2160fb-6e5b-48d8-8fc4-a1f9abfcb9b1", + "prospectId": "00c4d776-0df2-5bf2-a0f8-c85c99ac1082", + "scheduledSurfaceGuid": "NEW_TAB_EN_US", + "topic": "", + "prospectType": "RSS_LOGISTIC_RECENT", + "url": "https://www.nytimes.com/2023/12/20/magazine/lonnie-mentor.html", + "createdAt": 1703095884, + "imageUrl": "https://static01.nyt.com/images/2023/12/24/magazine/24mag-Lonnie-images/24mag-Lonnie-images-facebookJumbo.jpg", + "authors": "Mitchell S. Jackson", + "publisher": "The New York Times", + "domain": "nytimes.com", + "title": "He Was My Role Model. My Mentor. My Supplier.", + "excerpt": "O.G. rings me in the a.m. to say he’s just touched down in Phoenix. It’s the day before he said he’d arrive, and while there was a time when I’d treat the seeming opacity of his plans as par, the call’s a minor surprise.", + "language": "EN", + "saveCount": 0, + "isSyndicated": false, + "isCollection": false, + "approvedCorpusItem": null, + "rejectedCorpusItem": null, + "item": { + "givenUrl": "https://www.nytimes.com/2023/12/20/magazine/lonnie-mentor.html", + "itemId": "3982784478", + "normalUrl": "http://nytimes.com/2023/12/20/magazine/lonnie-mentor.html", + "datePublished": "2023-12-20 04:03:19", + "timeToRead": 36, + "__typename": "Item" + }, + "__typename": "Prospect" + }, + { + "id": "9e3e28ef-a190-4d5e-be86-8974fb917cd2", + "prospectId": "89b6e245-4e52-5c43-b7c7-6fac8794c319", + "scheduledSurfaceGuid": "NEW_TAB_EN_US", + "topic": "", + "prospectType": "RSS_LOGISTIC_RECENT", + "url": "https://www.atlasobscura.com/articles/explore-los-angeles-hidden-nightlife-scene", + "createdAt": 1703095884, + "imageUrl": "https://img.atlasobscura.com/L-UjHWOzjrPDDK9bHkCsbyeq4fuziQw2CR2mbzq6rOY/rt:fit/w:600/q:81/sm:1/scp:1/ar:1/aHR0cHM6Ly9hdGxh/cy1kZXYuczMuYW1h/em9uYXdzLmNvbS91/cGxvYWRzL2Fzc2V0/cy8zNTgyYjI5ZS02/NjhjLTQ1MDEtYWU0/Zi05ZmI1ZTY0ZGVl/ODk3NDc3N2ZjZmIw/YmQyYTUxNmJfYW9f/aG90ZWxpbmRpZ29f/Z3VpZGUyX2xldHNn/b2Rpc2NvNl9qYXJl/ZGNvd2FuLmpwZw.jpg", + "authors": "Hotel Indigo.", + "publisher": "Atlas Obscura", + "domain": "atlasobscura.com", + "title": "Your Guide to Downtown L.A.’s Hidden Nightlife Scene", + "excerpt": "architecture Where Beauty Meets History in Downtown L.A. Throughout Hotel Indigo, you’ll catch glimpses of L.A. history’s impact and inspiration.", + "language": "EN", + "saveCount": 0, + "isSyndicated": false, + "isCollection": false, + "approvedCorpusItem": null, + "rejectedCorpusItem": null, + "item": { + "givenUrl": "https://www.atlasobscura.com/articles/explore-los-angeles-hidden-nightlife-scene", + "itemId": "3982948730", + "normalUrl": "http://atlasobscura.com/articles/explore-los-angeles-hidden-nightlife-scene", + "datePublished": "2023-12-20 08:07:00", + "timeToRead": null, + "__typename": "Item" + }, + "__typename": "Prospect" + }, + { + "id": "5b3c163d-2511-4ea5-8159-ce0b082cef8f", + "prospectId": "6b072cc9-d836-5da4-8295-8e1120706b2f", + "scheduledSurfaceGuid": "NEW_TAB_EN_US", + "topic": "", + "prospectType": "RSS_LOGISTIC_RECENT", + "url": "https://theweek.com/business/americas-most-in-demand-job", + "createdAt": 1703095884, + "imageUrl": "https://cdn.mos.cms.futurecdn.net/qrbjjvk9w26wRX3pkUPEiD-1200-80.jpg", + "authors": "The Week US", + "publisher": "The Week", + "domain": "theweek.com", + "title": "America’s most in-demand job", + "excerpt": "\"Wind-turbine service technician\" is the hottest job in the U.S., said Matthew Boyle in Bloomberg Businessweek.", + "language": "EN", + "saveCount": 0, + "isSyndicated": false, + "isCollection": false, + "approvedCorpusItem": null, + "rejectedCorpusItem": null, + "item": { + "givenUrl": "https://theweek.com/business/americas-most-in-demand-job", + "itemId": "3982832263", + "normalUrl": "http://theweek.com/business/americas-most-in-demand-job", + "datePublished": "2023-12-20 03:00:50", + "timeToRead": 2, + "__typename": "Item" + }, + "__typename": "Prospect" + }, + { + "id": "a243cc0c-710d-4283-888c-cd9d2136dbd4", + "prospectId": "9631405f-9bba-5016-94c6-75aa13632c46", + "scheduledSurfaceGuid": "NEW_TAB_EN_US", + "topic": "", + "prospectType": "RSS_LOGISTIC_RECENT", + "url": "https://www.latimes.com/politics/story/2023-12-19/trump-colorado-supreme-court-rules-ineligible-for-ballot", + "createdAt": 1703095885, + "imageUrl": "https://ca-times.brightspotcdn.com/dims4/default/a829ba9/2147483647/strip/true/crop/2048x1075+0+175/resize/1200x630!/quality/75/?url=https%3A%2F%2Fwww.trbimg.com%2Fimg-59e51812%2Fturbine%2Fla-et-donald-trump-20171016", + "authors": "Mark Z. Barabak", + "publisher": "Los Angeles Times", + "domain": "latimes.com", + "title": "Column: Colorado decision striking Trump from ballot is a boon, not setback, for his campaign", + "excerpt": "Donald Trump received an early Christmas present Tuesday, courtesy of the Colorado Supreme Court. In a move without precedent, the justices ruled 4-3 Trump was ineligible for the state’s 2024 presidential ballot, owing to his role in the attempted Jan. 6 overthrow of the federal government.", + "language": "EN", + "saveCount": 0, + "isSyndicated": false, + "isCollection": false, + "approvedCorpusItem": null, + "rejectedCorpusItem": null, + "item": { + "givenUrl": "https://www.latimes.com/politics/story/2023-12-19/trump-colorado-supreme-court-rules-ineligible-for-ballot", + "itemId": "3982660449", + "normalUrl": "http://latimes.com/politics/story/2023-12-19/trump-colorado-supreme-court-rules-ineligible-for-ballot", + "datePublished": "2023-12-20 03:24:03", + "timeToRead": 3, + "__typename": "Item" + }, + "__typename": "Prospect" + }, + { + "id": "5300cd73-725e-4675-906f-b2e729116d3d", + "prospectId": "639ca409-b39f-59c1-ad40-46677897bc79", + "scheduledSurfaceGuid": "NEW_TAB_EN_US", + "topic": "", + "prospectType": "RSS_LOGISTIC_RECENT", + "url": "https://www.mensjournal.com/adventure/ledlenser-hf8r-best-headlamp", + "createdAt": 1703095885, + "imageUrl": null, + "authors": "", + "publisher": "Men's Journal", + "domain": "mensjournal.com", + "title": "", + "excerpt": "", + "language": null, + "saveCount": 0, + "isSyndicated": false, + "isCollection": false, + "approvedCorpusItem": null, + "rejectedCorpusItem": null, + "item": { + "givenUrl": "https://www.mensjournal.com/adventure/ledlenser-hf8r-best-headlamp", + "itemId": "3982894970", + "normalUrl": "http://mensjournal.com/adventure/ledlenser-hf8r-best-headlamp", + "datePublished": null, + "timeToRead": null, + "__typename": "Item" + }, + "__typename": "Prospect" + }, + { + "id": "b306cc2f-c54b-43eb-bfb0-a60a8a7b1ea4", + "prospectId": "1e58cc78-685c-5e84-b460-89f808227f25", + "scheduledSurfaceGuid": "NEW_TAB_EN_US", + "topic": "", + "prospectType": "RSS_LOGISTIC_RECENT", + "url": "https://www.bustle.com/wellness/each-zodiac-sign-sex-love-horoscope-2024", + "createdAt": 1703095885, + "imageUrl": "https://imgix.bustle.com/uploads/image/2023/12/18/1794dbf2-0b13-4ed1-8dfd-be8fa9a00183-1_general.jpg?w=1200&h=630&fit=crop&crop=faces&fm=jpg", + "authors": "Alexandria Lettman", + "publisher": "Bustle", + "domain": "bustle.com", + "title": "Your 2024 Love & Sex Horoscope", + "excerpt": "A new year is on the horizon, brimming with passionate and curious cosmic alignments to energize your love life. As you settle down for the holiday season, look to the future; what commitments you are ready to make or finally leave behind?", + "language": "EN", + "saveCount": 0, + "isSyndicated": false, + "isCollection": false, + "approvedCorpusItem": null, + "rejectedCorpusItem": null, + "item": { + "givenUrl": "https://www.bustle.com/wellness/each-zodiac-sign-sex-love-horoscope-2024", + "itemId": "3982341162", + "normalUrl": "http://bustle.com/wellness/each-zodiac-sign-sex-love-horoscope-2024", + "datePublished": "2023-12-18 00:00:00", + "timeToRead": 7, + "__typename": "Item" + }, + "__typename": "Prospect" + }, + { + "id": "52377e50-0085-4d79-87d7-6e822333a629", + "prospectId": "fe7dedc1-5dc7-54be-96e5-400b92fa1c0f", + "scheduledSurfaceGuid": "NEW_TAB_EN_US", + "topic": "", + "prospectType": "RSS_LOGISTIC_RECENT", + "url": "https://www.elle.com/culture/celebrities/a46188431/travis-kelce-taylor-swift-booed-football-game-response/", + "createdAt": 1703095885, + "imageUrl": "https://hips.hearstapps.com/hmg-prod/images/taylor-travis-6583130cc24be.jpg?crop=1.00xw:1.00xh;0,0&resize=1200:*", + "authors": "", + "publisher": "Elle", + "domain": "elle.com", + "title": "Travis Kelce Skillfully Addressed Taylor Swift Getting Booed at His Football Games", + "excerpt": "As good as Travis Kelce is on the football field, the tight end is proving himself to be just as skilled at navigating the spotlight that comes with being Taylor Swift’s boyfriend.", + "language": "EN", + "saveCount": 0, + "isSyndicated": false, + "isCollection": false, + "approvedCorpusItem": null, + "rejectedCorpusItem": null, + "item": { + "givenUrl": "https://www.elle.com/culture/celebrities/a46188431/travis-kelce-taylor-swift-booed-football-game-response/", + "itemId": "3982992197", + "normalUrl": "http://elle.com/culture/celebrities/a46188431/travis-kelce-taylor-swift-booed-football-game-response", + "datePublished": "2023-12-20 10:25:00", + "timeToRead": null, + "__typename": "Item" + }, + "__typename": "Prospect" + }, + { + "id": "af21e081-65a2-4547-877a-81a727e83c7e", + "prospectId": "b57f4db7-f6c5-5dd4-8ad5-58122b158670", + "scheduledSurfaceGuid": "NEW_TAB_EN_US", + "topic": "", + "prospectType": "RSS_LOGISTIC_RECENT", + "url": "https://qz.com/commercial-real-estate-woes-are-a-bankruptcy-alarm-for-1851109651", + "createdAt": 1703095885, + "imageUrl": "https://i.kinja-img.com/image/upload/c_fill,h_675,pg_1,q_80,w_1200/bfc726f968a897c6d0577a01a9836882.jpg", + "authors": "Laura Bratton", + "publisher": "Quartz", + "domain": "qz.com", + "title": "Commercial real estate woes are a bankruptcy alarm for US regional banks", + "excerpt": "It’s no secret that the US commercial real estate industry is suffering. And its downturn could lead to bankruptcy for up to 385 American banks, most of them smaller, regional ones, according to a new report by the National Bureau of Economic Research (NBER).", + "language": "EN", + "saveCount": 0, + "isSyndicated": false, + "isCollection": false, + "approvedCorpusItem": null, + "rejectedCorpusItem": null, + "item": { + "givenUrl": "https://qz.com/commercial-real-estate-woes-are-a-bankruptcy-alarm-for-1851109651", + "itemId": "3982494401", + "normalUrl": "http://qz.com/commercial-real-estate-woes-are-a-bankruptcy-alarm-for-1851109651", + "datePublished": "2023-12-19 12:44:54", + "timeToRead": 2, + "__typename": "Item" + }, + "__typename": "Prospect" + }, + { + "id": "6fcbdd1a-faab-4b4f-8d1d-9cab872744c2", + "prospectId": "5c53692e-1001-5798-b5dd-1552bab1d29b", + "scheduledSurfaceGuid": "NEW_TAB_EN_US", + "topic": "", + "prospectType": "RSS_LOGISTIC_RECENT", + "url": "https://www.eater.com/23989864/zingermans-brad-hedeman-pasta-tuna-what-to-make-for-dinner", + "createdAt": 1703095886, + "imageUrl": "https://cdn.vox-cdn.com/thumbor/e7z5Z2sa9zP93COdiAPgAnXDZFA=/0x215:3000x1786/fit-in/1200x630/cdn.vox-cdn.com/uploads/chorus_asset/file/25144568/DJV_Brad_Hedeman_portait.jpg", + "authors": "Mayukh Sen,Ali Slagle", + "publisher": "Eater", + "domain": "eater.com", + "title": "What a Zingerman’s Mail Order Maven Makes for Dinner During the Busiest Time of Year", + "excerpt": "We all could use a little dinner inspiration — even Ali Slagle, who dreams of dinner. In “Dinner Is Served,” she asks colleagues about one night when they somehow transformed ingredients into dinner with all this life going on.", + "language": "EN", + "saveCount": 0, + "isSyndicated": false, + "isCollection": false, + "approvedCorpusItem": null, + "rejectedCorpusItem": null, + "item": { + "givenUrl": "https://www.eater.com/23989864/zingermans-brad-hedeman-pasta-tuna-what-to-make-for-dinner", + "itemId": "3982445824", + "normalUrl": "http://eater.com/23989864/zingermans-brad-hedeman-pasta-tuna-what-to-make-for-dinner", + "datePublished": "2023-12-19 09:00:00", + "timeToRead": 4, + "__typename": "Item" + }, + "__typename": "Prospect" + }, + { + "id": "6d2757a9-ae23-411f-98d1-9820422e712b", + "prospectId": "b95714ac-384f-5e01-804a-d86b8fcb3d40", + "scheduledSurfaceGuid": "NEW_TAB_EN_US", + "topic": "", + "prospectType": "RSS_LOGISTIC_RECENT", + "url": "https://www.vanityfair.com/style/travis-kelce-trying-to-keep-it-cool-cant-help-gushing-about-amazing-taylor-swift", + "createdAt": 1703095886, + "imageUrl": "https://media.vanityfair.com/photos/658300fd69b1927e3c8e4dac/16:9/w_1280,c_limit/Travis-Kelce.jpg", + "authors": "Kase Wickman", + "publisher": "Vanity Fair", + "domain": "vanityfair.com", + "title": "Travis Kelce, Despite \"Trying to Keep It Cool,\" Can't Help Gushing About \"Amazing\" Taylor Swift", + "excerpt": "As Taylor Swift knows, haters gonna hate (hate, hate, hate, hate), and Travis Kelce, as a (football) player, did what he does best as well: play, play, play, play.", + "language": "EN", + "saveCount": 0, + "isSyndicated": false, + "isCollection": false, + "approvedCorpusItem": null, + "rejectedCorpusItem": null, + "item": { + "givenUrl": "https://www.vanityfair.com/style/travis-kelce-trying-to-keep-it-cool-cant-help-gushing-about-amazing-taylor-swift", + "itemId": "3982957365", + "normalUrl": "http://vanityfair.com/style/travis-kelce-trying-to-keep-it-cool-cant-help-gushing-about-amazing-taylor-swift", + "datePublished": "2023-12-20 10:32:34", + "timeToRead": 2, + "__typename": "Item" + }, + "__typename": "Prospect" + }, + { + "id": "9f139551-1702-49c2-be85-4fe604c423a1", + "prospectId": "2d72d862-c36b-5ced-a3e4-e290ceb141b0", + "scheduledSurfaceGuid": "NEW_TAB_EN_US", + "topic": "", + "prospectType": "RSS_LOGISTIC_RECENT", + "url": "https://www.thecut.com/2023/12/celine-dion-stiff-person-syndrome-muscle-control.html", + "createdAt": 1703095886, + "imageUrl": "https://pyxis.nymag.com/v1/imgs/a69/2b0/c4a8058ee3bc99425b0d60ee2278dab929-celine-dion-1.1x.rsocial.w1200.jpg", + "authors": "Danielle Cohen", + "publisher": "The Cut", + "domain": "thecut.com", + "title": "Celine Dion’s Stiff-Person Syndrome Is Progressing", + "excerpt": "Last year, Celine Dion revealed she was diagnosed with stiff-person syndrome, a rare neurological condition that causes muscular stiffness and spasms. In a new interview, Dion’s sister Claudette told 7 Jours that the star’s disorder had progressed and she can no longer control her muscles.", + "language": "EN", + "saveCount": 0, + "isSyndicated": false, + "isCollection": false, + "approvedCorpusItem": null, + "rejectedCorpusItem": null, + "item": { + "givenUrl": "https://www.thecut.com/2023/12/celine-dion-stiff-person-syndrome-muscle-control.html", + "itemId": "3982504682", + "normalUrl": "http://thecut.com/2023/12/celine-dion-stiff-person-syndrome-muscle-control.html", + "datePublished": "2023-12-19 12:48:26", + "timeToRead": null, + "__typename": "Item" + }, + "__typename": "Prospect" + }, + { + "id": "7d633a77-c0e9-46b1-b614-a2e34779dfad", + "prospectId": "85a8d519-f5d4-591c-a2da-2baf3c1bc5cc", + "scheduledSurfaceGuid": "NEW_TAB_EN_US", + "topic": "", + "prospectType": "RSS_LOGISTIC_RECENT", + "url": "https://time.com/6549027/time-appoints-kelly-conniff-as-deputy-editor/", + "createdAt": 1703095886, + "imageUrl": "https://api.time.com/wp-content/uploads/2023/12/KellyC-1.png", + "authors": "TIME PR", + "publisher": "Time", + "domain": "time.com", + "title": "TIME Appoints Kelly Conniff as Deputy Editor", + "excerpt": "I am delighted to announce that Kelly Conniff has been promoted to Deputy Editor. In this role, Kelly will be my partner in making the day-to-day and strategic decisions for our journalism and lead editorial relationships across the business.", + "language": "EN", + "saveCount": 0, + "isSyndicated": false, + "isCollection": false, + "approvedCorpusItem": null, + "rejectedCorpusItem": null, + "item": { + "givenUrl": "https://time.com/6549027/time-appoints-kelly-conniff-as-deputy-editor/", + "itemId": "3982443067", + "normalUrl": "http://time.com/6549027/time-appoints-kelly-conniff-as-deputy-editor", + "datePublished": "2023-12-19 10:07:14", + "timeToRead": 2, + "__typename": "Item" + }, + "__typename": "Prospect" + }, + { + "id": "6e39b04b-bbdd-4480-92d6-d4667ea93a1d", + "prospectId": "aa705d14-0273-5979-8291-5ff7a6b38f0a", + "scheduledSurfaceGuid": "NEW_TAB_EN_US", + "topic": "", + "prospectType": "RSS_LOGISTIC_RECENT", + "url": "https://www.gq.com/story/danny-brown-bounces-back", + "createdAt": 1703095886, + "imageUrl": "https://media.gq.com/photos/658125c04683f88183b28576/16:9/w_1280,c_limit/Danny_Brown_GQ_Exclusive_5_PC_Pooneh%20Ghana.jpeg", + "authors": "Paul Thompson", + "publisher": "GQ", + "domain": "gq.com", + "title": "Danny Brown Bounces Back", + "excerpt": "For the moment, Danny Brown presents it as a physical problem, not an existential one. “These pants don’t bend,” the lanky rapper says, folding himself into right angles on the bright-purple paper backdrop he’s posing against.", + "language": "EN", + "saveCount": 0, + "isSyndicated": false, + "isCollection": false, + "approvedCorpusItem": null, + "rejectedCorpusItem": null, + "item": { + "givenUrl": "https://www.gq.com/story/danny-brown-bounces-back", + "itemId": "3982868241", + "normalUrl": "http://gq.com/story/danny-brown-bounces-back", + "datePublished": "2023-12-20 07:00:00", + "timeToRead": 19, + "__typename": "Item" + }, + "__typename": "Prospect" + }, + { + "id": "adb92b09-825c-4bae-a069-c65c8b6ebb4b", + "prospectId": "07243932-6104-59bf-8032-0c22d72d7d41", + "scheduledSurfaceGuid": "NEW_TAB_EN_US", + "topic": "", + "prospectType": "RSS_LOGISTIC_RECENT", + "url": "https://www.menshealth.com/sex-women/g46163832/best-suction-cup-dildos/", + "createdAt": 1703095886, + "imageUrl": "https://hips.hearstapps.com/hmg-prod/images/mh-12-28-suction-6580a24ae138f.png?crop=1.00xw:1.00xh;0,0&resize=1200:*", + "authors": "Gabrielle B Kassel", + "publisher": "Men's Health", + "domain": "menshealth.com", + "title": "13 Best Suction Cup Dildos, Tested By Sex Experts", + "excerpt": "First, figure out which hole(s) you’re planning to use the toy to penetrate. If you’re going to use the toy anally, the suction cup is going to need to double as a flared base, says Queen.", + "language": "EN", + "saveCount": 0, + "isSyndicated": false, + "isCollection": false, + "approvedCorpusItem": null, + "rejectedCorpusItem": { + "externalId": "20e291dc-f273-40a1-bd6f-6c77119c8e77", + "prospectId": "07243932-6104-59bf-8032-0c22d72d7d41", + "url": "https://www.menshealth.com/sex-women/g46163832/best-suction-cup-dildos/", + "title": "13 Best Suction Cup Dildos, Tested By Sex Experts", + "topic": "", + "language": "EN", + "publisher": "Men's Health", + "reason": "OFFENSIVE_MATERIAL", + "createdBy": "ad|Mozilla-LDAP|cevanoff", + "createdAt": 1703036068, + "__typename": "RejectedCorpusItem" + }, + "item": { + "givenUrl": "https://www.menshealth.com/sex-women/g46163832/best-suction-cup-dildos/", + "itemId": "3982444853", + "normalUrl": "http://menshealth.com/sex-women/g46163832/best-suction-cup-dildos", + "datePublished": "2023-12-19 09:57:00", + "timeToRead": 2, + "__typename": "Item" + }, + "__typename": "Prospect" + }, + { + "id": "94c1dbf0-d345-48d9-832a-6712e1831aea", + "prospectId": "b198518e-7c9d-5aec-a114-6b1c92d993cf", + "scheduledSurfaceGuid": "NEW_TAB_EN_US", + "topic": "", + "prospectType": "RSS_LOGISTIC_RECENT", + "url": "https://www.washingtonpost.com/world/2023/12/20/baroness-michelle-mone-ppe-medpro-covid/", + "createdAt": 1703095886, + "imageUrl": "https://www.washingtonpost.com/wp-apps/imrs.php?src=https://arc-anglerfish-washpost-prod-washpost.s3.amazonaws.com/public/JQOIMOJ6FUL2YQ2S2XILFVAO4M.jpg&w=1440", + "authors": "Leo Sands", + "publisher": "The Washington Post", + "domain": "washingtonpost.com", + "title": "A baroness’s lies bring Britain’s covid spending scandal to a boil", + "excerpt": "Baroness Michelle Mone admitted to lying about her family ties to PPE Medpro, which she helped win government contracts to supply protective gear during the pandemic.", + "language": "EN", + "saveCount": 0, + "isSyndicated": false, + "isCollection": false, + "approvedCorpusItem": null, + "rejectedCorpusItem": null, + "item": { + "givenUrl": "https://www.washingtonpost.com/world/2023/12/20/baroness-michelle-mone-ppe-medpro-covid/", + "itemId": "3982891851", + "normalUrl": "http://washingtonpost.com/world/2023/12/20/baroness-michelle-mone-ppe-medpro-covid", + "datePublished": "2023-12-20 08:21:31", + "timeToRead": null, + "__typename": "Item" + }, + "__typename": "Prospect" + }, + { + "id": "d2d91c51-1d9e-4b2c-939c-628ac41a3dcf", + "prospectId": "1dd0a5bf-6a93-57e6-9208-0d10a65f5456", + "scheduledSurfaceGuid": "NEW_TAB_EN_US", + "topic": "", + "prospectType": "RSS_LOGISTIC_RECENT", + "url": "https://bigthink.com/videos/retirement/", + "createdAt": 1703095886, + "imageUrl": null, + "authors": "", + "publisher": "Big Think", + "domain": "bigthink.com", + "title": "", + "excerpt": "", + "language": null, + "saveCount": 0, + "isSyndicated": false, + "isCollection": false, + "approvedCorpusItem": null, + "rejectedCorpusItem": null, + "item": { + "givenUrl": "https://bigthink.com/videos/retirement/", + "itemId": "3982701245", + "normalUrl": "http://bigthink.com/videos/retirement", + "datePublished": null, + "timeToRead": null, + "__typename": "Item" + }, + "__typename": "Prospect" + }, + { + "id": "af79305c-8ae5-42de-81cf-61fd37244ff4", + "prospectId": "a8abc8ee-f9df-5876-960c-a0f6a83d2984", + "scheduledSurfaceGuid": "NEW_TAB_EN_US", + "topic": "", + "prospectType": "RSS_LOGISTIC_RECENT", + "url": "https://www.theguardian.com/football/2023/dec/20/mls-european-transfer-window-almada-torres-bouanga", + "createdAt": 1703095886, + "imageUrl": "https://i.guim.co.uk/img/media/4361871ea47ee88e925ed887572bd4e8a6b02b88/0_35_3201_1922/master/3201.jpg?width=1200&height=630&quality=85&auto=format&fit=crop&overlay-align=bottom%2Cleft&overlay-width=100p&overlay-base64=L2ltZy9zdGF0aWMvb3ZlcmxheXMvdGctZGVmYXVsdC5wbmc&enable=upscale&s=880632adf02b78da4df3ef9f4ac3eb91", + "authors": "Ryan Baldi", + "publisher": "The Guardian", + "domain": "theguardian.com", + "title": "January transfer window: the MLS stars European clubs should target", + "excerpt": "In the last January transfer window, 33 players left Major League Soccer for Europe. Top European clubs are increasingly looking to US soccer in search of stars who, thanks to the American season finishing in December, are primed to hit the ground running upon arrival.", + "language": "EN", + "saveCount": 0, + "isSyndicated": false, + "isCollection": false, + "approvedCorpusItem": null, + "rejectedCorpusItem": null, + "item": { + "givenUrl": "https://www.theguardian.com/football/2023/dec/20/mls-european-transfer-window-almada-torres-bouanga", + "itemId": "3982902667", + "normalUrl": "http://theguardian.com/football/2023/dec/20/mls-european-transfer-window-almada-torres-bouanga", + "datePublished": "2023-12-20 08:24:57", + "timeToRead": 5, + "__typename": "Item" + }, + "__typename": "Prospect" + }, + { + "id": "3b8f6909-961e-42a6-98a7-b85c7f01eb04", + "prospectId": "aade1da8-eba6-5979-a77b-a76dd072df76", + "scheduledSurfaceGuid": "NEW_TAB_EN_US", + "topic": "", + "prospectType": "RSS_LOGISTIC_RECENT", + "url": "https://nymag.com/intelligencer/article/damian-williams-attorney-sdny-eric-adams-profile.html", + "createdAt": 1703095886, + "imageUrl": "https://pyxis.nymag.com/v1/imgs/37d/507/969bd4dd0c343998c149d51e30cd2012d1-2023-1204-Damian-Williams-Portrait33738-.1x.rsocial.w1200.jpg", + "authors": "Errol Louis", + "publisher": "New York Magazine", + "domain": "nymag.com", + "title": "The Relentless Damian Williams", + "excerpt": "The SDNY U.S. Attorney is one of the country’s gutsiest prosecutors — and a potential headache for Eric Adams. When a jury found the cryptocurrency crook Sam Bankman-Fried guilty of money laundering and fraud in November, Damian Williams, the U.S.", + "language": "EN", + "saveCount": 0, + "isSyndicated": false, + "isCollection": false, + "approvedCorpusItem": null, + "rejectedCorpusItem": null, + "item": { + "givenUrl": "https://nymag.com/intelligencer/article/damian-williams-attorney-sdny-eric-adams-profile.html", + "itemId": "3982809568", + "normalUrl": "http://nymag.com/intelligencer/article/damian-williams-attorney-sdny-eric-adams-profile.html", + "datePublished": "2023-12-20 04:00:01", + "timeToRead": 6, + "__typename": "Item" + }, + "__typename": "Prospect" + }, + { + "id": "a12184a1-ed89-443b-83ca-fe08d12546d3", + "prospectId": "7f6d5723-bb16-52f0-9dd4-00d0dc28e636", + "scheduledSurfaceGuid": "NEW_TAB_EN_US", + "topic": "", + "prospectType": "RSS_LOGISTIC_RECENT", + "url": "https://www.npr.org/2023/12/19/1220466034/acts-of-generosity-like-giving-gifts-brings-happiness-research-shows", + "createdAt": 1703095886, + "imageUrl": "https://media.npr.org/include/images/facebook-default-wide-s1400-c100.jpg", + "authors": "Allison Aubrey", + "publisher": "NPR", + "domain": "npr.org", + "title": "Acts of generosity — like giving gifts — brings happiness, research shows", + "excerpt": "Research shows that acts of generosity, like gift-giving, are contagious and increase happiness. Giving and receiving are also fundamental for good relationships.", + "language": "EN", + "saveCount": 0, + "isSyndicated": false, + "isCollection": false, + "approvedCorpusItem": null, + "rejectedCorpusItem": null, + "item": { + "givenUrl": "https://www.npr.org/2023/12/19/1220466034/acts-of-generosity-like-giving-gifts-brings-happiness-research-shows", + "itemId": "3982584469", + "normalUrl": "http://npr.org/2023/12/19/1220466034/acts-of-generosity-like-giving-gifts-brings-happiness-research-shows", + "datePublished": "2023-12-19 00:00:00", + "timeToRead": null, + "__typename": "Item" + }, + "__typename": "Prospect" + }, + { + "id": "e174573e-b800-4afe-95f8-12a26401daea", + "prospectId": "3a76cc22-a48b-567b-be27-f26a1020c1b8", + "scheduledSurfaceGuid": "NEW_TAB_EN_US", + "topic": "", + "prospectType": "RSS_LOGISTIC_RECENT", + "url": "https://www.businessinsider.com/how-call-center-scams-work-hacker-scambaiter-2023-12", + "createdAt": 1703095886, + "imageUrl": "https://i.insider.com/656f5fe658e7c0c29a29c212?width=1200&format=jpeg", + "authors": "Nazar Risafi", + "publisher": "Business Insider", + "domain": "businessinsider.com", + "title": "How scam call centers work, according to a 'scambaiter'", + "excerpt": "Jim Browning is a software engineer and an expert on scam call centers. His YouTube channel baits scammers by gaining access to their computers, observing them through CCTV, and hacking into their networks. He then conveys this information to law enforcement.", + "language": "EN", + "saveCount": 0, + "isSyndicated": false, + "isCollection": false, + "approvedCorpusItem": null, + "rejectedCorpusItem": null, + "item": { + "givenUrl": "https://www.businessinsider.com/how-call-center-scams-work-hacker-scambaiter-2023-12", + "itemId": "3982947997", + "normalUrl": "http://businessinsider.com/how-call-center-scams-work-hacker-scambaiter-2023-12", + "datePublished": "2023-12-20 00:00:00", + "timeToRead": null, + "__typename": "Item" + }, + "__typename": "Prospect" + }, + { + "id": "36d96ba2-b5b8-4fbc-a605-65f52df109c7", + "prospectId": "bf140de0-bb97-52bf-b715-32a925980cb0", + "scheduledSurfaceGuid": "NEW_TAB_EN_US", + "topic": "", + "prospectType": "RSS_LOGISTIC_RECENT", + "url": "https://www.insider.com/most-famous-local-dish-every-state-2020-9", + "createdAt": 1703095886, + "imageUrl": "https://i.insider.com/6126aef112b9cc001962e1f5?width=1200&format=jpeg", + "authors": "Erin McDowell", + "publisher": "insider.com", + "domain": "insider.com", + "title": "The most famous local dish from every state", + "excerpt": "Alabama's famous white barbecue sauce, which is made with mayonnaise, vinegar, salt, and ground black pepper, is described as both creamy and tangy.", + "language": "EN", + "saveCount": 0, + "isSyndicated": false, + "isCollection": false, + "approvedCorpusItem": null, + "rejectedCorpusItem": null, + "item": { + "givenUrl": "https://www.insider.com/most-famous-local-dish-every-state-2020-9", + "itemId": "3129885156", + "normalUrl": "http://insider.com/most-famous-local-dish-every-state-2020-9", + "datePublished": "2021-08-28 00:00:00", + "timeToRead": 12, + "__typename": "Item" + }, + "__typename": "Prospect" + }, + { + "id": "a6930b20-04cc-46dc-8ab2-138730fa4c60", + "prospectId": "33cbfab3-e8f1-5f7e-9236-fb0412c787bf", + "scheduledSurfaceGuid": "NEW_TAB_EN_US", + "topic": "", + "prospectType": "RSS_LOGISTIC_RECENT", + "url": "https://www.nytimes.com/2023/12/20/world/europe/eu-migration-asylum.html", + "createdAt": 1703095887, + "imageUrl": "https://static01.nyt.com/images/2023/12/20/multimedia/20eu-migration-mfcz/20eu-migration-mfcz-facebookJumbo.jpg", + "authors": "Matina Stevis-Gridneff", + "publisher": "The New York Times", + "domain": "nytimes.com", + "title": "After Years of Wrangling, E.U. Countries Reach Major Deal on Migration", + "excerpt": "European countries struck a key deal on Wednesday to overhaul their joint migration system, an agreement years in the making and aimed at allaying mounting pressure from ascendant far-right political parties across the continent.", + "language": "EN", + "saveCount": 0, + "isSyndicated": false, + "isCollection": false, + "approvedCorpusItem": null, + "rejectedCorpusItem": null, + "item": { + "givenUrl": "https://www.nytimes.com/2023/12/20/world/europe/eu-migration-asylum.html", + "itemId": "3982767908", + "normalUrl": "http://nytimes.com/2023/12/20/world/europe/eu-migration-asylum.html", + "datePublished": "2023-12-20 03:24:34", + "timeToRead": 6, + "__typename": "Item" + }, + "__typename": "Prospect" + }, + { + "id": "fafd12f2-6f67-4d85-aee2-52f5f689b5e4", + "prospectId": "dae552f4-714d-5b39-977d-ee39ee03203a", + "scheduledSurfaceGuid": "NEW_TAB_EN_US", + "topic": "", + "prospectType": "RSS_LOGISTIC_RECENT", + "url": "https://www.dwell.com/article/plant-filled-penthouse-apartment-lima-peru-real-estate-43f5f6b6", + "createdAt": 1703095887, + "imageUrl": "https://images.dwell.com/photos-6063391372700811264/7104804451909787648-large/located-in-the-capital-city-of-lima-this-9622-square-foot-penthouse-even-comes-with-a-sun-filled-greenhouse.png", + "authors": "Dwell Staff", + "publisher": "dwell.com", + "domain": "dwell.com", + "title": "Plant Obsessed? You’ll Love This $4.5M Peruvian Penthouse", + "excerpt": "Located in the capital city of Lima, the 9,622-square-foot home even comes with a sun-filled greenhouse.", + "language": null, + "saveCount": 0, + "isSyndicated": false, + "isCollection": false, + "approvedCorpusItem": null, + "rejectedCorpusItem": null, + "item": { + "givenUrl": "https://www.dwell.com/article/plant-filled-penthouse-apartment-lima-peru-real-estate-43f5f6b6", + "itemId": "3982480927", + "normalUrl": "http://dwell.com/article/plant-filled-penthouse-apartment-lima-peru-real-estate-43f5f6b6", + "datePublished": "2023-12-19 11:16:03", + "timeToRead": null, + "__typename": "Item" + }, + "__typename": "Prospect" + }, + { + "id": "f3231437-f8a3-49be-8eb5-93dfd63a93e0", + "prospectId": "dd273166-dcd2-5576-b346-aa9b6951e8ce", + "scheduledSurfaceGuid": "NEW_TAB_EN_US", + "topic": "", + "prospectType": "RSS_LOGISTIC_RECENT", + "url": "https://slate.com/human-interest/2023/12/pope-francis-same-sex-relationships-blessing-backstory.html", + "createdAt": 1703095887, + "imageUrl": "https://compote.slate.com/images/e8041260-beb0-4453-8458-7d39ffa3e9fd.jpeg?crop=1299%2C866%2Cx261%2Cy0&width=1560", + "authors": "Molly Olmstead", + "publisher": "Slate", + "domain": "slate.com", + "title": "The Story Behind Pope Francis’ Shocking Reversal on Same-Sex Relationships", + "excerpt": "The Catholic Church, a 2,000-year-old institution, generally moves at a glacial pace. Changes are typically measured at the scale of generations.", + "language": "EN", + "saveCount": 0, + "isSyndicated": false, + "isCollection": false, + "approvedCorpusItem": null, + "rejectedCorpusItem": null, + "item": { + "givenUrl": "https://slate.com/human-interest/2023/12/pope-francis-same-sex-relationships-blessing-backstory.html", + "itemId": "3982578241", + "normalUrl": "http://slate.com/human-interest/2023/12/pope-francis-same-sex-relationships-blessing-backstory.html", + "datePublished": "2023-12-19 16:47:24", + "timeToRead": 6, + "__typename": "Item" + }, + "__typename": "Prospect" + }, + { + "id": "bfd78f51-402b-42b5-915a-96543c9357e4", + "prospectId": "4a681f6b-5258-53b9-9532-d5e9e0e745d9", + "scheduledSurfaceGuid": "NEW_TAB_EN_US", + "topic": "", + "prospectType": "RSS_LOGISTIC_RECENT", + "url": "https://www.cnn.com/travel/article/badly-behaved-tourists-2023/index.html", + "createdAt": 1703095887, + "imageUrl": null, + "authors": "", + "publisher": "CNN", + "domain": "cnn.com", + "title": "", + "excerpt": "", + "language": null, + "saveCount": 0, + "isSyndicated": false, + "isCollection": false, + "approvedCorpusItem": null, + "rejectedCorpusItem": null, + "item": { + "givenUrl": "https://www.cnn.com/travel/article/badly-behaved-tourists-2023/index.html", + "itemId": "3982340626", + "normalUrl": "http://cnn.com/travel/article/badly-behaved-tourists-2023", + "datePublished": null, + "timeToRead": null, + "__typename": "Item" + }, + "__typename": "Prospect" + }, + { + "id": "2b0da6ca-67b3-42e9-abe3-cb02820531c5", + "prospectId": "31d09ef7-b7b1-5d57-b3fb-9cdd84dd21ab", + "scheduledSurfaceGuid": "NEW_TAB_EN_US", + "topic": "", + "prospectType": "RSS_LOGISTIC_RECENT", + "url": "https://www.cntraveler.com/story/iceland-volcano-eruption-flights-travel-advice", + "createdAt": 1703095887, + "imageUrl": "https://media.cntraveler.com/photos/6581e1f3ce1ba8ab1ed3a95a/16:9/w_1280,c_limit/GettyImages-1370559554.jpeg", + "authors": "Jessica Puckett", + "publisher": "Condé Nast Traveler", + "domain": "cntraveler.com", + "title": "What Travelers Should Know About Iceland's Latest Volcanic Eruption", + "excerpt": "This is a developing story and will be updated with more information. The eruption began on December 18 at 10:17 p.m. local time, just northeast of the small fishing village of Grindavik, according to the Icelandic Meteorological Office.", + "language": "EN", + "saveCount": 0, + "isSyndicated": false, + "isCollection": false, + "approvedCorpusItem": null, + "rejectedCorpusItem": null, + "item": { + "givenUrl": "https://www.cntraveler.com/story/iceland-volcano-eruption-flights-travel-advice", + "itemId": "3982511517", + "normalUrl": "http://cntraveler.com/story/iceland-volcano-eruption-flights-travel-advice", + "datePublished": "2023-12-19 12:46:09", + "timeToRead": 4, + "__typename": "Item" + }, + "__typename": "Prospect" + }, + { + "id": "f9685d3c-cff3-442a-af53-9fbbf8467ee8", + "prospectId": "3545d9c1-b6d3-5a6a-a14c-5fe1288f0aaf", + "scheduledSurfaceGuid": "NEW_TAB_EN_US", + "topic": "", + "prospectType": "RSS_LOGISTIC_RECENT", + "url": "https://lifehacker.com/money/atm-errors-and-scams", + "createdAt": 1703095887, + "imageUrl": "https://lifehacker.com/imagery/articles/01HHYZC8M0PY5AA726P3KTZY0N/hero-image.fill.size_1200x675.jpg", + "authors": "Jeff Somers", + "publisher": "Lifehacker", + "domain": "lifehacker.com", + "title": "Four Ways an ATM Can Ruin Your Day (and How to Protect Yourself)", + "excerpt": "Cash may increasingly seem like a relic of a bygone age (less than 10% of Americans use cash as their primary way of paying for stuff these days), but paper money is still useful.", + "language": "EN", + "saveCount": 0, + "isSyndicated": false, + "isCollection": false, + "approvedCorpusItem": { + "externalId": "a075da50-adc4-4f2c-aa4c-67dd1ff082b1", + "prospectId": "3545d9c1-b6d3-5a6a-a14c-5fe1288f0aaf", + "title": "Four Ways an ATM Can Ruin Your Day (and How to Protect Yourself)", + "language": "EN", + "publisher": "Lifehacker", + "authors": [ + { + "name": "Jeff Somers", + "sortOrder": 0, + "__typename": "CorpusItemAuthor" + } + ], + "url": "https://lifehacker.com/money/atm-errors-and-scams", + "imageUrl": "https://s3.us-east-1.amazonaws.com/pocket-curatedcorpusapi-prod-images/51953700-a609-4158-be63-f60c60648727.jpeg", + "excerpt": "ATMs are usually pretty safe—but when things go wrong, it can be a big headache.", + "status": "RECOMMENDATION", + "source": "PROSPECT", + "topic": "PERSONAL_FINANCE", + "isCollection": false, + "isTimeSensitive": false, + "isSyndicated": false, + "createdBy": "ad|Mozilla-LDAP|cevanoff", + "createdAt": 1703036164, + "updatedBy": null, + "updatedAt": 1703036164, + "scheduledSurfaceHistory": [ + { + "externalId": "a8ff8a4b-13e2-4871-bee7-ac0f0e956c44", + "createdBy": "ad|Mozilla-LDAP|cevanoff", + "scheduledDate": "2023-12-21", + "scheduledSurfaceGuid": "NEW_TAB_EN_US", + "__typename": "ApprovedCorpusItemScheduledSurfaceHistory" + } + ], + "__typename": "ApprovedCorpusItem" + }, + "rejectedCorpusItem": null, + "item": { + "givenUrl": "https://lifehacker.com/money/atm-errors-and-scams", + "itemId": "3982008158", + "normalUrl": "http://lifehacker.com/money/atm-errors-and-scams", + "datePublished": "2023-12-18 12:30:00", + "timeToRead": 6, + "__typename": "Item" + }, + "__typename": "Prospect" + }, + { + "id": "b296f80b-01a5-49bc-8de7-3a6c287384d5", + "prospectId": "8199a7ba-63de-5711-bd4d-3b3e94210dd9", + "scheduledSurfaceGuid": "NEW_TAB_EN_US", + "topic": "", + "prospectType": "RSS_LOGISTIC_RECENT", + "url": "https://www.vanityfair.com/style/meet-queen-camillas-children", + "createdAt": 1703095887, + "imageUrl": "https://media.vanityfair.com/photos/65777fca9cf0ab97a53565d1/16:9/w_1280,c_limit/vf1223-camilla-tom-bowles-laura-lopes.jpg", + "authors": "Hadley Hall Meares", + "publisher": "Vanity Fair", + "domain": "vanityfair.com", + "title": "Meet Queen Camilla’s Children", + "excerpt": "This Christmas there will be more place settings at the royal dinner table at Sandringham. For the first time, Queen Camilla’s children, Tom Parker Bowles and Laura Lopes, along with her five grandchildren, will reportedly join the royal family’s holiday festivities.", + "language": "EN", + "saveCount": 0, + "isSyndicated": false, + "isCollection": false, + "approvedCorpusItem": null, + "rejectedCorpusItem": null, + "item": { + "givenUrl": "https://www.vanityfair.com/style/meet-queen-camillas-children", + "itemId": "3982047097", + "normalUrl": "http://vanityfair.com/style/meet-queen-camillas-children", + "datePublished": "2023-12-18 12:41:47", + "timeToRead": 11, + "__typename": "Item" + }, + "__typename": "Prospect" + }, + { + "id": "07fc5b04-514b-407f-81ef-453f9a823b94", + "prospectId": "5da7a9f8-7de1-59b9-919e-77d3caff4f6c", + "scheduledSurfaceGuid": "NEW_TAB_EN_US", + "topic": "", + "prospectType": "RSS_LOGISTIC_RECENT", + "url": "https://www.gq.com/story/best-watches-of-2023-according-to-experts", + "createdAt": 1703095887, + "imageUrl": "https://media.gq.com/photos/6581f3a9e005bed660f529ba/16:9/w_1280,c_limit/CORRECT%20-%202023%20Watch%20of%20the%20Year%20(1).jpg", + "authors": "Cam Wolf", + "publisher": "GQ", + "domain": "gq.com", + "title": "The Best Watch of 2023, According to the Watch Illuminati", + "excerpt": "On Friday, I shared the first part of GQ’s annual Watch Survey, in which our panel of 46 mega collectors, retailers, vintage dealers, auction-house specialists, journalists, and influencers weighed in on the best watch brands of 2023.", + "language": "EN", + "saveCount": 0, + "isSyndicated": false, + "isCollection": false, + "approvedCorpusItem": null, + "rejectedCorpusItem": null, + "item": { + "givenUrl": "https://www.gq.com/story/best-watches-of-2023-according-to-experts", + "itemId": "3982868186", + "normalUrl": "http://gq.com/story/best-watches-of-2023-according-to-experts", + "datePublished": "2023-12-20 06:55:00", + "timeToRead": 8, + "__typename": "Item" + }, + "__typename": "Prospect" + }, + { + "id": "f2b73894-3f3e-4ca6-8820-fe5cfdc6449c", + "prospectId": "9de73a2f-5e5c-5af8-ac8f-38bf9bfa5433", + "scheduledSurfaceGuid": "NEW_TAB_EN_US", + "topic": "", + "prospectType": "RSS_LOGISTIC_RECENT", + "url": "https://omny.fm/shows/bloomberg-daybreak/tensions-rise-in-red-sea-apple-races-to-fix-smartw", + "createdAt": 1703095887, + "imageUrl": "https://omny.fm/shows/bloomberg-daybreak/tensions-rise-in-red-sea-apple-races-to-fix-smartw/image.jpg?t=1673277911&size=wideShare", + "authors": "", + "publisher": "omny.fm", + "domain": "omny.fm", + "title": "Tensions Rise in Red Sea; Apple Races to Fix SmartWatch", + "excerpt": "Bloomberg Daybreak: US Edition 807 clip(s)", + "language": "EN", + "saveCount": 0, + "isSyndicated": false, + "isCollection": false, + "approvedCorpusItem": null, + "rejectedCorpusItem": null, + "item": { + "givenUrl": "https://omny.fm/shows/bloomberg-daybreak/tensions-rise-in-red-sea-apple-races-to-fix-smartw", + "itemId": "3982341165", + "normalUrl": "http://omny.fm/shows/bloomberg-daybreak/tensions-rise-in-red-sea-apple-races-to-fix-smartw", + "datePublished": null, + "timeToRead": null, + "__typename": "Item" + }, + "__typename": "Prospect" + }, + { + "id": "5c57c25a-faa7-47d1-b548-b5dc342c6bb0", + "prospectId": "e30c9b76-fdb4-5611-97d3-6de7443be434", + "scheduledSurfaceGuid": "NEW_TAB_EN_US", + "topic": "", + "prospectType": "RSS_LOGISTIC_RECENT", + "url": "https://www.self.com/story/feeling-cranky-tips", + "createdAt": 1703095888, + "imageUrl": "https://media.self.com/photos/65809458875ae6ca80018655/2:1/w_1280,c_limit/Cranky%20tips.png", + "authors": "Julia Ries", + "publisher": "SELF", + "domain": "self.com", + "title": "What to Do When You’re Super Cranky and Hate Everyone", + "excerpt": "Once in a while, I wake up inexplicably cranky. There’s nothing specifically wrong, per se. It’s just that, for whatever reason, everyone around me gets on my nerves.", + "language": "EN", + "saveCount": 0, + "isSyndicated": false, + "isCollection": false, + "approvedCorpusItem": null, + "rejectedCorpusItem": null, + "item": { + "givenUrl": "https://www.self.com/story/feeling-cranky-tips", + "itemId": "3982887291", + "normalUrl": "http://self.com/story/feeling-cranky-tips", + "datePublished": "2023-12-20 08:00:00", + "timeToRead": 6, + "__typename": "Item" + }, + "__typename": "Prospect" + } + ] + }, + "extensions": { + "valueCompletion": [ + { + "message": "Cannot return null for non-nullable field ApprovedCorpusItem.externalId.", + "path": [ + "getProspects", + 0, + "approvedCorpusItem", + "externalId" + ], + "extensions": { + "code": "INVALID_GRAPHQL" + } + }, + { + "message": "Cannot return null for non-nullable field RejectedCorpusItem.externalId.", + "path": [ + "getProspects", + 0, + "rejectedCorpusItem", + "externalId" + ], + "extensions": { + "code": "INVALID_GRAPHQL" + } + }, + { + "message": "Cannot return null for non-nullable field ApprovedCorpusItem.externalId.", + "path": [ + "getProspects", + 1, + "approvedCorpusItem", + "externalId" + ], + "extensions": { + "code": "INVALID_GRAPHQL" + } + }, + { + "message": "Cannot return null for non-nullable field RejectedCorpusItem.externalId.", + "path": [ + "getProspects", + 1, + "rejectedCorpusItem", + "externalId" + ], + "extensions": { + "code": "INVALID_GRAPHQL" + } + }, + { + "message": "Cannot return null for non-nullable field ApprovedCorpusItem.externalId.", + "path": [ + "getProspects", + 2, + "approvedCorpusItem", + "externalId" + ], + "extensions": { + "code": "INVALID_GRAPHQL" + } + }, + { + "message": "Cannot return null for non-nullable field RejectedCorpusItem.externalId.", + "path": [ + "getProspects", + 2, + "rejectedCorpusItem", + "externalId" + ], + "extensions": { + "code": "INVALID_GRAPHQL" + } + }, + { + "message": "Cannot return null for non-nullable field ApprovedCorpusItem.externalId.", + "path": [ + "getProspects", + 3, + "approvedCorpusItem", + "externalId" + ], + "extensions": { + "code": "INVALID_GRAPHQL" + } + }, + { + "message": "Cannot return null for non-nullable field RejectedCorpusItem.externalId.", + "path": [ + "getProspects", + 3, + "rejectedCorpusItem", + "externalId" + ], + "extensions": { + "code": "INVALID_GRAPHQL" + } + }, + { + "message": "Cannot return null for non-nullable field RejectedCorpusItem.externalId.", + "path": [ + "getProspects", + 4, + "rejectedCorpusItem", + "externalId" + ], + "extensions": { + "code": "INVALID_GRAPHQL" + } + }, + { + "message": "Cannot return null for non-nullable field RejectedCorpusItem.externalId.", + "path": [ + "getProspects", + 5, + "rejectedCorpusItem", + "externalId" + ], + "extensions": { + "code": "INVALID_GRAPHQL" + } + }, + { + "message": "Cannot return null for non-nullable field ApprovedCorpusItem.externalId.", + "path": [ + "getProspects", + 6, + "approvedCorpusItem", + "externalId" + ], + "extensions": { + "code": "INVALID_GRAPHQL" + } + }, + { + "message": "Cannot return null for non-nullable field RejectedCorpusItem.externalId.", + "path": [ + "getProspects", + 6, + "rejectedCorpusItem", + "externalId" + ], + "extensions": { + "code": "INVALID_GRAPHQL" + } + }, + { + "message": "Cannot return null for non-nullable field ApprovedCorpusItem.externalId.", + "path": [ + "getProspects", + 7, + "approvedCorpusItem", + "externalId" + ], + "extensions": { + "code": "INVALID_GRAPHQL" + } + }, + { + "message": "Cannot return null for non-nullable field RejectedCorpusItem.externalId.", + "path": [ + "getProspects", + 7, + "rejectedCorpusItem", + "externalId" + ], + "extensions": { + "code": "INVALID_GRAPHQL" + } + }, + { + "message": "Cannot return null for non-nullable field ApprovedCorpusItem.externalId.", + "path": [ + "getProspects", + 8, + "approvedCorpusItem", + "externalId" + ], + "extensions": { + "code": "INVALID_GRAPHQL" + } + }, + { + "message": "Cannot return null for non-nullable field RejectedCorpusItem.externalId.", + "path": [ + "getProspects", + 8, + "rejectedCorpusItem", + "externalId" + ], + "extensions": { + "code": "INVALID_GRAPHQL" + } + }, + { + "message": "Cannot return null for non-nullable field ApprovedCorpusItem.externalId.", + "path": [ + "getProspects", + 9, + "approvedCorpusItem", + "externalId" + ], + "extensions": { + "code": "INVALID_GRAPHQL" + } + }, + { + "message": "Cannot return null for non-nullable field RejectedCorpusItem.externalId.", + "path": [ + "getProspects", + 9, + "rejectedCorpusItem", + "externalId" + ], + "extensions": { + "code": "INVALID_GRAPHQL" + } + }, + { + "message": "Cannot return null for non-nullable field ApprovedCorpusItem.externalId.", + "path": [ + "getProspects", + 10, + "approvedCorpusItem", + "externalId" + ], + "extensions": { + "code": "INVALID_GRAPHQL" + } + }, + { + "message": "Cannot return null for non-nullable field RejectedCorpusItem.externalId.", + "path": [ + "getProspects", + 10, + "rejectedCorpusItem", + "externalId" + ], + "extensions": { + "code": "INVALID_GRAPHQL" + } + }, + { + "message": "Cannot return null for non-nullable field RejectedCorpusItem.externalId.", + "path": [ + "getProspects", + 11, + "rejectedCorpusItem", + "externalId" + ], + "extensions": { + "code": "INVALID_GRAPHQL" + } + }, + { + "message": "Cannot return null for non-nullable field ApprovedCorpusItem.externalId.", + "path": [ + "getProspects", + 12, + "approvedCorpusItem", + "externalId" + ], + "extensions": { + "code": "INVALID_GRAPHQL" + } + }, + { + "message": "Cannot return null for non-nullable field RejectedCorpusItem.externalId.", + "path": [ + "getProspects", + 12, + "rejectedCorpusItem", + "externalId" + ], + "extensions": { + "code": "INVALID_GRAPHQL" + } + }, + { + "message": "Cannot return null for non-nullable field ApprovedCorpusItem.externalId.", + "path": [ + "getProspects", + 13, + "approvedCorpusItem", + "externalId" + ], + "extensions": { + "code": "INVALID_GRAPHQL" + } + }, + { + "message": "Cannot return null for non-nullable field RejectedCorpusItem.externalId.", + "path": [ + "getProspects", + 13, + "rejectedCorpusItem", + "externalId" + ], + "extensions": { + "code": "INVALID_GRAPHQL" + } + }, + { + "message": "Cannot return null for non-nullable field ApprovedCorpusItem.externalId.", + "path": [ + "getProspects", + 14, + "approvedCorpusItem", + "externalId" + ], + "extensions": { + "code": "INVALID_GRAPHQL" + } + }, + { + "message": "Cannot return null for non-nullable field RejectedCorpusItem.externalId.", + "path": [ + "getProspects", + 14, + "rejectedCorpusItem", + "externalId" + ], + "extensions": { + "code": "INVALID_GRAPHQL" + } + }, + { + "message": "Cannot return null for non-nullable field ApprovedCorpusItem.externalId.", + "path": [ + "getProspects", + 15, + "approvedCorpusItem", + "externalId" + ], + "extensions": { + "code": "INVALID_GRAPHQL" + } + }, + { + "message": "Cannot return null for non-nullable field RejectedCorpusItem.externalId.", + "path": [ + "getProspects", + 15, + "rejectedCorpusItem", + "externalId" + ], + "extensions": { + "code": "INVALID_GRAPHQL" + } + }, + { + "message": "Cannot return null for non-nullable field ApprovedCorpusItem.externalId.", + "path": [ + "getProspects", + 16, + "approvedCorpusItem", + "externalId" + ], + "extensions": { + "code": "INVALID_GRAPHQL" + } + }, + { + "message": "Cannot return null for non-nullable field RejectedCorpusItem.externalId.", + "path": [ + "getProspects", + 16, + "rejectedCorpusItem", + "externalId" + ], + "extensions": { + "code": "INVALID_GRAPHQL" + } + }, + { + "message": "Cannot return null for non-nullable field ApprovedCorpusItem.externalId.", + "path": [ + "getProspects", + 17, + "approvedCorpusItem", + "externalId" + ], + "extensions": { + "code": "INVALID_GRAPHQL" + } + }, + { + "message": "Cannot return null for non-nullable field RejectedCorpusItem.externalId.", + "path": [ + "getProspects", + 17, + "rejectedCorpusItem", + "externalId" + ], + "extensions": { + "code": "INVALID_GRAPHQL" + } + }, + { + "message": "Cannot return null for non-nullable field ApprovedCorpusItem.externalId.", + "path": [ + "getProspects", + 18, + "approvedCorpusItem", + "externalId" + ], + "extensions": { + "code": "INVALID_GRAPHQL" + } + }, + { + "message": "Cannot return null for non-nullable field RejectedCorpusItem.externalId.", + "path": [ + "getProspects", + 18, + "rejectedCorpusItem", + "externalId" + ], + "extensions": { + "code": "INVALID_GRAPHQL" + } + }, + { + "message": "Cannot return null for non-nullable field ApprovedCorpusItem.externalId.", + "path": [ + "getProspects", + 19, + "approvedCorpusItem", + "externalId" + ], + "extensions": { + "code": "INVALID_GRAPHQL" + } + }, + { + "message": "Cannot return null for non-nullable field RejectedCorpusItem.externalId.", + "path": [ + "getProspects", + 19, + "rejectedCorpusItem", + "externalId" + ], + "extensions": { + "code": "INVALID_GRAPHQL" + } + }, + { + "message": "Cannot return null for non-nullable field ApprovedCorpusItem.externalId.", + "path": [ + "getProspects", + 20, + "approvedCorpusItem", + "externalId" + ], + "extensions": { + "code": "INVALID_GRAPHQL" + } + }, + { + "message": "Cannot return null for non-nullable field RejectedCorpusItem.externalId.", + "path": [ + "getProspects", + 20, + "rejectedCorpusItem", + "externalId" + ], + "extensions": { + "code": "INVALID_GRAPHQL" + } + }, + { + "message": "Cannot return null for non-nullable field ApprovedCorpusItem.externalId.", + "path": [ + "getProspects", + 21, + "approvedCorpusItem", + "externalId" + ], + "extensions": { + "code": "INVALID_GRAPHQL" + } + }, + { + "message": "Cannot return null for non-nullable field RejectedCorpusItem.externalId.", + "path": [ + "getProspects", + 21, + "rejectedCorpusItem", + "externalId" + ], + "extensions": { + "code": "INVALID_GRAPHQL" + } + }, + { + "message": "Cannot return null for non-nullable field ApprovedCorpusItem.externalId.", + "path": [ + "getProspects", + 22, + "approvedCorpusItem", + "externalId" + ], + "extensions": { + "code": "INVALID_GRAPHQL" + } + }, + { + "message": "Cannot return null for non-nullable field RejectedCorpusItem.externalId.", + "path": [ + "getProspects", + 22, + "rejectedCorpusItem", + "externalId" + ], + "extensions": { + "code": "INVALID_GRAPHQL" + } + }, + { + "message": "Cannot return null for non-nullable field ApprovedCorpusItem.externalId.", + "path": [ + "getProspects", + 23, + "approvedCorpusItem", + "externalId" + ], + "extensions": { + "code": "INVALID_GRAPHQL" + } + }, + { + "message": "Cannot return null for non-nullable field RejectedCorpusItem.externalId.", + "path": [ + "getProspects", + 23, + "rejectedCorpusItem", + "externalId" + ], + "extensions": { + "code": "INVALID_GRAPHQL" + } + }, + { + "message": "Cannot return null for non-nullable field ApprovedCorpusItem.externalId.", + "path": [ + "getProspects", + 24, + "approvedCorpusItem", + "externalId" + ], + "extensions": { + "code": "INVALID_GRAPHQL" + } + }, + { + "message": "Cannot return null for non-nullable field RejectedCorpusItem.externalId.", + "path": [ + "getProspects", + 24, + "rejectedCorpusItem", + "externalId" + ], + "extensions": { + "code": "INVALID_GRAPHQL" + } + }, + { + "message": "Cannot return null for non-nullable field ApprovedCorpusItem.externalId.", + "path": [ + "getProspects", + 25, + "approvedCorpusItem", + "externalId" + ], + "extensions": { + "code": "INVALID_GRAPHQL" + } + }, + { + "message": "Cannot return null for non-nullable field RejectedCorpusItem.externalId.", + "path": [ + "getProspects", + 25, + "rejectedCorpusItem", + "externalId" + ], + "extensions": { + "code": "INVALID_GRAPHQL" + } + }, + { + "message": "Cannot return null for non-nullable field ApprovedCorpusItem.externalId.", + "path": [ + "getProspects", + 26, + "approvedCorpusItem", + "externalId" + ], + "extensions": { + "code": "INVALID_GRAPHQL" + } + }, + { + "message": "Cannot return null for non-nullable field RejectedCorpusItem.externalId.", + "path": [ + "getProspects", + 26, + "rejectedCorpusItem", + "externalId" + ], + "extensions": { + "code": "INVALID_GRAPHQL" + } + }, + { + "message": "Cannot return null for non-nullable field ApprovedCorpusItem.externalId.", + "path": [ + "getProspects", + 27, + "approvedCorpusItem", + "externalId" + ], + "extensions": { + "code": "INVALID_GRAPHQL" + } + }, + { + "message": "Cannot return null for non-nullable field RejectedCorpusItem.externalId.", + "path": [ + "getProspects", + 27, + "rejectedCorpusItem", + "externalId" + ], + "extensions": { + "code": "INVALID_GRAPHQL" + } + }, + { + "message": "Cannot return null for non-nullable field ApprovedCorpusItem.externalId.", + "path": [ + "getProspects", + 28, + "approvedCorpusItem", + "externalId" + ], + "extensions": { + "code": "INVALID_GRAPHQL" + } + }, + { + "message": "Cannot return null for non-nullable field RejectedCorpusItem.externalId.", + "path": [ + "getProspects", + 28, + "rejectedCorpusItem", + "externalId" + ], + "extensions": { + "code": "INVALID_GRAPHQL" + } + }, + { + "message": "Cannot return null for non-nullable field ApprovedCorpusItem.externalId.", + "path": [ + "getProspects", + 29, + "approvedCorpusItem", + "externalId" + ], + "extensions": { + "code": "INVALID_GRAPHQL" + } + }, + { + "message": "Cannot return null for non-nullable field RejectedCorpusItem.externalId.", + "path": [ + "getProspects", + 29, + "rejectedCorpusItem", + "externalId" + ], + "extensions": { + "code": "INVALID_GRAPHQL" + } + }, + { + "message": "Cannot return null for non-nullable field ApprovedCorpusItem.externalId.", + "path": [ + "getProspects", + 30, + "approvedCorpusItem", + "externalId" + ], + "extensions": { + "code": "INVALID_GRAPHQL" + } + }, + { + "message": "Cannot return null for non-nullable field RejectedCorpusItem.externalId.", + "path": [ + "getProspects", + 30, + "rejectedCorpusItem", + "externalId" + ], + "extensions": { + "code": "INVALID_GRAPHQL" + } + }, + { + "message": "Cannot return null for non-nullable field ApprovedCorpusItem.externalId.", + "path": [ + "getProspects", + 31, + "approvedCorpusItem", + "externalId" + ], + "extensions": { + "code": "INVALID_GRAPHQL" + } + }, + { + "message": "Cannot return null for non-nullable field RejectedCorpusItem.externalId.", + "path": [ + "getProspects", + 31, + "rejectedCorpusItem", + "externalId" + ], + "extensions": { + "code": "INVALID_GRAPHQL" + } + }, + { + "message": "Cannot return null for non-nullable field ApprovedCorpusItem.externalId.", + "path": [ + "getProspects", + 32, + "approvedCorpusItem", + "externalId" + ], + "extensions": { + "code": "INVALID_GRAPHQL" + } + }, + { + "message": "Cannot return null for non-nullable field ApprovedCorpusItem.externalId.", + "path": [ + "getProspects", + 33, + "approvedCorpusItem", + "externalId" + ], + "extensions": { + "code": "INVALID_GRAPHQL" + } + }, + { + "message": "Cannot return null for non-nullable field RejectedCorpusItem.externalId.", + "path": [ + "getProspects", + 33, + "rejectedCorpusItem", + "externalId" + ], + "extensions": { + "code": "INVALID_GRAPHQL" + } + }, + { + "message": "Cannot return null for non-nullable field ApprovedCorpusItem.externalId.", + "path": [ + "getProspects", + 34, + "approvedCorpusItem", + "externalId" + ], + "extensions": { + "code": "INVALID_GRAPHQL" + } + }, + { + "message": "Cannot return null for non-nullable field RejectedCorpusItem.externalId.", + "path": [ + "getProspects", + 34, + "rejectedCorpusItem", + "externalId" + ], + "extensions": { + "code": "INVALID_GRAPHQL" + } + }, + { + "message": "Cannot return null for non-nullable field ApprovedCorpusItem.externalId.", + "path": [ + "getProspects", + 35, + "approvedCorpusItem", + "externalId" + ], + "extensions": { + "code": "INVALID_GRAPHQL" + } + }, + { + "message": "Cannot return null for non-nullable field RejectedCorpusItem.externalId.", + "path": [ + "getProspects", + 35, + "rejectedCorpusItem", + "externalId" + ], + "extensions": { + "code": "INVALID_GRAPHQL" + } + }, + { + "message": "Cannot return null for non-nullable field ApprovedCorpusItem.externalId.", + "path": [ + "getProspects", + 36, + "approvedCorpusItem", + "externalId" + ], + "extensions": { + "code": "INVALID_GRAPHQL" + } + }, + { + "message": "Cannot return null for non-nullable field RejectedCorpusItem.externalId.", + "path": [ + "getProspects", + 36, + "rejectedCorpusItem", + "externalId" + ], + "extensions": { + "code": "INVALID_GRAPHQL" + } + }, + { + "message": "Cannot return null for non-nullable field ApprovedCorpusItem.externalId.", + "path": [ + "getProspects", + 37, + "approvedCorpusItem", + "externalId" + ], + "extensions": { + "code": "INVALID_GRAPHQL" + } + }, + { + "message": "Cannot return null for non-nullable field RejectedCorpusItem.externalId.", + "path": [ + "getProspects", + 37, + "rejectedCorpusItem", + "externalId" + ], + "extensions": { + "code": "INVALID_GRAPHQL" + } + }, + { + "message": "Cannot return null for non-nullable field ApprovedCorpusItem.externalId.", + "path": [ + "getProspects", + 38, + "approvedCorpusItem", + "externalId" + ], + "extensions": { + "code": "INVALID_GRAPHQL" + } + }, + { + "message": "Cannot return null for non-nullable field RejectedCorpusItem.externalId.", + "path": [ + "getProspects", + 38, + "rejectedCorpusItem", + "externalId" + ], + "extensions": { + "code": "INVALID_GRAPHQL" + } + }, + { + "message": "Cannot return null for non-nullable field ApprovedCorpusItem.externalId.", + "path": [ + "getProspects", + 39, + "approvedCorpusItem", + "externalId" + ], + "extensions": { + "code": "INVALID_GRAPHQL" + } + }, + { + "message": "Cannot return null for non-nullable field RejectedCorpusItem.externalId.", + "path": [ + "getProspects", + 39, + "rejectedCorpusItem", + "externalId" + ], + "extensions": { + "code": "INVALID_GRAPHQL" + } + }, + { + "message": "Cannot return null for non-nullable field ApprovedCorpusItem.externalId.", + "path": [ + "getProspects", + 40, + "approvedCorpusItem", + "externalId" + ], + "extensions": { + "code": "INVALID_GRAPHQL" + } + }, + { + "message": "Cannot return null for non-nullable field RejectedCorpusItem.externalId.", + "path": [ + "getProspects", + 40, + "rejectedCorpusItem", + "externalId" + ], + "extensions": { + "code": "INVALID_GRAPHQL" + } + }, + { + "message": "Cannot return null for non-nullable field ApprovedCorpusItem.externalId.", + "path": [ + "getProspects", + 41, + "approvedCorpusItem", + "externalId" + ], + "extensions": { + "code": "INVALID_GRAPHQL" + } + }, + { + "message": "Cannot return null for non-nullable field RejectedCorpusItem.externalId.", + "path": [ + "getProspects", + 41, + "rejectedCorpusItem", + "externalId" + ], + "extensions": { + "code": "INVALID_GRAPHQL" + } + }, + { + "message": "Cannot return null for non-nullable field ApprovedCorpusItem.externalId.", + "path": [ + "getProspects", + 42, + "approvedCorpusItem", + "externalId" + ], + "extensions": { + "code": "INVALID_GRAPHQL" + } + }, + { + "message": "Cannot return null for non-nullable field RejectedCorpusItem.externalId.", + "path": [ + "getProspects", + 42, + "rejectedCorpusItem", + "externalId" + ], + "extensions": { + "code": "INVALID_GRAPHQL" + } + }, + { + "message": "Cannot return null for non-nullable field ApprovedCorpusItem.externalId.", + "path": [ + "getProspects", + 43, + "approvedCorpusItem", + "externalId" + ], + "extensions": { + "code": "INVALID_GRAPHQL" + } + }, + { + "message": "Cannot return null for non-nullable field RejectedCorpusItem.externalId.", + "path": [ + "getProspects", + 43, + "rejectedCorpusItem", + "externalId" + ], + "extensions": { + "code": "INVALID_GRAPHQL" + } + }, + { + "message": "Cannot return null for non-nullable field ApprovedCorpusItem.externalId.", + "path": [ + "getProspects", + 44, + "approvedCorpusItem", + "externalId" + ], + "extensions": { + "code": "INVALID_GRAPHQL" + } + }, + { + "message": "Cannot return null for non-nullable field RejectedCorpusItem.externalId.", + "path": [ + "getProspects", + 44, + "rejectedCorpusItem", + "externalId" + ], + "extensions": { + "code": "INVALID_GRAPHQL" + } + }, + { + "message": "Cannot return null for non-nullable field RejectedCorpusItem.externalId.", + "path": [ + "getProspects", + 45, + "rejectedCorpusItem", + "externalId" + ], + "extensions": { + "code": "INVALID_GRAPHQL" + } + }, + { + "message": "Cannot return null for non-nullable field ApprovedCorpusItem.externalId.", + "path": [ + "getProspects", + 46, + "approvedCorpusItem", + "externalId" + ], + "extensions": { + "code": "INVALID_GRAPHQL" + } + }, + { + "message": "Cannot return null for non-nullable field RejectedCorpusItem.externalId.", + "path": [ + "getProspects", + 46, + "rejectedCorpusItem", + "externalId" + ], + "extensions": { + "code": "INVALID_GRAPHQL" + } + }, + { + "message": "Cannot return null for non-nullable field ApprovedCorpusItem.externalId.", + "path": [ + "getProspects", + 47, + "approvedCorpusItem", + "externalId" + ], + "extensions": { + "code": "INVALID_GRAPHQL" + } + }, + { + "message": "Cannot return null for non-nullable field RejectedCorpusItem.externalId.", + "path": [ + "getProspects", + 47, + "rejectedCorpusItem", + "externalId" + ], + "extensions": { + "code": "INVALID_GRAPHQL" + } + }, + { + "message": "Cannot return null for non-nullable field ApprovedCorpusItem.externalId.", + "path": [ + "getProspects", + 48, + "approvedCorpusItem", + "externalId" + ], + "extensions": { + "code": "INVALID_GRAPHQL" + } + }, + { + "message": "Cannot return null for non-nullable field RejectedCorpusItem.externalId.", + "path": [ + "getProspects", + 48, + "rejectedCorpusItem", + "externalId" + ], + "extensions": { + "code": "INVALID_GRAPHQL" + } + }, + { + "message": "Cannot return null for non-nullable field ApprovedCorpusItem.externalId.", + "path": [ + "getProspects", + 49, + "approvedCorpusItem", + "externalId" + ], + "extensions": { + "code": "INVALID_GRAPHQL" + } + }, + { + "message": "Cannot return null for non-nullable field RejectedCorpusItem.externalId.", + "path": [ + "getProspects", + 49, + "rejectedCorpusItem", + "externalId" + ], + "extensions": { + "code": "INVALID_GRAPHQL" + } + } + ] + } +} diff --git a/tests/unit/rankers/test_new_tab_scheduler.py b/tests/unit/rankers/test_new_tab_scheduler.py new file mode 100644 index 000000000..fec854fe6 --- /dev/null +++ b/tests/unit/rankers/test_new_tab_scheduler.py @@ -0,0 +1,26 @@ +import json +import os + +from pymoo.optimize import minimize +from pymoo.algorithms.soo.nonconvex.ga import GA + +from app.config import ROOT_DIR +from app.models.prospect_model import ProspectModel +from app.rankers.new_tab_scheduler import ArticleSelectionProblem + + +def test_new_tab_scheduler(): + with open(os.path.join(ROOT_DIR, 'tests/assets/json/get_prospects.json')) as fp: + data = json.load(fp) + + articles = [ProspectModel(**a) for a in data['data']['getProspects']] + + problem = ArticleSelectionProblem(articles) + + algorithm = GA(pop_size=len(articles)) # JSON fixture has 50 articles + + res = minimize(problem, algorithm, termination=('n_gen', 50)) + + # Decode the solution + selected_articles = [article for article, flag in zip(articles, res.X) if flag == 1] + print(selected_articles) From ff057092e1e62499c87a51b920845b4c573113ce Mon Sep 17 00:00:00 2001 From: Mathijs Miermans Date: Thu, 21 Dec 2023 11:03:20 -0800 Subject: [PATCH 2/6] feat: new_tab_scheduler balances topics and publishers --- app/models/prospect_model.py | 1 + app/rankers/new_tab_scheduler.py | 79 +- tests/assets/json/get_prospects.json | 2020 +++++++++--------- tests/unit/rankers/test_new_tab_scheduler.py | 36 +- 4 files changed, 1048 insertions(+), 1088 deletions(-) diff --git a/app/models/prospect_model.py b/app/models/prospect_model.py index 7a3e7f6f7..a04c88de6 100644 --- a/app/models/prospect_model.py +++ b/app/models/prospect_model.py @@ -6,3 +6,4 @@ class ProspectModel(BaseModel): topic: str publisher: str url: str + quality_score: float diff --git a/app/rankers/new_tab_scheduler.py b/app/rankers/new_tab_scheduler.py index e663f83fc..895d0357f 100644 --- a/app/rankers/new_tab_scheduler.py +++ b/app/rankers/new_tab_scheduler.py @@ -1,31 +1,64 @@ -from pymoo.core.problem import ElementwiseProblem +from typing import List +import numpy as np +from pymoo.algorithms.soo.nonconvex.ga import GA +from pymoo.core.problem import Problem +from pymoo.operators.crossover.pntx import TwoPointCrossover +from pymoo.operators.mutation.bitflip import BitflipMutation +from pymoo.operators.sampling.rnd import BinaryRandomSampling +from pymoo.optimize import minimize -class ArticleSelectionProblem(ElementwiseProblem): - def __init__(self, articles, n_articles=30): - super().__init__(n_var=len(articles), n_obj=1, n_constr=1 + 2 * len(set([a.topic for a in articles]))) - self.articles = articles - self.n_articles = n_articles +from app.models.prospect_model import ProspectModel - def _evaluate(self, x, out, *args, **kwargs): - selected_articles = [article for article, flag in zip(self.articles, x) if flag == 1] - # Objective: Maximize total quality score - total_quality_score = sum(article.quality_score for article in selected_articles) - out["F"] = -total_quality_score # Negative because we want to maximize +DEFAULT_DUPLICATE_LIMIT = 2 + + +class ArticleSelectionProblem(Problem): + def __init__(self, articles: List[ProspectModel], n_articles=30): + n_items = len(articles) + self.P = np.array([a.quality_score for a in articles]) + + all_topics = sorted({a.topic for a in articles}) + all_publishers = sorted({a.publisher for a in articles}) + + # Create topic matrix + topic_matrix = np.zeros((n_items, len(all_topics))) + for i, article in enumerate(articles): + topic_index = all_topics.index(article.topic) + topic_matrix[i, topic_index] = 1 + + # Create publisher matrix + publisher_matrix = np.zeros((n_items, len(all_publishers))) + for i, article in enumerate(articles): + publisher_index = all_publishers.index(article.publisher) + publisher_matrix[i, publisher_index] = 1 + + # Concatenate topic and publisher matrices + self.W = np.hstack((topic_matrix, publisher_matrix)) + n_constraints = self.W.shape[1] # equal to len(all_topics) + len(all_publishers) + + self.duplicate_limit = DEFAULT_DUPLICATE_LIMIT # Maximum duplicate topics and publishers + + super().__init__(n_var=n_items, n_obj=1, n_ieq_constr=n_constraints, xl=0, xu=1, vtype=bool) + + def _evaluate(self, x, out, *args, **kwargs): + out["F"] = -np.sum(self.P * x, axis=1) + out["G"] = np.dot(x, self.W) - self.duplicate_limit - # Constraints - topic_count = {} - publisher_count = {} - for article in selected_articles: - topic_count[article.topic] = topic_count.get(article.topic, 0) + 1 - publisher_count[article.publisher] = publisher_count.get(article.publisher, 0) + 1 - # Constraint: No more than 2 articles from the same topic or publisher - topic_constraints = [count - 2 for count in topic_count.values()] - publisher_constraints = [count - 2 for count in publisher_count.values()] +class ArticleSelectionAlgorithm(GA): + def __init__(self, articles): + super().__init__( + pop_size=len(articles), + sampling=BinaryRandomSampling(), + crossover=TwoPointCrossover(), + mutation=BitflipMutation(), + eliminate_duplicates=True) - # Constraint: Exactly 30 articles - article_count_constraint = [len(selected_articles) - self.n_articles] - out["G"] = topic_constraints + publisher_constraints + article_count_constraint +def select_articles(prospects: List[ProspectModel], n_gen=100) -> List[ProspectModel]: + problem = ArticleSelectionProblem(prospects) + algorithm = ArticleSelectionAlgorithm(prospects) + res = minimize(problem, algorithm, verbose=True, termination=('n_gen', n_gen)) + return [article for article, is_selected in zip(prospects, res.X) if is_selected] diff --git a/tests/assets/json/get_prospects.json b/tests/assets/json/get_prospects.json index 339d0d11b..052817d8a 100644 --- a/tests/assets/json/get_prospects.json +++ b/tests/assets/json/get_prospects.json @@ -2,1649 +2,1501 @@ "data": { "getProspects": [ { - "id": "ffba8b78-1b0a-4835-a224-682df208db94", - "prospectId": "05ba962e-5cbe-51d2-91bb-09b08f0ac638", + "id": "80705a92-0b35-4cc6-af47-798955351f53", + "prospectId": "32e50e71-c2da-571b-8dc9-458380bf8314", "scheduledSurfaceGuid": "NEW_TAB_EN_US", - "topic": "", - "prospectType": "RSS_LOGISTIC_RECENT", - "url": "https://www.vanityfair.com/hollywood/conan-obriens-wild-first-year-an-oral-history", - "createdAt": 1703095880, - "imageUrl": "https://media.vanityfair.com/photos/6579e0749adb7e7317b91d55/16:9/w_1280,c_limit/VF0224-Conan-Obrien.jpg", - "authors": "Andrew Buss", - "publisher": "Vanity Fair", - "domain": "vanityfair.com", - "title": "Conan O’Brien’s Wild First Year at ‘Late Night’", - "excerpt": "If you tuned in to NBC at 12:35 a.m. on September 13, 1993, you witnessed late-night history in the making. Jay Leno had inherited The Tonight Show from Johnny Carson in 1992, and a deeply pissed-off David Letterman had decamped to CBS. That meant a new host for Late Night had to be found.", + "topic": "TRAVEL", + "prospectType": "TIMESPENT_MODELED", + "url": "https://www.theatlantic.com/family/archive/2023/12/large-multigenerational-family-vacation-parents-relatives/676382/", + "createdAt": 1703036692, + "imageUrl": "https://cdn.theatlantic.com/thumbor/b4xP_wDgticMrGkx7rG1eGLJvvk=/0x43:2000x1085/1200x625/media/img/mt/2023/12/multigenerational_vacation/original.jpg", + "authors": "Michael Waters", + "publisher": "The Atlantic", + "domain": "theatlantic.com", + "title": "The New Family Vacation", + "excerpt": "More and more Americans are traveling with multiple generations—and, perhaps, learning who their relatives really are.", "language": "EN", - "saveCount": 0, + "saveCount": 150, "isSyndicated": false, "isCollection": false, "approvedCorpusItem": null, "rejectedCorpusItem": null, "item": { - "givenUrl": "https://www.vanityfair.com/hollywood/conan-obriens-wild-first-year-an-oral-history", - "itemId": "3982855609", - "normalUrl": "http://vanityfair.com/hollywood/conan-obriens-wild-first-year-an-oral-history", - "datePublished": "2023-12-20 07:00:00", - "timeToRead": 27, + "givenUrl": "https://www.theatlantic.com/family/archive/2023/12/large-multigenerational-family-vacation-parents-relatives/676382/", + "itemId": "3981845992", + "normalUrl": "http://theatlantic.com/family/archive/2023/12/large-multigenerational-family-vacation-parents-relatives/676382", + "datePublished": "2023-12-18 06:00:00", + "timeToRead": 5, "__typename": "Item" }, "__typename": "Prospect" }, { - "id": "a2472bfe-6bd5-4e7d-9320-d0206a086400", - "prospectId": "99b0edcc-425f-5962-b7a7-4883fd2cf058", + "id": "108a7b32-548d-4a04-9a72-acdf02819559", + "prospectId": "db67c9db-5289-5ebb-af8b-8e3712aa8042", "scheduledSurfaceGuid": "NEW_TAB_EN_US", - "topic": "", - "prospectType": "RSS_LOGISTIC_RECENT", - "url": "https://www.npr.org/2023/12/20/1220559009/congolese-head-to-the-polls-to-elect-their-next-president", - "createdAt": 1703095880, - "imageUrl": "https://media.npr.org/include/images/facebook-default-wide-s1400-c100.jpg", - "authors": "Michel Martin,Emmanuel Akinwotu", - "publisher": "NPR", - "domain": "npr.org", - "title": "Congolese head to the polls to elect their next president", - "excerpt": "Millions of Congolese will vote for a new president Wednesday, with hopes for a peaceful election. The Democratic Republic of Congo has vast mineral wealth, but is impacted by poverty and conflict.", + "topic": "ENTERTAINMENT", + "prospectType": "TIMESPENT_MODELED", + "url": "https://www.theringer.com/movies/2023/12/14/24001087/netflix-2023-streaming-wars", + "createdAt": 1703036692, + "imageUrl": "https://cdn.vox-cdn.com/thumbor/l8YrsAtQ2KKcObtEEz037hpSbKU=/0x0:1200x800/1400x1050/filters:focal(504x304:696x496):no_upscale()/cdn.vox-cdn.com/uploads/chorus_image/image/72962110/netflix_getty_ringer.0.jpg", + "authors": "A.A. Dowd", + "publisher": "The Ringer", + "domain": "theringer.com", + "title": "The Year Netflix Ended the Streaming Wars", + "excerpt": "After a shaky 2022 in which it seemed like the competition was finally getting to Netflix, the company proved time and time again in 2023 that it has a hold on viewers like no other The critics have spoken and they mostly agree: Succession was the TV show of 2023.", "language": "EN", - "saveCount": 0, + "saveCount": 127, "isSyndicated": false, "isCollection": false, "approvedCorpusItem": null, "rejectedCorpusItem": null, "item": { - "givenUrl": "https://www.npr.org/2023/12/20/1220559009/congolese-head-to-the-polls-to-elect-their-next-president", - "itemId": "3982793091", - "normalUrl": "http://npr.org/2023/12/20/1220559009/congolese-head-to-the-polls-to-elect-their-next-president", - "datePublished": "2023-12-20 00:00:00", - "timeToRead": null, + "givenUrl": "https://www.theringer.com/movies/2023/12/14/24001087/netflix-2023-streaming-wars", + "itemId": "3980081318", + "normalUrl": "http://theringer.com/movies/2023/12/14/24001087/netflix-2023-streaming-wars", + "datePublished": "2023-12-14 08:00:00", + "timeToRead": 15, "__typename": "Item" }, "__typename": "Prospect" }, { - "id": "d737ba90-3638-4db0-8245-cb7522c2db42", - "prospectId": "6a4115cc-96e5-5b6b-b7a0-9639def8d58c", + "id": "7d6abf2f-7602-40b3-87b7-c761cb825c02", + "prospectId": "a2fc2568-bcdc-514a-881f-e1091de28e9f", "scheduledSurfaceGuid": "NEW_TAB_EN_US", - "topic": "", - "prospectType": "RSS_LOGISTIC_RECENT", - "url": "https://nymag.com/intelligencer/2023/12/rudy-giuliani-is-really-really-broke.html", - "createdAt": 1703095880, - "imageUrl": "https://pyxis.nymag.com/v1/imgs/2c3/69b/304e99ff5f5885b27f354ee3341245ae94-giuliani.1x.rsocial.w1200.jpg", - "authors": "Nia Prater", - "publisher": "New York Magazine", - "domain": "nymag.com", - "title": "Rudy Is Really, Really Broke", - "excerpt": "In 2021, federal agents raided Rudy Giuliani’s home and office and seized his electronic devices as part of an inquiry into his dealings with Ukraine.", + "topic": "SCIENCE", + "prospectType": "TIMESPENT_MODELED", + "url": "https://www.wired.com/story/oh-good-hurricanes-are-now-made-of-microplastics/", + "createdAt": 1703036692, + "imageUrl": "https://media.wired.com/photos/657b9caf2b6469ecccd5b269/191:100/w_1280,c_limit/hurricanelarry-science-2H1JPD1.jpg", + "authors": "Matt Simon", + "publisher": "WIRED", + "domain": "wired.com", + "title": "Oh Good, Hurricanes Are Now Made of Microplastics", + "excerpt": "As Hurricane Larry curved north in the Atlantic in 2021, sparing the eastern seaboard of the United States, a special instrument was waiting for it on the coast of Newfoundland.", "language": "EN", - "saveCount": 0, + "saveCount": 100, "isSyndicated": false, "isCollection": false, "approvedCorpusItem": null, "rejectedCorpusItem": null, "item": { - "givenUrl": "https://nymag.com/intelligencer/2023/12/rudy-giuliani-is-really-really-broke.html", - "itemId": "3982967943", - "normalUrl": "http://nymag.com/intelligencer/2023/12/rudy-giuliani-is-really-really-broke.html", - "datePublished": "2023-12-20 11:06:33", - "timeToRead": 2, + "givenUrl": "https://www.wired.com/story/oh-good-hurricanes-are-now-made-of-microplastics/", + "itemId": "3981839912", + "normalUrl": "http://wired.com/story/oh-good-hurricanes-are-now-made-of-microplastics", + "datePublished": "2023-12-18 07:00:00", + "timeToRead": 5, "__typename": "Item" }, "__typename": "Prospect" }, { - "id": "198d2c90-3adb-4f16-95de-85d0d1011796", - "prospectId": "9355b362-2715-53d3-ae5f-664935efc599", + "id": "d32110e5-e852-4192-b231-38003deca5fc", + "prospectId": "9ddc363f-09cc-5228-9dd3-f2a4ce4602ad", "scheduledSurfaceGuid": "NEW_TAB_EN_US", - "topic": "", - "prospectType": "RSS_LOGISTIC_RECENT", - "url": "https://www.cntraveler.com/story/where-you-should-travel-in-2024-according-to-your-sign", - "createdAt": 1703095880, - "imageUrl": "https://media.cntraveler.com/photos/6582078d3ac3bbf39799b40f/16:9/w_1280,c_limit/Guatemala_GettyImages-522674810.jpg", - "authors": "Steph Koyfman", - "publisher": "Condé Nast Traveler", - "domain": "cntraveler.com", - "title": "Where You Should Travel in 2024, According to Your Sign", - "excerpt": "After the year of revenge travel (and flight costs rising with a similar vengeance), tourism might be settling into relative homeostasis in 2024. Then again, everything has changed, including the terrain of where you’ll want to go next, and maybe even the order of your bucket list.", + "topic": "PERSONAL_FINANCE", + "prospectType": "TIMESPENT_MODELED", + "url": "https://www.entrepreneur.com/starting-a-business/7-internet-based-home-businesses-to-start-in-2024/466068", + "createdAt": 1703036692, + "imageUrl": "https://assets.entrepreneur.com/content/3x2/2000/1702329660-passive-income-options-2024-1223-g1070097534.jpg?format=pjeg&auto=webp", + "authors": "Chris D. Bentley", + "publisher": "Entrepreneur", + "domain": "entrepreneur.com", + "title": "7 Internet Based Home Businesses to Start in 2024", + "excerpt": "It is no secret that many people are struggling to get through these current economic times, but with just a laptop, webcam, strong internet connection and some effort, you can earn some extra money working from home.", "language": "EN", - "saveCount": 0, + "saveCount": 113, "isSyndicated": false, "isCollection": false, "approvedCorpusItem": null, "rejectedCorpusItem": null, "item": { - "givenUrl": "https://www.cntraveler.com/story/where-you-should-travel-in-2024-according-to-your-sign", - "itemId": "3982655474", - "normalUrl": "http://cntraveler.com/story/where-you-should-travel-in-2024-according-to-your-sign", - "datePublished": "2023-12-19 18:23:51", - "timeToRead": 14, + "givenUrl": "https://www.entrepreneur.com/starting-a-business/7-internet-based-home-businesses-to-start-in-2024/466068", + "itemId": "3979761947", + "normalUrl": "http://entrepreneur.com/starting-a-business/7-internet-based-home-businesses-to-start-in-2024/466068", + "datePublished": "2023-12-13 14:00:00", + "timeToRead": 4, "__typename": "Item" }, "__typename": "Prospect" }, { - "id": "2f4cc27f-371d-4f32-8cb8-d7d2304325c9", - "prospectId": "08d2cfab-046b-53b0-99f2-05e7b374ff7b", + "id": "270398f6-ebe5-43ae-b577-dfbb9fecfbb4", + "prospectId": "2ff36d05-ccfc-53d5-83c0-bd6dc9b9235e", "scheduledSurfaceGuid": "NEW_TAB_EN_US", - "topic": "", - "prospectType": "RSS_LOGISTIC_RECENT", - "url": "https://slate.com/human-interest/2023/12/dual-language-programs-admissions-outcomes.html", - "createdAt": 1703095880, - "imageUrl": "https://compote.slate.com/images/30d20a69-0acd-4dfe-a381-8d9b9f6fcea6.jpeg?crop=1560%2C1040%2Cx0%2Cy0&width=1560", - "authors": "Sarah Carr", - "publisher": "Slate", - "domain": "slate.com", - "title": "The New Gifted-and-Talented", - "excerpt": "This story about dual-language programs was produced by the Hechinger Report, a nonprofit, independent news organization focused on inequality and innovation in education. Sign up for the Hechinger newsletter.", + "topic": "SCIENCE", + "prospectType": "TIMESPENT_MODELED", + "url": "https://nautil.us/could-the-universe-be-finite-466593/", + "createdAt": 1703036692, + "imageUrl": "https://assets.nautil.us/sites/3/nautilus/bV8776e0-Schwitzgebel_HERO.png?auto=compress&fm=png&ixlib=php-3.3.1", + "authors": "Eric Schwitzgebel", + "publisher": "Nautilus", + "domain": "nautil.us", + "title": "Could the Universe Be Finite?", + "excerpt": "On recent estimates, the observable universe—the portion of the universe that we can detect through our telescopes—extends about 47 billion light-years in every direction. But the limit of what we can see is one thing, and the limit of what exists is quite another.", "language": "EN", - "saveCount": 0, + "saveCount": 110, "isSyndicated": false, "isCollection": false, - "approvedCorpusItem": { - "externalId": "08eb8420-7157-4968-9977-e3baaff33e56", - "prospectId": "08d2cfab-046b-53b0-99f2-05e7b374ff7b", - "title": "The New Gifted-and-Talented", - "language": "EN", - "publisher": "Slate", - "authors": [ - { - "name": "Sarah Carr", - "sortOrder": 0, - "__typename": "CorpusItemAuthor" - } - ], - "url": "https://slate.com/human-interest/2023/12/dual-language-programs-admissions-outcomes.html", - "imageUrl": "https://s3.us-east-1.amazonaws.com/pocket-curatedcorpusapi-prod-images/b64761e4-812d-4f4c-b139-92936d628dba.jpeg", - "excerpt": "For ambitious middle-class families, dual-language programs are the next big thing.", - "status": "RECOMMENDATION", - "source": "PROSPECT", - "topic": "EDUCATION", - "isCollection": false, - "isTimeSensitive": false, - "isSyndicated": false, - "createdBy": "ad|Mozilla-LDAP|amaoz2", - "createdAt": 1703003696, - "updatedBy": null, - "updatedAt": 1703003696, - "scheduledSurfaceHistory": [ - { - "externalId": "76496d7f-9129-47f2-b031-9abba4183fc7", - "createdBy": "ad|Mozilla-LDAP|amaoz2", - "scheduledDate": "2023-12-21", - "scheduledSurfaceGuid": "NEW_TAB_EN_US", - "__typename": "ApprovedCorpusItemScheduledSurfaceHistory" - } - ], - "__typename": "ApprovedCorpusItem" - }, + "approvedCorpusItem": null, "rejectedCorpusItem": null, "item": { - "givenUrl": "https://slate.com/human-interest/2023/12/dual-language-programs-admissions-outcomes.html", - "itemId": "3982310056", - "normalUrl": "http://slate.com/human-interest/2023/12/dual-language-programs-admissions-outcomes.html", - "datePublished": "2023-12-19 04:45:00", - "timeToRead": 11, + "givenUrl": "https://nautil.us/could-the-universe-be-finite-466593/", + "itemId": "3980802491", + "normalUrl": "http://nautil.us/could-the-universe-be-finite-466593", + "datePublished": "2023-12-15 17:41:50", + "timeToRead": 9, "__typename": "Item" }, "__typename": "Prospect" }, { - "id": "926fc369-2684-44a7-99ad-4cf5769369d6", - "prospectId": "a9524d79-26d4-569d-b801-d4f35f74dd99", + "id": "9d49c542-62ca-4c81-822f-60a29cff5ea2", + "prospectId": "07cea3fd-1487-5aad-96b4-d3b3cc1a3689", "scheduledSurfaceGuid": "NEW_TAB_EN_US", - "topic": "", - "prospectType": "RSS_LOGISTIC_RECENT", - "url": "https://www.texasmonthly.com/style/amanda-mccarty-clotheshorse-slow-fashion-advocate-holiday-shopping/", - "createdAt": 1703095880, - "imageUrl": "https://img.texasmonthly.com/2023/12/slow-fashion-guide-to-holiday-shopping.jpg?auto=compress&crop=faces&fit=fit&fm=pjpg&ixlib=php-3.3.1&q=45", - "authors": "Amanda O'Donnell", - "publisher": "Texas Monthly", - "domain": "texasmonthly.com", - "title": "How a Slow Fashion Advocate Gets Her Holiday Shopping Done", - "excerpt": "Like many before her, Amanda McCarty had a come-to-Jesus moment during an impromptu trip to furnishing-and-decor megastore HomeGoods.", + "topic": "SELF_IMPROVEMENT", + "prospectType": "TIMESPENT_MODELED", + "url": "https://www.theatlantic.com/podcasts/archive/2023/12/how-to-leave-work-time-at-work/676196/", + "createdAt": 1703036692, + "imageUrl": "https://cdn.theatlantic.com/thumbor/crAhlNJa25e9t3G8KPjD-QvH1eM=/0x92:4313x2338/1200x625/media/img/mt/2023/12/Episode_Background_How_To_Keep_Time_ep3/original.jpg", + "authors": "Ian Bogost,Rebecca Rashid", + "publisher": "The Atlantic", + "domain": "theatlantic.com", + "title": "How to Keep Time: Leave Work Time at Work", + "excerpt": "Time off the clock may be closer than you think. Before laptops allowed us to take the office home and smartphones could light up with notifications at any hour, work time and “life” time had clearer boundaries.", "language": "EN", - "saveCount": 0, + "saveCount": 116, "isSyndicated": false, "isCollection": false, - "approvedCorpusItem": { - "externalId": "a6dd7613-1a60-4a0d-8ad2-0569a7f09efa", - "prospectId": "a9524d79-26d4-569d-b801-d4f35f74dd99", - "title": "How a Slow Fashion Advocate Gets Her Holiday Shopping Done", - "language": "EN", - "publisher": "Texas Monthly", - "authors": [ - { - "name": "Amanda O'Donnell", - "sortOrder": 0, - "__typename": "CorpusItemAuthor" - } - ], - "url": "https://www.texasmonthly.com/style/amanda-mccarty-clotheshorse-slow-fashion-advocate-holiday-shopping/", - "imageUrl": "https://s3.us-east-1.amazonaws.com/pocket-curatedcorpusapi-prod-images/8d81f065-1c1e-44c4-b1a0-72e4f47b8c19.jpeg", - "excerpt": " Austin’s Amanda McCarty hosts the podcast “Clotheshorse,” which aims to demystify the fashion business and discourage overconsumption. ", - "status": "RECOMMENDATION", - "source": "PROSPECT", - "topic": "PERSONAL_FINANCE", - "isCollection": false, - "isTimeSensitive": true, - "isSyndicated": false, - "createdBy": "ad|Mozilla-LDAP|cevanoff", - "createdAt": 1703036012, - "updatedBy": "ad|Mozilla-LDAP|cevanoff", - "updatedAt": 1703047346, - "scheduledSurfaceHistory": [ - { - "externalId": "683022e6-dec3-4be0-a37e-a74accd04909", - "createdBy": "ad|Mozilla-LDAP|cevanoff", - "scheduledDate": "2023-12-21", - "scheduledSurfaceGuid": "NEW_TAB_EN_US", - "__typename": "ApprovedCorpusItemScheduledSurfaceHistory" - } - ], - "__typename": "ApprovedCorpusItem" - }, + "approvedCorpusItem": null, "rejectedCorpusItem": null, "item": { - "givenUrl": "https://www.texasmonthly.com/style/amanda-mccarty-clotheshorse-slow-fashion-advocate-holiday-shopping/", - "itemId": "3982602580", - "normalUrl": "http://texasmonthly.com/style/amanda-mccarty-clotheshorse-slow-fashion-advocate-holiday-shopping", - "datePublished": "2023-12-19 11:53:34", - "timeToRead": 5, + "givenUrl": "https://www.theatlantic.com/podcasts/archive/2023/12/how-to-leave-work-time-at-work/676196/", + "itemId": "3981803192", + "normalUrl": "http://theatlantic.com/podcasts/archive/2023/12/how-to-leave-work-time-at-work/676196", + "datePublished": "2023-12-18 04:00:00", + "timeToRead": 19, "__typename": "Item" }, "__typename": "Prospect" }, { - "id": "2b5eeb37-7cf5-4655-969e-9903565b32f2", - "prospectId": "15bf2c74-17e9-5a28-bf56-9af45a106ece", + "id": "828e8584-1b3a-40e2-b99e-efc914ac1d22", + "prospectId": "4a9b124d-cfc1-5050-9fd2-c53cb9b7406a", "scheduledSurfaceGuid": "NEW_TAB_EN_US", - "topic": "", - "prospectType": "RSS_LOGISTIC_RECENT", - "url": "https://www.romper.com/entertainment/olivia-munn-son-malcolm-peeling-garlic-video", - "createdAt": 1703095880, - "imageUrl": "https://imgix.bustle.com/uploads/image/2023/12/19/58a5bf82-1e26-4956-9f21-a0d989d5942e-screen-shot-2023-12-19-at-11011-pm.jpg?w=1200&h=630&fit=crop&crop=faces&fm=jpg", - "authors": "Jen McGuire", - "publisher": "romper.com", - "domain": "romper.com", - "title": "Olivia Munn Says Her Son Malcolm Only Wants Garlic For Christmas In Adorable Video", - "excerpt": "If you were planning on buying any Christmas gifts for Olivia Munn’s 2-year-old son Malcolm, she has some advice for you. Go ahead and save your money for something else. Because all Malcolm wants is to peel garlic and lots of it.", + "topic": "POLITICS", + "prospectType": "TIMESPENT_MODELED", + "url": "https://www.theatlantic.com/ideas/archive/2023/12/nra-gun-ownership-suicide-rates/676309/", + "createdAt": 1703036692, + "imageUrl": "https://cdn.theatlantic.com/thumbor/jvmjXy4Yc_8ebOd9C9CpGhueoLc=/0x43:2000x1085/1200x625/media/img/mt/2023/12/NRA_trace_1/original.jpg", + "authors": "Mike Spies", + "publisher": "The Atlantic", + "domain": "theatlantic.com", + "title": "The Death of a Gun-Rights Warrior", + "excerpt": "Bob Owens was one of the firearms industry’s most prominent, passionate defenders. Then he turned his gun on himself. This article is a collaboration between The Atlantic and The Trace.", "language": "EN", - "saveCount": 0, + "saveCount": 297, "isSyndicated": false, "isCollection": false, "approvedCorpusItem": null, "rejectedCorpusItem": null, "item": { - "givenUrl": "https://www.romper.com/entertainment/olivia-munn-son-malcolm-peeling-garlic-video", - "itemId": "3982602585", - "normalUrl": "http://romper.com/entertainment/olivia-munn-son-malcolm-peeling-garlic-video", - "datePublished": "2023-12-19 00:00:00", - "timeToRead": 2, + "givenUrl": "https://www.theatlantic.com/ideas/archive/2023/12/nra-gun-ownership-suicide-rates/676309/", + "itemId": "3980059983", + "normalUrl": "http://theatlantic.com/ideas/archive/2023/12/nra-gun-ownership-suicide-rates/676309", + "datePublished": "2023-12-14 06:00:00", + "timeToRead": 33, "__typename": "Item" }, "__typename": "Prospect" }, { - "id": "fdadfc9c-3d0e-4cbe-8119-c3169af73655", - "prospectId": "7f29dc19-c4e9-56b8-aa18-dc3d85889f65", + "id": "0253c6e5-ccb3-4795-b983-4ca988349dba", + "prospectId": "7bc8acb3-c2b0-5179-b60a-6ed109cf80f4", "scheduledSurfaceGuid": "NEW_TAB_EN_US", - "topic": "", - "prospectType": "RSS_LOGISTIC_RECENT", - "url": "https://www.latimes.com/sports/ucla/story/2023-12-19/ucla-basketball-vs-cal-state-northridge-recap", - "createdAt": 1703095881, - "imageUrl": "https://ca-times.brightspotcdn.com/dims4/default/196efb4/2147483647/strip/true/crop/2452x1287+1+80/resize/1200x630!/quality/75/?url=https%3A%2F%2Fcalifornia-times-brightspot.s3.amazonaws.com%2Fac%2F48%2F3b2864854d5cafc0eccd5a7ee180%2Fncaa-gonzaga-ucla-basketball-20427.jpg", - "authors": "Ben Bolch", - "publisher": "Los Angeles Times", - "domain": "latimes.com", - "title": "UCLA’s home winning streak ends with loss to Cal State Northridge", - "excerpt": "The streak is over. The stink is spreading. Bullied on its home court by Cal State Northridge on Tuesday night, UCLA was softer and sloppier than a fearless opponent from the Big West Conference.", + "topic": "TECHNOLOGY", + "prospectType": "TIMESPENT_MODELED", + "url": "https://www.npr.org/2023/12/19/1219984002/artificial-intelligence-can-find-your-location-in-photos-worrying-privacy-expert", + "createdAt": 1703036692, + "imageUrl": "https://media.npr.org/assets/img/2023/12/19/ai.brumfiel.npr_wide-b40a2a4f8e56023fae02bf24848fc53c2a6996d1-s1400-c100.jpg", + "authors": "Geoff Brumfiel", + "publisher": "NPR", + "domain": "npr.org", + "title": "Artificial intelligence can find your location in photos, worrying privacy experts", + "excerpt": "A student project has revealed yet another power of artificial intelligence — it can be extremely good at geolocating where photos are taken.", "language": "EN", - "saveCount": 0, + "saveCount": 123, "isSyndicated": false, "isCollection": false, "approvedCorpusItem": null, "rejectedCorpusItem": null, "item": { - "givenUrl": "https://www.latimes.com/sports/ucla/story/2023-12-19/ucla-basketball-vs-cal-state-northridge-recap", - "itemId": "3982795980", - "normalUrl": "http://latimes.com/sports/ucla/story/2023-12-19/ucla-basketball-vs-cal-state-northridge-recap", - "datePublished": "2023-12-20 05:34:29", - "timeToRead": 3, + "givenUrl": "https://www.npr.org/2023/12/19/1219984002/artificial-intelligence-can-find-your-location-in-photos-worrying-privacy-expert", + "itemId": "3982295057", + "normalUrl": "http://npr.org/2023/12/19/1219984002/artificial-intelligence-can-find-your-location-in-photos-worrying-privacy-expert", + "datePublished": "2023-12-19 00:00:00", + "timeToRead": 5, "__typename": "Item" }, "__typename": "Prospect" }, { - "id": "3d610952-0d8a-45ea-a46f-a9ccbabd7ef8", - "prospectId": "33ddb73a-bc1e-5cc5-895a-84b1093d17a6", + "id": "d3c78d82-83a8-4f3a-ac7a-ec868f9cad2f", + "prospectId": "d939d198-f56d-532e-a78b-8101419b18bb", "scheduledSurfaceGuid": "NEW_TAB_EN_US", - "topic": "", - "prospectType": "RSS_LOGISTIC_RECENT", - "url": "https://www.gq.com/story/this-was-the-year-gay-sex-onscreen-got-really-good", - "createdAt": 1703095881, - "imageUrl": "https://media.gq.com/photos/6580b9e93b4faf42b37a2c4e/16:9/w_1280,c_limit/year_of_gaysex2.jpg", - "authors": "Raymond Ang", - "publisher": "GQ", - "domain": "gq.com", - "title": "This Was the Year Gay Sex Onscreen Got Really Good", - "excerpt": "I’m talking to Lopez via Zoom about the first gay sex scene he ever saw onscreen. And the usually articulate, quip-ready director and playwright seems absolutely stumped.", + "topic": "TECHNOLOGY", + "prospectType": "TIMESPENT_MODELED", + "url": "https://www.newyorker.com/tech/annals-of-technology/its-time-to-dismantle-the-technopoly", + "createdAt": 1703036692, + "imageUrl": "https://media.newyorker.com/photos/6579d7caab2df2d0c302efb9/16:9/w_1280,c_limit/Newport_Technopoly.jpg", + "authors": "Cal Newport", + "publisher": "The New Yorker", + "domain": "newyorker.com", + "title": "It’s Time to Dismantle the Technopoly", + "excerpt": "In the fall of 2016—the year in which the proportion of online adults using social media reached eighty per cent—I published an Op-Ed in the Times that questioned the popular conception that you need to cultivate a strong social-media brand to succeed in the job market.", "language": "EN", - "saveCount": 0, + "saveCount": 273, "isSyndicated": false, "isCollection": false, "approvedCorpusItem": null, "rejectedCorpusItem": null, "item": { - "givenUrl": "https://www.gq.com/story/this-was-the-year-gay-sex-onscreen-got-really-good", - "itemId": "3982868255", - "normalUrl": "http://gq.com/story/this-was-the-year-gay-sex-onscreen-got-really-good", - "datePublished": "2023-12-20 07:05:00", - "timeToRead": 12, + "givenUrl": "https://www.newyorker.com/tech/annals-of-technology/its-time-to-dismantle-the-technopoly", + "itemId": "3981821295", + "normalUrl": "http://newyorker.com/tech/annals-of-technology/its-time-to-dismantle-the-technopoly", + "datePublished": "2023-12-18 05:00:00", + "timeToRead": 10, "__typename": "Item" }, "__typename": "Prospect" }, { - "id": "f197e3a5-5754-4cf5-ae9a-890dd8dbe43b", - "prospectId": "7c1cc9be-a2da-5380-a5c5-64a34653f4ee", + "id": "0598df2a-5d16-4525-aac4-16e8c0b005f2", + "prospectId": "2787b58e-e4be-55e7-af0c-0a448a554c59", "scheduledSurfaceGuid": "NEW_TAB_EN_US", - "topic": "", - "prospectType": "RSS_LOGISTIC_RECENT", - "url": "https://www.washingtonpost.com/food/2023/12/20/christmas-breakfast-recipes/", - "createdAt": 1703095881, - "imageUrl": "https://www.washingtonpost.com/wp-apps/imrs.php?src=https://arc-anglerfish-washpost-prod-washpost.s3.amazonaws.com/public/J2J4UUWIFHLVOMPHZDTGAWPWJE.jpg&w=1440", - "authors": "Anna Luisa Rodriguez", - "publisher": "The Washington Post", - "domain": "washingtonpost.com", - "title": "9 Christmas breakfast recipes that are quick and easy", - "excerpt": "Enjoy the holiday with your loved ones over a delicious low-effort breakfast.", + "topic": "ENTERTAINMENT", + "prospectType": "TIMESPENT_MODELED", + "url": "https://www.theatlantic.com/culture/archive/2023/12/best-tv-shows-2023-succession-the-bear-beef/676352/", + "createdAt": 1703036693, + "imageUrl": "https://cdn.theatlantic.com/thumbor/jbWZiYd2aQlfoVrfy7-wG7R2_i0=/2x19:997x541/960x504/media/img/mt/2023/12/BEST_OF_TV-1/original.gif", + "authors": "Megan Garber,Sophie Gilbert,Hannah Giorgis,Shirley Li", + "publisher": "The Atlantic", + "domain": "theatlantic.com", + "title": "The 15 Best TV Shows of 2023", + "excerpt": "Television suffered some setbacks in 2023. Soulless reboots seemed to pop up or get announced every few weeks. Distinguishing reality from reality TV became harder to do.", "language": "EN", - "saveCount": 0, + "saveCount": 155, "isSyndicated": false, "isCollection": false, "approvedCorpusItem": null, "rejectedCorpusItem": null, "item": { - "givenUrl": "https://www.washingtonpost.com/food/2023/12/20/christmas-breakfast-recipes/", - "itemId": "3982965851", - "normalUrl": "http://washingtonpost.com/food/2023/12/20/christmas-breakfast-recipes", - "datePublished": "2023-12-20 11:00:59", - "timeToRead": null, + "givenUrl": "https://www.theatlantic.com/culture/archive/2023/12/best-tv-shows-2023-succession-the-bear-beef/676352/", + "itemId": "3982339012", + "normalUrl": "http://theatlantic.com/culture/archive/2023/12/best-tv-shows-2023-succession-the-bear-beef/676352", + "datePublished": "2023-12-19 06:00:00", + "timeToRead": 14, "__typename": "Item" }, "__typename": "Prospect" }, { - "id": "9be9ec4b-b400-40ee-8ab5-0ce9ef5321d6", - "prospectId": "3f28769c-0c84-5d34-98ab-96dbbfab23ef", + "id": "cb2cb492-1d5f-4d8e-93c1-2b3fa4d03f12", + "prospectId": "9cc894e3-886d-5dc9-adfa-38ccf18e8e16", "scheduledSurfaceGuid": "NEW_TAB_EN_US", - "topic": "", - "prospectType": "RSS_LOGISTIC_RECENT", - "url": "https://www.menshealth.com/entertainment/g46129075/best-bradley-cooper-movies/", - "createdAt": 1703095881, - "imageUrl": "https://hips.hearstapps.com/hmg-prod/images/mh-12-7-cooper-657b251ca4028.png?crop=1xw:1xh;center,top&resize=1200:*", - "authors": "Carrie Wittmer", - "publisher": "Men's Health", - "domain": "menshealth.com", - "title": "Bradley Cooper’s Best (and Worst) Movies, Ranked", - "excerpt": "'Maestro,' out today, marks the actor/director's latest film. But how does it compare to some of his very best? It all started because people realized smoking is bad for you.", + "topic": "PERSONAL_FINANCE", + "prospectType": "TIMESPENT_MODELED", + "url": "https://lifehacker.com/money/when-you-should-use-cashiers-checks", + "createdAt": 1703036693, + "imageUrl": "https://lifehacker.com/imagery/articles/01HHMN8CY6M3KPEPDBH0GPR5T7/hero-image.fill.size_1200x675.jpg", + "authors": "Jeff Somers", + "publisher": "Lifehacker", + "domain": "lifehacker.com", + "title": "All the Times You Should be Using a Cashier’s Check (but Aren’t)", + "excerpt": "There was a time when writing a check to buy things was so common it was a skill taught in elementary schools. Today, less than 5% of all transactions involve a paper check.", "language": "EN", - "saveCount": 0, + "saveCount": 124, "isSyndicated": false, "isCollection": false, "approvedCorpusItem": null, "rejectedCorpusItem": null, "item": { - "givenUrl": "https://www.menshealth.com/entertainment/g46129075/best-bradley-cooper-movies/", - "itemId": "3982894941", - "normalUrl": "http://menshealth.com/entertainment/g46129075/best-bradley-cooper-movies", - "datePublished": "2023-12-20 08:00:00", - "timeToRead": 10, + "givenUrl": "https://lifehacker.com/money/when-you-should-use-cashiers-checks", + "itemId": "3980252766", + "normalUrl": "http://lifehacker.com/money/when-you-should-use-cashiers-checks", + "datePublished": "2023-12-14 14:00:00", + "timeToRead": 4, "__typename": "Item" }, "__typename": "Prospect" }, { - "id": "bd99924d-834f-44d1-8230-2e541c33249d", - "prospectId": "926de524-ff8b-55d2-bab8-3ac00f902da1", + "id": "7e2370bc-21e3-40a1-aeda-614eaf2d3210", + "prospectId": "1267bdd7-854d-50a6-b022-054aaf82435e", "scheduledSurfaceGuid": "NEW_TAB_EN_US", - "topic": "", - "prospectType": "RSS_LOGISTIC_RECENT", - "url": "https://www.smithsonianmag.com/smithsonian-institution/lillian-vernons-catalog-empire-got-its-start-at-a-kitchen-table-180983440/", - "createdAt": 1703095881, - "imageUrl": "https://th-thumbnailer.cdn-si-edu.com/T1W71_AG95hd2Q6xQCuq0ED3zc4=/fit-in/1600x0/filters:focal(1500x1129:1501x1130)/https%3A%2F%2Ftf-cmsv2-smithsonianmag-media.s3.amazonaws.com%2Ffiler_public%2F5f%2F42%2F5f428475-c1b7-4da0-99be-63dcf0b32134%2Fkitchen-table-jn2020-00216.jpg", - "authors": "Alice George", - "publisher": "Smithsonian Magazine", - "domain": "smithsonianmag.com", - "title": "Lillian Vernon’s Catalog Empire Got Its Start at a Kitchen Table", - "excerpt": "Like many pieces of household furniture, this table bears the wear and tear caused by children making their mark on the world. Its small size says something about the compact apartment in Mount Vernon, New York, that once housed a family of four and a blossoming business.", + "topic": "TECHNOLOGY", + "prospectType": "TIMESPENT_MODELED", + "url": "https://slate.com/technology/2023/12/ring-nest-doorbell-cameras-what-are-they-good-for.html", + "createdAt": 1703036693, + "imageUrl": "https://compote.slate.com/images/dda973f2-af99-48e6-9036-80c8d7865775.jpeg?crop=1560%2C1040%2Cx0%2Cy0&width=1560", + "authors": "Dan Kois", + "publisher": "Slate", + "domain": "slate.com", + "title": "The Ring Finger", + "excerpt": "This is One Thing, a column with tips on how to live. There are plenty of reasons to debate the utility and morality of networked doorbell cameras, like the ones made by Google (Nest), Amazon (Ring), and other companies.", "language": "EN", - "saveCount": 0, + "saveCount": 123, "isSyndicated": false, "isCollection": false, - "approvedCorpusItem": { - "externalId": "5550ee4f-f96a-46cc-b357-d796f2dbd3cb", - "prospectId": "926de524-ff8b-55d2-bab8-3ac00f902da1", - "title": "Lillian Vernon’s Catalog Empire Got Its Start at a Kitchen Table", - "language": "EN", - "publisher": "Smithsonian Magazine", - "authors": [ - { - "name": "Alice George", - "sortOrder": 0, - "__typename": "CorpusItemAuthor" - } - ], - "url": "https://www.smithsonianmag.com/smithsonian-institution/lillian-vernons-catalog-empire-got-its-start-at-a-kitchen-table-180983440/", - "imageUrl": "https://s3.us-east-1.amazonaws.com/pocket-curatedcorpusapi-prod-images/c797c32c-a144-4cc6-90ed-1e680564db97.jpeg", - "excerpt": "A keen sense of what shoppers wanted made her eponymous company the first woman-owned business on the American Stock Exchange.", - "status": "CORPUS", - "source": "PROSPECT", - "topic": "BUSINESS", - "isCollection": false, - "isTimeSensitive": false, - "isSyndicated": false, - "createdBy": "ad|Mozilla-LDAP|kgoffe", - "createdAt": 1703018751, - "updatedBy": null, - "updatedAt": 1703018751, - "scheduledSurfaceHistory": [], - "__typename": "ApprovedCorpusItem" - }, + "approvedCorpusItem": null, "rejectedCorpusItem": null, "item": { - "givenUrl": "https://www.smithsonianmag.com/smithsonian-institution/lillian-vernons-catalog-empire-got-its-start-at-a-kitchen-table-180983440/", - "itemId": "3982414213", - "normalUrl": "http://smithsonianmag.com/smithsonian-institution/lillian-vernons-catalog-empire-got-its-start-at-a-kitchen-table-180983440", - "datePublished": "2023-12-19 09:39:00", - "timeToRead": 8, + "givenUrl": "https://slate.com/technology/2023/12/ring-nest-doorbell-cameras-what-are-they-good-for.html", + "itemId": "3981446511", + "normalUrl": "http://slate.com/technology/2023/12/ring-nest-doorbell-cameras-what-are-they-good-for.html", + "datePublished": "2023-12-17 08:30:00", + "timeToRead": 2, "__typename": "Item" }, "__typename": "Prospect" }, { - "id": "78ca7a1d-3944-4a70-837f-b551593fba00", - "prospectId": "54785cf9-4b7c-5f01-bcf0-1acc13408291", + "id": "dcdbdc74-e712-491e-9f1d-1ce29d72fe09", + "prospectId": "2b1ddf2c-1913-575b-8d81-9e1048bd719f", "scheduledSurfaceGuid": "NEW_TAB_EN_US", - "topic": "", - "prospectType": "RSS_LOGISTIC_RECENT", - "url": "https://www.vox.com/culture/24008240/2023-best-books-vaster-wild-lauren-groff-chain-gang-all-stars-nana-kwame-adjei-brenyah", - "createdAt": 1703095881, - "imageUrl": "https://cdn.vox-cdn.com/thumbor/u3zpa4dXjQgVIhl74lVAQcLLnL4=/0x38:1920x1043/fit-in/1200x630/cdn.vox-cdn.com/uploads/chorus_asset/file/25174394/Vox_BooksoftheYear_ConstanceGrady.png", - "authors": "Constance Grady", - "publisher": "Vox", - "domain": "vox.com", - "title": "The very best books of 2023", - "excerpt": "From buzzy novels to literary biographies, Vox’s book critic breaks down the year in reading. If you buy something from a Vox link, Vox Media may earn a commission. See our ethics statement.", + "topic": "ENTERTAINMENT", + "prospectType": "TIMESPENT_MODELED", + "url": "https://www.theatlantic.com/culture/archive/2023/12/saturday-night-live-kate-mckinnon-abba-christmas/676388/", + "createdAt": 1703036693, + "imageUrl": "https://cdn.theatlantic.com/thumbor/f-cFdynRRftMm4R83_sBatrigKY=/0x48:4792x2544/1200x625/media/img/mt/2023/12/HR_NUP_203205_00037/original.jpg", + "authors": "Amanda Wicks", + "publisher": "The Atlantic", + "domain": "theatlantic.com", + "title": "The Curious SNL Return of Kate McKinnon", + "excerpt": "The quirky ex–cast member came back to the sketch show, only to disappear into it. When Kate McKinnon departed the Saturday Night Live stage in May 2022, along with a slew of others including Pete Davidson and Aidy Bryant, the clock immediately began counting down to her return.", "language": "EN", - "saveCount": 0, + "saveCount": 150, "isSyndicated": false, "isCollection": false, "approvedCorpusItem": null, "rejectedCorpusItem": null, "item": { - "givenUrl": "https://www.vox.com/culture/24008240/2023-best-books-vaster-wild-lauren-groff-chain-gang-all-stars-nana-kwame-adjei-brenyah", - "itemId": "3982841173", - "normalUrl": "http://vox.com/culture/24008240/2023-best-books-vaster-wild-lauren-groff-chain-gang-all-stars-nana-kwame-adjei-brenyah", - "datePublished": "2023-12-20 06:30:00", - "timeToRead": 17, + "givenUrl": "https://www.theatlantic.com/culture/archive/2023/12/saturday-night-live-kate-mckinnon-abba-christmas/676388/", + "itemId": "3981488620", + "normalUrl": "http://theatlantic.com/culture/archive/2023/12/saturday-night-live-kate-mckinnon-abba-christmas/676388", + "datePublished": "2023-12-17 11:29:00", + "timeToRead": 4, "__typename": "Item" }, "__typename": "Prospect" }, { - "id": "f7978ea7-a5d5-4f02-91df-5cd5471ba526", - "prospectId": "e8ae8f78-a788-5ede-bfd9-c46d1391d8fd", + "id": "b8bbb667-a4c8-4355-b5de-cf31611ee9e6", + "prospectId": "27744c55-1a5b-5e1e-93e6-f149c0ff8d38", "scheduledSurfaceGuid": "NEW_TAB_EN_US", - "topic": "", - "prospectType": "RSS_LOGISTIC_RECENT", - "url": "https://www.theguardian.com/us-news/2023/dec/20/women-dressing-women-metropolitan-museum-fashion-exhibit", - "createdAt": 1703095881, - "imageUrl": "https://i.guim.co.uk/img/media/cc3c109f189ee09497dd1d6abd88e1dad280d9d8/669_1061_5389_3235/master/5389.jpg?width=1200&height=630&quality=85&auto=format&fit=crop&overlay-align=bottom%2Cleft&overlay-width=100p&overlay-base64=L2ltZy9zdGF0aWMvb3ZlcmxheXMvdGctZGVmYXVsdC5wbmc&enable=upscale&s=0e775112c4ee7f297b45067cc290ff4b", - "authors": "Alaina Demopoulos", - "publisher": "The Guardian", - "domain": "theguardian.com", - "title": "Women Dressing Women: this Met exhibit is comically overdue – but still won me over", - "excerpt": "There weren’t many men visiting Women Dressing Women, the Metropolitan Museum of Art’s new exhibit on female designers through modern history.", + "topic": "SCIENCE", + "prospectType": "TIMESPENT_MODELED", + "url": "https://www.nature.com/articles/d41586-023-04045-8", + "createdAt": 1703036693, + "imageUrl": "https://media.nature.com/lw1024/magazine-assets/d41586-023-04045-8/d41586-023-04045-8_26532740.jpg", + "authors": "Jeff Tollefson", + "publisher": "Nature Publishing Group", + "domain": "nature.com", + "title": "US nuclear-fusion lab enters new era: achieving ‘ignition’ over and over", + "excerpt": "In December 2022, after more than a decade of effort and frustration, scientists at the US National Ignition Facility (NIF) announced that they had set a world record by producing a fusion reaction that released more energy than it consumed — a phenomenon known as ignition.", "language": "EN", - "saveCount": 0, + "saveCount": 204, "isSyndicated": false, "isCollection": false, "approvedCorpusItem": null, "rejectedCorpusItem": null, "item": { - "givenUrl": "https://www.theguardian.com/us-news/2023/dec/20/women-dressing-women-metropolitan-museum-fashion-exhibit", - "itemId": "3982860697", - "normalUrl": "http://theguardian.com/us-news/2023/dec/20/women-dressing-women-metropolitan-museum-fashion-exhibit", - "datePublished": "2023-12-20 07:00:12", - "timeToRead": 6, + "givenUrl": "https://www.nature.com/articles/d41586-023-04045-8", + "itemId": "3980720565", + "normalUrl": "http://nature.com/articles/d41586-023-04045-8", + "datePublished": "2023-12-15 00:00:00", + "timeToRead": 5, "__typename": "Item" }, "__typename": "Prospect" }, { - "id": "c045fc20-0a30-4cf0-aa32-39189b02375b", - "prospectId": "b2dfa52f-9276-5186-ba87-a34de9fea88c", + "id": "a86527fd-b952-4e18-97c4-e5ad5e0340c8", + "prospectId": "1815d3ea-93af-52b2-bcd4-92573f83306c", "scheduledSurfaceGuid": "NEW_TAB_EN_US", - "topic": "", - "prospectType": "RSS_LOGISTIC_RECENT", - "url": "https://www.outsideonline.com/outdoor-adventure/environment/eco-friendly-new-years-resolution/", - "createdAt": 1703095881, - "imageUrl": "https://cdn.outsideonline.com/wp-content/uploads/2023/12/plastic-bottle-climate-neutral-ish_h-1024x576.jpg?width=1200", - "authors": "Kristin Hostetter", - "publisher": "Outside Magazine", - "domain": "outsideonline.com", - "title": "Six Years Ago, I Swore Off One Thing That Changed My Life", - "excerpt": "Heading out the door? Read this article on the Outside app available now on iOS devices for members! Download the app. I’m sure I’ve made dozens of New Year’s resolutions in my life. I just can’t remember most of them because they didn’t stick. But one did, and it changed my life.", + "topic": "HEALTH_FITNESS", + "prospectType": "TIMESPENT_MODELED", + "url": "https://www.nytimes.com/2023/12/13/opinion/addiction-policy-treatment-opioid.html", + "createdAt": 1703036694, + "imageUrl": "https://static01.nyt.com/images/2023/12/13/multimedia/13winter7-klzj/13winter7-klzj-facebookJumbo.jpg", + "authors": "DAMON WINTER,JENEEN INTERLANDI", + "publisher": "The New York Times", + "domain": "nytimes.com", + "title": "48 Million Americans Live With Addiction. Here’s How to Get Them Help That Works.", + "excerpt": "Raina Mcmahan, a 42-year-old recovery coach, spent roughly half her life seeking treatment for her own opioid use disorder. She tried detoxing multiple times at different inpatient facilities, but those programs usually discharged her after a week or two without any follow-up care.", "language": "EN", - "saveCount": 0, + "saveCount": 1759, "isSyndicated": false, "isCollection": false, "approvedCorpusItem": null, "rejectedCorpusItem": null, "item": { - "givenUrl": "https://www.outsideonline.com/outdoor-adventure/environment/eco-friendly-new-years-resolution/", - "itemId": "3982911035", - "normalUrl": "http://outsideonline.com/outdoor-adventure/environment/eco-friendly-new-years-resolution", - "datePublished": "2023-12-20 07:00:05", - "timeToRead": 5, + "givenUrl": "https://www.nytimes.com/2023/12/13/opinion/addiction-policy-treatment-opioid.html", + "itemId": "3979535175", + "normalUrl": "http://nytimes.com/2023/12/13/opinion/addiction-policy-treatment-opioid.html", + "datePublished": "2023-12-13 04:02:31", + "timeToRead": 56, "__typename": "Item" }, "__typename": "Prospect" }, { - "id": "8cfdcc1b-9a5b-4dc2-b76c-b5abd6499e40", - "prospectId": "af86c2f6-2c83-5657-878c-a144b4104f75", + "id": "f302ecdb-ae6b-43c8-b5fd-edbd43430e15", + "prospectId": "a0a0435a-7205-5071-ad51-05ce8337e5cc", "scheduledSurfaceGuid": "NEW_TAB_EN_US", - "topic": "", - "prospectType": "RSS_LOGISTIC_RECENT", - "url": "https://www.businessinsider.com/how-to-stay-sober-during-holidays-tips-advice-2023-12", - "createdAt": 1703095882, - "imageUrl": "https://i.insider.com/656dfda158e7c0c29a293cb3?width=1200&format=jpeg", - "authors": "Ashley Couto", - "publisher": "Business Insider", - "domain": "businessinsider.com", - "title": "Follow these tips for how to stay sober during the holidays, according to experts", - "excerpt": "Though sobriety is on the rise among Gen Zers, the holidays can be a minefield of temptation, especially when it seems like everyone around you is drinking. Sarah Rollins, a licensed social worker, said that staying sober during the holidays can be difficult for a few reasons.", + "topic": "ENTERTAINMENT", + "prospectType": "TIMESPENT_MODELED", + "url": "https://www.npr.org/2023/12/17/1219599404/goodreads-review-bombing-cait-corrain", + "createdAt": 1703036694, + "imageUrl": "https://media.npr.org/assets/img/2023/12/15/book-open-credit-becky-harlan-npr_wide-0f5a868b207451f12504507a9b95261c177933fd-s1400-c100.jpg", + "authors": "Jim Zarroli", + "publisher": "NPR", + "domain": "npr.org", + "title": "Goodreads has a 'review bombing' problem — and wants its users to help solve it", + "excerpt": "Cait Corrain was about to achieve the dream of every aspiring writer by publishing her first novel. Instead, her career has imploded following a controversy involving Goodreads, the popular book-lovers' website.", "language": "EN", - "saveCount": 0, + "saveCount": 136, "isSyndicated": false, "isCollection": false, "approvedCorpusItem": null, "rejectedCorpusItem": null, "item": { - "givenUrl": "https://www.businessinsider.com/how-to-stay-sober-during-holidays-tips-advice-2023-12", - "itemId": "3982859624", - "normalUrl": "http://businessinsider.com/how-to-stay-sober-during-holidays-tips-advice-2023-12", - "datePublished": "2023-12-20 00:00:00", + "givenUrl": "https://www.npr.org/2023/12/17/1219599404/goodreads-review-bombing-cait-corrain", + "itemId": "3981424099", + "normalUrl": "http://npr.org/2023/12/17/1219599404/goodreads-review-bombing-cait-corrain", + "datePublished": "2023-12-17 00:00:00", "timeToRead": 3, "__typename": "Item" }, "__typename": "Prospect" }, { - "id": "62d29743-4c7e-4db4-8899-39df36747a27", - "prospectId": "93405072-9e77-599c-a343-331d0e9f8af2", + "id": "ff34abaa-9385-4b7a-9b66-1021b13b28c7", + "prospectId": "da9b38b6-7d73-5088-af24-e5ef4768218b", "scheduledSurfaceGuid": "NEW_TAB_EN_US", - "topic": "", - "prospectType": "RSS_LOGISTIC_RECENT", - "url": "https://www.hollywoodreporter.com/business/business-news/espn-josh-krulewitz-head-of-communications-1235766005/", - "createdAt": 1703095882, - "imageUrl": "https://www.hollywoodreporter.com/wp-content/uploads/2023/12/20120314_Leadership_Prem-1794-H-2023.jpg?w=1024", - "authors": "Alex Weprin", - "publisher": "The Hollywood Reporter", - "domain": "hollywoodreporter.com", - "title": "ESPN Promotes Josh Krulewitz to Head of Communications", - "excerpt": "Krulewitz succeeds Chris LaPlaca, who is retiring at the end of the year. ESPN has promoted Josh Krulewitz to lead its communications team.", + "topic": "POLITICS", + "prospectType": "TIMESPENT_MODELED", + "url": "https://www.newyorker.com/news/annals-of-education/how-a-generation-is-being-politicized-on-palestine", + "createdAt": 1703036694, + "imageUrl": "https://media.newyorker.com/photos/6578a55a5a003d82a0a9f26e/16:9/w_1280,c_limit/Green-SJP-Social.jpg", + "authors": "Emma Green", + "publisher": "The New Yorker", + "domain": "newyorker.com", + "title": "How a Student Group Is Politicizing a Generation on Palestine", + "excerpt": "Hunter College’s campus, in New York, features buildings that are tall and nondescript, blending in with the apartment and office towers around them.", "language": "EN", - "saveCount": 0, + "saveCount": 294, "isSyndicated": false, "isCollection": false, "approvedCorpusItem": null, "rejectedCorpusItem": null, "item": { - "givenUrl": "https://www.hollywoodreporter.com/business/business-news/espn-josh-krulewitz-head-of-communications-1235766005/", - "itemId": "3982602592", - "normalUrl": "http://hollywoodreporter.com/business/business-news/espn-josh-krulewitz-head-of-communications-1235766005", - "datePublished": "2023-12-19 12:32:47", - "timeToRead": null, + "givenUrl": "https://www.newyorker.com/news/annals-of-education/how-a-generation-is-being-politicized-on-palestine", + "itemId": "3980525584", + "normalUrl": "http://newyorker.com/news/annals-of-education/how-a-generation-is-being-politicized-on-palestine", + "datePublished": "2023-12-15 05:00:00", + "timeToRead": 27, "__typename": "Item" }, "__typename": "Prospect" }, { - "id": "6fe468ed-e917-402b-9933-785e44ca0a01", - "prospectId": "1c47a9a9-fcc5-5a73-b37c-76efd200dd9a", + "id": "ee3456d2-ef56-4a8c-a78a-6a0ff6fbc3c0", + "prospectId": "a45d64b4-d98b-50e3-8df4-1e019ff97f9d", "scheduledSurfaceGuid": "NEW_TAB_EN_US", - "topic": "", - "prospectType": "RSS_LOGISTIC_RECENT", - "url": "https://www.insider.com/lgbtq-celebrities-actors-reality-stars-who-came-out-in-2023", - "createdAt": 1703095883, - "imageUrl": "https://i.insider.com/64785632df2567001837f120?width=1200&format=jpeg", - "authors": "Ayomikun Adekaiyero", - "publisher": "insider.com", - "domain": "insider.com", - "title": "11 celebrities, actors, and reality stars who came out in 2023", - "excerpt": "The Netflix reality star Chloe Veitch came out as bisexual in April in an interview with The Sun. \"Because I've been on heterosexual dating shows, I'm just a bit anxious of public opinion,\" Veitch continued. \"But at the end of the day, if I'm happy, that's all that matters.", + "topic": "BUSINESS", + "prospectType": "TIMESPENT_MODELED", + "url": "https://www.nytimes.com/2023/12/16/opinion/holidays-environment-cashmere.html", + "createdAt": 1703036695, + "imageUrl": "https://static01.nyt.com/images/2023/12/15/multimedia/15allington-02-mfzq/15allington-02-mfzq-facebookJumbo.jpg", + "authors": "Ginger Allington", + "publisher": "The New York Times", + "domain": "nytimes.com", + "title": "This Holiday, Consider the True Cost of Cheap Cashmere", + "excerpt": "A decade or more ago, it wasn’t uncommon to pay several hundred dollars for a cashmere sweater. Now, as the holiday season approaches, advertisements offer cashmere sweaters at less than half that price.", "language": "EN", - "saveCount": 0, + "saveCount": 799, "isSyndicated": false, "isCollection": false, "approvedCorpusItem": null, "rejectedCorpusItem": null, "item": { - "givenUrl": "https://www.insider.com/lgbtq-celebrities-actors-reality-stars-who-came-out-in-2023", - "itemId": "3881277888", - "normalUrl": "http://insider.com/lgbtq-celebrities-actors-reality-stars-who-came-out-in-2023", - "datePublished": "2023-06-01 00:00:00", - "timeToRead": 9, + "givenUrl": "https://www.nytimes.com/2023/12/16/opinion/holidays-environment-cashmere.html", + "itemId": "3980998191", + "normalUrl": "http://nytimes.com/2023/12/16/opinion/holidays-environment-cashmere.html", + "datePublished": "2023-12-16 06:00:17", + "timeToRead": 4, "__typename": "Item" }, "__typename": "Prospect" }, { - "id": "8d635f72-9ccb-458c-be05-ac4026ed7e2e", - "prospectId": "bda4e125-cbc6-58cd-ba79-39647de55fa9", + "id": "c0dead2d-fb5a-42ec-bc97-757c5d2c7831", + "prospectId": "9db827b1-e086-53ef-b6c3-27e90427f9fc", "scheduledSurfaceGuid": "NEW_TAB_EN_US", - "topic": "", - "prospectType": "RSS_LOGISTIC_RECENT", - "url": "https://www.dwell.com/article/before-and-after-bread-and-butter-best-practice-architecture-seattle-home-renovation-72b6e943", - "createdAt": 1703095884, - "imageUrl": "https://images.dwell.com/photos-6604448812773617664/7135342965907550208-large/the-garage-highlights-the-lubkes-structural-engineering-expertise-with-a-13-foot-concrete-wall-built-by-dolan-construction.jpg", - "authors": "Lauren Gallow", - "publisher": "dwell.com", - "domain": "dwell.com", - "title": "Before & After: Think Your Renovation Took Awhile? Try 14 Years", - "excerpt": "Best Practice Architecture tops off the lengthy transformation of a butter-yellow Seattle craftsman with an addition that resembles a loaf of bread.", - "language": null, - "saveCount": 0, + "topic": "TRAVEL", + "prospectType": "TIMESPENT_MODELED", + "url": "https://www.nytimes.com/interactive/2023/12/14/travel/things-to-do-joshua-tree.html", + "createdAt": 1703036695, + "imageUrl": "https://static01.nyt.com/images/2023/12/14/multimedia/14Hours-JoshuaTree-ltfj/14Hours-JoshuaTree-ltfj-facebookJumbo.jpg", + "authors": "Lucky Benson", + "publisher": "The New York Times", + "domain": "nytimes.com", + "title": "36 Hours at Joshua Tree", + "excerpt": "Joshua Tree National Park, 800,000 acres of southern California desert populated with the crooked, spiky-leafed trees that give it its name, is luring more people than ever. Today, the park — 140 miles east of Los Angeles — attracts twice as many visitors as it did a decade ago.", + "language": "EN", + "saveCount": 372, "isSyndicated": false, "isCollection": false, "approvedCorpusItem": null, "rejectedCorpusItem": null, "item": { - "givenUrl": "https://www.dwell.com/article/before-and-after-bread-and-butter-best-practice-architecture-seattle-home-renovation-72b6e943", - "itemId": "3982992184", - "normalUrl": "http://dwell.com/article/before-and-after-bread-and-butter-best-practice-architecture-seattle-home-renovation-72b6e943", - "datePublished": "2023-12-20 10:28:50", - "timeToRead": null, + "givenUrl": "https://www.nytimes.com/interactive/2023/12/14/travel/things-to-do-joshua-tree.html", + "itemId": "3980013696", + "normalUrl": "http://nytimes.com/interactive/2023/12/14/travel/things-to-do-joshua-tree.html", + "datePublished": "2023-12-14 04:01:30", + "timeToRead": 7, "__typename": "Item" }, "__typename": "Prospect" }, { - "id": "2a2160fb-6e5b-48d8-8fc4-a1f9abfcb9b1", - "prospectId": "00c4d776-0df2-5bf2-a0f8-c85c99ac1082", + "id": "d67f7866-428d-42b3-b8f0-9220cd080e98", + "prospectId": "7f973a41-9f3e-53ee-b728-ac1411f97f1b", "scheduledSurfaceGuid": "NEW_TAB_EN_US", - "topic": "", - "prospectType": "RSS_LOGISTIC_RECENT", - "url": "https://www.nytimes.com/2023/12/20/magazine/lonnie-mentor.html", - "createdAt": 1703095884, - "imageUrl": "https://static01.nyt.com/images/2023/12/24/magazine/24mag-Lonnie-images/24mag-Lonnie-images-facebookJumbo.jpg", - "authors": "Mitchell S. Jackson", - "publisher": "The New York Times", - "domain": "nytimes.com", - "title": "He Was My Role Model. My Mentor. My Supplier.", - "excerpt": "O.G. rings me in the a.m. to say he’s just touched down in Phoenix. It’s the day before he said he’d arrive, and while there was a time when I’d treat the seeming opacity of his plans as par, the call’s a minor surprise.", + "topic": "POLITICS", + "prospectType": "TIMESPENT_MODELED", + "url": "https://www.theatlantic.com/ideas/archive/2023/12/low-crime-rates-public-opinion/676365/", + "createdAt": 1703036696, + "imageUrl": "https://cdn.theatlantic.com/thumbor/B_uJiDOggfuaB0oI5SOFAywbGXA=/0x92:4311x2337/1200x625/media/img/mt/2023/12/image/original.png", + "authors": "David A. Graham", + "publisher": "The Atlantic", + "domain": "theatlantic.com", + "title": "America’s Peace Wave", + "excerpt": "Sky-high violent-crime rates of recent years have suddenly—mercifully—plummeted. Rents, average monthly temperatures, grocery prices—most things in American life seem to be rising these days.", "language": "EN", - "saveCount": 0, + "saveCount": 208, "isSyndicated": false, "isCollection": false, "approvedCorpusItem": null, "rejectedCorpusItem": null, "item": { - "givenUrl": "https://www.nytimes.com/2023/12/20/magazine/lonnie-mentor.html", - "itemId": "3982784478", - "normalUrl": "http://nytimes.com/2023/12/20/magazine/lonnie-mentor.html", - "datePublished": "2023-12-20 04:03:19", - "timeToRead": 36, + "givenUrl": "https://www.theatlantic.com/ideas/archive/2023/12/low-crime-rates-public-opinion/676365/", + "itemId": "3981393207", + "normalUrl": "http://theatlantic.com/ideas/archive/2023/12/low-crime-rates-public-opinion/676365", + "datePublished": "2023-12-17 05:30:00", + "timeToRead": 5, "__typename": "Item" }, "__typename": "Prospect" }, { - "id": "9e3e28ef-a190-4d5e-be86-8974fb917cd2", - "prospectId": "89b6e245-4e52-5c43-b7c7-6fac8794c319", + "id": "c02ebe71-e677-415b-83cf-99b2b4c600ca", + "prospectId": "55d541d6-fb5b-5062-98c8-a8abfa6107be", "scheduledSurfaceGuid": "NEW_TAB_EN_US", - "topic": "", - "prospectType": "RSS_LOGISTIC_RECENT", - "url": "https://www.atlasobscura.com/articles/explore-los-angeles-hidden-nightlife-scene", - "createdAt": 1703095884, - "imageUrl": "https://img.atlasobscura.com/L-UjHWOzjrPDDK9bHkCsbyeq4fuziQw2CR2mbzq6rOY/rt:fit/w:600/q:81/sm:1/scp:1/ar:1/aHR0cHM6Ly9hdGxh/cy1kZXYuczMuYW1h/em9uYXdzLmNvbS91/cGxvYWRzL2Fzc2V0/cy8zNTgyYjI5ZS02/NjhjLTQ1MDEtYWU0/Zi05ZmI1ZTY0ZGVl/ODk3NDc3N2ZjZmIw/YmQyYTUxNmJfYW9f/aG90ZWxpbmRpZ29f/Z3VpZGUyX2xldHNn/b2Rpc2NvNl9qYXJl/ZGNvd2FuLmpwZw.jpg", - "authors": "Hotel Indigo.", - "publisher": "Atlas Obscura", - "domain": "atlasobscura.com", - "title": "Your Guide to Downtown L.A.’s Hidden Nightlife Scene", - "excerpt": "architecture Where Beauty Meets History in Downtown L.A. Throughout Hotel Indigo, you’ll catch glimpses of L.A. history’s impact and inspiration.", + "topic": "SCIENCE", + "prospectType": "TIMESPENT_MODELED", + "url": "https://www.nytimes.com/2023/12/18/science/chimpanzee-memory-faces.html", + "createdAt": 1703036696, + "imageUrl": "https://static01.nyt.com/images/2023/12/18/science/18sci-chimp-memory/18sci-chimp-memory-facebookJumbo.jpg", + "authors": "Carl Zimmer", + "publisher": "The New York Times", + "domain": "nytimes.com", + "title": "Chimps Can Still Remember Faces After a Quarter Century", + "excerpt": "In 2015, while working as an undergraduate researcher at the North Carolina Zoo, Laura Lewis became friends with a male chimpanzee named Kendall. Whenever she visited the chimps, Kendall would gently take her hands and inspect her fingernails.", "language": "EN", - "saveCount": 0, + "saveCount": 185, "isSyndicated": false, "isCollection": false, "approvedCorpusItem": null, "rejectedCorpusItem": null, "item": { - "givenUrl": "https://www.atlasobscura.com/articles/explore-los-angeles-hidden-nightlife-scene", - "itemId": "3982948730", - "normalUrl": "http://atlasobscura.com/articles/explore-los-angeles-hidden-nightlife-scene", - "datePublished": "2023-12-20 08:07:00", - "timeToRead": null, + "givenUrl": "https://www.nytimes.com/2023/12/18/science/chimpanzee-memory-faces.html", + "itemId": "3982032224", + "normalUrl": "http://nytimes.com/2023/12/18/science/chimpanzee-memory-faces.html", + "datePublished": "2023-12-19 00:00:00", + "timeToRead": 4, "__typename": "Item" }, "__typename": "Prospect" }, { - "id": "5b3c163d-2511-4ea5-8159-ce0b082cef8f", - "prospectId": "6b072cc9-d836-5da4-8295-8e1120706b2f", + "id": "b40cc152-af36-4363-a00a-88864cc1546b", + "prospectId": "40bac85f-80ca-5c34-b167-c868668ad89a", "scheduledSurfaceGuid": "NEW_TAB_EN_US", - "topic": "", - "prospectType": "RSS_LOGISTIC_RECENT", - "url": "https://theweek.com/business/americas-most-in-demand-job", - "createdAt": 1703095884, - "imageUrl": "https://cdn.mos.cms.futurecdn.net/qrbjjvk9w26wRX3pkUPEiD-1200-80.jpg", - "authors": "The Week US", - "publisher": "The Week", - "domain": "theweek.com", - "title": "America’s most in-demand job", - "excerpt": "\"Wind-turbine service technician\" is the hottest job in the U.S., said Matthew Boyle in Bloomberg Businessweek.", + "topic": "PARENTING", + "prospectType": "TIMESPENT_MODELED", + "url": "https://www.nytimes.com/2023/12/18/opinion/christmas-holidays-memories.html", + "createdAt": 1703036696, + "imageUrl": "https://static01.nyt.com/images/2023/12/18/opinion/18renkl/18renkl-facebookJumbo.jpg", + "authors": "Margaret Renkl", + "publisher": "The New York Times", + "domain": "nytimes.com", + "title": "What Happens When the Happy Memories Fade", + "excerpt": "My happiest Christmas memories take the form of snapshots, or the briefest of video clips, though in most cases no actual photographic documentation exists. Even when I study on them, even when I work in earnest to call them up again in some fuller form, they remain only flashes.", "language": "EN", - "saveCount": 0, + "saveCount": 711, "isSyndicated": false, "isCollection": false, "approvedCorpusItem": null, "rejectedCorpusItem": null, "item": { - "givenUrl": "https://theweek.com/business/americas-most-in-demand-job", - "itemId": "3982832263", - "normalUrl": "http://theweek.com/business/americas-most-in-demand-job", - "datePublished": "2023-12-20 03:00:50", - "timeToRead": 2, + "givenUrl": "https://www.nytimes.com/2023/12/18/opinion/christmas-holidays-memories.html", + "itemId": "3981800234", + "normalUrl": "http://nytimes.com/2023/12/18/opinion/christmas-holidays-memories.html", + "datePublished": "2023-12-18 04:00:16", + "timeToRead": 5, "__typename": "Item" }, "__typename": "Prospect" }, { - "id": "a243cc0c-710d-4283-888c-cd9d2136dbd4", - "prospectId": "9631405f-9bba-5016-94c6-75aa13632c46", + "id": "9ac1469c-cf85-41e5-95dc-6a974c8c32de", + "prospectId": "5f295043-377f-5294-9b8a-e2254b8cdb8b", "scheduledSurfaceGuid": "NEW_TAB_EN_US", - "topic": "", - "prospectType": "RSS_LOGISTIC_RECENT", - "url": "https://www.latimes.com/politics/story/2023-12-19/trump-colorado-supreme-court-rules-ineligible-for-ballot", - "createdAt": 1703095885, - "imageUrl": "https://ca-times.brightspotcdn.com/dims4/default/a829ba9/2147483647/strip/true/crop/2048x1075+0+175/resize/1200x630!/quality/75/?url=https%3A%2F%2Fwww.trbimg.com%2Fimg-59e51812%2Fturbine%2Fla-et-donald-trump-20171016", - "authors": "Mark Z. Barabak", - "publisher": "Los Angeles Times", - "domain": "latimes.com", - "title": "Column: Colorado decision striking Trump from ballot is a boon, not setback, for his campaign", - "excerpt": "Donald Trump received an early Christmas present Tuesday, courtesy of the Colorado Supreme Court. In a move without precedent, the justices ruled 4-3 Trump was ineligible for the state’s 2024 presidential ballot, owing to his role in the attempted Jan. 6 overthrow of the federal government.", + "topic": "HEALTH_FITNESS", + "prospectType": "TIMESPENT_MODELED", + "url": "https://www.theguardian.com/society/2023/dec/17/tranq-tourism-tiktok-philadelphia-drug-use-xylazine", + "createdAt": 1703036697, + "imageUrl": "https://i.guim.co.uk/img/media/9616a41d587caadb708c30ae27fab796ecb4cb70/0_63_3242_1945/master/3242.jpg?width=1200&height=630&quality=85&auto=format&fit=crop&overlay-align=bottom%2Cleft&overlay-width=100p&overlay-base64=L2ltZy9zdGF0aWMvb3ZlcmxheXMvdGctZGVmYXVsdC5wbmc&enable=upscale&s=e54a8e198c9bf5a27fcf6a5793d44318", + "authors": "Olivia Empson", + "publisher": "The Guardian", + "domain": "theguardian.com", + "title": "‘Tranq tourism’: alarm in Philadelphia as TikTokers travel to film drug users", + "excerpt": "Sarah Laurel, a harm-reduction professional, sat behind her desk and asked the man who walked into her store how much he’d been paid to be in a viral video she’d recently watched.", "language": "EN", - "saveCount": 0, + "saveCount": 120, "isSyndicated": false, "isCollection": false, "approvedCorpusItem": null, "rejectedCorpusItem": null, "item": { - "givenUrl": "https://www.latimes.com/politics/story/2023-12-19/trump-colorado-supreme-court-rules-ineligible-for-ballot", - "itemId": "3982660449", - "normalUrl": "http://latimes.com/politics/story/2023-12-19/trump-colorado-supreme-court-rules-ineligible-for-ballot", - "datePublished": "2023-12-20 03:24:03", - "timeToRead": 3, + "givenUrl": "https://www.theguardian.com/society/2023/dec/17/tranq-tourism-tiktok-philadelphia-drug-use-xylazine", + "itemId": "3981394695", + "normalUrl": "http://theguardian.com/society/2023/dec/17/tranq-tourism-tiktok-philadelphia-drug-use-xylazine", + "datePublished": "2023-12-17 05:00:24", + "timeToRead": 5, "__typename": "Item" }, "__typename": "Prospect" }, { - "id": "5300cd73-725e-4675-906f-b2e729116d3d", - "prospectId": "639ca409-b39f-59c1-ad40-46677897bc79", + "id": "678dcee6-2551-4630-a81f-e82102c22881", + "prospectId": "1e14d5b0-204d-5ac5-9bd2-3b54b57de0b8", "scheduledSurfaceGuid": "NEW_TAB_EN_US", - "topic": "", - "prospectType": "RSS_LOGISTIC_RECENT", - "url": "https://www.mensjournal.com/adventure/ledlenser-hf8r-best-headlamp", - "createdAt": 1703095885, - "imageUrl": null, - "authors": "", - "publisher": "Men's Journal", - "domain": "mensjournal.com", - "title": "", - "excerpt": "", - "language": null, - "saveCount": 0, + "topic": "EDUCATION", + "prospectType": "TIMESPENT_MODELED", + "url": "https://www.theatlantic.com/ideas/archive/2023/12/cell-phones-student-test-scores-dropping/676889/", + "createdAt": 1703036697, + "imageUrl": "https://cdn.theatlantic.com/thumbor/EaSnrP1TLy_jE0jx4xYlzF8Elsk=/0x64:2995x1624/1200x625/media/img/mt/2023/12/GS1665304/original.jpg", + "authors": "Derek Thompson", + "publisher": "The Atlantic", + "domain": "theatlantic.com", + "title": "It Sure Looks Like Phones Are Making Students Dumber", + "excerpt": "This is Work in Progress, a newsletter about work, technology, and how to solve some of America’s biggest problems. Sign up here. For the past few years, parents, researchers, and the news media have paid closer attention to the relationship between teenagers’ phone use and their mental health.", + "language": "EN", + "saveCount": 278, "isSyndicated": false, "isCollection": false, "approvedCorpusItem": null, "rejectedCorpusItem": null, "item": { - "givenUrl": "https://www.mensjournal.com/adventure/ledlenser-hf8r-best-headlamp", - "itemId": "3982894970", - "normalUrl": "http://mensjournal.com/adventure/ledlenser-hf8r-best-headlamp", - "datePublished": null, - "timeToRead": null, + "givenUrl": "https://www.theatlantic.com/ideas/archive/2023/12/cell-phones-student-test-scores-dropping/676889/", + "itemId": "3982316650", + "normalUrl": "http://theatlantic.com/ideas/archive/2023/12/cell-phones-student-test-scores-dropping/676889", + "datePublished": "2023-12-19 05:00:00", + "timeToRead": 5, "__typename": "Item" }, "__typename": "Prospect" }, { - "id": "b306cc2f-c54b-43eb-bfb0-a60a8a7b1ea4", - "prospectId": "1e58cc78-685c-5e84-b460-89f808227f25", + "id": "8a5aabbf-d612-47ae-91b7-f1e21ee6c094", + "prospectId": "083bc13d-138d-5c82-8b83-6f99491ce38d", "scheduledSurfaceGuid": "NEW_TAB_EN_US", - "topic": "", - "prospectType": "RSS_LOGISTIC_RECENT", - "url": "https://www.bustle.com/wellness/each-zodiac-sign-sex-love-horoscope-2024", - "createdAt": 1703095885, - "imageUrl": "https://imgix.bustle.com/uploads/image/2023/12/18/1794dbf2-0b13-4ed1-8dfd-be8fa9a00183-1_general.jpg?w=1200&h=630&fit=crop&crop=faces&fm=jpg", - "authors": "Alexandria Lettman", - "publisher": "Bustle", - "domain": "bustle.com", - "title": "Your 2024 Love & Sex Horoscope", - "excerpt": "A new year is on the horizon, brimming with passionate and curious cosmic alignments to energize your love life. As you settle down for the holiday season, look to the future; what commitments you are ready to make or finally leave behind?", + "topic": "POLITICS", + "prospectType": "TIMESPENT_MODELED", + "url": "https://www.theatlantic.com/ideas/archive/2023/12/artists-censorship-israel-gaza/676360/", + "createdAt": 1703036697, + "imageUrl": "https://cdn.theatlantic.com/thumbor/4-HYFhPHudGSt_Mfz-I7YHhDrFE=/0x152:7128x3865/1200x625/media/img/mt/2023/12/Not_Censorship_DEF/original.jpg", + "authors": "Xochitl Gonzalez", + "publisher": "The Atlantic", + "domain": "theatlantic.com", + "title": "The Artists Crying ‘Censorship’", + "excerpt": "You’re free to say what you want, and you’re free to face the consequences. For the past few years, the right has worn itself out decrying “cancel culture”—claiming that left-wing mobs have destroyed the career of artists, writers, and freethinkers—and equating it with censorship.", "language": "EN", - "saveCount": 0, + "saveCount": 189, "isSyndicated": false, "isCollection": false, "approvedCorpusItem": null, "rejectedCorpusItem": null, "item": { - "givenUrl": "https://www.bustle.com/wellness/each-zodiac-sign-sex-love-horoscope-2024", - "itemId": "3982341162", - "normalUrl": "http://bustle.com/wellness/each-zodiac-sign-sex-love-horoscope-2024", - "datePublished": "2023-12-18 00:00:00", - "timeToRead": 7, + "givenUrl": "https://www.theatlantic.com/ideas/archive/2023/12/artists-censorship-israel-gaza/676360/", + "itemId": "3980559158", + "normalUrl": "http://theatlantic.com/ideas/archive/2023/12/artists-censorship-israel-gaza/676360", + "datePublished": "2023-12-15 06:31:00", + "timeToRead": 9, "__typename": "Item" }, "__typename": "Prospect" }, { - "id": "52377e50-0085-4d79-87d7-6e822333a629", - "prospectId": "fe7dedc1-5dc7-54be-96e5-400b92fa1c0f", + "id": "e2cc8441-7094-496b-9bbc-f41e79e3e296", + "prospectId": "1b1e6bd0-6107-5c66-9863-0461e06f2ed8", "scheduledSurfaceGuid": "NEW_TAB_EN_US", - "topic": "", - "prospectType": "RSS_LOGISTIC_RECENT", - "url": "https://www.elle.com/culture/celebrities/a46188431/travis-kelce-taylor-swift-booed-football-game-response/", - "createdAt": 1703095885, - "imageUrl": "https://hips.hearstapps.com/hmg-prod/images/taylor-travis-6583130cc24be.jpg?crop=1.00xw:1.00xh;0,0&resize=1200:*", - "authors": "", - "publisher": "Elle", - "domain": "elle.com", - "title": "Travis Kelce Skillfully Addressed Taylor Swift Getting Booed at His Football Games", - "excerpt": "As good as Travis Kelce is on the football field, the tight end is proving himself to be just as skilled at navigating the spotlight that comes with being Taylor Swift’s boyfriend.", + "topic": "ENTERTAINMENT", + "prospectType": "TIMESPENT_MODELED", + "url": "https://www.nytimes.com/2023/12/16/nyregion/youve-got-mail-anniversary.html", + "createdAt": 1703036697, + "imageUrl": "https://static01.nyt.com/images/2023/12/17/nyregion/17Big-01-qmtg/15Big-01-qmtg-facebookJumbo.jpg", + "authors": "GINIA BELLAFANTE", + "publisher": "The New York Times", + "domain": "nytimes.com", + "title": "‘You’ve Got Mail’ Was the Last Great New York Rom-Com", + "excerpt": "Twenty-five years ago next week and two years before it would merge with AOL, Warner Brothers released “You’ve Got Mail.” Starring Meg Ryan, Tom Hanks and the Upper West Side, the movie grossed more than $250 million.", "language": "EN", - "saveCount": 0, + "saveCount": 143, "isSyndicated": false, "isCollection": false, "approvedCorpusItem": null, "rejectedCorpusItem": null, "item": { - "givenUrl": "https://www.elle.com/culture/celebrities/a46188431/travis-kelce-taylor-swift-booed-football-game-response/", - "itemId": "3982992197", - "normalUrl": "http://elle.com/culture/celebrities/a46188431/travis-kelce-taylor-swift-booed-football-game-response", - "datePublished": "2023-12-20 10:25:00", - "timeToRead": null, + "givenUrl": "https://www.nytimes.com/2023/12/16/nyregion/youve-got-mail-anniversary.html", + "itemId": "3980932045", + "normalUrl": "http://nytimes.com/2023/12/16/nyregion/youve-got-mail-anniversary.html", + "datePublished": "2023-12-16 02:00:24", + "timeToRead": 5, "__typename": "Item" }, "__typename": "Prospect" }, { - "id": "af21e081-65a2-4547-877a-81a727e83c7e", - "prospectId": "b57f4db7-f6c5-5dd4-8ad5-58122b158670", + "id": "f3372279-0e59-4aab-aa64-a00a4b19cbd2", + "prospectId": "6092b189-e072-565a-96e7-cf53130509e3", "scheduledSurfaceGuid": "NEW_TAB_EN_US", - "topic": "", - "prospectType": "RSS_LOGISTIC_RECENT", - "url": "https://qz.com/commercial-real-estate-woes-are-a-bankruptcy-alarm-for-1851109651", - "createdAt": 1703095885, - "imageUrl": "https://i.kinja-img.com/image/upload/c_fill,h_675,pg_1,q_80,w_1200/bfc726f968a897c6d0577a01a9836882.jpg", - "authors": "Laura Bratton", - "publisher": "Quartz", - "domain": "qz.com", - "title": "Commercial real estate woes are a bankruptcy alarm for US regional banks", - "excerpt": "It’s no secret that the US commercial real estate industry is suffering. And its downturn could lead to bankruptcy for up to 385 American banks, most of them smaller, regional ones, according to a new report by the National Bureau of Economic Research (NBER).", + "topic": "POLITICS", + "prospectType": "TIMESPENT_MODELED", + "url": "https://www.newyorker.com/culture/cultural-comment/hunter-biden-and-the-things-left-unsaid", + "createdAt": 1703036697, + "imageUrl": "https://media.newyorker.com/photos/6578dc245a003d82a0a9f2f7/16:9/w_1280,c_limit/Winter-Biden-Memoirs-Final.jpg", + "authors": "Jessica Winter", + "publisher": "The New Yorker", + "domain": "newyorker.com", + "title": "Hunter Biden and the Things Left Unsaid", + "excerpt": "Many Americans, it is safe to assume, would prefer if less were said about Hunter Biden.", "language": "EN", - "saveCount": 0, + "saveCount": 141, "isSyndicated": false, "isCollection": false, "approvedCorpusItem": null, "rejectedCorpusItem": null, "item": { - "givenUrl": "https://qz.com/commercial-real-estate-woes-are-a-bankruptcy-alarm-for-1851109651", - "itemId": "3982494401", - "normalUrl": "http://qz.com/commercial-real-estate-woes-are-a-bankruptcy-alarm-for-1851109651", - "datePublished": "2023-12-19 12:44:54", - "timeToRead": 2, + "givenUrl": "https://www.newyorker.com/culture/cultural-comment/hunter-biden-and-the-things-left-unsaid", + "itemId": "3979557703", + "normalUrl": "http://newyorker.com/culture/cultural-comment/hunter-biden-and-the-things-left-unsaid", + "datePublished": "2023-12-13 05:00:00", + "timeToRead": 12, "__typename": "Item" }, "__typename": "Prospect" }, { - "id": "6fcbdd1a-faab-4b4f-8d1d-9cab872744c2", - "prospectId": "5c53692e-1001-5798-b5dd-1552bab1d29b", + "id": "eb6d6766-47a4-4651-a764-0c401eb748f8", + "prospectId": "fee16a7c-0ac1-54d9-bada-cade71d5b269", "scheduledSurfaceGuid": "NEW_TAB_EN_US", - "topic": "", - "prospectType": "RSS_LOGISTIC_RECENT", - "url": "https://www.eater.com/23989864/zingermans-brad-hedeman-pasta-tuna-what-to-make-for-dinner", - "createdAt": 1703095886, - "imageUrl": "https://cdn.vox-cdn.com/thumbor/e7z5Z2sa9zP93COdiAPgAnXDZFA=/0x215:3000x1786/fit-in/1200x630/cdn.vox-cdn.com/uploads/chorus_asset/file/25144568/DJV_Brad_Hedeman_portait.jpg", - "authors": "Mayukh Sen,Ali Slagle", - "publisher": "Eater", - "domain": "eater.com", - "title": "What a Zingerman’s Mail Order Maven Makes for Dinner During the Busiest Time of Year", - "excerpt": "We all could use a little dinner inspiration — even Ali Slagle, who dreams of dinner. In “Dinner Is Served,” she asks colleagues about one night when they somehow transformed ingredients into dinner with all this life going on.", + "topic": "SCIENCE", + "prospectType": "TIMESPENT_MODELED", + "url": "https://www.nytimes.com/2023/12/14/style/north-sea-tiktok.html", + "createdAt": 1703036698, + "imageUrl": "https://static01.nyt.com/images/2023/12/13/multimedia/00xp-northseatok/00xp-northseatok-facebookJumbo.jpg", + "authors": "Claire Moses", + "publisher": "The New York Times", + "domain": "nytimes.com", + "title": "The North Sea Can Be Scary. But Maybe Not TikTok Scary.", + "excerpt": "High waves fill your field of vision, your palms start to sweat and your stomach turns. The boat is getting tossed around. Crew struggle to stay up against the swells.", "language": "EN", - "saveCount": 0, + "saveCount": 324, "isSyndicated": false, "isCollection": false, "approvedCorpusItem": null, "rejectedCorpusItem": null, "item": { - "givenUrl": "https://www.eater.com/23989864/zingermans-brad-hedeman-pasta-tuna-what-to-make-for-dinner", - "itemId": "3982445824", - "normalUrl": "http://eater.com/23989864/zingermans-brad-hedeman-pasta-tuna-what-to-make-for-dinner", - "datePublished": "2023-12-19 09:00:00", + "givenUrl": "https://www.nytimes.com/2023/12/14/style/north-sea-tiktok.html", + "itemId": "3980131972", + "normalUrl": "http://nytimes.com/2023/12/14/style/north-sea-tiktok.html", + "datePublished": "2023-12-14 09:09:26", "timeToRead": 4, "__typename": "Item" }, "__typename": "Prospect" }, { - "id": "6d2757a9-ae23-411f-98d1-9820422e712b", - "prospectId": "b95714ac-384f-5e01-804a-d86b8fcb3d40", + "id": "795ffc41-e4ef-4ebe-b1c8-7d769591bb0a", + "prospectId": "a67d99eb-5c5c-539a-bc30-56187ee43796", "scheduledSurfaceGuid": "NEW_TAB_EN_US", - "topic": "", - "prospectType": "RSS_LOGISTIC_RECENT", - "url": "https://www.vanityfair.com/style/travis-kelce-trying-to-keep-it-cool-cant-help-gushing-about-amazing-taylor-swift", - "createdAt": 1703095886, - "imageUrl": "https://media.vanityfair.com/photos/658300fd69b1927e3c8e4dac/16:9/w_1280,c_limit/Travis-Kelce.jpg", - "authors": "Kase Wickman", - "publisher": "Vanity Fair", - "domain": "vanityfair.com", - "title": "Travis Kelce, Despite \"Trying to Keep It Cool,\" Can't Help Gushing About \"Amazing\" Taylor Swift", - "excerpt": "As Taylor Swift knows, haters gonna hate (hate, hate, hate, hate), and Travis Kelce, as a (football) player, did what he does best as well: play, play, play, play.", + "topic": "SELF_IMPROVEMENT", + "prospectType": "TIMESPENT_MODELED", + "url": "https://www.nytimes.com/2023/12/18/well/mind/loneliness-connection.html", + "createdAt": 1703036699, + "imageUrl": "https://static01.nyt.com/images/2023/12/14/well/14WELL-LONELINESS/14WELL-LONELINESS-facebookJumbo.jpg", + "authors": "Christina Caron", + "publisher": "The New York Times", + "domain": "nytimes.com", + "title": "There’s No Shame in Feeling Lonely", + "excerpt": "This Christmas, Renate Bello, 56, will spend the holiday taking care of her neighbor’s dogs in Easthampton, Mass. It’s the same way she spent Thanksgiving. Without any family or close friends nearby, holidays can be an especially lonely time, she said.", "language": "EN", - "saveCount": 0, + "saveCount": 342, "isSyndicated": false, "isCollection": false, "approvedCorpusItem": null, "rejectedCorpusItem": null, "item": { - "givenUrl": "https://www.vanityfair.com/style/travis-kelce-trying-to-keep-it-cool-cant-help-gushing-about-amazing-taylor-swift", - "itemId": "3982957365", - "normalUrl": "http://vanityfair.com/style/travis-kelce-trying-to-keep-it-cool-cant-help-gushing-about-amazing-taylor-swift", - "datePublished": "2023-12-20 10:32:34", - "timeToRead": 2, + "givenUrl": "https://www.nytimes.com/2023/12/18/well/mind/loneliness-connection.html", + "itemId": "3981803895", + "normalUrl": "http://nytimes.com/2023/12/18/well/mind/loneliness-connection.html", + "datePublished": "2023-12-18 04:00:27", + "timeToRead": 5, "__typename": "Item" }, "__typename": "Prospect" }, { - "id": "9f139551-1702-49c2-be85-4fe604c423a1", - "prospectId": "2d72d862-c36b-5ced-a3e4-e290ceb141b0", + "id": "73765d31-6eec-4be9-8dfa-53278280d7fe", + "prospectId": "cc1dce48-63a1-5117-b9cc-3997c86c422e", "scheduledSurfaceGuid": "NEW_TAB_EN_US", - "topic": "", - "prospectType": "RSS_LOGISTIC_RECENT", - "url": "https://www.thecut.com/2023/12/celine-dion-stiff-person-syndrome-muscle-control.html", - "createdAt": 1703095886, - "imageUrl": "https://pyxis.nymag.com/v1/imgs/a69/2b0/c4a8058ee3bc99425b0d60ee2278dab929-celine-dion-1.1x.rsocial.w1200.jpg", - "authors": "Danielle Cohen", - "publisher": "The Cut", - "domain": "thecut.com", - "title": "Celine Dion’s Stiff-Person Syndrome Is Progressing", - "excerpt": "Last year, Celine Dion revealed she was diagnosed with stiff-person syndrome, a rare neurological condition that causes muscular stiffness and spasms. In a new interview, Dion’s sister Claudette told 7 Jours that the star’s disorder had progressed and she can no longer control her muscles.", + "topic": "HEALTH_FITNESS", + "prospectType": "TIMESPENT_MODELED", + "url": "https://www.theatlantic.com/science/archive/2023/12/tuberculosis-infection-latent-myth/676355/", + "createdAt": 1703036699, + "imageUrl": "https://cdn.theatlantic.com/thumbor/6un_aRTNxqtiarxAOxO9_ACSK-A=/0x102:4792x2598/1200x625/media/img/mt/2023/12/trunk_1/original.png", + "authors": "Katherine J. Wu", + "publisher": "The Atlantic", + "domain": "theatlantic.com", + "title": "A Big Misconception About the World’s Greatest Infectious Killer", + "excerpt": "The dogma that tuberculosis is lying dormant in the bodies of 2 billion people might be wrong. Growing up in India, which for decades has clocked millions of tuberculosis cases each year, Lalita Ramakrishnan was intimately familiar with how devastating the disease can be.", "language": "EN", - "saveCount": 0, + "saveCount": 131, "isSyndicated": false, "isCollection": false, "approvedCorpusItem": null, "rejectedCorpusItem": null, "item": { - "givenUrl": "https://www.thecut.com/2023/12/celine-dion-stiff-person-syndrome-muscle-control.html", - "itemId": "3982504682", - "normalUrl": "http://thecut.com/2023/12/celine-dion-stiff-person-syndrome-muscle-control.html", - "datePublished": "2023-12-19 12:48:26", - "timeToRead": null, + "givenUrl": "https://www.theatlantic.com/science/archive/2023/12/tuberculosis-infection-latent-myth/676355/", + "itemId": "3980547029", + "normalUrl": "http://theatlantic.com/science/archive/2023/12/tuberculosis-infection-latent-myth/676355", + "datePublished": "2023-12-15 06:00:00", + "timeToRead": 8, "__typename": "Item" }, "__typename": "Prospect" }, { - "id": "7d633a77-c0e9-46b1-b614-a2e34779dfad", - "prospectId": "85a8d519-f5d4-591c-a2da-2baf3c1bc5cc", + "id": "3244859e-4c9d-4df5-917b-3f899be8f81f", + "prospectId": "29058879-9a98-5683-b72a-d83178c81517", "scheduledSurfaceGuid": "NEW_TAB_EN_US", - "topic": "", - "prospectType": "RSS_LOGISTIC_RECENT", - "url": "https://time.com/6549027/time-appoints-kelly-conniff-as-deputy-editor/", - "createdAt": 1703095886, - "imageUrl": "https://api.time.com/wp-content/uploads/2023/12/KellyC-1.png", - "authors": "TIME PR", - "publisher": "Time", - "domain": "time.com", - "title": "TIME Appoints Kelly Conniff as Deputy Editor", - "excerpt": "I am delighted to announce that Kelly Conniff has been promoted to Deputy Editor. In this role, Kelly will be my partner in making the day-to-day and strategic decisions for our journalism and lead editorial relationships across the business.", + "topic": "TECHNOLOGY", + "prospectType": "TIMESPENT_MODELED", + "url": "https://www.nbcnews.com/news/us-news/people-think-crime-rate-up-actually-down-rcna129585", + "createdAt": 1703036699, + "imageUrl": "https://media-cldnry.s-nbcnews.com/image/upload/t_nbcnews-fp-1200-630,f_auto,q_auto:best/rockcms/2023-08/230814-california-mall-theft-ac-809p-2ea2d0.jpg", + "authors": "Ken Dilanian", + "publisher": "NBC News", + "domain": "nbcnews.com", + "title": "Most people think the U.S. crime rate is rising. They're wrong.", + "excerpt": "Crime in the United States has declined significantly over the last year, according to new FBI data that contradicts a widespread national perception that law-breaking and violence are on the rise.", "language": "EN", - "saveCount": 0, + "saveCount": 105, "isSyndicated": false, "isCollection": false, "approvedCorpusItem": null, "rejectedCorpusItem": null, "item": { - "givenUrl": "https://time.com/6549027/time-appoints-kelly-conniff-as-deputy-editor/", - "itemId": "3982443067", - "normalUrl": "http://time.com/6549027/time-appoints-kelly-conniff-as-deputy-editor", - "datePublished": "2023-12-19 10:07:14", - "timeToRead": 2, + "givenUrl": "https://www.nbcnews.com/news/us-news/people-think-crime-rate-up-actually-down-rcna129585", + "itemId": "3981018164", + "normalUrl": "http://nbcnews.com/news/us-news/people-think-crime-rate-up-actually-down-rcna129585", + "datePublished": "2023-12-16 06:00:00", + "timeToRead": 3, "__typename": "Item" }, "__typename": "Prospect" }, { - "id": "6e39b04b-bbdd-4480-92d6-d4667ea93a1d", - "prospectId": "aa705d14-0273-5979-8291-5ff7a6b38f0a", + "id": "f40e1ed6-e04e-4dc8-8be3-86baa800967d", + "prospectId": "ec4e721e-419e-5688-a7cf-f271548b761b", "scheduledSurfaceGuid": "NEW_TAB_EN_US", - "topic": "", - "prospectType": "RSS_LOGISTIC_RECENT", - "url": "https://www.gq.com/story/danny-brown-bounces-back", - "createdAt": 1703095886, - "imageUrl": "https://media.gq.com/photos/658125c04683f88183b28576/16:9/w_1280,c_limit/Danny_Brown_GQ_Exclusive_5_PC_Pooneh%20Ghana.jpeg", - "authors": "Paul Thompson", - "publisher": "GQ", - "domain": "gq.com", - "title": "Danny Brown Bounces Back", - "excerpt": "For the moment, Danny Brown presents it as a physical problem, not an existential one. “These pants don’t bend,” the lanky rapper says, folding himself into right angles on the bright-purple paper backdrop he’s posing against.", + "topic": "FOOD", + "prospectType": "TIMESPENT_MODELED", + "url": "https://www.simplyrecipes.com/how-to-store-flour-8415253", + "createdAt": 1703036699, + "imageUrl": "https://www.simplyrecipes.com/thmb/UoLJ1PR-yBzmjHPBQpelQv7j_XY=/1500x0/filters:no_upscale():max_bytes(150000):strip_icc()/Simply-Recipes-Way-Store-Flour-LEAD-03-c7f512a7036243ddb9d067a427a8cb93.jpg", + "authors": "Editorial Process", + "publisher": "simplyrecipes.com", + "domain": "simplyrecipes.com", + "title": "The Only Way You Should Store Flour, According To King Arthur Baking Company", + "excerpt": "You are about to whip up a batch of cookies or muffins, or a birthday cake, only to discover that your flour smells or looks a little funky—or, worse, has some creepy crawlies in it. There are a few things you can do. First, toss that funky flour in the trash or compost bin.", "language": "EN", - "saveCount": 0, + "saveCount": 156, "isSyndicated": false, "isCollection": false, "approvedCorpusItem": null, "rejectedCorpusItem": null, "item": { - "givenUrl": "https://www.gq.com/story/danny-brown-bounces-back", - "itemId": "3982868241", - "normalUrl": "http://gq.com/story/danny-brown-bounces-back", - "datePublished": "2023-12-20 07:00:00", - "timeToRead": 19, + "givenUrl": "https://www.simplyrecipes.com/how-to-store-flour-8415253", + "itemId": "3980077620", + "normalUrl": "http://simplyrecipes.com/how-to-store-flour-8415253", + "datePublished": "2023-12-14 00:00:00", + "timeToRead": 4, "__typename": "Item" }, "__typename": "Prospect" }, { - "id": "adb92b09-825c-4bae-a069-c65c8b6ebb4b", - "prospectId": "07243932-6104-59bf-8032-0c22d72d7d41", + "id": "12383ea0-7015-4fb0-b2de-24cd38708704", + "prospectId": "e1478441-1176-56b8-89e0-030ae3f17a1b", "scheduledSurfaceGuid": "NEW_TAB_EN_US", - "topic": "", - "prospectType": "RSS_LOGISTIC_RECENT", - "url": "https://www.menshealth.com/sex-women/g46163832/best-suction-cup-dildos/", - "createdAt": 1703095886, - "imageUrl": "https://hips.hearstapps.com/hmg-prod/images/mh-12-28-suction-6580a24ae138f.png?crop=1.00xw:1.00xh;0,0&resize=1200:*", - "authors": "Gabrielle B Kassel", - "publisher": "Men's Health", - "domain": "menshealth.com", - "title": "13 Best Suction Cup Dildos, Tested By Sex Experts", - "excerpt": "First, figure out which hole(s) you’re planning to use the toy to penetrate. If you’re going to use the toy anally, the suction cup is going to need to double as a flared base, says Queen.", + "topic": "CAREER", + "prospectType": "TIMESPENT_MODELED", + "url": "https://www.nytimes.com/2023/12/13/style/impromptu-in-law-visits.html", + "createdAt": 1703036700, + "imageUrl": "https://static01.nyt.com/images/2021/06/20/fashion/socialqs-2021-artwork/socialqs-2021-artwork-facebookJumbo.jpg", + "authors": "PHILIP GALANES", + "publisher": "The New York Times", + "domain": "nytimes.com", + "title": "How Can I Stop My In-Laws From Making Impromptu Visits?", + "excerpt": "My husband and I moved to New York 10 years ago. His parents lived 100 miles away. It seemed like a good move: closer to family, but not too close. Then my in-laws bought a second home three minutes from ours.", "language": "EN", - "saveCount": 0, + "saveCount": 605, "isSyndicated": false, "isCollection": false, "approvedCorpusItem": null, - "rejectedCorpusItem": { - "externalId": "20e291dc-f273-40a1-bd6f-6c77119c8e77", - "prospectId": "07243932-6104-59bf-8032-0c22d72d7d41", - "url": "https://www.menshealth.com/sex-women/g46163832/best-suction-cup-dildos/", - "title": "13 Best Suction Cup Dildos, Tested By Sex Experts", - "topic": "", - "language": "EN", - "publisher": "Men's Health", - "reason": "OFFENSIVE_MATERIAL", - "createdBy": "ad|Mozilla-LDAP|cevanoff", - "createdAt": 1703036068, - "__typename": "RejectedCorpusItem" - }, + "rejectedCorpusItem": null, "item": { - "givenUrl": "https://www.menshealth.com/sex-women/g46163832/best-suction-cup-dildos/", - "itemId": "3982444853", - "normalUrl": "http://menshealth.com/sex-women/g46163832/best-suction-cup-dildos", - "datePublished": "2023-12-19 09:57:00", - "timeToRead": 2, + "givenUrl": "https://www.nytimes.com/2023/12/13/style/impromptu-in-law-visits.html", + "itemId": "3979625151", + "normalUrl": "http://nytimes.com/2023/12/13/style/impromptu-in-law-visits.html", + "datePublished": "2023-12-13 08:00:04", + "timeToRead": 4, "__typename": "Item" }, "__typename": "Prospect" }, { - "id": "94c1dbf0-d345-48d9-832a-6712e1831aea", - "prospectId": "b198518e-7c9d-5aec-a114-6b1c92d993cf", + "id": "19905be7-685c-4fba-9f1d-9a7fe3e1895f", + "prospectId": "c014f7ed-83a8-517d-8e9a-d1bc1ecc1f8a", "scheduledSurfaceGuid": "NEW_TAB_EN_US", - "topic": "", - "prospectType": "RSS_LOGISTIC_RECENT", - "url": "https://www.washingtonpost.com/world/2023/12/20/baroness-michelle-mone-ppe-medpro-covid/", - "createdAt": 1703095886, - "imageUrl": "https://www.washingtonpost.com/wp-apps/imrs.php?src=https://arc-anglerfish-washpost-prod-washpost.s3.amazonaws.com/public/JQOIMOJ6FUL2YQ2S2XILFVAO4M.jpg&w=1440", - "authors": "Leo Sands", - "publisher": "The Washington Post", - "domain": "washingtonpost.com", - "title": "A baroness’s lies bring Britain’s covid spending scandal to a boil", - "excerpt": "Baroness Michelle Mone admitted to lying about her family ties to PPE Medpro, which she helped win government contracts to supply protective gear during the pandemic.", + "topic": "PARENTING", + "prospectType": "TIMESPENT_MODELED", + "url": "https://www.nytimes.com/2023/12/16/your-money/college-essays-money.html", + "createdAt": 1703036700, + "imageUrl": "https://static01.nyt.com/images/2023/12/16/multimedia/16money-gbkh/16money-gbkh-facebookJumbo.jpg", + "authors": "RON LIEBER", + "publisher": "The New York Times", + "domain": "nytimes.com", + "title": "Chaos, Injustice and Joy: This Year’s College Essays About Money", + "excerpt": "Some of the most basic questions about money are also central to figuring out what and who you want to be: What do I have, what do I want, how does that compare to others around me and how should I feel about it?", "language": "EN", - "saveCount": 0, + "saveCount": 182, "isSyndicated": false, "isCollection": false, "approvedCorpusItem": null, "rejectedCorpusItem": null, "item": { - "givenUrl": "https://www.washingtonpost.com/world/2023/12/20/baroness-michelle-mone-ppe-medpro-covid/", - "itemId": "3982891851", - "normalUrl": "http://washingtonpost.com/world/2023/12/20/baroness-michelle-mone-ppe-medpro-covid", - "datePublished": "2023-12-20 08:21:31", - "timeToRead": null, + "givenUrl": "https://www.nytimes.com/2023/12/16/your-money/college-essays-money.html", + "itemId": "3980931011", + "normalUrl": "http://nytimes.com/2023/12/16/your-money/college-essays-money.html", + "datePublished": "2023-12-16 02:00:29", + "timeToRead": 13, "__typename": "Item" }, "__typename": "Prospect" }, { - "id": "d2d91c51-1d9e-4b2c-939c-628ac41a3dcf", - "prospectId": "1dd0a5bf-6a93-57e6-9208-0d10a65f5456", + "id": "026f3bb0-782e-4b23-9ba8-077acf3b4786", + "prospectId": "664bc518-2742-5e37-aa81-68183f49cf23", "scheduledSurfaceGuid": "NEW_TAB_EN_US", - "topic": "", - "prospectType": "RSS_LOGISTIC_RECENT", - "url": "https://bigthink.com/videos/retirement/", - "createdAt": 1703095886, - "imageUrl": null, - "authors": "", - "publisher": "Big Think", - "domain": "bigthink.com", - "title": "", - "excerpt": "", - "language": null, - "saveCount": 0, + "topic": "POLITICS", + "prospectType": "TIMESPENT_MODELED", + "url": "https://www.theatlantic.com/ideas/archive/2023/12/housing-crisis-hud-authority/676368/", + "createdAt": 1703036700, + "imageUrl": "https://cdn.theatlantic.com/thumbor/j2xp8146GdqfaNY6iijE0boUlZQ=/0x102:4792x2598/1200x625/media/img/mt/2023/12/hr_h_21.00291558/original.jpg", + "authors": "Annie Lowrey", + "publisher": "The Atlantic", + "domain": "theatlantic.com", + "title": "What Does HUD Even Do?", + "excerpt": "The Department of Housing and Urban Development should consider doing some housing and urban development. The Department of Housing and Urban Development is the agency responsible, one would imagine, for housing and urban development.", + "language": "EN", + "saveCount": 248, "isSyndicated": false, "isCollection": false, "approvedCorpusItem": null, "rejectedCorpusItem": null, "item": { - "givenUrl": "https://bigthink.com/videos/retirement/", - "itemId": "3982701245", - "normalUrl": "http://bigthink.com/videos/retirement", - "datePublished": null, - "timeToRead": null, + "givenUrl": "https://www.theatlantic.com/ideas/archive/2023/12/housing-crisis-hud-authority/676368/", + "itemId": "3981428279", + "normalUrl": "http://theatlantic.com/ideas/archive/2023/12/housing-crisis-hud-authority/676368", + "datePublished": "2023-12-17 07:33:20", + "timeToRead": 9, "__typename": "Item" }, "__typename": "Prospect" }, { - "id": "af79305c-8ae5-42de-81cf-61fd37244ff4", - "prospectId": "a8abc8ee-f9df-5876-960c-a0f6a83d2984", + "id": "785a8955-af6a-490b-9c25-da2d9444cef9", + "prospectId": "a99a7211-acfe-54b2-b57d-1c1d49350b71", "scheduledSurfaceGuid": "NEW_TAB_EN_US", - "topic": "", - "prospectType": "RSS_LOGISTIC_RECENT", - "url": "https://www.theguardian.com/football/2023/dec/20/mls-european-transfer-window-almada-torres-bouanga", - "createdAt": 1703095886, - "imageUrl": "https://i.guim.co.uk/img/media/4361871ea47ee88e925ed887572bd4e8a6b02b88/0_35_3201_1922/master/3201.jpg?width=1200&height=630&quality=85&auto=format&fit=crop&overlay-align=bottom%2Cleft&overlay-width=100p&overlay-base64=L2ltZy9zdGF0aWMvb3ZlcmxheXMvdGctZGVmYXVsdC5wbmc&enable=upscale&s=880632adf02b78da4df3ef9f4ac3eb91", - "authors": "Ryan Baldi", - "publisher": "The Guardian", - "domain": "theguardian.com", - "title": "January transfer window: the MLS stars European clubs should target", - "excerpt": "In the last January transfer window, 33 players left Major League Soccer for Europe. Top European clubs are increasingly looking to US soccer in search of stars who, thanks to the American season finishing in December, are primed to hit the ground running upon arrival.", + "topic": "ENTERTAINMENT", + "prospectType": "TIMESPENT_MODELED", + "url": "https://www.theverge.com/2023/12/13/23999804/amazon-your-books-library-recommendations", + "createdAt": 1703036700, + "imageUrl": "https://cdn.vox-cdn.com/thumbor/EDin--weesrJrcp1em16A2Dg-cU=/0x0:2040x1360/1200x628/filters:focal(1020x680:1021x681)/cdn.vox-cdn.com/uploads/chorus_asset/file/22954534/cgartenberg_211020_4819_0002.jpg", + "authors": "Emma Roth", + "publisher": "The Verge", + "domain": "theverge.com", + "title": "Amazon is making it easier to browse your entire library of books", + "excerpt": "Amazon is rolling out a new feature that puts every book you’ve ever purchased on the site — whether it’s digital, physical, or an audiobook — into a single searchable hub.", "language": "EN", - "saveCount": 0, + "saveCount": 150, "isSyndicated": false, "isCollection": false, "approvedCorpusItem": null, "rejectedCorpusItem": null, "item": { - "givenUrl": "https://www.theguardian.com/football/2023/dec/20/mls-european-transfer-window-almada-torres-bouanga", - "itemId": "3982902667", - "normalUrl": "http://theguardian.com/football/2023/dec/20/mls-european-transfer-window-almada-torres-bouanga", - "datePublished": "2023-12-20 08:24:57", - "timeToRead": 5, + "givenUrl": "https://www.theverge.com/2023/12/13/23999804/amazon-your-books-library-recommendations", + "itemId": "3979664273", + "normalUrl": "http://theverge.com/2023/12/13/23999804/amazon-your-books-library-recommendations", + "datePublished": "2023-12-13 09:45:40", + "timeToRead": 2, "__typename": "Item" }, "__typename": "Prospect" }, { - "id": "3b8f6909-961e-42a6-98a7-b85c7f01eb04", - "prospectId": "aade1da8-eba6-5979-a77b-a76dd072df76", + "id": "68f1447a-c6c2-48f9-bc89-43497623d3d0", + "prospectId": "2213fcea-62cc-5152-a9b4-aaa104537f8b", "scheduledSurfaceGuid": "NEW_TAB_EN_US", - "topic": "", - "prospectType": "RSS_LOGISTIC_RECENT", - "url": "https://nymag.com/intelligencer/article/damian-williams-attorney-sdny-eric-adams-profile.html", - "createdAt": 1703095886, - "imageUrl": "https://pyxis.nymag.com/v1/imgs/37d/507/969bd4dd0c343998c149d51e30cd2012d1-2023-1204-Damian-Williams-Portrait33738-.1x.rsocial.w1200.jpg", - "authors": "Errol Louis", - "publisher": "New York Magazine", - "domain": "nymag.com", - "title": "The Relentless Damian Williams", - "excerpt": "The SDNY U.S. Attorney is one of the country’s gutsiest prosecutors — and a potential headache for Eric Adams. When a jury found the cryptocurrency crook Sam Bankman-Fried guilty of money laundering and fraud in November, Damian Williams, the U.S.", + "topic": "BUSINESS", + "prospectType": "TIMESPENT_MODELED", + "url": "https://www.gobankingrates.com/money/making-money/i-make-up-to-9k-a-month-taking-side-jobs-on-taskrabbit/", + "createdAt": 1703036700, + "imageUrl": "https://cdn.gobankingrates.com/wp-content/uploads/2023/12/Vanessa-Garcia-Taskrabbit.jpeg", + "authors": "Gabrielle Olya", + "publisher": "gobankingrates.com", + "domain": "gobankingrates.com", + "title": "I Make Up To $9K a Month Taking Side Jobs on TaskRabbit: 4 Tips for Making the Most as a Tasker", + "excerpt": "Vanessa Garcia first learned about TaskRabbit in 2017 when her friend told her about the platform, and she decided to try it as a way to earn some extra income while pursuing her acting career.", "language": "EN", - "saveCount": 0, + "saveCount": 98, "isSyndicated": false, "isCollection": false, "approvedCorpusItem": null, "rejectedCorpusItem": null, "item": { - "givenUrl": "https://nymag.com/intelligencer/article/damian-williams-attorney-sdny-eric-adams-profile.html", - "itemId": "3982809568", - "normalUrl": "http://nymag.com/intelligencer/article/damian-williams-attorney-sdny-eric-adams-profile.html", - "datePublished": "2023-12-20 04:00:01", - "timeToRead": 6, + "givenUrl": "https://www.gobankingrates.com/money/making-money/i-make-up-to-9k-a-month-taking-side-jobs-on-taskrabbit/", + "itemId": "3979640976", + "normalUrl": "http://gobankingrates.com/money/making-money/i-make-up-to-9k-a-month-taking-side-jobs-on-taskrabbit", + "datePublished": "2023-12-13 00:01:24", + "timeToRead": 2, "__typename": "Item" }, "__typename": "Prospect" }, { - "id": "a12184a1-ed89-443b-83ca-fe08d12546d3", - "prospectId": "7f6d5723-bb16-52f0-9dd4-00d0dc28e636", + "id": "61e0a1ac-02d3-4388-a750-bdd1d5a12701", + "prospectId": "73b3fd69-3a18-5802-bf87-3eb403ae25ae", "scheduledSurfaceGuid": "NEW_TAB_EN_US", - "topic": "", - "prospectType": "RSS_LOGISTIC_RECENT", - "url": "https://www.npr.org/2023/12/19/1220466034/acts-of-generosity-like-giving-gifts-brings-happiness-research-shows", - "createdAt": 1703095886, - "imageUrl": "https://media.npr.org/include/images/facebook-default-wide-s1400-c100.jpg", - "authors": "Allison Aubrey", - "publisher": "NPR", - "domain": "npr.org", - "title": "Acts of generosity — like giving gifts — brings happiness, research shows", - "excerpt": "Research shows that acts of generosity, like gift-giving, are contagious and increase happiness. Giving and receiving are also fundamental for good relationships.", + "topic": "HEALTH_FITNESS", + "prospectType": "TIMESPENT_MODELED", + "url": "https://www.nytimes.com/2023/12/15/well/family/hospital-illness-support-comfort.html", + "createdAt": 1703036701, + "imageUrl": "https://static01.nyt.com/images/2023/12/15/well/15WELL-NEVERENDING-ILLNESS/15WELL-NEVERENDING-ILLNESS-facebookJumbo-v2.jpg", + "authors": "Jancee Dunn", + "publisher": "The New York Times", + "domain": "nytimes.com", + "title": "How to Comfort Someone When They’re in the Hospital", + "excerpt": "My mother recently spent a week in a hospital near my house, after experiencing complications from an ongoing illness. Thankfully, I could visit her every day. I tried to make her feel cared for — and even build a little excitement — by doing small things.", "language": "EN", - "saveCount": 0, + "saveCount": 127, "isSyndicated": false, "isCollection": false, "approvedCorpusItem": null, "rejectedCorpusItem": null, "item": { - "givenUrl": "https://www.npr.org/2023/12/19/1220466034/acts-of-generosity-like-giving-gifts-brings-happiness-research-shows", - "itemId": "3982584469", - "normalUrl": "http://npr.org/2023/12/19/1220466034/acts-of-generosity-like-giving-gifts-brings-happiness-research-shows", - "datePublished": "2023-12-19 00:00:00", - "timeToRead": null, + "givenUrl": "https://www.nytimes.com/2023/12/15/well/family/hospital-illness-support-comfort.html", + "itemId": "3980506392", + "normalUrl": "http://nytimes.com/2023/12/15/well/family/hospital-illness-support-comfort.html", + "datePublished": "2023-12-15 04:03:55", + "timeToRead": 4, "__typename": "Item" }, "__typename": "Prospect" }, { - "id": "e174573e-b800-4afe-95f8-12a26401daea", - "prospectId": "3a76cc22-a48b-567b-be27-f26a1020c1b8", + "id": "1a1e9998-bdae-4227-b7cd-9b777b18423d", + "prospectId": "c2b03b9e-fdbd-56f3-850b-fd2401e180ce", "scheduledSurfaceGuid": "NEW_TAB_EN_US", - "topic": "", - "prospectType": "RSS_LOGISTIC_RECENT", - "url": "https://www.businessinsider.com/how-call-center-scams-work-hacker-scambaiter-2023-12", - "createdAt": 1703095886, - "imageUrl": "https://i.insider.com/656f5fe658e7c0c29a29c212?width=1200&format=jpeg", - "authors": "Nazar Risafi", - "publisher": "Business Insider", - "domain": "businessinsider.com", - "title": "How scam call centers work, according to a 'scambaiter'", - "excerpt": "Jim Browning is a software engineer and an expert on scam call centers. His YouTube channel baits scammers by gaining access to their computers, observing them through CCTV, and hacking into their networks. He then conveys this information to law enforcement.", + "topic": "FOOD", + "prospectType": "TIMESPENT_MODELED", + "url": "https://www.nytimes.com/2023/12/13/dining/nyc-best-new-restaurants.html", + "createdAt": 1703036701, + "imageUrl": "https://static01.nyt.com/images/2023/12/12/multimedia/12top-new-restaurants13-gbvh/12top-new-restaurants13-gbvh-facebookJumbo.jpg", + "authors": "PETE WELLS", + "publisher": "The New York Times", + "domain": "nytimes.com", + "title": "New York’s 12 Best New Restaurants of 2023", + "excerpt": "The theme of this year’s list of my favorite new restaurants in New York City is: bigger. Some of the places I reviewed most enthusiastically this year were bigger versions of existing restaurants.", "language": "EN", - "saveCount": 0, + "saveCount": 710, "isSyndicated": false, "isCollection": false, "approvedCorpusItem": null, "rejectedCorpusItem": null, "item": { - "givenUrl": "https://www.businessinsider.com/how-call-center-scams-work-hacker-scambaiter-2023-12", - "itemId": "3982947997", - "normalUrl": "http://businessinsider.com/how-call-center-scams-work-hacker-scambaiter-2023-12", - "datePublished": "2023-12-20 00:00:00", - "timeToRead": null, + "givenUrl": "https://www.nytimes.com/2023/12/13/dining/nyc-best-new-restaurants.html", + "itemId": "3979498496", + "normalUrl": "http://nytimes.com/2023/12/13/dining/nyc-best-new-restaurants.html", + "datePublished": "2023-12-13 02:02:45", + "timeToRead": 10, "__typename": "Item" }, "__typename": "Prospect" }, { - "id": "36d96ba2-b5b8-4fbc-a605-65f52df109c7", - "prospectId": "bf140de0-bb97-52bf-b715-32a925980cb0", + "id": "d9927eec-2d38-40b2-accd-16bba86664fc", + "prospectId": "02d859e3-aea4-59a6-ba19-b7b8d249f2f4", "scheduledSurfaceGuid": "NEW_TAB_EN_US", - "topic": "", - "prospectType": "RSS_LOGISTIC_RECENT", - "url": "https://www.insider.com/most-famous-local-dish-every-state-2020-9", - "createdAt": 1703095886, - "imageUrl": "https://i.insider.com/6126aef112b9cc001962e1f5?width=1200&format=jpeg", - "authors": "Erin McDowell", - "publisher": "insider.com", - "domain": "insider.com", - "title": "The most famous local dish from every state", - "excerpt": "Alabama's famous white barbecue sauce, which is made with mayonnaise, vinegar, salt, and ground black pepper, is described as both creamy and tangy.", + "topic": "ENTERTAINMENT", + "prospectType": "TIMESPENT_MODELED", + "url": "https://www.vulture.com/article/poor-things-review-a-banal-rendition-of-sexual-freedom.html", + "createdAt": 1703036701, + "imageUrl": "https://pyxis.nymag.com/v1/imgs/00d/76d/d93f7bde61e8acbe668d4188c3e073a555-Poor-Things-Searchlight-2.1x.rsocial.w1200.jpg", + "authors": "Angelica Jade Bastién", + "publisher": "Vulture", + "domain": "vulture.com", + "title": "Is Poor Things the Best We Can Do for Female Sexuality On Screen?", + "excerpt": "What Poor Things aims to be is a fantasia of sherbet colors and steampunk steel, a Frankenstein-inflected philosophical questioning and a wild girl’s coming of age, a pitch-black farce and a sexual investigation that hinges upon the belief that, yes, women captain their destinies.", "language": "EN", - "saveCount": 0, + "saveCount": 149, "isSyndicated": false, "isCollection": false, "approvedCorpusItem": null, "rejectedCorpusItem": null, "item": { - "givenUrl": "https://www.insider.com/most-famous-local-dish-every-state-2020-9", - "itemId": "3129885156", - "normalUrl": "http://insider.com/most-famous-local-dish-every-state-2020-9", - "datePublished": "2021-08-28 00:00:00", - "timeToRead": 12, + "givenUrl": "https://www.vulture.com/article/poor-things-review-a-banal-rendition-of-sexual-freedom.html", + "itemId": "3980575158", + "normalUrl": "http://vulture.com/article/poor-things-review-a-banal-rendition-of-sexual-freedom.html", + "datePublished": "2023-12-15 07:00:14", + "timeToRead": 8, "__typename": "Item" }, "__typename": "Prospect" }, { - "id": "a6930b20-04cc-46dc-8ab2-138730fa4c60", - "prospectId": "33cbfab3-e8f1-5f7e-9236-fb0412c787bf", + "id": "93b3af1c-e738-4489-996a-fe51b037ff11", + "prospectId": "967eed9e-c0e3-5ca8-a69c-6999d9e4ea98", "scheduledSurfaceGuid": "NEW_TAB_EN_US", - "topic": "", - "prospectType": "RSS_LOGISTIC_RECENT", - "url": "https://www.nytimes.com/2023/12/20/world/europe/eu-migration-asylum.html", - "createdAt": 1703095887, - "imageUrl": "https://static01.nyt.com/images/2023/12/20/multimedia/20eu-migration-mfcz/20eu-migration-mfcz-facebookJumbo.jpg", - "authors": "Matina Stevis-Gridneff", + "topic": "BUSINESS", + "prospectType": "TIMESPENT_MODELED", + "url": "https://www.nytimes.com/2023/12/18/opinion/editorials/housing-costs-modular-homes.html", + "createdAt": 1703036702, + "imageUrl": "https://static01.nyt.com/images/2023/12/19/multimedia/18appelbaum1-mwbz/18appelbaum1-mwbz-facebookJumbo.jpg", + "authors": "BINYAMIN APPELBAUM,Zeke Bogusky", "publisher": "The New York Times", "domain": "nytimes.com", - "title": "After Years of Wrangling, E.U. Countries Reach Major Deal on Migration", - "excerpt": "European countries struck a key deal on Wednesday to overhaul their joint migration system, an agreement years in the making and aimed at allaying mounting pressure from ascendant far-right political parties across the continent.", + "title": "Why Do We Build Houses in the Same Way That We Did 125 Years Ago?", + "excerpt": "In 1969, the federal government announced that it would hand out millions of dollars in subsidies to companies willing to try something new: build houses in factories. Then as now, America was in the throes of a housing crisis. There weren’t enough places to live.", "language": "EN", - "saveCount": 0, + "saveCount": 1122, "isSyndicated": false, "isCollection": false, "approvedCorpusItem": null, "rejectedCorpusItem": null, "item": { - "givenUrl": "https://www.nytimes.com/2023/12/20/world/europe/eu-migration-asylum.html", - "itemId": "3982767908", - "normalUrl": "http://nytimes.com/2023/12/20/world/europe/eu-migration-asylum.html", - "datePublished": "2023-12-20 03:24:34", - "timeToRead": 6, + "givenUrl": "https://www.nytimes.com/2023/12/18/opinion/editorials/housing-costs-modular-homes.html", + "itemId": "3981800256", + "normalUrl": "http://nytimes.com/2023/12/18/opinion/editorials/housing-costs-modular-homes.html", + "datePublished": "2023-12-18 04:01:18", + "timeToRead": 7, "__typename": "Item" }, "__typename": "Prospect" }, { - "id": "fafd12f2-6f67-4d85-aee2-52f5f689b5e4", - "prospectId": "dae552f4-714d-5b39-977d-ee39ee03203a", + "id": "b77bf6f2-d37b-4db2-87bc-2b4583dbaf7e", + "prospectId": "0aaf3760-1a5e-52ce-835e-6593597ddcd1", "scheduledSurfaceGuid": "NEW_TAB_EN_US", - "topic": "", - "prospectType": "RSS_LOGISTIC_RECENT", - "url": "https://www.dwell.com/article/plant-filled-penthouse-apartment-lima-peru-real-estate-43f5f6b6", - "createdAt": 1703095887, - "imageUrl": "https://images.dwell.com/photos-6063391372700811264/7104804451909787648-large/located-in-the-capital-city-of-lima-this-9622-square-foot-penthouse-even-comes-with-a-sun-filled-greenhouse.png", - "authors": "Dwell Staff", - "publisher": "dwell.com", - "domain": "dwell.com", - "title": "Plant Obsessed? You’ll Love This $4.5M Peruvian Penthouse", - "excerpt": "Located in the capital city of Lima, the 9,622-square-foot home even comes with a sun-filled greenhouse.", - "language": null, - "saveCount": 0, + "topic": "HEALTH_FITNESS", + "prospectType": "TIMESPENT_MODELED", + "url": "https://www.nytimes.com/2023/12/13/well/live/alcohol-drinking-family-history.html", + "createdAt": 1703036703, + "imageUrl": "https://static01.nyt.com/images/2023/12/13/well/13WELL-ALCOHOL-GENES/13WELL-ALCOHOL-GENES-facebookJumbo.jpg", + "authors": "Dana G. Smith", + "publisher": "The New York Times", + "domain": "nytimes.com", + "title": "How Family History Influences Your Drinking", + "excerpt": "Alcohol was a big part of family life for Stephen growing up. Holiday parties, backyard barbecues and a hard day at work were all reasons for his father and uncles to have a six-pack of beer — or more. Starting when Stephen was 14, he was allowed to join his father for the occasional beer.", + "language": "EN", + "saveCount": 700, "isSyndicated": false, "isCollection": false, "approvedCorpusItem": null, "rejectedCorpusItem": null, "item": { - "givenUrl": "https://www.dwell.com/article/plant-filled-penthouse-apartment-lima-peru-real-estate-43f5f6b6", - "itemId": "3982480927", - "normalUrl": "http://dwell.com/article/plant-filled-penthouse-apartment-lima-peru-real-estate-43f5f6b6", - "datePublished": "2023-12-19 11:16:03", - "timeToRead": null, + "givenUrl": "https://www.nytimes.com/2023/12/13/well/live/alcohol-drinking-family-history.html", + "itemId": "3979534800", + "normalUrl": "http://nytimes.com/2023/12/13/well/live/alcohol-drinking-family-history.html", + "datePublished": "2023-12-13 04:00:23", + "timeToRead": 5, "__typename": "Item" }, "__typename": "Prospect" }, { - "id": "f3231437-f8a3-49be-8eb5-93dfd63a93e0", - "prospectId": "dd273166-dcd2-5576-b346-aa9b6951e8ce", + "id": "5cfdb004-bdb6-4a5f-a9e6-7da28bfbdf47", + "prospectId": "560de408-286b-513b-b5cf-40e321493c59", "scheduledSurfaceGuid": "NEW_TAB_EN_US", - "topic": "", - "prospectType": "RSS_LOGISTIC_RECENT", - "url": "https://slate.com/human-interest/2023/12/pope-francis-same-sex-relationships-blessing-backstory.html", - "createdAt": 1703095887, - "imageUrl": "https://compote.slate.com/images/e8041260-beb0-4453-8458-7d39ffa3e9fd.jpeg?crop=1299%2C866%2Cx261%2Cy0&width=1560", - "authors": "Molly Olmstead", - "publisher": "Slate", - "domain": "slate.com", - "title": "The Story Behind Pope Francis’ Shocking Reversal on Same-Sex Relationships", - "excerpt": "The Catholic Church, a 2,000-year-old institution, generally moves at a glacial pace. Changes are typically measured at the scale of generations.", + "topic": "PERSONAL_FINANCE", + "prospectType": "TIMESPENT_MODELED", + "url": "https://apnews.com/article/comer-shell-company-biden-hunter-impeachment-6fde28673d5dced307b95cab8425c7ba", + "createdAt": 1703036703, + "imageUrl": "https://dims.apnews.com/dims4/default/60c072a/2147483647/strip/true/crop/5097x2867+0+265/resize/1440x810!/quality/90/?url=https%3A%2F%2Fassets.apnews.com%2F63%2Fdb%2Fd74711b6b96c8d0a6a251ac9ee94%2F887dc43f84124a41937b0124f64bf64b", + "authors": "BRIAN SLODYSKO", + "publisher": "The Associated Press", + "domain": "apnews.com", + "title": "The Republican leading the probe of Hunter Biden has his own shell company and complicated friends", + "excerpt": "TOMPKINSVILLE, Ky. (AP) — Rep. James Comer, a multimillionaire farmer, boasts of being one of the largest landholders near his rural Kentucky hometown, and he has meticulously documented nearly all of his landholdings on congressional financial disclosure documents – roughly 1,600 acres in all.", "language": "EN", - "saveCount": 0, + "saveCount": 110, "isSyndicated": false, "isCollection": false, "approvedCorpusItem": null, "rejectedCorpusItem": null, "item": { - "givenUrl": "https://slate.com/human-interest/2023/12/pope-francis-same-sex-relationships-blessing-backstory.html", - "itemId": "3982578241", - "normalUrl": "http://slate.com/human-interest/2023/12/pope-francis-same-sex-relationships-blessing-backstory.html", - "datePublished": "2023-12-19 16:47:24", - "timeToRead": 6, + "givenUrl": "https://apnews.com/article/comer-shell-company-biden-hunter-impeachment-6fde28673d5dced307b95cab8425c7ba", + "itemId": "3979951878", + "normalUrl": "http://apnews.com/article/comer-shell-company-biden-hunter-impeachment-6fde28673d5dced307b95cab8425c7ba", + "datePublished": "2023-12-14 05:05:20", + "timeToRead": 8, "__typename": "Item" }, "__typename": "Prospect" }, { - "id": "bfd78f51-402b-42b5-915a-96543c9357e4", - "prospectId": "4a681f6b-5258-53b9-9532-d5e9e0e745d9", + "id": "5fca07cb-a00e-4e91-888d-b1af87d12c7b", + "prospectId": "4036a5de-1ee2-5bd1-8c44-b06328dbf3c1", "scheduledSurfaceGuid": "NEW_TAB_EN_US", - "topic": "", - "prospectType": "RSS_LOGISTIC_RECENT", - "url": "https://www.cnn.com/travel/article/badly-behaved-tourists-2023/index.html", - "createdAt": 1703095887, - "imageUrl": null, - "authors": "", - "publisher": "CNN", - "domain": "cnn.com", - "title": "", - "excerpt": "", - "language": null, - "saveCount": 0, + "topic": "ENTERTAINMENT", + "prospectType": "TIMESPENT_MODELED", + "url": "https://www.theatlantic.com/culture/archive/2023/12/murder-in-boston-hbo-review/676338/", + "createdAt": 1703036703, + "imageUrl": "https://cdn.theatlantic.com/thumbor/SHO4OotmtXQtMEbY-xG84KNhwHc=/0x150:4792x2646/1200x625/media/img/mt/2023/12/carol_and_charles_stuart_HR/original.jpg", + "authors": "Hannah Giorgis", + "publisher": "The Atlantic", + "domain": "theatlantic.com", + "title": "The Final Word on a Notorious Killing", + "excerpt": "Murder in Boston: Roots, Rampage, and Reckoning, a new docuseries about the 1989 murder of Carol Stuart, revisits the case with an eye toward Boston’s stark racial divisions.", + "language": "EN", + "saveCount": 105, "isSyndicated": false, "isCollection": false, "approvedCorpusItem": null, "rejectedCorpusItem": null, "item": { - "givenUrl": "https://www.cnn.com/travel/article/badly-behaved-tourists-2023/index.html", - "itemId": "3982340626", - "normalUrl": "http://cnn.com/travel/article/badly-behaved-tourists-2023", - "datePublished": null, - "timeToRead": null, + "givenUrl": "https://www.theatlantic.com/culture/archive/2023/12/murder-in-boston-hbo-review/676338/", + "itemId": "3980082567", + "normalUrl": "http://theatlantic.com/culture/archive/2023/12/murder-in-boston-hbo-review/676338", + "datePublished": "2023-12-14 07:00:00", + "timeToRead": 7, "__typename": "Item" }, "__typename": "Prospect" }, { - "id": "2b0da6ca-67b3-42e9-abe3-cb02820531c5", - "prospectId": "31d09ef7-b7b1-5d57-b3fb-9cdd84dd21ab", + "id": "5049d4a5-6a5a-4f74-9628-eaaa054b5155", + "prospectId": "1582a192-4eb9-5d34-ad6d-4cf2201ac78f", "scheduledSurfaceGuid": "NEW_TAB_EN_US", - "topic": "", - "prospectType": "RSS_LOGISTIC_RECENT", - "url": "https://www.cntraveler.com/story/iceland-volcano-eruption-flights-travel-advice", - "createdAt": 1703095887, - "imageUrl": "https://media.cntraveler.com/photos/6581e1f3ce1ba8ab1ed3a95a/16:9/w_1280,c_limit/GettyImages-1370559554.jpeg", - "authors": "Jessica Puckett", - "publisher": "Condé Nast Traveler", - "domain": "cntraveler.com", - "title": "What Travelers Should Know About Iceland's Latest Volcanic Eruption", - "excerpt": "This is a developing story and will be updated with more information. The eruption began on December 18 at 10:17 p.m. local time, just northeast of the small fishing village of Grindavik, according to the Icelandic Meteorological Office.", + "topic": "BUSINESS", + "prospectType": "TIMESPENT_MODELED", + "url": "https://www.nytimes.com/2023/12/18/nyregion/christmas-trees-cost-nj.html", + "createdAt": 1703036703, + "imageUrl": "https://static01.nyt.com/images/2023/12/15/nyregion/00-nj-costs-christmas-tree-promo/00-nj-costs-christmas-tree-promo-facebookJumbo.jpg", + "authors": "Bryan Anselm,Stefanos Chen", + "publisher": "The New York Times", + "domain": "nytimes.com", + "title": "It Took 10 Years to Grow This Christmas Tree. The Price? $105", + "excerpt": "Every day since the trees were planted has been a roll of the dice. Unlike commodities like corn and soybeans, which Mr.", "language": "EN", - "saveCount": 0, + "saveCount": 642, "isSyndicated": false, "isCollection": false, "approvedCorpusItem": null, "rejectedCorpusItem": null, "item": { - "givenUrl": "https://www.cntraveler.com/story/iceland-volcano-eruption-flights-travel-advice", - "itemId": "3982511517", - "normalUrl": "http://cntraveler.com/story/iceland-volcano-eruption-flights-travel-advice", - "datePublished": "2023-12-19 12:46:09", - "timeToRead": 4, + "givenUrl": "https://www.nytimes.com/2023/12/18/nyregion/christmas-trees-cost-nj.html", + "itemId": "3981762338", + "normalUrl": "http://nytimes.com/2023/12/18/nyregion/christmas-trees-cost-nj.html", + "datePublished": "2023-12-19 00:00:00", + "timeToRead": 3, "__typename": "Item" }, "__typename": "Prospect" }, { - "id": "f9685d3c-cff3-442a-af53-9fbbf8467ee8", - "prospectId": "3545d9c1-b6d3-5a6a-a14c-5fe1288f0aaf", + "id": "80e44a01-159d-4201-90a8-c62a9678f9ab", + "prospectId": "b5cadb35-5e39-50d8-9db2-c0b67da03390", "scheduledSurfaceGuid": "NEW_TAB_EN_US", - "topic": "", - "prospectType": "RSS_LOGISTIC_RECENT", - "url": "https://lifehacker.com/money/atm-errors-and-scams", - "createdAt": 1703095887, - "imageUrl": "https://lifehacker.com/imagery/articles/01HHYZC8M0PY5AA726P3KTZY0N/hero-image.fill.size_1200x675.jpg", - "authors": "Jeff Somers", - "publisher": "Lifehacker", - "domain": "lifehacker.com", - "title": "Four Ways an ATM Can Ruin Your Day (and How to Protect Yourself)", - "excerpt": "Cash may increasingly seem like a relic of a bygone age (less than 10% of Americans use cash as their primary way of paying for stuff these days), but paper money is still useful.", + "topic": "SELF_IMPROVEMENT", + "prospectType": "TIMESPENT_MODELED", + "url": "https://www.nytimes.com/2023/12/16/nyregion/mike-greenberg-espn.html", + "createdAt": 1703036704, + "imageUrl": "https://static01.nyt.com/images/2023/12/17/nyregion/17routine-mike-greenberg-bkqm/16routine-mike-greenberg-bkqm-facebookJumbo.jpg", + "authors": "Kaya Laterman", + "publisher": "The New York Times", + "domain": "nytimes.com", + "title": "How Mike Greenberg Spends His Sundays", + "excerpt": "On most days, Mike Greenberg loves a good argument. He hosts “Get Up” on ESPN and “Greeny” on ESPN Radio and says his on-air and off-air personalities are not very different.", "language": "EN", - "saveCount": 0, + "saveCount": 99, "isSyndicated": false, "isCollection": false, - "approvedCorpusItem": { - "externalId": "a075da50-adc4-4f2c-aa4c-67dd1ff082b1", - "prospectId": "3545d9c1-b6d3-5a6a-a14c-5fe1288f0aaf", - "title": "Four Ways an ATM Can Ruin Your Day (and How to Protect Yourself)", - "language": "EN", - "publisher": "Lifehacker", - "authors": [ - { - "name": "Jeff Somers", - "sortOrder": 0, - "__typename": "CorpusItemAuthor" - } - ], - "url": "https://lifehacker.com/money/atm-errors-and-scams", - "imageUrl": "https://s3.us-east-1.amazonaws.com/pocket-curatedcorpusapi-prod-images/51953700-a609-4158-be63-f60c60648727.jpeg", - "excerpt": "ATMs are usually pretty safe—but when things go wrong, it can be a big headache.", - "status": "RECOMMENDATION", - "source": "PROSPECT", - "topic": "PERSONAL_FINANCE", - "isCollection": false, - "isTimeSensitive": false, - "isSyndicated": false, - "createdBy": "ad|Mozilla-LDAP|cevanoff", - "createdAt": 1703036164, - "updatedBy": null, - "updatedAt": 1703036164, - "scheduledSurfaceHistory": [ - { - "externalId": "a8ff8a4b-13e2-4871-bee7-ac0f0e956c44", - "createdBy": "ad|Mozilla-LDAP|cevanoff", - "scheduledDate": "2023-12-21", - "scheduledSurfaceGuid": "NEW_TAB_EN_US", - "__typename": "ApprovedCorpusItemScheduledSurfaceHistory" - } - ], - "__typename": "ApprovedCorpusItem" - }, + "approvedCorpusItem": null, "rejectedCorpusItem": null, "item": { - "givenUrl": "https://lifehacker.com/money/atm-errors-and-scams", - "itemId": "3982008158", - "normalUrl": "http://lifehacker.com/money/atm-errors-and-scams", - "datePublished": "2023-12-18 12:30:00", - "timeToRead": 6, + "givenUrl": "https://www.nytimes.com/2023/12/16/nyregion/mike-greenberg-espn.html", + "itemId": "3980932063", + "normalUrl": "http://nytimes.com/2023/12/16/nyregion/mike-greenberg-espn.html", + "datePublished": "2023-12-16 02:00:29", + "timeToRead": 5, "__typename": "Item" }, "__typename": "Prospect" }, { - "id": "b296f80b-01a5-49bc-8de7-3a6c287384d5", - "prospectId": "8199a7ba-63de-5711-bd4d-3b3e94210dd9", + "id": "0f7febc9-b46a-4850-8626-0df98743301e", + "prospectId": "af3bcc56-877a-5394-a7f4-90b724f20c59", "scheduledSurfaceGuid": "NEW_TAB_EN_US", - "topic": "", - "prospectType": "RSS_LOGISTIC_RECENT", - "url": "https://www.vanityfair.com/style/meet-queen-camillas-children", - "createdAt": 1703095887, - "imageUrl": "https://media.vanityfair.com/photos/65777fca9cf0ab97a53565d1/16:9/w_1280,c_limit/vf1223-camilla-tom-bowles-laura-lopes.jpg", - "authors": "Hadley Hall Meares", - "publisher": "Vanity Fair", - "domain": "vanityfair.com", - "title": "Meet Queen Camilla’s Children", - "excerpt": "This Christmas there will be more place settings at the royal dinner table at Sandringham. For the first time, Queen Camilla’s children, Tom Parker Bowles and Laura Lopes, along with her five grandchildren, will reportedly join the royal family’s holiday festivities.", + "topic": "ENTERTAINMENT", + "prospectType": "TIMESPENT_MODELED", + "url": "https://www.theverge.com/24003126/netflix-viewing-data-ginny-georgia-witcher", + "createdAt": 1703036704, + "imageUrl": "https://cdn.vox-cdn.com/thumbor/gfzPMrNEBbWJYz1wwmiAgcN_VMw=/0x0:3600x2400/1200x628/filters:focal(1805x825:1806x826)/cdn.vox-cdn.com/uploads/chorus_asset/file/25166630/GAG_203_Unit_00205RC.jpg", + "authors": "Alex Cranz", + "publisher": "The Verge", + "domain": "theverge.com", + "title": "The gulf between the real world and streaming has never been wider", + "excerpt": "Stop me if you’ve heard this one. You’re at a holiday gathering and some very offline family member starts chatting about the show Yellowstone.", "language": "EN", - "saveCount": 0, + "saveCount": 177, "isSyndicated": false, "isCollection": false, "approvedCorpusItem": null, "rejectedCorpusItem": null, "item": { - "givenUrl": "https://www.vanityfair.com/style/meet-queen-camillas-children", - "itemId": "3982047097", - "normalUrl": "http://vanityfair.com/style/meet-queen-camillas-children", - "datePublished": "2023-12-18 12:41:47", - "timeToRead": 11, + "givenUrl": "https://www.theverge.com/24003126/netflix-viewing-data-ginny-georgia-witcher", + "itemId": "3981076880", + "normalUrl": "http://theverge.com/24003126/netflix-viewing-data-ginny-georgia-witcher", + "datePublished": "2023-12-16 10:00:00", + "timeToRead": 5, "__typename": "Item" }, "__typename": "Prospect" }, { - "id": "07fc5b04-514b-407f-81ef-453f9a823b94", - "prospectId": "5da7a9f8-7de1-59b9-919e-77d3caff4f6c", + "id": "0c24541b-04db-4890-b419-cd106694f162", + "prospectId": "6ed5d6b4-f561-5156-a317-e50b1064dc50", "scheduledSurfaceGuid": "NEW_TAB_EN_US", - "topic": "", - "prospectType": "RSS_LOGISTIC_RECENT", - "url": "https://www.gq.com/story/best-watches-of-2023-according-to-experts", - "createdAt": 1703095887, - "imageUrl": "https://media.gq.com/photos/6581f3a9e005bed660f529ba/16:9/w_1280,c_limit/CORRECT%20-%202023%20Watch%20of%20the%20Year%20(1).jpg", - "authors": "Cam Wolf", - "publisher": "GQ", - "domain": "gq.com", - "title": "The Best Watch of 2023, According to the Watch Illuminati", - "excerpt": "On Friday, I shared the first part of GQ’s annual Watch Survey, in which our panel of 46 mega collectors, retailers, vintage dealers, auction-house specialists, journalists, and influencers weighed in on the best watch brands of 2023.", + "topic": "HEALTH_FITNESS", + "prospectType": "TIMESPENT_MODELED", + "url": "https://www.nytimes.com/2023/12/13/well/move/cadaver-workshops-yoga-massage-therapy.html", + "createdAt": 1703036704, + "imageUrl": "https://static01.nyt.com/images/2023/12/06/multimedia/06FITNESS-DISSECTION10-lmzp/06FITNESS-DISSECTION10-lmzp-facebookJumbo.jpg", + "authors": "Danielle Friedman", + "publisher": "The New York Times", + "domain": "nytimes.com", + "title": "Why Yoga Teachers Are Learning to Dissect Cadavers", + "excerpt": "Jane Sato thought she understood the abdominal muscles. For the first decade that she taught Pilates and yoga in New York City, she would tell her students to pull their belly button into their spine to strengthen their core.", "language": "EN", - "saveCount": 0, + "saveCount": 132, "isSyndicated": false, "isCollection": false, "approvedCorpusItem": null, "rejectedCorpusItem": null, "item": { - "givenUrl": "https://www.gq.com/story/best-watches-of-2023-according-to-experts", - "itemId": "3982868186", - "normalUrl": "http://gq.com/story/best-watches-of-2023-according-to-experts", - "datePublished": "2023-12-20 06:55:00", - "timeToRead": 8, + "givenUrl": "https://www.nytimes.com/2023/12/13/well/move/cadaver-workshops-yoga-massage-therapy.html", + "itemId": "3979670055", + "normalUrl": "http://nytimes.com/2023/12/13/well/move/cadaver-workshops-yoga-massage-therapy.html", + "datePublished": "2023-12-13 09:58:22", + "timeToRead": 7, "__typename": "Item" }, "__typename": "Prospect" }, { - "id": "f2b73894-3f3e-4ca6-8820-fe5cfdc6449c", - "prospectId": "9de73a2f-5e5c-5af8-ac8f-38bf9bfa5433", + "id": "0d011d76-57cb-4a60-a986-97598ccdf9c1", + "prospectId": "6ea8f26f-1e2d-5bec-8167-12db3a14d34d", "scheduledSurfaceGuid": "NEW_TAB_EN_US", - "topic": "", - "prospectType": "RSS_LOGISTIC_RECENT", - "url": "https://omny.fm/shows/bloomberg-daybreak/tensions-rise-in-red-sea-apple-races-to-fix-smartw", - "createdAt": 1703095887, - "imageUrl": "https://omny.fm/shows/bloomberg-daybreak/tensions-rise-in-red-sea-apple-races-to-fix-smartw/image.jpg?t=1673277911&size=wideShare", - "authors": "", - "publisher": "omny.fm", - "domain": "omny.fm", - "title": "Tensions Rise in Red Sea; Apple Races to Fix SmartWatch", - "excerpt": "Bloomberg Daybreak: US Edition 807 clip(s)", + "topic": "POLITICS", + "prospectType": "TIMESPENT_MODELED", + "url": "https://www.theatlantic.com/podcasts/archive/2023/12/how-trump-could-manipulate-military/676341/", + "createdAt": 1703036704, + "imageUrl": "https://cdn.theatlantic.com/thumbor/-g59nPhhfU9AkbkbzySI9Kx6puI=/0x0:2995x1560/1200x625/media/img/mt/2023/12/GettyImages_1174363076/original.jpg", + "authors": "Hanna Rosin", + "publisher": "The Atlantic", + "domain": "theatlantic.com", + "title": "How Trump Could Manipulate the Military", + "excerpt": "It’s surprisingly easy. When my colleague Tom Nichols, who taught at the Naval War College for 25 years, warns people that Donald Trump might be a threat to democracy, they often ask him to prove it.", "language": "EN", - "saveCount": 0, + "saveCount": 123, "isSyndicated": false, "isCollection": false, "approvedCorpusItem": null, "rejectedCorpusItem": null, "item": { - "givenUrl": "https://omny.fm/shows/bloomberg-daybreak/tensions-rise-in-red-sea-apple-races-to-fix-smartw", - "itemId": "3982341165", - "normalUrl": "http://omny.fm/shows/bloomberg-daybreak/tensions-rise-in-red-sea-apple-races-to-fix-smartw", - "datePublished": null, - "timeToRead": null, + "givenUrl": "https://www.theatlantic.com/podcasts/archive/2023/12/how-trump-could-manipulate-military/676341/", + "itemId": "3980180874", + "normalUrl": "http://theatlantic.com/podcasts/archive/2023/12/how-trump-could-manipulate-military/676341", + "datePublished": "2023-12-14 11:00:05", + "timeToRead": 19, "__typename": "Item" }, "__typename": "Prospect" }, { - "id": "5c57c25a-faa7-47d1-b548-b5dc342c6bb0", - "prospectId": "e30c9b76-fdb4-5611-97d3-6de7443be434", + "id": "d7ffe869-777e-4b46-8807-bd7946b5f8a4", + "prospectId": "4bb8485a-d83a-5633-9242-263d255dc356", "scheduledSurfaceGuid": "NEW_TAB_EN_US", - "topic": "", - "prospectType": "RSS_LOGISTIC_RECENT", - "url": "https://www.self.com/story/feeling-cranky-tips", - "createdAt": 1703095888, - "imageUrl": "https://media.self.com/photos/65809458875ae6ca80018655/2:1/w_1280,c_limit/Cranky%20tips.png", - "authors": "Julia Ries", - "publisher": "SELF", - "domain": "self.com", - "title": "What to Do When You’re Super Cranky and Hate Everyone", - "excerpt": "Once in a while, I wake up inexplicably cranky. There’s nothing specifically wrong, per se. It’s just that, for whatever reason, everyone around me gets on my nerves.", + "topic": "HEALTH_FITNESS", + "prospectType": "TIMESPENT_MODELED", + "url": "https://www.nytimes.com/2023/12/14/well/move/5-minute-hiit-workout.html", + "createdAt": 1703036705, + "imageUrl": "https://static01.nyt.com/images/2023/12/19/well/12SCAM-MICRO-WORKOUT/12SCAM-MICRO-WORKOUT-facebookJumbo-v2.jpg", + "authors": "Cindy Kuzma", + "publisher": "The New York Times", + "domain": "nytimes.com", + "title": "What Good Is a 5-Minute Workout, Really?", + "excerpt": "A few lucky people find a fitness routine they love and stick to it. But many of us simply want to get our workout over with as quickly as possible. For those in the latter camp, it’s hard to resist headlines claiming we can get in shape in five minutes or less per day.", "language": "EN", - "saveCount": 0, + "saveCount": 168, "isSyndicated": false, "isCollection": false, "approvedCorpusItem": null, "rejectedCorpusItem": null, "item": { - "givenUrl": "https://www.self.com/story/feeling-cranky-tips", - "itemId": "3982887291", - "normalUrl": "http://self.com/story/feeling-cranky-tips", - "datePublished": "2023-12-20 08:00:00", - "timeToRead": 6, + "givenUrl": "https://www.nytimes.com/2023/12/14/well/move/5-minute-hiit-workout.html", + "itemId": "3980157449", + "normalUrl": "http://nytimes.com/2023/12/14/well/move/5-minute-hiit-workout.html", + "datePublished": "2023-12-14 10:00:12", + "timeToRead": 4, "__typename": "Item" }, "__typename": "Prospect" @@ -1749,6 +1601,18 @@ "code": "INVALID_GRAPHQL" } }, + { + "message": "Cannot return null for non-nullable field ApprovedCorpusItem.externalId.", + "path": [ + "getProspects", + 4, + "approvedCorpusItem", + "externalId" + ], + "extensions": { + "code": "INVALID_GRAPHQL" + } + }, { "message": "Cannot return null for non-nullable field RejectedCorpusItem.externalId.", "path": [ @@ -1761,6 +1625,18 @@ "code": "INVALID_GRAPHQL" } }, + { + "message": "Cannot return null for non-nullable field ApprovedCorpusItem.externalId.", + "path": [ + "getProspects", + 5, + "approvedCorpusItem", + "externalId" + ], + "extensions": { + "code": "INVALID_GRAPHQL" + } + }, { "message": "Cannot return null for non-nullable field RejectedCorpusItem.externalId.", "path": [ @@ -1893,6 +1769,18 @@ "code": "INVALID_GRAPHQL" } }, + { + "message": "Cannot return null for non-nullable field ApprovedCorpusItem.externalId.", + "path": [ + "getProspects", + 11, + "approvedCorpusItem", + "externalId" + ], + "extensions": { + "code": "INVALID_GRAPHQL" + } + }, { "message": "Cannot return null for non-nullable field RejectedCorpusItem.externalId.", "path": [ @@ -2397,6 +2285,18 @@ "code": "INVALID_GRAPHQL" } }, + { + "message": "Cannot return null for non-nullable field RejectedCorpusItem.externalId.", + "path": [ + "getProspects", + 32, + "rejectedCorpusItem", + "externalId" + ], + "extensions": { + "code": "INVALID_GRAPHQL" + } + }, { "message": "Cannot return null for non-nullable field ApprovedCorpusItem.externalId.", "path": [ @@ -2685,6 +2585,18 @@ "code": "INVALID_GRAPHQL" } }, + { + "message": "Cannot return null for non-nullable field ApprovedCorpusItem.externalId.", + "path": [ + "getProspects", + 45, + "approvedCorpusItem", + "externalId" + ], + "extensions": { + "code": "INVALID_GRAPHQL" + } + }, { "message": "Cannot return null for non-nullable field RejectedCorpusItem.externalId.", "path": [ diff --git a/tests/unit/rankers/test_new_tab_scheduler.py b/tests/unit/rankers/test_new_tab_scheduler.py index fec854fe6..0ab8a6edd 100644 --- a/tests/unit/rankers/test_new_tab_scheduler.py +++ b/tests/unit/rankers/test_new_tab_scheduler.py @@ -1,26 +1,40 @@ import json import os +from collections import Counter -from pymoo.optimize import minimize -from pymoo.algorithms.soo.nonconvex.ga import GA +import pytest from app.config import ROOT_DIR from app.models.prospect_model import ProspectModel -from app.rankers.new_tab_scheduler import ArticleSelectionProblem +from app.rankers.new_tab_scheduler import select_articles, DEFAULT_DUPLICATE_LIMIT -def test_new_tab_scheduler(): +@pytest.mark.parametrize('repeat', range(100)) +def test_new_tab_scheduler(repeat): with open(os.path.join(ROOT_DIR, 'tests/assets/json/get_prospects.json')) as fp: data = json.load(fp) - articles = [ProspectModel(**a) for a in data['data']['getProspects']] + article_data = data['data']['getProspects'] + articles = [ + ProspectModel( + quality_score=1 - (i / len(article_data)), # dummy linear quality score based on ranking + **a + ) + for i, a in enumerate(article_data) + ] - problem = ArticleSelectionProblem(articles) + selection = select_articles(articles) - algorithm = GA(pop_size=len(articles)) # JSON fixture has 50 articles + # Assert that close to the maximum number of articles are selected. 5000 iterations results in 17 selected articles. + assert len(selection) == pytest.approx(17, rel=1) - res = minimize(problem, algorithm, termination=('n_gen', 50)) + # Assert that close to the maximum score achieved. 5000 iterations results in a sum of 12.6. + assert sum(a.quality_score for a in selection) == pytest.approx(12.6, rel=1) - # Decode the solution - selected_articles = [article for article, flag in zip(articles, res.X) if flag == 1] - print(selected_articles) + # The same topic can be selected at most twice. + for topic, count in Counter(a.topic for a in selection).items(): + assert count <= DEFAULT_DUPLICATE_LIMIT, f"{count} {topic} items, which is more than {DEFAULT_DUPLICATE_LIMIT}" + + # The same topic can be selected at most twice. + for pub, count in Counter(a.publisher for a in selection).items(): + assert count <= DEFAULT_DUPLICATE_LIMIT, f"{count} {pub} items, which is more than {DEFAULT_DUPLICATE_LIMIT}" From 890a4ba1d73a53a9dc71ab743a14aed61a17f23c Mon Sep 17 00:00:00 2001 From: Mathijs Miermans Date: Thu, 21 Dec 2023 14:58:37 -0800 Subject: [PATCH 3/6] feat: allow different limits on publishers and topics --- Pipfile | 1 + Pipfile.lock | 18 +++---- app/rankers/new_tab_scheduler.py | 36 ++++++++++--- tests/unit/rankers/test_new_tab_scheduler.py | 56 +++++++++++++++----- 4 files changed, 80 insertions(+), 31 deletions(-) diff --git a/Pipfile b/Pipfile index 7971528d8..88e05d46b 100644 --- a/Pipfile +++ b/Pipfile @@ -50,6 +50,7 @@ opentelemetry-exporter-otlp-proto-grpc = "*" opentelemetry-instrumentation-aiohttp-client = "==0.41b0" opentelemetry-instrumentation-fastapi = "==0.41b0" pymoo = "*" +numpy = "*" [requires] python_version = "3.8" diff --git a/Pipfile.lock b/Pipfile.lock index ca55de9a7..c0c875c93 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -1,7 +1,7 @@ { "_meta": { "hash": { - "sha256": "4c86364f8d3c3787cc44675ad28152129a1d96c9e515f48ade6910cae056b285" + "sha256": "4dc8a3a39d902a7ae5347b371db43c1316226268586743e550805368b3114ef3" }, "pipfile-spec": 6, "requires": { @@ -1137,7 +1137,7 @@ "sha256:f136bab9c2cfd8da131132c2cf6cc27331dd6fae65f95f69dcd4ae3c3639c810", "sha256:f3a86ed21e4f87050382c7bc96571755193c4c1392490744ac73d660e8f564a9" ], - "markers": "python_version >= '3.8'", + "index": "pypi", "version": "==1.24.4" }, "opentelemetry-api": { @@ -1815,11 +1815,11 @@ "standard" ], "hashes": [ - "sha256:09c8e5a79dc466bdf28dead50093957db184de356fcdc48697bad3bde4c2588e", - "sha256:7c84fea70c619d4a710153482c0d230929af7bcf76c7bfa6de151f0a3a80121e" + "sha256:6dddbad1d7ee0f5140aba5ec138ddc9612c5109399903828b4874c9937f009c2", + "sha256:ce107f5d9bd02b4636001a77a4e74aab5e1e2b146868ebbad565237145af444c" ], "index": "pypi", - "version": "==0.24.0.post1" + "version": "==0.25.0" }, "uvloop": { "hashes": [ @@ -2363,11 +2363,11 @@ }, "botocore-stubs": { "hashes": [ - "sha256:c408265a12d97a467d58e0940d52323dda1faf4a02a07a4105d00e384a4e39c2", - "sha256:efa7e2e8ea9f4881b60703c7ddf5a4e64e66d6d03a20db046653235753b8d829" + "sha256:1d9c5fa2ec0015dc071f9f4225b062204f44e7193a0fb94b808bc11e4ee981d9", + "sha256:f7d578a5c27d64ea1ea6b75bf39c2c37f5c3ce77aed5dc06b5100ec2784d3d51" ], - "markers": "python_version >= '3.7' and python_version < '4.0'", - "version": "==1.34.4" + "markers": "python_version >= '3.8' and python_version < '4.0'", + "version": "==1.34.6" }, "certifi": { "hashes": [ diff --git a/app/rankers/new_tab_scheduler.py b/app/rankers/new_tab_scheduler.py index 895d0357f..a1932e00e 100644 --- a/app/rankers/new_tab_scheduler.py +++ b/app/rankers/new_tab_scheduler.py @@ -11,13 +11,15 @@ from app.models.prospect_model import ProspectModel -DEFAULT_DUPLICATE_LIMIT = 2 - - class ArticleSelectionProblem(Problem): - def __init__(self, articles: List[ProspectModel], n_articles=30): + def __init__( + self, + articles: List[ProspectModel], + topic_duplicate_limit: int, + publisher_duplicate_limit: int + ): n_items = len(articles) - self.P = np.array([a.quality_score for a in articles]) + self.P = np.array([a.quality_score for a in articles]) # profit all_topics = sorted({a.topic for a in articles}) all_publishers = sorted({a.publisher for a in articles}) @@ -38,7 +40,9 @@ def __init__(self, articles: List[ProspectModel], n_articles=30): self.W = np.hstack((topic_matrix, publisher_matrix)) n_constraints = self.W.shape[1] # equal to len(all_topics) + len(all_publishers) - self.duplicate_limit = DEFAULT_DUPLICATE_LIMIT # Maximum duplicate topics and publishers + # Create a vector for duplicate limits + self.duplicate_limit = np.array([topic_duplicate_limit] * len(all_topics) + + [publisher_duplicate_limit] * len(all_publishers)) super().__init__(n_var=n_items, n_obj=1, n_ieq_constr=n_constraints, xl=0, xu=1, vtype=bool) @@ -57,8 +61,24 @@ def __init__(self, articles): eliminate_duplicates=True) -def select_articles(prospects: List[ProspectModel], n_gen=100) -> List[ProspectModel]: - problem = ArticleSelectionProblem(prospects) +def select_articles( + prospects: List[ProspectModel], + topic_duplicate_limit: int = 2, + publisher_duplicate_limit: int = 2, + n_gen: int = 100, +) -> List[ProspectModel]: + """ + @param topic_duplicate_limit: Maximum number of items to select with the same topic + @param publisher_duplicate_limit: Maximum number of items to select with the same publisher + @param prospects: List of all available candidate items + @param n_gen: Number of generations + @return: a subset of prospects optimized for quality_score sum, with constraints on duplicate topics and publishers. + """ + problem = ArticleSelectionProblem( + prospects, + topic_duplicate_limit=topic_duplicate_limit, + publisher_duplicate_limit=publisher_duplicate_limit, + ) algorithm = ArticleSelectionAlgorithm(prospects) res = minimize(problem, algorithm, verbose=True, termination=('n_gen', n_gen)) return [article for article, is_selected in zip(prospects, res.X) if is_selected] diff --git a/tests/unit/rankers/test_new_tab_scheduler.py b/tests/unit/rankers/test_new_tab_scheduler.py index 0ab8a6edd..ce3b88022 100644 --- a/tests/unit/rankers/test_new_tab_scheduler.py +++ b/tests/unit/rankers/test_new_tab_scheduler.py @@ -6,15 +6,38 @@ from app.config import ROOT_DIR from app.models.prospect_model import ProspectModel -from app.rankers.new_tab_scheduler import select_articles, DEFAULT_DUPLICATE_LIMIT +from app.rankers.new_tab_scheduler import select_articles -@pytest.mark.parametrize('repeat', range(100)) -def test_new_tab_scheduler(repeat): +N_TEST_REPEATS = 10 + + +@pytest.fixture(scope="module") +def prospects_data(): with open(os.path.join(ROOT_DIR, 'tests/assets/json/get_prospects.json')) as fp: - data = json.load(fp) + return json.load(fp) + - article_data = data['data']['getProspects'] +@pytest.mark.parametrize('repeat', range(N_TEST_REPEATS)) +@pytest.mark.parametrize( + 'topic_duplicate_limit, publisher_duplicate_limit, optimal_length, optimal_total_score', + [ + # Optimal length and total score were found by calling select_articles with n_gen=5000 + (2, 2, 17, 12.6), + (1, 1, 10, 7.22), + (3, 2, 21, 14.2), + (0, 0, 0, 0), # No prospects are expected to be selected when limits are 0 + (50, 50, 50, 25.5), # All prospects are expected to be selected when limits equal to the number of prospects + ]) +def test_new_tab_scheduler( + prospects_data, + repeat, + topic_duplicate_limit, + publisher_duplicate_limit, + optimal_length, + optimal_total_score, +): + article_data = prospects_data['data']['getProspects'] articles = [ ProspectModel( quality_score=1 - (i / len(article_data)), # dummy linear quality score based on ranking @@ -23,18 +46,23 @@ def test_new_tab_scheduler(repeat): for i, a in enumerate(article_data) ] - selection = select_articles(articles) + selection = select_articles( + articles, + topic_duplicate_limit=topic_duplicate_limit, + publisher_duplicate_limit=publisher_duplicate_limit, + # n_gen=5000 # Uncomment to find what is presumed to be the optimal solution + ) - # Assert that close to the maximum number of articles are selected. 5000 iterations results in 17 selected articles. - assert len(selection) == pytest.approx(17, rel=1) + # Check that the number of selected items is close to expected. abs=1 means that a difference of 1 is allowed. + assert len(selection) == pytest.approx(optimal_length, abs=1) - # Assert that close to the maximum score achieved. 5000 iterations results in a sum of 12.6. - assert sum(a.quality_score for a in selection) == pytest.approx(12.6, rel=1) + # Check that total score is close to expected. rel=.1 means that a difference of 10% is allowed. + assert sum(a.quality_score for a in selection) == pytest.approx(optimal_total_score, rel=.1) - # The same topic can be selected at most twice. + # Assert that the same topics are not selected too many times. for topic, count in Counter(a.topic for a in selection).items(): - assert count <= DEFAULT_DUPLICATE_LIMIT, f"{count} {topic} items, which is more than {DEFAULT_DUPLICATE_LIMIT}" + assert count <= topic_duplicate_limit, f"{count} {topic} items is more than {topic_duplicate_limit}" - # The same topic can be selected at most twice. + # Assert that the same publishers are not selected too many times. for pub, count in Counter(a.publisher for a in selection).items(): - assert count <= DEFAULT_DUPLICATE_LIMIT, f"{count} {pub} items, which is more than {DEFAULT_DUPLICATE_LIMIT}" + assert count <= publisher_duplicate_limit, f"{count} {pub} items is more than {publisher_duplicate_limit}" From 8c5863ab065abb5747745e062dbc23b2785ffb58 Mon Sep 17 00:00:00 2001 From: Mathijs Miermans Date: Fri, 22 Dec 2023 10:51:59 -0800 Subject: [PATCH 4/6] feat: allow limits to be set by topic --- app/rankers/new_tab_scheduler.py | 68 ++++++++++++++------ tests/unit/rankers/test_new_tab_scheduler.py | 37 ++++++----- 2 files changed, 70 insertions(+), 35 deletions(-) diff --git a/app/rankers/new_tab_scheduler.py b/app/rankers/new_tab_scheduler.py index a1932e00e..29922ca6a 100644 --- a/app/rankers/new_tab_scheduler.py +++ b/app/rankers/new_tab_scheduler.py @@ -1,11 +1,9 @@ -from typing import List +from typing import List, Dict import numpy as np -from pymoo.algorithms.soo.nonconvex.ga import GA +from pymoo.algorithms.soo.nonconvex.ga import BGA from pymoo.core.problem import Problem -from pymoo.operators.crossover.pntx import TwoPointCrossover -from pymoo.operators.mutation.bitflip import BitflipMutation -from pymoo.operators.sampling.rnd import BinaryRandomSampling +from pymoo.operators.crossover.pntx import TwoPointCrossover, PointCrossover from pymoo.optimize import minimize from app.models.prospect_model import ProspectModel @@ -15,7 +13,8 @@ class ArticleSelectionProblem(Problem): def __init__( self, articles: List[ProspectModel], - topic_duplicate_limit: int, + topic_duplicate_limits: Dict[str, int], + topic_duplicate_limit_fallback: int, publisher_duplicate_limit: int ): n_items = len(articles) @@ -41,44 +40,73 @@ def __init__( n_constraints = self.W.shape[1] # equal to len(all_topics) + len(all_publishers) # Create a vector for duplicate limits - self.duplicate_limit = np.array([topic_duplicate_limit] * len(all_topics) + - [publisher_duplicate_limit] * len(all_publishers)) + self.duplicate_limit = np.array( + [topic_duplicate_limits.get(topic, topic_duplicate_limit_fallback) for topic in all_topics] + + [publisher_duplicate_limit] * len(all_publishers) + ) super().__init__(n_var=n_items, n_obj=1, n_ieq_constr=n_constraints, xl=0, xu=1, vtype=bool) def _evaluate(self, x, out, *args, **kwargs): + """ + @param x: Numpy array with shape (pop_size, n_var). This is a batch of potential solutions to be evaluated. + @param out["F"]: cost function values of shape (pop_size,) + @param out["G"]: constraint value array of shape (pop_size, n_constraints) + """ out["F"] = -np.sum(self.P * x, axis=1) out["G"] = np.dot(x, self.W) - self.duplicate_limit -class ArticleSelectionAlgorithm(GA): - def __init__(self, articles): +class SchedulingGA(BGA): + def __init__(self): super().__init__( - pop_size=len(articles), - sampling=BinaryRandomSampling(), - crossover=TwoPointCrossover(), - mutation=BitflipMutation(), - eliminate_duplicates=True) + pop_size=50, + crossover=PointCrossover(n_points=2), + ) + + +DEFAULT_TOPIC_LIMITS = { + 'ENTERTAINMENT': 5, + 'FOOD': 5, + 'SCIENCE': 4, + 'HEALTH_FITNESS': 4, + 'SELF_IMPROVEMENT': 4, + 'EDUCATION': 3, + 'POLITICS': 3, + 'TECHNOLOGY': 2, + 'PERSONAL_FINANCE': 2, + 'BUSINESS': 2, + 'CAREER': 2, + 'TRAVEL': 2, + 'PARENTING': 2, + 'SPORTS': 1, +} def select_articles( prospects: List[ProspectModel], - topic_duplicate_limit: int = 2, + topic_duplicate_limits=None, + topic_duplicate_limit_fallback: int = 2, publisher_duplicate_limit: int = 2, n_gen: int = 100, ) -> List[ProspectModel]: """ - @param topic_duplicate_limit: Maximum number of items to select with the same topic + @param topic_duplicate_limits: Dictionary of maximum number of items with the same topics to select + @param topic_duplicate_limit_fallback: Fallback maximum number duplicate topics, for topics not present in the dict @param publisher_duplicate_limit: Maximum number of items to select with the same publisher @param prospects: List of all available candidate items @param n_gen: Number of generations @return: a subset of prospects optimized for quality_score sum, with constraints on duplicate topics and publishers. """ + if topic_duplicate_limits is None: + topic_duplicate_limits = DEFAULT_TOPIC_LIMITS + problem = ArticleSelectionProblem( prospects, - topic_duplicate_limit=topic_duplicate_limit, + topic_duplicate_limits=topic_duplicate_limits, + topic_duplicate_limit_fallback=topic_duplicate_limit_fallback, publisher_duplicate_limit=publisher_duplicate_limit, ) - algorithm = ArticleSelectionAlgorithm(prospects) + algorithm = SchedulingGA() res = minimize(problem, algorithm, verbose=True, termination=('n_gen', n_gen)) - return [article for article, is_selected in zip(prospects, res.X) if is_selected] + return [article for article, x in zip(prospects, res.X) if float(x) > 0.5] diff --git a/tests/unit/rankers/test_new_tab_scheduler.py b/tests/unit/rankers/test_new_tab_scheduler.py index ce3b88022..57b117335 100644 --- a/tests/unit/rankers/test_new_tab_scheduler.py +++ b/tests/unit/rankers/test_new_tab_scheduler.py @@ -6,8 +6,7 @@ from app.config import ROOT_DIR from app.models.prospect_model import ProspectModel -from app.rankers.new_tab_scheduler import select_articles - +from app.rankers.new_tab_scheduler import select_articles, DEFAULT_TOPIC_LIMITS N_TEST_REPEATS = 10 @@ -20,19 +19,25 @@ def prospects_data(): @pytest.mark.parametrize('repeat', range(N_TEST_REPEATS)) @pytest.mark.parametrize( - 'topic_duplicate_limit, publisher_duplicate_limit, optimal_length, optimal_total_score', + 'topic_duplicate_limits,' + 'topic_duplicate_limit_fallback,' + 'publisher_duplicate_limit,' + 'optimal_length,' + 'optimal_total_score', [ # Optimal length and total score were found by calling select_articles with n_gen=5000 - (2, 2, 17, 12.6), - (1, 1, 10, 7.22), - (3, 2, 21, 14.2), - (0, 0, 0, 0), # No prospects are expected to be selected when limits are 0 - (50, 50, 50, 25.5), # All prospects are expected to be selected when limits equal to the number of prospects + (dict(), 2, 2, 17, 12.6), + (dict(), 1, 1, 10, 7.22), + (dict(), 3, 2, 21, 14.2), + (dict(), 0, 0, 0, 0), # No prospects are expected to be selected when limits are 0 + (dict(), 50, 50, 50, 25.5), # All prospects are selected when limits are high + (DEFAULT_TOPIC_LIMITS, 2, 2, 21, 13.94), # Default topic limits ]) def test_new_tab_scheduler( prospects_data, repeat, - topic_duplicate_limit, + topic_duplicate_limits, + topic_duplicate_limit_fallback, publisher_duplicate_limit, optimal_length, optimal_total_score, @@ -48,20 +53,22 @@ def test_new_tab_scheduler( selection = select_articles( articles, - topic_duplicate_limit=topic_duplicate_limit, + topic_duplicate_limits=topic_duplicate_limits, + topic_duplicate_limit_fallback=topic_duplicate_limit_fallback, publisher_duplicate_limit=publisher_duplicate_limit, # n_gen=5000 # Uncomment to find what is presumed to be the optimal solution ) - # Check that the number of selected items is close to expected. abs=1 means that a difference of 1 is allowed. - assert len(selection) == pytest.approx(optimal_length, abs=1) + # Check that the number of selected items is close to expected. abs=2 means that a difference of 2 is allowed. + assert len(selection) == pytest.approx(optimal_length, abs=2) - # Check that total score is close to expected. rel=.1 means that a difference of 10% is allowed. - assert sum(a.quality_score for a in selection) == pytest.approx(optimal_total_score, rel=.1) + # Check that total score is close to expected. rel=.2 means that a difference of 20% is allowed. + assert sum(a.quality_score for a in selection) == pytest.approx(optimal_total_score, rel=.2) # Assert that the same topics are not selected too many times. for topic, count in Counter(a.topic for a in selection).items(): - assert count <= topic_duplicate_limit, f"{count} {topic} items is more than {topic_duplicate_limit}" + assert count <= topic_duplicate_limits.get(topic, topic_duplicate_limit_fallback),\ + f"{count} {topic} items is more than {topic_duplicate_limit_fallback}" # Assert that the same publishers are not selected too many times. for pub, count in Counter(a.publisher for a in selection).items(): From 487360c7d4d1a241c78e95a80287764fc4ac0951 Mon Sep 17 00:00:00 2001 From: Mathijs Miermans Date: Fri, 22 Dec 2023 10:55:05 -0800 Subject: [PATCH 5/6] chore: add comment on topic counts --- app/rankers/new_tab_scheduler.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/app/rankers/new_tab_scheduler.py b/app/rankers/new_tab_scheduler.py index 29922ca6a..e961c2408 100644 --- a/app/rankers/new_tab_scheduler.py +++ b/app/rankers/new_tab_scheduler.py @@ -65,6 +65,9 @@ def __init__(self): ) +""" +Values below are the 75th percentile topic counts per day, scheduled on NEW_TAB_EN_US between 2023-06-01 and 2023-12-22. +""" DEFAULT_TOPIC_LIMITS = { 'ENTERTAINMENT': 5, 'FOOD': 5, From e61d7420ed9fb8da2c5d86460e4cedd36b03dd21 Mon Sep 17 00:00:00 2001 From: Mathijs Miermans Date: Fri, 22 Dec 2023 11:12:33 -0800 Subject: [PATCH 6/6] chore: cleanup test --- app/rankers/new_tab_scheduler.py | 4 +-- tests/unit/rankers/test_new_tab_scheduler.py | 32 +++++++++++--------- 2 files changed, 19 insertions(+), 17 deletions(-) diff --git a/app/rankers/new_tab_scheduler.py b/app/rankers/new_tab_scheduler.py index e961c2408..1e710ab31 100644 --- a/app/rankers/new_tab_scheduler.py +++ b/app/rankers/new_tab_scheduler.py @@ -3,7 +3,7 @@ import numpy as np from pymoo.algorithms.soo.nonconvex.ga import BGA from pymoo.core.problem import Problem -from pymoo.operators.crossover.pntx import TwoPointCrossover, PointCrossover +from pymoo.operators.crossover.pntx import PointCrossover from pymoo.optimize import minimize from app.models.prospect_model import ProspectModel @@ -111,5 +111,5 @@ def select_articles( publisher_duplicate_limit=publisher_duplicate_limit, ) algorithm = SchedulingGA() - res = minimize(problem, algorithm, verbose=True, termination=('n_gen', n_gen)) + res = minimize(problem, algorithm, termination=('n_gen', n_gen)) return [article for article, x in zip(prospects, res.X) if float(x) > 0.5] diff --git a/tests/unit/rankers/test_new_tab_scheduler.py b/tests/unit/rankers/test_new_tab_scheduler.py index 57b117335..c718dbc96 100644 --- a/tests/unit/rankers/test_new_tab_scheduler.py +++ b/tests/unit/rankers/test_new_tab_scheduler.py @@ -17,6 +17,18 @@ def prospects_data(): return json.load(fp) +@pytest.fixture() +def prospects(prospects_data): + prospects_list = prospects_data['data']['getProspects'] + return [ + ProspectModel( + quality_score=1 - (i / len(prospects_list)), # dummy linear quality score based on ranking + **a + ) + for i, a in enumerate(prospects_list) + ] + + @pytest.mark.parametrize('repeat', range(N_TEST_REPEATS)) @pytest.mark.parametrize( 'topic_duplicate_limits,' @@ -26,15 +38,14 @@ def prospects_data(): 'optimal_total_score', [ # Optimal length and total score were found by calling select_articles with n_gen=5000 - (dict(), 2, 2, 17, 12.6), - (dict(), 1, 1, 10, 7.22), - (dict(), 3, 2, 21, 14.2), + (DEFAULT_TOPIC_LIMITS, 2, 2, 21, 13.94), # Different limits per topic + (dict(), 3, 2, 21, 14.2), # Fixed topic (3) and publisher (2) limits + (dict(), 1, 1, 10, 7.22), # Fixed topic (1) and publisher (1) limits (dict(), 0, 0, 0, 0), # No prospects are expected to be selected when limits are 0 (dict(), 50, 50, 50, 25.5), # All prospects are selected when limits are high - (DEFAULT_TOPIC_LIMITS, 2, 2, 21, 13.94), # Default topic limits ]) def test_new_tab_scheduler( - prospects_data, + prospects, repeat, topic_duplicate_limits, topic_duplicate_limit_fallback, @@ -42,17 +53,8 @@ def test_new_tab_scheduler( optimal_length, optimal_total_score, ): - article_data = prospects_data['data']['getProspects'] - articles = [ - ProspectModel( - quality_score=1 - (i / len(article_data)), # dummy linear quality score based on ranking - **a - ) - for i, a in enumerate(article_data) - ] - selection = select_articles( - articles, + prospects, topic_duplicate_limits=topic_duplicate_limits, topic_duplicate_limit_fallback=topic_duplicate_limit_fallback, publisher_duplicate_limit=publisher_duplicate_limit,