Google Ads Scraper Pro beta avatar
Google Ads Scraper Pro beta

Pricing

Pay per usage

Go to Store
Google Ads Scraper Pro beta

Google Ads Scraper Pro beta

Developed by

Abdlhakim hefaia

Maintained by Community

Google Ads Scraper beta

5.0 (3)

Pricing

Pay per usage

3

Total users

1

Monthly users

1

Runs succeeded

>99%

Last modified

3 days ago

.actor/Dockerfile

1# Specify the base Docker image. You can read more about
2# the available images at https://docs.apify.com/sdk/js/docs/guides/docker-images
3# You can also use any other image from Docker Hub.
4FROM apify/actor-node:20
5
6# Check preinstalled packages
7RUN npm ls crawlee apify puppeteer playwright
8
9# Copy just package.json and package-lock.json
10# to speed up the build using Docker layer cache.
11COPY package*.json ./
12
13# Install NPM packages, skip optional and development dependencies to
14# keep the image small. Avoid logging too much and print the dependency
15# tree for debugging
16RUN npm --quiet set progress=false \
17    && npm install --omit=dev --omit=optional \
18    && echo "Installed NPM packages:" \
19    && (npm list --omit=dev --all || true) \
20    && echo "Node.js version:" \
21    && node --version \
22    && echo "NPM version:" \
23    && npm --version \
24    && rm -r ~/.npm
25
26# Next, copy the remaining files and directories with the source code.
27# Since we do this after NPM install, quick build will be really fast
28# for most source file changes.
29COPY . ./
30
31
32# Run the image.
33CMD npm start --silent

.actor/actor.json

1{
2    "actorSpecification": 1,
3    "name": "my-actor-2",
4    "title": "Google Ads Transparency Scraper",
5    "description": "Crawlee and Cheerio project in javascript.",
6    "version": "0.0",
7    "meta": {
8        "templateId": "js-crawlee-cheerio"
9    },
10    "input": "./input_schema.json",
11    "dockerfile": "./Dockerfile",
12    "readme": "./README.md",
13    "storages": {
14        "dataset": {
15            "actorSpecification": 1,
16            "title": "Results",
17            "views": {
18                "results": {
19                "title": "results to scan",
20                "transformation": {
21                    "fields": ["advertiserId", "creativeId", "format", "previewUrls", "creativeRegions", "adTransparencyUrl", "regionStats"]
22                },
23                "display": {
24                    "component": "table",
25                    "properties": {
26                        "advertiserId": {
27                            "label": "advertiser Id",
28                            "format": "text"
29                        },
30                        "creativeId": {
31                            "label": "creative Id",
32                            "format": "text"
33                        },
34                        "format": {
35                            "label": "format",
36                            "format": "text"
37                        },
38                        "previewUrls": {
39                            "label": "previewUrls",
40                            "format": "text"
41                        },
42                        "creativeRegions": {
43                            "label": "creative Regions",
44                            "format": "text"
45                        },
46                        "adTransparencyUrl": {
47                            "label": "adTransparency Url",
48                            "format": "link"
49                        },
50                        "regionStats": {
51                            "label": "region Stats",
52                            "format": "text"
53                        }
54                }
55                }
56            }
57        }
58    }
59}
60}

.actor/input_schema.json

1{
2    "title": "Ad Search Configuration",
3    "type": "object",
4    "schemaVersion": 1,
5    "properties": {
6        "Use_URL_Filter": {
7            "title": "Use parameter URL as a filter",
8            "type": "boolean",
9            "description": "Debug messages will be included in the log.",
10            "default": true,
11            "groupCaption": "Options",
12            "groupDescription": "Various options for this Actor"
13        },
14        "isPolitical": {
15            "title": "isPolitical",
16            "type": "boolean",
17            "description": "Debug messages will be included in the log.",
18            "default": true,
19            "groupCaption": "Options",
20            "groupDescription": "Various options for this Actor"
21        },
22        "keyword_domain_advertiserid": {
23            "title": "Search Keywords",
24            "type": "array",
25            "description": "Enter one or more keywords to search for relevant ads.",
26            "editor": "stringList",
27            "default":
28            [
29                "AR05789404224659914753",
30                "https://adstransparency.google.com/advertiser/AR05789404224659914753?region=US&topic=political&preset-date=Last+7+days&format=VIDEO&platform=YOUTUBE"
31            ]
32        },
33        "limitResults": {
34            "title": "limit Results",
35            "type": "integer",
36            "description": "Specify the maximum number of unique domains to retrieve.",
37            "editor": "number",
38            "default": 3
39
40        },
41        "maxDomains": {
42            "title": "Maximum Domains",
43            "type": "integer",
44            "description": "Specify the maximum number of unique domains to retrieve.",
45            "default": 0,
46            "editor": "number"
47        },
48        "maxAdvertisers": {
49            "title": "Maximum Advertisers",
50            "type": "integer",
51            "description": "Set the maximum number of advertisers to fetch results from.",
52            "default": 10,
53            "editor": "number"
54        },
55        "platform": {
56            "title": "",
57            "type": "string",
58            "description": "",
59            "editor": "select",
60            "default": "0",
61            "enum": ["0", "2", "1", "4", "3", "5"],
62            "enumTitles": ["All platforms", "Google Maps", "Google Play", "Google Shopping", "Google Search", "YouTube"]
63        },
64        "format": {
65            "title": "Ad Format",
66            "type": "string",
67            "description": "Select the preferred ad format to filter results.",
68            "editor": "select",
69            "default": "0",
70            "enum": ["0", "1", "2", "3"],
71            "enumTitles": ["All formats", "Text", "Image", "Video"]
72        },
73        "presetDate": {
74            "title": "Date Range",
75            "type": "string",
76            "description": "Select a predefined date range for filtering ads.",
77            "editor": "select",
78            "default": "0",
79            "enum": ["0", "1", "7", "30", "-1"],
80            "enumTitles": ["Today", "Yesterday", "Last 7 days", "Last 30 days", "Any time"]
81        },
82        "startDate": {
83            "title": "Start Date",
84            "type": "string",
85            "description": "Specify a custom start date for filtering ads (YYYYMMDD).",
86            "editor": "datepicker",
87            "default": "2024-01-01"
88
89        },
90        "endDate": {
91            "title": "End Date",
92            "type": "string",
93            "description": "Specify a custom end date for filtering ads (YYYYMMDD).",
94            "editor": "datepicker"
95        },
96        "region": {
97            "title": "Target Region",
98            "type": "string",
99            "description": "Select a specific country/region to filter ads.",
100            "editor": "select",
101            "enum": [
102                "Albania",
103                "Algeria",
104                "American Samoa",
105                "Andorra",
106                "Angola",
107                "Antarctica",
108                "Antigua and Barbuda",
109                "Argentina",
110                "Armenia",
111                "Australia",
112                "Austria",
113                "Azerbaijan",
114                "Bahrain",
115                "Bangladesh",
116                "Barbados",
117                "Belarus",
118                "Belgium",
119                "Belize",
120                "Benin",
121                "Bhutan",
122                "Bolivia",
123                "Bosnia and Herzegovina",
124                "Botswana",
125                "Brazil",
126                "Brunei",
127                "Bulgaria",
128                "Burkina Faso",
129                "Burundi",
130                "Cambodia",
131                "Cameroon",
132                "Canada",
133                "Cabo Verde",
134                "Caribbean Netherlands",
135                "Central African Republic",
136                "Chad",
137                "Chile",
138                "China",
139                "Christmas Island",
140                "Cocos (Keeling) Islands",
141                "Colombia",
142                "Comoros",
143                "Cook Islands",
144                "Costa Rica",
145                "Cote d'Ivoire",
146                "Croatia",
147                "Curacao",
148                "Cyprus",
149                "Czechia",
150                "Democratic Republic of the Congo",
151                "Denmark",
152                "Djibouti",
153                "Dominica",
154                "Dominican Republic",
155                "Ecuador",
156                "Egypt",
157                "El Salvador",
158                "Equatorial Guinea",
159                "Eritrea",
160                "Estonia",
161                "Eswatini",
162                "Ethiopia",
163                "Micronesia",
164                "Fiji",
165                "Finland",
166                "France",
167                "French Polynesia",
168                "French Southern and Antarctic Lands",
169                "Gabon",
170                "Georgia",
171                "Germany",
172                "Ghana",
173                "Greece",
174                "Grenada",
175                "Guam",
176                "Guatemala",
177                "Guernsey",
178                "Guinea",
179                "Guinea-Bissau",
180                "Guyana",
181                "Haiti",
182                "Heard Island and McDonald Islands",
183                "Honduras",
184                "Hungary",
185                "Iceland",
186                "India",
187                "Indonesia",
188                "Iraq",
189                "Ireland",
190                "Israel",
191                "Italy",
192                "Jamaica",
193                "Japan",
194                "Jersey",
195                "Jordan",
196                "Kazakhstan",
197                "Kenya",
198                "Kiribati",
199                "Kuwait",
200                "Kyrgyzstan",
201                "Laos",
202                "Latvia",
203                "Lebanon",
204                "Lesotho",
205                "Liberia",
206                "Libya",
207                "Liechtenstein",
208                "Lithuania",
209                "Luxembourg",
210                "Madagascar",
211                "Malawi",
212                "Malaysia",
213                "Maldives",
214                "Malta",
215                "Mali",
216                "Marshall Islands",
217                "Mauritania",
218                "Mauritius",
219                "Mexico",
220                "Moldova",
221                "Monaco",
222                "Mongolia",
223                "Montenegro",
224                "Morocco",
225                "Mozambique",
226                "Myanmar (Burma)",
227                "Namibia",
228                "Nauru",
229                "Nepal",
230                "Netherlands",
231                "New Caledonia",
232                "New Zealand",
233                "Nicaragua",
234                "Niger",
235                "Nigeria",
236                "Niue",
237                "Norfolk Island",
238                "North Macedonia",
239                "Northern Mariana Islands",
240                "Norway",
241                "Oman",
242                "Pakistan",
243                "Palau",
244                "Panama",
245                "Papua New Guinea",
246                "Paraguay",
247                "Peru",
248                "Philippines",
249                "Pitcairn Islands",
250                "Poland",
251                "Portugal",
252                "Qatar",
253                "Republic of the Congo",
254                "Romania",
255                "Rwanda",
256                "Saint Helena, Ascension and Tristan da Cunha",
257                "Saint Kitts and Nevis",
258                "Saint Lucia",
259                "Saint Pierre and Miquelon",
260                "Saint Vincent and the Grenadines",
261                "Samoa",
262                "San Marino",
263                "Sao Tome and Principe",
264                "Saudi Arabia",
265                "Senegal",
266                "Seychelles",
267                "Sierra Leone",
268                "Singapore",
269                "Sint Maarten",
270                "Slovakia",
271                "Slovenia",
272                "Solomon Islands",
273                "Somalia",
274                "South Africa",
275                "South Georgia and the South Sandwich Islands",
276                "South Korea",
277                "Spain",
278                "Sri Lanka",
279                "Suriname",
280                "Switzerland",
281                "Sweden",
282                "Tajikistan",
283                "Tanzania",
284                "Thailand",
285                "The Bahamas",
286                "The Gambia",
287                "Timor-Leste",
288                "Togo",
289                "Tokelau",
290                "Tonga",
291                "Trinidad and Tobago",
292                "Tunisia",
293                "Turkiye",
294                "Turkmenistan",
295                "Tuvalu",
296                "Uganda",
297                "Ukraine",
298                "United Arab Emirates",
299                "United Kingdom",
300                "United States",
301                "Uruguay",
302                "Uzbekistan",
303                "Vanuatu",
304                "Vatican City",
305                "Venezuela",
306                "Vietnam",
307                "Yemen",
308                "Zambia",
309                "Zimbabwe",
310                "Bermuda",
311                "Bouvet Island",
312                "British Indian Ocean Territory",
313                "British Virgin Islands",
314                "Canary Islands",
315                "Cayman Islands",
316                "Taiwan",
317                "Mayotte",
318                "Faroe Islands",
319                "Falkland Islands (Islas Malvinas)",
320                "French Guiana",
321                "Palestine",
322                "Gibraltar",
323                "Greenland",
324                "Guadeloupe",
325                "Hong Kong",
326                "Isle of Man",
327                "Macao",
328                "Martinique",
329                "Montserrat",
330                "Aruba",
331                "Puerto Rico",
332                "Reunion",
333                "Anguilla",
334                "Western Sahara",
335                "Saint Martin",
336                "Svalbard and Jan Mayen",
337                "Turks and Caicos Islands",
338                "United States Minor Outlying Islands",
339                "U.S. Virgin Islands",
340                "Wallis and Futuna"
341            ],
342            "enumTitles": [
343                "Albania",
344                "Algeria",
345                "American Samoa",
346                "Andorra",
347                "Angola",
348                "Antarctica",
349                "Antigua and Barbuda",
350                "Argentina",
351                "Armenia",
352                "Australia",
353                "Austria",
354                "Azerbaijan",
355                "Bahrain",
356                "Bangladesh",
357                "Barbados",
358                "Belarus",
359                "Belgium",
360                "Belize",
361                "Benin",
362                "Bhutan",
363                "Bolivia",
364                "Bosnia and Herzegovina",
365                "Botswana",
366                "Brazil",
367                "Brunei",
368                "Bulgaria",
369                "Burkina Faso",
370                "Burundi",
371                "Cambodia",
372                "Cameroon",
373                "Canada",
374                "Cabo Verde",
375                "Caribbean Netherlands",
376                "Central African Republic",
377                "Chad",
378                "Chile",
379                "China",
380                "Christmas Island",
381                "Cocos (Keeling) Islands",
382                "Colombia",
383                "Comoros",
384                "Cook Islands",
385                "Costa Rica",
386                "Cote d'Ivoire",
387                "Croatia",
388                "Curacao",
389                "Cyprus",
390                "Czechia",
391                "Democratic Republic of the Congo",
392                "Denmark",
393                "Djibouti",
394                "Dominica",
395                "Dominican Republic",
396                "Ecuador",
397                "Egypt",
398                "El Salvador",
399                "Equatorial Guinea",
400                "Eritrea",
401                "Estonia",
402                "Eswatini",
403                "Ethiopia",
404                "Micronesia",
405                "Fiji",
406                "Finland",
407                "France",
408                "French Polynesia",
409                "French Southern and Antarctic Lands",
410                "Gabon",
411                "Georgia",
412                "Germany",
413                "Ghana",
414                "Greece",
415                "Grenada",
416                "Guam",
417                "Guatemala",
418                "Guernsey",
419                "Guinea",
420                "Guinea-Bissau",
421                "Guyana",
422                "Haiti",
423                "Heard Island and McDonald Islands",
424                "Honduras",
425                "Hungary",
426                "Iceland",
427                "India",
428                "Indonesia",
429                "Iraq",
430                "Ireland",
431                "Israel",
432                "Italy",
433                "Jamaica",
434                "Japan",
435                "Jersey",
436                "Jordan",
437                "Kazakhstan",
438                "Kenya",
439                "Kiribati",
440                "Kuwait",
441                "Kyrgyzstan",
442                "Laos",
443                "Latvia",
444                "Lebanon",
445                "Lesotho",
446                "Liberia",
447                "Libya",
448                "Liechtenstein",
449                "Lithuania",
450                "Luxembourg",
451                "Madagascar",
452                "Malawi",
453                "Malaysia",
454                "Maldives",
455                "Malta",
456                "Mali",
457                "Marshall Islands",
458                "Mauritania",
459                "Mauritius",
460                "Mexico",
461                "Moldova",
462                "Monaco",
463                "Mongolia",
464                "Montenegro",
465                "Morocco",
466                "Mozambique",
467                "Myanmar (Burma)",
468                "Namibia",
469                "Nauru",
470                "Nepal",
471                "Netherlands",
472                "New Caledonia",
473                "New Zealand",
474                "Nicaragua",
475                "Niger",
476                "Nigeria",
477                "Niue",
478                "Norfolk Island",
479                "North Macedonia",
480                "Northern Mariana Islands",
481                "Norway",
482                "Oman",
483                "Pakistan",
484                "Palau",
485                "Panama",
486                "Papua New Guinea",
487                "Paraguay",
488                "Peru",
489                "Philippines",
490                "Pitcairn Islands",
491                "Poland",
492                "Portugal",
493                "Qatar",
494                "Republic of the Congo",
495                "Romania",
496                "Rwanda",
497                "Saint Helena, Ascension and Tristan da Cunha",
498                "Saint Kitts and Nevis",
499                "Saint Lucia",
500                "Saint Pierre and Miquelon",
501                "Saint Vincent and the Grenadines",
502                "Samoa",
503                "San Marino",
504                "Sao Tome and Principe",
505                "Saudi Arabia",
506                "Senegal",
507                "Seychelles",
508                "Sierra Leone",
509                "Singapore",
510                "Sint Maarten",
511                "Slovakia",
512                "Slovenia",
513                "Solomon Islands",
514                "Somalia",
515                "South Africa",
516                "South Georgia and the South Sandwich Islands",
517                "South Korea",
518                "Spain",
519                "Sri Lanka",
520                "Suriname",
521                "Switzerland",
522                "Sweden",
523                "Tajikistan",
524                "Tanzania",
525                "Thailand",
526                "The Bahamas",
527                "The Gambia",
528                "Timor-Leste",
529                "Togo",
530                "Tokelau",
531                "Tonga",
532                "Trinidad and Tobago",
533                "Tunisia",
534                "Turkiye",
535                "Turkmenistan",
536                "Tuvalu",
537                "Uganda",
538                "Ukraine",
539                "United Arab Emirates",
540                "United Kingdom",
541                "United States",
542                "Uruguay",
543                "Uzbekistan",
544                "Vanuatu",
545                "Vatican City",
546                "Venezuela",
547                "Vietnam",
548                "Yemen",
549                "Zambia",
550                "Zimbabwe",
551                "Bermuda",
552                "Bouvet Island",
553                "British Indian Ocean Territory",
554                "British Virgin Islands",
555                "Canary Islands",
556                "Cayman Islands",
557                "Taiwan",
558                "Mayotte",
559                "Faroe Islands",
560                "Falkland Islands (Islas Malvinas)",
561                "French Guiana",
562                "Palestine",
563                "Gibraltar",
564                "Greenland",
565                "Guadeloupe",
566                "Hong Kong",
567                "Isle of Man",
568                "Macao",
569                "Martinique",
570                "Montserrat",
571                "Aruba",
572                "Puerto Rico",
573                "Reunion",
574                "Anguilla",
575                "Western Sahara",
576                "Saint Martin",
577                "Svalbard and Jan Mayen",
578                "Turks and Caicos Islands",
579                "United States Minor Outlying Islands",
580                "U.S. Virgin Islands",
581                "Wallis and Futuna"
582            ]
583        },
584        "proxyConfig": {
585            "sectionCaption": "Proxy Configuration",
586            "sectionDescription": "Configure proxy settings to use during the scan. Utilizing proxies can help you avoid IP bans, bypass WAF (Web Application Firewall) restrictions, and access specific geographical regions. This ensures smooth crawling across various environments and enhances the overall efficiency and reliability of your scanning activities.",
587            "title": "Proxy",
588            "type": "object",
589            "description": "Configure proxy settings to use during the scan. Utilizing proxies can help you avoid IP bans, bypass WAF (Web Application Firewall) restrictions, and access specific geographical regions. This ensures smooth crawling across various environments and enhances the overall efficiency and reliability of your scanning activities.",
590            "default": {"useApifyProxy": false},
591            "editor": "proxy"
592        }
593    }
594  }

src/fetchWithProxyRotation.js

1import { Actor } from 'apify';
2
3await Actor.init();
4
5// Load and parse input parameters
6const input = await Actor.getInput() ?? {};
7const { proxyConfig } = input;
8
9// Create a helper function to handle proxy rotation and retries
10export async function fetchWithProxyRotation(options, postData, maxRetries = 3) {
11    const { request } = await import('https');
12    let retryCount = 0;
13    let lastError = null;
14    let proxyConfiguration = null;
15    let useProxy = !!proxyConfig; // Check if proxyConfig is provided
16
17    if (useProxy) {
18        try {
19            proxyConfiguration = await Actor.createProxyConfiguration(proxyConfig);
20            if (!proxyConfiguration) {
21                console.warn("⚠️ Proxy configuration failed. Running without proxy.");
22                useProxy = false;
23            }
24        } catch (error) {
25            console.warn("⚠️ Failed to initialize proxy configuration. Running without proxy.");
26            useProxy = false;
27        }
28    }
29
30    while (retryCount < maxRetries) {
31        try {
32            let proxyAgent = null;
33            let proxyUrl = null;
34
35            if (useProxy && proxyConfiguration) {
36                try {
37                    proxyUrl = await proxyConfiguration.newUrl();
38                    if (!proxyUrl) {
39                        console.warn("⚠️ Failed to retrieve proxy URL. Continuing without a proxy.");
40                        useProxy = false;
41                    } else {
42                        const { HttpsProxyAgent } = await import('https-proxy-agent');
43                        proxyAgent = new HttpsProxyAgent(proxyUrl);
44                        console.log(`🔄 Attempt ${retryCount + 1}/${maxRetries} using proxy: ${proxyUrl.replace(/:[^:]*@/, ':****@')}`);
45                    }
46                } catch (error) {
47                    console.warn("⚠️ Error getting new proxy URL. Running without proxy.");
48                    useProxy = false;
49                }
50            } else {
51                console.log(`🔄 Attempt ${retryCount + 1}/${maxRetries} without a proxy.`);
52            }
53
54            // Update options with proxy settings if available
55            const proxyOptions = {
56                ...options,
57                agent: proxyAgent || undefined
58            };
59
60            // Make the request with the current proxy
61            const response = await new Promise((resolve, reject) => {
62                const req = request(proxyOptions, (res) => {
63                    let data = "";
64
65                    res.on("data", (chunk) => { data += chunk; });
66
67                    res.on("end", () => {
68                        // Check for blocks or CAPTCHA
69                        if (res.statusCode >= 400) {
70                            reject(new Error(`HTTP ${res.statusCode}: ${data}`));
71                            return;
72                        }
73
74                        if (data.includes("<title>302 Moved</title>") || data.includes("google.com/sorry")) {
75                            reject(new Error("CAPTCHA detected or request blocked by Google."));
76                            return;
77                        }
78
79                        resolve({
80                            data,
81                            headers: res.headers, // ✅ Capturing response headers
82                        });
83                    });
84                });
85
86                req.on("error", reject);
87
88                if (postData) {
89                    req.write(postData);
90                }
91
92                req.end();
93            });
94
95            return response;
96
97        } catch (error) {
98            lastError = error;
99            console.error(`❌ Request failed (attempt ${retryCount + 1}/${maxRetries}): ${error.message}`);
100
101            // Only retry if it's a block or CAPTCHA
102            if (error.message.includes("CAPTCHA") ||
103                error.message.includes("sorry") ||
104                error.message.includes("302 Moved") ||
105                error.message.includes("429") ||
106                error.message.includes("403")) {
107
108                retryCount++;
109
110                // Add exponential backoff
111                const waitTime = 2000 * Math.pow(2, retryCount - 1);
112                console.log(`⏱️ Waiting ${waitTime / 1000} seconds before retry...`);
113                await new Promise(resolve => setTimeout(resolve, waitTime));
114
115            } else {
116                // For other errors, don't retry
117                throw error;
118            }
119        }
120    }
121
122    // If we've exhausted all retries
123    throw lastError || new Error('Maximum retries reached');
124}

src/filterAdvertiser.js

1import { getDateRange } from './getDateRange.js';
2import { parseAdvertiserUrl } from './parseAdvertiserUrl.js';
3
4
5export const filterAdvertiser = async (kw, Use_URL_Filter, maxAdvertisers, maxDomains, RegionCode, format, platform, presetDate, startDate, endDate, limitResults,domainExists) => {
6    const parsedData = parseAdvertiserUrl(kw);
7    try {
8        const filterData = Use_URL_Filter
9            ? {
10                advertiserId_OR_kw: parsedData.advertiserId_domain,
11                maxDomains,
12                maxAdvertisers,
13                RegionCode: parsedData.RegionCode,
14                format: parseInt(parsedData.format),
15                dateRange: getDateRange(parsedData.presetDate, parsedData.startDate, parsedData.endDate),
16                platform: parseInt(parsedData.platform),
17                startDate: parsedData.startDate,
18                endDate: parsedData.endDate,
19                limitResults,
20                domainExists : parsedData.domainExists
21            }
22            : {
23                advertiserId_OR_kw: parsedData.advertiserId_domain,
24                maxDomains,
25                maxAdvertisers,
26                RegionCode,
27                format: parseInt(format),
28                platform: parseInt(platform),
29                dateRange: getDateRange(presetDate, startDate, endDate),
30                startDate,
31                endDate,
32                limitResults,
33                domainExists
34            };
35            console.log(Use_URL_Filter ? 'If Use_URL_Filter is true, override input filter:' : 'Use Actor.getInput() filtering:', filterData);
36            return {
37                advertiserId_OR_kw: parsedData.advertiserId_domain,
38                maxAdvertisers,
39                maxDomains,
40                RegionCode: Use_URL_Filter ? parsedData.RegionCode : RegionCode,
41                format: parseInt(Use_URL_Filter ? parsedData.format : format),
42                dateRange: getDateRange(
43                    Use_URL_Filter ? parsedData.presetDate : presetDate,
44                    Use_URL_Filter ? parsedData.startDate : startDate,
45                    Use_URL_Filter ? parsedData.endDate : endDate
46                ),
47                platform: parseInt(Use_URL_Filter ? parsedData.platform : platform),
48                limitResults,
49                domainExists: parsedData.domainExists
50            };
51    } catch (error) {
52        console.error(`❌ Error processing advertiser ID "${parsedData.advertiserId_domain}":`, error);
53    }
54};

src/getDateRange.js

1import dayjs from 'dayjs';
2
3function validateCustomDates(Start_Date, End_Date) {
4    const isValidDate = (date) => /^\d{4}-\d{2}-\d{2}$/.test(date);
5
6    let fromDate = isValidDate(Start_Date) ? parseInt(Start_Date.replace(/-/g, ""), 10) : null;
7    let toDate = isValidDate(End_Date) ? parseInt(End_Date.replace(/-/g, ""), 10) : null;
8
9    if (fromDate && toDate) {
10        if (fromDate > toDate) {
11            console.error("❌ Error: Start_Date cannot be after End_Date.");
12            return null; // Do not return error, let it fall back to default
13        }
14        return { fromDate, toDate, anyTime: false, dateRangeLabel: "Custom Range" };
15    }
16
17    if ((Start_Date && !isValidDate(Start_Date)) || (End_Date && !isValidDate(End_Date))) {
18        console.error("❌ Error: Invalid date format. Expected YYYY-MM-DD. Falling back to default values.");
19        return null; // Do not return error, let it fall back to default
20    }
21
22    return null;
23}
24
25export function getDateRange(days, Start_Date, End_Date) {
26    let customDateRange = validateCustomDates(Start_Date, End_Date);
27    if (customDateRange) return customDateRange;
28
29    let yesterday = parseInt(dayjs().subtract(1, "day").format("YYYYMMDD"), 10);
30    let defaultToDate = yesterday;
31    let defaultFromDate;
32    let anyTime = false;
33    let dateRangeLabel = "";
34
35    if (days === "0") {
36        defaultFromDate = parseInt(dayjs().subtract(2, "day").format("YYYYMMDD"), 10);
37        dateRangeLabel = "Today";
38    } else if (days === "1") {
39        defaultFromDate = parseInt(dayjs().subtract(2, "day").format("YYYYMMDD"), 10);
40        dateRangeLabel = "Yesterday";
41    } else if (days === "7") {
42        defaultFromDate = parseInt(dayjs().subtract(8, "day").format("YYYYMMDD"), 10);
43        dateRangeLabel = "Last 7 days";
44    } else if (days === "30") {
45        defaultFromDate = parseInt(dayjs().subtract(31, "day").format("YYYYMMDD"), 10);
46        dateRangeLabel = "Last 30 days";
47    } else if (days === "-1") {
48        dateRangeLabel = "Any time";
49        return { anyTime: true, dateRangeLabel };
50    } else {
51        return null;
52    }
53
54    return { fromDate: defaultFromDate, toDate: defaultToDate, anyTime, dateRangeLabel };
55}

src/get_creative_details.js

1import https from "https";
2import { processAds } from "./processAds.js";  // Import function
3import { fetchWithProxyRotation } from "./fetchWithProxyRotation.js";  // Import function
4/**
5 * Function to get creative details by ID
6 * @param {string} creativeId - The creative ID to fetch details for
7 * @param {string} advertiserId - The advertiser ID associated with the creative
8 * @param {number} regionCode - The region code (default is worldwide: 2012)
9 * @returns {Promise<Object>} - The creative details
10 */
11export async function getCreativeDetails(creativeId, advertiserId, regionCode = 2012) {
12    const requestPayload = {
13        "1": advertiserId,
14        "2": creativeId,
15        "5": {
16            "1": 1, // Page number
17            "2": 30, // Page size
18            "3": 2012
19        }
20    };
21
22    const postData = new URLSearchParams({
23        "f.req": JSON.stringify(requestPayload)
24    }).toString();
25
26    const options = {
27        hostname: "adstransparency.google.com",
28        path: "/anji/_/rpc/LookupService/GetCreativeById?authuser=0",
29        method: "POST",
30        headers: {
31            "Content-Type": "application/x-www-form-urlencoded",
32            "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/133.0.0.0 Safari/537.36",
33            "Connection": "keep-alive",
34            "Content-Length": Buffer.byteLength(postData),
35        }
36    };
37
38    try {
39        // Use our new proxy rotation function
40        const response = await fetchWithProxyRotation(options, postData, 5); // Try up to 5 times
41
42        try {
43            const parsedResponse = JSON.parse(response.data);
44            console.log(`✅ Successfully fetched creative ID: ${creativeId}`);
45            return parsedResponse;
46        } catch (error) {
47            console.error("❌ JSON Parsing Error:", error);
48            throw error;
49        }
50
51    } catch (error) {
52        console.error(`❌ Failed to fetch creative ID ${creativeId} after multiple attempts:`, error.message);
53        throw error;
54    }
55}
56
57/**
58 * Function to process each ad as soon as it's fetched
59 * @param {Array<Object>} allResults - The array of results from searchForAds
60 * @param {number} regionCode - The region code (default is worldwide: 2012)
61 */
62
63async function sleep(ms) {
64    return new Promise(resolve => setTimeout(resolve, ms));
65}
66
67export async function processCreativeDetails(allResults, regionCode = 2012) {
68    for (const result of allResults) {
69        if (result["2"]) {
70            try {
71                const creativeDetail = await getCreativeDetails(result["2"], result["1"], regionCode);
72                console.log(`✅ Processed creative: ${result["2"]}`);
73
74                // Process each creative detail as soon as it's fetched
75                processAds([creativeDetail]);
76
77                // Optional delay to avoid detection (increase if needed)
78                //await sleep(300); // 3 seconds delay
79
80            } catch (error) {
81                console.error(`❌ Failed to process creative: ${result["2"]}`, error);
82            }
83        }
84    }
85}

src/main.js

1const startTime = performance.now();
2import { Actor } from 'apify';
3import { Dataset } from 'crawlee';
4import { getDateRange } from './getDateRange.js';
5import { parseAdvertiserUrl } from './parseAdvertiserUrl.js';
6import { searchForAdsList } from './search_for_an_ads.js';
7import { searchForPoliticalAdsList } from './search_for_an_political_ads.js';
8import { filterAdvertiser } from './filterAdvertiser.js';
9import fs from 'fs';
10
11await Actor.init();
12
13// Load and parse input parameters
14const input = await Actor.getInput() ?? {};
15const {
16    keyword_domain_advertiserid,
17    maxAdvertisers,
18    maxDomains,
19    region,
20    format,
21    platform,
22    presetDate,
23    startDate,
24    endDate,
25    Use_URL_Filter,
26    limitResults,
27    isPolitical
28} = input;
29
30// Load regions.json and resolve region code
31const regionMapping = JSON.parse(fs.readFileSync("src/regions.json", "utf-8"));
32const regionEntry = regionMapping.regions.region.find(r => r["4"] === region);
33const RegionCode = regionEntry ? regionEntry["1"] : undefined;
34
35// Determine date range
36const dateRange = getDateRange(presetDate, startDate, endDate);
37
38// Function to detect URLs
39const isGenericUrl = (kw) => /^https?:\/\//.test(kw);
40const advertiserIdPattern = (kw) => /^AR\d+$/.test(kw);
41
42const isAdvertiserUrl = /https:\/\/adstransparency\.google\.com\/advertiser\/(AR\d+)/;
43const isDomainUrl = /[?&]domain=([^&]+)/;
44const isTopic = /[?&]topic=([^&]+)/;
45
46let domainExists
47
48const processKeyword = async (kw) => {
49    try {
50        let filterData;
51
52        if (kw.match(isTopic) || isPolitical && !kw.match(isAdvertiserUrl) && !kw.match(isDomainUrl)) {
53            kw = kw.replace(/\s+/g, "+");  // Replace spaces with '+'
54            console.log(`✅✅ Political : ${kw}`);
55            const parsedData = parseAdvertiserUrl(kw);
56
57            const filterData =  {
58                adveritserId_OR_kw: parsedData.advertiserId_domain,
59                maxAdvertisers,
60                RegionCode: parsedData.RegionCode,
61                format: parseInt(parsedData.format),
62                platform: parseInt(parsedData.platform),
63                dateRange: getDateRange(parsedData.presetDate, parsedData.startDate, parsedData.endDate),
64                startDate: parsedData.startDate,
65                endDate: parsedData.endDate,
66                limitResults,
67            }
68            console.log("Filter Data:", JSON.stringify(filterData, null, 2));
69            let adsData = await searchForPoliticalAdsList(
70                parsedData.advertiserId_domain,
71                maxAdvertisers,
72                parsedData.RegionCode,
73                parseInt(parsedData.format),
74                getDateRange(parsedData.presetDate, parsedData.startDate, parsedData.endDate),
75                parseInt(parsedData.platform),
76                limitResults
77            );
78
79            await Dataset.pushData({ advertiserId_OR_kw: kw, adsData });
80
81        }
82        else if (kw.match(isAdvertiserUrl) || kw.match(isDomainUrl)) {
83            const advertiserMatch = kw.match(isAdvertiserUrl);
84            const domainMatch = kw.match(isDomainUrl);
85            const parsedData = parseAdvertiserUrl(kw);
86
87            if (advertiserMatch && domainMatch) {
88                console.error(`❌ Invalid URL: Cannot contain both advertiser ID and domain -> ${kw}`);
89                return; // Skip processing this invalid URL
90            }
91            if (advertiserMatch) {
92                // Advertiser ID detected
93                if (!parsedData) throw new Error("Invalid advertiser URL");
94                await filterAdvertiser(kw, Use_URL_Filter, maxAdvertisers, maxDomains, RegionCode, format, platform, presetDate, startDate, endDate, limitResults, domainExists);
95            } else if (domainMatch) {
96                // Domain detected
97                console.log('🔹 Processing Domain:', parsedData.advertiserId_domain,);
98                let Filter_Advertiser = await filterAdvertiser(kw, Use_URL_Filter, maxAdvertisers, maxDomains, RegionCode, format, platform, presetDate, startDate, endDate, limitResults, domainExists);
99                //console.log(`Filter_Advertiser ${JSON.stringify(Filter_Advertiser, null, 2)}`);
100                let adsData = await searchForAdsList(
101                    parsedData.advertiserId_domain,
102                    maxAdvertisers,
103                    maxDomains,
104                    Filter_Advertiser.RegionCode,
105                    Filter_Advertiser.format,
106                    Filter_Advertiser.dateRange,
107                    Filter_Advertiser.platform,
108                    limitResults,
109                    Filter_Advertiser.domainExists
110                );
111
112                //console.log(`adsData ${JSON.stringify(adsData, null, 2)}`);
113
114            }
115        }
116        else {
117            // Handle generic keywords (not URLs)
118            if (isGenericUrl(kw)) console.warn(`⚠️ Detected a generic URL: ${kw}.\nTreating as a regular keyword.`);
119            kw = kw.replace(/\s+/g, "+");  // Replace spaces with '+'
120            if (advertiserIdPattern(kw)) console.log(`✅ Advertiser ID: ${kw}`);
121            filterData = {
122                advertiserId_OR_kw: kw,
123                maxDomains,
124                maxAdvertisers,
125                RegionCode,
126                format: parseInt(format),
127                platform: parseInt(platform),
128                dateRange,
129                startDate,
130                endDate
131            };
132
133            let adsData = await searchForAdsList(
134                kw,
135                maxAdvertisers,
136                maxDomains,
137                RegionCode,
138                parseInt(format),
139                getDateRange(presetDate, startDate, endDate),
140                parseInt(platform),
141                limitResults
142            );
143            //await Dataset.pushData({ advertiserId_OR_kw0: kw, adsData });
144        }
145    } catch (error) {
146        console.error(`❌ Error processing "${kw}":`, error);
147    }
148};
149
150
151// Process all queries in parallel
152await Promise.all(keyword_domain_advertiserid.map(processKeyword));
153
154const endTime = performance.now();
155console.log(`⏳ Execution time: ${(endTime - startTime).toFixed(2)} ms`);
156await Actor.exit();

src/parseAdvertiserUrl.js

1import fs from "fs";
2
3export function parseAdvertiserUrl(url) {
4    const advertiserPattern = /https:\/\/adstransparency\.google\.com\/advertiser\/(AR\d+)/;
5    const match = url.match(advertiserPattern);
6
7    const urlParams = new URL(url).searchParams;
8    const advertiserId = match ? match[1] : null;
9    const domain = urlParams.has("domain") ? urlParams.get("domain") : null;
10
11    // Ensure that only one of advertiserId or domain exists
12    if (advertiserId && domain) {
13        return null; // Invalid URL structure
14    }
15
16    // Determine advertiserId_domain
17    const advertiserId_domain = advertiserId || domain || null;
18
19    // Extract query parameters
20    const region = urlParams.get("region") || null;
21    const format = urlParams.get("format") || null;
22    const presetDate = urlParams.get("preset-date")?.replace(/ /g, "+") || null;
23    const startDate = urlParams.get("start-date") || null;
24    const endDate = urlParams.get("end-date") || null;
25    const platform = urlParams.get("platform") || null;
26
27    // Load regions.json and resolve region code
28    const regionMapping = JSON.parse(fs.readFileSync("src/regions.json", "utf-8"));
29    const regionEntry = regionMapping.regions.region.find(r => r["3"] === region);
30    const RegionCode = regionEntry ? regionEntry["1"] : undefined;
31
32    // Platform Mapping
33    const platformMap = {
34        "MAPS": "2",
35        "PLAY": "1",
36        "SHOPPING": "4",
37        "SEARCH": "3",
38        "YOUTUBE": "5"
39    };
40
41    // Format Mapping
42    const formatMap = {
43        "VIDEO": "3",
44        "TEXT": "1",
45        "IMAGE": "2"
46    };
47
48    // Preset Date Mapping
49    const presetDateMap = {
50        "Today": "0",
51        "Yesterday": "1",
52        "Last+7+days": "7",
53        "Last+30+days": "30"
54    };
55
56    return {
57        advertiserId_domain,
58        domainExists: !!domain, // ✅ Returns true if domain exists, false otherwise
59        RegionCode,
60        format: formatMap[format] || "0",  // Default to "0" (All formats)
61        presetDate: presetDateMap[presetDate] || "-1",  // Default to "-1" (Any Time)
62        startDate,
63        endDate,
64        platform: platformMap[platform] || "0" // Default to "0" (All platforms)
65    };
66}

src/processAds.js

1import fs from "fs";
2import { Dataset } from 'crawlee';
3
4// Load the region mapping file
5let regionMapping;
6try {
7    regionMapping = JSON.parse(fs.readFileSync("src/regions.json", "utf-8"));
8} catch (error) {
9    console.error("Error loading region mapping file:", error);
10    process.exit(1);
11}
12
13// Platform mapping for `"8"` field (Google services)
14const platformMapping = {
15    1: "Google Play",
16    2: "Google Maps",
17    3: "Google Search",
18    4: "Google Shopping",
19    5: "YouTube"
20};
21
22// Format mapping for `"1": {"8": ...}`
23const formatMapping = {
24    1: "TEXT",
25    2: "IMAGE",
26    3: "VIDEO"
27};
28
29// Convert region codes to readable names
30function getRegionName(regionCode) {
31    const regionEntry = regionMapping.regions.region.find(r => r["1"] === regionCode);
32    return regionEntry
33        ? { regionCode: regionEntry["3"], regionName: regionEntry["4"] }  // "3" = Country Code, "4" = Country Name
34        : { regionCode: "Unknown", regionName: "N/A" };
35}
36
37export async function processAds(allResults) {
38    if (!allResults || allResults.length === 0) {
39        console.log("No ad data available to process.");
40        return [];
41    }
42
43    const formattedAds = allResults.map(ad => {
44        const rawRegions = ad?.["1"]?.["17"];
45
46        const regionStats = Array.isArray(rawRegions)
47            ? rawRegions.map(region => {
48                if (!region || typeof region !== "object") return {};  // Prevent errors on missing data
49
50                const { regionCode, regionName } = getRegionName(region["1"]);
51
52                // Extract platform stats from "8"
53                const platformStats = Array.isArray(region["8"])
54                    ? region["8"].map(platform => ({
55                        surfaceName: platformMapping[platform["1"]] || "Unknown Platform",
56                        impressions: {
57                            lowerBound: platform["2"] ?? 0,
58                            upperBound: platform["3"] ?? 0
59                        }
60                    }))
61                    : [];
62
63                return {
64                    regionNumber: region["1"] ?? "Unknown",
65                    regionCode,
66                    regionName,
67                    firstShown: region.hasOwnProperty("4") ? region["4"] : "Unknown",
68                    lastShown: region.hasOwnProperty("5") ? region["5"] : "Unknown",
69                    impressions: {
70                        lowerBound: region["2"] ?? 0,
71                        upperBound: region["3"] ?? 0
72                    },
73                    platformStats
74                };
75            })
76            : [];
77
78        // Get format from `ad["1"]["8"]`
79        const formatType = formatMapping[ad?.["1"]?.["8"]] || "UNKNOWN";
80
81        // Extract preview URLs from both possible locations
82        const previewUrls = Array.isArray(ad?.["1"]?.["5"])
83            ? ad["1"]["5"].map(item =>
84                item?.["1"]?.["4"] ??   // Case 1: "1": { "4": "URL" }
85                item?.["3"]?.["2"] ??   // Case 2: "3": { "2": "URL" }
86                "Unknown"
87            )
88            : [];
89
90        // Construct Ad Transparency URL
91        const advertiserId = ad?.["1"]?.["1"] ?? "Unknown";
92        const creativeId = ad?.["1"]?.["2"] ?? "Unknown";
93        const adTransparencyUrl =
94            advertiserId !== "Unknown" && creativeId !== "Unknown"
95                ? `https://adstransparency.google.com/advertiser/${advertiserId}/creative/${creativeId}?region=anywhere`
96                : "Unknown";
97
98        return {
99            advertiserId,
100            creativeId,
101            creativeRegions: [...new Set(regionStats.map(r => r.regionName))],  // Unique region names
102            adTransparencyUrl, // Added ad transparency link
103            previewUrls,  // Now properly extracting URLs
104            format: formatType,  // Updated format assignment
105            regionStats
106        };
107    });
108
109    let advertiserId = formattedAds[0].advertiserId
110    let creativeId = formattedAds[0].creativeId
111    let creativeRegions = formattedAds[0].creativeRegions
112    let adTransparencyUrl = formattedAds[0].adTransparencyUrl
113    let previewUrls = formattedAds[0].previewUrls
114    let format = formattedAds[0].format
115    let regionStats = formattedAds[0].regionStats
116
117    console.log(`✅ Processed ${formattedAds.length} ads.`);
118    return await Dataset.pushData({
119        advertiserId,
120        creativeId,
121        creativeRegions,
122        adTransparencyUrl,
123        previewUrls,
124        format,
125        regionStats
126    });
127}

src/regions.json

1{
2  "regions": {
3    "region": [
4      {
5        "1": 2008,
6        "3": "AL",
7        "4": "Albania",
8        "8": {
9          "1": 411533320,
10          "2": 201683310
11        },
12        "10": 1
13      },
14      {
15        "1": 2012,
16        "3": "DZ",
17        "4": "Algeria",
18        "8": {
19          "1": 280338860,
20          "2": 16596260
21        },
22        "10": 1
23      },
24      {
25        "1": 2016,
26        "3": "AS",
27        "4": "American Samoa",
28        "8": {
29          "1": -142709720,
30          "2": -1701322170
31        },
32        "10": 1
33      },
34      {
35        "1": 2020,
36        "3": "AD",
37        "4": "Andorra",
38        "8": {
39          "1": 425062850,
40          "2": 15218010
41        },
42        "10": 1
43      },
44      {
45        "1": 2024,
46        "3": "AO",
47        "4": "Angola",
48        "8": {
49          "1": -112026920,
50          "2": 178738870
51        },
52        "10": 1
53      },
54      {
55        "1": 2010,
56        "3": "AQ",
57        "4": "Antarctica",
58        "8": {
59          "1": -752509730,
60          "2": -713890
61        },
62        "10": 1
63      },
64      {
65        "1": 2028,
66        "3": "AG",
67        "4": "Antigua and Barbuda",
68        "8": {
69          "1": 170608160,
70          "2": -617964280
71        },
72        "10": 1
73      },
74      {
75        "1": 2032,
76        "3": "AR",
77        "4": "Argentina",
78        "8": {
79          "1": -384160970,
80          "2": -636166720
81        },
82        "10": 1
83      },
84      {
85        "1": 2051,
86        "3": "AM",
87        "4": "Armenia",
88        "8": {
89          "1": 400690990,
90          "2": 450381890
91        },
92        "10": 1
93      },
94      {
95        "1": 2036,
96        "3": "AU",
97        "4": "Australia",
98        "8": {
99          "1": -252743980,
100          "2": 1337751360
101        },
102        "10": 1
103      },
104      {
105        "1": 2040,
106        "3": "AT",
107        "4": "Austria",
108        "5": "Austria",
109        "8": {
110          "1": 475162310,
111          "2": 145500720
112        },
113        "10": 1
114      },
115      {
116        "1": 2031,
117        "3": "AZ",
118        "4": "Azerbaijan",
119        "8": {
120          "1": 401431050,
121          "2": 475769270
122        },
123        "10": 1
124      },
125      {
126        "1": 2048,
127        "3": "BH",
128        "4": "Bahrain",
129        "8": {
130          "1": 260667000,
131          "2": 505577000
132        },
133        "10": 1
134      },
135      {
136        "1": 2050,
137        "3": "BD",
138        "4": "Bangladesh",
139        "8": {
140          "1": 236849940,
141          "2": 903563310
142        },
143        "10": 1
144      },
145      {
146        "1": 2052,
147        "3": "BB",
148        "4": "Barbados",
149        "8": {
150          "1": 131938870,
151          "2": -595431980
152        },
153        "10": 1
154      },
155      {
156        "1": 2112,
157        "3": "BY",
158        "4": "Belarus",
159        "8": {
160          "1": 537098070,
161          "2": 279533890
162        },
163        "10": 1
164      },
165      {
166        "1": 2056,
167        "3": "BE",
168        "4": "Belgium",
169        "5": "Belgium",
170        "8": {
171          "1": 505038870,
172          "2": 44699360
173        },
174        "10": 1
175      },
176      {
177        "1": 2084,
178        "3": "BZ",
179        "4": "Belize",
180        "8": {
181          "1": 171898770,
182          "2": -884976500
183        },
184        "10": 1
185      },
186      {
187        "1": 2204,
188        "3": "BJ",
189        "4": "Benin",
190        "8": {
191          "1": 93076900,
192          "2": 23158340
193        },
194        "10": 1
195      },
196      {
197        "1": 2064,
198        "3": "BT",
199        "4": "Bhutan",
200        "8": {
201          "1": 275141620,
202          "2": 904336010
203        },
204        "10": 1
205      },
206      {
207        "1": 2068,
208        "3": "BO",
209        "4": "Bolivia",
210        "8": {
211          "1": -162901540,
212          "2": -635886530
213        },
214        "10": 1
215      },
216      {
217        "1": 2070,
218        "3": "BA",
219        "4": "Bosnia and Herzegovina",
220        "8": {
221          "1": 439158860,
222          "2": 176790760
223        },
224        "10": 1
225      },
226      {
227        "1": 2072,
228        "3": "BW",
229        "4": "Botswana",
230        "8": {
231          "1": -223284740,
232          "2": 246848660
233        },
234        "10": 1
235      },
236      {
237        "1": 2076,
238        "3": "BR",
239        "4": "Brazil",
240        "8": {
241          "1": -142350040,
242          "2": -519252800
243        },
244        "10": 1
245      },
246      {
247        "1": 2096,
248        "3": "BN",
249        "4": "Brunei",
250        "8": {
251          "1": 45352770,
252          "2": 1147276690
253        },
254        "10": 1
255      },
256      {
257        "1": 2100,
258        "3": "BG",
259        "4": "Bulgaria",
260        "8": {
261          "1": 427338830,
262          "2": 254858300
263        },
264        "10": 1
265      },
266      {
267        "1": 2854,
268        "3": "BF",
269        "4": "Burkina Faso",
270        "8": {
271          "1": 122383330,
272          "2": -15615930
273        },
274        "10": 1
275      },
276      {
277        "1": 2108,
278        "3": "BI",
279        "4": "Burundi",
280        "8": {
281          "1": -33730560,
282          "2": 299188860
283        },
284        "10": 1
285      },
286      {
287        "1": 2116,
288        "3": "KH",
289        "4": "Cambodia",
290        "8": {
291          "1": 125656790,
292          "2": 1049909630
293        },
294        "10": 1
295      },
296      {
297        "1": 2120,
298        "3": "CM",
299        "4": "Cameroon",
300        "8": {
301          "1": 73697220,
302          "2": 123547220
303        },
304        "10": 1
305      },
306      {
307        "1": 2124,
308        "3": "CA",
309        "4": "Canada",
310        "5": "Canada",
311        "8": {
312          "1": 561303660,
313          "2": -1063467710
314        },
315        "10": 1
316      },
317      {
318        "1": 2132,
319        "3": "CV",
320        "4": "Cabo Verde",
321        "5": "Cabo Verde",
322        "8": {
323          "1": 165388000,
324          "2": -230418000
325        },
326        "10": 1
327      },
328      {
329        "1": 2535,
330        "3": "BQ",
331        "4": "Caribbean Netherlands",
332        "8": {
333          "1": 121783611,
334          "2": -682385339
335        },
336        "10": 1
337      },
338      {
339        "1": 2140,
340        "3": "CF",
341        "4": "Central African Republic",
342        "8": {
343          "1": 66111110,
344          "2": 209394440
345        },
346        "10": 1
347      },
348      {
349        "1": 2148,
350        "3": "TD",
351        "4": "Chad",
352        "8": {
353          "1": 154541660,
354          "2": 187322070
355        },
356        "10": 1
357      },
358      {
359        "1": 2152,
360        "3": "CL",
361        "4": "Chile",
362        "8": {
363          "1": -356751470,
364          "2": -715429690
365        },
366        "10": 1
367      },
368      {
369        "1": 2156,
370        "3": "CN",
371        "4": "China",
372        "8": {
373          "1": 358616600,
374          "2": 1041953970
375        },
376        "10": 1
377      },
378      {
379        "1": 2162,
380        "3": "CX",
381        "4": "Christmas Island",
382        "8": {
383          "1": -104475250,
384          "2": 1056904490
385        },
386        "10": 1
387      },
388      {
389        "1": 2166,
390        "3": "CC",
391        "4": "Cocos (Keeling) Islands",
392        "8": {
393          "1": -121641650,
394          "2": 968709560
395        },
396        "10": 1
397      },
398      {
399        "1": 2170,
400        "3": "CO",
401        "4": "Colombia",
402        "8": {
403          "1": 45708680,
404          "2": -742973330
405        },
406        "10": 1
407      },
408      {
409        "1": 2174,
410        "3": "KM",
411        "4": "Comoros",
412        "8": {
413          "1": -116455000,
414          "2": 433333000
415        },
416        "10": 1
417      },
418      {
419        "1": 2184,
420        "3": "CK",
421        "4": "Cook Islands",
422        "8": {
423          "1": -212367360,
424          "2": -1597776710
425        },
426        "10": 1
427      },
428      {
429        "1": 2188,
430        "3": "CR",
431        "4": "Costa Rica",
432        "8": {
433          "1": 97489170,
434          "2": -837534280
435        },
436        "10": 1
437      },
438      {
439        "1": 2384,
440        "3": "CI",
441        "4": "Cote d'Ivoire",
442        "8": {
443          "1": 75399890,
444          "2": -55470800
445        },
446        "10": 1
447      },
448      {
449        "1": 2191,
450        "3": "HR",
451        "4": "Croatia",
452        "8": {
453          "1": 451000000,
454          "2": 152000000
455        },
456        "10": 1
457      },
458      {
459        "1": 2531,
460        "3": "CW",
461        "4": "Curacao",
462        "8": {
463          "1": 121695700,
464          "2": -689900200
465        },
466        "10": 1
467      },
468      {
469        "1": 2196,
470        "3": "CY",
471        "4": "Cyprus",
472        "8": {
473          "1": 351264130,
474          "2": 334298590
475        },
476        "10": 1
477      },
478      {
479        "1": 2203,
480        "3": "CZ",
481        "4": "Czechia",
482        "5": "Czechia",
483        "8": {
484          "1": 498174920,
485          "2": 154729620
486        },
487        "10": 1
488      },
489      {
490        "1": 2180,
491        "3": "CD",
492        "4": "Democratic Republic of the Congo",
493        "8": {
494          "1": -40383330,
495          "2": 217586640
496        },
497        "10": 1
498      },
499      {
500        "1": 2208,
501        "3": "DK",
502        "4": "Denmark",
503        "5": "Denmark",
504        "8": {
505          "1": 562639200,
506          "2": 95017850
507        },
508        "10": 1
509      },
510      {
511        "1": 2262,
512        "3": "DJ",
513        "4": "Djibouti",
514        "8": {
515          "1": 118251380,
516          "2": 425902750
517        },
518        "10": 1
519      },
520      {
521        "1": 2212,
522        "3": "DM",
523        "4": "Dominica",
524        "8": {
525          "1": 154149990,
526          "2": -613709760
527        },
528        "10": 1
529      },
530      {
531        "1": 2214,
532        "3": "DO",
533        "4": "Dominican Republic",
534        "8": {
535          "1": 187356930,
536          "2": -701626510
537        },
538        "10": 1
539      },
540      {
541        "1": 2218,
542        "3": "EC",
543        "4": "Ecuador",
544        "8": {
545          "1": -18312390,
546          "2": -781834060
547        },
548        "10": 1
549      },
550      {
551        "1": 2818,
552        "3": "EG",
553        "4": "Egypt",
554        "8": {
555          "1": 268205530,
556          "2": 308024980
557        },
558        "10": 1
559      },
560      {
561        "1": 2222,
562        "3": "SV",
563        "4": "El Salvador",
564        "8": {
565          "1": 137941850,
566          "2": -888965300
567        },
568        "10": 1
569      },
570      {
571        "1": 2226,
572        "3": "GQ",
573        "4": "Equatorial Guinea",
574        "8": {
575          "1": 16508010,
576          "2": 102678950
577        },
578        "10": 1
579      },
580      {
581        "1": 2232,
582        "3": "ER",
583        "4": "Eritrea",
584        "8": {
585          "1": 151793840,
586          "2": 397823340
587        },
588        "10": 1
589      },
590      {
591        "1": 2233,
592        "3": "EE",
593        "4": "Estonia",
594        "8": {
595          "1": 585952720,
596          "2": 250136070
597        },
598        "10": 1
599      },
600      {
601        "1": 2748,
602        "3": "SZ",
603        "4": "Eswatini",
604        "5": "Eswatini",
605        "8": {
606          "1": -265225030,
607          "2": 314658660
608        },
609        "10": 1
610      },
611      {
612        "1": 2231,
613        "3": "ET",
614        "4": "Ethiopia",
615        "8": {
616          "1": 91450000,
617          "2": 404896730
618        },
619        "10": 1
620      },
621      {
622        "1": 2583,
623        "3": "FM",
624        "4": "Micronesia",
625        "8": {
626          "1": 74255540,
627          "2": 1505508120
628        },
629        "10": 1
630      },
631      {
632        "1": 2242,
633        "3": "FJ",
634        "4": "Fiji",
635        "8": {
636          "1": -177133710,
637          "2": 1780650320
638        },
639        "10": 1
640      },
641      {
642        "1": 2246,
643        "3": "FI",
644        "4": "Finland",
645        "8": {
646          "1": 619241100,
647          "2": 257481510
648        },
649        "10": 1
650      },
651      {
652        "1": 2250,
653        "3": "FR",
654        "4": "France",
655        "8": {
656          "1": 462276380,
657          "2": 22137490
658        },
659        "10": 1
660      },
661      {
662        "1": 2258,
663        "3": "PF",
664        "4": "French Polynesia",
665        "8": {
666          "1": -176797420,
667          "2": -1494068430
668        },
669        "10": 1
670      },
671      {
672        "1": 2260,
673        "3": "TF",
674        "4": "French Southern and Antarctic Lands",
675        "8": {
676          "1": -492803660,
677          "2": 693485570
678        },
679        "10": 1
680      },
681      {
682        "1": 2266,
683        "3": "GA",
684        "4": "Gabon",
685        "8": {
686          "1": -8036890,
687          "2": 116094440
688        },
689        "10": 1
690      },
691      {
692        "1": 2268,
693        "3": "GE",
694        "4": "Georgia",
695        "8": {
696          "1": 423154070,
697          "2": 433568920
698        },
699        "10": 1
700      },
701      {
702        "1": 2276,
703        "3": "DE",
704        "4": "Germany",
705        "5": "Germany",
706        "8": {
707          "1": 511656910,
708          "2": 104515260
709        },
710        "10": 1
711      },
712      {
713        "1": 2288,
714        "3": "GH",
715        "4": "Ghana",
716        "8": {
717          "1": 79465270,
718          "2": -10231940
719        },
720        "10": 1
721      },
722      {
723        "1": 2300,
724        "3": "GR",
725        "4": "Greece",
726        "8": {
727          "1": 390742080,
728          "2": 218243120
729        },
730        "10": 1
731      },
732      {
733        "1": 2308,
734        "3": "GD",
735        "4": "Grenada",
736        "8": {
737          "1": 121165000,
738          "2": -616790000
739        },
740        "10": 1
741      },
742      {
743        "1": 2316,
744        "3": "GU",
745        "4": "Guam",
746        "8": {
747          "1": 133823791,
748          "2": 1446972774
749        },
750        "10": 1
751      },
752      {
753        "1": 2320,
754        "3": "GT",
755        "4": "Guatemala",
756        "8": {
757          "1": 157834710,
758          "2": -902307590
759        },
760        "10": 1
761      },
762      {
763        "1": 2831,
764        "3": "GG",
765        "4": "Guernsey",
766        "8": {
767          "1": 494481808,
768          "2": -25894685
769        },
770        "10": 1
771      },
772      {
773        "1": 2324,
774        "3": "GN",
775        "4": "Guinea",
776        "8": {
777          "1": 99455870,
778          "2": -96966450
779        },
780        "10": 1
781      },
782      {
783        "1": 2624,
784        "3": "GW",
785        "4": "Guinea-Bissau",
786        "8": {
787          "1": 118037490,
788          "2": -151804130
789        },
790        "10": 1
791      },
792      {
793        "1": 2328,
794        "3": "GY",
795        "4": "Guyana",
796        "8": {
797          "1": 48604160,
798          "2": -589301800
799        },
800        "10": 1
801      },
802      {
803        "1": 2332,
804        "3": "HT",
805        "4": "Haiti",
806        "8": {
807          "1": 189711870,
808          "2": -722852150
809        },
810        "10": 1
811      },
812      {
813        "1": 2334,
814        "3": "HM",
815        "4": "Heard Island and McDonald Islands",
816        "8": {
817          "1": -530818100,
818          "2": 735041580
819        },
820        "10": 1
821      },
822      {
823        "1": 2340,
824        "3": "HN",
825        "4": "Honduras",
826        "8": {
827          "1": 151999990,
828          "2": -862419050
829        },
830        "10": 1
831      },
832      {
833        "1": 2348,
834        "3": "HU",
835        "4": "Hungary",
836        "8": {
837          "1": 471624940,
838          "2": 195033040
839        },
840        "10": 1
841      },
842      {
843        "1": 2352,
844        "3": "IS",
845        "4": "Iceland",
846        "8": {
847          "1": 649630510,
848          "2": -190208350
849        },
850        "10": 1
851      },
852      {
853        "1": 2356,
854        "3": "IN",
855        "4": "India",
856        "8": {
857          "1": 205936840,
858          "2": 789628800
859        },
860        "10": 1
861      },
862      {
863        "1": 2360,
864        "3": "ID",
865        "4": "Indonesia",
866        "8": {
867          "1": -7892750,
868          "2": 1139213270
869        },
870        "10": 1
871      },
872      {
873        "1": 2368,
874        "3": "IQ",
875        "4": "Iraq",
876        "8": {
877          "1": 332231910,
878          "2": 436792910
879        },
880        "10": 1
881      },
882      {
883        "1": 2372,
884        "3": "IE",
885        "4": "Ireland",
886        "8": {
887          "1": 534129100,
888          "2": -82438900
889        },
890        "10": 1
891      },
892      {
893        "1": 2376,
894        "3": "IL",
895        "4": "Israel",
896        "8": {
897          "1": 310460510,
898          "2": 348516120
899        },
900        "10": 1
901      },
902      {
903        "1": 2380,
904        "3": "IT",
905        "4": "Italy",
906        "8": {
907          "1": 418719400,
908          "2": 125673800
909        },
910        "10": 1
911      },
912      {
913        "1": 2388,
914        "3": "JM",
915        "4": "Jamaica",
916        "8": {
917          "1": 181095810,
918          "2": -772975080
919        },
920        "10": 1
921      },
922      {
923        "1": 2392,
924        "3": "JP",
925        "4": "Japan",
926        "8": {
927          "1": 362048240,
928          "2": 1382529240
929        },
930        "10": 1
931      },
932      {
933        "1": 2832,
934        "3": "JE",
935        "4": "Jersey",
936        "8": {
937          "1": 492137711,
938          "2": -21357662
939        },
940        "10": 1
941      },
942      {
943        "1": 2400,
944        "3": "JO",
945        "4": "Jordan",
946        "8": {
947          "1": 305851640,
948          "2": 362384140
949        },
950        "10": 1
951      },
952      {
953        "1": 2398,
954        "3": "KZ",
955        "4": "Kazakhstan",
956        "8": {
957          "1": 480195730,
958          "2": 669236840
959        },
960        "10": 1
961      },
962      {
963        "1": 2404,
964        "3": "KE",
965        "4": "Kenya",
966        "8": {
967          "1": -235590,
968          "2": 379061930
969        },
970        "10": 1
971      },
972      {
973        "1": 2296,
974        "3": "KI",
975        "4": "Kiribati",
976        "8": {
977          "1": 14421300,
978          "2": 1729829763
979        },
980        "10": 1
981      },
982      {
983        "1": 2414,
984        "3": "KW",
985        "4": "Kuwait",
986        "8": {
987          "1": 293116600,
988          "2": 474817660
989        },
990        "10": 1
991      },
992      {
993        "1": 2417,
994        "3": "KG",
995        "4": "Kyrgyzstan",
996        "8": {
997          "1": 412043800,
998          "2": 747660980
999        },
1000        "10": 1
1001      },
1002      {
1003        "1": 2418,
1004        "3": "LA",
1005        "4": "Laos",
1006        "8": {
1007          "1": 198562700,
1008          "2": 1024954960
1009        },
1010        "10": 1
1011      },
1012      {
1013        "1": 2428,
1014        "3": "LV",
1015        "4": "Latvia",
1016        "8": {
1017          "1": 568796350,
1018          "2": 246031890
1019        },
1020        "10": 1
1021      },
1022      {
1023        "1": 2422,
1024        "3": "LB",
1025        "4": "Lebanon",
1026        "8": {
1027          "1": 338547210,
1028          "2": 358622850
1029        },
1030        "10": 1
1031      },
1032      {
1033        "1": 2426,
1034        "3": "LS",
1035        "4": "Lesotho",
1036        "8": {
1037          "1": -296099880,
1038          "2": 282336080
1039        },
1040        "10": 1
1041      },
1042      {
1043        "1": 2430,
1044        "3": "LR",
1045        "4": "Liberia",
1046        "8": {
1047          "1": 64280550,
1048          "2": -94294990
1049        },
1050        "10": 1
1051      },
1052      {
1053        "1": 2434,
1054        "3": "LY",
1055        "4": "Libya",
1056        "8": {
1057          "1": 263351000,
1058          "2": 172283310
1059        },
1060        "10": 1
1061      },
1062      {
1063        "1": 2438,
1064        "3": "LI",
1065        "4": "Liechtenstein",
1066        "8": {
1067          "1": 471410392,
1068          "2": 95209350
1069        },
1070        "10": 1
1071      },
1072      {
1073        "1": 2440,
1074        "3": "LT",
1075        "4": "Lithuania",
1076        "8": {
1077          "1": 551694380,
1078          "2": 238812750
1079        },
1080        "10": 1
1081      },
1082      {
1083        "1": 2442,
1084        "3": "LU",
1085        "4": "Luxembourg",
1086        "5": "Luxembourg",
1087        "8": {
1088          "1": 498152730,
1089          "2": 61295830
1090        },
1091        "10": 1
1092      },
1093      {
1094        "1": 2450,
1095        "3": "MG",
1096        "4": "Madagascar",
1097        "8": {
1098          "1": -187669470,
1099          "2": 468691070
1100        },
1101        "10": 1
1102      },
1103      {
1104        "1": 2454,
1105        "3": "MW",
1106        "4": "Malawi",
1107        "8": {
1108          "1": -132543080,
1109          "2": 343015250
1110        },
1111        "10": 1
1112      },
1113      {
1114        "1": 2458,
1115        "3": "MY",
1116        "4": "Malaysia",
1117        "8": {
1118          "1": 42104840,
1119          "2": 1019757660
1120        },
1121        "10": 1
1122      },
1123      {
1124        "1": 2462,
1125        "3": "MV",
1126        "4": "Maldives",
1127        "8": {
1128          "1": 32027780,
1129          "2": 732206800
1130        },
1131        "10": 1
1132      },
1133      {
1134        "1": 2470,
1135        "3": "MT",
1136        "4": "Malta",
1137        "8": {
1138          "1": 359374960,
1139          "2": 143754160
1140        },
1141        "10": 1
1142      },
1143      {
1144        "1": 2466,
1145        "3": "ML",
1146        "4": "Mali",
1147        "8": {
1148          "1": 175706920,
1149          "2": -39961660
1150        },
1151        "10": 1
1152      },
1153      {
1154        "1": 2584,
1155        "3": "MH",
1156        "4": "Marshall Islands",
1157        "8": {
1158          "1": 71314740,
1159          "2": 1711844780
1160        },
1161        "10": 1
1162      },
1163      {
1164        "1": 2478,
1165        "3": "MR",
1166        "4": "Mauritania",
1167        "8": {
1168          "1": 210078900,
1169          "2": -109408350
1170        },
1171        "10": 1
1172      },
1173      {
1174        "1": 2480,
1175        "3": "MU",
1176        "4": "Mauritius",
1177        "8": {
1178          "1": -203484040,
1179          "2": 575521520
1180        },
1181        "10": 1
1182      },
1183      {
1184        "1": 2484,
1185        "3": "MX",
1186        "4": "Mexico",
1187        "8": {
1188          "1": 236345010,
1189          "2": -1025527840
1190        },
1191        "10": 1
1192      },
1193      {
1194        "1": 2498,
1195        "3": "MD",
1196        "4": "Moldova",
1197        "8": {
1198          "1": 474116310,
1199          "2": 283698850
1200        },
1201        "10": 1
1202      },
1203      {
1204        "1": 2492,
1205        "3": "MC",
1206        "4": "Monaco",
1207        "8": {
1208          "1": 437384176,
1209          "2": 74246158
1210        },
1211        "10": 1
1212      },
1213      {
1214        "1": 2496,
1215        "3": "MN",
1216        "4": "Mongolia",
1217        "8": {
1218          "1": 468624960,
1219          "2": 1038466560
1220        },
1221        "10": 1
1222      },
1223      {
1224        "1": 2499,
1225        "3": "ME",
1226        "4": "Montenegro",
1227        "8": {
1228          "1": 427086780,
1229          "2": 193743900
1230        },
1231        "10": 1
1232      },
1233      {
1234        "1": 2504,
1235        "3": "MA",
1236        "4": "Morocco",
1237        "8": {
1238          "1": 317917020,
1239          "2": -70926200
1240        },
1241        "10": 1
1242      },
1243      {
1244        "1": 2508,
1245        "3": "MZ",
1246        "4": "Mozambique",
1247        "8": {
1248          "1": -186656950,
1249          "2": 355295620
1250        },
1251        "10": 1
1252      },
1253      {
1254        "1": 2104,
1255        "3": "MM",
1256        "4": "Myanmar (Burma)",
1257        "8": {
1258          "1": 219162210,
1259          "2": 959559740
1260        },
1261        "10": 1
1262      },
1263      {
1264        "1": 2516,
1265        "3": "NA",
1266        "4": "Namibia",
1267        "8": {
1268          "1": -229576400,
1269          "2": 184904100
1270        },
1271        "10": 1
1272      },
1273      {
1274        "1": 2520,
1275        "3": "NR",
1276        "4": "Nauru",
1277        "8": {
1278          "1": -5227780,
1279          "2": 1669315030
1280        },
1281        "10": 1
1282      },
1283      {
1284        "1": 2524,
1285        "3": "NP",
1286        "4": "Nepal",
1287        "8": {
1288          "1": 283948570,
1289          "2": 841240080
1290        },
1291        "10": 1
1292      },
1293      {
1294        "1": 2528,
1295        "3": "NL",
1296        "4": "Netherlands",
1297        "5": "Netherlands",
1298        "8": {
1299          "1": 521326330,
1300          "2": 52912660
1301        },
1302        "10": 1
1303      },
1304      {
1305        "1": 2540,
1306        "3": "NC",
1307        "4": "New Caledonia",
1308        "8": {
1309          "1": -209043050,
1310          "2": 1656180420
1311        },
1312        "10": 1
1313      },
1314      {
1315        "1": 2554,
1316        "3": "NZ",
1317        "4": "New Zealand",
1318        "8": {
1319          "1": -409005570,
1320          "2": 1748859710
1321        },
1322        "10": 1
1323      },
1324      {
1325        "1": 2558,
1326        "3": "NI",
1327        "4": "Nicaragua",
1328        "8": {
1329          "1": 128654160,
1330          "2": -852072290
1331        },
1332        "10": 1
1333      },
1334      {
1335        "1": 2562,
1336        "3": "NE",
1337        "4": "Niger",
1338        "8": {
1339          "1": 176077890,
1340          "2": 80816660
1341        },
1342        "10": 1
1343      },
1344      {
1345        "1": 2566,
1346        "3": "NG",
1347        "4": "Nigeria",
1348        "8": {
1349          "1": 90819990,
1350          "2": 86752770
1351        },
1352        "10": 1
1353      },
1354      {
1355        "1": 2570,
1356        "3": "NU",
1357        "4": "Niue",
1358        "8": {
1359          "1": -190544450,
1360          "2": -1698672330
1361        },
1362        "10": 1
1363      },
1364      {
1365        "1": 2574,
1366        "3": "NF",
1367        "4": "Norfolk Island",
1368        "8": {
1369          "1": -290408350,
1370          "2": 1679547120
1371        },
1372        "10": 1
1373      },
1374      {
1375        "1": 2807,
1376        "3": "MK",
1377        "4": "North Macedonia",
1378        "5": "North Macedonia",
1379        "8": {
1380          "1": 416086350,
1381          "2": 217452750
1382        },
1383        "10": 1
1384      },
1385      {
1386        "1": 2580,
1387        "3": "MP",
1388        "4": "Northern Mariana Islands",
1389        "8": {
1390          "1": 150979000,
1391          "2": 1456739000
1392        },
1393        "10": 1
1394      },
1395      {
1396        "1": 2578,
1397        "3": "NO",
1398        "4": "Norway",
1399        "8": {
1400          "1": 604720240,
1401          "2": 84689460
1402        },
1403        "10": 1
1404      },
1405      {
1406        "1": 2512,
1407        "3": "OM",
1408        "4": "Oman",
1409        "8": {
1410          "1": 214735329,
1411          "2": 559754130
1412        },
1413        "10": 1
1414      },
1415      {
1416        "1": 2586,
1417        "3": "PK",
1418        "4": "Pakistan",
1419        "8": {
1420          "1": 303753210,
1421          "2": 693451160
1422        },
1423        "10": 1
1424      },
1425      {
1426        "1": 2585,
1427        "3": "PW",
1428        "4": "Palau",
1429        "8": {
1430          "1": 75149800,
1431          "2": 1345825200
1432        },
1433        "10": 1
1434      },
1435      {
1436        "1": 2591,
1437        "3": "PA",
1438        "4": "Panama",
1439        "8": {
1440          "1": 85379810,
1441          "2": -807821270
1442        },
1443        "10": 1
1444      },
1445      {
1446        "1": 2598,
1447        "3": "PG",
1448        "4": "Papua New Guinea",
1449        "8": {
1450          "1": -63149930,
1451          "2": 1439555500
1452        },
1453        "10": 1
1454      },
1455      {
1456        "1": 2600,
1457        "3": "PY",
1458        "4": "Paraguay",
1459        "8": {
1460          "1": -234425030,
1461          "2": -584438320
1462        },
1463        "10": 1
1464      },
1465      {
1466        "1": 2604,
1467        "3": "PE",
1468        "4": "Peru",
1469        "8": {
1470          "1": -91899670,
1471          "2": -750151520
1472        },
1473        "10": 1
1474      },
1475      {
1476        "1": 2608,
1477        "3": "PH",
1478        "4": "Philippines",
1479        "8": {
1480          "1": 128797210,
1481          "2": 1217740170
1482        },
1483        "10": 1
1484      },
1485      {
1486        "1": 2612,
1487        "3": "PN",
1488        "4": "Pitcairn Islands",
1489        "8": {
1490          "1": -243767537,
1491          "2": -1283242376
1492        },
1493        "10": 1
1494      },
1495      {
1496        "1": 2616,
1497        "3": "PL",
1498        "4": "Poland",
1499        "8": {
1500          "1": 519194380,
1501          "2": 191451360
1502        },
1503        "10": 1
1504      },
1505      {
1506        "1": 2620,
1507        "3": "PT",
1508        "4": "Portugal",
1509        "8": {
1510          "1": 393998720,
1511          "2": -82244540
1512        },
1513        "10": 1
1514      },
1515      {
1516        "1": 2634,
1517        "3": "QA",
1518        "4": "Qatar",
1519        "8": {
1520          "1": 253548260,
1521          "2": 511838840
1522        },
1523        "10": 1
1524      },
1525      {
1526        "1": 2178,
1527        "3": "CG",
1528        "4": "Republic of the Congo",
1529        "8": {
1530          "1": -2280210,
1531          "2": 158276590
1532        },
1533        "10": 1
1534      },
1535      {
1536        "1": 2642,
1537        "3": "RO",
1538        "4": "Romania",
1539        "8": {
1540          "1": 459431610,
1541          "2": 249667600
1542        },
1543        "10": 1
1544      },
1545      {
1546        "1": 2646,
1547        "3": "RW",
1548        "4": "Rwanda",
1549        "8": {
1550          "1": -19402780,
1551          "2": 298738880
1552        },
1553        "10": 1
1554      },
1555      {
1556        "1": 2654,
1557        "3": "SH",
1558        "4": "Saint Helena, Ascension and Tristan da Cunha",
1559        "5": "St Helena, Ascension and Tristan da Cunha",
1560        "8": {
1561          "1": -159583317,
1562          "2": -57019989
1563        },
1564        "10": 1
1565      },
1566      {
1567        "1": 2659,
1568        "3": "KN",
1569        "4": "Saint Kitts and Nevis",
1570        "5": "St Kitts & Nevis",
1571        "8": {
1572          "1": 173578220,
1573          "2": -627829980
1574        },
1575        "10": 1
1576      },
1577      {
1578        "1": 2662,
1579        "3": "LC",
1580        "4": "Saint Lucia",
1581        "5": "St Lucia",
1582        "8": {
1583          "1": 139094440,
1584          "2": -609788930
1585        },
1586        "10": 1
1587      },
1588      {
1589        "1": 2666,
1590        "3": "PM",
1591        "4": "Saint Pierre and Miquelon",
1592        "5": "St Pierre and Miquelon",
1593        "8": {
1594          "1": 468852000,
1595          "2": -563159000
1596        },
1597        "10": 1
1598      },
1599      {
1600        "1": 2670,
1601        "3": "VC",
1602        "4": "Saint Vincent and the Grenadines",
1603        "5": "St Vincent and the Grenadines",
1604        "8": {
1605          "1": 129843050,
1606          "2": -612872280
1607        },
1608        "10": 1
1609      },
1610      {
1611        "1": 2882,
1612        "3": "WS",
1613        "4": "Samoa",
1614        "8": {
1615          "1": -137590290,
1616          "2": -1721046290
1617        },
1618        "10": 1
1619      },
1620      {
1621        "1": 2674,
1622        "3": "SM",
1623        "4": "San Marino",
1624        "8": {
1625          "1": 439423600,
1626          "2": 124577770
1627        },
1628        "10": 1
1629      },
1630      {
1631        "1": 2678,
1632        "3": "ST",
1633        "4": "Sao Tome and Principe",
1634        "8": {
1635          "1": 1863600,
1636          "2": 66130810
1637        },
1638        "10": 1
1639      },
1640      {
1641        "1": 2682,
1642        "3": "SA",
1643        "4": "Saudi Arabia",
1644        "8": {
1645          "1": 238859420,
1646          "2": 450791620
1647        },
1648        "10": 1
1649      },
1650      {
1651        "1": 2686,
1652        "3": "SN",
1653        "4": "Senegal",
1654        "8": {
1655          "1": 144974010,
1656          "2": -144523620
1657        },
1658        "10": 1
1659      },
1660      {
1661        "1": 2690,
1662        "3": "SC",
1663        "4": "Seychelles",
1664        "8": {
1665          "1": -46795740,
1666          "2": 554919770
1667        },
1668        "10": 1
1669      },
1670      {
1671        "1": 2694,
1672        "3": "SL",
1673        "4": "Sierra Leone",
1674        "8": {
1675          "1": 84605550,
1676          "2": -117798890
1677        },
1678        "10": 1
1679      },
1680      {
1681        "1": 2702,
1682        "3": "SG",
1683        "4": "Singapore",
1684        "8": {
1685          "1": 13520830,
1686          "2": 1038198360
1687        },
1688        "10": 1
1689      },
1690      {
1691        "1": 2534,
1692        "3": "SX",
1693        "4": "Sint Maarten",
1694        "8": {
1695          "1": 180424800,
1696          "2": -630548300
1697        },
1698        "10": 1
1699      },
1700      {
1701        "1": 2703,
1702        "3": "SK",
1703        "4": "Slovakia",
1704        "5": "Slovakia",
1705        "8": {
1706          "1": 486690260,
1707          "2": 196990240
1708        },
1709        "10": 1
1710      },
1711      {
1712        "1": 2705,
1713        "3": "SI",
1714        "4": "Slovenia",
1715        "8": {
1716          "1": 461512410,
1717          "2": 149954630
1718        },
1719        "10": 1
1720      },
1721      {
1722        "1": 2090,
1723        "3": "SB",
1724        "4": "Solomon Islands",
1725        "8": {
1726          "1": -96457100,
1727          "2": 1601561940
1728        },
1729        "10": 1
1730      },
1731      {
1732        "1": 2706,
1733        "3": "SO",
1734        "4": "Somalia",
1735        "8": {
1736          "1": 51521490,
1737          "2": 461996160
1738        },
1739        "10": 1
1740      },
1741      {
1742        "1": 2710,
1743        "3": "ZA",
1744        "4": "South Africa",
1745        "8": {
1746          "1": -305594820,
1747          "2": 229375060
1748        },
1749        "10": 1
1750      },
1751      {
1752        "1": 2239,
1753        "3": "GS",
1754        "4": "South Georgia and the South Sandwich Islands",
1755        "8": {
1756          "1": -544295790,
1757          "2": -365879090
1758        },
1759        "10": 1
1760      },
1761      {
1762        "1": 2410,
1763        "3": "KR",
1764        "4": "South Korea",
1765        "8": {
1766          "1": 359077570,
1767          "2": 1277669220
1768        },
1769        "10": 1
1770      },
1771      {
1772        "1": 2724,
1773        "3": "ES",
1774        "4": "Spain",
1775        "8": {
1776          "1": 404636670,
1777          "2": -37492200
1778        },
1779        "10": 1
1780      },
1781      {
1782        "1": 2144,
1783        "3": "LK",
1784        "4": "Sri Lanka",
1785        "8": {
1786          "1": 78730540,
1787          "2": 807717970
1788        },
1789        "10": 1
1790      },
1791      {
1792        "1": 2740,
1793        "3": "SR",
1794        "4": "Suriname",
1795        "8": {
1796          "1": 39193050,
1797          "2": -560277830
1798        },
1799        "10": 1
1800      },
1801      {
1802        "1": 2756,
1803        "3": "CH",
1804        "4": "Switzerland",
1805        "8": {
1806          "1": 468181880,
1807          "2": 82275120
1808        },
1809        "10": 1
1810      },
1811      {
1812        "1": 2752,
1813        "3": "SE",
1814        "4": "Sweden",
1815        "8": {
1816          "1": 601281610,
1817          "2": 186435010
1818        },
1819        "10": 1
1820      },
1821      {
1822        "1": 2762,
1823        "3": "TJ",
1824        "4": "Tajikistan",
1825        "8": {
1826          "1": 388610340,
1827          "2": 712760930
1828        },
1829        "10": 1
1830      },
1831      {
1832        "1": 2834,
1833        "3": "TZ",
1834        "4": "Tanzania",
1835        "8": {
1836          "1": -63690280,
1837          "2": 348888220
1838        },
1839        "10": 1
1840      },
1841      {
1842        "1": 2764,
1843        "3": "TH",
1844        "4": "Thailand",
1845        "8": {
1846          "1": 158700320,
1847          "2": 1009925410
1848        },
1849        "10": 1
1850      },
1851      {
1852        "1": 2044,
1853        "3": "BS",
1854        "4": "The Bahamas",
1855        "8": {
1856          "1": 250342800,
1857          "2": -773962800
1858        },
1859        "10": 1
1860      },
1861      {
1862        "1": 2270,
1863        "3": "GM",
1864        "4": "The Gambia",
1865        "8": {
1866          "1": 134431820,
1867          "2": -153101390
1868        },
1869        "10": 1
1870      },
1871      {
1872        "1": 2626,
1873        "3": "TL",
1874        "4": "Timor-Leste",
1875        "8": {
1876          "1": -88742170,
1877          "2": 1257275390
1878        },
1879        "10": 1
1880      },
1881      {
1882        "1": 2768,
1883        "3": "TG",
1884        "4": "Togo",
1885        "8": {
1886          "1": 86195430,
1887          "2": 8247820
1888        },
1889        "10": 1
1890      },
1891      {
1892        "1": 2772,
1893        "3": "TK",
1894        "4": "Tokelau",
1895        "8": {
1896          "1": -92002000,
1897          "2": -1718484000
1898        },
1899        "10": 1
1900      },
1901      {
1902        "1": 2776,
1903        "3": "TO",
1904        "4": "Tonga",
1905        "8": {
1906          "1": -211789860,
1907          "2": -1751982420
1908        },
1909        "10": 1
1910      },
1911      {
1912        "1": 2780,
1913        "3": "TT",
1914        "4": "Trinidad and Tobago",
1915        "8": {
1916          "1": 106918030,
1917          "2": -612225030
1918        },
1919        "10": 1
1920      },
1921      {
1922        "1": 2788,
1923        "3": "TN",
1924        "4": "Tunisia",
1925        "8": {
1926          "1": 338869170,
1927          "2": 95374990
1928        },
1929        "10": 1
1930      },
1931      {
1932        "1": 2792,
1933        "3": "TR",
1934        "4": "Turkiye",
1935        "5": "Türkiye",
1936        "8": {
1937          "1": 389637450,
1938          "2": 352433220
1939        },
1940        "10": 1
1941      },
1942      {
1943        "1": 2795,
1944        "3": "TM",
1945        "4": "Turkmenistan",
1946        "8": {
1947          "1": 389697190,
1948          "2": 595562780
1949        },
1950        "10": 1
1951      },
1952      {
1953        "1": 2798,
1954        "3": "TV",
1955        "4": "Tuvalu",
1956        "8": {
1957          "1": -71095350,
1958          "2": 1776493300
1959        },
1960        "10": 1
1961      },
1962      {
1963        "1": 2800,
1964        "3": "UG",
1965        "4": "Uganda",
1966        "8": {
1967          "1": 13733330,
1968          "2": 322902750
1969        },
1970        "10": 1
1971      },
1972      {
1973        "1": 2804,
1974        "3": "UA",
1975        "4": "Ukraine",
1976        "8": {
1977          "1": 483794330,
1978          "2": 311655800
1979        },
1980        "10": 1
1981      },
1982      {
1983        "1": 2784,
1984        "3": "AE",
1985        "4": "United Arab Emirates",
1986        "8": {
1987          "1": 234240760,
1988          "2": 538478180
1989        },
1990        "10": 1
1991      },
1992      {
1993        "1": 2826,
1994        "3": "GB",
1995        "4": "United Kingdom",
1996        "8": {
1997          "1": 553780510,
1998          "2": -34359730
1999        },
2000        "10": 1
2001      },
2002      {
2003        "1": 2840,
2004        "3": "US",
2005        "4": "United States",
2006        "5": "United States",
2007        "8": {
2008          "1": 387945952,
2009          "2": -1065348379
2010        },
2011        "10": 1
2012      },
2013      {
2014        "1": 2858,
2015        "3": "UY",
2016        "4": "Uruguay",
2017        "8": {
2018          "1": -325227790,
2019          "2": -557658350
2020        },
2021        "10": 1
2022      },
2023      {
2024        "1": 2860,
2025        "3": "UZ",
2026        "4": "Uzbekistan",
2027        "8": {
2028          "1": 413774910,
2029          "2": 645852620
2030        },
2031        "10": 1
2032      },
2033      {
2034        "1": 2548,
2035        "3": "VU",
2036        "4": "Vanuatu",
2037        "5": "Vanuatu",
2038        "8": {
2039          "1": -153767060,
2040          "2": 1669591580
2041        },
2042        "10": 1
2043      },
2044      {
2045        "1": 2336,
2046        "3": "VA",
2047        "4": "Vatican City",
2048        "5": "Vatican City",
2049        "8": {
2050          "1": 419029160,
2051          "2": 124533890
2052        },
2053        "10": 1
2054      },
2055      {
2056        "1": 2862,
2057        "3": "VE",
2058        "4": "Venezuela",
2059        "8": {
2060          "1": 64237500,
2061          "2": -665897300
2062        },
2063        "10": 1
2064      },
2065      {
2066        "1": 2704,
2067        "3": "VN",
2068        "4": "Vietnam",
2069        "8": {
2070          "1": 140583240,
2071          "2": 1082771990
2072        },
2073        "10": 1
2074      },
2075      {
2076        "1": 2887,
2077        "3": "YE",
2078        "4": "Yemen",
2079        "8": {
2080          "1": 155527270,
2081          "2": 485163880
2082        },
2083        "10": 1
2084      },
2085      {
2086        "1": 2894,
2087        "3": "ZM",
2088        "4": "Zambia",
2089        "8": {
2090          "1": -131338970,
2091          "2": 278493320
2092        },
2093        "10": 1
2094      },
2095      {
2096        "1": 2716,
2097        "3": "ZW",
2098        "4": "Zimbabwe",
2099        "8": {
2100          "1": -190154380,
2101          "2": 291548570
2102        },
2103        "10": 1
2104      },
2105      {
2106        "1": 2060,
2107        "3": "BM",
2108        "4": "Bermuda",
2109        "8": {
2110          "1": 323078000,
2111          "2": -647505000
2112        },
2113        "10": 2
2114      },
2115      {
2116        "1": 2074,
2117        "3": "BV",
2118        "4": "Bouvet Island",
2119        "8": {
2120          "1": -544231990,
2121          "2": 34131940
2122        },
2123        "10": 2
2124      },
2125      {
2126        "1": 2086,
2127        "3": "IO",
2128        "4": "British Indian Ocean Territory",
2129        "8": {
2130          "1": -63431940,
2131          "2": 718765190
2132        },
2133        "10": 2
2134      },
2135      {
2136        "1": 2092,
2137        "3": "VG",
2138        "4": "British Virgin Islands",
2139        "8": {
2140          "1": 184206950,
2141          "2": -646399680
2142        },
2143        "10": 2
2144      },
2145      {
2146        "1": 20277,
2147        "3": "IC",
2148        "4": "Canary Islands",
2149        "5": "Canary Islands",
2150        "8": {
2151          "1": 282915637,
2152          "2": -166291304
2153        },
2154        "10": 5
2155      },
2156      {
2157        "1": 2136,
2158        "3": "KY",
2159        "4": "Cayman Islands",
2160        "8": {
2161          "1": 193133000,
2162          "2": -812546000
2163        },
2164        "10": 2
2165      },
2166      {
2167        "1": 2158,
2168        "3": "TW",
2169        "4": "Taiwan",
2170        "8": {
2171          "1": 236978100,
2172          "2": 1209605150
2173        },
2174        "10": 2
2175      },
2176      {
2177        "1": 2175,
2178        "3": "YT",
2179        "4": "Mayotte",
2180        "8": {
2181          "1": -128275000,
2182          "2": 451662440
2183        },
2184        "10": 2
2185      },
2186      {
2187        "1": 2234,
2188        "3": "FO",
2189        "4": "Faroe Islands",
2190        "8": {
2191          "1": 618926350,
2192          "2": -69118060
2193        },
2194        "10": 2
2195      },
2196      {
2197        "1": 2238,
2198        "3": "FK",
2199        "4": "Falkland Islands (Islas Malvinas)",
2200        "8": {
2201          "1": -517962530,
2202          "2": -595236130
2203        },
2204        "10": 2
2205      },
2206      {
2207        "1": 2254,
2208        "3": "GF",
2209        "4": "French Guiana",
2210        "8": {
2211          "1": 39338890,
2212          "2": -531257820
2213        },
2214        "10": 2
2215      },
2216      {
2217        "1": 2275,
2218        "3": "PS",
2219        "4": "Palestine",
2220        "5": "Palestine",
2221        "8": {
2222          "1": 319521620,
2223          "2": 352331540
2224        },
2225        "10": 2
2226      },
2227      {
2228        "1": 2292,
2229        "3": "GI",
2230        "4": "Gibraltar",
2231        "8": {
2232          "1": 361407510,
2233          "2": -53535850
2234        },
2235        "10": 2
2236      },
2237      {
2238        "1": 2304,
2239        "3": "GL",
2240        "4": "Greenland",
2241        "8": {
2242          "1": 717069360,
2243          "2": -426043030
2244        },
2245        "10": 2
2246      },
2247      {
2248        "1": 2312,
2249        "3": "GP",
2250        "4": "Guadeloupe",
2251        "8": {
2252          "1": 162650000,
2253          "2": -615510000
2254        },
2255        "10": 2
2256      },
2257      {
2258        "1": 2344,
2259        "3": "HK",
2260        "4": "Hong Kong",
2261        "8": {
2262          "1": 223193039,
2263          "2": 1141693611
2264        },
2265        "10": 2
2266      },
2267      {
2268        "1": 2833,
2269        "3": "IM",
2270        "4": "Isle of Man",
2271        "8": {
2272          "1": 542361070,
2273          "2": -45480560
2274        },
2275        "10": 1
2276      },
2277      {
2278        "1": 2446,
2279        "3": "MO",
2280        "4": "Macao",
2281        "5": "Macao",
2282        "8": {
2283          "1": 221987450,
2284          "2": 1135438730
2285        },
2286        "10": 2
2287      },
2288      {
2289        "1": 2474,
2290        "3": "MQ",
2291        "4": "Martinique",
2292        "8": {
2293          "1": 146415280,
2294          "2": -610241740
2295        },
2296        "10": 2
2297      },
2298      {
2299        "1": 2500,
2300        "3": "MS",
2301        "4": "Montserrat",
2302        "8": {
2303          "1": 167424980,
2304          "2": -621873660
2305        },
2306        "10": 2
2307      },
2308      {
2309        "1": 2533,
2310        "3": "AW",
2311        "4": "Aruba",
2312        "8": {
2313          "1": 125211100,
2314          "2": -699683380
2315        },
2316        "10": 2
2317      },
2318      {
2319        "1": 2630,
2320        "3": "PR",
2321        "4": "Puerto Rico",
2322        "8": {
2323          "1": 182208330,
2324          "2": -665901490
2325        },
2326        "10": 2
2327      },
2328      {
2329        "1": 2638,
2330        "3": "RE",
2331        "4": "Reunion",
2332        "5": "Réunion",
2333        "8": {
2334          "1": -211151410,
2335          "2": 555363840
2336        },
2337        "10": 2
2338      },
2339      {
2340        "1": 2660,
2341        "3": "AI",
2342        "4": "Anguilla",
2343        "8": {
2344          "1": 182205540,
2345          "2": -630686150
2346        },
2347        "10": 2
2348      },
2349      {
2350        "1": 2732,
2351        "3": "EH",
2352        "4": "Western Sahara",
2353        "8": {
2354          "1": 242155270,
2355          "2": -128858340
2356        },
2357        "10": 2
2358      },
2359      {
2360        "1": 2663,
2361        "3": "MF",
2362        "4": "Saint Martin",
2363        "5": "St Martin",
2364        "8": {
2365          "1": 180825500,
2366          "2": -630522510
2367        },
2368        "10": 1
2369      },
2370      {
2371        "1": 2744,
2372        "3": "SJ",
2373        "4": "Svalbard and Jan Mayen",
2374        "8": {
2375          "1": 775536040,
2376          "2": 236702720
2377        },
2378        "10": 2
2379      },
2380      {
2381        "1": 2796,
2382        "3": "TC",
2383        "4": "Turks and Caicos Islands",
2384        "8": {
2385          "1": 216940250,
2386          "2": -717979280
2387        },
2388        "10": 2
2389      },
2390      {
2391        "1": 2581,
2392        "3": "UM",
2393        "4": "United States Minor Outlying Islands",
2394        "8": {
2395          "1": 192823192,
2396          "2": 1666470470
2397        },
2398        "10": 1
2399      },
2400      {
2401        "1": 2850,
2402        "3": "VI",
2403        "4": "U.S. Virgin Islands",
2404        "5": "U.S. Virgin Islands",
2405        "8": {
2406          "1": 183357650,
2407          "2": -648963350
2408        },
2409        "10": 2
2410      },
2411      {
2412        "1": 2876,
2413        "3": "WF",
2414        "4": "Wallis and Futuna",
2415        "8": {
2416          "1": -142938000,
2417          "2": -1781165000
2418        },
2419        "10": 1
2420      }
2421    ]
2422  }
2423}

src/search_advertiser_creatives.js

1import { processCreativeDetails } from "./get_creative_details.js";
2import { fetchWithProxyRotation } from "./fetchWithProxyRotation.js";
3
4export async function searchForAds(
5    advertiserId,
6    RegionCode = null,
7    format,
8    dateRange,
9    platform,
10    limitResults = null,
11    isPolitical
12) {
13    let selectedRegion;
14    let nextPageToken = null;
15    const isDomain = advertiserId.includes(".");
16    const adjustedLimit = limitResults ? Math.min(limitResults, 100) : 40; // Max limit 100, default 40
17    let allResults = [];
18
19    do {
20        const requestPayload = isPolitical
21            ? {
22                "2": adjustedLimit,
23                "3": {
24                    "1": advertiserId,
25                    ...(format !== 0 && { "4": format }),
26                    ...(RegionCode && { "8": [RegionCode] }),
27                    "12": { "1": "", "2": true },
28                    ...(platform && { "14": [platform] })
29                },
30                "6": { "1": 3, "2": true },
31                "7": { "1": 2, "2": 30, "3": selectedRegion || 1 }
32            }
33            : isDomain
34                ? {
35                    "2": adjustedLimit,
36                    "3": {
37                        ...(format !== 0 && { "4": format }),
38                        ...(RegionCode && { "8": [RegionCode] }),
39                        "12": { "1": advertiserId, "2": true },
40                        ...(platform && { "14": [platform] })
41                    },
42                    "7": { "1": 1, "2": 30, "3": selectedRegion || 1 }
43                }
44                : {
45                    "2": adjustedLimit,
46                    "3": {
47                        ...(format !== 0 && { "4": format }),
48                        ...(RegionCode && { "8": [RegionCode] }),
49                        "12": { "1": "", "2": true },
50                        "13": { "1": [advertiserId] },
51                        ...(platform && { "14": [platform] })
52                    },
53                    "7": { "1": 1, "2": 30, "3": selectedRegion || 1 }
54                };
55
56        if (!dateRange?.anyTime) {
57            requestPayload["3"]["6"] = dateRange.fromDate;
58            requestPayload["3"]["7"] = dateRange.toDate;
59        }
60
61        if (nextPageToken) {
62            requestPayload["4"] = nextPageToken;
63        }
64
65        const postData = new URLSearchParams({
66            "f.req": JSON.stringify(requestPayload)
67        }).toString();
68
69        const options = {
70            hostname: "adstransparency.google.com",
71            path: "/anji/_/rpc/SearchService/SearchCreatives?authuser=0",
72            method: "POST",
73            headers: {
74                "Content-Type": "application/x-www-form-urlencoded",
75                "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/133.0.0.0 Safari/537.36",
76                "Connection": "keep-alive",
77                "Content-Length": Buffer.byteLength(String(postData)),
78            }
79        };
80
81        try {
82            // Fetch with proxy rotation
83            const jsonResponse = await fetchWithProxyRotation(options, postData, 5);
84
85            if (jsonResponse?.data) {
86                let parsedResponse;
87                try {
88                    parsedResponse = JSON.parse(jsonResponse.data);
89                } catch (error) {
90                    console.error("❌ JSON Parsing Error:", error.message);
91                    throw new Error(`Invalid JSON response: ${jsonResponse.data}`);
92                }
93
94                if (!parsedResponse || typeof parsedResponse !== "object") {
95                    throw new Error("Invalid JSON response");
96                }
97
98                if (parsedResponse["1"]) {
99                    allResults = allResults.concat(parsedResponse["1"]);
100                    await processCreativeDetails(allResults.flat().filter(Boolean), RegionCode);
101                }
102
103                nextPageToken = parsedResponse["2"] || null;
104                console.log(`🔹 Next Page Token: ${nextPageToken ? nextPageToken : "None"}`);
105            }
106        } catch (error) {
107            console.error(`❌ Request failed: ${error.message}`);
108            return allResults; // Return what was collected before failure
109        }
110
111        if (limitResults && allResults.length >= limitResults) {
112            console.log(`✅ Limit reached: Returning first ${limitResults} results.`);
113            return allResults.slice(0, limitResults);
114        }
115    } while (nextPageToken);
116
117    console.log(`✅ Total results fetched for ${advertiserId}: ${allResults.length}`);
118    return allResults;
119}

src/search_for_an_ads.js

1import { searchForAds } from "./search_advertiser_creatives.js";
2import { processCreativeDetails } from "./get_creative_details.js";
3import https from "https";
4
5// Regular expression to detect advertiser IDs
6const advertiserIdPattern = /^AR\d+$/;
7
8// Function to extract advertiser ID from a URL
9function extractAdvertiserIdFromUrl(url) {
10    const match = url.match(/advertiser\/(AR\d+)/);
11    return match ? match[1] : null;
12}
13
14export async function searchForAdsList(keyword_domain_advertiserid, maxAdvertisers, maxDomains, RegionCode = null, format, dateRange, platform, limitResults, domainExists) {
15    let advertiserid_domain = [];  // Store valid advertiser IDs
16    let keywords_domains = [];  // Store non-advertiser keywords_domains
17
18    console.log('domain Exists', domainExists);
19
20    // Normalize input into an array
21    const inputList = Array.isArray(keyword_domain_advertiserid) ? keyword_domain_advertiserid : [keyword_domain_advertiserid];
22
23    // Validate each item
24    inputList.forEach(item => {
25        if (typeof item !== "string") return;
26
27        let extractedId = item.startsWith("http") ? extractAdvertiserIdFromUrl(item) : item;
28
29        if (advertiserIdPattern.test(extractedId)|| domainExists) {
30            advertiserid_domain.push(extractedId);  // Store advertiser ID and domains
31        } else {
32            keywords_domains.push(item);  // Treat as a keyword/domain
33        }
34    });
35
36   // If advertiser IDs exist OR domainExists is true, process them immediately and SKIP API request
37    if (advertiserid_domain.length > 0 || domainExists) {
38        console.log(`🚀 Processing advertiser IDs directly (domainExists: ${domainExists}):`, advertiserid_domain);
39        const adPromises = advertiserid_domain.map(id => searchForAds(id, RegionCode, format, dateRange, platform, limitResults));
40        const adResults = await Promise.all(adPromises);
41    }
42
43
44    // If no keywords_domains exist, return no data (avoids unnecessary request)
45    if (keywords_domains.length === 0) {
46        console.warn(`⚠️ No valid keywords_domains found. Skipping API request.`);
47        return { message: "No data", keyword_domain_advertiserid };
48    }
49
50    console.log(`📡 Sending API request for keywords_domains:`, keywords_domains);
51
52    // Fix: If there's only one keyword, send it as a string. If multiple, send as an array.
53    const requestPayload = {
54        "1": keywords_domains.length === 1 ? keywords_domains[0] : keywords_domains,
55        "2": maxAdvertisers,
56        "3": maxDomains,
57        "4": RegionCode ? [RegionCode] : []
58    };
59
60    console.log(`requestPayload ${JSON.stringify(requestPayload, null, 2)}`);
61
62    const postData = new URLSearchParams({
63        "f.req": JSON.stringify(requestPayload)
64    }).toString();
65
66    const agent = new https.Agent({ keepAlive: true });
67    const options = {
68        agent,
69        hostname: "adstransparency.google.com",
70        path: "/anji/_/rpc/SearchService/SearchSuggestions?authuser=0",
71        method: "POST",
72        headers: {
73            "Content-Type": "application/x-www-form-urlencoded",
74            "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/133.0.0.0 Safari/537.36",
75            "Connection": "keep-alive",
76            "Content-Length": Buffer.byteLength(String(postData)),
77        }
78    };
79
80    return new Promise((resolve, reject) => {
81        const req = https.request(options, (res) => {
82            let data = "";
83
84            res.on("data", (chunk) => (data += chunk));
85
86            res.on("end", async () => {
87                if (res.statusCode >= 400) {
88                    console.error(`❌ HTTP Error ${res.statusCode}: ${data}`);
89                    return reject(new Error(`HTTP ${res.statusCode}: ${data}`));
90                }
91                // Check for CAPTCHA or blocking
92                if (data.includes("<title>302 Moved</title>") || data.includes("google.com/sorry")) {
93                    console.error("❌ CAPTCHA or Block Detected: Google has blocked the request.");
94                    reject(new Error("CAPTCHA detected or request blocked by Google."));
95                    return;
96                }
97                try {
98                    const jsonResponse = JSON.parse(data);
99                    const promises = [];
100                    //console.log(`statusCode : ${res.statusCode} | jsonResponse ${JSON.stringify(jsonResponse, null, 2)}`);
101
102                    // Ensure jsonResponse["1"] is an array before processing
103                    if (Array.isArray(jsonResponse["1"])) {
104                        promises.push(...jsonResponse["1"].map(async (item) => {
105                            let advertiserId = null;
106
107                            if (item["1"] && item["1"]["2"]) {
108                                advertiserId = item["1"]["2"];
109                            } else if (item["2"] && item["2"]["1"]) {
110                                advertiserId = item["2"]["1"];
111                            }
112
113                            return advertiserId ? searchForAds(advertiserId, RegionCode, format, dateRange, platform, limitResults) : null;
114                        }));
115                    }
116
117                    // Wait for all promises to resolve
118                    const allResults = await Promise.all(promises);
119                    const creativeDetails = await processCreativeDetails(allResults.flat().filter(Boolean), RegionCode);
120                    resolve(creativeDetails.flat().filter(Boolean));
121
122                } catch (error) {
123                    console.error("❌ JSON Parsing Error:", error);
124                    reject(error);
125                }
126            });
127        });
128
129        req.on("error", (err) => {
130            console.error("❌ Request Error:", err.message);
131            reject(err);
132        });
133
134        req.write(postData);
135        req.end();
136    });
137}

src/search_for_an_political_ads.js

1import { searchForAds } from "./search_advertiser_creatives.js";
2import { processCreativeDetails } from "./get_creative_details.js";
3import https from "https";
4
5// Regular expression to detect advertiser IDs
6const advertiserIdPattern = /^AR\d+$/;
7
8// Function to extract advertiser ID from a URL
9function extractAdvertiserIdFromUrl(url) {
10    const match = url.match(/advertiser\/(AR\d+)/);
11    return match ? match[1] : null;
12}
13
14export async function searchForPoliticalAdsList(keyword_advertiserid, maxAdvertisers, RegionCode = null, format, dateRange, platform, limitResults) {
15    let advertiserid = [];  // Store valid advertiser IDs
16    let key_advid = [];  // Store non-advertiser keyword or advertiserid
17    let isPolitical = true
18    // Normalize input into an array
19    const inputList = Array.isArray(keyword_advertiserid) ? keyword_advertiserid : [keyword_advertiserid];
20
21    // Validate each item
22    inputList.forEach(item => {
23        if (typeof item !== "string") return;
24
25        let extractedId = item.startsWith("http") ? extractAdvertiserIdFromUrl(item) : item;
26
27        if (advertiserIdPattern.test(extractedId)) {
28            advertiserid.push(extractedId);  // Store advertiser ID
29        } else {
30            key_advid.push(item);  // Treat as a keyword
31        }
32    });
33
34    // If advertiser IDs exist, process it immediately and SKIP API request
35    if (advertiserid.length > 0) {
36        console.log(`🚀 Processing advertiser IDs directly :`, advertiserid);
37        const adPromises = advertiserid.map(id => searchForAds(id, RegionCode, format, dateRange, platform, limitResults, isPolitical));
38        const adResults = await Promise.all(adPromises);
39        const creativeDetails = await processCreativeDetails(adResults.flat().filter(Boolean), RegionCode);
40        return creativeDetails.flat().filter(Boolean);
41    }
42
43    // If no keyword or advertiserid exist, return no data (avoids unnecessary request)
44    if (key_advid.length === 0) {
45        console.warn(`⚠️ No valid keyword or advertiserid found. Skipping API request.`);
46        return { message: "No data", keyword_advertiserid };
47    }
48
49    console.log(`📡 Sending API request for keyword or advertiserid:`, key_advid);
50
51    // Fix: If there's only one keyword, send it as a string. If multiple, send as an array.
52    const requestPayload = {
53        "2": maxAdvertisers,
54        "4": {
55            "2": RegionCode ? [RegionCode] : [],
56            "3": Array.isArray(key_advid) ? key_advid.join(",") : key_advid  // Ensure a string
57        },
58        "7": {
59            "1": 2
60        }
61    };
62
63    console.log(`requestPayload ${JSON.stringify(requestPayload, null, 2)}`);
64    const postData = new URLSearchParams({
65        "f.req": JSON.stringify(requestPayload)
66    }).toString();
67
68    const agent = new https.Agent({ keepAlive: true });
69    const options = {
70        agent,
71        hostname: "adstransparency.google.com",
72        path: "/anji/_/rpc/SearchService/SearchAdvertisers?authuser=0",
73        method: "POST",
74        headers: {
75            "Content-Type": "application/x-www-form-urlencoded",
76            "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/133.0.0.0 Safari/537.36",
77            "Connection": "keep-alive",
78            "Content-Length": Buffer.byteLength(String(postData)),
79        }
80    };
81
82    return new Promise((resolve, reject) => {
83        const req = https.request(options, (res) => {
84            let data = "";
85
86            res.on("data", (chunk) => (data += chunk));
87
88            res.on("end", async () => {
89                if (res.statusCode >= 400) {
90                    console.error(`❌ HTTP Error ${res.statusCode}: ${data}`);
91                    return reject(new Error(`HTTP ${res.statusCode}: ${data}`));
92                }
93                // Check for CAPTCHA or blocking
94                if (data.includes("<title>302 Moved</title>") || data.includes("google.com/sorry")) {
95                    console.error("❌ CAPTCHA or Block Detected: Google has blocked the request.");
96                    reject(new Error("CAPTCHA detected or request blocked by Google."));
97                    return;
98                }
99                try {
100                    const jsonResponse = JSON.parse(data);
101                    const promises = [];
102
103                    console.log(`statusCode : ${res.statusCode} | jsonResponse ${JSON.stringify(jsonResponse, null, 2)}`);
104                    // Ensure jsonResponse["1"] is an array before processing
105                    if (Array.isArray(jsonResponse["1"])) {
106                        promises.push(...jsonResponse["1"].map(async (item) => {
107                            let advertiserId = null;
108
109                            // New response format handling
110                            if (item["1"]) {
111                                advertiserId = item["1"];
112                            }
113
114                            return advertiserId ? searchForAds(advertiserId, RegionCode, format, dateRange, platform, limitResults, isPolitical ) : null;
115                        }));
116                    }
117
118                    // Wait for all promises to resolve
119                    const allResults = await Promise.all(promises);
120                    const creativeDetails = await processCreativeDetails(allResults.flat().filter(Boolean), RegionCode);
121                    resolve(creativeDetails.flat().filter(Boolean));
122
123                } catch (error) {
124                    console.error("❌ JSON Parsing Error:", error);
125                    reject(error);
126                }
127            });
128        });
129
130        req.on("error", (err) => {
131            console.error("❌ Request Error:", err.message);
132            reject(err);
133        });
134
135        req.write(postData);
136        req.end();
137    });
138}

src0/filterAdvertiser.js

1import { Dataset } from 'crawlee';
2import { getDateRange } from './getDateRange.js';
3import { searchForAdsList } from './search_for_an_ads.js';
4import { parseAdvertiserUrl } from './parseAdvertiserUrl.js';
5
6
7export const filterAdvertiser = async (kw, Use_URL_Filter, maxAdvertisers, maxDomains, RegionCode, format, platform, presetDate, startDate, endDate, limitResults,domainExists) => {
8    const parsedData = parseAdvertiserUrl(kw);
9    try {
10        const filterData = Use_URL_Filter
11            ? {
12                advertiserId_OR_kw: parsedData.advertiserId_domain,
13                maxDomains,
14                maxAdvertisers,
15                RegionCode: parsedData.RegionCode,
16                format: parseInt(parsedData.format),
17                dateRange: getDateRange(parsedData.presetDate, parsedData.startDate, parsedData.endDate),
18                platform: parseInt(parsedData.platform),
19                startDate: parsedData.startDate,
20                endDate: parsedData.endDate,
21                limitResults,
22                domainExists : parsedData.domainExists
23            }
24            : {
25                advertiserId_OR_kw: parsedData.advertiserId_domain,
26                maxDomains,
27                maxAdvertisers,
28                RegionCode,
29                format: parseInt(format),
30                platform: parseInt(platform),
31                dateRange: getDateRange(presetDate, startDate, endDate),
32                startDate,
33                endDate,
34                limitResults,
35                domainExists
36            };
37
38        //console.log(Use_URL_Filter ? 'If Use_URL_Filter is true, override input filter:' : 'Use Actor.getInput() filtering:', filterData);
39
40        let adsData = await searchForAdsList(
41            parsedData.advertiserId_domain,
42            maxAdvertisers,
43            maxDomains,
44            Use_URL_Filter ? parsedData.RegionCode : RegionCode,
45            parseInt(Use_URL_Filter ? parsedData.format : format),
46            getDateRange(Use_URL_Filter ? parsedData.presetDate : presetDate, Use_URL_Filter ? parsedData.startDate : startDate, Use_URL_Filter ? parsedData.endDate : endDate),
47            parseInt(Use_URL_Filter ? parsedData.platform : platform),
48            limitResults,
49            parsedData.domainExists
50        );
51
52        await Dataset.pushData({ advertiserId_OR_kw1: parsedData.advertiserId_domain, adsData });
53    } catch (error) {
54        console.error(`❌ Error processing advertiser ID "${parsedData.advertiserId_domain}":`, error);
55    }
56};

src0/getDateRange.js

1import dayjs from 'dayjs';
2
3function validateCustomDates(Start_Date, End_Date) {
4    const isValidDate = (date) => /^\d{4}-\d{2}-\d{2}$/.test(date);
5
6    let fromDate = isValidDate(Start_Date) ? parseInt(Start_Date.replace(/-/g, ""), 10) : null;
7    let toDate = isValidDate(End_Date) ? parseInt(End_Date.replace(/-/g, ""), 10) : null;
8
9    if (fromDate && toDate) {
10        if (fromDate > toDate) {
11            console.error("❌ Error: Start_Date cannot be after End_Date.");
12            return null; // Do not return error, let it fall back to default
13        }
14        return { fromDate, toDate, anyTime: false, dateRangeLabel: "Custom Range" };
15    }
16
17    if ((Start_Date && !isValidDate(Start_Date)) || (End_Date && !isValidDate(End_Date))) {
18        console.error("❌ Error: Invalid date format. Expected YYYY-MM-DD. Falling back to default values.");
19        return null; // Do not return error, let it fall back to default
20    }
21
22    return null;
23}
24
25export function getDateRange(days, Start_Date, End_Date) {
26    let customDateRange = validateCustomDates(Start_Date, End_Date);
27    if (customDateRange) return customDateRange;
28
29    let yesterday = parseInt(dayjs().subtract(1, "day").format("YYYYMMDD"), 10);
30    let defaultToDate = yesterday;
31    let defaultFromDate;
32    let anyTime = false;
33    let dateRangeLabel = "";
34
35    if (days === "0") {
36        defaultFromDate = parseInt(dayjs().subtract(2, "day").format("YYYYMMDD"), 10);
37        dateRangeLabel = "Today";
38    } else if (days === "1") {
39        defaultFromDate = parseInt(dayjs().subtract(2, "day").format("YYYYMMDD"), 10);
40        dateRangeLabel = "Yesterday";
41    } else if (days === "7") {
42        defaultFromDate = parseInt(dayjs().subtract(8, "day").format("YYYYMMDD"), 10);
43        dateRangeLabel = "Last 7 days";
44    } else if (days === "30") {
45        defaultFromDate = parseInt(dayjs().subtract(31, "day").format("YYYYMMDD"), 10);
46        dateRangeLabel = "Last 30 days";
47    } else if (days === "-1") {
48        dateRangeLabel = "Any time";
49        return { anyTime: true, dateRangeLabel };
50    } else {
51        return null;
52    }
53
54    return { fromDate: defaultFromDate, toDate: defaultToDate, anyTime, dateRangeLabel };
55}

src0/get_creative_details.js

1import https from "https";
2import pLimit from "p-limit";
3import { processAds } from "./processAds.js";  // Import function
4
5/**
6 * Function to get creative details by ID
7 * @param {string} creativeId - The creative ID to fetch details for
8 * @param {string} advertiserId - The advertiser ID associated with the creative
9 * @param {number} regionCode - The region code (default is worldwide: 2012)
10 * @returns {Promise<Object>} - The creative details
11 */
12export async function getCreativeDetails(creativeId, advertiserId, regionCode = null) {
13    //const startTime = performance.now();
14    const requestPayload = {
15        "1": advertiserId,
16        "2": creativeId,
17        "5": {
18            "1": 1, // Page number
19            "2": 30, // Page size
20            "3": 2012
21            //"3": regionCode ? [regionCode] : [] // Region filter
22        }
23    };
24
25    const postData = new URLSearchParams({
26        "f.req": JSON.stringify(requestPayload)
27    }).toString();
28    const agent = new https.Agent({ keepAlive: true });
29
30    const options = {
31        agent, // Reuse connections
32        hostname: "adstransparency.google.com",
33        path: "/anji/_/rpc/LookupService/GetCreativeById?authuser=0",
34        method: "POST",
35        headers: {
36            "Content-Type": "application/x-www-form-urlencoded",
37            "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/133.0.0.0 Safari/537.36",
38            "Connection": "keep-alive",
39            "Content-Length": Buffer.byteLength(String(postData)),
40        }
41    };
42
43    return new Promise((resolve, reject) => {
44        const req = https.request(options, (res) => {
45            let data = "";
46
47            //console.log(`get_creative_details - 🔹 Status Code: ${res.statusCode}`);
48
49            res.on("data", (chunk) => {
50                data += chunk;
51            });
52
53            res.on("end", () => {
54
55                //const endTime = performance.now();
56                //console.log(`⏳ Creative ID ${creativeId} took ${(endTime - startTime).toFixed(2)} ms`);
57
58                if (res.statusCode >= 400) {
59                    console.error(`❌ HTTP Error ${res.statusCode}: ${data}`);
60                    //console.log(`${res.statusCode}: ${JSON.stringify(requestPayload, null, 2)}`);
61                    reject(new Error(`HTTP ${res.statusCode}: ${data}`));
62                } else {
63                    try {
64                        const parsedResponse = JSON.parse(data);
65                        console.log(`requestPayload ${JSON.stringify(requestPayload, null, 2)}`);
66                        resolve(parsedResponse);
67                    } catch (error) {
68                        console.error("❌ JSON Parsing Error:", error);
69                        reject(error);
70                    }
71                }
72            });
73        });
74
75        req.on("error", (err) => {
76            console.error("❌ Request Error:", err.message);
77            reject(err);
78        });
79
80        req.write(postData);
81        req.end();
82    });
83}
84
85/**
86 * Function to process allResults and fetch creative details
87 * @param {Array<Object>} allResults - The array of results from searchForAds
88 * @param {number} regionCode - The region code (default is worldwide: 2012)
89 * @returns {Promise<Array<Object>>} - Array of creative details
90 */
91
92const limit = pLimit(2); // Limit to 5 concurrent requests
93
94export async function processCreativeDetails(allResults, regionCode = 2012) {
95    const results = await Promise.allSettled(
96        allResults.map((result) => {
97            if (result["2"]) {
98                return getCreativeDetails(result["2"], result["1"], regionCode);
99            }
100            return null;
101        })
102    );
103
104    // Extract only successful responses
105    const fulfilledResults = results
106        .filter((res) => res.status === "fulfilled")
107        .map((res) => res.value);
108
109    console.log(`✅ Successfully fetched ${fulfilledResults.length} creative details.`);
110
111    // Send data to processAds.js for formatting
112    //return fulfilledResults;
113    return processAds(fulfilledResults);
114}

src0/main.js

1const startTime = performance.now();
2import { Actor } from 'apify';
3import { Dataset } from 'crawlee';
4import { getDateRange } from './getDateRange.js';
5import { parseAdvertiserUrl } from './parseAdvertiserUrl.js';
6import { searchForAdsList } from './search_for_an_ads.js';
7import { searchForPoliticalAdsList } from './search_for_an_political_ads.js';
8import { filterAdvertiser } from './filterAdvertiser.js';
9import fs from 'fs';
10
11await Actor.init();
12
13// Load and parse input parameters
14const input = await Actor.getInput() ?? {};
15const {
16    keyword_domain_advertiserid,
17    maxAdvertisers,
18    maxDomains,
19    region,
20    format,
21    platform,
22    presetDate,
23    startDate,
24    endDate,
25    Use_URL_Filter,
26    limitResults,
27    isPolitical
28} = input;
29
30// Load regions.json and resolve region code
31const regionMapping = JSON.parse(fs.readFileSync("src/regions.json", "utf-8"));
32const regionEntry = regionMapping.regions.region.find(r => r["4"] === region);
33const RegionCode = regionEntry ? regionEntry["1"] : undefined;
34
35// Determine date range
36const dateRange = getDateRange(presetDate, startDate, endDate);
37
38// Function to detect URLs
39const isGenericUrl = (kw) => /^https?:\/\//.test(kw);
40const advertiserIdPattern = (kw) => /^AR\d+$/.test(kw);
41
42const isAdvertiserUrl = /https:\/\/adstransparency\.google\.com\/advertiser\/(AR\d+)/;
43const isDomainUrl = /[?&]domain=([^&]+)/;
44const isTopic = /[?&]topic=([^&]+)/;
45
46let domainExists
47
48const processKeyword = async (kw) => {
49    try {
50        let filterData;
51
52        if (kw.match(isTopic) || isPolitical && !kw.match(isAdvertiserUrl) && !kw.match(isDomainUrl)) {
53            kw = kw.replace(/\s+/g, "+");  // Replace spaces with '+'
54            console.log(`✅✅ Political : ${kw}`);
55            const parsedData = parseAdvertiserUrl(kw);
56
57            const filterData =  {
58                adveritserId_OR_kw: parsedData.advertiserId_domain,
59                maxAdvertisers,
60                RegionCode: parsedData.RegionCode,
61                format: parseInt(parsedData.format),
62                platform: parseInt(parsedData.platform),
63                dateRange: getDateRange(parsedData.presetDate, parsedData.startDate, parsedData.endDate),
64                startDate: parsedData.startDate,
65                endDate: parsedData.endDate,
66                limitResults,
67            }
68            console.log("Filter Data:", JSON.stringify(filterData, null, 2));
69            let adsData = await searchForPoliticalAdsList(
70                parsedData.advertiserId_domain,
71                maxAdvertisers,
72                parsedData.RegionCode,
73                parseInt(parsedData.format),
74                getDateRange(parsedData.presetDate, parsedData.startDate, parsedData.endDate),
75                parseInt(parsedData.platform),
76                limitResults
77            );
78
79            await Dataset.pushData({ advertiserId_OR_kw: kw, adsData });
80
81        }
82        else if (kw.match(isAdvertiserUrl) || kw.match(isDomainUrl)) {
83            const advertiserMatch = kw.match(isAdvertiserUrl);
84            const domainMatch = kw.match(isDomainUrl);
85            const parsedData = parseAdvertiserUrl(kw);
86
87            if (advertiserMatch && domainMatch) {
88                console.error(`❌ Invalid URL: Cannot contain both advertiser ID and domain -> ${kw}`);
89                return; // Skip processing this invalid URL
90            }
91            if (advertiserMatch) {
92                // Advertiser ID detected
93                if (!parsedData) throw new Error("Invalid advertiser URL");
94                await filterAdvertiser(kw, Use_URL_Filter, maxAdvertisers, maxDomains, RegionCode, format, platform, presetDate, startDate, endDate, limitResults, domainExists);
95            } else if (domainMatch) {
96                // Domain detected
97                console.log('🔹 Processing Domain:', parsedData.advertiserId_domain,);
98                await filterAdvertiser(kw, Use_URL_Filter, maxAdvertisers, maxDomains, RegionCode, format, platform, presetDate, startDate, endDate, limitResults, domainExists);
99            }
100        }
101        else {
102            // Handle generic keywords (not URLs)
103            if (isGenericUrl(kw)) console.warn(`⚠️ Detected a generic URL: ${kw}.\nTreating as a regular keyword.`);
104            kw = kw.replace(/\s+/g, "+");  // Replace spaces with '+'
105            if (advertiserIdPattern(kw)) console.log(`✅ Advertiser ID: ${kw}`);
106            filterData = {
107                advertiserId_OR_kw: kw,
108                maxDomains,
109                maxAdvertisers,
110                RegionCode,
111                format: parseInt(format),
112                platform: parseInt(platform),
113                dateRange,
114                startDate,
115                endDate
116            };
117
118            let adsData = await searchForAdsList(
119                kw,
120                maxAdvertisers,
121                maxDomains,
122                RegionCode,
123                parseInt(format),
124                getDateRange(presetDate, startDate, endDate),
125                parseInt(platform),
126                limitResults
127            );
128            await Dataset.pushData({ advertiserId_OR_kw0: kw, adsData });
129        }
130    } catch (error) {
131        console.error(`❌ Error processing "${kw}":`, error);
132    }
133};
134
135
136// Process all queries in parallel
137await Promise.all(keyword_domain_advertiserid.map(processKeyword));
138
139const endTime = performance.now();
140console.log(`⏳ Execution time: ${(endTime - startTime).toFixed(2)} ms`);
141await Actor.exit();

src0/parseAdvertiserUrl.js

1import fs from "fs";
2
3export function parseAdvertiserUrl(url) {
4    const advertiserPattern = /https:\/\/adstransparency\.google\.com\/advertiser\/(AR\d+)/;
5    const match = url.match(advertiserPattern);
6
7    const urlParams = new URL(url).searchParams;
8    const advertiserId = match ? match[1] : null;
9    const domain = urlParams.has("domain") ? urlParams.get("domain") : null;
10
11    // Ensure that only one of advertiserId or domain exists
12    if (advertiserId && domain) {
13        return null; // Invalid URL structure
14    }
15
16    // Determine advertiserId_domain
17    const advertiserId_domain = advertiserId || domain || null;
18
19    // Extract query parameters
20    const region = urlParams.get("region") || null;
21    const format = urlParams.get("format") || null;
22    const presetDate = urlParams.get("preset-date")?.replace(/ /g, "+") || null;
23    const startDate = urlParams.get("start-date") || null;
24    const endDate = urlParams.get("end-date") || null;
25    const platform = urlParams.get("platform") || null;
26
27    // Load regions.json and resolve region code
28    const regionMapping = JSON.parse(fs.readFileSync("src/regions.json", "utf-8"));
29    const regionEntry = regionMapping.regions.region.find(r => r["3"] === region);
30    const RegionCode = regionEntry ? regionEntry["1"] : undefined;
31
32    // Platform Mapping
33    const platformMap = {
34        "MAPS": "2",
35        "PLAY": "1",
36        "SHOPPING": "4",
37        "SEARCH": "3",
38        "YOUTUBE": "5"
39    };
40
41    // Format Mapping
42    const formatMap = {
43        "VIDEO": "3",
44        "TEXT": "1",
45        "IMAGE": "2"
46    };
47
48    // Preset Date Mapping
49    const presetDateMap = {
50        "Today": "0",
51        "Yesterday": "1",
52        "Last+7+days": "7",
53        "Last+30+days": "30"
54    };
55
56    return {
57        advertiserId_domain,
58        domainExists: !!domain, // ✅ Returns true if domain exists, false otherwise
59        RegionCode,
60        format: formatMap[format] || "0",  // Default to "0" (All formats)
61        presetDate: presetDateMap[presetDate] || "-1",  // Default to "-1" (Any Time)
62        startDate,
63        endDate,
64        platform: platformMap[platform] || "0" // Default to "0" (All platforms)
65    };
66}

src0/processAds.js

1import fs from "fs";
2
3// Load the region mapping file
4const regionMapping = JSON.parse(fs.readFileSync("src/regions.json", "utf-8"));
5
6// Platform mapping for `"8"` field (Google services)
7const platformMapping = {
8    1: "Google Play",
9    2: "Google Maps",
10    3: "Google Search",
11    4: "Google Shopping",
12    5: "YouTube"
13};
14
15// Format mapping for `"1": {"8": ...}`
16const formatMapping = {
17    1: "TEXT",
18    2: "IMAGE",
19    3: "VIDEO"
20};
21
22// Convert region codes to readable names
23function getRegionName(regionCode) {
24    const regionEntry = regionMapping.regions.region.find(r => r["1"] === regionCode);
25    return regionEntry
26        ? { regionCode: regionEntry["3"], regionName: regionEntry["4"] }  // "3" = Country Code, "4" = Country Name
27        : { regionCode: "Unknown", regionName: "N/A" };
28}
29
30export function processAds(allResults) {
31    if (!allResults || allResults.length === 0) {
32        console.log("No ad data available to process.");
33        return [];
34    }
35
36    const formattedAds = allResults.map(ad => {
37        const rawRegions = ad?.["1"]?.["17"];
38
39        //console.log("🔍 Raw region data:", JSON.stringify(rawRegions, null, 2));  // Debugging
40
41        const regionStats = Array.isArray(rawRegions)
42            ? rawRegions.map(region => {
43                if (!region || typeof region !== "object") return {};  // Prevent errors on missing data
44
45                const { regionCode, regionName } = getRegionName(region["1"]);
46
47                // ✅ Extract platform stats from "8"
48                const platformStats = Array.isArray(region["8"])
49                    ? region["8"].map(platform => ({
50                        surfaceName: platformMapping[platform["1"]] || "Unknown Platform",
51                        impressions: {
52                            lowerBound: platform["2"] ?? 0,
53                            upperBound: platform["3"] ?? 0
54                        }
55                    }))
56                    : [];
57
58                return {
59                    regionNumber: region["1"] ?? "Unknown",
60                    regionCode,
61                    regionName,
62                    firstShown: region.hasOwnProperty("4") ? region["4"] : "Unknown",
63                    lastShown: region.hasOwnProperty("5") ? region["5"] : "Unknown",
64                    impressions: {
65                        lowerBound: region["2"] ?? 0,
66                        upperBound: region["3"] ?? 0
67                    },
68                    platformStats
69                };
70            })
71            : [];
72
73        // ✅ Get format from `ad["1"]["8"]`
74        const formatType = formatMapping[ad?.["1"]?.["8"]] || "UNKNOWN";
75
76        // ✅ Extract preview URLs from both possible locations
77        const previewUrls = Array.isArray(ad?.["1"]?.["5"])
78            ? ad["1"]["5"].map(item =>
79                item?.["1"]?.["4"] ??   // Case 1: "1": { "4": "URL" }
80                item?.["3"]?.["2"] ??   // Case 2: "3": { "2": "URL" }
81                "Unknown"
82            )
83            : [];
84
85        // ✅ Construct Ad Transparency URL
86        const advertiserId = ad?.["1"]?.["1"] ?? "Unknown";
87        const creativeId = ad?.["1"]?.["2"] ?? "Unknown";
88        const adTransparencyUrl =
89            advertiserId !== "Unknown" && creativeId !== "Unknown"
90                ? `https://adstransparency.google.com/advertiser/${advertiserId}/creative/${creativeId}?region=anywhere`
91                : "Unknown";
92
93        return {
94            advertiserId,
95            creativeId,
96            creativeRegions: [...new Set(regionStats.map(r => r.regionName))],  // ✅ Unique region names
97            adTransparencyUrl, // ✅ Added ad transparency link
98            previewUrls,  // ✅ Now properly extracting URLs
99            format: formatType,  // ✅ Updated format assignment
100            regionStats
101        };
102    });
103
104    console.log(`✅ Processed ${formattedAds.length} ads.`);
105
106    return formattedAds;
107}

src0/regions.json

1{
2  "regions": {
3    "region": [
4      {
5        "1": 2008,
6        "3": "AL",
7        "4": "Albania",
8        "8": {
9          "1": 411533320,
10          "2": 201683310
11        },
12        "10": 1
13      },
14      {
15        "1": 2012,
16        "3": "DZ",
17        "4": "Algeria",
18        "8": {
19          "1": 280338860,
20          "2": 16596260
21        },
22        "10": 1
23      },
24      {
25        "1": 2016,
26        "3": "AS",
27        "4": "American Samoa",
28        "8": {
29          "1": -142709720,
30          "2": -1701322170
31        },
32        "10": 1
33      },
34      {
35        "1": 2020,
36        "3": "AD",
37        "4": "Andorra",
38        "8": {
39          "1": 425062850,
40          "2": 15218010
41        },
42        "10": 1
43      },
44      {
45        "1": 2024,
46        "3": "AO",
47        "4": "Angola",
48        "8": {
49          "1": -112026920,
50          "2": 178738870
51        },
52        "10": 1
53      },
54      {
55        "1": 2010,
56        "3": "AQ",
57        "4": "Antarctica",
58        "8": {
59          "1": -752509730,
60          "2": -713890
61        },
62        "10": 1
63      },
64      {
65        "1": 2028,
66        "3": "AG",
67        "4": "Antigua and Barbuda",
68        "8": {
69          "1": 170608160,
70          "2": -617964280
71        },
72        "10": 1
73      },
74      {
75        "1": 2032,
76        "3": "AR",
77        "4": "Argentina",
78        "8": {
79          "1": -384160970,
80          "2": -636166720
81        },
82        "10": 1
83      },
84      {
85        "1": 2051,
86        "3": "AM",
87        "4": "Armenia",
88        "8": {
89          "1": 400690990,
90          "2": 450381890
91        },
92        "10": 1
93      },
94      {
95        "1": 2036,
96        "3": "AU",
97        "4": "Australia",
98        "8": {
99          "1": -252743980,
100          "2": 1337751360
101        },
102        "10": 1
103      },
104      {
105        "1": 2040,
106        "3": "AT",
107        "4": "Austria",
108        "5": "Austria",
109        "8": {
110          "1": 475162310,
111          "2": 145500720
112        },
113        "10": 1
114      },
115      {
116        "1": 2031,
117        "3": "AZ",
118        "4": "Azerbaijan",
119        "8": {
120          "1": 401431050,
121          "2": 475769270
122        },
123        "10": 1
124      },
125      {
126        "1": 2048,
127        "3": "BH",
128        "4": "Bahrain",
129        "8": {
130          "1": 260667000,
131          "2": 505577000
132        },
133        "10": 1
134      },
135      {
136        "1": 2050,
137        "3": "BD",
138        "4": "Bangladesh",
139        "8": {
140          "1": 236849940,
141          "2": 903563310
142        },
143        "10": 1
144      },
145      {
146        "1": 2052,
147        "3": "BB",
148        "4": "Barbados",
149        "8": {
150          "1": 131938870,
151          "2": -595431980
152        },
153        "10": 1
154      },
155      {
156        "1": 2112,
157        "3": "BY",
158        "4": "Belarus",
159        "8": {
160          "1": 537098070,
161          "2": 279533890
162        },
163        "10": 1
164      },
165      {
166        "1": 2056,
167        "3": "BE",
168        "4": "Belgium",
169        "5": "Belgium",
170        "8": {
171          "1": 505038870,
172          "2": 44699360
173        },
174        "10": 1
175      },
176      {
177        "1": 2084,
178        "3": "BZ",
179        "4": "Belize",
180        "8": {
181          "1": 171898770,
182          "2": -884976500
183        },
184        "10": 1
185      },
186      {
187        "1": 2204,
188        "3": "BJ",
189        "4": "Benin",
190        "8": {
191          "1": 93076900,
192          "2": 23158340
193        },
194        "10": 1
195      },
196      {
197        "1": 2064,
198        "3": "BT",
199        "4": "Bhutan",
200        "8": {
201          "1": 275141620,
202          "2": 904336010
203        },
204        "10": 1
205      },
206      {
207        "1": 2068,
208        "3": "BO",
209        "4": "Bolivia",
210        "8": {
211          "1": -162901540,
212          "2": -635886530
213        },
214        "10": 1
215      },
216      {
217        "1": 2070,
218        "3": "BA",
219        "4": "Bosnia and Herzegovina",
220        "8": {
221          "1": 439158860,
222          "2": 176790760
223        },
224        "10": 1
225      },
226      {
227        "1": 2072,
228        "3": "BW",
229        "4": "Botswana",
230        "8": {
231          "1": -223284740,
232          "2": 246848660
233        },
234        "10": 1
235      },
236      {
237        "1": 2076,
238        "3": "BR",
239        "4": "Brazil",
240        "8": {
241          "1": -142350040,
242          "2": -519252800
243        },
244        "10": 1
245      },
246      {
247        "1": 2096,
248        "3": "BN",
249        "4": "Brunei",
250        "8": {
251          "1": 45352770,
252          "2": 1147276690
253        },
254        "10": 1
255      },
256      {
257        "1": 2100,
258        "3": "BG",
259        "4": "Bulgaria",
260        "8": {
261          "1": 427338830,
262          "2": 254858300
263        },
264        "10": 1
265      },
266      {
267        "1": 2854,
268        "3": "BF",
269        "4": "Burkina Faso",
270        "8": {
271          "1": 122383330,
272          "2": -15615930
273        },
274        "10": 1
275      },
276      {
277        "1": 2108,
278        "3": "BI",
279        "4": "Burundi",
280        "8": {
281          "1": -33730560,
282          "2": 299188860
283        },
284        "10": 1
285      },
286      {
287        "1": 2116,
288        "3": "KH",
289        "4": "Cambodia",
290        "8": {
291          "1": 125656790,
292          "2": 1049909630
293        },
294        "10": 1
295      },
296      {
297        "1": 2120,
298        "3": "CM",
299        "4": "Cameroon",
300        "8": {
301          "1": 73697220,
302          "2": 123547220
303        },
304        "10": 1
305      },
306      {
307        "1": 2124,
308        "3": "CA",
309        "4": "Canada",
310        "5": "Canada",
311        "8": {
312          "1": 561303660,
313          "2": -1063467710
314        },
315        "10": 1
316      },
317      {
318        "1": 2132,
319        "3": "CV",
320        "4": "Cabo Verde",
321        "5": "Cabo Verde",
322        "8": {
323          "1": 165388000,
324          "2": -230418000
325        },
326        "10": 1
327      },
328      {
329        "1": 2535,
330        "3": "BQ",
331        "4": "Caribbean Netherlands",
332        "8": {
333          "1": 121783611,
334          "2": -682385339
335        },
336        "10": 1
337      },
338      {
339        "1": 2140,
340        "3": "CF",
341        "4": "Central African Republic",
342        "8": {
343          "1": 66111110,
344          "2": 209394440
345        },
346        "10": 1
347      },
348      {
349        "1": 2148,
350        "3": "TD",
351        "4": "Chad",
352        "8": {
353          "1": 154541660,
354          "2": 187322070
355        },
356        "10": 1
357      },
358      {
359        "1": 2152,
360        "3": "CL",
361        "4": "Chile",
362        "8": {
363          "1": -356751470,
364          "2": -715429690
365        },
366        "10": 1
367      },
368      {
369        "1": 2156,
370        "3": "CN",
371        "4": "China",
372        "8": {
373          "1": 358616600,
374          "2": 1041953970
375        },
376        "10": 1
377      },
378      {
379        "1": 2162,
380        "3": "CX",
381        "4": "Christmas Island",
382        "8": {
383          "1": -104475250,
384          "2": 1056904490
385        },
386        "10": 1
387      },
388      {
389        "1": 2166,
390        "3": "CC",
391        "4": "Cocos (Keeling) Islands",
392        "8": {
393          "1": -121641650,
394          "2": 968709560
395        },
396        "10": 1
397      },
398      {
399        "1": 2170,
400        "3": "CO",
401        "4": "Colombia",
402        "8": {
403          "1": 45708680,
404          "2": -742973330
405        },
406        "10": 1
407      },
408      {
409        "1": 2174,
410        "3": "KM",
411        "4": "Comoros",
412        "8": {
413          "1": -116455000,
414          "2": 433333000
415        },
416        "10": 1
417      },
418      {
419        "1": 2184,
420        "3": "CK",
421        "4": "Cook Islands",
422        "8": {
423          "1": -212367360,
424          "2": -1597776710
425        },
426        "10": 1
427      },
428      {
429        "1": 2188,
430        "3": "CR",
431        "4": "Costa Rica",
432        "8": {
433          "1": 97489170,
434          "2": -837534280
435        },
436        "10": 1
437      },
438      {
439        "1": 2384,
440        "3": "CI",
441        "4": "Cote d'Ivoire",
442        "8": {
443          "1": 75399890,
444          "2": -55470800
445        },
446        "10": 1
447      },
448      {
449        "1": 2191,
450        "3": "HR",
451        "4": "Croatia",
452        "8": {
453          "1": 451000000,
454          "2": 152000000
455        },
456        "10": 1
457      },
458      {
459        "1": 2531,
460        "3": "CW",
461        "4": "Curacao",
462        "8": {
463          "1": 121695700,
464          "2": -689900200
465        },
466        "10": 1
467      },
468      {
469        "1": 2196,
470        "3": "CY",
471        "4": "Cyprus",
472        "8": {
473          "1": 351264130,
474          "2": 334298590
475        },
476        "10": 1
477      },
478      {
479        "1": 2203,
480        "3": "CZ",
481        "4": "Czechia",
482        "5": "Czechia",
483        "8": {
484          "1": 498174920,
485          "2": 154729620
486        },
487        "10": 1
488      },
489      {
490        "1": 2180,
491        "3": "CD",
492        "4": "Democratic Republic of the Congo",
493        "8": {
494          "1": -40383330,
495          "2": 217586640
496        },
497        "10": 1
498      },
499      {
500        "1": 2208,
501        "3": "DK",
502        "4": "Denmark",
503        "5": "Denmark",
504        "8": {
505          "1": 562639200,
506          "2": 95017850
507        },
508        "10": 1
509      },
510      {
511        "1": 2262,
512        "3": "DJ",
513        "4": "Djibouti",
514        "8": {
515          "1": 118251380,
516          "2": 425902750
517        },
518        "10": 1
519      },
520      {
521        "1": 2212,
522        "3": "DM",
523        "4": "Dominica",
524        "8": {
525          "1": 154149990,
526          "2": -613709760
527        },
528        "10": 1
529      },
530      {
531        "1": 2214,
532        "3": "DO",
533        "4": "Dominican Republic",
534        "8": {
535          "1": 187356930,
536          "2": -701626510
537        },
538        "10": 1
539      },
540      {
541        "1": 2218,
542        "3": "EC",
543        "4": "Ecuador",
544        "8": {
545          "1": -18312390,
546          "2": -781834060
547        },
548        "10": 1
549      },
550      {
551        "1": 2818,
552        "3": "EG",
553        "4": "Egypt",
554        "8": {
555          "1": 268205530,
556          "2": 308024980
557        },
558        "10": 1
559      },
560      {
561        "1": 2222,
562        "3": "SV",
563        "4": "El Salvador",
564        "8": {
565          "1": 137941850,
566          "2": -888965300
567        },
568        "10": 1
569      },
570      {
571        "1": 2226,
572        "3": "GQ",
573        "4": "Equatorial Guinea",
574        "8": {
575          "1": 16508010,
576          "2": 102678950
577        },
578        "10": 1
579      },
580      {
581        "1": 2232,
582        "3": "ER",
583        "4": "Eritrea",
584        "8": {
585          "1": 151793840,
586          "2": 397823340
587        },
588        "10": 1
589      },
590      {
591        "1": 2233,
592        "3": "EE",
593        "4": "Estonia",
594        "8": {
595          "1": 585952720,
596          "2": 250136070
597        },
598        "10": 1
599      },
600      {
601        "1": 2748,
602        "3": "SZ",
603        "4": "Eswatini",
604        "5": "Eswatini",
605        "8": {
606          "1": -265225030,
607          "2": 314658660
608        },
609        "10": 1
610      },
611      {
612        "1": 2231,
613        "3": "ET",
614        "4": "Ethiopia",
615        "8": {
616          "1": 91450000,
617          "2": 404896730
618        },
619        "10": 1
620      },
621      {
622        "1": 2583,
623        "3": "FM",
624        "4": "Micronesia",
625        "8": {
626          "1": 74255540,
627          "2": 1505508120
628        },
629        "10": 1
630      },
631      {
632        "1": 2242,
633        "3": "FJ",
634        "4": "Fiji",
635        "8": {
636          "1": -177133710,
637          "2": 1780650320
638        },
639        "10": 1
640      },
641      {
642        "1": 2246,
643        "3": "FI",
644        "4": "Finland",
645        "8": {
646          "1": 619241100,
647          "2": 257481510
648        },
649        "10": 1
650      },
651      {
652        "1": 2250,
653        "3": "FR",
654        "4": "France",
655        "8": {
656          "1": 462276380,
657          "2": 22137490
658        },
659        "10": 1
660      },
661      {
662        "1": 2258,
663        "3": "PF",
664        "4": "French Polynesia",
665        "8": {
666          "1": -176797420,
667          "2": -1494068430
668        },
669        "10": 1
670      },
671      {
672        "1": 2260,
673        "3": "TF",
674        "4": "French Southern and Antarctic Lands",
675        "8": {
676          "1": -492803660,
677          "2": 693485570
678        },
679        "10": 1
680      },
681      {
682        "1": 2266,
683        "3": "GA",
684        "4": "Gabon",
685        "8": {
686          "1": -8036890,
687          "2": 116094440
688        },
689        "10": 1
690      },
691      {
692        "1": 2268,
693        "3": "GE",
694        "4": "Georgia",
695        "8": {
696          "1": 423154070,
697          "2": 433568920
698        },
699        "10": 1
700      },
701      {
702        "1": 2276,
703        "3": "DE",
704        "4": "Germany",
705        "5": "Germany",
706        "8": {
707          "1": 511656910,
708          "2": 104515260
709        },
710        "10": 1
711      },
712      {
713        "1": 2288,
714        "3": "GH",
715        "4": "Ghana",
716        "8": {
717          "1": 79465270,
718          "2": -10231940
719        },
720        "10": 1
721      },
722      {
723        "1": 2300,
724        "3": "GR",
725        "4": "Greece",
726        "8": {
727          "1": 390742080,
728          "2": 218243120
729        },
730        "10": 1
731      },
732      {
733        "1": 2308,
734        "3": "GD",
735        "4": "Grenada",
736        "8": {
737          "1": 121165000,
738          "2": -616790000
739        },
740        "10": 1
741      },
742      {
743        "1": 2316,
744        "3": "GU",
745        "4": "Guam",
746        "8": {
747          "1": 133823791,
748          "2": 1446972774
749        },
750        "10": 1
751      },
752      {
753        "1": 2320,
754        "3": "GT",
755        "4": "Guatemala",
756        "8": {
757          "1": 157834710,
758          "2": -902307590
759        },
760        "10": 1
761      },
762      {
763        "1": 2831,
764        "3": "GG",
765        "4": "Guernsey",
766        "8": {
767          "1": 494481808,
768          "2": -25894685
769        },
770        "10": 1
771      },
772      {
773        "1": 2324,
774        "3": "GN",
775        "4": "Guinea",
776        "8": {
777          "1": 99455870,
778          "2": -96966450
779        },
780        "10": 1
781      },
782      {
783        "1": 2624,
784        "3": "GW",
785        "4": "Guinea-Bissau",
786        "8": {
787          "1": 118037490,
788          "2": -151804130
789        },
790        "10": 1
791      },
792      {
793        "1": 2328,
794        "3": "GY",
795        "4": "Guyana",
796        "8": {
797          "1": 48604160,
798          "2": -589301800
799        },
800        "10": 1
801      },
802      {
803        "1": 2332,
804        "3": "HT",
805        "4": "Haiti",
806        "8": {
807          "1": 189711870,
808          "2": -722852150
809        },
810        "10": 1
811      },
812      {
813        "1": 2334,
814        "3": "HM",
815        "4": "Heard Island and McDonald Islands",
816        "8": {
817          "1": -530818100,
818          "2": 735041580
819        },
820        "10": 1
821      },
822      {
823        "1": 2340,
824        "3": "HN",
825        "4": "Honduras",
826        "8": {
827          "1": 151999990,
828          "2": -862419050
829        },
830        "10": 1
831      },
832      {
833        "1": 2348,
834        "3": "HU",
835        "4": "Hungary",
836        "8": {
837          "1": 471624940,
838          "2": 195033040
839        },
840        "10": 1
841      },
842      {
843        "1": 2352,
844        "3": "IS",
845        "4": "Iceland",
846        "8": {
847          "1": 649630510,
848          "2": -190208350
849        },
850        "10": 1
851      },
852      {
853        "1": 2356,
854        "3": "IN",
855        "4": "India",
856        "8": {
857          "1": 205936840,
858          "2": 789628800
859        },
860        "10": 1
861      },
862      {
863        "1": 2360,
864        "3": "ID",
865        "4": "Indonesia",
866        "8": {
867          "1": -7892750,
868          "2": 1139213270
869        },
870        "10": 1
871      },
872      {
873        "1": 2368,
874        "3": "IQ",
875        "4": "Iraq",
876        "8": {
877          "1": 332231910,
878          "2": 436792910
879        },
880        "10": 1
881      },
882      {
883        "1": 2372,
884        "3": "IE",
885        "4": "Ireland",
886        "8": {
887          "1": 534129100,
888          "2": -82438900
889        },
890        "10": 1
891      },
892      {
893        "1": 2376,
894        "3": "IL",
895        "4": "Israel",
896        "8": {
897          "1": 310460510,
898          "2": 348516120
899        },
900        "10": 1
901      },
902      {
903        "1": 2380,
904        "3": "IT",
905        "4": "Italy",
906        "8": {
907          "1": 418719400,
908          "2": 125673800
909        },
910        "10": 1
911      },
912      {
913        "1": 2388,
914        "3": "JM",
915        "4": "Jamaica",
916        "8": {
917          "1": 181095810,
918          "2": -772975080
919        },
920        "10": 1
921      },
922      {
923        "1": 2392,
924        "3": "JP",
925        "4": "Japan",
926        "8": {
927          "1": 362048240,
928          "2": 1382529240
929        },
930        "10": 1
931      },
932      {
933        "1": 2832,
934        "3": "JE",
935        "4": "Jersey",
936        "8": {
937          "1": 492137711,
938          "2": -21357662
939        },
940        "10": 1
941      },
942      {
943        "1": 2400,
944        "3": "JO",
945        "4": "Jordan",
946        "8": {
947          "1": 305851640,
948          "2": 362384140
949        },
950        "10": 1
951      },
952      {
953        "1": 2398,
954        "3": "KZ",
955        "4": "Kazakhstan",
956        "8": {
957          "1": 480195730,
958          "2": 669236840
959        },
960        "10": 1
961      },
962      {
963        "1": 2404,
964        "3": "KE",
965        "4": "Kenya",
966        "8": {
967          "1": -235590,
968          "2": 379061930
969        },
970        "10": 1
971      },
972      {
973        "1": 2296,
974        "3": "KI",
975        "4": "Kiribati",
976        "8": {
977          "1": 14421300,
978          "2": 1729829763
979        },
980        "10": 1
981      },
982      {
983        "1": 2414,
984        "3": "KW",
985        "4": "Kuwait",
986        "8": {
987          "1": 293116600,
988          "2": 474817660
989        },
990        "10": 1
991      },
992      {
993        "1": 2417,
994        "3": "KG",
995        "4": "Kyrgyzstan",
996        "8": {
997          "1": 412043800,
998          "2": 747660980
999        },
1000        "10": 1
1001      },
1002      {
1003        "1": 2418,
1004        "3": "LA",
1005        "4": "Laos",
1006        "8": {
1007          "1": 198562700,
1008          "2": 1024954960
1009        },
1010        "10": 1
1011      },
1012      {
1013        "1": 2428,
1014        "3": "LV",
1015        "4": "Latvia",
1016        "8": {
1017          "1": 568796350,
1018          "2": 246031890
1019        },
1020        "10": 1
1021      },
1022      {
1023        "1": 2422,
1024        "3": "LB",
1025        "4": "Lebanon",
1026        "8": {
1027          "1": 338547210,
1028          "2": 358622850
1029        },
1030        "10": 1
1031      },
1032      {
1033        "1": 2426,
1034        "3": "LS",
1035        "4": "Lesotho",
1036        "8": {
1037          "1": -296099880,
1038          "2": 282336080
1039        },
1040        "10": 1
1041      },
1042      {
1043        "1": 2430,
1044        "3": "LR",
1045        "4": "Liberia",
1046        "8": {
1047          "1": 64280550,
1048          "2": -94294990
1049        },
1050        "10": 1
1051      },
1052      {
1053        "1": 2434,
1054        "3": "LY",
1055        "4": "Libya",
1056        "8": {
1057          "1": 263351000,
1058          "2": 172283310
1059        },
1060        "10": 1
1061      },
1062      {
1063        "1": 2438,
1064        "3": "LI",
1065        "4": "Liechtenstein",
1066        "8": {
1067          "1": 471410392,
1068          "2": 95209350
1069        },
1070        "10": 1
1071      },
1072      {
1073        "1": 2440,
1074        "3": "LT",
1075        "4": "Lithuania",
1076        "8": {
1077          "1": 551694380,
1078          "2": 238812750
1079        },
1080        "10": 1
1081      },
1082      {
1083        "1": 2442,
1084        "3": "LU",
1085        "4": "Luxembourg",
1086        "5": "Luxembourg",
1087        "8": {
1088          "1": 498152730,
1089          "2": 61295830
1090        },
1091        "10": 1
1092      },
1093      {
1094        "1": 2450,
1095        "3": "MG",
1096        "4": "Madagascar",
1097        "8": {
1098          "1": -187669470,
1099          "2": 468691070
1100        },
1101        "10": 1
1102      },
1103      {
1104        "1": 2454,
1105        "3": "MW",
1106        "4": "Malawi",
1107        "8": {
1108          "1": -132543080,
1109          "2": 343015250
1110        },
1111        "10": 1
1112      },
1113      {
1114        "1": 2458,
1115        "3": "MY",
1116        "4": "Malaysia",
1117        "8": {
1118          "1": 42104840,
1119          "2": 1019757660
1120        },
1121        "10": 1
1122      },
1123      {
1124        "1": 2462,
1125        "3": "MV",
1126        "4": "Maldives",
1127        "8": {
1128          "1": 32027780,
1129          "2": 732206800
1130        },
1131        "10": 1
1132      },
1133      {
1134        "1": 2470,
1135        "3": "MT",
1136        "4": "Malta",
1137        "8": {
1138          "1": 359374960,
1139          "2": 143754160
1140        },
1141        "10": 1
1142      },
1143      {
1144        "1": 2466,
1145        "3": "ML",
1146        "4": "Mali",
1147        "8": {
1148          "1": 175706920,
1149          "2": -39961660
1150        },
1151        "10": 1
1152      },
1153      {
1154        "1": 2584,
1155        "3": "MH",
1156        "4": "Marshall Islands",
1157        "8": {
1158          "1": 71314740,
1159          "2": 1711844780
1160        },
1161        "10": 1
1162      },
1163      {
1164        "1": 2478,
1165        "3": "MR",
1166        "4": "Mauritania",
1167        "8": {
1168          "1": 210078900,
1169          "2": -109408350
1170        },
1171        "10": 1
1172      },
1173      {
1174        "1": 2480,
1175        "3": "MU",
1176        "4": "Mauritius",
1177        "8": {
1178          "1": -203484040,
1179          "2": 575521520
1180        },
1181        "10": 1
1182      },
1183      {
1184        "1": 2484,
1185        "3": "MX",
1186        "4": "Mexico",
1187        "8": {
1188          "1": 236345010,
1189          "2": -1025527840
1190        },
1191        "10": 1
1192      },
1193      {
1194        "1": 2498,
1195        "3": "MD",
1196        "4": "Moldova",
1197        "8": {
1198          "1": 474116310,
1199          "2": 283698850
1200        },
1201        "10": 1
1202      },
1203      {
1204        "1": 2492,
1205        "3": "MC",
1206        "4": "Monaco",
1207        "8": {
1208          "1": 437384176,
1209          "2": 74246158
1210        },
1211        "10": 1
1212      },
1213      {
1214        "1": 2496,
1215        "3": "MN",
1216        "4": "Mongolia",
1217        "8": {
1218          "1": 468624960,
1219          "2": 1038466560
1220        },
1221        "10": 1
1222      },
1223      {
1224        "1": 2499,
1225        "3": "ME",
1226        "4": "Montenegro",
1227        "8": {
1228          "1": 427086780,
1229          "2": 193743900
1230        },
1231        "10": 1
1232      },
1233      {
1234        "1": 2504,
1235        "3": "MA",
1236        "4": "Morocco",
1237        "8": {
1238          "1": 317917020,
1239          "2": -70926200
1240        },
1241        "10": 1
1242      },
1243      {
1244        "1": 2508,
1245        "3": "MZ",
1246        "4": "Mozambique",
1247        "8": {
1248          "1": -186656950,
1249          "2": 355295620
1250        },
1251        "10": 1
1252      },
1253      {
1254        "1": 2104,
1255        "3": "MM",
1256        "4": "Myanmar (Burma)",
1257        "8": {
1258          "1": 219162210,
1259          "2": 959559740
1260        },
1261        "10": 1
1262      },
1263      {
1264        "1": 2516,
1265        "3": "NA",
1266        "4": "Namibia",
1267        "8": {
1268          "1": -229576400,
1269          "2": 184904100
1270        },
1271        "10": 1
1272      },
1273      {
1274        "1": 2520,
1275        "3": "NR",
1276        "4": "Nauru",
1277        "8": {
1278          "1": -5227780,
1279          "2": 1669315030
1280        },
1281        "10": 1
1282      },
1283      {
1284        "1": 2524,
1285        "3": "NP",
1286        "4": "Nepal",
1287        "8": {
1288          "1": 283948570,
1289          "2": 841240080
1290        },
1291        "10": 1
1292      },
1293      {
1294        "1": 2528,
1295        "3": "NL",
1296        "4": "Netherlands",
1297        "5": "Netherlands",
1298        "8": {
1299          "1": 521326330,
1300          "2": 52912660
1301        },
1302        "10": 1
1303      },
1304      {
1305        "1": 2540,
1306        "3": "NC",
1307        "4": "New Caledonia",
1308        "8": {
1309          "1": -209043050,
1310          "2": 1656180420
1311        },
1312        "10": 1
1313      },
1314      {
1315        "1": 2554,
1316        "3": "NZ",
1317        "4": "New Zealand",
1318        "8": {
1319          "1": -409005570,
1320          "2": 1748859710
1321        },
1322        "10": 1
1323      },
1324      {
1325        "1": 2558,
1326        "3": "NI",
1327        "4": "Nicaragua",
1328        "8": {
1329          "1": 128654160,
1330          "2": -852072290
1331        },
1332        "10": 1
1333      },
1334      {
1335        "1": 2562,
1336        "3": "NE",
1337        "4": "Niger",
1338        "8": {
1339          "1": 176077890,
1340          "2": 80816660
1341        },
1342        "10": 1
1343      },
1344      {
1345        "1": 2566,
1346        "3": "NG",
1347        "4": "Nigeria",
1348        "8": {
1349          "1": 90819990,
1350          "2": 86752770
1351        },
1352        "10": 1
1353      },
1354      {
1355        "1": 2570,
1356        "3": "NU",
1357        "4": "Niue",
1358        "8": {
1359          "1": -190544450,
1360          "2": -1698672330
1361        },
1362        "10": 1
1363      },
1364      {
1365        "1": 2574,
1366        "3": "NF",
1367        "4": "Norfolk Island",
1368        "8": {
1369          "1": -290408350,
1370          "2": 1679547120
1371        },
1372        "10": 1
1373      },
1374      {
1375        "1": 2807,
1376        "3": "MK",
1377        "4": "North Macedonia",
1378        "5": "North Macedonia",
1379        "8": {
1380          "1": 416086350,
1381          "2": 217452750
1382        },
1383        "10": 1
1384      },
1385      {
1386        "1": 2580,
1387        "3": "MP",
1388        "4": "Northern Mariana Islands",
1389        "8": {
1390          "1": 150979000,
1391          "2": 1456739000
1392        },
1393        "10": 1
1394      },
1395      {
1396        "1": 2578,
1397        "3": "NO",
1398        "4": "Norway",
1399        "8": {
1400          "1": 604720240,
1401          "2": 84689460
1402        },
1403        "10": 1
1404      },
1405      {
1406        "1": 2512,
1407        "3": "OM",
1408        "4": "Oman",
1409        "8": {
1410          "1": 214735329,
1411          "2": 559754130
1412        },
1413        "10": 1
1414      },
1415      {
1416        "1": 2586,
1417        "3": "PK",
1418        "4": "Pakistan",
1419        "8": {
1420          "1": 303753210,
1421          "2": 693451160
1422        },
1423        "10": 1
1424      },
1425      {
1426        "1": 2585,
1427        "3": "PW",
1428        "4": "Palau",
1429        "8": {
1430          "1": 75149800,
1431          "2": 1345825200
1432        },
1433        "10": 1
1434      },
1435      {
1436        "1": 2591,
1437        "3": "PA",
1438        "4": "Panama",
1439        "8": {
1440          "1": 85379810,
1441          "2": -807821270
1442        },
1443        "10": 1
1444      },
1445      {
1446        "1": 2598,
1447        "3": "PG",
1448        "4": "Papua New Guinea",
1449        "8": {
1450          "1": -63149930,
1451          "2": 1439555500
1452        },
1453        "10": 1
1454      },
1455      {
1456        "1": 2600,
1457        "3": "PY",
1458        "4": "Paraguay",
1459        "8": {
1460          "1": -234425030,
1461          "2": -584438320
1462        },
1463        "10": 1
1464      },
1465      {
1466        "1": 2604,
1467        "3": "PE",
1468        "4": "Peru",
1469        "8": {
1470          "1": -91899670,
1471          "2": -750151520
1472        },
1473        "10": 1
1474      },
1475      {
1476        "1": 2608,
1477        "3": "PH",
1478        "4": "Philippines",
1479        "8": {
1480          "1": 128797210,
1481          "2": 1217740170
1482        },
1483        "10": 1
1484      },
1485      {
1486        "1": 2612,
1487        "3": "PN",
1488        "4": "Pitcairn Islands",
1489        "8": {
1490          "1": -243767537,
1491          "2": -1283242376
1492        },
1493        "10": 1
1494      },
1495      {
1496        "1": 2616,
1497        "3": "PL",
1498        "4": "Poland",
1499        "8": {
1500          "1": 519194380,
1501          "2": 191451360
1502        },
1503        "10": 1
1504      },
1505      {
1506        "1": 2620,
1507        "3": "PT",
1508        "4": "Portugal",
1509        "8": {
1510          "1": 393998720,
1511          "2": -82244540
1512        },
1513        "10": 1
1514      },
1515      {
1516        "1": 2634,
1517        "3": "QA",
1518        "4": "Qatar",
1519        "8": {
1520          "1": 253548260,
1521          "2": 511838840
1522        },
1523        "10": 1
1524      },
1525      {
1526        "1": 2178,
1527        "3": "CG",
1528        "4": "Republic of the Congo",
1529        "8": {
1530          "1": -2280210,
1531          "2": 158276590
1532        },
1533        "10": 1
1534      },
1535      {
1536        "1": 2642,
1537        "3": "RO",
1538        "4": "Romania",
1539        "8": {
1540          "1": 459431610,
1541          "2": 249667600
1542        },
1543        "10": 1
1544      },
1545      {
1546        "1": 2646,
1547        "3": "RW",
1548        "4": "Rwanda",
1549        "8": {
1550          "1": -19402780,
1551          "2": 298738880
1552        },
1553        "10": 1
1554      },
1555      {
1556        "1": 2654,
1557        "3": "SH",
1558        "4": "Saint Helena, Ascension and Tristan da Cunha",
1559        "5": "St Helena, Ascension and Tristan da Cunha",
1560        "8": {
1561          "1": -159583317,
1562          "2": -57019989
1563        },
1564        "10": 1
1565      },
1566      {
1567        "1": 2659,
1568        "3": "KN",
1569        "4": "Saint Kitts and Nevis",
1570        "5": "St Kitts & Nevis",
1571        "8": {
1572          "1": 173578220,
1573          "2": -627829980
1574        },
1575        "10": 1
1576      },
1577      {
1578        "1": 2662,
1579        "3": "LC",
1580        "4": "Saint Lucia",
1581        "5": "St Lucia",
1582        "8": {
1583          "1": 139094440,
1584          "2": -609788930
1585        },
1586        "10": 1
1587      },
1588      {
1589        "1": 2666,
1590        "3": "PM",
1591        "4": "Saint Pierre and Miquelon",
1592        "5": "St Pierre and Miquelon",
1593        "8": {
1594          "1": 468852000,
1595          "2": -563159000
1596        },
1597        "10": 1
1598      },
1599      {
1600        "1": 2670,
1601        "3": "VC",
1602        "4": "Saint Vincent and the Grenadines",
1603        "5": "St Vincent and the Grenadines",
1604        "8": {
1605          "1": 129843050,
1606          "2": -612872280
1607        },
1608        "10": 1
1609      },
1610      {
1611        "1": 2882,
1612        "3": "WS",
1613        "4": "Samoa",
1614        "8": {
1615          "1": -137590290,
1616          "2": -1721046290
1617        },
1618        "10": 1
1619      },
1620      {
1621        "1": 2674,
1622        "3": "SM",
1623        "4": "San Marino",
1624        "8": {
1625          "1": 439423600,
1626          "2": 124577770
1627        },
1628        "10": 1
1629      },
1630      {
1631        "1": 2678,
1632        "3": "ST",
1633        "4": "Sao Tome and Principe",
1634        "8": {
1635          "1": 1863600,
1636          "2": 66130810
1637        },
1638        "10": 1
1639      },
1640      {
1641        "1": 2682,
1642        "3": "SA",
1643        "4": "Saudi Arabia",
1644        "8": {
1645          "1": 238859420,
1646          "2": 450791620
1647        },
1648        "10": 1
1649      },
1650      {
1651        "1": 2686,
1652        "3": "SN",
1653        "4": "Senegal",
1654        "8": {
1655          "1": 144974010,
1656          "2": -144523620
1657        },
1658        "10": 1
1659      },
1660      {
1661        "1": 2690,
1662        "3": "SC",
1663        "4": "Seychelles",
1664        "8": {
1665          "1": -46795740,
1666          "2": 554919770
1667        },
1668        "10": 1
1669      },
1670      {
1671        "1": 2694,
1672        "3": "SL",
1673        "4": "Sierra Leone",
1674        "8": {
1675          "1": 84605550,
1676          "2": -117798890
1677        },
1678        "10": 1
1679      },
1680      {
1681        "1": 2702,
1682        "3": "SG",
1683        "4": "Singapore",
1684        "8": {
1685          "1": 13520830,
1686          "2": 1038198360
1687        },
1688        "10": 1
1689      },
1690      {
1691        "1": 2534,
1692        "3": "SX",
1693        "4": "Sint Maarten",
1694        "8": {
1695          "1": 180424800,
1696          "2": -630548300
1697        },
1698        "10": 1
1699      },
1700      {
1701        "1": 2703,
1702        "3": "SK",
1703        "4": "Slovakia",
1704        "5": "Slovakia",
1705        "8": {
1706          "1": 486690260,
1707          "2": 196990240
1708        },
1709        "10": 1
1710      },
1711      {
1712        "1": 2705,
1713        "3": "SI",
1714        "4": "Slovenia",
1715        "8": {
1716          "1": 461512410,
1717          "2": 149954630
1718        },
1719        "10": 1
1720      },
1721      {
1722        "1": 2090,
1723        "3": "SB",
1724        "4": "Solomon Islands",
1725        "8": {
1726          "1": -96457100,
1727          "2": 1601561940
1728        },
1729        "10": 1
1730      },
1731      {
1732        "1": 2706,
1733        "3": "SO",
1734        "4": "Somalia",
1735        "8": {
1736          "1": 51521490,
1737          "2": 461996160
1738        },
1739        "10": 1
1740      },
1741      {
1742        "1": 2710,
1743        "3": "ZA",
1744        "4": "South Africa",
1745        "8": {
1746          "1": -305594820,
1747          "2": 229375060
1748        },
1749        "10": 1
1750      },
1751      {
1752        "1": 2239,
1753        "3": "GS",
1754        "4": "South Georgia and the South Sandwich Islands",
1755        "8": {
1756          "1": -544295790,
1757          "2": -365879090
1758        },
1759        "10": 1
1760      },
1761      {
1762        "1": 2410,
1763        "3": "KR",
1764        "4": "South Korea",
1765        "8": {
1766          "1": 359077570,
1767          "2": 1277669220
1768        },
1769        "10": 1
1770      },
1771      {
1772        "1": 2724,
1773        "3": "ES",
1774        "4": "Spain",
1775        "8": {
1776          "1": 404636670,
1777          "2": -37492200
1778        },
1779        "10": 1
1780      },
1781      {
1782        "1": 2144,
1783        "3": "LK",
1784        "4": "Sri Lanka",
1785        "8": {
1786          "1": 78730540,
1787          "2": 807717970
1788        },
1789        "10": 1
1790      },
1791      {
1792        "1": 2740,
1793        "3": "SR",
1794        "4": "Suriname",
1795        "8": {
1796          "1": 39193050,
1797          "2": -560277830
1798        },
1799        "10": 1
1800      },
1801      {
1802        "1": 2756,
1803        "3": "CH",
1804        "4": "Switzerland",
1805        "8": {
1806          "1": 468181880,
1807          "2": 82275120
1808        },
1809        "10": 1
1810      },
1811      {
1812        "1": 2752,
1813        "3": "SE",
1814        "4": "Sweden",
1815        "8": {
1816          "1": 601281610,
1817          "2": 186435010
1818        },
1819        "10": 1
1820      },
1821      {
1822        "1": 2762,
1823        "3": "TJ",
1824        "4": "Tajikistan",
1825        "8": {
1826          "1": 388610340,
1827          "2": 712760930
1828        },
1829        "10": 1
1830      },
1831      {
1832        "1": 2834,
1833        "3": "TZ",
1834        "4": "Tanzania",
1835        "8": {
1836          "1": -63690280,
1837          "2": 348888220
1838        },
1839        "10": 1
1840      },
1841      {
1842        "1": 2764,
1843        "3": "TH",
1844        "4": "Thailand",
1845        "8": {
1846          "1": 158700320,
1847          "2": 1009925410
1848        },
1849        "10": 1
1850      },
1851      {
1852        "1": 2044,
1853        "3": "BS",
1854        "4": "The Bahamas",
1855        "8": {
1856          "1": 250342800,
1857          "2": -773962800
1858        },
1859        "10": 1
1860      },
1861      {
1862        "1": 2270,
1863        "3": "GM",
1864        "4": "The Gambia",
1865        "8": {
1866          "1": 134431820,
1867          "2": -153101390
1868        },
1869        "10": 1
1870      },
1871      {
1872        "1": 2626,
1873        "3": "TL",
1874        "4": "Timor-Leste",
1875        "8": {
1876          "1": -88742170,
1877          "2": 1257275390
1878        },
1879        "10": 1
1880      },
1881      {
1882        "1": 2768,
1883        "3": "TG",
1884        "4": "Togo",
1885        "8": {
1886          "1": 86195430,
1887          "2": 8247820
1888        },
1889        "10": 1
1890      },
1891      {
1892        "1": 2772,
1893        "3": "TK",
1894        "4": "Tokelau",
1895        "8": {
1896          "1": -92002000,
1897          "2": -1718484000
1898        },
1899        "10": 1
1900      },
1901      {
1902        "1": 2776,
1903        "3": "TO",
1904        "4": "Tonga",
1905        "8": {
1906          "1": -211789860,
1907          "2": -1751982420
1908        },
1909        "10": 1
1910      },
1911      {
1912        "1": 2780,
1913        "3": "TT",
1914        "4": "Trinidad and Tobago",
1915        "8": {
1916          "1": 106918030,
1917          "2": -612225030
1918        },
1919        "10": 1
1920      },
1921      {
1922        "1": 2788,
1923        "3": "TN",
1924        "4": "Tunisia",
1925        "8": {
1926          "1": 338869170,
1927          "2": 95374990
1928        },
1929        "10": 1
1930      },
1931      {
1932        "1": 2792,
1933        "3": "TR",
1934        "4": "Turkiye",
1935        "5": "Türkiye",
1936        "8": {
1937          "1": 389637450,
1938          "2": 352433220
1939        },
1940        "10": 1
1941      },
1942      {
1943        "1": 2795,
1944        "3": "TM",
1945        "4": "Turkmenistan",
1946        "8": {
1947          "1": 389697190,
1948          "2": 595562780
1949        },
1950        "10": 1
1951      },
1952      {
1953        "1": 2798,
1954        "3": "TV",
1955        "4": "Tuvalu",
1956        "8": {
1957          "1": -71095350,
1958          "2": 1776493300
1959        },
1960        "10": 1
1961      },
1962      {
1963        "1": 2800,
1964        "3": "UG",
1965        "4": "Uganda",
1966        "8": {
1967          "1": 13733330,
1968          "2": 322902750
1969        },
1970        "10": 1
1971      },
1972      {
1973        "1": 2804,
1974        "3": "UA",
1975        "4": "Ukraine",
1976        "8": {
1977          "1": 483794330,
1978          "2": 311655800
1979        },
1980        "10": 1
1981      },
1982      {
1983        "1": 2784,
1984        "3": "AE",
1985        "4": "United Arab Emirates",
1986        "8": {
1987          "1": 234240760,
1988          "2": 538478180
1989        },
1990        "10": 1
1991      },
1992      {
1993        "1": 2826,
1994        "3": "GB",
1995        "4": "United Kingdom",
1996        "8": {
1997          "1": 553780510,
1998          "2": -34359730
1999        },
2000        "10": 1
2001      },
2002      {
2003        "1": 2840,
2004        "3": "US",
2005        "4": "United States",
2006        "5": "United States",
2007        "8": {
2008          "1": 387945952,
2009          "2": -1065348379
2010        },
2011        "10": 1
2012      },
2013      {
2014        "1": 2858,
2015        "3": "UY",
2016        "4": "Uruguay",
2017        "8": {
2018          "1": -325227790,
2019          "2": -557658350
2020        },
2021        "10": 1
2022      },
2023      {
2024        "1": 2860,
2025        "3": "UZ",
2026        "4": "Uzbekistan",
2027        "8": {
2028          "1": 413774910,
2029          "2": 645852620
2030        },
2031        "10": 1
2032      },
2033      {
2034        "1": 2548,
2035        "3": "VU",
2036        "4": "Vanuatu",
2037        "5": "Vanuatu",
2038        "8": {
2039          "1": -153767060,
2040          "2": 1669591580
2041        },
2042        "10": 1
2043      },
2044      {
2045        "1": 2336,
2046        "3": "VA",
2047        "4": "Vatican City",
2048        "5": "Vatican City",
2049        "8": {
2050          "1": 419029160,
2051          "2": 124533890
2052        },
2053        "10": 1
2054      },
2055      {
2056        "1": 2862,
2057        "3": "VE",
2058        "4": "Venezuela",
2059        "8": {
2060          "1": 64237500,
2061          "2": -665897300
2062        },
2063        "10": 1
2064      },
2065      {
2066        "1": 2704,
2067        "3": "VN",
2068        "4": "Vietnam",
2069        "8": {
2070          "1": 140583240,
2071          "2": 1082771990
2072        },
2073        "10": 1
2074      },
2075      {
2076        "1": 2887,
2077        "3": "YE",
2078        "4": "Yemen",
2079        "8": {
2080          "1": 155527270,
2081          "2": 485163880
2082        },
2083        "10": 1
2084      },
2085      {
2086        "1": 2894,
2087        "3": "ZM",
2088        "4": "Zambia",
2089        "8": {
2090          "1": -131338970,
2091          "2": 278493320
2092        },
2093        "10": 1
2094      },
2095      {
2096        "1": 2716,
2097        "3": "ZW",
2098        "4": "Zimbabwe",
2099        "8": {
2100          "1": -190154380,
2101          "2": 291548570
2102        },
2103        "10": 1
2104      },
2105      {
2106        "1": 2060,
2107        "3": "BM",
2108        "4": "Bermuda",
2109        "8": {
2110          "1": 323078000,
2111          "2": -647505000
2112        },
2113        "10": 2
2114      },
2115      {
2116        "1": 2074,
2117        "3": "BV",
2118        "4": "Bouvet Island",
2119        "8": {
2120          "1": -544231990,
2121          "2": 34131940
2122        },
2123        "10": 2
2124      },
2125      {
2126        "1": 2086,
2127        "3": "IO",
2128        "4": "British Indian Ocean Territory",
2129        "8": {
2130          "1": -63431940,
2131          "2": 718765190
2132        },
2133        "10": 2
2134      },
2135      {
2136        "1": 2092,
2137        "3": "VG",
2138        "4": "British Virgin Islands",
2139        "8": {
2140          "1": 184206950,
2141          "2": -646399680
2142        },
2143        "10": 2
2144      },
2145      {
2146        "1": 20277,
2147        "3": "IC",
2148        "4": "Canary Islands",
2149        "5": "Canary Islands",
2150        "8": {
2151          "1": 282915637,
2152          "2": -166291304
2153        },
2154        "10": 5
2155      },
2156      {
2157        "1": 2136,
2158        "3": "KY",
2159        "4": "Cayman Islands",
2160        "8": {
2161          "1": 193133000,
2162          "2": -812546000
2163        },
2164        "10": 2
2165      },
2166      {
2167        "1": 2158,
2168        "3": "TW",
2169        "4": "Taiwan",
2170        "8": {
2171          "1": 236978100,
2172          "2": 1209605150
2173        },
2174        "10": 2
2175      },
2176      {
2177        "1": 2175,
2178        "3": "YT",
2179        "4": "Mayotte",
2180        "8": {
2181          "1": -128275000,
2182          "2": 451662440
2183        },
2184        "10": 2
2185      },
2186      {
2187        "1": 2234,
2188        "3": "FO",
2189        "4": "Faroe Islands",
2190        "8": {
2191          "1": 618926350,
2192          "2": -69118060
2193        },
2194        "10": 2
2195      },
2196      {
2197        "1": 2238,
2198        "3": "FK",
2199        "4": "Falkland Islands (Islas Malvinas)",
2200        "8": {
2201          "1": -517962530,
2202          "2": -595236130
2203        },
2204        "10": 2
2205      },
2206      {
2207        "1": 2254,
2208        "3": "GF",
2209        "4": "French Guiana",
2210        "8": {
2211          "1": 39338890,
2212          "2": -531257820
2213        },
2214        "10": 2
2215      },
2216      {
2217        "1": 2275,
2218        "3": "PS",
2219        "4": "Palestine",
2220        "5": "Palestine",
2221        "8": {
2222          "1": 319521620,
2223          "2": 352331540
2224        },
2225        "10": 2
2226      },
2227      {
2228        "1": 2292,
2229        "3": "GI",
2230        "4": "Gibraltar",
2231        "8": {
2232          "1": 361407510,
2233          "2": -53535850
2234        },
2235        "10": 2
2236      },
2237      {
2238        "1": 2304,
2239        "3": "GL",
2240        "4": "Greenland",
2241        "8": {
2242          "1": 717069360,
2243          "2": -426043030
2244        },
2245        "10": 2
2246      },
2247      {
2248        "1": 2312,
2249        "3": "GP",
2250        "4": "Guadeloupe",
2251        "8": {
2252          "1": 162650000,
2253          "2": -615510000
2254        },
2255        "10": 2
2256      },
2257      {
2258        "1": 2344,
2259        "3": "HK",
2260        "4": "Hong Kong",
2261        "8": {
2262          "1": 223193039,
2263          "2": 1141693611
2264        },
2265        "10": 2
2266      },
2267      {
2268        "1": 2833,
2269        "3": "IM",
2270        "4": "Isle of Man",
2271        "8": {
2272          "1": 542361070,
2273          "2": -45480560
2274        },
2275        "10": 1
2276      },
2277      {
2278        "1": 2446,
2279        "3": "MO",
2280        "4": "Macao",
2281        "5": "Macao",
2282        "8": {
2283          "1": 221987450,
2284          "2": 1135438730
2285        },
2286        "10": 2
2287      },
2288      {
2289        "1": 2474,
2290        "3": "MQ",
2291        "4": "Martinique",
2292        "8": {
2293          "1": 146415280,
2294          "2": -610241740
2295        },
2296        "10": 2
2297      },
2298      {
2299        "1": 2500,
2300        "3": "MS",
2301        "4": "Montserrat",
2302        "8": {
2303          "1": 167424980,
2304          "2": -621873660
2305        },
2306        "10": 2
2307      },
2308      {
2309        "1": 2533,
2310        "3": "AW",
2311        "4": "Aruba",
2312        "8": {
2313          "1": 125211100,
2314          "2": -699683380
2315        },
2316        "10": 2
2317      },
2318      {
2319        "1": 2630,
2320        "3": "PR",
2321        "4": "Puerto Rico",
2322        "8": {
2323          "1": 182208330,
2324          "2": -665901490
2325        },
2326        "10": 2
2327      },
2328      {
2329        "1": 2638,
2330        "3": "RE",
2331        "4": "Reunion",
2332        "5": "Réunion",
2333        "8": {
2334          "1": -211151410,
2335          "2": 555363840
2336        },
2337        "10": 2
2338      },
2339      {
2340        "1": 2660,
2341        "3": "AI",
2342        "4": "Anguilla",
2343        "8": {
2344          "1": 182205540,
2345          "2": -630686150
2346        },
2347        "10": 2
2348      },
2349      {
2350        "1": 2732,
2351        "3": "EH",
2352        "4": "Western Sahara",
2353        "8": {
2354          "1": 242155270,
2355          "2": -128858340
2356        },
2357        "10": 2
2358      },
2359      {
2360        "1": 2663,
2361        "3": "MF",
2362        "4": "Saint Martin",
2363        "5": "St Martin",
2364        "8": {
2365          "1": 180825500,
2366          "2": -630522510
2367        },
2368        "10": 1
2369      },
2370      {
2371        "1": 2744,
2372        "3": "SJ",
2373        "4": "Svalbard and Jan Mayen",
2374        "8": {
2375          "1": 775536040,
2376          "2": 236702720
2377        },
2378        "10": 2
2379      },
2380      {
2381        "1": 2796,
2382        "3": "TC",
2383        "4": "Turks and Caicos Islands",
2384        "8": {
2385          "1": 216940250,
2386          "2": -717979280
2387        },
2388        "10": 2
2389      },
2390      {
2391        "1": 2581,
2392        "3": "UM",
2393        "4": "United States Minor Outlying Islands",
2394        "8": {
2395          "1": 192823192,
2396          "2": 1666470470
2397        },
2398        "10": 1
2399      },
2400      {
2401        "1": 2850,
2402        "3": "VI",
2403        "4": "U.S. Virgin Islands",
2404        "5": "U.S. Virgin Islands",
2405        "8": {
2406          "1": 183357650,
2407          "2": -648963350
2408        },
2409        "10": 2
2410      },
2411      {
2412        "1": 2876,
2413        "3": "WF",
2414        "4": "Wallis and Futuna",
2415        "8": {
2416          "1": -142938000,
2417          "2": -1781165000
2418        },
2419        "10": 1
2420      }
2421    ]
2422  }
2423}

src0/search_advertiser_creatives.js

1import https from "https";
2
3export async function searchForAds(
4    advertiserId,
5    RegionCode = null,
6    format,
7    dateRange,
8    platform,
9    limitResults = null,
10    isPolitical
11) {
12    let selectedRegion;
13    let allResults = [];
14    let nextPageToken = null;
15    const isDomain = advertiserId.includes(".");
16    const adjustedLimit = limitResults ? Math.min(limitResults, 100) : 40; // Ensure limitResults does not exceed 100, default to 40
17
18
19    do {
20        const requestPayload = isPolitical
21    ? {
22        "2": adjustedLimit,
23        "3": {
24            "1": advertiserId,
25            ...(format !== 0 && { "4": format }), // Ensure format is added only if non-zero
26            ...(RegionCode && { "8": [RegionCode] }),
27            "12": { "1": "", "2": true },
28            ...(platform && { "14": [platform] })
29        },
30        "6": { "1": 3, "2": true },
31        "7": { "1": 2, "2": 30, "3": selectedRegion || 1 } // Ensure fallback for selectedRegion
32    }
33    : isDomain
34        ? {
35            "2": adjustedLimit,
36            "3": {
37                ...(format !== 0 && { "4": format }),
38                ...(RegionCode && { "8": [RegionCode] }),
39                "12": { "1": advertiserId, "2": true },
40                ...(platform && { "14": [platform] })
41            },
42            "7": { "1": 1, "2": 30, "3": selectedRegion || 1 }
43        }
44        : {
45            "2": adjustedLimit,
46            "3": {
47                ...(format !== 0 && { "4": format }),
48                ...(RegionCode && { "8": [RegionCode] }),
49                "12": { "1": "", "2": true },
50                "13": { "1": [advertiserId] },
51                ...(platform && { "14": [platform] })
52            },
53            "7": { "1": 1, "2": 30, "3": selectedRegion || 1 }
54        };
55
56        console.log(`isPolitical ${isPolitical}`);
57        if (!dateRange?.anyTime) {
58            requestPayload["3"]["6"] = dateRange.fromDate;
59            requestPayload["3"]["7"] = dateRange.toDate;
60        }
61
62        if (nextPageToken) {
63            requestPayload["4"] = nextPageToken;
64        }
65
66        const postData = new URLSearchParams({
67            "f.req": JSON.stringify(requestPayload)
68        }).toString();
69
70        const agent = new https.Agent({ keepAlive: true });
71        const options = {
72            agent,
73            hostname: "adstransparency.google.com",
74            path: "/anji/_/rpc/SearchService/SearchCreatives?authuser=0",
75            method: "POST",
76            headers: {
77                "Content-Type": "application/x-www-form-urlencoded",
78                "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/133.0.0.0 Safari/537.36",
79                "Connection": "keep-alive",
80                "Content-Length": Buffer.byteLength(String(postData)),
81            }
82        };
83
84        //console.log(`requestPayload ${JSON.stringify(requestPayload, null, 2)}`);
85        const jsonResponse = await new Promise((resolve, reject) => {
86            const req = https.request(options, (res) => {
87                let data = "";
88                //console.log(`statusCode : ${res.statusCode} | requestPayload ${JSON.stringify(requestPayload, null, 2)}`);
89
90                res.on("data", (chunk) => { data += chunk; });
91
92                //console.log(`data : ${data} `);
93                res.on("end", () => {
94                    if (res.statusCode >= 400) {
95                        console.error(`❌ HTTP Error ${res.statusCode}: ${data}`);
96                        reject(new Error(`HTTP ${res.statusCode}: ${data}`));
97                        return;
98                    }
99
100                    if (!data) {
101                        console.error("❌ Empty response received");
102                        reject(new Error("Empty response from server"));
103                        return;
104                    }
105
106                    let parsedResponse;
107                    try {
108                        parsedResponse = JSON.parse(data);
109                    } catch (error) {
110                        console.error("❌ JSON Parsing Error:", error.message);
111                        reject(new Error(`Invalid JSON response: ${data}`));
112                        return;
113                    }
114
115                    //console.log(`parsedResponse ${JSON.stringify(parsedResponse, null, 2)}`);
116
117                    if (!parsedResponse || typeof parsedResponse !== "object") {
118                        reject(new Error("Invalid JSON response"));
119                        return;
120                    }
121
122                    resolve(parsedResponse);
123                });
124            });
125
126            req.on("error", (err) => {
127                console.error("❌ Request Error:", err.message);
128                reject(err);
129            });
130
131            req.write(postData);
132            req.end();
133        });
134
135        if (jsonResponse["1"]) {
136            allResults = allResults.concat(jsonResponse["1"]);
137        }
138
139        nextPageToken = jsonResponse["2"] || null;
140        console.log(`search_advertiser_creatives - 🔹 Next Page Token: ${nextPageToken ? nextPageToken : "None"}`);
141
142        // Stop fetching if limitResults is reached
143        if (limitResults && allResults.length >= limitResults) {
144            console.log(`✅ Limit reached: Returning first ${limitResults} results.`);
145            return allResults.slice(0, limitResults);
146        }
147    } while (nextPageToken);
148    console.log(`data for : ${advertiserId} - ✅ Total results fetched: ${allResults.length}`);
149    return  allResults;  // Process and save the results ;
150}

src0/search_for_an_ads.js

1import { searchForAds } from "./search_advertiser_creatives.js";
2import { processCreativeDetails } from "./get_creative_details.js";
3import https from "https";
4
5// Regular expression to detect advertiser IDs
6const advertiserIdPattern = /^AR\d+$/;
7
8// Function to extract advertiser ID from a URL
9function extractAdvertiserIdFromUrl(url) {
10    const match = url.match(/advertiser\/(AR\d+)/);
11    return match ? match[1] : null;
12}
13
14export async function searchForAdsList(keyword_domain_advertiserid, maxAdvertisers, maxDomains, RegionCode = null, format, dateRange, platform, limitResults, domainExists) {
15    let advertiserid_domain = [];  // Store valid advertiser IDs
16    let keywords_domains = [];  // Store non-advertiser keywords_domains
17
18    console.log('domain Exists', domainExists);
19
20    // Normalize input into an array
21    const inputList = Array.isArray(keyword_domain_advertiserid) ? keyword_domain_advertiserid : [keyword_domain_advertiserid];
22
23    // Validate each item
24    inputList.forEach(item => {
25        if (typeof item !== "string") return;
26
27        let extractedId = item.startsWith("http") ? extractAdvertiserIdFromUrl(item) : item;
28
29        if (advertiserIdPattern.test(extractedId)|| domainExists) {
30            advertiserid_domain.push(extractedId);  // Store advertiser ID and domains
31        } else {
32            keywords_domains.push(item);  // Treat as a keyword/domain
33        }
34    });
35
36   // If advertiser IDs exist OR domainExists is true, process them immediately and SKIP API request
37    if (advertiserid_domain.length > 0 || domainExists) {
38        console.log(`🚀 Processing advertiser IDs directly (domainExists: ${domainExists}):`, advertiserid_domain);
39        const adPromises = advertiserid_domain.map(id => searchForAds(id, RegionCode, format, dateRange, platform, limitResults));
40        const adResults = await Promise.all(adPromises);
41        const creativeDetails = await processCreativeDetails(adResults.flat().filter(Boolean), RegionCode);
42        return creativeDetails.flat().filter(Boolean);
43    }
44
45
46    // If no keywords_domains exist, return no data (avoids unnecessary request)
47    if (keywords_domains.length === 0) {
48        console.warn(`⚠️ No valid keywords_domains found. Skipping API request.`);
49        return { message: "No data", keyword_domain_advertiserid };
50    }
51
52    console.log(`📡 Sending API request for keywords_domains:`, keywords_domains);
53
54    // Fix: If there's only one keyword, send it as a string. If multiple, send as an array.
55    const requestPayload = {
56        "1": keywords_domains.length === 1 ? keywords_domains[0] : keywords_domains,
57        "2": maxAdvertisers,
58        "3": maxDomains,
59        "4": RegionCode ? [RegionCode] : []
60    };
61
62    console.log(`requestPayload ${JSON.stringify(requestPayload, null, 2)}`);
63
64    const postData = new URLSearchParams({
65        "f.req": JSON.stringify(requestPayload)
66    }).toString();
67
68    const agent = new https.Agent({ keepAlive: true });
69    const options = {
70        agent,
71        hostname: "adstransparency.google.com",
72        path: "/anji/_/rpc/SearchService/SearchSuggestions?authuser=0",
73        method: "POST",
74        headers: {
75            "Content-Type": "application/x-www-form-urlencoded",
76            "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/133.0.0.0 Safari/537.36",
77            "Connection": "keep-alive",
78            "Content-Length": Buffer.byteLength(String(postData)),
79        }
80    };
81
82    return new Promise((resolve, reject) => {
83        const req = https.request(options, (res) => {
84            let data = "";
85
86            res.on("data", (chunk) => (data += chunk));
87
88            res.on("end", async () => {
89                if (res.statusCode >= 400) {
90                    console.error(`❌ HTTP Error ${res.statusCode}: ${data}`);
91                    return reject(new Error(`HTTP ${res.statusCode}: ${data}`));
92                }
93
94                try {
95                    const jsonResponse = JSON.parse(data);
96                    const promises = [];
97                    //console.log(`statusCode : ${res.statusCode} | jsonResponse ${JSON.stringify(jsonResponse, null, 2)}`);
98
99                    // Ensure jsonResponse["1"] is an array before processing
100                    if (Array.isArray(jsonResponse["1"])) {
101                        promises.push(...jsonResponse["1"].map(async (item) => {
102                            let advertiserId = null;
103
104                            if (item["1"] && item["1"]["2"]) {
105                                advertiserId = item["1"]["2"];
106                            } else if (item["2"] && item["2"]["1"]) {
107                                advertiserId = item["2"]["1"];
108                            }
109
110                            return advertiserId ? searchForAds(advertiserId, RegionCode, format, dateRange, platform, limitResults) : null;
111                        }));
112                    }
113
114                    // Wait for all promises to resolve
115                    const allResults = await Promise.all(promises);
116                    const creativeDetails = await processCreativeDetails(allResults.flat().filter(Boolean), RegionCode);
117                    resolve(creativeDetails.flat().filter(Boolean));
118
119                } catch (error) {
120                    console.error("❌ JSON Parsing Error:", error);
121                    reject(error);
122                }
123            });
124        });
125
126        req.on("error", (err) => {
127            console.error("❌ Request Error:", err.message);
128            reject(err);
129        });
130
131        req.write(postData);
132        req.end();
133    });
134}

src0/search_for_an_political_ads.js

1import { searchForAds } from "./search_advertiser_creatives.js";
2import { processCreativeDetails } from "./get_creative_details.js";
3import https from "https";
4
5// Regular expression to detect advertiser IDs
6const advertiserIdPattern = /^AR\d+$/;
7
8// Function to extract advertiser ID from a URL
9function extractAdvertiserIdFromUrl(url) {
10    const match = url.match(/advertiser\/(AR\d+)/);
11    return match ? match[1] : null;
12}
13
14export async function searchForPoliticalAdsList(keyword_advertiserid, maxAdvertisers, RegionCode = null, format, dateRange, platform, limitResults) {
15    let advertiserid = [];  // Store valid advertiser IDs
16    let key_advid = [];  // Store non-advertiser keyword or advertiserid
17    let isPolitical = true
18    // Normalize input into an array
19    const inputList = Array.isArray(keyword_advertiserid) ? keyword_advertiserid : [keyword_advertiserid];
20
21    // Validate each item
22    inputList.forEach(item => {
23        if (typeof item !== "string") return;
24
25        let extractedId = item.startsWith("http") ? extractAdvertiserIdFromUrl(item) : item;
26
27        if (advertiserIdPattern.test(extractedId)) {
28            advertiserid.push(extractedId);  // Store advertiser ID
29        } else {
30            key_advid.push(item);  // Treat as a keyword
31        }
32    });
33
34    // If advertiser IDs exist, process it immediately and SKIP API request
35    if (advertiserid.length > 0) {
36        console.log(`🚀 Processing advertiser IDs directly :`, advertiserid);
37        const adPromises = advertiserid.map(id => searchForAds(id, RegionCode, format, dateRange, platform, limitResults, isPolitical));
38        const adResults = await Promise.all(adPromises);
39        const creativeDetails = await processCreativeDetails(adResults.flat().filter(Boolean), RegionCode);
40        return creativeDetails.flat().filter(Boolean);
41    }
42
43    // If no keyword or advertiserid exist, return no data (avoids unnecessary request)
44    if (key_advid.length === 0) {
45        console.warn(`⚠️ No valid keyword or advertiserid found. Skipping API request.`);
46        return { message: "No data", keyword_advertiserid };
47    }
48
49    console.log(`📡 Sending API request for keyword or advertiserid:`, key_advid);
50
51    // Fix: If there's only one keyword, send it as a string. If multiple, send as an array.
52    const requestPayload = {
53        "2": maxAdvertisers,
54        "4": {
55            "2": RegionCode ? [RegionCode] : [],
56            "3": Array.isArray(key_advid) ? key_advid.join(",") : key_advid  // Ensure a string
57        },
58        "7": {
59            "1": 2
60        }
61    };
62
63    console.log(`requestPayload ${JSON.stringify(requestPayload, null, 2)}`);
64    const postData = new URLSearchParams({
65        "f.req": JSON.stringify(requestPayload)
66    }).toString();
67
68    const agent = new https.Agent({ keepAlive: true });
69    const options = {
70        agent,
71        hostname: "adstransparency.google.com",
72        path: "/anji/_/rpc/SearchService/SearchAdvertisers?authuser=0",
73        method: "POST",
74        headers: {
75            "Content-Type": "application/x-www-form-urlencoded",
76            "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/133.0.0.0 Safari/537.36",
77            "Connection": "keep-alive",
78            "Content-Length": Buffer.byteLength(String(postData)),
79        }
80    };
81
82    return new Promise((resolve, reject) => {
83        const req = https.request(options, (res) => {
84            let data = "";
85
86            res.on("data", (chunk) => (data += chunk));
87
88            res.on("end", async () => {
89                if (res.statusCode >= 400) {
90                    console.error(`❌ HTTP Error ${res.statusCode}: ${data}`);
91                    return reject(new Error(`HTTP ${res.statusCode}: ${data}`));
92                }
93
94                try {
95                    const jsonResponse = JSON.parse(data);
96                    const promises = [];
97
98                    console.log(`statusCode : ${res.statusCode} | jsonResponse ${JSON.stringify(jsonResponse, null, 2)}`);
99                    // Ensure jsonResponse["1"] is an array before processing
100                    if (Array.isArray(jsonResponse["1"])) {
101                        promises.push(...jsonResponse["1"].map(async (item) => {
102                            let advertiserId = null;
103
104                            // New response format handling
105                            if (item["1"]) {
106                                advertiserId = item["1"];
107                            }
108
109                            return advertiserId ? searchForAds(advertiserId, RegionCode, format, dateRange, platform, limitResults, isPolitical ) : null;
110                        }));
111                    }
112
113                    // Wait for all promises to resolve
114                    const allResults = await Promise.all(promises);
115                    const creativeDetails = await processCreativeDetails(allResults.flat().filter(Boolean), RegionCode);
116                    resolve(creativeDetails.flat().filter(Boolean));
117
118                } catch (error) {
119                    console.error("❌ JSON Parsing Error:", error);
120                    reject(error);
121                }
122            });
123        });
124
125        req.on("error", (err) => {
126            console.error("❌ Request Error:", err.message);
127            reject(err);
128        });
129
130        req.write(postData);
131        req.end();
132    });
133}

src3/main.js

1import { Actor } from 'apify';
2import { CheerioCrawler, Dataset } from 'crawlee';
3
4await Actor.init();
5
6// Structure of input is defined in input_schema.json
7const {
8    keyword_domain_advertiserid,
9    proxyConfig
10} = await Actor.getInput() ?? {};
11
12const proxyConfiguration = await Actor.createProxyConfiguration(proxyConfig);
13const crawler = new CheerioCrawler({
14    proxyConfiguration,
15    useSessionPool: true,
16    persistCookiesPerSession: true,
17    additionalMimeTypes: ['application/json', 'text/plain'],
18    // Use requestHandler to process the response
19    async requestHandler({ request, response, $, body, log }) {
20        log.info('Processing URL', { url: request.url });
21
22        const responseHeaders = response.headers;
23        const requestHeaders = response.request.options.headers;
24
25        // Try to parse the response as JSON
26        let responseData = null;
27        try {
28            // First attempt to use the body directly
29            responseData = JSON.parse(body.toString());
30            log.info('Response data parsed from body:', responseData);
31        } catch (e) {
32            // If that fails, try to extract it from the HTML if available
33            if ($) {
34                try {
35                    const bodyText = $('body').text();
36                    responseData = JSON.parse(bodyText);
37                    log.info('Response data parsed from HTML body:', responseData);
38                } catch (e2) {
39                    log.error('Failed to parse JSON response', { error: e2.message });
40                }
41            } else {
42                log.error('Failed to parse JSON response and no HTML found', { error: e.message });
43            }
44        }
45
46        // Save data to Dataset
47        await Dataset.pushData({
48            url: request.url,
49            requestHeaders: requestHeaders,
50            responseHeaders: responseHeaders,
51            statusCode: response.statusCode,
52            responseBodyRaw: body.toString(), // Add the raw response body
53            responseData: responseData // Save the JSON response if parsed
54        });
55    },
56});
57
58await crawler.run(keyword_domain_advertiserid);
59
60// Gracefully exit the Actor process
61await Actor.exit();

src3/routes.js

1import { Dataset, createPuppeteerRouter } from 'crawlee';
2
3export const router = createPuppeteerRouter();
4
5router.addDefaultHandler(async ({ enqueueLinks, log, page, request }) => {
6    log.info(`Enqueueing new URLs`);
7
8    // Capture all network requests and their headers
9    const requestHeaders = [];
10    page.on('request', (req) => {
11        requestHeaders.push({
12            url: req.url(),
13            method: req.method(),
14            headers: req.headers(),
15        });
16    });
17
18    // Wait for the page to fully load
19    await page.waitForLoadState('networkidle');
20
21    // Get all cookies
22    const cookies = await page.cookies();
23
24    // Get User-Agent
25    const userAgent = await page.evaluate(() => navigator.userAgent);
26
27    await Dataset.pushData({
28        url: request.url,
29        cookies,
30        userAgent,
31        requestHeaders, // Store all captured request headers
32    });
33});
34
35router.addHandler('detail', async ({ request, page, log }) => {
36    const title = await page.title();
37    log.info(`${title}`, { url: request.loadedUrl });
38
39    // Capture all network requests and their headers
40    const requestHeaders = [];
41    page.on('request', (req) => {
42        requestHeaders.push({
43            url: req.url(),
44            method: req.method(),
45            headers: req.headers(),
46        });
47    });
48
49    // Wait for the page to fully load
50    await page.waitForLoadState('networkidle');
51
52    // Get all cookies
53    const cookies = await page.cookies();
54
55    // Get User-Agent
56    const userAgent = await page.evaluate(() => navigator.userAgent);
57
58    await Dataset.pushData({
59        url: request.loadedUrl,
60        title,
61        cookies,
62        userAgent,
63        requestHeaders, // Store all captured request headers
64    });
65});

.dockerignore

1# configurations
2.idea
3
4# crawlee and apify storage folders
5apify_storage
6crawlee_storage
7storage
8
9# installed files
10node_modules
11
12# git folder
13.git

.editorconfig

1root = true
2
3[*]
4indent_style = space
5indent_size = 4
6charset = utf-8
7trim_trailing_whitespace = true
8insert_final_newline = true
9end_of_line = lf

.eslintrc

1{
2    "extends": "@apify",
3    "root": true
4}

.gitignore

1# This file tells Git which files shouldn't be added to source control
2
3.DS_Store
4.idea
5dist
6node_modules
7apify_storage
8storage

package.json

1{
2    "name": "crawlee-puppeteer-javascript",
3    "version": "0.0.1",
4    "type": "module",
5    "description": "This is an example of an Apify actor.",
6    "dependencies": {
7        "apify": "^3.2.6",
8        "crawlee": "^3.11.5",
9        "dayjs": "^1.11.13",
10        "puppeteer": "^24.4.0"
11    },
12    "devDependencies": {
13        "@apify/eslint-config": "^0.4.0",
14        "eslint": "^8.50.0"
15    },
16    "scripts": {
17        "start": "node src/main.js",
18        "test": "echo \"Error: oops, the actor has no tests yet, sad!\" && exit 1"
19    },
20    "author": "It's not you it's me",
21    "license": "ISC"
22}

package0.json

1{
2    "name": "crawlee-cheerio-javascript",
3    "version": "0.0.1",
4    "type": "module",
5    "description": "This is a boilerplate of an Apify actor.",
6    "engines": {
7        "node": ">=18.0.0"
8    },
9    "dependencies": {
10        "apify": "^3.3.2",
11        "crawlee": "^3.12.2",
12        "dayjs": "^1.11.13"
13    },
14    "devDependencies": {
15        "@apify/eslint-config": "^0.4.0",
16        "eslint": "^9.21.0"
17    },
18    "scripts": {
19        "start": "node src/main.js",
20        "lint": "eslint ./src --ext .js,.jsx",
21        "lint:fix": "eslint ./src --ext .js,.jsx --fix",
22        "test": "echo \"Error: oops, the actor has no tests yet, sad!\" && exit 1"
23    },
24    "author": "It's not you it's me",
25    "license": "ISC"
26}

pnpm-lock.yaml

1lockfileVersion: '9.0'
2
3settings:
4  autoInstallPeers: true
5  excludeLinksFromLockfile: false
6
7importers:
8
9  .:
10    dependencies:
11      apify:
12        specifier: ^3.3.2
13        version: 3.3.2
14      crawlee:
15        specifier: ^3.12.2
16        version: 3.12.2
17    devDependencies:
18      '@apify/eslint-config':
19        specifier: ^0.4.0
20        version: 0.4.0(eslint@9.21.0)
21      eslint:
22        specifier: ^9.21.0
23        version: 9.21.0
24
25packages:
26
27  '@apify/consts@2.37.0':
28    resolution: {integrity: sha512-GCK7wZcUPnHMUpoxd1tgbDgojdgcdxpnaF8UX5h5/hq5ZPdlik7EP2CkU6MpRfYxYl8T5LOsANUJvdB6bGthKA==}
29
30  '@apify/datastructures@2.0.2':
31    resolution: {integrity: sha512-IN9A0s2SCHoZZE1tf4xKgk4fxHM5/0I/UrXhWbn/rSv7E5sA2o0NyHdwcMY2Go9f5qd+E7VAbX6WnESTE6GLeA==}
32
33  '@apify/eslint-config@0.4.0':
34    resolution: {integrity: sha512-cXYQUstZ5wjIQMX9HM9GOg8+s0lWp9xF7Zee8bCl5QAkNJs5gKtCsKStv7v6A2hexUZ+N5HAEN2MFex9IIw2/g==}
35    peerDependencies:
36      eslint: '*'
37
38  '@apify/input_secrets@1.1.65':
39    resolution: {integrity: sha512-1KGrkrG7nWWN0JFg1VxMKHJFjlEC21mncKkNV03QqQ1XeQg1h9hBoCM5yqWeBZt8AmAfJ8kju87ObukWD3ETbA==}
40
41  '@apify/log@2.5.13':
42    resolution: {integrity: sha512-gxvWyD9JWBkLoTX7UfQ4s0F32/UfF4T8TG4jAl2CE0vNKr0COOJFkLmmyWnTNSVDL+yGC+LZp3mtbPnB+l6Sog==}
43
44  '@apify/ps-tree@1.2.0':
45    resolution: {integrity: sha512-VHIswI7rD/R4bToeIDuJ9WJXt+qr5SdhfoZ9RzdjmCs9mgy7l0P4RugQEUCcU+WB4sfImbd4CKwzXcn0uYx1yw==}
46    engines: {node: '>= 0.10'}
47    hasBin: true
48
49  '@apify/pseudo_url@2.0.54':
50    resolution: {integrity: sha512-HYUQvTgFHxnPS3mOL/xDvNv9Thp4ahW4Dwgim6txtsHRLRNuRBmrRtPNBuYIbpIO9LUKVpboXuA6D9nQXtBAlg==}
51
52  '@apify/timeout@0.3.1':
53    resolution: {integrity: sha512-sLIuOqfySki/7AXiQ1yZoCI07vX6aYFLgP6YaJ8e8YLn8CFsRERma/Crxcz0zyCaxhc7C7EPgcs1O+p/djZchw==}
54
55  '@apify/utilities@2.13.1':
56    resolution: {integrity: sha512-czQz2oANACVuwE7KrJKB8LrbhvMZyB1bvwO9jTL2SCmKQHxzY34XLQnSfblq/qsLWrwKynKxWXSvAVRZH2oIlA==}
57
58  '@asamuzakjp/css-color@2.8.3':
59    resolution: {integrity: sha512-GIc76d9UI1hCvOATjZPyHFmE5qhRccp3/zGfMPapK3jBi+yocEzp6BBB0UnfRYP9NP4FANqUZYb0hnfs3TM3hw==}
60
61  '@crawlee/basic@3.12.2':
62    resolution: {integrity: sha512-avSeHqjtvjtQoUgRqBc2HbSV4SijP1zvriLXNoz3V1lEQN63S6CTjQoHVrkG+EG7pD2+OeHILZUKAKgRQ2fSwg==}
63    engines: {node: '>=16.0.0'}
64
65  '@crawlee/browser-pool@3.12.2':
66    resolution: {integrity: sha512-R2LhLpaKpL1bbmC2EMZFsEOpN50MJBSPHqTuFYldC5PIAAF4PyWgKBc3jSf40866iupw9ZpWA0ckzL9PxFNAPw==}
67    engines: {node: '>=16.0.0'}
68    peerDependencies:
69      playwright: '*'
70      puppeteer: '*'
71    peerDependenciesMeta:
72      playwright:
73        optional: true
74      puppeteer:
75        optional: true
76
77  '@crawlee/browser@3.12.2':
78    resolution: {integrity: sha512-Y883TJa+T1kEA8zK2qLhn6qYmZsm9cSEoT4LdgVec4j9kPHbnmlSdLZ1Edk9axHz0LH6cfaR8u0MwAhwx64Z+w==}
79    engines: {node: '>=16.0.0'}
80    peerDependencies:
81      playwright: '*'
82      puppeteer: '*'
83    peerDependenciesMeta:
84      playwright:
85        optional: true
86      puppeteer:
87        optional: true
88
89  '@crawlee/cheerio@3.12.2':
90    resolution: {integrity: sha512-8pJ87szeA1Sm25VRvrKjof8SExdQyZ1rI7vyU295Lh5O3p8pLQG3ktqzCssu9ldXan027vuifIoP/qSz98ysCA==}
91    engines: {node: '>=16.0.0'}
92
93  '@crawlee/cli@3.12.2':
94    resolution: {integrity: sha512-d8LoB44kRPYKxm6uPqAmw6wEOAcWCRGG9kjUHP1ESFWgAnW+lPThWFpljqAfoTr21KQNIpdd27rnRhLzfSoo7Q==}
95    engines: {node: '>=16.0.0'}
96    hasBin: true
97
98  '@crawlee/core@3.12.2':
99    resolution: {integrity: sha512-vwHO1Rg1uxS1oEkF9VMHGiKhLc4ojy0FoJeX2Pq08ibiOIkWkcx8EvA32aEPeAVAvnpwy1TNCFpiiawtUgNKxA==}
100    engines: {node: '>=16.0.0'}
101
102  '@crawlee/http@3.12.2':
103    resolution: {integrity: sha512-rT86gx9JYBJnsgl22cZVMDm0Xm3tnvClJk6MiilprW0GGwXvAwEz4DKRtsSPWD2A1/xy90SdEac7GVtuCGdmKQ==}
104    engines: {node: '>=16.0.0'}
105
106  '@crawlee/jsdom@3.12.2':
107    resolution: {integrity: sha512-9+6GzV6BSb7HlSZ//zpE2TeimzoaqRarQbNlqBz39SRv2cn4+ApasTlB8qJaZnHX4/Mt9QExAv4AaB4FG0miFA==}
108    engines: {node: '>=16.0.0'}
109
110  '@crawlee/linkedom@3.12.2':
111    resolution: {integrity: sha512-x/xw8aFYqFv1iAuVlnn4Akh/LM5FsmSryE16f0cYFtPegboOeq+Iw3ebCBI2VGx9CLjH2xnrpv/kGzgH+JYs0Q==}
112    engines: {node: '>=16.0.0'}
113
114  '@crawlee/memory-storage@3.12.2':
115    resolution: {integrity: sha512-KUnTpYIzYy8Fnyqf2JdufyM6Nd/1/nUsrHF3hFUdQhEfby0yX8kgc9UIF8OKieGfqUuYMKdfpeWyB8jRPp6Jyw==}
116    engines: {node: '>= 16'}
117
118  '@crawlee/playwright@3.12.2':
119    resolution: {integrity: sha512-a+JgVs+PBt/ePyi4Y9PnLtEHsJ+BYCsAu+fKFxt5SfLFbgfreIpSN5LnlSGPlUOdFxaD0I+qz3H02dxtQDpGug==}
120    engines: {node: '>=16.0.0'}
121    peerDependencies:
122      playwright: '*'
123    peerDependenciesMeta:
124      playwright:
125        optional: true
126
127  '@crawlee/puppeteer@3.12.2':
128    resolution: {integrity: sha512-XZu0NrTXEo3WufXVpJZjqFrtzxwg6Zp4rW2Mrsny2nPzcsMXX5nFsudj0N1elXXmf5ZANUD9p1T803RBcK49mg==}
129    engines: {node: '>=16.0.0'}
130    peerDependencies:
131      puppeteer: '*'
132    peerDependenciesMeta:
133      puppeteer:
134        optional: true
135
136  '@crawlee/templates@3.12.2':
137    resolution: {integrity: sha512-3dn0bdoagX1IsKHQh4YCrXTmQyUR1IgDKBwfcJGUThiiIOwn53hyO0/KsETqn8Fb0l2//10Q+xxJEDLxNN5ksA==}
138    engines: {node: '>=16.0.0'}
139
140  '@crawlee/types@3.12.2':
141    resolution: {integrity: sha512-mdSN8FSOGLzPDyO3wC5k6BvZKv467rvrLsIqqAkiN87TgQI5lwV+k2bBQGdajzcjDQn+taWG67xDbbZg6BvFVw==}
142    engines: {node: '>=16.0.0'}
143
144  '@crawlee/utils@3.12.2':
145    resolution: {integrity: sha512-Yly1WSm1y0Te1/BtrsbPnrZTIL2eoRvk/kmAgyBOC2o1Icu0QnFqWJh0iAuH7Ed92wYVgk4E/Cr5jYls35xcbQ==}
146    engines: {node: '>=16.0.0'}
147
148  '@csstools/color-helpers@5.0.1':
149    resolution: {integrity: sha512-MKtmkA0BX87PKaO1NFRTFH+UnkgnmySQOvNxJubsadusqPEC2aJ9MOQiMceZJJ6oitUl/i0L6u0M1IrmAOmgBA==}
150    engines: {node: '>=18'}
151
152  '@csstools/css-calc@2.1.1':
153    resolution: {integrity: sha512-rL7kaUnTkL9K+Cvo2pnCieqNpTKgQzy5f+N+5Iuko9HAoasP+xgprVh7KN/MaJVvVL1l0EzQq2MoqBHKSrDrag==}
154    engines: {node: '>=18'}
155    peerDependencies:
156      '@csstools/css-parser-algorithms': ^3.0.4
157      '@csstools/css-tokenizer': ^3.0.3
158
159  '@csstools/css-color-parser@3.0.7':
160    resolution: {integrity: sha512-nkMp2mTICw32uE5NN+EsJ4f5N+IGFeCFu4bGpiKgb2Pq/7J/MpyLBeQ5ry4KKtRFZaYs6sTmcMYrSRIyj5DFKA==}
161    engines: {node: '>=18'}
162    peerDependencies:
163      '@csstools/css-parser-algorithms': ^3.0.4
164      '@csstools/css-tokenizer': ^3.0.3
165
166  '@csstools/css-parser-algorithms@3.0.4':
167    resolution: {integrity: sha512-Up7rBoV77rv29d3uKHUIVubz1BTcgyUK72IvCQAbfbMv584xHcGKCKbWh7i8hPrRJ7qU4Y8IO3IY9m+iTB7P3A==}
168    engines: {node: '>=18'}
169    peerDependencies:
170      '@csstools/css-tokenizer': ^3.0.3
171
172  '@csstools/css-tokenizer@3.0.3':
173    resolution: {integrity: sha512-UJnjoFsmxfKUdNYdWgOB0mWUypuLvAfQPH1+pyvRJs6euowbFkFC6P13w1l8mJyi3vxYMxc9kld5jZEGRQs6bw==}
174    engines: {node: '>=18'}
175
176  '@eslint-community/eslint-utils@4.4.1':
177    resolution: {integrity: sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==}
178    engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
179    peerDependencies:
180      eslint: ^6.0.0 || ^7.0.0 || >=8.0.0
181
182  '@eslint-community/regexpp@4.12.1':
183    resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==}
184    engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0}
185
186  '@eslint/config-array@0.19.2':
187    resolution: {integrity: sha512-GNKqxfHG2ySmJOBSHg7LxeUx4xpuCoFjacmlCoYWEbaPXLwvfIjixRI12xCQZeULksQb23uiA8F40w5TojpV7w==}
188    engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
189
190  '@eslint/core@0.12.0':
191    resolution: {integrity: sha512-cmrR6pytBuSMTaBweKoGMwu3EiHiEC+DoyupPmlZ0HxBJBtIxwe+j/E4XPIKNx+Q74c8lXKPwYawBf5glsTkHg==}
192    engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
193
194  '@eslint/eslintrc@3.3.0':
195    resolution: {integrity: sha512-yaVPAiNAalnCZedKLdR21GOGILMLKPyqSLWaAjQFvYA2i/ciDi8ArYVr69Anohb6cH2Ukhqti4aFnYyPm8wdwQ==}
196    engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
197
198  '@eslint/js@9.21.0':
199    resolution: {integrity: sha512-BqStZ3HX8Yz6LvsF5ByXYrtigrV5AXADWLAGc7PH/1SxOb7/FIYYMszZZWiUou/GB9P2lXWk2SV4d+Z8h0nknw==}
200    engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
201
202  '@eslint/object-schema@2.1.6':
203    resolution: {integrity: sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==}
204    engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
205
206  '@eslint/plugin-kit@0.2.7':
207    resolution: {integrity: sha512-JubJ5B2pJ4k4yGxaNLdbjrnk9d/iDz6/q8wOilpIowd6PJPgaxCuHBnBszq7Ce2TyMrywm5r4PnKm6V3iiZF+g==}
208    engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
209
210  '@humanfs/core@0.19.1':
211    resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==}
212    engines: {node: '>=18.18.0'}
213
214  '@humanfs/node@0.16.6':
215    resolution: {integrity: sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==}
216    engines: {node: '>=18.18.0'}
217
218  '@humanwhocodes/module-importer@1.0.1':
219    resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==}
220    engines: {node: '>=12.22'}
221
222  '@humanwhocodes/retry@0.3.1':
223    resolution: {integrity: sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==}
224    engines: {node: '>=18.18'}
225
226  '@humanwhocodes/retry@0.4.2':
227    resolution: {integrity: sha512-xeO57FpIu4p1Ri3Jq/EXq4ClRm86dVF2z/+kvFnyqVYRavTZmaFaUBbWCOuuTh0o/g7DSsk6kc2vrS4Vl5oPOQ==}
228    engines: {node: '>=18.18'}
229
230  '@inquirer/figures@1.0.10':
231    resolution: {integrity: sha512-Ey6176gZmeqZuY/W/nZiUyvmb1/qInjcpiZjXWi6nON+nxJpD1bxtSoBxNliGISae32n6OwbY+TSXPZ1CfS4bw==}
232    engines: {node: '>=18'}
233
234  '@rtsao/scc@1.1.0':
235    resolution: {integrity: sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==}
236
237  '@sapphire/async-queue@1.5.5':
238    resolution: {integrity: sha512-cvGzxbba6sav2zZkH8GPf2oGk9yYoD5qrNWdu9fRehifgnFZJMV+nuy2nON2roRO4yQQ+v7MK/Pktl/HgfsUXg==}
239    engines: {node: '>=v14.0.0', npm: '>=7.0.0'}
240
241  '@sapphire/shapeshift@3.9.7':
242    resolution: {integrity: sha512-4It2mxPSr4OGn4HSQWGmhFMsNFGfFVhWeRPCRwbH972Ek2pzfGRZtb0pJ4Ze6oIzcyh2jw7nUDa6qGlWofgd9g==}
243    engines: {node: '>=v16'}
244
245  '@sec-ant/readable-stream@0.4.1':
246    resolution: {integrity: sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg==}
247
248  '@sindresorhus/is@4.6.0':
249    resolution: {integrity: sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==}
250    engines: {node: '>=10'}
251
252  '@sindresorhus/is@5.6.0':
253    resolution: {integrity: sha512-TV7t8GKYaJWsn00tFDqBw8+Uqmr8A0fRU1tvTQhyZzGv0sJCGRQL3JGMI3ucuKo3XIZdUP+Lx7/gh2t3lewy7g==}
254    engines: {node: '>=14.16'}
255
256  '@sindresorhus/is@7.0.1':
257    resolution: {integrity: sha512-QWLl2P+rsCJeofkDNIT3WFmb6NrRud1SUYW8dIhXK/46XFV8Q/g7Bsvib0Askb0reRLe+WYPeeE+l5cH7SlkuQ==}
258    engines: {node: '>=18'}
259
260  '@szmarczak/http-timer@5.0.1':
261    resolution: {integrity: sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==}
262    engines: {node: '>=14.16'}
263
264  '@tokenizer/inflate@0.2.6':
265    resolution: {integrity: sha512-SdR/i05U7Xhnsq36iyIq/ZiGGw4PKzw4ww3bOq80Pjj4wyXpqyTcgrgdDdGlcatnlvzNJx8CQw3hp6QZvkUwhA==}
266    engines: {node: '>=16'}
267
268  '@tokenizer/token@0.3.0':
269    resolution: {integrity: sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==}
270
271  '@types/content-type@1.1.8':
272    resolution: {integrity: sha512-1tBhmVUeso3+ahfyaKluXe38p+94lovUZdoVfQ3OnJo9uJC42JT7CBoN3k9HYhAae+GwiBYmHu+N9FZhOG+2Pg==}
273
274  '@types/estree@1.0.6':
275    resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==}
276
277  '@types/http-cache-semantics@4.0.4':
278    resolution: {integrity: sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==}
279
280  '@types/jsdom@21.1.7':
281    resolution: {integrity: sha512-yOriVnggzrnQ3a9OKOCxaVuSug3w3/SbOj5i7VwXWZEyUNl3bLF9V3MfxGbZKuwqJOQyRfqXyROBB1CoZLFWzA==}
282
283  '@types/json-schema@7.0.15':
284    resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==}
285
286  '@types/json5@0.0.29':
287    resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==}
288
289  '@types/node@22.13.5':
290    resolution: {integrity: sha512-+lTU0PxZXn0Dr1NBtC7Y8cR21AJr87dLLU953CWA6pMxxv/UDc7jYAY90upcrie1nRcD6XNG5HOYEDtgW5TxAg==}
291
292  '@types/sax@1.2.7':
293    resolution: {integrity: sha512-rO73L89PJxeYM3s3pPPjiPgVVcymqU490g0YO5n5By0k2Erzj6tay/4lr1CHAAU4JyOWd1rpQ8bCf6cZfHU96A==}
294
295  '@types/tough-cookie@4.0.5':
296    resolution: {integrity: sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==}
297
298  '@vladfrangu/async_event_emitter@2.4.6':
299    resolution: {integrity: sha512-RaI5qZo6D2CVS6sTHFKg1v5Ohq/+Bo2LZ5gzUEwZ/WkHhwtGTCB/sVLw8ijOkAUxasZ+WshN/Rzj4ywsABJ5ZA==}
300    engines: {node: '>=v14.0.0', npm: '>=7.0.0'}
301
302  acorn-jsx@5.3.2:
303    resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==}
304    peerDependencies:
305      acorn: ^6.0.0 || ^7.0.0 || ^8.0.0
306
307  acorn@8.14.0:
308    resolution: {integrity: sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==}
309    engines: {node: '>=0.4.0'}
310    hasBin: true
311
312  adm-zip@0.5.16:
313    resolution: {integrity: sha512-TGw5yVi4saajsSEgz25grObGHEUaDrniwvA2qwSC060KfqGPdglhvPMA2lPIoxs3PQIItj2iag35fONcQqgUaQ==}
314    engines: {node: '>=12.0'}
315
316  agent-base@7.1.3:
317    resolution: {integrity: sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==}
318    engines: {node: '>= 14'}
319
320  agentkeepalive@4.6.0:
321    resolution: {integrity: sha512-kja8j7PjmncONqaTsB8fQ+wE2mSU2DJ9D4XKoJ5PFWIdRMa6SLSN1ff4mOr4jCbfRSsxR4keIiySJU0N9T5hIQ==}
322    engines: {node: '>= 8.0.0'}
323
324  ajv@6.12.6:
325    resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==}
326
327  ansi-colors@4.1.3:
328    resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==}
329    engines: {node: '>=6'}
330
331  ansi-escapes@4.3.2:
332    resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==}
333    engines: {node: '>=8'}
334
335  ansi-regex@2.1.1:
336    resolution: {integrity: sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==}
337    engines: {node: '>=0.10.0'}
338
339  ansi-regex@5.0.1:
340    resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
341    engines: {node: '>=8'}
342
343  ansi-styles@2.2.1:
344    resolution: {integrity: sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==}
345    engines: {node: '>=0.10.0'}
346
347  ansi-styles@4.3.0:
348    resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
349    engines: {node: '>=8'}
350
351  apify-client@2.12.0:
352    resolution: {integrity: sha512-h04rPVft8tNjnwZswqF2k46bdHZWsDsfOE8PkmklZ9+/s/mb/Q/dMOXCx0u2+RTc8QoAkYS9LYs97wZyUWpoag==}
353
354  apify@3.3.2:
355    resolution: {integrity: sha512-OFP5YVshd0KxUP4yueUjX/hR5PGC0zzYy0xdcxX8OFAcrkrh8VaeGcOJza5uHpPFRwDnPKhiNa3YzcA3rnAHSQ==}
356    engines: {node: '>=16.0.0'}
357
358  argparse@2.0.1:
359    resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
360
361  aria-query@5.3.2:
362    resolution: {integrity: sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==}
363    engines: {node: '>= 0.4'}
364
365  array-buffer-byte-length@1.0.2:
366    resolution: {integrity: sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==}
367    engines: {node: '>= 0.4'}
368
369  array-includes@3.1.8:
370    resolution: {integrity: sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==}
371    engines: {node: '>= 0.4'}
372
373  array.prototype.findlast@1.2.5:
374    resolution: {integrity: sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==}
375    engines: {node: '>= 0.4'}
376
377  array.prototype.findlastindex@1.2.5:
378    resolution: {integrity: sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==}
379    engines: {node: '>= 0.4'}
380
381  array.prototype.flat@1.3.3:
382    resolution: {integrity: sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==}
383    engines: {node: '>= 0.4'}
384
385  array.prototype.flatmap@1.3.3:
386    resolution: {integrity: sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==}
387    engines: {node: '>= 0.4'}
388
389  array.prototype.tosorted@1.1.4:
390    resolution: {integrity: sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==}
391    engines: {node: '>= 0.4'}
392
393  arraybuffer.prototype.slice@1.0.4:
394    resolution: {integrity: sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==}
395    engines: {node: '>= 0.4'}
396
397  ast-types-flow@0.0.8:
398    resolution: {integrity: sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==}
399
400  async-function@1.0.0:
401    resolution: {integrity: sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==}
402    engines: {node: '>= 0.4'}
403
404  async-retry@1.3.3:
405    resolution: {integrity: sha512-wfr/jstw9xNi/0teMHrRW7dsz3Lt5ARhYNZ2ewpadnhaIp5mbALhOAP+EAdsC7t4Z6wqsDVv9+W6gm1Dk9mEyw==}
406
407  asynckit@0.4.0:
408    resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==}
409
410  available-typed-arrays@1.0.7:
411    resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==}
412    engines: {node: '>= 0.4'}
413
414  axe-core@4.10.2:
415    resolution: {integrity: sha512-RE3mdQ7P3FRSe7eqCWoeQ/Z9QXrtniSjp1wUjt5nRC3WIpz5rSCve6o3fsZ2aCpJtrZjSZgjwXAoTO5k4tEI0w==}
416    engines: {node: '>=4'}
417
418  axios@1.7.9:
419    resolution: {integrity: sha512-LhLcE7Hbiryz8oMDdDptSrWowmB4Bl6RCt6sIJKpRB4XtVf0iEgewX3au/pJqm+Py1kCASkb/FFKjxQaLtxJvw==}
420
421  axobject-query@4.1.0:
422    resolution: {integrity: sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==}
423    engines: {node: '>= 0.4'}
424
425  balanced-match@1.0.2:
426    resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
427
428  base64-js@1.5.1:
429    resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==}
430
431  bl@4.1.0:
432    resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==}
433
434  boolbase@1.0.0:
435    resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==}
436
437  brace-expansion@1.1.11:
438    resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
439
440  brace-expansion@2.0.1:
441    resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==}
442
443  browserslist@4.24.4:
444    resolution: {integrity: sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==}
445    engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
446    hasBin: true
447
448  buffer@5.7.1:
449    resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==}
450
451  cacheable-lookup@7.0.0:
452    resolution: {integrity: sha512-+qJyx4xiKra8mZrcwhjMRMUhD5NR1R8esPkzIYxX96JiecFoxAXFuz/GpR3+ev4PE1WamHip78wV0vcmPQtp8w==}
453    engines: {node: '>=14.16'}
454
455  cacheable-request@12.0.1:
456    resolution: {integrity: sha512-Yo9wGIQUaAfIbk+qY0X4cDQgCosecfBe3V9NSyeY4qPC2SAkbCS4Xj79VP8WOzitpJUZKc/wsRCYF5ariDIwkg==}
457    engines: {node: '>=18'}
458
459  call-bind-apply-helpers@1.0.2:
460    resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==}
461    engines: {node: '>= 0.4'}
462
463  call-bind@1.0.8:
464    resolution: {integrity: sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==}
465    engines: {node: '>= 0.4'}
466
467  call-bound@1.0.3:
468    resolution: {integrity: sha512-YTd+6wGlNlPxSuri7Y6X8tY2dmm12UMH66RpKMhiX6rsk5wXXnYgbUcOt8kiS31/AjfoTOvCsE+w8nZQLQnzHA==}
469    engines: {node: '>= 0.4'}
470
471  callsites@3.1.0:
472    resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==}
473    engines: {node: '>=6'}
474
475  callsites@4.2.0:
476    resolution: {integrity: sha512-kfzR4zzQtAE9PC7CzZsjl3aBNbXWuXiSeOCdLcPpBfGW8YuCqQHcRPFDbr/BPVmd3EEPVpuFzLyuT/cUhPr4OQ==}
477    engines: {node: '>=12.20'}
478
479  caniuse-lite@1.0.30001700:
480    resolution: {integrity: sha512-2S6XIXwaE7K7erT8dY+kLQcpa5ms63XlRkMkReXjle+kf6c5g38vyMl+Z5y8dSxOFDhcFe+nxnn261PLxBSQsQ==}
481
482  chalk@1.1.3:
483    resolution: {integrity: sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==}
484    engines: {node: '>=0.10.0'}
485
486  chalk@4.1.2:
487    resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
488    engines: {node: '>=10'}
489
490  chardet@0.7.0:
491    resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==}
492
493  cheerio-select@2.1.0:
494    resolution: {integrity: sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==}
495
496  cheerio@1.0.0-rc.12:
497    resolution: {integrity: sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q==}
498    engines: {node: '>= 6'}
499
500  cli-cursor@3.1.0:
501    resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==}
502    engines: {node: '>=8'}
503
504  cli-spinners@2.9.2:
505    resolution: {integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==}
506    engines: {node: '>=6'}
507
508  cli-width@3.0.0:
509    resolution: {integrity: sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==}
510    engines: {node: '>= 10'}
511
512  cli-width@4.1.0:
513    resolution: {integrity: sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==}
514    engines: {node: '>= 12'}
515
516  cliui@8.0.1:
517    resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==}
518    engines: {node: '>=12'}
519
520  clone@1.0.4:
521    resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==}
522    engines: {node: '>=0.8'}
523
524  color-convert@2.0.1:
525    resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
526    engines: {node: '>=7.0.0'}
527
528  color-name@1.1.4:
529    resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
530
531  combined-stream@1.0.8:
532    resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==}
533    engines: {node: '>= 0.8'}
534
535  concat-map@0.0.1:
536    resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
537
538  confusing-browser-globals@1.0.11:
539    resolution: {integrity: sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA==}
540
541  content-type@1.0.5:
542    resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==}
543    engines: {node: '>= 0.6'}
544
545  crawlee@3.12.2:
546    resolution: {integrity: sha512-+toTCJ1HUEsaRdvYhaQy1nZ4rh6zMVeDOduv9bLYI/26oCff/FG1F+dgCDfngnMcFCyZMuM89bDPUxrzB3bH8A==}
547    engines: {node: '>=16.0.0'}
548    hasBin: true
549    peerDependencies:
550      playwright: '*'
551      puppeteer: '*'
552    peerDependenciesMeta:
553      playwright:
554        optional: true
555      puppeteer:
556        optional: true
557
558  cross-spawn@7.0.6:
559    resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==}
560    engines: {node: '>= 8'}
561
562  css-select@5.1.0:
563    resolution: {integrity: sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==}
564
565  css-what@6.1.0:
566    resolution: {integrity: sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==}
567    engines: {node: '>= 6'}
568
569  cssom@0.5.0:
570    resolution: {integrity: sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw==}
571
572  cssstyle@4.2.1:
573    resolution: {integrity: sha512-9+vem03dMXG7gDmZ62uqmRiMRNtinIZ9ZyuF6BdxzfOD+FdN5hretzynkn0ReS2DO2GSw76RWHs0UmJPI2zUjw==}
574    engines: {node: '>=18'}
575
576  csv-stringify@6.5.2:
577    resolution: {integrity: sha512-RFPahj0sXcmUyjrObAK+DOWtMvMIFV328n4qZJhgX3x2RqkQgOTU2mCUmiFR0CzM6AzChlRSUErjiJeEt8BaQA==}
578
579  damerau-levenshtein@1.0.8:
580    resolution: {integrity: sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==}
581
582  data-urls@5.0.0:
583    resolution: {integrity: sha512-ZYP5VBHshaDAiVZxjbRVcFJpc+4xGgT0bK3vzy1HLN8jTO975HEbuYzZJcHoQEY5K1a0z8YayJkyVETa08eNTg==}
584    engines: {node: '>=18'}
585
586  data-view-buffer@1.0.2:
587    resolution: {integrity: sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==}
588    engines: {node: '>= 0.4'}
589
590  data-view-byte-length@1.0.2:
591    resolution: {integrity: sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==}
592    engines: {node: '>= 0.4'}
593
594  data-view-byte-offset@1.0.1:
595    resolution: {integrity: sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==}
596    engines: {node: '>= 0.4'}
597
598  debug@3.2.7:
599    resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==}
600    peerDependencies:
601      supports-color: '*'
602    peerDependenciesMeta:
603      supports-color:
604        optional: true
605
606  debug@4.4.0:
607    resolution: {integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==}
608    engines: {node: '>=6.0'}
609    peerDependencies:
610      supports-color: '*'
611    peerDependenciesMeta:
612      supports-color:
613        optional: true
614
615  decimal.js@10.5.0:
616    resolution: {integrity: sha512-8vDa8Qxvr/+d94hSh5P3IJwI5t8/c0KsMp+g8bNw9cY2icONa5aPfvKeieW1WlG0WQYwwhJ7mjui2xtiePQSXw==}
617
618  decompress-response@6.0.0:
619    resolution: {integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==}
620    engines: {node: '>=10'}
621
622  deep-is@0.1.4:
623    resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==}
624
625  defaults@1.0.4:
626    resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==}
627
628  defer-to-connect@2.0.1:
629    resolution: {integrity: sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==}
630    engines: {node: '>=10'}
631
632  define-data-property@1.1.4:
633    resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==}
634    engines: {node: '>= 0.4'}
635
636  define-properties@1.2.1:
637    resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==}
638    engines: {node: '>= 0.4'}
639
640  delayed-stream@1.0.0:
641    resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==}
642    engines: {node: '>=0.4.0'}
643
644  devtools-protocol@0.0.1423531:
645    resolution: {integrity: sha512-z6cOcajZWxk80zvFnkTGa7tj3oqF+C5SnOF1KSMeAr5/WW/nLNHlEpKr7voSzMz8IaUoq5rjdI0Mqv5k/BUkhg==}
646
647  doctrine@2.1.0:
648    resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==}
649    engines: {node: '>=0.10.0'}
650
651  dom-serializer@2.0.0:
652    resolution: {integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==}
653
654  domelementtype@2.3.0:
655    resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==}
656
657  domhandler@5.0.3:
658    resolution: {integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==}
659    engines: {node: '>= 4'}
660
661  domutils@3.2.2:
662    resolution: {integrity: sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==}
663
664  dot-prop@6.0.1:
665    resolution: {integrity: sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA==}
666    engines: {node: '>=10'}
667
668  dot-prop@7.2.0:
669    resolution: {integrity: sha512-Ol/IPXUARn9CSbkrdV4VJo7uCy1I3VuSiWCaFSg+8BdUOzF9n3jefIpcgAydvUZbTdEBZs2vEiTiS9m61ssiDA==}
670    engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
671
672  dunder-proto@1.0.1:
673    resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==}
674    engines: {node: '>= 0.4'}
675
676  duplexer@0.1.2:
677    resolution: {integrity: sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==}
678
679  electron-to-chromium@1.5.103:
680    resolution: {integrity: sha512-P6+XzIkfndgsrjROJWfSvVEgNHtPgbhVyTkwLjUM2HU/h7pZRORgaTlHqfAikqxKmdJMLW8fftrdGWbd/Ds0FA==}
681
682  emoji-regex@8.0.0:
683    resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
684
685  emoji-regex@9.2.2:
686    resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==}
687
688  entities@4.5.0:
689    resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==}
690    engines: {node: '>=0.12'}
691
692  entities@6.0.0:
693    resolution: {integrity: sha512-aKstq2TDOndCn4diEyp9Uq/Flu2i1GlLkc6XIDQSDMuaFE3OPW5OphLCyQ5SpSJZTb4reN+kTcYru5yIfXoRPw==}
694    engines: {node: '>=0.12'}
695
696  es-abstract@1.23.9:
697    resolution: {integrity: sha512-py07lI0wjxAC/DcfK1S6G7iANonniZwTISvdPzk9hzeH0IZIshbuuFxLIU96OyF89Yb9hiqWn8M/bY83KY5vzA==}
698    engines: {node: '>= 0.4'}
699
700  es-define-property@1.0.1:
701    resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==}
702    engines: {node: '>= 0.4'}
703
704  es-errors@1.3.0:
705    resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==}
706    engines: {node: '>= 0.4'}
707
708  es-iterator-helpers@1.2.1:
709    resolution: {integrity: sha512-uDn+FE1yrDzyC0pCo961B2IHbdM8y/ACZsKD4dG6WqrjV53BADjwa7D+1aom2rsNVfLyDgU/eigvlJGJ08OQ4w==}
710    engines: {node: '>= 0.4'}
711
712  es-object-atoms@1.1.1:
713    resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==}
714    engines: {node: '>= 0.4'}
715
716  es-set-tostringtag@2.1.0:
717    resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==}
718    engines: {node: '>= 0.4'}
719
720  es-shim-unscopables@1.1.0:
721    resolution: {integrity: sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw==}
722    engines: {node: '>= 0.4'}
723
724  es-to-primitive@1.3.0:
725    resolution: {integrity: sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==}
726    engines: {node: '>= 0.4'}
727
728  escalade@3.2.0:
729    resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==}
730    engines: {node: '>=6'}
731
732  escape-string-regexp@1.0.5:
733    resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==}
734    engines: {node: '>=0.8.0'}
735
736  escape-string-regexp@4.0.0:
737    resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
738    engines: {node: '>=10'}
739
740  eslint-config-airbnb-base@15.0.0:
741    resolution: {integrity: sha512-xaX3z4ZZIcFLvh2oUNvcX5oEofXda7giYmuplVxoOg5A7EXJMrUyqRgR+mhDhPK8LZ4PttFOBvCYDbX3sUoUig==}
742    engines: {node: ^10.12.0 || >=12.0.0}
743    peerDependencies:
744      eslint: ^7.32.0 || ^8.2.0
745      eslint-plugin-import: ^2.25.2
746
747  eslint-config-airbnb@19.0.4:
748    resolution: {integrity: sha512-T75QYQVQX57jiNgpF9r1KegMICE94VYwoFQyMGhrvc+lB8YF2E/M/PYDaQe1AJcWaEgqLE+ErXV1Og/+6Vyzew==}
749    engines: {node: ^10.12.0 || ^12.22.0 || ^14.17.0 || >=16.0.0}
750    peerDependencies:
751      eslint: ^7.32.0 || ^8.2.0
752      eslint-plugin-import: ^2.25.3
753      eslint-plugin-jsx-a11y: ^6.5.1
754      eslint-plugin-react: ^7.28.0
755      eslint-plugin-react-hooks: ^4.3.0
756
757  eslint-import-resolver-node@0.3.9:
758    resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==}
759
760  eslint-import-resolver-typescript@2.7.1:
761    resolution: {integrity: sha512-00UbgGwV8bSgUv34igBDbTOtKhqoRMy9bFjNehT40bXg6585PNIct8HhXZ0SybqB9rWtXj9crcku8ndDn/gIqQ==}
762    engines: {node: '>=4'}
763    peerDependencies:
764      eslint: '*'
765      eslint-plugin-import: '*'
766
767  eslint-module-utils@2.12.0:
768    resolution: {integrity: sha512-wALZ0HFoytlyh/1+4wuZ9FJCD/leWHQzzrxJ8+rebyReSLk7LApMyd3WJaLVoN+D5+WIdJyDK1c6JnE65V4Zyg==}
769    engines: {node: '>=4'}
770    peerDependencies:
771      '@typescript-eslint/parser': '*'
772      eslint: '*'
773      eslint-import-resolver-node: '*'
774      eslint-import-resolver-typescript: '*'
775      eslint-import-resolver-webpack: '*'
776    peerDependenciesMeta:
777      '@typescript-eslint/parser':
778        optional: true
779      eslint:
780        optional: true
781      eslint-import-resolver-node:
782        optional: true
783      eslint-import-resolver-typescript:
784        optional: true
785      eslint-import-resolver-webpack:
786        optional: true
787
788  eslint-plugin-import@2.31.0:
789    resolution: {integrity: sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A==}
790    engines: {node: '>=4'}
791    peerDependencies:
792      '@typescript-eslint/parser': '*'
793      eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9
794    peerDependenciesMeta:
795      '@typescript-eslint/parser':
796        optional: true
797
798  eslint-plugin-jsx-a11y@6.10.2:
799    resolution: {integrity: sha512-scB3nz4WmG75pV8+3eRUQOHZlNSUhFNq37xnpgRkCCELU3XMvXAxLk1eqWWyE22Ki4Q01Fnsw9BA3cJHDPgn2Q==}
800    engines: {node: '>=4.0'}
801    peerDependencies:
802      eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9
803
804  eslint-plugin-react-hooks@4.6.2:
805    resolution: {integrity: sha512-QzliNJq4GinDBcD8gPB5v0wh6g8q3SUi6EFF0x8N/BL9PoVs0atuGc47ozMRyOWAKdwaZ5OnbOEa3WR+dSGKuQ==}
806    engines: {node: '>=10'}
807    peerDependencies:
808      eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0
809
810  eslint-plugin-react@7.37.4:
811    resolution: {integrity: sha512-BGP0jRmfYyvOyvMoRX/uoUeW+GqNj9y16bPQzqAHf3AYII/tDs+jMN0dBVkl88/OZwNGwrVFxE7riHsXVfy/LQ==}
812    engines: {node: '>=4'}
813    peerDependencies:
814      eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7
815
816  eslint-scope@8.2.0:
817    resolution: {integrity: sha512-PHlWUfG6lvPc3yvP5A4PNyBL1W8fkDUccmI21JUu/+GKZBoH/W5u6usENXUrWFRsyoW5ACUjFGgAFQp5gUlb/A==}
818    engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
819
820  eslint-visitor-keys@3.4.3:
821    resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==}
822    engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
823
824  eslint-visitor-keys@4.2.0:
825    resolution: {integrity: sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==}
826    engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
827
828  eslint@9.21.0:
829    resolution: {integrity: sha512-KjeihdFqTPhOMXTt7StsDxriV4n66ueuF/jfPNC3j/lduHwr/ijDwJMsF+wyMJethgiKi5wniIE243vi07d3pg==}
830    engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
831    hasBin: true
832    peerDependencies:
833      jiti: '*'
834    peerDependenciesMeta:
835      jiti:
836        optional: true
837
838  espree@10.3.0:
839    resolution: {integrity: sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==}
840    engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
841
842  esquery@1.6.0:
843    resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==}
844    engines: {node: '>=0.10'}
845
846  esrecurse@4.3.0:
847    resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==}
848    engines: {node: '>=4.0'}
849
850  estraverse@5.3.0:
851    resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==}
852    engines: {node: '>=4.0'}
853
854  esutils@2.0.3:
855    resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==}
856    engines: {node: '>=0.10.0'}
857
858  event-stream@3.3.4:
859    resolution: {integrity: sha512-QHpkERcGsR0T7Qm3HNJSyXKEEj8AHNxkY3PK8TS2KJvQ7NiSHe3DDpwVKKtoYprL/AreyzFBeIkBIWChAqn60g==}
860
861  external-editor@3.1.0:
862    resolution: {integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==}
863    engines: {node: '>=4'}
864
865  fast-deep-equal@3.1.3:
866    resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==}
867
868  fast-json-stable-stringify@2.1.0:
869    resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==}
870
871  fast-levenshtein@2.0.6:
872    resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==}
873
874  fflate@0.8.2:
875    resolution: {integrity: sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A==}
876
877  figlet@1.8.0:
878    resolution: {integrity: sha512-chzvGjd+Sp7KUvPHZv6EXV5Ir3Q7kYNpCr4aHrRW79qFtTefmQZNny+W1pW9kf5zeE6dikku2W50W/wAH2xWgw==}
879    engines: {node: '>= 0.4.0'}
880    hasBin: true
881
882  figures@3.2.0:
883    resolution: {integrity: sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==}
884    engines: {node: '>=8'}
885
886  file-entry-cache@8.0.0:
887    resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==}
888    engines: {node: '>=16.0.0'}
889
890  file-type@20.1.0:
891    resolution: {integrity: sha512-XoxU+lETfCf+bYK3SXkxFusAvmtYQl1u/ZC4zw1DBLEsHUvh339uwYucgQnnSMz1mRCWYJrCzsbJJ95hsQbZ8A==}
892    engines: {node: '>=18'}
893
894  find-up@4.1.0:
895    resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==}
896    engines: {node: '>=8'}
897
898  find-up@5.0.0:
899    resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==}
900    engines: {node: '>=10'}
901
902  fingerprint-generator@2.1.62:
903    resolution: {integrity: sha512-Bhx2Cxm0l2xYhO1KAPs9orozlONdQzm6qC+UrLk7Np3TjMS8OuHNK6LQOGIuCZnAoP3ZMLl85WaCqI2nH5m01w==}
904    engines: {node: '>=16.0.0'}
905
906  fingerprint-injector@2.1.62:
907    resolution: {integrity: sha512-kTzJAMuVWAiZ1uA1RxYT40LGIxkLhDq2pbk//bliYuUALbSQ1UAXHZASdZTnLlFvrFPIKlBK19QmllXlA/guYA==}
908    engines: {node: '>=16.0.0'}
909    peerDependencies:
910      playwright: ^1.22.2
911      puppeteer: '>= 9.x'
912    peerDependenciesMeta:
913      playwright:
914        optional: true
915      puppeteer:
916        optional: true
917
918  flat-cache@4.0.1:
919    resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==}
920    engines: {node: '>=16'}
921
922  flatted@3.3.3:
923    resolution: {integrity: sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==}
924
925  follow-redirects@1.15.9:
926    resolution: {integrity: sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==}
927    engines: {node: '>=4.0'}
928    peerDependencies:
929      debug: '*'
930    peerDependenciesMeta:
931      debug:
932        optional: true
933
934  for-each@0.3.5:
935    resolution: {integrity: sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==}
936    engines: {node: '>= 0.4'}
937
938  form-data-encoder@4.0.2:
939    resolution: {integrity: sha512-KQVhvhK8ZkWzxKxOr56CPulAhH3dobtuQ4+hNQ+HekH/Wp5gSOafqRAeTphQUJAIk0GBvHZgJ2ZGRWd5kphMuw==}
940    engines: {node: '>= 18'}
941
942  form-data@4.0.2:
943    resolution: {integrity: sha512-hGfm/slu0ZabnNt4oaRZ6uREyfCj6P4fT/n6A1rGV+Z0VdGXjfOhVUpkn6qVQONHGIFwmveGXyDs75+nr6FM8w==}
944    engines: {node: '>= 6'}
945
946  from@0.1.7:
947    resolution: {integrity: sha512-twe20eF1OxVxp/ML/kq2p1uc6KvFK/+vs8WjEbeKmV2He22MKm7YF2ANIt+EOqhJ5L3K/SuuPhk0hWQDjOM23g==}
948
949  fs-extra@11.3.0:
950    resolution: {integrity: sha512-Z4XaCL6dUDHfP/jT25jJKMmtxvuwbkrD1vNSMFlo9lNLY2c5FHYSQgHPRZUjAB26TpDEoW9HCOgplrdbaPV/ew==}
951    engines: {node: '>=14.14'}
952
953  fs.realpath@1.0.0:
954    resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==}
955
956  function-bind@1.1.2:
957    resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==}
958
959  function.prototype.name@1.1.8:
960    resolution: {integrity: sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==}
961    engines: {node: '>= 0.4'}
962
963  functions-have-names@1.2.3:
964    resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==}
965
966  generative-bayesian-network@2.1.62:
967    resolution: {integrity: sha512-+zq1/AHdxb+0MXF34krM/IUu/N9gI6llzQg2gf7WMfuzh0nv6xbhb8QyfL48MOJihum7wSE90+/hMXK60X+Kpw==}
968
969  get-caller-file@2.0.5:
970    resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==}
971    engines: {node: 6.* || 8.* || >= 10.*}
972
973  get-intrinsic@1.3.0:
974    resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==}
975    engines: {node: '>= 0.4'}
976
977  get-proto@1.0.1:
978    resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==}
979    engines: {node: '>= 0.4'}
980
981  get-stream@9.0.1:
982    resolution: {integrity: sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA==}
983    engines: {node: '>=18'}
984
985  get-symbol-description@1.1.0:
986    resolution: {integrity: sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==}
987    engines: {node: '>= 0.4'}
988
989  glob-parent@6.0.2:
990    resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==}
991    engines: {node: '>=10.13.0'}
992
993  glob@7.2.3:
994    resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==}
995    deprecated: Glob versions prior to v9 are no longer supported
996
997  globals@14.0.0:
998    resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==}
999    engines: {node: '>=18'}
1000
1001  globalthis@1.0.4:
1002    resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==}
1003    engines: {node: '>= 0.4'}
1004
1005  gopd@1.2.0:
1006    resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==}
1007    engines: {node: '>= 0.4'}
1008
1009  got-scraping@4.1.1:
1010    resolution: {integrity: sha512-MbT+NMMU4VgvOg2tFIPOSIrMfH986fm0LJ17RxBLKlyTs3gh3xIMETpe+zdPaXY7tH1j6YYeqtfG0TnVMx6V2g==}
1011    engines: {node: '>=16'}
1012
1013  got@14.4.6:
1014    resolution: {integrity: sha512-rnhwfM/PhMNJ1i17k3DuDqgj0cKx3IHxBKVv/WX1uDKqrhi2Gv3l7rhPThR/Cc6uU++dD97W9c8Y0qyw9x0jag==}
1015    engines: {node: '>=20'}
1016
1017  graceful-fs@4.2.11:
1018    resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==}
1019
1020  has-ansi@2.0.0:
1021    resolution: {integrity: sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg==}
1022    engines: {node: '>=0.10.0'}
1023
1024  has-bigints@1.1.0:
1025    resolution: {integrity: sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==}
1026    engines: {node: '>= 0.4'}
1027
1028  has-flag@4.0.0:
1029    resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
1030    engines: {node: '>=8'}
1031
1032  has-property-descriptors@1.0.2:
1033    resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==}
1034
1035  has-proto@1.2.0:
1036    resolution: {integrity: sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==}
1037    engines: {node: '>= 0.4'}
1038
1039  has-symbols@1.1.0:
1040    resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==}
1041    engines: {node: '>= 0.4'}
1042
1043  has-tostringtag@1.0.2:
1044    resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==}
1045    engines: {node: '>= 0.4'}
1046
1047  hasown@2.0.2:
1048    resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==}
1049    engines: {node: '>= 0.4'}
1050
1051  header-generator@2.1.62:
1052    resolution: {integrity: sha512-L4y1Fush4bkC/3zEurWjiwzeuekAH3HMYA508EZDmvk1wPmcbpV/mq3u3d3fxq7v4oPmaCfsRm1T5DUH19uikA==}
1053    engines: {node: '>=16.0.0'}
1054
1055  html-encoding-sniffer@4.0.0:
1056    resolution: {integrity: sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ==}
1057    engines: {node: '>=18'}
1058
1059  html-escaper@3.0.3:
1060    resolution: {integrity: sha512-RuMffC89BOWQoY0WKGpIhn5gX3iI54O6nRA0yC124NYVtzjmFWBIiFd8M0x+ZdX0P9R4lADg1mgP8C7PxGOWuQ==}
1061
1062  htmlparser2@10.0.0:
1063    resolution: {integrity: sha512-TwAZM+zE5Tq3lrEHvOlvwgj1XLWQCtaaibSN11Q+gGBAS7Y1uZSWwXXRe4iF6OXnaq1riyQAPFOBtYc77Mxq0g==}
1064
1065  htmlparser2@8.0.2:
1066    resolution: {integrity: sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==}
1067
1068  htmlparser2@9.1.0:
1069    resolution: {integrity: sha512-5zfg6mHUoaer/97TxnGpxmbR7zJtPwIYFMZ/H5ucTlPZhKvtum05yiPK3Mgai3a0DyVxv7qYqoweaEd2nrYQzQ==}
1070
1071  http-cache-semantics@4.1.1:
1072    resolution: {integrity: sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==}
1073
1074  http-proxy-agent@7.0.2:
1075    resolution: {integrity: sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==}
1076    engines: {node: '>= 14'}
1077
1078  http2-wrapper@2.2.1:
1079    resolution: {integrity: sha512-V5nVw1PAOgfI3Lmeaj2Exmeg7fenjhRUgz1lPSezy1CuhPYbgQtbQj4jZfEAEMlaL+vupsvhjqCyjzob0yxsmQ==}
1080    engines: {node: '>=10.19.0'}
1081
1082  https-proxy-agent@7.0.6:
1083    resolution: {integrity: sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==}
1084    engines: {node: '>= 14'}
1085
1086  humanize-ms@1.2.1:
1087    resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==}
1088
1089  iconv-lite@0.4.24:
1090    resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==}
1091    engines: {node: '>=0.10.0'}
1092
1093  iconv-lite@0.6.3:
1094    resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==}
1095    engines: {node: '>=0.10.0'}
1096
1097  idcac-playwright@0.1.3:
1098    resolution: {integrity: sha512-VVYQ4sv6OrUJKVzYaIP1hq0qAHd1O22HW5LnL1Wf6zkrLStQ/QEg4iJ0rllIOEpd+Rmm+635AJD59A+Vw+2PgQ==}
1099
1100  ieee754@1.2.1:
1101    resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==}
1102
1103  ignore@5.3.2:
1104    resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==}
1105    engines: {node: '>= 4'}
1106
1107  import-fresh@3.3.1:
1108    resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==}
1109    engines: {node: '>=6'}
1110
1111  import-local@3.2.0:
1112    resolution: {integrity: sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==}
1113    engines: {node: '>=8'}
1114    hasBin: true
1115
1116  imurmurhash@0.1.4:
1117    resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==}
1118    engines: {node: '>=0.8.19'}
1119
1120  inflight@1.0.6:
1121    resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==}
1122    deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.
1123
1124  inherits@2.0.4:
1125    resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
1126
1127  inquirer@8.2.6:
1128    resolution: {integrity: sha512-M1WuAmb7pn9zdFRtQYk26ZBoY043Sse0wVDdk4Bppr+JOXyQYybdtvK+l9wUibhtjdjvtoiNy8tk+EgsYIUqKg==}
1129    engines: {node: '>=12.0.0'}
1130
1131  inquirer@9.3.7:
1132    resolution: {integrity: sha512-LJKFHCSeIRq9hanN14IlOtPSTe3lNES7TYDTE2xxdAy1LS5rYphajK1qtwvj3YmQXvvk0U2Vbmcni8P9EIQW9w==}
1133    engines: {node: '>=18'}
1134
1135  internal-slot@1.1.0:
1136    resolution: {integrity: sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==}
1137    engines: {node: '>= 0.4'}
1138
1139  ip-address@9.0.5:
1140    resolution: {integrity: sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==}
1141    engines: {node: '>= 12'}
1142
1143  is-any-array@2.0.1:
1144    resolution: {integrity: sha512-UtilS7hLRu++wb/WBAw9bNuP1Eg04Ivn1vERJck8zJthEvXCBEBpGR/33u/xLKWEQf95803oalHrVDptcAvFdQ==}
1145
1146  is-array-buffer@3.0.5:
1147    resolution: {integrity: sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==}
1148    engines: {node: '>= 0.4'}
1149
1150  is-async-function@2.1.1:
1151    resolution: {integrity: sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==}
1152    engines: {node: '>= 0.4'}
1153
1154  is-bigint@1.1.0:
1155    resolution: {integrity: sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==}
1156    engines: {node: '>= 0.4'}
1157
1158  is-boolean-object@1.2.2:
1159    resolution: {integrity: sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==}
1160    engines: {node: '>= 0.4'}
1161
1162  is-callable@1.2.7:
1163    resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==}
1164    engines: {node: '>= 0.4'}
1165
1166  is-core-module@2.16.1:
1167    resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==}
1168    engines: {node: '>= 0.4'}
1169
1170  is-data-view@1.0.2:
1171    resolution: {integrity: sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==}
1172    engines: {node: '>= 0.4'}
1173
1174  is-date-object@1.1.0:
1175    resolution: {integrity: sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==}
1176    engines: {node: '>= 0.4'}
1177
1178  is-extglob@2.1.1:
1179    resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
1180    engines: {node: '>=0.10.0'}
1181
1182  is-finalizationregistry@1.1.1:
1183    resolution: {integrity: sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==}
1184    engines: {node: '>= 0.4'}
1185
1186  is-fullwidth-code-point@3.0.0:
1187    resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==}
1188    engines: {node: '>=8'}
1189
1190  is-generator-function@1.1.0:
1191    resolution: {integrity: sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==}
1192    engines: {node: '>= 0.4'}
1193
1194  is-glob@4.0.3:
1195    resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
1196    engines: {node: '>=0.10.0'}
1197
1198  is-interactive@1.0.0:
1199    resolution: {integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==}
1200    engines: {node: '>=8'}
1201
1202  is-map@2.0.3:
1203    resolution: {integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==}
1204    engines: {node: '>= 0.4'}
1205
1206  is-number-object@1.1.1:
1207    resolution: {integrity: sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==}
1208    engines: {node: '>= 0.4'}
1209
1210  is-obj@2.0.0:
1211    resolution: {integrity: sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==}
1212    engines: {node: '>=8'}
1213
1214  is-potential-custom-element-name@1.0.1:
1215    resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==}
1216
1217  is-regex@1.2.1:
1218    resolution: {integrity: sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==}
1219    engines: {node: '>= 0.4'}
1220
1221  is-set@2.0.3:
1222    resolution: {integrity: sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==}
1223    engines: {node: '>= 0.4'}
1224
1225  is-shared-array-buffer@1.0.4:
1226    resolution: {integrity: sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==}
1227    engines: {node: '>= 0.4'}
1228
1229  is-stream@4.0.1:
1230    resolution: {integrity: sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A==}
1231    engines: {node: '>=18'}
1232
1233  is-string@1.1.1:
1234    resolution: {integrity: sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==}
1235    engines: {node: '>= 0.4'}
1236
1237  is-symbol@1.1.1:
1238    resolution: {integrity: sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==}
1239    engines: {node: '>= 0.4'}
1240
1241  is-typed-array@1.1.15:
1242    resolution: {integrity: sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==}
1243    engines: {node: '>= 0.4'}
1244
1245  is-unicode-supported@0.1.0:
1246    resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==}
1247    engines: {node: '>=10'}
1248
1249  is-weakmap@2.0.2:
1250    resolution: {integrity: sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==}
1251    engines: {node: '>= 0.4'}
1252
1253  is-weakref@1.1.1:
1254    resolution: {integrity: sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==}
1255    engines: {node: '>= 0.4'}
1256
1257  is-weakset@2.0.4:
1258    resolution: {integrity: sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==}
1259    engines: {node: '>= 0.4'}
1260
1261  isarray@2.0.5:
1262    resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==}
1263
1264  isexe@2.0.0:
1265    resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
1266
1267  iterator.prototype@1.1.5:
1268    resolution: {integrity: sha512-H0dkQoCa3b2VEeKQBOxFph+JAbcrQdE7KC0UkqwpLmv2EC4P41QXP+rqo9wYodACiG5/WM5s9oDApTU8utwj9g==}
1269    engines: {node: '>= 0.4'}
1270
1271  jquery@3.7.1:
1272    resolution: {integrity: sha512-m4avr8yL8kmFN8psrbFFFmB/If14iN5o9nw/NgnnM+kybDJpRsAynV2BsfpTYrTRysYUdADVD7CkUUizgkpLfg==}
1273
1274  js-tokens@4.0.0:
1275    resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==}
1276
1277  js-yaml@4.1.0:
1278    resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==}
1279    hasBin: true
1280
1281  jsbn@1.1.0:
1282    resolution: {integrity: sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==}
1283
1284  jsdom@26.0.0:
1285    resolution: {integrity: sha512-BZYDGVAIriBWTpIxYzrXjv3E/4u8+/pSG5bQdIYCbNCGOvsPkDQfTVLAIXAf9ETdCpduCVTkDe2NNZ8NIwUVzw==}
1286    engines: {node: '>=18'}
1287    peerDependencies:
1288      canvas: ^3.0.0
1289    peerDependenciesMeta:
1290      canvas:
1291        optional: true
1292
1293  json-buffer@3.0.1:
1294    resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==}
1295
1296  json-schema-traverse@0.4.1:
1297    resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==}
1298
1299  json-stable-stringify-without-jsonify@1.0.1:
1300    resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==}
1301
1302  json5@1.0.2:
1303    resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==}
1304    hasBin: true
1305
1306  json5@2.2.3:
1307    resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==}
1308    engines: {node: '>=6'}
1309    hasBin: true
1310
1311  jsonfile@6.1.0:
1312    resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==}
1313
1314  jsx-ast-utils@3.3.5:
1315    resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==}
1316    engines: {node: '>=4.0'}
1317
1318  keyv@4.5.4:
1319    resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==}
1320
1321  language-subtag-registry@0.3.23:
1322    resolution: {integrity: sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ==}
1323
1324  language-tags@1.0.9:
1325    resolution: {integrity: sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==}
1326    engines: {node: '>=0.10'}
1327
1328  levn@0.4.1:
1329    resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==}
1330    engines: {node: '>= 0.8.0'}
1331
1332  linkedom@0.18.9:
1333    resolution: {integrity: sha512-Pfvhwjs46nBrcQdauQjMXDJZqj6VwN7KStT84xQqmIgD9bPH6UVJ/ESW8y4VHVF2h7di0/P+f4Iln4U5emRcmg==}
1334
1335  locate-path@5.0.0:
1336    resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==}
1337    engines: {node: '>=8'}
1338
1339  locate-path@6.0.0:
1340    resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==}
1341    engines: {node: '>=10'}
1342
1343  lodash.isequal@4.5.0:
1344    resolution: {integrity: sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==}
1345    deprecated: This package is deprecated. Use require('node:util').isDeepStrictEqual instead.
1346
1347  lodash.merge@4.6.2:
1348    resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==}
1349
1350  lodash@4.17.21:
1351    resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==}
1352
1353  log-symbols@4.1.0:
1354    resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==}
1355    engines: {node: '>=10'}
1356
1357  loose-envify@1.4.0:
1358    resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==}
1359    hasBin: true
1360
1361  lowercase-keys@3.0.0:
1362    resolution: {integrity: sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ==}
1363    engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
1364
1365  lru-cache@10.4.3:
1366    resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==}
1367
1368  map-stream@0.1.0:
1369    resolution: {integrity: sha512-CkYQrPYZfWnu/DAmVCpTSX/xHpKZ80eKh2lAkyA6AJTef6bW+6JpbQZN5rofum7da+SyN1bi5ctTm+lTfcCW3g==}
1370
1371  math-intrinsics@1.1.0:
1372    resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==}
1373    engines: {node: '>= 0.4'}
1374
1375  mime-db@1.52.0:
1376    resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==}
1377    engines: {node: '>= 0.6'}
1378
1379  mime-types@2.1.35:
1380    resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==}
1381    engines: {node: '>= 0.6'}
1382
1383  mimic-fn@2.1.0:
1384    resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==}
1385    engines: {node: '>=6'}
1386
1387  mimic-response@3.1.0:
1388    resolution: {integrity: sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==}
1389    engines: {node: '>=10'}
1390
1391  mimic-response@4.0.0:
1392    resolution: {integrity: sha512-e5ISH9xMYU0DzrT+jl8q2ze9D6eWBto+I8CNpe+VI+K2J/F/k3PdkdTdz4wvGVH4NTpo+NRYTVIuMQEMMcsLqg==}
1393    engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
1394
1395  minimatch@3.1.2:
1396    resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
1397
1398  minimatch@9.0.5:
1399    resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==}
1400    engines: {node: '>=16 || 14 >=14.17'}
1401
1402  minimist@1.2.8:
1403    resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==}
1404
1405  ml-array-max@1.2.4:
1406    resolution: {integrity: sha512-BlEeg80jI0tW6WaPyGxf5Sa4sqvcyY6lbSn5Vcv44lp1I2GR6AWojfUvLnGTNsIXrZ8uqWmo8VcG1WpkI2ONMQ==}
1407
1408  ml-array-min@1.2.3:
1409    resolution: {integrity: sha512-VcZ5f3VZ1iihtrGvgfh/q0XlMobG6GQ8FsNyQXD3T+IlstDv85g8kfV0xUG1QPRO/t21aukaJowDzMTc7j5V6Q==}
1410
1411  ml-array-rescale@1.3.7:
1412    resolution: {integrity: sha512-48NGChTouvEo9KBctDfHC3udWnQKNKEWN0ziELvY3KG25GR5cA8K8wNVzracsqSW1QEkAXjTNx+ycgAv06/1mQ==}
1413
1414  ml-logistic-regression@2.0.0:
1415    resolution: {integrity: sha512-xHhB91ut8GRRbJyB1ZQfKsl1MHmE1PqMeRjxhks96M5BGvCbC9eEojf4KgRMKM2LxFblhVUcVzweAoPB48Nt0A==}
1416
1417  ml-matrix@6.12.0:
1418    resolution: {integrity: sha512-AGfR+pWaC0GmzjUnB6BfwhndPEUGz0i7QUYdqNuw1zhTov/vSRJ9pP2hs6BoGpaSbtXgrKjZz2zjD1M0xuur6A==}
1419
1420  ms@2.1.3:
1421    resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
1422
1423  mute-stream@0.0.8:
1424    resolution: {integrity: sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==}
1425
1426  mute-stream@1.0.0:
1427    resolution: {integrity: sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==}
1428    engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
1429
1430  nanoid@3.3.8:
1431    resolution: {integrity: sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==}
1432    engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
1433    hasBin: true
1434
1435  natural-compare@1.4.0:
1436    resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==}
1437
1438  node-releases@2.0.19:
1439    resolution: {integrity: sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==}
1440
1441  normalize-url@8.0.1:
1442    resolution: {integrity: sha512-IO9QvjUMWxPQQhs60oOu10CRkWCiZzSUkzbXGGV9pviYl1fXYcvkzQ5jV9z8Y6un8ARoVRl4EtC6v6jNqbaJ/w==}
1443    engines: {node: '>=14.16'}
1444
1445  nth-check@2.1.1:
1446    resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==}
1447
1448  nwsapi@2.2.16:
1449    resolution: {integrity: sha512-F1I/bimDpj3ncaNDhfyMWuFqmQDBwDB0Fogc2qpL3BWvkQteFD/8BzWuIRl83rq0DXfm8SGt/HFhLXZyljTXcQ==}
1450
1451  object-assign@4.1.1:
1452    resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==}
1453    engines: {node: '>=0.10.0'}
1454
1455  object-inspect@1.13.4:
1456    resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==}
1457    engines: {node: '>= 0.4'}
1458
1459  object-keys@1.1.1:
1460    resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==}
1461    engines: {node: '>= 0.4'}
1462
1463  object.assign@4.1.7:
1464    resolution: {integrity: sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==}
1465    engines: {node: '>= 0.4'}
1466
1467  object.entries@1.1.8:
1468    resolution: {integrity: sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ==}
1469    engines: {node: '>= 0.4'}
1470
1471  object.fromentries@2.0.8:
1472    resolution: {integrity: sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==}
1473    engines: {node: '>= 0.4'}
1474
1475  object.groupby@1.0.3:
1476    resolution: {integrity: sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==}
1477    engines: {node: '>= 0.4'}
1478
1479  object.values@1.2.1:
1480    resolution: {integrity: sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==}
1481    engines: {node: '>= 0.4'}
1482
1483  once@1.4.0:
1484    resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
1485
1486  onetime@5.1.2:
1487    resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==}
1488    engines: {node: '>=6'}
1489
1490  optionator@0.9.4:
1491    resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==}
1492    engines: {node: '>= 0.8.0'}
1493
1494  ora@5.4.1:
1495    resolution: {integrity: sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==}
1496    engines: {node: '>=10'}
1497
1498  os-tmpdir@1.0.2:
1499    resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==}
1500    engines: {node: '>=0.10.0'}
1501
1502  ow@0.28.2:
1503    resolution: {integrity: sha512-dD4UpyBh/9m4X2NVjA+73/ZPBRF+uF4zIMFvvQsabMiEK8x41L3rQ8EENOi35kyyoaJwNxEeJcP6Fj1H4U409Q==}
1504    engines: {node: '>=12'}
1505
1506  ow@1.1.1:
1507    resolution: {integrity: sha512-sJBRCbS5vh1Jp9EOgwp1Ws3c16lJrUkJYlvWTYC03oyiYVwS/ns7lKRWow4w4XjDyTrA2pplQv4B2naWSR6yDA==}
1508    engines: {node: '>=14.16'}
1509
1510  own-keys@1.0.1:
1511    resolution: {integrity: sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==}
1512    engines: {node: '>= 0.4'}
1513
1514  p-cancelable@4.0.1:
1515    resolution: {integrity: sha512-wBowNApzd45EIKdO1LaU+LrMBwAcjfPaYtVzV3lmfM3gf8Z4CHZsiIqlM8TZZ8okYvh5A1cP6gTfCRQtwUpaUg==}
1516    engines: {node: '>=14.16'}
1517
1518  p-limit@2.3.0:
1519    resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==}
1520    engines: {node: '>=6'}
1521
1522  p-limit@3.1.0:
1523    resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==}
1524    engines: {node: '>=10'}
1525
1526  p-locate@4.1.0:
1527    resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==}
1528    engines: {node: '>=8'}
1529
1530  p-locate@5.0.0:
1531    resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==}
1532    engines: {node: '>=10'}
1533
1534  p-try@2.2.0:
1535    resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==}
1536    engines: {node: '>=6'}
1537
1538  parent-module@1.0.1:
1539    resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==}
1540    engines: {node: '>=6'}
1541
1542  parent-require@1.0.0:
1543    resolution: {integrity: sha512-2MXDNZC4aXdkkap+rBBMv0lUsfJqvX5/2FiYYnfCnorZt3Pk06/IOR5KeaoghgS2w07MLWgjbsnyaq6PdHn2LQ==}
1544    engines: {node: '>= 0.4.0'}
1545
1546  parse5-htmlparser2-tree-adapter@7.1.0:
1547    resolution: {integrity: sha512-ruw5xyKs6lrpo9x9rCZqZZnIUntICjQAd0Wsmp396Ul9lN/h+ifgVV1x1gZHi8euej6wTfpqX8j+BFQxF0NS/g==}
1548
1549  parse5@7.2.1:
1550    resolution: {integrity: sha512-BuBYQYlv1ckiPdQi/ohiivi9Sagc9JG+Ozs0r7b/0iK3sKmrb0b9FdWdBbOdx6hBCM/F9Ir82ofnBhtZOjCRPQ==}
1551
1552  path-exists@4.0.0:
1553    resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==}
1554    engines: {node: '>=8'}
1555
1556  path-is-absolute@1.0.1:
1557    resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==}
1558    engines: {node: '>=0.10.0'}
1559
1560  path-key@3.1.1:
1561    resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==}
1562    engines: {node: '>=8'}
1563
1564  path-parse@1.0.7:
1565    resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==}
1566
1567  pause-stream@0.0.11:
1568    resolution: {integrity: sha512-e3FBlXLmN/D1S+zHzanP4E/4Z60oFAa3O051qt1pxa7DEJWKAyil6upYVXCWadEnuoqa4Pkc9oUx9zsxYeRv8A==}
1569
1570  peek-readable@6.1.1:
1571    resolution: {integrity: sha512-7QmvgRKhxM0E2PGV4ocfROItVode+ELI27n4q+lpufZ+tRKBu/pBP8WOmw9HXn2ui/AUizqtvaVQhcJrOkRqYg==}
1572    engines: {node: '>=18'}
1573
1574  picocolors@1.1.1:
1575    resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==}
1576
1577  pkg-dir@4.2.0:
1578    resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==}
1579    engines: {node: '>=8'}
1580
1581  possible-typed-array-names@1.1.0:
1582    resolution: {integrity: sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==}
1583    engines: {node: '>= 0.4'}
1584
1585  prelude-ls@1.2.1:
1586    resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==}
1587    engines: {node: '>= 0.8.0'}
1588
1589  prop-types@15.8.1:
1590    resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==}
1591
1592  proper-lockfile@4.1.2:
1593    resolution: {integrity: sha512-TjNPblN4BwAWMXU8s9AEz4JmQxnD1NNL7bNOY/AKUzyamc379FWASUhc/K1pL2noVb+XmZKLL68cjzLsiOAMaA==}
1594
1595  proxy-chain@2.5.6:
1596    resolution: {integrity: sha512-vC57FECgv2WKCVoaRrztJ86NBER7ZJCjSGvOnpMlgfi9vroMCoCwexQ+69He4YWUPE88D5jZizytiLbPjLv6/A==}
1597    engines: {node: '>=14'}
1598
1599  proxy-from-env@1.1.0:
1600    resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==}
1601
1602  punycode@2.3.1:
1603    resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==}
1604    engines: {node: '>=6'}
1605
1606  quick-lru@5.1.1:
1607    resolution: {integrity: sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==}
1608    engines: {node: '>=10'}
1609
1610  quick-lru@7.0.0:
1611    resolution: {integrity: sha512-MX8gB7cVYTrYcFfAnfLlhRd0+Toyl8yX8uBx1MrX7K0jegiz9TumwOK27ldXrgDlHRdVi+MqU9Ssw6dr4BNreg==}
1612    engines: {node: '>=18'}
1613
1614  react-is@16.13.1:
1615    resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==}
1616
1617  readable-stream@3.6.2:
1618    resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==}
1619    engines: {node: '>= 6'}
1620
1621  reflect.getprototypeof@1.0.10:
1622    resolution: {integrity: sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==}
1623    engines: {node: '>= 0.4'}
1624
1625  regexp.prototype.flags@1.5.4:
1626    resolution: {integrity: sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==}
1627    engines: {node: '>= 0.4'}
1628
1629  require-directory@2.1.1:
1630    resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==}
1631    engines: {node: '>=0.10.0'}
1632
1633  resolve-alpn@1.2.1:
1634    resolution: {integrity: sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==}
1635
1636  resolve-cwd@3.0.0:
1637    resolution: {integrity: sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==}
1638    engines: {node: '>=8'}
1639
1640  resolve-from@4.0.0:
1641    resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==}
1642    engines: {node: '>=4'}
1643
1644  resolve-from@5.0.0:
1645    resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==}
1646    engines: {node: '>=8'}
1647
1648  resolve@1.22.10:
1649    resolution: {integrity: sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==}
1650    engines: {node: '>= 0.4'}
1651    hasBin: true
1652
1653  resolve@2.0.0-next.5:
1654    resolution: {integrity: sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==}
1655    hasBin: true
1656
1657  responselike@3.0.0:
1658    resolution: {integrity: sha512-40yHxbNcl2+rzXvZuVkrYohathsSJlMTXKryG5y8uciHv1+xDLHQpgjG64JUO9nrEq2jGLH6IZ8BcZyw3wrweg==}
1659    engines: {node: '>=14.16'}
1660
1661  restore-cursor@3.1.0:
1662    resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==}
1663    engines: {node: '>=8'}
1664
1665  retry@0.12.0:
1666    resolution: {integrity: sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==}
1667    engines: {node: '>= 4'}
1668
1669  retry@0.13.1:
1670    resolution: {integrity: sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==}
1671    engines: {node: '>= 4'}
1672
1673  robots-parser@3.0.1:
1674    resolution: {integrity: sha512-s+pyvQeIKIZ0dx5iJiQk1tPLJAWln39+MI5jtM8wnyws+G5azk+dMnMX0qfbqNetKKNgcWWOdi0sfm+FbQbgdQ==}
1675    engines: {node: '>=10.0.0'}
1676
1677  rrweb-cssom@0.8.0:
1678    resolution: {integrity: sha512-guoltQEx+9aMf2gDZ0s62EcV8lsXR+0w8915TC3ITdn2YueuNjdAYh/levpU9nFaoChh9RUS5ZdQMrKfVEN9tw==}
1679
1680  run-async@2.4.1:
1681    resolution: {integrity: sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==}
1682    engines: {node: '>=0.12.0'}
1683
1684  run-async@3.0.0:
1685    resolution: {integrity: sha512-540WwVDOMxA6dN6We19EcT9sc3hkXPw5mzRNGM3FkdN/vtE9NFvj5lFAPNwUDmJjXidm3v7TC1cTE7t17Ulm1Q==}
1686    engines: {node: '>=0.12.0'}
1687
1688  rxjs@7.8.2:
1689    resolution: {integrity: sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==}
1690
1691  safe-array-concat@1.1.3:
1692    resolution: {integrity: sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==}
1693    engines: {node: '>=0.4'}
1694
1695  safe-buffer@5.2.1:
1696    resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==}
1697
1698  safe-push-apply@1.0.0:
1699    resolution: {integrity: sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==}
1700    engines: {node: '>= 0.4'}
1701
1702  safe-regex-test@1.1.0:
1703    resolution: {integrity: sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==}
1704    engines: {node: '>= 0.4'}
1705
1706  safer-buffer@2.1.2:
1707    resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==}
1708
1709  sax@1.4.1:
1710    resolution: {integrity: sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==}
1711
1712  saxes@6.0.0:
1713    resolution: {integrity: sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==}
1714    engines: {node: '>=v12.22.7'}
1715
1716  semver@6.3.1:
1717    resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==}
1718    hasBin: true
1719
1720  semver@7.7.1:
1721    resolution: {integrity: sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==}
1722    engines: {node: '>=10'}
1723    hasBin: true
1724
1725  set-function-length@1.2.2:
1726    resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==}
1727    engines: {node: '>= 0.4'}
1728
1729  set-function-name@2.0.2:
1730    resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==}
1731    engines: {node: '>= 0.4'}
1732
1733  set-proto@1.0.0:
1734    resolution: {integrity: sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==}
1735    engines: {node: '>= 0.4'}
1736
1737  shebang-command@2.0.0:
1738    resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==}
1739    engines: {node: '>=8'}
1740
1741  shebang-regex@3.0.0:
1742    resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==}
1743    engines: {node: '>=8'}
1744
1745  side-channel-list@1.0.0:
1746    resolution: {integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==}
1747    engines: {node: '>= 0.4'}
1748
1749  side-channel-map@1.0.1:
1750    resolution: {integrity: sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==}
1751    engines: {node: '>= 0.4'}
1752
1753  side-channel-weakmap@1.0.2:
1754    resolution: {integrity: sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==}
1755    engines: {node: '>= 0.4'}
1756
1757  side-channel@1.1.0:
1758    resolution: {integrity: sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==}
1759    engines: {node: '>= 0.4'}
1760
1761  signal-exit@3.0.7:
1762    resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==}
1763
1764  smart-buffer@4.2.0:
1765    resolution: {integrity: sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==}
1766    engines: {node: '>= 6.0.0', npm: '>= 3.0.0'}
1767
1768  socks-proxy-agent@8.0.5:
1769    resolution: {integrity: sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw==}
1770    engines: {node: '>= 14'}
1771
1772  socks@2.8.4:
1773    resolution: {integrity: sha512-D3YaD0aRxR3mEcqnidIs7ReYJFVzWdd6fXJYUM8ixcQcJRGTka/b3saV0KflYhyVJXKhb947GndU35SxYNResQ==}
1774    engines: {node: '>= 10.0.0', npm: '>= 3.0.0'}
1775
1776  split@0.3.3:
1777    resolution: {integrity: sha512-wD2AeVmxXRBoX44wAycgjVpMhvbwdI2aZjCkvfNcH1YqHQvJVa1duWc73OyVGJUc05fhFaTZeQ/PYsrmyH0JVA==}
1778
1779  sprintf-js@1.1.3:
1780    resolution: {integrity: sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==}
1781
1782  stream-chain@2.2.5:
1783    resolution: {integrity: sha512-1TJmBx6aSWqZ4tx7aTpBDXK0/e2hhcNSTV8+CbFJtDjbb+I1mZ8lHit0Grw9GRT+6JbIrrDd8esncgBi8aBXGA==}
1784
1785  stream-combiner@0.0.4:
1786    resolution: {integrity: sha512-rT00SPnTVyRsaSz5zgSPma/aHSOic5U1prhYdRy5HS2kTZviFpmDgzilbtsJsxiroqACmayynDN/9VzIbX5DOw==}
1787
1788  stream-json@1.9.1:
1789    resolution: {integrity: sha512-uWkjJ+2Nt/LO9Z/JyKZbMusL8Dkh97uUBTv3AJQ74y07lVahLY4eEFsPsE97pxYBwr8nnjMAIch5eqI0gPShyw==}
1790
1791  string-comparison@1.3.0:
1792    resolution: {integrity: sha512-46aD+slEwybxAMPRII83ATbgMgTiz5P8mVd7Z6VJsCzSHFjdt1hkAVLeFxPIyEb11tc6ihpJTlIqoO0MCF6NPw==}
1793    engines: {node: ^16.0.0 || >=18.0.0}
1794
1795  string-width@4.2.3:
1796    resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
1797    engines: {node: '>=8'}
1798
1799  string.prototype.includes@2.0.1:
1800    resolution: {integrity: sha512-o7+c9bW6zpAdJHTtujeePODAhkuicdAryFsfVKwA+wGw89wJ4GTY484WTucM9hLtDEOpOvI+aHnzqnC5lHp4Rg==}
1801    engines: {node: '>= 0.4'}
1802
1803  string.prototype.matchall@4.0.12:
1804    resolution: {integrity: sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA==}
1805    engines: {node: '>= 0.4'}
1806
1807  string.prototype.repeat@1.0.0:
1808    resolution: {integrity: sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==}
1809
1810  string.prototype.trim@1.2.10:
1811    resolution: {integrity: sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==}
1812    engines: {node: '>= 0.4'}
1813
1814  string.prototype.trimend@1.0.9:
1815    resolution: {integrity: sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==}
1816    engines: {node: '>= 0.4'}
1817
1818  string.prototype.trimstart@1.0.8:
1819    resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==}
1820    engines: {node: '>= 0.4'}
1821
1822  string_decoder@1.3.0:
1823    resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==}
1824
1825  strip-ansi@3.0.1:
1826    resolution: {integrity: sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==}
1827    engines: {node: '>=0.10.0'}
1828
1829  strip-ansi@6.0.1:
1830    resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
1831    engines: {node: '>=8'}
1832
1833  strip-bom@3.0.0:
1834    resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==}
1835    engines: {node: '>=4'}
1836
1837  strip-json-comments@3.1.1:
1838    resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
1839    engines: {node: '>=8'}
1840
1841  strtok3@10.2.1:
1842    resolution: {integrity: sha512-Q2dTnW3UXokAvXmXvrvMoUj/me3LyJI76HNHeuGMh2o0As/vzd7eHV3ncLOyvu928vQIDbE7Vf9ldEnC7cwy1w==}
1843    engines: {node: '>=18'}
1844
1845  supports-color@2.0.0:
1846    resolution: {integrity: sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==}
1847    engines: {node: '>=0.8.0'}
1848
1849  supports-color@7.2.0:
1850    resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
1851    engines: {node: '>=8'}
1852
1853  supports-preserve-symlinks-flag@1.0.0:
1854    resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
1855    engines: {node: '>= 0.4'}
1856
1857  symbol-tree@3.2.4:
1858    resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==}
1859
1860  through@2.3.8:
1861    resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==}
1862
1863  tiny-typed-emitter@2.1.0:
1864    resolution: {integrity: sha512-qVtvMxeXbVej0cQWKqVSSAHmKZEHAvxdF8HEUBFWts8h+xEo5m/lEiPakuyZ3BnCBjOD8i24kzNOiOLLgsSxhA==}
1865
1866  tldts-core@6.1.78:
1867    resolution: {integrity: sha512-jS0svNsB99jR6AJBmfmEWuKIgz91Haya91Z43PATaeHJ24BkMoNRb/jlaD37VYjb0mYf6gRL/HOnvS1zEnYBiw==}
1868
1869  tldts@6.1.78:
1870    resolution: {integrity: sha512-fSgYrW0ITH0SR/CqKMXIruYIPpNu5aDgUp22UhYoSrnUQwc7SBqifEBFNce7AAcygUPBo6a/gbtcguWdmko4RQ==}
1871    hasBin: true
1872
1873  tmp@0.0.33:
1874    resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==}
1875    engines: {node: '>=0.6.0'}
1876
1877  token-types@6.0.0:
1878    resolution: {integrity: sha512-lbDrTLVsHhOMljPscd0yitpozq7Ga2M5Cvez5AjGg8GASBjtt6iERCAJ93yommPmz62fb45oFIXHEZ3u9bfJEA==}
1879    engines: {node: '>=14.16'}
1880
1881  tough-cookie@5.1.1:
1882    resolution: {integrity: sha512-Ek7HndSVkp10hmHP9V4qZO1u+pn1RU5sI0Fw+jCU3lyvuMZcgqsNgc6CmJJZyByK4Vm/qotGRJlfgAX8q+4JiA==}
1883    engines: {node: '>=16'}
1884
1885  tr46@5.0.0:
1886    resolution: {integrity: sha512-tk2G5R2KRwBd+ZN0zaEXpmzdKyOYksXwywulIX95MBODjSzMIuQnQ3m8JxgbhnL1LeVo7lqQKsYa1O3Htl7K5g==}
1887    engines: {node: '>=18'}
1888
1889  tsconfig-paths@3.15.0:
1890    resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==}
1891
1892  tslib@2.8.1:
1893    resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==}
1894
1895  type-check@0.4.0:
1896    resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==}
1897    engines: {node: '>= 0.8.0'}
1898
1899  type-fest@0.21.3:
1900    resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==}
1901    engines: {node: '>=10'}
1902
1903  type-fest@2.19.0:
1904    resolution: {integrity: sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==}
1905    engines: {node: '>=12.20'}
1906
1907  type-fest@4.35.0:
1908    resolution: {integrity: sha512-2/AwEFQDFEy30iOLjrvHDIH7e4HEWH+f1Yl1bI5XMqzuoCUqwYCdxachgsgv0og/JdVZUhbfjcJAoHj5L1753A==}
1909    engines: {node: '>=16'}
1910
1911  typed-array-buffer@1.0.3:
1912    resolution: {integrity: sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==}
1913    engines: {node: '>= 0.4'}
1914
1915  typed-array-byte-length@1.0.3:
1916    resolution: {integrity: sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==}
1917    engines: {node: '>= 0.4'}
1918
1919  typed-array-byte-offset@1.0.4:
1920    resolution: {integrity: sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==}
1921    engines: {node: '>= 0.4'}
1922
1923  typed-array-length@1.0.7:
1924    resolution: {integrity: sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==}
1925    engines: {node: '>= 0.4'}
1926
1927  uhyphen@0.2.0:
1928    resolution: {integrity: sha512-qz3o9CHXmJJPGBdqzab7qAYuW8kQGKNEuoHFYrBwV6hWIMcpAmxDLXojcHfFr9US1Pe6zUswEIJIbLI610fuqA==}
1929
1930  uint8array-extras@1.4.0:
1931    resolution: {integrity: sha512-ZPtzy0hu4cZjv3z5NW9gfKnNLjoz4y6uv4HlelAjDK7sY/xOkKZv9xK/WQpcsBB3jEybChz9DPC2U/+cusjJVQ==}
1932    engines: {node: '>=18'}
1933
1934  unbox-primitive@1.1.0:
1935    resolution: {integrity: sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==}
1936    engines: {node: '>= 0.4'}
1937
1938  undici-types@6.20.0:
1939    resolution: {integrity: sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==}
1940
1941  universalify@2.0.1:
1942    resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==}
1943    engines: {node: '>= 10.0.0'}
1944
1945  update-browserslist-db@1.1.2:
1946    resolution: {integrity: sha512-PPypAm5qvlD7XMZC3BujecnaOxwhrtoFR+Dqkk5Aa/6DssiH0ibKoketaj9w8LP7Bont1rYeoV5plxD7RTEPRg==}
1947    hasBin: true
1948    peerDependencies:
1949      browserslist: '>= 4.21.0'
1950
1951  uri-js@4.4.1:
1952    resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==}
1953
1954  util-deprecate@1.0.2:
1955    resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==}
1956
1957  vali-date@1.0.0:
1958    resolution: {integrity: sha512-sgECfZthyaCKW10N0fm27cg8HYTFK5qMWgypqkXMQ4Wbl/zZKx7xZICgcoxIIE+WFAP/MBL2EFwC/YvLxw3Zeg==}
1959    engines: {node: '>=0.10.0'}
1960
1961  w3c-xmlserializer@5.0.0:
1962    resolution: {integrity: sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==}
1963    engines: {node: '>=18'}
1964
1965  wcwidth@1.0.1:
1966    resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==}
1967
1968  webidl-conversions@7.0.0:
1969    resolution: {integrity: sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==}
1970    engines: {node: '>=12'}
1971
1972  whatwg-encoding@3.1.1:
1973    resolution: {integrity: sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==}
1974    engines: {node: '>=18'}
1975
1976  whatwg-mimetype@4.0.0:
1977    resolution: {integrity: sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==}
1978    engines: {node: '>=18'}
1979
1980  whatwg-url@14.1.1:
1981    resolution: {integrity: sha512-mDGf9diDad/giZ/Sm9Xi2YcyzaFpbdLpJPr+E9fSkyQ7KpQD4SdFcugkRQYzhmfI4KeV4Qpnn2sKPdo+kmsgRQ==}
1982    engines: {node: '>=18'}
1983
1984  which-boxed-primitive@1.1.1:
1985    resolution: {integrity: sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==}
1986    engines: {node: '>= 0.4'}
1987
1988  which-builtin-type@1.2.1:
1989    resolution: {integrity: sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==}
1990    engines: {node: '>= 0.4'}
1991
1992  which-collection@1.0.2:
1993    resolution: {integrity: sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==}
1994    engines: {node: '>= 0.4'}
1995
1996  which-typed-array@1.1.18:
1997    resolution: {integrity: sha512-qEcY+KJYlWyLH9vNbsr6/5j59AXk5ni5aakf8ldzBvGde6Iz4sxZGkJyWSAueTG7QhOvNRYb1lDdFmL5Td0QKA==}
1998    engines: {node: '>= 0.4'}
1999
2000  which@2.0.2:
2001    resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
2002    engines: {node: '>= 8'}
2003    hasBin: true
2004
2005  word-wrap@1.2.5:
2006    resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==}
2007    engines: {node: '>=0.10.0'}
2008
2009  wrap-ansi@6.2.0:
2010    resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==}
2011    engines: {node: '>=8'}
2012
2013  wrap-ansi@7.0.0:
2014    resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==}
2015    engines: {node: '>=10'}
2016
2017  wrappy@1.0.2:
2018    resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
2019
2020  ws@8.18.1:
2021    resolution: {integrity: sha512-RKW2aJZMXeMxVpnZ6bck+RswznaxmzdULiBr6KY7XkTnW8uvt0iT9H5DkHUChXrc+uurzwa0rVI16n/Xzjdz1w==}
2022    engines: {node: '>=10.0.0'}
2023    peerDependencies:
2024      bufferutil: ^4.0.1
2025      utf-8-validate: '>=5.0.2'
2026    peerDependenciesMeta:
2027      bufferutil:
2028        optional: true
2029      utf-8-validate:
2030        optional: true
2031
2032  xml-name-validator@5.0.0:
2033    resolution: {integrity: sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==}
2034    engines: {node: '>=18'}
2035
2036  xmlchars@2.2.0:
2037    resolution: {integrity: sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==}
2038
2039  y18n@5.0.8:
2040    resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==}
2041    engines: {node: '>=10'}
2042
2043  yargonaut@1.1.4:
2044    resolution: {integrity: sha512-rHgFmbgXAAzl+1nngqOcwEljqHGG9uUZoPjsdZEs1w5JW9RXYzrSvH/u70C1JE5qFi0qjsdhnUX/dJRpWqitSA==}
2045
2046  yargs-parser@21.1.1:
2047    resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==}
2048    engines: {node: '>=12'}
2049
2050  yargs@17.7.2:
2051    resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==}
2052    engines: {node: '>=12'}
2053
2054  yocto-queue@0.1.0:
2055    resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
2056    engines: {node: '>=10'}
2057
2058  yoctocolors-cjs@2.1.2:
2059    resolution: {integrity: sha512-cYVsTjKl8b+FrnidjibDWskAv7UKOfcwaVZdp/it9n1s9fU3IkgDbhdIRKCW4JDsAlECJY0ytoVPT3sK6kideA==}
2060    engines: {node: '>=18'}
2061
2062snapshots:
2063
2064  '@apify/consts@2.37.0': {}
2065
2066  '@apify/datastructures@2.0.2': {}
2067
2068  '@apify/eslint-config@0.4.0(eslint@9.21.0)':
2069    dependencies:
2070      eslint: 9.21.0
2071      eslint-config-airbnb: 19.0.4(eslint-plugin-import@2.31.0(eslint@9.21.0))(eslint-plugin-jsx-a11y@6.10.2(eslint@9.21.0))(eslint-plugin-react-hooks@4.6.2(eslint@9.21.0))(eslint-plugin-react@7.37.4(eslint@9.21.0))(eslint@9.21.0)
2072      eslint-config-airbnb-base: 15.0.0(eslint-plugin-import@2.31.0(eslint@9.21.0))(eslint@9.21.0)
2073      eslint-import-resolver-typescript: 2.7.1(eslint-plugin-import@2.31.0(eslint@9.21.0))(eslint@9.21.0)
2074      eslint-plugin-import: 2.31.0(eslint-import-resolver-typescript@2.7.1)(eslint@9.21.0)
2075      eslint-plugin-jsx-a11y: 6.10.2(eslint@9.21.0)
2076      eslint-plugin-react: 7.37.4(eslint@9.21.0)
2077      eslint-plugin-react-hooks: 4.6.2(eslint@9.21.0)
2078    transitivePeerDependencies:
2079      - '@typescript-eslint/parser'
2080      - eslint-import-resolver-webpack
2081      - supports-color
2082
2083  '@apify/input_secrets@1.1.65':
2084    dependencies:
2085      '@apify/log': 2.5.13
2086      '@apify/utilities': 2.13.1
2087      ow: 0.28.2
2088
2089  '@apify/log@2.5.13':
2090    dependencies:
2091      '@apify/consts': 2.37.0
2092      ansi-colors: 4.1.3
2093
2094  '@apify/ps-tree@1.2.0':
2095    dependencies:
2096      event-stream: 3.3.4
2097
2098  '@apify/pseudo_url@2.0.54':
2099    dependencies:
2100      '@apify/log': 2.5.13
2101
2102  '@apify/timeout@0.3.1': {}
2103
2104  '@apify/utilities@2.13.1':
2105    dependencies:
2106      '@apify/consts': 2.37.0
2107      '@apify/log': 2.5.13
2108
2109  '@asamuzakjp/css-color@2.8.3':
2110    dependencies:
2111      '@csstools/css-calc': 2.1.1(@csstools/css-parser-algorithms@3.0.4(@csstools/css-tokenizer@3.0.3))(@csstools/css-tokenizer@3.0.3)
2112      '@csstools/css-color-parser': 3.0.7(@csstools/css-parser-algorithms@3.0.4(@csstools/css-tokenizer@3.0.3))(@csstools/css-tokenizer@3.0.3)
2113      '@csstools/css-parser-algorithms': 3.0.4(@csstools/css-tokenizer@3.0.3)
2114      '@csstools/css-tokenizer': 3.0.3
2115      lru-cache: 10.4.3
2116
2117  '@crawlee/basic@3.12.2':
2118    dependencies:
2119      '@apify/log': 2.5.13
2120      '@apify/timeout': 0.3.1
2121      '@apify/utilities': 2.13.1
2122      '@crawlee/core': 3.12.2
2123      '@crawlee/types': 3.12.2
2124      '@crawlee/utils': 3.12.2
2125      csv-stringify: 6.5.2
2126      fs-extra: 11.3.0
2127      got-scraping: 4.1.1
2128      ow: 0.28.2
2129      tldts: 6.1.78
2130      tslib: 2.8.1
2131      type-fest: 4.35.0
2132    transitivePeerDependencies:
2133      - supports-color
2134
2135  '@crawlee/browser-pool@3.12.2':
2136    dependencies:
2137      '@apify/log': 2.5.13
2138      '@apify/timeout': 0.3.1
2139      '@crawlee/core': 3.12.2
2140      '@crawlee/types': 3.12.2
2141      fingerprint-generator: 2.1.62
2142      fingerprint-injector: 2.1.62
2143      lodash.merge: 4.6.2
2144      nanoid: 3.3.8
2145      ow: 0.28.2
2146      p-limit: 3.1.0
2147      proxy-chain: 2.5.6
2148      quick-lru: 5.1.1
2149      tiny-typed-emitter: 2.1.0
2150      tslib: 2.8.1
2151    transitivePeerDependencies:
2152      - supports-color
2153
2154  '@crawlee/browser@3.12.2':
2155    dependencies:
2156      '@apify/timeout': 0.3.1
2157      '@crawlee/basic': 3.12.2
2158      '@crawlee/browser-pool': 3.12.2
2159      '@crawlee/types': 3.12.2
2160      '@crawlee/utils': 3.12.2
2161      ow: 0.28.2
2162      tslib: 2.8.1
2163      type-fest: 4.35.0
2164    transitivePeerDependencies:
2165      - supports-color
2166
2167  '@crawlee/cheerio@3.12.2':
2168    dependencies:
2169      '@crawlee/http': 3.12.2
2170      '@crawlee/types': 3.12.2
2171      '@crawlee/utils': 3.12.2
2172      cheerio: 1.0.0-rc.12
2173      htmlparser2: 9.1.0
2174      tslib: 2.8.1
2175    transitivePeerDependencies:
2176      - supports-color
2177
2178  '@crawlee/cli@3.12.2':
2179    dependencies:
2180      '@crawlee/templates': 3.12.2
2181      ansi-colors: 4.1.3
2182      fs-extra: 11.3.0
2183      inquirer: 8.2.6
2184      tslib: 2.8.1
2185      yargonaut: 1.1.4
2186      yargs: 17.7.2
2187
2188  '@crawlee/core@3.12.2':
2189    dependencies:
2190      '@apify/consts': 2.37.0
2191      '@apify/datastructures': 2.0.2
2192      '@apify/log': 2.5.13
2193      '@apify/pseudo_url': 2.0.54
2194      '@apify/timeout': 0.3.1
2195      '@apify/utilities': 2.13.1
2196      '@crawlee/memory-storage': 3.12.2
2197      '@crawlee/types': 3.12.2
2198      '@crawlee/utils': 3.12.2
2199      '@sapphire/async-queue': 1.5.5
2200      '@vladfrangu/async_event_emitter': 2.4.6
2201      csv-stringify: 6.5.2
2202      fs-extra: 11.3.0
2203      got-scraping: 4.1.1
2204      json5: 2.2.3
2205      minimatch: 9.0.5
2206      ow: 0.28.2
2207      stream-json: 1.9.1
2208      tldts: 6.1.78
2209      tough-cookie: 5.1.1
2210      tslib: 2.8.1
2211      type-fest: 4.35.0
2212    transitivePeerDependencies:
2213      - supports-color
2214
2215  '@crawlee/http@3.12.2':
2216    dependencies:
2217      '@apify/timeout': 0.3.1
2218      '@apify/utilities': 2.13.1
2219      '@crawlee/basic': 3.12.2
2220      '@crawlee/types': 3.12.2
2221      '@crawlee/utils': 3.12.2
2222      '@types/content-type': 1.1.8
2223      cheerio: 1.0.0-rc.12
2224      content-type: 1.0.5
2225      got-scraping: 4.1.1
2226      iconv-lite: 0.6.3
2227      mime-types: 2.1.35
2228      ow: 0.28.2
2229      tslib: 2.8.1
2230      type-fest: 4.35.0
2231    transitivePeerDependencies:
2232      - supports-color
2233
2234  '@crawlee/jsdom@3.12.2':
2235    dependencies:
2236      '@apify/timeout': 0.3.1
2237      '@apify/utilities': 2.13.1
2238      '@crawlee/http': 3.12.2
2239      '@crawlee/types': 3.12.2
2240      '@crawlee/utils': 3.12.2
2241      '@types/jsdom': 21.1.7
2242      cheerio: 1.0.0-rc.12
2243      jsdom: 26.0.0
2244      ow: 0.28.2
2245      tslib: 2.8.1
2246    transitivePeerDependencies:
2247      - bufferutil
2248      - canvas
2249      - supports-color
2250      - utf-8-validate
2251
2252  '@crawlee/linkedom@3.12.2':
2253    dependencies:
2254      '@apify/timeout': 0.3.1
2255      '@apify/utilities': 2.13.1
2256      '@crawlee/http': 3.12.2
2257      '@crawlee/types': 3.12.2
2258      linkedom: 0.18.9
2259      ow: 0.28.2
2260      tslib: 2.8.1
2261    transitivePeerDependencies:
2262      - supports-color
2263
2264  '@crawlee/memory-storage@3.12.2':
2265    dependencies:
2266      '@apify/log': 2.5.13
2267      '@crawlee/types': 3.12.2
2268      '@sapphire/async-queue': 1.5.5
2269      '@sapphire/shapeshift': 3.9.7
2270      content-type: 1.0.5
2271      fs-extra: 11.3.0
2272      json5: 2.2.3
2273      mime-types: 2.1.35
2274      proper-lockfile: 4.1.2
2275      tslib: 2.8.1
2276
2277  '@crawlee/playwright@3.12.2':
2278    dependencies:
2279      '@apify/datastructures': 2.0.2
2280      '@apify/log': 2.5.13
2281      '@apify/timeout': 0.3.1
2282      '@crawlee/browser': 3.12.2
2283      '@crawlee/browser-pool': 3.12.2
2284      '@crawlee/core': 3.12.2
2285      '@crawlee/types': 3.12.2
2286      '@crawlee/utils': 3.12.2
2287      cheerio: 1.0.0-rc.12
2288      idcac-playwright: 0.1.3
2289      jquery: 3.7.1
2290      lodash.isequal: 4.5.0
2291      ml-logistic-regression: 2.0.0
2292      ml-matrix: 6.12.0
2293      ow: 0.28.2
2294      string-comparison: 1.3.0
2295      tslib: 2.8.1
2296    transitivePeerDependencies:
2297      - puppeteer
2298      - supports-color
2299
2300  '@crawlee/puppeteer@3.12.2':
2301    dependencies:
2302      '@apify/datastructures': 2.0.2
2303      '@apify/log': 2.5.13
2304      '@crawlee/browser': 3.12.2
2305      '@crawlee/browser-pool': 3.12.2
2306      '@crawlee/types': 3.12.2
2307      '@crawlee/utils': 3.12.2
2308      cheerio: 1.0.0-rc.12
2309      devtools-protocol: 0.0.1423531
2310      idcac-playwright: 0.1.3
2311      jquery: 3.7.1
2312      ow: 0.28.2
2313      tslib: 2.8.1
2314    transitivePeerDependencies:
2315      - playwright
2316      - supports-color
2317
2318  '@crawlee/templates@3.12.2':
2319    dependencies:
2320      ansi-colors: 4.1.3
2321      inquirer: 9.3.7
2322      tslib: 2.8.1
2323      yargonaut: 1.1.4
2324      yargs: 17.7.2
2325
2326  '@crawlee/types@3.12.2':
2327    dependencies:
2328      tslib: 2.8.1
2329
2330  '@crawlee/utils@3.12.2':
2331    dependencies:
2332      '@apify/log': 2.5.13
2333      '@apify/ps-tree': 1.2.0
2334      '@crawlee/types': 3.12.2
2335      '@types/sax': 1.2.7
2336      cheerio: 1.0.0-rc.12
2337      file-type: 20.1.0
2338      got-scraping: 4.1.1
2339      ow: 0.28.2
2340      robots-parser: 3.0.1
2341      sax: 1.4.1
2342      tslib: 2.8.1
2343      whatwg-mimetype: 4.0.0
2344    transitivePeerDependencies:
2345      - supports-color
2346
2347  '@csstools/color-helpers@5.0.1': {}
2348
2349  '@csstools/css-calc@2.1.1(@csstools/css-parser-algorithms@3.0.4(@csstools/css-tokenizer@3.0.3))(@csstools/css-tokenizer@3.0.3)':
2350    dependencies:
2351      '@csstools/css-parser-algorithms': 3.0.4(@csstools/css-tokenizer@3.0.3)
2352      '@csstools/css-tokenizer': 3.0.3
2353
2354  '@csstools/css-color-parser@3.0.7(@csstools/css-parser-algorithms@3.0.4(@csstools/css-tokenizer@3.0.3))(@csstools/css-tokenizer@3.0.3)':
2355    dependencies:
2356      '@csstools/color-helpers': 5.0.1
2357      '@csstools/css-calc': 2.1.1(@csstools/css-parser-algorithms@3.0.4(@csstools/css-tokenizer@3.0.3))(@csstools/css-tokenizer@3.0.3)
2358      '@csstools/css-parser-algorithms': 3.0.4(@csstools/css-tokenizer@3.0.3)
2359      '@csstools/css-tokenizer': 3.0.3
2360
2361  '@csstools/css-parser-algorithms@3.0.4(@csstools/css-tokenizer@3.0.3)':
2362    dependencies:
2363      '@csstools/css-tokenizer': 3.0.3
2364
2365  '@csstools/css-tokenizer@3.0.3': {}
2366
2367  '@eslint-community/eslint-utils@4.4.1(eslint@9.21.0)':
2368    dependencies:
2369      eslint: 9.21.0
2370      eslint-visitor-keys: 3.4.3
2371
2372  '@eslint-community/regexpp@4.12.1': {}
2373
2374  '@eslint/config-array@0.19.2':
2375    dependencies:
2376      '@eslint/object-schema': 2.1.6
2377      debug: 4.4.0
2378      minimatch: 3.1.2
2379    transitivePeerDependencies:
2380      - supports-color
2381
2382  '@eslint/core@0.12.0':
2383    dependencies:
2384      '@types/json-schema': 7.0.15
2385
2386  '@eslint/eslintrc@3.3.0':
2387    dependencies:
2388      ajv: 6.12.6
2389      debug: 4.4.0
2390      espree: 10.3.0
2391      globals: 14.0.0
2392      ignore: 5.3.2
2393      import-fresh: 3.3.1
2394      js-yaml: 4.1.0
2395      minimatch: 3.1.2
2396      strip-json-comments: 3.1.1
2397    transitivePeerDependencies:
2398      - supports-color
2399
2400  '@eslint/js@9.21.0': {}
2401
2402  '@eslint/object-schema@2.1.6': {}
2403
2404  '@eslint/plugin-kit@0.2.7':
2405    dependencies:
2406      '@eslint/core': 0.12.0
2407      levn: 0.4.1
2408
2409  '@humanfs/core@0.19.1': {}
2410
2411  '@humanfs/node@0.16.6':
2412    dependencies:
2413      '@humanfs/core': 0.19.1
2414      '@humanwhocodes/retry': 0.3.1
2415
2416  '@humanwhocodes/module-importer@1.0.1': {}
2417
2418  '@humanwhocodes/retry@0.3.1': {}
2419
2420  '@humanwhocodes/retry@0.4.2': {}
2421
2422  '@inquirer/figures@1.0.10': {}
2423
2424  '@rtsao/scc@1.1.0': {}
2425
2426  '@sapphire/async-queue@1.5.5': {}
2427
2428  '@sapphire/shapeshift@3.9.7':
2429    dependencies:
2430      fast-deep-equal: 3.1.3
2431      lodash: 4.17.21
2432
2433  '@sec-ant/readable-stream@0.4.1': {}
2434
2435  '@sindresorhus/is@4.6.0': {}
2436
2437  '@sindresorhus/is@5.6.0': {}
2438
2439  '@sindresorhus/is@7.0.1': {}
2440
2441  '@szmarczak/http-timer@5.0.1':
2442    dependencies:
2443      defer-to-connect: 2.0.1
2444
2445  '@tokenizer/inflate@0.2.6':
2446    dependencies:
2447      debug: 4.4.0
2448      fflate: 0.8.2
2449      token-types: 6.0.0
2450    transitivePeerDependencies:
2451      - supports-color
2452
2453  '@tokenizer/token@0.3.0': {}
2454
2455  '@types/content-type@1.1.8': {}
2456
2457  '@types/estree@1.0.6': {}
2458
2459  '@types/http-cache-semantics@4.0.4': {}
2460
2461  '@types/jsdom@21.1.7':
2462    dependencies:
2463      '@types/node': 22.13.5
2464      '@types/tough-cookie': 4.0.5
2465      parse5: 7.2.1
2466
2467  '@types/json-schema@7.0.15': {}
2468
2469  '@types/json5@0.0.29': {}
2470
2471  '@types/node@22.13.5':
2472    dependencies:
2473      undici-types: 6.20.0
2474
2475  '@types/sax@1.2.7':
2476    dependencies:
2477      '@types/node': 22.13.5
2478
2479  '@types/tough-cookie@4.0.5': {}
2480
2481  '@vladfrangu/async_event_emitter@2.4.6': {}
2482
2483  acorn-jsx@5.3.2(acorn@8.14.0):
2484    dependencies:
2485      acorn: 8.14.0
2486
2487  acorn@8.14.0: {}
2488
2489  adm-zip@0.5.16: {}
2490
2491  agent-base@7.1.3: {}
2492
2493  agentkeepalive@4.6.0:
2494    dependencies:
2495      humanize-ms: 1.2.1
2496
2497  ajv@6.12.6:
2498    dependencies:
2499      fast-deep-equal: 3.1.3
2500      fast-json-stable-stringify: 2.1.0
2501      json-schema-traverse: 0.4.1
2502      uri-js: 4.4.1
2503
2504  ansi-colors@4.1.3: {}
2505
2506  ansi-escapes@4.3.2:
2507    dependencies:
2508      type-fest: 0.21.3
2509
2510  ansi-regex@2.1.1: {}
2511
2512  ansi-regex@5.0.1: {}
2513
2514  ansi-styles@2.2.1: {}
2515
2516  ansi-styles@4.3.0:
2517    dependencies:
2518      color-convert: 2.0.1
2519
2520  apify-client@2.12.0:
2521    dependencies:
2522      '@apify/consts': 2.37.0
2523      '@apify/log': 2.5.13
2524      '@crawlee/types': 3.12.2
2525      agentkeepalive: 4.6.0
2526      async-retry: 1.3.3
2527      axios: 1.7.9
2528      content-type: 1.0.5
2529      ow: 0.28.2
2530      tslib: 2.8.1
2531      type-fest: 4.35.0
2532    transitivePeerDependencies:
2533      - debug
2534
2535  apify@3.3.2:
2536    dependencies:
2537      '@apify/consts': 2.37.0
2538      '@apify/input_secrets': 1.1.65
2539      '@apify/log': 2.5.13
2540      '@apify/timeout': 0.3.1
2541      '@apify/utilities': 2.13.1
2542      '@crawlee/core': 3.12.2
2543      '@crawlee/types': 3.12.2
2544      '@crawlee/utils': 3.12.2
2545      apify-client: 2.12.0
2546      fs-extra: 11.3.0
2547      ow: 0.28.2
2548      semver: 7.7.1
2549      tslib: 2.8.1
2550      ws: 8.18.1
2551    transitivePeerDependencies:
2552      - bufferutil
2553      - debug
2554      - supports-color
2555      - utf-8-validate
2556
2557  argparse@2.0.1: {}
2558
2559  aria-query@5.3.2: {}
2560
2561  array-buffer-byte-length@1.0.2:
2562    dependencies:
2563      call-bound: 1.0.3
2564      is-array-buffer: 3.0.5
2565
2566  array-includes@3.1.8:
2567    dependencies:
2568      call-bind: 1.0.8
2569      define-properties: 1.2.1
2570      es-abstract: 1.23.9
2571      es-object-atoms: 1.1.1
2572      get-intrinsic: 1.3.0
2573      is-string: 1.1.1
2574
2575  array.prototype.findlast@1.2.5:
2576    dependencies:
2577      call-bind: 1.0.8
2578      define-properties: 1.2.1
2579      es-abstract: 1.23.9
2580      es-errors: 1.3.0
2581      es-object-atoms: 1.1.1
2582      es-shim-unscopables: 1.1.0
2583
2584  array.prototype.findlastindex@1.2.5:
2585    dependencies:
2586      call-bind: 1.0.8
2587      define-properties: 1.2.1
2588      es-abstract: 1.23.9
2589      es-errors: 1.3.0
2590      es-object-atoms: 1.1.1
2591      es-shim-unscopables: 1.1.0
2592
2593  array.prototype.flat@1.3.3:
2594    dependencies:
2595      call-bind: 1.0.8
2596      define-properties: 1.2.1
2597      es-abstract: 1.23.9
2598      es-shim-unscopables: 1.1.0
2599
2600  array.prototype.flatmap@1.3.3:
2601    dependencies:
2602      call-bind: 1.0.8
2603      define-properties: 1.2.1
2604      es-abstract: 1.23.9
2605      es-shim-unscopables: 1.1.0
2606
2607  array.prototype.tosorted@1.1.4:
2608    dependencies:
2609      call-bind: 1.0.8
2610      define-properties: 1.2.1
2611      es-abstract: 1.23.9
2612      es-errors: 1.3.0
2613      es-shim-unscopables: 1.1.0
2614
2615  arraybuffer.prototype.slice@1.0.4:
2616    dependencies:
2617      array-buffer-byte-length: 1.0.2
2618      call-bind: 1.0.8
2619      define-properties: 1.2.1
2620      es-abstract: 1.23.9
2621      es-errors: 1.3.0
2622      get-intrinsic: 1.3.0
2623      is-array-buffer: 3.0.5
2624
2625  ast-types-flow@0.0.8: {}
2626
2627  async-function@1.0.0: {}
2628
2629  async-retry@1.3.3:
2630    dependencies:
2631      retry: 0.13.1
2632
2633  asynckit@0.4.0: {}
2634
2635  available-typed-arrays@1.0.7:
2636    dependencies:
2637      possible-typed-array-names: 1.1.0
2638
2639  axe-core@4.10.2: {}
2640
2641  axios@1.7.9:
2642    dependencies:
2643      follow-redirects: 1.15.9
2644      form-data: 4.0.2
2645      proxy-from-env: 1.1.0
2646    transitivePeerDependencies:
2647      - debug
2648
2649  axobject-query@4.1.0: {}
2650
2651  balanced-match@1.0.2: {}
2652
2653  base64-js@1.5.1: {}
2654
2655  bl@4.1.0:
2656    dependencies:
2657      buffer: 5.7.1
2658      inherits: 2.0.4
2659      readable-stream: 3.6.2
2660
2661  boolbase@1.0.0: {}
2662
2663  brace-expansion@1.1.11:
2664    dependencies:
2665      balanced-match: 1.0.2
2666      concat-map: 0.0.1
2667
2668  brace-expansion@2.0.1:
2669    dependencies:
2670      balanced-match: 1.0.2
2671
2672  browserslist@4.24.4:
2673    dependencies:
2674      caniuse-lite: 1.0.30001700
2675      electron-to-chromium: 1.5.103
2676      node-releases: 2.0.19
2677      update-browserslist-db: 1.1.2(browserslist@4.24.4)
2678
2679  buffer@5.7.1:
2680    dependencies:
2681      base64-js: 1.5.1
2682      ieee754: 1.2.1
2683
2684  cacheable-lookup@7.0.0: {}
2685
2686  cacheable-request@12.0.1:
2687    dependencies:
2688      '@types/http-cache-semantics': 4.0.4
2689      get-stream: 9.0.1
2690      http-cache-semantics: 4.1.1
2691      keyv: 4.5.4
2692      mimic-response: 4.0.0
2693      normalize-url: 8.0.1
2694      responselike: 3.0.0
2695
2696  call-bind-apply-helpers@1.0.2:
2697    dependencies:
2698      es-errors: 1.3.0
2699      function-bind: 1.1.2
2700
2701  call-bind@1.0.8:
2702    dependencies:
2703      call-bind-apply-helpers: 1.0.2
2704      es-define-property: 1.0.1
2705      get-intrinsic: 1.3.0
2706      set-function-length: 1.2.2
2707
2708  call-bound@1.0.3:
2709    dependencies:
2710      call-bind-apply-helpers: 1.0.2
2711      get-intrinsic: 1.3.0
2712
2713  callsites@3.1.0: {}
2714
2715  callsites@4.2.0: {}
2716
2717  caniuse-lite@1.0.30001700: {}
2718
2719  chalk@1.1.3:
2720    dependencies:
2721      ansi-styles: 2.2.1
2722      escape-string-regexp: 1.0.5
2723      has-ansi: 2.0.0
2724      strip-ansi: 3.0.1
2725      supports-color: 2.0.0
2726
2727  chalk@4.1.2:
2728    dependencies:
2729      ansi-styles: 4.3.0
2730      supports-color: 7.2.0
2731
2732  chardet@0.7.0: {}
2733
2734  cheerio-select@2.1.0:
2735    dependencies:
2736      boolbase: 1.0.0
2737      css-select: 5.1.0
2738      css-what: 6.1.0
2739      domelementtype: 2.3.0
2740      domhandler: 5.0.3
2741      domutils: 3.2.2
2742
2743  cheerio@1.0.0-rc.12:
2744    dependencies:
2745      cheerio-select: 2.1.0
2746      dom-serializer: 2.0.0
2747      domhandler: 5.0.3
2748      domutils: 3.2.2
2749      htmlparser2: 8.0.2
2750      parse5: 7.2.1
2751      parse5-htmlparser2-tree-adapter: 7.1.0
2752
2753  cli-cursor@3.1.0:
2754    dependencies:
2755      restore-cursor: 3.1.0
2756
2757  cli-spinners@2.9.2: {}
2758
2759  cli-width@3.0.0: {}
2760
2761  cli-width@4.1.0: {}
2762
2763  cliui@8.0.1:
2764    dependencies:
2765      string-width: 4.2.3
2766      strip-ansi: 6.0.1
2767      wrap-ansi: 7.0.0
2768
2769  clone@1.0.4: {}
2770
2771  color-convert@2.0.1:
2772    dependencies:
2773      color-name: 1.1.4
2774
2775  color-name@1.1.4: {}
2776
2777  combined-stream@1.0.8:
2778    dependencies:
2779      delayed-stream: 1.0.0
2780
2781  concat-map@0.0.1: {}
2782
2783  confusing-browser-globals@1.0.11: {}
2784
2785  content-type@1.0.5: {}
2786
2787  crawlee@3.12.2:
2788    dependencies:
2789      '@crawlee/basic': 3.12.2
2790      '@crawlee/browser': 3.12.2
2791      '@crawlee/browser-pool': 3.12.2
2792      '@crawlee/cheerio': 3.12.2
2793      '@crawlee/cli': 3.12.2
2794      '@crawlee/core': 3.12.2
2795      '@crawlee/http': 3.12.2
2796      '@crawlee/jsdom': 3.12.2
2797      '@crawlee/linkedom': 3.12.2
2798      '@crawlee/playwright': 3.12.2
2799      '@crawlee/puppeteer': 3.12.2
2800      '@crawlee/utils': 3.12.2
2801      import-local: 3.2.0
2802      tslib: 2.8.1
2803    transitivePeerDependencies:
2804      - bufferutil
2805      - canvas
2806      - supports-color
2807      - utf-8-validate
2808
2809  cross-spawn@7.0.6:
2810    dependencies:
2811      path-key: 3.1.1
2812      shebang-command: 2.0.0
2813      which: 2.0.2
2814
2815  css-select@5.1.0:
2816    dependencies:
2817      boolbase: 1.0.0
2818      css-what: 6.1.0
2819      domhandler: 5.0.3
2820      domutils: 3.2.2
2821      nth-check: 2.1.1
2822
2823  css-what@6.1.0: {}
2824
2825  cssom@0.5.0: {}
2826
2827  cssstyle@4.2.1:
2828    dependencies:
2829      '@asamuzakjp/css-color': 2.8.3
2830      rrweb-cssom: 0.8.0
2831
2832  csv-stringify@6.5.2: {}
2833
2834  damerau-levenshtein@1.0.8: {}
2835
2836  data-urls@5.0.0:
2837    dependencies:
2838      whatwg-mimetype: 4.0.0
2839      whatwg-url: 14.1.1
2840
2841  data-view-buffer@1.0.2:
2842    dependencies:
2843      call-bound: 1.0.3
2844      es-errors: 1.3.0
2845      is-data-view: 1.0.2
2846
2847  data-view-byte-length@1.0.2:
2848    dependencies:
2849      call-bound: 1.0.3
2850      es-errors: 1.3.0
2851      is-data-view: 1.0.2
2852
2853  data-view-byte-offset@1.0.1:
2854    dependencies:
2855      call-bound: 1.0.3
2856      es-errors: 1.3.0
2857      is-data-view: 1.0.2
2858
2859  debug@3.2.7:
2860    dependencies:
2861      ms: 2.1.3
2862
2863  debug@4.4.0:
2864    dependencies:
2865      ms: 2.1.3
2866
2867  decimal.js@10.5.0: {}
2868
2869  decompress-response@6.0.0:
2870    dependencies:
2871      mimic-response: 3.1.0
2872
2873  deep-is@0.1.4: {}
2874
2875  defaults@1.0.4:
2876    dependencies:
2877      clone: 1.0.4
2878
2879  defer-to-connect@2.0.1: {}
2880
2881  define-data-property@1.1.4:
2882    dependencies:
2883      es-define-property: 1.0.1
2884      es-errors: 1.3.0
2885      gopd: 1.2.0
2886
2887  define-properties@1.2.1:
2888    dependencies:
2889      define-data-property: 1.1.4
2890      has-property-descriptors: 1.0.2
2891      object-keys: 1.1.1
2892
2893  delayed-stream@1.0.0: {}
2894
2895  devtools-protocol@0.0.1423531: {}
2896
2897  doctrine@2.1.0:
2898    dependencies:
2899      esutils: 2.0.3
2900
2901  dom-serializer@2.0.0:
2902    dependencies:
2903      domelementtype: 2.3.0
2904      domhandler: 5.0.3
2905      entities: 4.5.0
2906
2907  domelementtype@2.3.0: {}
2908
2909  domhandler@5.0.3:
2910    dependencies:
2911      domelementtype: 2.3.0
2912
2913  domutils@3.2.2:
2914    dependencies:
2915      dom-serializer: 2.0.0
2916      domelementtype: 2.3.0
2917      domhandler: 5.0.3
2918
2919  dot-prop@6.0.1:
2920    dependencies:
2921      is-obj: 2.0.0
2922
2923  dot-prop@7.2.0:
2924    dependencies:
2925      type-fest: 2.19.0
2926
2927  dunder-proto@1.0.1:
2928    dependencies:
2929      call-bind-apply-helpers: 1.0.2
2930      es-errors: 1.3.0
2931      gopd: 1.2.0
2932
2933  duplexer@0.1.2: {}
2934
2935  electron-to-chromium@1.5.103: {}
2936
2937  emoji-regex@8.0.0: {}
2938
2939  emoji-regex@9.2.2: {}
2940
2941  entities@4.5.0: {}
2942
2943  entities@6.0.0: {}
2944
2945  es-abstract@1.23.9:
2946    dependencies:
2947      array-buffer-byte-length: 1.0.2
2948      arraybuffer.prototype.slice: 1.0.4
2949      available-typed-arrays: 1.0.7
2950      call-bind: 1.0.8
2951      call-bound: 1.0.3
2952      data-view-buffer: 1.0.2
2953      data-view-byte-length: 1.0.2
2954      data-view-byte-offset: 1.0.1
2955      es-define-property: 1.0.1
2956      es-errors: 1.3.0
2957      es-object-atoms: 1.1.1
2958      es-set-tostringtag: 2.1.0
2959      es-to-primitive: 1.3.0
2960      function.prototype.name: 1.1.8
2961      get-intrinsic: 1.3.0
2962      get-proto: 1.0.1
2963      get-symbol-description: 1.1.0
2964      globalthis: 1.0.4
2965      gopd: 1.2.0
2966      has-property-descriptors: 1.0.2
2967      has-proto: 1.2.0
2968      has-symbols: 1.1.0
2969      hasown: 2.0.2
2970      internal-slot: 1.1.0
2971      is-array-buffer: 3.0.5
2972      is-callable: 1.2.7
2973      is-data-view: 1.0.2
2974      is-regex: 1.2.1
2975      is-shared-array-buffer: 1.0.4
2976      is-string: 1.1.1
2977      is-typed-array: 1.1.15
2978      is-weakref: 1.1.1
2979      math-intrinsics: 1.1.0
2980      object-inspect: 1.13.4
2981      object-keys: 1.1.1
2982      object.assign: 4.1.7
2983      own-keys: 1.0.1
2984      regexp.prototype.flags: 1.5.4
2985      safe-array-concat: 1.1.3
2986      safe-push-apply: 1.0.0
2987      safe-regex-test: 1.1.0
2988      set-proto: 1.0.0
2989      string.prototype.trim: 1.2.10
2990      string.prototype.trimend: 1.0.9
2991      string.prototype.trimstart: 1.0.8
2992      typed-array-buffer: 1.0.3
2993      typed-array-byte-length: 1.0.3
2994      typed-array-byte-offset: 1.0.4
2995      typed-array-length: 1.0.7
2996      unbox-primitive: 1.1.0
2997      which-typed-array: 1.1.18
2998
2999  es-define-property@1.0.1: {}
3000
3001  es-errors@1.3.0: {}
3002
3003  es-iterator-helpers@1.2.1:
3004    dependencies:
3005      call-bind: 1.0.8
3006      call-bound: 1.0.3
3007      define-properties: 1.2.1
3008      es-abstract: 1.23.9
3009      es-errors: 1.3.0
3010      es-set-tostringtag: 2.1.0
3011      function-bind: 1.1.2
3012      get-intrinsic: 1.3.0
3013      globalthis: 1.0.4
3014      gopd: 1.2.0
3015      has-property-descriptors: 1.0.2
3016      has-proto: 1.2.0
3017      has-symbols: 1.1.0
3018      internal-slot: 1.1.0
3019      iterator.prototype: 1.1.5
3020      safe-array-concat: 1.1.3
3021
3022  es-object-atoms@1.1.1:
3023    dependencies:
3024      es-errors: 1.3.0
3025
3026  es-set-tostringtag@2.1.0:
3027    dependencies:
3028      es-errors: 1.3.0
3029      get-intrinsic: 1.3.0
3030      has-tostringtag: 1.0.2
3031      hasown: 2.0.2
3032
3033  es-shim-unscopables@1.1.0:
3034    dependencies:
3035      hasown: 2.0.2
3036
3037  es-to-primitive@1.3.0:
3038    dependencies:
3039      is-callable: 1.2.7
3040      is-date-object: 1.1.0
3041      is-symbol: 1.1.1
3042
3043  escalade@3.2.0: {}
3044
3045  escape-string-regexp@1.0.5: {}
3046
3047  escape-string-regexp@4.0.0: {}
3048
3049  eslint-config-airbnb-base@15.0.0(eslint-plugin-import@2.31.0(eslint@9.21.0))(eslint@9.21.0):
3050    dependencies:
3051      confusing-browser-globals: 1.0.11
3052      eslint: 9.21.0
3053      eslint-plugin-import: 2.31.0(eslint-import-resolver-typescript@2.7.1)(eslint@9.21.0)
3054      object.assign: 4.1.7
3055      object.entries: 1.1.8
3056      semver: 6.3.1
3057
3058  eslint-config-airbnb@19.0.4(eslint-plugin-import@2.31.0(eslint@9.21.0))(eslint-plugin-jsx-a11y@6.10.2(eslint@9.21.0))(eslint-plugin-react-hooks@4.6.2(eslint@9.21.0))(eslint-plugin-react@7.37.4(eslint@9.21.0))(eslint@9.21.0):
3059    dependencies:
3060      eslint: 9.21.0
3061      eslint-config-airbnb-base: 15.0.0(eslint-plugin-import@2.31.0(eslint@9.21.0))(eslint@9.21.0)
3062      eslint-plugin-import: 2.31.0(eslint-import-resolver-typescript@2.7.1)(eslint@9.21.0)
3063      eslint-plugin-jsx-a11y: 6.10.2(eslint@9.21.0)
3064      eslint-plugin-react: 7.37.4(eslint@9.21.0)
3065      eslint-plugin-react-hooks: 4.6.2(eslint@9.21.0)
3066      object.assign: 4.1.7
3067      object.entries: 1.1.8
3068
3069  eslint-import-resolver-node@0.3.9:
3070    dependencies:
3071      debug: 3.2.7
3072      is-core-module: 2.16.1
3073      resolve: 1.22.10
3074    transitivePeerDependencies:
3075      - supports-color
3076
3077  eslint-import-resolver-typescript@2.7.1(eslint-plugin-import@2.31.0(eslint@9.21.0))(eslint@9.21.0):
3078    dependencies:
3079      debug: 4.4.0
3080      eslint: 9.21.0
3081      eslint-plugin-import: 2.31.0(eslint-import-resolver-typescript@2.7.1)(eslint@9.21.0)
3082      glob: 7.2.3
3083      is-glob: 4.0.3
3084      resolve: 1.22.10
3085      tsconfig-paths: 3.15.0
3086    transitivePeerDependencies:
3087      - supports-color
3088
3089  eslint-module-utils@2.12.0(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@2.7.1(eslint-plugin-import@2.31.0(eslint@9.21.0))(eslint@9.21.0))(eslint@9.21.0):
3090    dependencies:
3091      debug: 3.2.7
3092    optionalDependencies:
3093      eslint: 9.21.0
3094      eslint-import-resolver-node: 0.3.9
3095      eslint-import-resolver-typescript: 2.7.1(eslint-plugin-import@2.31.0(eslint@9.21.0))(eslint@9.21.0)
3096    transitivePeerDependencies:
3097      - supports-color
3098
3099  eslint-plugin-import@2.31.0(eslint-import-resolver-typescript@2.7.1)(eslint@9.21.0):
3100    dependencies:
3101      '@rtsao/scc': 1.1.0
3102      array-includes: 3.1.8
3103      array.prototype.findlastindex: 1.2.5
3104      array.prototype.flat: 1.3.3
3105      array.prototype.flatmap: 1.3.3
3106      debug: 3.2.7
3107      doctrine: 2.1.0
3108      eslint: 9.21.0
3109      eslint-import-resolver-node: 0.3.9
3110      eslint-module-utils: 2.12.0(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@2.7.1(eslint-plugin-import@2.31.0(eslint@9.21.0))(eslint@9.21.0))(eslint@9.21.0)
3111      hasown: 2.0.2
3112      is-core-module: 2.16.1
3113      is-glob: 4.0.3
3114      minimatch: 3.1.2
3115      object.fromentries: 2.0.8
3116      object.groupby: 1.0.3
3117      object.values: 1.2.1
3118      semver: 6.3.1
3119      string.prototype.trimend: 1.0.9
3120      tsconfig-paths: 3.15.0
3121    transitivePeerDependencies:
3122      - eslint-import-resolver-typescript
3123      - eslint-import-resolver-webpack
3124      - supports-color
3125
3126  eslint-plugin-jsx-a11y@6.10.2(eslint@9.21.0):
3127    dependencies:
3128      aria-query: 5.3.2
3129      array-includes: 3.1.8
3130      array.prototype.flatmap: 1.3.3
3131      ast-types-flow: 0.0.8
3132      axe-core: 4.10.2
3133      axobject-query: 4.1.0
3134      damerau-levenshtein: 1.0.8
3135      emoji-regex: 9.2.2
3136      eslint: 9.21.0
3137      hasown: 2.0.2
3138      jsx-ast-utils: 3.3.5
3139      language-tags: 1.0.9
3140      minimatch: 3.1.2
3141      object.fromentries: 2.0.8
3142      safe-regex-test: 1.1.0
3143      string.prototype.includes: 2.0.1
3144
3145  eslint-plugin-react-hooks@4.6.2(eslint@9.21.0):
3146    dependencies:
3147      eslint: 9.21.0
3148
3149  eslint-plugin-react@7.37.4(eslint@9.21.0):
3150    dependencies:
3151      array-includes: 3.1.8
3152      array.prototype.findlast: 1.2.5
3153      array.prototype.flatmap: 1.3.3
3154      array.prototype.tosorted: 1.1.4
3155      doctrine: 2.1.0
3156      es-iterator-helpers: 1.2.1
3157      eslint: 9.21.0
3158      estraverse: 5.3.0
3159      hasown: 2.0.2
3160      jsx-ast-utils: 3.3.5
3161      minimatch: 3.1.2
3162      object.entries: 1.1.8
3163      object.fromentries: 2.0.8
3164      object.values: 1.2.1
3165      prop-types: 15.8.1
3166      resolve: 2.0.0-next.5
3167      semver: 6.3.1
3168      string.prototype.matchall: 4.0.12
3169      string.prototype.repeat: 1.0.0
3170
3171  eslint-scope@8.2.0:
3172    dependencies:
3173      esrecurse: 4.3.0
3174      estraverse: 5.3.0
3175
3176  eslint-visitor-keys@3.4.3: {}
3177
3178  eslint-visitor-keys@4.2.0: {}
3179
3180  eslint@9.21.0:
3181    dependencies:
3182      '@eslint-community/eslint-utils': 4.4.1(eslint@9.21.0)
3183      '@eslint-community/regexpp': 4.12.1
3184      '@eslint/config-array': 0.19.2
3185      '@eslint/core': 0.12.0
3186      '@eslint/eslintrc': 3.3.0
3187      '@eslint/js': 9.21.0
3188      '@eslint/plugin-kit': 0.2.7
3189      '@humanfs/node': 0.16.6
3190      '@humanwhocodes/module-importer': 1.0.1
3191      '@humanwhocodes/retry': 0.4.2
3192      '@types/estree': 1.0.6
3193      '@types/json-schema': 7.0.15
3194      ajv: 6.12.6
3195      chalk: 4.1.2
3196      cross-spawn: 7.0.6
3197      debug: 4.4.0
3198      escape-string-regexp: 4.0.0
3199      eslint-scope: 8.2.0
3200      eslint-visitor-keys: 4.2.0
3201      espree: 10.3.0
3202      esquery: 1.6.0
3203      esutils: 2.0.3
3204      fast-deep-equal: 3.1.3
3205      file-entry-cache: 8.0.0
3206      find-up: 5.0.0
3207      glob-parent: 6.0.2
3208      ignore: 5.3.2
3209      imurmurhash: 0.1.4
3210      is-glob: 4.0.3
3211      json-stable-stringify-without-jsonify: 1.0.1
3212      lodash.merge: 4.6.2
3213      minimatch: 3.1.2
3214      natural-compare: 1.4.0
3215      optionator: 0.9.4
3216    transitivePeerDependencies:
3217      - supports-color
3218
3219  espree@10.3.0:
3220    dependencies:
3221      acorn: 8.14.0
3222      acorn-jsx: 5.3.2(acorn@8.14.0)
3223      eslint-visitor-keys: 4.2.0
3224
3225  esquery@1.6.0:
3226    dependencies:
3227      estraverse: 5.3.0
3228
3229  esrecurse@4.3.0:
3230    dependencies:
3231      estraverse: 5.3.0
3232
3233  estraverse@5.3.0: {}
3234
3235  esutils@2.0.3: {}
3236
3237  event-stream@3.3.4:
3238    dependencies:
3239      duplexer: 0.1.2
3240      from: 0.1.7
3241      map-stream: 0.1.0
3242      pause-stream: 0.0.11
3243      split: 0.3.3
3244      stream-combiner: 0.0.4
3245      through: 2.3.8
3246
3247  external-editor@3.1.0:
3248    dependencies:
3249      chardet: 0.7.0
3250      iconv-lite: 0.4.24
3251      tmp: 0.0.33
3252
3253  fast-deep-equal@3.1.3: {}
3254
3255  fast-json-stable-stringify@2.1.0: {}
3256
3257  fast-levenshtein@2.0.6: {}
3258
3259  fflate@0.8.2: {}
3260
3261  figlet@1.8.0: {}
3262
3263  figures@3.2.0:
3264    dependencies:
3265      escape-string-regexp: 1.0.5
3266
3267  file-entry-cache@8.0.0:
3268    dependencies:
3269      flat-cache: 4.0.1
3270
3271  file-type@20.1.0:
3272    dependencies:
3273      '@tokenizer/inflate': 0.2.6
3274      strtok3: 10.2.1
3275      token-types: 6.0.0
3276      uint8array-extras: 1.4.0
3277    transitivePeerDependencies:
3278      - supports-color
3279
3280  find-up@4.1.0:
3281    dependencies:
3282      locate-path: 5.0.0
3283      path-exists: 4.0.0
3284
3285  find-up@5.0.0:
3286    dependencies:
3287      locate-path: 6.0.0
3288      path-exists: 4.0.0
3289
3290  fingerprint-generator@2.1.62:
3291    dependencies:
3292      generative-bayesian-network: 2.1.62
3293      header-generator: 2.1.62
3294      tslib: 2.8.1
3295
3296  fingerprint-injector@2.1.62:
3297    dependencies:
3298      fingerprint-generator: 2.1.62
3299      tslib: 2.8.1
3300
3301  flat-cache@4.0.1:
3302    dependencies:
3303      flatted: 3.3.3
3304      keyv: 4.5.4
3305
3306  flatted@3.3.3: {}
3307
3308  follow-redirects@1.15.9: {}
3309
3310  for-each@0.3.5:
3311    dependencies:
3312      is-callable: 1.2.7
3313
3314  form-data-encoder@4.0.2: {}
3315
3316  form-data@4.0.2:
3317    dependencies:
3318      asynckit: 0.4.0
3319      combined-stream: 1.0.8
3320      es-set-tostringtag: 2.1.0
3321      mime-types: 2.1.35
3322
3323  from@0.1.7: {}
3324
3325  fs-extra@11.3.0:
3326    dependencies:
3327      graceful-fs: 4.2.11
3328      jsonfile: 6.1.0
3329      universalify: 2.0.1
3330
3331  fs.realpath@1.0.0: {}
3332
3333  function-bind@1.1.2: {}
3334
3335  function.prototype.name@1.1.8:
3336    dependencies:
3337      call-bind: 1.0.8
3338      call-bound: 1.0.3
3339      define-properties: 1.2.1
3340      functions-have-names: 1.2.3
3341      hasown: 2.0.2
3342      is-callable: 1.2.7
3343
3344  functions-have-names@1.2.3: {}
3345
3346  generative-bayesian-network@2.1.62:
3347    dependencies:
3348      adm-zip: 0.5.16
3349      tslib: 2.8.1
3350
3351  get-caller-file@2.0.5: {}
3352
3353  get-intrinsic@1.3.0:
3354    dependencies:
3355      call-bind-apply-helpers: 1.0.2
3356      es-define-property: 1.0.1
3357      es-errors: 1.3.0
3358      es-object-atoms: 1.1.1
3359      function-bind: 1.1.2
3360      get-proto: 1.0.1
3361      gopd: 1.2.0
3362      has-symbols: 1.1.0
3363      hasown: 2.0.2
3364      math-intrinsics: 1.1.0
3365
3366  get-proto@1.0.1:
3367    dependencies:
3368      dunder-proto: 1.0.1
3369      es-object-atoms: 1.1.1
3370
3371  get-stream@9.0.1:
3372    dependencies:
3373      '@sec-ant/readable-stream': 0.4.1
3374      is-stream: 4.0.1
3375
3376  get-symbol-description@1.1.0:
3377    dependencies:
3378      call-bound: 1.0.3
3379      es-errors: 1.3.0
3380      get-intrinsic: 1.3.0
3381
3382  glob-parent@6.0.2:
3383    dependencies:
3384      is-glob: 4.0.3
3385
3386  glob@7.2.3:
3387    dependencies:
3388      fs.realpath: 1.0.0
3389      inflight: 1.0.6
3390      inherits: 2.0.4
3391      minimatch: 3.1.2
3392      once: 1.4.0
3393      path-is-absolute: 1.0.1
3394
3395  globals@14.0.0: {}
3396
3397  globalthis@1.0.4:
3398    dependencies:
3399      define-properties: 1.2.1
3400      gopd: 1.2.0
3401
3402  gopd@1.2.0: {}
3403
3404  got-scraping@4.1.1:
3405    dependencies:
3406      got: 14.4.6
3407      header-generator: 2.1.62
3408      http2-wrapper: 2.2.1
3409      mimic-response: 4.0.0
3410      ow: 1.1.1
3411      quick-lru: 7.0.0
3412      tslib: 2.8.1
3413
3414  got@14.4.6:
3415    dependencies:
3416      '@sindresorhus/is': 7.0.1
3417      '@szmarczak/http-timer': 5.0.1
3418      cacheable-lookup: 7.0.0
3419      cacheable-request: 12.0.1
3420      decompress-response: 6.0.0
3421      form-data-encoder: 4.0.2
3422      http2-wrapper: 2.2.1
3423      lowercase-keys: 3.0.0
3424      p-cancelable: 4.0.1
3425      responselike: 3.0.0
3426      type-fest: 4.35.0
3427
3428  graceful-fs@4.2.11: {}
3429
3430  has-ansi@2.0.0:
3431    dependencies:
3432      ansi-regex: 2.1.1
3433
3434  has-bigints@1.1.0: {}
3435
3436  has-flag@4.0.0: {}
3437
3438  has-property-descriptors@1.0.2:
3439    dependencies:
3440      es-define-property: 1.0.1
3441
3442  has-proto@1.2.0:
3443    dependencies:
3444      dunder-proto: 1.0.1
3445
3446  has-symbols@1.1.0: {}
3447
3448  has-tostringtag@1.0.2:
3449    dependencies:
3450      has-symbols: 1.1.0
3451
3452  hasown@2.0.2:
3453    dependencies:
3454      function-bind: 1.1.2
3455
3456  header-generator@2.1.62:
3457    dependencies:
3458      browserslist: 4.24.4
3459      generative-bayesian-network: 2.1.62
3460      ow: 0.28.2
3461      tslib: 2.8.1
3462
3463  html-encoding-sniffer@4.0.0:
3464    dependencies:
3465      whatwg-encoding: 3.1.1
3466
3467  html-escaper@3.0.3: {}
3468
3469  htmlparser2@10.0.0:
3470    dependencies:
3471      domelementtype: 2.3.0
3472      domhandler: 5.0.3
3473      domutils: 3.2.2
3474      entities: 6.0.0
3475
3476  htmlparser2@8.0.2:
3477    dependencies:
3478      domelementtype: 2.3.0
3479      domhandler: 5.0.3
3480      domutils: 3.2.2
3481      entities: 4.5.0
3482
3483  htmlparser2@9.1.0:
3484    dependencies:
3485      domelementtype: 2.3.0
3486      domhandler: 5.0.3
3487      domutils: 3.2.2
3488      entities: 4.5.0
3489
3490  http-cache-semantics@4.1.1: {}
3491
3492  http-proxy-agent@7.0.2:
3493    dependencies:
3494      agent-base: 7.1.3
3495      debug: 4.4.0
3496    transitivePeerDependencies:
3497      - supports-color
3498
3499  http2-wrapper@2.2.1:
3500    dependencies:
3501      quick-lru: 5.1.1
3502      resolve-alpn: 1.2.1
3503
3504  https-proxy-agent@7.0.6:
3505    dependencies:
3506      agent-base: 7.1.3
3507      debug: 4.4.0
3508    transitivePeerDependencies:
3509      - supports-color
3510
3511  humanize-ms@1.2.1:
3512    dependencies:
3513      ms: 2.1.3
3514
3515  iconv-lite@0.4.24:
3516    dependencies:
3517      safer-buffer: 2.1.2
3518
3519  iconv-lite@0.6.3:
3520    dependencies:
3521      safer-buffer: 2.1.2
3522
3523  idcac-playwright@0.1.3: {}
3524
3525  ieee754@1.2.1: {}
3526
3527  ignore@5.3.2: {}
3528
3529  import-fresh@3.3.1:
3530    dependencies:
3531      parent-module: 1.0.1
3532      resolve-from: 4.0.0
3533
3534  import-local@3.2.0:
3535    dependencies:
3536      pkg-dir: 4.2.0
3537      resolve-cwd: 3.0.0
3538
3539  imurmurhash@0.1.4: {}
3540
3541  inflight@1.0.6:
3542    dependencies:
3543      once: 1.4.0
3544      wrappy: 1.0.2
3545
3546  inherits@2.0.4: {}
3547
3548  inquirer@8.2.6:
3549    dependencies:
3550      ansi-escapes: 4.3.2
3551      chalk: 4.1.2
3552      cli-cursor: 3.1.0
3553      cli-width: 3.0.0
3554      external-editor: 3.1.0
3555      figures: 3.2.0
3556      lodash: 4.17.21
3557      mute-stream: 0.0.8
3558      ora: 5.4.1
3559      run-async: 2.4.1
3560      rxjs: 7.8.2
3561      string-width: 4.2.3
3562      strip-ansi: 6.0.1
3563      through: 2.3.8
3564      wrap-ansi: 6.2.0
3565
3566  inquirer@9.3.7:
3567    dependencies:
3568      '@inquirer/figures': 1.0.10
3569      ansi-escapes: 4.3.2
3570      cli-width: 4.1.0
3571      external-editor: 3.1.0
3572      mute-stream: 1.0.0
3573      ora: 5.4.1
3574      run-async: 3.0.0
3575      rxjs: 7.8.2
3576      string-width: 4.2.3
3577      strip-ansi: 6.0.1
3578      wrap-ansi: 6.2.0
3579      yoctocolors-cjs: 2.1.2
3580
3581  internal-slot@1.1.0:
3582    dependencies:
3583      es-errors: 1.3.0
3584      hasown: 2.0.2
3585      side-channel: 1.1.0
3586
3587  ip-address@9.0.5:
3588    dependencies:
3589      jsbn: 1.1.0
3590      sprintf-js: 1.1.3
3591
3592  is-any-array@2.0.1: {}
3593
3594  is-array-buffer@3.0.5:
3595    dependencies:
3596      call-bind: 1.0.8
3597      call-bound: 1.0.3
3598      get-intrinsic: 1.3.0
3599
3600  is-async-function@2.1.1:
3601    dependencies:
3602      async-function: 1.0.0
3603      call-bound: 1.0.3
3604      get-proto: 1.0.1
3605      has-tostringtag: 1.0.2
3606      safe-regex-test: 1.1.0
3607
3608  is-bigint@1.1.0:
3609    dependencies:
3610      has-bigints: 1.1.0
3611
3612  is-boolean-object@1.2.2:
3613    dependencies:
3614      call-bound: 1.0.3
3615      has-tostringtag: 1.0.2
3616
3617  is-callable@1.2.7: {}
3618
3619  is-core-module@2.16.1:
3620    dependencies:
3621      hasown: 2.0.2
3622
3623  is-data-view@1.0.2:
3624    dependencies:
3625      call-bound: 1.0.3
3626      get-intrinsic: 1.3.0
3627      is-typed-array: 1.1.15
3628
3629  is-date-object@1.1.0:
3630    dependencies:
3631      call-bound: 1.0.3
3632      has-tostringtag: 1.0.2
3633
3634  is-extglob@2.1.1: {}
3635
3636  is-finalizationregistry@1.1.1:
3637    dependencies:
3638      call-bound: 1.0.3
3639
3640  is-fullwidth-code-point@3.0.0: {}
3641
3642  is-generator-function@1.1.0:
3643    dependencies:
3644      call-bound: 1.0.3
3645      get-proto: 1.0.1
3646      has-tostringtag: 1.0.2
3647      safe-regex-test: 1.1.0
3648
3649  is-glob@4.0.3:
3650    dependencies:
3651      is-extglob: 2.1.1
3652
3653  is-interactive@1.0.0: {}
3654
3655  is-map@2.0.3: {}
3656
3657  is-number-object@1.1.1:
3658    dependencies:
3659      call-bound: 1.0.3
3660      has-tostringtag: 1.0.2
3661
3662  is-obj@2.0.0: {}
3663
3664  is-potential-custom-element-name@1.0.1: {}
3665
3666  is-regex@1.2.1:
3667    dependencies:
3668      call-bound: 1.0.3
3669      gopd: 1.2.0
3670      has-tostringtag: 1.0.2
3671      hasown: 2.0.2
3672
3673  is-set@2.0.3: {}
3674
3675  is-shared-array-buffer@1.0.4:
3676    dependencies:
3677      call-bound: 1.0.3
3678
3679  is-stream@4.0.1: {}
3680
3681  is-string@1.1.1:
3682    dependencies:
3683      call-bound: 1.0.3
3684      has-tostringtag: 1.0.2
3685
3686  is-symbol@1.1.1:
3687    dependencies:
3688      call-bound: 1.0.3
3689      has-symbols: 1.1.0
3690      safe-regex-test: 1.1.0
3691
3692  is-typed-array@1.1.15:
3693    dependencies:
3694      which-typed-array: 1.1.18
3695
3696  is-unicode-supported@0.1.0: {}
3697
3698  is-weakmap@2.0.2: {}
3699
3700  is-weakref@1.1.1:
3701    dependencies:
3702      call-bound: 1.0.3
3703
3704  is-weakset@2.0.4:
3705    dependencies:
3706      call-bound: 1.0.3
3707      get-intrinsic: 1.3.0
3708
3709  isarray@2.0.5: {}
3710
3711  isexe@2.0.0: {}
3712
3713  iterator.prototype@1.1.5:
3714    dependencies:
3715      define-data-property: 1.1.4
3716      es-object-atoms: 1.1.1
3717      get-intrinsic: 1.3.0
3718      get-proto: 1.0.1
3719      has-symbols: 1.1.0
3720      set-function-name: 2.0.2
3721
3722  jquery@3.7.1: {}
3723
3724  js-tokens@4.0.0: {}
3725
3726  js-yaml@4.1.0:
3727    dependencies:
3728      argparse: 2.0.1
3729
3730  jsbn@1.1.0: {}
3731
3732  jsdom@26.0.0:
3733    dependencies:
3734      cssstyle: 4.2.1
3735      data-urls: 5.0.0
3736      decimal.js: 10.5.0
3737      form-data: 4.0.2
3738      html-encoding-sniffer: 4.0.0
3739      http-proxy-agent: 7.0.2
3740      https-proxy-agent: 7.0.6
3741      is-potential-custom-element-name: 1.0.1
3742      nwsapi: 2.2.16
3743      parse5: 7.2.1
3744      rrweb-cssom: 0.8.0
3745      saxes: 6.0.0
3746      symbol-tree: 3.2.4
3747      tough-cookie: 5.1.1
3748      w3c-xmlserializer: 5.0.0
3749      webidl-conversions: 7.0.0
3750      whatwg-encoding: 3.1.1
3751      whatwg-mimetype: 4.0.0
3752      whatwg-url: 14.1.1
3753      ws: 8.18.1
3754      xml-name-validator: 5.0.0
3755    transitivePeerDependencies:
3756      - bufferutil
3757      - supports-color
3758      - utf-8-validate
3759
3760  json-buffer@3.0.1: {}
3761
3762  json-schema-traverse@0.4.1: {}
3763
3764  json-stable-stringify-without-jsonify@1.0.1: {}
3765
3766  json5@1.0.2:
3767    dependencies:
3768      minimist: 1.2.8
3769
3770  json5@2.2.3: {}
3771
3772  jsonfile@6.1.0:
3773    dependencies:
3774      universalify: 2.0.1
3775    optionalDependencies:
3776      graceful-fs: 4.2.11
3777
3778  jsx-ast-utils@3.3.5:
3779    dependencies:
3780      array-includes: 3.1.8
3781      array.prototype.flat: 1.3.3
3782      object.assign: 4.1.7
3783      object.values: 1.2.1
3784
3785  keyv@4.5.4:
3786    dependencies:
3787      json-buffer: 3.0.1
3788
3789  language-subtag-registry@0.3.23: {}
3790
3791  language-tags@1.0.9:
3792    dependencies:
3793      language-subtag-registry: 0.3.23
3794
3795  levn@0.4.1:
3796    dependencies:
3797      prelude-ls: 1.2.1
3798      type-check: 0.4.0
3799
3800  linkedom@0.18.9:
3801    dependencies:
3802      css-select: 5.1.0
3803      cssom: 0.5.0
3804      html-escaper: 3.0.3
3805      htmlparser2: 10.0.0
3806      uhyphen: 0.2.0
3807
3808  locate-path@5.0.0:
3809    dependencies:
3810      p-locate: 4.1.0
3811
3812  locate-path@6.0.0:
3813    dependencies:
3814      p-locate: 5.0.0
3815
3816  lodash.isequal@4.5.0: {}
3817
3818  lodash.merge@4.6.2: {}
3819
3820  lodash@4.17.21: {}
3821
3822  log-symbols@4.1.0:
3823    dependencies:
3824      chalk: 4.1.2
3825      is-unicode-supported: 0.1.0
3826
3827  loose-envify@1.4.0:
3828    dependencies:
3829      js-tokens: 4.0.0
3830
3831  lowercase-keys@3.0.0: {}
3832
3833  lru-cache@10.4.3: {}
3834
3835  map-stream@0.1.0: {}
3836
3837  math-intrinsics@1.1.0: {}
3838
3839  mime-db@1.52.0: {}
3840
3841  mime-types@2.1.35:
3842    dependencies:
3843      mime-db: 1.52.0
3844
3845  mimic-fn@2.1.0: {}
3846
3847  mimic-response@3.1.0: {}
3848
3849  mimic-response@4.0.0: {}
3850
3851  minimatch@3.1.2:
3852    dependencies:
3853      brace-expansion: 1.1.11
3854
3855  minimatch@9.0.5:
3856    dependencies:
3857      brace-expansion: 2.0.1
3858
3859  minimist@1.2.8: {}
3860
3861  ml-array-max@1.2.4:
3862    dependencies:
3863      is-any-array: 2.0.1
3864
3865  ml-array-min@1.2.3:
3866    dependencies:
3867      is-any-array: 2.0.1
3868
3869  ml-array-rescale@1.3.7:
3870    dependencies:
3871      is-any-array: 2.0.1
3872      ml-array-max: 1.2.4
3873      ml-array-min: 1.2.3
3874
3875  ml-logistic-regression@2.0.0:
3876    dependencies:
3877      ml-matrix: 6.12.0
3878
3879  ml-matrix@6.12.0:
3880    dependencies:
3881      is-any-array: 2.0.1
3882      ml-array-rescale: 1.3.7
3883
3884  ms@2.1.3: {}
3885
3886  mute-stream@0.0.8: {}
3887
3888  mute-stream@1.0.0: {}
3889
3890  nanoid@3.3.8: {}
3891
3892  natural-compare@1.4.0: {}
3893
3894  node-releases@2.0.19: {}
3895
3896  normalize-url@8.0.1: {}
3897
3898  nth-check@2.1.1:
3899    dependencies:
3900      boolbase: 1.0.0
3901
3902  nwsapi@2.2.16: {}
3903
3904  object-assign@4.1.1: {}
3905
3906  object-inspect@1.13.4: {}
3907
3908  object-keys@1.1.1: {}
3909
3910  object.assign@4.1.7:
3911    dependencies:
3912      call-bind: 1.0.8
3913      call-bound: 1.0.3
3914      define-properties: 1.2.1
3915      es-object-atoms: 1.1.1
3916      has-symbols: 1.1.0
3917      object-keys: 1.1.1
3918
3919  object.entries@1.1.8:
3920    dependencies:
3921      call-bind: 1.0.8
3922      define-properties: 1.2.1
3923      es-object-atoms: 1.1.1
3924
3925  object.fromentries@2.0.8:
3926    dependencies:
3927      call-bind: 1.0.8
3928      define-properties: 1.2.1
3929      es-abstract: 1.23.9
3930      es-object-atoms: 1.1.1
3931
3932  object.groupby@1.0.3:
3933    dependencies:
3934      call-bind: 1.0.8
3935      define-properties: 1.2.1
3936      es-abstract: 1.23.9
3937
3938  object.values@1.2.1:
3939    dependencies:
3940      call-bind: 1.0.8
3941      call-bound: 1.0.3
3942      define-properties: 1.2.1
3943      es-object-atoms: 1.1.1
3944
3945  once@1.4.0:
3946    dependencies:
3947      wrappy: 1.0.2
3948
3949  onetime@5.1.2:
3950    dependencies:
3951      mimic-fn: 2.1.0
3952
3953  optionator@0.9.4:
3954    dependencies:
3955      deep-is: 0.1.4
3956      fast-levenshtein: 2.0.6
3957      levn: 0.4.1
3958      prelude-ls: 1.2.1
3959      type-check: 0.4.0
3960      word-wrap: 1.2.5
3961
3962  ora@5.4.1:
3963    dependencies:
3964      bl: 4.1.0
3965      chalk: 4.1.2
3966      cli-cursor: 3.1.0
3967      cli-spinners: 2.9.2
3968      is-interactive: 1.0.0
3969      is-unicode-supported: 0.1.0
3970      log-symbols: 4.1.0
3971      strip-ansi: 6.0.1
3972      wcwidth: 1.0.1
3973
3974  os-tmpdir@1.0.2: {}
3975
3976  ow@0.28.2:
3977    dependencies:
3978      '@sindresorhus/is': 4.6.0
3979      callsites: 3.1.0
3980      dot-prop: 6.0.1
3981      lodash.isequal: 4.5.0
3982      vali-date: 1.0.0
3983
3984  ow@1.1.1:
3985    dependencies:
3986      '@sindresorhus/is': 5.6.0
3987      callsites: 4.2.0
3988      dot-prop: 7.2.0
3989      lodash.isequal: 4.5.0
3990      vali-date: 1.0.0
3991
3992  own-keys@1.0.1:
3993    dependencies:
3994      get-intrinsic: 1.3.0
3995      object-keys: 1.1.1
3996      safe-push-apply: 1.0.0
3997
3998  p-cancelable@4.0.1: {}
3999
4000  p-limit@2.3.0:
4001    dependencies:
4002      p-try: 2.2.0
4003
4004  p-limit@3.1.0:
4005    dependencies:
4006      yocto-queue: 0.1.0
4007
4008  p-locate@4.1.0:
4009    dependencies:
4010      p-limit: 2.3.0
4011
4012  p-locate@5.0.0:
4013    dependencies:
4014      p-limit: 3.1.0
4015
4016  p-try@2.2.0: {}
4017
4018  parent-module@1.0.1:
4019    dependencies:
4020      callsites: 3.1.0
4021
4022  parent-require@1.0.0: {}
4023
4024  parse5-htmlparser2-tree-adapter@7.1.0:
4025    dependencies:
4026      domhandler: 5.0.3
4027      parse5: 7.2.1
4028
4029  parse5@7.2.1:
4030    dependencies:
4031      entities: 4.5.0
4032
4033  path-exists@4.0.0: {}
4034
4035  path-is-absolute@1.0.1: {}
4036
4037  path-key@3.1.1: {}
4038
4039  path-parse@1.0.7: {}
4040
4041  pause-stream@0.0.11:
4042    dependencies:
4043      through: 2.3.8
4044
4045  peek-readable@6.1.1: {}
4046
4047  picocolors@1.1.1: {}
4048
4049  pkg-dir@4.2.0:
4050    dependencies:
4051      find-up: 4.1.0
4052
4053  possible-typed-array-names@1.1.0: {}
4054
4055  prelude-ls@1.2.1: {}
4056
4057  prop-types@15.8.1:
4058    dependencies:
4059      loose-envify: 1.4.0
4060      object-assign: 4.1.1
4061      react-is: 16.13.1
4062
4063  proper-lockfile@4.1.2:
4064    dependencies:
4065      graceful-fs: 4.2.11
4066      retry: 0.12.0
4067      signal-exit: 3.0.7
4068
4069  proxy-chain@2.5.6:
4070    dependencies:
4071      socks: 2.8.4
4072      socks-proxy-agent: 8.0.5
4073      tslib: 2.8.1
4074    transitivePeerDependencies:
4075      - supports-color
4076
4077  proxy-from-env@1.1.0: {}
4078
4079  punycode@2.3.1: {}
4080
4081  quick-lru@5.1.1: {}
4082
4083  quick-lru@7.0.0: {}
4084
4085  react-is@16.13.1: {}
4086
4087  readable-stream@3.6.2:
4088    dependencies:
4089      inherits: 2.0.4
4090      string_decoder: 1.3.0
4091      util-deprecate: 1.0.2
4092
4093  reflect.getprototypeof@1.0.10:
4094    dependencies:
4095      call-bind: 1.0.8
4096      define-properties: 1.2.1
4097      es-abstract: 1.23.9
4098      es-errors: 1.3.0
4099      es-object-atoms: 1.1.1
4100      get-intrinsic: 1.3.0
4101      get-proto: 1.0.1
4102      which-builtin-type: 1.2.1
4103
4104  regexp.prototype.flags@1.5.4:
4105    dependencies:
4106      call-bind: 1.0.8
4107      define-properties: 1.2.1
4108      es-errors: 1.3.0
4109      get-proto: 1.0.1
4110      gopd: 1.2.0
4111      set-function-name: 2.0.2
4112
4113  require-directory@2.1.1: {}
4114
4115  resolve-alpn@1.2.1: {}
4116
4117  resolve-cwd@3.0.0:
4118    dependencies:
4119      resolve-from: 5.0.0
4120
4121  resolve-from@4.0.0: {}
4122
4123  resolve-from@5.0.0: {}
4124
4125  resolve@1.22.10:
4126    dependencies:
4127      is-core-module: 2.16.1
4128      path-parse: 1.0.7
4129      supports-preserve-symlinks-flag: 1.0.0
4130
4131  resolve@2.0.0-next.5:
4132    dependencies:
4133      is-core-module: 2.16.1
4134      path-parse: 1.0.7
4135      supports-preserve-symlinks-flag: 1.0.0
4136
4137  responselike@3.0.0:
4138    dependencies:
4139      lowercase-keys: 3.0.0
4140
4141  restore-cursor@3.1.0:
4142    dependencies:
4143      onetime: 5.1.2
4144      signal-exit: 3.0.7
4145
4146  retry@0.12.0: {}
4147
4148  retry@0.13.1: {}
4149
4150  robots-parser@3.0.1: {}
4151
4152  rrweb-cssom@0.8.0: {}
4153
4154  run-async@2.4.1: {}
4155
4156  run-async@3.0.0: {}
4157
4158  rxjs@7.8.2:
4159    dependencies:
4160      tslib: 2.8.1
4161
4162  safe-array-concat@1.1.3:
4163    dependencies:
4164      call-bind: 1.0.8
4165      call-bound: 1.0.3
4166      get-intrinsic: 1.3.0
4167      has-symbols: 1.1.0
4168      isarray: 2.0.5
4169
4170  safe-buffer@5.2.1: {}
4171
4172  safe-push-apply@1.0.0:
4173    dependencies:
4174      es-errors: 1.3.0
4175      isarray: 2.0.5
4176
4177  safe-regex-test@1.1.0:
4178    dependencies:
4179      call-bound: 1.0.3
4180      es-errors: 1.3.0
4181      is-regex: 1.2.1
4182
4183  safer-buffer@2.1.2: {}
4184
4185  sax@1.4.1: {}
4186
4187  saxes@6.0.0:
4188    dependencies:
4189      xmlchars: 2.2.0
4190
4191  semver@6.3.1: {}
4192
4193  semver@7.7.1: {}
4194
4195  set-function-length@1.2.2:
4196    dependencies:
4197      define-data-property: 1.1.4
4198      es-errors: 1.3.0
4199      function-bind: 1.1.2
4200      get-intrinsic: 1.3.0
4201      gopd: 1.2.0
4202      has-property-descriptors: 1.0.2
4203
4204  set-function-name@2.0.2:
4205    dependencies:
4206      define-data-property: 1.1.4
4207      es-errors: 1.3.0
4208      functions-have-names: 1.2.3
4209      has-property-descriptors: 1.0.2
4210
4211  set-proto@1.0.0:
4212    dependencies:
4213      dunder-proto: 1.0.1
4214      es-errors: 1.3.0
4215      es-object-atoms: 1.1.1
4216
4217  shebang-command@2.0.0:
4218    dependencies:
4219      shebang-regex: 3.0.0
4220
4221  shebang-regex@3.0.0: {}
4222
4223  side-channel-list@1.0.0:
4224    dependencies:
4225      es-errors: 1.3.0
4226      object-inspect: 1.13.4
4227
4228  side-channel-map@1.0.1:
4229    dependencies:
4230      call-bound: 1.0.3
4231      es-errors: 1.3.0
4232      get-intrinsic: 1.3.0
4233      object-inspect: 1.13.4
4234
4235  side-channel-weakmap@1.0.2:
4236    dependencies:
4237      call-bound: 1.0.3
4238      es-errors: 1.3.0
4239      get-intrinsic: 1.3.0
4240      object-inspect: 1.13.4
4241      side-channel-map: 1.0.1
4242
4243  side-channel@1.1.0:
4244    dependencies:
4245      es-errors: 1.3.0
4246      object-inspect: 1.13.4
4247      side-channel-list: 1.0.0
4248      side-channel-map: 1.0.1
4249      side-channel-weakmap: 1.0.2
4250
4251  signal-exit@3.0.7: {}
4252
4253  smart-buffer@4.2.0: {}
4254
4255  socks-proxy-agent@8.0.5:
4256    dependencies:
4257      agent-base: 7.1.3
4258      debug: 4.4.0
4259      socks: 2.8.4
4260    transitivePeerDependencies:
4261      - supports-color
4262
4263  socks@2.8.4:
4264    dependencies:
4265      ip-address: 9.0.5
4266      smart-buffer: 4.2.0
4267
4268  split@0.3.3:
4269    dependencies:
4270      through: 2.3.8
4271
4272  sprintf-js@1.1.3: {}
4273
4274  stream-chain@2.2.5: {}
4275
4276  stream-combiner@0.0.4:
4277    dependencies:
4278      duplexer: 0.1.2
4279
4280  stream-json@1.9.1:
4281    dependencies:
4282      stream-chain: 2.2.5
4283
4284  string-comparison@1.3.0: {}
4285
4286  string-width@4.2.3:
4287    dependencies:
4288      emoji-regex: 8.0.0
4289      is-fullwidth-code-point: 3.0.0
4290      strip-ansi: 6.0.1
4291
4292  string.prototype.includes@2.0.1:
4293    dependencies:
4294      call-bind: 1.0.8
4295      define-properties: 1.2.1
4296      es-abstract: 1.23.9
4297
4298  string.prototype.matchall@4.0.12:
4299    dependencies:
4300      call-bind: 1.0.8
4301      call-bound: 1.0.3
4302      define-properties: 1.2.1
4303      es-abstract: 1.23.9
4304      es-errors: 1.3.0
4305      es-object-atoms: 1.1.1
4306      get-intrinsic: 1.3.0
4307      gopd: 1.2.0
4308      has-symbols: 1.1.0
4309      internal-slot: 1.1.0
4310      regexp.prototype.flags: 1.5.4
4311      set-function-name: 2.0.2
4312      side-channel: 1.1.0
4313
4314  string.prototype.repeat@1.0.0:
4315    dependencies:
4316      define-properties: 1.2.1
4317      es-abstract: 1.23.9
4318
4319  string.prototype.trim@1.2.10:
4320    dependencies:
4321      call-bind: 1.0.8
4322      call-bound: 1.0.3
4323      define-data-property: 1.1.4
4324      define-properties: 1.2.1
4325      es-abstract: 1.23.9
4326      es-object-atoms: 1.1.1
4327      has-property-descriptors: 1.0.2
4328
4329  string.prototype.trimend@1.0.9:
4330    dependencies:
4331      call-bind: 1.0.8
4332      call-bound: 1.0.3
4333      define-properties: 1.2.1
4334      es-object-atoms: 1.1.1
4335
4336  string.prototype.trimstart@1.0.8:
4337    dependencies:
4338      call-bind: 1.0.8
4339      define-properties: 1.2.1
4340      es-object-atoms: 1.1.1
4341
4342  string_decoder@1.3.0:
4343    dependencies:
4344      safe-buffer: 5.2.1
4345
4346  strip-ansi@3.0.1:
4347    dependencies:
4348      ansi-regex: 2.1.1
4349
4350  strip-ansi@6.0.1:
4351    dependencies:
4352      ansi-regex: 5.0.1
4353
4354  strip-bom@3.0.0: {}
4355
4356  strip-json-comments@3.1.1: {}
4357
4358  strtok3@10.2.1:
4359    dependencies:
4360      '@tokenizer/token': 0.3.0
4361      peek-readable: 6.1.1
4362
4363  supports-color@2.0.0: {}
4364
4365  supports-color@7.2.0:
4366    dependencies:
4367      has-flag: 4.0.0
4368
4369  supports-preserve-symlinks-flag@1.0.0: {}
4370
4371  symbol-tree@3.2.4: {}
4372
4373  through@2.3.8: {}
4374
4375  tiny-typed-emitter@2.1.0: {}
4376
4377  tldts-core@6.1.78: {}
4378
4379  tldts@6.1.78:
4380    dependencies:
4381      tldts-core: 6.1.78
4382
4383  tmp@0.0.33:
4384    dependencies:
4385      os-tmpdir: 1.0.2
4386
4387  token-types@6.0.0:
4388    dependencies:
4389      '@tokenizer/token': 0.3.0
4390      ieee754: 1.2.1
4391
4392  tough-cookie@5.1.1:
4393    dependencies:
4394      tldts: 6.1.78
4395
4396  tr46@5.0.0:
4397    dependencies:
4398      punycode: 2.3.1
4399
4400  tsconfig-paths@3.15.0:
4401    dependencies:
4402      '@types/json5': 0.0.29
4403      json5: 1.0.2
4404      minimist: 1.2.8
4405      strip-bom: 3.0.0
4406
4407  tslib@2.8.1: {}
4408
4409  type-check@0.4.0:
4410    dependencies:
4411      prelude-ls: 1.2.1
4412
4413  type-fest@0.21.3: {}
4414
4415  type-fest@2.19.0: {}
4416
4417  type-fest@4.35.0: {}
4418
4419  typed-array-buffer@1.0.3:
4420    dependencies:
4421      call-bound: 1.0.3
4422      es-errors: 1.3.0
4423      is-typed-array: 1.1.15
4424
4425  typed-array-byte-length@1.0.3:
4426    dependencies:
4427      call-bind: 1.0.8
4428      for-each: 0.3.5
4429      gopd: 1.2.0
4430      has-proto: 1.2.0
4431      is-typed-array: 1.1.15
4432
4433  typed-array-byte-offset@1.0.4:
4434    dependencies:
4435      available-typed-arrays: 1.0.7
4436      call-bind: 1.0.8
4437      for-each: 0.3.5
4438      gopd: 1.2.0
4439      has-proto: 1.2.0
4440      is-typed-array: 1.1.15
4441      reflect.getprototypeof: 1.0.10
4442
4443  typed-array-length@1.0.7:
4444    dependencies:
4445      call-bind: 1.0.8
4446      for-each: 0.3.5
4447      gopd: 1.2.0
4448      is-typed-array: 1.1.15
4449      possible-typed-array-names: 1.1.0
4450      reflect.getprototypeof: 1.0.10
4451
4452  uhyphen@0.2.0: {}
4453
4454  uint8array-extras@1.4.0: {}
4455
4456  unbox-primitive@1.1.0:
4457    dependencies:
4458      call-bound: 1.0.3
4459      has-bigints: 1.1.0
4460      has-symbols: 1.1.0
4461      which-boxed-primitive: 1.1.1
4462
4463  undici-types@6.20.0: {}
4464
4465  universalify@2.0.1: {}
4466
4467  update-browserslist-db@1.1.2(browserslist@4.24.4):
4468    dependencies:
4469      browserslist: 4.24.4
4470      escalade: 3.2.0
4471      picocolors: 1.1.1
4472
4473  uri-js@4.4.1:
4474    dependencies:
4475      punycode: 2.3.1
4476
4477  util-deprecate@1.0.2: {}
4478
4479  vali-date@1.0.0: {}
4480
4481  w3c-xmlserializer@5.0.0:
4482    dependencies:
4483      xml-name-validator: 5.0.0
4484
4485  wcwidth@1.0.1:
4486    dependencies:
4487      defaults: 1.0.4
4488
4489  webidl-conversions@7.0.0: {}
4490
4491  whatwg-encoding@3.1.1:
4492    dependencies:
4493      iconv-lite: 0.6.3
4494
4495  whatwg-mimetype@4.0.0: {}
4496
4497  whatwg-url@14.1.1:
4498    dependencies:
4499      tr46: 5.0.0
4500      webidl-conversions: 7.0.0
4501
4502  which-boxed-primitive@1.1.1:
4503    dependencies:
4504      is-bigint: 1.1.0
4505      is-boolean-object: 1.2.2
4506      is-number-object: 1.1.1
4507      is-string: 1.1.1
4508      is-symbol: 1.1.1
4509
4510  which-builtin-type@1.2.1:
4511    dependencies:
4512      call-bound: 1.0.3
4513      function.prototype.name: 1.1.8
4514      has-tostringtag: 1.0.2
4515      is-async-function: 2.1.1
4516      is-date-object: 1.1.0
4517      is-finalizationregistry: 1.1.1
4518      is-generator-function: 1.1.0
4519      is-regex: 1.2.1
4520      is-weakref: 1.1.1
4521      isarray: 2.0.5
4522      which-boxed-primitive: 1.1.1
4523      which-collection: 1.0.2
4524      which-typed-array: 1.1.18
4525
4526  which-collection@1.0.2:
4527    dependencies:
4528      is-map: 2.0.3
4529      is-set: 2.0.3
4530      is-weakmap: 2.0.2
4531      is-weakset: 2.0.4
4532
4533  which-typed-array@1.1.18:
4534    dependencies:
4535      available-typed-arrays: 1.0.7
4536      call-bind: 1.0.8
4537      call-bound: 1.0.3
4538      for-each: 0.3.5
4539      gopd: 1.2.0
4540      has-tostringtag: 1.0.2
4541
4542  which@2.0.2:
4543    dependencies:
4544      isexe: 2.0.0
4545
4546  word-wrap@1.2.5: {}
4547
4548  wrap-ansi@6.2.0:
4549    dependencies:
4550      ansi-styles: 4.3.0
4551      string-width: 4.2.3
4552      strip-ansi: 6.0.1
4553
4554  wrap-ansi@7.0.0:
4555    dependencies:
4556      ansi-styles: 4.3.0
4557      string-width: 4.2.3
4558      strip-ansi: 6.0.1
4559
4560  wrappy@1.0.2: {}
4561
4562  ws@8.18.1: {}
4563
4564  xml-name-validator@5.0.0: {}
4565
4566  xmlchars@2.2.0: {}
4567
4568  y18n@5.0.8: {}
4569
4570  yargonaut@1.1.4:
4571    dependencies:
4572      chalk: 1.1.3
4573      figlet: 1.8.0
4574      parent-require: 1.0.0
4575
4576  yargs-parser@21.1.1: {}
4577
4578  yargs@17.7.2:
4579    dependencies:
4580      cliui: 8.0.1
4581      escalade: 3.2.0
4582      get-caller-file: 2.0.5
4583      require-directory: 2.1.1
4584      string-width: 4.2.3
4585      y18n: 5.0.8
4586      yargs-parser: 21.1.1
4587
4588  yocto-queue@0.1.0: {}
4589
4590  yoctocolors-cjs@2.1.2: {}

Pricing

Pricing model

Pay per usage

This Actor is paid per platform usage. The Actor is free to use, and you only pay for the Apify platform usage.