diff --git a/.gitIgnore b/.gitIgnore
index 5b7035925128d2960b18daf23a5e282e83d1118c..46671c68d790c4732aa34e6ada7f9a96303df061 100644
--- a/.gitIgnore
+++ b/.gitIgnore
@@ -1 +1,6 @@
-CreateDB.py
\ No newline at end of file
+CreateDB.py
+venv
+practice/
+ui/
+__pycache__/
+.pytest_cache/
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
new file mode 100644
index 0000000000000000000000000000000000000000..de1f959d713a3227e9f7daf0cbbfb5e3101ba37c
--- /dev/null
+++ b/.gitlab-ci.yml
@@ -0,0 +1,14 @@
+build-job:
+  stage: build
+  script:
+    - echo "Proses build"
+
+test-job:
+  stage: test
+  script:
+    - echo "Proses test"
+
+deploy-prod:
+  stage: deploy
+  script:
+    - echo "Proses deploy"
diff --git a/README.md b/README.md
index 7b9236e5ccc9ce222117fcadb7d3ba37a5066d01..e47398587603e062074ead51beacab19b90e9c6a 100644
--- a/README.md
+++ b/README.md
@@ -1,92 +1,32 @@
-# TubesRPL
+# Tugas Besar IF2250 Rekayasa Perangkat Lunak
+### Implementasi Perancangan Perangkat Lunak
 
+Repository ini dibuat dalam rangka memenuhi Tugas Besar Mata Kuliah IF2250 Rekayasa Perangkat Lunak Semester 4 Tahun 2021/2022.
 
+## Table of Contents
+- [Penjelasan singkat aplikasi](#penjelasan-singkat-aplikasi)
+- [Cara menjalankan aplikasi](#cara-menjalankan-aplikasi)
+- [Modul yang diimplementasi](#modul-yang-diimplementasi)
+- [Tabel basis data yang diimplementasi](#tabel-basis-data-yang-diimplementasi)
 
-## Getting started
+## Penjelasan singkat aplikasi
+Aplikasi yang terdapat dalam repository ini bernama CarbonTrackr. CarbonTrackr adalah sebuah aplikasi desktop penghitung jejak karbon. Pengguna dapat mengetahui nilai jejak karbon miliknya dengan memasukkan catatan kegiatan ke aplikasi CarbonTracker. Selain itu, terdapat fitur _feeds_ konten bacaan berita mengenai jejak karbon. Pengguna dengan _membership premium_ dapat mengakses tips dan trik dalam mengurangi jejak karbon.
 
-To make it easy for you to get started with GitLab, here's a list of recommended next steps.
+## Cara menjalankan aplikasi
+Aplikasi CarbonTrackr dapat dijalankan dengan langkah-langkah berikut:
+1. Clone repository ini dengan `git clone https://gitlab.informatika.org/geraldabrhm/TubesRPL.git`
+2. Untuk menjalankan CarbonTrackr, jalankan `MainWindow.py` yang terdapat dalam folder `src/features`
 
-Already a pro? Just edit this README.md and make it your own. Want to make it easy? [Use the template at the bottom](#editing-this-readme)!
+## Modul yang diimplementasi
+|    NIM     |       Nama         | Modul yang diimplementasi    | Capture screen 1 | Capture screen 2 |
+ ---------- | ------------------ | ---------------------------- | -------------------------- | ------------------- |
+| 13520080   | Jason Kanggara     | Tips and Trick               | ![TipsandTrick1](doc/7_2_TipsandTrick.png) | ![TipsandTrick2](doc/7_1_TipsandTrick.png) |
+| 13520108   | M. Rakha Athaya    | Login dan Register           | ![Login](doc/2_Login.png) | ![Register](doc/3_Register.png) |
+| 13520125   | Ikmal Alfaozi      | Waiting List                 | ![WaitingList](doc/8_WaitingList.png) | - |
+| 13520138   | Gerald A. Sianturi | Summary dan Input Data Emisi | ![InputEmisi](doc/5_InputEmisi.png) | ![Summary](doc/4_Summary.png) |
 
-## Add your files
 
-- [ ] [Create](https://docs.gitlab.com/ee/user/project/repository/web_editor.html#create-a-file) or [upload](https://docs.gitlab.com/ee/user/project/repository/web_editor.html#upload-a-file) files
-- [ ] [Add files using the command line](https://docs.gitlab.com/ee/gitlab-basics/add-file.html#add-a-file-using-the-command-line) or push an existing Git repository with the following command:
+## Tabel basis data yang diimplementasi
+![Relational Scheme](doc/CarbonTrackr_RelationalScheme.png)
 
-```
-cd existing_repo
-git remote add origin https://gitlab.com/geraldabrhm/TubesRPL.git
-git branch -M main
-git push -uf origin main
-```
 
-## Integrate with your tools
-
-- [ ] [Set up project integrations](https://gitlab.com/geraldabrhm/TubesRPL/-/settings/integrations)
-
-## Collaborate with your team
-
-- [ ] [Invite team members and collaborators](https://docs.gitlab.com/ee/user/project/members/)
-- [ ] [Create a new merge request](https://docs.gitlab.com/ee/user/project/merge_requests/creating_merge_requests.html)
-- [ ] [Automatically close issues from merge requests](https://docs.gitlab.com/ee/user/project/issues/managing_issues.html#closing-issues-automatically)
-- [ ] [Enable merge request approvals](https://docs.gitlab.com/ee/user/project/merge_requests/approvals/)
-- [ ] [Automatically merge when pipeline succeeds](https://docs.gitlab.com/ee/user/project/merge_requests/merge_when_pipeline_succeeds.html)
-
-## Test and Deploy
-
-Use the built-in continuous integration in GitLab.
-
-- [ ] [Get started with GitLab CI/CD](https://docs.gitlab.com/ee/ci/quick_start/index.html)
-- [ ] [Analyze your code for known vulnerabilities with Static Application Security Testing(SAST)](https://docs.gitlab.com/ee/user/application_security/sast/)
-- [ ] [Deploy to Kubernetes, Amazon EC2, or Amazon ECS using Auto Deploy](https://docs.gitlab.com/ee/topics/autodevops/requirements.html)
-- [ ] [Use pull-based deployments for improved Kubernetes management](https://docs.gitlab.com/ee/user/clusters/agent/)
-- [ ] [Set up protected environments](https://docs.gitlab.com/ee/ci/environments/protected_environments.html)
-
-***
-
-# Editing this README
-
-When you're ready to make this README your own, just edit this file and use the handy template below (or feel free to structure it however you want - this is just a starting point!).  Thank you to [makeareadme.com](https://www.makeareadme.com/) for this template.
-
-## Suggestions for a good README
-Every project is different, so consider which of these sections apply to yours. The sections used in the template are suggestions for most open source projects. Also keep in mind that while a README can be too long and detailed, too long is better than too short. If you think your README is too long, consider utilizing another form of documentation rather than cutting out information.
-
-## Name
-Choose a self-explaining name for your project.
-
-## Description
-Let people know what your project can do specifically. Provide context and add a link to any reference visitors might be unfamiliar with. A list of Features or a Background subsection can also be added here. If there are alternatives to your project, this is a good place to list differentiating factors.
-
-## Badges
-On some READMEs, you may see small images that convey metadata, such as whether or not all the tests are passing for the project. You can use Shields to add some to your README. Many services also have instructions for adding a badge.
-
-## Visuals
-Depending on what you are making, it can be a good idea to include screenshots or even a video (you'll frequently see GIFs rather than actual videos). Tools like ttygif can help, but check out Asciinema for a more sophisticated method.
-
-## Installation
-Within a particular ecosystem, there may be a common way of installing things, such as using Yarn, NuGet, or Homebrew. However, consider the possibility that whoever is reading your README is a novice and would like more guidance. Listing specific steps helps remove ambiguity and gets people to using your project as quickly as possible. If it only runs in a specific context like a particular programming language version or operating system or has dependencies that have to be installed manually, also add a Requirements subsection.
-
-## Usage
-Use examples liberally, and show the expected output if you can. It's helpful to have inline the smallest example of usage that you can demonstrate, while providing links to more sophisticated examples if they are too long to reasonably include in the README.
-
-## Support
-Tell people where they can go to for help. It can be any combination of an issue tracker, a chat room, an email address, etc.
-
-## Roadmap
-If you have ideas for releases in the future, it is a good idea to list them in the README.
-
-## Contributing
-State if you are open to contributions and what your requirements are for accepting them.
-
-For people who want to make changes to your project, it's helpful to have some documentation on how to get started. Perhaps there is a script that they should run or some environment variables that they need to set. Make these steps explicit. These instructions could also be useful to your future self.
-
-You can also document commands to lint the code or run tests. These steps help to ensure high code quality and reduce the likelihood that the changes inadvertently break something. Having instructions for running tests is especially helpful if it requires external setup, such as starting a Selenium server for testing in a browser.
-
-## Authors and acknowledgment
-Show your appreciation to those who have contributed to the project.
-
-## License
-For open source projects, say how it is licensed.
-
-## Project status
-If you have run out of energy or time for your project, put a note at the top of the README saying that development has slowed down or stopped completely. Someone may choose to fork your project or volunteer to step in as a maintainer or owner, allowing your project to keep going. You can also make an explicit request for maintainers.
diff --git a/dataset/toptrackr.sql b/dataset/toptrackr.sql
new file mode 100644
index 0000000000000000000000000000000000000000..12ef9b77f96d444748dabe8193d655133bae107e
--- /dev/null
+++ b/dataset/toptrackr.sql
@@ -0,0 +1,1060 @@
+-- phpMyAdmin SQL Dump
+-- version 5.1.1
+-- https://www.phpmyadmin.net/
+--
+-- Host: 127.0.0.1
+-- Generation Time: Apr 11, 2022 at 10:01 AM
+-- Server version: 10.4.22-MariaDB
+-- PHP Version: 8.1.2
+
+SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
+START TRANSACTION;
+SET time_zone = "+00:00";
+
+
+/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
+/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
+/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
+/*!40101 SET NAMES utf8mb4 */;
+
+--
+-- Database: `toptrackr`
+--
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `administrator`
+--
+
+CREATE TABLE `administrator` (
+  `IDAdmin` int(11) NOT NULL,
+  `UsernameAdm` varchar(15) NOT NULL,
+  `Password` varchar(255) NOT NULL
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
+
+--
+-- Dumping data for table `administrator`
+--
+
+INSERT INTO `administrator` (`IDAdmin`, `UsernameAdm`, `Password`) VALUES
+(1, 'Jeffrey', '%0pMCwb$XP'),
+(2, 'Micheal', ')4%$*POylu'),
+(3, 'Ronald', '(^Q3rZjL6T'),
+(4, 'Wendy', 'm$m2MJw)$^'),
+(5, 'admin', 'admin');
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `carbon_trace`
+--
+
+CREATE TABLE `carbon_trace` (
+  `IDTracing` int(11) NOT NULL,
+  `ID_Customer` int(11) NOT NULL,
+  `TanggalInput` date NOT NULL,
+  `KuantitasJarakMotor` decimal(5,2) NOT NULL DEFAULT 0.00,
+  `KuantitasListrik` decimal(5,2) NOT NULL DEFAULT 0.00
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
+
+--
+-- Dumping data for table `carbon_trace`
+--
+
+INSERT INTO `carbon_trace` (`IDTracing`, `ID_Customer`, `TanggalInput`, `KuantitasJarakMotor`, `KuantitasListrik`) VALUES
+(1, 1, '2022-01-18', '14.00', '9.00'),
+(2, 1, '2022-01-15', '12.00', '16.00'),
+(3, 1, '2022-01-22', '6.00', '5.00'),
+(4, 1, '2022-01-16', '8.00', '18.00'),
+(5, 1, '2022-01-17', '19.00', '18.00'),
+(6, 1, '2022-01-05', '9.00', '11.00'),
+(7, 1, '2022-01-09', '17.00', '3.00'),
+(8, 1, '2022-01-02', '18.00', '19.00'),
+(9, 1, '2022-01-30', '4.00', '11.00'),
+(10, 2, '2022-01-01', '1.00', '5.00'),
+(11, 3, '2022-01-11', '20.00', '15.00'),
+(12, 3, '2022-01-28', '8.00', '16.00'),
+(13, 3, '2022-01-28', '17.00', '4.00'),
+(14, 3, '2022-01-13', '6.00', '5.00'),
+(15, 3, '2022-01-07', '4.00', '20.00'),
+(16, 4, '2022-01-11', '16.00', '13.00'),
+(17, 5, '2022-01-28', '7.00', '13.00'),
+(18, 5, '2022-01-04', '16.00', '11.00'),
+(19, 5, '2022-01-08', '3.00', '17.00'),
+(20, 6, '2022-01-06', '19.00', '15.00'),
+(21, 6, '2022-01-13', '18.00', '19.00'),
+(22, 6, '2022-01-01', '18.00', '3.00'),
+(23, 6, '2022-01-21', '13.00', '5.00'),
+(24, 6, '2022-01-31', '20.00', '10.00'),
+(25, 6, '2022-01-04', '17.00', '11.00'),
+(26, 6, '2022-01-31', '15.00', '9.00'),
+(27, 6, '2022-01-06', '18.00', '9.00'),
+(28, 6, '2022-01-26', '18.00', '17.00'),
+(29, 7, '2022-01-25', '4.00', '12.00'),
+(30, 7, '2022-01-21', '18.00', '5.00'),
+(31, 7, '2022-01-21', '16.00', '19.00'),
+(32, 7, '2022-01-02', '9.00', '17.00'),
+(33, 7, '2022-01-26', '3.00', '10.00'),
+(34, 7, '2022-01-05', '2.00', '10.00'),
+(35, 7, '2022-01-04', '5.00', '9.00'),
+(36, 7, '2022-01-12', '1.00', '17.00'),
+(37, 7, '2022-01-04', '12.00', '18.00'),
+(38, 7, '2022-01-20', '17.00', '16.00'),
+(39, 7, '2022-01-22', '7.00', '5.00'),
+(40, 7, '2022-01-22', '10.00', '15.00'),
+(41, 7, '2022-01-10', '9.00', '6.00'),
+(42, 8, '2022-01-29', '16.00', '20.00'),
+(43, 8, '2022-01-25', '3.00', '17.00'),
+(44, 8, '2022-01-19', '10.00', '11.00'),
+(45, 8, '2022-01-10', '19.00', '18.00'),
+(46, 8, '2022-01-08', '1.00', '18.00'),
+(47, 8, '2022-01-06', '7.00', '7.00'),
+(48, 8, '2022-01-24', '13.00', '11.00'),
+(49, 9, '2022-01-05', '15.00', '13.00'),
+(50, 9, '2022-01-14', '15.00', '19.00'),
+(51, 9, '2022-01-12', '20.00', '19.00'),
+(52, 9, '2022-01-23', '1.00', '14.00'),
+(53, 9, '2022-01-19', '3.00', '14.00'),
+(54, 9, '2022-01-14', '1.00', '4.00'),
+(55, 9, '2022-01-01', '7.00', '18.00'),
+(56, 9, '2022-01-29', '20.00', '20.00'),
+(57, 11, '2022-01-05', '19.00', '20.00'),
+(58, 11, '2022-01-02', '5.00', '8.00'),
+(59, 11, '2022-01-21', '5.00', '16.00'),
+(60, 11, '2022-01-23', '15.00', '14.00'),
+(61, 11, '2022-01-17', '4.00', '14.00'),
+(62, 11, '2022-01-17', '3.00', '12.00'),
+(63, 12, '2022-01-31', '11.00', '6.00'),
+(64, 12, '2022-01-22', '17.00', '4.00'),
+(65, 12, '2022-01-28', '19.00', '9.00'),
+(66, 12, '2022-01-04', '8.00', '3.00'),
+(67, 12, '2022-01-30', '5.00', '12.00'),
+(68, 12, '2022-01-11', '13.00', '13.00'),
+(69, 12, '2022-01-07', '8.00', '18.00'),
+(70, 12, '2022-01-07', '15.00', '7.00'),
+(71, 12, '2022-01-21', '10.00', '17.00'),
+(72, 12, '2022-01-16', '15.00', '4.00'),
+(73, 12, '2022-01-31', '5.00', '15.00'),
+(74, 13, '2022-01-22', '15.00', '6.00'),
+(75, 13, '2022-01-05', '18.00', '11.00'),
+(76, 13, '2022-01-27', '1.00', '11.00'),
+(77, 13, '2022-01-19', '4.00', '3.00'),
+(78, 13, '2022-01-22', '5.00', '19.00'),
+(79, 13, '2022-01-02', '15.00', '10.00'),
+(80, 13, '2022-01-01', '9.00', '19.00'),
+(81, 14, '2022-01-03', '19.00', '6.00'),
+(82, 14, '2022-01-05', '20.00', '20.00'),
+(83, 14, '2022-01-04', '7.00', '3.00'),
+(84, 14, '2022-01-19', '11.00', '20.00'),
+(85, 14, '2022-01-15', '5.00', '14.00'),
+(86, 14, '2022-01-09', '11.00', '14.00'),
+(87, 14, '2022-01-20', '9.00', '3.00'),
+(88, 14, '2022-01-24', '9.00', '7.00'),
+(89, 15, '2022-01-24', '1.00', '18.00'),
+(90, 15, '2022-01-12', '4.00', '7.00'),
+(91, 15, '2022-01-24', '13.00', '6.00'),
+(92, 16, '2022-01-18', '6.00', '20.00'),
+(93, 16, '2022-01-24', '9.00', '8.00'),
+(94, 16, '2022-01-16', '20.00', '16.00'),
+(95, 16, '2022-01-03', '1.00', '3.00'),
+(96, 17, '2022-01-04', '8.00', '12.00'),
+(97, 17, '2022-01-21', '4.00', '8.00'),
+(98, 17, '2022-01-26', '14.00', '16.00'),
+(99, 17, '2022-01-12', '9.00', '8.00'),
+(100, 17, '2022-01-09', '11.00', '18.00'),
+(101, 17, '2022-01-01', '19.00', '20.00'),
+(102, 19, '2022-01-24', '17.00', '10.00'),
+(103, 19, '2022-01-18', '8.00', '15.00'),
+(104, 19, '2022-01-12', '4.00', '8.00'),
+(105, 21, '2022-01-04', '19.00', '15.00'),
+(106, 21, '2022-01-06', '6.00', '12.00'),
+(107, 21, '2022-01-22', '9.00', '5.00'),
+(108, 22, '2022-01-29', '19.00', '10.00'),
+(109, 22, '2022-01-06', '16.00', '5.00'),
+(110, 22, '2022-01-10', '4.00', '18.00'),
+(111, 23, '2022-01-16', '15.00', '9.00'),
+(112, 23, '2022-01-05', '13.00', '6.00'),
+(113, 23, '2022-01-30', '11.00', '14.00'),
+(114, 23, '2022-01-21', '8.00', '3.00'),
+(115, 23, '2022-01-23', '14.00', '8.00'),
+(116, 23, '2022-01-02', '20.00', '20.00'),
+(117, 24, '2022-01-26', '12.00', '4.00'),
+(118, 24, '2022-01-07', '11.00', '17.00'),
+(119, 24, '2022-01-26', '11.00', '11.00'),
+(120, 24, '2022-01-20', '20.00', '9.00'),
+(121, 24, '2022-01-10', '16.00', '15.00'),
+(122, 25, '2022-01-01', '7.00', '20.00'),
+(123, 25, '2022-01-22', '12.00', '14.00'),
+(124, 25, '2022-01-20', '12.00', '13.00'),
+(125, 25, '2022-01-10', '13.00', '20.00'),
+(126, 25, '2022-01-31', '19.00', '15.00'),
+(127, 25, '2022-01-01', '18.00', '13.00'),
+(128, 25, '2022-01-18', '5.00', '15.00'),
+(129, 25, '2022-01-11', '18.00', '5.00'),
+(130, 25, '2022-01-12', '1.00', '9.00'),
+(131, 25, '2022-01-31', '17.00', '7.00'),
+(132, 26, '2022-01-11', '12.00', '8.00'),
+(133, 26, '2022-01-19', '6.00', '4.00'),
+(134, 26, '2022-01-01', '8.00', '9.00'),
+(135, 26, '2022-01-04', '13.00', '18.00'),
+(136, 26, '2022-01-08', '14.00', '13.00'),
+(137, 26, '2022-01-28', '7.00', '7.00'),
+(138, 26, '2022-01-24', '7.00', '13.00'),
+(139, 26, '2022-01-04', '7.00', '20.00'),
+(140, 26, '2022-01-23', '19.00', '4.00'),
+(141, 26, '2022-01-25', '15.00', '19.00'),
+(142, 26, '2022-01-05', '14.00', '15.00'),
+(143, 26, '2022-01-10', '10.00', '17.00'),
+(144, 26, '2022-01-06', '18.00', '7.00'),
+(145, 26, '2022-01-04', '8.00', '12.00'),
+(146, 26, '2022-01-30', '8.00', '20.00'),
+(147, 27, '2022-01-13', '15.00', '15.00'),
+(148, 28, '2022-01-09', '1.00', '18.00'),
+(149, 28, '2022-01-25', '2.00', '15.00'),
+(150, 28, '2022-01-03', '13.00', '19.00'),
+(151, 28, '2022-01-15', '14.00', '9.00'),
+(152, 29, '2022-01-03', '12.00', '13.00'),
+(153, 29, '2022-01-17', '10.00', '11.00'),
+(154, 29, '2022-01-01', '13.00', '12.00'),
+(155, 29, '2022-01-06', '3.00', '19.00'),
+(156, 29, '2022-01-24', '9.00', '13.00'),
+(157, 29, '2022-01-06', '2.00', '12.00'),
+(158, 29, '2022-01-21', '18.00', '11.00'),
+(159, 29, '2022-01-27', '9.00', '15.00'),
+(160, 30, '2022-01-27', '7.00', '8.00'),
+(161, 30, '2022-01-31', '9.00', '7.00'),
+(162, 30, '2022-01-13', '11.00', '14.00'),
+(163, 30, '2022-01-12', '11.00', '10.00'),
+(164, 30, '2022-01-15', '7.00', '15.00'),
+(165, 31, '2022-01-26', '14.00', '18.00'),
+(166, 31, '2022-01-21', '7.00', '8.00'),
+(167, 31, '2022-01-29', '20.00', '14.00'),
+(168, 31, '2022-01-30', '15.00', '16.00'),
+(169, 31, '2022-01-27', '20.00', '18.00'),
+(170, 31, '2022-01-11', '8.00', '20.00'),
+(171, 32, '2022-01-24', '5.00', '6.00'),
+(172, 32, '2022-01-14', '14.00', '9.00'),
+(173, 32, '2022-01-02', '12.00', '5.00'),
+(174, 32, '2022-01-14', '20.00', '8.00'),
+(175, 32, '2022-01-06', '3.00', '9.00'),
+(176, 32, '2022-01-12', '8.00', '14.00'),
+(177, 32, '2022-01-08', '5.00', '13.00'),
+(178, 33, '2022-01-28', '14.00', '5.00'),
+(179, 33, '2022-01-26', '14.00', '10.00'),
+(180, 33, '2022-01-10', '13.00', '10.00'),
+(181, 33, '2022-01-15', '17.00', '5.00'),
+(182, 33, '2022-01-28', '10.00', '5.00'),
+(183, 33, '2022-01-28', '18.00', '8.00'),
+(184, 34, '2022-01-14', '3.00', '6.00'),
+(185, 34, '2022-01-24', '1.00', '11.00'),
+(186, 34, '2022-01-24', '13.00', '20.00'),
+(187, 34, '2022-01-23', '19.00', '13.00'),
+(188, 35, '2022-01-25', '16.00', '17.00'),
+(189, 35, '2022-01-02', '20.00', '9.00'),
+(190, 35, '2022-01-15', '17.00', '9.00'),
+(191, 36, '2022-01-27', '20.00', '10.00'),
+(192, 36, '2022-01-25', '4.00', '7.00'),
+(193, 36, '2022-01-22', '19.00', '18.00'),
+(194, 36, '2022-01-17', '19.00', '18.00'),
+(195, 37, '2022-01-13', '12.00', '3.00'),
+(196, 37, '2022-01-25', '14.00', '6.00'),
+(197, 37, '2022-01-16', '9.00', '4.00'),
+(198, 37, '2022-01-17', '20.00', '20.00'),
+(199, 37, '2022-01-03', '17.00', '17.00'),
+(200, 37, '2022-01-29', '20.00', '5.00'),
+(201, 37, '2022-01-10', '20.00', '10.00'),
+(202, 37, '2022-01-14', '16.00', '3.00'),
+(203, 37, '2022-01-29', '20.00', '20.00'),
+(204, 37, '2022-01-14', '6.00', '13.00'),
+(205, 37, '2022-01-19', '7.00', '13.00'),
+(206, 38, '2022-01-03', '11.00', '15.00'),
+(207, 38, '2022-01-05', '19.00', '3.00'),
+(208, 39, '2022-01-19', '15.00', '15.00'),
+(209, 39, '2022-01-06', '12.00', '18.00'),
+(210, 39, '2022-01-15', '13.00', '6.00'),
+(211, 39, '2022-01-23', '17.00', '5.00'),
+(212, 39, '2022-01-04', '17.00', '13.00'),
+(213, 40, '2022-01-14', '16.00', '19.00'),
+(214, 40, '2022-01-30', '9.00', '5.00'),
+(215, 41, '2022-01-08', '14.00', '5.00'),
+(216, 41, '2022-01-18', '10.00', '14.00'),
+(217, 41, '2022-01-08', '11.00', '6.00'),
+(218, 41, '2022-01-16', '8.00', '14.00'),
+(219, 41, '2022-01-10', '13.00', '6.00'),
+(220, 41, '2022-01-11', '14.00', '8.00'),
+(221, 41, '2022-01-15', '7.00', '14.00'),
+(222, 41, '2022-01-27', '16.00', '13.00'),
+(223, 41, '2022-01-26', '15.00', '9.00'),
+(224, 42, '2022-01-20', '16.00', '20.00'),
+(225, 42, '2022-01-07', '4.00', '6.00'),
+(226, 42, '2022-01-08', '15.00', '19.00'),
+(227, 42, '2022-01-30', '9.00', '18.00'),
+(228, 42, '2022-01-22', '5.00', '17.00'),
+(229, 42, '2022-01-20', '13.00', '19.00'),
+(230, 42, '2022-01-20', '20.00', '12.00'),
+(231, 42, '2022-01-10', '9.00', '5.00'),
+(232, 42, '2022-01-29', '18.00', '5.00'),
+(233, 42, '2022-01-10', '6.00', '6.00'),
+(234, 42, '2022-01-05', '15.00', '5.00'),
+(235, 42, '2022-01-29', '5.00', '17.00'),
+(236, 42, '2022-01-07', '15.00', '20.00'),
+(237, 42, '2022-01-24', '2.00', '11.00'),
+(238, 42, '2022-01-01', '10.00', '8.00'),
+(239, 43, '2022-01-04', '15.00', '14.00'),
+(240, 43, '2022-01-12', '16.00', '17.00'),
+(241, 43, '2022-01-11', '9.00', '4.00'),
+(242, 43, '2022-01-24', '4.00', '3.00'),
+(243, 43, '2022-01-25', '12.00', '11.00'),
+(244, 43, '2022-01-28', '2.00', '14.00'),
+(245, 43, '2022-01-26', '13.00', '6.00'),
+(246, 43, '2022-01-05', '1.00', '8.00'),
+(247, 43, '2022-01-24', '4.00', '7.00'),
+(248, 43, '2022-01-30', '3.00', '5.00'),
+(249, 43, '2022-01-17', '5.00', '12.00'),
+(250, 43, '2022-01-15', '12.00', '16.00'),
+(251, 43, '2022-01-09', '15.00', '6.00'),
+(252, 44, '2022-01-19', '4.00', '15.00'),
+(253, 44, '2022-01-04', '1.00', '9.00'),
+(254, 44, '2022-01-31', '11.00', '16.00'),
+(255, 45, '2022-01-15', '3.00', '16.00'),
+(256, 45, '2022-01-19', '2.00', '12.00'),
+(257, 45, '2022-01-12', '1.00', '12.00'),
+(258, 45, '2022-01-11', '6.00', '8.00'),
+(259, 45, '2022-01-22', '8.00', '6.00'),
+(260, 45, '2022-01-23', '11.00', '9.00'),
+(261, 46, '2022-01-28', '7.00', '9.00'),
+(262, 46, '2022-01-31', '11.00', '4.00'),
+(263, 46, '2022-01-15', '14.00', '5.00'),
+(264, 46, '2022-01-24', '6.00', '12.00'),
+(265, 47, '2022-01-09', '12.00', '9.00'),
+(266, 47, '2022-01-03', '6.00', '8.00'),
+(267, 47, '2022-01-28', '20.00', '18.00'),
+(268, 47, '2022-01-04', '14.00', '3.00'),
+(269, 48, '2022-01-16', '14.00', '16.00'),
+(270, 48, '2022-01-22', '9.00', '20.00'),
+(271, 49, '2022-01-06', '15.00', '16.00'),
+(272, 49, '2022-01-28', '14.00', '16.00'),
+(273, 49, '2022-01-31', '6.00', '4.00'),
+(274, 49, '2022-01-23', '19.00', '14.00'),
+(275, 50, '2022-01-14', '5.00', '4.00'),
+(276, 50, '2022-01-02', '4.00', '11.00'),
+(277, 50, '2022-01-04', '15.00', '18.00'),
+(278, 50, '2022-01-25', '14.00', '9.00'),
+(279, 50, '2022-01-13', '17.00', '17.00'),
+(280, 50, '2022-01-13', '2.00', '12.00'),
+(281, 50, '2022-01-06', '15.00', '15.00'),
+(282, 50, '2022-01-10', '19.00', '6.00'),
+(283, 51, '2022-01-17', '17.00', '9.00'),
+(284, 51, '2022-01-22', '16.00', '18.00'),
+(285, 51, '2022-01-26', '6.00', '10.00'),
+(286, 51, '2022-01-23', '16.00', '20.00'),
+(287, 51, '2022-01-10', '18.00', '20.00'),
+(288, 51, '2022-01-14', '16.00', '13.00'),
+(289, 51, '2022-01-21', '15.00', '5.00'),
+(290, 51, '2022-01-29', '16.00', '15.00'),
+(291, 51, '2022-01-11', '20.00', '18.00'),
+(292, 51, '2022-01-09', '12.00', '11.00'),
+(293, 51, '2022-01-04', '13.00', '7.00'),
+(294, 51, '2022-01-05', '7.00', '6.00'),
+(295, 52, '2022-01-11', '11.00', '15.00'),
+(296, 52, '2022-01-01', '10.00', '18.00'),
+(297, 52, '2022-01-26', '10.00', '7.00'),
+(298, 52, '2022-01-22', '10.00', '13.00'),
+(299, 52, '2022-01-02', '9.00', '9.00'),
+(300, 52, '2022-01-13', '6.00', '4.00'),
+(301, 53, '2022-01-07', '2.00', '10.00'),
+(302, 53, '2022-01-14', '8.00', '11.00'),
+(303, 53, '2022-01-19', '11.00', '8.00'),
+(304, 53, '2022-01-27', '16.00', '19.00'),
+(305, 53, '2022-01-07', '17.00', '17.00'),
+(306, 53, '2022-01-04', '1.00', '19.00'),
+(307, 53, '2022-01-31', '20.00', '4.00'),
+(308, 53, '2022-01-16', '18.00', '4.00'),
+(309, 53, '2022-01-21', '16.00', '12.00'),
+(310, 53, '2022-01-21', '11.00', '9.00'),
+(311, 53, '2022-01-07', '15.00', '17.00'),
+(312, 53, '2022-01-03', '17.00', '3.00'),
+(313, 53, '2022-01-07', '11.00', '15.00'),
+(314, 54, '2022-01-26', '3.00', '7.00'),
+(315, 54, '2022-01-27', '20.00', '3.00'),
+(316, 55, '2022-01-14', '15.00', '8.00'),
+(317, 55, '2022-01-12', '1.00', '6.00'),
+(318, 55, '2022-01-22', '1.00', '9.00'),
+(319, 55, '2022-01-13', '12.00', '11.00'),
+(320, 55, '2022-01-14', '19.00', '17.00'),
+(321, 56, '2022-01-27', '1.00', '5.00'),
+(322, 56, '2022-01-22', '4.00', '14.00'),
+(323, 56, '2022-01-07', '11.00', '3.00'),
+(324, 56, '2022-01-08', '1.00', '17.00'),
+(325, 56, '2022-01-18', '7.00', '14.00'),
+(326, 56, '2022-01-24', '3.00', '8.00'),
+(327, 56, '2022-01-29', '7.00', '16.00'),
+(328, 56, '2022-01-15', '16.00', '7.00'),
+(329, 56, '2022-01-24', '19.00', '18.00'),
+(330, 56, '2022-01-13', '17.00', '14.00'),
+(331, 56, '2022-01-22', '16.00', '10.00'),
+(332, 56, '2022-01-08', '16.00', '17.00'),
+(333, 56, '2022-01-31', '17.00', '9.00'),
+(334, 56, '2022-01-06', '17.00', '12.00'),
+(335, 56, '2022-01-23', '17.00', '16.00'),
+(336, 57, '2022-01-22', '1.00', '19.00'),
+(337, 57, '2022-01-07', '2.00', '5.00'),
+(338, 57, '2022-01-16', '7.00', '20.00'),
+(339, 57, '2022-01-17', '8.00', '7.00'),
+(340, 58, '2022-01-27', '16.00', '19.00'),
+(341, 58, '2022-01-25', '19.00', '10.00'),
+(342, 58, '2022-01-06', '1.00', '9.00'),
+(343, 58, '2022-01-24', '13.00', '16.00'),
+(344, 58, '2022-01-19', '7.00', '6.00'),
+(345, 58, '2022-01-13', '11.00', '15.00'),
+(346, 58, '2022-01-21', '11.00', '14.00'),
+(347, 58, '2022-01-27', '3.00', '3.00'),
+(348, 58, '2022-01-05', '20.00', '17.00'),
+(349, 58, '2022-01-16', '12.00', '14.00'),
+(350, 58, '2022-01-17', '5.00', '7.00'),
+(351, 58, '2022-01-16', '5.00', '13.00'),
+(352, 58, '2022-01-06', '7.00', '11.00'),
+(353, 59, '2022-01-24', '8.00', '10.00'),
+(354, 59, '2022-01-28', '14.00', '3.00'),
+(355, 59, '2022-01-27', '14.00', '4.00'),
+(356, 59, '2022-01-01', '5.00', '13.00'),
+(357, 59, '2022-01-17', '9.00', '17.00'),
+(358, 59, '2022-01-10', '16.00', '12.00'),
+(359, 59, '2022-01-06', '4.00', '12.00'),
+(360, 59, '2022-01-02', '7.00', '15.00'),
+(361, 59, '2022-01-07', '1.00', '13.00'),
+(362, 59, '2022-01-12', '5.00', '11.00'),
+(363, 59, '2022-01-11', '6.00', '19.00'),
+(364, 59, '2022-01-01', '18.00', '4.00'),
+(365, 59, '2022-01-20', '19.00', '20.00'),
+(366, 59, '2022-01-14', '16.00', '20.00'),
+(367, 59, '2022-01-20', '10.00', '14.00'),
+(368, 60, '2022-01-12', '13.00', '9.00'),
+(369, 60, '2022-01-17', '2.00', '3.00'),
+(370, 60, '2022-01-14', '18.00', '15.00'),
+(371, 60, '2022-01-28', '12.00', '4.00'),
+(372, 60, '2022-01-07', '5.00', '7.00'),
+(373, 60, '2022-01-25', '18.00', '9.00'),
+(374, 60, '2022-01-06', '20.00', '14.00'),
+(375, 60, '2022-01-09', '9.00', '13.00'),
+(376, 60, '2022-01-09', '4.00', '5.00'),
+(377, 61, '2022-01-14', '13.00', '19.00'),
+(378, 61, '2022-01-25', '5.00', '8.00'),
+(379, 61, '2022-01-07', '20.00', '15.00'),
+(380, 61, '2022-01-22', '11.00', '14.00'),
+(381, 61, '2022-01-31', '4.00', '10.00'),
+(382, 62, '2022-01-23', '15.00', '17.00'),
+(383, 62, '2022-01-04', '13.00', '13.00'),
+(384, 62, '2022-01-16', '6.00', '18.00'),
+(385, 62, '2022-01-15', '8.00', '4.00'),
+(386, 62, '2022-01-09', '15.00', '8.00'),
+(387, 62, '2022-01-03', '14.00', '3.00'),
+(388, 63, '2022-01-09', '12.00', '14.00'),
+(389, 63, '2022-01-24', '16.00', '9.00'),
+(390, 63, '2022-01-14', '11.00', '20.00'),
+(391, 63, '2022-01-04', '5.00', '6.00'),
+(392, 63, '2022-01-01', '20.00', '11.00'),
+(393, 63, '2022-01-19', '20.00', '8.00'),
+(394, 63, '2022-01-18', '8.00', '18.00'),
+(395, 63, '2022-01-16', '14.00', '19.00'),
+(396, 63, '2022-01-08', '15.00', '18.00'),
+(397, 63, '2022-01-10', '11.00', '8.00'),
+(398, 63, '2022-01-30', '9.00', '19.00'),
+(399, 63, '2022-01-19', '4.00', '11.00'),
+(400, 63, '2022-01-17', '16.00', '7.00'),
+(401, 63, '2022-01-16', '2.00', '3.00'),
+(402, 63, '2022-01-22', '7.00', '17.00'),
+(403, 64, '2022-01-24', '7.00', '8.00'),
+(404, 64, '2022-01-28', '18.00', '5.00'),
+(405, 65, '2022-01-27', '16.00', '12.00'),
+(406, 65, '2022-01-19', '11.00', '10.00'),
+(407, 65, '2022-01-05', '18.00', '14.00'),
+(408, 66, '2022-01-06', '16.00', '14.00'),
+(409, 66, '2022-01-02', '2.00', '13.00'),
+(410, 66, '2022-01-28', '17.00', '6.00'),
+(411, 66, '2022-01-21', '18.00', '19.00'),
+(412, 66, '2022-01-10', '11.00', '19.00'),
+(413, 66, '2022-01-22', '11.00', '5.00'),
+(414, 66, '2022-01-30', '11.00', '7.00'),
+(415, 66, '2022-01-25', '5.00', '6.00'),
+(416, 66, '2022-01-04', '11.00', '10.00'),
+(417, 66, '2022-01-25', '19.00', '16.00'),
+(418, 66, '2022-01-13', '12.00', '12.00'),
+(419, 67, '2022-01-13', '2.00', '14.00'),
+(420, 67, '2022-01-23', '16.00', '3.00'),
+(421, 67, '2022-01-01', '10.00', '4.00'),
+(422, 67, '2022-01-06', '4.00', '9.00'),
+(423, 67, '2022-01-30', '2.00', '18.00'),
+(424, 67, '2022-01-18', '2.00', '10.00'),
+(425, 67, '2022-01-08', '11.00', '3.00'),
+(426, 67, '2022-01-12', '18.00', '6.00'),
+(427, 67, '2022-01-29', '6.00', '12.00'),
+(428, 67, '2022-01-07', '3.00', '4.00'),
+(429, 67, '2022-01-08', '19.00', '5.00'),
+(430, 68, '2022-01-16', '9.00', '14.00'),
+(431, 68, '2022-01-06', '5.00', '8.00'),
+(432, 68, '2022-01-19', '6.00', '10.00'),
+(433, 68, '2022-01-04', '20.00', '6.00'),
+(434, 68, '2022-01-28', '2.00', '16.00'),
+(435, 68, '2022-01-26', '7.00', '8.00'),
+(436, 68, '2022-01-07', '19.00', '6.00'),
+(437, 68, '2022-01-07', '2.00', '13.00'),
+(438, 68, '2022-01-07', '13.00', '15.00'),
+(439, 69, '2022-01-21', '4.00', '12.00'),
+(440, 69, '2022-01-10', '11.00', '7.00'),
+(441, 69, '2022-01-02', '4.00', '4.00'),
+(442, 69, '2022-01-04', '17.00', '10.00'),
+(443, 69, '2022-01-09', '18.00', '13.00'),
+(444, 69, '2022-01-12', '2.00', '14.00'),
+(445, 70, '2022-01-26', '7.00', '6.00'),
+(446, 70, '2022-01-07', '12.00', '3.00'),
+(447, 70, '2022-01-15', '19.00', '4.00'),
+(448, 70, '2022-01-24', '1.00', '12.00'),
+(449, 70, '2022-01-13', '6.00', '13.00'),
+(450, 70, '2022-01-31', '1.00', '17.00'),
+(451, 70, '2022-01-27', '11.00', '20.00'),
+(452, 70, '2022-01-19', '12.00', '3.00'),
+(453, 70, '2022-01-28', '3.00', '15.00'),
+(454, 70, '2022-01-27', '5.00', '4.00'),
+(455, 70, '2022-01-01', '2.00', '17.00'),
+(456, 70, '2022-01-17', '12.00', '13.00'),
+(457, 70, '2022-01-03', '7.00', '11.00'),
+(458, 70, '2022-01-07', '16.00', '5.00'),
+(459, 70, '2022-01-05', '12.00', '15.00'),
+(460, 71, '2022-01-25', '18.00', '10.00'),
+(461, 71, '2022-01-25', '2.00', '20.00'),
+(462, 71, '2022-01-29', '20.00', '20.00'),
+(463, 71, '2022-01-04', '14.00', '9.00'),
+(464, 71, '2022-01-17', '20.00', '4.00'),
+(465, 71, '2022-01-23', '1.00', '12.00'),
+(466, 71, '2022-01-29', '1.00', '18.00'),
+(467, 71, '2022-01-29', '12.00', '20.00'),
+(468, 71, '2022-01-01', '17.00', '10.00'),
+(469, 73, '2022-01-11', '13.00', '5.00'),
+(470, 73, '2022-01-18', '10.00', '20.00'),
+(471, 73, '2022-01-12', '7.00', '9.00'),
+(472, 73, '2022-01-21', '10.00', '5.00'),
+(473, 74, '2022-01-20', '14.00', '8.00'),
+(474, 75, '2022-01-16', '15.00', '10.00'),
+(475, 75, '2022-01-14', '8.00', '10.00'),
+(476, 75, '2022-01-14', '2.00', '14.00'),
+(477, 75, '2022-01-01', '6.00', '5.00'),
+(478, 76, '2022-01-06', '11.00', '6.00'),
+(479, 77, '2022-01-08', '1.00', '7.00'),
+(480, 77, '2022-01-24', '17.00', '13.00'),
+(481, 78, '2022-01-15', '7.00', '18.00'),
+(482, 78, '2022-01-11', '4.00', '7.00'),
+(483, 79, '2022-01-21', '1.00', '19.00'),
+(484, 79, '2022-01-16', '19.00', '11.00'),
+(485, 79, '2022-01-12', '12.00', '9.00'),
+(486, 80, '2022-01-08', '8.00', '14.00'),
+(487, 80, '2022-01-30', '1.00', '9.00'),
+(488, 80, '2022-01-24', '17.00', '3.00'),
+(489, 80, '2022-01-07', '3.00', '13.00'),
+(490, 80, '2022-01-28', '5.00', '10.00'),
+(491, 81, '2022-01-18', '16.00', '9.00'),
+(492, 83, '2022-01-31', '20.00', '15.00'),
+(493, 83, '2022-01-29', '10.00', '14.00'),
+(494, 83, '2022-01-25', '3.00', '5.00'),
+(495, 83, '2022-01-01', '15.00', '5.00'),
+(496, 83, '2022-01-15', '17.00', '13.00'),
+(497, 83, '2022-01-24', '13.00', '17.00'),
+(498, 83, '2022-01-08', '17.00', '16.00'),
+(499, 84, '2022-01-22', '10.00', '12.00'),
+(500, 84, '2022-01-05', '12.00', '5.00'),
+(501, 84, '2022-01-21', '18.00', '7.00'),
+(502, 84, '2022-01-01', '20.00', '9.00'),
+(503, 84, '2022-01-19', '4.00', '12.00'),
+(504, 84, '2022-01-28', '1.00', '19.00'),
+(505, 84, '2022-01-04', '14.00', '3.00'),
+(506, 84, '2022-01-16', '6.00', '10.00'),
+(507, 84, '2022-01-21', '5.00', '19.00'),
+(508, 85, '2022-01-01', '7.00', '7.00'),
+(509, 85, '2022-01-30', '6.00', '6.00'),
+(510, 85, '2022-01-02', '3.00', '19.00'),
+(511, 85, '2022-01-07', '8.00', '13.00'),
+(512, 85, '2022-01-23', '12.00', '5.00'),
+(513, 85, '2022-01-03', '7.00', '18.00'),
+(514, 87, '2022-01-08', '19.00', '9.00'),
+(515, 87, '2022-01-08', '1.00', '13.00'),
+(516, 87, '2022-01-19', '11.00', '9.00'),
+(517, 87, '2022-01-09', '10.00', '15.00'),
+(518, 87, '2022-01-13', '10.00', '8.00'),
+(519, 87, '2022-01-02', '12.00', '3.00'),
+(520, 87, '2022-01-29', '19.00', '19.00'),
+(521, 87, '2022-01-14', '7.00', '19.00'),
+(522, 87, '2022-01-15', '2.00', '16.00'),
+(523, 87, '2022-01-01', '18.00', '16.00'),
+(524, 87, '2022-01-20', '9.00', '13.00'),
+(525, 87, '2022-01-08', '11.00', '6.00'),
+(526, 87, '2022-01-17', '17.00', '8.00'),
+(527, 87, '2022-01-01', '13.00', '14.00'),
+(528, 87, '2022-01-06', '9.00', '9.00'),
+(529, 88, '2022-01-28', '6.00', '13.00'),
+(530, 88, '2022-01-16', '4.00', '6.00'),
+(531, 88, '2022-01-05', '5.00', '18.00'),
+(532, 88, '2022-01-16', '16.00', '8.00'),
+(533, 88, '2022-01-30', '11.00', '6.00'),
+(534, 88, '2022-01-23', '19.00', '11.00'),
+(535, 88, '2022-01-22', '4.00', '4.00'),
+(536, 88, '2022-01-23', '4.00', '18.00'),
+(537, 88, '2022-01-08', '18.00', '10.00'),
+(538, 88, '2022-01-22', '9.00', '19.00'),
+(539, 89, '2022-01-09', '4.00', '17.00'),
+(540, 89, '2022-01-27', '14.00', '3.00'),
+(541, 89, '2022-01-26', '7.00', '16.00'),
+(542, 89, '2022-01-11', '19.00', '12.00'),
+(543, 89, '2022-01-25', '9.00', '8.00'),
+(544, 89, '2022-01-17', '2.00', '15.00'),
+(545, 89, '2022-01-10', '18.00', '14.00'),
+(546, 89, '2022-01-25', '18.00', '12.00'),
+(547, 89, '2022-01-17', '11.00', '11.00'),
+(548, 89, '2022-01-26', '2.00', '9.00'),
+(549, 89, '2022-01-10', '15.00', '20.00'),
+(550, 89, '2022-01-06', '5.00', '11.00'),
+(551, 90, '2022-01-25', '13.00', '10.00'),
+(552, 90, '2022-01-27', '20.00', '10.00'),
+(553, 90, '2022-01-26', '6.00', '11.00'),
+(554, 90, '2022-01-20', '6.00', '11.00'),
+(555, 90, '2022-01-29', '10.00', '16.00'),
+(556, 90, '2022-01-25', '18.00', '10.00'),
+(557, 90, '2022-01-15', '15.00', '17.00'),
+(558, 91, '2022-01-11', '17.00', '15.00'),
+(559, 91, '2022-01-02', '16.00', '10.00'),
+(560, 91, '2022-01-30', '16.00', '13.00'),
+(561, 91, '2022-01-28', '2.00', '17.00'),
+(562, 91, '2022-01-09', '3.00', '11.00'),
+(563, 91, '2022-01-26', '17.00', '13.00'),
+(564, 91, '2022-01-31', '12.00', '15.00'),
+(565, 91, '2022-01-13', '11.00', '20.00'),
+(566, 91, '2022-01-17', '1.00', '19.00'),
+(567, 91, '2022-01-01', '8.00', '17.00'),
+(568, 91, '2022-01-06', '11.00', '13.00'),
+(569, 91, '2022-01-03', '4.00', '9.00'),
+(570, 91, '2022-01-12', '8.00', '8.00'),
+(571, 91, '2022-01-28', '3.00', '19.00'),
+(572, 91, '2022-01-15', '9.00', '19.00'),
+(573, 92, '2022-01-08', '8.00', '4.00'),
+(574, 92, '2022-01-06', '10.00', '6.00'),
+(575, 92, '2022-01-25', '1.00', '7.00'),
+(576, 92, '2022-01-10', '2.00', '16.00'),
+(577, 92, '2022-01-26', '10.00', '12.00'),
+(578, 92, '2022-01-25', '17.00', '9.00'),
+(579, 92, '2022-01-20', '14.00', '12.00'),
+(580, 92, '2022-01-13', '13.00', '4.00'),
+(581, 92, '2022-01-13', '5.00', '8.00'),
+(582, 92, '2022-01-10', '11.00', '15.00'),
+(583, 92, '2022-01-18', '10.00', '18.00'),
+(584, 94, '2022-01-27', '11.00', '8.00'),
+(585, 94, '2022-01-17', '13.00', '11.00'),
+(586, 94, '2022-01-13', '17.00', '20.00'),
+(587, 95, '2022-01-06', '13.00', '20.00'),
+(588, 95, '2022-01-04', '16.00', '11.00'),
+(589, 95, '2022-01-02', '5.00', '12.00'),
+(590, 95, '2022-01-03', '6.00', '16.00'),
+(591, 95, '2022-01-07', '20.00', '15.00'),
+(592, 95, '2022-01-28', '11.00', '17.00'),
+(593, 95, '2022-01-20', '11.00', '12.00'),
+(594, 95, '2022-01-15', '15.00', '9.00'),
+(595, 95, '2022-01-13', '15.00', '15.00'),
+(596, 95, '2022-01-09', '3.00', '16.00'),
+(597, 95, '2022-01-08', '18.00', '13.00'),
+(598, 95, '2022-01-30', '14.00', '10.00'),
+(599, 95, '2022-01-11', '13.00', '19.00'),
+(600, 95, '2022-01-26', '18.00', '12.00'),
+(601, 95, '2022-01-16', '5.00', '16.00'),
+(602, 96, '2022-01-06', '8.00', '19.00'),
+(603, 96, '2022-01-20', '4.00', '19.00'),
+(604, 96, '2022-01-25', '10.00', '18.00'),
+(605, 96, '2022-01-31', '4.00', '8.00'),
+(606, 96, '2022-01-06', '20.00', '5.00'),
+(607, 97, '2022-01-20', '15.00', '13.00'),
+(608, 97, '2022-01-08', '10.00', '9.00'),
+(609, 97, '2022-01-03', '9.00', '4.00'),
+(610, 97, '2022-01-17', '8.00', '19.00'),
+(611, 97, '2022-01-31', '2.00', '14.00'),
+(612, 97, '2022-01-28', '17.00', '14.00'),
+(613, 97, '2022-01-23', '6.00', '6.00'),
+(614, 97, '2022-01-24', '8.00', '7.00'),
+(615, 97, '2022-01-23', '15.00', '9.00'),
+(616, 98, '2022-01-12', '17.00', '3.00'),
+(617, 98, '2022-01-03', '12.00', '17.00'),
+(618, 98, '2022-01-20', '12.00', '18.00'),
+(619, 98, '2022-01-20', '16.00', '9.00'),
+(620, 98, '2022-01-09', '18.00', '14.00'),
+(621, 98, '2022-01-11', '13.00', '14.00'),
+(622, 98, '2022-01-02', '16.00', '17.00'),
+(623, 98, '2022-01-23', '14.00', '15.00'),
+(624, 98, '2022-01-29', '3.00', '16.00'),
+(625, 98, '2022-01-03', '7.00', '18.00'),
+(626, 98, '2022-01-27', '10.00', '5.00'),
+(627, 98, '2022-01-31', '1.00', '12.00'),
+(628, 98, '2022-01-12', '5.00', '14.00'),
+(629, 98, '2022-01-06', '16.00', '14.00'),
+(630, 98, '2022-01-28', '20.00', '20.00'),
+(631, 99, '2022-01-25', '13.00', '9.00'),
+(632, 99, '2022-01-04', '10.00', '9.00'),
+(633, 99, '2022-01-06', '9.00', '19.00'),
+(634, 99, '2022-01-06', '11.00', '18.00'),
+(635, 99, '2022-01-04', '2.00', '9.00'),
+(636, 99, '2022-01-11', '1.00', '11.00'),
+(637, 99, '2022-01-02', '18.00', '3.00'),
+(638, 99, '2022-01-22', '8.00', '7.00'),
+(639, 99, '2022-01-15', '8.00', '20.00'),
+(640, 99, '2022-01-29', '3.00', '9.00'),
+(641, 99, '2022-01-21', '7.00', '11.00'),
+(642, 99, '2022-01-10', '17.00', '13.00'),
+(643, 100, '2022-01-21', '18.00', '20.00'),
+(644, 100, '2022-01-03', '17.00', '11.00'),
+(645, 100, '2022-01-31', '8.00', '9.00'),
+(646, 100, '2022-01-05', '12.00', '14.00'),
+(647, 100, '2022-01-08', '11.00', '8.00'),
+(648, 100, '2022-01-15', '14.00', '17.00'),
+(649, 100, '2022-01-12', '19.00', '14.00'),
+(650, 100, '2022-01-20', '2.00', '9.00'),
+(651, 100, '2022-01-11', '1.00', '12.00'),
+(652, 100, '2022-01-20', '18.00', '11.00'),
+(653, 100, '2022-01-16', '6.00', '15.00'),
+(654, 101, '2022-01-14', '17.00', '3.00'),
+(655, 101, '2022-01-28', '8.00', '16.00'),
+(656, 101, '2022-01-31', '12.00', '10.00'),
+(657, 101, '2022-01-31', '7.00', '4.00'),
+(658, 101, '2022-01-09', '9.00', '4.00'),
+(659, 101, '2022-01-28', '19.00', '3.00'),
+(660, 101, '2022-01-30', '18.00', '18.00'),
+(661, 101, '2022-01-27', '16.00', '9.00'),
+(662, 101, '2022-01-22', '12.00', '7.00');
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `customer`
+--
+
+CREATE TABLE `customer` (
+  `IDCustomer` int(11) NOT NULL,
+  `Email` varchar(30) NOT NULL,
+  `Username` varchar(15) NOT NULL,
+  `Password` varchar(15) NOT NULL,
+  `TipeUser` enum('Premium','Regular') NOT NULL DEFAULT 'Regular',
+  `FirstName` varchar(45) NOT NULL,
+  `LastName` varchar(45) NOT NULL
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
+
+--
+-- Dumping data for table `customer`
+--
+
+INSERT INTO `customer` (`IDCustomer`, `Email`, `Username`, `Password`, `TipeUser`, `FirstName`, `LastName`) VALUES
+(1, 'timothyvasquez@example.org', 'smithrhonda', 'vR$y7EZxUD', 'Regular', 'Nicholas', 'Williamson'),
+(2, 'patriciafisher@example.com', 'annjackson', '#S8Cw+PJ5f', 'Regular', 'Christina', 'Williams'),
+(3, 'nestes@example.com', 'hjackson', '^EByOdAD9I', 'Regular', 'Dawn', 'Huerta'),
+(4, 'williamsluke@example.org', 'melissaowens', '!^wpK)hxy1', 'Regular', 'Rachael', 'Brooks'),
+(5, 'westes@example.org', 'nancy34', 'xucPz6kB)0', 'Regular', 'Joshua', 'Delgado'),
+(6, 'hlarsen@example.com', 'anthonywilson', '@O!#+1Mv*b', 'Regular', 'Crystal', 'Davidson'),
+(7, 'amandariggs@example.org', 'hector72', '&8XpMHmd$6', 'Regular', 'Russell', 'Butler'),
+(8, 'kendra25@example.org', 'underwooddaniel', 'ex^KPD@l&0', 'Regular', 'Hunter', 'Dean'),
+(9, 'jhoward@example.net', 'uray', '(&88HStmIZ', 'Regular', 'Jeremy', 'Hamilton'),
+(10, 'michaelrose@example.com', 'aaronyang', '0wRbRfys^&', 'Regular', 'Victor', 'Hanson'),
+(11, 'erika34@example.org', 'stevejackson', '_7JNWoOb#_', 'Regular', 'Eugene', 'Johnson'),
+(12, 'bethanywalker@example.net', 'howellsuzanne', 'osB&3IsyMW', 'Regular', 'Ashley', 'Conley'),
+(13, 'lopezwendy@example.org', 'fjohnson', 'cn!CI%Zk)7', 'Regular', 'Nathan', 'Bird'),
+(14, 'jlester@example.net', 'harrellshawn', 't!2MzYsyXz', 'Regular', 'Timothy', 'Fisher'),
+(15, 'anna23@example.com', 'nicoledaniels', 'Rx*o3JuqtS', 'Regular', 'Natasha', 'Andrews'),
+(16, 'kennedykari@example.org', 'koliver', '^kKUCaztJ1', 'Regular', 'Robyn', 'Larson'),
+(17, 'jhoward@example.com', 'justinmendez', 'R#7EQ6$nuE', 'Regular', 'Sherry', 'Li'),
+(18, 'tiffanyshah@example.org', 'kathrynhanson', '5OMCkXLi$V', 'Regular', 'Robert', 'Hicks'),
+(19, 'williamhale@example.com', 'wmurray', 'PIW9ESkiH(', 'Regular', 'Richard', 'Jones'),
+(20, 'vcruz@example.net', 'kimberlycook', '$@C!d$V#l6', 'Regular', 'Melissa', 'Anderson'),
+(21, 'jacksonbrandon@example.com', 'vasquezkelly', '10f7Elsy_j', 'Regular', 'Jose', 'Harding'),
+(22, 'wardlisa@example.net', 'trogers', 'a@2b0Inm3M', 'Regular', 'Molly', 'Miller'),
+(23, 'vschmitt@example.com', 'lucasjennifer', 'p42In3dd*e', 'Regular', 'Stephanie', 'Grimes'),
+(24, 'juarezdaniel@example.org', 'woodardbradley', '^VfMCr%Y4E', 'Regular', 'Andrew', 'Waters'),
+(25, 'npierce@example.com', 'jennifergregory', 'nG4H97boc#', 'Regular', 'Michael', 'Diaz'),
+(26, 'jhernandez@example.org', 'utate', '^71p)kHaKy', 'Regular', 'Sarah', 'Lee'),
+(27, 'barroncolton@example.org', 'sosabrooke', 'z1&(B3Vdx(', 'Regular', 'Keith', 'Ruiz'),
+(28, 'ellisadam@example.org', 'ladams', '(@7CxZshJZ', 'Regular', 'John', 'Hunt'),
+(29, 'jessicafrench@example.com', 'mlarson', ')WObPKJqg5', 'Regular', 'Jeffrey', 'Cherry'),
+(30, 'cynthia71@example.org', 'steven48', '1(3fPeth#(', 'Regular', 'Alexander', 'Singleton'),
+(31, 'kennethblake@example.com', 'qmartin', 'K+S*5XK^Uf', 'Regular', 'George', 'Lindsey'),
+(32, 'christine64@example.org', 'burkeabigail', 'h89B0NtRr+', 'Regular', 'Charles', 'Simon'),
+(33, 'beverlyfisher@example.com', 'sherri27', 'M&6&9Kkd@P', 'Regular', 'Peter', 'Frazier'),
+(34, 'angela59@example.net', 'williamsrose', '%&p74XPx5k', 'Regular', 'Keith', 'Ward'),
+(35, 'kendra86@example.org', 'idaniels', '15pUfhpD%B', 'Regular', 'Ivan', 'Novak'),
+(36, 'johnstonmichelle@example.org', 'jacob95', '+W8xR3nQ9_', 'Regular', 'Martha', 'Ross'),
+(37, 'tuckerchristine@example.com', 'khutchinson', '+5QzEyw7$v', 'Regular', 'John', 'Knox'),
+(38, 'philip11@example.org', 'jgilmore', 'l8cmDC%d&n', 'Regular', 'Linda', 'Tate'),
+(39, 'hinesstacey@example.net', 'ybest', '$9h2(V)ify', 'Regular', 'Jonathan', 'Smith'),
+(40, 'stewartstephen@example.com', 'rtucker', '*4lxFm^O%F', 'Regular', 'Wendy', 'Davis'),
+(41, 'woodsjohn@example.com', 'audrey56', '%j(9Oh2qJ6', 'Regular', 'Deborah', 'Brown'),
+(42, 'gabrielleboyer@example.net', 'gardnerroger', 'cq^5Nj)*EP', 'Regular', 'Kevin', 'Smith'),
+(43, 'travis44@example.org', 'vlong', '$K0VL^Kv5j', 'Regular', 'Lisa', 'Phillips'),
+(44, 'simpsonholly@example.org', 'brownjessica', 'WxIsstZk^4', 'Regular', 'Tyler', 'Long'),
+(45, 'jonathan71@example.net', 'adamslisa', '!*7)I3E(7h', 'Regular', 'Cindy', 'Smith'),
+(46, 'vgreen@example.net', 'brian56', 'M&Rw6Y$q(6', 'Regular', 'Tyler', 'Green'),
+(47, 'perryaustin@example.com', 'tyler55', 'baTS@^N#!2', 'Regular', 'Meghan', 'Williamson'),
+(48, 'freemanstephanie@example.net', 'joseph68', '^yUBc9ClS3', 'Regular', 'David', 'Johnson'),
+(49, 'randrews@example.net', 'andrew81', 'hP2@^tPd$Z', 'Regular', 'Tanya', 'Pineda'),
+(50, 'smithbrittany@example.org', 'popephilip', 'UVY9X2xd&+', 'Regular', 'Jasmine', 'Carlson'),
+(51, 'ashley95@example.org', 'mcox', 'ABD#1WnG0Y', 'Regular', 'Andrew', 'Mills'),
+(52, 'brockgregory@example.org', 'lisa85', 'o6b!U3cf%L', 'Regular', 'James', 'Jackson'),
+(53, 'hrogers@example.com', 'mcmillanjohn', 'qD+I1FQo@7', 'Regular', 'Steven', 'Le'),
+(54, 'lwilliams@example.net', 'rodriguezsteven', 'e*D4lBScap', 'Regular', 'Michael', 'Cannon'),
+(55, 'jamesrivas@example.net', 'jessicalong', '9*!51T8uOC', 'Regular', 'Destiny', 'Alexander'),
+(56, 'amandamurphy@example.org', 'foxbobby', '&5NVB!y2#@', 'Regular', 'Kevin', 'Williams'),
+(57, 'amber44@example.com', 'warnercynthia', '2D5@5Js9NK', 'Regular', 'Priscilla', 'Webb'),
+(58, 'christopherbrown@example.com', 'phillip67', 'E@3$pIbzX@', 'Regular', 'Amanda', 'Wilson'),
+(59, 'brian24@example.org', 'gallegoskiara', 'hXb4MgCu*N', 'Regular', 'Amber', 'Miller'),
+(60, 'rodneykhan@example.org', 'todd34', '89A*YUdp@)', 'Regular', 'April', 'Mcdowell'),
+(61, 'carolynlee@example.org', 'deanna39', '98!4NdYtf&', 'Regular', 'Elizabeth', 'Burch'),
+(62, 'james53@example.net', 'sanderslinda', '+x2VT1mOjX', 'Regular', 'Colton', 'Sanford'),
+(63, 'lgarcia@example.net', 'davilamichelle', '%!YzQL2c4+', 'Regular', 'Pamela', 'Russell'),
+(64, 'brandonsmith@example.org', 'derrickleonard', 'xGsnO!a8#6', 'Regular', 'Erin', 'Cervantes'),
+(65, 'smithderek@example.com', 'josephheather', ')R!!8hefA#', 'Regular', 'Timothy', 'Larsen'),
+(66, 'karen65@example.net', 'perezadam', 'q^2M!sn_G@', 'Regular', 'Danielle', 'Hernandez'),
+(67, 'stephanie23@example.org', 'kgross', '3yLqO$gg(K', 'Regular', 'Joshua', 'Miller'),
+(68, 'marshsharon@example.com', 'flowerstimothy', '!8YB$7jn8&', 'Regular', 'Kevin', 'Harper'),
+(69, 'qfox@example.org', 'paige57', 'q!4pDvM4cW', 'Regular', 'Raymond', 'Wright'),
+(70, 'esutton@example.org', 'timothy93', '17J+Esfh^U', 'Regular', 'Thomas', 'Shea'),
+(71, 'lroach@example.com', 'dana41', '^fs8KQ_DE5', 'Regular', 'Aaron', 'Burke'),
+(72, 'marissa38@example.org', 'vcordova', '$5!NVnohRP', 'Regular', 'Nicole', 'Williamson'),
+(73, 'aguilarmichael@example.com', 'rodneynunez', 'yUx9TJxu)3', 'Regular', 'Gary', 'Gonzalez'),
+(74, 'christine16@example.com', 'fking', 'q4JjHrXe&L', 'Regular', 'Steven', 'Ortiz'),
+(75, 'gary05@example.org', 'jennifer77', '#90YPjza*g', 'Regular', 'Christina', 'Norton'),
+(76, 'douglas65@example.com', 'stacey36', '&ykCH9!l9M', 'Regular', 'Tasha', 'Williams'),
+(77, 'daniel72@example.com', 'laurenbruce', 'W*5UbViiyM', 'Regular', 'Isaac', 'Jimenez'),
+(78, 'fowlermichael@example.net', 'kperry', '*RDNEr#e(7', 'Regular', 'Sarah', 'Taylor'),
+(79, 'alicia71@example.org', 'oscar21', 'x61BVNhk#+', 'Regular', 'Taylor', 'Butler'),
+(80, 'lutzwilliam@example.com', 'matthew28', 'bFpC81Rl$l', 'Regular', 'Jason', 'Herrera'),
+(81, 'lisaparks@example.net', 'hollandjames', '+52NU&+u2D', 'Regular', 'Teresa', 'Hayes'),
+(82, 'jessica76@example.net', 'catherine27', '!2Rvrbwa1d', 'Regular', 'Joshua', 'Richard'),
+(83, 'vhickman@example.org', 'nicholassolis', 'X)3RFHtDRJ', 'Regular', 'Cynthia', 'Paul'),
+(84, 'tina97@example.org', 'qsingh', '%7vw@Gcuuu', 'Regular', 'Jessica', 'Thompson'),
+(85, 'david18@example.org', 'kevinbender', '+9sJkuE%32', 'Regular', 'Bryan', 'Cross'),
+(86, 'welchkyle@example.org', 'rachelblair', '&V1f1_Rz7$', 'Regular', 'Andrea', 'Flores'),
+(87, 'hensleyvalerie@example.com', 'dgutierrez', '!Bp2QskIN$', 'Regular', 'Derrick', 'Drake'),
+(88, 'william98@example.com', 'juliebarnes', '1KkDeSCd^O', 'Regular', 'Richard', 'Bailey'),
+(89, 'rbrooks@example.net', 'wilsonbrandon', ')B(oZTyI5d', 'Regular', 'Teresa', 'Knight'),
+(90, 'donna68@example.com', 'brookegriffith', ')mjWI%arg2', 'Regular', 'Joseph', 'Tanner'),
+(91, 'choffman@example.net', 'curtisbrown', 'zV#2OdPlo(', 'Regular', 'Heather', 'Miller'),
+(92, 'rachelmaldonado@example.org', 'dalelamb', '%9S576Kmta', 'Regular', 'Sandy', 'White'),
+(93, 'mariawilson@example.com', 'zcoleman', 'dCc0hpCwF*', 'Regular', 'Timothy', 'Bishop'),
+(94, 'ashleypatterson@example.com', 'berrymichael', 'n7ADse_U$K', 'Regular', 'Katrina', 'Boyle'),
+(95, 'amanda48@example.com', 'nbarber', '4j*KMqD(*5', 'Regular', 'Gilbert', 'Smith'),
+(96, 'marcusharmon@example.com', 'cynthia15', '5DjBbc#N@7', 'Regular', 'Isaac', 'Smith'),
+(97, 'michaelbeck@example.com', 'cantujohn', 'c1_1Ic1AL(', 'Regular', 'Ryan', 'Pitts'),
+(98, 'jimenezpatrick@example.org', 'webbmichelle', 'MlC8pPG5K^', 'Regular', 'Rachel', 'Dean'),
+(99, 'bprice@example.net', 'zamorajulie', '84Xu@jTt(t', 'Regular', 'Amanda', 'Palmer'),
+(100, 'tmiles@example.org', 'user1', '12345678', 'Regular', 'Frances', 'Williams'),
+(101, 'jessica60@example.com', 'user2', '12345678', 'Premium', 'Eric', 'Nelson');
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `customer_premium`
+--
+
+CREATE TABLE `customer_premium` (
+  `id_customer_premium` int(11) NOT NULL,
+  `contact_number` varchar(15) NOT NULL,
+  `card_number` varchar(45) NOT NULL
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
+
+--
+-- Dumping data for table `customer_premium`
+--
+
+INSERT INTO `customer_premium` (`id_customer_premium`, `contact_number`, `card_number`) VALUES
+(101, '085151234567', '1234567890123456');
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `feeds`
+--
+
+CREATE TABLE `feeds` (
+  `IDFeeds` int(11) NOT NULL,
+  `Judul` varchar(45) NOT NULL,
+  `Konten` longtext NOT NULL,
+  `TanggalPembuatan` date NOT NULL,
+  `IDAuthor` int(11) NOT NULL
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
+
+--
+-- Dumping data for table `feeds`
+--
+
+INSERT INTO `feeds` (`IDFeeds`, `Judul`, `Konten`, `TanggalPembuatan`, `IDAuthor`) VALUES
+(1, 'Modi beatae hic.', 'perferendis corporis aliquid rerum dolorem sit officiis incidunt exercitationem voluptatem quo distinctio quis pariatur aspernatur neque placeat doloremque aperiam nesciunt non voluptas voluptatum sed id modi inventore possimus qui veritatis ut harum minima vel reiciendis facere totam nobis laborum unde maiores quod magni commodi sapiente consequatur nemo nam maxime molestias cum voluptate ullam iusto vitae sunt cumque optio quos labore esse eligendi', '2022-04-11', 1),
+(2, 'Dolorum doloremque labore et.', 'expedita cupiditate ea quae velit quia reprehenderit ad fugit exercitationem blanditiis magnam autem architecto nulla pariatur itaque consequuntur quod maxime iste facere quo animi facilis dicta ut amet porro fugiat fuga consequatur quaerat dolorem repellat placeat ratione sed mollitia incidunt voluptatum assumenda aut deserunt id nam soluta eligendi consectetur quibusdam repellendus laboriosam libero totam possimus ipsa doloribus eum aspernatur adipisci nostrum eveniet temporibus odit alias aliquam iure dolores aperiam sunt sint cum nemo praesentium laudantium corrupti nesciunt doloremque et accusamus eaque quas at quis omnis cumque delectus ipsum eius earum', '2022-04-11', 1),
+(3, 'Quae recusandae modi quidem reiciendis.', 'consectetur reiciendis labore ab pariatur et quos dolorem quis eius earum ea quas omnis voluptatum facere culpa impedit optio unde maiores perferendis dolor ex magni placeat inventore consequuntur iusto obcaecati ad similique debitis necessitatibus doloremque corporis ipsam sint excepturi voluptatibus dignissimos tempora a laborum ipsum molestias vel aut nisi hic', '2022-04-11', 1),
+(4, 'Libero maiores dolores eum modi aliquam.', 'voluptatem officiis debitis odio sunt eligendi similique quos nihil deserunt ut at repudiandae fuga dicta facere esse voluptates placeat ab minus optio ipsum iusto voluptate dignissimos ducimus perferendis corporis aut necessitatibus odit amet ipsa tempore id tenetur modi culpa molestias eum exercitationem non quasi alias eius officia magnam illo corrupti recusandae velit dolor cumque numquam aliquid ipsam voluptas', '2022-04-11', 2),
+(5, 'Beatae inventore minima omnis a minima dolore', 'optio libero magnam nam alias unde rem adipisci itaque provident omnis veniam veritatis debitis expedita facilis et assumenda tempora amet sint dignissimos ab sequi illo at necessitatibus saepe minus facere aut aliquam quas corrupti accusantium non repellat doloremque asperiores harum dolore impedit distinctio quasi corporis explicabo ex magni vero maiores modi error laborum laboriosam enim maxime soluta natus reprehenderit temporibus vel repellendus ipsum mollitia aperiam nihil a sapiente dolores nesciunt nobis recusandae exercitationem dicta', '2022-04-11', 2),
+(6, 'Corrupti in hic earum.', 'dolore eveniet atque labore quaerat dolores sequi esse sint autem culpa commodi ipsum nostrum amet mollitia odio reiciendis animi voluptatum ex omnis natus iusto voluptatem sed doloribus deserunt quasi nihil facilis iste ipsa possimus corporis quam qui impedit laborum exercitationem eos eius assumenda laudantium vero consequatur et repellendus voluptates cum rerum itaque minima accusantium nesciunt nam aperiam optio magnam tenetur adipisci cupiditate maiores ullam quis consequuntur', '2022-04-11', 3),
+(7, 'Maiores earum porro.', 'pariatur nobis soluta distinctio qui magnam adipisci commodi illum itaque velit reprehenderit quasi nesciunt error facilis autem architecto veritatis ratione harum nulla repellat rem ducimus quia debitis quae eius culpa laboriosam doloremque libero nihil minus voluptates asperiores quibusdam inventore eum saepe dolorem beatae at dignissimos eligendi aut dolore impedit officia iste mollitia facere iure laudantium minima delectus ullam placeat consectetur voluptatibus ex sunt quisquam quo fuga natus laborum alias corporis vero molestias', '2022-04-11', 2),
+(8, 'Aliquid dolor tempora praesentium consectetur', 'modi veniam culpa assumenda repellat optio velit laboriosam cumque repudiandae sed ratione magnam nostrum exercitationem deleniti mollitia adipisci non deserunt reiciendis suscipit quisquam ullam eligendi in explicabo quis itaque ipsum quia veritatis earum obcaecati voluptates aut inventore numquam et quo beatae delectus omnis eos voluptatem id dolore nam pariatur iste tempora provident sit sint dolores sunt autem dolorum nisi vero odio nesciunt distinctio debitis quidem vitae eum est voluptatum cupiditate sequi voluptas ipsam illum quos aperiam nulla accusantium saepe dignissimos totam ipsa ut odit molestias possimus', '2022-04-11', 2),
+(9, 'Cupiditate amet aliquam nam doloremque.', 'ex similique exercitationem unde assumenda aut corrupti quo obcaecati adipisci hic quidem a veritatis enim nulla esse laudantium quasi numquam nobis dolore possimus iusto dolorum qui fuga quaerat et itaque accusamus voluptates voluptatum repudiandae recusandae quae consectetur harum ipsum accusantium placeat veniam vero quibusdam magni porro soluta sunt aliquam aliquid sint tempora iste quia sequi voluptate nisi ratione ipsa rem debitis expedita reprehenderit provident pariatur', '2022-04-11', 3),
+(10, 'Reiciendis eius illum commodi harum.', 'debitis eos corrupti cumque quis doloremque architecto modi sed sapiente excepturi tempora ipsam commodi magni optio quia dignissimos quibusdam distinctio quidem odit a est temporibus eveniet nesciunt dolore dolorem itaque quisquam numquam nam voluptatibus quasi necessitatibus ipsa explicabo soluta impedit placeat quam nemo libero amet molestiae eius vitae ut illum omnis et tenetur pariatur provident velit natus nisi nihil labore quo iste maiores earum quos beatae nobis sequi', '2022-04-11', 4),
+(11, 'Esse consequuntur autem at unde occaecati vel', 'corrupti officia incidunt fugiat harum totam optio facilis soluta quasi dolor quidem architecto sequi accusantium beatae in dolore doloribus voluptatem qui quibusdam ad delectus eveniet minima quod exercitationem adipisci at odit deserunt aut consectetur rem maxime tenetur velit nihil illum suscipit est magni non laboriosam mollitia aspernatur sed blanditiis alias ducimus eaque rerum autem assumenda saepe earum quaerat ipsa a natus recusandae quos illo dolorum quam molestias excepturi ullam animi sint ut ratione libero sapiente explicabo eligendi voluptatum repellat dicta molestiae itaque perferendis sunt odio laudantium deleniti culpa error consequuntur iste nobis necessitatibus', '2022-04-11', 3),
+(12, 'Perferendis accusamus ab velit eum.', 'repellat nostrum sunt rem expedita voluptas dicta suscipit ea vero dolor doloribus eum veniam earum iure alias distinctio repellendus sequi modi fugiat quisquam corporis debitis nemo perferendis voluptatibus ducimus mollitia praesentium quo consectetur quidem est quasi magni laudantium aspernatur et non eius quas nam saepe autem inventore id possimus nisi soluta illo eligendi incidunt tempore necessitatibus facere rerum amet optio ab laboriosam facilis voluptates nesciunt voluptatum pariatur maxime eaque iste enim quam explicabo placeat quod natus eos', '2022-04-11', 1),
+(13, 'Quod neque delectus odio quaerat voluptatibus', 'quae dignissimos sed voluptate sequi dolores ratione provident accusantium eaque corrupti praesentium ipsa a ad officia aperiam delectus eum illo rerum optio aliquam consequatur nesciunt odio facere voluptatem cupiditate qui impedit in earum est nihil necessitatibus deserunt ipsum aliquid nemo quibusdam voluptatibus culpa molestias totam reprehenderit aut debitis consectetur sit fugit ipsam placeat maiores quia quaerat repellat minima itaque ut tempore enim id amet adipisci minus velit similique excepturi tenetur nobis', '2022-04-11', 5),
+(14, 'Nobis officiis cupiditate id qui.', 'eius modi asperiores itaque nihil unde reprehenderit id aliquam illum ea dolorum repellendus exercitationem pariatur ut obcaecati nulla rerum blanditiis possimus velit nostrum totam veniam est facilis dolores non reiciendis tempore dicta ducimus iusto voluptatem consectetur tempora aliquid placeat minima quisquam corporis ex adipisci eos veritatis nobis quo deleniti cupiditate error cumque in voluptate recusandae soluta voluptas quaerat ipsa minus ratione magnam quam molestias alias fugiat', '2022-04-11', 3),
+(15, 'Quibusdam aperiam labore.', 'praesentium dignissimos ipsa adipisci ad tempora cum esse sint exercitationem voluptate obcaecati repellendus explicabo harum unde enim omnis velit saepe excepturi ipsum quos impedit atque deserunt fugiat est dolorum culpa officia nulla maiores aspernatur ipsam accusamus delectus eius pariatur ab consectetur sapiente iste laudantium non dolorem asperiores doloribus repellat natus odit perferendis eveniet inventore doloremque ea neque aliquam corrupti earum qui eaque quisquam tempore soluta ducimus voluptatem iure suscipit fuga voluptatum odio nihil veniam alias fugit cupiditate dolore quia accusantium id sit deleniti error recusandae nemo rem beatae', '2022-04-11', 1),
+(16, 'Repellat praesentium officia deleniti volupta', 'ipsa a reiciendis ducimus laudantium molestiae eaque sequi enim voluptatibus harum unde cupiditate impedit quas temporibus nesciunt quis dolor dignissimos reprehenderit nisi repellendus aperiam veniam dicta voluptatum maiores ex maxime omnis repudiandae debitis at velit eveniet beatae delectus dolorem modi cum adipisci dolore eum quos necessitatibus amet culpa ad suscipit blanditiis autem quisquam', '2022-04-11', 1),
+(17, 'Necessitatibus odio fugit quo repellat perspi', 'commodi voluptas numquam ab quae accusantium sunt aperiam dolorem quidem ullam voluptatibus voluptate nesciunt possimus at debitis vitae tempore impedit quam repellendus itaque libero quis animi iure id deserunt vel assumenda consectetur fugit quisquam doloribus sit blanditiis nihil quaerat rem ipsam expedita optio quibusdam perspiciatis tempora nulla molestiae esse adipisci maiores non reprehenderit sint eaque odit sed autem veritatis quas dolor natus dolores enim ducimus corrupti provident quo dicta dignissimos facere totam atque amet ut iste minima velit voluptatum laborum neque aut earum nemo fugiat alias', '2022-04-11', 2),
+(18, 'Eligendi distinctio nihil molestiae.', 'aut sapiente recusandae facere assumenda accusantium minima sint quasi neque odit exercitationem expedita ad soluta debitis nisi rerum ducimus error iusto facilis doloremque quo quibusdam cum porro dolor esse aliquam consequatur ab fugiat quidem architecto blanditiis repellendus impedit nobis quis dicta reiciendis placeat numquam beatae libero sed laboriosam dolorem delectus voluptatibus quia eius ea sit odio suscipit cupiditate sequi harum hic nesciunt vero totam eveniet eligendi ipsum perspiciatis quisquam asperiores commodi dolore distinctio maiores quaerat magnam inventore quam similique autem fuga cumque corporis reprehenderit necessitatibus molestias nam in tempore corrupti animi ratione itaque est voluptatum', '2022-04-11', 2),
+(19, 'In ullam incidunt dignissimos voluptatem.', 'culpa vitae maiores eaque ratione corporis officia ullam cum doloremque repudiandae excepturi et enim at commodi perspiciatis libero necessitatibus distinctio maxime minus possimus quidem earum eum laboriosam adipisci provident aut natus sit non officiis exercitationem illo soluta nam nesciunt est in tempore fuga deserunt quam accusamus iusto nemo esse dolor quas omnis totam iure quo porro dignissimos temporibus quis amet eius expedita architecto similique impedit aliquid sint aliquam ab mollitia unde odio pariatur saepe tenetur corrupti quasi optio dolorem alias incidunt error veritatis aperiam repellat voluptatem repellendus cumque sapiente beatae rerum odit reiciendis', '2022-04-11', 4),
+(20, 'Ea sequi delectus amet voluptas ad.', 'maxime totam eos minima rerum impedit facere aliquam excepturi quasi nisi illo quos odio enim praesentium officiis eligendi numquam iste deleniti qui vel iure neque fugiat quia dolorum porro voluptatum repellendus voluptatibus ea cupiditate quo sapiente provident similique natus itaque eum magni quae doloremque expedita facilis dolor cum ratione nam molestiae magnam velit voluptatem deserunt dicta fugit modi omnis voluptates consequuntur eius exercitationem assumenda repudiandae aut beatae animi tempore adipisci error perferendis consequatur debitis reprehenderit pariatur dolores obcaecati sint amet doloribus distinctio nemo', '2022-04-11', 1),
+(21, 'Perferendis sint saepe ipsa alias perferendis', 'error suscipit sint possimus excepturi quos delectus expedita rem ea voluptates necessitatibus quod vel sed enim a molestias consequuntur repellendus voluptate hic dolore ut illum iure modi ipsum reprehenderit assumenda eaque doloribus deserunt sapiente fugit nostrum itaque pariatur consectetur inventore minus saepe nihil sit dicta odio eum sunt facilis veritatis alias optio vero neque velit omnis quisquam facere tempora dignissimos repudiandae quia nisi corporis aut quidem porro est officia magni sequi atque laborum veniam doloremque qui at ex animi libero ducimus perspiciatis voluptatibus impedit dolor culpa ipsam explicabo debitis', '2022-04-11', 3),
+(22, 'Veritatis asperiores libero odio maiores.', 'veniam quae tenetur non doloremque facilis suscipit modi labore sequi reprehenderit beatae repudiandae mollitia exercitationem nam quia totam minima deleniti saepe id rem ipsum fuga dolor quas quis voluptatibus libero eveniet quo recusandae culpa incidunt sed voluptates inventore voluptatem velit laborum accusamus iste optio ad quam fugiat in odit nisi aliquid delectus illo soluta tempora amet deserunt omnis iure voluptate eius voluptatum perspiciatis debitis ipsa consequatur praesentium blanditiis doloribus porro aliquam reiciendis assumenda aspernatur fugit nesciunt architecto aut dolore dolores ullam ea cumque dolorum nobis nulla ipsam nostrum quod rerum consequuntur illum hic odio quibusdam temporibus', '2022-04-11', 3),
+(23, 'Perferendis repellendus veniam voluptatem.', 'saepe laboriosam iste possimus eius totam minus neque culpa illum harum praesentium rem maiores esse suscipit consectetur laborum tempora ab dolore sit eos impedit sunt hic quod in nam perspiciatis qui dicta beatae reiciendis necessitatibus fugit unde ut atque est natus recusandae minima eum quibusdam cum quaerat illo assumenda blanditiis dolorem voluptatum molestiae molestias nemo voluptas quisquam voluptatibus aperiam repellat nulla eveniet doloremque inventore repudiandae optio expedita autem cumque excepturi veritatis perferendis ea voluptate nostrum temporibus tenetur quis officia odio cupiditate deserunt asperiores consequuntur consequatur', '2022-04-11', 3),
+(24, 'Molestias eos fugiat voluptatem laborum.', 'at illo illum quae quibusdam esse officia natus temporibus doloremque libero rem magnam consectetur impedit laborum nulla repellendus voluptates quas laboriosam autem earum iste deleniti molestiae aliquid officiis reprehenderit maiores repellat voluptatibus commodi tempore veniam qui sapiente asperiores tempora sed aspernatur exercitationem nam necessitatibus aliquam est adipisci enim nemo ut possimus optio distinctio voluptas aperiam dignissimos a nostrum non quam voluptate magni iusto fugit provident laudantium vitae sint modi aut', '2022-04-11', 2),
+(25, 'Omnis odio voluptas perferendis voluptatem eo', 'cum sint inventore sapiente id magni totam adipisci facere velit enim distinctio voluptatibus eum quod quidem ea corporis quasi quas porro pariatur voluptas libero eos culpa reprehenderit tenetur tempore nisi mollitia vitae ab ullam illum ipsa architecto sequi quam unde possimus similique ad quos laboriosam dolor optio aspernatur fuga accusamus blanditiis voluptates cupiditate quibusdam placeat corrupti aliquam aut consequatur doloribus assumenda soluta dolores cumque aperiam saepe rem perferendis veritatis facilis esse quis eaque neque in ratione nemo exercitationem quaerat ut atque', '2022-04-11', 4),
+(26, 'Provident at earum adipisci ad.', 'autem eos repudiandae mollitia fugit commodi iste porro animi neque molestiae dicta cum quas sunt reiciendis laborum nihil quasi possimus perspiciatis unde recusandae ea qui ab eum praesentium nostrum libero quidem saepe facere doloribus aliquam incidunt ad enim rem tempora blanditiis sequi ut magnam eaque voluptatum voluptates voluptate veritatis odit ratione iusto maxime at nam obcaecati placeat et veniam cupiditate a amet delectus expedita in dolore rerum inventore vel architecto aliquid dolorem quibusdam dolor adipisci magni excepturi natus quae sed omnis corrupti distinctio fuga minus earum laboriosam culpa voluptas corporis deleniti molestias doloremque', '2022-04-11', 4),
+(27, 'Beatae ut eaque dolore aut laudantium animi.', 'dolorem omnis totam in quo cum asperiores praesentium impedit soluta optio magni assumenda ipsum quis accusantium magnam commodi exercitationem atque cumque voluptatum saepe reiciendis veritatis voluptatibus incidunt debitis perferendis quam facere molestiae eveniet doloremque placeat odit maiores autem earum consequuntur sequi quaerat repellat nisi dolores ullam laudantium tenetur et nostrum quae ad fuga labore nihil ut dolorum alias illum eum facilis ipsa quas culpa dignissimos dolore sapiente animi iure numquam enim quisquam sed minus error architecto repellendus reprehenderit neque quidem modi pariatur fugit laboriosam fugiat sint recusandae nemo', '2022-04-11', 4),
+(28, 'Doloremque culpa fugit voluptatem.', 'nihil a dolores saepe aperiam accusamus culpa asperiores minus sit repellendus dolor voluptates consequuntur soluta eaque vero excepturi quos vitae architecto adipisci dolorum illo blanditiis nulla facilis expedita natus fugit impedit temporibus optio atque tempora ipsa assumenda ea ab officiis recusandae molestias odio consectetur cumque sequi ex quidem totam corporis unde amet sunt tenetur non doloremque similique laudantium modi placeat labore quis reprehenderit iste veritatis quasi', '2022-04-11', 3),
+(29, 'Mollitia ea et alias quis voluptates rem.', 'ullam doloribus harum assumenda quam natus magni a nostrum molestiae inventore modi quae omnis eveniet quos at ipsam praesentium delectus molestias minima iste magnam ea debitis possimus quo corporis ducimus rem non laborum vero necessitatibus provident corrupti est velit veritatis ratione perferendis nobis animi unde dignissimos aspernatur officia maiores architecto consectetur aut eaque expedita repudiandae tenetur vel dolor blanditiis ab eum beatae hic adipisci esse numquam obcaecati sint repellat aliquid consequatur', '2022-04-11', 3),
+(30, 'Totam veritatis ipsa sed.', 'doloribus fugit culpa ea reprehenderit iste nemo eum omnis soluta consectetur animi blanditiis veniam voluptatem ut voluptate impedit vel tempora architecto quis pariatur quaerat repudiandae perspiciatis beatae nam commodi voluptas earum sapiente autem deserunt quidem repellat velit vitae atque eos rerum dolorem eveniet quia adipisci molestiae fuga porro rem accusamus veritatis exercitationem suscipit aliquid doloremque', '2022-04-11', 3);
+
+-- --------------------------------------------------------
+
+--
+-- Table structure for table `waiting_list`
+--
+
+CREATE TABLE `waiting_list` (
+  `IDCustomerPremium` int(11) NOT NULL,
+  `contact_number` varchar(15) NOT NULL,
+  `card_number` varchar(45) NOT NULL
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
+
+--
+-- Dumping data for table `waiting_list`
+--
+
+INSERT INTO `waiting_list` (`IDCustomerPremium`, `contact_number`, `card_number`) VALUES
+(36, '(0063) 491 6277', '30183159019262'),
+(77, '+62 (035) 643 4', '6011159208399426'),
+(50, '+62 (098) 019-4', '30220168535860'),
+(59, '+62 (193) 678-4', '4419336050427037765'),
+(74, '+62 (282) 514 9', '4138868617186835'),
+(20, '+62 (622) 933-0', '4721796023937611'),
+(16, '+62 (775) 828-3', '30573808098594'),
+(57, '+62-0255-507-44', '340794681607807'),
+(42, '+62-0377-007-94', '4814349934000968'),
+(86, '0801365557', '30070943815537');
+
+--
+-- Indexes for dumped tables
+--
+
+--
+-- Indexes for table `administrator`
+--
+ALTER TABLE `administrator`
+  ADD PRIMARY KEY (`IDAdmin`),
+  ADD UNIQUE KEY `UsernameAdm_UNIQUE` (`UsernameAdm`);
+
+--
+-- Indexes for table `carbon_trace`
+--
+ALTER TABLE `carbon_trace`
+  ADD UNIQUE KEY `IDTracing_UNIQUE` (`IDTracing`),
+  ADD KEY `IDCustomer_trace_idx` (`ID_Customer`);
+
+--
+-- Indexes for table `customer`
+--
+ALTER TABLE `customer`
+  ADD PRIMARY KEY (`IDCustomer`),
+  ADD UNIQUE KEY `IDCustomer_UNIQUE` (`IDCustomer`),
+  ADD UNIQUE KEY `Username_UNIQUE` (`Username`),
+  ADD UNIQUE KEY `Email_UNIQUE` (`Email`);
+
+--
+-- Indexes for table `customer_premium`
+--
+ALTER TABLE `customer_premium`
+  ADD UNIQUE KEY `idcustomer_premium_UNIQUE` (`id_customer_premium`),
+  ADD UNIQUE KEY `contact_number_UNIQUE` (`contact_number`),
+  ADD UNIQUE KEY `card_number_UNIQUE` (`card_number`);
+
+--
+-- Indexes for table `feeds`
+--
+ALTER TABLE `feeds`
+  ADD PRIMARY KEY (`IDFeeds`),
+  ADD UNIQUE KEY `IDFeeds_UNIQUE` (`IDFeeds`),
+  ADD UNIQUE KEY `Judul_UNIQUE` (`Judul`),
+  ADD KEY `IDAuthor_toIDAdmin_idx` (`IDAuthor`);
+
+--
+-- Indexes for table `waiting_list`
+--
+ALTER TABLE `waiting_list`
+  ADD UNIQUE KEY `contact_number_UNIQUE` (`contact_number`),
+  ADD UNIQUE KEY `card_number_UNIQUE` (`card_number`),
+  ADD KEY `idWaiting_idGeneral_idx` (`IDCustomerPremium`);
+
+--
+-- AUTO_INCREMENT for dumped tables
+--
+
+--
+-- AUTO_INCREMENT for table `administrator`
+--
+ALTER TABLE `administrator`
+  MODIFY `IDAdmin` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=6;
+
+--
+-- AUTO_INCREMENT for table `carbon_trace`
+--
+ALTER TABLE `carbon_trace`
+  MODIFY `IDTracing` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=663;
+
+--
+-- AUTO_INCREMENT for table `customer`
+--
+ALTER TABLE `customer`
+  MODIFY `IDCustomer` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=103;
+
+--
+-- AUTO_INCREMENT for table `feeds`
+--
+ALTER TABLE `feeds`
+  MODIFY `IDFeeds` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=52;
+
+--
+-- Constraints for dumped tables
+--
+
+--
+-- Constraints for table `carbon_trace`
+--
+ALTER TABLE `carbon_trace`
+  ADD CONSTRAINT `IDCustomer_trace` FOREIGN KEY (`ID_Customer`) REFERENCES `customer` (`IDCustomer`);
+
+--
+-- Constraints for table `customer_premium`
+--
+ALTER TABLE `customer_premium`
+  ADD CONSTRAINT `toGeneral` FOREIGN KEY (`id_customer_premium`) REFERENCES `customer` (`IDCustomer`);
+
+--
+-- Constraints for table `feeds`
+--
+ALTER TABLE `feeds`
+  ADD CONSTRAINT `IDAuthor_toIDAdmin` FOREIGN KEY (`IDAuthor`) REFERENCES `administrator` (`IDAdmin`);
+
+--
+-- Constraints for table `waiting_list`
+--
+ALTER TABLE `waiting_list`
+  ADD CONSTRAINT `idWaiting_idGeneral` FOREIGN KEY (`IDCustomerPremium`) REFERENCES `customer` (`IDCustomer`);
+COMMIT;
+
+/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
+/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
+/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
diff --git a/doc/1_TampilanAwal.png b/doc/1_TampilanAwal.png
new file mode 100644
index 0000000000000000000000000000000000000000..3be07c1a8c3f534612c5898419795c70ee72b1fb
Binary files /dev/null and b/doc/1_TampilanAwal.png differ
diff --git a/doc/2_Login.png b/doc/2_Login.png
new file mode 100644
index 0000000000000000000000000000000000000000..ccac79376f7234846d90f3f50262fe015a1f9fe5
Binary files /dev/null and b/doc/2_Login.png differ
diff --git a/doc/3_Register.png b/doc/3_Register.png
new file mode 100644
index 0000000000000000000000000000000000000000..10858eb3292fcb959b7d47dcf80204437c9766fd
Binary files /dev/null and b/doc/3_Register.png differ
diff --git a/doc/4_Summary.png b/doc/4_Summary.png
new file mode 100644
index 0000000000000000000000000000000000000000..8aef0a6990053d42e9be93c567b686ac95189843
Binary files /dev/null and b/doc/4_Summary.png differ
diff --git a/doc/5_InputEmisi.png b/doc/5_InputEmisi.png
new file mode 100644
index 0000000000000000000000000000000000000000..8486225c7bae844d4617089ba8c571f2d980bc80
Binary files /dev/null and b/doc/5_InputEmisi.png differ
diff --git a/doc/6_1_UpgradePremium.png b/doc/6_1_UpgradePremium.png
new file mode 100644
index 0000000000000000000000000000000000000000..ced0259b4f1237486ad8f31c1c1ef9bb7304b8dc
Binary files /dev/null and b/doc/6_1_UpgradePremium.png differ
diff --git a/doc/6_2_UpgradePremium.png b/doc/6_2_UpgradePremium.png
new file mode 100644
index 0000000000000000000000000000000000000000..f8784b4b3f76c0c43d700b2bc3e45a378b6ea5bd
Binary files /dev/null and b/doc/6_2_UpgradePremium.png differ
diff --git a/doc/6_3_UpgradePremium.png b/doc/6_3_UpgradePremium.png
new file mode 100644
index 0000000000000000000000000000000000000000..4302ae76b3df24e749459ae91ddd836a123f91c6
Binary files /dev/null and b/doc/6_3_UpgradePremium.png differ
diff --git a/doc/7_1_TipsandTrick.png b/doc/7_1_TipsandTrick.png
new file mode 100644
index 0000000000000000000000000000000000000000..f61647989c45563ca1c0bda2ebf1e2b6fcaaf4a7
Binary files /dev/null and b/doc/7_1_TipsandTrick.png differ
diff --git a/doc/7_2_TipsandTrick.png b/doc/7_2_TipsandTrick.png
new file mode 100644
index 0000000000000000000000000000000000000000..b5361455f5749db33e9387cd992f3669d3fb9f0f
Binary files /dev/null and b/doc/7_2_TipsandTrick.png differ
diff --git a/doc/8_WaitingList.png b/doc/8_WaitingList.png
new file mode 100644
index 0000000000000000000000000000000000000000..6eebe31333e0712fda1550dd947d3b0e72e142d4
Binary files /dev/null and b/doc/8_WaitingList.png differ
diff --git a/doc/CaptureScreen.pdf b/doc/CaptureScreen.pdf
new file mode 100644
index 0000000000000000000000000000000000000000..80000c98281bd9712baf9a18b819953fb539ab30
Binary files /dev/null and b/doc/CaptureScreen.pdf differ
diff --git a/doc/CarbonTrackr_RelationalScheme.png b/doc/CarbonTrackr_RelationalScheme.png
new file mode 100644
index 0000000000000000000000000000000000000000..98863129c90adae1fb31f51ef4b668732340b4e0
Binary files /dev/null and b/doc/CarbonTrackr_RelationalScheme.png differ
diff --git a/resources/img/carbonTrackr.png b/resources/img/carbonTrackr.png
new file mode 100644
index 0000000000000000000000000000000000000000..09f1510da102aad2a575591f219dc25bf8d08afc
Binary files /dev/null and b/resources/img/carbonTrackr.png differ
diff --git a/resources/img/lamp.png b/resources/img/lamp.png
new file mode 100644
index 0000000000000000000000000000000000000000..498af51e2b5ceee4c57665ad9b33434d2aadf3cd
Binary files /dev/null and b/resources/img/lamp.png differ
diff --git a/resources/img/motorbike.png b/resources/img/motorbike.png
new file mode 100644
index 0000000000000000000000000000000000000000..6611ff46aa6ee7d1403e622f8cb82285acc2fac6
Binary files /dev/null and b/resources/img/motorbike.png differ
diff --git a/resources/ui/multiplePage.ui b/resources/ui/multiplePage.ui
new file mode 100644
index 0000000000000000000000000000000000000000..2736af941699d50c301bd708cfb620ca0e8413a2
--- /dev/null
+++ b/resources/ui/multiplePage.ui
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>MainWindow</class>
+ <widget class="QMainWindow" name="MainWindow">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>989</width>
+    <height>692</height>
+   </rect>
+  </property>
+  <property name="windowTitle">
+   <string>MainWindow</string>
+  </property>
+  <widget class="QWidget" name="centralwidget">
+   <widget class="QPushButton" name="summaryButton">
+    <property name="geometry">
+     <rect>
+      <x>20</x>
+      <y>10</y>
+      <width>91</width>
+      <height>31</height>
+     </rect>
+    </property>
+    <property name="text">
+     <string>Summary</string>
+    </property>
+   </widget>
+   <widget class="QPushButton" name="profileButton">
+    <property name="geometry">
+     <rect>
+      <x>130</x>
+      <y>10</y>
+      <width>91</width>
+      <height>31</height>
+     </rect>
+    </property>
+    <property name="text">
+     <string>Profile</string>
+    </property>
+   </widget>
+   <widget class="QPushButton" name="tipsButton">
+    <property name="geometry">
+     <rect>
+      <x>240</x>
+      <y>10</y>
+      <width>91</width>
+      <height>31</height>
+     </rect>
+    </property>
+    <property name="text">
+     <string>Tips and Trick</string>
+    </property>
+   </widget>
+   <widget class="QMdiArea" name="mdiArea">
+    <property name="geometry">
+     <rect>
+      <x>20</x>
+      <y>50</y>
+      <width>951</width>
+      <height>591</height>
+     </rect>
+    </property>
+   </widget>
+   <widget class="QPushButton" name="loginButton">
+    <property name="geometry">
+     <rect>
+      <x>510</x>
+      <y>10</y>
+      <width>91</width>
+      <height>31</height>
+     </rect>
+    </property>
+    <property name="text">
+     <string>Login</string>
+    </property>
+   </widget>
+   <widget class="QPushButton" name="registerButton">
+    <property name="geometry">
+     <rect>
+      <x>610</x>
+      <y>10</y>
+      <width>91</width>
+      <height>31</height>
+     </rect>
+    </property>
+    <property name="text">
+     <string>Register</string>
+    </property>
+   </widget>
+  </widget>
+  <widget class="QMenuBar" name="menubar">
+   <property name="geometry">
+    <rect>
+     <x>0</x>
+     <y>0</y>
+     <width>989</width>
+     <height>21</height>
+    </rect>
+   </property>
+  </widget>
+  <widget class="QStatusBar" name="statusbar"/>
+ </widget>
+ <resources/>
+ <connections/>
+</ui>
diff --git a/src/features/MainWindow.py b/src/features/MainWindow.py
new file mode 100644
index 0000000000000000000000000000000000000000..0e47947e1b6b56942b23512df38954caea774f80
--- /dev/null
+++ b/src/features/MainWindow.py
@@ -0,0 +1,143 @@
+from PyQt5 import QtCore, QtGui, QtWidgets
+from PyQt5 import uic
+from summary_data import *
+from input_data import *
+from tips_and_trick import *
+from WaitingList import *
+from login import *
+from register import *
+from premium_register import *
+import sys
+
+class Ui_MainWindow(QtWidgets.QMainWindow):
+    
+    def __init__(self):
+        super(Ui_MainWindow, self).__init__()
+
+        self.loadUi()
+
+        self.mdi.resize(696, 491)
+        self.resize(734, 541)
+
+        self.setupUi()
+        self.setupConnection()
+
+        self.showHide()
+
+        self.landingPage()
+
+        self.show()
+
+    def loadUi(self):
+        uic.loadUi("resources/ui/multiplePage.ui", self)
+        self.mdi = self.findChild(QtWidgets.QMdiArea, "mdiArea")
+        self.summaryButton = self.findChild(QtWidgets.QPushButton, "summaryButton")
+        self.profileButton = self.findChild(QtWidgets.QPushButton, "profileButton")
+        self.tipsButton = self.findChild(QtWidgets.QPushButton, "tipsButton")
+        self.loginButton =self.findChild(QtWidgets.QPushButton, "loginButton")
+        self.registerButton =self.findChild(QtWidgets.QPushButton, "registerButton")
+    
+    def setupUi(self):
+        # # UI Summary Data
+        self.uiSum = summary_data()
+
+        # UI Input Carbon Emission Data
+        self.uiCF = input_data(-1)
+
+        # # UI Tips and Trick
+        self.uiTnT = tips_and_trick(-1)
+
+        # UI WaitingList
+        self.WaitingList = QtWidgets.QFrame()
+        uiWai = Ui_WaitingList()
+        uiWai.setupUi(self.WaitingList)
+
+        # UI Login
+        self.uiLog = login()
+        
+        # UI Register
+        self.uiReg = register()
+
+        # UI Register Premium
+        self.uiRegP = premium_register(-1)
+
+    def setupConnection(self):
+        self.summaryButton.clicked.connect(lambda: self.add_window(self.uiSum.Frame))
+        self.tipsButton.clicked.connect(lambda: self.add_window(self.uiTnT.Frame))
+        self.profileButton.clicked.connect(lambda: self.add_window(self.uiRegP.Frame))
+        self.loginButton.clicked.connect(lambda: self.add_window(self.uiLog.Frame, False))
+        self.registerButton.clicked.connect(lambda: self.add_window(self.uiReg.Frame, False))
+
+        self.uiLog.button_login.clicked.connect(self.showHide)
+        # self.uiLog.button_login.clicked.connect(self.reinitializePage)
+        self.uiLog.button_login.clicked.connect(lambda: self.add_window(self.uiSum.Frame))
+        
+        self.uiLog.button_register.clicked.connect(lambda: self.add_window(self.uiReg.Frame, False))
+        self.uiRegP.pushButton.clicked.connect(self.reinitializePage)
+        self.uiRegP.pushButton.clicked.connect(lambda: self.add_window(self.uiRegP.Frame))
+
+        self.uiReg.button_login.clicked.connect(lambda: self.add_window(self.uiLog.Frame, False))
+        # self.uiReg.button_register.clicked.connect(lambda: self.add_window(self.uiSum.Frame))
+        self.uiSum.pushButton.clicked.connect(lambda: self.add_window(self.uiCF.Frame))
+        self.uiCF.buttonBox.accepted.connect(lambda: self.add_window(self.uiSum.Frame))
+        self.uiCF.buttonBox.rejected.connect(lambda: self.add_window(self.uiSum.Frame))
+
+    def add_window(self, frame, successLogin = True):
+        # self.mdi.closeActiveSubWindow()
+        if self.uiLog.username is not None or not (successLogin):
+            self.sub = QtWidgets.QMdiSubWindow()
+            self.sub.setWindowFlags(QtCore.Qt.FramelessWindowHint)
+
+            self.sub.setWidget(frame)
+
+            self.mdi.addSubWindow(self.sub)
+            self.sub.show()
+
+    def showHide(self):
+        if self.uiLog.username is None:
+            self.summaryButton.hide()
+            self.profileButton.hide()
+            self.tipsButton.hide()
+            self.loginButton.show()
+            self.registerButton.show()
+        else:
+            self.loginButton.hide()
+            self.registerButton.hide()
+            self.summaryButton.show()
+            self.profileButton.show()
+            self.tipsButton.show()
+            self.reinitializePage()
+
+    def reinitializePage(self):
+        if self.uiLog.username is not None:
+            mycursor.execute(f"SELECT * FROM customer WHERE Username = '{self.uiLog.username}'")
+            self.datacustomer = list(mycursor.fetchall()[0])
+
+            # * Reinitialize with customer data for passing
+            self.uiSum = summary_data(self.datacustomer)
+
+            self.uiTnT = tips_and_trick(self.datacustomer[0])
+
+            self.uiRegP = premium_register(self.datacustomer[0])
+
+            self.uiCF = input_data(self.datacustomer[0])
+
+            self.setupConnection()
+    
+    def landingPage(self):
+        self.sub = QtWidgets.QMdiSubWindow()
+        self.sub.setWindowFlags(QtCore.Qt.FramelessWindowHint)
+
+        label = QtWidgets.QLabel(self)
+        pixMap =QtGui.QPixmap('resources/img/carbonTrackr.png')
+        label.setPixmap(pixMap)
+        label.setFixedSize(696, 491)
+
+        self.sub.setWidget(label)
+
+        self.mdi.addSubWindow(self.sub)
+        self.sub.show()
+
+app = QtWidgets.QApplication(sys.argv)
+ui = Ui_MainWindow()
+app.exec_()
\ No newline at end of file
diff --git a/src/features/WaitingList.py b/src/features/WaitingList.py
new file mode 100644
index 0000000000000000000000000000000000000000..23f644104248de917425c17a88f9835232208819
--- /dev/null
+++ b/src/features/WaitingList.py
@@ -0,0 +1,121 @@
+import mysql.connector
+from PyQt5 import QtCore, QtGui, QtWidgets
+
+class QueryWaitingList:    
+    def __init__(self):
+        self.con = mysql.connector.connect(
+        host = 'localhost',
+        user = 'root',
+        password = 'root',
+        db = 'toptrackr',)
+
+        self.dbcursor = self.con.cursor()
+
+    
+    def getDataCustomerWaitingList(self):
+        data = self.dbcursor.execute("SELECT IDCustomer, FirstName, LastName, Email, contact_number, card_number FROM customer JOIN waiting_list ON customer.IDCustomer = waiting_list.IDCustomerPremium")
+        data = self.dbcursor.fetchall()
+        return data
+    
+    def addCustomerPremium(self, id_customer_premium, contact_number, card_number):
+        self.dbcursor.execute("INSERT INTO customer_premium(id_customer_premium, contact_number, card_number) VALUES (%s, %s, %s)", (id_customer_premium, contact_number, card_number))
+        self.dbcursor.execute(f"UPDATE customer SET TipeUser = 'Premium' WHERE IDCustomer = {id_customer_premium}")
+        self.con.commit()
+    
+    def deleteCustomerFromWaitingList(self, id_customer_premium):
+        self.dbcursor.execute(f"DELETE FROM waiting_list WHERE IDCustomerPremium = {id_customer_premium}")
+        self.con.commit()
+
+class Ui_WaitingList(object):
+    def setupUi(self, WaitingList):
+        WaitingList.setObjectName("WaitingList")
+        WaitingList.setFixedSize(712, 588)
+        self.WaitingListTable = QtWidgets.QTableWidget(WaitingList)
+        self.WaitingListTable.setGeometry(QtCore.QRect(10, 10, 691, 471))
+        self.WaitingListTable.setObjectName("WaitingListTable")
+        self.WaitingListTable.setColumnCount(6)
+        self.WaitingListTable.setRowCount(0)
+        item = QtWidgets.QTableWidgetItem()
+        self.WaitingListTable.setHorizontalHeaderItem(0, item)
+        item = QtWidgets.QTableWidgetItem()
+        self.WaitingListTable.setHorizontalHeaderItem(1, item)
+        item = QtWidgets.QTableWidgetItem()
+        self.WaitingListTable.setHorizontalHeaderItem(2, item)
+        item = QtWidgets.QTableWidgetItem()
+        self.WaitingListTable.setHorizontalHeaderItem(3, item)
+        item = QtWidgets.QTableWidgetItem()
+        self.WaitingListTable.setHorizontalHeaderItem(4, item)
+        item = QtWidgets.QTableWidgetItem()
+        self.WaitingListTable.setHorizontalHeaderItem(5, item)
+
+        self.WaitingListTable.verticalHeader().setDefaultSectionSize(40)
+        self.WaitingListTable.setColumnWidth(5, 150)
+
+        self.loadData()
+
+        self.retranslateUi(WaitingList)
+        QtCore.QMetaObject.connectSlotsByName(WaitingList)
+
+    def retranslateUi(self, WaitingList):
+        _translate = QtCore.QCoreApplication.translate
+        WaitingList.setWindowTitle(_translate("WaitingList", "Frame"))
+        item = self.WaitingListTable.horizontalHeaderItem(0)
+        item.setText(_translate("WaitingList", "ID Customer"))
+        item = self.WaitingListTable.horizontalHeaderItem(1)
+        item.setText(_translate("WaitingList", "Full Name"))
+        item = self.WaitingListTable.horizontalHeaderItem(2)
+        item.setText(_translate("WaitingList", "New Column"))
+        item = self.WaitingListTable.horizontalHeaderItem(3)
+        item.setText(_translate("WaitingList", "Credit Number"))
+        item = self.WaitingListTable.horizontalHeaderItem(4)
+        item.setText(_translate("WaitingList", "Contact Number"))
+        item = self.WaitingListTable.horizontalHeaderItem(5)
+        item.setText(_translate("WaitingList", "Verification"))
+
+    def loadData(self):
+        db = QueryWaitingList()
+        data = db.getDataCustomerWaitingList()
+        self.WaitingListTable.setRowCount(len(data))
+        
+        tableRow = 0
+        for row in data:
+            self.WaitingListTable.setItem(tableRow, 0, QtWidgets.QTableWidgetItem(str(row[0])))
+            self.WaitingListTable.setItem(tableRow, 1, QtWidgets.QTableWidgetItem(row[1] + ' ' + row[2]))
+            self.WaitingListTable.setItem(tableRow, 2, QtWidgets.QTableWidgetItem(row[3]))
+            self.WaitingListTable.setItem(tableRow, 3, QtWidgets.QTableWidgetItem(row[4]))
+            self.WaitingListTable.setItem(tableRow, 4, QtWidgets.QTableWidgetItem(row[5]))
+
+            layout = QtWidgets.QHBoxLayout()
+            acceptBtn = QtWidgets.QPushButton("Accept", clicked= lambda : self.accept(data[int(acceptBtn.sender().objectName())][0], data[int(acceptBtn.sender().objectName())][4], data[int(acceptBtn.sender().objectName())][5]))
+            acceptBtn.setObjectName(str(tableRow))
+            rejectBtn = QtWidgets.QPushButton("Reject", clicked= lambda : self.reject(data[int(rejectBtn.sender().objectName())][0]))
+            rejectBtn.setObjectName(str(tableRow))
+            layout.addWidget(acceptBtn)
+            layout.addWidget(rejectBtn)
+
+            cellWidget = QtWidgets.QWidget()
+            cellWidget.setLayout(layout)
+
+            self.WaitingListTable.setCellWidget(tableRow, 5, cellWidget)
+
+            tableRow += 1
+    
+    def accept(self, id_customer_premium, contact_number, card_number):
+        db = QueryWaitingList()
+        db.addCustomerPremium(id_customer_premium, contact_number, card_number)
+        db.deleteCustomerFromWaitingList(id_customer_premium)
+        self.loadData()
+    
+    def reject(self, id_customer_premium):
+        db = QueryWaitingList()
+        db.deleteCustomerFromWaitingList(id_customer_premium)
+        self.loadData()
+
+if __name__ == "__main__":
+    import sys
+    app = QtWidgets.QApplication(sys.argv)
+    WaitingList = QtWidgets.QFrame()
+    ui = Ui_WaitingList()
+    ui.setupUi(WaitingList)
+    WaitingList.show()
+    sys.exit(app.exec_())
\ No newline at end of file
diff --git a/src/features/db.py b/src/features/db.py
new file mode 100644
index 0000000000000000000000000000000000000000..b9e18fc949188e38dc37cb98bb149cda60cf3ed7
--- /dev/null
+++ b/src/features/db.py
@@ -0,0 +1,14 @@
+import mysql.connector
+
+# ! Temporary credential
+id_cred = 101
+name_cred = "Ferguso"
+
+db = mysql.connector.connect(
+    host="localhost",
+    user="root",
+    passwd="root",
+    database="toptrackr"
+)
+
+mycursor = db.cursor()
\ No newline at end of file
diff --git a/src/features/input_data.py b/src/features/input_data.py
new file mode 100644
index 0000000000000000000000000000000000000000..8f615c4b793da7cd8546be907a8d853d444c414b
--- /dev/null
+++ b/src/features/input_data.py
@@ -0,0 +1,111 @@
+from PyQt5 import QtCore, QtGui, QtWidgets
+from db import db, mycursor
+import datetime
+
+class input_data(QtWidgets.QWidget):
+    def __init__(self, id = None):
+        super().__init__()
+        self.Frame = QtWidgets.QFrame()
+        self.setupUi()
+        self.id = id
+    
+    def setupUi(self):
+        self.Frame.setObjectName("Frame")
+        self.Frame.setFixedSize(696, 491)
+        self.Frame.setStyleSheet("background-color: rgb(238, 238, 238);")
+        self.Frame.setFrameShape(QtWidgets.QFrame.Panel)
+        self.Frame.setFrameShadow(QtWidgets.QFrame.Raised)
+
+        self.setupComboBox()
+        self.setupButtonBox()
+        self.setupDateInput()
+        self.setupLabel()
+        self.setupMeasureInput()
+
+        self.retranslateUi()
+        QtCore.QMetaObject.connectSlotsByName(self.Frame)
+    
+    def setupComboBox(self): # * Combobox - kendaraan atau listrik
+        self.comboBox = QtWidgets.QComboBox(self.Frame)
+        self.comboBox.setGeometry(QtCore.QRect(50, 20, 241, 31))
+        self.comboBox.setFont(self.createFont("Lucida Console", 10))
+        self.comboBox.setEditable(False)
+        self.comboBox.setObjectName("comboBox")
+        self.comboBox.addItem("")
+        self.comboBox.addItem("")
+        self.comboBox.setItemIcon(0, QtGui.QIcon('resources/img/lamp.png'))
+        self.comboBox.setItemIcon(1, QtGui.QIcon('resources/img/motorbike.png'))
+        self.comboBox.currentTextChanged.connect(self.changeUnit)
+    
+    def setupButtonBox(self): # * Button save or discard
+        self.buttonBox = QtWidgets.QDialogButtonBox(self.Frame)
+        self.buttonBox.setGeometry(QtCore.QRect(210, 240, 156, 23))
+        self.buttonBox.setFont(self.createFont("Lucida Console", 10))
+        self.buttonBox.setAcceptDrops(False)
+        self.buttonBox.setStandardButtons(QtWidgets.QDialogButtonBox.Cancel|QtWidgets.QDialogButtonBox.Save)
+        self.buttonBox.setObjectName("buttonBox")
+        self.buttonBox.accepted.connect(self.save)
+
+    def setupDateInput(self): # * Date Input
+        self.dateEdit = QtWidgets.QDateEdit(self.Frame)
+        self.dateEdit.setGeometry(QtCore.QRect(110, 100, 121, 31))
+        self.dateEdit.setFont(self.createFont("Lucida Console", 10))
+        self.dateEdit.setObjectName("dateEdit")
+    
+    def setupLabel(self): # * Label
+        self.label = QtWidgets.QLabel(self.Frame)
+        self.label.setGeometry(QtCore.QRect(240, 150, 71, 16))
+        self.label.setFont(self.createFont("Lucida Console", 10))
+        self.label.setObjectName("label")
+    
+    def setupMeasureInput(self): # * Measurement input
+        self.doubleSpinBox = QtWidgets.QDoubleSpinBox(self.Frame)
+        self.doubleSpinBox.setGeometry(QtCore.QRect(110, 140, 121, 31))
+        self.doubleSpinBox.setFont(self.createFont("Lucida Console", 10))
+        self.doubleSpinBox.setObjectName("doubleSpinBox")   
+
+    def retranslateUi(self):
+        _translate = QtCore.QCoreApplication.translate
+        self.Frame.setWindowTitle(_translate("Frame", "Frame"))
+        self.comboBox.setItemText(0, _translate("Frame", "Listrik"))
+        self.comboBox.setItemText(1, _translate("Frame", "Kendaraan bermotor"))
+        self.label.setText(_translate("Frame", "kWh"))
+
+    def save(self):
+        inDatabase = False
+        dateInForm = self.dateEdit.date().toPyDate().strftime('%Y-%m-%d')
+        mycursor.execute(f"SELECT EXISTS(SELECT * FROM carbon_trace WHERE TanggalInput = '{dateInForm}' AND ID_Customer = {-1 if self.id is None else self.id})")
+        for x in mycursor:
+            if x[0] == 1:
+                inDatabase = True
+                break
+            
+        if inDatabase:
+            if self.comboBox.currentText() == "Listrik":
+                mycursor.execute(f"UPDATE carbon_trace SET KuantitasListrik = {self.doubleSpinBox.value()} WHERE TanggalInput = '{dateInForm}' AND ID_Customer = {-1 if self.id is None else self.id}")
+            else:
+                mycursor.execute(f"UPDATE carbon_trace SET KuantitasJarakMotor = {self.doubleSpinBox.value()} WHERE TanggalInput = '{dateInForm}' AND ID_Customer = {-1 if self.id is None else self.id}")
+        else:
+            if self.comboBox.currentText() == "Listrik":
+                mycursor.execute(f"INSERT INTO carbon_trace (ID_Customer, TanggalInput, KuantitasListrik) VALUES ({-1 if self.id is None else self.id}, '{dateInForm}', {self.doubleSpinBox.value()} )")
+            else:
+                mycursor.execute(f"INSERT INTO carbon_trace (ID_Customer, TanggalInput, KuantitasJarakMotor) VALUES ({-1 if self.id is None else self.id}, '{dateInForm}', {self.doubleSpinBox.value()} )")
+        db.commit()
+    
+    def changeUnit(self):
+        if self.comboBox.currentText() == "Listrik":
+            self.label.setText("kWh")
+        else:
+            self.label.setText("km")
+
+    def createFont(self, fontName, fontSize):
+        font = QtGui.QFont()
+        font.setFamily(fontName)
+        font.setPointSize(fontSize)
+        return font
+
+# if __name__ == "__main__":
+#     import sys
+#     app = QtWidgets.QApplication(sys.argv)
+#     ui = input_data()
+#     sys.exit(app.exec_())
\ No newline at end of file
diff --git a/src/features/login.py b/src/features/login.py
new file mode 100644
index 0000000000000000000000000000000000000000..685ace957596a2670c9805f93becc42c00bee374
--- /dev/null
+++ b/src/features/login.py
@@ -0,0 +1,130 @@
+from PyQt5 import QtCore, QtGui, QtWidgets
+from db import db, mycursor
+from summary_data import *
+class login(QtWidgets.QWidget):
+    def __init__(self):
+        super().__init__()
+        self.username = None
+        self.Frame = QtWidgets.QFrame()
+        self.setupUi()
+        # self.Frame.show()
+    
+    def setupUi(self):
+        self.Frame.setObjectName("Frame")
+        self.Frame.setFixedSize(696, 491)
+        self.Frame.setStyleSheet("background-color: rgb(238, 238, 238);")
+        self.Frame.setFrameShape(QtWidgets.QFrame.Panel)
+        self.Frame.setFrameShadow(QtWidgets.QFrame.Raised)
+
+        self.setupLoginTitle()
+        self.setupLineUsername()
+        self.setupLabelUsername()
+        self.setupLinePassword()
+        self.setupLabelPassword()
+        self.setupLabelStatus()
+        self.setupButtonLogin()
+        self.setupLabelRegister()
+        self.setupButtonRegister()
+
+        self.retranslateUi()
+        QtCore.QMetaObject.connectSlotsByName(self.Frame)
+        
+    def setupLoginTitle(self):
+        self.login_title = QtWidgets.QLabel(self.Frame)
+        self.login_title.setGeometry(QtCore.QRect(0, 20, 371, 41))
+        font = QtGui.QFont()
+        font.setPointSize(18)
+        self.login_title.setFont(font)
+        self.login_title.setFrameShadow(QtWidgets.QFrame.Plain)
+        self.login_title.setAlignment(QtCore.Qt.AlignCenter)
+        self.login_title.setObjectName("login_title")
+        
+    def setupLineUsername(self):
+        self.line_username = QtWidgets.QLineEdit(self.Frame)
+        self.line_username.setGeometry(QtCore.QRect(130, 80, 171, 20))
+        self.line_username.setObjectName("line_username")
+        
+    def setupLabelUsername(self):
+        self.label_username = QtWidgets.QLabel(self.Frame)
+        self.label_username.setGeometry(QtCore.QRect(60, 80, 47, 13))
+        self.label_username.setObjectName("label_username")
+    
+    def setupLinePassword(self):
+        self.line_password = QtWidgets.QLineEdit(self.Frame)
+        self.line_password.setGeometry(QtCore.QRect(130, 110, 171, 20))
+        self.line_password.setObjectName("line_password")
+        
+    def setupLabelPassword(self):
+        self.label_password = QtWidgets.QLabel(self.Frame)
+        self.label_password.setGeometry(QtCore.QRect(60, 110, 47, 13))
+        self.label_password.setObjectName("label_password")
+    
+    def setupLabelStatus(self):
+        self.label_status = QtWidgets.QLabel(self.Frame)
+        self.label_status.setGeometry(QtCore.QRect(90, 140, 181, 16))
+        self.label_status.setAlignment(QtCore.Qt.AlignCenter)
+        self.label_status.setObjectName("label_status")
+    
+    def setupButtonLogin(self):
+        self.button_login = QtWidgets.QPushButton(self.Frame)
+        self.button_login.setGeometry(QtCore.QRect(140, 160, 75, 23))
+        self.button_login.setObjectName("button_login")
+        self.button_login.clicked.connect(self.validasi)
+        
+    def setupLabelRegister(self):
+        self.label_register = QtWidgets.QLabel(self.Frame)
+        self.label_register.setGeometry(QtCore.QRect(90, 190, 181, 16))
+        self.label_register.setAlignment(QtCore.Qt.AlignCenter)
+        self.label_register.setObjectName("label_register")
+        
+    def setupButtonRegister(self):
+        self.button_register = QtWidgets.QPushButton(self.Frame)
+        self.button_register.setGeometry(QtCore.QRect(140, 210, 75, 23))
+        self.button_register.setObjectName("button_register")
+        # self.button_register.clicked.connect(self.pindahRegister)
+
+    def retranslateUi(self):
+        _translate = QtCore.QCoreApplication.translate
+        self.Frame.setWindowTitle(_translate("Frame", "Frame"))
+        self.line_username.setPlaceholderText(_translate("Frame", "Enter your username here"))
+        self.login_title.setText(_translate("Frame", "Login to CarbonTrackr"))
+        self.label_username.setText(_translate("Frame", "Username"))
+        self.line_password.setPlaceholderText(_translate("Frame", "Enter your password here"))
+        self.label_password.setText(_translate("Frame", "Password"))
+        self.button_login.setText(_translate("Frame", "Login"))
+        self.label_status.setText(_translate("Frame", "Click here to continue"))
+        self.label_register.setText(_translate("Frame", "Or click here to Register"))
+        self.button_register.setText(_translate("Frame", "Register"))
+        
+    # Fungsi-fungsi widgets
+    
+    def validasi(self): # Memeriksa apakah username dan password sudah sesuai
+        username = self.line_username.text()
+        password = self.line_password.text()
+        
+        # Check apakah username dan password ada di database
+        inDataBase = False
+        mycursor.execute(f"SELECT * FROM customer WHERE Username = '{username}' AND Password = '{password}'")
+        for x in mycursor:
+            # print(x)
+            if x[0] > 0:
+                inDataBase = True
+        
+        if inDataBase:
+            self.label_status.setText("Login berhasil")
+            # TODO Pindah ke layar Summary
+            self.username = username
+            # uiSum = summary_data()
+            # self.Frame = uiSum.Frame
+        else:
+            self.label_status.setText("Username atau password salah")
+            
+    def pindahRegister(self):
+        # TODO Pindah ke layar Register
+        pass
+
+# if __name__ == "__main__":
+#     import sys
+#     app = QtWidgets.QApplication(sys.argv)
+#     ui = login()
+#     sys.exit(app.exec_())
\ No newline at end of file
diff --git a/src/features/premium_register.py b/src/features/premium_register.py
new file mode 100644
index 0000000000000000000000000000000000000000..6d4f181ab658fe7267ea31f1169196d839724fa5
--- /dev/null
+++ b/src/features/premium_register.py
@@ -0,0 +1,133 @@
+from PyQt5 import QtCore, QtGui, QtWidgets
+from db import db, mycursor
+
+class premium_register(object):
+    def __init__(self, id = None):
+        super().__init__()
+        self.Frame = QtWidgets.QFrame()
+        self.openRegisterPremium(id)
+        self.id = id
+
+    def setupUi(self):
+        self.Frame.setObjectName("Frame")
+        self.Frame.setFixedSize(696, 491)
+        self.Frame.setFrameShape(QtWidgets.QFrame.StyledPanel)
+        self.Frame.setFrameShadow(QtWidgets.QFrame.Raised)
+
+        self.pushButton = QtWidgets.QPushButton(self.Frame)
+        self.pushButton.setGeometry(QtCore.QRect(270, 300, 111, 31))
+        self.pushButton.setObjectName("pushButton")
+        self.pushButton.clicked.connect(self.validasi)
+
+        self.label = QtWidgets.QLabel(self.Frame)
+        self.label.setGeometry(QtCore.QRect(210, 200, 47, 13))
+        self.label.setObjectName("label")
+
+        self.label_2 = QtWidgets.QLabel(self.Frame)
+        self.label_2.setGeometry(QtCore.QRect(170, 240, 111, 31))
+        self.label_2.setObjectName("label_2")
+
+        self.lineEdit_2 = QtWidgets.QLineEdit(self.Frame)
+        self.lineEdit_2.setGeometry(QtCore.QRect(290, 240, 191, 21))
+        self.lineEdit_2.setObjectName("lineEdit_2")
+
+        self.label_3 = QtWidgets.QLabel(self.Frame)
+        self.label_3.setAlignment(QtCore.Qt.AlignCenter)
+        self.label_3.setGeometry(QtCore.QRect(40, 150, 601, 31))
+
+        font = QtGui.QFont()
+        font.setPointSize(11)
+        font.setBold(True)
+        font.setWeight(75)
+
+        self.label_3.setFont(font)
+        self.label_3.setObjectName("label_3")
+        
+        self.lineEdit_3 = QtWidgets.QLineEdit(self.Frame)
+        self.lineEdit_3.setGeometry(QtCore.QRect(290, 200, 191, 21))
+        self.lineEdit_3.setObjectName("lineEdit_3")
+
+        self.retranslateUi()
+        QtCore.QMetaObject.connectSlotsByName(self.Frame)
+    
+    def setupAlternatif(self, alt):
+        self.Frame.setObjectName("Frame")
+        self.Frame.setFixedSize(696, 491)
+        self.Frame.setFrameShape(QtWidgets.QFrame.StyledPanel)
+        self.Frame.setFrameShadow(QtWidgets.QFrame.Raised)
+
+        self.pushButton = QtWidgets.QPushButton(self.Frame)
+        self.pushButton.setGeometry(QtCore.QRect(270, 300, 111, 31))
+        self.pushButton.hide()
+
+        self.label_3 = QtWidgets.QLabel(self.Frame)
+        self.label_3.setAlignment(QtCore.Qt.AlignCenter)
+        self.label_3.setGeometry(QtCore.QRect(40, 150, 601, 31))
+
+        font = QtGui.QFont()
+        font.setPointSize(11)
+        font.setBold(True)
+        font.setWeight(75)
+
+        self.label_3.setFont(font)
+        self.label_3.setObjectName("label_3")
+
+        if alt == "Premium":
+            self.retranslateUiPremium()
+        elif alt == "Waiting":
+            self.retranslateUiWaiting()
+        QtCore.QMetaObject.connectSlotsByName(self.Frame)
+    
+    
+
+    def retranslateUi(self):
+        _translate = QtCore.QCoreApplication.translate
+        self.Frame.setWindowTitle(_translate("Frame", "Frame"))
+        self.pushButton.setText(_translate("Frame", "Apply for Premium"))
+        self.label.setText(_translate("Frame", "Nomor HP"))
+        self.label_2.setText(_translate("Frame", "Nomor Kartu Kredit"))
+        self.lineEdit_2.setPlaceholderText(_translate("Frame", "Masukan nomor kartu kredit"))
+        self.label_3.setText(_translate("Frame", "Upgrade Premium"))
+        self.lineEdit_3.setPlaceholderText(_translate("Frame", "Masukan nomor HP Anda"))
+
+    def retranslateUiPremium(self):
+        _translate = QtCore.QCoreApplication.translate
+        self.Frame.setWindowTitle(_translate("Frame", "Frame"))
+        self.label_3.setText(_translate("Frame", "Anda merupakan user premium, tidak bisa melakukan registrasi premium lagi"))
+    
+    def retranslateUiWaiting(self):
+        _translate = QtCore.QCoreApplication.translate
+        self.Frame.setWindowTitle(_translate("Frame", "Frame"))
+        self.label_3.setText(_translate("Frame", "Anda telah mendaftar sebagai user premium, tunggu administrator validasi"))
+
+    def isNotBlank(self, s):
+        return bool(s and not s.isspace())
+
+    def validasi(self):
+        no_kartu_kredit = self.lineEdit_2.text()
+        no_hp = self.lineEdit_3.text()
+        if (self.isNotBlank(no_kartu_kredit) and self.isNotBlank(no_hp)):
+            mycursor.execute(f"INSERT INTO waiting_list (IDCustomerPremium, contact_number, card_number) VALUES ({-1 if self.id is None else self.id}, '{str(no_hp)}', '{str(no_kartu_kredit)}')")
+            db.commit()
+            
+    def openRegisterPremium(self, userId):
+        mycursor.execute("SELECT IDCustomerPremium FROM waiting_list")
+        listidwaitinglist = [id[0] for id in mycursor.fetchall()]
+        self.idwaitinglist = listidwaitinglist
+
+        mycursor.execute("SELECT id_customer_premium FROM customer_premium")
+        listidpremium = [id[0] for id in mycursor.fetchall()]
+        self.idpremium = listidpremium
+
+        if userId in self.idpremium:
+            self.setupAlternatif("Premium")
+        elif userId in self.idwaitinglist:
+            self.setupAlternatif("Waiting")
+        else:
+            self.setupUi()
+
+# if __name__ == "__main__":
+#     import sys
+#     app = QtWidgets.QApplication(sys.argv)
+#     ui = premium_register(101)
+#     sys.exit(app.exec_())
\ No newline at end of file
diff --git a/src/features/progress_bar_pallete.py b/src/features/progress_bar_pallete.py
new file mode 100644
index 0000000000000000000000000000000000000000..f0f9aaa4c2fcae0ac6ac5dd7682c271354ce0c56
--- /dev/null
+++ b/src/features/progress_bar_pallete.py
@@ -0,0 +1,27 @@
+default = """
+QProgressBar{
+    border: 2px solid grey;
+    border-radius: 5px;
+    text-align: center
+}
+
+QProgressBar::chunk {
+    background-color: green;
+    width: 10px;
+    margin: 1px;
+}
+"""
+
+overload = """
+QProgressBar{
+    border: 2px solid grey;
+    border-radius: 5px;
+    text-align: center
+}
+
+QProgressBar::chunk {
+    background-color: red;
+    width: 10px;
+    margin: 1px;
+}
+"""
\ No newline at end of file
diff --git a/src/features/register.py b/src/features/register.py
new file mode 100644
index 0000000000000000000000000000000000000000..f508c2ab11453be1d7df1946d3e4753e9dfb9fb3
--- /dev/null
+++ b/src/features/register.py
@@ -0,0 +1,188 @@
+from PyQt5 import QtCore, QtGui, QtWidgets
+from db import db, mycursor
+class register(QtWidgets.QWidget):
+    def __init__(self):
+        super().__init__()
+        self.Frame = QtWidgets.QFrame()
+        self.setupUi()
+        # self.Frame.show()
+    
+    def setupUi(self):
+        self.Frame.setObjectName("Frame")
+        self.Frame.setFixedSize(696, 491)
+        self.Frame.setStyleSheet("background-color: rgb(238, 238, 238);")
+        self.Frame.setFrameShape(QtWidgets.QFrame.Panel)
+        self.Frame.setFrameShadow(QtWidgets.QFrame.Raised)
+
+        self.setupRegisterTitle()
+        self.setupLineUsername()
+        self.setupLabelUsername()
+        self.setupLinePassword()
+        self.setupLabelPassword()
+        self.setupLabelStatus()
+        self.setupButtonRegister()
+        self.setupLabelLogin()
+        self.setupButtonLogin()
+        self.setupLabelFirst()
+        self.setupLineFirst()
+        self.setupLabelLast()
+        self.setupLineLast()
+        self.setupLabelEmail()
+        self.setupLineEmail()
+
+        self.retranslateUi()
+        QtCore.QMetaObject.connectSlotsByName(self.Frame)
+        
+    def setupRegisterTitle(self):
+        self.register_title = QtWidgets.QLabel(self.Frame)
+        self.register_title.setGeometry(QtCore.QRect(0, 0, 371, 41))
+        font = QtGui.QFont()
+        font.setPointSize(16)
+        self.register_title.setFont(font)
+        self.register_title.setFrameShadow(QtWidgets.QFrame.Plain)
+        self.register_title.setAlignment(QtCore.Qt.AlignCenter)
+        self.register_title.setObjectName("register_title")
+        
+    def setupLineUsername(self):
+        self.line_username = QtWidgets.QLineEdit(self.Frame)
+        self.line_username.setGeometry(QtCore.QRect(130, 40, 171, 20))
+        self.line_username.setObjectName("line_username")
+        
+    def setupLabelUsername(self):
+        self.label_username = QtWidgets.QLabel(self.Frame)
+        self.label_username.setGeometry(QtCore.QRect(60, 40, 47, 13))
+        self.label_username.setObjectName("label_username")
+    
+    def setupLinePassword(self):
+        self.line_password = QtWidgets.QLineEdit(self.Frame)
+        self.line_password.setGeometry(QtCore.QRect(130, 160, 171, 20))
+        self.line_password.setObjectName("line_password")
+        
+    def setupLabelPassword(self):
+        self.label_password = QtWidgets.QLabel(self.Frame)
+        self.label_password.setGeometry(QtCore.QRect(60, 160, 47, 13))
+        self.label_password.setObjectName("label_password")
+    
+    def setupLabelStatus(self):
+        self.label_status = QtWidgets.QLabel(self.Frame)
+        self.label_status.setGeometry(QtCore.QRect(10, 190, 181, 16))
+        self.label_status.setAlignment(QtCore.Qt.AlignCenter)
+        self.label_status.setObjectName("label_status")
+        
+    def setupButtonRegister(self):
+        self.button_register = QtWidgets.QPushButton(self.Frame)
+        self.button_register.setGeometry(QtCore.QRect(60, 210, 75, 23))
+        self.button_register.setObjectName("button_register")
+        self.button_register.clicked.connect(self.registrasi)
+        
+    def setupLabelLogin(self):
+        self.label_login = QtWidgets.QLabel(self.Frame)
+        self.label_login.setGeometry(QtCore.QRect(190, 190, 181, 16))
+        self.label_login.setAlignment(QtCore.Qt.AlignCenter)
+        self.label_login.setObjectName("label_login")
+
+    def setupButtonLogin(self):
+        self.button_login = QtWidgets.QPushButton(self.Frame)
+        self.button_login.setGeometry(QtCore.QRect(240, 210, 75, 23))
+        self.button_login.setObjectName("button_login")
+        self.button_login.clicked.connect(self.pindahLogin)
+        
+    def setupLabelFirst(self):
+        self.label_first = QtWidgets.QLabel(self.Frame)
+        self.label_first.setGeometry(QtCore.QRect(60, 70, 61, 16))
+        self.label_first.setObjectName("label_first")
+    
+    def setupLineFirst(self):
+        self.line_first = QtWidgets.QLineEdit(self.Frame)
+        self.line_first.setGeometry(QtCore.QRect(130, 70, 171, 20))
+        self.line_first.setObjectName("line_first")
+    
+    def setupLabelLast(self):
+        self.label_last = QtWidgets.QLabel(self.Frame)
+        self.label_last.setGeometry(QtCore.QRect(60, 100, 61, 16))
+        self.label_last.setObjectName("label_last")
+    
+    def setupLineLast(self):
+        self.line_last = QtWidgets.QLineEdit(self.Frame)
+        self.line_last.setGeometry(QtCore.QRect(130, 100, 171, 20))
+        self.line_last.setObjectName("line_last")
+    
+    def setupLabelEmail(self):
+        self.label_email = QtWidgets.QLabel(self.Frame)
+        self.label_email.setGeometry(QtCore.QRect(60, 130, 47, 13))
+        self.label_email.setObjectName("label_email")
+    
+    def setupLineEmail(self):
+        self.line_email = QtWidgets.QLineEdit(self.Frame)
+        self.line_email.setGeometry(QtCore.QRect(130, 130, 171, 20))
+        self.line_email.setObjectName("line_email")
+
+    def retranslateUi(self):
+        _translate = QtCore.QCoreApplication.translate
+        self.Frame.setWindowTitle(_translate("Frame", "Frame"))
+        self.line_username.setPlaceholderText(_translate("Frame", "Enter your unique username here"))
+        self.register_title.setText(_translate("Frame", "Register to CarbonTrackr"))
+        self.label_username.setText(_translate("Frame", "Username"))
+        self.line_password.setPlaceholderText(_translate("Frame", "Enter your password here"))
+        self.label_password.setText(_translate("Frame", "Password"))
+        self.button_register.setText(_translate("Frame", "Register"))
+        self.label_status.setText(_translate("Frame", "Click here to continue"))
+        self.label_login.setText(_translate("Frame", "Or click here to Login"))
+        self.button_login.setText(_translate("Frame", "Login"))
+        self.line_first.setPlaceholderText(_translate("Frame", "Enter your first name here"))
+        self.label_first.setText(_translate("Frame", "First Name"))
+        self.line_last.setPlaceholderText(_translate("Frame", "Enter your last name here"))
+        self.label_last.setText(_translate("Frame", "Last Name"))
+        self.line_email.setPlaceholderText(_translate("Frame", "Enter your email here"))
+        self.label_email.setText(_translate("Frame", "Email"))
+        
+    # Fungsi-fungsi widgets
+    
+    def isNotBlank(self,s):
+        return bool(s and not s.isspace())
+    
+    def registrasi(self):
+        username = self.line_username.text()
+        password = self.line_password.text()
+        first = self.line_first.text()
+        last = self.line_last.text()
+        email = self.line_email.text()
+        
+        # Check apakah username ada di database
+        if (self.isNotBlank(username) and self.isNotBlank(password) and self.isNotBlank(first) and self.isNotBlank(last) and self.isNotBlank(email)):
+            print("welp")
+            userInDataBase = False
+            mycursor.execute(f"SELECT * FROM customer WHERE Username = '{username}'")
+            for x in mycursor:
+                if x[0] > 0:
+                    userInDataBase = True
+                    
+            if userInDataBase:
+                self.label_status.setText("Username sudah dipakai!")
+            else:
+                # Check apakah email ada di database
+                emailInDataBase = False
+                mycursor.execute(f"SELECT * FROM customer WHERE Email = '{email}'")
+                for x in mycursor:
+                    if x[0] > 0:
+                        emailInDataBase = True
+                        
+                if emailInDataBase:
+                    self.label_status.setText("Email sudah dipakai!")
+                else:
+                    # Insert customer baru ke database
+                    mycursor.execute(f"INSERT INTO customer (Email,Username,Password,TipeUser,FirstName,LastName) VALUES ('{email}','{username}','{password}','Regular','{first}','{last}')")
+                    self.label_status.setText("Registrasi berhasil")
+            db.commit()
+        else:
+            self.label_status.setText("Info tidak boleh ada yang kosong!")    
+        
+    def pindahLogin(self):
+        # TODO Pindah ke layar Login
+        pass
+
+# if __name__ == "__main__":
+#     import sys
+#     app = QtWidgets.QApplication(sys.argv)
+#     ui = register()
+#     sys.exit(app.exec_())
\ No newline at end of file
diff --git a/src/features/summary_data.py b/src/features/summary_data.py
new file mode 100644
index 0000000000000000000000000000000000000000..c5680431b02e98ca24dce9ec03b7b5d3e8d6df08
--- /dev/null
+++ b/src/features/summary_data.py
@@ -0,0 +1,217 @@
+from PyQt5 import QtCore, QtGui, QtWidgets
+from db import *
+from datetime import date, datetime
+from input_data import *
+from progress_bar_pallete import *
+
+performance = {
+    "Buruk": f"You can try to do better, upgrade to\npremium and see our tips and trick",
+    "Menengah": f"You are doing great, but you can do better\nby upgrade to premium and see the tips and trick",
+    "Baik": f"You are doing excellent job\nto decrease the emission"
+}
+
+class summary_data(QtWidgets.QWidget):
+    def __init__(self, cust = None):
+        super().__init__()
+        self.Frame = QtWidgets.QFrame()
+        self.customer = cust
+        self.setupUi()
+        
+    def setupUi(self):
+        self.Frame.setObjectName("Frame")
+        self.Frame.setFixedSize(696, 491)
+        self.Frame.setStyleSheet("background-color: rgb(238, 238, 238);")
+        self.Frame.setFrameShape(QtWidgets.QFrame.Panel)
+        self.Frame.setFrameShadow(QtWidgets.QFrame.Raised)
+        
+        self.setupLabel()
+        self.setupLabelTotal()
+        self.setupLabelElectricity()
+        self.setupLabelMotorbike()
+        self.setupProgressBar1()
+        self.setupProgressBar2()
+        self.setupPushButton()
+        self.setupPushButtonWeekly()
+        self.setupPushButtonMonthly()
+
+        self.retranslateUi()
+        QtCore.QMetaObject.connectSlotsByName(self.Frame)
+
+    # * Frame component
+    def setupLabel(self):
+        self.label = QtWidgets.QLabel(self.Frame)
+        self.label.setGeometry(QtCore.QRect(180, 20, 291, 81))
+        self.label.setFont(self.createFont("Lucida Console", 10))
+        self.label.setAlignment(QtCore.Qt.AlignHCenter|QtCore.Qt.AlignTop)
+        self.label.setWordWrap(False)
+        self.label.setObjectName("label")
+    
+    def setupLabelTotal(self):
+        self.label_total = QtWidgets.QLabel(self.Frame)
+        self.label_total.setObjectName("label_total")
+        self.label_total.setGeometry(QtCore.QRect(30, 130, 621, 121))
+        self.label_total.setFont(self.createFont("Lucida Console", 10))
+        self.label_total.setAlignment(QtCore.Qt.AlignHCenter|QtCore.Qt.AlignTop)
+        self.label_total.setWordWrap(False)
+
+    def setupLabelElectricity(self):
+        self.label_electricity = QtWidgets.QLabel(self.Frame)
+        self.label_electricity.setObjectName("label_electricity")
+        self.label_electricity.setGeometry(QtCore.QRect(94, 279, 170, 81))
+        self.label_electricity.setFont(self.createFont("Lucida Console", 10))
+        self.label_electricity.setAlignment(QtCore.Qt.AlignHCenter|QtCore.Qt.AlignTop)
+        self.label_electricity.setWordWrap(False)
+
+    def setupLabelMotorbike(self):
+        self.label_motorbike = QtWidgets.QLabel(self.Frame)
+        self.label_motorbike.setObjectName("label_motorbike")
+        self.label_motorbike.setGeometry(QtCore.QRect(406, 280, 170, 81))
+        self.label_motorbike.setFont(self.createFont("Lucida Console", 10))
+        self.label_motorbike.setAlignment(QtCore.Qt.AlignHCenter|QtCore.Qt.AlignTop)
+        self.label_motorbike.setWordWrap(False)
+
+    def setupProgressBar1(self):
+        self.progressBarElectric = QtWidgets.QProgressBar(self.Frame)
+        self.progressBarElectric.setGeometry(QtCore.QRect(120, 370, 151, 31))
+        self.progressBarElectric.setFont(self.createFont("Lucida Console", 10))
+        self.progressBarElectric.setStyleSheet(default)
+        self.progressBarElectric.setObjectName("progressBarElectric")
+
+    def setupProgressBar2(self):
+        self.progressBarMotor = QtWidgets.QProgressBar(self.Frame)
+        self.progressBarMotor.setGeometry(QtCore.QRect(430, 370, 151, 31))
+        self.progressBarMotor.setFont(self.createFont("Lucida Console", 10))
+        self.progressBarMotor.setStyleSheet(default)
+        self.progressBarMotor.setObjectName("progressBarMotor")
+
+    def setupPushButton(self):
+        self.pushButton = QtWidgets.QPushButton(self.Frame)
+        self.pushButton.setGeometry(QtCore.QRect(270, 440, 131, 31))
+        self.pushButton.setFont(self.createFont("Lucida Console", 10))
+        self.pushButton.setObjectName("pushButton")
+
+    def setupPushButtonWeekly(self):
+        self.pushButton_weekly = QtWidgets.QPushButton(self.Frame)
+        self.pushButton_weekly.setObjectName("pushButton_weekly")
+        self.pushButton_weekly.setGeometry(QtCore.QRect(210, 80, 91, 31))
+        self.pushButton_weekly.setStyleSheet("background-color: rgb(41, 255, 148);")
+        self.pushButton_weekly.clicked.connect(lambda: self.updateContent("Weekly"))
+        self.pushButton_weekly.clicked.connect(lambda: self.setGreen("Weekly"))
+    
+    def setupPushButtonMonthly(self):
+        self.pushButton_monthly = QtWidgets.QPushButton(self.Frame)
+        self.pushButton_monthly.setObjectName("pushButton_monthly")
+        self.pushButton_monthly.setGeometry(QtCore.QRect(340, 80, 91, 31))
+        self.pushButton_monthly.clicked.connect(lambda: self.updateContent("Monthly"))
+        self.pushButton_monthly.clicked.connect(lambda: self.setGreen("Monthly"))
+
+    # * Set the initial filling
+    def retranslateUi(self):
+        _translate = QtCore.QCoreApplication.translate
+        self.Frame.setWindowTitle(_translate("Frame", "Frame"))
+        self.progressBarElectric.setFormat(_translate("Frame", "%p%"))
+        self.label.setText(_translate("Frame", f"{date.today().strftime('%d %B %Y')}\nHello, {'User' if self.customer is None else self.customer[5]}"))
+        self.pushButton.setText(_translate("Frame", "Catat Emisi [+]"))
+        self.pushButton_weekly.setText(_translate("Frame", "Weekly"))
+        self.pushButton_monthly.setText(_translate("Frame", "Monthly"))
+        self.updateContent("Weekly")
+    
+    # * Utility for filling
+    def createFont(self, fontName, fontSize):
+        font = QtGui.QFont()
+        font.setFamily(fontName)
+        font.setPointSize(fontSize)
+        return font
+
+    def updateContent(self, period):
+        self.label_motorbike.setText(f"Motorbike summary\n{self.sumMotorbikeEmission(period)} km")
+        self.label_electricity.setText(f"Electricity summary\n{self.sumElectricityEmission(period)} kWh")
+        self.label_total.setText(f"Carbon dioxide total\n{self.sumCarbonDioxide(period)} gram CO2\n\n{self.getPerformanceText(period)}")
+
+        p, q = self.getPercentValue(period)
+        self.progressBarElectric.setValue(int(p))
+        self.progressBarMotor.setValue(int(q))
+        
+        if p == 100:
+            self.progressBarElectric.setStyleSheet(overload)
+        else:
+            self.progressBarElectric.setStyleSheet(default)
+
+        if q == 100:
+            self.progressBarMotor.setStyleSheet(overload)
+        else:
+            self.progressBarMotor.setStyleSheet(default)
+    
+    def getPercentValue(self, period):
+        percentValElectric = self.sumElectricityEmission(period) / (127 if period == "Weekly" else 893) * 100
+        percentValMotor = self.sumMotorbikeEmission(period) / (50 if period == "Weekly" else 300) * 100
+        p = min(100, percentValElectric)
+        q = min(100, percentValMotor)
+        return p,q
+
+    def setGreen(self, period):
+        if period == "Weekly":
+            self.pushButton_weekly.setStyleSheet("background-color: rgb(41, 255, 148);")
+            self.pushButton_monthly.setStyleSheet("background-color: rgb(238, 238, 238);")
+        elif period == "Monthly":
+            self.pushButton_monthly.setStyleSheet("background-color: rgb(41, 255, 148);")
+            self.pushButton_weekly.setStyleSheet("background-color: rgb(238, 238, 238);")
+
+    # * Measurement utility
+    def sumMotorbikeEmission(self, period):
+        if(period == "Weekly"):
+            dateBegin, dateLast = self.getRangeDate()
+            mycursor.execute(f"SELECT SUM(KuantitasJarakMotor) FROM carbon_trace WHERE ID_Customer = {-1 if self.customer is None else self.customer[0]} AND TanggalInput BETWEEN '{dateBegin}' AND '{dateLast}'")
+        elif(period == "Monthly"):
+            today = date.today()
+            # today = datetime.date(2022, 1, 14) # ! For testing only
+            mycursor.execute(f"SELECT SUM(KuantitasJarakMotor) FROM carbon_trace WHERE ID_Customer = {-1 if self.customer is None else self.customer[0]} AND MONTH(TanggalInput) = {today.month} AND YEAR(TanggalInput) = {today.year}")
+        val = mycursor.fetchall()
+        if val[0][0] is None:
+            return 0
+        return val[0][0]
+
+    def sumElectricityEmission(self, period):
+        if(period == "Weekly"):
+            dateBegin, dateLast = self.getRangeDate()
+            mycursor.execute(f"SELECT SUM(KuantitasListrik) FROM carbon_trace WHERE ID_Customer = {-1 if self.customer is None else self.customer[0]} AND TanggalInput BETWEEN '{dateBegin}' AND '{dateLast}'")
+        elif(period == "Monthly"):
+            today = date.today()
+            # today = datetime.date(2022, 1, 14) # ! For testing only
+            mycursor.execute(f"SELECT SUM(KuantitasListrik) FROM carbon_trace WHERE ID_Customer = {-1 if self.customer is None else self.customer[0]} AND MONTH(TanggalInput) = {today.month} AND YEAR(TanggalInput) = {today.year}")
+        val = mycursor.fetchall()
+        if val[0][0] is None:
+            return 0
+        return val[0][0]
+    
+    def sumCarbonDioxide(self, period):
+        return ((self.sumElectricityEmission(period) * 385) + (self.sumMotorbikeEmission(period) * 132))
+
+    def getPerformanceText(self, period):
+        totalEmission = self.sumCarbonDioxide(period)
+        if totalEmission <= (3000 if period == "Weekly" else 13000):
+            return performance["Baik"]
+        elif totalEmission > (3000 if period == "Weekly" else 13000) and totalEmission < (7000 if period == "Weekly" else 30000):
+            return performance["Menengah"]
+        else:
+            return performance["Buruk"]
+
+    def getRangeDate(self):
+        today = date.today()
+        # today = datetime.date(2022, 1, 14) # ! For testing only
+        if today.strftime("%A") == "Monday":
+            lastMonday = today
+        else:
+            lastMonday = today - datetime.timedelta(days=today.weekday())
+
+        if today.strftime("%A") == "Sunday":
+            nextSunday = today
+        else:
+            nextSunday = today + datetime.timedelta( (6-today.weekday()) % 7 )
+        return lastMonday, nextSunday
+        
+# if __name__ == "__main__":
+#     import sys
+#     app = QtWidgets.QApplication(sys.argv)
+#     ui = summary_data()
+#     sys.exit(app.exec_())
\ No newline at end of file
diff --git a/src/features/test_login.py b/src/features/test_login.py
new file mode 100644
index 0000000000000000000000000000000000000000..e6a799e2aa75fdc3305aefe9591acda88181ff46
--- /dev/null
+++ b/src/features/test_login.py
@@ -0,0 +1,36 @@
+from PyQt5 import QtWidgets
+from login import login
+import pytest
+
+""" Testing module for login """
+
+@pytest.fixture(scope='module')
+def logfix():
+    import sys
+    temp = QtWidgets.QApplication(sys.argv)
+    log = login()
+    return log, temp
+
+def test_validasi_input_kosong(logfix):
+    temp = logfix[1]
+    log = logfix[0]
+    log.line_username.setText(" ")
+    log.line_password.setText(" ")
+    log.validasi()
+    assert log.label_status.text() == "Username atau password salah"
+    
+def test_validasi_input_not_registered(logfix):
+    temp = logfix[1]
+    log = logfix[0]
+    log.line_username.setText("IniBukanOrangBeneran")
+    log.line_password.setText("PasswordIniTidakAdaa")
+    log.validasi()
+    assert log.label_status.text() == "Username atau password salah"
+    
+def test_validasi_input_registered(logfix):
+    temp = logfix[1]
+    log = logfix[0]
+    log.line_username.setText("user1")
+    log.line_password.setText("12345678")
+    log.validasi()
+    assert log.label_status.text() == "Login berhasil"
\ No newline at end of file
diff --git a/src/features/test_register.py b/src/features/test_register.py
new file mode 100644
index 0000000000000000000000000000000000000000..32c63147682936f932a7a965198a2b7c225340ee
--- /dev/null
+++ b/src/features/test_register.py
@@ -0,0 +1,64 @@
+from PyQt5 import QtWidgets
+from register import register
+import pytest
+
+""" Testing module for register """
+
+@pytest.fixture(scope='module')
+def logfix():
+    import sys
+    temp = QtWidgets.QApplication(sys.argv)
+    log = register()
+    return log, temp
+
+def test_register_input_kosong_all(logfix):
+    temp = logfix[1]
+    log = logfix[0]
+    
+    log.line_username.setText("")
+    log.line_password.setText("")
+    log.line_first.setText("")
+    log.line_last.setText("")
+    log.line_email.setText("")
+    
+    log.registrasi()
+    assert log.label_status.text() == "Info tidak boleh ada yang kosong!"
+    
+def test_register_input_kosong_some(logfix):
+    temp = logfix[1]
+    log = logfix[0]
+    
+    log.line_username.setText("NamaUnik")
+    log.line_password.setText("PasswordUnik")
+    log.line_first.setText("DepanUnik")
+    log.line_last.setText("BelakangUnik")
+    log.line_email.setText("")
+    
+    log.registrasi()
+    assert log.label_status.text() == "Info tidak boleh ada yang kosong!"
+    
+def test_register_input_username_ada(logfix):
+    temp = logfix[1]
+    log = logfix[0]
+    
+    log.line_username.setText("user1")
+    log.line_password.setText("PasswordUnik")
+    log.line_first.setText("DepanUnik")
+    log.line_last.setText("BelakangUnik")
+    log.line_email.setText("EmailUnik")
+    
+    log.registrasi()
+    assert log.label_status.text() == "Username sudah dipakai!"
+    
+def test_register_input_email_ada(logfix):
+    temp = logfix[1]
+    log = logfix[0]
+    
+    log.line_username.setText("NamaUnik")
+    log.line_password.setText("PasswordUnik")
+    log.line_first.setText("DepanUnik")
+    log.line_last.setText("BelakangUnik")
+    log.line_email.setText("tmiles@example.org")
+    
+    log.registrasi()
+    assert log.label_status.text() == "Email sudah dipakai!"
\ No newline at end of file
diff --git a/src/features/test_summary_data.py b/src/features/test_summary_data.py
new file mode 100644
index 0000000000000000000000000000000000000000..95cc0feb714a748322503a62b414b0b72dadf2b1
--- /dev/null
+++ b/src/features/test_summary_data.py
@@ -0,0 +1,64 @@
+from PyQt5 import QtWidgets
+from summary_data import *
+import pytest
+
+
+""" Testing module for summary_data """
+# ! For testing, don't forget to comment in summary_data the today, and uncomment the line below it 
+
+@pytest.fixture(scope='module')
+def sumFix():
+    import sys
+    temp = QtWidgets.QApplication(sys.argv)
+    sum = summary_data([100, 'tmiles@example.org', 'user1', '12345678', 'Regular', 'Frances', 'Williams'])
+    return sum, temp
+
+def test_getRangeDate(sumFix):
+    temp = sumFix[1]
+    sum = sumFix[0]
+    statement1 = sum.getRangeDate()[0] == datetime.date(2022, 1, 10)
+    statement2 = sum.getRangeDate()[1] == datetime.date(2022, 1, 16)
+    assert statement1 and statement2
+
+def test_sumMotorEmission(sumFix):
+    temp = sumFix[1]
+    sum = sumFix[0]
+    statement1 = sum.sumMotorbikeEmission("Weekly") == 40
+    statement2 = sum.sumMotorbikeEmission("Monthly") == 126
+    assert statement1 and statement2 
+
+def test_sumElectricityEmission(sumFix):
+    temp = sumFix[1]
+    sum = sumFix[0]
+    statement1 = sum.sumElectricityEmission("Weekly") == 58
+    statement2 = sum.sumElectricityEmission("Monthly") == 140
+    assert statement1 and statement2
+
+def test_sumCarbonDioxide(sumFix):
+    temp = sumFix[1]
+    sum = sumFix[0]
+    statement1 = sum.sumCarbonDioxide("Weekly") == 27610
+    statement2 = sum.sumCarbonDioxide("Monthly") == 70532
+    assert statement1 and statement2
+
+def test_performanceText(sumFix):
+    temp = sumFix[1]
+    sum = sumFix[0]
+    statement1 = sum.getPerformanceText("Weekly") == "You can try to do better, upgrade to\npremium and see our tips and trick"
+    statement2 = sum.getPerformanceText("Monthly") == "You can try to do better, upgrade to\npremium and see our tips and trick"
+    assert statement1 and statement2
+
+def test_getPercentValWeekly(sumFix):
+    temp = sumFix[1]
+    sum = sumFix[0]
+    statement1 = int(sum.getPercentValue("Weekly")[0]) == int(58/127*100) # Dijadikan int karena kalau dibandingin dalam bentuk float, tidak sama
+    statement2 = sum.getPercentValue("Weekly")[1] == 40/50*100
+    assert statement1 and statement2
+
+def test_getPercentValMonthly(sumFix):
+    temp = sumFix[1]
+    sum = sumFix[0]
+    statement1 = int(sum.getPercentValue("Monthly")[0]) == int((140/893) * 100)
+    statement2 = sum.getPercentValue("Monthly")[1] == (126/300) * 100
+    assert statement2
+
diff --git a/src/features/test_tips_and_trick.py b/src/features/test_tips_and_trick.py
new file mode 100644
index 0000000000000000000000000000000000000000..49b2eea1185c2348404dfcc71cc411b05a78d6e8
--- /dev/null
+++ b/src/features/test_tips_and_trick.py
@@ -0,0 +1,24 @@
+from PyQt5 import QtWidgets
+from tips_and_trick import *
+import pytest
+
+""" Testing module for tips and trick """
+
+@pytest.fixture(scope='module')
+def tntfix():
+    import sys
+    temp = QtWidgets.QApplication(sys.argv)
+    tnt = tips_and_trick(101)
+    return tnt, temp
+
+def test_is_premium(tntfix):
+  temp = tntfix[1]
+  tnt = tntfix[0]
+
+  assert tnt.isPremium(101) == True
+
+def test_not_premium(tntfix):
+  temp = tntfix[1]
+  tnt = tntfix[0]
+
+  assert tnt.isPremium(102) == False
\ No newline at end of file
diff --git a/src/features/test_waiting_list.py b/src/features/test_waiting_list.py
new file mode 100644
index 0000000000000000000000000000000000000000..2ab480ba88df869f6b5116a477fcc5caeb43508d
--- /dev/null
+++ b/src/features/test_waiting_list.py
@@ -0,0 +1,61 @@
+from PyQt5 import QtWidgets
+from WaitingList import Ui_WaitingList, QueryWaitingList
+import pytest
+from db import *
+
+""" Testing module for waitng list """
+
+@pytest.fixture(scope='module')
+def test_ui_waitinglist():
+    import sys
+    app = QtWidgets.QApplication(sys.argv)
+    WaitingList = QtWidgets.QFrame()
+    ui = Ui_WaitingList()
+    ui.setupUi(WaitingList)
+    return ui, app, WaitingList
+
+def test_reject(test_ui_waitinglist):
+    app = test_ui_waitinglist[1]
+    waiting_list = test_ui_waitinglist[2]
+    ui = test_ui_waitinglist[0]
+    db1 = QueryWaitingList()
+    data_customer_waiting_list = db1.getDataCustomerWaitingList()
+    if (len(data_customer_waiting_list) != 0):
+        id_customer0 = data_customer_waiting_list[0][0]
+        ui.reject(id_customer0)
+        db2 = QueryWaitingList()
+        new_data_customer_waiting_list = db2.getDataCustomerWaitingList()
+        found = False
+        for i in range(len(new_data_customer_waiting_list)):
+            if (new_data_customer_waiting_list[i][0] == id_customer0):
+                found = True
+        
+        assert not found
+
+def test_accept(test_ui_waitinglist):
+    app = test_ui_waitinglist[1]
+    waiting_list = test_ui_waitinglist[2]
+    ui = test_ui_waitinglist[0]
+    db1 = QueryWaitingList()
+    data_customer_waiting_list = db1.getDataCustomerWaitingList()
+    if (len(data_customer_waiting_list) != 0):
+        idcustomer0 = data_customer_waiting_list[0][0]
+        ui.accept(data_customer_waiting_list[0][0], data_customer_waiting_list[0][4], data_customer_waiting_list[0][5])
+        db2 = QueryWaitingList()
+        new_data_customer_waiting_list = db2.getDataCustomerWaitingList()
+        mycursor.execute("SELECT id_customer_premium FROM customer_premium")
+        new_data_customer_premium = mycursor.fetchall()
+        
+        found1 = False
+        for i in range(len(new_data_customer_waiting_list)):
+            if (new_data_customer_waiting_list[i][0] == idcustomer0):
+                found = True
+                break
+        
+        found2 = False
+        for i in range(len(new_data_customer_premium)):
+            if (new_data_customer_premium[i][0] == idcustomer0):
+                found2 = True
+                break
+
+        assert not found1 and found2
\ No newline at end of file
diff --git a/src/features/tips_and_trick.py b/src/features/tips_and_trick.py
new file mode 100644
index 0000000000000000000000000000000000000000..16b4909ffeb68be6908ed27efe2b60c9f8ad2836
--- /dev/null
+++ b/src/features/tips_and_trick.py
@@ -0,0 +1,88 @@
+from PyQt5 import QtCore, QtGui, QtWidgets
+import mysql.connector
+from db import *
+
+class tips_and_trick(object):
+    def __init__(self, id):
+        super().__init__()
+        self.Frame = QtWidgets.QFrame()
+        self.openTipsAndTrick(id)
+        # self.Frame.show()
+
+    def tipsAndTrickUi(self):
+        # * Frame
+        self.Frame.setObjectName("Frame")
+        self.Frame.setFixedSize(696, 491)
+        self.Frame.setStyleSheet("background-color: rgb(238, 238, 238);")
+        self.Frame.setFrameShape(QtWidgets.QFrame.Panel)
+        self.Frame.setFrameShadow(QtWidgets.QFrame.Raised)
+
+        # * Title
+        self.label = QtWidgets.QLabel(self.Frame)
+        self.label.setText("Tips And Trick")
+        font = QtGui.QFont()
+        font.setFamily("Lucida Console")
+        font.setPointSize(18)
+        self.label.setFont(font)
+        self.label.move(90, 20)
+
+        # * Content
+        tipsAndTrickContent = "Lorem ipsum dolor sit amet consectetur adipisicing elit. Dicta, vel ipsa a architecto laboriosam voluptatum, omnis unde doloribus consequuntur beatae nam debitis nesciunt tempore, sunt numquam aspernatur asperiores ratione cumque quasi. Quibusdam corrupti ducimus velit? Vero nisi voluptatibus dolore incidunt ea voluptates repellat, quisquam quis animi provident"
+        self.content = QtWidgets.QLabel(tipsAndTrickContent, self.Frame)
+        self.content.setGeometry(23, 60, 320, 200)
+        self.content.setStyleSheet("border : 2px solid black; padding: 10px;")
+        self.content.setWordWrap(True)
+        font = QtGui.QFont()
+        font.setFamily("Lucida Console")
+        font.setPointSize(10)
+        self.content.setFont(font)
+    
+    def notPremiumUi(self):
+        # * Frame
+        self.Frame.setObjectName("Frame")
+        self.Frame.setFixedSize(696, 491)
+        self.Frame.setStyleSheet("background-color: rgb(238, 238, 238);")
+        self.Frame.setFrameShape(QtWidgets.QFrame.Panel)
+        self.Frame.setFrameShadow(QtWidgets.QFrame.Raised)
+
+        # * Title
+        self.label = QtWidgets.QLabel(self.Frame)
+        self.label.setText("Tips And Trick")
+        font = QtGui.QFont()
+        font.setFamily("Lucida Console")
+        font.setPointSize(18)
+        self.label.setFont(font)
+        self.label.move(90, 20)
+
+        # * Content
+        tipsAndTrickContent = "Anda bukan Customer Premium"
+        self.content = QtWidgets.QLabel(tipsAndTrickContent, self.Frame)
+        self.content.setGeometry(23, 60, 320, 200)
+        self.content.setStyleSheet("border : 2px solid black; padding: 10px; color: red; text-align: center;")
+        self.content.setWordWrap(True)
+        font = QtGui.QFont()
+        font.setFamily("Lucida Console")
+        font.setPointSize(30)
+        self.content.setFont(font)
+    
+    def openTipsAndTrick(self, userId):
+
+        if self.isPremium(userId):
+            self.tipsAndTrickUi()
+        else:
+            self.notPremiumUi()
+    
+    def isPremium(self, userId):
+        mycursor.execute("SELECT id_customer_premium FROM customer_premium")
+        listidpremium = [id[0] for id in mycursor.fetchall()]
+        self.idpremium = listidpremium
+
+        return userId in self.idpremium
+    
+
+# if __name__ == "__main__":
+#     import sys
+#     app = QtWidgets.QApplication(sys.argv)
+#     Frame = QtWidgets.QFrame()
+#     ui = tips_and_trick(101)
+#     sys.exit(app.exec_())
diff --git a/src/features/your_features.py b/src/features/your_features.py
deleted file mode 100644
index 180b740e00080d4109d956f92b0d128ca0a26ea8..0000000000000000000000000000000000000000
--- a/src/features/your_features.py
+++ /dev/null
@@ -1 +0,0 @@
-# Create here
\ No newline at end of file