From 755830236b8e91fdbf629c62572019cdcc09e74c Mon Sep 17 00:00:00 2001 From: Sainan Date: Sun, 5 Jan 2025 04:01:34 +0100 Subject: [PATCH 01/18] feat: opening relics in endless missions --- .../api/getVoidProjectionRewardsController.ts | 99 +++++++++++++++++++ src/routes/api.ts | 2 + src/services/rngService.ts | 19 ++++ 3 files changed, 120 insertions(+) create mode 100644 src/controllers/api/getVoidProjectionRewardsController.ts diff --git a/src/controllers/api/getVoidProjectionRewardsController.ts b/src/controllers/api/getVoidProjectionRewardsController.ts new file mode 100644 index 00000000..803e163a --- /dev/null +++ b/src/controllers/api/getVoidProjectionRewardsController.ts @@ -0,0 +1,99 @@ +import { getJSONfromString } from "@/src/helpers/stringHelpers"; +import { addMiscItems, getInventory } from "@/src/services/inventoryService"; +import { getAccountIdForRequest } from "@/src/services/loginService"; +import { handleStoreItemAcquisition } from "@/src/services/purchaseService"; +import { getRandomWeightedReward2 } from "@/src/services/rngService"; +import { ITypeCount } from "@/src/types/inventoryTypes/inventoryTypes"; +import { logger } from "@/src/utils/logger"; +import { RequestHandler } from "express"; +import { ExportRelics, ExportRewards, TRarity } from "warframe-public-export-plus"; + +export const getVoidProjectionRewardsController: RequestHandler = async (req, res) => { + const accountId = await getAccountIdForRequest(req); + const data = getJSONfromString(String(req.body)) as IVoidProjectionRewardRequest; + const response: IVoidProjectionRewardResponse = { + CurrentWave: data.CurrentWave, + ParticipantInfo: data.ParticipantInfo, + DifficultyTier: data.DifficultyTier + }; + if (data.ParticipantInfo.QualifiesForReward) { + const relic = ExportRelics[data.ParticipantInfo.VoidProjection]; + const weights = refinementToWeights[relic.quality]; + logger.debug(`opening a relic of quality ${relic.quality}; rarity weights are`, weights); + const reward = getRandomWeightedReward2( + ExportRewards[relic.rewardManifest][0] as { type: string; itemCount: number; rarity: TRarity }[], // rarity is nullable in PE+ typings, but always present for relics + refinementToWeights[relic.quality] + )!; + logger.debug(`relic rolled`, reward); + response.ParticipantInfo.Reward = reward.type; + + // Remove relic + const inventory = await getInventory(accountId); + addMiscItems(inventory, [ + { + ItemType: data.ParticipantInfo.VoidProjection, + ItemCount: -1 + } + ]); + await inventory.save(); + + // Give reward + await handleStoreItemAcquisition(reward.type, accountId, reward.itemCount); + } + res.json(response); +}; + +const refinementToWeights = { + VPQ_BRONZE: { + COMMON: 0.76, + UNCOMMON: 0.22, + RARE: 0.02, + LEGENDARY: 0 + }, + VPQ_SILVER: { + COMMON: 0.7, + UNCOMMON: 0.26, + RARE: 0.04, + LEGENDARY: 0 + }, + VPQ_GOLD: { + COMMON: 0.6, + UNCOMMON: 0.34, + RARE: 0.06, + LEGENDARY: 0 + }, + VPQ_PLATINUM: { + COMMON: 0.5, + UNCOMMON: 0.4, + RARE: 0.1, + LEGENDARY: 0 + } +}; + +interface IVoidProjectionRewardRequest { + CurrentWave: number; + ParticipantInfo: IParticipantInfo; + VoidTier: string; + DifficultyTier: number; + VoidProjectionRemovalHash: string; +} + +interface IVoidProjectionRewardResponse { + CurrentWave: number; + ParticipantInfo: IParticipantInfo; + DifficultyTier: number; +} + +interface IParticipantInfo { + AccountId: string; + Name: string; + ChosenRewardOwner: string; + MissionHash: string; + VoidProjection: string; + Reward: string; + QualifiesForReward: boolean; + HaveRewardResponse: boolean; + RewardsMultiplier: number; + RewardProjection: string; + HardModeReward: ITypeCount; +} diff --git a/src/routes/api.ts b/src/routes/api.ts index 4194f44c..c72787ae 100644 --- a/src/routes/api.ts +++ b/src/routes/api.ts @@ -26,6 +26,7 @@ import { getIgnoredUsersController } from "@/src/controllers/api/getIgnoredUsers import { getNewRewardSeedController } from "@/src/controllers/api/getNewRewardSeedController"; import { getShipController } from "@/src/controllers/api/getShipController"; import { getVendorInfoController } from "@/src/controllers/api/getVendorInfoController"; +import { getVoidProjectionRewardsController } from "@/src/controllers/api/getVoidProjectionRewardsController"; import { gildWeaponController } from "@/src/controllers/api/gildWeaponController"; import { guildTechController } from "../controllers/api/guildTechController"; import { hostSessionController } from "@/src/controllers/api/hostSessionController"; @@ -120,6 +121,7 @@ apiRouter.post("/focus.php", focusController); apiRouter.post("/fusionTreasures.php", fusionTreasuresController); apiRouter.post("/genericUpdate.php", genericUpdateController); apiRouter.post("/getAlliance.php", getAllianceController); +apiRouter.post("/getVoidProjectionRewards.php", getVoidProjectionRewardsController); apiRouter.post("/gildWeapon.php", gildWeaponController); apiRouter.post("/guildTech.php", guildTechController); apiRouter.post("/hostSession.php", hostSessionController); diff --git a/src/services/rngService.ts b/src/services/rngService.ts index fad3a4ff..ea32cf50 100644 --- a/src/services/rngService.ts +++ b/src/services/rngService.ts @@ -40,3 +40,22 @@ export const getRandomWeightedReward = ( } return getRandomReward(resultPool); }; + +export const getRandomWeightedReward2 = ( + pool: { type: string; itemCount: number; rarity: TRarity }[], + weights: Record +): IRngResult | undefined => { + const resultPool: IRngResult[] = []; + const rarityCounts: Record = { COMMON: 0, UNCOMMON: 0, RARE: 0, LEGENDARY: 0 }; + for (const entry of pool) { + ++rarityCounts[entry.rarity]; + } + for (const entry of pool) { + resultPool.push({ + type: entry.type, + itemCount: 1, + probability: weights[entry.rarity] / rarityCounts[entry.rarity] + }); + } + return getRandomReward(resultPool); +}; -- 2.47.2 From 38d8fc448e93d50031b3cb5a20627ad51c26a40a Mon Sep 17 00:00:00 2001 From: Sainan Date: Sun, 5 Jan 2025 04:03:04 +0100 Subject: [PATCH 02/18] reuse variable --- src/controllers/api/getVoidProjectionRewardsController.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/controllers/api/getVoidProjectionRewardsController.ts b/src/controllers/api/getVoidProjectionRewardsController.ts index 803e163a..9a956a20 100644 --- a/src/controllers/api/getVoidProjectionRewardsController.ts +++ b/src/controllers/api/getVoidProjectionRewardsController.ts @@ -22,7 +22,7 @@ export const getVoidProjectionRewardsController: RequestHandler = async (req, re logger.debug(`opening a relic of quality ${relic.quality}; rarity weights are`, weights); const reward = getRandomWeightedReward2( ExportRewards[relic.rewardManifest][0] as { type: string; itemCount: number; rarity: TRarity }[], // rarity is nullable in PE+ typings, but always present for relics - refinementToWeights[relic.quality] + weights )!; logger.debug(`relic rolled`, reward); response.ParticipantInfo.Reward = reward.type; -- 2.47.2 From 8e746093200a4d402daf184ac93ac7b29ffe4389 Mon Sep 17 00:00:00 2001 From: Sainan Date: Sun, 5 Jan 2025 04:07:18 +0100 Subject: [PATCH 03/18] fix ignoring itemCount --- src/services/rngService.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/services/rngService.ts b/src/services/rngService.ts index ea32cf50..1dca83ec 100644 --- a/src/services/rngService.ts +++ b/src/services/rngService.ts @@ -53,7 +53,7 @@ export const getRandomWeightedReward2 = ( for (const entry of pool) { resultPool.push({ type: entry.type, - itemCount: 1, + itemCount: entry.itemCount, probability: weights[entry.rarity] / rarityCounts[entry.rarity] }); } -- 2.47.2 From 595305081a34c212d045d1f066d08dbca81a7380 Mon Sep 17 00:00:00 2001 From: Sainan Date: Sun, 5 Jan 2025 05:04:50 +0100 Subject: [PATCH 04/18] fix: wrong format for "log-in expired" response --- src/middleware/errorHandler.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/middleware/errorHandler.ts b/src/middleware/errorHandler.ts index d5b83950..45f69062 100644 --- a/src/middleware/errorHandler.ts +++ b/src/middleware/errorHandler.ts @@ -3,7 +3,7 @@ import { logger } from "../utils/logger"; export const errorHandler = (err: Error, req: Request, res: Response, _next: NextFunction): void => { if (err.message == "Invalid accountId-nonce pair") { - res.status(400).json("Log-in expired"); + res.status(400).send("Log-in expired"); } else if (err.stack) { const stackArr = err.stack.split("\n"); stackArr[0] += ` while processing ${req.path} request`; -- 2.47.2 From e42e2eb258a3133b7d0081ec3982f7c4b5c0edaf Mon Sep 17 00:00:00 2001 From: Sainan Date: Sun, 5 Jan 2025 05:16:45 +0100 Subject: [PATCH 05/18] chore: npm run prettier --- static/fixed_responses/getSkuCatalog.json | 7709 ++++++++++----------- 1 file changed, 3854 insertions(+), 3855 deletions(-) diff --git a/static/fixed_responses/getSkuCatalog.json b/static/fixed_responses/getSkuCatalog.json index 01f646ae..b6157ea0 100644 --- a/static/fixed_responses/getSkuCatalog.json +++ b/static/fixed_responses/getSkuCatalog.json @@ -1,3857 +1,3856 @@ { - "Prices": - [ - { - "productId": 17, - "listPrice": 4.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 18, - "listPrice": 9.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 160, - "listPrice": 19.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 257, - "listPrice": 199.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 258, - "listPrice": 99.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 259, - "listPrice": 49.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 785, - "listPrice": 19.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 786, - "listPrice": 39.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 787, - "listPrice": 79.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 861, - "listPrice": 29.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 979, - "listPrice": 4.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 2000, - "listPrice": 49.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 2001, - "listPrice": 79.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 2004, - "listPrice": 9.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 2005, - "listPrice": 59.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 2006, - "listPrice": 79.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 2007, - "listPrice": 59.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 2008, - "listPrice": 77.77, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 2009, - "listPrice": 9.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 2010, - "listPrice": 59.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 2011, - "listPrice": 79.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 2012, - "listPrice": 59.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 2013, - "listPrice": 77.77, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 2014, - "listPrice": 9.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 2015, - "listPrice": 59.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 2016, - "listPrice": 79.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 2017, - "listPrice": 59.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 2018, - "listPrice": 77.77, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 2019, - "listPrice": 9.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 2020, - "listPrice": 59.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 2021, - "listPrice": 79.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 2022, - "listPrice": 59.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 2023, - "listPrice": 77.77, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 2025, - "listPrice": 149.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 2026, - "listPrice": 99.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 2027, - "listPrice": 49.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 2028, - "listPrice": 149.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 2029, - "listPrice": 9.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 2030, - "listPrice": 59.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 2031, - "listPrice": 79.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 2032, - "listPrice": 59.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 2033, - "listPrice": 77.77, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 2035, - "listPrice": 9.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 2037, - "listPrice": 59.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 2038, - "listPrice": 79.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 2039, - "listPrice": 59.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 2040, - "listPrice": 77.77, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 2041, - "listPrice": 9.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 2042, - "listPrice": 59.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 2043, - "listPrice": 59.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 2044, - "listPrice": 79.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 2045, - "listPrice": 59.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 2046, - "listPrice": 77.77, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 2047, - "listPrice": 9.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 2049, - "listPrice": 59.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 2050, - "listPrice": 79.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 2051, - "listPrice": 59.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 2052, - "listPrice": 77.77, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 2054, - "listPrice": 59.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 2055, - "listPrice": 9.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 2058, - "listPrice": 59.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 2059, - "listPrice": 79.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 2060, - "listPrice": 59.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 2061, - "listPrice": 77.77, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 2062, - "listPrice": 24.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 2066, - "listPrice": 9.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 2071, - "listPrice": 9.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 2072, - "listPrice": 19.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 2075, - "listPrice": 9.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 2081, - "listPrice": 9.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 2085, - "listPrice": 24.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 2089, - "listPrice": 9.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 2092, - "listPrice": 9.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 2095, - "listPrice": 9.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 2098, - "listPrice": 9.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 2100, - "listPrice": 9.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 2102, - "listPrice": 15.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 2105, - "listPrice": 19.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 3000, - "listPrice": 79.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 3001, - "listPrice": 59.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 3002, - "listPrice": 79.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 3003, - "listPrice": 59.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 3004, - "listPrice": 79.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 3005, - "listPrice": 59.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 3006, - "listPrice": 9.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 3007, - "listPrice": 79.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 3008, - "listPrice": 59.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 3009, - "listPrice": 9.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 3010, - "listPrice": 149.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 3011, - "listPrice": 99.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 3012, - "listPrice": 49.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 3013, - "listPrice": 79.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 3014, - "listPrice": 59.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 3015, - "listPrice": 9.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 3016, - "listPrice": 79.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 3017, - "listPrice": 59.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 3018, - "listPrice": 59.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 3019, - "listPrice": 9.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 3020, - "listPrice": 79.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 3021, - "listPrice": 59.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 3022, - "listPrice": 9.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 3023, - "listPrice": 79.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 3024, - "listPrice": 59.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 3025, - "listPrice": 59.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 3026, - "listPrice": 9.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 3027, - "listPrice": 79.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 3028, - "listPrice": 59.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 3029, - "listPrice": 9.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 3033, - "listPrice": 9.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 3038, - "listPrice": 9.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 3041, - "listPrice": 24.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 3044, - "listPrice": 19.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 3047, - "listPrice": 9.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 3050, - "listPrice": 9.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 3053, - "listPrice": 4.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 3054, - "listPrice": 9.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 3057, - "listPrice": 9.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 3060, - "listPrice": 9.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 3063, - "listPrice": 19.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 4000, - "listPrice": 59.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 4001, - "listPrice": 77.77, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 4015, - "listPrice": 59.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 4016, - "listPrice": 77.77, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 4020, - "listPrice": 59.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 4021, - "listPrice": 77.77, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 4022, - "listPrice": 59.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 4023, - "listPrice": 77.77, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 4024, - "listPrice": 59.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 4025, - "listPrice": 77.77, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 4100, - "listPrice": 19.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 4101, - "listPrice": 39.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 4102, - "listPrice": 59.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 4103, - "listPrice": 99.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 4105, - "listPrice": 19.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 4106, - "listPrice": 39.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 4107, - "listPrice": 59.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 4108, - "listPrice": 99.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 4109, - "listPrice": 19.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 4110, - "listPrice": 39.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 4111, - "listPrice": 59.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 4112, - "listPrice": 99.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 4113, - "listPrice": 19.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 4114, - "listPrice": 39.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 4115, - "listPrice": 59.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 4116, - "listPrice": 99.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 4117, - "listPrice": 19.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 4118, - "listPrice": 39.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 4119, - "listPrice": 59.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 4120, - "listPrice": 99.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 4121, - "listPrice": 19.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 4122, - "listPrice": 39.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 4123, - "listPrice": 59.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 4124, - "listPrice": 99.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6000, - "listPrice": 4.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6002, - "listPrice": 4.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6003, - "listPrice": 2.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6004, - "listPrice": 5.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6005, - "listPrice": 4.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6006, - "listPrice": 4.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6007, - "listPrice": 4.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6008, - "listPrice": 5.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6009, - "listPrice": 5.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6010, - "listPrice": 5.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6011, - "listPrice": 5.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6012, - "listPrice": 5.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6013, - "listPrice": 5.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6014, - "listPrice": 5.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6015, - "listPrice": 5.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6016, - "listPrice": 5.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6017, - "listPrice": 5.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6018, - "listPrice": 5.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6019, - "listPrice": 5.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6020, - "listPrice": 5.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6021, - "listPrice": 6.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6022, - "listPrice": 6.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6024, - "listPrice": 4.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6025, - "listPrice": 4.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6026, - "listPrice": 4.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6027, - "listPrice": 4.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6028, - "listPrice": 5.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6029, - "listPrice": 5.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6030, - "listPrice": 5.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6031, - "listPrice": 5.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6032, - "listPrice": 5.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6033, - "listPrice": 5.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6034, - "listPrice": 5.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6035, - "listPrice": 5.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6036, - "listPrice": 5.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6038, - "listPrice": 4.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6039, - "listPrice": 5.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6040, - "listPrice": 6.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6041, - "listPrice": 5.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6042, - "listPrice": 4.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6043, - "listPrice": 5.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6044, - "listPrice": 4.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6045, - "listPrice": 4.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6046, - "listPrice": 5.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6047, - "listPrice": 4.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6048, - "listPrice": 6.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6049, - "listPrice": 4.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6050, - "listPrice": 5.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6051, - "listPrice": 4.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6052, - "listPrice": 5.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6053, - "listPrice": 5.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6054, - "listPrice": 5.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6055, - "listPrice": 5.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6056, - "listPrice": 5.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6057, - "listPrice": 5.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6058, - "listPrice": 5.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6059, - "listPrice": 4.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6060, - "listPrice": 4.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6061, - "listPrice": 4.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6062, - "listPrice": 4.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6063, - "listPrice": 4.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6064, - "listPrice": 6.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6065, - "listPrice": 6.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6066, - "listPrice": 6.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6067, - "listPrice": 6.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6068, - "listPrice": 6.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6069, - "listPrice": 5.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6070, - "listPrice": 5.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6071, - "listPrice": 5.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6072, - "listPrice": 5.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6073, - "listPrice": 5.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6074, - "listPrice": 5.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6075, - "listPrice": 5.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6076, - "listPrice": 5.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6077, - "listPrice": 5.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6078, - "listPrice": 5.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6079, - "listPrice": 5.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6080, - "listPrice": 5.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6081, - "listPrice": 5.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6082, - "listPrice": 5.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6083, - "listPrice": 5.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6084, - "listPrice": 4.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6085, - "listPrice": 5.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6086, - "listPrice": 5.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6087, - "listPrice": 5.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6088, - "listPrice": 4.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6089, - "listPrice": 6.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6090, - "listPrice": 6.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6091, - "listPrice": 6.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6092, - "listPrice": 6.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6093, - "listPrice": 5.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6094, - "listPrice": 5.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6095, - "listPrice": 5.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6096, - "listPrice": 5.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6097, - "listPrice": 5.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6098, - "listPrice": 6.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6099, - "listPrice": 6.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6100, - "listPrice": 6.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6101, - "listPrice": 6.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6102, - "listPrice": 6.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6103, - "listPrice": 6.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6104, - "listPrice": 6.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6105, - "listPrice": 5.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6106, - "listPrice": 5.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6107, - "listPrice": 6.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6108, - "listPrice": 6.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6109, - "listPrice": 6.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6110, - "listPrice": 6.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6111, - "listPrice": 6.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6112, - "listPrice": 6.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6113, - "listPrice": 4.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6114, - "listPrice": 5.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6115, - "listPrice": 5.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6116, - "listPrice": 5.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6117, - "listPrice": 5.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6118, - "listPrice": 5.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6119, - "listPrice": 5.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6120, - "listPrice": 5.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6121, - "listPrice": 5.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6122, - "listPrice": 5.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6123, - "listPrice": 5.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6124, - "listPrice": 6.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6125, - "listPrice": 6.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6126, - "listPrice": 6.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6127, - "listPrice": 6.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6128, - "listPrice": 6.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6129, - "listPrice": 6.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6130, - "listPrice": 6.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6131, - "listPrice": 4.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6132, - "listPrice": 6.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6133, - "listPrice": 5.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6134, - "listPrice": 5.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6135, - "listPrice": 6.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6136, - "listPrice": 6.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6137, - "listPrice": 6.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6138, - "listPrice": 6.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6139, - "listPrice": 6.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6140, - "listPrice": 6.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6141, - "listPrice": 5.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6142, - "listPrice": 5.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6143, - "listPrice": 5.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6144, - "listPrice": 5.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6145, - "listPrice": 6.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6146, - "listPrice": 6.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6147, - "listPrice": 6.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6148, - "listPrice": 6.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6149, - "listPrice": 6.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6150, - "listPrice": 5.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6151, - "listPrice": 5.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6152, - "listPrice": 5.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6153, - "listPrice": 5.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6154, - "listPrice": 5.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6155, - "listPrice": 5.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6156, - "listPrice": 6.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6157, - "listPrice": 6.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6158, - "listPrice": 6.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6159, - "listPrice": 6.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6160, - "listPrice": 6.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6161, - "listPrice": 6.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6162, - "listPrice": 5.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6163, - "listPrice": 5.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6164, - "listPrice": 5.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6165, - "listPrice": 5.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6166, - "listPrice": 5.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6167, - "listPrice": 4.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6168, - "listPrice": 6.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6169, - "listPrice": 6.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6170, - "listPrice": 6.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6171, - "listPrice": 6.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6172, - "listPrice": 5.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6173, - "listPrice": 5.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6174, - "listPrice": 5.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6175, - "listPrice": 5.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6176, - "listPrice": 5.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6177, - "listPrice": 5.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6178, - "listPrice": 5.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6179, - "listPrice": 6.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6180, - "listPrice": 6.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6181, - "listPrice": 6.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6182, - "listPrice": 6.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6183, - "listPrice": 6.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6184, - "listPrice": 6.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6185, - "listPrice": 6.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6186, - "listPrice": 6.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6187, - "listPrice": 5.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6188, - "listPrice": 5.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6195, - "listPrice": 5.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6190, - "listPrice": 5.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6191, - "listPrice": 5.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6192, - "listPrice": 5.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6193, - "listPrice": 5.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6194, - "listPrice": 5.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6196, - "listPrice": 6.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6197, - "listPrice": 6.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6198, - "listPrice": 6.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6199, - "listPrice": 6.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6200, - "listPrice": 6.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6201, - "listPrice": 6.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6202, - "listPrice": 6.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6203, - "listPrice": 5.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6204, - "listPrice": 5.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6205, - "listPrice": 5.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6206, - "listPrice": 5.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6207, - "listPrice": 5.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6208, - "listPrice": 5.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6209, - "listPrice": 5.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6210, - "listPrice": 5.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6211, - "listPrice": 5.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6212, - "listPrice": 5.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6213, - "listPrice": 4.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6214, - "listPrice": 6.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6215, - "listPrice": 6.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6216, - "listPrice": 6.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6217, - "listPrice": 6.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6218, - "listPrice": 6.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6219, - "listPrice": 6.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6220, - "listPrice": 6.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6221, - "listPrice": 6.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6222, - "listPrice": 6.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6223, - "listPrice": 6.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6224, - "listPrice": 6.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6225, - "listPrice": 5.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6226, - "listPrice": 5.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6227, - "listPrice": 5.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6228, - "listPrice": 5.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6229, - "listPrice": 5.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6230, - "listPrice": 5.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6231, - "listPrice": 5.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6232, - "listPrice": 5.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6233, - "listPrice": 5.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6234, - "listPrice": 2.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6235, - "listPrice": 5.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6236, - "listPrice": 5.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6237, - "listPrice": 1.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6238, - "listPrice": 1.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6239, - "listPrice": 1.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6240, - "listPrice": 1.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6241, - "listPrice": 1.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6242, - "listPrice": 1.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6250, - "listPrice": 6.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6251, - "listPrice": 6.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6252, - "listPrice": 6.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6253, - "listPrice": 6.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6254, - "listPrice": 6.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6255, - "listPrice": 6.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6256, - "listPrice": 6.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6257, - "listPrice": 5.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6258, - "listPrice": 5.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6259, - "listPrice": 5.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6260, - "listPrice": 5.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6261, - "listPrice": 1.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6262, - "listPrice": 1.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6263, - "listPrice": 1.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6264, - "listPrice": 1.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6265, - "listPrice": 6.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6266, - "listPrice": 6.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6267, - "listPrice": 6.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6268, - "listPrice": 6.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6269, - "listPrice": 6.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6270, - "listPrice": 6.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6271, - "listPrice": 6.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6272, - "listPrice": 5.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6273, - "listPrice": 5.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6274, - "listPrice": 5.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6275, - "listPrice": 5.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6276, - "listPrice": 5.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6277, - "listPrice": 5.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6278, - "listPrice": 5.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6279, - "listPrice": 1.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6280, - "listPrice": 1.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6281, - "listPrice": 1.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6282, - "listPrice": 6.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6283, - "listPrice": 6.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6284, - "listPrice": 6.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6285, - "listPrice": 6.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6286, - "listPrice": 6.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6287, - "listPrice": 6.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6288, - "listPrice": 6.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6289, - "listPrice": 6.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6290, - "listPrice": 6.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6291, - "listPrice": 6.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6292, - "listPrice": 5.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6293, - "listPrice": 5.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6294, - "listPrice": 5.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6295, - "listPrice": 5.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6296, - "listPrice": 5.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6297, - "listPrice": 5.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6298, - "listPrice": 5.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6299, - "listPrice": 5.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6300, - "listPrice": 1.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6301, - "listPrice": 1.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6302, - "listPrice": 1.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6303, - "listPrice": 1.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6304, - "listPrice": 2.49, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6305, - "listPrice": 2.49, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6306, - "listPrice": 2.49, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6307, - "listPrice": 6.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6308, - "listPrice": 6.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6309, - "listPrice": 6.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6310, - "listPrice": 6.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6311, - "listPrice": 6.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6312, - "listPrice": 6.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6313, - "listPrice": 5.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6314, - "listPrice": 5.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6315, - "listPrice": 5.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6316, - "listPrice": 5.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6317, - "listPrice": 5.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6318, - "listPrice": 5.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6319, - "listPrice": 5.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6320, - "listPrice": 5.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6321, - "listPrice": 5.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6322, - "listPrice": 1.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6323, - "listPrice": 2.49, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6324, - "listPrice": 2.49, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6325, - "listPrice": 6.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6326, - "listPrice": 6.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6327, - "listPrice": 6.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6328, - "listPrice": 6.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6329, - "listPrice": 6.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6330, - "listPrice": 6.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6331, - "listPrice": 5.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6332, - "listPrice": 2.49, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6333, - "listPrice": 5.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6334, - "listPrice": 5.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6335, - "listPrice": 5.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6336, - "listPrice": 1.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6337, - "listPrice": 5.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6338, - "listPrice": 5.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6339, - "listPrice": 5.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6340, - "listPrice": 4.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6341, - "listPrice": 6.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6342, - "listPrice": 6.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6343, - "listPrice": 6.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6344, - "listPrice": 6.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6345, - "listPrice": 6.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6346, - "listPrice": 6.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6347, - "listPrice": 5.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6348, - "listPrice": 5.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6349, - "listPrice": 1.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6350, - "listPrice": 5.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6351, - "listPrice": 5.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6352, - "listPrice": 5.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6353, - "listPrice": 4.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6354, - "listPrice": 6.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6355, - "listPrice": 6.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6356, - "listPrice": 6.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6357, - "listPrice": 6.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6358, - "listPrice": 6.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6359, - "listPrice": 6.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6360, - "listPrice": 6.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6361, - "listPrice": 5.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6362, - "listPrice": 5.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6363, - "listPrice": 5.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6364, - "listPrice": 5.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6365, - "listPrice": 2.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6366, - "listPrice": 2.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6367, - "listPrice": 2.49, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6368, - "listPrice": 2.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6369, - "listPrice": 6.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6370, - "listPrice": 6.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6371, - "listPrice": 6.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6372, - "listPrice": 6.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6373, - "listPrice": 6.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6374, - "listPrice": 6.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6375, - "listPrice": 5.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6376, - "listPrice": 5.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6377, - "listPrice": 5.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6378, - "listPrice": 5.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6379, - "listPrice": 5.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6380, - "listPrice": 5.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6381, - "listPrice": 2.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6382, - "listPrice": 2.49, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6383, - "listPrice": 6.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6384, - "listPrice": 6.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6385, - "listPrice": 6.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6386, - "listPrice": 6.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6387, - "listPrice": 2.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6388, - "listPrice": 5.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6389, - "listPrice": 5.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6390, - "listPrice": 5.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6391, - "listPrice": 5.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6392, - "listPrice": 5.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6393, - "listPrice": 6.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6394, - "listPrice": 6.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6395, - "listPrice": 6.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6396, - "listPrice": 6.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6397, - "listPrice": 6.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6398, - "listPrice": 2.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6399, - "listPrice": 1.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6400, - "listPrice": 1.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6401, - "listPrice": 5.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6402, - "listPrice": 5.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6403, - "listPrice": 4.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6404, - "listPrice": 6.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6405, - "listPrice": 6.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6406, - "listPrice": 6.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6407, - "listPrice": 5.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6408, - "listPrice": 5.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6409, - "listPrice": 2.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6410, - "listPrice": 2.49, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6411, - "listPrice": 1.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6412, - "listPrice": 5.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6413, - "listPrice": 5.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6414, - "listPrice": 6.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6415, - "listPrice": 6.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6416, - "listPrice": 6.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6417, - "listPrice": 6.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6418, - "listPrice": 2.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6419, - "listPrice": 2.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6420, - "listPrice": 2.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6421, - "listPrice": 2.49, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6422, - "listPrice": 5.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6423, - "listPrice": 5.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6424, - "listPrice": 4.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6425, - "listPrice": 6.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6426, - "listPrice": 6.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6427, - "listPrice": 5.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6428, - "listPrice": 5.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6429, - "listPrice": 5.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6430, - "listPrice": 1.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6431, - "listPrice": 6.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6432, - "listPrice": 2.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6433, - "listPrice": 2.49, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6434, - "listPrice": 2.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6435, - "listPrice": 2.49, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6436, - "listPrice": 2.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6437, - "listPrice": 4.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6438, - "listPrice": 5.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6439, - "listPrice": 6.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6440, - "listPrice": 6.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6441, - "listPrice": 5.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6442, - "listPrice": 5.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6443, - "listPrice": 5.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6444, - "listPrice": 4.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6445, - "listPrice": 6.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6446, - "listPrice": 6.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6447, - "listPrice": 6.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6448, - "listPrice": 5.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6449, - "listPrice": 6.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6450, - "listPrice": 5.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6451, - "listPrice": 2.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6452, - "listPrice": 2.49, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6453, - "listPrice": 1.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6454, - "listPrice": 1.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6455, - "listPrice": 6.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6456, - "listPrice": 5.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6457, - "listPrice": 5.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6458, - "listPrice": 5.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6459, - "listPrice": 6.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6460, - "listPrice": 5.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6461, - "listPrice": 5.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6462, - "listPrice": 4.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6463, - "listPrice": 2.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6464, - "listPrice": 1.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6465, - "listPrice": 1.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6466, - "listPrice": 1.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6467, - "listPrice": 1.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 6468, - "listPrice": 1.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 7000, - "listPrice": 9.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 7001, - "listPrice": 6.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 7002, - "listPrice": 14.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 7003, - "listPrice": 39.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 7004, - "listPrice": 59.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 7005, - "listPrice": 119.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 7008, - "listPrice": 9.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 9000, - "listPrice": 149.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 9001, - "listPrice": 99.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 9002, - "listPrice": 49.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 9003, - "listPrice": 19.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 9004, - "listPrice": 9.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 9005, - "listPrice": 4.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 10000, - "listPrice": 19.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 10003, - "listPrice": 24.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 10019, - "listPrice": 29.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 10020, - "listPrice": 9.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 10024, - "listPrice": 49.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 10025, - "listPrice": 79.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 10026, - "listPrice": 139.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 10027, - "listPrice": 49.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 10028, - "listPrice": 49.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 10029, - "listPrice": 30, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 10030, - "listPrice": 60, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 10031, - "listPrice": 90, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 10032, - "listPrice": 90, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 10033, - "listPrice": 40.01, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 10034, - "listPrice": 10.01, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 10035, - "listPrice": 19.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 10036, - "listPrice": 39.99, - "currencyCode": "USD", - "owned": false, - }, - { - "productId": 10037, - "listPrice": 54.99, - "currencyCode": "USD", - "owned": false, - }, - ] + "Prices": [ + { + "productId": 17, + "listPrice": 4.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 18, + "listPrice": 9.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 160, + "listPrice": 19.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 257, + "listPrice": 199.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 258, + "listPrice": 99.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 259, + "listPrice": 49.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 785, + "listPrice": 19.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 786, + "listPrice": 39.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 787, + "listPrice": 79.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 861, + "listPrice": 29.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 979, + "listPrice": 4.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 2000, + "listPrice": 49.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 2001, + "listPrice": 79.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 2004, + "listPrice": 9.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 2005, + "listPrice": 59.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 2006, + "listPrice": 79.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 2007, + "listPrice": 59.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 2008, + "listPrice": 77.77, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 2009, + "listPrice": 9.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 2010, + "listPrice": 59.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 2011, + "listPrice": 79.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 2012, + "listPrice": 59.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 2013, + "listPrice": 77.77, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 2014, + "listPrice": 9.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 2015, + "listPrice": 59.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 2016, + "listPrice": 79.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 2017, + "listPrice": 59.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 2018, + "listPrice": 77.77, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 2019, + "listPrice": 9.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 2020, + "listPrice": 59.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 2021, + "listPrice": 79.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 2022, + "listPrice": 59.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 2023, + "listPrice": 77.77, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 2025, + "listPrice": 149.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 2026, + "listPrice": 99.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 2027, + "listPrice": 49.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 2028, + "listPrice": 149.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 2029, + "listPrice": 9.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 2030, + "listPrice": 59.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 2031, + "listPrice": 79.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 2032, + "listPrice": 59.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 2033, + "listPrice": 77.77, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 2035, + "listPrice": 9.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 2037, + "listPrice": 59.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 2038, + "listPrice": 79.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 2039, + "listPrice": 59.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 2040, + "listPrice": 77.77, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 2041, + "listPrice": 9.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 2042, + "listPrice": 59.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 2043, + "listPrice": 59.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 2044, + "listPrice": 79.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 2045, + "listPrice": 59.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 2046, + "listPrice": 77.77, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 2047, + "listPrice": 9.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 2049, + "listPrice": 59.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 2050, + "listPrice": 79.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 2051, + "listPrice": 59.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 2052, + "listPrice": 77.77, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 2054, + "listPrice": 59.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 2055, + "listPrice": 9.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 2058, + "listPrice": 59.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 2059, + "listPrice": 79.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 2060, + "listPrice": 59.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 2061, + "listPrice": 77.77, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 2062, + "listPrice": 24.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 2066, + "listPrice": 9.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 2071, + "listPrice": 9.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 2072, + "listPrice": 19.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 2075, + "listPrice": 9.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 2081, + "listPrice": 9.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 2085, + "listPrice": 24.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 2089, + "listPrice": 9.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 2092, + "listPrice": 9.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 2095, + "listPrice": 9.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 2098, + "listPrice": 9.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 2100, + "listPrice": 9.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 2102, + "listPrice": 15.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 2105, + "listPrice": 19.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 3000, + "listPrice": 79.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 3001, + "listPrice": 59.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 3002, + "listPrice": 79.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 3003, + "listPrice": 59.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 3004, + "listPrice": 79.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 3005, + "listPrice": 59.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 3006, + "listPrice": 9.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 3007, + "listPrice": 79.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 3008, + "listPrice": 59.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 3009, + "listPrice": 9.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 3010, + "listPrice": 149.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 3011, + "listPrice": 99.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 3012, + "listPrice": 49.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 3013, + "listPrice": 79.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 3014, + "listPrice": 59.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 3015, + "listPrice": 9.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 3016, + "listPrice": 79.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 3017, + "listPrice": 59.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 3018, + "listPrice": 59.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 3019, + "listPrice": 9.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 3020, + "listPrice": 79.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 3021, + "listPrice": 59.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 3022, + "listPrice": 9.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 3023, + "listPrice": 79.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 3024, + "listPrice": 59.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 3025, + "listPrice": 59.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 3026, + "listPrice": 9.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 3027, + "listPrice": 79.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 3028, + "listPrice": 59.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 3029, + "listPrice": 9.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 3033, + "listPrice": 9.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 3038, + "listPrice": 9.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 3041, + "listPrice": 24.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 3044, + "listPrice": 19.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 3047, + "listPrice": 9.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 3050, + "listPrice": 9.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 3053, + "listPrice": 4.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 3054, + "listPrice": 9.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 3057, + "listPrice": 9.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 3060, + "listPrice": 9.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 3063, + "listPrice": 19.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 4000, + "listPrice": 59.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 4001, + "listPrice": 77.77, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 4015, + "listPrice": 59.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 4016, + "listPrice": 77.77, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 4020, + "listPrice": 59.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 4021, + "listPrice": 77.77, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 4022, + "listPrice": 59.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 4023, + "listPrice": 77.77, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 4024, + "listPrice": 59.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 4025, + "listPrice": 77.77, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 4100, + "listPrice": 19.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 4101, + "listPrice": 39.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 4102, + "listPrice": 59.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 4103, + "listPrice": 99.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 4105, + "listPrice": 19.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 4106, + "listPrice": 39.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 4107, + "listPrice": 59.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 4108, + "listPrice": 99.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 4109, + "listPrice": 19.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 4110, + "listPrice": 39.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 4111, + "listPrice": 59.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 4112, + "listPrice": 99.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 4113, + "listPrice": 19.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 4114, + "listPrice": 39.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 4115, + "listPrice": 59.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 4116, + "listPrice": 99.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 4117, + "listPrice": 19.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 4118, + "listPrice": 39.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 4119, + "listPrice": 59.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 4120, + "listPrice": 99.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 4121, + "listPrice": 19.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 4122, + "listPrice": 39.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 4123, + "listPrice": 59.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 4124, + "listPrice": 99.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6000, + "listPrice": 4.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6002, + "listPrice": 4.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6003, + "listPrice": 2.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6004, + "listPrice": 5.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6005, + "listPrice": 4.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6006, + "listPrice": 4.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6007, + "listPrice": 4.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6008, + "listPrice": 5.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6009, + "listPrice": 5.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6010, + "listPrice": 5.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6011, + "listPrice": 5.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6012, + "listPrice": 5.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6013, + "listPrice": 5.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6014, + "listPrice": 5.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6015, + "listPrice": 5.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6016, + "listPrice": 5.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6017, + "listPrice": 5.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6018, + "listPrice": 5.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6019, + "listPrice": 5.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6020, + "listPrice": 5.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6021, + "listPrice": 6.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6022, + "listPrice": 6.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6024, + "listPrice": 4.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6025, + "listPrice": 4.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6026, + "listPrice": 4.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6027, + "listPrice": 4.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6028, + "listPrice": 5.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6029, + "listPrice": 5.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6030, + "listPrice": 5.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6031, + "listPrice": 5.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6032, + "listPrice": 5.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6033, + "listPrice": 5.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6034, + "listPrice": 5.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6035, + "listPrice": 5.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6036, + "listPrice": 5.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6038, + "listPrice": 4.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6039, + "listPrice": 5.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6040, + "listPrice": 6.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6041, + "listPrice": 5.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6042, + "listPrice": 4.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6043, + "listPrice": 5.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6044, + "listPrice": 4.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6045, + "listPrice": 4.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6046, + "listPrice": 5.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6047, + "listPrice": 4.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6048, + "listPrice": 6.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6049, + "listPrice": 4.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6050, + "listPrice": 5.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6051, + "listPrice": 4.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6052, + "listPrice": 5.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6053, + "listPrice": 5.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6054, + "listPrice": 5.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6055, + "listPrice": 5.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6056, + "listPrice": 5.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6057, + "listPrice": 5.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6058, + "listPrice": 5.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6059, + "listPrice": 4.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6060, + "listPrice": 4.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6061, + "listPrice": 4.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6062, + "listPrice": 4.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6063, + "listPrice": 4.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6064, + "listPrice": 6.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6065, + "listPrice": 6.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6066, + "listPrice": 6.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6067, + "listPrice": 6.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6068, + "listPrice": 6.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6069, + "listPrice": 5.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6070, + "listPrice": 5.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6071, + "listPrice": 5.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6072, + "listPrice": 5.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6073, + "listPrice": 5.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6074, + "listPrice": 5.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6075, + "listPrice": 5.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6076, + "listPrice": 5.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6077, + "listPrice": 5.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6078, + "listPrice": 5.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6079, + "listPrice": 5.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6080, + "listPrice": 5.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6081, + "listPrice": 5.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6082, + "listPrice": 5.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6083, + "listPrice": 5.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6084, + "listPrice": 4.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6085, + "listPrice": 5.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6086, + "listPrice": 5.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6087, + "listPrice": 5.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6088, + "listPrice": 4.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6089, + "listPrice": 6.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6090, + "listPrice": 6.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6091, + "listPrice": 6.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6092, + "listPrice": 6.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6093, + "listPrice": 5.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6094, + "listPrice": 5.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6095, + "listPrice": 5.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6096, + "listPrice": 5.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6097, + "listPrice": 5.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6098, + "listPrice": 6.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6099, + "listPrice": 6.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6100, + "listPrice": 6.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6101, + "listPrice": 6.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6102, + "listPrice": 6.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6103, + "listPrice": 6.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6104, + "listPrice": 6.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6105, + "listPrice": 5.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6106, + "listPrice": 5.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6107, + "listPrice": 6.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6108, + "listPrice": 6.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6109, + "listPrice": 6.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6110, + "listPrice": 6.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6111, + "listPrice": 6.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6112, + "listPrice": 6.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6113, + "listPrice": 4.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6114, + "listPrice": 5.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6115, + "listPrice": 5.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6116, + "listPrice": 5.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6117, + "listPrice": 5.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6118, + "listPrice": 5.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6119, + "listPrice": 5.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6120, + "listPrice": 5.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6121, + "listPrice": 5.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6122, + "listPrice": 5.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6123, + "listPrice": 5.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6124, + "listPrice": 6.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6125, + "listPrice": 6.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6126, + "listPrice": 6.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6127, + "listPrice": 6.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6128, + "listPrice": 6.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6129, + "listPrice": 6.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6130, + "listPrice": 6.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6131, + "listPrice": 4.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6132, + "listPrice": 6.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6133, + "listPrice": 5.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6134, + "listPrice": 5.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6135, + "listPrice": 6.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6136, + "listPrice": 6.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6137, + "listPrice": 6.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6138, + "listPrice": 6.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6139, + "listPrice": 6.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6140, + "listPrice": 6.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6141, + "listPrice": 5.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6142, + "listPrice": 5.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6143, + "listPrice": 5.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6144, + "listPrice": 5.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6145, + "listPrice": 6.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6146, + "listPrice": 6.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6147, + "listPrice": 6.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6148, + "listPrice": 6.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6149, + "listPrice": 6.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6150, + "listPrice": 5.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6151, + "listPrice": 5.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6152, + "listPrice": 5.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6153, + "listPrice": 5.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6154, + "listPrice": 5.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6155, + "listPrice": 5.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6156, + "listPrice": 6.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6157, + "listPrice": 6.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6158, + "listPrice": 6.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6159, + "listPrice": 6.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6160, + "listPrice": 6.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6161, + "listPrice": 6.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6162, + "listPrice": 5.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6163, + "listPrice": 5.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6164, + "listPrice": 5.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6165, + "listPrice": 5.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6166, + "listPrice": 5.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6167, + "listPrice": 4.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6168, + "listPrice": 6.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6169, + "listPrice": 6.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6170, + "listPrice": 6.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6171, + "listPrice": 6.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6172, + "listPrice": 5.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6173, + "listPrice": 5.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6174, + "listPrice": 5.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6175, + "listPrice": 5.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6176, + "listPrice": 5.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6177, + "listPrice": 5.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6178, + "listPrice": 5.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6179, + "listPrice": 6.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6180, + "listPrice": 6.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6181, + "listPrice": 6.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6182, + "listPrice": 6.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6183, + "listPrice": 6.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6184, + "listPrice": 6.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6185, + "listPrice": 6.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6186, + "listPrice": 6.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6187, + "listPrice": 5.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6188, + "listPrice": 5.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6195, + "listPrice": 5.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6190, + "listPrice": 5.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6191, + "listPrice": 5.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6192, + "listPrice": 5.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6193, + "listPrice": 5.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6194, + "listPrice": 5.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6196, + "listPrice": 6.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6197, + "listPrice": 6.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6198, + "listPrice": 6.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6199, + "listPrice": 6.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6200, + "listPrice": 6.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6201, + "listPrice": 6.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6202, + "listPrice": 6.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6203, + "listPrice": 5.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6204, + "listPrice": 5.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6205, + "listPrice": 5.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6206, + "listPrice": 5.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6207, + "listPrice": 5.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6208, + "listPrice": 5.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6209, + "listPrice": 5.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6210, + "listPrice": 5.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6211, + "listPrice": 5.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6212, + "listPrice": 5.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6213, + "listPrice": 4.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6214, + "listPrice": 6.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6215, + "listPrice": 6.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6216, + "listPrice": 6.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6217, + "listPrice": 6.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6218, + "listPrice": 6.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6219, + "listPrice": 6.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6220, + "listPrice": 6.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6221, + "listPrice": 6.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6222, + "listPrice": 6.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6223, + "listPrice": 6.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6224, + "listPrice": 6.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6225, + "listPrice": 5.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6226, + "listPrice": 5.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6227, + "listPrice": 5.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6228, + "listPrice": 5.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6229, + "listPrice": 5.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6230, + "listPrice": 5.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6231, + "listPrice": 5.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6232, + "listPrice": 5.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6233, + "listPrice": 5.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6234, + "listPrice": 2.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6235, + "listPrice": 5.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6236, + "listPrice": 5.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6237, + "listPrice": 1.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6238, + "listPrice": 1.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6239, + "listPrice": 1.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6240, + "listPrice": 1.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6241, + "listPrice": 1.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6242, + "listPrice": 1.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6250, + "listPrice": 6.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6251, + "listPrice": 6.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6252, + "listPrice": 6.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6253, + "listPrice": 6.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6254, + "listPrice": 6.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6255, + "listPrice": 6.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6256, + "listPrice": 6.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6257, + "listPrice": 5.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6258, + "listPrice": 5.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6259, + "listPrice": 5.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6260, + "listPrice": 5.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6261, + "listPrice": 1.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6262, + "listPrice": 1.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6263, + "listPrice": 1.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6264, + "listPrice": 1.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6265, + "listPrice": 6.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6266, + "listPrice": 6.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6267, + "listPrice": 6.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6268, + "listPrice": 6.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6269, + "listPrice": 6.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6270, + "listPrice": 6.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6271, + "listPrice": 6.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6272, + "listPrice": 5.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6273, + "listPrice": 5.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6274, + "listPrice": 5.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6275, + "listPrice": 5.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6276, + "listPrice": 5.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6277, + "listPrice": 5.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6278, + "listPrice": 5.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6279, + "listPrice": 1.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6280, + "listPrice": 1.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6281, + "listPrice": 1.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6282, + "listPrice": 6.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6283, + "listPrice": 6.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6284, + "listPrice": 6.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6285, + "listPrice": 6.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6286, + "listPrice": 6.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6287, + "listPrice": 6.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6288, + "listPrice": 6.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6289, + "listPrice": 6.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6290, + "listPrice": 6.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6291, + "listPrice": 6.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6292, + "listPrice": 5.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6293, + "listPrice": 5.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6294, + "listPrice": 5.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6295, + "listPrice": 5.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6296, + "listPrice": 5.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6297, + "listPrice": 5.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6298, + "listPrice": 5.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6299, + "listPrice": 5.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6300, + "listPrice": 1.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6301, + "listPrice": 1.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6302, + "listPrice": 1.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6303, + "listPrice": 1.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6304, + "listPrice": 2.49, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6305, + "listPrice": 2.49, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6306, + "listPrice": 2.49, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6307, + "listPrice": 6.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6308, + "listPrice": 6.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6309, + "listPrice": 6.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6310, + "listPrice": 6.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6311, + "listPrice": 6.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6312, + "listPrice": 6.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6313, + "listPrice": 5.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6314, + "listPrice": 5.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6315, + "listPrice": 5.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6316, + "listPrice": 5.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6317, + "listPrice": 5.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6318, + "listPrice": 5.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6319, + "listPrice": 5.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6320, + "listPrice": 5.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6321, + "listPrice": 5.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6322, + "listPrice": 1.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6323, + "listPrice": 2.49, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6324, + "listPrice": 2.49, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6325, + "listPrice": 6.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6326, + "listPrice": 6.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6327, + "listPrice": 6.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6328, + "listPrice": 6.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6329, + "listPrice": 6.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6330, + "listPrice": 6.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6331, + "listPrice": 5.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6332, + "listPrice": 2.49, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6333, + "listPrice": 5.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6334, + "listPrice": 5.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6335, + "listPrice": 5.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6336, + "listPrice": 1.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6337, + "listPrice": 5.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6338, + "listPrice": 5.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6339, + "listPrice": 5.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6340, + "listPrice": 4.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6341, + "listPrice": 6.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6342, + "listPrice": 6.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6343, + "listPrice": 6.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6344, + "listPrice": 6.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6345, + "listPrice": 6.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6346, + "listPrice": 6.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6347, + "listPrice": 5.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6348, + "listPrice": 5.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6349, + "listPrice": 1.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6350, + "listPrice": 5.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6351, + "listPrice": 5.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6352, + "listPrice": 5.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6353, + "listPrice": 4.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6354, + "listPrice": 6.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6355, + "listPrice": 6.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6356, + "listPrice": 6.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6357, + "listPrice": 6.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6358, + "listPrice": 6.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6359, + "listPrice": 6.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6360, + "listPrice": 6.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6361, + "listPrice": 5.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6362, + "listPrice": 5.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6363, + "listPrice": 5.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6364, + "listPrice": 5.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6365, + "listPrice": 2.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6366, + "listPrice": 2.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6367, + "listPrice": 2.49, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6368, + "listPrice": 2.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6369, + "listPrice": 6.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6370, + "listPrice": 6.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6371, + "listPrice": 6.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6372, + "listPrice": 6.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6373, + "listPrice": 6.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6374, + "listPrice": 6.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6375, + "listPrice": 5.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6376, + "listPrice": 5.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6377, + "listPrice": 5.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6378, + "listPrice": 5.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6379, + "listPrice": 5.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6380, + "listPrice": 5.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6381, + "listPrice": 2.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6382, + "listPrice": 2.49, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6383, + "listPrice": 6.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6384, + "listPrice": 6.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6385, + "listPrice": 6.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6386, + "listPrice": 6.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6387, + "listPrice": 2.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6388, + "listPrice": 5.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6389, + "listPrice": 5.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6390, + "listPrice": 5.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6391, + "listPrice": 5.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6392, + "listPrice": 5.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6393, + "listPrice": 6.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6394, + "listPrice": 6.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6395, + "listPrice": 6.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6396, + "listPrice": 6.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6397, + "listPrice": 6.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6398, + "listPrice": 2.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6399, + "listPrice": 1.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6400, + "listPrice": 1.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6401, + "listPrice": 5.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6402, + "listPrice": 5.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6403, + "listPrice": 4.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6404, + "listPrice": 6.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6405, + "listPrice": 6.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6406, + "listPrice": 6.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6407, + "listPrice": 5.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6408, + "listPrice": 5.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6409, + "listPrice": 2.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6410, + "listPrice": 2.49, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6411, + "listPrice": 1.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6412, + "listPrice": 5.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6413, + "listPrice": 5.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6414, + "listPrice": 6.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6415, + "listPrice": 6.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6416, + "listPrice": 6.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6417, + "listPrice": 6.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6418, + "listPrice": 2.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6419, + "listPrice": 2.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6420, + "listPrice": 2.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6421, + "listPrice": 2.49, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6422, + "listPrice": 5.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6423, + "listPrice": 5.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6424, + "listPrice": 4.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6425, + "listPrice": 6.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6426, + "listPrice": 6.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6427, + "listPrice": 5.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6428, + "listPrice": 5.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6429, + "listPrice": 5.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6430, + "listPrice": 1.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6431, + "listPrice": 6.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6432, + "listPrice": 2.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6433, + "listPrice": 2.49, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6434, + "listPrice": 2.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6435, + "listPrice": 2.49, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6436, + "listPrice": 2.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6437, + "listPrice": 4.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6438, + "listPrice": 5.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6439, + "listPrice": 6.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6440, + "listPrice": 6.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6441, + "listPrice": 5.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6442, + "listPrice": 5.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6443, + "listPrice": 5.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6444, + "listPrice": 4.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6445, + "listPrice": 6.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6446, + "listPrice": 6.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6447, + "listPrice": 6.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6448, + "listPrice": 5.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6449, + "listPrice": 6.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6450, + "listPrice": 5.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6451, + "listPrice": 2.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6452, + "listPrice": 2.49, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6453, + "listPrice": 1.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6454, + "listPrice": 1.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6455, + "listPrice": 6.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6456, + "listPrice": 5.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6457, + "listPrice": 5.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6458, + "listPrice": 5.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6459, + "listPrice": 6.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6460, + "listPrice": 5.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6461, + "listPrice": 5.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6462, + "listPrice": 4.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6463, + "listPrice": 2.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6464, + "listPrice": 1.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6465, + "listPrice": 1.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6466, + "listPrice": 1.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6467, + "listPrice": 1.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 6468, + "listPrice": 1.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 7000, + "listPrice": 9.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 7001, + "listPrice": 6.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 7002, + "listPrice": 14.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 7003, + "listPrice": 39.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 7004, + "listPrice": 59.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 7005, + "listPrice": 119.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 7008, + "listPrice": 9.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 9000, + "listPrice": 149.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 9001, + "listPrice": 99.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 9002, + "listPrice": 49.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 9003, + "listPrice": 19.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 9004, + "listPrice": 9.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 9005, + "listPrice": 4.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 10000, + "listPrice": 19.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 10003, + "listPrice": 24.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 10019, + "listPrice": 29.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 10020, + "listPrice": 9.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 10024, + "listPrice": 49.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 10025, + "listPrice": 79.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 10026, + "listPrice": 139.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 10027, + "listPrice": 49.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 10028, + "listPrice": 49.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 10029, + "listPrice": 30, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 10030, + "listPrice": 60, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 10031, + "listPrice": 90, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 10032, + "listPrice": 90, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 10033, + "listPrice": 40.01, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 10034, + "listPrice": 10.01, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 10035, + "listPrice": 19.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 10036, + "listPrice": 39.99, + "currencyCode": "USD", + "owned": false + }, + { + "productId": 10037, + "listPrice": 54.99, + "currencyCode": "USD", + "owned": false + } + ] } -- 2.47.2 From 05d16f09b6585dff43d4e8e8d6ad4989bef691ba Mon Sep 17 00:00:00 2001 From: Sainan Date: Sun, 5 Jan 2025 05:17:40 +0100 Subject: [PATCH 06/18] feat: handle helminth offerings update request (#714) --- .../api/infestedFoundryController.ts | 23 ++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/src/controllers/api/infestedFoundryController.ts b/src/controllers/api/infestedFoundryController.ts index 74ff3f35..c95db049 100644 --- a/src/controllers/api/infestedFoundryController.ts +++ b/src/controllers/api/infestedFoundryController.ts @@ -107,10 +107,21 @@ export const infestedFoundryController: RequestHandler = async (req, res) => { break; } - case "o": // offerings update - // {"OfferingsIndex":540,"SuitTypes":["/Lotus/Powersuits/PaxDuviricus/PaxDuviricusBaseSuit","/Lotus/Powersuits/Nezha/NezhaBaseSuit","/Lotus/Powersuits/Devourer/DevourerBaseSuit"],"Extra":false} - res.status(404).end(); + case "o": { + // offerings update + const request = getJSONfromString(String(req.body)) as IHelminthOfferingsUpdate; + const inventory = await getInventory(accountId); + inventory.InfestedFoundry ??= {}; + inventory.InfestedFoundry.InvigorationIndex = request.OfferingsIndex; + inventory.InfestedFoundry.InvigorationSuitOfferings = request.SuitTypes; + await inventory.save(); + res.json({ + InventoryChanges: { + InfestedFoundry: inventory.toJSON().InfestedFoundry + } + }); break; + } case "a": { // subsume warframe @@ -251,3 +262,9 @@ export const handleSubsumeCompletion = (inventory: TInventoryDatabaseDocument): addRecipes(inventory, recipeChanges); return recipeChanges; }; + +interface IHelminthOfferingsUpdate { + OfferingsIndex: number; + SuitTypes: string[]; + Extra: boolean; +} -- 2.47.2 From 6baad5d0081d5410b785082309e46290731c1047 Mon Sep 17 00:00:00 2001 From: Sainan Date: Sun, 5 Jan 2025 05:17:56 +0100 Subject: [PATCH 07/18] feat: correctly scale standing and focus limits by mastery rank (#711) --- src/controllers/api/inventoryController.ts | 29 +++++++++++----------- 1 file changed, 15 insertions(+), 14 deletions(-) diff --git a/src/controllers/api/inventoryController.ts b/src/controllers/api/inventoryController.ts index 763fd6b6..949cc11f 100644 --- a/src/controllers/api/inventoryController.ts +++ b/src/controllers/api/inventoryController.ts @@ -32,20 +32,21 @@ export const inventoryController: RequestHandler = async (request, response) => account.LastLoginDay = today; await account.save(); - inventory.DailyAffiliation = 16000; - inventory.DailyAffiliationPvp = 16000; - inventory.DailyAffiliationLibrary = 16000; - inventory.DailyAffiliationCetus = 16000; - inventory.DailyAffiliationQuills = 16000; - inventory.DailyAffiliationSolaris = 16000; - inventory.DailyAffiliationVentkids = 16000; - inventory.DailyAffiliationVox = 16000; - inventory.DailyAffiliationEntrati = 16000; - inventory.DailyAffiliationNecraloid = 16000; - inventory.DailyAffiliationZariman = 16000; - inventory.DailyAffiliationKahl = 16000; - inventory.DailyAffiliationCavia = 16000; - inventory.DailyAffiliationHex = 16000; + inventory.DailyAffiliation = 16000 + inventory.PlayerLevel * 500; + inventory.DailyAffiliationPvp = 16000 + inventory.PlayerLevel * 500; + inventory.DailyAffiliationLibrary = 16000 + inventory.PlayerLevel * 500; + inventory.DailyAffiliationCetus = 16000 + inventory.PlayerLevel * 500; + inventory.DailyAffiliationQuills = 16000 + inventory.PlayerLevel * 500; + inventory.DailyAffiliationSolaris = 16000 + inventory.PlayerLevel * 500; + inventory.DailyAffiliationVentkids = 16000 + inventory.PlayerLevel * 500; + inventory.DailyAffiliationVox = 16000 + inventory.PlayerLevel * 500; + inventory.DailyAffiliationEntrati = 16000 + inventory.PlayerLevel * 500; + inventory.DailyAffiliationNecraloid = 16000 + inventory.PlayerLevel * 500; + inventory.DailyAffiliationZariman = 16000 + inventory.PlayerLevel * 500; + inventory.DailyAffiliationKahl = 16000 + inventory.PlayerLevel * 500; + inventory.DailyAffiliationCavia = 16000 + inventory.PlayerLevel * 500; + inventory.DailyAffiliationHex = 16000 + inventory.PlayerLevel * 500; + inventory.DailyFocus = 250000 + inventory.PlayerLevel * 5000; await inventory.save(); } -- 2.47.2 From 506e77db6cab79ba9a33dc428d6bf9bda59cced2 Mon Sep 17 00:00:00 2001 From: Sainan Date: Sun, 5 Jan 2025 06:17:42 +0100 Subject: [PATCH 08/18] feat: invigorations (#715) --- .../api/infestedFoundryController.ts | 40 +++++++++++++++++++ src/models/inventoryModels/inventoryModel.ts | 3 ++ .../inventoryTypes/commonInventoryTypes.ts | 6 ++- 3 files changed, 48 insertions(+), 1 deletion(-) diff --git a/src/controllers/api/infestedFoundryController.ts b/src/controllers/api/infestedFoundryController.ts index c95db049..bcb741cd 100644 --- a/src/controllers/api/infestedFoundryController.ts +++ b/src/controllers/api/infestedFoundryController.ts @@ -7,6 +7,7 @@ import { IConsumedSuit, IInfestedFoundry, IMiscItem, ITypeCount } from "@/src/ty import { ExportMisc, ExportRecipes } from "warframe-public-export-plus"; import { getRecipe } from "@/src/services/itemDataService"; import { TInventoryDatabaseDocument } from "@/src/models/inventoryModels/inventoryModel"; +import { toMongoDate } from "@/src/helpers/inventoryHelpers"; export const infestedFoundryController: RequestHandler = async (req, res) => { const accountId = await getAccountIdForRequest(req); @@ -114,6 +115,9 @@ export const infestedFoundryController: RequestHandler = async (req, res) => { inventory.InfestedFoundry ??= {}; inventory.InfestedFoundry.InvigorationIndex = request.OfferingsIndex; inventory.InfestedFoundry.InvigorationSuitOfferings = request.SuitTypes; + if (request.Extra) { + inventory.InfestedFoundry.InvigorationsApplied = 0; + } await inventory.save(); res.json({ InventoryChanges: { @@ -184,6 +188,34 @@ export const infestedFoundryController: RequestHandler = async (req, res) => { break; } + case "u": { + const request = getJSONfromString(String(req.body)) as IHelminthInvigorationRequest; + const inventory = await getInventory(accountId); + const suit = inventory.Suits.find(x => x._id.toString() == request.SuitId.$oid)!; + const upgradesExpiry = new Date(new Date().getTime() + 7 * 24 * 60 * 60 * 1000); + suit.OffensiveUpgrade = request.OffensiveUpgradeType; + suit.DefensiveUpgrade = request.DefensiveUpgradeType; + suit.UpgradesExpiry = upgradesExpiry; + addInfestedFoundryXP(inventory.InfestedFoundry!, 4800_00); + for (let i = 0; i != request.ResourceTypes.length; ++i) { + inventory.InfestedFoundry!.Resources!.find(x => x.ItemType == request.ResourceTypes[i])!.Count -= + request.ResourceCosts[i]; + } + inventory.InfestedFoundry!.InvigorationsApplied ??= 0; + inventory.InfestedFoundry!.InvigorationsApplied += 1; + await inventory.save(); + res.json({ + SuitId: request.SuitId, + OffensiveUpgrade: request.OffensiveUpgradeType, + DefensiveUpgrade: request.DefensiveUpgradeType, + UpgradesExpiry: toMongoDate(upgradesExpiry), + InventoryChanges: { + InfestedFoundry: inventory.toJSON().InfestedFoundry + } + }); + break; + } + default: throw new Error(`unhandled infestedFoundry mode: ${String(req.query.mode)}`); } @@ -268,3 +300,11 @@ interface IHelminthOfferingsUpdate { SuitTypes: string[]; Extra: boolean; } + +interface IHelminthInvigorationRequest { + SuitId: IOid; + OffensiveUpgradeType: string; + DefensiveUpgradeType: string; + ResourceTypes: string[]; + ResourceCosts: number[]; +} diff --git a/src/models/inventoryModels/inventoryModel.ts b/src/models/inventoryModels/inventoryModel.ts index ec39bb1d..7c8d5b75 100644 --- a/src/models/inventoryModels/inventoryModel.ts +++ b/src/models/inventoryModels/inventoryModel.ts @@ -233,6 +233,9 @@ const EquipmentSchema = new Schema( UnlockLevel: Number, Expiry: Date, SkillTree: String, + OffensiveUpgrade: String, + DefensiveUpgrade: String, + UpgradesExpiry: Date, ArchonCrystalUpgrades: { type: [ArchonCrystalUpgradeSchema], default: undefined } }, { id: false } diff --git a/src/types/inventoryTypes/commonInventoryTypes.ts b/src/types/inventoryTypes/commonInventoryTypes.ts index f7026c0c..ccc5851e 100644 --- a/src/types/inventoryTypes/commonInventoryTypes.ts +++ b/src/types/inventoryTypes/commonInventoryTypes.ts @@ -78,8 +78,9 @@ export interface IEquipmentSelection { hide?: boolean; } -export interface IEquipmentClient extends Omit { +export interface IEquipmentClient extends Omit { ItemId: IOid; + UpgradesExpiry?: IMongoDate; } export enum EquipmentFeatures { @@ -112,6 +113,9 @@ export interface IEquipmentDatabase { UnlockLevel?: number; Expiry?: IMongoDate; SkillTree?: string; + OffensiveUpgrade?: string; + DefensiveUpgrade?: string; + UpgradesExpiry?: Date; ArchonCrystalUpgrades?: IArchonCrystalUpgrade[]; _id: Types.ObjectId; } -- 2.47.2 From 06bc0123baee78b6d339bea8da8c734132b49620 Mon Sep 17 00:00:00 2001 From: Sainan Date: Sun, 5 Jan 2025 07:16:48 +0100 Subject: [PATCH 09/18] feat: all server-side metamorphosis levels (#716) --- .../api/infestedFoundryController.ts | 85 ++++++++++++++++--- src/controllers/api/upgradesController.ts | 15 +++- src/services/inventoryService.ts | 3 +- src/types/purchaseTypes.ts | 8 +- 4 files changed, 95 insertions(+), 16 deletions(-) diff --git a/src/controllers/api/infestedFoundryController.ts b/src/controllers/api/infestedFoundryController.ts index bcb741cd..4fa5f694 100644 --- a/src/controllers/api/infestedFoundryController.ts +++ b/src/controllers/api/infestedFoundryController.ts @@ -71,14 +71,14 @@ export const infestedFoundryController: RequestHandler = async (req, res) => { const snack = ExportMisc.helminthSnacks[contribution.ItemType]; // Note: Currently ignoring loss of apetite - totalPercentagePointsGained += snack.gain / 0.01; + totalPercentagePointsGained += snack.gain * 100; // 30% would be gain=0.3, so percentage points is equal to gain * 100. const resource = inventory.InfestedFoundry.Resources.find(x => x.ItemType == snack.type); if (resource) { resource.Count += Math.trunc(snack.gain * 1000); } else { inventory.InfestedFoundry.Resources.push({ ItemType: snack.type, - Count: Math.trunc(snack.gain * 1000) + Count: Math.trunc(snack.gain * 1000) // 30% would be gain=0.3 or Count=300, so Count=gain*1000. }); } @@ -91,19 +91,21 @@ export const infestedFoundryController: RequestHandler = async (req, res) => { } } - addInfestedFoundryXP(inventory.InfestedFoundry, 666 * totalPercentagePointsGained); + const recipeChanges = addInfestedFoundryXP(inventory.InfestedFoundry, 666 * totalPercentagePointsGained); + addRecipes(inventory, recipeChanges); addMiscItems(inventory, miscItemChanges); await inventory.save(); res.json({ InventoryChanges: { + Recipes: recipeChanges, InfestedFoundry: { XP: inventory.InfestedFoundry.XP, Resources: inventory.InfestedFoundry.Resources, Slots: inventory.InfestedFoundry.Slots - } - }, - MiscItems: miscItemChanges + }, + MiscItems: miscItemChanges + } }); break; } @@ -144,18 +146,21 @@ export const infestedFoundryController: RequestHandler = async (req, res) => { if (suit.Configs && suit.Configs[0] && suit.Configs[0].pricol) { consumedSuit.c = suit.Configs[0].pricol; } - inventory.InfestedFoundry!.Slots!--; + if ((inventory.InfestedFoundry!.XP ?? 0) < 73125_00) { + inventory.InfestedFoundry!.Slots!--; + } inventory.InfestedFoundry!.ConsumedSuits ??= []; inventory.InfestedFoundry!.ConsumedSuits?.push(consumedSuit); inventory.InfestedFoundry!.LastConsumedSuit = suit; inventory.InfestedFoundry!.AbilityOverrideUnlockCooldown = new Date( new Date().getTime() + 24 * 60 * 60 * 1000 ); - addInfestedFoundryXP(inventory.InfestedFoundry!, 1600_00); + const recipeChanges = addInfestedFoundryXP(inventory.InfestedFoundry!, 1600_00); + addRecipes(inventory, recipeChanges); await inventory.save(); - console.log(inventory.toJSON().InfestedFoundry); res.json({ InventoryChanges: { + Recipes: recipeChanges, RemovedIdItems: [ { ItemId: request.SuitId @@ -196,7 +201,8 @@ export const infestedFoundryController: RequestHandler = async (req, res) => { suit.OffensiveUpgrade = request.OffensiveUpgradeType; suit.DefensiveUpgrade = request.DefensiveUpgradeType; suit.UpgradesExpiry = upgradesExpiry; - addInfestedFoundryXP(inventory.InfestedFoundry!, 4800_00); + const recipeChanges = addInfestedFoundryXP(inventory.InfestedFoundry!, 4800_00); + addRecipes(inventory, recipeChanges); for (let i = 0; i != request.ResourceTypes.length; ++i) { inventory.InfestedFoundry!.Resources!.find(x => x.ItemType == request.ResourceTypes[i])!.Count -= request.ResourceCosts[i]; @@ -210,6 +216,7 @@ export const infestedFoundryController: RequestHandler = async (req, res) => { DefensiveUpgrade: request.DefensiveUpgradeType, UpgradesExpiry: toMongoDate(upgradesExpiry), InventoryChanges: { + Recipes: recipeChanges, InfestedFoundry: inventory.toJSON().InfestedFoundry } }); @@ -254,7 +261,8 @@ const colorToShard: Record = { ACC_PURPLE_MYTHIC: "/Lotus/Types/Gameplay/NarmerSorties/ArchonCrystalVioletMythic" }; -const addInfestedFoundryXP = (infestedFoundry: IInfestedFoundry, delta: number): void => { +export const addInfestedFoundryXP = (infestedFoundry: IInfestedFoundry, delta: number): ITypeCount[] => { + const recipeChanges: ITypeCount[] = []; infestedFoundry.XP ??= 0; const prevXP = infestedFoundry.XP; infestedFoundry.XP += delta; @@ -262,14 +270,69 @@ const addInfestedFoundryXP = (infestedFoundry: IInfestedFoundry, delta: number): infestedFoundry.Slots ??= 0; infestedFoundry.Slots += 3; } + if (prevXP < 5625_00 && infestedFoundry.XP >= 5625_00) { + recipeChanges.push({ + ItemType: "/Lotus/Types/Recipes/AbilityOverrides/HelminthShieldsBlueprint", + ItemCount: 1 + }); + } + if (prevXP < 10125_00 && infestedFoundry.XP >= 10125_00) { + recipeChanges.push({ ItemType: "/Lotus/Types/Recipes/AbilityOverrides/HelminthHackBlueprint", ItemCount: 1 }); + } if (prevXP < 15750_00 && infestedFoundry.XP >= 15750_00) { infestedFoundry.Slots ??= 0; infestedFoundry.Slots += 10; } + if (prevXP < 22500_00 && infestedFoundry.XP >= 22500_00) { + recipeChanges.push({ + ItemType: "/Lotus/Types/Recipes/AbilityOverrides/HelminthAmmoEfficiencyBlueprint", + ItemCount: 1 + }); + } + if (prevXP < 30375_00 && infestedFoundry.XP >= 30375_00) { + recipeChanges.push({ ItemType: "/Lotus/Types/Recipes/AbilityOverrides/HelminthStunBlueprint", ItemCount: 1 }); + } if (prevXP < 39375_00 && infestedFoundry.XP >= 39375_00) { infestedFoundry.Slots ??= 0; infestedFoundry.Slots += 20; } + if (prevXP < 60750_00 && infestedFoundry.XP >= 60750_00) { + recipeChanges.push({ ItemType: "/Lotus/Types/Recipes/AbilityOverrides/HelminthStatusBlueprint", ItemCount: 1 }); + } + if (prevXP < 73125_00 && infestedFoundry.XP >= 73125_00) { + infestedFoundry.Slots = 1; + } + if (prevXP < 86625_00 && infestedFoundry.XP >= 86625_00) { + recipeChanges.push({ + ItemType: "/Lotus/Types/Recipes/AbilityOverrides/HelminthShieldArmorBlueprint", + ItemCount: 1 + }); + } + if (prevXP < 101250_00 && infestedFoundry.XP >= 101250_00) { + recipeChanges.push({ + ItemType: "/Lotus/Types/Recipes/AbilityOverrides/HelminthProcBlockBlueprint", + ItemCount: 1 + }); + } + if (prevXP < 117000_00 && infestedFoundry.XP >= 117000_00) { + recipeChanges.push({ + ItemType: "/Lotus/Types/Recipes/AbilityOverrides/HelminthEnergyShareBlueprint", + ItemCount: 1 + }); + } + if (prevXP < 133875_00 && infestedFoundry.XP >= 133875_00) { + recipeChanges.push({ + ItemType: "/Lotus/Types/Recipes/AbilityOverrides/HelminthMaxStatusBlueprint", + ItemCount: 1 + }); + } + if (prevXP < 151875_00 && infestedFoundry.XP >= 151875_00) { + recipeChanges.push({ + ItemType: "/Lotus/Types/Recipes/AbilityOverrides/HelminthTreasureBlueprint", + ItemCount: 1 + }); + } + return recipeChanges; }; interface IHelminthSubsumeRequest { diff --git a/src/controllers/api/upgradesController.ts b/src/controllers/api/upgradesController.ts index e21d54d0..eea06d2e 100644 --- a/src/controllers/api/upgradesController.ts +++ b/src/controllers/api/upgradesController.ts @@ -8,13 +8,16 @@ import { } from "@/src/types/inventoryTypes/commonInventoryTypes"; import { IMiscItem } from "@/src/types/inventoryTypes/inventoryTypes"; import { getAccountIdForRequest } from "@/src/services/loginService"; -import { addMiscItems, getInventory, updateCurrency } from "@/src/services/inventoryService"; +import { addMiscItems, addRecipes, getInventory, updateCurrency } from "@/src/services/inventoryService"; import { getRecipeByResult } from "@/src/services/itemDataService"; +import { IInventoryChanges } from "@/src/types/purchaseTypes"; +import { addInfestedFoundryXP } from "./infestedFoundryController"; export const upgradesController: RequestHandler = async (req, res) => { const accountId = await getAccountIdForRequest(req); const payload = JSON.parse(String(req.body)) as IUpgradesRequest; const inventory = await getInventory(accountId); + const inventoryChanges: IInventoryChanges = {}; for (const operation of payload.Operations) { if ( operation.UpgradeRequirement == "/Lotus/Types/Items/MiscItems/ModSlotUnlocker" || @@ -35,6 +38,7 @@ export const upgradesController: RequestHandler = async (req, res) => { const suit = inventory.Suits.find(x => x._id.toString() == payload.ItemId.$oid)!; let newAbilityOverride: IAbilityOverride | undefined; + let totalPercentagePointsConsumed = 0; if (operation.UpgradeRequirement != "") { newAbilityOverride = { Ability: operation.UpgradeRequirement, @@ -43,6 +47,7 @@ export const upgradesController: RequestHandler = async (req, res) => { const recipe = getRecipeByResult(operation.UpgradeRequirement)!; for (const ingredient of recipe.ingredients) { + totalPercentagePointsConsumed += ingredient.ItemCount / 10; inventory.InfestedFoundry!.Resources!.find(x => x.ItemType == ingredient.ItemType)!.Count -= ingredient.ItemCount; } @@ -52,6 +57,12 @@ export const upgradesController: RequestHandler = async (req, res) => { suit.Configs[entry.Slot] ??= {}; suit.Configs[entry.Slot].AbilityOverride = newAbilityOverride; } + + const recipeChanges = addInfestedFoundryXP(inventory.InfestedFoundry!, totalPercentagePointsConsumed * 8); + addRecipes(inventory, recipeChanges); + + inventoryChanges.Recipes = recipeChanges; + inventoryChanges.InfestedFoundry = inventory.toJSON().InfestedFoundry; } else switch (operation.UpgradeRequirement) { case "/Lotus/Types/Items/MiscItems/OrokinReactor": @@ -146,7 +157,7 @@ export const upgradesController: RequestHandler = async (req, res) => { } } await inventory.save(); - res.json({ InventoryChanges: {} }); + res.json({ InventoryChanges: inventoryChanges }); }; const setSlotPolarity = (item: IEquipmentDatabase, slot: number, polarity: ArtifactPolarity): void => { diff --git a/src/services/inventoryService.ts b/src/services/inventoryService.ts index ad33b565..652fcaf3 100644 --- a/src/services/inventoryService.ts +++ b/src/services/inventoryService.ts @@ -79,8 +79,9 @@ export const combineInventoryChanges = (InventoryChanges: IInventoryChanges, del } } else if (typeof delta[key] == "object") { console.assert(key.substring(-3) == "Bin"); + console.assert(key != "InfestedFoundry"); const left = InventoryChanges[key] as IBinChanges; - const right: IBinChanges = delta[key]; + const right = delta[key] as IBinChanges; left.count += right.count; left.platinum += right.platinum; left.Slots += right.Slots; diff --git a/src/types/purchaseTypes.ts b/src/types/purchaseTypes.ts index f2b1ff9b..19e8ff33 100644 --- a/src/types/purchaseTypes.ts +++ b/src/types/purchaseTypes.ts @@ -1,3 +1,5 @@ +import { IInfestedFoundry } from "./inventoryTypes/inventoryTypes"; + export interface IPurchaseRequest { PurchaseParams: IPurchaseParams; buildLabel: string; @@ -25,8 +27,10 @@ export interface ICurrencyChanges { export type IInventoryChanges = { [_ in SlotNames]?: IBinChanges; -} & ICurrencyChanges & - Record; +} & ICurrencyChanges & { InfestedFoundry?: IInfestedFoundry } & Record< + string, + IBinChanges | number | object[] | IInfestedFoundry + >; export interface IPurchaseResponse { InventoryChanges: IInventoryChanges; -- 2.47.2 From 8154f9bc364f125fcfd3b5354d160f522ac2a6d2 Mon Sep 17 00:00:00 2001 From: Sainan Date: Sun, 5 Jan 2025 12:26:26 +0100 Subject: [PATCH 10/18] feat(webui): add "Fully Level Up Helminth" (#717) --- src/controllers/api/infestedFoundryController.ts | 16 ++++++++++++++++ static/webui/index.html | 3 ++- static/webui/script.js | 6 ++++++ 3 files changed, 24 insertions(+), 1 deletion(-) diff --git a/src/controllers/api/infestedFoundryController.ts b/src/controllers/api/infestedFoundryController.ts index 4fa5f694..0f0833d6 100644 --- a/src/controllers/api/infestedFoundryController.ts +++ b/src/controllers/api/infestedFoundryController.ts @@ -223,6 +223,22 @@ export const infestedFoundryController: RequestHandler = async (req, res) => { break; } + case "custom_unlockall": { + const inventory = await getInventory(accountId); + inventory.InfestedFoundry ??= {}; + inventory.InfestedFoundry.XP ??= 0; + if (151875_00 > inventory.InfestedFoundry.XP) { + const recipeChanges = addInfestedFoundryXP( + inventory.InfestedFoundry, + 151875_00 - inventory.InfestedFoundry.XP + ); + addRecipes(inventory, recipeChanges); + await inventory.save(); + } + res.end(); + break; + } + default: throw new Error(`unhandled infestedFoundry mode: ${String(req.query.mode)}`); } diff --git a/static/webui/index.html b/static/webui/index.html index af629d1f..e5c4eca8 100644 --- a/static/webui/index.html +++ b/static/webui/index.html @@ -278,7 +278,8 @@
Account
- +

+
diff --git a/static/webui/script.js b/static/webui/script.js index 160ccfae..fd7fdf15 100644 --- a/static/webui/script.js +++ b/static/webui/script.js @@ -955,6 +955,12 @@ function unlockFocusSchool(upgradeType) { }); } +function doHelminthUnlockAll() { + revalidateAuthz(() => { + $.post("/api/infestedFoundry.php?" + window.authz + "&mode=custom_unlockall"); + }); +} + // Powersuit Route single.getRoute("#powersuit-route").on("beforeload", function () { -- 2.47.2 From 1bab76f58b9a0cf8cd37e36ac37c24bccb33eb8a Mon Sep 17 00:00:00 2001 From: Sainan Date: Sun, 5 Jan 2025 12:37:08 +0100 Subject: [PATCH 11/18] fix: unlockAllScans not fully working with blacklisted enemies (#723) --- static/fixed_responses/allScans.json | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/static/fixed_responses/allScans.json b/static/fixed_responses/allScans.json index 8f186d29..938f7dd8 100644 --- a/static/fixed_responses/allScans.json +++ b/static/fixed_responses/allScans.json @@ -4346,5 +4346,17 @@ { "scans": 9999, "type": "/Lotus/Weapons/Infested/Melee/InfBoomerang/InfBoomerangSpawnAvatar" + }, + { + "scans": 9999, + "type": "/Lotus/Types/Game/CrewShip/GrineerDestroyer/DeepSpace/GrineerDSDestroyerAvatar" + }, + { + "scans": 9999, + "type": "/Lotus/Types/Game/CrewShip/GrineerDestroyer/Saturn/GrineerSaturnDestroyerAvatar" + }, + { + "scans": 9999, + "type": "/Lotus/Types/Game/CrewShip/GrineerDestroyer/GrineerDestroyerAvatar" } ] -- 2.47.2 From d69ebf89ec362dd4d32d79b9e5ea1fae5518262e Mon Sep 17 00:00:00 2001 From: Sainan Date: Sun, 5 Jan 2025 13:34:41 +0100 Subject: [PATCH 12/18] feat: helminth losing apetite (#718) --- .../api/infestedFoundryController.ts | 78 ++++++++++++++++--- src/models/inventoryModels/inventoryModel.ts | 20 ++++- src/types/inventoryTypes/inventoryTypes.ts | 10 ++- 3 files changed, 92 insertions(+), 16 deletions(-) diff --git a/src/controllers/api/infestedFoundryController.ts b/src/controllers/api/infestedFoundryController.ts index 0f0833d6..d52c7f74 100644 --- a/src/controllers/api/infestedFoundryController.ts +++ b/src/controllers/api/infestedFoundryController.ts @@ -8,6 +8,7 @@ import { ExportMisc, ExportRecipes } from "warframe-public-export-plus"; import { getRecipe } from "@/src/services/itemDataService"; import { TInventoryDatabaseDocument } from "@/src/models/inventoryModels/inventoryModel"; import { toMongoDate } from "@/src/helpers/inventoryHelpers"; +import { logger } from "@/src/utils/logger"; export const infestedFoundryController: RequestHandler = async (req, res) => { const accountId = await getAccountIdForRequest(req); @@ -67,21 +68,43 @@ export const infestedFoundryController: RequestHandler = async (req, res) => { const miscItemChanges: IMiscItem[] = []; let totalPercentagePointsGained = 0; + const currentUnixSeconds = Math.trunc(new Date().getTime() / 1000); + for (const contribution of request.ResourceContributions) { const snack = ExportMisc.helminthSnacks[contribution.ItemType]; - // Note: Currently ignoring loss of apetite - totalPercentagePointsGained += snack.gain * 100; // 30% would be gain=0.3, so percentage points is equal to gain * 100. - const resource = inventory.InfestedFoundry.Resources.find(x => x.ItemType == snack.type); - if (resource) { - resource.Count += Math.trunc(snack.gain * 1000); - } else { - inventory.InfestedFoundry.Resources.push({ - ItemType: snack.type, - Count: Math.trunc(snack.gain * 1000) // 30% would be gain=0.3 or Count=300, so Count=gain*1000. - }); + let resource = inventory.InfestedFoundry.Resources.find(x => x.ItemType == snack.type); + if (!resource) { + resource = + inventory.InfestedFoundry.Resources[ + inventory.InfestedFoundry.Resources.push({ ItemType: snack.type, Count: 0 }) - 1 + ]; } + resource.RecentlyConvertedResources ??= []; + let record = resource.RecentlyConvertedResources.find(x => x.ItemType == contribution.ItemType); + if (!record) { + record = + resource.RecentlyConvertedResources[ + resource.RecentlyConvertedResources.push({ ItemType: contribution.ItemType, Date: 0 }) - 1 + ]; + } + + const hoursRemaining = (record.Date - currentUnixSeconds) / 3600; + const apetiteFactor = apetiteModel(hoursRemaining) / 30; + logger.debug(`helminth eating ${contribution.ItemType} (+${(snack.gain * 100).toFixed(0)}%)`, { + hoursRemaining, + apetiteFactor + }); + if (hoursRemaining >= 18) { + record.Date = currentUnixSeconds + 72 * 60 * 60; + } else { + record.Date = currentUnixSeconds + 24 * 60 * 60; + } + + totalPercentagePointsGained += snack.gain * 100 * apetiteFactor; // 30% would be gain=0.3, so percentage points is equal to gain * 100. + resource.Count += Math.trunc(snack.gain * 1000 * apetiteFactor); // 30% would be gain=0.3 or Count=300, so Count=gain*1000. + // tally items for removal const change = miscItemChanges.find(x => x.ItemType == contribution.ItemType); if (change) { @@ -387,3 +410,38 @@ interface IHelminthInvigorationRequest { ResourceTypes: string[]; ResourceCosts: number[]; } + +// Hours remaining, percentage points gained (out of 30 total) +// 0, 30 +// 5, 25.8 +// 10, 21.6 +// 12, 20 +// 16, 16.6 +// 17, 15.8 +// 18, 15 +// 20, 15 +// 24, 15 +// 36, 15 +// 40, 13.6 +// 47, 11.3 +// 48, 11 +// 50, 10.3 +// 60, 7 +// 70, 3.6 +// 71, 3.3 +// 72, 3 +const apetiteModel = (x: number): number => { + if (x <= 0) { + return 30; + } + if (x < 18) { + return -0.84 * x + 30; + } + if (x <= 36) { + return 15; + } + if (x < 71.9) { + return -0.3327892 * x + 26.94135; + } + return 3; +}; diff --git a/src/models/inventoryModels/inventoryModel.ts b/src/models/inventoryModels/inventoryModel.ts index 7c8d5b75..8202bda9 100644 --- a/src/models/inventoryModels/inventoryModel.ts +++ b/src/models/inventoryModels/inventoryModel.ts @@ -45,7 +45,8 @@ import { ICrewShipMembers, ICrewShip, ICrewShipPilotWeapon, - IShipExterior + IShipExterior, + IHelminthFoodRecord } from "../../types/inventoryTypes/inventoryTypes"; import { IOid } from "../../types/commonTypes"; import { @@ -470,7 +471,22 @@ const consumedSchuitsSchema = new Schema( { _id: false } ); -const helminthResourceSchema = new Schema({ ItemType: String, Count: Number }, { _id: false }); +const helminthFoodRecordSchema = new Schema( + { + ItemType: String, + Date: Number + }, + { _id: false } +); + +const helminthResourceSchema = new Schema( + { + ItemType: String, + Count: Number, + RecentlyConvertedResources: { type: [helminthFoodRecordSchema], default: undefined } + }, + { _id: false } +); const infestedFoundrySchema = new Schema( { diff --git a/src/types/inventoryTypes/inventoryTypes.ts b/src/types/inventoryTypes/inventoryTypes.ts index 6d6dd9bc..1f43c918 100644 --- a/src/types/inventoryTypes/inventoryTypes.ts +++ b/src/types/inventoryTypes/inventoryTypes.ts @@ -513,13 +513,15 @@ export interface IFusionTreasure { Sockets: number; } +export interface IHelminthFoodRecord { + ItemType: string; + Date: number; +} + export interface IHelminthResource { ItemType: string; Count: number; - RecentlyConvertedResources?: { - ItemType: string; - Date: number; - }[]; + RecentlyConvertedResources?: IHelminthFoodRecord[]; } export interface IInfestedFoundry { -- 2.47.2 From 9d115a4d02344a60ac64b35c66b8031804d15c9b Mon Sep 17 00:00:00 2001 From: Sainan Date: Sun, 5 Jan 2025 13:40:19 +0100 Subject: [PATCH 13/18] feat: archon shard removal (#724) --- .../api/infestedFoundryController.ts | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/src/controllers/api/infestedFoundryController.ts b/src/controllers/api/infestedFoundryController.ts index d52c7f74..40a95d37 100644 --- a/src/controllers/api/infestedFoundryController.ts +++ b/src/controllers/api/infestedFoundryController.ts @@ -41,6 +41,25 @@ export const infestedFoundryController: RequestHandler = async (req, res) => { break; } + case "x": { + // shard removal + const request = getJSONfromString(String(req.body)) as IShardUninstallRequest; + const inventory = await getInventory(accountId); + const suit = inventory.Suits.find(suit => suit._id.toString() == request.SuitId.$oid)!; + suit.ArchonCrystalUpgrades![request.Slot] = {}; + const bile = inventory.InfestedFoundry!.Resources!.find( + x => x.ItemType == "/Lotus/Types/Items/InfestedFoundry/HelminthBile" + )!; + bile.Count -= 300; + await inventory.save(); + res.json({ + InventoryChanges: { + InfestedFoundry: inventory.toJSON().InfestedFoundry + } + }); + break; + } + case "n": { // name the beast const request = getJSONfromString(String(req.body)) as IHelminthNameRequest; @@ -274,6 +293,11 @@ interface IShardInstallRequest { Color: string; } +interface IShardUninstallRequest { + SuitId: IOid; + Slot: number; +} + interface IHelminthNameRequest { newName: string; } -- 2.47.2 From 82621ebe0f3b02391ab9a94df291b0cf2d1bc0a5 Mon Sep 17 00:00:00 2001 From: Sainan Date: Sun, 5 Jan 2025 23:20:36 +0100 Subject: [PATCH 14/18] feat: sentient apetite (#726) --- .../api/infestedFoundryController.ts | 48 +++++++++++++++---- 1 file changed, 38 insertions(+), 10 deletions(-) diff --git a/src/controllers/api/infestedFoundryController.ts b/src/controllers/api/infestedFoundryController.ts index 40a95d37..ea35fa4d 100644 --- a/src/controllers/api/infestedFoundryController.ts +++ b/src/controllers/api/infestedFoundryController.ts @@ -3,7 +3,13 @@ import { getAccountIdForRequest } from "@/src/services/loginService"; import { getJSONfromString } from "@/src/helpers/stringHelpers"; import { getInventory, addMiscItems, updateCurrency, addRecipes } from "@/src/services/inventoryService"; import { IOid } from "@/src/types/commonTypes"; -import { IConsumedSuit, IInfestedFoundry, IMiscItem, ITypeCount } from "@/src/types/inventoryTypes/inventoryTypes"; +import { + IConsumedSuit, + IHelminthFoodRecord, + IInfestedFoundry, + IMiscItem, + ITypeCount +} from "@/src/types/inventoryTypes/inventoryTypes"; import { ExportMisc, ExportRecipes } from "warframe-public-export-plus"; import { getRecipe } from "@/src/services/itemDataService"; import { TInventoryDatabaseDocument } from "@/src/models/inventoryModels/inventoryModel"; @@ -92,6 +98,34 @@ export const infestedFoundryController: RequestHandler = async (req, res) => { for (const contribution of request.ResourceContributions) { const snack = ExportMisc.helminthSnacks[contribution.ItemType]; + // tally items for removal + const change = miscItemChanges.find(x => x.ItemType == contribution.ItemType); + if (change) { + change.ItemCount -= snack.count; + } else { + miscItemChanges.push({ ItemType: contribution.ItemType, ItemCount: snack.count * -1 }); + } + + if (snack.type == "/Lotus/Types/Items/InfestedFoundry/HelminthAppetiteCooldownReducer") { + // sentinent apetite + let mostDislikedSnackRecord: IHelminthFoodRecord = { ItemType: "", Date: 0 }; + for (const resource of inventory.InfestedFoundry.Resources) { + if (resource.RecentlyConvertedResources) { + for (const record of resource.RecentlyConvertedResources) { + if (record.Date > mostDislikedSnackRecord.Date) { + mostDislikedSnackRecord = record; + } + } + } + } + logger.debug("helminth eats sentient resource; most disliked snack:", { + type: mostDislikedSnackRecord.ItemType, + date: mostDislikedSnackRecord.Date + }); + mostDislikedSnackRecord.Date = currentUnixSeconds + 24 * 60 * 60; // Possibly unfaithful + continue; + } + let resource = inventory.InfestedFoundry.Resources.find(x => x.ItemType == snack.type); if (!resource) { resource = @@ -116,21 +150,13 @@ export const infestedFoundryController: RequestHandler = async (req, res) => { apetiteFactor }); if (hoursRemaining >= 18) { - record.Date = currentUnixSeconds + 72 * 60 * 60; + record.Date = currentUnixSeconds + 72 * 60 * 60; // Possibly unfaithful } else { record.Date = currentUnixSeconds + 24 * 60 * 60; } totalPercentagePointsGained += snack.gain * 100 * apetiteFactor; // 30% would be gain=0.3, so percentage points is equal to gain * 100. resource.Count += Math.trunc(snack.gain * 1000 * apetiteFactor); // 30% would be gain=0.3 or Count=300, so Count=gain*1000. - - // tally items for removal - const change = miscItemChanges.find(x => x.ItemType == contribution.ItemType); - if (change) { - change.ItemCount -= snack.count; - } else { - miscItemChanges.push({ ItemType: contribution.ItemType, ItemCount: snack.count * -1 }); - } } const recipeChanges = addInfestedFoundryXP(inventory.InfestedFoundry, 666 * totalPercentagePointsGained); @@ -435,6 +461,8 @@ interface IHelminthInvigorationRequest { ResourceCosts: number[]; } +// A fitted model for observed apetite values. Likely slightly inaccurate. +// // Hours remaining, percentage points gained (out of 30 total) // 0, 30 // 5, 25.8 -- 2.47.2 From eb6baa5e1550be8e6ba3678745154afaffb568ca Mon Sep 17 00:00:00 2001 From: Sainan Date: Mon, 6 Jan 2025 01:21:02 +0100 Subject: [PATCH 15/18] fix: removing an archon shard doesn't refund it (#729) --- .../api/infestedFoundryController.ts | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/src/controllers/api/infestedFoundryController.ts b/src/controllers/api/infestedFoundryController.ts index ea35fa4d..04144475 100644 --- a/src/controllers/api/infestedFoundryController.ts +++ b/src/controllers/api/infestedFoundryController.ts @@ -52,14 +52,33 @@ export const infestedFoundryController: RequestHandler = async (req, res) => { const request = getJSONfromString(String(req.body)) as IShardUninstallRequest; const inventory = await getInventory(accountId); const suit = inventory.Suits.find(suit => suit._id.toString() == request.SuitId.$oid)!; + + // refund shard + const shard = Object.entries(colorToShard).find( + ([color]) => color == suit.ArchonCrystalUpgrades![request.Slot].Color + )![1]; + const miscItemChanges = [ + { + ItemType: shard, + ItemCount: 1 + } + ]; + addMiscItems(inventory, miscItemChanges); + + // remove from suit suit.ArchonCrystalUpgrades![request.Slot] = {}; + + // remove bile const bile = inventory.InfestedFoundry!.Resources!.find( x => x.ItemType == "/Lotus/Types/Items/InfestedFoundry/HelminthBile" )!; bile.Count -= 300; + await inventory.save(); + res.json({ InventoryChanges: { + MiscItems: miscItemChanges, InfestedFoundry: inventory.toJSON().InfestedFoundry } }); -- 2.47.2 From 709c2a401bf22d9014136771fb61e245e6192fe7 Mon Sep 17 00:00:00 2001 From: Sainan Date: Mon, 6 Jan 2025 01:21:37 +0100 Subject: [PATCH 16/18] feat: spectre loadouts (#719) --- .../api/claimCompletedRecipeController.ts | 24 +++++++++ src/controllers/api/startRecipeController.ts | 54 +++++++++++++++++++ src/models/inventoryModels/inventoryModel.ts | 21 ++++---- src/types/inventoryTypes/inventoryTypes.ts | 17 +++--- 4 files changed, 97 insertions(+), 19 deletions(-) diff --git a/src/controllers/api/claimCompletedRecipeController.ts b/src/controllers/api/claimCompletedRecipeController.ts index 5b8e048e..179327da 100644 --- a/src/controllers/api/claimCompletedRecipeController.ts +++ b/src/controllers/api/claimCompletedRecipeController.ts @@ -59,6 +59,30 @@ export const claimCompletedRecipeController: RequestHandler = async (req, res) = }); } else { logger.debug("Claiming Recipe", { recipe, pendingRecipe }); + + if (recipe.secretIngredientAction == "SIA_SPECTRE_LOADOUT_COPY") { + const inventory = await getInventory(accountId); + inventory.PendingSpectreLoadouts ??= []; + inventory.SpectreLoadouts ??= []; + + const pendingLoadoutIndex = inventory.PendingSpectreLoadouts.findIndex( + x => x.ItemType == recipe.resultType + ); + if (pendingLoadoutIndex != -1) { + const loadoutIndex = inventory.SpectreLoadouts.findIndex(x => x.ItemType == recipe.resultType); + if (loadoutIndex != -1) { + inventory.SpectreLoadouts.splice(loadoutIndex, 1); + } + logger.debug( + "moving spectre loadout from pending to active", + inventory.toJSON().PendingSpectreLoadouts![pendingLoadoutIndex] + ); + inventory.SpectreLoadouts.push(inventory.PendingSpectreLoadouts[pendingLoadoutIndex]); + inventory.PendingSpectreLoadouts.splice(pendingLoadoutIndex, 1); + await inventory.save(); + } + } + let InventoryChanges = {}; if (recipe.consumeOnUse) { const recipeChanges = [ diff --git a/src/controllers/api/startRecipeController.ts b/src/controllers/api/startRecipeController.ts index 83501874..4a511315 100644 --- a/src/controllers/api/startRecipeController.ts +++ b/src/controllers/api/startRecipeController.ts @@ -6,6 +6,7 @@ import { getRecipe } from "@/src/services/itemDataService"; import { addMiscItems, getInventory, updateCurrency } from "@/src/services/inventoryService"; import { unixTimesInMs } from "@/src/constants/timeConstants"; import { Types } from "mongoose"; +import { ISpectreLoadout } from "@/src/types/inventoryTypes/inventoryTypes"; interface IStartRecipeRequest { RecipeName: string; @@ -43,6 +44,59 @@ export const startRecipeController: RequestHandler = async (req, res) => { _id: new Types.ObjectId() }); + if (recipe.secretIngredientAction == "SIA_SPECTRE_LOADOUT_COPY") { + const spectreLoadout: ISpectreLoadout = { + ItemType: recipe.resultType, + Suits: "", + LongGuns: "", + Pistols: "", + Melee: "" + }; + for ( + let secretIngredientsIndex = 0; + secretIngredientsIndex != recipe.secretIngredients!.length; + ++secretIngredientsIndex + ) { + const type = recipe.secretIngredients![secretIngredientsIndex].ItemType; + const oid = startRecipeRequest.Ids[recipe.ingredients.length + secretIngredientsIndex]; + if (oid == "ffffffffffffffffffffffff") { + // user chose to preserve the active loadout + break; + } + if (type == "/Lotus/Types/Game/PowerSuits/PlayerPowerSuit") { + const item = inventory.Suits.find(x => x._id.toString() == oid)!; + spectreLoadout.Suits = item.ItemType; + } else if (type == "/Lotus/Weapons/Tenno/Pistol/LotusPistol") { + const item = inventory.Pistols.find(x => x._id.toString() == oid)!; + spectreLoadout.Pistols = item.ItemType; + spectreLoadout.PistolsModularParts = item.ModularParts; + } else if (type == "/Lotus/Weapons/Tenno/LotusLongGun") { + const item = inventory.LongGuns.find(x => x._id.toString() == oid)!; + spectreLoadout.LongGuns = item.ItemType; + spectreLoadout.LongGunsModularParts = item.ModularParts; + } else { + console.assert(type == "/Lotus/Types/Game/LotusMeleeWeapon"); + const item = inventory.Melee.find(x => x._id.toString() == oid)!; + spectreLoadout.Melee = item.ItemType; + spectreLoadout.MeleeModularParts = item.ModularParts; + } + } + if ( + spectreLoadout.Suits != "" && + spectreLoadout.LongGuns != "" && + spectreLoadout.Pistols != "" && + spectreLoadout.Melee != "" + ) { + inventory.PendingSpectreLoadouts ??= []; + const existingIndex = inventory.PendingSpectreLoadouts.findIndex(x => x.ItemType == recipe.resultType); + if (existingIndex != -1) { + inventory.PendingSpectreLoadouts.splice(existingIndex, 1); + } + inventory.PendingSpectreLoadouts.push(spectreLoadout); + logger.debug("pending spectre loadout", spectreLoadout); + } + } + const newInventory = await inventory.save(); res.json({ diff --git a/src/models/inventoryModels/inventoryModel.ts b/src/models/inventoryModels/inventoryModel.ts index 8202bda9..f1e3edb6 100644 --- a/src/models/inventoryModels/inventoryModel.ts +++ b/src/models/inventoryModels/inventoryModel.ts @@ -548,13 +548,14 @@ const fusionTreasuresSchema = new Schema().add(typeCountSchema) const spectreLoadoutsSchema = new Schema( { - LongGuns: String, - Melee: String, - Pistols: String, - PistolsFeatures: Number, - PistolsModularParts: [String], + ItemType: String, Suits: String, - ItemType: String + LongGuns: String, + LongGunsModularParts: { type: [String], default: undefined }, + Pistols: String, + PistolsModularParts: { type: [String], default: undefined }, + Melee: String, + MeleeModularParts: { type: [String], default: undefined } }, { _id: false } ); @@ -936,11 +937,9 @@ const inventorySchema = new Schema( QualifyingInvasions: [Schema.Types.Mixed], FactionScores: [Number], - //Have only Suit+Pistols+LongGuns+Melee+ItemType(BronzeSpectre,GoldSpectre,PlatinumSpectreArmy,SilverSpectreArmy) - //"/Lotus/Types/Game/SpectreArmies/BronzeSpectreArmy": "Vapor Specter Regiment", - SpectreLoadouts: [spectreLoadoutsSchema], - //If you want change Spectre Gear id - PendingSpectreLoadouts: [Schema.Types.Mixed], + // https://warframe.fandom.com/wiki/Specter_(Tenno) + PendingSpectreLoadouts: { type: [spectreLoadoutsSchema], default: undefined }, + SpectreLoadouts: { type: [spectreLoadoutsSchema], default: undefined }, //New Quest Email EmailItems: [TypeXPItemSchema], diff --git a/src/types/inventoryTypes/inventoryTypes.ts b/src/types/inventoryTypes/inventoryTypes.ts index 1f43c918..c453206d 100644 --- a/src/types/inventoryTypes/inventoryTypes.ts +++ b/src/types/inventoryTypes/inventoryTypes.ts @@ -203,8 +203,8 @@ export interface IInventoryResponse { SpaceMelee: IEquipmentDatabase[]; SpaceGuns: IEquipmentDatabase[]; ArchwingEnabled: boolean; - PendingSpectreLoadouts: any[]; - SpectreLoadouts: ISpectreLoadout[]; + PendingSpectreLoadouts?: ISpectreLoadout[]; + SpectreLoadouts?: ISpectreLoadout[]; SentinelWeapons: IEquipmentDatabase[]; Sentinels: IEquipmentDatabase[]; EmailItems: ITypeCount[]; @@ -871,13 +871,14 @@ export interface IShipInventory { } export interface ISpectreLoadout { - LongGuns: string; - Melee: string; - Pistols: string; - PistolsFeatures: number; - PistolsModularParts: string[]; - Suits: string; ItemType: string; + Suits: string; + LongGuns: string; + LongGunsModularParts?: string[]; + Pistols: string; + PistolsModularParts?: string[]; + Melee: string; + MeleeModularParts?: string[]; } export interface IStepSequencer { -- 2.47.2 From 69c65f3ce2d1f47f2285dfef80a47a7b87fa7d04 Mon Sep 17 00:00:00 2001 From: Sainan Date: Mon, 6 Jan 2025 04:36:40 +0100 Subject: [PATCH 17/18] fix: missing teshin hard mode vendor manifest (#737) --- src/services/serversideVendorsService.ts | 18 +- .../TeshinHardModeVendorManifest.json | 603 ++++++++++++++++++ 2 files changed, 613 insertions(+), 8 deletions(-) create mode 100644 static/fixed_responses/getVendorInfo/TeshinHardModeVendorManifest.json diff --git a/src/services/serversideVendorsService.ts b/src/services/serversideVendorsService.ts index 0b61caa4..3b4c3a61 100644 --- a/src/services/serversideVendorsService.ts +++ b/src/services/serversideVendorsService.ts @@ -15,16 +15,17 @@ import DuviriAcrithisVendorManifest from "@/static/fixed_responses/getVendorInfo import EntratiLabsEntratiLabsCommisionsManifest from "@/static/fixed_responses/getVendorInfo/EntratiLabsEntratiLabsCommisionsManifest.json"; import EntratiLabsEntratiLabVendorManifest from "@/static/fixed_responses/getVendorInfo/EntratiLabsEntratiLabVendorManifest.json"; import HubsIronwakeDondaVendorManifest from "@/static/fixed_responses/getVendorInfo/HubsIronwakeDondaVendorManifest.json"; -import HubsRailjackCrewMemberVendorManifest from "@/static/fixed_responses/getVendorInfo/HubsRailjackCrewMemberVendorManifest.json"; import HubsPerrinSequenceWeaponVendorManifest from "@/static/fixed_responses/getVendorInfo/HubsPerrinSequenceWeaponVendorManifest.json"; +import HubsRailjackCrewMemberVendorManifest from "@/static/fixed_responses/getVendorInfo/HubsRailjackCrewMemberVendorManifest.json"; import MaskSalesmanManifest from "@/static/fixed_responses/getVendorInfo/MaskSalesmanManifest.json"; import OstronFishmongerVendorManifest from "@/static/fixed_responses/getVendorInfo/OstronFishmongerVendorManifest.json"; -import OstronProspectorVendorManifest from "@/static/fixed_responses/getVendorInfo/OstronProspectorVendorManifest.json"; import OstronPetVendorManifest from "@/static/fixed_responses/getVendorInfo/OstronPetVendorManifest.json"; -import SolarisFishmongerVendorManifest from "@/static/fixed_responses/getVendorInfo/SolarisFishmongerVendorManifest.json"; -import SolarisProspectorVendorManifest from "@/static/fixed_responses/getVendorInfo/SolarisProspectorVendorManifest.json"; +import OstronProspectorVendorManifest from "@/static/fixed_responses/getVendorInfo/OstronProspectorVendorManifest.json"; import SolarisDebtTokenVendorManifest from "@/static/fixed_responses/getVendorInfo/SolarisDebtTokenVendorManifest.json"; import SolarisDebtTokenVendorRepossessionsManifest from "@/static/fixed_responses/getVendorInfo/SolarisDebtTokenVendorRepossessionsManifest.json"; +import SolarisFishmongerVendorManifest from "@/static/fixed_responses/getVendorInfo/SolarisFishmongerVendorManifest.json"; +import SolarisProspectorVendorManifest from "@/static/fixed_responses/getVendorInfo/SolarisProspectorVendorManifest.json"; +import TeshinHardModeVendorManifest from "@/static/fixed_responses/getVendorInfo/TeshinHardModeVendorManifest.json"; import ZarimanCommisionsManifestArchimedean from "@/static/fixed_responses/getVendorInfo/ZarimanCommisionsManifestArchimedean.json"; interface IVendorManifest { @@ -55,16 +56,17 @@ const vendorManifests: IVendorManifest[] = [ EntratiLabsEntratiLabsCommisionsManifest, EntratiLabsEntratiLabVendorManifest, HubsIronwakeDondaVendorManifest, - HubsRailjackCrewMemberVendorManifest, HubsPerrinSequenceWeaponVendorManifest, + HubsRailjackCrewMemberVendorManifest, MaskSalesmanManifest, OstronFishmongerVendorManifest, - OstronProspectorVendorManifest, OstronPetVendorManifest, - SolarisFishmongerVendorManifest, - SolarisProspectorVendorManifest, + OstronProspectorVendorManifest, SolarisDebtTokenVendorManifest, SolarisDebtTokenVendorRepossessionsManifest, + SolarisFishmongerVendorManifest, + SolarisProspectorVendorManifest, + TeshinHardModeVendorManifest, ZarimanCommisionsManifestArchimedean ]; diff --git a/static/fixed_responses/getVendorInfo/TeshinHardModeVendorManifest.json b/static/fixed_responses/getVendorInfo/TeshinHardModeVendorManifest.json new file mode 100644 index 00000000..abfd1cab --- /dev/null +++ b/static/fixed_responses/getVendorInfo/TeshinHardModeVendorManifest.json @@ -0,0 +1,603 @@ +{ + "VendorInfo":{ + "_id":{ + "$oid":"63ed01efbdaa38891767bac9" + }, + "TypeName":"/Lotus/Types/Game/VendorManifests/Hubs/TeshinHardModeVendorManifest", + "ItemManifest":[ + { + "StoreItem":"/Lotus/StoreItems/Types/Recipes/OperatorArmour/HardMode/OperatorTeshinArmsBlueprint", + "ItemPrices":[ + { + "ItemCount":15, + "ItemType":"/Lotus/Types/Items/MiscItems/SteelEssence", + "ProductCategory":"MiscItems" + } + ], + "Bin":"BIN_0", + "QuantityMultiplier":1, + "Expiry":{ + "$date":{ + "$numberLong":"2051240400000" + } + }, + "AllowMultipurchase":true, + "Id":{ + "$oid":"66fd60b20ba592c4c95e9947" + } + }, + { + "StoreItem":"/Lotus/StoreItems/Types/Recipes/OperatorArmour/HardMode/OperatorTeshinBodyBlueprint", + "ItemPrices":[ + { + "ItemCount":25, + "ItemType":"/Lotus/Types/Items/MiscItems/SteelEssence", + "ProductCategory":"MiscItems" + } + ], + "Bin":"BIN_0", + "QuantityMultiplier":1, + "Expiry":{ + "$date":{ + "$numberLong":"2051240400000" + } + }, + "AllowMultipurchase":true, + "Id":{ + "$oid":"66fd60b20ba592c4c95e9948" + } + }, + { + "StoreItem":"/Lotus/StoreItems/Types/Recipes/OperatorArmour/HardMode/OperatorTeshinHeadBlueprint", + "ItemPrices":[ + { + "ItemCount":20, + "ItemType":"/Lotus/Types/Items/MiscItems/SteelEssence", + "ProductCategory":"MiscItems" + } + ], + "Bin":"BIN_0", + "QuantityMultiplier":1, + "Expiry":{ + "$date":{ + "$numberLong":"2051240400000" + } + }, + "AllowMultipurchase":true, + "Id":{ + "$oid":"66fd60b20ba592c4c95e9949" + } + }, + { + "StoreItem":"/Lotus/StoreItems/Types/Recipes/OperatorArmour/HardMode/OperatorTeshinLegsBlueprint", + "ItemPrices":[ + { + "ItemCount":25, + "ItemType":"/Lotus/Types/Items/MiscItems/SteelEssence", + "ProductCategory":"MiscItems" + } + ], + "Bin":"BIN_0", + "QuantityMultiplier":1, + "Expiry":{ + "$date":{ + "$numberLong":"2051240400000" + } + }, + "AllowMultipurchase":true, + "Id":{ + "$oid":"66fd60b20ba592c4c95e994a" + } + }, + { + "StoreItem":"/Lotus/StoreItems/Types/Items/MiscItems/WeaponPrimaryArcaneUnlocker", + "ItemPrices":[ + { + "ItemCount":15, + "ItemType":"/Lotus/Types/Items/MiscItems/SteelEssence", + "ProductCategory":"MiscItems" + } + ], + "Bin":"BIN_0", + "QuantityMultiplier":1, + "Expiry":{ + "$date":{ + "$numberLong":"2051240400000" + } + }, + "AllowMultipurchase":true, + "Id":{ + "$oid":"66fd60b20ba592c4c95e994b" + } + }, + { + "StoreItem":"/Lotus/StoreItems/Types/Items/MiscItems/WeaponSecondaryArcaneUnlocker", + "ItemPrices":[ + { + "ItemCount":15, + "ItemType":"/Lotus/Types/Items/MiscItems/SteelEssence", + "ProductCategory":"MiscItems" + } + ], + "Bin":"BIN_0", + "QuantityMultiplier":1, + "Expiry":{ + "$date":{ + "$numberLong":"2051240400000" + } + }, + "AllowMultipurchase":true, + "Id":{ + "$oid":"66fd60b20ba592c4c95e994c" + } + }, + { + "StoreItem":"/Lotus/StoreItems/Types/Recipes/Components/FormaStanceBlueprint", + "ItemPrices":[ + { + "ItemCount":10, + "ItemType":"/Lotus/Types/Items/MiscItems/SteelEssence", + "ProductCategory":"MiscItems" + } + ], + "Bin":"BIN_0", + "QuantityMultiplier":1, + "Expiry":{ + "$date":{ + "$numberLong":"2051240400000" + } + }, + "AllowMultipurchase":true, + "Id":{ + "$oid":"66fd60b20ba592c4c95e994d" + } + }, + { + "StoreItem":"/Lotus/StoreItems/Upgrades/Skins/Effects/OrbsEphemera", + "ItemPrices":[ + { + "ItemCount":3, + "ItemType":"/Lotus/Types/Items/MiscItems/SteelEssence", + "ProductCategory":"MiscItems" + } + ], + "Bin":"BIN_0", + "QuantityMultiplier":1, + "Expiry":{ + "$date":{ + "$numberLong":"2051240400000" + } + }, + "AllowMultipurchase":true, + "Id":{ + "$oid":"66fd60b20ba592c4c95e994e" + } + }, + { + "StoreItem":"/Lotus/StoreItems/Upgrades/Skins/Effects/TatsuSkullEphemera", + "ItemPrices":[ + { + "ItemCount":85, + "ItemType":"/Lotus/Types/Items/MiscItems/SteelEssence", + "ProductCategory":"MiscItems" + } + ], + "Bin":"BIN_0", + "QuantityMultiplier":1, + "Expiry":{ + "$date":{ + "$numberLong":"2051240400000" + } + }, + "AllowMultipurchase":true, + "Id":{ + "$oid":"66fd60b20ba592c4c95e994f" + } + }, + { + "StoreItem":"/Lotus/StoreItems/Upgrades/Mods/Randomized/RawShotgunRandomMod", + "ItemPrices":[ + { + "ItemCount":75, + "ItemType":"/Lotus/Types/Items/MiscItems/SteelEssence", + "ProductCategory":"MiscItems" + } + ], + "Bin":"BIN_0", + "QuantityMultiplier":1, + "Expiry":{ + "$date":{ + "$numberLong":"2051240400000" + } + }, + "PurchaseQuantityLimit":1, + "RotatedWeekly":true, + "AllowMultipurchase":false, + "Id":{ + "$oid":"66fd60b20ba592c4c95e9950" + } + }, + { + "StoreItem":"/Lotus/StoreItems/Types/Recipes/Components/UmbraFormaBlueprint", + "ItemPrices":[ + { + "ItemCount":150, + "ItemType":"/Lotus/Types/Items/MiscItems/SteelEssence", + "ProductCategory":"MiscItems" + } + ], + "Bin":"BIN_0", + "QuantityMultiplier":1, + "Expiry":{ + "$date":{ + "$numberLong":"2051240400000" + } + }, + "PurchaseQuantityLimit":1, + "RotatedWeekly":true, + "AllowMultipurchase":false, + "Id":{ + "$oid":"66fd60b20ba592c4c95e9951" + } + }, + { + "StoreItem":"/Lotus/StoreItems/Types/Items/MiscItems/Kuva", + "ItemPrices":[ + { + "ItemCount":55, + "ItemType":"/Lotus/Types/Items/MiscItems/SteelEssence", + "ProductCategory":"MiscItems" + } + ], + "Bin":"BIN_0", + "QuantityMultiplier":50000, + "Expiry":{ + "$date":{ + "$numberLong":"2051240400000" + } + }, + "PurchaseQuantityLimit":1, + "RotatedWeekly":true, + "AllowMultipurchase":false, + "Id":{ + "$oid":"66fd60b20ba592c4c95e9952" + } + }, + { + "StoreItem":"/Lotus/StoreItems/Upgrades/Mods/Randomized/RawModularPistolRandomMod", + "ItemPrices":[ + { + "ItemCount":75, + "ItemType":"/Lotus/Types/Items/MiscItems/SteelEssence", + "ProductCategory":"MiscItems" + } + ], + "Bin":"BIN_0", + "QuantityMultiplier":1, + "Expiry":{ + "$date":{ + "$numberLong":"2051240400000" + } + }, + "PurchaseQuantityLimit":1, + "RotatedWeekly":true, + "AllowMultipurchase":false, + "Id":{ + "$oid":"66fd60b20ba592c4c95e9953" + } + }, + { + "StoreItem":"/Lotus/StoreItems/Types/Items/MiscItems/Forma", + "ItemPrices":[ + { + "ItemCount":75, + "ItemType":"/Lotus/Types/Items/MiscItems/SteelEssence", + "ProductCategory":"MiscItems" + } + ], + "Bin":"BIN_0", + "QuantityMultiplier":3, + "Expiry":{ + "$date":{ + "$numberLong":"2051240400000" + } + }, + "PurchaseQuantityLimit":1, + "RotatedWeekly":true, + "AllowMultipurchase":false, + "Id":{ + "$oid":"66fd60b20ba592c4c95e9954" + } + }, + { + "StoreItem":"/Lotus/StoreItems/Upgrades/Mods/Randomized/RawModularMeleeRandomMod", + "ItemPrices":[ + { + "ItemCount":75, + "ItemType":"/Lotus/Types/Items/MiscItems/SteelEssence", + "ProductCategory":"MiscItems" + } + ], + "Bin":"BIN_0", + "QuantityMultiplier":1, + "Expiry":{ + "$date":{ + "$numberLong":"2051240400000" + } + }, + "PurchaseQuantityLimit":1, + "RotatedWeekly":true, + "AllowMultipurchase":false, + "Id":{ + "$oid":"66fd60b20ba592c4c95e9955" + } + }, + { + "StoreItem":"/Lotus/StoreItems/Upgrades/Mods/FusionBundles/EvergreenLoginRewardFusionBundle", + "ItemPrices":[ + { + "ItemCount":150, + "ItemType":"/Lotus/Types/Items/MiscItems/SteelEssence", + "ProductCategory":"MiscItems" + } + ], + "Bin":"BIN_0", + "QuantityMultiplier":1, + "Expiry":{ + "$date":{ + "$numberLong":"2051240400000" + } + }, + "PurchaseQuantityLimit":1, + "RotatedWeekly":true, + "AllowMultipurchase":false, + "Id":{ + "$oid":"66fd60b20ba592c4c95e9956" + } + }, + { + "StoreItem":"/Lotus/StoreItems/Upgrades/Mods/Randomized/RawRifleRandomMod", + "ItemPrices":[ + { + "ItemCount":75, + "ItemType":"/Lotus/Types/Items/MiscItems/SteelEssence", + "ProductCategory":"MiscItems" + } + ], + "Bin":"BIN_0", + "QuantityMultiplier":1, + "Expiry":{ + "$date":{ + "$numberLong":"2051240400000" + } + }, + "PurchaseQuantityLimit":1, + "RotatedWeekly":true, + "AllowMultipurchase":false, + "Id":{ + "$oid":"66fd60b20ba592c4c95e9957" + } + }, + { + "StoreItem":"/Lotus/StoreItems/Upgrades/Mods/Shotgun/WeaponRecoilReductionMod", + "ItemPrices":[ + { + "ItemCount":35, + "ItemType":"/Lotus/Types/Items/MiscItems/SteelEssence", + "ProductCategory":"MiscItems" + } + ], + "Bin":"BIN_0", + "QuantityMultiplier":1, + "Expiry":{ + "$date":{ + "$numberLong":"2051240400000" + } + }, + "AllowMultipurchase":true, + "Id":{ + "$oid":"66fd60b20ba592c4c95e9958" + } + }, + { + "StoreItem":"/Lotus/StoreItems/Types/Items/ShipDecos/TeshinBobbleHead", + "ItemPrices":[ + { + "ItemCount":35, + "ItemType":"/Lotus/Types/Items/MiscItems/SteelEssence", + "ProductCategory":"MiscItems" + } + ], + "Bin":"BIN_0", + "QuantityMultiplier":1, + "Expiry":{ + "$date":{ + "$numberLong":"2051240400000" + } + }, + "AllowMultipurchase":true, + "Id":{ + "$oid":"66fd60b20ba592c4c95e9959" + } + }, + { + "StoreItem":"/Lotus/StoreItems/Types/StoreItems/AvatarImages/ImageGaussVED", + "ItemPrices":[ + { + "ItemCount":15, + "ItemType":"/Lotus/Types/Items/MiscItems/SteelEssence", + "ProductCategory":"MiscItems" + } + ], + "Bin":"BIN_0", + "QuantityMultiplier":1, + "Expiry":{ + "$date":{ + "$numberLong":"2051240400000" + } + }, + "AllowMultipurchase":true, + "Id":{ + "$oid":"66fd60b20ba592c4c95e995a" + } + }, + { + "StoreItem":"/Lotus/StoreItems/Types/StoreItems/AvatarImages/ImageGrendelVED", + "ItemPrices":[ + { + "ItemCount":15, + "ItemType":"/Lotus/Types/Items/MiscItems/SteelEssence", + "ProductCategory":"MiscItems" + } + ], + "Bin":"BIN_0", + "QuantityMultiplier":1, + "Expiry":{ + "$date":{ + "$numberLong":"2051240400000" + } + }, + "AllowMultipurchase":true, + "Id":{ + "$oid":"66fd60b20ba592c4c95e995b" + } + }, + { + "StoreItem":"/Lotus/StoreItems/Types/StoreItems/AvatarImages/AvatarImageProteaAction", + "ItemPrices":[ + { + "ItemCount":15, + "ItemType":"/Lotus/Types/Items/MiscItems/SteelEssence", + "ProductCategory":"MiscItems" + } + ], + "Bin":"BIN_0", + "QuantityMultiplier":1, + "Expiry":{ + "$date":{ + "$numberLong":"2051240400000" + } + }, + "AllowMultipurchase":true, + "Id":{ + "$oid":"66fd60b20ba592c4c95e995c" + } + }, + { + "StoreItem":"/Lotus/StoreItems/Types/Items/ShipDecos/TeaSet", + "ItemPrices":[ + { + "ItemCount":15, + "ItemType":"/Lotus/Types/Items/MiscItems/SteelEssence", + "ProductCategory":"MiscItems" + } + ], + "Bin":"BIN_0", + "QuantityMultiplier":1, + "Expiry":{ + "$date":{ + "$numberLong":"2051240400000" + } + }, + "AllowMultipurchase":true, + "Id":{ + "$oid":"66fd60b20ba592c4c95e995d" + } + }, + { + "StoreItem":"/Lotus/StoreItems/Types/StoreItems/AvatarImages/AvatarImageXakuAction", + "ItemPrices":[ + { + "ItemCount":15, + "ItemType":"/Lotus/Types/Items/MiscItems/SteelEssence", + "ProductCategory":"MiscItems" + } + ], + "Bin":"BIN_0", + "QuantityMultiplier":1, + "Expiry":{ + "$date":{ + "$numberLong":"2051240400000" + } + }, + "AllowMultipurchase":true, + "Id":{ + "$oid":"66fd60b20ba592c4c95e995e" + } + }, + { + "StoreItem":"/Lotus/StoreItems/Types/Items/MiscItems/RivenIdentifier", + "ItemPrices":[ + { + "ItemCount":20, + "ItemType":"/Lotus/Types/Items/MiscItems/SteelEssence", + "ProductCategory":"MiscItems" + } + ], + "Bin":"BIN_0", + "QuantityMultiplier":1, + "Expiry":{ + "$date":{ + "$numberLong":"2051240400000" + } + }, + "PurchaseQuantityLimit":1, + "RotatedWeekly":true, + "AllowMultipurchase":false, + "Id":{ + "$oid":"66fd60b20ba592c4c95e995f" + } + }, + { + "StoreItem":"/Lotus/StoreItems/Types/BoosterPacks/RandomSyndicateProjectionPack", + "ItemPrices":[ + { + "ItemCount":15, + "ItemType":"/Lotus/Types/Items/MiscItems/SteelEssence", + "ProductCategory":"MiscItems" + } + ], + "Bin":"BIN_0", + "QuantityMultiplier":1, + "Expiry":{ + "$date":{ + "$numberLong":"1736726400000" + } + }, + "PurchaseQuantityLimit":25, + "AllowMultipurchase":true, + "Id":{ + "$oid":"66fd60b20ba592c4c95e997c" + } + }, + { + "StoreItem":"/Lotus/StoreItems/Types/Items/MiscItems/Kuva", + "ItemPrices":[ + { + "ItemCount":15, + "ItemType":"/Lotus/Types/Items/MiscItems/SteelEssence", + "ProductCategory":"MiscItems" + } + ], + "Bin":"BIN_0", + "QuantityMultiplier":10000, + "Expiry":{ + "$date":{ + "$numberLong":"1736726400000" + } + }, + "PurchaseQuantityLimit":25, + "AllowMultipurchase":true, + "Id":{ + "$oid":"66fd60b20ba592c4c95e997d" + } + } + ], + "PropertyTextHash":"0A0F20AFA748FBEE490510DBF5A33A0D", + "Expiry":{ + "$date":{ + "$numberLong":"1736726400000" + } + } + } +} \ No newline at end of file -- 2.47.2 From 05fd3c4cecf671d43938a9f5698bed072a4fc6e5 Mon Sep 17 00:00:00 2001 From: Sainan Date: Mon, 6 Jan 2025 05:26:37 +0100 Subject: [PATCH 18/18] chore: some notes in inventoryTypes --- src/types/inventoryTypes/inventoryTypes.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/types/inventoryTypes/inventoryTypes.ts b/src/types/inventoryTypes/inventoryTypes.ts index c453206d..81d12bff 100644 --- a/src/types/inventoryTypes/inventoryTypes.ts +++ b/src/types/inventoryTypes/inventoryTypes.ts @@ -102,7 +102,8 @@ export type TSolarMapRegion = | "Uranus" | "Venus" | "Void" - | "SolarMapDeimosName"; + | "SolarMapDeimosName" + | "1999MapName"; //TODO: perhaps split response and database into their own files @@ -727,6 +728,8 @@ export interface IPendingRecipe { ItemType: string; CompletionDate: Date; ItemId: IOid; + TargetItemId?: string; // likely related to liches + TargetFingerprint?: string; // likely related to liches } export interface IPendingTrade { -- 2.47.2