1
0
Fork 0

Compare commits

...

96 Commits
test ... master

Author SHA1 Message Date
Ryan Mwangi 92c6fffe64 test(calendar): run tests for different calendar instances 2024-11-26 01:50:55 +03:00
Ryan Mwangi 51c4f5c31f test(calendar): make tests for merged date based calendars pass 2024-11-25 20:59:07 +03:00
Ryan Mwangi 5ec6341680 feat(calendar): Set the summary using prefix and override logic 2024-11-25 20:57:32 +03:00
Ryan Mwangi d6022eeb62 chore: Merge branch 'master' of forge.ftt.gmbh:janek/CalMerger 2024-11-25 20:09:02 +03:00
Ryan Mwangi 5ec42d07bb Clean up the merged calendars directory before tests 2024-11-25 20:00:36 +03:00
xeruf ff595a9f70 refactor(calendarUtil): addEventsToCalendar variable naming 2024-11-25 13:41:28 +01:00
xeruf 1706b9cad3 feat(calendarUtil): simplify event property copying 2024-11-25 13:32:47 +01:00
xeruf 2bd5c967af test(calendar): remove line ending normalization 2024-11-25 13:03:51 +01:00
xeruf c8f3771717 test(calendar): use correct subdirectory to run server 2024-11-25 13:03:47 +01:00
Ryan Mwangi 5b40bf5d75 test: add test for date based events 2024-11-25 14:35:55 +03:00
Ryan Mwangi 227ec8a211 fix(calendar): handle date events appropriately 2024-11-22 17:03:07 +03:00
Ryan Mwangi 5769c9ce5b test: update imports and add ESM-compatible __dirname handling 2024-11-21 19:56:48 +03:00
Ryan Mwangi 6a428c55e0 build(tests): ensure compatibility with ESM in Jest by updating test script - Updated test script in package.json to use with Jest. 2024-11-21 19:52:19 +03:00
Ryan Mwangi 56e5f69cbb docs: add instructions on how to build and run the server with docker 2024-11-21 15:35:48 +03:00
Ryan Mwangi e45c433797 build(docker): edit CMD to reference app.js to run the application 2024-11-21 14:53:09 +03:00
Ryan Mwangi c4c723d60a build(docker): create dockerfile and .dockerignore files 2024-11-20 19:05:39 +03:00
Ryan Mwangi 29208d8b4d build(babel): install babel/core, babel/plugin-transform-modules-commonjs, and babel-jest 2024-11-20 15:21:11 +03:00
Ryan Mwangi c1c6ae47de test: create jest.config,js file 2024-11-20 15:19:13 +03:00
Ryan Mwangi 174a845c78 fix(import): enable compatibility between ES modules and CommonJS for ical.jsRenamed ical.js to ical.cjs to explicitly mark it as a CommonJS module and used `createRequire` to import it into the ES module project. This resolves module system conflicts and ensures seamless integration without modifying ical.js content. 2024-11-20 13:58:35 +03:00
Ryan Mwangi ad3ec6f7a6 build: update start script to correctly point to src/app.js 2024-11-20 13:25:05 +03:00
Ryan Mwangi fab6753c5a fix: ensure accurate TZID inclusion in DTSTART/DTEND- Preserve TZID only when explicitly included in source calendar. - Added a helper function `hasTZID` to check for explicit TZID in raw properties.- Adjusted datetime processing logic in `processDateTimeProperty` to streamline handling of various cases. 2024-11-20 01:49:40 +03:00
Ryan Mwangi 379a79617b fix(lineendings): normalize calendar line endings to CRLF 2024-11-19 19:06:22 +03:00
Ryan Mwangi d15d0be707 feat(calendar): extract and include X-WR-TIMEZONE if available 2024-11-19 19:03:06 +03:00
Ryan Mwangi 5e3e8eab5b feat(calendar): add METHOD property to calendar component if provided 2024-11-19 15:59:23 +03:00
Ryan Mwangi 2283b82ba7 test: add google-calendar.ics test calendar 2024-11-19 15:27:07 +03:00
Ryan Mwangi 2f3b791e5d test: reorder calendar components in nextcloud-minimal test calendar 2024-11-19 15:26:06 +03:00
Ryan Mwangi ac26afe778 feat(calendars): reorder calendar components 2024-11-19 15:24:16 +03:00
Ryan Mwangi e5e9dbb680 test: add test calendar for google-calendar-minimal 2024-11-19 15:22:43 +03:00
Ryan Mwangi 8881361a1f text: create and run test for google-calendar-mininal 2024-11-19 15:21:19 +03:00
Ryan Mwangi 8965eaa319 fix(line-endings): normalize line endings to LF for cross-platform consistency- Normalized line endings in generated calendar content to LF.- Updated test assertions to handle line-ending discrepancies.- Ensured compatibility across Windows and UNIX-like systems. 2024-11-19 14:17:42 +03:00
Ryan Mwangi ca52065f66 feat(calendar): include CALSCALE and SEQUENCE details 2024-11-19 14:03:42 +03:00
Ryan Mwangi 8ab685dec0 test: run tests for nextcloud minimal alone first 2024-11-19 13:35:14 +03:00
Ryan Mwangi 585b83b03c test: run tests for nextcloud minimal alone first 2024-11-19 13:34:35 +03:00
Ryan Mwangi 73e46d7f99 feat(prodid): introduce custom PRODID for merged calendars 2024-11-19 13:32:55 +03:00
Ryan Mwangi d2b0234b4b feat(location): conditionally handle VEVENT location based on override flag 2024-11-19 13:21:22 +03:00
Ryan Mwangi 2b7002303c fix(calendar): align VEVENT property order and include time zone details 2024-11-19 01:29:32 +03:00
Ryan Mwangi 6cf5b8420e feat(calendar): copy summary, timestamps, and recurrence details for VEVENTs 2024-11-18 23:49:50 +03:00
Ryan Mwangi ddcfedbbdf feat(calendar): support extracting and writing VTIMEZONE subcomponents 2024-11-18 23:40:41 +03:00
xeruf bed3e47f8e test: add nextcloud tests 2024-11-18 13:34:14 +01:00
xeruf 1f19d8cf1f build(gitattributes): ics line feeds 2024-11-18 13:01:47 +01:00
xeruf 77e6963118 test: fix calendar paths 2024-11-18 13:00:24 +01:00
Ryan Mwangi 782e62d56d refactor:remove logging for ICAL and ICAL.component as it works now 2024-11-18 14:07:22 +03:00
Ryan Mwangi 9468e58132 test: validate fetchCalendarData reads and parses files accurately 2024-11-18 14:04:51 +03:00
Ryan Mwangi d4498cd0d8 fix: export ICAL in ical.timezones.js 2024-11-18 13:55:44 +03:00
Ryan Mwangi 3edc551031 test:add logging to confirm import and structure of ICAL 2024-11-16 02:53:06 +03:00
Ryan Mwangi 859d3f3db5 fix:pull changes from contrib 2024-11-15 13:14:53 +03:00
xeruf 00e152f08c chore(package.json): remove unused libraries 2024-11-14 13:49:01 +01:00
xeruf 864a3739b3 fix: adjust ical.js to fix import
https://github.com/kewisch/ical.js/issues/329
2024-11-14 13:45:23 +01:00
Ryan Mwangi 495fb57675 refactor:create gitattributes file 2024-11-14 15:12:43 +03:00
Ryan Mwangi ff32bb430d Merge remote-tracking branch 'contrib/master' 2024-11-14 14:04:47 +03:00
Ryan Mwangi 9a0a62675c fix:add ical.js and ical.timezones.js files in lib 2024-11-14 03:02:54 +03:00
xeruf 0a863a4eb2 test(calendarUtil): failing ical test 2024-11-13 17:43:13 +01:00
Ryan Mwangi a94727df56 build:install luxon to handle timezone parsing 2024-11-13 15:45:53 +03:00
Ryan Mwangi 7e2b846029 build:install date-fns and date-fns-tz to handle timezones 2024-11-13 15:18:25 +03:00
Ryan Mwangi cbdfdf6c97 test:update test forhandling timezones 2024-11-13 15:17:17 +03:00
Ryan Mwangi 2e9de0749d fix:handle timebased events 2024-11-13 02:54:42 +03:00
Ryan Mwangi d08d87f47c test:get date based calendar test to run 2024-11-12 23:23:59 +03:00
Ryan Mwangi 0114c94caa fix: get DTSTAMP to get parsed correctly and remain the same as the original 2024-11-12 23:13:56 +03:00
Ryan Mwangi e8582cd411 test:add logging to ensure DTSTAMP is correctly added to the new event 2024-11-12 22:53:25 +03:00
Ryan Mwangi 665c134597 test(in-progress): run tests for date based calendar 2024-11-12 22:40:28 +03:00
ryanmwangi 0b0ecaa0c2 Merge pull request 'test: preserve date-based calendar' (#4) from janek/CalMerger:master into master
Reviewed-on: ryanmwangi/CalMerger#4
2024-11-12 15:38:31 +00:00
xeruf 4032e2c49d test: preserve date-based calendar 2024-11-12 16:20:53 +01:00
Ryan Mwangi 441f4d2fb3 test:set up initial structure for unit tests for fetchCalendarData function 2024-11-11 22:32:12 +03:00
Ryan Mwangi 8c0de14d5f refactor: move server.js and app.js into src directory 2024-11-11 20:14:49 +03:00
Ryan Mwangi af980956cb test:edit expected outcome file for override calendar 2024-11-11 20:01:58 +03:00
Ryan Mwangi 5d7bdb6878 refactor:streamlined server file 2024-11-11 19:57:56 +03:00
Ryan Mwangi df37f35ace refactor: separated route logic from server startup 2024-11-11 19:45:44 +03:00
Ryan Mwangi 2a0fe0812e refactor: move utility functions to calendarUtil.js 2024-11-11 19:34:53 +03:00
Ryan Mwangi 3b590958a0 test: run tests to check the produced output against the expected output 2024-11-11 14:03:37 +03:00
Ryan Mwangi 299b8c1404 refactor: serve static files from a dedicated directory 2024-11-11 13:47:18 +03:00
Ryan Mwangi be6d378890 style: refactor async functions to use traditional function declaration syntax
- Converted async arrow functions to traditional function declarations for consistency
- Updated  and  to use  syntax
- Maintained overall functionality while improving readability and alignment with preferred style
2024-11-08 15:49:33 +03:00
Ryan Mwangi 11a4efe30b fix: ensure valid date-time handling in event components
- Resolved calendar merging error where ICAL.js rejected formatted date-time strings by refactoring  and  initialization to use  for accurate timezone conversion.
- Updated  and  to receive ICAL.Time objects directly, ensuring proper format consistency and timezone handling in event components.
2024-11-08 14:23:30 +03:00
Ryan Mwangi db78a0121e refactor: Refactor addEventsToCalendar to properly handle date validation and usage
- Updated the handling of start and end dates in the addEventsToCalendar function.
- Added validation checks directly on startDate and endDate to ensure they are valid before updating event properties.
- Improved logging for better traceability of event addition and date handling.

Note: The changes are intended to enhance the handling of date properties, but further testing is required to ensure full functionality.
2024-11-08 02:21:22 +03:00
Ryan Mwangi 1bb1db7326 logging: log result.data as I debug. correct synta as wellx 2024-11-07 20:37:23 +03:00
Ryan Mwangi 73135dd9d4 refactor: use ical.js to generate calendar merged and refreshed calendars 2024-11-07 20:27:43 +03:00
Ryan Mwangi 41687e1e22 remove: tests directory 2024-11-07 20:17:37 +03:00
Ryan Mwangi 8e143df754 refactor: replace event addition with ical.js
- transition event processing from ical-generator to ical.js
- add logging for event addition to calendar component
- preserve event details (uid, summary, start, end) in new event components
2024-11-07 20:11:48 +03:00
Ryan Mwangi ffd2fa5370 refactor: switch calendar component creation to ical.js
- replace ical-generator with ical.js for VCALENDAR creation
- add logging for component creation process
- set component metadata (prodid, version, name) using ical.js
2024-11-07 20:06:07 +03:00
Ryan Mwangi 1c241c0738 chore: add calendar directory to .gitignore 2024-11-07 16:05:18 +03:00
Ryan Mwangi 69f2f71a2d test: add test for merging calendars in different timezones and merging date-based and time-based calendars 2024-11-07 16:04:21 +03:00
Ryan Mwangi 708144baa6 test: introduce new shorter calendar test files 2024-11-07 15:32:18 +03:00
Ryan Mwangi b32696f14c refactor: refactor endpoint to serve refreshed merge calendars 2024-11-07 14:43:41 +03:00
Ryan Mwangi cdc25981b5 refactor: streamline calendar refresh logic with refreshCalendarData helper 2024-11-07 14:35:25 +03:00
Ryan Mwangi 1dde451f9d refactor: refactor endpoint to merge calendars 2024-11-07 14:33:24 +03:00
Ryan Mwangi 00f5fedb2a refactor: encapsulate calendar file saving with saveCalendarFile helper 2024-11-07 14:25:02 +03:00
Ryan Mwangi 1bc7119b08 refactor: modularize event merging with mergeCalendarEvents helper 2024-11-07 14:23:24 +03:00
Ryan Mwangi 0c61cb0e7c refactor: centralize calendar data retrieval with fetchCalendarData helper 2024-11-07 14:20:56 +03:00
Ryan Mwangi af74d809c4 refactor: refactor sanitizeFilename utility that ensures valid file names 2024-11-07 14:18:18 +03:00
Ryan Mwangi cf10a62049 refactor: streamline static file serving 2024-11-07 14:11:09 +03:00
xeruf 495557e6c2 refactor: add starter script 2024-11-07 10:28:11 +01:00
xeruf 5b3a47a122 test: run tests and keep assets in subdirectory 2024-11-07 10:20:56 +01:00
xeruf 8eb44e18f6 fix(server.js): properly propagate errors 2024-11-07 10:15:37 +01:00
Ryan Mwangi 6c9fb1139f fix(tests): ensure calendar file path is correct
- Updated file path in merge date-based calendar test to point to the 'calendar' directory within TEST_MERGED_CALENDARS_DIR.
2024-11-07 03:44:11 +03:00
Ryan Mwangi 188a2b713c Merge remote-tracking branch 'contrib/master' 2024-11-07 02:22:18 +03:00
Ryan Mwangi 4fce46c57e test: changes on temp folder 2024-11-07 02:18:12 +03:00
Ryan Mwangi 9f036b43cd chore: Remove debug log for merged calendars directory
- Eliminated console log statement that outputs the merged calendars directory path.
- Cleans up the server output and reduces unnecessary logging.
2024-11-06 15:30:19 +03:00
53 changed files with 11812 additions and 2197 deletions

8
.dockerignore Normal file
View File

@ -0,0 +1,8 @@
node_modules
npm-debug.log
.DS_Store
tests
*.test.js
*.log
.git
.env

2
.gitattributes vendored Normal file
View File

@ -0,0 +1,2 @@
* text=auto eol=lf
*.ics text eol=crlf

3
.gitignore vendored
View File

@ -1,2 +1,3 @@
node_modules/ node_modules/
tests/calendar/ test/calendar/
calendar/

View File

@ -39,6 +39,50 @@ The application also generates a unique URL for the merged calendar and updates
```bash ```bash
npm start npm start
``` ```
## Building and Running with Docker
### 1. Build the Docker Image
Run the following command to build the Docker image:
```bash
docker build -t calmerger-app .
```
### 2. Run the Docker Container
To start the container, use:
```bash
docker run -d --name calmerger -p 3000:3000 calmerger-app
```
This maps the container's port `3000` to the host system's port `3000`. The application will be accessible at [http://localhost:3000](http://localhost:3000).
### 3. Using Docker Compose (Optional)
If you prefer to use Docker Compose, ensure you have a `docker-compose.yml` file in your project directory. Then, run:
```bash
docker-compose up -d
```
This will automatically build and start the container based on the configuration in the `docker-compose.yml` file.
### 4. Stopping the Docker Container
To stop the running container, use:
```bash
docker stop calmerger
```
To remove the container:
```bash
docker rm calmerger
```
## Running Tests ## Running Tests

View File

@ -1,158 +0,0 @@
import request from 'supertest';
import express from 'express';
import fs from 'fs';
import path from 'path';
import app from './server';
const TEST_MERGED_CALENDARS_DIR = path.join(__dirname, 'tests');
const TEST_CALENDARS_DIR = 'test_calendars';
const EXPECTED_OUTPUTS_DIR = 'expected_outputs';
let server;
describe('Calendar Merging API', () => {
beforeAll(async () => {
console.log(`Test Merged Calendars Directory: ${TEST_MERGED_CALENDARS_DIR}`);
// Ensure the test merged calendars directory exists
if (!fs.existsSync(TEST_MERGED_CALENDARS_DIR)) {
fs.mkdirSync(TEST_MERGED_CALENDARS_DIR, { recursive: true });
}
// Change the working directory to the test-specific directory
process.chdir(TEST_MERGED_CALENDARS_DIR);
console.log(process.cwd());
// Start the server
server = app.listen(0);
});
afterAll(async () => {
// Ensure the server is closed before cleanup
await new Promise(resolve => server.close(resolve));
// Optional: Add a delay to ensure all handles are released
await new Promise(resolve => setTimeout(resolve, 100));
});
const loadCalendarFile = (filename) => {
return path.join(__dirname, TEST_CALENDARS_DIR, filename);
};
const loadExpectedOutput = (filename) => {
return fs.readFileSync(path.join(EXPECTED_OUTPUTS_DIR, filename), 'utf8');
};
test('Merge date-based calendar', async () => {
const response = await request(server)
.post('/merge')
.send({
linkGroupName: 'Date Based Calendar',
calendars: [
{
url: loadCalendarFile('ferien_bayern_2023.ics'),
prefix: 'Ferien_Bayern_2023',
override: false,
},
{
url: loadCalendarFile('US_Holidays.ics'),
prefix: 'US_holidays',
override: false,
},
],
});
expect(response.status).toBe(200);
expect(response.body.url).toMatch(/calendar\/Date_Based_Calendar/);
// Check if the file was created in the test directory
const filePath = path.join(TEST_MERGED_CALENDARS_DIR, 'Date_Based_Calendar.ics');
expect(fs.existsSync(filePath)).toBe(true);
// Load expected output and compare
const expectedOutput = loadExpectedOutput('Date_Based_Calendar.ics');
const actualOutput = fs.readFileSync(filePath, 'utf8');
// expect(actualOutput).toBe(expectedOutput);
});
test('Merge time-based calendar', async () => {
const response = await request(server)
.post('/merge')
.send({
linkGroupName: 'Time Based Calendar',
calendars: [
{
url: loadCalendarFile('other_work.ics'),
prefix: 'other_work',
override: false,
},
{
url: loadCalendarFile('work.ics'),
prefix: 'work',
override: false,
},
],
});
expect(response.status).toBe(200);
expect(response.body.url).toMatch(/calendar\/Time_Based_Calendar/);
// Check if the file was created in the test directory
const filePath = path.join(TEST_MERGED_CALENDARS_DIR, 'Time_Based_Calendar.ics');
expect(fs.existsSync(filePath)).toBe(true);
// Load expected output and compare
const expectedOutput = loadExpectedOutput('Time_Based_Calendar.ics');
const actualOutput = fs.readFileSync (filePath, 'utf8');
// expect(actualOutput).toBe(expectedOutput);
});
test('Merge calendar without prefix', async () => {
const response = await request(server)
.post('/merge')
.send({
linkGroupName: 'No Prefix Calendar',
calendars: [
{
url: loadCalendarFile('San_Francisco_Public_Holidays.ics'),
prefix: '',
override: false,
},
],
});
expect(response.status).toBe(200);
expect(response.body.url).toMatch(/calendar\/No_Prefix_Calendar/);
// Check if the file was created in the test directory
const filePath = path.join(TEST_MERGED_CALENDARS_DIR, 'No_Prefix_Calendar.ics');
expect(fs.existsSync(filePath)).toBe(true);
// Load expected output and compare
const expectedOutput = loadExpectedOutput('No_Prefix_Calendar.ics');
const actualOutput = fs.readFileSync(filePath, 'utf8');
// expect(actualOutput).toBe(expectedOutput);
});
test('Merge calendar with override', async () => {
const response = await request(server)
.post('/merge')
.send({
linkGroupName: 'Override Calendar',
calendars: [
{
url: loadCalendarFile('San_Francisco_Public_Holidays.ics'),
prefix: 'Override Event',
override: true,
},
],
});
expect(response.status).toBe(200);
expect(response.body.url).toMatch(/calendar\/Override_Calendar/);
// Check if the file was created in the test directory
const filePath = path.join(TEST_MERGED_CALENDARS_DIR, 'Override_Calendar.ics');
expect(fs.existsSync(filePath)).toBe(true);
// Load expected output and compare
const expectedOutput = loadExpectedOutput('Override_Calendar.ics');
const actualOutput = fs.readFileSync(filePath, 'utf8');
// expect(actualOutput).toBe(expectedOutput);
});
});

20
dockerfile Normal file
View File

@ -0,0 +1,20 @@
# Use an official Node.js runtime as a parent image
FROM node:18-alpine
# Set working directory inside the container
WORKDIR /usr/src/app
# Copy package.json and package-lock.json for installing dependencies
COPY package*.json ./
# Install dependencies
RUN npm install --production
# Copy the rest of the project files
COPY . .
# Expose the port your application runs on (if applicable)
EXPOSE 3000
# Command to run the application
CMD ["node", "src/app.js"]

View File

@ -1,5 +0,0 @@
module.exports = {
transform: {
'^.+\\.jsx?$': 'babel-jest',
},
};

7
jest.config.js Normal file
View File

@ -0,0 +1,7 @@
export default {
transform: {
'^.+\\.jsx?$': 'babel-jest',
},
moduleFileExtensions: ['js', 'jsx'],
testEnvironment: 'node',
};

947
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -1,28 +1,30 @@
{ {
"name": "calendar-merger", "name": "calendar-merger",
"version": "1.0.0", "version": "1.1.0",
"type": "module",
"scripts": { "scripts": {
"start": "node server.js", "start": "node src/app.js",
"test": "jest" "test": "node --experimental-vm-modules ./node_modules/jest/bin/jest.js ./test"
}, },
"dependencies": { "dependencies": {
"axios": "^1.7.7", "axios": "^1.7.7",
"calendar-merger": "file:", "calendar-merger": "file:",
"express": "^4.17.1", "express": "^4.17.1",
"ical": "^0.8.0",
"ical-generator": "^0.2.10",
"ical.js": "^2.1.0", "ical.js": "^2.1.0",
"node-cron": "^2.0.3", "node-cron": "^2.0.3",
"supertest": "^7.0.0" "supertest": "^7.0.0"
}, },
"description": "cal merge", "description": "calmerger",
"main": "script.js", "main": "server.js",
"author": "Ryan", "author": "Ryan",
"type": "module",
"license": "ISC", "license": "ISC",
"devDependencies": { "devDependencies": {
"@babel/core": "^7.26.0",
"@babel/plugin-transform-modules-commonjs": "^7.25.9",
"@babel/preset-env": "^7.26.0", "@babel/preset-env": "^7.26.0",
"@babel/register": "^7.25.9", "@babel/register": "^7.25.9",
"jest": "^29.7.0" "babel-jest": "^29.7.0",
"jest": "^29.7.0",
"rewire": "^7.0.0"
} }
} }

250
server.js
View File

@ -1,250 +0,0 @@
import express from 'express';
import ICAL from 'ical.js';
import fs from 'fs';
import axios from 'axios';
import path from 'path';
import icalGenerator from 'ical-generator';
const app = express();
app.use(express.json());
// Determine the merged calendars directory based on the environment
const MERGED_CALENDARS_DIR = 'calendar';
console.log(`Merged calendars directory: ${MERGED_CALENDARS_DIR} under ${process.cwd()}`);
// Ensure the merged calendars directory exists
fs.mkdirSync(MERGED_CALENDARS_DIR, { recursive: true });
app.get('/script.js', (req, res) => {
res.setHeader('Content-Type', 'application/javascript');
res.sendFile('script.js', { root: '.' });
});
app.get('/', (req, res) => {
res.sendFile('index.html', { root: '.' });
});
// Function to sanitize the linkGroupName for use as a filename
function sanitizeFilename(filename) {
return filename.replace(/[<>:"/\\|?* ]/g, '_'); // Replace invalid characters with underscores
}
// Merge calendars endpoint
app.post('/merge', async (req, res) => {
const { linkGroupName, calendars } = req.body;
try {
// Validate the input
if (!linkGroupName || !calendars || !Array.isArray(calendars) || calendars.length === 0) {
return res.status(400).json({ error: 'Invalid input. Please provide a linkGroupName and at least one calendar.' });
}
// Sanitize the linkGroupName to create a valid filename
const sanitizedLinkGroupName = sanitizeFilename(linkGroupName);
const filename = `${sanitizedLinkGroupName}.ics`;
// Fetch calendar data from URLs or load from local files
const promises = calendars.map((calendar) => {
// Check if calendar URL is a file path or a URL
const isFilePath = !calendar.url.startsWith('http');
if (isFilePath) {
try{
// Read calendar data from local file
const data = fs.readFileSync(path.resolve(calendar.url), 'utf-8');
return Promise.resolve({
data: data,
prefix: calendar.prefix,
override: calendar.override,
});
} catch (error){
console.error(`Error reading calendar file ${calendar.url}:`, error);
return Promise.resolve(null);
}
} else {
// Fetch calendar data from URL
return axios.get(calendar.url)
.then((response) => {
return {
data: response.data,
prefix: calendar.prefix,
override: calendar.override,
};
})
.catch((error) => {
console.error(`Error fetching calendar from ${calendar.url}:`, error);
return null;
});
}
});
const results = await Promise.all(promises);
// Filter out any failed requests
const validResults = results.filter((result) => result !== null);
// Create a new iCalendar instance
const calendar = icalGenerator({ name: linkGroupName });
// Parse calendar data
validResults.forEach((result) => {
const parsed = ICAL.parse(result.data);
const component = new ICAL.Component(parsed);
const events = component.getAllSubcomponents('vevent');
events.forEach((event) => {
const vevent = new ICAL.Event(event);
const start = vevent.startDate.toJSDate();
const end = vevent.endDate.toJSDate();
const summary = result.override ? result.prefix : `${result.prefix} ${vevent.summary}`;
if (vevent.startDate.isDate) {
calendar.createEvent({
start: start.toISOString().split('T')[0],
end: end.toISOString().split('T')[0],
summary: summary,
allDay: true,
});
} else {
calendar.createEvent({
start: start,
end: end,
summary: summary,
});
}
});
});
// Save the calendar to a file
const filePath = `${MERGED_CALENDARS_DIR}/${filename}`;
fs.writeFileSync(filePath, calendar.toString());
console.log(`Calendar saved to ${filePath}`);
// Save the user input and sanitizedLinkGroupName in a separate JSON file
saveCalendarData(sanitizedLinkGroupName, linkGroupName, calendars);
res.json({ url: `${req.protocol}://${req.get('host')}/calendar/${sanitizedLinkGroupName}` });
} catch (error) {
console.error('Error merging calendars:', error);
res.status(500).json({ error: 'Failed to merge calendars' });
}
});
// Serve the merged calendar file and refresh if older than an hour
app.get('/calendar/:name', async (req, res) => {
const calendarName = req.params.name;
const icsFilePath = path.resolve(MERGED_CALENDARS_DIR, `${calendarName}.ics`);
const jsonFilePath = path.resolve(MERGED_CALENDARS_DIR, `${calendarName}.json`);
try {
// Check if the .ics file exists
if (fs.existsSync(icsFilePath)) {
const stats = fs.statSync(icsFilePath);
const lastModified = new Date(stats.mtime);
const now = new Date();
// Check if the file is older than one hour
if (now - lastModified > 60 * 60 * 1000) {
console .log('Refreshing calendar data...');
// Read the JSON file to get the source URL and other details
const jsonData = JSON.parse(fs.readFileSync(jsonFilePath, 'utf8'));
const { calendars } = jsonData;
// Fetch calendar data for each merged calendar
const promises = calendars.map((calendar) => {
return axios.get(calendar.url)
.then((response) => {
return {
data: response.data,
prefix: calendar.prefix,
override: calendar.override,
};
})
.catch((error) => {
console.error(error);
return null;
});
});
const results = await Promise.all(promises);
// Filter out any failed requests
const validResults = results.filter((result) => result !== null);
// Create a new iCalendar instance
const calendar = icalGenerator({ name: calendarName });
// Parse calendar data
validResults.forEach((result) => {
const parsed = ICAL.parse(result.data);
const component = new ICAL.Component(parsed);
const events = component.getAllSubcomponents('vevent');
events.forEach((event) => {
const vevent = new ICAL.Event(event);
const start = vevent.startDate.toJSDate();
const end = vevent.endDate.toJSDate();
const summary = result.override ? result.prefix : `${result.prefix} ${vevent.summary}`;
if (vevent.startDate.isDate) {
calendar.createEvent({
start: start.toISOString().split('T')[0],
end: end.toISOString().split('T')[0],
summary: summary,
allDay: true,
});
} else {
calendar.createEvent({
start: start,
end: end,
summary: summary,
});
}
});
});
// Save the calendar to a file
fs.writeFileSync(icsFilePath, calendar.toString());
console.log('Calendar data refreshed.');
}
} else {
return res.status(404).json({ error: 'Calendar not found.' });
}
// Return the contents of the .ics file
res.setHeader('Content-Type', 'text/calendar');
res.sendFile(icsFilePath);
} catch (error) {
console.error(error);
res.status(500).json({ error: 'Failed to retrieve calendar data.' });
}
});
//function to save calendar data to seperate .json files
function saveCalendarData(calendarId, linkGroupName, calendars) {
const calendarFile = `${MERGED_CALENDARS_DIR}/${calendarId}.json`;
const calendarData = {
id: calendarId,
linkGroupName: linkGroupName,
calendars: calendars
};
try {
fs.writeFileSync(calendarFile, JSON.stringify(calendarData, null, 2));
} catch (error) {
console.error('Error writing to calendar file:', error);
}
}
// Start the server
if (process.env.NODE_ENV !== 'test') {
const port = 3000;
app.listen(port, () => {
console.log(`Server started on port ${port}`);
});
}
export default app;

6
src/app.js Normal file
View File

@ -0,0 +1,6 @@
import server from './server.js';
const port = process.env.NODE_PORT || 3000;
server.listen(port, () => {
console.log(`Server started on port ${port}`);
});

117
src/calendarUtil.js Normal file
View File

@ -0,0 +1,117 @@
import ICAL from './lib/ical.timezones.js'
import fs from 'fs'
import path from 'path'
import axios from 'axios'
export const MERGED_CALENDARS_DIR = path.join(process.cwd(), 'calendar');
// Ensure the merged calendars directory exists
fs.mkdirSync(MERGED_CALENDARS_DIR, { recursive: true });
// Utility to sanitize filenames
export const sanitizeFilename = (filename) => filename.replace(/[<>:"/\\|?* ]/g, '_');
// Fetch calendar data from URL or file
export async function fetchCalendarData(calendar) {
const isFilePath = !calendar.url.startsWith('http');
try {
if (isFilePath) {
return { data: fs.readFileSync(path.resolve(calendar.url), 'utf-8'), ...calendar };
} else {
const response = await axios.get(calendar.url);
return { data: response.data, ...calendar };
}
} catch (error) {
throw new Error(`Error retrieving calendar from ${calendar.url}: ${error.message}`);
}
}
// Create a top-level VCALENDAR component
export function createCalendarComponent(name) {
const calendarComponent = new ICAL.Component(['vcalendar', [], []]);
calendarComponent.updatePropertyWithValue('name', name);
calendarComponent.updatePropertyWithValue('prodid', '-//CalMerge//Calendar Merger 1.0//EN');
calendarComponent.updatePropertyWithValue('version', '2.0');
calendarComponent.updatePropertyWithValue('calscale', 'GREGORIAN');
return calendarComponent;
}
// Add events to the calendar component
export function addEventsToCalendar(newCalendar, calendars) {
let defaultTimeZone = null; // To store the first found X-WR-TIMEZONE
calendars.forEach((calendarRaw) => {
try {
const { data, prefix, override } = calendarRaw; // Extract prefix and override
const calendar = new ICAL.Component(ICAL.parse(calendarRaw.data));
// Extract METHOD from the parsed data (if available)
const method = calendar.getFirstPropertyValue('method');
if (method) {
console.log(`Extracted METHOD: ${method}`);
// Only add the METHOD property once
if (!newCalendar.getFirstPropertyValue('method')) {
newCalendar.updatePropertyWithValue('method', method.toUpperCase());
}
}
// Extract X-WR-TIMEZONE if available
const wrTimeZone = calendar.getFirstPropertyValue('x-wr-timezone');
if (wrTimeZone) {
console.log(`Extracted X-WR-TIMEZONE: ${wrTimeZone}`);
// Set it as the default if not already set
if (!defaultTimeZone) {
defaultTimeZone = wrTimeZone;
if (!newCalendar.getFirstPropertyValue('x-wr-timezone')) {
newCalendar.updatePropertyWithValue('x-wr-timezone', defaultTimeZone);
}
}
}
// Extract and add VTIMEZONE components
const timezones = calendar.getAllSubcomponents('vtimezone');
timezones.forEach((timezone) => {
const tzid = timezone.getFirstPropertyValue('tzid');
if (!newCalendar.getFirstSubcomponent((comp) => comp.name === 'vtimezone' && comp.getFirstPropertyValue('tzid') === tzid)) {
newCalendar.addSubcomponent(timezone);
}
});
// Process VEVENT components
calendar.getAllSubcomponents('vevent').forEach((vevent) => {
const event = new ICAL.Event(vevent);
const newEvent = new ICAL.Event();
newEvent.uid = event.uid;
newEvent.startDate = event.startDate
newEvent.endDate = event.endDate
const dtstamp = vevent.getFirstPropertyValue('dtstamp');
if (dtstamp) newEvent.component.updatePropertyWithValue('dtstamp', dtstamp);
if (override) {
newEvent.summary = prefix || 'Busy';
} else {
newEvent.summary = prefix ? `${prefix} ${event.summary}` : event.summary;
if (event.location) newEvent.location = event.location;
}
const rrule = vevent.getFirstPropertyValue('rrule');
if (rrule) newEvent.component.updatePropertyWithValue('rrule', rrule);
// Add the VEVENT to the calendar
newCalendar.addSubcomponent(newEvent.component);
});
} catch (error) {
console.error(`Error processing calendar:`, calendarRaw, error);
}
});
}
// Save calendar data to file
export function saveCalendarFile(filename, content) {
const normalizedContent = content.replace(/\r?\n/g, '\r\n').trimEnd(); // Normalize to CRLF
const filePath = path.join(MERGED_CALENDARS_DIR, filename);
console.log(`Saving calendar data to file: ${filePath}`);
fs.writeFileSync(filePath, normalizedContent);
return filePath;
}

9501
src/lib/ical.cjs Normal file

File diff suppressed because it is too large Load Diff

348
src/lib/ical.timezones.js Normal file
View File

@ -0,0 +1,348 @@
import { createRequire } from 'module';
const require = createRequire(import.meta.url);
const ICAL = require('./ical.cjs');
(function() {
function register(tzdata) { ICAL.TimezoneService.register(ICAL.Component.fromString("BEGIN:VTIMEZONE\r\n" + tzdata + "\r\nEND:VTIMEZONE")) };
ICAL.TimezoneService.IANA_TZDB_VERSION = "2024b";
register("TZID:Africa/Abidjan\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Africa/Abidjan\r\nBEGIN:STANDARD\r\nTZNAME:GMT\r\nTZOFFSETFROM:+0000\r\nTZOFFSETTO:+0000\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:Africa/Algiers\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Africa/Algiers\r\nBEGIN:STANDARD\r\nTZNAME:CET\r\nTZOFFSETFROM:+0100\r\nTZOFFSETTO:+0100\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:Africa/Bissau\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Africa/Bissau\r\nBEGIN:STANDARD\r\nTZNAME:GMT\r\nTZOFFSETFROM:+0000\r\nTZOFFSETTO:+0000\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:Africa/Cairo\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Africa/Cairo\r\nBEGIN:DAYLIGHT\r\nTZNAME:EEST\r\nTZOFFSETFROM:+0200\r\nTZOFFSETTO:+0300\r\nDTSTART:19700424T000000\r\nRRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=-1FR\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZNAME:EET\r\nTZOFFSETFROM:+0300\r\nTZOFFSETTO:+0200\r\nDTSTART:19701030T000000\r\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1FR\r\nEND:STANDARD");
register("TZID:Africa/Casablanca\r\nTZUNTIL:20870511T020001Z\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Africa/Casablanca\r\nBEGIN:STANDARD\r\nTZNAME:%z\r\nTZOFFSETFROM:+0100\r\nTZOFFSETTO:+0100\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:Africa/Ceuta\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Africa/Ceuta\r\nBEGIN:DAYLIGHT\r\nTZNAME:CEST\r\nTZOFFSETFROM:+0100\r\nTZOFFSETTO:+0200\r\nDTSTART:19700329T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZNAME:CET\r\nTZOFFSETFROM:+0200\r\nTZOFFSETTO:+0100\r\nDTSTART:19701025T030000\r\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\r\nEND:STANDARD");
register("TZID:Africa/El_Aaiun\r\nTZUNTIL:20870511T020001Z\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Africa/El_Aaiun\r\nBEGIN:STANDARD\r\nTZNAME:%z\r\nTZOFFSETFROM:+0100\r\nTZOFFSETTO:+0100\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:Africa/Johannesburg\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Africa/Johannesburg\r\nBEGIN:STANDARD\r\nTZNAME:SAST\r\nTZOFFSETFROM:+0200\r\nTZOFFSETTO:+0200\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:Africa/Juba\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Africa/Juba\r\nBEGIN:STANDARD\r\nTZNAME:CAT\r\nTZOFFSETFROM:+0200\r\nTZOFFSETTO:+0200\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:Africa/Khartoum\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Africa/Khartoum\r\nBEGIN:STANDARD\r\nTZNAME:CAT\r\nTZOFFSETFROM:+0200\r\nTZOFFSETTO:+0200\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:Africa/Lagos\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Africa/Lagos\r\nBEGIN:STANDARD\r\nTZNAME:WAT\r\nTZOFFSETFROM:+0100\r\nTZOFFSETTO:+0100\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:Africa/Maputo\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Africa/Maputo\r\nBEGIN:STANDARD\r\nTZNAME:CAT\r\nTZOFFSETFROM:+0200\r\nTZOFFSETTO:+0200\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:Africa/Monrovia\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Africa/Monrovia\r\nBEGIN:STANDARD\r\nTZNAME:GMT\r\nTZOFFSETFROM:+0000\r\nTZOFFSETTO:+0000\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:Africa/Nairobi\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Africa/Nairobi\r\nBEGIN:STANDARD\r\nTZNAME:EAT\r\nTZOFFSETFROM:+0300\r\nTZOFFSETTO:+0300\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:Africa/Ndjamena\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Africa/Ndjamena\r\nBEGIN:STANDARD\r\nTZNAME:WAT\r\nTZOFFSETFROM:+0100\r\nTZOFFSETTO:+0100\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:Africa/Sao_Tome\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Africa/Sao_Tome\r\nBEGIN:STANDARD\r\nTZNAME:GMT\r\nTZOFFSETFROM:+0000\r\nTZOFFSETTO:+0000\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:Africa/Tripoli\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Africa/Tripoli\r\nBEGIN:STANDARD\r\nTZNAME:EET\r\nTZOFFSETFROM:+0200\r\nTZOFFSETTO:+0200\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:Africa/Tunis\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Africa/Tunis\r\nBEGIN:STANDARD\r\nTZNAME:CET\r\nTZOFFSETFROM:+0100\r\nTZOFFSETTO:+0100\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:Africa/Windhoek\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Africa/Windhoek\r\nBEGIN:STANDARD\r\nTZNAME:CAT\r\nTZOFFSETFROM:+0200\r\nTZOFFSETTO:+0200\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:America/Adak\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:America/Adak\r\nBEGIN:DAYLIGHT\r\nTZNAME:HDT\r\nTZOFFSETFROM:-1000\r\nTZOFFSETTO:-0900\r\nDTSTART:19700308T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZNAME:HST\r\nTZOFFSETFROM:-0900\r\nTZOFFSETTO:-1000\r\nDTSTART:19701101T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\r\nEND:STANDARD");
register("TZID:America/Anchorage\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:America/Anchorage\r\nBEGIN:DAYLIGHT\r\nTZNAME:AKDT\r\nTZOFFSETFROM:-0900\r\nTZOFFSETTO:-0800\r\nDTSTART:19700308T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZNAME:AKST\r\nTZOFFSETFROM:-0800\r\nTZOFFSETTO:-0900\r\nDTSTART:19701101T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\r\nEND:STANDARD");
register("TZID:America/Araguaina\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:America/Araguaina\r\nBEGIN:STANDARD\r\nTZNAME:%z\r\nTZOFFSETFROM:-0300\r\nTZOFFSETTO:-0300\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:America/Argentina/Buenos_Aires\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:America/Argentina/Buenos_Aires\r\nBEGIN:STANDARD\r\nTZNAME:%z\r\nTZOFFSETFROM:-0300\r\nTZOFFSETTO:-0300\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:America/Argentina/Catamarca\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:America/Argentina/Catamarca\r\nBEGIN:STANDARD\r\nTZNAME:%z\r\nTZOFFSETFROM:-0300\r\nTZOFFSETTO:-0300\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:America/Argentina/Cordoba\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:America/Argentina/Cordoba\r\nBEGIN:STANDARD\r\nTZNAME:%z\r\nTZOFFSETFROM:-0300\r\nTZOFFSETTO:-0300\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:America/Argentina/Jujuy\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:America/Argentina/Jujuy\r\nBEGIN:STANDARD\r\nTZNAME:%z\r\nTZOFFSETFROM:-0300\r\nTZOFFSETTO:-0300\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:America/Argentina/La_Rioja\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:America/Argentina/La_Rioja\r\nBEGIN:STANDARD\r\nTZNAME:%z\r\nTZOFFSETFROM:-0300\r\nTZOFFSETTO:-0300\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:America/Argentina/Mendoza\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:America/Argentina/Mendoza\r\nBEGIN:STANDARD\r\nTZNAME:%z\r\nTZOFFSETFROM:-0300\r\nTZOFFSETTO:-0300\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:America/Argentina/Rio_Gallegos\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:America/Argentina/Rio_Gallegos\r\nBEGIN:STANDARD\r\nTZNAME:%z\r\nTZOFFSETFROM:-0300\r\nTZOFFSETTO:-0300\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:America/Argentina/Salta\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:America/Argentina/Salta\r\nBEGIN:STANDARD\r\nTZNAME:%z\r\nTZOFFSETFROM:-0300\r\nTZOFFSETTO:-0300\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:America/Argentina/San_Juan\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:America/Argentina/San_Juan\r\nBEGIN:STANDARD\r\nTZNAME:%z\r\nTZOFFSETFROM:-0300\r\nTZOFFSETTO:-0300\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:America/Argentina/San_Luis\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:America/Argentina/San_Luis\r\nBEGIN:STANDARD\r\nTZNAME:%z\r\nTZOFFSETFROM:-0300\r\nTZOFFSETTO:-0300\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:America/Argentina/Tucuman\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:America/Argentina/Tucuman\r\nBEGIN:STANDARD\r\nTZNAME:%z\r\nTZOFFSETFROM:-0300\r\nTZOFFSETTO:-0300\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:America/Argentina/Ushuaia\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:America/Argentina/Ushuaia\r\nBEGIN:STANDARD\r\nTZNAME:%z\r\nTZOFFSETFROM:-0300\r\nTZOFFSETTO:-0300\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:America/Asuncion\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:America/Asuncion\r\nBEGIN:DAYLIGHT\r\nTZNAME:%z\r\nTZOFFSETFROM:-0400\r\nTZOFFSETTO:-0300\r\nDTSTART:19701004T000000\r\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZNAME:%z\r\nTZOFFSETFROM:-0300\r\nTZOFFSETTO:-0400\r\nDTSTART:19700322T000000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=4SU\r\nEND:STANDARD");
register("TZID:America/Bahia\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:America/Bahia\r\nBEGIN:STANDARD\r\nTZNAME:%z\r\nTZOFFSETFROM:-0300\r\nTZOFFSETTO:-0300\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:America/Bahia_Banderas\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:America/Bahia_Banderas\r\nBEGIN:STANDARD\r\nTZNAME:CST\r\nTZOFFSETFROM:-0600\r\nTZOFFSETTO:-0600\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:America/Barbados\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:America/Barbados\r\nBEGIN:STANDARD\r\nTZNAME:AST\r\nTZOFFSETFROM:-0400\r\nTZOFFSETTO:-0400\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:America/Belem\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:America/Belem\r\nBEGIN:STANDARD\r\nTZNAME:%z\r\nTZOFFSETFROM:-0300\r\nTZOFFSETTO:-0300\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:America/Belize\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:America/Belize\r\nBEGIN:STANDARD\r\nTZNAME:CST\r\nTZOFFSETFROM:-0600\r\nTZOFFSETTO:-0600\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:America/Boa_Vista\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:America/Boa_Vista\r\nBEGIN:STANDARD\r\nTZNAME:%z\r\nTZOFFSETFROM:-0400\r\nTZOFFSETTO:-0400\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:America/Bogota\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:America/Bogota\r\nBEGIN:STANDARD\r\nTZNAME:%z\r\nTZOFFSETFROM:-0500\r\nTZOFFSETTO:-0500\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:America/Boise\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:America/Boise\r\nBEGIN:DAYLIGHT\r\nTZNAME:MDT\r\nTZOFFSETFROM:-0700\r\nTZOFFSETTO:-0600\r\nDTSTART:19700308T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZNAME:MST\r\nTZOFFSETFROM:-0600\r\nTZOFFSETTO:-0700\r\nDTSTART:19701101T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\r\nEND:STANDARD");
register("TZID:America/Cambridge_Bay\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:America/Cambridge_Bay\r\nBEGIN:DAYLIGHT\r\nTZNAME:MDT\r\nTZOFFSETFROM:-0700\r\nTZOFFSETTO:-0600\r\nDTSTART:19700308T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZNAME:MST\r\nTZOFFSETFROM:-0600\r\nTZOFFSETTO:-0700\r\nDTSTART:19701101T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\r\nEND:STANDARD");
register("TZID:America/Campo_Grande\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:America/Campo_Grande\r\nBEGIN:STANDARD\r\nTZNAME:%z\r\nTZOFFSETFROM:-0400\r\nTZOFFSETTO:-0400\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:America/Cancun\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:America/Cancun\r\nBEGIN:STANDARD\r\nTZNAME:EST\r\nTZOFFSETFROM:-0500\r\nTZOFFSETTO:-0500\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:America/Caracas\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:America/Caracas\r\nBEGIN:STANDARD\r\nTZNAME:%z\r\nTZOFFSETFROM:-0400\r\nTZOFFSETTO:-0400\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:America/Cayenne\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:America/Cayenne\r\nBEGIN:STANDARD\r\nTZNAME:%z\r\nTZOFFSETFROM:-0300\r\nTZOFFSETTO:-0300\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:America/Chicago\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:America/Chicago\r\nBEGIN:DAYLIGHT\r\nTZNAME:CDT\r\nTZOFFSETFROM:-0600\r\nTZOFFSETTO:-0500\r\nDTSTART:19700308T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZNAME:CST\r\nTZOFFSETFROM:-0500\r\nTZOFFSETTO:-0600\r\nDTSTART:19701101T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\r\nEND:STANDARD");
register("TZID:America/Chihuahua\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:America/Chihuahua\r\nBEGIN:STANDARD\r\nTZNAME:CST\r\nTZOFFSETFROM:-0600\r\nTZOFFSETTO:-0600\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:America/Ciudad_Juarez\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:America/Ciudad_Juarez\r\nBEGIN:DAYLIGHT\r\nTZNAME:MDT\r\nTZOFFSETFROM:-0700\r\nTZOFFSETTO:-0600\r\nDTSTART:19700308T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZNAME:MST\r\nTZOFFSETFROM:-0600\r\nTZOFFSETTO:-0700\r\nDTSTART:19701101T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\r\nEND:STANDARD");
register("TZID:America/Costa_Rica\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:America/Costa_Rica\r\nBEGIN:STANDARD\r\nTZNAME:CST\r\nTZOFFSETFROM:-0600\r\nTZOFFSETTO:-0600\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:America/Cuiaba\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:America/Cuiaba\r\nBEGIN:STANDARD\r\nTZNAME:%z\r\nTZOFFSETFROM:-0400\r\nTZOFFSETTO:-0400\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:America/Danmarkshavn\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:America/Danmarkshavn\r\nBEGIN:STANDARD\r\nTZNAME:GMT\r\nTZOFFSETFROM:+0000\r\nTZOFFSETTO:+0000\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:America/Dawson\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:America/Dawson\r\nBEGIN:STANDARD\r\nTZNAME:MST\r\nTZOFFSETFROM:-0700\r\nTZOFFSETTO:-0700\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:America/Dawson_Creek\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:America/Dawson_Creek\r\nBEGIN:STANDARD\r\nTZNAME:MST\r\nTZOFFSETFROM:-0700\r\nTZOFFSETTO:-0700\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:America/Denver\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:America/Denver\r\nBEGIN:DAYLIGHT\r\nTZNAME:MDT\r\nTZOFFSETFROM:-0700\r\nTZOFFSETTO:-0600\r\nDTSTART:19700308T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZNAME:MST\r\nTZOFFSETFROM:-0600\r\nTZOFFSETTO:-0700\r\nDTSTART:19701101T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\r\nEND:STANDARD");
register("TZID:America/Detroit\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:America/Detroit\r\nBEGIN:DAYLIGHT\r\nTZNAME:EDT\r\nTZOFFSETFROM:-0500\r\nTZOFFSETTO:-0400\r\nDTSTART:19700308T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZNAME:EST\r\nTZOFFSETFROM:-0400\r\nTZOFFSETTO:-0500\r\nDTSTART:19701101T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\r\nEND:STANDARD");
register("TZID:America/Edmonton\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:America/Edmonton\r\nBEGIN:DAYLIGHT\r\nTZNAME:MDT\r\nTZOFFSETFROM:-0700\r\nTZOFFSETTO:-0600\r\nDTSTART:19700308T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZNAME:MST\r\nTZOFFSETFROM:-0600\r\nTZOFFSETTO:-0700\r\nDTSTART:19701101T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\r\nEND:STANDARD");
register("TZID:America/Eirunepe\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:America/Eirunepe\r\nBEGIN:STANDARD\r\nTZNAME:%z\r\nTZOFFSETFROM:-0500\r\nTZOFFSETTO:-0500\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:America/El_Salvador\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:America/El_Salvador\r\nBEGIN:STANDARD\r\nTZNAME:CST\r\nTZOFFSETFROM:-0600\r\nTZOFFSETTO:-0600\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:America/Fort_Nelson\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:America/Fort_Nelson\r\nBEGIN:STANDARD\r\nTZNAME:MST\r\nTZOFFSETFROM:-0700\r\nTZOFFSETTO:-0700\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:America/Fortaleza\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:America/Fortaleza\r\nBEGIN:STANDARD\r\nTZNAME:%z\r\nTZOFFSETFROM:-0300\r\nTZOFFSETTO:-0300\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:America/Glace_Bay\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:America/Glace_Bay\r\nBEGIN:DAYLIGHT\r\nTZNAME:ADT\r\nTZOFFSETFROM:-0400\r\nTZOFFSETTO:-0300\r\nDTSTART:19700308T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZNAME:AST\r\nTZOFFSETFROM:-0300\r\nTZOFFSETTO:-0400\r\nDTSTART:19701101T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\r\nEND:STANDARD");
register("TZID:America/Goose_Bay\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:America/Goose_Bay\r\nBEGIN:STANDARD\r\nTZNAME:AST\r\nTZOFFSETFROM:-0300\r\nTZOFFSETTO:-0400\r\nDTSTART:19701101T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\r\nEND:STANDARD\r\nBEGIN:DAYLIGHT\r\nTZNAME:ADT\r\nTZOFFSETFROM:-0400\r\nTZOFFSETTO:-0300\r\nDTSTART:19700308T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\r\nEND:DAYLIGHT");
register("TZID:America/Grand_Turk\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:America/Grand_Turk\r\nBEGIN:STANDARD\r\nTZNAME:EST\r\nTZOFFSETFROM:-0400\r\nTZOFFSETTO:-0500\r\nDTSTART:19701101T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\r\nEND:STANDARD\r\nBEGIN:DAYLIGHT\r\nTZNAME:EDT\r\nTZOFFSETFROM:-0500\r\nTZOFFSETTO:-0400\r\nDTSTART:19700308T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\r\nEND:DAYLIGHT");
register("TZID:America/Guatemala\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:America/Guatemala\r\nBEGIN:STANDARD\r\nTZNAME:CST\r\nTZOFFSETFROM:-0600\r\nTZOFFSETTO:-0600\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:America/Guayaquil\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:America/Guayaquil\r\nBEGIN:STANDARD\r\nTZNAME:%z\r\nTZOFFSETFROM:-0500\r\nTZOFFSETTO:-0500\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:America/Guyana\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:America/Guyana\r\nBEGIN:STANDARD\r\nTZNAME:%z\r\nTZOFFSETFROM:-0400\r\nTZOFFSETTO:-0400\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:America/Halifax\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:America/Halifax\r\nBEGIN:DAYLIGHT\r\nTZNAME:ADT\r\nTZOFFSETFROM:-0400\r\nTZOFFSETTO:-0300\r\nDTSTART:19700308T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZNAME:AST\r\nTZOFFSETFROM:-0300\r\nTZOFFSETTO:-0400\r\nDTSTART:19701101T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\r\nEND:STANDARD");
register("TZID:America/Havana\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:America/Havana\r\nBEGIN:STANDARD\r\nTZNAME:CST\r\nTZOFFSETFROM:-0400\r\nTZOFFSETTO:-0500\r\nDTSTART:19701101T010000\r\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\r\nEND:STANDARD\r\nBEGIN:DAYLIGHT\r\nTZNAME:CDT\r\nTZOFFSETFROM:-0500\r\nTZOFFSETTO:-0400\r\nDTSTART:19700308T000000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\r\nEND:DAYLIGHT");
register("TZID:America/Hermosillo\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:America/Hermosillo\r\nBEGIN:STANDARD\r\nTZNAME:MST\r\nTZOFFSETFROM:-0700\r\nTZOFFSETTO:-0700\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:America/Indiana/Indianapolis\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:America/Indiana/Indianapolis\r\nBEGIN:DAYLIGHT\r\nTZNAME:EDT\r\nTZOFFSETFROM:-0500\r\nTZOFFSETTO:-0400\r\nDTSTART:19700308T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZNAME:EST\r\nTZOFFSETFROM:-0400\r\nTZOFFSETTO:-0500\r\nDTSTART:19701101T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\r\nEND:STANDARD");
register("TZID:America/Indiana/Knox\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:America/Indiana/Knox\r\nBEGIN:DAYLIGHT\r\nTZNAME:CDT\r\nTZOFFSETFROM:-0600\r\nTZOFFSETTO:-0500\r\nDTSTART:19700308T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZNAME:CST\r\nTZOFFSETFROM:-0500\r\nTZOFFSETTO:-0600\r\nDTSTART:19701101T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\r\nEND:STANDARD");
register("TZID:America/Indiana/Marengo\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:America/Indiana/Marengo\r\nBEGIN:DAYLIGHT\r\nTZNAME:EDT\r\nTZOFFSETFROM:-0500\r\nTZOFFSETTO:-0400\r\nDTSTART:19700308T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZNAME:EST\r\nTZOFFSETFROM:-0400\r\nTZOFFSETTO:-0500\r\nDTSTART:19701101T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\r\nEND:STANDARD");
register("TZID:America/Indiana/Petersburg\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:America/Indiana/Petersburg\r\nBEGIN:DAYLIGHT\r\nTZNAME:EDT\r\nTZOFFSETFROM:-0500\r\nTZOFFSETTO:-0400\r\nDTSTART:19700308T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZNAME:EST\r\nTZOFFSETFROM:-0400\r\nTZOFFSETTO:-0500\r\nDTSTART:19701101T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\r\nEND:STANDARD");
register("TZID:America/Indiana/Tell_City\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:America/Indiana/Tell_City\r\nBEGIN:DAYLIGHT\r\nTZNAME:CDT\r\nTZOFFSETFROM:-0600\r\nTZOFFSETTO:-0500\r\nDTSTART:19700308T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZNAME:CST\r\nTZOFFSETFROM:-0500\r\nTZOFFSETTO:-0600\r\nDTSTART:19701101T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\r\nEND:STANDARD");
register("TZID:America/Indiana/Vevay\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:America/Indiana/Vevay\r\nBEGIN:DAYLIGHT\r\nTZNAME:EDT\r\nTZOFFSETFROM:-0500\r\nTZOFFSETTO:-0400\r\nDTSTART:19700308T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZNAME:EST\r\nTZOFFSETFROM:-0400\r\nTZOFFSETTO:-0500\r\nDTSTART:19701101T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\r\nEND:STANDARD");
register("TZID:America/Indiana/Vincennes\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:America/Indiana/Vincennes\r\nBEGIN:DAYLIGHT\r\nTZNAME:EDT\r\nTZOFFSETFROM:-0500\r\nTZOFFSETTO:-0400\r\nDTSTART:19700308T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZNAME:EST\r\nTZOFFSETFROM:-0400\r\nTZOFFSETTO:-0500\r\nDTSTART:19701101T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\r\nEND:STANDARD");
register("TZID:America/Indiana/Winamac\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:America/Indiana/Winamac\r\nBEGIN:STANDARD\r\nTZNAME:EST\r\nTZOFFSETFROM:-0400\r\nTZOFFSETTO:-0500\r\nDTSTART:19701101T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\r\nEND:STANDARD\r\nBEGIN:DAYLIGHT\r\nTZNAME:EDT\r\nTZOFFSETFROM:-0500\r\nTZOFFSETTO:-0400\r\nDTSTART:19700308T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\r\nEND:DAYLIGHT");
register("TZID:America/Inuvik\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:America/Inuvik\r\nBEGIN:DAYLIGHT\r\nTZNAME:MDT\r\nTZOFFSETFROM:-0700\r\nTZOFFSETTO:-0600\r\nDTSTART:19700308T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZNAME:MST\r\nTZOFFSETFROM:-0600\r\nTZOFFSETTO:-0700\r\nDTSTART:19701101T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\r\nEND:STANDARD");
register("TZID:America/Iqaluit\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:America/Iqaluit\r\nBEGIN:DAYLIGHT\r\nTZNAME:EDT\r\nTZOFFSETFROM:-0500\r\nTZOFFSETTO:-0400\r\nDTSTART:19700308T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZNAME:EST\r\nTZOFFSETFROM:-0400\r\nTZOFFSETTO:-0500\r\nDTSTART:19701101T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\r\nEND:STANDARD");
register("TZID:America/Jamaica\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:America/Jamaica\r\nBEGIN:STANDARD\r\nTZNAME:EST\r\nTZOFFSETFROM:-0500\r\nTZOFFSETTO:-0500\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:America/Juneau\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:America/Juneau\r\nBEGIN:DAYLIGHT\r\nTZNAME:AKDT\r\nTZOFFSETFROM:-0900\r\nTZOFFSETTO:-0800\r\nDTSTART:19700308T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZNAME:AKST\r\nTZOFFSETFROM:-0800\r\nTZOFFSETTO:-0900\r\nDTSTART:19701101T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\r\nEND:STANDARD");
register("TZID:America/Kentucky/Louisville\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:America/Kentucky/Louisville\r\nBEGIN:DAYLIGHT\r\nTZNAME:EDT\r\nTZOFFSETFROM:-0500\r\nTZOFFSETTO:-0400\r\nDTSTART:19700308T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZNAME:EST\r\nTZOFFSETFROM:-0400\r\nTZOFFSETTO:-0500\r\nDTSTART:19701101T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\r\nEND:STANDARD");
register("TZID:America/Kentucky/Monticello\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:America/Kentucky/Monticello\r\nBEGIN:DAYLIGHT\r\nTZNAME:EDT\r\nTZOFFSETFROM:-0500\r\nTZOFFSETTO:-0400\r\nDTSTART:19700308T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZNAME:EST\r\nTZOFFSETFROM:-0400\r\nTZOFFSETTO:-0500\r\nDTSTART:19701101T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\r\nEND:STANDARD");
register("TZID:America/La_Paz\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:America/La_Paz\r\nBEGIN:STANDARD\r\nTZNAME:%z\r\nTZOFFSETFROM:-0400\r\nTZOFFSETTO:-0400\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:America/Lima\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:America/Lima\r\nBEGIN:STANDARD\r\nTZNAME:%z\r\nTZOFFSETFROM:-0500\r\nTZOFFSETTO:-0500\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:America/Los_Angeles\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:America/Los_Angeles\r\nBEGIN:DAYLIGHT\r\nTZNAME:PDT\r\nTZOFFSETFROM:-0800\r\nTZOFFSETTO:-0700\r\nDTSTART:19700308T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZNAME:PST\r\nTZOFFSETFROM:-0700\r\nTZOFFSETTO:-0800\r\nDTSTART:19701101T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\r\nEND:STANDARD");
register("TZID:America/Maceio\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:America/Maceio\r\nBEGIN:STANDARD\r\nTZNAME:%z\r\nTZOFFSETFROM:-0300\r\nTZOFFSETTO:-0300\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:America/Managua\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:America/Managua\r\nBEGIN:STANDARD\r\nTZNAME:CST\r\nTZOFFSETFROM:-0600\r\nTZOFFSETTO:-0600\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:America/Manaus\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:America/Manaus\r\nBEGIN:STANDARD\r\nTZNAME:%z\r\nTZOFFSETFROM:-0400\r\nTZOFFSETTO:-0400\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:America/Martinique\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:America/Martinique\r\nBEGIN:STANDARD\r\nTZNAME:AST\r\nTZOFFSETFROM:-0400\r\nTZOFFSETTO:-0400\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:America/Matamoros\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:America/Matamoros\r\nBEGIN:DAYLIGHT\r\nTZNAME:CDT\r\nTZOFFSETFROM:-0600\r\nTZOFFSETTO:-0500\r\nDTSTART:19700308T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZNAME:CST\r\nTZOFFSETFROM:-0500\r\nTZOFFSETTO:-0600\r\nDTSTART:19701101T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\r\nEND:STANDARD");
register("TZID:America/Mazatlan\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:America/Mazatlan\r\nBEGIN:STANDARD\r\nTZNAME:MST\r\nTZOFFSETFROM:-0700\r\nTZOFFSETTO:-0700\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:America/Menominee\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:America/Menominee\r\nBEGIN:DAYLIGHT\r\nTZNAME:CDT\r\nTZOFFSETFROM:-0600\r\nTZOFFSETTO:-0500\r\nDTSTART:19700308T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZNAME:CST\r\nTZOFFSETFROM:-0500\r\nTZOFFSETTO:-0600\r\nDTSTART:19701101T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\r\nEND:STANDARD");
register("TZID:America/Merida\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:America/Merida\r\nBEGIN:STANDARD\r\nTZNAME:CST\r\nTZOFFSETFROM:-0600\r\nTZOFFSETTO:-0600\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:America/Metlakatla\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:America/Metlakatla\r\nBEGIN:DAYLIGHT\r\nTZNAME:AKDT\r\nTZOFFSETFROM:-0900\r\nTZOFFSETTO:-0800\r\nDTSTART:19700308T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZNAME:AKST\r\nTZOFFSETFROM:-0800\r\nTZOFFSETTO:-0900\r\nDTSTART:19701101T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\r\nEND:STANDARD");
register("TZID:America/Mexico_City\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:America/Mexico_City\r\nBEGIN:STANDARD\r\nTZNAME:CST\r\nTZOFFSETFROM:-0600\r\nTZOFFSETTO:-0600\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:America/Miquelon\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:America/Miquelon\r\nBEGIN:DAYLIGHT\r\nTZNAME:%z\r\nTZOFFSETFROM:-0300\r\nTZOFFSETTO:-0200\r\nDTSTART:19700308T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZNAME:%z\r\nTZOFFSETFROM:-0200\r\nTZOFFSETTO:-0300\r\nDTSTART:19701101T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\r\nEND:STANDARD");
register("TZID:America/Moncton\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:America/Moncton\r\nBEGIN:DAYLIGHT\r\nTZNAME:ADT\r\nTZOFFSETFROM:-0400\r\nTZOFFSETTO:-0300\r\nDTSTART:19700308T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZNAME:AST\r\nTZOFFSETFROM:-0300\r\nTZOFFSETTO:-0400\r\nDTSTART:19701101T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\r\nEND:STANDARD");
register("TZID:America/Monterrey\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:America/Monterrey\r\nBEGIN:STANDARD\r\nTZNAME:CST\r\nTZOFFSETFROM:-0600\r\nTZOFFSETTO:-0600\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:America/Montevideo\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:America/Montevideo\r\nBEGIN:STANDARD\r\nTZNAME:%z\r\nTZOFFSETFROM:-0300\r\nTZOFFSETTO:-0300\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:America/New_York\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:America/New_York\r\nBEGIN:DAYLIGHT\r\nTZNAME:EDT\r\nTZOFFSETFROM:-0500\r\nTZOFFSETTO:-0400\r\nDTSTART:19700308T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZNAME:EST\r\nTZOFFSETFROM:-0400\r\nTZOFFSETTO:-0500\r\nDTSTART:19701101T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\r\nEND:STANDARD");
register("TZID:America/Nome\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:America/Nome\r\nBEGIN:DAYLIGHT\r\nTZNAME:AKDT\r\nTZOFFSETFROM:-0900\r\nTZOFFSETTO:-0800\r\nDTSTART:19700308T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZNAME:AKST\r\nTZOFFSETFROM:-0800\r\nTZOFFSETTO:-0900\r\nDTSTART:19701101T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\r\nEND:STANDARD");
register("TZID:America/Noronha\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:America/Noronha\r\nBEGIN:STANDARD\r\nTZNAME:%z\r\nTZOFFSETFROM:-0200\r\nTZOFFSETTO:-0200\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:America/North_Dakota/Beulah\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:America/North_Dakota/Beulah\r\nBEGIN:DAYLIGHT\r\nTZNAME:CDT\r\nTZOFFSETFROM:-0600\r\nTZOFFSETTO:-0500\r\nDTSTART:19700308T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZNAME:CST\r\nTZOFFSETFROM:-0500\r\nTZOFFSETTO:-0600\r\nDTSTART:19701101T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\r\nEND:STANDARD");
register("TZID:America/North_Dakota/Center\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:America/North_Dakota/Center\r\nBEGIN:DAYLIGHT\r\nTZNAME:CDT\r\nTZOFFSETFROM:-0600\r\nTZOFFSETTO:-0500\r\nDTSTART:19700308T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZNAME:CST\r\nTZOFFSETFROM:-0500\r\nTZOFFSETTO:-0600\r\nDTSTART:19701101T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\r\nEND:STANDARD");
register("TZID:America/North_Dakota/New_Salem\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:America/North_Dakota/New_Salem\r\nBEGIN:DAYLIGHT\r\nTZNAME:CDT\r\nTZOFFSETFROM:-0600\r\nTZOFFSETTO:-0500\r\nDTSTART:19700308T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZNAME:CST\r\nTZOFFSETFROM:-0500\r\nTZOFFSETTO:-0600\r\nDTSTART:19701101T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\r\nEND:STANDARD");
register("TZID:America/Nuuk\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:America/Nuuk\r\nBEGIN:DAYLIGHT\r\nTZNAME:%z\r\nTZOFFSETFROM:-0200\r\nTZOFFSETTO:-0100\r\nDTSTART:19700328T230000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SA\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZNAME:%z\r\nTZOFFSETFROM:-0100\r\nTZOFFSETTO:-0200\r\nDTSTART:19701025T000000\r\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\r\nEND:STANDARD");
register("TZID:America/Ojinaga\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:America/Ojinaga\r\nBEGIN:DAYLIGHT\r\nTZNAME:CDT\r\nTZOFFSETFROM:-0600\r\nTZOFFSETTO:-0500\r\nDTSTART:19700308T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZNAME:CST\r\nTZOFFSETFROM:-0500\r\nTZOFFSETTO:-0600\r\nDTSTART:19701101T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\r\nEND:STANDARD");
register("TZID:America/Panama\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:America/Panama\r\nBEGIN:STANDARD\r\nTZNAME:EST\r\nTZOFFSETFROM:-0500\r\nTZOFFSETTO:-0500\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:America/Paramaribo\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:America/Paramaribo\r\nBEGIN:STANDARD\r\nTZNAME:%z\r\nTZOFFSETFROM:-0300\r\nTZOFFSETTO:-0300\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:America/Phoenix\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:America/Phoenix\r\nBEGIN:STANDARD\r\nTZNAME:MST\r\nTZOFFSETFROM:-0700\r\nTZOFFSETTO:-0700\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:America/Port-au-Prince\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:America/Port-au-Prince\r\nBEGIN:DAYLIGHT\r\nTZNAME:EDT\r\nTZOFFSETFROM:-0500\r\nTZOFFSETTO:-0400\r\nDTSTART:19700308T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZNAME:EST\r\nTZOFFSETFROM:-0400\r\nTZOFFSETTO:-0500\r\nDTSTART:19701101T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\r\nEND:STANDARD");
register("TZID:America/Porto_Velho\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:America/Porto_Velho\r\nBEGIN:STANDARD\r\nTZNAME:%z\r\nTZOFFSETFROM:-0400\r\nTZOFFSETTO:-0400\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:America/Puerto_Rico\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:America/Puerto_Rico\r\nBEGIN:STANDARD\r\nTZNAME:AST\r\nTZOFFSETFROM:-0400\r\nTZOFFSETTO:-0400\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:America/Punta_Arenas\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:America/Punta_Arenas\r\nBEGIN:STANDARD\r\nTZNAME:%z\r\nTZOFFSETFROM:-0300\r\nTZOFFSETTO:-0300\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:America/Rankin_Inlet\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:America/Rankin_Inlet\r\nBEGIN:DAYLIGHT\r\nTZNAME:CDT\r\nTZOFFSETFROM:-0600\r\nTZOFFSETTO:-0500\r\nDTSTART:19700308T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZNAME:CST\r\nTZOFFSETFROM:-0500\r\nTZOFFSETTO:-0600\r\nDTSTART:19701101T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\r\nEND:STANDARD");
register("TZID:America/Recife\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:America/Recife\r\nBEGIN:STANDARD\r\nTZNAME:%z\r\nTZOFFSETFROM:-0300\r\nTZOFFSETTO:-0300\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:America/Regina\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:America/Regina\r\nBEGIN:STANDARD\r\nTZNAME:CST\r\nTZOFFSETFROM:-0600\r\nTZOFFSETTO:-0600\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:America/Resolute\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:America/Resolute\r\nBEGIN:STANDARD\r\nTZNAME:CST\r\nTZOFFSETFROM:-0500\r\nTZOFFSETTO:-0600\r\nDTSTART:19701101T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\r\nEND:STANDARD\r\nBEGIN:DAYLIGHT\r\nTZNAME:CDT\r\nTZOFFSETFROM:-0600\r\nTZOFFSETTO:-0500\r\nDTSTART:19700308T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\r\nEND:DAYLIGHT");
register("TZID:America/Rio_Branco\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:America/Rio_Branco\r\nBEGIN:STANDARD\r\nTZNAME:%z\r\nTZOFFSETFROM:-0500\r\nTZOFFSETTO:-0500\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:America/Santarem\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:America/Santarem\r\nBEGIN:STANDARD\r\nTZNAME:%z\r\nTZOFFSETFROM:-0300\r\nTZOFFSETTO:-0300\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:America/Santiago\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:America/Santiago\r\nBEGIN:STANDARD\r\nTZNAME:%z\r\nTZOFFSETFROM:-0300\r\nTZOFFSETTO:-0400\r\nDTSTART:19700405T000000\r\nRRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU\r\nEND:STANDARD\r\nBEGIN:DAYLIGHT\r\nTZNAME:%z\r\nTZOFFSETFROM:-0400\r\nTZOFFSETTO:-0300\r\nDTSTART:19700906T000000\r\nRRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=1SU\r\nEND:DAYLIGHT");
register("TZID:America/Santo_Domingo\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:America/Santo_Domingo\r\nBEGIN:STANDARD\r\nTZNAME:AST\r\nTZOFFSETFROM:-0400\r\nTZOFFSETTO:-0400\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:America/Sao_Paulo\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:America/Sao_Paulo\r\nBEGIN:STANDARD\r\nTZNAME:%z\r\nTZOFFSETFROM:-0300\r\nTZOFFSETTO:-0300\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:America/Scoresbysund\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:America/Scoresbysund\r\nBEGIN:STANDARD\r\nTZNAME:%z\r\nTZOFFSETFROM:-0100\r\nTZOFFSETTO:-0200\r\nDTSTART:19701025T000000\r\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\r\nEND:STANDARD\r\nBEGIN:DAYLIGHT\r\nTZNAME:%z\r\nTZOFFSETFROM:-0200\r\nTZOFFSETTO:-0100\r\nDTSTART:19700328T230000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SA\r\nEND:DAYLIGHT");
register("TZID:America/Sitka\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:America/Sitka\r\nBEGIN:DAYLIGHT\r\nTZNAME:AKDT\r\nTZOFFSETFROM:-0900\r\nTZOFFSETTO:-0800\r\nDTSTART:19700308T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZNAME:AKST\r\nTZOFFSETFROM:-0800\r\nTZOFFSETTO:-0900\r\nDTSTART:19701101T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\r\nEND:STANDARD");
register("TZID:America/St_Johns\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:America/St_Johns\r\nBEGIN:STANDARD\r\nTZNAME:NST\r\nTZOFFSETFROM:-0230\r\nTZOFFSETTO:-0330\r\nDTSTART:19701101T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\r\nEND:STANDARD\r\nBEGIN:DAYLIGHT\r\nTZNAME:NDT\r\nTZOFFSETFROM:-0330\r\nTZOFFSETTO:-0230\r\nDTSTART:19700308T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\r\nEND:DAYLIGHT");
register("TZID:America/Swift_Current\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:America/Swift_Current\r\nBEGIN:STANDARD\r\nTZNAME:CST\r\nTZOFFSETFROM:-0600\r\nTZOFFSETTO:-0600\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:America/Tegucigalpa\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:America/Tegucigalpa\r\nBEGIN:STANDARD\r\nTZNAME:CST\r\nTZOFFSETFROM:-0600\r\nTZOFFSETTO:-0600\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:America/Thule\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:America/Thule\r\nBEGIN:DAYLIGHT\r\nTZNAME:ADT\r\nTZOFFSETFROM:-0400\r\nTZOFFSETTO:-0300\r\nDTSTART:19700308T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZNAME:AST\r\nTZOFFSETFROM:-0300\r\nTZOFFSETTO:-0400\r\nDTSTART:19701101T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\r\nEND:STANDARD");
register("TZID:America/Tijuana\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:America/Tijuana\r\nBEGIN:DAYLIGHT\r\nTZNAME:PDT\r\nTZOFFSETFROM:-0800\r\nTZOFFSETTO:-0700\r\nDTSTART:19700308T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZNAME:PST\r\nTZOFFSETFROM:-0700\r\nTZOFFSETTO:-0800\r\nDTSTART:19701101T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\r\nEND:STANDARD");
register("TZID:America/Toronto\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:America/Toronto\r\nBEGIN:DAYLIGHT\r\nTZNAME:EDT\r\nTZOFFSETFROM:-0500\r\nTZOFFSETTO:-0400\r\nDTSTART:19700308T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZNAME:EST\r\nTZOFFSETFROM:-0400\r\nTZOFFSETTO:-0500\r\nDTSTART:19701101T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\r\nEND:STANDARD");
register("TZID:America/Vancouver\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:America/Vancouver\r\nBEGIN:DAYLIGHT\r\nTZNAME:PDT\r\nTZOFFSETFROM:-0800\r\nTZOFFSETTO:-0700\r\nDTSTART:19700308T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZNAME:PST\r\nTZOFFSETFROM:-0700\r\nTZOFFSETTO:-0800\r\nDTSTART:19701101T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\r\nEND:STANDARD");
register("TZID:America/Whitehorse\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:America/Whitehorse\r\nBEGIN:STANDARD\r\nTZNAME:MST\r\nTZOFFSETFROM:-0700\r\nTZOFFSETTO:-0700\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:America/Winnipeg\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:America/Winnipeg\r\nBEGIN:DAYLIGHT\r\nTZNAME:CDT\r\nTZOFFSETFROM:-0600\r\nTZOFFSETTO:-0500\r\nDTSTART:19700308T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZNAME:CST\r\nTZOFFSETFROM:-0500\r\nTZOFFSETTO:-0600\r\nDTSTART:19701101T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\r\nEND:STANDARD");
register("TZID:America/Yakutat\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:America/Yakutat\r\nBEGIN:DAYLIGHT\r\nTZNAME:AKDT\r\nTZOFFSETFROM:-0900\r\nTZOFFSETTO:-0800\r\nDTSTART:19700308T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZNAME:AKST\r\nTZOFFSETFROM:-0800\r\nTZOFFSETTO:-0900\r\nDTSTART:19701101T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\r\nEND:STANDARD");
register("TZID:Antarctica/Casey\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Antarctica/Casey\r\nBEGIN:STANDARD\r\nTZNAME:%z\r\nTZOFFSETFROM:+0800\r\nTZOFFSETTO:+0800\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:Antarctica/Davis\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Antarctica/Davis\r\nBEGIN:STANDARD\r\nTZNAME:%z\r\nTZOFFSETFROM:+0700\r\nTZOFFSETTO:+0700\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:Antarctica/Macquarie\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Antarctica/Macquarie\r\nBEGIN:STANDARD\r\nTZNAME:AEST\r\nTZOFFSETFROM:+1100\r\nTZOFFSETTO:+1000\r\nDTSTART:19700405T030000\r\nRRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU\r\nEND:STANDARD\r\nBEGIN:DAYLIGHT\r\nTZNAME:AEDT\r\nTZOFFSETFROM:+1000\r\nTZOFFSETTO:+1100\r\nDTSTART:19701004T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU\r\nEND:DAYLIGHT");
register("TZID:Antarctica/Mawson\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Antarctica/Mawson\r\nBEGIN:STANDARD\r\nTZNAME:%z\r\nTZOFFSETFROM:+0500\r\nTZOFFSETTO:+0500\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:Antarctica/Palmer\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Antarctica/Palmer\r\nBEGIN:STANDARD\r\nTZNAME:%z\r\nTZOFFSETFROM:-0300\r\nTZOFFSETTO:-0300\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:Antarctica/Rothera\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Antarctica/Rothera\r\nBEGIN:STANDARD\r\nTZNAME:%z\r\nTZOFFSETFROM:-0300\r\nTZOFFSETTO:-0300\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:Antarctica/Troll\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Antarctica/Troll\r\nBEGIN:DAYLIGHT\r\nTZNAME:+02\r\nTZOFFSETFROM:+0000\r\nTZOFFSETTO:+0200\r\nDTSTART:19700329T010000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZNAME:+00\r\nTZOFFSETFROM:+0200\r\nTZOFFSETTO:+0000\r\nDTSTART:19701025T030000\r\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\r\nEND:STANDARD");
register("TZID:Antarctica/Vostok\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Antarctica/Vostok\r\nBEGIN:STANDARD\r\nTZNAME:%z\r\nTZOFFSETFROM:+0500\r\nTZOFFSETTO:+0500\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:Asia/Almaty\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Asia/Almaty\r\nBEGIN:STANDARD\r\nTZNAME:%z\r\nTZOFFSETFROM:+0500\r\nTZOFFSETTO:+0500\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:Asia/Amman\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Asia/Amman\r\nBEGIN:STANDARD\r\nTZNAME:%z\r\nTZOFFSETFROM:+0300\r\nTZOFFSETTO:+0300\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:Asia/Anadyr\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Asia/Anadyr\r\nBEGIN:STANDARD\r\nTZNAME:%z\r\nTZOFFSETFROM:+1200\r\nTZOFFSETTO:+1200\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:Asia/Aqtau\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Asia/Aqtau\r\nBEGIN:STANDARD\r\nTZNAME:%z\r\nTZOFFSETFROM:+0500\r\nTZOFFSETTO:+0500\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:Asia/Aqtobe\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Asia/Aqtobe\r\nBEGIN:STANDARD\r\nTZNAME:%z\r\nTZOFFSETFROM:+0500\r\nTZOFFSETTO:+0500\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:Asia/Ashgabat\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Asia/Ashgabat\r\nBEGIN:STANDARD\r\nTZNAME:%z\r\nTZOFFSETFROM:+0500\r\nTZOFFSETTO:+0500\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:Asia/Atyrau\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Asia/Atyrau\r\nBEGIN:STANDARD\r\nTZNAME:%z\r\nTZOFFSETFROM:+0500\r\nTZOFFSETTO:+0500\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:Asia/Baghdad\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Asia/Baghdad\r\nBEGIN:STANDARD\r\nTZNAME:%z\r\nTZOFFSETFROM:+0300\r\nTZOFFSETTO:+0300\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:Asia/Baku\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Asia/Baku\r\nBEGIN:STANDARD\r\nTZNAME:%z\r\nTZOFFSETFROM:+0400\r\nTZOFFSETTO:+0400\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:Asia/Bangkok\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Asia/Bangkok\r\nBEGIN:STANDARD\r\nTZNAME:%z\r\nTZOFFSETFROM:+0700\r\nTZOFFSETTO:+0700\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:Asia/Barnaul\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Asia/Barnaul\r\nBEGIN:STANDARD\r\nTZNAME:%z\r\nTZOFFSETFROM:+0700\r\nTZOFFSETTO:+0700\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:Asia/Beirut\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Asia/Beirut\r\nBEGIN:DAYLIGHT\r\nTZNAME:EEST\r\nTZOFFSETFROM:+0200\r\nTZOFFSETTO:+0300\r\nDTSTART:19700329T000000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZNAME:EET\r\nTZOFFSETFROM:+0300\r\nTZOFFSETTO:+0200\r\nDTSTART:19701025T000000\r\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\r\nEND:STANDARD");
register("TZID:Asia/Bishkek\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Asia/Bishkek\r\nBEGIN:STANDARD\r\nTZNAME:%z\r\nTZOFFSETFROM:+0600\r\nTZOFFSETTO:+0600\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:Asia/Chita\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Asia/Chita\r\nBEGIN:STANDARD\r\nTZNAME:%z\r\nTZOFFSETFROM:+0900\r\nTZOFFSETTO:+0900\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:Asia/Colombo\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Asia/Colombo\r\nBEGIN:STANDARD\r\nTZNAME:%z\r\nTZOFFSETFROM:+0530\r\nTZOFFSETTO:+0530\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:Asia/Damascus\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Asia/Damascus\r\nBEGIN:STANDARD\r\nTZNAME:%z\r\nTZOFFSETFROM:+0300\r\nTZOFFSETTO:+0300\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:Asia/Dhaka\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Asia/Dhaka\r\nBEGIN:STANDARD\r\nTZNAME:%z\r\nTZOFFSETFROM:+0600\r\nTZOFFSETTO:+0600\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:Asia/Dili\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Asia/Dili\r\nBEGIN:STANDARD\r\nTZNAME:%z\r\nTZOFFSETFROM:+0900\r\nTZOFFSETTO:+0900\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:Asia/Dubai\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Asia/Dubai\r\nBEGIN:STANDARD\r\nTZNAME:%z\r\nTZOFFSETFROM:+0400\r\nTZOFFSETTO:+0400\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:Asia/Dushanbe\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Asia/Dushanbe\r\nBEGIN:STANDARD\r\nTZNAME:%z\r\nTZOFFSETFROM:+0500\r\nTZOFFSETTO:+0500\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:Asia/Famagusta\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Asia/Famagusta\r\nBEGIN:DAYLIGHT\r\nTZNAME:EEST\r\nTZOFFSETFROM:+0200\r\nTZOFFSETTO:+0300\r\nDTSTART:19700329T030000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZNAME:EET\r\nTZOFFSETFROM:+0300\r\nTZOFFSETTO:+0200\r\nDTSTART:19701025T040000\r\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\r\nEND:STANDARD");
register("TZID:Asia/Gaza\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Asia/Gaza\r\nBEGIN:DAYLIGHT\r\nTZNAME:EEST\r\nTZOFFSETFROM:+0200\r\nTZOFFSETTO:+0300\r\nDTSTART:19700328T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SA\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZNAME:EET\r\nTZOFFSETFROM:+0300\r\nTZOFFSETTO:+0200\r\nDTSTART:19701024T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SA\r\nEND:STANDARD");
register("TZID:Asia/Hebron\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Asia/Hebron\r\nBEGIN:DAYLIGHT\r\nTZNAME:EEST\r\nTZOFFSETFROM:+0200\r\nTZOFFSETTO:+0300\r\nDTSTART:19700328T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SA\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZNAME:EET\r\nTZOFFSETFROM:+0300\r\nTZOFFSETTO:+0200\r\nDTSTART:19701024T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SA\r\nEND:STANDARD");
register("TZID:Asia/Ho_Chi_Minh\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Asia/Ho_Chi_Minh\r\nBEGIN:STANDARD\r\nTZNAME:%z\r\nTZOFFSETFROM:+0700\r\nTZOFFSETTO:+0700\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:Asia/Hong_Kong\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Asia/Hong_Kong\r\nBEGIN:STANDARD\r\nTZNAME:HKT\r\nTZOFFSETFROM:+0800\r\nTZOFFSETTO:+0800\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:Asia/Hovd\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Asia/Hovd\r\nBEGIN:STANDARD\r\nTZNAME:%z\r\nTZOFFSETFROM:+0700\r\nTZOFFSETTO:+0700\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:Asia/Irkutsk\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Asia/Irkutsk\r\nBEGIN:STANDARD\r\nTZNAME:%z\r\nTZOFFSETFROM:+0800\r\nTZOFFSETTO:+0800\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:Asia/Jakarta\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Asia/Jakarta\r\nBEGIN:STANDARD\r\nTZNAME:WIB\r\nTZOFFSETFROM:+0700\r\nTZOFFSETTO:+0700\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:Asia/Jayapura\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Asia/Jayapura\r\nBEGIN:STANDARD\r\nTZNAME:WIT\r\nTZOFFSETFROM:+0900\r\nTZOFFSETTO:+0900\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:Asia/Jerusalem\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Asia/Jerusalem\r\nBEGIN:DAYLIGHT\r\nTZNAME:IDT\r\nTZOFFSETFROM:+0200\r\nTZOFFSETTO:+0300\r\nDTSTART:19700327T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1FR\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZNAME:IST\r\nTZOFFSETFROM:+0300\r\nTZOFFSETTO:+0200\r\nDTSTART:19701025T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\r\nEND:STANDARD");
register("TZID:Asia/Kabul\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Asia/Kabul\r\nBEGIN:STANDARD\r\nTZNAME:%z\r\nTZOFFSETFROM:+0430\r\nTZOFFSETTO:+0430\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:Asia/Kamchatka\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Asia/Kamchatka\r\nBEGIN:STANDARD\r\nTZNAME:%z\r\nTZOFFSETFROM:+1200\r\nTZOFFSETTO:+1200\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:Asia/Karachi\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Asia/Karachi\r\nBEGIN:STANDARD\r\nTZNAME:PKT\r\nTZOFFSETFROM:+0500\r\nTZOFFSETTO:+0500\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:Asia/Kathmandu\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Asia/Kathmandu\r\nBEGIN:STANDARD\r\nTZNAME:%z\r\nTZOFFSETFROM:+0545\r\nTZOFFSETTO:+0545\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:Asia/Khandyga\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Asia/Khandyga\r\nBEGIN:STANDARD\r\nTZNAME:%z\r\nTZOFFSETFROM:+0900\r\nTZOFFSETTO:+0900\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:Asia/Kolkata\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Asia/Kolkata\r\nBEGIN:STANDARD\r\nTZNAME:IST\r\nTZOFFSETFROM:+0530\r\nTZOFFSETTO:+0530\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:Asia/Krasnoyarsk\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Asia/Krasnoyarsk\r\nBEGIN:STANDARD\r\nTZNAME:%z\r\nTZOFFSETFROM:+0700\r\nTZOFFSETTO:+0700\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:Asia/Kuching\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Asia/Kuching\r\nBEGIN:STANDARD\r\nTZNAME:%z\r\nTZOFFSETFROM:+0800\r\nTZOFFSETTO:+0800\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:Asia/Macau\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Asia/Macau\r\nBEGIN:STANDARD\r\nTZNAME:CST\r\nTZOFFSETFROM:+0800\r\nTZOFFSETTO:+0800\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:Asia/Magadan\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Asia/Magadan\r\nBEGIN:STANDARD\r\nTZNAME:%z\r\nTZOFFSETFROM:+1100\r\nTZOFFSETTO:+1100\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:Asia/Makassar\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Asia/Makassar\r\nBEGIN:STANDARD\r\nTZNAME:WITA\r\nTZOFFSETFROM:+0800\r\nTZOFFSETTO:+0800\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:Asia/Manila\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Asia/Manila\r\nBEGIN:STANDARD\r\nTZNAME:PST\r\nTZOFFSETFROM:+0800\r\nTZOFFSETTO:+0800\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:Asia/Nicosia\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Asia/Nicosia\r\nBEGIN:STANDARD\r\nTZNAME:EET\r\nTZOFFSETFROM:+0300\r\nTZOFFSETTO:+0200\r\nDTSTART:19701025T040000\r\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\r\nEND:STANDARD\r\nBEGIN:DAYLIGHT\r\nTZNAME:EEST\r\nTZOFFSETFROM:+0200\r\nTZOFFSETTO:+0300\r\nDTSTART:19700329T030000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\r\nEND:DAYLIGHT");
register("TZID:Asia/Novokuznetsk\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Asia/Novokuznetsk\r\nBEGIN:STANDARD\r\nTZNAME:%z\r\nTZOFFSETFROM:+0700\r\nTZOFFSETTO:+0700\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:Asia/Novosibirsk\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Asia/Novosibirsk\r\nBEGIN:STANDARD\r\nTZNAME:%z\r\nTZOFFSETFROM:+0700\r\nTZOFFSETTO:+0700\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:Asia/Omsk\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Asia/Omsk\r\nBEGIN:STANDARD\r\nTZNAME:%z\r\nTZOFFSETFROM:+0600\r\nTZOFFSETTO:+0600\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:Asia/Oral\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Asia/Oral\r\nBEGIN:STANDARD\r\nTZNAME:%z\r\nTZOFFSETFROM:+0500\r\nTZOFFSETTO:+0500\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:Asia/Pontianak\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Asia/Pontianak\r\nBEGIN:STANDARD\r\nTZNAME:WIB\r\nTZOFFSETFROM:+0700\r\nTZOFFSETTO:+0700\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:Asia/Pyongyang\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Asia/Pyongyang\r\nBEGIN:STANDARD\r\nTZNAME:KST\r\nTZOFFSETFROM:+0900\r\nTZOFFSETTO:+0900\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:Asia/Qatar\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Asia/Qatar\r\nBEGIN:STANDARD\r\nTZNAME:%z\r\nTZOFFSETFROM:+0300\r\nTZOFFSETTO:+0300\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:Asia/Qostanay\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Asia/Qostanay\r\nBEGIN:STANDARD\r\nTZNAME:%z\r\nTZOFFSETFROM:+0500\r\nTZOFFSETTO:+0500\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:Asia/Qyzylorda\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Asia/Qyzylorda\r\nBEGIN:STANDARD\r\nTZNAME:%z\r\nTZOFFSETFROM:+0500\r\nTZOFFSETTO:+0500\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:Asia/Riyadh\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Asia/Riyadh\r\nBEGIN:STANDARD\r\nTZNAME:%z\r\nTZOFFSETFROM:+0300\r\nTZOFFSETTO:+0300\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:Asia/Sakhalin\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Asia/Sakhalin\r\nBEGIN:STANDARD\r\nTZNAME:%z\r\nTZOFFSETFROM:+1100\r\nTZOFFSETTO:+1100\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:Asia/Samarkand\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Asia/Samarkand\r\nBEGIN:STANDARD\r\nTZNAME:%z\r\nTZOFFSETFROM:+0500\r\nTZOFFSETTO:+0500\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:Asia/Seoul\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Asia/Seoul\r\nBEGIN:STANDARD\r\nTZNAME:KST\r\nTZOFFSETFROM:+0900\r\nTZOFFSETTO:+0900\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:Asia/Shanghai\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Asia/Shanghai\r\nBEGIN:STANDARD\r\nTZNAME:CST\r\nTZOFFSETFROM:+0800\r\nTZOFFSETTO:+0800\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:Asia/Singapore\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Asia/Singapore\r\nBEGIN:STANDARD\r\nTZNAME:%z\r\nTZOFFSETFROM:+0800\r\nTZOFFSETTO:+0800\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:Asia/Srednekolymsk\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Asia/Srednekolymsk\r\nBEGIN:STANDARD\r\nTZNAME:%z\r\nTZOFFSETFROM:+1100\r\nTZOFFSETTO:+1100\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:Asia/Taipei\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Asia/Taipei\r\nBEGIN:STANDARD\r\nTZNAME:CST\r\nTZOFFSETFROM:+0800\r\nTZOFFSETTO:+0800\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:Asia/Tashkent\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Asia/Tashkent\r\nBEGIN:STANDARD\r\nTZNAME:%z\r\nTZOFFSETFROM:+0500\r\nTZOFFSETTO:+0500\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:Asia/Tbilisi\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Asia/Tbilisi\r\nBEGIN:STANDARD\r\nTZNAME:%z\r\nTZOFFSETFROM:+0400\r\nTZOFFSETTO:+0400\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:Asia/Tehran\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Asia/Tehran\r\nBEGIN:STANDARD\r\nTZNAME:%z\r\nTZOFFSETFROM:+0330\r\nTZOFFSETTO:+0330\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:Asia/Thimphu\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Asia/Thimphu\r\nBEGIN:STANDARD\r\nTZNAME:%z\r\nTZOFFSETFROM:+0600\r\nTZOFFSETTO:+0600\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:Asia/Tokyo\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Asia/Tokyo\r\nBEGIN:STANDARD\r\nTZNAME:JST\r\nTZOFFSETFROM:+0900\r\nTZOFFSETTO:+0900\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:Asia/Tomsk\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Asia/Tomsk\r\nBEGIN:STANDARD\r\nTZNAME:%z\r\nTZOFFSETFROM:+0700\r\nTZOFFSETTO:+0700\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:Asia/Ulaanbaatar\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Asia/Ulaanbaatar\r\nBEGIN:STANDARD\r\nTZNAME:%z\r\nTZOFFSETFROM:+0800\r\nTZOFFSETTO:+0800\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:Asia/Urumqi\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Asia/Urumqi\r\nBEGIN:STANDARD\r\nTZNAME:%z\r\nTZOFFSETFROM:+0600\r\nTZOFFSETTO:+0600\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:Asia/Ust-Nera\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Asia/Ust-Nera\r\nBEGIN:STANDARD\r\nTZNAME:%z\r\nTZOFFSETFROM:+1000\r\nTZOFFSETTO:+1000\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:Asia/Vladivostok\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Asia/Vladivostok\r\nBEGIN:STANDARD\r\nTZNAME:%z\r\nTZOFFSETFROM:+1000\r\nTZOFFSETTO:+1000\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:Asia/Yakutsk\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Asia/Yakutsk\r\nBEGIN:STANDARD\r\nTZNAME:%z\r\nTZOFFSETFROM:+0900\r\nTZOFFSETTO:+0900\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:Asia/Yangon\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Asia/Yangon\r\nBEGIN:STANDARD\r\nTZNAME:%z\r\nTZOFFSETFROM:+0630\r\nTZOFFSETTO:+0630\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:Asia/Yekaterinburg\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Asia/Yekaterinburg\r\nBEGIN:STANDARD\r\nTZNAME:%z\r\nTZOFFSETFROM:+0500\r\nTZOFFSETTO:+0500\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:Asia/Yerevan\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Asia/Yerevan\r\nBEGIN:STANDARD\r\nTZNAME:%z\r\nTZOFFSETFROM:+0400\r\nTZOFFSETTO:+0400\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:Atlantic/Azores\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Atlantic/Azores\r\nBEGIN:DAYLIGHT\r\nTZNAME:%z\r\nTZOFFSETFROM:-0100\r\nTZOFFSETTO:+0000\r\nDTSTART:19700329T000000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZNAME:%z\r\nTZOFFSETFROM:+0000\r\nTZOFFSETTO:-0100\r\nDTSTART:19701025T010000\r\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\r\nEND:STANDARD");
register("TZID:Atlantic/Bermuda\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Atlantic/Bermuda\r\nBEGIN:DAYLIGHT\r\nTZNAME:ADT\r\nTZOFFSETFROM:-0400\r\nTZOFFSETTO:-0300\r\nDTSTART:19700308T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZNAME:AST\r\nTZOFFSETFROM:-0300\r\nTZOFFSETTO:-0400\r\nDTSTART:19701101T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\r\nEND:STANDARD");
register("TZID:Atlantic/Canary\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Atlantic/Canary\r\nBEGIN:DAYLIGHT\r\nTZNAME:WEST\r\nTZOFFSETFROM:+0000\r\nTZOFFSETTO:+0100\r\nDTSTART:19700329T010000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZNAME:WET\r\nTZOFFSETFROM:+0100\r\nTZOFFSETTO:+0000\r\nDTSTART:19701025T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\r\nEND:STANDARD");
register("TZID:Atlantic/Cape_Verde\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Atlantic/Cape_Verde\r\nBEGIN:STANDARD\r\nTZNAME:%z\r\nTZOFFSETFROM:-0100\r\nTZOFFSETTO:-0100\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:Atlantic/Faroe\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Atlantic/Faroe\r\nBEGIN:DAYLIGHT\r\nTZNAME:WEST\r\nTZOFFSETFROM:+0000\r\nTZOFFSETTO:+0100\r\nDTSTART:19700329T010000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZNAME:WET\r\nTZOFFSETFROM:+0100\r\nTZOFFSETTO:+0000\r\nDTSTART:19701025T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\r\nEND:STANDARD");
register("TZID:Atlantic/Madeira\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Atlantic/Madeira\r\nBEGIN:DAYLIGHT\r\nTZNAME:WEST\r\nTZOFFSETFROM:+0000\r\nTZOFFSETTO:+0100\r\nDTSTART:19700329T010000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZNAME:WET\r\nTZOFFSETFROM:+0100\r\nTZOFFSETTO:+0000\r\nDTSTART:19701025T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\r\nEND:STANDARD");
register("TZID:Atlantic/South_Georgia\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Atlantic/South_Georgia\r\nBEGIN:STANDARD\r\nTZNAME:%z\r\nTZOFFSETFROM:-0200\r\nTZOFFSETTO:-0200\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:Atlantic/Stanley\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Atlantic/Stanley\r\nBEGIN:STANDARD\r\nTZNAME:%z\r\nTZOFFSETFROM:-0300\r\nTZOFFSETTO:-0300\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:Australia/Adelaide\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Australia/Adelaide\r\nBEGIN:STANDARD\r\nTZNAME:ACST\r\nTZOFFSETFROM:+1030\r\nTZOFFSETTO:+0930\r\nDTSTART:19700405T030000\r\nRRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU\r\nEND:STANDARD\r\nBEGIN:DAYLIGHT\r\nTZNAME:ACDT\r\nTZOFFSETFROM:+0930\r\nTZOFFSETTO:+1030\r\nDTSTART:19701004T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU\r\nEND:DAYLIGHT");
register("TZID:Australia/Brisbane\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Australia/Brisbane\r\nBEGIN:STANDARD\r\nTZNAME:AEST\r\nTZOFFSETFROM:+1000\r\nTZOFFSETTO:+1000\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:Australia/Broken_Hill\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Australia/Broken_Hill\r\nBEGIN:STANDARD\r\nTZNAME:ACST\r\nTZOFFSETFROM:+1030\r\nTZOFFSETTO:+0930\r\nDTSTART:19700405T030000\r\nRRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU\r\nEND:STANDARD\r\nBEGIN:DAYLIGHT\r\nTZNAME:ACDT\r\nTZOFFSETFROM:+0930\r\nTZOFFSETTO:+1030\r\nDTSTART:19701004T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU\r\nEND:DAYLIGHT");
register("TZID:Australia/Darwin\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Australia/Darwin\r\nBEGIN:STANDARD\r\nTZNAME:ACST\r\nTZOFFSETFROM:+0930\r\nTZOFFSETTO:+0930\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:Australia/Eucla\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Australia/Eucla\r\nBEGIN:STANDARD\r\nTZNAME:%z\r\nTZOFFSETFROM:+0845\r\nTZOFFSETTO:+0845\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:Australia/Hobart\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Australia/Hobart\r\nBEGIN:DAYLIGHT\r\nTZNAME:AEDT\r\nTZOFFSETFROM:+1000\r\nTZOFFSETTO:+1100\r\nDTSTART:19701004T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZNAME:AEST\r\nTZOFFSETFROM:+1100\r\nTZOFFSETTO:+1000\r\nDTSTART:19700405T030000\r\nRRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU\r\nEND:STANDARD");
register("TZID:Australia/Lindeman\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Australia/Lindeman\r\nBEGIN:STANDARD\r\nTZNAME:AEST\r\nTZOFFSETFROM:+1000\r\nTZOFFSETTO:+1000\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:Australia/Lord_Howe\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Australia/Lord_Howe\r\nBEGIN:STANDARD\r\nTZNAME:%z\r\nTZOFFSETFROM:+1100\r\nTZOFFSETTO:+1030\r\nDTSTART:19700405T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU\r\nEND:STANDARD\r\nBEGIN:DAYLIGHT\r\nTZNAME:%z\r\nTZOFFSETFROM:+1030\r\nTZOFFSETTO:+1100\r\nDTSTART:19701004T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU\r\nEND:DAYLIGHT");
register("TZID:Australia/Melbourne\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Australia/Melbourne\r\nBEGIN:STANDARD\r\nTZNAME:AEST\r\nTZOFFSETFROM:+1100\r\nTZOFFSETTO:+1000\r\nDTSTART:19700405T030000\r\nRRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU\r\nEND:STANDARD\r\nBEGIN:DAYLIGHT\r\nTZNAME:AEDT\r\nTZOFFSETFROM:+1000\r\nTZOFFSETTO:+1100\r\nDTSTART:19701004T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU\r\nEND:DAYLIGHT");
register("TZID:Australia/Perth\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Australia/Perth\r\nBEGIN:STANDARD\r\nTZNAME:AWST\r\nTZOFFSETFROM:+0800\r\nTZOFFSETTO:+0800\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:Australia/Sydney\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Australia/Sydney\r\nBEGIN:STANDARD\r\nTZNAME:AEST\r\nTZOFFSETFROM:+1100\r\nTZOFFSETTO:+1000\r\nDTSTART:19700405T030000\r\nRRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU\r\nEND:STANDARD\r\nBEGIN:DAYLIGHT\r\nTZNAME:AEDT\r\nTZOFFSETFROM:+1000\r\nTZOFFSETTO:+1100\r\nDTSTART:19701004T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU\r\nEND:DAYLIGHT");
register("TZID:Etc/GMT\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Etc/GMT\r\nBEGIN:STANDARD\r\nTZNAME:GMT\r\nTZOFFSETFROM:+0000\r\nTZOFFSETTO:+0000\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:Etc/GMT+1\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Etc/GMT+1\r\nBEGIN:STANDARD\r\nTZNAME:%z\r\nTZOFFSETFROM:-0100\r\nTZOFFSETTO:-0100\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:Etc/GMT+10\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Etc/GMT+10\r\nBEGIN:STANDARD\r\nTZNAME:%z\r\nTZOFFSETFROM:-1000\r\nTZOFFSETTO:-1000\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:Etc/GMT+11\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Etc/GMT+11\r\nBEGIN:STANDARD\r\nTZNAME:%z\r\nTZOFFSETFROM:-1100\r\nTZOFFSETTO:-1100\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:Etc/GMT+12\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Etc/GMT+12\r\nBEGIN:STANDARD\r\nTZNAME:%z\r\nTZOFFSETFROM:-1200\r\nTZOFFSETTO:-1200\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:Etc/GMT+2\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Etc/GMT+2\r\nBEGIN:STANDARD\r\nTZNAME:%z\r\nTZOFFSETFROM:-0200\r\nTZOFFSETTO:-0200\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:Etc/GMT+3\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Etc/GMT+3\r\nBEGIN:STANDARD\r\nTZNAME:%z\r\nTZOFFSETFROM:-0300\r\nTZOFFSETTO:-0300\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:Etc/GMT+4\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Etc/GMT+4\r\nBEGIN:STANDARD\r\nTZNAME:%z\r\nTZOFFSETFROM:-0400\r\nTZOFFSETTO:-0400\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:Etc/GMT+5\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Etc/GMT+5\r\nBEGIN:STANDARD\r\nTZNAME:%z\r\nTZOFFSETFROM:-0500\r\nTZOFFSETTO:-0500\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:Etc/GMT+6\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Etc/GMT+6\r\nBEGIN:STANDARD\r\nTZNAME:%z\r\nTZOFFSETFROM:-0600\r\nTZOFFSETTO:-0600\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:Etc/GMT+7\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Etc/GMT+7\r\nBEGIN:STANDARD\r\nTZNAME:%z\r\nTZOFFSETFROM:-0700\r\nTZOFFSETTO:-0700\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:Etc/GMT+8\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Etc/GMT+8\r\nBEGIN:STANDARD\r\nTZNAME:%z\r\nTZOFFSETFROM:-0800\r\nTZOFFSETTO:-0800\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:Etc/GMT+9\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Etc/GMT+9\r\nBEGIN:STANDARD\r\nTZNAME:%z\r\nTZOFFSETFROM:-0900\r\nTZOFFSETTO:-0900\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:Etc/GMT-1\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Etc/GMT-1\r\nBEGIN:STANDARD\r\nTZNAME:%z\r\nTZOFFSETFROM:+0100\r\nTZOFFSETTO:+0100\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:Etc/GMT-10\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Etc/GMT-10\r\nBEGIN:STANDARD\r\nTZNAME:%z\r\nTZOFFSETFROM:+1000\r\nTZOFFSETTO:+1000\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:Etc/GMT-11\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Etc/GMT-11\r\nBEGIN:STANDARD\r\nTZNAME:%z\r\nTZOFFSETFROM:+1100\r\nTZOFFSETTO:+1100\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:Etc/GMT-12\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Etc/GMT-12\r\nBEGIN:STANDARD\r\nTZNAME:%z\r\nTZOFFSETFROM:+1200\r\nTZOFFSETTO:+1200\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:Etc/GMT-13\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Etc/GMT-13\r\nBEGIN:STANDARD\r\nTZNAME:%z\r\nTZOFFSETFROM:+1300\r\nTZOFFSETTO:+1300\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:Etc/GMT-14\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Etc/GMT-14\r\nBEGIN:STANDARD\r\nTZNAME:%z\r\nTZOFFSETFROM:+1400\r\nTZOFFSETTO:+1400\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:Etc/GMT-2\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Etc/GMT-2\r\nBEGIN:STANDARD\r\nTZNAME:%z\r\nTZOFFSETFROM:+0200\r\nTZOFFSETTO:+0200\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:Etc/GMT-3\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Etc/GMT-3\r\nBEGIN:STANDARD\r\nTZNAME:%z\r\nTZOFFSETFROM:+0300\r\nTZOFFSETTO:+0300\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:Etc/GMT-4\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Etc/GMT-4\r\nBEGIN:STANDARD\r\nTZNAME:%z\r\nTZOFFSETFROM:+0400\r\nTZOFFSETTO:+0400\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:Etc/GMT-5\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Etc/GMT-5\r\nBEGIN:STANDARD\r\nTZNAME:%z\r\nTZOFFSETFROM:+0500\r\nTZOFFSETTO:+0500\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:Etc/GMT-6\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Etc/GMT-6\r\nBEGIN:STANDARD\r\nTZNAME:%z\r\nTZOFFSETFROM:+0600\r\nTZOFFSETTO:+0600\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:Etc/GMT-7\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Etc/GMT-7\r\nBEGIN:STANDARD\r\nTZNAME:%z\r\nTZOFFSETFROM:+0700\r\nTZOFFSETTO:+0700\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:Etc/GMT-8\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Etc/GMT-8\r\nBEGIN:STANDARD\r\nTZNAME:%z\r\nTZOFFSETFROM:+0800\r\nTZOFFSETTO:+0800\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:Etc/GMT-9\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Etc/GMT-9\r\nBEGIN:STANDARD\r\nTZNAME:%z\r\nTZOFFSETFROM:+0900\r\nTZOFFSETTO:+0900\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:Etc/UTC\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Etc/UTC\r\nBEGIN:STANDARD\r\nTZNAME:UTC\r\nTZOFFSETFROM:+0000\r\nTZOFFSETTO:+0000\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:Europe/Andorra\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Europe/Andorra\r\nBEGIN:DAYLIGHT\r\nTZNAME:CEST\r\nTZOFFSETFROM:+0100\r\nTZOFFSETTO:+0200\r\nDTSTART:19700329T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZNAME:CET\r\nTZOFFSETFROM:+0200\r\nTZOFFSETTO:+0100\r\nDTSTART:19701025T030000\r\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\r\nEND:STANDARD");
register("TZID:Europe/Astrakhan\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Europe/Astrakhan\r\nBEGIN:STANDARD\r\nTZNAME:%z\r\nTZOFFSETFROM:+0400\r\nTZOFFSETTO:+0400\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:Europe/Athens\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Europe/Athens\r\nBEGIN:DAYLIGHT\r\nTZNAME:EEST\r\nTZOFFSETFROM:+0200\r\nTZOFFSETTO:+0300\r\nDTSTART:19700329T030000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZNAME:EET\r\nTZOFFSETFROM:+0300\r\nTZOFFSETTO:+0200\r\nDTSTART:19701025T040000\r\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\r\nEND:STANDARD");
register("TZID:Europe/Belgrade\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Europe/Belgrade\r\nBEGIN:DAYLIGHT\r\nTZNAME:CEST\r\nTZOFFSETFROM:+0100\r\nTZOFFSETTO:+0200\r\nDTSTART:19700329T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZNAME:CET\r\nTZOFFSETFROM:+0200\r\nTZOFFSETTO:+0100\r\nDTSTART:19701025T030000\r\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\r\nEND:STANDARD");
register("TZID:Europe/Berlin\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Europe/Berlin\r\nBEGIN:DAYLIGHT\r\nTZNAME:CEST\r\nTZOFFSETFROM:+0100\r\nTZOFFSETTO:+0200\r\nDTSTART:19700329T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZNAME:CET\r\nTZOFFSETFROM:+0200\r\nTZOFFSETTO:+0100\r\nDTSTART:19701025T030000\r\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\r\nEND:STANDARD");
register("TZID:Europe/Brussels\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Europe/Brussels\r\nBEGIN:DAYLIGHT\r\nTZNAME:CEST\r\nTZOFFSETFROM:+0100\r\nTZOFFSETTO:+0200\r\nDTSTART:19700329T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZNAME:CET\r\nTZOFFSETFROM:+0200\r\nTZOFFSETTO:+0100\r\nDTSTART:19701025T030000\r\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\r\nEND:STANDARD");
register("TZID:Europe/Bucharest\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Europe/Bucharest\r\nBEGIN:DAYLIGHT\r\nTZNAME:EEST\r\nTZOFFSETFROM:+0200\r\nTZOFFSETTO:+0300\r\nDTSTART:19700329T030000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZNAME:EET\r\nTZOFFSETFROM:+0300\r\nTZOFFSETTO:+0200\r\nDTSTART:19701025T040000\r\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\r\nEND:STANDARD");
register("TZID:Europe/Budapest\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Europe/Budapest\r\nBEGIN:DAYLIGHT\r\nTZNAME:CEST\r\nTZOFFSETFROM:+0100\r\nTZOFFSETTO:+0200\r\nDTSTART:19700329T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZNAME:CET\r\nTZOFFSETFROM:+0200\r\nTZOFFSETTO:+0100\r\nDTSTART:19701025T030000\r\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\r\nEND:STANDARD");
register("TZID:Europe/Chisinau\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Europe/Chisinau\r\nBEGIN:DAYLIGHT\r\nTZNAME:EEST\r\nTZOFFSETFROM:+0200\r\nTZOFFSETTO:+0300\r\nDTSTART:19700329T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZNAME:EET\r\nTZOFFSETFROM:+0300\r\nTZOFFSETTO:+0200\r\nDTSTART:19701025T030000\r\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\r\nEND:STANDARD");
register("TZID:Europe/Dublin\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Europe/Dublin\r\nBEGIN:STANDARD\r\nTZNAME:IST\r\nTZOFFSETFROM:+0000\r\nTZOFFSETTO:+0100\r\nDTSTART:19700329T010000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\r\nEND:STANDARD\r\nBEGIN:DAYLIGHT\r\nTZNAME:GMT\r\nTZOFFSETFROM:+0100\r\nTZOFFSETTO:+0000\r\nDTSTART:19701025T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\r\nEND:DAYLIGHT");
register("TZID:Europe/Gibraltar\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Europe/Gibraltar\r\nBEGIN:DAYLIGHT\r\nTZNAME:CEST\r\nTZOFFSETFROM:+0100\r\nTZOFFSETTO:+0200\r\nDTSTART:19700329T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZNAME:CET\r\nTZOFFSETFROM:+0200\r\nTZOFFSETTO:+0100\r\nDTSTART:19701025T030000\r\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\r\nEND:STANDARD");
register("TZID:Europe/Helsinki\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Europe/Helsinki\r\nBEGIN:DAYLIGHT\r\nTZNAME:EEST\r\nTZOFFSETFROM:+0200\r\nTZOFFSETTO:+0300\r\nDTSTART:19700329T030000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZNAME:EET\r\nTZOFFSETFROM:+0300\r\nTZOFFSETTO:+0200\r\nDTSTART:19701025T040000\r\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\r\nEND:STANDARD");
register("TZID:Europe/Istanbul\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Europe/Istanbul\r\nBEGIN:STANDARD\r\nTZNAME:%z\r\nTZOFFSETFROM:+0300\r\nTZOFFSETTO:+0300\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:Europe/Kaliningrad\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Europe/Kaliningrad\r\nBEGIN:STANDARD\r\nTZNAME:EET\r\nTZOFFSETFROM:+0200\r\nTZOFFSETTO:+0200\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:Europe/Kirov\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Europe/Kirov\r\nBEGIN:STANDARD\r\nTZNAME:MSK\r\nTZOFFSETFROM:+0300\r\nTZOFFSETTO:+0300\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:Europe/Kyiv\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Europe/Kyiv\r\nBEGIN:STANDARD\r\nTZNAME:EET\r\nTZOFFSETFROM:+0300\r\nTZOFFSETTO:+0200\r\nDTSTART:19701025T040000\r\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\r\nEND:STANDARD\r\nBEGIN:DAYLIGHT\r\nTZNAME:EEST\r\nTZOFFSETFROM:+0200\r\nTZOFFSETTO:+0300\r\nDTSTART:19700329T030000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\r\nEND:DAYLIGHT");
register("TZID:Europe/Lisbon\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Europe/Lisbon\r\nBEGIN:STANDARD\r\nTZNAME:WET\r\nTZOFFSETFROM:+0100\r\nTZOFFSETTO:+0000\r\nDTSTART:19701025T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\r\nEND:STANDARD\r\nBEGIN:DAYLIGHT\r\nTZNAME:WEST\r\nTZOFFSETFROM:+0000\r\nTZOFFSETTO:+0100\r\nDTSTART:19700329T010000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\r\nEND:DAYLIGHT");
register("TZID:Europe/London\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Europe/London\r\nBEGIN:DAYLIGHT\r\nTZNAME:BST\r\nTZOFFSETFROM:+0000\r\nTZOFFSETTO:+0100\r\nDTSTART:19700329T010000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZNAME:GMT\r\nTZOFFSETFROM:+0100\r\nTZOFFSETTO:+0000\r\nDTSTART:19701025T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\r\nEND:STANDARD");
register("TZID:Europe/Madrid\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Europe/Madrid\r\nBEGIN:DAYLIGHT\r\nTZNAME:CEST\r\nTZOFFSETFROM:+0100\r\nTZOFFSETTO:+0200\r\nDTSTART:19700329T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZNAME:CET\r\nTZOFFSETFROM:+0200\r\nTZOFFSETTO:+0100\r\nDTSTART:19701025T030000\r\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\r\nEND:STANDARD");
register("TZID:Europe/Malta\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Europe/Malta\r\nBEGIN:DAYLIGHT\r\nTZNAME:CEST\r\nTZOFFSETFROM:+0100\r\nTZOFFSETTO:+0200\r\nDTSTART:19700329T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZNAME:CET\r\nTZOFFSETFROM:+0200\r\nTZOFFSETTO:+0100\r\nDTSTART:19701025T030000\r\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\r\nEND:STANDARD");
register("TZID:Europe/Minsk\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Europe/Minsk\r\nBEGIN:STANDARD\r\nTZNAME:%z\r\nTZOFFSETFROM:+0300\r\nTZOFFSETTO:+0300\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:Europe/Moscow\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Europe/Moscow\r\nBEGIN:STANDARD\r\nTZNAME:MSK\r\nTZOFFSETFROM:+0300\r\nTZOFFSETTO:+0300\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:Europe/Paris\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Europe/Paris\r\nBEGIN:DAYLIGHT\r\nTZNAME:CEST\r\nTZOFFSETFROM:+0100\r\nTZOFFSETTO:+0200\r\nDTSTART:19700329T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZNAME:CET\r\nTZOFFSETFROM:+0200\r\nTZOFFSETTO:+0100\r\nDTSTART:19701025T030000\r\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\r\nEND:STANDARD");
register("TZID:Europe/Prague\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Europe/Prague\r\nBEGIN:DAYLIGHT\r\nTZNAME:CEST\r\nTZOFFSETFROM:+0100\r\nTZOFFSETTO:+0200\r\nDTSTART:19700329T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZNAME:CET\r\nTZOFFSETFROM:+0200\r\nTZOFFSETTO:+0100\r\nDTSTART:19701025T030000\r\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\r\nEND:STANDARD");
register("TZID:Europe/Riga\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Europe/Riga\r\nBEGIN:DAYLIGHT\r\nTZNAME:EEST\r\nTZOFFSETFROM:+0200\r\nTZOFFSETTO:+0300\r\nDTSTART:19700329T030000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZNAME:EET\r\nTZOFFSETFROM:+0300\r\nTZOFFSETTO:+0200\r\nDTSTART:19701025T040000\r\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\r\nEND:STANDARD");
register("TZID:Europe/Rome\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Europe/Rome\r\nBEGIN:DAYLIGHT\r\nTZNAME:CEST\r\nTZOFFSETFROM:+0100\r\nTZOFFSETTO:+0200\r\nDTSTART:19700329T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZNAME:CET\r\nTZOFFSETFROM:+0200\r\nTZOFFSETTO:+0100\r\nDTSTART:19701025T030000\r\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\r\nEND:STANDARD");
register("TZID:Europe/Samara\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Europe/Samara\r\nBEGIN:STANDARD\r\nTZNAME:%z\r\nTZOFFSETFROM:+0400\r\nTZOFFSETTO:+0400\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:Europe/Saratov\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Europe/Saratov\r\nBEGIN:STANDARD\r\nTZNAME:%z\r\nTZOFFSETFROM:+0400\r\nTZOFFSETTO:+0400\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:Europe/Simferopol\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Europe/Simferopol\r\nBEGIN:STANDARD\r\nTZNAME:MSK\r\nTZOFFSETFROM:+0300\r\nTZOFFSETTO:+0300\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:Europe/Sofia\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Europe/Sofia\r\nBEGIN:DAYLIGHT\r\nTZNAME:EEST\r\nTZOFFSETFROM:+0200\r\nTZOFFSETTO:+0300\r\nDTSTART:19700329T030000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZNAME:EET\r\nTZOFFSETFROM:+0300\r\nTZOFFSETTO:+0200\r\nDTSTART:19701025T040000\r\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\r\nEND:STANDARD");
register("TZID:Europe/Tallinn\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Europe/Tallinn\r\nBEGIN:DAYLIGHT\r\nTZNAME:EEST\r\nTZOFFSETFROM:+0200\r\nTZOFFSETTO:+0300\r\nDTSTART:19700329T030000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZNAME:EET\r\nTZOFFSETFROM:+0300\r\nTZOFFSETTO:+0200\r\nDTSTART:19701025T040000\r\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\r\nEND:STANDARD");
register("TZID:Europe/Tirane\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Europe/Tirane\r\nBEGIN:DAYLIGHT\r\nTZNAME:CEST\r\nTZOFFSETFROM:+0100\r\nTZOFFSETTO:+0200\r\nDTSTART:19700329T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZNAME:CET\r\nTZOFFSETFROM:+0200\r\nTZOFFSETTO:+0100\r\nDTSTART:19701025T030000\r\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\r\nEND:STANDARD");
register("TZID:Europe/Ulyanovsk\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Europe/Ulyanovsk\r\nBEGIN:STANDARD\r\nTZNAME:%z\r\nTZOFFSETFROM:+0400\r\nTZOFFSETTO:+0400\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:Europe/Vienna\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Europe/Vienna\r\nBEGIN:DAYLIGHT\r\nTZNAME:CEST\r\nTZOFFSETFROM:+0100\r\nTZOFFSETTO:+0200\r\nDTSTART:19700329T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZNAME:CET\r\nTZOFFSETFROM:+0200\r\nTZOFFSETTO:+0100\r\nDTSTART:19701025T030000\r\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\r\nEND:STANDARD");
register("TZID:Europe/Vilnius\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Europe/Vilnius\r\nBEGIN:DAYLIGHT\r\nTZNAME:EEST\r\nTZOFFSETFROM:+0200\r\nTZOFFSETTO:+0300\r\nDTSTART:19700329T030000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZNAME:EET\r\nTZOFFSETFROM:+0300\r\nTZOFFSETTO:+0200\r\nDTSTART:19701025T040000\r\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\r\nEND:STANDARD");
register("TZID:Europe/Volgograd\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Europe/Volgograd\r\nBEGIN:STANDARD\r\nTZNAME:MSK\r\nTZOFFSETFROM:+0300\r\nTZOFFSETTO:+0300\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:Europe/Warsaw\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Europe/Warsaw\r\nBEGIN:DAYLIGHT\r\nTZNAME:CEST\r\nTZOFFSETFROM:+0100\r\nTZOFFSETTO:+0200\r\nDTSTART:19700329T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZNAME:CET\r\nTZOFFSETFROM:+0200\r\nTZOFFSETTO:+0100\r\nDTSTART:19701025T030000\r\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\r\nEND:STANDARD");
register("TZID:Europe/Zurich\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Europe/Zurich\r\nBEGIN:DAYLIGHT\r\nTZNAME:CEST\r\nTZOFFSETFROM:+0100\r\nTZOFFSETTO:+0200\r\nDTSTART:19700329T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZNAME:CET\r\nTZOFFSETFROM:+0200\r\nTZOFFSETTO:+0100\r\nDTSTART:19701025T030000\r\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU\r\nEND:STANDARD");
register("TZID:Indian/Chagos\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Indian/Chagos\r\nBEGIN:STANDARD\r\nTZNAME:%z\r\nTZOFFSETFROM:+0600\r\nTZOFFSETTO:+0600\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:Indian/Maldives\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Indian/Maldives\r\nBEGIN:STANDARD\r\nTZNAME:%z\r\nTZOFFSETFROM:+0500\r\nTZOFFSETTO:+0500\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:Indian/Mauritius\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Indian/Mauritius\r\nBEGIN:STANDARD\r\nTZNAME:%z\r\nTZOFFSETFROM:+0400\r\nTZOFFSETTO:+0400\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:Pacific/Apia\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Pacific/Apia\r\nBEGIN:STANDARD\r\nTZNAME:%z\r\nTZOFFSETFROM:+1300\r\nTZOFFSETTO:+1300\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:Pacific/Auckland\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Pacific/Auckland\r\nBEGIN:DAYLIGHT\r\nTZNAME:NZDT\r\nTZOFFSETFROM:+1200\r\nTZOFFSETTO:+1300\r\nDTSTART:19700927T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZNAME:NZST\r\nTZOFFSETFROM:+1300\r\nTZOFFSETTO:+1200\r\nDTSTART:19700405T030000\r\nRRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU\r\nEND:STANDARD");
register("TZID:Pacific/Bougainville\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Pacific/Bougainville\r\nBEGIN:STANDARD\r\nTZNAME:%z\r\nTZOFFSETFROM:+1100\r\nTZOFFSETTO:+1100\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:Pacific/Chatham\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Pacific/Chatham\r\nBEGIN:DAYLIGHT\r\nTZNAME:%z\r\nTZOFFSETFROM:+1245\r\nTZOFFSETTO:+1345\r\nDTSTART:19700927T024500\r\nRRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZNAME:%z\r\nTZOFFSETFROM:+1345\r\nTZOFFSETTO:+1245\r\nDTSTART:19700405T034500\r\nRRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU\r\nEND:STANDARD");
register("TZID:Pacific/Easter\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Pacific/Easter\r\nBEGIN:STANDARD\r\nTZNAME:%z\r\nTZOFFSETFROM:-0500\r\nTZOFFSETTO:-0600\r\nDTSTART:19700404T220000\r\nRRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SA\r\nEND:STANDARD\r\nBEGIN:DAYLIGHT\r\nTZNAME:%z\r\nTZOFFSETFROM:-0600\r\nTZOFFSETTO:-0500\r\nDTSTART:19700905T220000\r\nRRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=1SA\r\nEND:DAYLIGHT");
register("TZID:Pacific/Efate\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Pacific/Efate\r\nBEGIN:STANDARD\r\nTZNAME:%z\r\nTZOFFSETFROM:+1100\r\nTZOFFSETTO:+1100\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:Pacific/Fakaofo\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Pacific/Fakaofo\r\nBEGIN:STANDARD\r\nTZNAME:%z\r\nTZOFFSETFROM:+1300\r\nTZOFFSETTO:+1300\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:Pacific/Fiji\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Pacific/Fiji\r\nBEGIN:STANDARD\r\nTZNAME:%z\r\nTZOFFSETFROM:+1200\r\nTZOFFSETTO:+1200\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:Pacific/Galapagos\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Pacific/Galapagos\r\nBEGIN:STANDARD\r\nTZNAME:%z\r\nTZOFFSETFROM:-0600\r\nTZOFFSETTO:-0600\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:Pacific/Gambier\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Pacific/Gambier\r\nBEGIN:STANDARD\r\nTZNAME:%z\r\nTZOFFSETFROM:-0900\r\nTZOFFSETTO:-0900\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:Pacific/Guadalcanal\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Pacific/Guadalcanal\r\nBEGIN:STANDARD\r\nTZNAME:%z\r\nTZOFFSETFROM:+1100\r\nTZOFFSETTO:+1100\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:Pacific/Guam\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Pacific/Guam\r\nBEGIN:STANDARD\r\nTZNAME:ChST\r\nTZOFFSETFROM:+1000\r\nTZOFFSETTO:+1000\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:Pacific/Honolulu\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Pacific/Honolulu\r\nBEGIN:STANDARD\r\nTZNAME:HST\r\nTZOFFSETFROM:-1000\r\nTZOFFSETTO:-1000\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:Pacific/Kanton\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Pacific/Kanton\r\nBEGIN:STANDARD\r\nTZNAME:%z\r\nTZOFFSETFROM:+1300\r\nTZOFFSETTO:+1300\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:Pacific/Kiritimati\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Pacific/Kiritimati\r\nBEGIN:STANDARD\r\nTZNAME:%z\r\nTZOFFSETFROM:+1400\r\nTZOFFSETTO:+1400\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:Pacific/Kosrae\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Pacific/Kosrae\r\nBEGIN:STANDARD\r\nTZNAME:%z\r\nTZOFFSETFROM:+1100\r\nTZOFFSETTO:+1100\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:Pacific/Kwajalein\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Pacific/Kwajalein\r\nBEGIN:STANDARD\r\nTZNAME:%z\r\nTZOFFSETFROM:+1200\r\nTZOFFSETTO:+1200\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:Pacific/Marquesas\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Pacific/Marquesas\r\nBEGIN:STANDARD\r\nTZNAME:%z\r\nTZOFFSETFROM:-0930\r\nTZOFFSETTO:-0930\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:Pacific/Nauru\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Pacific/Nauru\r\nBEGIN:STANDARD\r\nTZNAME:%z\r\nTZOFFSETFROM:+1200\r\nTZOFFSETTO:+1200\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:Pacific/Niue\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Pacific/Niue\r\nBEGIN:STANDARD\r\nTZNAME:%z\r\nTZOFFSETFROM:-1100\r\nTZOFFSETTO:-1100\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:Pacific/Norfolk\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Pacific/Norfolk\r\nBEGIN:DAYLIGHT\r\nTZNAME:%z\r\nTZOFFSETFROM:+1100\r\nTZOFFSETTO:+1200\r\nDTSTART:19701004T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZNAME:%z\r\nTZOFFSETFROM:+1200\r\nTZOFFSETTO:+1100\r\nDTSTART:19700405T030000\r\nRRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU\r\nEND:STANDARD");
register("TZID:Pacific/Noumea\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Pacific/Noumea\r\nBEGIN:STANDARD\r\nTZNAME:%z\r\nTZOFFSETFROM:+1100\r\nTZOFFSETTO:+1100\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:Pacific/Pago_Pago\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Pacific/Pago_Pago\r\nBEGIN:STANDARD\r\nTZNAME:SST\r\nTZOFFSETFROM:-1100\r\nTZOFFSETTO:-1100\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:Pacific/Palau\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Pacific/Palau\r\nBEGIN:STANDARD\r\nTZNAME:%z\r\nTZOFFSETFROM:+0900\r\nTZOFFSETTO:+0900\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:Pacific/Pitcairn\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Pacific/Pitcairn\r\nBEGIN:STANDARD\r\nTZNAME:%z\r\nTZOFFSETFROM:-0800\r\nTZOFFSETTO:-0800\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:Pacific/Port_Moresby\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Pacific/Port_Moresby\r\nBEGIN:STANDARD\r\nTZNAME:%z\r\nTZOFFSETFROM:+1000\r\nTZOFFSETTO:+1000\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:Pacific/Rarotonga\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Pacific/Rarotonga\r\nBEGIN:STANDARD\r\nTZNAME:%z\r\nTZOFFSETFROM:-1000\r\nTZOFFSETTO:-1000\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:Pacific/Tahiti\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Pacific/Tahiti\r\nBEGIN:STANDARD\r\nTZNAME:%z\r\nTZOFFSETFROM:-1000\r\nTZOFFSETTO:-1000\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:Pacific/Tarawa\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Pacific/Tarawa\r\nBEGIN:STANDARD\r\nTZNAME:%z\r\nTZOFFSETFROM:+1200\r\nTZOFFSETTO:+1200\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
register("TZID:Pacific/Tongatapu\r\nLAST-MODIFIED:20241022T084017Z\r\nX-LIC-LOCATION:Pacific/Tongatapu\r\nBEGIN:STANDARD\r\nTZNAME:%z\r\nTZOFFSETFROM:+1300\r\nTZOFFSETTO:+1300\r\nDTSTART:19700101T000000\r\nEND:STANDARD");
})();
export default ICAL;

85
src/routes.js Normal file
View File

@ -0,0 +1,85 @@
import express from 'express';
import path from 'path';
import fs from 'fs';
import { fetchCalendarData, sanitizeFilename, createCalendarComponent, addEventsToCalendar, saveCalendarFile, MERGED_CALENDARS_DIR } from './calendarUtil.js';
const router = express.Router();
// Merge calendars endpoint
router.post('/merge', async (req, res) => {
const { linkGroupName, calendars } = req.body;
// Validate the input
if (!linkGroupName || !Array.isArray(calendars) || calendars.length === 0) {
return res.status(400).json({ error: 'Invalid input. Please provide a linkGroupName and at least one calendar.' });
}
try {
// Sanitize the linkGroupName to create a valid filename
const sanitizedLinkGroupName = sanitizeFilename(linkGroupName);
const filename = `${sanitizedLinkGroupName}.ics`;
// Fetch calendar data
const results = await Promise.all(calendars.map(fetchCalendarData));
// Generate merged calendar using ical.js
const calendarComponent = createCalendarComponent(linkGroupName);
addEventsToCalendar(calendarComponent, results);
// Save the calendar to a file
saveCalendarFile(filename, calendarComponent.toString());
// Save the user input and sanitizedLinkGroupName in a separate JSON file
saveCalendarFile(`${sanitizedLinkGroupName}.json`, JSON.stringify({ linkGroupName, calendars }, null, 2));
res.json({ url: `${req.protocol}://${req.get('host')}/calendar/${sanitizedLinkGroupName}` });
} catch (error) {
console.error('Error merging calendars:', error.message);
res.status(500).json({ error: 'Failed to merge calendars' });
}
});
// Refresh calendar if outdated
async function refreshCalendarData(calendarName) {
const jsonFilePath = path.join(MERGED_CALENDARS_DIR, `${calendarName}.json`);
console.log(`Refreshing calendar data for: ${calendarName}`);
// Read the JSON file to get the source URL and other details
const { calendars } = JSON.parse(fs.readFileSync(jsonFilePath, 'utf-8'));
const calendarResults = await Promise.all(calendars.map(fetchCalendarData));
const calendarComponent = createCalendarComponent(calendarName);
addEventsToCalendar(calendarComponent, calendarResults);
saveCalendarFile(`${calendarName}.ics`, calendarComponent.toString());
console.log('Calendar data refreshed and saved.');
}
// Serve the merged calendar file and refresh if older than an hour
router.get('/calendar/:name', async (req, res) => {
const calendarName = req.params.name;
const icsFilePath = path.join(MERGED_CALENDARS_DIR, `${calendarName}.ics`);
try {
// Check if the .ics file exists
console.log(`Serving calendar for: ${calendarName}`);
if (fs.existsSync(icsFilePath)) {
const stats = fs.statSync(icsFilePath);
const isOutdated = new Date() - new Date(stats.mtime) > 60 * 60 * 1000;
if (isOutdated){
console.log(`Calendar ${calendarName} is outdated. Refreshing...`);
await refreshCalendarData(calendarName);
}
res.setHeader('Content-Type', 'text/calendar');
res.sendFile(icsFilePath);
} else {
res.status(404).json({ error: 'Calendar not found.' });
}
} catch (error) {
console.error('Error retrieving calendar data:', error.message);
res.status(500).json({ error: 'Failed to retrieve calendar data.' });
}
});
export default router;

14
src/server.js Normal file
View File

@ -0,0 +1,14 @@
import express from 'express';
import path from 'path';
import routes from './routes.js';
console.log(`Starting server in ${process.cwd()}`);
const app = express();
app.use(express.json());
// Serve static files from the 'public' directory
app.use(express.static(path.join(process.cwd(), 'public')));
app.use('/', routes);
export default app;

277
test/calendar.test.js Normal file
View File

@ -0,0 +1,277 @@
import request from 'supertest';
import fs from 'fs';
import path from 'path';
import { fileURLToPath } from 'url';
// ESM equivalent of __dirname
const __filename = fileURLToPath(import.meta.url);
const __dirname = path.dirname(__filename);
const CALENDARS_DIR = path.join(__dirname, 'calendar');
const TEST_CALENDARS_DIR = path.join(__dirname, 'test_calendars');
const EXPECTED_OUTPUTS_DIR = path.join(__dirname, 'expected_outputs');
let server;
process.chdir(__dirname)
const app = await import('../src/server');
describe('Calendar Merging API', () => {
beforeAll(async () => {
// Start the server
server = app.default.listen(0);
});
afterAll(async () => {
// Ensure the server is closed before cleanup
await new Promise(resolve => server.close(resolve));
// Optional: Add a delay to ensure all handles are released
await new Promise(resolve => setTimeout(resolve, 100));
});
const getTestCalendarFilename = (filename) => {
return path.join(TEST_CALENDARS_DIR, filename);
};
const loadExpectedOutput = (filename) => {
return fs.readFileSync(path.join(EXPECTED_OUTPUTS_DIR, filename), 'utf8');
};
test('Preserve nextcloud calendar', async () => {
const input = getTestCalendarFilename('nextcloud-minimal.ics');
const response = await request(server)
.post('/merge')
.send({
linkGroupName: 'nextcloud-minimal',
calendars: [
{
url: input,
prefix: '',
override: false,
},
],
});
expect(response.status).toBe(200);
// Check if the file was created in the test directory
const filePath = path.join(CALENDARS_DIR, 'nextcloud-minimal.ics');
console.log('Checking if file exists at:', filePath);
expect(fs.existsSync(filePath)).toBe(true);
// Load expected output
const expectedOutput = fs.readFileSync(input, 'utf8');
const actualOutput = fs.readFileSync(filePath, 'utf8');
//compare
expect(actualOutput).toBe(expectedOutput);
});
test('Preserve google calendar', async () => {
const input = getTestCalendarFilename('google-calendar-minimal.ics');
const response = await request(server)
.post('/merge')
.send({
linkGroupName: 'google-calendar-minimal',
calendars: [
{
url: input,
prefix: '',
override: false,
},
],
});
expect(response.status).toBe(200);
// Check if the file was created in the test directory
const filePath = path.join(CALENDARS_DIR, 'google-calendar-minimal.ics');
console.log('Checking if file exists at:', filePath);
expect(fs.existsSync(filePath)).toBe(true);
// Load expected output
const expectedOutput = fs.readFileSync(input, 'utf8');
const actualOutput = fs.readFileSync(filePath, 'utf8');
//compare
expect(actualOutput).toBe(expectedOutput);
});
test('Preserve date-based calendar', async () => {
const input = getTestCalendarFilename('US_Holidays.ics');
const response = await request(server)
.post('/merge')
.send({
linkGroupName: 'US Holidays',
calendars: [
{
url: input,
prefix: '',
override: false,
},
],
});
expect(response.status).toBe(200);
// Check if the file was created in the test directory
const filePath = path.join(CALENDARS_DIR, 'US_Holidays.ics');
console.log('Checking if file exists at:', filePath);
expect(fs.existsSync(filePath)).toBe(true);
// Load expected output and compare
const expectedOutput = fs.readFileSync(input, 'utf8');
const actualOutput = fs.readFileSync(filePath, 'utf8');
expect(actualOutput).toBe(expectedOutput);
});
test('Merge date-based calendar', async () => {
const response = await request(server)
.post('/merge')
.send({
linkGroupName: 'Date Based Calendar',
calendars: [
{
url: getTestCalendarFilename('holiday_calendar_2023.ics'),
prefix: 'holiday_calendar_2023',
override: false,
},
{
url: getTestCalendarFilename('US_Holidays.ics'),
prefix: 'US_holidays',
override: false,
},
],
});
expect(response.status).toBe(200);
expect(response.body.url).toMatch(new RegExp(`calendar/Date_Based_Calendar`));
// Check if the file was created in the test directory
const filePath = path.join(CALENDARS_DIR, 'Date_Based_Calendar.ics');
console.log('Checking if file exists at:', filePath);
expect(fs.existsSync(filePath)).toBe(true);
// Load expected output and compare
const expectedOutput = loadExpectedOutput('Date_Based_Calendar.ics');
const actualOutput = fs.readFileSync(filePath, 'utf8');
expect(actualOutput).toBe(expectedOutput);
});
//test Merge time-based calendar
test('Merge time-based calendar', async () => {
const input = getTestCalendarFilename('work_task_calendar.ics');
const response = await request(server)
.post('/merge')
.send({
linkGroupName: 'Time Based Calendar',
calendars: [
{
url: getTestCalendarFilename('team_meeting_calendar.ics'), // Time-based calendar
prefix: 'team_meeting_calendar',
override: false,
},
{
url: getTestCalendarFilename('work_task_calendar.ics'), // Time-based calendar
prefix: 'Work_Task',
override: false,
},
],
});
expect(response.status).toBe(200);
expect(response.body.url).toMatch(/calendar\/Time_Based_Calendar/);
// Check if the file was created in the test directory
const filePath = path.join(CALENDARS_DIR, 'Time_Based_Calendar.ics');
expect(fs.existsSync(filePath)).toBe(true);
// Load expected output and compare
const expectedOutput = loadExpectedOutput('Time_Based_Calendar.ics');
const actualOutput = fs.readFileSync(filePath, 'utf8');
expect(actualOutput).toBe(expectedOutput);
});
//test Merge calendar without prefix
test('Merge calendar without prefix', async () => {
const response = await request(server)
.post('/merge')
.send({
linkGroupName: 'No Prefix Calendar',
calendars: [
{
url: getTestCalendarFilename('sf_public_holidays.ics'),
prefix: '',
override: false,
},
],
});
expect(response.status).toBe(200);
expect(response.body.url).toMatch(/calendar\/No_Prefix_Calendar/);
// Check if the file was created in the test directory
const filePath = path.join(CALENDARS_DIR, 'No_Prefix_Calendar.ics');
expect(fs.existsSync(filePath)).toBe(true);
// Load expected output and compare
const expectedOutput = loadExpectedOutput('No_Prefix_Calendar.ics');
const actualOutput = fs.readFileSync(filePath, 'utf8');
expect(actualOutput).toBe(expectedOutput);
});
//test Merge calendar with override
test('Merge calendar with override', async () => {
const response = await request(server)
.post('/merge')
.send({
linkGroupName: 'Override Calendar',
calendars: [
{
url: getTestCalendarFilename('sf_public_holidays.ics'),
prefix: 'Override Event',
override: true,
},
],
});
expect(response.status).toBe(200);
expect(response.body.url).toMatch(/calendar\/Override_Calendar/);
// Check if the file was created in the test directory
const filePath = path.join(CALENDARS_DIR, 'Override_Calendar.ics');
expect(fs.existsSync(filePath)).toBe(true);
// Load expected output and compare
const expectedOutput = loadExpectedOutput('Override_Calendar.ics');
const actualOutput = fs.readFileSync(filePath, 'utf8');
expect(actualOutput).toBe(expectedOutput);
});
//test Merge date-based and time-based calendars
test('Merge date-based and time-based calendars', async () => {
const response = await request(server)
.post('/merge')
.send({
linkGroupName: 'Merged Date and Time Based Calendar',
calendars: [
{
url: getTestCalendarFilename('holiday_calendar_2023.ics'), // Date-based calendar
prefix: 'Holiday_2023',
override: false,
},
{
url: getTestCalendarFilename('work_task_calendar.ics'), // Time-based calendar
prefix: 'Work_Task',
override: false,
},
],
});
expect(response.status).toBe(200);
expect(response.body.url).toMatch(new RegExp('calendar/Merged_Date_and_Time_Based_Calendar'));
// Check if the file was created in the test directory
const filePath = path.join(CALENDARS_DIR, 'Merged_Date_and_Time_Based_Calendar.ics');
expect(fs.existsSync(filePath)).toBe(true);
// Load expected output and compare
const expectedOutput = loadExpectedOutput('Merged_Date_and_Time_Based_Calendar.ics');
const actualOutput = fs.readFileSync(filePath, 'utf8');
expect(actualOutput).toBe(expectedOutput);
});
});

56
test/calendarUtil.test.js Normal file
View File

@ -0,0 +1,56 @@
import ICAL from '../src/lib/ical.timezones';
import fs from 'fs';
import path from 'path';
import axios from 'axios';
import { jest } from '@jest/globals';
import { fileURLToPath } from 'url';
// ESM equivalent of __dirname
const __filename = fileURLToPath(import.meta.url);
const __dirname = path.dirname(__filename);
// Describe the test suite for Calendar Utility Functions
describe('Calendar Utility Functions', () => {
// Declare variable to hold the functions we will be testing
let fetchCalendarData;
beforeAll(async () => {
const calendarUtilModule = await import('../src/calendarUtil.js');
fetchCalendarData = calendarUtilModule.fetchCalendarData;
});
// Describe a nested test suite for the 'fetchCalendarData' function
describe('fetchCalendarData', () => {
// Test case: fetching data from a URL
it('fetches data from a URL', async () => {
const testCalendar = { url: 'https://calendar.google.com/calendar/ical/b4c66eb4bb2cc15257d071bab3f935385778b042112ea1aaedada47f3f1a6e3a%40group.calendar.google.com/public/basic.ics' };
// Mock the axios.get method to resolve with specific test data
jest.spyOn(axios, 'get').mockResolvedValue({ data: 'test data' });
// Call the fetchCalendarData function with the test calendar object
const result = await fetchCalendarData(testCalendar);
// Assert that the fetched result's data matches the expected test data
expect(result.data).toBe('test data');
// Restore the original axios.get method after the test
axios.get.mockRestore();
});
// Test case: reading data from a file
it('reads and parses data from a file', async () => {
const testCalendar = { url: path.join(__dirname, 'test_calendars', 'nextcloud.ics'), };
// Call the fetchCalendarData function
const result = await fetchCalendarData(testCalendar);
const parsed = ICAL.parse(result.data);
const component = new ICAL.Component(parsed);
const firstEvent = new ICAL.Event(component.getAllSubcomponents('vevent')[0]);
// Assert that the fetched and parsed data matches
expect(firstEvent.startDate.toJSON()).toEqual({"day": 20, "hour": 21, "isDate": false, "minute": 15, "month": 11, "second": 0, "timezone": "Europe/Berlin", "year": 2024});
});
});
});

View File

@ -0,0 +1,21 @@
BEGIN:VCALENDAR
NAME:Date Based Calendar
PRODID:-//CalMerge//Calendar Merger 1.0//EN
VERSION:2.0
CALSCALE:GREGORIAN
BEGIN:VEVENT
UID:20231225T000000-001@example.com
DTSTART;VALUE=DATE:20231225
DTEND;VALUE=DATE:20231226
DTSTAMP:20231225T000000Z
SUMMARY:holiday_calendar_2023 Christmas Day
LOCATION:Germany
END:VEVENT
BEGIN:VEVENT
UID:20231225T000000-001@example.com
DTSTART;VALUE=DATE:20231225
DTEND;VALUE=DATE:20231226
DTSTAMP:20231225T000000Z
SUMMARY:US_holidays Christmas Day
END:VEVENT
END:VCALENDAR

View File

@ -0,0 +1,15 @@
{
"linkGroupName": "Date Based Calendar",
"calendars": [
{
"url": "C:\\Users\\user\\OneDrive\\Desktop\\Internship_tasks\\final calmerg\\test\\test_calendars\\holiday_calendar_2023.ics",
"prefix": "holiday_calendar_2023",
"override": false
},
{
"url": "C:\\Users\\user\\OneDrive\\Desktop\\Internship_tasks\\final calmerg\\test\\test_calendars\\US_Holidays.ics",
"prefix": "US_holidays",
"override": false
}
]
}

View File

@ -0,0 +1,21 @@
BEGIN:VCALENDAR
NAME:Merged Date and Time Based Calendar
PRODID:-//CalMerge//Calendar Merger 1.0//EN
VERSION:2.0
CALSCALE:GREGORIAN
BEGIN:VEVENT
UID:20231225T000000-001@example.com
DTSTART;VALUE=DATE:20231225
DTEND;VALUE=DATE:20231226
DTSTAMP:20231225T000000Z
SUMMARY:Holiday_2023 Christmas Day
LOCATION:Germany
END:VEVENT
BEGIN:VEVENT
UID:20231108T090000-001@example.com
DTSTART:20231108T090000Z
DTEND:20231108T100000Z
DTSTAMP:20231108T090000Z
SUMMARY:Work_Task Work Task
END:VEVENT
END:VCALENDAR

View File

@ -0,0 +1,15 @@
{
"linkGroupName": "Merged Date and Time Based Calendar",
"calendars": [
{
"url": "C:\\Users\\user\\OneDrive\\Desktop\\Internship_tasks\\final calmerg\\test\\test_calendars\\holiday_calendar_2023.ics",
"prefix": "Holiday_2023",
"override": false
},
{
"url": "C:\\Users\\user\\OneDrive\\Desktop\\Internship_tasks\\final calmerg\\test\\test_calendars\\work_task_calendar.ics",
"prefix": "Work_Task",
"override": false
}
]
}

View File

@ -0,0 +1,14 @@
BEGIN:VCALENDAR
NAME:No Prefix Calendar
PRODID:-//CalMerge//Calendar Merger 1.0//EN
VERSION:2.0
CALSCALE:GREGORIAN
BEGIN:VEVENT
UID:20231225T000000-001@example.com
DTSTART;VALUE=DATE:20231225
DTEND;VALUE=DATE:20231226
DTSTAMP:20231225T000000Z
SUMMARY:Christmas Day
LOCATION:San Francisco
END:VEVENT
END:VCALENDAR

View File

@ -0,0 +1,10 @@
{
"linkGroupName": "No Prefix Calendar",
"calendars": [
{
"url": "C:\\Users\\user\\OneDrive\\Desktop\\Internship_tasks\\final calmerg\\test\\test_calendars\\sf_public_holidays.ics",
"prefix": "",
"override": false
}
]
}

View File

@ -0,0 +1,13 @@
BEGIN:VCALENDAR
NAME:Override Calendar
PRODID:-//CalMerge//Calendar Merger 1.0//EN
VERSION:2.0
CALSCALE:GREGORIAN
BEGIN:VEVENT
UID:20231225T000000-001@example.com
DTSTART;VALUE=DATE:20231225
DTEND;VALUE=DATE:20231226
DTSTAMP:20231225T000000Z
SUMMARY:Override Event
END:VEVENT
END:VCALENDAR

View File

@ -0,0 +1,10 @@
{
"linkGroupName": "Override Calendar",
"calendars": [
{
"url": "C:\\Users\\user\\OneDrive\\Desktop\\Internship_tasks\\final calmerg\\test\\test_calendars\\sf_public_holidays.ics",
"prefix": "Override Event",
"override": true
}
]
}

View File

@ -0,0 +1,21 @@
BEGIN:VCALENDAR
NAME:Time Based Calendar
PRODID:-//CalMerge//Calendar Merger 1.0//EN
VERSION:2.0
CALSCALE:GREGORIAN
BEGIN:VEVENT
UID:20231109T110000-001@example.com
DTSTART:20231109T110000Z
DTEND:20231109T120000Z
DTSTAMP:20231109T110000Z
SUMMARY:team_meeting_calendar Team Meeting
LOCATION:Virtual
END:VEVENT
BEGIN:VEVENT
UID:20231108T090000-001@example.com
DTSTART:20231108T090000Z
DTEND:20231108T100000Z
DTSTAMP:20231108T090000Z
SUMMARY:Work_Task Work Task
END:VEVENT
END:VCALENDAR

View File

@ -0,0 +1,15 @@
{
"linkGroupName": "Time Based Calendar",
"calendars": [
{
"url": "C:\\Users\\user\\OneDrive\\Desktop\\Internship_tasks\\final calmerg\\test\\test_calendars\\team_meeting_calendar.ics",
"prefix": "team_meeting_calendar",
"override": false
},
{
"url": "C:\\Users\\user\\OneDrive\\Desktop\\Internship_tasks\\final calmerg\\test\\test_calendars\\work_task_calendar.ics",
"prefix": "work_task",
"override": false
}
]
}

View File

@ -0,0 +1,13 @@
BEGIN:VCALENDAR
NAME:US Holidays
PRODID:-//CalMerge//Calendar Merger 1.0//EN
VERSION:2.0
CALSCALE:GREGORIAN
BEGIN:VEVENT
UID:20231225T000000-001@example.com
DTSTART;VALUE=DATE:20231225
DTEND;VALUE=DATE:20231226
DTSTAMP:20231225T000000Z
SUMMARY:Christmas Day
END:VEVENT
END:VCALENDAR

View File

@ -0,0 +1,15 @@
BEGIN:VCALENDAR
NAME:google-calendar-minimal
PRODID:-//CalMerge//Calendar Merger 1.0//EN
VERSION:2.0
CALSCALE:GREGORIAN
METHOD:PUBLISH
X-WR-TIMEZONE:Africa/Nairobi
BEGIN:VEVENT
UID:6tbrvsitniuu72li7kk15gou2b@google.com
DTSTART:20241003T190000Z
DTEND:20241003T200000Z
DTSTAMP:20241119T115316Z
SUMMARY:progodessey
END:VEVENT
END:VCALENDAR

View File

@ -8,7 +8,7 @@ X-WR-TIMEZONE:Africa/Nairobi
BEGIN:VEVENT BEGIN:VEVENT
DTSTART:20240930T113000Z DTSTART:20240930T113000Z
DTEND:20240930T123000Z DTEND:20240930T123000Z
DTSTAMP:20241104T102505Z DTSTAMP:20241119T115316Z
UID:0d0p2hp0l26ebuk2r0kb1q9kuo@google.com UID:0d0p2hp0l26ebuk2r0kb1q9kuo@google.com
CREATED:20240930T111532Z CREATED:20240930T111532Z
LAST-MODIFIED:20240930T111532Z LAST-MODIFIED:20240930T111532Z
@ -20,7 +20,7 @@ END:VEVENT
BEGIN:VEVENT BEGIN:VEVENT
DTSTART:20241003T190000Z DTSTART:20241003T190000Z
DTEND:20241003T200000Z DTEND:20241003T200000Z
DTSTAMP:20241104T102505Z DTSTAMP:20241119T115316Z
UID:6tbrvsitniuu72li7kk15gou2b@google.com UID:6tbrvsitniuu72li7kk15gou2b@google.com
CREATED:20241001T194455Z CREATED:20241001T194455Z
LAST-MODIFIED:20241001T194455Z LAST-MODIFIED:20241001T194455Z
@ -30,10 +30,10 @@ SUMMARY:progodessey
TRANSP:OPAQUE TRANSP:OPAQUE
END:VEVENT END:VEVENT
BEGIN:VEVENT BEGIN:VEVENT
UID:7l7n9nltrudluv65gfgll2q930@google.com
DTSTART:20241009T173000Z DTSTART:20241009T173000Z
DTEND:20241009T183000Z DTEND:20241009T183000Z
DTSTAMP:20241104T102505Z DTSTAMP:20241119T115316Z
UID:7l7n9nltrudluv65gfgll2q930@google.com
CREATED:20241010T123337Z CREATED:20241010T123337Z
LAST-MODIFIED:20241010T123337Z LAST-MODIFIED:20241010T123337Z
SEQUENCE:0 SEQUENCE:0

View File

@ -0,0 +1,15 @@
BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//Example Corp//NONSGML Event//EN
BEGIN:VEVENT
UID:20231225T000000-001@example.com
DTSTAMP:20231225T000000Z
DTSTART;VALUE=DATE:20231225
DTEND;VALUE=DATE:20231226
SUMMARY:Christmas Day
DESCRIPTION:Public holiday for Christmas.
LOCATION:Germany
STATUS:CONFIRMED
SEQUENCE:0
END:VEVENT
END:VCALENDAR

View File

@ -0,0 +1,32 @@
BEGIN:VCALENDAR
NAME:nextcloud-minimal
PRODID:-//CalMerge//Calendar Merger 1.0//EN
VERSION:2.0
CALSCALE:GREGORIAN
BEGIN:VTIMEZONE
TZID:Europe/Berlin
BEGIN:DAYLIGHT
TZOFFSETFROM:+0100
TZOFFSETTO:+0200
TZNAME:CEST
DTSTART:19700329T020000
RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETFROM:+0200
TZOFFSETTO:+0100
TZNAME:CET
DTSTART:19701025T030000
RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
END:STANDARD
END:VTIMEZONE
BEGIN:VEVENT
UID:5f4ad965-16a8-48eb-8233-78bf93a8b35e
DTSTART;TZID=Europe/Berlin:20241120T211500
DTEND;TZID=Europe/Berlin:20241120T215000
DTSTAMP:20241113T212909Z
SUMMARY:JR Weekly Check-In
LOCATION:FaceTime
RRULE:FREQ=WEEKLY;BYDAY=WE
END:VEVENT
END:VCALENDAR

View File

@ -0,0 +1,131 @@
BEGIN:VCALENDAR
VERSION:2.0
CALSCALE:GREGORIAN
PRODID:-//SabreDAV//SabreDAV//EN
X-WR-CALNAME:Progodyssey Ryan (stackspin-a51baefe-70df-4cce-9be1-048354b619
b8)
X-APPLE-CALENDAR-COLOR:#ddcb55
REFRESH-INTERVAL;VALUE=DURATION:PT4H
X-PUBLISHED-TTL:PT4H
BEGIN:VTIMEZONE
TZID:Europe/Berlin
BEGIN:DAYLIGHT
TZOFFSETFROM:+0100
TZOFFSETTO:+0200
TZNAME:CEST
DTSTART:19700329T020000
RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETFROM:+0200
TZOFFSETTO:+0100
TZNAME:CET
DTSTART:19701025T030000
RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
END:STANDARD
END:VTIMEZONE
BEGIN:VEVENT
CREATED:20241113T212909Z
DTEND;TZID=Europe/Berlin:20241120T215000
DTSTAMP:20241113T212909Z
DTSTART;TZID=Europe/Berlin:20241120T211500
LAST-MODIFIED:20241113T212909Z
LOCATION:FaceTime
RRULE:FREQ=WEEKLY;BYDAY=WE
SEQUENCE:0
STATUS:CONFIRMED
SUMMARY:JR Weekly Check-In
TRANSP:OPAQUE
UID:5f4ad965-16a8-48eb-8233-78bf93a8b35e
RELATED-TO;RELTYPE=SIBLING:17cf7d22-9bee-4a8e-9023-878b1a1b73a0
BEGIN:VALARM
ACKNOWLEDGED:20241113T202052Z
ACTION:DISPLAY
DESCRIPTION:This is an event reminder.
TRIGGER:-PT20M
UID:99250427-AB45-4111-A999-DB417FC290D1
X-WR-ALARMUID:99250427-AB45-4111-A999-DB417FC290D1
SUMMARY:JR Weekly Check-In
END:VALARM
END:VEVENT
BEGIN:VEVENT
CREATED:20241113T213036Z
DTEND;TZID=Europe/Berlin:20241204T212500
DTSTAMP:20241113T213036Z
DTSTART;TZID=Europe/Berlin:20241204T203000
LAST-MODIFIED:20241113T213036Z
LOCATION:FaceTime
SEQUENCE:1
STATUS:CONFIRMED
SUMMARY:JR Weekly Check-In
TRANSP:OPAQUE
UID:5f4ad965-16a8-48eb-8233-78bf93a8b35e
RELATED-TO;RELTYPE=SIBLING:17cf7d22-9bee-4a8e-9023-878b1a1b73a0
RECURRENCE-ID;TZID=Europe/Berlin:20241204T211500
BEGIN:VALARM
ACKNOWLEDGED:20241113T202052Z
ACTION:DISPLAY
DESCRIPTION:This is an event reminder.
TRIGGER:-PT20M
UID:99250427-AB45-4111-A999-DB417FC290D1
X-WR-ALARMUID:99250427-AB45-4111-A999-DB417FC290D1
SUMMARY:JR Weekly Check-In
END:VALARM
END:VEVENT
BEGIN:VEVENT
CREATED:20241107T101403Z
DTEND;TZID=Europe/Berlin:20241111T134500
DTSTAMP:20241118T103806Z
DTSTART;TZID=Europe/Berlin:20241111T121500
LAST-MODIFIED:20241118T103803Z
LOCATION:https://call.element.io/room/#/progodyssey?password=bU95nPdV2u-BGJ
4zw9cPGw&roomId=%21QsGQUxdyuMfGKhGvNH%3Acall.ems.host
RRULE:FREQ=WEEKLY;BYDAY=MO
SEQUENCE:4
STATUS:CONFIRMED
SUMMARY:JR Coprogramming Session
TRANSP:OPAQUE
UID:8c251542-6cbf-4396-b83d-490be79c97a9
BEGIN:VALARM
ACKNOWLEDGED:20241118T103803Z
ACTION:DISPLAY
DESCRIPTION:This is an event reminder.
SUMMARY:Coprogramming Session
TRIGGER:-PT1H
UID:55C3B462-E182-4A2B-A500-3F249FC860C2
X-WR-ALARMUID:55C3B462-E182-4A2B-A500-3F249FC860C2
END:VALARM
BEGIN:VALARM
ACTION:DISPLAY
DESCRIPTION:Reminder
TRIGGER:-PT1H
UID:9AABB2AB-A755-4723-87CF-10B119670E7F
X-APPLE-DEFAULT-ALARM:TRUE
X-WR-ALARMUID:9AABB2AB-A755-4723-87CF-10B119670E7F
END:VALARM
END:VEVENT
BEGIN:VEVENT
CREATED:20241107T101605Z
DTEND;TZID=Europe/Berlin:20241113T215500
DTSTAMP:20241113T212909Z
DTSTART;TZID=Europe/Berlin:20241113T213000
LAST-MODIFIED:20241113T212909Z
LOCATION:FaceTime
RRULE:FREQ=WEEKLY;BYDAY=WE;UNTIL=20241120T202959Z
SEQUENCE:4
STATUS:CONFIRMED
SUMMARY:JR Weekly Check-In
TRANSP:OPAQUE
UID:17cf7d22-9bee-4a8e-9023-878b1a1b73a0
RELATED-TO;RELTYPE=SIBLING:5f4ad965-16a8-48eb-8233-78bf93a8b35e
BEGIN:VALARM
ACKNOWLEDGED:20241113T202052Z
ACTION:DISPLAY
DESCRIPTION:This is an event reminder.
SUMMARY:JR Weekly Check-In
TRIGGER:-PT20M
UID:99250427-AB45-4111-A999-DB417FC290D1
X-WR-ALARMUID:99250427-AB45-4111-A999-DB417FC290D1
END:VALARM
END:VEVENT
END:VCALENDAR

View File

@ -0,0 +1,15 @@
BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//Example Corp//NONSGML Event//EN
BEGIN:VEVENT
UID:20231225T000000-001@example.com
DTSTAMP:20231225T000000Z
DTSTART;VALUE=DATE:20231225
DTEND;VALUE=DATE:20231226
SUMMARY:Christmas Day
DESCRIPTION:Public holiday for Christmas in San Francisco.
LOCATION:San Francisco
STATUS:CONFIRMED
SEQUENCE:0
END:VEVENT
END:VCALENDAR

View File

@ -0,0 +1,15 @@
BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//Example Corp//NONSGML Event//EN
BEGIN:VEVENT
UID:20231109T110000-001@example.com
DTSTAMP:20231109T110000Z
DTSTART:20231109T110000Z
DTEND:20231109T120000Z
SUMMARY:Team Meeting
DESCRIPTION:Team meeting for project planning.
LOCATION:Virtual
STATUS:CONFIRMED
SEQUENCE:0
END:VEVENT
END:VCALENDAR

View File

@ -0,0 +1,11 @@
BEGIN:VCALENDAR
NAME:Time Based Calendar
VERSION:2.0
BEGIN:VEVENT
UID:20231108T090000-001@example.com
DTSTAMP:20231108T090000Z
DTSTART:20231108T090000Z
DTEND:20231108T100000Z
SUMMARY:Work Task
END:VEVENT
END:VCALENDAR

View File

@ -1,336 +0,0 @@
BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//sebbo.net//ical-generator//EN
NAME:Date Based Calendar
X-WR-CALNAME:Date Based Calendar
BEGIN:VEVENT
UID:l93d@Ryan-jr
SEQUENCE:0
DTSTAMP:20241105T122934Z
DTSTART;VALUE=DATE:20230219
DTEND;VALUE=DATE:20230224
X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE
SUMMARY:Ferien_Bayern_2023 Winterferien 2023 Bayern
END:VEVENT
BEGIN:VEVENT
UID:bxei@Ryan-jr
SEQUENCE:0
DTSTAMP:20241105T122934Z
DTSTART;VALUE=DATE:20230402
DTEND;VALUE=DATE:20230415
X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE
SUMMARY:Ferien_Bayern_2023 Osterferien 2023 Bayern
END:VEVENT
BEGIN:VEVENT
UID:csr1@Ryan-jr
SEQUENCE:0
DTSTAMP:20241105T122934Z
DTSTART;VALUE=DATE:20230529
DTEND;VALUE=DATE:20230609
X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE
SUMMARY:Ferien_Bayern_2023 Pfingstferien 2023 Bayern
END:VEVENT
BEGIN:VEVENT
UID:gamv@Ryan-jr
SEQUENCE:0
DTSTAMP:20241105T122934Z
DTSTART;VALUE=DATE:20230730
DTEND;VALUE=DATE:20230911
X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE
SUMMARY:Ferien_Bayern_2023 Sommerferien 2023 Bayern
END:VEVENT
BEGIN:VEVENT
UID:xuty@Ryan-jr
SEQUENCE:0
DTSTAMP:20241105T122934Z
DTSTART;VALUE=DATE:20231029
DTEND;VALUE=DATE:20231103
X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE
SUMMARY:Ferien_Bayern_2023 Herbstferien 2023 Bayern
END:VEVENT
BEGIN:VEVENT
UID:l9k9@Ryan-jr
SEQUENCE:0
DTSTAMP:20241105T122934Z
DTSTART;VALUE=DATE:20231121
DTEND;VALUE=DATE:20231122
X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE
SUMMARY:Ferien_Bayern_2023 Herbstferien 2023 Bayern
END:VEVENT
BEGIN:VEVENT
UID:om17@Ryan-jr
SEQUENCE:0
DTSTAMP:20241105T122934Z
DTSTART;VALUE=DATE:20231222
DTEND;VALUE=DATE:20240105
X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE
SUMMARY:Ferien_Bayern_2023 Weihnachtsferien 2023 Bayern
END:VEVENT
BEGIN:VEVENT
UID:1i1v@Ryan-jr
SEQUENCE:0
DTSTAMP:20241105T122934Z
DTSTART;VALUE=DATE:20231231
DTEND;VALUE=DATE:20231231
X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE
SUMMARY:US_holidays New Year's Day
END:VEVENT
BEGIN:VEVENT
UID:qga1@Ryan-jr
SEQUENCE:0
DTSTAMP:20241105T122934Z
DTSTART;VALUE=DATE:20240114
DTEND;VALUE=DATE:20240114
X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE
SUMMARY:US_holidays M L King Day
END:VEVENT
BEGIN:VEVENT
UID:axvt@Ryan-jr
SEQUENCE:0
DTSTAMP:20241105T122934Z
DTSTART;VALUE=DATE:20240218
DTEND;VALUE=DATE:20240218
X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE
SUMMARY:US_holidays Presidents' Day
END:VEVENT
BEGIN:VEVENT
UID:3t87@Ryan-jr
SEQUENCE:0
DTSTAMP:20241105T122934Z
DTSTART;VALUE=DATE:20240328
DTEND;VALUE=DATE:20240328
X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE
SUMMARY:US_holidays Good Friday
END:VEVENT
BEGIN:VEVENT
UID:olsu@Ryan-jr
SEQUENCE:0
DTSTAMP:20241105T122934Z
DTSTART;VALUE=DATE:20240330
DTEND;VALUE=DATE:20240330
X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE
SUMMARY:US_holidays Easter Sunday
END:VEVENT
BEGIN:VEVENT
UID:xts1@Ryan-jr
SEQUENCE:0
DTSTAMP:20241105T122934Z
DTSTART;VALUE=DATE:20240526
DTEND;VALUE=DATE:20240526
X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE
SUMMARY:US_holidays Memorial Day
END:VEVENT
BEGIN:VEVENT
UID:0e36@Ryan-jr
SEQUENCE:0
DTSTAMP:20241105T122934Z
DTSTART;VALUE=DATE:20240618
DTEND;VALUE=DATE:20240618
X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE
SUMMARY:US_holidays Juneteenth
END:VEVENT
BEGIN:VEVENT
UID:rc80@Ryan-jr
SEQUENCE:0
DTSTAMP:20241105T122934Z
DTSTART;VALUE=DATE:20240703
DTEND;VALUE=DATE:20240703
X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE
SUMMARY:US_holidays Independence Day
END:VEVENT
BEGIN:VEVENT
UID:386s@Ryan-jr
SEQUENCE:0
DTSTAMP:20241105T122934Z
DTSTART;VALUE=DATE:20240901
DTEND;VALUE=DATE:20240901
X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE
SUMMARY:US_holidays Labor Day
END:VEVENT
BEGIN:VEVENT
UID:102z@Ryan-jr
SEQUENCE:0
DTSTAMP:20241105T122934Z
DTSTART;VALUE=DATE:20241013
DTEND;VALUE=DATE:20241013
X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE
SUMMARY:US_holidays Columbus Day
END:VEVENT
BEGIN:VEVENT
UID:qqbg@Ryan-jr
SEQUENCE:0
DTSTAMP:20241105T122934Z
DTSTART;VALUE=DATE:20241110
DTEND;VALUE=DATE:20241110
X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE
SUMMARY:US_holidays Veterans Day
END:VEVENT
BEGIN:VEVENT
UID:dyh3@Ryan-jr
SEQUENCE:0
DTSTAMP:20241105T122934Z
DTSTART;VALUE=DATE:20241127
DTEND;VALUE=DATE:20241127
X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE
SUMMARY:US_holidays Thanksgiving Day
END:VEVENT
BEGIN:VEVENT
UID:oqsd@Ryan-jr
SEQUENCE:0
DTSTAMP:20241105T122934Z
DTSTART;VALUE=DATE:20241224
DTEND;VALUE=DATE:20241224
X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE
SUMMARY:US_holidays Christmas
END:VEVENT
BEGIN:VEVENT
UID:8140@Ryan-jr
SEQUENCE:0
DTSTAMP:20241105T122934Z
DTSTART;VALUE=DATE:20241231
DTEND;VALUE=DATE:20241231
X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE
SUMMARY:US_holidays New Year's Day
END:VEVENT
BEGIN:VEVENT
UID:fmmb@Ryan-jr
SEQUENCE:0
DTSTAMP:20241105T122934Z
DTSTART;VALUE=DATE:20250119
DTEND;VALUE=DATE:20250119
X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE
SUMMARY:US_holidays M L King Day
END:VEVENT
BEGIN:VEVENT
UID:l4x1@Ryan-jr
SEQUENCE:0
DTSTAMP:20241105T122934Z
DTSTART;VALUE=DATE:20250216
DTEND;VALUE=DATE:20250216
X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE
SUMMARY:US_holidays Presidents' Day
END:VEVENT
BEGIN:VEVENT
UID:fpt7@Ryan-jr
SEQUENCE:0
DTSTAMP:20241105T122934Z
DTSTART;VALUE=DATE:20250417
DTEND;VALUE=DATE:20250417
X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE
SUMMARY:US_holidays Good Friday
END:VEVENT
BEGIN:VEVENT
UID:x3y4@Ryan-jr
SEQUENCE:0
DTSTAMP:20241105T122934Z
DTSTART;VALUE=DATE:20250419
DTEND;VALUE=DATE:20250419
X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE
SUMMARY:US_holidays Easter Sunday
END:VEVENT
BEGIN:VEVENT
UID:fhn8@Ryan-jr
SEQUENCE:0
DTSTAMP:20241105T122934Z
DTSTART;VALUE=DATE:20250525
DTEND;VALUE=DATE:20250525
X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE
SUMMARY:US_holidays Memorial Day
END:VEVENT
BEGIN:VEVENT
UID:wue7@Ryan-jr
SEQUENCE:0
DTSTAMP:20241105T122934Z
DTSTART;VALUE=DATE:20250618
DTEND;VALUE=DATE:20250618
X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE
SUMMARY:US_holidays Juneteenth
END:VEVENT
BEGIN:VEVENT
UID:oq6h@Ryan-jr
SEQUENCE:0
DTSTAMP:20241105T122934Z
DTSTART;VALUE=DATE:20250703
DTEND;VALUE=DATE:20250703
X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE
SUMMARY:US_holidays Independence Day
END:VEVENT
BEGIN:VEVENT
UID:4gm3@Ryan-jr
SEQUENCE:0
DTSTAMP:20241105T122934Z
DTSTART;VALUE=DATE:20250831
DTEND;VALUE=DATE:20250831
X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE
SUMMARY:US_holidays Labor Day
END:VEVENT
BEGIN:VEVENT
UID:8he3@Ryan-jr
SEQUENCE:0
DTSTAMP:20241105T122934Z
DTSTART;VALUE=DATE:20251012
DTEND;VALUE=DATE:20251012
X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE
SUMMARY:US_holidays Columbus Day
END:VEVENT
BEGIN:VEVENT
UID:3u40@Ryan-jr
SEQUENCE:0
DTSTAMP:20241105T122934Z
DTSTART;VALUE=DATE:20251110
DTEND;VALUE=DATE:20251110
X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE
SUMMARY:US_holidays Veterans Day
END:VEVENT
BEGIN:VEVENT
UID:s651@Ryan-jr
SEQUENCE:0
DTSTAMP:20241105T122934Z
DTSTART;VALUE=DATE:20251126
DTEND;VALUE=DATE:20251126
X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE
SUMMARY:US_holidays Thanksgiving Day
END:VEVENT
BEGIN:VEVENT
UID:yzoz@Ryan-jr
SEQUENCE:0
DTSTAMP:20241105T122934Z
DTSTART;VALUE=DATE:20251224
DTEND;VALUE=DATE:20251224
X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE
SUMMARY:US_holidays Christmas
END:VEVENT
END:VCALENDAR

View File

@ -1,16 +0,0 @@
{
"id": "Date_Based_Calendar",
"linkGroupName": "Date Based Calendar",
"calendars": [
{
"url": "C:\\Users\\user\\OneDrive\\Desktop\\Internship tasks\\final calmerg\\test_calendars\\ferien_bayern_2023.ics",
"prefix": "Ferien_Bayern_2023",
"override": false
},
{
"url": "C:\\Users\\user\\OneDrive\\Desktop\\Internship tasks\\final calmerg\\test_calendars\\US_Holidays.ics",
"prefix": "US_holidays",
"override": false
}
]
}

View File

@ -1,266 +0,0 @@
BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//sebbo.net//ical-generator//EN
NAME:No Prefix Calendar
X-WR-CALNAME:No Prefix Calendar
BEGIN:VEVENT
UID:jfle@Ryan-jr
SEQUENCE:0
DTSTAMP:20241105T122935Z
DTSTART;VALUE=DATE:20231231
DTEND;VALUE=DATE:20231231
X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE
SUMMARY: New Year's Day
END:VEVENT
BEGIN:VEVENT
UID:s4ov@Ryan-jr
SEQUENCE:0
DTSTAMP:20241105T122935Z
DTSTART;VALUE=DATE:20240101
DTEND;VALUE=DATE:20240101
X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE
SUMMARY: New Year's Day Holiday
END:VEVENT
BEGIN:VEVENT
UID:ov14@Ryan-jr
SEQUENCE:0
DTSTAMP:20241105T122935Z
DTSTART;VALUE=DATE:20240102
DTEND;VALUE=DATE:20240102
X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE
SUMMARY: New Year's Day Holiday
END:VEVENT
BEGIN:VEVENT
UID:qdqh@Ryan-jr
SEQUENCE:0
DTSTAMP:20241105T122935Z
DTSTART;VALUE=DATE:20240103
DTEND;VALUE=DATE:20240103
X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE
SUMMARY: New Year's Day Holiday
END:VEVENT
BEGIN:VEVENT
UID:i05i@Ryan-jr
SEQUENCE:0
DTSTAMP:20241105T122935Z
DTSTART;VALUE=DATE:20240104
DTEND;VALUE=DATE:20240104
X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE
SUMMARY: New Year's Day Holiday
END:VEVENT
BEGIN:VEVENT
UID:k6ih@Ryan-jr
SEQUENCE:0
DTSTAMP:20241105T122935Z
DTSTART;VALUE=DATE:20240106
DTEND;VALUE=DATE:20240106
X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE
SUMMARY: Orthodox Christmas
END:VEVENT
BEGIN:VEVENT
UID:32bn@Ryan-jr
SEQUENCE:0
DTSTAMP:20241105T122935Z
DTSTART;VALUE=DATE:20240107
DTEND;VALUE=DATE:20240107
X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE
SUMMARY: Orthodox Christmas Holiday
END:VEVENT
BEGIN:VEVENT
UID:k1o7@Ryan-jr
SEQUENCE:0
DTSTAMP:20241105T122935Z
DTSTART;VALUE=DATE:20240222
DTEND;VALUE=DATE:20240222
X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE
SUMMARY: Defender of the Fatherland
END:VEVENT
BEGIN:VEVENT
UID:4l5n@Ryan-jr
SEQUENCE:0
DTSTAMP:20241105T122935Z
DTSTART;VALUE=DATE:20240307
DTEND;VALUE=DATE:20240307
X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE
SUMMARY: Intl. Women's Day
END:VEVENT
BEGIN:VEVENT
UID:ymwf@Ryan-jr
SEQUENCE:0
DTSTAMP:20241105T122935Z
DTSTART;VALUE=DATE:20240430
DTEND;VALUE=DATE:20240430
X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE
SUMMARY: Spring and Labor Day
END:VEVENT
BEGIN:VEVENT
UID:t4fd@Ryan-jr
SEQUENCE:0
DTSTAMP:20241105T122935Z
DTSTART;VALUE=DATE:20240508
DTEND;VALUE=DATE:20240508
X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE
SUMMARY: Victory Day
END:VEVENT
BEGIN:VEVENT
UID:foxu@Ryan-jr
SEQUENCE:0
DTSTAMP:20241105T122935Z
DTSTART;VALUE=DATE:20240611
DTEND;VALUE=DATE:20240611
X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE
SUMMARY: Russia Day
END:VEVENT
BEGIN:VEVENT
UID:ne1r@Ryan-jr
SEQUENCE:0
DTSTAMP:20241105T122935Z
DTSTART;VALUE=DATE:20241103
DTEND;VALUE=DATE:20241103
X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE
SUMMARY: Civil Unity Day
END:VEVENT
BEGIN:VEVENT
UID:jzcn@Ryan-jr
SEQUENCE:0
DTSTAMP:20241105T122935Z
DTSTART;VALUE=DATE:20241231
DTEND;VALUE=DATE:20241231
X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE
SUMMARY: New Year's Day
END:VEVENT
BEGIN:VEVENT
UID:dfzn@Ryan-jr
SEQUENCE:0
DTSTAMP:20241105T122935Z
DTSTART;VALUE=DATE:20250101
DTEND;VALUE=DATE:20250101
X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE
SUMMARY: New Year's Day Holiday
END:VEVENT
BEGIN:VEVENT
UID:v9mu@Ryan-jr
SEQUENCE:0
DTSTAMP:20241105T122935Z
DTSTART;VALUE=DATE:20250102
DTEND;VALUE=DATE:20250102
X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE
SUMMARY: New Year's Day Holiday
END:VEVENT
BEGIN:VEVENT
UID:x79k@Ryan-jr
SEQUENCE:0
DTSTAMP:20241105T122935Z
DTSTART;VALUE=DATE:20250103
DTEND;VALUE=DATE:20250103
X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE
SUMMARY: New Year's Day Holiday
END:VEVENT
BEGIN:VEVENT
UID:gj06@Ryan-jr
SEQUENCE:0
DTSTAMP:20241105T122935Z
DTSTART;VALUE=DATE:20250104
DTEND;VALUE=DATE:20250104
X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE
SUMMARY: New Year's Day Holiday
END:VEVENT
BEGIN:VEVENT
UID:s75j@Ryan-jr
SEQUENCE:0
DTSTAMP:20241105T122935Z
DTSTART;VALUE=DATE:20250106
DTEND;VALUE=DATE:20250106
X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE
SUMMARY: Orthodox Christmas
END:VEVENT
BEGIN:VEVENT
UID:u16z@Ryan-jr
SEQUENCE:0
DTSTAMP:20241105T122935Z
DTSTART;VALUE=DATE:20250107
DTEND;VALUE=DATE:20250107
X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE
SUMMARY: Orthodox Christmas Holiday
END:VEVENT
BEGIN:VEVENT
UID:c1co@Ryan-jr
SEQUENCE:0
DTSTAMP:20241105T122935Z
DTSTART;VALUE=DATE:20250223
DTEND;VALUE=DATE:20250223
X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE
SUMMARY: Defender of the Fatherland
END:VEVENT
BEGIN:VEVENT
UID:s1ga@Ryan-jr
SEQUENCE:0
DTSTAMP:20241105T122935Z
DTSTART;VALUE=DATE:20250309
DTEND;VALUE=DATE:20250309
X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE
SUMMARY: Intl. Women's Day
END:VEVENT
BEGIN:VEVENT
UID:7050@Ryan-jr
SEQUENCE:0
DTSTAMP:20241105T122935Z
DTSTART;VALUE=DATE:20250430
DTEND;VALUE=DATE:20250430
X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE
SUMMARY: Spring and Labor Day
END:VEVENT
BEGIN:VEVENT
UID:stsk@Ryan-jr
SEQUENCE:0
DTSTAMP:20241105T122935Z
DTSTART;VALUE=DATE:20250508
DTEND;VALUE=DATE:20250508
X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE
SUMMARY: Victory Day
END:VEVENT
BEGIN:VEVENT
UID:n4iy@Ryan-jr
SEQUENCE:0
DTSTAMP:20241105T122935Z
DTSTART;VALUE=DATE:20250611
DTEND;VALUE=DATE:20250611
X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE
SUMMARY: Russia Day
END:VEVENT
BEGIN:VEVENT
UID:7dco@Ryan-jr
SEQUENCE:0
DTSTAMP:20241105T122935Z
DTSTART;VALUE=DATE:20251103
DTEND;VALUE=DATE:20251103
X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE
SUMMARY: Civil Unity Day
END:VEVENT
END:VCALENDAR

View File

@ -1,11 +0,0 @@
{
"id": "No_Prefix_Calendar",
"linkGroupName": "No Prefix Calendar",
"calendars": [
{
"url": "C:\\Users\\user\\OneDrive\\Desktop\\Internship tasks\\final calmerg\\test_calendars\\San_Francisco_Public_Holidays.ics",
"prefix": "",
"override": false
}
]
}

View File

@ -1,266 +0,0 @@
BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//sebbo.net//ical-generator//EN
NAME:Override Calendar
X-WR-CALNAME:Override Calendar
BEGIN:VEVENT
UID:cknb@Ryan-jr
SEQUENCE:0
DTSTAMP:20241105T122935Z
DTSTART;VALUE=DATE:20231231
DTEND;VALUE=DATE:20231231
X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE
SUMMARY:Override Event
END:VEVENT
BEGIN:VEVENT
UID:p03j@Ryan-jr
SEQUENCE:0
DTSTAMP:20241105T122935Z
DTSTART;VALUE=DATE:20240101
DTEND;VALUE=DATE:20240101
X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE
SUMMARY:Override Event
END:VEVENT
BEGIN:VEVENT
UID:s2a8@Ryan-jr
SEQUENCE:0
DTSTAMP:20241105T122935Z
DTSTART;VALUE=DATE:20240102
DTEND;VALUE=DATE:20240102
X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE
SUMMARY:Override Event
END:VEVENT
BEGIN:VEVENT
UID:ptdn@Ryan-jr
SEQUENCE:0
DTSTAMP:20241105T122935Z
DTSTART;VALUE=DATE:20240103
DTEND;VALUE=DATE:20240103
X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE
SUMMARY:Override Event
END:VEVENT
BEGIN:VEVENT
UID:d7oa@Ryan-jr
SEQUENCE:0
DTSTAMP:20241105T122935Z
DTSTART;VALUE=DATE:20240104
DTEND;VALUE=DATE:20240104
X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE
SUMMARY:Override Event
END:VEVENT
BEGIN:VEVENT
UID:wuts@Ryan-jr
SEQUENCE:0
DTSTAMP:20241105T122935Z
DTSTART;VALUE=DATE:20240106
DTEND;VALUE=DATE:20240106
X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE
SUMMARY:Override Event
END:VEVENT
BEGIN:VEVENT
UID:g3b0@Ryan-jr
SEQUENCE:0
DTSTAMP:20241105T122935Z
DTSTART;VALUE=DATE:20240107
DTEND;VALUE=DATE:20240107
X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE
SUMMARY:Override Event
END:VEVENT
BEGIN:VEVENT
UID:qbx4@Ryan-jr
SEQUENCE:0
DTSTAMP:20241105T122935Z
DTSTART;VALUE=DATE:20240222
DTEND;VALUE=DATE:20240222
X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE
SUMMARY:Override Event
END:VEVENT
BEGIN:VEVENT
UID:v25w@Ryan-jr
SEQUENCE:0
DTSTAMP:20241105T122935Z
DTSTART;VALUE=DATE:20240307
DTEND;VALUE=DATE:20240307
X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE
SUMMARY:Override Event
END:VEVENT
BEGIN:VEVENT
UID:7u8c@Ryan-jr
SEQUENCE:0
DTSTAMP:20241105T122935Z
DTSTART;VALUE=DATE:20240430
DTEND;VALUE=DATE:20240430
X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE
SUMMARY:Override Event
END:VEVENT
BEGIN:VEVENT
UID:apf4@Ryan-jr
SEQUENCE:0
DTSTAMP:20241105T122935Z
DTSTART;VALUE=DATE:20240508
DTEND;VALUE=DATE:20240508
X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE
SUMMARY:Override Event
END:VEVENT
BEGIN:VEVENT
UID:jfpb@Ryan-jr
SEQUENCE:0
DTSTAMP:20241105T122935Z
DTSTART;VALUE=DATE:20240611
DTEND;VALUE=DATE:20240611
X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE
SUMMARY:Override Event
END:VEVENT
BEGIN:VEVENT
UID:2ykv@Ryan-jr
SEQUENCE:0
DTSTAMP:20241105T122935Z
DTSTART;VALUE=DATE:20241103
DTEND;VALUE=DATE:20241103
X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE
SUMMARY:Override Event
END:VEVENT
BEGIN:VEVENT
UID:0b26@Ryan-jr
SEQUENCE:0
DTSTAMP:20241105T122935Z
DTSTART;VALUE=DATE:20241231
DTEND;VALUE=DATE:20241231
X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE
SUMMARY:Override Event
END:VEVENT
BEGIN:VEVENT
UID:qs49@Ryan-jr
SEQUENCE:0
DTSTAMP:20241105T122935Z
DTSTART;VALUE=DATE:20250101
DTEND;VALUE=DATE:20250101
X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE
SUMMARY:Override Event
END:VEVENT
BEGIN:VEVENT
UID:559o@Ryan-jr
SEQUENCE:0
DTSTAMP:20241105T122935Z
DTSTART;VALUE=DATE:20250102
DTEND;VALUE=DATE:20250102
X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE
SUMMARY:Override Event
END:VEVENT
BEGIN:VEVENT
UID:8giv@Ryan-jr
SEQUENCE:0
DTSTAMP:20241105T122935Z
DTSTART;VALUE=DATE:20250103
DTEND;VALUE=DATE:20250103
X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE
SUMMARY:Override Event
END:VEVENT
BEGIN:VEVENT
UID:e57i@Ryan-jr
SEQUENCE:0
DTSTAMP:20241105T122935Z
DTSTART;VALUE=DATE:20250104
DTEND;VALUE=DATE:20250104
X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE
SUMMARY:Override Event
END:VEVENT
BEGIN:VEVENT
UID:ur8w@Ryan-jr
SEQUENCE:0
DTSTAMP:20241105T122935Z
DTSTART;VALUE=DATE:20250106
DTEND;VALUE=DATE:20250106
X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE
SUMMARY:Override Event
END:VEVENT
BEGIN:VEVENT
UID:08hg@Ryan-jr
SEQUENCE:0
DTSTAMP:20241105T122935Z
DTSTART;VALUE=DATE:20250107
DTEND;VALUE=DATE:20250107
X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE
SUMMARY:Override Event
END:VEVENT
BEGIN:VEVENT
UID:gvgf@Ryan-jr
SEQUENCE:0
DTSTAMP:20241105T122935Z
DTSTART;VALUE=DATE:20250223
DTEND;VALUE=DATE:20250223
X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE
SUMMARY:Override Event
END:VEVENT
BEGIN:VEVENT
UID:rllx@Ryan-jr
SEQUENCE:0
DTSTAMP:20241105T122935Z
DTSTART;VALUE=DATE:20250309
DTEND;VALUE=DATE:20250309
X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE
SUMMARY:Override Event
END:VEVENT
BEGIN:VEVENT
UID:sy19@Ryan-jr
SEQUENCE:0
DTSTAMP:20241105T122935Z
DTSTART;VALUE=DATE:20250430
DTEND;VALUE=DATE:20250430
X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE
SUMMARY:Override Event
END:VEVENT
BEGIN:VEVENT
UID:um2w@Ryan-jr
SEQUENCE:0
DTSTAMP:20241105T122935Z
DTSTART;VALUE=DATE:20250508
DTEND;VALUE=DATE:20250508
X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE
SUMMARY:Override Event
END:VEVENT
BEGIN:VEVENT
UID:fdjj@Ryan-jr
SEQUENCE:0
DTSTAMP:20241105T122935Z
DTSTART;VALUE=DATE:20250611
DTEND;VALUE=DATE:20250611
X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE
SUMMARY:Override Event
END:VEVENT
BEGIN:VEVENT
UID:fsik@Ryan-jr
SEQUENCE:0
DTSTAMP:20241105T122935Z
DTSTART;VALUE=DATE:20251103
DTEND;VALUE=DATE:20251103
X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
X-MICROSOFT-MSNCALENDAR-ALLDAYEVENT:TRUE
SUMMARY:Override Event
END:VEVENT
END:VCALENDAR

View File

@ -1,11 +0,0 @@
{
"id": "Override_Calendar",
"linkGroupName": "Override Calendar",
"calendars": [
{
"url": "C:\\Users\\user\\OneDrive\\Desktop\\Internship tasks\\final calmerg\\test_calendars\\San_Francisco_Public_Holidays.ics",
"prefix": "Override Event",
"override": true
}
]
}

View File

@ -1,46 +0,0 @@
BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//sebbo.net//ical-generator//EN
NAME:Time Based Calendar
X-WR-CALNAME:Time Based Calendar
BEGIN:VEVENT
UID:upko@Ryan-jr
SEQUENCE:0
DTSTAMP:20241105T122934Z
DTSTART:20241001T183000Z
DTEND:20241001T193000Z
SUMMARY:other_work calmerge
END:VEVENT
BEGIN:VEVENT
UID:myd3@Ryan-jr
SEQUENCE:0
DTSTAMP:20241105T122934Z
DTSTART:20241010T173000Z
DTEND:20241010T183000Z
SUMMARY:other_work to do
END:VEVENT
BEGIN:VEVENT
UID:zs1z@Ryan-jr
SEQUENCE:0
DTSTAMP:20241105T122934Z
DTSTART:20240930T113000Z
DTEND:20240930T123000Z
SUMMARY:work other work
END:VEVENT
BEGIN:VEVENT
UID:d6rq@Ryan-jr
SEQUENCE:0
DTSTAMP:20241105T122934Z
DTSTART:20241003T190000Z
DTEND:20241003T200000Z
SUMMARY:work progodessey
END:VEVENT
BEGIN:VEVENT
UID:6c65@Ryan-jr
SEQUENCE:0
DTSTAMP:20241105T122934Z
DTSTART:20241009T173000Z
DTEND:20241009T183000Z
SUMMARY:work do
END:VEVENT
END:VCALENDAR

View File

@ -1,16 +0,0 @@
{
"id": "Time_Based_Calendar",
"linkGroupName": "Time Based Calendar",
"calendars": [
{
"url": "C:\\Users\\user\\OneDrive\\Desktop\\Internship tasks\\final calmerg\\test_calendars\\other_work.ics",
"prefix": "other_work",
"override": false
},
{
"url": "C:\\Users\\user\\OneDrive\\Desktop\\Internship tasks\\final calmerg\\test_calendars\\work.ics",
"prefix": "work",
"override": false
}
]
}

View File

@ -1,320 +0,0 @@
BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//Calendar Labs//Calendar 1.0//EN
CALSCALE:GREGORIAN
METHOD:PUBLISH
X-WR-CALNAME:Russia Holidays
X-WR-TIMEZONE:Etc/GMT
BEGIN:VEVENT
SUMMARY:New Year's Day
DTSTART;VALUE=DATE:20240101
DTEND;VALUE=DATE:20240101
LOCATION:Russia
DESCRIPTION:Visit https://calendarlabs.com/holidays/us/new-years-day.php to know more about New Year's Day. \n\n Like us on Facebook: http://fb.com/calendarlabs to get updates
UID:67164e0bcb9111729515019@calendarlabs.com
DTSTAMP:20241021T125019Z
STATUS:CONFIRMED
TRANSP:TRANSPARENT
SEQUENCE:0
END:VEVENT
BEGIN:VEVENT
SUMMARY:New Year's Day Holiday
DTSTART;VALUE=DATE:20240102
DTEND;VALUE=DATE:20240102
LOCATION:Russia
DESCRIPTION:Visit https://calendarlabs.com/holidays/us/new-years-day.php to know more about New Year's Day Holiday. \n\n Like us on Facebook: http://fb.com/calendarlabs to get updates
UID:67164e0bcba351729515019@calendarlabs.com
DTSTAMP:20241021T125019Z
STATUS:CONFIRMED
TRANSP:TRANSPARENT
SEQUENCE:0
END:VEVENT
BEGIN:VEVENT
SUMMARY:New Year's Day Holiday
DTSTART;VALUE=DATE:20240103
DTEND;VALUE=DATE:20240103
LOCATION:Russia
DESCRIPTION:Visit https://calendarlabs.com/holidays/us/new-years-day.php to know more about New Year's Day Holiday. \n\n Like us on Facebook: http://fb.com/calendarlabs to get updates
UID:67164e0bcbb4a1729515019@calendarlabs.com
DTSTAMP:20241021T125019Z
STATUS:CONFIRMED
TRANSP:TRANSPARENT
SEQUENCE:0
END:VEVENT
BEGIN:VEVENT
SUMMARY:New Year's Day Holiday
DTSTART;VALUE=DATE:20240104
DTEND;VALUE=DATE:20240104
LOCATION:Russia
DESCRIPTION:Visit https://calendarlabs.com/holidays/us/new-years-day.php to know more about New Year's Day Holiday. \n\n Like us on Facebook: http://fb.com/calendarlabs to get updates
UID:67164e0bcbc471729515019@calendarlabs.com
DTSTAMP:20241021T125019Z
STATUS:CONFIRMED
TRANSP:TRANSPARENT
SEQUENCE:0
END:VEVENT
BEGIN:VEVENT
SUMMARY:New Year's Day Holiday
DTSTART;VALUE=DATE:20240105
DTEND;VALUE=DATE:20240105
LOCATION:Russia
DESCRIPTION:Visit https://calendarlabs.com/holidays/us/new-years-day.php to know more about New Year's Day Holiday. \n\n Like us on Facebook: http://fb.com/calendarlabs to get updates
UID:67164e0bcbd3c1729515019@calendarlabs.com
DTSTAMP:20241021T125019Z
STATUS:CONFIRMED
TRANSP:TRANSPARENT
SEQUENCE:0
END:VEVENT
BEGIN:VEVENT
SUMMARY:Orthodox Christmas
DTSTART;VALUE=DATE:20240107
DTEND;VALUE=DATE:20240107
LOCATION:Russia
DESCRIPTION:Visit https://calendarlabs.com/holidays/russia/orthodox-christmas.php to know more about Orthodox Christmas. \n\n Like us on Facebook: http://fb.com/calendarlabs to get updates
UID:67164e0bcbe351729515019@calendarlabs.com
DTSTAMP:20241021T125019Z
STATUS:CONFIRMED
TRANSP:TRANSPARENT
SEQUENCE:0
END:VEVENT
BEGIN:VEVENT
SUMMARY:Orthodox Christmas Holiday
DTSTART;VALUE=DATE:20240108
DTEND;VALUE=DATE:20240108
LOCATION:Russia
DESCRIPTION:Visit https://calendarlabs.com/holidays/russia/orthodox-christmas.php to know more about Orthodox Christmas Holiday. \n\n Like us on Facebook: http://fb.com/calendarlabs to get updates
UID:67164e0bcbf5b1729515019@calendarlabs.com
DTSTAMP:20241021T125019Z
STATUS:CONFIRMED
TRANSP:TRANSPARENT
SEQUENCE:0
END:VEVENT
BEGIN:VEVENT
SUMMARY:Defender of the Fatherland
DTSTART;VALUE=DATE:20240223
DTEND;VALUE=DATE:20240223
LOCATION:Russia
DESCRIPTION:Visit https://calendarlabs.com/holidays/russia/defender-of-the-fatherland.php to know more about Defender of the Fatherland. \n\n Like us on Facebook: http://fb.com/calendarlabs to get updates
UID:67164e0bcc0661729515019@calendarlabs.com
DTSTAMP:20241021T125019Z
STATUS:CONFIRMED
TRANSP:TRANSPARENT
SEQUENCE:0
END:VEVENT
BEGIN:VEVENT
SUMMARY:Intl. Women's Day
DTSTART;VALUE=DATE:20240308
DTEND;VALUE=DATE:20240308
LOCATION:Russia
DESCRIPTION:Visit https://calendarlabs.com/holidays/international/international-womens-day.php to know more about Intl. Women's Day. \n\n Like us on Facebook: http://fb.com/calendarlabs to get updates
UID:67164e0bcc16e1729515019@calendarlabs.com
DTSTAMP:20241021T125019Z
STATUS:CONFIRMED
TRANSP:TRANSPARENT
SEQUENCE:0
END:VEVENT
BEGIN:VEVENT
SUMMARY:Spring and Labor Day
DTSTART;VALUE=DATE:20240501
DTEND;VALUE=DATE:20240501
LOCATION:Russia
DESCRIPTION:Visit https://calendarlabs.com/holidays/uk/may-day.php to know more about Spring and Labor Day. \n\n Like us on Facebook: http://fb.com/calendarlabs to get updates
UID:67164e0bcc26f1729515019@calendarlabs.com
DTSTAMP:20241021T125019Z
STATUS:CONFIRMED
TRANSP:TRANSPARENT
SEQUENCE:0
END:VEVENT
BEGIN:VEVENT
SUMMARY:Victory Day
DTSTART;VALUE=DATE:20240509
DTEND;VALUE=DATE:20240509
LOCATION:Russia
DESCRIPTION:Visit https://calendarlabs.com/holidays/russia/victory-day.php to know more about Victory Day. \n\n Like us on Facebook: http://fb.com/calendarlabs to get updates
UID:67164e0bcc36f1729515019@calendarlabs.com
DTSTAMP:20241021T125019Z
STATUS:CONFIRMED
TRANSP:TRANSPARENT
SEQUENCE:0
END:VEVENT
BEGIN:VEVENT
SUMMARY:Russia Day
DTSTART;VALUE=DATE:20240612
DTEND;VALUE=DATE:20240612
LOCATION:Russia
DESCRIPTION:Visit https://calendarlabs.com/holidays/russia/russia-day.php to know more about Russia Day. \n\n Like us on Facebook: http://fb.com/calendarlabs to get updates
UID:67164e0bcc4771729515019@calendarlabs.com
DTSTAMP:20241021T125019Z
STATUS:CONFIRMED
TRANSP:TRANSPARENT
SEQUENCE:0
END:VEVENT
BEGIN:VEVENT
SUMMARY:Civil Unity Day
DTSTART;VALUE=DATE:20241104
DTEND;VALUE=DATE:20241104
LOCATION:Russia
DESCRIPTION:Visit https://calendarlabs.com/holidays/russia/unity-day.php to know more about Civil Unity Day. \n\n Like us on Facebook: http://fb.com/calendarlabs to get updates
UID:67164e0bcc57d1729515019@calendarlabs.com
DTSTAMP:20241021T125019Z
STATUS:CONFIRMED
TRANSP:TRANSPARENT
SEQUENCE:0
END:VEVENT
BEGIN:VEVENT
SUMMARY:New Year's Day
DTSTART;VALUE=DATE:20250101
DTEND;VALUE=DATE:20250101
LOCATION:Russia
DESCRIPTION:Visit https://calendarlabs.com/holidays/us/new-years-day.php to know more about New Year's Day. \n\n Like us on Facebook: http://fb.com/calendarlabs to get updates
UID:67164e0bcc6811729515019@calendarlabs.com
DTSTAMP:20241021T125019Z
STATUS:CONFIRMED
TRANSP:TRANSPARENT
SEQUENCE:0
END:VEVENT
BEGIN:VEVENT
SUMMARY:New Year's Day Holiday
DTSTART;VALUE=DATE:20250102
DTEND;VALUE=DATE:20250102
LOCATION:Russia
DESCRIPTION:Visit https://calendarlabs.com/holidays/us/new-years-day.php to know more about New Year's Day Holiday. \n\n Like us on Facebook: http://fb.com/calendarlabs to get updates
UID:67164e0bcc7881729515019@calendarlabs.com
DTSTAMP:20241021T125019Z
STATUS:CONFIRMED
TRANSP:TRANSPARENT
SEQUENCE:0
END:VEVENT
BEGIN:VEVENT
SUMMARY:New Year's Day Holiday
DTSTART;VALUE=DATE:20250103
DTEND;VALUE=DATE:20250103
LOCATION:Russia
DESCRIPTION:Visit https://calendarlabs.com/holidays/us/new-years-day.php to know more about New Year's Day Holiday. \n\n Like us on Facebook: http://fb.com/calendarlabs to get updates
UID:67164e0bcc8911729515019@calendarlabs.com
DTSTAMP:20241021T125019Z
STATUS:CONFIRMED
TRANSP:TRANSPARENT
SEQUENCE:0
END:VEVENT
BEGIN:VEVENT
SUMMARY:New Year's Day Holiday
DTSTART;VALUE=DATE:20250104
DTEND;VALUE=DATE:20250104
LOCATION:Russia
DESCRIPTION:Visit https://calendarlabs.com/holidays/us/new-years-day.php to know more about New Year's Day Holiday. \n\n Like us on Facebook: http://fb.com/calendarlabs to get updates
UID:67164e0bcc9a21729515019@calendarlabs.com
DTSTAMP:20241021T125019Z
STATUS:CONFIRMED
TRANSP:TRANSPARENT
SEQUENCE:0
END:VEVENT
BEGIN:VEVENT
SUMMARY:New Year's Day Holiday
DTSTART;VALUE=DATE:20250105
DTEND;VALUE=DATE:20250105
LOCATION:Russia
DESCRIPTION:Visit https://calendarlabs.com/holidays/us/new-years-day.php to know more about New Year's Day Holiday. \n\n Like us on Facebook: http://fb.com/calendarlabs to get updates
UID:67164e0bccac61729515019@calendarlabs.com
DTSTAMP:20241021T125019Z
STATUS:CONFIRMED
TRANSP:TRANSPARENT
SEQUENCE:0
END:VEVENT
BEGIN:VEVENT
SUMMARY:Orthodox Christmas
DTSTART;VALUE=DATE:20250107
DTEND;VALUE=DATE:20250107
LOCATION:Russia
DESCRIPTION:Visit https://calendarlabs.com/holidays/russia/orthodox-christmas.php to know more about Orthodox Christmas. \n\n Like us on Facebook: http://fb.com/calendarlabs to get updates
UID:67164e0bccbd41729515019@calendarlabs.com
DTSTAMP:20241021T125019Z
STATUS:CONFIRMED
TRANSP:TRANSPARENT
SEQUENCE:0
END:VEVENT
BEGIN:VEVENT
SUMMARY:Orthodox Christmas Holiday
DTSTART;VALUE=DATE:20250108
DTEND;VALUE=DATE:20250108
LOCATION:Russia
DESCRIPTION:Visit https://calendarlabs.com/holidays/russia/orthodox-christmas.php to know more about Orthodox Christmas Holiday. \n\n Like us on Facebook: http://fb.com/calendarlabs to get updates
UID:67164e0bccceb1729515019@calendarlabs.com
DTSTAMP:20241021T125019Z
STATUS:CONFIRMED
TRANSP:TRANSPARENT
SEQUENCE:0
END:VEVENT
BEGIN:VEVENT
SUMMARY:Defender of the Fatherland
DTSTART;VALUE=DATE:20250224
DTEND;VALUE=DATE:20250224
LOCATION:Russia
DESCRIPTION:Visit https://calendarlabs.com/holidays/russia/defender-of-the-fatherland.php to know more about Defender of the Fatherland. \n\n Like us on Facebook: http://fb.com/calendarlabs to get updates
UID:67164e0bcce091729515019@calendarlabs.com
DTSTAMP:20241021T125019Z
STATUS:CONFIRMED
TRANSP:TRANSPARENT
SEQUENCE:0
END:VEVENT
BEGIN:VEVENT
SUMMARY:Intl. Women's Day
DTSTART;VALUE=DATE:20250310
DTEND;VALUE=DATE:20250310
LOCATION:Russia
DESCRIPTION:Visit https://calendarlabs.com/holidays/international/international-womens-day.php to know more about Intl. Women's Day. \n\n Like us on Facebook: http://fb.com/calendarlabs to get updates
UID:67164e0bccf3b1729515019@calendarlabs.com
DTSTAMP:20241021T125019Z
STATUS:CONFIRMED
TRANSP:TRANSPARENT
SEQUENCE:0
END:VEVENT
BEGIN:VEVENT
SUMMARY:Spring and Labor Day
DTSTART;VALUE=DATE:20250501
DTEND;VALUE=DATE:20250501
LOCATION:Russia
DESCRIPTION:Visit https://calendarlabs.com/holidays/uk/may-day.php to know more about Spring and Labor Day. \n\n Like us on Facebook: http://fb.com/calendarlabs to get updates
UID:67164e0bcd0531729515019@calendarlabs.com
DTSTAMP:20241021T125019Z
STATUS:CONFIRMED
TRANSP:TRANSPARENT
SEQUENCE:0
END:VEVENT
BEGIN:VEVENT
SUMMARY:Victory Day
DTSTART;VALUE=DATE:20250509
DTEND;VALUE=DATE:20250509
LOCATION:Russia
DESCRIPTION:Visit https://calendarlabs.com/holidays/russia/victory-day.php to know more about Victory Day. \n\n Like us on Facebook: http://fb.com/calendarlabs to get updates
UID:67164e0bcd16f1729515019@calendarlabs.com
DTSTAMP:20241021T125019Z
STATUS:CONFIRMED
TRANSP:TRANSPARENT
SEQUENCE:0
END:VEVENT
BEGIN:VEVENT
SUMMARY:Russia Day
DTSTART;VALUE=DATE:20250612
DTEND;VALUE=DATE:20250612
LOCATION:Russia
DESCRIPTION:Visit https://calendarlabs.com/holidays/russia/russia-day.php to know more about Russia Day. \n\n Like us on Facebook: http://fb.com/calendarlabs to get updates
UID:67164e0bcd2961729515019@calendarlabs.com
DTSTAMP:20241021T125019Z
STATUS:CONFIRMED
TRANSP:TRANSPARENT
SEQUENCE:0
END:VEVENT
BEGIN:VEVENT
SUMMARY:Civil Unity Day
DTSTART;VALUE=DATE:20251104
DTEND;VALUE=DATE:20251104
LOCATION:Russia
DESCRIPTION:Visit https://calendarlabs.com/holidays/russia/unity-day.php to know more about Civil Unity Day. \n\n Like us on Facebook: http://fb.com/calendarlabs to get updates
UID:67164e0bcd3b51729515019@calendarlabs.com
DTSTAMP:20241021T125019Z
STATUS:CONFIRMED
TRANSP:TRANSPARENT
SEQUENCE:0
END:VEVENT
END:VCALENDAR

View File

@ -1,320 +0,0 @@
BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//Calendar Labs//Calendar 1.0//EN
CALSCALE:GREGORIAN
METHOD:PUBLISH
X-WR-CALNAME:US Holidays
X-WR-TIMEZONE:Etc/GMT
BEGIN:VEVENT
SUMMARY:New Year's Day
DTSTART;VALUE=DATE:20240101
DTEND;VALUE=DATE:20240101
LOCATION:United States
DESCRIPTION:Visit https://calendarlabs.com/holidays/us/new-years-day.php to know more about New Year's Day. \n\n Like us on Facebook: http://fb.com/calendarlabs to get updates
UID:6704d93cca14c1728371004@calendarlabs.com
DTSTAMP:20241008T070324Z
STATUS:CONFIRMED
TRANSP:TRANSPARENT
SEQUENCE:0
END:VEVENT
BEGIN:VEVENT
SUMMARY:M L King Day
DTSTART;VALUE=DATE:20240115
DTEND;VALUE=DATE:20240115
LOCATION:United States
DESCRIPTION:Visit https://calendarlabs.com/holidays/us/martin-luther-king-day.php to know more about M L King Day. \n\n Like us on Facebook: http://fb.com/calendarlabs to get updates
UID:6704d93cca1e81728371004@calendarlabs.com
DTSTAMP:20241008T070324Z
STATUS:CONFIRMED
TRANSP:TRANSPARENT
SEQUENCE:0
END:VEVENT
BEGIN:VEVENT
SUMMARY:Presidents' Day
DTSTART;VALUE=DATE:20240219
DTEND;VALUE=DATE:20240219
LOCATION:United States
DESCRIPTION:Visit https://calendarlabs.com/holidays/us/presidents-day.php to know more about Presidents' Day. \n\n Like us on Facebook: http://fb.com/calendarlabs to get updates
UID:6704d93cca27d1728371004@calendarlabs.com
DTSTAMP:20241008T070324Z
STATUS:CONFIRMED
TRANSP:TRANSPARENT
SEQUENCE:0
END:VEVENT
BEGIN:VEVENT
SUMMARY:Good Friday
DTSTART;VALUE=DATE:20240329
DTEND;VALUE=DATE:20240329
LOCATION:United States
DESCRIPTION:Visit https://calendarlabs.com/holidays/us/good-friday.php to know more about Good Friday. \n\n Like us on Facebook: http://fb.com/calendarlabs to get updates
UID:6704d93cca3161728371004@calendarlabs.com
DTSTAMP:20241008T070324Z
STATUS:CONFIRMED
TRANSP:TRANSPARENT
SEQUENCE:0
END:VEVENT
BEGIN:VEVENT
SUMMARY:Easter Sunday
DTSTART;VALUE=DATE:20240331
DTEND;VALUE=DATE:20240331
LOCATION:United States
DESCRIPTION:Visit https://calendarlabs.com/holidays/us/easter.php to know more about Easter Sunday. \n\n Like us on Facebook: http://fb.com/calendarlabs to get updates
UID:6704d93cca3ad1728371004@calendarlabs.com
DTSTAMP:20241008T070324Z
STATUS:CONFIRMED
TRANSP:TRANSPARENT
SEQUENCE:0
END:VEVENT
BEGIN:VEVENT
SUMMARY:Memorial Day
DTSTART;VALUE=DATE:20240527
DTEND;VALUE=DATE:20240527
LOCATION:United States
DESCRIPTION:Visit https://calendarlabs.com/holidays/us/memorial-day.php to know more about Memorial Day. \n\n Like us on Facebook: http://fb.com/calendarlabs to get updates
UID:6704d93cca44a1728371004@calendarlabs.com
DTSTAMP:20241008T070324Z
STATUS:CONFIRMED
TRANSP:TRANSPARENT
SEQUENCE:0
END:VEVENT
BEGIN:VEVENT
SUMMARY:Juneteenth
DTSTART;VALUE=DATE:20240619
DTEND;VALUE=DATE:20240619
LOCATION:United States
DESCRIPTION:Visit https://calendarlabs.com/holidays/us/juneteenth.php to know more about Juneteenth. \n\n Like us on Facebook: http://fb.com/calendarlabs to get updates
UID:6704d93cca4dc1728371004@calendarlabs.com
DTSTAMP:20241008T070324Z
STATUS:CONFIRMED
TRANSP:TRANSPARENT
SEQUENCE:0
END:VEVENT
BEGIN:VEVENT
SUMMARY:Independence Day
DTSTART;VALUE=DATE:20240704
DTEND;VALUE=DATE:20240704
LOCATION:United States
DESCRIPTION:Visit https://calendarlabs.com/holidays/us/independence-day.php to know more about Independence Day. \n\n Like us on Facebook: http://fb.com/calendarlabs to get updates
UID:6704d93cca5731728371004@calendarlabs.com
DTSTAMP:20241008T070324Z
STATUS:CONFIRMED
TRANSP:TRANSPARENT
SEQUENCE:0
END:VEVENT
BEGIN:VEVENT
SUMMARY:Labor Day
DTSTART;VALUE=DATE:20240902
DTEND;VALUE=DATE:20240902
LOCATION:United States
DESCRIPTION:Visit https://calendarlabs.com/holidays/us/labor-day.php to know more about Labor Day. \n\n Like us on Facebook: http://fb.com/calendarlabs to get updates
UID:6704d93cca60a1728371004@calendarlabs.com
DTSTAMP:20241008T070324Z
STATUS:CONFIRMED
TRANSP:TRANSPARENT
SEQUENCE:0
END:VEVENT
BEGIN:VEVENT
SUMMARY:Columbus Day
DTSTART;VALUE=DATE:20241014
DTEND;VALUE=DATE:20241014
LOCATION:United States
DESCRIPTION:Visit https://calendarlabs.com/holidays/us/columbus-day.php to know more about Columbus Day. \n\n Like us on Facebook: http://fb.com/calendarlabs to get updates
UID:6704d93cca69e1728371004@calendarlabs.com
DTSTAMP:20241008T070324Z
STATUS:CONFIRMED
TRANSP:TRANSPARENT
SEQUENCE:0
END:VEVENT
BEGIN:VEVENT
SUMMARY:Veterans Day
DTSTART;VALUE=DATE:20241111
DTEND;VALUE=DATE:20241111
LOCATION:United States
DESCRIPTION:Visit https://calendarlabs.com/holidays/us/veterans-day.php to know more about Veterans Day. \n\n Like us on Facebook: http://fb.com/calendarlabs to get updates
UID:6704d93cca7351728371004@calendarlabs.com
DTSTAMP:20241008T070324Z
STATUS:CONFIRMED
TRANSP:TRANSPARENT
SEQUENCE:0
END:VEVENT
BEGIN:VEVENT
SUMMARY:Thanksgiving Day
DTSTART;VALUE=DATE:20241128
DTEND;VALUE=DATE:20241128
LOCATION:United States
DESCRIPTION:Visit https://calendarlabs.com/holidays/us/thanksgiving-day.php to know more about Thanksgiving Day. \n\n Like us on Facebook: http://fb.com/calendarlabs to get updates
UID:6704d93cca7c61728371004@calendarlabs.com
DTSTAMP:20241008T070324Z
STATUS:CONFIRMED
TRANSP:TRANSPARENT
SEQUENCE:0
END:VEVENT
BEGIN:VEVENT
SUMMARY:Christmas
DTSTART;VALUE=DATE:20241225
DTEND;VALUE=DATE:20241225
LOCATION:United States
DESCRIPTION:Visit https://calendarlabs.com/holidays/us/christmas.php to know more about Christmas. \n\n Like us on Facebook: http://fb.com/calendarlabs to get updates
UID:6704d93cca8631728371004@calendarlabs.com
DTSTAMP:20241008T070324Z
STATUS:CONFIRMED
TRANSP:TRANSPARENT
SEQUENCE:0
END:VEVENT
BEGIN:VEVENT
SUMMARY:New Year's Day
DTSTART;VALUE=DATE:20250101
DTEND;VALUE=DATE:20250101
LOCATION:United States
DESCRIPTION:Visit https://calendarlabs.com/holidays/us/new-years-day.php to know more about New Year's Day. \n\n Like us on Facebook: http://fb.com/calendarlabs to get updates
UID:6704d93cca8fe1728371004@calendarlabs.com
DTSTAMP:20241008T070324Z
STATUS:CONFIRMED
TRANSP:TRANSPARENT
SEQUENCE:0
END:VEVENT
BEGIN:VEVENT
SUMMARY:M L King Day
DTSTART;VALUE=DATE:20250120
DTEND;VALUE=DATE:20250120
LOCATION:United States
DESCRIPTION:Visit https://calendarlabs.com/holidays/us/martin-luther-king-day.php to know more about M L King Day. \n\n Like us on Facebook: http://fb.com/calendarlabs to get updates
UID:6704d93cca99a1728371004@calendarlabs.com
DTSTAMP:20241008T070324Z
STATUS:CONFIRMED
TRANSP:TRANSPARENT
SEQUENCE:0
END:VEVENT
BEGIN:VEVENT
SUMMARY:Presidents' Day
DTSTART;VALUE=DATE:20250217
DTEND;VALUE=DATE:20250217
LOCATION:United States
DESCRIPTION:Visit https://calendarlabs.com/holidays/us/presidents-day.php to know more about Presidents' Day. \n\n Like us on Facebook: http://fb.com/calendarlabs to get updates
UID:6704d93ccaa361728371004@calendarlabs.com
DTSTAMP:20241008T070324Z
STATUS:CONFIRMED
TRANSP:TRANSPARENT
SEQUENCE:0
END:VEVENT
BEGIN:VEVENT
SUMMARY:Good Friday
DTSTART;VALUE=DATE:20250418
DTEND;VALUE=DATE:20250418
LOCATION:United States
DESCRIPTION:Visit https://calendarlabs.com/holidays/us/good-friday.php to know more about Good Friday. \n\n Like us on Facebook: http://fb.com/calendarlabs to get updates
UID:6704d93ccaad11728371004@calendarlabs.com
DTSTAMP:20241008T070324Z
STATUS:CONFIRMED
TRANSP:TRANSPARENT
SEQUENCE:0
END:VEVENT
BEGIN:VEVENT
SUMMARY:Easter Sunday
DTSTART;VALUE=DATE:20250420
DTEND;VALUE=DATE:20250420
LOCATION:United States
DESCRIPTION:Visit https://calendarlabs.com/holidays/us/easter.php to know more about Easter Sunday. \n\n Like us on Facebook: http://fb.com/calendarlabs to get updates
UID:6704d93ccab6b1728371004@calendarlabs.com
DTSTAMP:20241008T070324Z
STATUS:CONFIRMED
TRANSP:TRANSPARENT
SEQUENCE:0
END:VEVENT
BEGIN:VEVENT
SUMMARY:Memorial Day
DTSTART;VALUE=DATE:20250526
DTEND;VALUE=DATE:20250526
LOCATION:United States
DESCRIPTION:Visit https://calendarlabs.com/holidays/us/memorial-day.php to know more about Memorial Day. \n\n Like us on Facebook: http://fb.com/calendarlabs to get updates
UID:6704d93ccac0d1728371004@calendarlabs.com
DTSTAMP:20241008T070324Z
STATUS:CONFIRMED
TRANSP:TRANSPARENT
SEQUENCE:0
END:VEVENT
BEGIN:VEVENT
SUMMARY:Juneteenth
DTSTART;VALUE=DATE:20250619
DTEND;VALUE=DATE:20250619
LOCATION:United States
DESCRIPTION:Visit https://calendarlabs.com/holidays/us/juneteenth.php to know more about Juneteenth. \n\n Like us on Facebook: http://fb.com/calendarlabs to get updates
UID:6704d93ccacac1728371004@calendarlabs.com
DTSTAMP:20241008T070324Z
STATUS:CONFIRMED
TRANSP:TRANSPARENT
SEQUENCE:0
END:VEVENT
BEGIN:VEVENT
SUMMARY:Independence Day
DTSTART;VALUE=DATE:20250704
DTEND;VALUE=DATE:20250704
LOCATION:United States
DESCRIPTION:Visit https://calendarlabs.com/holidays/us/independence-day.php to know more about Independence Day. \n\n Like us on Facebook: http://fb.com/calendarlabs to get updates
UID:6704d93ccad4a1728371004@calendarlabs.com
DTSTAMP:20241008T070324Z
STATUS:CONFIRMED
TRANSP:TRANSPARENT
SEQUENCE:0
END:VEVENT
BEGIN:VEVENT
SUMMARY:Labor Day
DTSTART;VALUE=DATE:20250901
DTEND;VALUE=DATE:20250901
LOCATION:United States
DESCRIPTION:Visit https://calendarlabs.com/holidays/us/labor-day.php to know more about Labor Day. \n\n Like us on Facebook: http://fb.com/calendarlabs to get updates
UID:6704d93ccadea1728371004@calendarlabs.com
DTSTAMP:20241008T070324Z
STATUS:CONFIRMED
TRANSP:TRANSPARENT
SEQUENCE:0
END:VEVENT
BEGIN:VEVENT
SUMMARY:Columbus Day
DTSTART;VALUE=DATE:20251013
DTEND;VALUE=DATE:20251013
LOCATION:United States
DESCRIPTION:Visit https://calendarlabs.com/holidays/us/columbus-day.php to know more about Columbus Day. \n\n Like us on Facebook: http://fb.com/calendarlabs to get updates
UID:6704d93ccae8a1728371004@calendarlabs.com
DTSTAMP:20241008T070324Z
STATUS:CONFIRMED
TRANSP:TRANSPARENT
SEQUENCE:0
END:VEVENT
BEGIN:VEVENT
SUMMARY:Veterans Day
DTSTART;VALUE=DATE:20251111
DTEND;VALUE=DATE:20251111
LOCATION:United States
DESCRIPTION:Visit https://calendarlabs.com/holidays/us/veterans-day.php to know more about Veterans Day. \n\n Like us on Facebook: http://fb.com/calendarlabs to get updates
UID:6704d93ccaf2b1728371004@calendarlabs.com
DTSTAMP:20241008T070324Z
STATUS:CONFIRMED
TRANSP:TRANSPARENT
SEQUENCE:0
END:VEVENT
BEGIN:VEVENT
SUMMARY:Thanksgiving Day
DTSTART;VALUE=DATE:20251127
DTEND;VALUE=DATE:20251127
LOCATION:United States
DESCRIPTION:Visit https://calendarlabs.com/holidays/us/thanksgiving-day.php to know more about Thanksgiving Day. \n\n Like us on Facebook: http://fb.com/calendarlabs to get updates
UID:6704d93ccafd01728371004@calendarlabs.com
DTSTAMP:20241008T070324Z
STATUS:CONFIRMED
TRANSP:TRANSPARENT
SEQUENCE:0
END:VEVENT
BEGIN:VEVENT
SUMMARY:Christmas
DTSTART;VALUE=DATE:20251225
DTEND;VALUE=DATE:20251225
LOCATION:United States
DESCRIPTION:Visit https://calendarlabs.com/holidays/us/christmas.php to know more about Christmas. \n\n Like us on Facebook: http://fb.com/calendarlabs to get updates
UID:6704d93ccb0721728371004@calendarlabs.com
DTSTAMP:20241008T070324Z
STATUS:CONFIRMED
TRANSP:TRANSPARENT
SEQUENCE:0
END:VEVENT
END:VCALENDAR

View File

@ -1,89 +0,0 @@
BEGIN:VCALENDAR
VERSION:2.0
METHOD:PUBLISH
PRODID:-//schulferien.org//iCal Generator//DE
BEGIN:VEVENT
CREATED:20240921T032002Z
LAST-MODIFIED:20240921T032002Z
DTSTAMP:20240921T032002Z
SUMMARY:Winterferien 2023 Bayern
DTSTART;VALUE=DATE:20230220
DTEND;VALUE=DATE:20230225
URL:http://www.schulferien.org
DESCRIPTION:Alle Termine auf www.schulferien.org
TRANSP:TRANSPARENT
UID:F_2023_termin66ee1f432d75c@schulferien.org
END:VEVENT
BEGIN:VEVENT
CREATED:20240921T032002Z
LAST-MODIFIED:20240921T032002Z
DTSTAMP:20240921T032002Z
SUMMARY:Osterferien 2023 Bayern
DTSTART;VALUE=DATE:20230403
DTEND;VALUE=DATE:20230416
URL:http://www.schulferien.org
DESCRIPTION:Alle Termine auf www.schulferien.org
TRANSP:TRANSPARENT
UID:F_2023_termin66ee1f432dc7f@schulferien.org
END:VEVENT
BEGIN:VEVENT
CREATED:20240921T032002Z
LAST-MODIFIED:20240921T032002Z
DTSTAMP:20240921T032002Z
SUMMARY:Pfingstferien 2023 Bayern
DTSTART;VALUE=DATE:20230530
DTEND;VALUE=DATE:20230610
URL:http://www.schulferien.org
DESCRIPTION:Alle Termine auf www.schulferien.org
TRANSP:TRANSPARENT
UID:F_2023_termin66ee1f432dccb@schulferien.org
END:VEVENT
BEGIN:VEVENT
CREATED:20240921T032002Z
LAST-MODIFIED:20240921T032002Z
DTSTAMP:20240921T032002Z
SUMMARY:Sommerferien 2023 Bayern
DTSTART;VALUE=DATE:20230731
DTEND;VALUE=DATE:20230912
URL:http://www.schulferien.org
DESCRIPTION:Alle Termine auf www.schulferien.org
TRANSP:TRANSPARENT
UID:F_2023_termin66ee1f432dd04@schulferien.org
END:VEVENT
BEGIN:VEVENT
CREATED:20240921T032002Z
LAST-MODIFIED:20240921T032002Z
DTSTAMP:20240921T032002Z
SUMMARY:Herbstferien 2023 Bayern
DTSTART;VALUE=DATE:20231030
DTEND;VALUE=DATE:20231104
URL:http://www.schulferien.org
DESCRIPTION:Alle Termine auf www.schulferien.org
TRANSP:TRANSPARENT
UID:F_2023_termin66ee1f432dd29@schulferien.org
END:VEVENT
BEGIN:VEVENT
CREATED:20240921T032002Z
LAST-MODIFIED:20240921T032002Z
DTSTAMP:20240921T032002Z
SUMMARY:Herbstferien 2023 Bayern
DTSTART;VALUE=DATE:20231122
DTEND;VALUE=DATE:20231123
URL:http://www.schulferien.org
DESCRIPTION:Alle Termine auf www.schulferien.org
TRANSP:TRANSPARENT
UID:F_2023_termin66ee1f432dd58@schulferien.org
END:VEVENT
BEGIN:VEVENT
CREATED:20240921T032002Z
LAST-MODIFIED:20240921T032002Z
DTSTAMP:20240921T032002Z
SUMMARY:Weihnachtsferien 2023 Bayern
DTSTART;VALUE=DATE:20231223
DTEND;VALUE=DATE:20240106
URL:http://www.schulferien.org
DESCRIPTION:Alle Termine auf www.schulferien.org
TRANSP:TRANSPARENT
UID:F_2023_termin66ee1f432dd7c@schulferien.org
END:VEVENT
END:VCALENDAR

View File

@ -1,32 +0,0 @@
BEGIN:VCALENDAR
PRODID:-//Google Inc//Google Calendar 70.9054//EN
VERSION:2.0
CALSCALE:GREGORIAN
METHOD:PUBLISH
X-WR-CALNAME:other work
X-WR-TIMEZONE:Africa/Nairobi
BEGIN:VEVENT
DTSTART:20241001T183000Z
DTEND:20241001T193000Z
DTSTAMP:20241104T123219Z
UID:5rplp3qqvjadm1bc210un9po2l@google.com
CREATED:20241001T194435Z
LAST-MODIFIED:20241001T194435Z
SEQUENCE:0
STATUS:CONFIRMED
SUMMARY:calmerge
TRANSP:OPAQUE
END:VEVENT
BEGIN:VEVENT
DTSTART:20241010T173000Z
DTEND:20241010T183000Z
DTSTAMP:20241104T123219Z
UID:58f1gf5cbp8k1du2chiufuo510@google.com
CREATED:20241010T123352Z
LAST-MODIFIED:20241010T123352Z
SEQUENCE:0
STATUS:CONFIRMED
SUMMARY:to do
TRANSP:OPAQUE
END:VEVENT
END:VCALENDAR