From 6384bc9d68a379065625d0abf32a1435babc8b82 Mon Sep 17 00:00:00 2001 From: kenanqafarov Date: Fri, 6 Mar 2026 14:24:32 +0400 Subject: [PATCH 01/19] First Commit --- .gitattributes | 2 + .gitignore | 33 ++ .mvn/wrapper/maven-wrapper.properties | 3 + mvnw | 295 ++++++++++++++++++ mvnw.cmd | 189 +++++++++++ pom.xml | 60 ++++ .../com/example/demo/DemoApplication.java | 13 + .../demo/controllers/CourseController.java | 4 + .../demo/controllers/StudentController.java | 4 + .../demo/controllers/TeacherController.java | 4 + .../java/com/example/demo/models/Course.java | 4 + .../java/com/example/demo/models/Student.java | 4 + .../java/com/example/demo/models/Teacher.java | 4 + .../example/demo/services/CourseService.java | 4 + .../example/demo/services/StudentService.java | 4 + .../example/demo/services/TeacherService.java | 4 + src/main/resources/application.properties | 1 + .../example/demo/DemoApplicationTests.java | 13 + 18 files changed, 645 insertions(+) create mode 100644 .gitattributes create mode 100644 .gitignore create mode 100644 .mvn/wrapper/maven-wrapper.properties create mode 100644 mvnw create mode 100644 mvnw.cmd create mode 100644 pom.xml create mode 100644 src/main/java/com/example/demo/DemoApplication.java create mode 100644 src/main/java/com/example/demo/controllers/CourseController.java create mode 100644 src/main/java/com/example/demo/controllers/StudentController.java create mode 100644 src/main/java/com/example/demo/controllers/TeacherController.java create mode 100644 src/main/java/com/example/demo/models/Course.java create mode 100644 src/main/java/com/example/demo/models/Student.java create mode 100644 src/main/java/com/example/demo/models/Teacher.java create mode 100644 src/main/java/com/example/demo/services/CourseService.java create mode 100644 src/main/java/com/example/demo/services/StudentService.java create mode 100644 src/main/java/com/example/demo/services/TeacherService.java create mode 100644 src/main/resources/application.properties create mode 100644 src/test/java/com/example/demo/DemoApplicationTests.java diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 00000000..3b41682a --- /dev/null +++ b/.gitattributes @@ -0,0 +1,2 @@ +/mvnw text eol=lf +*.cmd text eol=crlf diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..667aaef0 --- /dev/null +++ b/.gitignore @@ -0,0 +1,33 @@ +HELP.md +target/ +.mvn/wrapper/maven-wrapper.jar +!**/src/main/**/target/ +!**/src/test/**/target/ + +### STS ### +.apt_generated +.classpath +.factorypath +.project +.settings +.springBeans +.sts4-cache + +### IntelliJ IDEA ### +.idea +*.iws +*.iml +*.ipr + +### NetBeans ### +/nbproject/private/ +/nbbuild/ +/dist/ +/nbdist/ +/.nb-gradle/ +build/ +!**/src/main/**/build/ +!**/src/test/**/build/ + +### VS Code ### +.vscode/ diff --git a/.mvn/wrapper/maven-wrapper.properties b/.mvn/wrapper/maven-wrapper.properties new file mode 100644 index 00000000..8dea6c22 --- /dev/null +++ b/.mvn/wrapper/maven-wrapper.properties @@ -0,0 +1,3 @@ +wrapperVersion=3.3.4 +distributionType=only-script +distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.9.12/apache-maven-3.9.12-bin.zip diff --git a/mvnw b/mvnw new file mode 100644 index 00000000..bd8896bf --- /dev/null +++ b/mvnw @@ -0,0 +1,295 @@ +#!/bin/sh +# ---------------------------------------------------------------------------- +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +# ---------------------------------------------------------------------------- + +# ---------------------------------------------------------------------------- +# Apache Maven Wrapper startup batch script, version 3.3.4 +# +# Optional ENV vars +# ----------------- +# JAVA_HOME - location of a JDK home dir, required when download maven via java source +# MVNW_REPOURL - repo url base for downloading maven distribution +# MVNW_USERNAME/MVNW_PASSWORD - user and password for downloading maven +# MVNW_VERBOSE - true: enable verbose log; debug: trace the mvnw script; others: silence the output +# ---------------------------------------------------------------------------- + +set -euf +[ "${MVNW_VERBOSE-}" != debug ] || set -x + +# OS specific support. +native_path() { printf %s\\n "$1"; } +case "$(uname)" in +CYGWIN* | MINGW*) + [ -z "${JAVA_HOME-}" ] || JAVA_HOME="$(cygpath --unix "$JAVA_HOME")" + native_path() { cygpath --path --windows "$1"; } + ;; +esac + +# set JAVACMD and JAVACCMD +set_java_home() { + # For Cygwin and MinGW, ensure paths are in Unix format before anything is touched + if [ -n "${JAVA_HOME-}" ]; then + if [ -x "$JAVA_HOME/jre/sh/java" ]; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + JAVACCMD="$JAVA_HOME/jre/sh/javac" + else + JAVACMD="$JAVA_HOME/bin/java" + JAVACCMD="$JAVA_HOME/bin/javac" + + if [ ! -x "$JAVACMD" ] || [ ! -x "$JAVACCMD" ]; then + echo "The JAVA_HOME environment variable is not defined correctly, so mvnw cannot run." >&2 + echo "JAVA_HOME is set to \"$JAVA_HOME\", but \"\$JAVA_HOME/bin/java\" or \"\$JAVA_HOME/bin/javac\" does not exist." >&2 + return 1 + fi + fi + else + JAVACMD="$( + 'set' +e + 'unset' -f command 2>/dev/null + 'command' -v java + )" || : + JAVACCMD="$( + 'set' +e + 'unset' -f command 2>/dev/null + 'command' -v javac + )" || : + + if [ ! -x "${JAVACMD-}" ] || [ ! -x "${JAVACCMD-}" ]; then + echo "The java/javac command does not exist in PATH nor is JAVA_HOME set, so mvnw cannot run." >&2 + return 1 + fi + fi +} + +# hash string like Java String::hashCode +hash_string() { + str="${1:-}" h=0 + while [ -n "$str" ]; do + char="${str%"${str#?}"}" + h=$(((h * 31 + $(LC_CTYPE=C printf %d "'$char")) % 4294967296)) + str="${str#?}" + done + printf %x\\n $h +} + +verbose() { :; } +[ "${MVNW_VERBOSE-}" != true ] || verbose() { printf %s\\n "${1-}"; } + +die() { + printf %s\\n "$1" >&2 + exit 1 +} + +trim() { + # MWRAPPER-139: + # Trims trailing and leading whitespace, carriage returns, tabs, and linefeeds. + # Needed for removing poorly interpreted newline sequences when running in more + # exotic environments such as mingw bash on Windows. + printf "%s" "${1}" | tr -d '[:space:]' +} + +scriptDir="$(dirname "$0")" +scriptName="$(basename "$0")" + +# parse distributionUrl and optional distributionSha256Sum, requires .mvn/wrapper/maven-wrapper.properties +while IFS="=" read -r key value; do + case "${key-}" in + distributionUrl) distributionUrl=$(trim "${value-}") ;; + distributionSha256Sum) distributionSha256Sum=$(trim "${value-}") ;; + esac +done <"$scriptDir/.mvn/wrapper/maven-wrapper.properties" +[ -n "${distributionUrl-}" ] || die "cannot read distributionUrl property in $scriptDir/.mvn/wrapper/maven-wrapper.properties" + +case "${distributionUrl##*/}" in +maven-mvnd-*bin.*) + MVN_CMD=mvnd.sh _MVNW_REPO_PATTERN=/maven/mvnd/ + case "${PROCESSOR_ARCHITECTURE-}${PROCESSOR_ARCHITEW6432-}:$(uname -a)" in + *AMD64:CYGWIN* | *AMD64:MINGW*) distributionPlatform=windows-amd64 ;; + :Darwin*x86_64) distributionPlatform=darwin-amd64 ;; + :Darwin*arm64) distributionPlatform=darwin-aarch64 ;; + :Linux*x86_64*) distributionPlatform=linux-amd64 ;; + *) + echo "Cannot detect native platform for mvnd on $(uname)-$(uname -m), use pure java version" >&2 + distributionPlatform=linux-amd64 + ;; + esac + distributionUrl="${distributionUrl%-bin.*}-$distributionPlatform.zip" + ;; +maven-mvnd-*) MVN_CMD=mvnd.sh _MVNW_REPO_PATTERN=/maven/mvnd/ ;; +*) MVN_CMD="mvn${scriptName#mvnw}" _MVNW_REPO_PATTERN=/org/apache/maven/ ;; +esac + +# apply MVNW_REPOURL and calculate MAVEN_HOME +# maven home pattern: ~/.m2/wrapper/dists/{apache-maven-,maven-mvnd--}/ +[ -z "${MVNW_REPOURL-}" ] || distributionUrl="$MVNW_REPOURL$_MVNW_REPO_PATTERN${distributionUrl#*"$_MVNW_REPO_PATTERN"}" +distributionUrlName="${distributionUrl##*/}" +distributionUrlNameMain="${distributionUrlName%.*}" +distributionUrlNameMain="${distributionUrlNameMain%-bin}" +MAVEN_USER_HOME="${MAVEN_USER_HOME:-${HOME}/.m2}" +MAVEN_HOME="${MAVEN_USER_HOME}/wrapper/dists/${distributionUrlNameMain-}/$(hash_string "$distributionUrl")" + +exec_maven() { + unset MVNW_VERBOSE MVNW_USERNAME MVNW_PASSWORD MVNW_REPOURL || : + exec "$MAVEN_HOME/bin/$MVN_CMD" "$@" || die "cannot exec $MAVEN_HOME/bin/$MVN_CMD" +} + +if [ -d "$MAVEN_HOME" ]; then + verbose "found existing MAVEN_HOME at $MAVEN_HOME" + exec_maven "$@" +fi + +case "${distributionUrl-}" in +*?-bin.zip | *?maven-mvnd-?*-?*.zip) ;; +*) die "distributionUrl is not valid, must match *-bin.zip or maven-mvnd-*.zip, but found '${distributionUrl-}'" ;; +esac + +# prepare tmp dir +if TMP_DOWNLOAD_DIR="$(mktemp -d)" && [ -d "$TMP_DOWNLOAD_DIR" ]; then + clean() { rm -rf -- "$TMP_DOWNLOAD_DIR"; } + trap clean HUP INT TERM EXIT +else + die "cannot create temp dir" +fi + +mkdir -p -- "${MAVEN_HOME%/*}" + +# Download and Install Apache Maven +verbose "Couldn't find MAVEN_HOME, downloading and installing it ..." +verbose "Downloading from: $distributionUrl" +verbose "Downloading to: $TMP_DOWNLOAD_DIR/$distributionUrlName" + +# select .zip or .tar.gz +if ! command -v unzip >/dev/null; then + distributionUrl="${distributionUrl%.zip}.tar.gz" + distributionUrlName="${distributionUrl##*/}" +fi + +# verbose opt +__MVNW_QUIET_WGET=--quiet __MVNW_QUIET_CURL=--silent __MVNW_QUIET_UNZIP=-q __MVNW_QUIET_TAR='' +[ "${MVNW_VERBOSE-}" != true ] || __MVNW_QUIET_WGET='' __MVNW_QUIET_CURL='' __MVNW_QUIET_UNZIP='' __MVNW_QUIET_TAR=v + +# normalize http auth +case "${MVNW_PASSWORD:+has-password}" in +'') MVNW_USERNAME='' MVNW_PASSWORD='' ;; +has-password) [ -n "${MVNW_USERNAME-}" ] || MVNW_USERNAME='' MVNW_PASSWORD='' ;; +esac + +if [ -z "${MVNW_USERNAME-}" ] && command -v wget >/dev/null; then + verbose "Found wget ... using wget" + wget ${__MVNW_QUIET_WGET:+"$__MVNW_QUIET_WGET"} "$distributionUrl" -O "$TMP_DOWNLOAD_DIR/$distributionUrlName" || die "wget: Failed to fetch $distributionUrl" +elif [ -z "${MVNW_USERNAME-}" ] && command -v curl >/dev/null; then + verbose "Found curl ... using curl" + curl ${__MVNW_QUIET_CURL:+"$__MVNW_QUIET_CURL"} -f -L -o "$TMP_DOWNLOAD_DIR/$distributionUrlName" "$distributionUrl" || die "curl: Failed to fetch $distributionUrl" +elif set_java_home; then + verbose "Falling back to use Java to download" + javaSource="$TMP_DOWNLOAD_DIR/Downloader.java" + targetZip="$TMP_DOWNLOAD_DIR/$distributionUrlName" + cat >"$javaSource" <<-END + public class Downloader extends java.net.Authenticator + { + protected java.net.PasswordAuthentication getPasswordAuthentication() + { + return new java.net.PasswordAuthentication( System.getenv( "MVNW_USERNAME" ), System.getenv( "MVNW_PASSWORD" ).toCharArray() ); + } + public static void main( String[] args ) throws Exception + { + setDefault( new Downloader() ); + java.nio.file.Files.copy( java.net.URI.create( args[0] ).toURL().openStream(), java.nio.file.Paths.get( args[1] ).toAbsolutePath().normalize() ); + } + } + END + # For Cygwin/MinGW, switch paths to Windows format before running javac and java + verbose " - Compiling Downloader.java ..." + "$(native_path "$JAVACCMD")" "$(native_path "$javaSource")" || die "Failed to compile Downloader.java" + verbose " - Running Downloader.java ..." + "$(native_path "$JAVACMD")" -cp "$(native_path "$TMP_DOWNLOAD_DIR")" Downloader "$distributionUrl" "$(native_path "$targetZip")" +fi + +# If specified, validate the SHA-256 sum of the Maven distribution zip file +if [ -n "${distributionSha256Sum-}" ]; then + distributionSha256Result=false + if [ "$MVN_CMD" = mvnd.sh ]; then + echo "Checksum validation is not supported for maven-mvnd." >&2 + echo "Please disable validation by removing 'distributionSha256Sum' from your maven-wrapper.properties." >&2 + exit 1 + elif command -v sha256sum >/dev/null; then + if echo "$distributionSha256Sum $TMP_DOWNLOAD_DIR/$distributionUrlName" | sha256sum -c - >/dev/null 2>&1; then + distributionSha256Result=true + fi + elif command -v shasum >/dev/null; then + if echo "$distributionSha256Sum $TMP_DOWNLOAD_DIR/$distributionUrlName" | shasum -a 256 -c >/dev/null 2>&1; then + distributionSha256Result=true + fi + else + echo "Checksum validation was requested but neither 'sha256sum' or 'shasum' are available." >&2 + echo "Please install either command, or disable validation by removing 'distributionSha256Sum' from your maven-wrapper.properties." >&2 + exit 1 + fi + if [ $distributionSha256Result = false ]; then + echo "Error: Failed to validate Maven distribution SHA-256, your Maven distribution might be compromised." >&2 + echo "If you updated your Maven version, you need to update the specified distributionSha256Sum property." >&2 + exit 1 + fi +fi + +# unzip and move +if command -v unzip >/dev/null; then + unzip ${__MVNW_QUIET_UNZIP:+"$__MVNW_QUIET_UNZIP"} "$TMP_DOWNLOAD_DIR/$distributionUrlName" -d "$TMP_DOWNLOAD_DIR" || die "failed to unzip" +else + tar xzf${__MVNW_QUIET_TAR:+"$__MVNW_QUIET_TAR"} "$TMP_DOWNLOAD_DIR/$distributionUrlName" -C "$TMP_DOWNLOAD_DIR" || die "failed to untar" +fi + +# Find the actual extracted directory name (handles snapshots where filename != directory name) +actualDistributionDir="" + +# First try the expected directory name (for regular distributions) +if [ -d "$TMP_DOWNLOAD_DIR/$distributionUrlNameMain" ]; then + if [ -f "$TMP_DOWNLOAD_DIR/$distributionUrlNameMain/bin/$MVN_CMD" ]; then + actualDistributionDir="$distributionUrlNameMain" + fi +fi + +# If not found, search for any directory with the Maven executable (for snapshots) +if [ -z "$actualDistributionDir" ]; then + # enable globbing to iterate over items + set +f + for dir in "$TMP_DOWNLOAD_DIR"/*; do + if [ -d "$dir" ]; then + if [ -f "$dir/bin/$MVN_CMD" ]; then + actualDistributionDir="$(basename "$dir")" + break + fi + fi + done + set -f +fi + +if [ -z "$actualDistributionDir" ]; then + verbose "Contents of $TMP_DOWNLOAD_DIR:" + verbose "$(ls -la "$TMP_DOWNLOAD_DIR")" + die "Could not find Maven distribution directory in extracted archive" +fi + +verbose "Found extracted Maven distribution directory: $actualDistributionDir" +printf %s\\n "$distributionUrl" >"$TMP_DOWNLOAD_DIR/$actualDistributionDir/mvnw.url" +mv -- "$TMP_DOWNLOAD_DIR/$actualDistributionDir" "$MAVEN_HOME" || [ -d "$MAVEN_HOME" ] || die "fail to move MAVEN_HOME" + +clean || : +exec_maven "$@" diff --git a/mvnw.cmd b/mvnw.cmd new file mode 100644 index 00000000..92450f93 --- /dev/null +++ b/mvnw.cmd @@ -0,0 +1,189 @@ +<# : batch portion +@REM ---------------------------------------------------------------------------- +@REM Licensed to the Apache Software Foundation (ASF) under one +@REM or more contributor license agreements. See the NOTICE file +@REM distributed with this work for additional information +@REM regarding copyright ownership. The ASF licenses this file +@REM to you under the Apache License, Version 2.0 (the +@REM "License"); you may not use this file except in compliance +@REM with the License. You may obtain a copy of the License at +@REM +@REM http://www.apache.org/licenses/LICENSE-2.0 +@REM +@REM Unless required by applicable law or agreed to in writing, +@REM software distributed under the License is distributed on an +@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +@REM KIND, either express or implied. See the License for the +@REM specific language governing permissions and limitations +@REM under the License. +@REM ---------------------------------------------------------------------------- + +@REM ---------------------------------------------------------------------------- +@REM Apache Maven Wrapper startup batch script, version 3.3.4 +@REM +@REM Optional ENV vars +@REM MVNW_REPOURL - repo url base for downloading maven distribution +@REM MVNW_USERNAME/MVNW_PASSWORD - user and password for downloading maven +@REM MVNW_VERBOSE - true: enable verbose log; others: silence the output +@REM ---------------------------------------------------------------------------- + +@IF "%__MVNW_ARG0_NAME__%"=="" (SET __MVNW_ARG0_NAME__=%~nx0) +@SET __MVNW_CMD__= +@SET __MVNW_ERROR__= +@SET __MVNW_PSMODULEP_SAVE=%PSModulePath% +@SET PSModulePath= +@FOR /F "usebackq tokens=1* delims==" %%A IN (`powershell -noprofile "& {$scriptDir='%~dp0'; $script='%__MVNW_ARG0_NAME__%'; icm -ScriptBlock ([Scriptblock]::Create((Get-Content -Raw '%~f0'))) -NoNewScope}"`) DO @( + IF "%%A"=="MVN_CMD" (set __MVNW_CMD__=%%B) ELSE IF "%%B"=="" (echo %%A) ELSE (echo %%A=%%B) +) +@SET PSModulePath=%__MVNW_PSMODULEP_SAVE% +@SET __MVNW_PSMODULEP_SAVE= +@SET __MVNW_ARG0_NAME__= +@SET MVNW_USERNAME= +@SET MVNW_PASSWORD= +@IF NOT "%__MVNW_CMD__%"=="" ("%__MVNW_CMD__%" %*) +@echo Cannot start maven from wrapper >&2 && exit /b 1 +@GOTO :EOF +: end batch / begin powershell #> + +$ErrorActionPreference = "Stop" +if ($env:MVNW_VERBOSE -eq "true") { + $VerbosePreference = "Continue" +} + +# calculate distributionUrl, requires .mvn/wrapper/maven-wrapper.properties +$distributionUrl = (Get-Content -Raw "$scriptDir/.mvn/wrapper/maven-wrapper.properties" | ConvertFrom-StringData).distributionUrl +if (!$distributionUrl) { + Write-Error "cannot read distributionUrl property in $scriptDir/.mvn/wrapper/maven-wrapper.properties" +} + +switch -wildcard -casesensitive ( $($distributionUrl -replace '^.*/','') ) { + "maven-mvnd-*" { + $USE_MVND = $true + $distributionUrl = $distributionUrl -replace '-bin\.[^.]*$',"-windows-amd64.zip" + $MVN_CMD = "mvnd.cmd" + break + } + default { + $USE_MVND = $false + $MVN_CMD = $script -replace '^mvnw','mvn' + break + } +} + +# apply MVNW_REPOURL and calculate MAVEN_HOME +# maven home pattern: ~/.m2/wrapper/dists/{apache-maven-,maven-mvnd--}/ +if ($env:MVNW_REPOURL) { + $MVNW_REPO_PATTERN = if ($USE_MVND -eq $False) { "/org/apache/maven/" } else { "/maven/mvnd/" } + $distributionUrl = "$env:MVNW_REPOURL$MVNW_REPO_PATTERN$($distributionUrl -replace "^.*$MVNW_REPO_PATTERN",'')" +} +$distributionUrlName = $distributionUrl -replace '^.*/','' +$distributionUrlNameMain = $distributionUrlName -replace '\.[^.]*$','' -replace '-bin$','' + +$MAVEN_M2_PATH = "$HOME/.m2" +if ($env:MAVEN_USER_HOME) { + $MAVEN_M2_PATH = "$env:MAVEN_USER_HOME" +} + +if (-not (Test-Path -Path $MAVEN_M2_PATH)) { + New-Item -Path $MAVEN_M2_PATH -ItemType Directory | Out-Null +} + +$MAVEN_WRAPPER_DISTS = $null +if ((Get-Item $MAVEN_M2_PATH).Target[0] -eq $null) { + $MAVEN_WRAPPER_DISTS = "$MAVEN_M2_PATH/wrapper/dists" +} else { + $MAVEN_WRAPPER_DISTS = (Get-Item $MAVEN_M2_PATH).Target[0] + "/wrapper/dists" +} + +$MAVEN_HOME_PARENT = "$MAVEN_WRAPPER_DISTS/$distributionUrlNameMain" +$MAVEN_HOME_NAME = ([System.Security.Cryptography.SHA256]::Create().ComputeHash([byte[]][char[]]$distributionUrl) | ForEach-Object {$_.ToString("x2")}) -join '' +$MAVEN_HOME = "$MAVEN_HOME_PARENT/$MAVEN_HOME_NAME" + +if (Test-Path -Path "$MAVEN_HOME" -PathType Container) { + Write-Verbose "found existing MAVEN_HOME at $MAVEN_HOME" + Write-Output "MVN_CMD=$MAVEN_HOME/bin/$MVN_CMD" + exit $? +} + +if (! $distributionUrlNameMain -or ($distributionUrlName -eq $distributionUrlNameMain)) { + Write-Error "distributionUrl is not valid, must end with *-bin.zip, but found $distributionUrl" +} + +# prepare tmp dir +$TMP_DOWNLOAD_DIR_HOLDER = New-TemporaryFile +$TMP_DOWNLOAD_DIR = New-Item -Itemtype Directory -Path "$TMP_DOWNLOAD_DIR_HOLDER.dir" +$TMP_DOWNLOAD_DIR_HOLDER.Delete() | Out-Null +trap { + if ($TMP_DOWNLOAD_DIR.Exists) { + try { Remove-Item $TMP_DOWNLOAD_DIR -Recurse -Force | Out-Null } + catch { Write-Warning "Cannot remove $TMP_DOWNLOAD_DIR" } + } +} + +New-Item -Itemtype Directory -Path "$MAVEN_HOME_PARENT" -Force | Out-Null + +# Download and Install Apache Maven +Write-Verbose "Couldn't find MAVEN_HOME, downloading and installing it ..." +Write-Verbose "Downloading from: $distributionUrl" +Write-Verbose "Downloading to: $TMP_DOWNLOAD_DIR/$distributionUrlName" + +$webclient = New-Object System.Net.WebClient +if ($env:MVNW_USERNAME -and $env:MVNW_PASSWORD) { + $webclient.Credentials = New-Object System.Net.NetworkCredential($env:MVNW_USERNAME, $env:MVNW_PASSWORD) +} +[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 +$webclient.DownloadFile($distributionUrl, "$TMP_DOWNLOAD_DIR/$distributionUrlName") | Out-Null + +# If specified, validate the SHA-256 sum of the Maven distribution zip file +$distributionSha256Sum = (Get-Content -Raw "$scriptDir/.mvn/wrapper/maven-wrapper.properties" | ConvertFrom-StringData).distributionSha256Sum +if ($distributionSha256Sum) { + if ($USE_MVND) { + Write-Error "Checksum validation is not supported for maven-mvnd. `nPlease disable validation by removing 'distributionSha256Sum' from your maven-wrapper.properties." + } + Import-Module $PSHOME\Modules\Microsoft.PowerShell.Utility -Function Get-FileHash + if ((Get-FileHash "$TMP_DOWNLOAD_DIR/$distributionUrlName" -Algorithm SHA256).Hash.ToLower() -ne $distributionSha256Sum) { + Write-Error "Error: Failed to validate Maven distribution SHA-256, your Maven distribution might be compromised. If you updated your Maven version, you need to update the specified distributionSha256Sum property." + } +} + +# unzip and move +Expand-Archive "$TMP_DOWNLOAD_DIR/$distributionUrlName" -DestinationPath "$TMP_DOWNLOAD_DIR" | Out-Null + +# Find the actual extracted directory name (handles snapshots where filename != directory name) +$actualDistributionDir = "" + +# First try the expected directory name (for regular distributions) +$expectedPath = Join-Path "$TMP_DOWNLOAD_DIR" "$distributionUrlNameMain" +$expectedMvnPath = Join-Path "$expectedPath" "bin/$MVN_CMD" +if ((Test-Path -Path $expectedPath -PathType Container) -and (Test-Path -Path $expectedMvnPath -PathType Leaf)) { + $actualDistributionDir = $distributionUrlNameMain +} + +# If not found, search for any directory with the Maven executable (for snapshots) +if (!$actualDistributionDir) { + Get-ChildItem -Path "$TMP_DOWNLOAD_DIR" -Directory | ForEach-Object { + $testPath = Join-Path $_.FullName "bin/$MVN_CMD" + if (Test-Path -Path $testPath -PathType Leaf) { + $actualDistributionDir = $_.Name + } + } +} + +if (!$actualDistributionDir) { + Write-Error "Could not find Maven distribution directory in extracted archive" +} + +Write-Verbose "Found extracted Maven distribution directory: $actualDistributionDir" +Rename-Item -Path "$TMP_DOWNLOAD_DIR/$actualDistributionDir" -NewName $MAVEN_HOME_NAME | Out-Null +try { + Move-Item -Path "$TMP_DOWNLOAD_DIR/$MAVEN_HOME_NAME" -Destination $MAVEN_HOME_PARENT | Out-Null +} catch { + if (! (Test-Path -Path "$MAVEN_HOME" -PathType Container)) { + Write-Error "fail to move MAVEN_HOME" + } +} finally { + try { Remove-Item $TMP_DOWNLOAD_DIR -Recurse -Force | Out-Null } + catch { Write-Warning "Cannot remove $TMP_DOWNLOAD_DIR" } +} + +Write-Output "MVN_CMD=$MAVEN_HOME/bin/$MVN_CMD" diff --git a/pom.xml b/pom.xml new file mode 100644 index 00000000..5509de8c --- /dev/null +++ b/pom.xml @@ -0,0 +1,60 @@ + + + 4.0.0 + + org.springframework.boot + spring-boot-starter-parent + 4.0.3 + + + com.example + demo + 0.0.1-SNAPSHOT + demo + Demo project for Spring Boot + + + + + + + + + + + + + + + 17 + + + + org.springframework.boot + spring-boot-starter-webmvc + + + + org.springframework.boot + spring-boot-devtools + runtime + true + + + org.springframework.boot + spring-boot-starter-webmvc-test + test + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + + diff --git a/src/main/java/com/example/demo/DemoApplication.java b/src/main/java/com/example/demo/DemoApplication.java new file mode 100644 index 00000000..64b538a1 --- /dev/null +++ b/src/main/java/com/example/demo/DemoApplication.java @@ -0,0 +1,13 @@ +package com.example.demo; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication +public class DemoApplication { + + public static void main(String[] args) { + SpringApplication.run(DemoApplication.class, args); + } + +} diff --git a/src/main/java/com/example/demo/controllers/CourseController.java b/src/main/java/com/example/demo/controllers/CourseController.java new file mode 100644 index 00000000..c941d4c1 --- /dev/null +++ b/src/main/java/com/example/demo/controllers/CourseController.java @@ -0,0 +1,4 @@ +package com.example.demo.controllers; + +public class CourseController { +} diff --git a/src/main/java/com/example/demo/controllers/StudentController.java b/src/main/java/com/example/demo/controllers/StudentController.java new file mode 100644 index 00000000..040fcec3 --- /dev/null +++ b/src/main/java/com/example/demo/controllers/StudentController.java @@ -0,0 +1,4 @@ +package com.example.demo.controllers; + +public class StudentController { +} diff --git a/src/main/java/com/example/demo/controllers/TeacherController.java b/src/main/java/com/example/demo/controllers/TeacherController.java new file mode 100644 index 00000000..7cb7c1e9 --- /dev/null +++ b/src/main/java/com/example/demo/controllers/TeacherController.java @@ -0,0 +1,4 @@ +package com.example.demo.controllers; + +public class TeacherController { +} diff --git a/src/main/java/com/example/demo/models/Course.java b/src/main/java/com/example/demo/models/Course.java new file mode 100644 index 00000000..853cbadf --- /dev/null +++ b/src/main/java/com/example/demo/models/Course.java @@ -0,0 +1,4 @@ +package com.example.demo.models; + +public class Course { +} diff --git a/src/main/java/com/example/demo/models/Student.java b/src/main/java/com/example/demo/models/Student.java new file mode 100644 index 00000000..5e18f533 --- /dev/null +++ b/src/main/java/com/example/demo/models/Student.java @@ -0,0 +1,4 @@ +package com.example.demo.models; + +public class Student { +} diff --git a/src/main/java/com/example/demo/models/Teacher.java b/src/main/java/com/example/demo/models/Teacher.java new file mode 100644 index 00000000..e35f5146 --- /dev/null +++ b/src/main/java/com/example/demo/models/Teacher.java @@ -0,0 +1,4 @@ +package com.example.demo.models; + +public class Teacher { +} diff --git a/src/main/java/com/example/demo/services/CourseService.java b/src/main/java/com/example/demo/services/CourseService.java new file mode 100644 index 00000000..3b854560 --- /dev/null +++ b/src/main/java/com/example/demo/services/CourseService.java @@ -0,0 +1,4 @@ +package com.example.demo.services; + +public class CourseService { +} diff --git a/src/main/java/com/example/demo/services/StudentService.java b/src/main/java/com/example/demo/services/StudentService.java new file mode 100644 index 00000000..9c89021c --- /dev/null +++ b/src/main/java/com/example/demo/services/StudentService.java @@ -0,0 +1,4 @@ +package com.example.demo.services; + +public class StudentService { +} diff --git a/src/main/java/com/example/demo/services/TeacherService.java b/src/main/java/com/example/demo/services/TeacherService.java new file mode 100644 index 00000000..ab880d70 --- /dev/null +++ b/src/main/java/com/example/demo/services/TeacherService.java @@ -0,0 +1,4 @@ +package com.example.demo.services; + +public class TeacherService { +} diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties new file mode 100644 index 00000000..2109a440 --- /dev/null +++ b/src/main/resources/application.properties @@ -0,0 +1 @@ +spring.application.name=demo diff --git a/src/test/java/com/example/demo/DemoApplicationTests.java b/src/test/java/com/example/demo/DemoApplicationTests.java new file mode 100644 index 00000000..2778a6a7 --- /dev/null +++ b/src/test/java/com/example/demo/DemoApplicationTests.java @@ -0,0 +1,13 @@ +package com.example.demo; + +import org.junit.jupiter.api.Test; +import org.springframework.boot.test.context.SpringBootTest; + +@SpringBootTest +class DemoApplicationTests { + + @Test + void contextLoads() { + } + +} From a9cac2e46b68ca0af6218a87e8f4cbf0970701a4 Mon Sep 17 00:00:00 2001 From: kenanqafarov Date: Fri, 6 Mar 2026 14:46:04 +0400 Subject: [PATCH 02/19] Teacher Controller --- .../java/com/example/demo/models/Teacher.java | 37 ++++++++++++++++++- .../example/demo/services/TeacherService.java | 3 ++ 2 files changed, 39 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/example/demo/models/Teacher.java b/src/main/java/com/example/demo/models/Teacher.java index e35f5146..e7d92d39 100644 --- a/src/main/java/com/example/demo/models/Teacher.java +++ b/src/main/java/com/example/demo/models/Teacher.java @@ -1,4 +1,39 @@ package com.example.demo.models; +import java.util.UUID; + public class Teacher { -} + private String teacherId; + private String name; + private double salary; + + public Teacher(String name, double salary) { + this.teacherId = UUID.randomUUID().toString(); + this.name = name; + this.salary = salary; + } + + public String getTeacherId() { + return teacherId; + } + + public void setTeacherId(String teacherId) { + this.teacherId = teacherId; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public double getSalary() { + return salary; + } + + public void setSalary(double salary) { + this.salary = salary; + } +} \ No newline at end of file diff --git a/src/main/java/com/example/demo/services/TeacherService.java b/src/main/java/com/example/demo/services/TeacherService.java index ab880d70..c3620d7e 100644 --- a/src/main/java/com/example/demo/services/TeacherService.java +++ b/src/main/java/com/example/demo/services/TeacherService.java @@ -1,4 +1,7 @@ package com.example.demo.services; public class TeacherService { + + + } From 2ed2a724b6b8193fa011365afd3be19046c235a5 Mon Sep 17 00:00:00 2001 From: Revan Date: Fri, 6 Mar 2026 14:48:24 +0400 Subject: [PATCH 03/19] student and course was handled --- .../java/com/example/demo/models/Course.java | 55 +++++++++++++++++++ .../java/com/example/demo/models/Student.java | 55 +++++++++++++++++++ 2 files changed, 110 insertions(+) diff --git a/src/main/java/com/example/demo/models/Course.java b/src/main/java/com/example/demo/models/Course.java index 853cbadf..f8a93bab 100644 --- a/src/main/java/com/example/demo/models/Course.java +++ b/src/main/java/com/example/demo/models/Course.java @@ -1,4 +1,59 @@ package com.example.demo.models; +import jakarta.annotation.Nullable; + public class Course { +private String courseId; +private String name; +private double price; +private double money_earned; +@Nullable +private Teacher teacher; + + + public Course(String name, double price) { + this.price = price; + this.name=name; + } + + public Teacher getTeacher() { + return teacher; + } + + public void setTeacher(Teacher teacher) { + this.teacher = teacher; + } + + + public String getCourseId() { + return courseId; + } + + public void setCourseId(String courseId) { + this.courseId = courseId; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public double getPrice() { + return price; + } + + public void setPrice(double price) { + this.price = price; + } + + public double getMoney_earned() { + return money_earned; + } + + public void setMoney_earned(double money_earned) { + this.money_earned = money_earned; + } } diff --git a/src/main/java/com/example/demo/models/Student.java b/src/main/java/com/example/demo/models/Student.java index 5e18f533..6e6314b9 100644 --- a/src/main/java/com/example/demo/models/Student.java +++ b/src/main/java/com/example/demo/models/Student.java @@ -1,4 +1,59 @@ package com.example.demo.models; +import jakarta.annotation.Nullable; + public class Student { + private String studentId; + private String name; + private String address; + private String email; + @Nullable + private Course course; + + public String getStudentId() { + return studentId; + } + + public void setStudentId(String studentId) { + this.studentId = studentId; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getAddress() { + return address; + } + + public void setAddress(String address) { + this.address = address; + } + + public String getEmail() { + return email; + } + + public void setEmail(String email) { + this.email = email; + } + + @Nullable + public Course getCourse() { + return course; + } + + public void setCourse(@Nullable Course course) { + this.course = course; + } + + public Student(String name, String address, String email) { + this.name = name; + this.address = address; + this.email = email; + } } From 02afc96de49e4fec2e069b859ac162efbed90bbf Mon Sep 17 00:00:00 2001 From: kenanqafarov Date: Fri, 6 Mar 2026 14:52:16 +0400 Subject: [PATCH 04/19] All done --- src/main/java/com/example/demo/models/Teacher.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/com/example/demo/models/Teacher.java b/src/main/java/com/example/demo/models/Teacher.java index e7d92d39..f75a0795 100644 --- a/src/main/java/com/example/demo/models/Teacher.java +++ b/src/main/java/com/example/demo/models/Teacher.java @@ -24,6 +24,7 @@ public void setTeacherId(String teacherId) { public String getName() { return name; } +// tESTING public void setName(String name) { this.name = name; From a8d7d32b92d7f1bf0f5a10d75c4abdaacc45e1ba Mon Sep 17 00:00:00 2001 From: Revan Date: Fri, 6 Mar 2026 14:53:17 +0400 Subject: [PATCH 05/19] Testing --- src/main/java/com/example/demo/models/Course.java | 2 +- src/main/java/com/example/demo/models/Teacher.java | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/example/demo/models/Course.java b/src/main/java/com/example/demo/models/Course.java index f8a93bab..2a833a13 100644 --- a/src/main/java/com/example/demo/models/Course.java +++ b/src/main/java/com/example/demo/models/Course.java @@ -15,7 +15,7 @@ public Course(String name, double price) { this.price = price; this.name=name; } - +@Nullable public Teacher getTeacher() { return teacher; } diff --git a/src/main/java/com/example/demo/models/Teacher.java b/src/main/java/com/example/demo/models/Teacher.java index e35f5146..d744156a 100644 --- a/src/main/java/com/example/demo/models/Teacher.java +++ b/src/main/java/com/example/demo/models/Teacher.java @@ -1,4 +1,5 @@ package com.example.demo.models; public class Teacher { + } From 621780064eec96be4ec20d7c89c20d1b5757cb7c Mon Sep 17 00:00:00 2001 From: kenanqafarov Date: Fri, 6 Mar 2026 15:34:48 +0400 Subject: [PATCH 06/19] All done --- src/main/java/com/example/demo/models/Student.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/com/example/demo/models/Student.java b/src/main/java/com/example/demo/models/Student.java index 6e6314b9..be16fa5b 100644 --- a/src/main/java/com/example/demo/models/Student.java +++ b/src/main/java/com/example/demo/models/Student.java @@ -1,6 +1,7 @@ package com.example.demo.models; import jakarta.annotation.Nullable; +//All public class Student { private String studentId; From effac31e9124b8cb339ebb34a31bca4dad0447aa Mon Sep 17 00:00:00 2001 From: kenanqafarov Date: Fri, 6 Mar 2026 15:45:42 +0400 Subject: [PATCH 07/19] All done by kenan-dev --- .../example/demo/services/CourseService.java | 236 +++++++++++++++++- 1 file changed, 235 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/example/demo/services/CourseService.java b/src/main/java/com/example/demo/services/CourseService.java index 3b854560..ba4c7bd6 100644 --- a/src/main/java/com/example/demo/services/CourseService.java +++ b/src/main/java/com/example/demo/services/CourseService.java @@ -1,4 +1,238 @@ package com.example.demo.services; +import com.example.demo.models.Course; +import com.example.demo.models.Student; +import com.example.demo.models.Teacher; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.UUID; + +@Service public class CourseService { -} + + private final Map courseMap = new HashMap<>(); + private final Map teacherMap = new HashMap<>(); + private final Map studentMap = new HashMap<>(); + + // Teacher CRUD operations + public Teacher createTeacher(String name, double salary) { + if (name == null || name.isEmpty()) { + throw new IllegalArgumentException("Teacher name cannot be empty"); + } + if (salary < 0) { + throw new IllegalArgumentException("Salary cannot be negative"); + } + String teacherId = UUID.randomUUID().toString(); + Teacher teacher = new Teacher(name, salary); + teacher.setTeacherId(teacherId); + teacherMap.put(teacherId, teacher); + return teacher; + } + + public Teacher getTeacherById(String teacherId) { + if (teacherId == null) { + throw new IllegalArgumentException("Teacher ID cannot be null"); + } + Teacher teacher = teacherMap.get(teacherId); + if (teacher == null) { + throw new IllegalArgumentException("Teacher not found with ID: " + teacherId); + } + return teacher; + } + + public List getAllTeachers() { + return new ArrayList<>(teacherMap.values()); + } + + public void updateTeacher(String teacherId, String newName, double newSalary) { + Teacher teacher = getTeacherById(teacherId); + if (newName != null && !newName.isEmpty()) { + teacher.setName(newName); + } + if (newSalary >= 0) { + teacher.setSalary(newSalary); + } + } + + public void deleteTeacher(String teacherId) { + if (teacherId == null) { + throw new IllegalArgumentException("Teacher ID cannot be null"); + } + if (!teacherMap.containsKey(teacherId)) { + throw new IllegalArgumentException("Teacher not found with ID: " + teacherId); + } + // Remove teacher from any assigned courses + for (Course course : courseMap.values()) { + if (course.getTeacher() != null && course.getTeacher().getTeacherId().equals(teacherId)) { + course.setTeacher(null); + } + } + teacherMap.remove(teacherId); + } + + // Student CRUD operations + public Student createStudent(String name) { + if (name == null || name.isEmpty()) { + throw new IllegalArgumentException("Student name cannot be empty"); + } + String studentId = UUID.randomUUID().toString(); + Student student = new Student(name); + student.setStudentId(studentId); + studentMap.put(studentId, student); + return student; + } + + public Student getStudentById(String studentId) { + if (studentId == null) { + throw new IllegalArgumentException("Student ID cannot be null"); + } + Student student = studentMap.get(studentId); + if (student == null) { + throw new IllegalArgumentException("Student not found with ID: " + studentId); + } + return student; + } + + public List getAllStudents() { + return new ArrayList<>(studentMap.values()); + } + + public void updateStudent(String studentId, String newName) { + Student student = getStudentById(studentId); + if (newName != null && !newName.isEmpty()) { + student.setName(newName); + } + } + + public void deleteStudent(String studentId) { + if (studentId == null) { + throw new IllegalArgumentException("Student ID cannot be null"); + } + if (!studentMap.containsKey(studentId)) { + throw new IllegalArgumentException("Student not found with ID: " + studentId); + } + // Remove student from any enrolled courses + for (Course course : courseMap.values()) { + course.getStudents().removeIf(s -> s.getStudentId().equals(studentId)); + } + studentMap.remove(studentId); + } + + // Course CRUD operations + public Course createCourse(String name, double price) { + if (name == null || name.isEmpty()) { + throw new IllegalArgumentException("Course name cannot be empty"); + } + if (price < 0) { + throw new IllegalArgumentException("Price cannot be negative"); + } + String courseId = UUID.randomUUID().toString(); + Course course = new Course(name, price); + course.setCourseId(courseId); + course.setMoney_earned(0.0); + courseMap.put(courseId, course); + return course; + } + + public Course getCourseById(String courseId) { + if (courseId == null) { + throw new IllegalArgumentException("Course ID cannot be null"); + } + Course course = courseMap.get(courseId); + if (course == null) { + throw new IllegalArgumentException("Course not found with ID: " + courseId); + } + return course; + } + + public List getAllCourses() { + return new ArrayList<>(courseMap.values()); + } + + public void updateCourse(String courseId, String newName, double newPrice) { + Course course = getCourseById(courseId); + if (newName != null && !newName.isEmpty()) { + course.setName(newName); + } + if (newPrice >= 0) { + course.setPrice(newPrice); + } + } + + public void deleteCourse(String courseId) { + if (courseId == null) { + throw new IllegalArgumentException("Course ID cannot be null"); + } + if (!courseMap.containsKey(courseId)) { + throw new IllegalArgumentException("Course not found with ID: " + courseId); + } + courseMap.remove(courseId); + } + + // Assign teacher to course + public void assignTeacherToCourse(String courseId, String teacherId) { + Course course = getCourseById(courseId); + Teacher teacher = getTeacherById(teacherId); + course.setTeacher(teacher); + } + + // Enroll student in course + public void enrollStudentInCourse(String courseId, String studentId) { + Course course = getCourseById(courseId); + Student student = getStudentById(studentId); + if (!course.getStudents().contains(student)) { + course.getStudents().add(student); + course.setMoney_earned(course.getMoney_earned() + course.getPrice()); + } else { + throw new IllegalStateException("Student is already enrolled in the course"); + } + } + + // Unenroll student from course (optional, for completeness) + public void unenrollStudentFromCourse(String courseId, String studentId) { + Course course = getCourseById(courseId); + Student student = getStudentById(studentId); + if (course.getStudents().remove(student)) { + course.setMoney_earned(course.getMoney_earned() - course.getPrice()); + } else { + throw new IllegalStateException("Student is not enrolled in the course"); + } + } + + // Get students enrolled in a course + public List getEnrolledStudents(String courseId) { + Course course = getCourseById(courseId); + return new ArrayList<>(course.getStudents()); + } + + // Get courses taught by a teacher + public List getCoursesByTeacher(String teacherId) { + getTeacherById(teacherId); // Validate teacher exists + List teacherCourses = new ArrayList<>(); + for (Course course : courseMap.values()) { + if (course.getTeacher() != null && course.getTeacher().getTeacherId().equals(teacherId)) { + teacherCourses.add(course); + } + } + return teacherCourses; + } + + // Get courses enrolled by a student (assuming no back-reference, we scan) + public List getCoursesForStudent(String studentId) { + getStudentById(studentId); // Validate student exists + List studentCourses = new ArrayList<>(); + for (Course course : courseMap.values()) { + for (Student s : course.getStudents()) { + if (s.getStudentId().equals(studentId)) { + studentCourses.add(course); + break; + } + } + } + return studentCourses; + } +} \ No newline at end of file From da50f00ab691b4990d1e69895113255906630b6e Mon Sep 17 00:00:00 2001 From: kenanqafarov Date: Fri, 6 Mar 2026 15:49:53 +0400 Subject: [PATCH 08/19] Kenan commited all due services --- .../example/demo/services/CourseService.java | 160 +----------------- .../example/demo/services/StudentService.java | 114 ++++++++++++- .../example/demo/services/TeacherService.java | 58 ++++++- 3 files changed, 175 insertions(+), 157 deletions(-) diff --git a/src/main/java/com/example/demo/services/CourseService.java b/src/main/java/com/example/demo/services/CourseService.java index ba4c7bd6..41f936f2 100644 --- a/src/main/java/com/example/demo/services/CourseService.java +++ b/src/main/java/com/example/demo/services/CourseService.java @@ -1,8 +1,8 @@ package com.example.demo.services; import com.example.demo.models.Course; -import com.example.demo.models.Student; import com.example.demo.models.Teacher; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.ArrayList; @@ -15,114 +15,10 @@ public class CourseService { private final Map courseMap = new HashMap<>(); - private final Map teacherMap = new HashMap<>(); - private final Map studentMap = new HashMap<>(); - // Teacher CRUD operations - public Teacher createTeacher(String name, double salary) { - if (name == null || name.isEmpty()) { - throw new IllegalArgumentException("Teacher name cannot be empty"); - } - if (salary < 0) { - throw new IllegalArgumentException("Salary cannot be negative"); - } - String teacherId = UUID.randomUUID().toString(); - Teacher teacher = new Teacher(name, salary); - teacher.setTeacherId(teacherId); - teacherMap.put(teacherId, teacher); - return teacher; - } - - public Teacher getTeacherById(String teacherId) { - if (teacherId == null) { - throw new IllegalArgumentException("Teacher ID cannot be null"); - } - Teacher teacher = teacherMap.get(teacherId); - if (teacher == null) { - throw new IllegalArgumentException("Teacher not found with ID: " + teacherId); - } - return teacher; - } - - public List getAllTeachers() { - return new ArrayList<>(teacherMap.values()); - } - - public void updateTeacher(String teacherId, String newName, double newSalary) { - Teacher teacher = getTeacherById(teacherId); - if (newName != null && !newName.isEmpty()) { - teacher.setName(newName); - } - if (newSalary >= 0) { - teacher.setSalary(newSalary); - } - } + @Autowired + private TeacherService teacherService; // To fetch teachers - public void deleteTeacher(String teacherId) { - if (teacherId == null) { - throw new IllegalArgumentException("Teacher ID cannot be null"); - } - if (!teacherMap.containsKey(teacherId)) { - throw new IllegalArgumentException("Teacher not found with ID: " + teacherId); - } - // Remove teacher from any assigned courses - for (Course course : courseMap.values()) { - if (course.getTeacher() != null && course.getTeacher().getTeacherId().equals(teacherId)) { - course.setTeacher(null); - } - } - teacherMap.remove(teacherId); - } - - // Student CRUD operations - public Student createStudent(String name) { - if (name == null || name.isEmpty()) { - throw new IllegalArgumentException("Student name cannot be empty"); - } - String studentId = UUID.randomUUID().toString(); - Student student = new Student(name); - student.setStudentId(studentId); - studentMap.put(studentId, student); - return student; - } - - public Student getStudentById(String studentId) { - if (studentId == null) { - throw new IllegalArgumentException("Student ID cannot be null"); - } - Student student = studentMap.get(studentId); - if (student == null) { - throw new IllegalArgumentException("Student not found with ID: " + studentId); - } - return student; - } - - public List getAllStudents() { - return new ArrayList<>(studentMap.values()); - } - - public void updateStudent(String studentId, String newName) { - Student student = getStudentById(studentId); - if (newName != null && !newName.isEmpty()) { - student.setName(newName); - } - } - - public void deleteStudent(String studentId) { - if (studentId == null) { - throw new IllegalArgumentException("Student ID cannot be null"); - } - if (!studentMap.containsKey(studentId)) { - throw new IllegalArgumentException("Student not found with ID: " + studentId); - } - // Remove student from any enrolled courses - for (Course course : courseMap.values()) { - course.getStudents().removeIf(s -> s.getStudentId().equals(studentId)); - } - studentMap.remove(studentId); - } - - // Course CRUD operations public Course createCourse(String name, double price) { if (name == null || name.isEmpty()) { throw new IllegalArgumentException("Course name cannot be empty"); @@ -173,45 +69,14 @@ public void deleteCourse(String courseId) { courseMap.remove(courseId); } - // Assign teacher to course public void assignTeacherToCourse(String courseId, String teacherId) { Course course = getCourseById(courseId); - Teacher teacher = getTeacherById(teacherId); + Teacher teacher = teacherService.getTeacherById(teacherId); course.setTeacher(teacher); } - // Enroll student in course - public void enrollStudentInCourse(String courseId, String studentId) { - Course course = getCourseById(courseId); - Student student = getStudentById(studentId); - if (!course.getStudents().contains(student)) { - course.getStudents().add(student); - course.setMoney_earned(course.getMoney_earned() + course.getPrice()); - } else { - throw new IllegalStateException("Student is already enrolled in the course"); - } - } - - // Unenroll student from course (optional, for completeness) - public void unenrollStudentFromCourse(String courseId, String studentId) { - Course course = getCourseById(courseId); - Student student = getStudentById(studentId); - if (course.getStudents().remove(student)) { - course.setMoney_earned(course.getMoney_earned() - course.getPrice()); - } else { - throw new IllegalStateException("Student is not enrolled in the course"); - } - } - - // Get students enrolled in a course - public List getEnrolledStudents(String courseId) { - Course course = getCourseById(courseId); - return new ArrayList<>(course.getStudents()); - } - - // Get courses taught by a teacher public List getCoursesByTeacher(String teacherId) { - getTeacherById(teacherId); // Validate teacher exists + teacherService.getTeacherById(teacherId); // Validate teacher exists List teacherCourses = new ArrayList<>(); for (Course course : courseMap.values()) { if (course.getTeacher() != null && course.getTeacher().getTeacherId().equals(teacherId)) { @@ -220,19 +85,4 @@ public List getCoursesByTeacher(String teacherId) { } return teacherCourses; } - - // Get courses enrolled by a student (assuming no back-reference, we scan) - public List getCoursesForStudent(String studentId) { - getStudentById(studentId); // Validate student exists - List studentCourses = new ArrayList<>(); - for (Course course : courseMap.values()) { - for (Student s : course.getStudents()) { - if (s.getStudentId().equals(studentId)) { - studentCourses.add(course); - break; - } - } - } - return studentCourses; - } } \ No newline at end of file diff --git a/src/main/java/com/example/demo/services/StudentService.java b/src/main/java/com/example/demo/services/StudentService.java index 9c89021c..34e8d167 100644 --- a/src/main/java/com/example/demo/services/StudentService.java +++ b/src/main/java/com/example/demo/services/StudentService.java @@ -1,4 +1,116 @@ package com.example.demo.services; +import com.example.demo.models.Course; +import com.example.demo.models.Student; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.UUID; + +@Service public class StudentService { -} + + private final Map studentMap = new HashMap<>(); + + @Autowired + private CourseService courseService; // To fetch courses and update money_earned + + public Student createStudent(String name, String address, String email) { + if (name == null || name.isEmpty()) { + throw new IllegalArgumentException("Student name cannot be empty"); + } + if (address == null || address.isEmpty()) { + throw new IllegalArgumentException("Student address cannot be empty"); + } + if (email == null || email.isEmpty()) { + throw new IllegalArgumentException("Student email cannot be empty"); + } + String studentId = UUID.randomUUID().toString(); + Student student = new Student(name, address, email); + student.setStudentId(studentId); + studentMap.put(studentId, student); + return student; + } + + public Student getStudentById(String studentId) { + if (studentId == null) { + throw new IllegalArgumentException("Student ID cannot be null"); + } + Student student = studentMap.get(studentId); + if (student == null) { + throw new IllegalArgumentException("Student not found with ID: " + studentId); + } + return student; + } + + public List getAllStudents() { + return new ArrayList<>(studentMap.values()); + } + + public void updateStudent(String studentId, String newName, String newAddress, String newEmail) { + Student student = getStudentById(studentId); + if (newName != null && !newName.isEmpty()) { + student.setName(newName); + } + if (newAddress != null && !newAddress.isEmpty()) { + student.setAddress(newAddress); + } + if (newEmail != null && !newEmail.isEmpty()) { + student.setEmail(newEmail); + } + } + + public void deleteStudent(String studentId) { + if (studentId == null) { + throw new IllegalArgumentException("Student ID cannot be null"); + } + if (!studentMap.containsKey(studentId)) { + throw new IllegalArgumentException("Student not found with ID: " + studentId); + } + Student student = getStudentById(studentId); + unenrollStudentFromCourse(studentId); + studentMap.remove(studentId); + } + + public void enrollStudentInCourse(String studentId, String courseId) { + Student student = getStudentById(studentId); + Course newCourse = courseService.getCourseById(courseId); + Course oldCourse = student.getCourse(); + if (oldCourse != null) { + oldCourse.setMoney_earned(oldCourse.getMoney_earned() - oldCourse.getPrice()); + } + student.setCourse(newCourse); + newCourse.setMoney_earned(newCourse.getMoney_earned() + newCourse.getPrice()); + } + + public void unenrollStudentFromCourse(String studentId) { + Student student = getStudentById(studentId); + Course course = student.getCourse(); + if (course != null) { + course.setMoney_earned(course.getMoney_earned() - course.getPrice()); + student.setCourse(null); + } else { + throw new IllegalStateException("Student is not enrolled in any course"); + } + } + + public List getEnrolledStudents(String courseId) { + courseService.getCourseById(courseId); // Validate course exists + List enrolledStudents = new ArrayList<>(); + for (Student student : studentMap.values()) { + if (student.getCourse() != null && student.getCourse().getCourseId().equals(courseId)) { + enrolledStudents.add(student); + } + } + return enrolledStudents; + } + + public Course getCourseForStudent(String studentId) { + Student student = getStudentById(studentId); + return student.getCourse(); + } +} \ No newline at end of file diff --git a/src/main/java/com/example/demo/services/TeacherService.java b/src/main/java/com/example/demo/services/TeacherService.java index c3620d7e..c691bc55 100644 --- a/src/main/java/com/example/demo/services/TeacherService.java +++ b/src/main/java/com/example/demo/services/TeacherService.java @@ -1,7 +1,63 @@ package com.example.demo.services; +import com.example.demo.models.Teacher; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.UUID; + +@Service public class TeacherService { + private final Map teacherMap = new HashMap<>(); + + public Teacher createTeacher(String name, double salary) { + if (name == null || name.isEmpty()) { + throw new IllegalArgumentException("Teacher name cannot be empty"); + } + if (salary < 0) { + throw new IllegalArgumentException("Salary cannot be negative"); + } + Teacher teacher = new Teacher(name, salary); + teacherMap.put(teacher.getTeacherId(), teacher); + return teacher; + } + + public Teacher getTeacherById(String teacherId) { + if (teacherId == null) { + throw new IllegalArgumentException("Teacher ID cannot be null"); + } + Teacher teacher = teacherMap.get(teacherId); + if (teacher == null) { + throw new IllegalArgumentException("Teacher not found with ID: " + teacherId); + } + return teacher; + } + + public List getAllTeachers() { + return new ArrayList<>(teacherMap.values()); + } + public void updateTeacher(String teacherId, String newName, double newSalary) { + Teacher teacher = getTeacherById(teacherId); + if (newName != null && !newName.isEmpty()) { + teacher.setName(newName); + } + if (newSalary >= 0) { + teacher.setSalary(newSalary); + } + } -} + public void deleteTeacher(String teacherId) { + if (teacherId == null) { + throw new IllegalArgumentException("Teacher ID cannot be null"); + } + if (!teacherMap.containsKey(teacherId)) { + throw new IllegalArgumentException("Teacher not found with ID: " + teacherId); + } + teacherMap.remove(teacherId); + } +} \ No newline at end of file From e74de7e1ae1be7603b36fda1d3992d86353939e6 Mon Sep 17 00:00:00 2001 From: kenanqafarov Date: Fri, 6 Mar 2026 15:51:08 +0400 Subject: [PATCH 09/19] Kenan commited all main to globa repo --- src/main/java/com/example/demo/services/CourseService.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/com/example/demo/services/CourseService.java b/src/main/java/com/example/demo/services/CourseService.java index 41f936f2..aee1f97b 100644 --- a/src/main/java/com/example/demo/services/CourseService.java +++ b/src/main/java/com/example/demo/services/CourseService.java @@ -11,6 +11,7 @@ import java.util.Map; import java.util.UUID; +//sdgsdg @Service public class CourseService { From 7d80be016f67d7ef11b6a04d568b38e4001b0958 Mon Sep 17 00:00:00 2001 From: Revan Date: Fri, 6 Mar 2026 15:52:35 +0400 Subject: [PATCH 10/19] prepull --- .../java/com/example/demo/models/Course.java | 2 +- .../example/demo/services/StudentService.java | 20 +++++++++++++++++++ 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/example/demo/models/Course.java b/src/main/java/com/example/demo/models/Course.java index f8a93bab..4618b729 100644 --- a/src/main/java/com/example/demo/models/Course.java +++ b/src/main/java/com/example/demo/models/Course.java @@ -6,7 +6,7 @@ public class Course { private String courseId; private String name; private double price; -private double money_earned; +private double money_earned; @Nullable private Teacher teacher; diff --git a/src/main/java/com/example/demo/services/StudentService.java b/src/main/java/com/example/demo/services/StudentService.java index 9c89021c..7d35ca41 100644 --- a/src/main/java/com/example/demo/services/StudentService.java +++ b/src/main/java/com/example/demo/services/StudentService.java @@ -1,4 +1,24 @@ package com.example.demo.services; +import com.example.demo.models.Student; +import com.example.demo.models.Teacher; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.List; + +@Service public class StudentService { +private final List students=new ArrayList<>(); + +public Student createStudent(String name, String address, String email){ + Student student=new Student(name, address, email); + students.add(student); + return student; +} +public ListgetAllstudents(Student student){ + return students; +} + + } From 54250bf3556318005e3bff92769ba775cef3fad0 Mon Sep 17 00:00:00 2001 From: Revan Date: Sat, 7 Mar 2026 16:19:47 +0400 Subject: [PATCH 11/19] my work is done --- pom.xml | 5 +- .../Exceptions/CourseNotFoundException.java | 7 +++ .../Exceptions/InvalidInputException.java | 7 +++ .../StudentAlreadyEnrolledException.java | 7 +++ .../Exceptions/StudentNotFoundException.java | 7 +++ .../Exceptions/TeacherNotFoundException.java | 8 +++ .../demo/controllers/CourseController.java | 53 ++++++++++++++++ .../demo/controllers/StudentController.java | 63 +++++++++++++++++++ .../demo/controllers/TeacherController.java | 60 ++++++++++++++++++ .../java/com/example/demo/models/Course.java | 5 ++ 10 files changed, 221 insertions(+), 1 deletion(-) create mode 100644 src/main/java/com/example/demo/Exceptions/CourseNotFoundException.java create mode 100644 src/main/java/com/example/demo/Exceptions/InvalidInputException.java create mode 100644 src/main/java/com/example/demo/Exceptions/StudentAlreadyEnrolledException.java create mode 100644 src/main/java/com/example/demo/Exceptions/StudentNotFoundException.java create mode 100644 src/main/java/com/example/demo/Exceptions/TeacherNotFoundException.java diff --git a/pom.xml b/pom.xml index 5509de8c..9bce8acd 100644 --- a/pom.xml +++ b/pom.xml @@ -34,7 +34,10 @@ org.springframework.boot spring-boot-starter-webmvc - + + org.springframework.boot + spring-boot-starter-validation + org.springframework.boot spring-boot-devtools diff --git a/src/main/java/com/example/demo/Exceptions/CourseNotFoundException.java b/src/main/java/com/example/demo/Exceptions/CourseNotFoundException.java new file mode 100644 index 00000000..4e180414 --- /dev/null +++ b/src/main/java/com/example/demo/Exceptions/CourseNotFoundException.java @@ -0,0 +1,7 @@ +package com.example.demo.Exceptions; + +public class CourseNotFoundException extends RuntimeException { + public CourseNotFoundException(String message) { + super(message); + } +} diff --git a/src/main/java/com/example/demo/Exceptions/InvalidInputException.java b/src/main/java/com/example/demo/Exceptions/InvalidInputException.java new file mode 100644 index 00000000..d8e53788 --- /dev/null +++ b/src/main/java/com/example/demo/Exceptions/InvalidInputException.java @@ -0,0 +1,7 @@ +package com.example.demo.Exceptions; + +public class InvalidInputException extends RuntimeException { + public InvalidInputException(String message) { + super(message); + } +} diff --git a/src/main/java/com/example/demo/Exceptions/StudentAlreadyEnrolledException.java b/src/main/java/com/example/demo/Exceptions/StudentAlreadyEnrolledException.java new file mode 100644 index 00000000..d92889f2 --- /dev/null +++ b/src/main/java/com/example/demo/Exceptions/StudentAlreadyEnrolledException.java @@ -0,0 +1,7 @@ +package com.example.demo.Exceptions; + +public class StudentAlreadyEnrolledException extends RuntimeException { + public StudentAlreadyEnrolledException(String message) { + super(message); + } +} diff --git a/src/main/java/com/example/demo/Exceptions/StudentNotFoundException.java b/src/main/java/com/example/demo/Exceptions/StudentNotFoundException.java new file mode 100644 index 00000000..3a637e14 --- /dev/null +++ b/src/main/java/com/example/demo/Exceptions/StudentNotFoundException.java @@ -0,0 +1,7 @@ +package com.example.demo.Exceptions; + +public class StudentNotFoundException extends RuntimeException { + public StudentNotFoundException(String message) { + super(message); + } +} diff --git a/src/main/java/com/example/demo/Exceptions/TeacherNotFoundException.java b/src/main/java/com/example/demo/Exceptions/TeacherNotFoundException.java new file mode 100644 index 00000000..0491f086 --- /dev/null +++ b/src/main/java/com/example/demo/Exceptions/TeacherNotFoundException.java @@ -0,0 +1,8 @@ +package com.example.demo.Exceptions; + +public class TeacherNotFoundException extends RuntimeException { + + public TeacherNotFoundException(String message) { + super(message); + } +} diff --git a/src/main/java/com/example/demo/controllers/CourseController.java b/src/main/java/com/example/demo/controllers/CourseController.java index c941d4c1..98fb26bc 100644 --- a/src/main/java/com/example/demo/controllers/CourseController.java +++ b/src/main/java/com/example/demo/controllers/CourseController.java @@ -1,4 +1,57 @@ package com.example.demo.controllers; +import com.example.demo.models.Course; +import com.example.demo.services.CourseService; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +@RestController +@RequestMapping("/courses") public class CourseController { +private final CourseService courseService; + + + public CourseController(CourseService courseService) { + this.courseService = courseService; + } + + @GetMapping + public ResponseEntity>getAllCourses(){ + List allCourses=courseService.getAllCourses(); + return ResponseEntity.ok(allCourses); + } + + @PostMapping + public ResponseEntity createCourse(@RequestBody Course course){ + Course newone= courseService.createCourse(course.getName(), course.getPrice()); +return ResponseEntity.ok(newone); + } +@GetMapping("/{courseId}") + public ResponseEntity getCourseById(@PathVariable String courseId){ + Course kursId=courseService.getCourseById(courseId); + return ResponseEntity.ok(kursId); +} +@PutMapping("/{courseId}") + public ResponseEntityuptadeCourse(@PathVariable String courseId,@RequestParam String newName,@RequestParam double newPrice){ + courseService.updateCourse(courseId,newName,newPrice); +return ResponseEntity.ok().build(); + } +@DeleteMapping("/{courseId}") + public ResponseEntity deleteCourse(@PathVariable String courseID){ + courseService.deleteCourse(courseID); + return ResponseEntity.ok().build(); +} +@PostMapping("/{courseId}/assign-teacher/{teacherId}") + public ResponseEntityassignTeacherToCourse(@PathVariable String courseId, @PathVariable String teacherId){ + courseService.assignTeacherToCourse(courseId,teacherId); +return ResponseEntity.ok().build(); + } +@GetMapping("/teacher/{teacherId}") + public ResponseEntity> getCocursesByTeacher(@PathVariable String teacherId){ + List teachers=courseService.getCoursesByTeacher(teacherId); +return ResponseEntity.ok(teachers); + } + } diff --git a/src/main/java/com/example/demo/controllers/StudentController.java b/src/main/java/com/example/demo/controllers/StudentController.java index 040fcec3..2b2a7569 100644 --- a/src/main/java/com/example/demo/controllers/StudentController.java +++ b/src/main/java/com/example/demo/controllers/StudentController.java @@ -1,4 +1,67 @@ package com.example.demo.controllers; +import com.example.demo.models.Course; +import com.example.demo.models.Student; +import com.example.demo.services.StudentService; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +@RestController +@RequestMapping("/students") public class StudentController { + private final StudentService studentService; + + + public StudentController(StudentService studentService) { + this.studentService = studentService; + } + + @PostMapping + public ResponseEntity createStudent(@RequestBody String name, String address, String email) { + Student newStudent = studentService.createStudent(name, address, email); + return ResponseEntity.ok(newStudent); + } +@GetMapping("/{studentId}") + public ResponseEntitygetStudentById(@PathVariable String studentId){ + Student studentById=studentService.getStudentById(studentId); + return ResponseEntity.ok(studentById); +} + @PutMapping("/{courseId}") + public ResponseEntityupdateStudent(@RequestBody String studentId, String newName, String newAddress, String newEmail){ + studentService.updateStudent(studentId, newName, newAddress, newEmail); +return ResponseEntity.ok().build(); + } + @DeleteMapping("/{studentId}") + public ResponseEntitydeleteStudent(@PathVariable String studentId) { + studentService.deleteStudent(studentId); + return ResponseEntity.ok().build(); + } + @PostMapping("/{studentId}/courses/{courseId}") + public ResponseEntityenrollStudentInCourse(@PathVariable String studentId,@PathVariable String courseId) { + studentService.enrollStudentInCourse(studentId,courseId); + return ResponseEntity.ok().build(); + } + @DeleteMapping("/{studentId}/course") + public ResponseEntityunenrollStudentFromCourse(@PathVariable String studentId){ + studentService.unenrollStudentFromCourse(studentId); + return ResponseEntity.ok().build(); + + } + @GetMapping("/{courseId}/students") + public ResponseEntity>getEnrolledStudents(String courseId) { + List studentEnrolled=studentService.getEnrolledStudents(courseId); + return ResponseEntity.ok(studentEnrolled); + } + @GetMapping("/{studentId}/course") + public ResponseEntitygetCourseForStudent(String studentId) { + Course courseForStuden=studentService.getCourseForStudent(studentId); + return ResponseEntity.ok(courseForStuden); + } + + + + + } diff --git a/src/main/java/com/example/demo/controllers/TeacherController.java b/src/main/java/com/example/demo/controllers/TeacherController.java index 7cb7c1e9..a3bbf84e 100644 --- a/src/main/java/com/example/demo/controllers/TeacherController.java +++ b/src/main/java/com/example/demo/controllers/TeacherController.java @@ -1,4 +1,64 @@ package com.example.demo.controllers; +import com.example.demo.models.Teacher; +import com.example.demo.services.TeacherService; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +@RestController +@RequestMapping("/teachers") public class TeacherController { + private final TeacherService teacherService; + + + public TeacherController(TeacherService teacherService) { + this.teacherService = teacherService; + } + @PostMapping + public ResponseEntity createTeacher(@RequestBody Teacher teacher) { + Teacher createdTeacher = teacherService.createTeacher(teacher.getName(), teacher.getSalary()); + return ResponseEntity.ok(createdTeacher); + } + + @GetMapping("/{teacherId}") + public ResponseEntity getTeacherById(@PathVariable String teacherId) { + Teacher teacher = teacherService.getTeacherById(teacherId); + return ResponseEntity.ok(teacher); + } + + @GetMapping + public ResponseEntity> getAllTeachers() { + List teachers = teacherService.getAllTeachers(); + return ResponseEntity.ok(teachers); + } + + @PutMapping("/{teacherId}") + public ResponseEntity updateTeacher(@PathVariable String teacherId, + @RequestBody Teacher teacher) { + teacherService.updateTeacher(teacherId, teacher.getName(), teacher.getSalary()); + return ResponseEntity.ok().build(); + } + + @DeleteMapping("/{teacherId}") + public ResponseEntity deleteTeacher(@PathVariable String teacherId) { + teacherService.deleteTeacher(teacherId); + return ResponseEntity.ok().build(); + } + + + + + + + + + + + + + + + } diff --git a/src/main/java/com/example/demo/models/Course.java b/src/main/java/com/example/demo/models/Course.java index 498b9add..b04adb1a 100644 --- a/src/main/java/com/example/demo/models/Course.java +++ b/src/main/java/com/example/demo/models/Course.java @@ -1,10 +1,14 @@ package com.example.demo.models; import jakarta.annotation.Nullable; +import jakarta.validation.Valid; +import jakarta.validation.constraints.Positive; public class Course { + @Valid private String courseId; private String name; +@Positive private double price; private double money_earned; @Nullable @@ -14,6 +18,7 @@ public class Course { public Course(String name, double price) { this.price = price; this.name=name; + this.money_earned=0; } @Nullable public Teacher getTeacher() { From e4810a647bf86739fe75dbc01388ff0c4e1d6c61 Mon Sep 17 00:00:00 2001 From: kenanqafarov Date: Wed, 11 Mar 2026 00:15:40 +0400 Subject: [PATCH 12/19] All done --- README.md | 108 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 108 insertions(+) create mode 100644 README.md diff --git a/README.md b/README.md new file mode 100644 index 00000000..1d3c661a --- /dev/null +++ b/README.md @@ -0,0 +1,108 @@ +![logo_ironhack_blue 7](https://user-images.githubusercontent.com/23629340/40541063-a07a0a8a-601a-11e8-91b5-2f13e4e6b441.png) + +# HW | Java IronSchool (Unit 2 homework) + +## Introduction + +For this homework, you will be building a School Management System, that will help manage students, teachers and courses with some basic functionalities. + +## Instructions + +Let's walk through the details of the homework: + +### Classes + +Three main classes are necessary to complete this homework: **Teacher**, **Student** and **Course**. + +
+ +**Teacher class** + +This class will have: + +- Variable called `teacherId` of data type `string`, auto-generated (Private member) +- Variable called `name` of data type `string` (Private member) +- Variable called `salary` of data type `double`, representing the salary of the teacher (Private member) +- A parameterized constructor that takes `name` and `salary` +- Public Getter functions to access these variables +- Public Setter functions to change these variables +- Optional attributes are accepted if needed based on the code structure + +
+ +**Course class** + +This class will have: + +- Variable called `courseId` of data type `string`, auto-generated (Private member) +- Variable called `name` of data type `string` (Private member) +- Variable called `price` of data type `double`, representing the price of this course (Private member) +- Variable called `money_earned` of data type `double`, representing the total money earned by this course (Private member) +- Nullable variable called `teacher` of data type `Teacher` (Private member) +- A parameterized constructor that takes `name` and `price` +- Public Getter functions to access these variables +- Public Setter functions to change these variables +- Optional attributes are accepted if needed based on the code structure + +
+ +**Student class** + +This class will have: + +- Variable called `studentId` of data type `string`, auto-generated (Private member) +- Variable called `name` of data type `string` (Private member) +- Variable called `address` of data type `string` (Private member) +- Variable called `email` of data type `string` (Private member) +- Nullable variable called `course` of data type `Course`, representing the course this student is enrolled into (Private member) +- A parameterized constructor that takes `name`, `address` and `email` +- Public Getter functions to access these variables +- Public Setter functions to change these variables +- Optional attributes are accepted if needed based on the code structure + +## How the application works + +1. The application starts by asking the user for a name for the school +2. Next, the user is asked for a number of how many teachers should be created +3. Next, the user is prompted to enter the details of each teacher (based on the number chosen above) +4. Next, the user is asked for the number of courses to be created (Do not specify the teacher yet, there is a command for it) +5. Next, the user is prompted to enter details of each course based on the number chosen above +6. Next, the user is asked for the number of students to be created (Do not specify the course yet, there is a command for it) +7. Next, the user is prompted to enter details of each student based on the number chosen above +8. Next, the user is now prompted to enter any command of the list below to execute a specified action in the system. + +The IDs should be automatically generated. + +## Commands + +- **ENROLL** **[STUDENT_ID] [COURSE_ID]**: This command will help enroll the student specified in the corresponding course. While also updating the `money_earned` of that course based on its price +- **ASSIGN** **[TEACHER_ID] [COURSE_ID]**: This command will help assign the teacher specified to the corresponding course +- **SHOW COURSES**: This command will display a list of all courses +- **LOOKUP COURSE** **[COURSE_ID]**: This command will display the full details of the specified course +- **SHOW STUDENTS**: This command will display a list of all students +- **LOOKUP STUDENT** **[STUDENT_ID]**: This command will display the full details of the specified student +- **SHOW TEACHERS**: This command will display a list of all teachers +- **LOOKUP TEACHER** **[TEACHER_ID]**: This command will display the full details of the specified teacher +- **SHOW PROFIT**: This command will calculate **(The total money earned from all courses)** - **(The sum of all the teachers' salaries)** and return the result + +## Requirements + +For this project you must accomplish all of the following: + +1. Navigate through a text-based menu using Standard Input and Output. +2. Create unit tests for every method other than basic getters, setters and constructors (getters and setters with logic do require unit tests). +3. Handle all exceptions gracefully (incorrect input should not crash the program). +4. Create Teachers, Courses and Students specifying their full details. +5. Handle receiving commands in the Standard Input that corresponds to actual actions in the system. + +### Bonus + +1. Add more commands that can help display more information such as (**SHOW STUDENTS** **[COURSE_ID]**, **SHOW MONEY EARNED**, **SHOW MONEY SPENT**, etc.) + +## Important Notes + +- Everyone in the squad should contribute equally to the project in time and lines of code written. +- All code must be reviewed before it is merged into the `master` branch. +- All squad members must participate in code review. +- Every repository should have a README file with clear instructions, demo files, or any documentation needed so other teams don't have problems with the review. +- This is intended to be a challenging assignment. You will have to rely heavily on your teammates and independent research. Learning independently is a hallmark of a good developer and our job is to turn you into good developers. This process may be frustrating but you will learn a ton! \ No newline at end of file From 764f76d4a6fdd0658b15f5ed7f33f636f136c05f Mon Sep 17 00:00:00 2001 From: kenanqafarov Date: Wed, 11 Mar 2026 00:18:04 +0400 Subject: [PATCH 13/19] All done --- .../com/example/demo/Exceptions/CourseNotFoundException.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/example/demo/Exceptions/CourseNotFoundException.java b/src/main/java/com/example/demo/Exceptions/CourseNotFoundException.java index 4e180414..9a5dda74 100644 --- a/src/main/java/com/example/demo/Exceptions/CourseNotFoundException.java +++ b/src/main/java/com/example/demo/Exceptions/CourseNotFoundException.java @@ -1,5 +1,5 @@ package com.example.demo.Exceptions; - +// dsgsd public class CourseNotFoundException extends RuntimeException { public CourseNotFoundException(String message) { super(message); From 4276c689c8bee9a5b5320df8871bd10eb13c3138 Mon Sep 17 00:00:00 2001 From: kenanqafarov Date: Wed, 11 Mar 2026 00:18:10 +0400 Subject: [PATCH 14/19] All done --- .../com/example/demo/Exceptions/CourseNotFoundException.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/java/com/example/demo/Exceptions/CourseNotFoundException.java b/src/main/java/com/example/demo/Exceptions/CourseNotFoundException.java index 9a5dda74..59623f54 100644 --- a/src/main/java/com/example/demo/Exceptions/CourseNotFoundException.java +++ b/src/main/java/com/example/demo/Exceptions/CourseNotFoundException.java @@ -1,5 +1,4 @@ package com.example.demo.Exceptions; -// dsgsd public class CourseNotFoundException extends RuntimeException { public CourseNotFoundException(String message) { super(message); From 83d040129dfae942e5bad5e55d9205c97df54a1e Mon Sep 17 00:00:00 2001 From: kenanqafarov Date: Wed, 11 Mar 2026 00:19:14 +0400 Subject: [PATCH 15/19] All done --- .../com/example/demo/Exceptions/CourseNotFoundException.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/com/example/demo/Exceptions/CourseNotFoundException.java b/src/main/java/com/example/demo/Exceptions/CourseNotFoundException.java index 59623f54..21e92d53 100644 --- a/src/main/java/com/example/demo/Exceptions/CourseNotFoundException.java +++ b/src/main/java/com/example/demo/Exceptions/CourseNotFoundException.java @@ -1,4 +1,5 @@ package com.example.demo.Exceptions; +// public class CourseNotFoundException extends RuntimeException { public CourseNotFoundException(String message) { super(message); From bdc43b4cd2f70bbe0e790150c8b3c95fa3301b5d Mon Sep 17 00:00:00 2001 From: kenanqafarov Date: Wed, 11 Mar 2026 00:24:07 +0400 Subject: [PATCH 16/19] All done --- .git copy/COMMIT_EDITMSG | 1 + .git copy/FETCH_HEAD | 3 + .git copy/HEAD | 1 + .git copy/ORIG_HEAD | 1 + .git copy/config | 16 ++ .git copy/description | 1 + .git copy/hooks/applypatch-msg.sample | 15 ++ .git copy/hooks/commit-msg.sample | 24 +++ .git copy/hooks/fsmonitor-watchman.sample | 174 ++++++++++++++++++ .git copy/hooks/post-update.sample | 8 + .git copy/hooks/pre-applypatch.sample | 14 ++ .git copy/hooks/pre-commit.sample | 49 +++++ .git copy/hooks/pre-merge-commit.sample | 13 ++ .git copy/hooks/pre-push.sample | 53 ++++++ .git copy/hooks/pre-rebase.sample | 169 +++++++++++++++++ .git copy/hooks/pre-receive.sample | 24 +++ .git copy/hooks/prepare-commit-msg.sample | 42 +++++ .git copy/hooks/push-to-checkout.sample | 78 ++++++++ .git copy/hooks/sendemail-validate.sample | 77 ++++++++ .git copy/hooks/update.sample | 128 +++++++++++++ .git copy/index | Bin 0 -> 3256 bytes .git copy/info/exclude | 6 + .git copy/logs/HEAD | 17 ++ .git copy/logs/refs/heads/main | 6 + .git copy/logs/refs/heads/revan-dev | 5 + .git copy/logs/refs/remotes/origin/HEAD | 1 + .git copy/logs/refs/remotes/origin/kenan-dev | 2 + .git copy/logs/refs/remotes/origin/main | 4 + .git copy/logs/refs/remotes/origin/revan-dev | 2 + .../02/67b93cefd2f812ae77f40cec511fd5d6b2d780 | Bin 0 -> 234 bytes .../02/7f41581bcf393cfa43e9cce3f3d95bc0412ded | Bin 0 -> 79 bytes .../02/afc96de49e4fec2e069b859ac162efbed90bbf | Bin 0 -> 157 bytes .../02/fc9f317f42fa61f506570a4888785f02ec78d3 | Bin 0 -> 46 bytes .../03/d8bbff78d73c5865ee892eef6c39c8e8fa9c4d | Bin 0 -> 45 bytes .../04/91f086ef1a6cbb415a1f1e077f0b2fdcf825a0 | 1 + .../0e/d4199447be1f18799f9f4f76c7ec6765eb3503 | Bin 0 -> 49 bytes .../0e/f93a0ec2e724495981f1952185da98f724b3cf | Bin 0 -> 74 bytes .../10/195d11ca235288142915e2a70b6d4b77adb861 | Bin 0 -> 74 bytes .../10/4317dc26118e5bfb62845e713637292bf33736 | Bin 0 -> 165 bytes .../10/bfe35595ad93015fd430ce74b45548f82fd0b5 | Bin 0 -> 234 bytes .../13/c7d95fc7166494b29cca06fbf16184e28806c9 | Bin 0 -> 74 bytes .../14/ba021a983b2d466855e7401737df3dd988df8c | Bin 0 -> 46 bytes .../17/76a70ad286b6684b13512801ddbfa9dc90f3bb | Bin 0 -> 45 bytes .../1a/391d331f0dff9fa72bd7ba73d0eb8c0f3ace44 | Bin 0 -> 46 bytes .../1b/630250153279765c569eb004a1194106fc053d | Bin 0 -> 45 bytes .../1b/9477616dfa5c6b8f43e05f3eb711d187ab9a96 | Bin 0 -> 138 bytes .../1c/fc5e769067749ec38adc0bc65fbf2490b4cc48 | Bin 0 -> 45 bytes .../1f/0c855308c7246201ffa689eb4c635ebe60a14c | Bin 0 -> 45 bytes .../1f/652969d7369b984ef912b2676faffebf6b5c0b | Bin 0 -> 165 bytes .../26/bdf9cc34037fd0d1f3d54ea4131680f023c129 | Bin 0 -> 234 bytes .../27/f54a60c0e2bb15b951be7c1862c2148b84c71c | Bin 0 -> 45 bytes .../28/019126b7b6e56353b00135f2855b000a205034 | Bin 0 -> 120 bytes .../2a/833a13ee965d91d6d62dcf66824e1f97af95af | Bin 0 -> 366 bytes .../2b/2a7569ae59536df7db356a445f4221a89daf89 | Bin 0 -> 717 bytes .../2b/ffb79f07f31727d8725dd7e8d5efd2f6d5ce8c | Bin 0 -> 74 bytes .../2c/0a7f7563ae882eaab072f3e71506fb5e75c054 | 3 + .../2d/4763ff9c9e2b07d223adb7f66cd17e4f7c91a2 | Bin 0 -> 166 bytes .../2e/1e08f4a91e1c71381b4bb880e0b0c79190712a | Bin 0 -> 128 bytes .../2e/d2a724b6b8193fa011365afd3be19046c235a5 | 2 + .../32/2abf802b34f3de71d618514f508845b02c31f5 | Bin 0 -> 121 bytes .../33/04bfb5f96d12dc3dbb8fcb764ecd4e45df0a1f | Bin 0 -> 74 bytes .../33/1f2a7a69e8bf358ed27f930dec3d228539bfa4 | Bin 0 -> 120 bytes .../34/e8d1672955726d9f14874d00dcce27e3bdd87f | Bin 0 -> 1182 bytes .../35/7562cfc9988fbaf48f61a6400584831322c811 | Bin 0 -> 74 bytes .../35/a060d4b8bde7e23cbc2adabc56f62c34301b61 | Bin 0 -> 50 bytes .../36/1e6046933d28dbc982ab43662dd5ff58830a0b | Bin 0 -> 79 bytes .../39/8646f243459fd5af14c77bba2312478b18c442 | Bin 0 -> 1323 bytes .../3a/637e14162b36bbb268b93e508b7f6b48e87d95 | 2 + .../3a/95758593d2f99a0704c626938277d74b88b6ea | Bin 0 -> 46 bytes .../3d/e6654902d1761008255c4f94b1d53fb662cfdc | Bin 0 -> 166 bytes .../3e/5440405f63b60b4cd9d84830a7023f6469dc8b | Bin 0 -> 234 bytes .../3e/dfbb76224aa31ad6d8183732eca22fbfe91792 | Bin 0 -> 49 bytes .../40/7ae78b7438456c09a340221c934b03473f5b8b | Bin 0 -> 46 bytes .../40/b297dc13a9295f31775fa38364e6e30b645393 | Bin 0 -> 166 bytes .../41/f7c86360ab6f9b34b2bccb543400ffd33a7025 | Bin 0 -> 132 bytes .../41/f936f209b829b34c5041c7466d48cec802e767 | Bin 0 -> 938 bytes .../42/76b49c831013d1371affb88fda9f60c347a35a | Bin 0 -> 46 bytes .../42/e93a26e2caa3b0af3cca788ef606bb34a9204f | Bin 0 -> 45 bytes .../43/bca3363d3f2e38739f7e3bfb9408f22164d712 | Bin 0 -> 79 bytes .../44/4cb17b5dec5688a94067361721398ff241c3b6 | Bin 0 -> 80 bytes .../45/ce9b702fa090b9f158fdb02956161c6280478b | Bin 0 -> 80 bytes .../46/18b729a52a797d792cdd3af91b1365dbcb976d | Bin 0 -> 362 bytes .../46/45774cfcc31901211d0ed4967977970f603687 | Bin 0 -> 166 bytes .../49/8b9add69b0d714278bd162f7c725a417e78f3e | 1 + .../4a/4a03037e1d567ded162343251bebbe67547cc6 | Bin 0 -> 46 bytes .../4b/881306a3cb3db3cf83a448a76aae017e7d9487 | Bin 0 -> 79 bytes .../4c/79cc7259d27e2b39a079046777a48013a9b654 | Bin 0 -> 74 bytes .../4d/231f7c92e52d71357f39257fa46ebb50c80cbd | 1 + .../4e/1804142de9aa6ea446c66f4fcb6946cddabf2d | Bin 0 -> 139 bytes .../4e/54ad96c79388910261b28f772d1bf701a0c3fe | 1 + .../50/1bf8144a1381f5287653f1e7e1ef62ff239660 | Bin 0 -> 234 bytes .../54/250bf3556318005e3bff92769ba775cef3fad0 | Bin 0 -> 163 bytes .../54/dac8ed6bcfbe7f99cc6b4d543a3890240edd77 | Bin 0 -> 47 bytes .../58/2f643823c14a222fdd951617e6ffbf07f58e73 | 1 + .../59/60500bbe94d36f259e35684e434e66c72829a3 | Bin 0 -> 45 bytes .../5a/04ad9c0af398e73baac0250d223b7e3e774470 | Bin 0 -> 74 bytes .../5c/6761c09c63ee1cab26c1f5f96f4e63c69a6e47 | Bin 0 -> 128 bytes .../5e/5c4f89938dc948ddff5a384ae9e587cd10ee15 | Bin 0 -> 166 bytes .../60/01f4773c082801314dd22c9cdbdbd327381ebf | Bin 0 -> 45 bytes .../62/1780064eec96be4ec20d7c89c20d1b5757cb7c | 2 + .../62/82a43e1376e1b4a498ff1fd2f5c547e4bf5960 | Bin 0 -> 46 bytes .../62/84c6dc7e23db29b9d48777118d72cf5527bb31 | Bin 0 -> 49 bytes .../62/c3c16857d66c82218ff6e6ce22e4ac6423a02c | Bin 0 -> 121 bytes .../62/eef4ce33c4c04fd9b695a8d317f13c9740ff81 | Bin 0 -> 45 bytes .../63/37a8f81a512b91d30fe70b332484959529df79 | Bin 0 -> 234 bytes .../67/185633246135b15c18a71d15cc58ea41cb01a2 | 3 + .../6a/5ef5148a9fb43d9c2ca8c118b6a89f693baf2d | Bin 0 -> 166 bytes .../6b/163f8647162303e36736c1aa2e0d92f1d3496b | Bin 0 -> 45 bytes .../6b/170c5d2d44a84a9e8212505fb2977736d6b3c6 | Bin 0 -> 165 bytes .../6c/a970f0ce8154dd012f9e1f734fe648ef9006b7 | Bin 0 -> 45 bytes .../6e/6314b9a8ae911ae8f6834d83ed4e7be12a39b1 | 4 + .../6e/fb080e3d0544517a62c1bffa3ebdeef8a0cdc1 | Bin 0 -> 49 bytes .../7d/35ca41128c21250712136c2d32c51115f5f678 | 2 + .../7d/4dd6ae6f1430a1c57110b75ceee614c8852bf4 | Bin 0 -> 74 bytes .../7d/80be016f67d7ef11b6a04d568b38e4001b0958 | 2 + .../7d/ecf2639976283ad82781c6e5e5d1c6e10b1bfb | Bin 0 -> 234 bytes .../7e/fcd01cd06b56dd5b4d5bd101f0aa8d1800638f | Bin 0 -> 49 bytes .../7f/8394e0f01f317220e588ef1ef40c216f3e5cb6 | Bin 0 -> 135 bytes .../88/02bc1f59f9c60b1966d8924ae6003b81b349cd | Bin 0 -> 46 bytes .../8a/d6fbabfba0c8248068476741e577d07379f26f | Bin 0 -> 50 bytes .../8e/2f9832d06855c029e78fdeb4cc051ae7004b17 | Bin 0 -> 121 bytes .../94/438acd21ae4c3a74eafa68082b0278bca6f905 | Bin 0 -> 128 bytes .../94/d454ff64ed1de07d81cb3500b0bce4b2601de1 | Bin 0 -> 122 bytes .../95/c9485152d9a8dbf67b80af3c25c105bfee19bd | Bin 0 -> 122 bytes .../96/ae261be8cab8322607736fb51f410c4987d1c3 | Bin 0 -> 80 bytes .../98/fb26bc79ff73c5b36baac976cd0641f71fbe1f | Bin 0 -> 664 bytes .../9b/1fc70ab3fdf983c52a2c3dd7ce352d70108c44 | Bin 0 -> 185 bytes .../9b/735e27f881fcaa3789e34fed334c429897aab5 | Bin 0 -> 74 bytes .../9b/ce8acd9d580b27bc20542ce0ceb40a80d13987 | Bin 0 -> 612 bytes .../a1/4a94fc9dcbace11868ba6ac8035827a674decd | Bin 0 -> 79 bytes .../a1/5cf0fbd99b04d707ea5deaa0667a60072a3525 | Bin 0 -> 121 bytes .../a3/52bed62941fb05b7e9275455bcc84dc3ef4e65 | Bin 0 -> 46 bytes .../a3/bbf84eb5fdff49e840ab1a13aaa1da0f921983 | Bin 0 -> 530 bytes .../a5/265af3dffc3cabbb421e9ac62c7252821cf76c | Bin 0 -> 74 bytes .../a5/79dba911ec8794b340254a5c07192827844e3a | Bin 0 -> 74 bytes .../a5/7da0e100254b976ceb772a8f8a7b7c05a40f87 | Bin 0 -> 80 bytes .../a8/d7d32b92d7f1bf0f5a10d75c4abdaacc45e1ba | Bin 0 -> 157 bytes .../a9/cac2e46b68ca0af6218a87e8f4cbf0970701a4 | Bin 0 -> 166 bytes .../aa/6164f0bb3f20e0e1d5de7c8bf66c099bfc7b08 | Bin 0 -> 46 bytes .../ab/519601bad2abff94d1c0b4bdd9ffa1e9e1fcfc | Bin 0 -> 49 bytes .../ae/e1f97b9aa36526816a9a430e67db56868b4032 | 6 + .../b0/4adb1a59e151dd67748487ed74f4b09ef9c4cd | Bin 0 -> 414 bytes .../b1/fae454aad73e2d340d3666cec62b64a08704f9 | Bin 0 -> 198 bytes .../b2/431feacbb75cdb56a652f3360052a3acdb5df7 | Bin 0 -> 121 bytes .../b2/95a3f2a6434dcce0bbf2be525d954f274db801 | Bin 0 -> 121 bytes .../b3/4e4243652728c7acc2f34b6923849ffdfc6346 | 2 + .../b4/d487dc3548afe4920fb24316838f682959d99b | Bin 0 -> 74 bytes .../b6/97d3465890103d15eeefaedb2024a9df576de2 | 1 + .../ba/4c7bd69820fbd9003ac1730930de02adfb3803 | Bin 0 -> 1978 bytes .../be/16fa5bc21e4fbc579a8be0e47c4ba64cc17514 | 2 + .../be/b09d2c180bec7b940011a887ec35c1ccf60fde | Bin 0 -> 234 bytes .../bf/30b47dd0d5d6393384ce077b993d8ce96c6ab6 | Bin 0 -> 49 bytes .../c3/620d7e46ab42fd1535a18d7cbaefc6444513b0 | Bin 0 -> 81 bytes .../c5/56e37b274e278d6264571320e2c58ae4f95222 | Bin 0 -> 128 bytes .../c6/91bc5536f3c6d6555f8b0e4d74817d047d4e85 | Bin 0 -> 650 bytes .../c7/58513be7b7063e058be587b8ee2f3c409c3e2c | Bin 0 -> 79 bytes .../c8/3cc084f1f68ebd9699793a988474cb64dcb40e | Bin 0 -> 74 bytes .../cc/112f124f8bdebf8a8a7c7250b0330fff62d7b0 | Bin 0 -> 46 bytes .../ce/2001083c051b958aa1a4de277c82b99a2bb213 | Bin 0 -> 46 bytes .../ce/970b6576fd51a7359677920572724257c824cf | Bin 0 -> 234 bytes .../cf/511031370b8b3bbe30d905ab2a91a5786aef91 | Bin 0 -> 234 bytes .../cf/b6e575e1796c7eec0bbc568b7df0c8e62099ef | Bin 0 -> 79 bytes .../d1/fb0d886c44ce62fa169d1b2909a9398e84700f | Bin 0 -> 128 bytes .../d2/95e68a369a0bb2330435f97f291c1916fea3a0 | Bin 0 -> 49 bytes .../d3/348671444711685a386ee75ddaca129ced00be | Bin 0 -> 49 bytes .../d4/eb948bb03f3f9805358f0724e239e9228a88b5 | Bin 0 -> 234 bytes .../d6/d3548f52d68a6dc1ab4cd10980d8c42951623b | Bin 0 -> 74 bytes .../d7/11a0f9bce94ce749752e2304134d097ad5ecb5 | Bin 0 -> 80 bytes .../d7/44156af1b258be1ad507cc87238d9606581d8b | Bin 0 -> 76 bytes .../d8/73b5dd24e00d3b400438e18907a1e8cc790062 | Bin 0 -> 49 bytes .../d8/e5378836e129a697fbb44a1b6dbf06dee97aa3 | 3 + .../d9/2889f28db14ae497f8983ff7f8bc31a089e96a | 1 + .../d9/d206914e101f3a2a6ae209dfc40c800df899fb | Bin 0 -> 166 bytes .../da/50f00ab691b4990d1e69895113255906630b6e | 2 + .../db/f694527bc1d50a752f5c159e6dc0e9446b39c9 | Bin 0 -> 215 bytes .../e0/3d43c3f8bfdf91a49a8dd67b7f5814965e5887 | 1 + .../e1/6ed0c478ac036b584748731a0f19f0becaf70c | Bin 0 -> 79 bytes .../e3/0297abdc52bf9965363634367d4cbb190db9d6 | Bin 0 -> 234 bytes .../e3/1ed9a56ef8abc73f927b3933bb789d51040a01 | Bin 0 -> 49 bytes .../e3/a73ec1f3c897a1bbbcaa8598665e0fc9822360 | Bin 0 -> 80 bytes .../e4/f4865a18509b07eea278289a7f1b011ed9f7e5 | Bin 0 -> 49 bytes .../e6/4d56dd5fcdef0a6c174aeaf033f6010b69ca40 | Bin 0 -> 234 bytes .../e7/4de7e1ae1be7603b36fda1d3992d86353939e6 | 2 + .../e7/d92d39e3447fd5a0b87edb8888f73ff0ea016d | 1 + .../eb/29c00ec879b26784887a3edd2d13eb819932f3 | Bin 0 -> 165 bytes .../eb/bbed024c1a46d09a7515bfaf1b078b76e839a7 | Bin 0 -> 166 bytes .../ef/fac31e9124b8cb339ebb34a31bca4dad0447aa | 2 + .../f2/f9341a809880c0f359fa213b78745612a6e71f | Bin 0 -> 79 bytes .../f4/0b207dd11a858e8d009760a18d5ba4ee746198 | Bin 0 -> 46 bytes .../f4/0f2eb3ca8fe00e004c6a3a1e4c4476797d7c3a | Bin 0 -> 45 bytes .../f4/166f29c39c79d81798c36edd2a58faf51dbbdb | Bin 0 -> 46 bytes .../f4/8866531835d4f4e21afb39f6e40cba802ef138 | Bin 0 -> 49 bytes .../f4/dea3e1676b8ead2ad0bcd73fd8a33180b21f4f | Bin 0 -> 166 bytes .../f7/370644ae6f54875205c8be52a8224d49b430e2 | Bin 0 -> 234 bytes .../f7/5a0795b1ca5079ecb436a7009881c583fd72f9 | Bin 0 -> 298 bytes .../f8/a93bab7b831f10e428f1d0274d818d40ac5d53 | 3 + .../f9/525a325302fbe8a32b8faaf78422ba7ff803d1 | Bin 0 -> 234 bytes .../fa/317df2da2b74054fdaeaf823da090711c684b8 | 3 + .../fb/027c3f9100789b777599d55005c7126b3ae420 | Bin 0 -> 166 bytes .../ff/bbc0c691aec659b68562bb1dabba30f958c3b4 | Bin 0 -> 45 bytes ...4b78e20712d73ef317ef0f34b8fe4207f0b667.idx | Bin 0 -> 2108 bytes ...b78e20712d73ef317ef0f34b8fe4207f0b667.pack | Bin 0 -> 10551 bytes ...4b78e20712d73ef317ef0f34b8fe4207f0b667.rev | Bin 0 -> 200 bytes .git copy/packed-refs | 2 + .git copy/refs/heads/main | 1 + .git copy/refs/heads/revan-dev | 1 + .git copy/refs/remotes/origin/HEAD | 1 + .git copy/refs/remotes/origin/kenan-dev | 1 + .git copy/refs/remotes/origin/main | 1 + .git copy/refs/remotes/origin/revan-dev | 1 + .../Exceptions/CourseNotFoundException.java | 2 +- 211 files changed, 997 insertions(+), 1 deletion(-) create mode 100644 .git copy/COMMIT_EDITMSG create mode 100644 .git copy/FETCH_HEAD create mode 100644 .git copy/HEAD create mode 100644 .git copy/ORIG_HEAD create mode 100644 .git copy/config create mode 100644 .git copy/description create mode 100644 .git copy/hooks/applypatch-msg.sample create mode 100644 .git copy/hooks/commit-msg.sample create mode 100644 .git copy/hooks/fsmonitor-watchman.sample create mode 100644 .git copy/hooks/post-update.sample create mode 100644 .git copy/hooks/pre-applypatch.sample create mode 100644 .git copy/hooks/pre-commit.sample create mode 100644 .git copy/hooks/pre-merge-commit.sample create mode 100644 .git copy/hooks/pre-push.sample create mode 100644 .git copy/hooks/pre-rebase.sample create mode 100644 .git copy/hooks/pre-receive.sample create mode 100644 .git copy/hooks/prepare-commit-msg.sample create mode 100644 .git copy/hooks/push-to-checkout.sample create mode 100644 .git copy/hooks/sendemail-validate.sample create mode 100644 .git copy/hooks/update.sample create mode 100644 .git copy/index create mode 100644 .git copy/info/exclude create mode 100644 .git copy/logs/HEAD create mode 100644 .git copy/logs/refs/heads/main create mode 100644 .git copy/logs/refs/heads/revan-dev create mode 100644 .git copy/logs/refs/remotes/origin/HEAD create mode 100644 .git copy/logs/refs/remotes/origin/kenan-dev create mode 100644 .git copy/logs/refs/remotes/origin/main create mode 100644 .git copy/logs/refs/remotes/origin/revan-dev create mode 100644 .git copy/objects/02/67b93cefd2f812ae77f40cec511fd5d6b2d780 create mode 100644 .git copy/objects/02/7f41581bcf393cfa43e9cce3f3d95bc0412ded create mode 100644 .git copy/objects/02/afc96de49e4fec2e069b859ac162efbed90bbf create mode 100644 .git copy/objects/02/fc9f317f42fa61f506570a4888785f02ec78d3 create mode 100644 .git copy/objects/03/d8bbff78d73c5865ee892eef6c39c8e8fa9c4d create mode 100644 .git copy/objects/04/91f086ef1a6cbb415a1f1e077f0b2fdcf825a0 create mode 100644 .git copy/objects/0e/d4199447be1f18799f9f4f76c7ec6765eb3503 create mode 100644 .git copy/objects/0e/f93a0ec2e724495981f1952185da98f724b3cf create mode 100644 .git copy/objects/10/195d11ca235288142915e2a70b6d4b77adb861 create mode 100644 .git copy/objects/10/4317dc26118e5bfb62845e713637292bf33736 create mode 100644 .git copy/objects/10/bfe35595ad93015fd430ce74b45548f82fd0b5 create mode 100644 .git copy/objects/13/c7d95fc7166494b29cca06fbf16184e28806c9 create mode 100644 .git copy/objects/14/ba021a983b2d466855e7401737df3dd988df8c create mode 100644 .git copy/objects/17/76a70ad286b6684b13512801ddbfa9dc90f3bb create mode 100644 .git copy/objects/1a/391d331f0dff9fa72bd7ba73d0eb8c0f3ace44 create mode 100644 .git copy/objects/1b/630250153279765c569eb004a1194106fc053d create mode 100644 .git copy/objects/1b/9477616dfa5c6b8f43e05f3eb711d187ab9a96 create mode 100644 .git copy/objects/1c/fc5e769067749ec38adc0bc65fbf2490b4cc48 create mode 100644 .git copy/objects/1f/0c855308c7246201ffa689eb4c635ebe60a14c create mode 100644 .git copy/objects/1f/652969d7369b984ef912b2676faffebf6b5c0b create mode 100644 .git copy/objects/26/bdf9cc34037fd0d1f3d54ea4131680f023c129 create mode 100644 .git copy/objects/27/f54a60c0e2bb15b951be7c1862c2148b84c71c create mode 100644 .git copy/objects/28/019126b7b6e56353b00135f2855b000a205034 create mode 100644 .git copy/objects/2a/833a13ee965d91d6d62dcf66824e1f97af95af create mode 100644 .git copy/objects/2b/2a7569ae59536df7db356a445f4221a89daf89 create mode 100644 .git copy/objects/2b/ffb79f07f31727d8725dd7e8d5efd2f6d5ce8c create mode 100644 .git copy/objects/2c/0a7f7563ae882eaab072f3e71506fb5e75c054 create mode 100644 .git copy/objects/2d/4763ff9c9e2b07d223adb7f66cd17e4f7c91a2 create mode 100644 .git copy/objects/2e/1e08f4a91e1c71381b4bb880e0b0c79190712a create mode 100644 .git copy/objects/2e/d2a724b6b8193fa011365afd3be19046c235a5 create mode 100644 .git copy/objects/32/2abf802b34f3de71d618514f508845b02c31f5 create mode 100644 .git copy/objects/33/04bfb5f96d12dc3dbb8fcb764ecd4e45df0a1f create mode 100644 .git copy/objects/33/1f2a7a69e8bf358ed27f930dec3d228539bfa4 create mode 100644 .git copy/objects/34/e8d1672955726d9f14874d00dcce27e3bdd87f create mode 100644 .git copy/objects/35/7562cfc9988fbaf48f61a6400584831322c811 create mode 100644 .git copy/objects/35/a060d4b8bde7e23cbc2adabc56f62c34301b61 create mode 100644 .git copy/objects/36/1e6046933d28dbc982ab43662dd5ff58830a0b create mode 100644 .git copy/objects/39/8646f243459fd5af14c77bba2312478b18c442 create mode 100644 .git copy/objects/3a/637e14162b36bbb268b93e508b7f6b48e87d95 create mode 100644 .git copy/objects/3a/95758593d2f99a0704c626938277d74b88b6ea create mode 100644 .git copy/objects/3d/e6654902d1761008255c4f94b1d53fb662cfdc create mode 100644 .git copy/objects/3e/5440405f63b60b4cd9d84830a7023f6469dc8b create mode 100644 .git copy/objects/3e/dfbb76224aa31ad6d8183732eca22fbfe91792 create mode 100644 .git copy/objects/40/7ae78b7438456c09a340221c934b03473f5b8b create mode 100644 .git copy/objects/40/b297dc13a9295f31775fa38364e6e30b645393 create mode 100644 .git copy/objects/41/f7c86360ab6f9b34b2bccb543400ffd33a7025 create mode 100644 .git copy/objects/41/f936f209b829b34c5041c7466d48cec802e767 create mode 100644 .git copy/objects/42/76b49c831013d1371affb88fda9f60c347a35a create mode 100644 .git copy/objects/42/e93a26e2caa3b0af3cca788ef606bb34a9204f create mode 100644 .git copy/objects/43/bca3363d3f2e38739f7e3bfb9408f22164d712 create mode 100644 .git copy/objects/44/4cb17b5dec5688a94067361721398ff241c3b6 create mode 100644 .git copy/objects/45/ce9b702fa090b9f158fdb02956161c6280478b create mode 100644 .git copy/objects/46/18b729a52a797d792cdd3af91b1365dbcb976d create mode 100644 .git copy/objects/46/45774cfcc31901211d0ed4967977970f603687 create mode 100644 .git copy/objects/49/8b9add69b0d714278bd162f7c725a417e78f3e create mode 100644 .git copy/objects/4a/4a03037e1d567ded162343251bebbe67547cc6 create mode 100644 .git copy/objects/4b/881306a3cb3db3cf83a448a76aae017e7d9487 create mode 100644 .git copy/objects/4c/79cc7259d27e2b39a079046777a48013a9b654 create mode 100644 .git copy/objects/4d/231f7c92e52d71357f39257fa46ebb50c80cbd create mode 100644 .git copy/objects/4e/1804142de9aa6ea446c66f4fcb6946cddabf2d create mode 100644 .git copy/objects/4e/54ad96c79388910261b28f772d1bf701a0c3fe create mode 100644 .git copy/objects/50/1bf8144a1381f5287653f1e7e1ef62ff239660 create mode 100644 .git copy/objects/54/250bf3556318005e3bff92769ba775cef3fad0 create mode 100644 .git copy/objects/54/dac8ed6bcfbe7f99cc6b4d543a3890240edd77 create mode 100644 .git copy/objects/58/2f643823c14a222fdd951617e6ffbf07f58e73 create mode 100644 .git copy/objects/59/60500bbe94d36f259e35684e434e66c72829a3 create mode 100644 .git copy/objects/5a/04ad9c0af398e73baac0250d223b7e3e774470 create mode 100644 .git copy/objects/5c/6761c09c63ee1cab26c1f5f96f4e63c69a6e47 create mode 100644 .git copy/objects/5e/5c4f89938dc948ddff5a384ae9e587cd10ee15 create mode 100644 .git copy/objects/60/01f4773c082801314dd22c9cdbdbd327381ebf create mode 100644 .git copy/objects/62/1780064eec96be4ec20d7c89c20d1b5757cb7c create mode 100644 .git copy/objects/62/82a43e1376e1b4a498ff1fd2f5c547e4bf5960 create mode 100644 .git copy/objects/62/84c6dc7e23db29b9d48777118d72cf5527bb31 create mode 100644 .git copy/objects/62/c3c16857d66c82218ff6e6ce22e4ac6423a02c create mode 100644 .git copy/objects/62/eef4ce33c4c04fd9b695a8d317f13c9740ff81 create mode 100644 .git copy/objects/63/37a8f81a512b91d30fe70b332484959529df79 create mode 100644 .git copy/objects/67/185633246135b15c18a71d15cc58ea41cb01a2 create mode 100644 .git copy/objects/6a/5ef5148a9fb43d9c2ca8c118b6a89f693baf2d create mode 100644 .git copy/objects/6b/163f8647162303e36736c1aa2e0d92f1d3496b create mode 100644 .git copy/objects/6b/170c5d2d44a84a9e8212505fb2977736d6b3c6 create mode 100644 .git copy/objects/6c/a970f0ce8154dd012f9e1f734fe648ef9006b7 create mode 100644 .git copy/objects/6e/6314b9a8ae911ae8f6834d83ed4e7be12a39b1 create mode 100644 .git copy/objects/6e/fb080e3d0544517a62c1bffa3ebdeef8a0cdc1 create mode 100644 .git copy/objects/7d/35ca41128c21250712136c2d32c51115f5f678 create mode 100644 .git copy/objects/7d/4dd6ae6f1430a1c57110b75ceee614c8852bf4 create mode 100644 .git copy/objects/7d/80be016f67d7ef11b6a04d568b38e4001b0958 create mode 100644 .git copy/objects/7d/ecf2639976283ad82781c6e5e5d1c6e10b1bfb create mode 100644 .git copy/objects/7e/fcd01cd06b56dd5b4d5bd101f0aa8d1800638f create mode 100644 .git copy/objects/7f/8394e0f01f317220e588ef1ef40c216f3e5cb6 create mode 100644 .git copy/objects/88/02bc1f59f9c60b1966d8924ae6003b81b349cd create mode 100644 .git copy/objects/8a/d6fbabfba0c8248068476741e577d07379f26f create mode 100644 .git copy/objects/8e/2f9832d06855c029e78fdeb4cc051ae7004b17 create mode 100644 .git copy/objects/94/438acd21ae4c3a74eafa68082b0278bca6f905 create mode 100644 .git copy/objects/94/d454ff64ed1de07d81cb3500b0bce4b2601de1 create mode 100644 .git copy/objects/95/c9485152d9a8dbf67b80af3c25c105bfee19bd create mode 100644 .git copy/objects/96/ae261be8cab8322607736fb51f410c4987d1c3 create mode 100644 .git copy/objects/98/fb26bc79ff73c5b36baac976cd0641f71fbe1f create mode 100644 .git copy/objects/9b/1fc70ab3fdf983c52a2c3dd7ce352d70108c44 create mode 100644 .git copy/objects/9b/735e27f881fcaa3789e34fed334c429897aab5 create mode 100644 .git copy/objects/9b/ce8acd9d580b27bc20542ce0ceb40a80d13987 create mode 100644 .git copy/objects/a1/4a94fc9dcbace11868ba6ac8035827a674decd create mode 100644 .git copy/objects/a1/5cf0fbd99b04d707ea5deaa0667a60072a3525 create mode 100644 .git copy/objects/a3/52bed62941fb05b7e9275455bcc84dc3ef4e65 create mode 100644 .git copy/objects/a3/bbf84eb5fdff49e840ab1a13aaa1da0f921983 create mode 100644 .git copy/objects/a5/265af3dffc3cabbb421e9ac62c7252821cf76c create mode 100644 .git copy/objects/a5/79dba911ec8794b340254a5c07192827844e3a create mode 100644 .git copy/objects/a5/7da0e100254b976ceb772a8f8a7b7c05a40f87 create mode 100644 .git copy/objects/a8/d7d32b92d7f1bf0f5a10d75c4abdaacc45e1ba create mode 100644 .git copy/objects/a9/cac2e46b68ca0af6218a87e8f4cbf0970701a4 create mode 100644 .git copy/objects/aa/6164f0bb3f20e0e1d5de7c8bf66c099bfc7b08 create mode 100644 .git copy/objects/ab/519601bad2abff94d1c0b4bdd9ffa1e9e1fcfc create mode 100644 .git copy/objects/ae/e1f97b9aa36526816a9a430e67db56868b4032 create mode 100644 .git copy/objects/b0/4adb1a59e151dd67748487ed74f4b09ef9c4cd create mode 100644 .git copy/objects/b1/fae454aad73e2d340d3666cec62b64a08704f9 create mode 100644 .git copy/objects/b2/431feacbb75cdb56a652f3360052a3acdb5df7 create mode 100644 .git copy/objects/b2/95a3f2a6434dcce0bbf2be525d954f274db801 create mode 100644 .git copy/objects/b3/4e4243652728c7acc2f34b6923849ffdfc6346 create mode 100644 .git copy/objects/b4/d487dc3548afe4920fb24316838f682959d99b create mode 100644 .git copy/objects/b6/97d3465890103d15eeefaedb2024a9df576de2 create mode 100644 .git copy/objects/ba/4c7bd69820fbd9003ac1730930de02adfb3803 create mode 100644 .git copy/objects/be/16fa5bc21e4fbc579a8be0e47c4ba64cc17514 create mode 100644 .git copy/objects/be/b09d2c180bec7b940011a887ec35c1ccf60fde create mode 100644 .git copy/objects/bf/30b47dd0d5d6393384ce077b993d8ce96c6ab6 create mode 100644 .git copy/objects/c3/620d7e46ab42fd1535a18d7cbaefc6444513b0 create mode 100644 .git copy/objects/c5/56e37b274e278d6264571320e2c58ae4f95222 create mode 100644 .git copy/objects/c6/91bc5536f3c6d6555f8b0e4d74817d047d4e85 create mode 100644 .git copy/objects/c7/58513be7b7063e058be587b8ee2f3c409c3e2c create mode 100644 .git copy/objects/c8/3cc084f1f68ebd9699793a988474cb64dcb40e create mode 100644 .git copy/objects/cc/112f124f8bdebf8a8a7c7250b0330fff62d7b0 create mode 100644 .git copy/objects/ce/2001083c051b958aa1a4de277c82b99a2bb213 create mode 100644 .git copy/objects/ce/970b6576fd51a7359677920572724257c824cf create mode 100644 .git copy/objects/cf/511031370b8b3bbe30d905ab2a91a5786aef91 create mode 100644 .git copy/objects/cf/b6e575e1796c7eec0bbc568b7df0c8e62099ef create mode 100644 .git copy/objects/d1/fb0d886c44ce62fa169d1b2909a9398e84700f create mode 100644 .git copy/objects/d2/95e68a369a0bb2330435f97f291c1916fea3a0 create mode 100644 .git copy/objects/d3/348671444711685a386ee75ddaca129ced00be create mode 100644 .git copy/objects/d4/eb948bb03f3f9805358f0724e239e9228a88b5 create mode 100644 .git copy/objects/d6/d3548f52d68a6dc1ab4cd10980d8c42951623b create mode 100644 .git copy/objects/d7/11a0f9bce94ce749752e2304134d097ad5ecb5 create mode 100644 .git copy/objects/d7/44156af1b258be1ad507cc87238d9606581d8b create mode 100644 .git copy/objects/d8/73b5dd24e00d3b400438e18907a1e8cc790062 create mode 100644 .git copy/objects/d8/e5378836e129a697fbb44a1b6dbf06dee97aa3 create mode 100644 .git copy/objects/d9/2889f28db14ae497f8983ff7f8bc31a089e96a create mode 100644 .git copy/objects/d9/d206914e101f3a2a6ae209dfc40c800df899fb create mode 100644 .git copy/objects/da/50f00ab691b4990d1e69895113255906630b6e create mode 100644 .git copy/objects/db/f694527bc1d50a752f5c159e6dc0e9446b39c9 create mode 100644 .git copy/objects/e0/3d43c3f8bfdf91a49a8dd67b7f5814965e5887 create mode 100644 .git copy/objects/e1/6ed0c478ac036b584748731a0f19f0becaf70c create mode 100644 .git copy/objects/e3/0297abdc52bf9965363634367d4cbb190db9d6 create mode 100644 .git copy/objects/e3/1ed9a56ef8abc73f927b3933bb789d51040a01 create mode 100644 .git copy/objects/e3/a73ec1f3c897a1bbbcaa8598665e0fc9822360 create mode 100644 .git copy/objects/e4/f4865a18509b07eea278289a7f1b011ed9f7e5 create mode 100644 .git copy/objects/e6/4d56dd5fcdef0a6c174aeaf033f6010b69ca40 create mode 100644 .git copy/objects/e7/4de7e1ae1be7603b36fda1d3992d86353939e6 create mode 100644 .git copy/objects/e7/d92d39e3447fd5a0b87edb8888f73ff0ea016d create mode 100644 .git copy/objects/eb/29c00ec879b26784887a3edd2d13eb819932f3 create mode 100644 .git copy/objects/eb/bbed024c1a46d09a7515bfaf1b078b76e839a7 create mode 100644 .git copy/objects/ef/fac31e9124b8cb339ebb34a31bca4dad0447aa create mode 100644 .git copy/objects/f2/f9341a809880c0f359fa213b78745612a6e71f create mode 100644 .git copy/objects/f4/0b207dd11a858e8d009760a18d5ba4ee746198 create mode 100644 .git copy/objects/f4/0f2eb3ca8fe00e004c6a3a1e4c4476797d7c3a create mode 100644 .git copy/objects/f4/166f29c39c79d81798c36edd2a58faf51dbbdb create mode 100644 .git copy/objects/f4/8866531835d4f4e21afb39f6e40cba802ef138 create mode 100644 .git copy/objects/f4/dea3e1676b8ead2ad0bcd73fd8a33180b21f4f create mode 100644 .git copy/objects/f7/370644ae6f54875205c8be52a8224d49b430e2 create mode 100644 .git copy/objects/f7/5a0795b1ca5079ecb436a7009881c583fd72f9 create mode 100644 .git copy/objects/f8/a93bab7b831f10e428f1d0274d818d40ac5d53 create mode 100644 .git copy/objects/f9/525a325302fbe8a32b8faaf78422ba7ff803d1 create mode 100644 .git copy/objects/fa/317df2da2b74054fdaeaf823da090711c684b8 create mode 100644 .git copy/objects/fb/027c3f9100789b777599d55005c7126b3ae420 create mode 100644 .git copy/objects/ff/bbc0c691aec659b68562bb1dabba30f958c3b4 create mode 100644 .git copy/objects/pack/pack-0f4b78e20712d73ef317ef0f34b8fe4207f0b667.idx create mode 100644 .git copy/objects/pack/pack-0f4b78e20712d73ef317ef0f34b8fe4207f0b667.pack create mode 100644 .git copy/objects/pack/pack-0f4b78e20712d73ef317ef0f34b8fe4207f0b667.rev create mode 100644 .git copy/packed-refs create mode 100644 .git copy/refs/heads/main create mode 100644 .git copy/refs/heads/revan-dev create mode 100644 .git copy/refs/remotes/origin/HEAD create mode 100644 .git copy/refs/remotes/origin/kenan-dev create mode 100644 .git copy/refs/remotes/origin/main create mode 100644 .git copy/refs/remotes/origin/revan-dev diff --git a/.git copy/COMMIT_EDITMSG b/.git copy/COMMIT_EDITMSG new file mode 100644 index 00000000..d86bac9d --- /dev/null +++ b/.git copy/COMMIT_EDITMSG @@ -0,0 +1 @@ +OK diff --git a/.git copy/FETCH_HEAD b/.git copy/FETCH_HEAD new file mode 100644 index 00000000..39e14558 --- /dev/null +++ b/.git copy/FETCH_HEAD @@ -0,0 +1,3 @@ +e74de7e1ae1be7603b36fda1d3992d86353939e6 branch 'main' of https://github.com/kenanqafarov/ironSchool +da50f00ab691b4990d1e69895113255906630b6e not-for-merge branch 'kenan-dev' of https://github.com/kenanqafarov/ironSchool +54250bf3556318005e3bff92769ba775cef3fad0 not-for-merge branch 'revan-dev' of https://github.com/kenanqafarov/ironSchool diff --git a/.git copy/HEAD b/.git copy/HEAD new file mode 100644 index 00000000..b870d826 --- /dev/null +++ b/.git copy/HEAD @@ -0,0 +1 @@ +ref: refs/heads/main diff --git a/.git copy/ORIG_HEAD b/.git copy/ORIG_HEAD new file mode 100644 index 00000000..f92bc4fa --- /dev/null +++ b/.git copy/ORIG_HEAD @@ -0,0 +1 @@ +54250bf3556318005e3bff92769ba775cef3fad0 diff --git a/.git copy/config b/.git copy/config new file mode 100644 index 00000000..3b7086c5 --- /dev/null +++ b/.git copy/config @@ -0,0 +1,16 @@ +[core] + repositoryformatversion = 0 + filemode = false + bare = false + logallrefupdates = true + symlinks = false + ignorecase = true +[remote "origin"] + url = https://github.com/kenanqafarov/ironSchool.git + fetch = +refs/heads/*:refs/remotes/origin/* +[branch "main"] + remote = origin + merge = refs/heads/main +[branch "revan-dev"] + remote = origin + merge = refs/heads/revan-dev diff --git a/.git copy/description b/.git copy/description new file mode 100644 index 00000000..498b267a --- /dev/null +++ b/.git copy/description @@ -0,0 +1 @@ +Unnamed repository; edit this file 'description' to name the repository. diff --git a/.git copy/hooks/applypatch-msg.sample b/.git copy/hooks/applypatch-msg.sample new file mode 100644 index 00000000..a5d7b84a --- /dev/null +++ b/.git copy/hooks/applypatch-msg.sample @@ -0,0 +1,15 @@ +#!/bin/sh +# +# An example hook script to check the commit log message taken by +# applypatch from an e-mail message. +# +# The hook should exit with non-zero status after issuing an +# appropriate message if it wants to stop the commit. The hook is +# allowed to edit the commit message file. +# +# To enable this hook, rename this file to "applypatch-msg". + +. git-sh-setup +commitmsg="$(git rev-parse --git-path hooks/commit-msg)" +test -x "$commitmsg" && exec "$commitmsg" ${1+"$@"} +: diff --git a/.git copy/hooks/commit-msg.sample b/.git copy/hooks/commit-msg.sample new file mode 100644 index 00000000..b58d1184 --- /dev/null +++ b/.git copy/hooks/commit-msg.sample @@ -0,0 +1,24 @@ +#!/bin/sh +# +# An example hook script to check the commit log message. +# Called by "git commit" with one argument, the name of the file +# that has the commit message. The hook should exit with non-zero +# status after issuing an appropriate message if it wants to stop the +# commit. The hook is allowed to edit the commit message file. +# +# To enable this hook, rename this file to "commit-msg". + +# Uncomment the below to add a Signed-off-by line to the message. +# Doing this in a hook is a bad idea in general, but the prepare-commit-msg +# hook is more suited to it. +# +# SOB=$(git var GIT_AUTHOR_IDENT | sed -n 's/^\(.*>\).*$/Signed-off-by: \1/p') +# grep -qs "^$SOB" "$1" || echo "$SOB" >> "$1" + +# This example catches duplicate Signed-off-by lines. + +test "" = "$(grep '^Signed-off-by: ' "$1" | + sort | uniq -c | sed -e '/^[ ]*1[ ]/d')" || { + echo >&2 Duplicate Signed-off-by lines. + exit 1 +} diff --git a/.git copy/hooks/fsmonitor-watchman.sample b/.git copy/hooks/fsmonitor-watchman.sample new file mode 100644 index 00000000..23e856f5 --- /dev/null +++ b/.git copy/hooks/fsmonitor-watchman.sample @@ -0,0 +1,174 @@ +#!/usr/bin/perl + +use strict; +use warnings; +use IPC::Open2; + +# An example hook script to integrate Watchman +# (https://facebook.github.io/watchman/) with git to speed up detecting +# new and modified files. +# +# The hook is passed a version (currently 2) and last update token +# formatted as a string and outputs to stdout a new update token and +# all files that have been modified since the update token. Paths must +# be relative to the root of the working tree and separated by a single NUL. +# +# To enable this hook, rename this file to "query-watchman" and set +# 'git config core.fsmonitor .git/hooks/query-watchman' +# +my ($version, $last_update_token) = @ARGV; + +# Uncomment for debugging +# print STDERR "$0 $version $last_update_token\n"; + +# Check the hook interface version +if ($version ne 2) { + die "Unsupported query-fsmonitor hook version '$version'.\n" . + "Falling back to scanning...\n"; +} + +my $git_work_tree = get_working_dir(); + +my $retry = 1; + +my $json_pkg; +eval { + require JSON::XS; + $json_pkg = "JSON::XS"; + 1; +} or do { + require JSON::PP; + $json_pkg = "JSON::PP"; +}; + +launch_watchman(); + +sub launch_watchman { + my $o = watchman_query(); + if (is_work_tree_watched($o)) { + output_result($o->{clock}, @{$o->{files}}); + } +} + +sub output_result { + my ($clockid, @files) = @_; + + # Uncomment for debugging watchman output + # open (my $fh, ">", ".git/watchman-output.out"); + # binmode $fh, ":utf8"; + # print $fh "$clockid\n@files\n"; + # close $fh; + + binmode STDOUT, ":utf8"; + print $clockid; + print "\0"; + local $, = "\0"; + print @files; +} + +sub watchman_clock { + my $response = qx/watchman clock "$git_work_tree"/; + die "Failed to get clock id on '$git_work_tree'.\n" . + "Falling back to scanning...\n" if $? != 0; + + return $json_pkg->new->utf8->decode($response); +} + +sub watchman_query { + my $pid = open2(\*CHLD_OUT, \*CHLD_IN, 'watchman -j --no-pretty') + or die "open2() failed: $!\n" . + "Falling back to scanning...\n"; + + # In the query expression below we're asking for names of files that + # changed since $last_update_token but not from the .git folder. + # + # To accomplish this, we're using the "since" generator to use the + # recency index to select candidate nodes and "fields" to limit the + # output to file names only. Then we're using the "expression" term to + # further constrain the results. + my $last_update_line = ""; + if (substr($last_update_token, 0, 1) eq "c") { + $last_update_token = "\"$last_update_token\""; + $last_update_line = qq[\n"since": $last_update_token,]; + } + my $query = <<" END"; + ["query", "$git_work_tree", {$last_update_line + "fields": ["name"], + "expression": ["not", ["dirname", ".git"]] + }] + END + + # Uncomment for debugging the watchman query + # open (my $fh, ">", ".git/watchman-query.json"); + # print $fh $query; + # close $fh; + + print CHLD_IN $query; + close CHLD_IN; + my $response = do {local $/; }; + + # Uncomment for debugging the watch response + # open ($fh, ">", ".git/watchman-response.json"); + # print $fh $response; + # close $fh; + + die "Watchman: command returned no output.\n" . + "Falling back to scanning...\n" if $response eq ""; + die "Watchman: command returned invalid output: $response\n" . + "Falling back to scanning...\n" unless $response =~ /^\{/; + + return $json_pkg->new->utf8->decode($response); +} + +sub is_work_tree_watched { + my ($output) = @_; + my $error = $output->{error}; + if ($retry > 0 and $error and $error =~ m/unable to resolve root .* directory (.*) is not watched/) { + $retry--; + my $response = qx/watchman watch "$git_work_tree"/; + die "Failed to make watchman watch '$git_work_tree'.\n" . + "Falling back to scanning...\n" if $? != 0; + $output = $json_pkg->new->utf8->decode($response); + $error = $output->{error}; + die "Watchman: $error.\n" . + "Falling back to scanning...\n" if $error; + + # Uncomment for debugging watchman output + # open (my $fh, ">", ".git/watchman-output.out"); + # close $fh; + + # Watchman will always return all files on the first query so + # return the fast "everything is dirty" flag to git and do the + # Watchman query just to get it over with now so we won't pay + # the cost in git to look up each individual file. + my $o = watchman_clock(); + $error = $output->{error}; + + die "Watchman: $error.\n" . + "Falling back to scanning...\n" if $error; + + output_result($o->{clock}, ("/")); + $last_update_token = $o->{clock}; + + eval { launch_watchman() }; + return 0; + } + + die "Watchman: $error.\n" . + "Falling back to scanning...\n" if $error; + + return 1; +} + +sub get_working_dir { + my $working_dir; + if ($^O =~ 'msys' || $^O =~ 'cygwin') { + $working_dir = Win32::GetCwd(); + $working_dir =~ tr/\\/\//; + } else { + require Cwd; + $working_dir = Cwd::cwd(); + } + + return $working_dir; +} diff --git a/.git copy/hooks/post-update.sample b/.git copy/hooks/post-update.sample new file mode 100644 index 00000000..ec17ec19 --- /dev/null +++ b/.git copy/hooks/post-update.sample @@ -0,0 +1,8 @@ +#!/bin/sh +# +# An example hook script to prepare a packed repository for use over +# dumb transports. +# +# To enable this hook, rename this file to "post-update". + +exec git update-server-info diff --git a/.git copy/hooks/pre-applypatch.sample b/.git copy/hooks/pre-applypatch.sample new file mode 100644 index 00000000..4142082b --- /dev/null +++ b/.git copy/hooks/pre-applypatch.sample @@ -0,0 +1,14 @@ +#!/bin/sh +# +# An example hook script to verify what is about to be committed +# by applypatch from an e-mail message. +# +# The hook should exit with non-zero status after issuing an +# appropriate message if it wants to stop the commit. +# +# To enable this hook, rename this file to "pre-applypatch". + +. git-sh-setup +precommit="$(git rev-parse --git-path hooks/pre-commit)" +test -x "$precommit" && exec "$precommit" ${1+"$@"} +: diff --git a/.git copy/hooks/pre-commit.sample b/.git copy/hooks/pre-commit.sample new file mode 100644 index 00000000..29ed5ee4 --- /dev/null +++ b/.git copy/hooks/pre-commit.sample @@ -0,0 +1,49 @@ +#!/bin/sh +# +# An example hook script to verify what is about to be committed. +# Called by "git commit" with no arguments. The hook should +# exit with non-zero status after issuing an appropriate message if +# it wants to stop the commit. +# +# To enable this hook, rename this file to "pre-commit". + +if git rev-parse --verify HEAD >/dev/null 2>&1 +then + against=HEAD +else + # Initial commit: diff against an empty tree object + against=$(git hash-object -t tree /dev/null) +fi + +# If you want to allow non-ASCII filenames set this variable to true. +allownonascii=$(git config --type=bool hooks.allownonascii) + +# Redirect output to stderr. +exec 1>&2 + +# Cross platform projects tend to avoid non-ASCII filenames; prevent +# them from being added to the repository. We exploit the fact that the +# printable range starts at the space character and ends with tilde. +if [ "$allownonascii" != "true" ] && + # Note that the use of brackets around a tr range is ok here, (it's + # even required, for portability to Solaris 10's /usr/bin/tr), since + # the square bracket bytes happen to fall in the designated range. + test $(git diff-index --cached --name-only --diff-filter=A -z $against | + LC_ALL=C tr -d '[ -~]\0' | wc -c) != 0 +then + cat <<\EOF +Error: Attempt to add a non-ASCII file name. + +This can cause problems if you want to work with people on other platforms. + +To be portable it is advisable to rename the file. + +If you know what you are doing you can disable this check using: + + git config hooks.allownonascii true +EOF + exit 1 +fi + +# If there are whitespace errors, print the offending file names and fail. +exec git diff-index --check --cached $against -- diff --git a/.git copy/hooks/pre-merge-commit.sample b/.git copy/hooks/pre-merge-commit.sample new file mode 100644 index 00000000..399eab19 --- /dev/null +++ b/.git copy/hooks/pre-merge-commit.sample @@ -0,0 +1,13 @@ +#!/bin/sh +# +# An example hook script to verify what is about to be committed. +# Called by "git merge" with no arguments. The hook should +# exit with non-zero status after issuing an appropriate message to +# stderr if it wants to stop the merge commit. +# +# To enable this hook, rename this file to "pre-merge-commit". + +. git-sh-setup +test -x "$GIT_DIR/hooks/pre-commit" && + exec "$GIT_DIR/hooks/pre-commit" +: diff --git a/.git copy/hooks/pre-push.sample b/.git copy/hooks/pre-push.sample new file mode 100644 index 00000000..4ce688d3 --- /dev/null +++ b/.git copy/hooks/pre-push.sample @@ -0,0 +1,53 @@ +#!/bin/sh + +# An example hook script to verify what is about to be pushed. Called by "git +# push" after it has checked the remote status, but before anything has been +# pushed. If this script exits with a non-zero status nothing will be pushed. +# +# This hook is called with the following parameters: +# +# $1 -- Name of the remote to which the push is being done +# $2 -- URL to which the push is being done +# +# If pushing without using a named remote those arguments will be equal. +# +# Information about the commits which are being pushed is supplied as lines to +# the standard input in the form: +# +# +# +# This sample shows how to prevent push of commits where the log message starts +# with "WIP" (work in progress). + +remote="$1" +url="$2" + +zero=$(git hash-object --stdin &2 "Found WIP commit in $local_ref, not pushing" + exit 1 + fi + fi +done + +exit 0 diff --git a/.git copy/hooks/pre-rebase.sample b/.git copy/hooks/pre-rebase.sample new file mode 100644 index 00000000..6cbef5c3 --- /dev/null +++ b/.git copy/hooks/pre-rebase.sample @@ -0,0 +1,169 @@ +#!/bin/sh +# +# Copyright (c) 2006, 2008 Junio C Hamano +# +# The "pre-rebase" hook is run just before "git rebase" starts doing +# its job, and can prevent the command from running by exiting with +# non-zero status. +# +# The hook is called with the following parameters: +# +# $1 -- the upstream the series was forked from. +# $2 -- the branch being rebased (or empty when rebasing the current branch). +# +# This sample shows how to prevent topic branches that are already +# merged to 'next' branch from getting rebased, because allowing it +# would result in rebasing already published history. + +publish=next +basebranch="$1" +if test "$#" = 2 +then + topic="refs/heads/$2" +else + topic=`git symbolic-ref HEAD` || + exit 0 ;# we do not interrupt rebasing detached HEAD +fi + +case "$topic" in +refs/heads/??/*) + ;; +*) + exit 0 ;# we do not interrupt others. + ;; +esac + +# Now we are dealing with a topic branch being rebased +# on top of master. Is it OK to rebase it? + +# Does the topic really exist? +git show-ref -q "$topic" || { + echo >&2 "No such branch $topic" + exit 1 +} + +# Is topic fully merged to master? +not_in_master=`git rev-list --pretty=oneline ^master "$topic"` +if test -z "$not_in_master" +then + echo >&2 "$topic is fully merged to master; better remove it." + exit 1 ;# we could allow it, but there is no point. +fi + +# Is topic ever merged to next? If so you should not be rebasing it. +only_next_1=`git rev-list ^master "^$topic" ${publish} | sort` +only_next_2=`git rev-list ^master ${publish} | sort` +if test "$only_next_1" = "$only_next_2" +then + not_in_topic=`git rev-list "^$topic" master` + if test -z "$not_in_topic" + then + echo >&2 "$topic is already up to date with master" + exit 1 ;# we could allow it, but there is no point. + else + exit 0 + fi +else + not_in_next=`git rev-list --pretty=oneline ^${publish} "$topic"` + /usr/bin/perl -e ' + my $topic = $ARGV[0]; + my $msg = "* $topic has commits already merged to public branch:\n"; + my (%not_in_next) = map { + /^([0-9a-f]+) /; + ($1 => 1); + } split(/\n/, $ARGV[1]); + for my $elem (map { + /^([0-9a-f]+) (.*)$/; + [$1 => $2]; + } split(/\n/, $ARGV[2])) { + if (!exists $not_in_next{$elem->[0]}) { + if ($msg) { + print STDERR $msg; + undef $msg; + } + print STDERR " $elem->[1]\n"; + } + } + ' "$topic" "$not_in_next" "$not_in_master" + exit 1 +fi + +<<\DOC_END + +This sample hook safeguards topic branches that have been +published from being rewound. + +The workflow assumed here is: + + * Once a topic branch forks from "master", "master" is never + merged into it again (either directly or indirectly). + + * Once a topic branch is fully cooked and merged into "master", + it is deleted. If you need to build on top of it to correct + earlier mistakes, a new topic branch is created by forking at + the tip of the "master". This is not strictly necessary, but + it makes it easier to keep your history simple. + + * Whenever you need to test or publish your changes to topic + branches, merge them into "next" branch. + +The script, being an example, hardcodes the publish branch name +to be "next", but it is trivial to make it configurable via +$GIT_DIR/config mechanism. + +With this workflow, you would want to know: + +(1) ... if a topic branch has ever been merged to "next". Young + topic branches can have stupid mistakes you would rather + clean up before publishing, and things that have not been + merged into other branches can be easily rebased without + affecting other people. But once it is published, you would + not want to rewind it. + +(2) ... if a topic branch has been fully merged to "master". + Then you can delete it. More importantly, you should not + build on top of it -- other people may already want to + change things related to the topic as patches against your + "master", so if you need further changes, it is better to + fork the topic (perhaps with the same name) afresh from the + tip of "master". + +Let's look at this example: + + o---o---o---o---o---o---o---o---o---o "next" + / / / / + / a---a---b A / / + / / / / + / / c---c---c---c B / + / / / \ / + / / / b---b C \ / + / / / / \ / + ---o---o---o---o---o---o---o---o---o---o---o "master" + + +A, B and C are topic branches. + + * A has one fix since it was merged up to "next". + + * B has finished. It has been fully merged up to "master" and "next", + and is ready to be deleted. + + * C has not merged to "next" at all. + +We would want to allow C to be rebased, refuse A, and encourage +B to be deleted. + +To compute (1): + + git rev-list ^master ^topic next + git rev-list ^master next + + if these match, topic has not merged in next at all. + +To compute (2): + + git rev-list master..topic + + if this is empty, it is fully merged to "master". + +DOC_END diff --git a/.git copy/hooks/pre-receive.sample b/.git copy/hooks/pre-receive.sample new file mode 100644 index 00000000..a1fd29ec --- /dev/null +++ b/.git copy/hooks/pre-receive.sample @@ -0,0 +1,24 @@ +#!/bin/sh +# +# An example hook script to make use of push options. +# The example simply echoes all push options that start with 'echoback=' +# and rejects all pushes when the "reject" push option is used. +# +# To enable this hook, rename this file to "pre-receive". + +if test -n "$GIT_PUSH_OPTION_COUNT" +then + i=0 + while test "$i" -lt "$GIT_PUSH_OPTION_COUNT" + do + eval "value=\$GIT_PUSH_OPTION_$i" + case "$value" in + echoback=*) + echo "echo from the pre-receive-hook: ${value#*=}" >&2 + ;; + reject) + exit 1 + esac + i=$((i + 1)) + done +fi diff --git a/.git copy/hooks/prepare-commit-msg.sample b/.git copy/hooks/prepare-commit-msg.sample new file mode 100644 index 00000000..10fa14c5 --- /dev/null +++ b/.git copy/hooks/prepare-commit-msg.sample @@ -0,0 +1,42 @@ +#!/bin/sh +# +# An example hook script to prepare the commit log message. +# Called by "git commit" with the name of the file that has the +# commit message, followed by the description of the commit +# message's source. The hook's purpose is to edit the commit +# message file. If the hook fails with a non-zero status, +# the commit is aborted. +# +# To enable this hook, rename this file to "prepare-commit-msg". + +# This hook includes three examples. The first one removes the +# "# Please enter the commit message..." help message. +# +# The second includes the output of "git diff --name-status -r" +# into the message, just before the "git status" output. It is +# commented because it doesn't cope with --amend or with squashed +# commits. +# +# The third example adds a Signed-off-by line to the message, that can +# still be edited. This is rarely a good idea. + +COMMIT_MSG_FILE=$1 +COMMIT_SOURCE=$2 +SHA1=$3 + +/usr/bin/perl -i.bak -ne 'print unless(m/^. Please enter the commit message/..m/^#$/)' "$COMMIT_MSG_FILE" + +# case "$COMMIT_SOURCE,$SHA1" in +# ,|template,) +# /usr/bin/perl -i.bak -pe ' +# print "\n" . `git diff --cached --name-status -r` +# if /^#/ && $first++ == 0' "$COMMIT_MSG_FILE" ;; +# *) ;; +# esac + +# SOB=$(git var GIT_COMMITTER_IDENT | sed -n 's/^\(.*>\).*$/Signed-off-by: \1/p') +# git interpret-trailers --in-place --trailer "$SOB" "$COMMIT_MSG_FILE" +# if test -z "$COMMIT_SOURCE" +# then +# /usr/bin/perl -i.bak -pe 'print "\n" if !$first_line++' "$COMMIT_MSG_FILE" +# fi diff --git a/.git copy/hooks/push-to-checkout.sample b/.git copy/hooks/push-to-checkout.sample new file mode 100644 index 00000000..af5a0c00 --- /dev/null +++ b/.git copy/hooks/push-to-checkout.sample @@ -0,0 +1,78 @@ +#!/bin/sh + +# An example hook script to update a checked-out tree on a git push. +# +# This hook is invoked by git-receive-pack(1) when it reacts to git +# push and updates reference(s) in its repository, and when the push +# tries to update the branch that is currently checked out and the +# receive.denyCurrentBranch configuration variable is set to +# updateInstead. +# +# By default, such a push is refused if the working tree and the index +# of the remote repository has any difference from the currently +# checked out commit; when both the working tree and the index match +# the current commit, they are updated to match the newly pushed tip +# of the branch. This hook is to be used to override the default +# behaviour; however the code below reimplements the default behaviour +# as a starting point for convenient modification. +# +# The hook receives the commit with which the tip of the current +# branch is going to be updated: +commit=$1 + +# It can exit with a non-zero status to refuse the push (when it does +# so, it must not modify the index or the working tree). +die () { + echo >&2 "$*" + exit 1 +} + +# Or it can make any necessary changes to the working tree and to the +# index to bring them to the desired state when the tip of the current +# branch is updated to the new commit, and exit with a zero status. +# +# For example, the hook can simply run git read-tree -u -m HEAD "$1" +# in order to emulate git fetch that is run in the reverse direction +# with git push, as the two-tree form of git read-tree -u -m is +# essentially the same as git switch or git checkout that switches +# branches while keeping the local changes in the working tree that do +# not interfere with the difference between the branches. + +# The below is a more-or-less exact translation to shell of the C code +# for the default behaviour for git's push-to-checkout hook defined in +# the push_to_deploy() function in builtin/receive-pack.c. +# +# Note that the hook will be executed from the repository directory, +# not from the working tree, so if you want to perform operations on +# the working tree, you will have to adapt your code accordingly, e.g. +# by adding "cd .." or using relative paths. + +if ! git update-index -q --ignore-submodules --refresh +then + die "Up-to-date check failed" +fi + +if ! git diff-files --quiet --ignore-submodules -- +then + die "Working directory has unstaged changes" +fi + +# This is a rough translation of: +# +# head_has_history() ? "HEAD" : EMPTY_TREE_SHA1_HEX +if git cat-file -e HEAD 2>/dev/null +then + head=HEAD +else + head=$(git hash-object -t tree --stdin &2 + exit 1 +} + +unset GIT_DIR GIT_WORK_TREE +cd "$worktree" && + +if grep -q "^diff --git " "$1" +then + validate_patch "$1" +else + validate_cover_letter "$1" +fi && + +if test "$GIT_SENDEMAIL_FILE_COUNTER" = "$GIT_SENDEMAIL_FILE_TOTAL" +then + git config --unset-all sendemail.validateWorktree && + trap 'git worktree remove -ff "$worktree"' EXIT && + validate_series +fi diff --git a/.git copy/hooks/update.sample b/.git copy/hooks/update.sample new file mode 100644 index 00000000..c4d426bc --- /dev/null +++ b/.git copy/hooks/update.sample @@ -0,0 +1,128 @@ +#!/bin/sh +# +# An example hook script to block unannotated tags from entering. +# Called by "git receive-pack" with arguments: refname sha1-old sha1-new +# +# To enable this hook, rename this file to "update". +# +# Config +# ------ +# hooks.allowunannotated +# This boolean sets whether unannotated tags will be allowed into the +# repository. By default they won't be. +# hooks.allowdeletetag +# This boolean sets whether deleting tags will be allowed in the +# repository. By default they won't be. +# hooks.allowmodifytag +# This boolean sets whether a tag may be modified after creation. By default +# it won't be. +# hooks.allowdeletebranch +# This boolean sets whether deleting branches will be allowed in the +# repository. By default they won't be. +# hooks.denycreatebranch +# This boolean sets whether remotely creating branches will be denied +# in the repository. By default this is allowed. +# + +# --- Command line +refname="$1" +oldrev="$2" +newrev="$3" + +# --- Safety check +if [ -z "$GIT_DIR" ]; then + echo "Don't run this script from the command line." >&2 + echo " (if you want, you could supply GIT_DIR then run" >&2 + echo " $0 )" >&2 + exit 1 +fi + +if [ -z "$refname" -o -z "$oldrev" -o -z "$newrev" ]; then + echo "usage: $0 " >&2 + exit 1 +fi + +# --- Config +allowunannotated=$(git config --type=bool hooks.allowunannotated) +allowdeletebranch=$(git config --type=bool hooks.allowdeletebranch) +denycreatebranch=$(git config --type=bool hooks.denycreatebranch) +allowdeletetag=$(git config --type=bool hooks.allowdeletetag) +allowmodifytag=$(git config --type=bool hooks.allowmodifytag) + +# check for no description +projectdesc=$(sed -e '1q' "$GIT_DIR/description") +case "$projectdesc" in +"Unnamed repository"* | "") + echo "*** Project description file hasn't been set" >&2 + exit 1 + ;; +esac + +# --- Check types +# if $newrev is 0000...0000, it's a commit to delete a ref. +zero=$(git hash-object --stdin &2 + echo "*** Use 'git tag [ -a | -s ]' for tags you want to propagate." >&2 + exit 1 + fi + ;; + refs/tags/*,delete) + # delete tag + if [ "$allowdeletetag" != "true" ]; then + echo "*** Deleting a tag is not allowed in this repository" >&2 + exit 1 + fi + ;; + refs/tags/*,tag) + # annotated tag + if [ "$allowmodifytag" != "true" ] && git rev-parse $refname > /dev/null 2>&1 + then + echo "*** Tag '$refname' already exists." >&2 + echo "*** Modifying a tag is not allowed in this repository." >&2 + exit 1 + fi + ;; + refs/heads/*,commit) + # branch + if [ "$oldrev" = "$zero" -a "$denycreatebranch" = "true" ]; then + echo "*** Creating a branch is not allowed in this repository" >&2 + exit 1 + fi + ;; + refs/heads/*,delete) + # delete branch + if [ "$allowdeletebranch" != "true" ]; then + echo "*** Deleting a branch is not allowed in this repository" >&2 + exit 1 + fi + ;; + refs/remotes/*,commit) + # tracking branch + ;; + refs/remotes/*,delete) + # delete tracking branch + if [ "$allowdeletebranch" != "true" ]; then + echo "*** Deleting a tracking branch is not allowed in this repository" >&2 + exit 1 + fi + ;; + *) + # Anything else (is there anything else?) + echo "*** Update hook: unknown type of update to ref $refname of type $newrev_type" >&2 + exit 1 + ;; +esac + +# --- Finished +exit 0 diff --git a/.git copy/index b/.git copy/index new file mode 100644 index 0000000000000000000000000000000000000000..d62672489b2b45b9a662224da32115a0cee07eda GIT binary patch literal 3256 zcmb7G2~ZPf6#mh0G@y6{MYIN_h)78c1Q1XpawsTBLqPD3$qKAKOUzsuYs^1VtgFWsCeC`l2;9R`8nK;r3WHd**yp2E2)5t#S_GeVJSr1 zN5sMH10x}^4#3CpKymI9;j|PpFzOp{Yx~TGZ6@=ksXTxKO_V66Zz)sup|gzWrDLuRe4;cZ+Ldv`h}hH-C)76`4}t^fsfmJHw^SS zs3+yU+V;{$SjAdKoobq9PQR;mI5Hd_9Ei({gQSLe5YGu#rx#X;em%_i`v#_~k_Tm% zPOVp7NxW{t>ZR6Df!`PO;K5=9FNBn6SbyD$wo~!v)3GQC*Wvxr3jO$G7w4G?f|8gB zQE!`je8B4YcE=8#%mS=o;A-=Z4_y+o)R9Q2jfBA)}OH@nuXSY90SyZ(6d;$fy4h>H$weDSn<@5o! zlfzI0mHs?O+C9GG;`JaPt?9_Q)Ha2pciyWfMxvqOY9%&+i{`uf(H#A_<}D>1eVg|e zK+`kg_xq2IZHwBL?dJ--zmTsCk|qjx5TS5{=JHeg9JxAsbSRP` zC&|OM4jo^sydivPK0X&2qgFpYm}>V`pBT9P7UDUXCB?f+s>T5)UH(!?h8}pB z)aXp3J9j^tW$-)|uQ-G?fYaufRCM%7P+(JqO(> z(^i?o4h%#`%7wty&DND1K3Po(8K2QJBQc`;amUNGgZ6vYps@kN6LpT6v~uhp_G|^k z$?E=5bJ3!Wzn2+^n`t5v@kf?D*kE!@v!Em=_kSFs-gj=~L zC$5M(TuREH#4>qjJQp2H0Pd`vRUyC8)a>Q9rO|ZrPjhp+gz;yz^NMCe0lTKzi8Ww+ zw#$(dscH!Q{bd-04KkRQNiOSu$Wi|7>%tu6v97V+nSUgc)TeoK05{uNkjf>OevmzzNZfk%^^`w_?QThb$yQSl>t8y1YCJ!{Om+M%e-E1$UQKNHwm A;s5{u literal 0 HcmV?d00001 diff --git a/.git copy/info/exclude b/.git copy/info/exclude new file mode 100644 index 00000000..a5196d1b --- /dev/null +++ b/.git copy/info/exclude @@ -0,0 +1,6 @@ +# git ls-files --others --exclude-from=.git/info/exclude +# Lines that start with '#' are comments. +# For a project mostly in C, the following would be a good set of +# exclude patterns (uncomment them if you want to use them): +# *.[oa] +# *~ diff --git a/.git copy/logs/HEAD b/.git copy/logs/HEAD new file mode 100644 index 00000000..a36915b3 --- /dev/null +++ b/.git copy/logs/HEAD @@ -0,0 +1,17 @@ +0000000000000000000000000000000000000000 6384bc9d68a379065625d0abf32a1435babc8b82 Revan 1772792863 +0400 clone: from https://github.com/kenanqafarov/ironSchool.git +6384bc9d68a379065625d0abf32a1435babc8b82 6384bc9d68a379065625d0abf32a1435babc8b82 Revan 1772792976 +0400 checkout: moving from main to revan-dev +6384bc9d68a379065625d0abf32a1435babc8b82 2ed2a724b6b8193fa011365afd3be19046c235a5 Revan 1772794104 +0400 commit: student and course was handled +2ed2a724b6b8193fa011365afd3be19046c235a5 6384bc9d68a379065625d0abf32a1435babc8b82 Revan 1772794141 +0400 checkout: moving from revan-dev to main +6384bc9d68a379065625d0abf32a1435babc8b82 2ed2a724b6b8193fa011365afd3be19046c235a5 Revan 1772794157 +0400 merge revan-dev: Fast-forward +2ed2a724b6b8193fa011365afd3be19046c235a5 a8d7d32b92d7f1bf0f5a10d75c4abdaacc45e1ba Revan 1772794397 +0400 commit: Testing +a8d7d32b92d7f1bf0f5a10d75c4abdaacc45e1ba a8d7d32b92d7f1bf0f5a10d75c4abdaacc45e1ba Revan 1772794435 +0400 reset: moving to HEAD +a8d7d32b92d7f1bf0f5a10d75c4abdaacc45e1ba b697d3465890103d15eeefaedb2024a9df576de2 Revan 1772794493 +0400 commit (merge): kenanrevan +b697d3465890103d15eeefaedb2024a9df576de2 2ed2a724b6b8193fa011365afd3be19046c235a5 Revan 1772797894 +0400 checkout: moving from main to revan-dev +2ed2a724b6b8193fa011365afd3be19046c235a5 7d80be016f67d7ef11b6a04d568b38e4001b0958 Revan 1772797955 +0400 commit: prepull +7d80be016f67d7ef11b6a04d568b38e4001b0958 b697d3465890103d15eeefaedb2024a9df576de2 Revan 1772797978 +0400 checkout: moving from revan-dev to main +b697d3465890103d15eeefaedb2024a9df576de2 e74de7e1ae1be7603b36fda1d3992d86353939e6 Revan 1772797983 +0400 pull: Fast-forward +e74de7e1ae1be7603b36fda1d3992d86353939e6 7d80be016f67d7ef11b6a04d568b38e4001b0958 Revan 1772798009 +0400 checkout: moving from main to revan-dev +7d80be016f67d7ef11b6a04d568b38e4001b0958 9b1fc70ab3fdf983c52a2c3dd7ce352d70108c44 Revan 1772798061 +0400 commit (merge): prepull +9b1fc70ab3fdf983c52a2c3dd7ce352d70108c44 54250bf3556318005e3bff92769ba775cef3fad0 Revan 1772885987 +0400 commit: my work is done +54250bf3556318005e3bff92769ba775cef3fad0 e74de7e1ae1be7603b36fda1d3992d86353939e6 Revan 1772903337 +0400 checkout: moving from revan-dev to main +e74de7e1ae1be7603b36fda1d3992d86353939e6 54250bf3556318005e3bff92769ba775cef3fad0 Revan 1772903353 +0400 merge revan-dev: Fast-forward diff --git a/.git copy/logs/refs/heads/main b/.git copy/logs/refs/heads/main new file mode 100644 index 00000000..7ab3cbda --- /dev/null +++ b/.git copy/logs/refs/heads/main @@ -0,0 +1,6 @@ +0000000000000000000000000000000000000000 6384bc9d68a379065625d0abf32a1435babc8b82 Revan 1772792863 +0400 clone: from https://github.com/kenanqafarov/ironSchool.git +6384bc9d68a379065625d0abf32a1435babc8b82 2ed2a724b6b8193fa011365afd3be19046c235a5 Revan 1772794157 +0400 merge revan-dev: Fast-forward +2ed2a724b6b8193fa011365afd3be19046c235a5 a8d7d32b92d7f1bf0f5a10d75c4abdaacc45e1ba Revan 1772794397 +0400 commit: Testing +a8d7d32b92d7f1bf0f5a10d75c4abdaacc45e1ba b697d3465890103d15eeefaedb2024a9df576de2 Revan 1772794493 +0400 commit (merge): kenanrevan +b697d3465890103d15eeefaedb2024a9df576de2 e74de7e1ae1be7603b36fda1d3992d86353939e6 Revan 1772797983 +0400 pull: Fast-forward +e74de7e1ae1be7603b36fda1d3992d86353939e6 54250bf3556318005e3bff92769ba775cef3fad0 Revan 1772903353 +0400 merge revan-dev: Fast-forward diff --git a/.git copy/logs/refs/heads/revan-dev b/.git copy/logs/refs/heads/revan-dev new file mode 100644 index 00000000..4a198715 --- /dev/null +++ b/.git copy/logs/refs/heads/revan-dev @@ -0,0 +1,5 @@ +0000000000000000000000000000000000000000 6384bc9d68a379065625d0abf32a1435babc8b82 Revan 1772792976 +0400 branch: Created from HEAD +6384bc9d68a379065625d0abf32a1435babc8b82 2ed2a724b6b8193fa011365afd3be19046c235a5 Revan 1772794104 +0400 commit: student and course was handled +2ed2a724b6b8193fa011365afd3be19046c235a5 7d80be016f67d7ef11b6a04d568b38e4001b0958 Revan 1772797955 +0400 commit: prepull +7d80be016f67d7ef11b6a04d568b38e4001b0958 9b1fc70ab3fdf983c52a2c3dd7ce352d70108c44 Revan 1772798061 +0400 commit (merge): prepull +9b1fc70ab3fdf983c52a2c3dd7ce352d70108c44 54250bf3556318005e3bff92769ba775cef3fad0 Revan 1772885987 +0400 commit: my work is done diff --git a/.git copy/logs/refs/remotes/origin/HEAD b/.git copy/logs/refs/remotes/origin/HEAD new file mode 100644 index 00000000..1e646123 --- /dev/null +++ b/.git copy/logs/refs/remotes/origin/HEAD @@ -0,0 +1 @@ +0000000000000000000000000000000000000000 6384bc9d68a379065625d0abf32a1435babc8b82 Revan 1772792863 +0400 clone: from https://github.com/kenanqafarov/ironSchool.git diff --git a/.git copy/logs/refs/remotes/origin/kenan-dev b/.git copy/logs/refs/remotes/origin/kenan-dev new file mode 100644 index 00000000..469ed6ba --- /dev/null +++ b/.git copy/logs/refs/remotes/origin/kenan-dev @@ -0,0 +1,2 @@ +0000000000000000000000000000000000000000 a9cac2e46b68ca0af6218a87e8f4cbf0970701a4 Revan 1772794221 +0400 pull: storing head +a9cac2e46b68ca0af6218a87e8f4cbf0970701a4 da50f00ab691b4990d1e69895113255906630b6e Revan 1772797918 +0400 pull: fast-forward diff --git a/.git copy/logs/refs/remotes/origin/main b/.git copy/logs/refs/remotes/origin/main new file mode 100644 index 00000000..dc623029 --- /dev/null +++ b/.git copy/logs/refs/remotes/origin/main @@ -0,0 +1,4 @@ +6384bc9d68a379065625d0abf32a1435babc8b82 02afc96de49e4fec2e069b859ac162efbed90bbf Revan 1772794367 +0400 pull: fast-forward +02afc96de49e4fec2e069b859ac162efbed90bbf b697d3465890103d15eeefaedb2024a9df576de2 Revan 1772794505 +0400 update by push +b697d3465890103d15eeefaedb2024a9df576de2 e74de7e1ae1be7603b36fda1d3992d86353939e6 Revan 1772797918 +0400 pull: fast-forward +e74de7e1ae1be7603b36fda1d3992d86353939e6 54250bf3556318005e3bff92769ba775cef3fad0 Revan 1772903445 +0400 update by push diff --git a/.git copy/logs/refs/remotes/origin/revan-dev b/.git copy/logs/refs/remotes/origin/revan-dev new file mode 100644 index 00000000..2cdde4e1 --- /dev/null +++ b/.git copy/logs/refs/remotes/origin/revan-dev @@ -0,0 +1,2 @@ +0000000000000000000000000000000000000000 2ed2a724b6b8193fa011365afd3be19046c235a5 Revan 1772794122 +0400 update by push +2ed2a724b6b8193fa011365afd3be19046c235a5 54250bf3556318005e3bff92769ba775cef3fad0 Revan 1772903322 +0400 update by push diff --git a/.git copy/objects/02/67b93cefd2f812ae77f40cec511fd5d6b2d780 b/.git copy/objects/02/67b93cefd2f812ae77f40cec511fd5d6b2d780 new file mode 100644 index 0000000000000000000000000000000000000000..af9c2d333965bd7c748cf7b5d3bca059963dce92 GIT binary patch literal 234 zcmV5F<~$?FfcPQQP4}zEJ-XWDauSLElDkAuy)MQI$HVbcUshL z-#@pOty)#6*n*@oGd(ZAD3u|tYTbtu6BqU*mT#CH?AZNvPS#F&69XVn(912$V`$sx zv@h4sYj?-O?IsPeUfzzqFTX$y0ZNxM?CqGgUrBsR{wk)45pj%bq)Z%FMj*-SCFiCv zOmgL)tZq`U-s#;tPl=NCo0w-8a6#1+gf0V^p=O;s>6XD~4U0)?!^vP1^;uU-iU9_<$08Mv=TBI%Gwcgt}Zh;&hE laeir0a%wSygOstv^5YLREw^p>ocO@`{~_hYq5%719dO-vBi;Z2 literal 0 HcmV?d00001 diff --git a/.git copy/objects/02/afc96de49e4fec2e069b859ac162efbed90bbf b/.git copy/objects/02/afc96de49e4fec2e069b859ac162efbed90bbf new file mode 100644 index 0000000000000000000000000000000000000000..d45241e4e99bf00275d47ba594805d8583ba228e GIT binary patch literal 157 zcmV;O0Al}m0i}*X4#FT106p^x?j~jn+XWJ1^eGE0+E|J<==*JqKkzo0!(>vcb?VyK zao1N7ZDm9Rgt3r~1QAmX*`v3>4vZ~?6ms%WJ$RL+YYvH%5u`{yF>oO>c=k?w!4wMw z2Mz{C#jk#AtG>&^%aaSQ?X8bL_)4JjwemC{QmZFDIA>fyYf1079Z;LyM!WoxP?veu Lxh9WH2!R0)>>++MxB@*hJVJq#{i9VK6ZO0)^Cy#N2|MR0c0EX68ECu-dm`%Fe3NulJ>g)Eol< H0^<#j;NumU literal 0 HcmV?d00001 diff --git a/.git copy/objects/0e/f93a0ec2e724495981f1952185da98f724b3cf b/.git copy/objects/0e/f93a0ec2e724495981f1952185da98f724b3cf new file mode 100644 index 0000000000000000000000000000000000000000..06bd7eb3da533467ed644aa13f73c27abf9a5088 GIT binary patch literal 74 zcmV-Q0JZ;k0V^p=O;s>6VlXiP0)^bf%sd9~4q>*%r)@W%Z(icDJZl|eUG0>1h;&J6 gaS6l!x5>VhXMSk*D{e~vSzD`LDbk+>0CMRYmv(g_00000 literal 0 HcmV?d00001 diff --git a/.git copy/objects/10/195d11ca235288142915e2a70b6d4b77adb861 b/.git copy/objects/10/195d11ca235288142915e2a70b6d4b77adb861 new file mode 100644 index 0000000000000000000000000000000000000000..da04728bb551a8f506a161713d9cf36c0d0a530e GIT binary patch literal 74 zcmV-Q0JZ;k0V^p=O;s>6VlXiP0)^bf%shrqKTV_>W;7i59QjMpx}qdZXxVdlh;&J6 gaS6l!x5>VhXMSk*D{e~vSzD`LDbk+>0HY=xY*3FMmjD0& literal 0 HcmV?d00001 diff --git a/.git copy/objects/10/4317dc26118e5bfb62845e713637292bf33736 b/.git copy/objects/10/4317dc26118e5bfb62845e713637292bf33736 new file mode 100644 index 0000000000000000000000000000000000000000..d797bd5e5a9a97be59387768c0625f56983e6e62 GIT binary patch literal 165 zcmV;W09yZe0V^p=O;s>7HDNF`FfcPQQE*Ak&37y)$jMAjEXmBz)5}UMOJqpdYO%1U z^&RG3Tcz=KBL(vxrmf4D1 z5+SN`^HWlDiW&O!XBb_`2tA5F<~$?FfcPQQP4}zEJ-XWDauSLElDkAuy)MQI$HVbcUshL z-#@pOty)#6*n*@oGd(ZAD3u|tYTbtu6BqU*mT#CH?AZNvPS#F&69XVn(912$V`$sx zv@h4sYj?-O?IsPeUfzzqFTX$y0ZNxM?CqGgUrBsR{wk)45pj%bq)Z%FMj*-SCFiCv zOmgL)tZq`U-s#;tPl=NCo0w-8a6#1+6VlXiP0)^bf%shtcf(w4`dFk`qvs6!+Mc9|K>gt=V5b2WC g;u41cZ0V^p=O;s>9U@$QN0)^!KT!u?ipLLnd;@)J;V*0aQQ$|wk-{J)T?9&Z| DnK2ZM literal 0 HcmV?d00001 diff --git a/.git copy/objects/1a/391d331f0dff9fa72bd7ba73d0eb8c0f3ace44 b/.git copy/objects/1a/391d331f0dff9fa72bd7ba73d0eb8c0f3ace44 new file mode 100644 index 0000000000000000000000000000000000000000..ecc798f759e575e6dc2092e3371452b06524f020 GIT binary patch literal 46 zcmV+}0MY+=0V^p=O;s>9WH2!R0)>>++m` B6KMbd literal 0 HcmV?d00001 diff --git a/.git copy/objects/1b/9477616dfa5c6b8f43e05f3eb711d187ab9a96 b/.git copy/objects/1b/9477616dfa5c6b8f43e05f3eb711d187ab9a96 new file mode 100644 index 0000000000000000000000000000000000000000..af18c0f5f4a30eea20daa85b2bd512e51adeef2c GIT binary patch literal 138 zcmV;50CoR(0d}IvLTy5;JA191b-^qZ{{1u z2DUIB#$7h}Ff##i)YMJPfwZH@`q+_j^_*l5aB literal 0 HcmV?d00001 diff --git a/.git copy/objects/1f/652969d7369b984ef912b2676faffebf6b5c0b b/.git copy/objects/1f/652969d7369b984ef912b2676faffebf6b5c0b new file mode 100644 index 0000000000000000000000000000000000000000..cfc21a577ec3b8d62544af524c9c88fe19ecc07b GIT binary patch literal 165 zcmV;W09yZe0V^p=O;s>7HDNF`FfcPQQE*Ak&37y)$jMAjEXmBz)5}UMOJqpdYO%1U z^&RG3Tcz=KBL(vxrmf4D1 z5+SN`^HWlDiW!Ww_BUvoe7;wBO(M`gpu=^8j^S5`g5uPovdrYvVg^2~FI!*F2-ZC% Tb!L61_58Q8@j==EOA$di^j}a( literal 0 HcmV?d00001 diff --git a/.git copy/objects/26/bdf9cc34037fd0d1f3d54ea4131680f023c129 b/.git copy/objects/26/bdf9cc34037fd0d1f3d54ea4131680f023c129 new file mode 100644 index 0000000000000000000000000000000000000000..4f7a6f31c6dc545740c7b83d7ccd7d343a0b4fdf GIT binary patch literal 234 zcmV5F<~$?FfcPQQP4}zEJ-XWDauSLElDkAuy)MQI$HVbcUshL z-#@pOty)#6*n*@oGd(ZAD3u|tYTbtu6BqU*mT#CH?AZNvPS#F&69XVn(912$V`$sx zv@h4sYj?-O?IsPeUfzzqFTX$y0ZNxM?CqGgUrBsR{wk)45pj%bq)Z%FMj*-SCFiCv zOmgL)tZq`U-s#;tPl=NCo0w-8a6#1+H|7v}7|C*KqST9T&A!cV{i+{oS#E@?3rS5(&PXkSsCyhA a=%!~a6KioJ$g%pm09$Vm(-HuzATL5aMl~b= literal 0 HcmV?d00001 diff --git a/.git copy/objects/2a/833a13ee965d91d6d62dcf66824e1f97af95af b/.git copy/objects/2a/833a13ee965d91d6d62dcf66824e1f97af95af new file mode 100644 index 0000000000000000000000000000000000000000..808ecbdc0d67558b3ec0506a66dc944bd1e4d46a GIT binary patch literal 366 zcmV-!0g?WA0hN<@Y8|cRDESSEKiw(%> zoS@TcJ*b^7ok$iCRrF-r%wdg9Tjo0F|7r9DEQ=9YUY^mIVI$d&44$Lnp3gZo0EXtX8w1!s7cI;k>i<-{T$BaZ?Q~up_Al!?!+k`B**wR M_wH2u0@7z%1VO91#sB~S literal 0 HcmV?d00001 diff --git a/.git copy/objects/2b/2a7569ae59536df7db356a445f4221a89daf89 b/.git copy/objects/2b/2a7569ae59536df7db356a445f4221a89daf89 new file mode 100644 index 0000000000000000000000000000000000000000..7e92ab07e791a99eddd62811dbb4eb95319329aa GIT binary patch literal 717 zcmV;;0y6!00hLzUYTPgo?X$l^A?L0sENbBC|Fh2L z{@E88kDz;$19&E|hG^RnS>81%(V`pVDW3O&(Tk?06ZMYC#UdM}f2B=e&R<7;U|wB! ztVRZS zM_h+6k*iPCrgmAg?orM5 zkV3nHTF&n2Mo6Dr;2iM+X{)0%HXl&-Ln-=fVZ4Fb!%a{gVMofD{k7SDtPXv$oU3a^ literal 0 HcmV?d00001 diff --git a/.git copy/objects/2b/ffb79f07f31727d8725dd7e8d5efd2f6d5ce8c b/.git copy/objects/2b/ffb79f07f31727d8725dd7e8d5efd2f6d5ce8c new file mode 100644 index 0000000000000000000000000000000000000000..9759d0b062ff8fcd75ea4958dafccc0c306d39f7 GIT binary patch literal 74 zcmV-Q0JZ;k0V^p=O;s>6VlXiP0)^bf%sd7&xdgY#wi>rjHm!C})4lpXqM3^uB3+VN gT*C1GZL)9WnID?{iks4Z*4FA*iu7jz083vQmW~)Ai2wiq literal 0 HcmV?d00001 diff --git a/.git copy/objects/2c/0a7f7563ae882eaab072f3e71506fb5e75c054 b/.git copy/objects/2c/0a7f7563ae882eaab072f3e71506fb5e75c054 new file mode 100644 index 00000000..f9fb0ff2 --- /dev/null +++ b/.git copy/objects/2c/0a7f7563ae882eaab072f3e71506fb5e75c054 @@ -0,0 +1,3 @@ +xu +1DSMJdKB Lr +>*3s-væw7qM*8˨Ti6f 3=Pr ~C?psox)B'AB \ No newline at end of file diff --git a/.git copy/objects/2d/4763ff9c9e2b07d223adb7f66cd17e4f7c91a2 b/.git copy/objects/2d/4763ff9c9e2b07d223adb7f66cd17e4f7c91a2 new file mode 100644 index 0000000000000000000000000000000000000000..2ae7a7bc78ea8651dbaf3aac6dd3ab1f83516808 GIT binary patch literal 166 zcmV;X09pTd0V^p=O;s>7HDNF`FfcPQQE*Ak&37y)$jMAjEXmBz)5}UMOJqpdYO%1U z^&RG3Tcz=KBL(vxrmf4D1 z5+SN`^HWlDiWxRdUHoa8v+tP)yFcvla1IH6Dr0GvBQGWkkO6aWAK literal 0 HcmV?d00001 diff --git a/.git copy/objects/2e/1e08f4a91e1c71381b4bb880e0b0c79190712a b/.git copy/objects/2e/1e08f4a91e1c71381b4bb880e0b0c79190712a new file mode 100644 index 0000000000000000000000000000000000000000..fc47a12b7f624419102eb8a052aed9a66a4a7007 GIT binary patch literal 128 zcmV-`0Du2@0V^p=O;s>7F<>w>FfcPQQE<*LEh-5tNnXbXFXJPa7k%OYF-J7@;RMMGCR!viJbO&^2uM$I@9cp<}ax7kkrKF ijMO3&<%g4a>)cj5{S`G`*juyf{V^9;;SB(sggXCe$vhzd literal 0 HcmV?d00001 diff --git a/.git copy/objects/2e/d2a724b6b8193fa011365afd3be19046c235a5 b/.git copy/objects/2e/d2a724b6b8193fa011365afd3be19046c235a5 new file mode 100644 index 00000000..54197c08 --- /dev/null +++ b/.git copy/objects/2e/d2a724b6b8193fa011365afd3be19046c235a5 @@ -0,0 +1,2 @@ +x] +0})]4D<7MR[$i2/3 |!@?$;{kh.7v}7sS3y%W@-BT}WzTaz<(qMBQ~4 b(X5Y~BKApLWk1ud+&hgeLbe+K(>XCSG-EXa literal 0 HcmV?d00001 diff --git a/.git copy/objects/33/04bfb5f96d12dc3dbb8fcb764ecd4e45df0a1f b/.git copy/objects/33/04bfb5f96d12dc3dbb8fcb764ecd4e45df0a1f new file mode 100644 index 0000000000000000000000000000000000000000..414a5c3fd748c2133c535a55a883cef7258a8d11 GIT binary patch literal 74 zcmV-Q0JZ;k0V^p=O;s>6VlXiP0)^bf%shtU5rNjvx3k%?c0X<3@lM~yVUC>+M7kuk gxP;;V+hpI$Ge0!@6*r~-tgY3r6zR_b0B9K-83>;v?f?J) literal 0 HcmV?d00001 diff --git a/.git copy/objects/33/1f2a7a69e8bf358ed27f930dec3d228539bfa4 b/.git copy/objects/33/1f2a7a69e8bf358ed27f930dec3d228539bfa4 new file mode 100644 index 0000000000000000000000000000000000000000..198d4b10560415dbd8c32a8336a22b485f09aff0 GIT binary patch literal 120 zcmV-;0Ehp00V^p=O;s>7v}7|C*KqST9T&A!cV{i+{oS#E@?3rS5(&PXkSsCyhA a=%!~a6KioJ$g%pm09$Vm(-Ht+kS>@JlQ@O| literal 0 HcmV?d00001 diff --git a/.git copy/objects/34/e8d1672955726d9f14874d00dcce27e3bdd87f b/.git copy/objects/34/e8d1672955726d9f14874d00dcce27e3bdd87f new file mode 100644 index 0000000000000000000000000000000000000000..02f22c73a78b6318bde91dd2856dcaee77deb528 GIT binary patch literal 1182 zcmV;P1Y!Gl0j*ctZrnBy?el)c*bl)jk|;n?6h#snaT5n!q$vux>1#nt+_f4>R7q;> zMdN?(j5xgL;&`1}PZBwtIdkU1(PgDB;fL>k`tiF~Laype-iW%bWLC&pWk%{< znM?C(u_)_SX*(6ERUs>ry;Yqy^3{D}7q%;8V}qR1+sw4OY_=OMYI&{n=j>97#$+3j zTc!7zXc}dOEmf19byi)MS{7eDZmiT&*?lXs3kN@<|6A-t*4eVk&a@W$UrQ6A#JyjH zx%w#DU?uL{abRBf)2H=2H2sEAEZXj}Ds#vyVGJ-4ya)d-7Jv^ju@hFprfft7sP^@R zC32p5`BN~CLEM8AXyi38+SjMc6&s^nHwXL{S!m|y2NxojzCmd74o zuQ~6t2`(i_(s+!Fksf+(!yDmXuqhN?dK@%f|G|KIwo*9#!sCE(x(|ZFvE(FN7np;T z=9$J^Q8m3TSD95#j1tn33qF5+`f~32d~t~qGQ_1uJj~{>9a%oHE|vj9VujbRII_00 zQRJDoo5*TuJKgvVXY6)1x3|IU&wDgH<{-^V%AEkrhbt8zJ|2>`>vs?XLsc=KvrLQk z2I)QI@!axG{F`#0fhK=g5XEc>+g_;qDf|%BX4x?2-@6hJlT+6JtBPe2^)YC2Rcp zHG@4xV{`rDLB@JXGUcd_9m6HqOn`A%k&}BW(muM5!p39N$AP6xp*Uj0)W~wxSW!0S zgWUUE#{5VV|DiqQn+o;9Rp7&Nw`*jhRjAkZTGeg}Nj!-`OPtm?eeUE$Y9^oq1M7y> zk9%~eTsPYwfk~vl$u(z)h7W!_;kk)Nstilp?ev#Mup8awbE+zW24*0hO|MW&j3~^l zAoYXtAP7*|e@v#fc$Bmcc2@8_IfuKyYaIGRnf5M&jqj9`m?~W8p-Vr9ZJ0XXcr_4O(6VlXiP0)^bf%sd9BddCRq^OiQhoL`=K{P|||0Y}}p5b2WC g;u41cZ9VK6ZO0)^Cy#N2|MRE95N`I?94RNfGuaX9a;R>ZHbvb%2s I05TB~Yx@NiE&u=k literal 0 HcmV?d00001 diff --git a/.git copy/objects/36/1e6046933d28dbc982ab43662dd5ff58830a0b b/.git copy/objects/36/1e6046933d28dbc982ab43662dd5ff58830a0b new file mode 100644 index 0000000000000000000000000000000000000000..6875b743e87131d9d338ec524256b1fb0002ec60 GIT binary patch literal 79 zcmV-V0I>gf0V^p=O;s>6XD~4U0)?!^vP6c+gaGb+Q!eML&NI#MbM{L+uA#XYB3+bP loL^d$oLbD_AZ0AE{P;sn%WWGzCq8ige@J<;C;+F+8@fNiBar|A literal 0 HcmV?d00001 diff --git a/.git copy/objects/39/8646f243459fd5af14c77bba2312478b18c442 b/.git copy/objects/39/8646f243459fd5af14c77bba2312478b18c442 new file mode 100644 index 0000000000000000000000000000000000000000..931e2ae5629c3d2788faf5f138718fb8b1437e14 GIT binary patch literal 1323 zcmV+`1=RX@0liq;ZrnBy?X$ju_Cv6XILb>36!8Vw#tyP*QxtI0*MgR~Yc-OnlGNIZ z#Q)wIa(I!njyH}`0S2_xTn=Z>42Qm|Ui;)uLUb)lZ#v4bhXG!(a2m2 zwW$iBkF)H=J?#C(;ykOGPAW5%Z)7QIonM;16s z`-7LI5?Y7fqTy9N|B^9yycP0j9eP{NNYHj_$5xHRbq-%=^aHS=MI}tHTEB(k?9Kxo zY;i5jqOQFefNc}$wFunM6p-UC%i!xN#+TtMe5v zj8xm4x2-hXRI<$%y^%MS66H75f1FzHxxW6uyWnL^x(QEr3xE2wJO>8t$xxflAx*(7 zuoPK^Y_d5EY=v*^lp$jYE%6me@g@XnVAQ3^*F<3x=8KQLe91mawi2eeh6aGS)Qq$?)`rjf1K{w=s_MVUFPuHHPC9$Oetn+O@7YQ<()1?&_y*4H)r`qh?JUg?XbGuzpG zo=BsHxmNPV24Pv(V$JJ?TK5g~sEgY|bjX?6p$BL!7nV)zN-%*I52=dK*4+RH)nN*S zmYxQUx4$*F|_#jG>|57 zmsV}sj~E5z2$F+6Gb)o399)JpmZ1?Y%c&p~N8a_u_sV5?6nb4WI_!6D9aAY~ewMkf&H|4`*R;k}-Fb(RTGL4K0}(pW;a%HoWcyC{YZC z+1|*?w>vUF$#gi>!N(uzp%1?oqjMjYE-a0co<(+jNFYliY7y2!tZZ9!{@4L^#%Isi z0b#hm1&}eU8U#Bdg@gbx4djG2G4?~td$}T6^hU4Wa%e*|c4rs&a%Lsbl?!z&Znv`? z35H2lOa{0Z_9R(Jb^NcTjD8OY5ms*@Tf?hX|0cFc6{p1i-k$QPLcJUgjr(!8Z$+zQ zU6b-VB^x(|Bs+;oOE#_Gp0W`WsT~O&I9Rr1e%zx&<+|Ah3M|R=qqgQ8;qXCkr!+Uw zNQGV3eX)l|@Ef;Fda^Eq1&Tn_O^;9{Mii!2knRI{5CpL7KO|FIR7LB9FLU-H(Sxsl zD!3koHi>3qr|=NLyn~J9=iZV+4{H+`@yis(^B7J9IfStz_xICloc}aTKa%dkj>hqL zy+2bVc~6?$*GX__c^a7)M6PLAFgy6{$O}vhNlNY*T;fGSd(@hYBA0O25+jN*MMiEYqk(4ayndegnX@6_^1v7Mb zhksbg-N@oXB?f7qj7md{%-)MRohh^7X>_Fn|;@;j#MNWMlX-C6E hl8g`9ekaIqK8#`UjqwitMRDdH2IE$n{Re@MApB=7gw6l} literal 0 HcmV?d00001 diff --git a/.git copy/objects/3a/637e14162b36bbb268b93e508b7f6b48e87d95 b/.git copy/objects/3a/637e14162b36bbb268b93e508b7f6b48e87d95 new file mode 100644 index 00000000..338d8d70 --- /dev/null +++ b/.git copy/objects/3a/637e14162b36bbb268b93e508b7f6b48e87d95 @@ -0,0 +1,2 @@ +xu;0D}-CJ +rVkeג%ӾyqMj'ϹfsIǢIcJu)zɊ5 ĕ·)\*i7k#n9EG[xYSjṶD \ No newline at end of file diff --git a/.git copy/objects/3a/95758593d2f99a0704c626938277d74b88b6ea b/.git copy/objects/3a/95758593d2f99a0704c626938277d74b88b6ea new file mode 100644 index 0000000000000000000000000000000000000000..bb9893d4ff8eda2a600e882d6389a11a68150037 GIT binary patch literal 46 zcmb(@ CQW9+d literal 0 HcmV?d00001 diff --git a/.git copy/objects/3d/e6654902d1761008255c4f94b1d53fb662cfdc b/.git copy/objects/3d/e6654902d1761008255c4f94b1d53fb662cfdc new file mode 100644 index 0000000000000000000000000000000000000000..6773377c2780e14267f7a0a4baa7f0292e07b438 GIT binary patch literal 166 zcmV;X09pTd0V^p=O;s>7HDNF`FfcPQQE*Ak&37y)$jMAjEXmBz)5}UMOJqpdYO%1U z^&RG3Tcz=KBL(vxrmf4D1 z5+SN`^HWlDiW!m)AIu29meZuz|Lxg1r6+4rlo#kg6cncxm1QQU7BlF{aeP@RCsSx4 U?Y*Pn!G_}#ClqP{0E~!25z=r>Gynhq literal 0 HcmV?d00001 diff --git a/.git copy/objects/3e/5440405f63b60b4cd9d84830a7023f6469dc8b b/.git copy/objects/3e/5440405f63b60b4cd9d84830a7023f6469dc8b new file mode 100644 index 0000000000000000000000000000000000000000..e921650d21b6635658d03cb213b41dedaf60ad45 GIT binary patch literal 234 zcmV5F<~$?FfcPQQP4}zEJ-XWDauSLElDkAuy)MQI$HVbcUshL z-#@pOty)#6*n*@oGd(ZAD3u|tYTbtu6BqU*mT#CH?AZNvPS#F&69XVn(912$V`$sx zv@h4sYj?-O?IsPeUfzzqFTX$y0ZNxM?CqGgUrBsR{wk)45pj%bq)Z%FMj*-SCFiCv zOmgL)tZq`U-s#;tPl=NCo0w-8a6#1+lp;2g%ts` C(iDdP literal 0 HcmV?d00001 diff --git a/.git copy/objects/40/b297dc13a9295f31775fa38364e6e30b645393 b/.git copy/objects/40/b297dc13a9295f31775fa38364e6e30b645393 new file mode 100644 index 0000000000000000000000000000000000000000..f4e00ec444e274f552bb8dc9dd335c2717df1a1d GIT binary patch literal 166 zcmV;X09pTd0V^p=O;s>7HDNF`FfcPQQE*Ak&37y)$jMAjEXmBz)5}UMOJqpdYO%1U z^&RG3Tcz=KBL(vxrmf4D1 z5+SN`^HWlDiWxRJ%fC9kJ?3`UvY^jq3_*+6+>ZSYQBa&(RF;{XTFjs)$MI#QoJ^sG UwD*pN2OEx0oKUC*0FKB)M=oto$N&HU literal 0 HcmV?d00001 diff --git a/.git copy/objects/41/f7c86360ab6f9b34b2bccb543400ffd33a7025 b/.git copy/objects/41/f7c86360ab6f9b34b2bccb543400ffd33a7025 new file mode 100644 index 0000000000000000000000000000000000000000..ef4e8e8dc26f6192ef37fdb312e5f6fc06152227 GIT binary patch literal 132 zcmV-~0DJ#<0V^p=O;s>7v1BkbFfcPQQE<*LEhH zvF5*z)KR*#<1R~4J;^#A`SBz9(euX6;fJ4p{OP+^m!I?!p|op-cY576s484r<8m2X{bmJ6rXxV7$+nxi&eEp!>I z+bL~~4La1;sOv7+ZSAo7&+9&*LmPH2st*xcv$trBLkS)yUGGOCf#;7-Ag;g5ddcxV5mrP_97EykLr`BVH&S z62SPQh~U6b;m)A4WQd$XiBn35vG7wbpkNEQB*b0Qz~|5X4ORQM>o)9)X>QFo!phlg zpWUo!aH*SXx9rwv!rQwNTkeG7RN(ZE%f3Zmj)3g&l$c;Q{M?Uk45P;e7jXVH5r5~z zAjL9-EYur39!{u<<(gGgE$#;8w5jZxUyG>{oYV z>k7KIdLRVx{;WEKK^buSTP_Y1upgrwOT?F|u-`O;%Z!d*P@-cv5lwma3{J>72m7+F zL|;5AY*&bV<~b29G2+Z$T|QKdS$l$p@xom9w_JV{Tnpg|C|a= z{UnCvQ7Ekmx;Fk-+@+Do>-WUj{F=5;XdL}1*4OnmzGq!n8)jV!%e`=(!;hY~dQ zscbx&x{UsK=LwA|(T4p=>Med{%d)J9O)rQkYHFI8D)*>Z7GiaD5)a2cLiVqB!)2Mn z6e-J3K0XeP{~Y|Go0#y{f>-5Lpne*w5VY%0b6owyKd~N`h CNE1Q; literal 0 HcmV?d00001 diff --git a/.git copy/objects/42/e93a26e2caa3b0af3cca788ef606bb34a9204f b/.git copy/objects/42/e93a26e2caa3b0af3cca788ef606bb34a9204f new file mode 100644 index 0000000000000000000000000000000000000000..3a8d521fce4f70e70ede4b9894d01e7e309f67b8 GIT binary patch literal 45 zcmbgf0V^p=O;s>6XD~4U0)?!^vP6b2{Cb;D^*`Wa@X4~0^KmJwtgW$vNEf9R l=a&{Grxr6fNEu5kKmJhDa@&T_i4UCrA5vZ{3IM3v8=X0IB4+>q literal 0 HcmV?d00001 diff --git a/.git copy/objects/44/4cb17b5dec5688a94067361721398ff241c3b6 b/.git copy/objects/44/4cb17b5dec5688a94067361721398ff241c3b6 new file mode 100644 index 0000000000000000000000000000000000000000..09a1f4d4eebd0d54aa22e8a7ba16142e72b13210 GIT binary patch literal 80 zcmV-W0I&ae0V^p=O;s>6XD~4U0)?!^vP1^v8@vBkT(^lxeb=e?KF9LJi(hkmA<{*u m#rdU0$*IK*4pPPv%a1?QwA{AgbK(Q%|A&+pivj>mQy*Kd6XD~4U0)?!^vP1@_msVCXC-+6 literal 0 HcmV?d00001 diff --git a/.git copy/objects/46/18b729a52a797d792cdd3af91b1365dbcb976d b/.git copy/objects/46/18b729a52a797d792cdd3af91b1365dbcb976d new file mode 100644 index 0000000000000000000000000000000000000000..e0bd3a9ff80a0782a6f36df8d63854c326cbfdf2 GIT binary patch literal 362 zcmV-w0hRuE0hN5sivvZs#k* zdIY>KlkKnz%4qujAheoT>N#Qz>FFW9Lg>n6SNhEVw$!+F29ABw?Q=NezhRkbq!Z-R+=)|ZkR3~xv3A$& I7fs`2YX_ literal 0 HcmV?d00001 diff --git a/.git copy/objects/46/45774cfcc31901211d0ed4967977970f603687 b/.git copy/objects/46/45774cfcc31901211d0ed4967977970f603687 new file mode 100644 index 0000000000000000000000000000000000000000..1d7c9c1514156abdddf5f3cd92361b8985eb60f9 GIT binary patch literal 166 zcmV;X09pTd0V^p=O;s>7HDNF`FfcPQQE*Ak&37y)$jMAjEXmBz)5}UMOJqpdYO%1U z^&RG3Tcz=KBL(vxrmf4D1 z5+SN`^HWlDiWxRdUHoa8v+tP)yFcvA8/JaKk]ҥVC)Z'#wHl$b&ƒkvNA[(Azc&IoB<\]9`&HM'dڣOΌQ3l`B.6 sNvt"Y@Tѓm35vm,FdyyFcd;2x{>Ԑzgf0V^p=O;s>6XD~4U0)?!^vP1@Xp4MQF<0?sv|Ce>X_DPQ0m$1+WB3+bP loL^d$oLbD_AZ0AE{P;sn%WWGzCq8ige@J<;C;+qD96Un@BV_;p literal 0 HcmV?d00001 diff --git a/.git copy/objects/4c/79cc7259d27e2b39a079046777a48013a9b654 b/.git copy/objects/4c/79cc7259d27e2b39a079046777a48013a9b654 new file mode 100644 index 0000000000000000000000000000000000000000..df717cbbfad022e47725ff691b6dd45a6774ae99 GIT binary patch literal 74 zcmV-Q0JZ;k0V^p=O;s>6VlXiP0)^bf%sd7cpN-YAZ^AlOI;5M4D_Zt{ay+~ZB3+VN gT*C1GZL)9WnID?{iks4Z*4FA*iu7jz0BANFPI@~boB#j- literal 0 HcmV?d00001 diff --git a/.git copy/objects/4d/231f7c92e52d71357f39257fa46ebb50c80cbd b/.git copy/objects/4d/231f7c92e52d71357f39257fa46ebb50c80cbd new file mode 100644 index 00000000..ae6ec5d9 --- /dev/null +++ b/.git copy/objects/4d/231f7c92e52d71357f39257fa46ebb50c80cbd @@ -0,0 +1 @@ +x+)JMU04d040031Qp/-*NJ,Kdu[*a%_6y,TYpIiJj^ D>_ч~{R"7u-_]vGws-6~ \ No newline at end of file diff --git a/.git copy/objects/4e/1804142de9aa6ea446c66f4fcb6946cddabf2d b/.git copy/objects/4e/1804142de9aa6ea446c66f4fcb6946cddabf2d new file mode 100644 index 0000000000000000000000000000000000000000..cac793f980a703fbc07c8af81f8a38cc07611003 GIT binary patch literal 139 zcmV;60CfL&0dy6H1M.q-DGe]6H0c 5ȡ瓯B 7x7xtMc! GýJ-35F<~$?FfcPQQP4}zEJ-XWDauSLElDkAuy)MQI$HVbcUshL z-#@pOty)#6*n*@oGd(ZAD3u|tYTbtu6BqU*mT#CH?AZNvPS#F&69XVn(912$V`$sx zv@h4sYj?-O?IsPeUfzzqFTX$y0ZNxM?CqGgUrBsR{wk)45pj%bq)Z%FMj*-SCFiCv zOmgL)tZq`U-s#;tPl=NCo0w-8a6#1+kJaY(hC0KKOW+!#FUwbfc}cKhr6f2qnB RKDFIpULn_o)erwbMm(z_PJ;jd literal 0 HcmV?d00001 diff --git a/.git copy/objects/54/dac8ed6bcfbe7f99cc6b4d543a3890240edd77 b/.git copy/objects/54/dac8ed6bcfbe7f99cc6b4d543a3890240edd77 new file mode 100644 index 0000000000000000000000000000000000000000..329276473296b2534d508a69f19a8a692dcf8b2e GIT binary patch literal 47 zcmb6VlXiP0)^bf%shsrwF@3HsCrM&d0np6-&I}1x`e+SB3+VN gT*C1GZL)9WnID?{iks4Z*4FA*iu7jz0Bf)tDy>)}Gynhq literal 0 HcmV?d00001 diff --git a/.git copy/objects/5c/6761c09c63ee1cab26c1f5f96f4e63c69a6e47 b/.git copy/objects/5c/6761c09c63ee1cab26c1f5f96f4e63c69a6e47 new file mode 100644 index 0000000000000000000000000000000000000000..3514f86bf99394e94e7155396325ccc1b138c4a1 GIT binary patch literal 128 zcmV-`0Du2@0V^p=O;s>7F<>w>FfcPQQE<*LEhX5ocYpkhqZM(7(rDBmz1WY=9Qo*H+gX}T{E;OcfLrwFTW}x{sD~;KNli@7 iNG(E9er)2NP_xg+u7$>T^ZAxE*0R+4wE_SX*g2DIw>wb) literal 0 HcmV?d00001 diff --git a/.git copy/objects/5e/5c4f89938dc948ddff5a384ae9e587cd10ee15 b/.git copy/objects/5e/5c4f89938dc948ddff5a384ae9e587cd10ee15 new file mode 100644 index 0000000000000000000000000000000000000000..b0d8989b3d0fdade73920f75a03d4c12bee26da3 GIT binary patch literal 166 zcmV;X09pTd0V^p=O;s>7HDNF`FfcPQQE*Ak&37y)$jMAjEXmBz)5}UMOJqpdYO%1U z^&RG3Tcz=KBL(vxrmf4D1 z5+SN`^HWlDiW#O{3HhJ$R`x+{<7rcd4SSw!N|1dBQBa&(RF;{XTFjs)$MI#QoJ^sG UwD*pN2OEx0oKUC*0H<+6u=$!!i~s-t literal 0 HcmV?d00001 diff --git a/.git copy/objects/60/01f4773c082801314dd22c9cdbdbd327381ebf b/.git copy/objects/60/01f4773c082801314dd22c9cdbdbd327381ebf new file mode 100644 index 0000000000000000000000000000000000000000..f1dcd678cef5f3f2322f30dab99125f082a19caf GIT binary patch literal 45 zcmV+|0Mh?>0V^p=O;s>9U@$QN0)^!KT!tIPTkono;I(#Ov3S_YzVOAFN`@o=@DmNq Dn$i?Z literal 0 HcmV?d00001 diff --git a/.git copy/objects/62/1780064eec96be4ec20d7c89c20d1b5757cb7c b/.git copy/objects/62/1780064eec96be4ec20d7c89c20d1b5757cb7c new file mode 100644 index 00000000..9b5b02d4 --- /dev/null +++ b/.git copy/objects/62/1780064eec96be4ec20d7c89c20d1b5757cb7c @@ -0,0 +1,2 @@ +x[ +0E*/t2y.eL$뷈;p8\\s^BmvKb! $#R0MJW .jAшHbqo.ON[`zk>9tz`ve]UE~J \ No newline at end of file diff --git a/.git copy/objects/62/82a43e1376e1b4a498ff1fd2f5c547e4bf5960 b/.git copy/objects/62/82a43e1376e1b4a498ff1fd2f5c547e4bf5960 new file mode 100644 index 0000000000000000000000000000000000000000..06857be35c38c641bd5513050d85b7006875b24b GIT binary patch literal 46 zcmb7sF;XSFarGWXRt-@Wap1jBuP-Xs8l CoDr%3 literal 0 HcmV?d00001 diff --git a/.git copy/objects/62/84c6dc7e23db29b9d48777118d72cf5527bb31 b/.git copy/objects/62/84c6dc7e23db29b9d48777118d72cf5527bb31 new file mode 100644 index 0000000000000000000000000000000000000000..2b408590d509907e808f84859c2be50a269c68c1 GIT binary patch literal 49 zcmV-10M7q-0V^p=O;s>9VK6ZO0)^Cy#N2|MRECgSC*EeC-&a5LOtx=`mBj=VzPsfB HJ)sbb+d>ro literal 0 HcmV?d00001 diff --git a/.git copy/objects/62/c3c16857d66c82218ff6e6ce22e4ac6423a02c b/.git copy/objects/62/c3c16857d66c82218ff6e6ce22e4ac6423a02c new file mode 100644 index 0000000000000000000000000000000000000000..0ceb2f30548f37a9c118b0dc4c87ff3d70d4f548 GIT binary patch literal 121 zcmV-<0EYi~0V^p=O;s>7v}7sS3y%W@-BT}WzTaz<(qL|wW> bn6XNt>Bbm|<+7q@B3?P3W?TdSvZ*h~H0w30 literal 0 HcmV?d00001 diff --git a/.git copy/objects/62/eef4ce33c4c04fd9b695a8d317f13c9740ff81 b/.git copy/objects/62/eef4ce33c4c04fd9b695a8d317f13c9740ff81 new file mode 100644 index 0000000000000000000000000000000000000000..eb6317403b77de88d8b12ba4ea2722b45e77fd25 GIT binary patch literal 45 zcmbPkM)(oBuw(?2m8NtL)%3hDYCd3jmJ! B6bk?V literal 0 HcmV?d00001 diff --git a/.git copy/objects/63/37a8f81a512b91d30fe70b332484959529df79 b/.git copy/objects/63/37a8f81a512b91d30fe70b332484959529df79 new file mode 100644 index 0000000000000000000000000000000000000000..032ba09ec89ecc209c5fb07200552f5402ca7e45 GIT binary patch literal 234 zcmV5F<~$?FfcPQQP4}zEJ-XWDauSLElDkAuy)MQI$HVbcUshL z-#@pOty)#6*n*@oGd(ZAD3u|tYTbtu6BqU*mT#CH?AZNvPS#F&69XVn(912$V`$sx zv@h4sYj?-O?IsPeUfzzqFTX$y0ZNxM?CqGgUrBsR{wk)45pj%bq)Z%FMj*-SCFiCv zOmgL)tZq`U-s#;tPl=NCo0w-8a6#1+L{h5&Zy9OKkj7dۦӾ׺y{DoDj F,T8q|i?MBƇ&1p m \ No newline at end of file diff --git a/.git copy/objects/6a/5ef5148a9fb43d9c2ca8c118b6a89f693baf2d b/.git copy/objects/6a/5ef5148a9fb43d9c2ca8c118b6a89f693baf2d new file mode 100644 index 0000000000000000000000000000000000000000..1d6f4c4f337adce8c0eda1a4f87451fb8c46aee5 GIT binary patch literal 166 zcmV;X09pTd0V^p=O;s>7HDNF`FfcPQQE*Ak&37y)$jMAjEXmBz)5}UMOJqpdYO%1U z^&RG3Tcz=KBL(vxrmf4D1 z5+SN`^HWlDiWxRdUHoa8v+tP)yFcvTSHAzJ^%m! literal 0 HcmV?d00001 diff --git a/.git copy/objects/6b/163f8647162303e36736c1aa2e0d92f1d3496b b/.git copy/objects/6b/163f8647162303e36736c1aa2e0d92f1d3496b new file mode 100644 index 0000000000000000000000000000000000000000..9171608ec2da11cc42097c585f0b4d69b5c6d5cd GIT binary patch literal 45 zcmV+|0Mh?>0V^p=O;s>9U@$QN0)^!KTn4-QyUUck7E4{bAz^OxW|98>m*SHE?U@cc DmGcx~ literal 0 HcmV?d00001 diff --git a/.git copy/objects/6b/170c5d2d44a84a9e8212505fb2977736d6b3c6 b/.git copy/objects/6b/170c5d2d44a84a9e8212505fb2977736d6b3c6 new file mode 100644 index 0000000000000000000000000000000000000000..6c60dee7adc88eebd834618aa5d2b5e3731126a1 GIT binary patch literal 165 zcmV;W09yZe0V^p=O;s>7HDNF`FfcPQQE*Ak&37y)$jMAjEXmBz)5}UMOJqpdYO%1U z^&RG3Tcz=KBL(vxrmf4D1 z5+SN`^HWlDiW!XMwW=~->^JSZR6m*bjjd9v<^ClQ1;wdFWtqvT#SBNo9#^aTsrM$O TgbOP?I@~B}FRn(жԖ E!uk]`?pcl )ORP)ڮRfW0,^"F4 9y*k@G9 8wG"'4H3oӢvΧ3[521R5" <9:gׅJ\a}ֹb^kO|8 +mMLݰ`ĸ3PC7adžvOLANT7,}4lV>^BE/' +k`ͅ cG2:{gM~~GNbcƺ<9kb= \ No newline at end of file diff --git a/.git copy/objects/6e/fb080e3d0544517a62c1bffa3ebdeef8a0cdc1 b/.git copy/objects/6e/fb080e3d0544517a62c1bffa3ebdeef8a0cdc1 new file mode 100644 index 0000000000000000000000000000000000000000..0367c02dffd8d2d2316cb6954afa841dc6daddff GIT binary patch literal 49 zcmbI+a2;2IXY_ FdjQ006H5R9 literal 0 HcmV?d00001 diff --git a/.git copy/objects/7d/35ca41128c21250712136c2d32c51115f5f678 b/.git copy/objects/7d/35ca41128c21250712136c2d32c51115f5f678 new file mode 100644 index 00000000..dc8efec7 --- /dev/null +++ b/.git copy/objects/7d/35ca41128c21250712136c2d32c51115f5f678 @@ -0,0 +1,2 @@ +xRn0H[+UQg/p utgH(^(P$~ejjԁ>AR\gQ5bhR@/ą-* XD_H+.P##s∄!^:T >Dp9{wt5Zj 2G;y~h \ No newline at end of file diff --git a/.git copy/objects/7d/4dd6ae6f1430a1c57110b75ceee614c8852bf4 b/.git copy/objects/7d/4dd6ae6f1430a1c57110b75ceee614c8852bf4 new file mode 100644 index 0000000000000000000000000000000000000000..261dd2a26dc1ed650e8d5340ce7101c7ac427736 GIT binary patch literal 74 zcmV-Q0JZ;k0V^p=O;s>6VlXiP0)^bf%sd9ybF&Nd7fjgsG2-tA%`h>Uqz3nHh;&J6 gaS6l!x5>VhXMSk*D{e~vSzD`LDbk+>0EgTg%8RNYs{jB1 literal 0 HcmV?d00001 diff --git a/.git copy/objects/7d/80be016f67d7ef11b6a04d568b38e4001b0958 b/.git copy/objects/7d/80be016f67d7ef11b6a04d568b38e4001b0958 new file mode 100644 index 00000000..1584db98 --- /dev/null +++ b/.git copy/objects/7d/80be016f67d7ef11b6a04d568b38e4001b0958 @@ -0,0 +1,2 @@ +xK +1D] D<7t::0 137WpWZ˯bNIAl~*D~ \ No newline at end of file diff --git a/.git copy/objects/7d/ecf2639976283ad82781c6e5e5d1c6e10b1bfb b/.git copy/objects/7d/ecf2639976283ad82781c6e5e5d1c6e10b1bfb new file mode 100644 index 0000000000000000000000000000000000000000..d35a3ec2b84998ca1b373cc74dc7340a918ef0f3 GIT binary patch literal 234 zcmV5F<~$?FfcPQQP4}zEJ-XWDauSLElDkAuy)MQI$HVbcUshL z-#@pOty)#6*n*@oGd(ZAD3u|tYTbtu6BqU*mT#CH?AZNvPS#F&69XVn(912$V`$sx zv@h4sYj?-O?IsPeUfzzqFTX$y0ZNxM?CqGgUrBsR{wk)45pj%bq)Z%FMj*-SCFiCv zOmgL)tZq`U-s#;tPl=NCo0w-8a6#1+Frz|cX>Wq$CSfO$fb74!f{(`boO|Hf zm@N*cEq^X-!B56-4>vMNhYRD|3Ql;4#99%RanD}mD@DrC-zbjC$#9nY| pTtlLtcqriA|1F1WT>{TYB(go(;}rnX3N6D2jvHIms-6Q>K{1-AJ>>uZ literal 0 HcmV?d00001 diff --git a/.git copy/objects/88/02bc1f59f9c60b1966d8924ae6003b81b349cd b/.git copy/objects/88/02bc1f59f9c60b1966d8924ae6003b81b349cd new file mode 100644 index 0000000000000000000000000000000000000000..8420a4e7173358f037d653a9e0abc8f6342af21e GIT binary patch literal 46 zcmV+}0MY+=0V^p=O;s>9WH2!R0)>>++9VK6ZO0)^Cy#N2|MREDIcC3eDP54S9t@n8PZ*Q4%F_D3cF I05w7prTC8(T>t<8 literal 0 HcmV?d00001 diff --git a/.git copy/objects/8e/2f9832d06855c029e78fdeb4cc051ae7004b17 b/.git copy/objects/8e/2f9832d06855c029e78fdeb4cc051ae7004b17 new file mode 100644 index 0000000000000000000000000000000000000000..9966a1b51ee61da46f1f82677dfdbc96d9a769ff GIT binary patch literal 121 zcmV-<0EYi~0V^p=O;s>7v}77F<>w>FfcPQQE<*LEh5m%nq}EBB#BceDasG&NO?Y`3tH%BsDQP iBee)c`QaqqI=9tMe??6f_SWorf6T>Icmn{tKsc(N5H{ri literal 0 HcmV?d00001 diff --git a/.git copy/objects/94/d454ff64ed1de07d81cb3500b0bce4b2601de1 b/.git copy/objects/94/d454ff64ed1de07d81cb3500b0bce4b2601de1 new file mode 100644 index 0000000000000000000000000000000000000000..b43e7124918f3a23b42216fe868eb1d6a61653fb GIT binary patch literal 122 zcmV-=0EPc}0V^p=O;s>7v}7OxWzlQU9_AnKmq c)U|x7v}7OxWzlQU9_AnLwH cu}|H2DxmVs7PI9HGa8RJ|1J6n0E+cAv>}={I{*Lx literal 0 HcmV?d00001 diff --git a/.git copy/objects/96/ae261be8cab8322607736fb51f410c4987d1c3 b/.git copy/objects/96/ae261be8cab8322607736fb51f410c4987d1c3 new file mode 100644 index 0000000000000000000000000000000000000000..0b35cd1e227b725f7a5b76face17158e98b2d157 GIT binary patch literal 80 zcmV-W0I&ae0V^p=O;s>6XD~4U0)?!^vP6deyAK?jxb9fww$`NGva5F){ERrf1tMLP mTAW{6l$=`3;2>ozvHbW$P0MW?J|{kK{(ne$u_yq0Eg&L}iz9jf literal 0 HcmV?d00001 diff --git a/.git copy/objects/98/fb26bc79ff73c5b36baac976cd0641f71fbe1f b/.git copy/objects/98/fb26bc79ff73c5b36baac976cd0641f71fbe1f new file mode 100644 index 0000000000000000000000000000000000000000..8230fb2ae0c6f7333a780ce9d46a5af201552401 GIT binary patch literal 664 zcmV;J0%!er0hLruPa821?RkHN#c8)nP1{=qL@7|ANNp7X;_h7!i5th>+Fodc`0pLZ z_I`vUP4^T#GjHCTH=a`Jl6?O7<`s8L2P%`iuC8-4PO0Vb&W*wlhbM= z%AOQi-IP*Pq>{{960~-i%?8 zKerGT4e9}ti|s-_?ln}K+(44muRd(baS$e7YI=T|Olmvx9qHyFCY_*UM zu!24>>?clWUW_7=znK}F?YuzZd*y`+t+bvaIA|{ce9B*O*1T_VJceCL-Vm%9cwerk zJfF;%TRbo$SSf+rIsb|xw<%9L5i?3%;?PX_Tf2IQiA`kd3GLMt;4tzvo6MRtWyfoJ z(1MSf+A-dmc1X`CSvq65D3V%it~X`tPpWcQcd3j}mB`f56>> zmW_}+@BF<62@bkla-_wZb`V^tm>e8A=>Ts9YV5Bh?M>1E literal 0 HcmV?d00001 diff --git a/.git copy/objects/9b/1fc70ab3fdf983c52a2c3dd7ce352d70108c44 b/.git copy/objects/9b/1fc70ab3fdf983c52a2c3dd7ce352d70108c44 new file mode 100644 index 0000000000000000000000000000000000000000..fc16f8fc419c65fd24e2dc1cba9f02c282eb63f9 GIT binary patch literal 185 zcmV;q07n0K0hNzSY6CG4M7`E2v=5kWeYzzGA!o=9)T5SdnDGpX#^;Z+$N{pdqIgA7 z%f4-oVI76b=&F{hF3pk8naL$zYI2-#A&naAuObLa6LXZV&oTJ~qJY$hD{Dg(DiCU< zBtB^XK!F_7AFmv$vSLvbWdbjrS}j=TqN|B~^x0=6Q_gYUyZzEvdD{0P=lA~V)BEsw n+sb3TF8lUjk=b!hKxp4!j+vRxKSTfDG)LFtTvzi0q?S>R>6TqQ literal 0 HcmV?d00001 diff --git a/.git copy/objects/9b/735e27f881fcaa3789e34fed334c429897aab5 b/.git copy/objects/9b/735e27f881fcaa3789e34fed334c429897aab5 new file mode 100644 index 0000000000000000000000000000000000000000..afbd620b281fa8262e1e3473d73cec49c6a497ee GIT binary patch literal 74 zcmV-Q0JZ;k0V^p=O;s>6VlXiP0)^bf%sd9?J&Vn3?e#2*=hs>Pp2G1-G3B}tM7kuk gxP;;V+hpI$Ge0!@6*r~-tgY3r6zR_b08maEwF5CEsQ>@~ literal 0 HcmV?d00001 diff --git a/.git copy/objects/9b/ce8acd9d580b27bc20542ce0ceb40a80d13987 b/.git copy/objects/9b/ce8acd9d580b27bc20542ce0ceb40a80d13987 new file mode 100644 index 0000000000000000000000000000000000000000..a39737e2c864126f937319c1e4ce10058f2af1c4 GIT binary patch literal 612 zcmV-q0-ODK0mW5KZ`&{o-8K0Yn(wmWbwGvd}Q@(H53r;cZBw?PAqYxm4ls?(+O>K&E@yh zb{Soi9GwBiFw2z(^n`A$Zq1jvgdTHeEL_gUvWD-peaP2ZdrEplKr`#bhE*N{5*P;z zh90fw7N@+Fj9?+^FoekFjFR3AF3TlcMaP%S-;om0*BB$I^+Rh=N`^L8H^_3Mo$%T| zB8)?qWN2aNpwdmw_pC9Jk4cX?*Sygu>;`f$+PuK4ukV(t&o{SYmQ=xolqoiTLj9V% z$_f*vSbl`8sF%@3TeOPzh~CHR8zUjGwUUGeq^P)Z+{GarjOZXE50vS+)CQ&*af6wV zgBiTkRZRp{S}71TFbk+a^^oJkiNmvPLiC(SN)c89N_uf%ch5SO_d_erDLFcT%H${j z3L36z*tI^vaPSxiy-;({if+f(O;??a6-XUdePZ=jNOVk!Ixh8pA_7zPT1$6YKIj6b zS=v^4(ZFUTGtNOr{W4j4+k$5>gKGZm^`#kN&mBBC$FE13|RR%7U92idH0)?MYIsFMLBtP|M;4fgf0V^p=O;s>6XD~4U0)?!^vP6cQl?5NpHHO?})So9`?ElQ;{RFn{5b2`S l;{4L0|3k`)MF9xK9l)v=Czt>L literal 0 HcmV?d00001 diff --git a/.git copy/objects/a1/5cf0fbd99b04d707ea5deaa0667a60072a3525 b/.git copy/objects/a1/5cf0fbd99b04d707ea5deaa0667a60072a3525 new file mode 100644 index 0000000000000000000000000000000000000000..41233388832fb667e0bcc2d5954a20069dd560c9 GIT binary patch literal 121 zcmV-<0EYi~0V^p=O;s>7v}7sS3y%W@-BT}WzTaz<(qMBVe7 bx|WY!>aQ-?QFpte9WH2!R0)>>+++mpUh}-@bYGqGH8{t$-A|r0|=Sl?2M6)U?pb87(CkJ4q5z zR@%5>RH->gOK*S`YcP{1<1Co1D4>g6Hs>xun-#T{5o&d3SPA#qZ0Op#iv9pwX=UNF za>DJ-#@|CubD=n8N@>TO(2Bl1c>l?^jMh#_`c+ux?`K}yee5v9`B&|)zOkzEM$(H{ zuEDYwSyI)x6a^_Hvz8$4A(uQP#6KQj%N!7LClr%y7_t&n>(G-Xrx6}Vrg(EYJHv{h zs#^<7V{!6fP%T96A1lrlx`XUnh+F+0>rY8xz(e6NZM$@>`K~2wi}hV$JZAIucx;Tu z>aOWHU4i@V_aMzKTkUYQWRjU(nq`wm-vP;htBoSDcd9pOqubWSjD6Gd*%#6VlXiP0)^bf%sht2%k2(+J~4ga?meqoXQajPpKMZ2fJm35 g7MC#mf1B)EdFF>^zv8C!pS896l_LFF0NCdpl-8CdO#lD@ literal 0 HcmV?d00001 diff --git a/.git copy/objects/a5/79dba911ec8794b340254a5c07192827844e3a b/.git copy/objects/a5/79dba911ec8794b340254a5c07192827844e3a new file mode 100644 index 0000000000000000000000000000000000000000..2477ff480ae06db6350bda07a591a79f36651fa6 GIT binary patch literal 74 zcmV-Q0JZ;k0V^p=O;s>6VlXiP0)^bf%shtk+n$y_tjwu6XD~4U0)?!^vP1^)vgKTt+O}nQ3kPa2-rc|Q&VNJhb zde@!WqG}zaqR1Rsazt=kG9e5aC=oODrS~O6V)KRrSl;2d@=C1X+- zfx5vX3me(myDs*jyUg|~XJzo!3}=BaBN L=a=~b-JnBos3=TM literal 0 HcmV?d00001 diff --git a/.git copy/objects/a9/cac2e46b68ca0af6218a87e8f4cbf0970701a4 b/.git copy/objects/a9/cac2e46b68ca0af6218a87e8f4cbf0970701a4 new file mode 100644 index 0000000000000000000000000000000000000000..6d2a544ed9e83d02cbbbf86c946c5eae7ef3463a GIT binary patch literal 166 zcmV;X09pTd0i}*f3IZ_@06pgwxeL-sX9W?#FZhAZ<_u0I8lvxa5P#sUs6$b))jAI@ zmEMh>GnXc$;$uVwXiI`53MQ>GDS^T`C?GKk>DhyNUI#bmRERzqM`%45ZKO^>p`aw8 zPzMUp1t%H3#?(5$=atqc73%HHk3aZIFy~vPc{#*ZPh40ltw(PZ--7~Ro83l7{v*Mz Unc}n+E^QsXElcj~1J|fd{TzNs8~^|S literal 0 HcmV?d00001 diff --git a/.git copy/objects/aa/6164f0bb3f20e0e1d5de7c8bf66c099bfc7b08 b/.git copy/objects/aa/6164f0bb3f20e0e1d5de7c8bf66c099bfc7b08 new file mode 100644 index 0000000000000000000000000000000000000000..f21e228caedabec29ab33a324c245c19a6f16369 GIT binary patch literal 46 zcmV+}0MY+=0V^p=O;s>9WH2!R0)>>++9VK6ZO0)^Cy#N2|MRE7?wJ@S!1k8w+;-I(O{jKR8bv*%d= HA5ITm̮)+8Wey@| EGXܟL҉_Roe6H׎KЇ L)XW ߜ` +^-pPO0dBSJU. c ]Uo U7u4~eͦnVUՕ]v56m-Dv,pzy+0G@vxLL;cs8pbc5̗k<N T-n euSo&Xq\:Kv94>͊lVoMOmEvQoZm}rwYW[GIZ.΀z;󈮘]u;\@X: '; I`aMW0~𻠙IBu⪪“R> ($!:3bkSе=!g ʀw8P~R,_n .:zA H48"|]&H3yq_1ކdoʼn:湧_p?8Qˣq6DZGϴ}Dc#Cӷ'rһ1/AcƣKgјm؟W,ˊƦ re&V'qdj;9G]hDD1SuN?~Kyp(djB>e#_{!p7*kPfqN{ zY16@SsVhsrKK)U)Qg7j5K7YKau{hw4pwLxLUs%~6Zr#yHgEcRr;^}h_=@dfgpc^2qA!yTjzZ^Jl#B)1nf?=WB)aeUlA-JLIA_H*>n z5KkGG_lvIoF=6$|fhW@L$c5u9MKI(VqlQ_0<#9Ant3?TRsE&eR{8X%C4so6+oFd*x zHTc6+y#p>b|6RQCJOjr|@=Z+Pr29DKY22ZaPLNM)FPus**|GF*>~qY1 I0hp_Y`ES71ga7~l literal 0 HcmV?d00001 diff --git a/.git copy/objects/b1/fae454aad73e2d340d3666cec62b64a08704f9 b/.git copy/objects/b1/fae454aad73e2d340d3666cec62b64a08704f9 new file mode 100644 index 0000000000000000000000000000000000000000..5289b5554ebaeb7b903c4a86254171b9d73e884a GIT binary patch literal 198 zcmV;%06G770V^p=O;s?oG-NO|FfcPQQE*Ak&37y)$jMAjEXmBz)5}UMOJqpdYO%1U z^$QgDp#p~jOe`F120{&El)xe zCFkdr6y@jSq!tx3IDS8ooUl57w#lYFr$bB_{$I8#P=%<<%}+_qDQ56hmam!gRJYKy z-cq%GN#5>&6Fhq%3W`&U$}*Eviy30l6A#QuekZe9?cmp+`F_dAX63m903O^?q6Jl6 AF#rGn literal 0 HcmV?d00001 diff --git a/.git copy/objects/b2/431feacbb75cdb56a652f3360052a3acdb5df7 b/.git copy/objects/b2/431feacbb75cdb56a652f3360052a3acdb5df7 new file mode 100644 index 0000000000000000000000000000000000000000..97c1a95664b9ddcff6e642f50ff1401431feec09 GIT binary patch literal 121 zcmV-<0EYi~0V^p=O;s>7v}7|C*KqST9T&A!cV{i+{oS#E@?3rS5(&PXkSsQVtp bK6T@%fXX*p%$76EXgu2dx9BGT&v7$us~97v}7aQ-?QFpteLxS?(3UzF literal 0 HcmV?d00001 diff --git a/.git copy/objects/b3/4e4243652728c7acc2f34b6923849ffdfc6346 b/.git copy/objects/b3/4e4243652728c7acc2f34b6923849ffdfc6346 new file mode 100644 index 00000000..857300d3 --- /dev/null +++ b/.git copy/objects/b3/4e4243652728c7acc2f34b6923849ffdfc6346 @@ -0,0 +1,2 @@ +xu; +0DS[:]uRObD]] q *yx.݂XԌ6ba{&& d'W 7"`W(pk/x?yuM@A^6'FC \ No newline at end of file diff --git a/.git copy/objects/b4/d487dc3548afe4920fb24316838f682959d99b b/.git copy/objects/b4/d487dc3548afe4920fb24316838f682959d99b new file mode 100644 index 0000000000000000000000000000000000000000..974aa9289fc3a4b76ebf40571884a8abea461b19 GIT binary patch literal 74 zcmV-Q0JZ;k0V^p=O;s>6VlXiP0)^bf%shsNc^8gUtYOZMaQ7&d;+Ooe@6>l5h;&J6 gaS6l!x5>VhXMSk*D{e~vSzD`LDbk+>0D~19#li_9Q2+n{ literal 0 HcmV?d00001 diff --git a/.git copy/objects/b6/97d3465890103d15eeefaedb2024a9df576de2 b/.git copy/objects/b6/97d3465890103d15eeefaedb2024a9df576de2 new file mode 100644 index 00000000..5cf2f789 --- /dev/null +++ b/.git copy/objects/b6/97d3465890103d15eeefaedb2024a9df576de2 @@ -0,0 +1 @@ +xIj1D)7/3LLA}( ǣضԗU=LD[CDr$K(u]q*K62fNHȜ¿yI o_|lo>kK- M; }{s?U \ No newline at end of file diff --git a/.git copy/objects/ba/4c7bd69820fbd9003ac1730930de02adfb3803 b/.git copy/objects/ba/4c7bd69820fbd9003ac1730930de02adfb3803 new file mode 100644 index 0000000000000000000000000000000000000000..fbd9cae4ae91b367fffd8334d1097c3c1b7b9bc9 GIT binary patch literal 1978 zcmV;r2SxaJ0nJ%UbK5o$?%BTr&LKlh9VVAf+t~5cvE5eFrqhYzUOTV|$!sW6FKO6X=bKX z+L(Htk4$rXaF9=DRo$+NOsmWkO?qB+bz_cqiCwi_X3BP_+y|pax2E=TRXs_YS)G@Y zajmE3uBtz#O>1gXwTqcaugK5f=3jcQ)2_{n^sKJ+;@7+hHp9E0b#wbp&%BlJX2XQ_ z!q?Zs3o!iydvP%9Zi;-QMulz~MZoYY_0Pe9fFCVJ}MbsNWqbmya`Lmsp=FR1F z)-IBPl*SqDZC%}2P6ZL8zn^!hA6|9xuT$|6$dV>s4OPL&IPz_jZX|2nwn&M+JNZX3UTxp=sE;gRY zRm7tf%Oi&~)e}x)VOaJpOAfPy2ZxzJgvX#L(plFAkt3%<$kwLq>e9U+WB0ra;>wtK zvu_t*csX_nHx`6<%vFUHu;DzQ28I_hCs1PR^TDvVXaH6L1^6GF5(o%qpTbov({a_6 znYzo{TQ$6Rt)8i`og-16Lgntx0=B#pj_*`KEN4Z*Kbu5C%c`&|`Q{3JNdPg|MQ30V zV-RP1UgeqUX4z^JU=73UNV&FP?tYV<0c_F&lK!xh4gko>QXzT0OF02;s9ha$Q+fVe z9rDbufnQyyDa2Y-+w>uZm zn&|9XxSd;0L;IZvP^~k?Gns06)Kaa;01ILJUc2x%h~SPF`PKt1~~Z%p#cAbQvw0u>{Gb9 zp{KATQJ%sg+MNYUu^gYHSpM0IVg(Ss+pNpBpjcM#79VR^rC6C*p5t&QLghhQHeSn8 z2KFLUR<@H+H_{(_wi2QYNz@0fY$ALq@P&#Q?H+Q3%k&pee2gP|m1>|rc0zgjGi6=D ziRsDcFK`>@2`W7$k{OPZM!kR|CN67!E6Gj(w7eI>bn$D1l}Rg1h*kwedv1@@+c=9Q zh_dL1t0?3Ue>jDs`{+O5FLtLtePN|p-}XJ3{*HkOs_b$_L$TFxmt& z;T!Tz7O*>z7!(K%MO`>Zy{k&I_|xbbws6U-^p$8)B;**?X*uF;lMv)iP7+ZmF`b^1 z`%t#@B+1n2m5UmaY1>H46y!2=5}8nLkK<&r1Q#K)du_bJL92%p9#(=p zkkTkD3F#%m)n}W_UhGr$!5bzr??|);fXB}4;nW{m+luQ-UbNcXADv=9(DlNHikw?c zhQDX=Hv=+o4v2i|Q@Cu+d)MnChSX!x@^p9f9EZ~50#E(Hs zG(3Ro#PEt5fV<2?ZTAX3`4|Bg4z8?`s}`>K#C5xaC~uT5;3Gh`P=2!s$!u@&0~CJs zSiO1;MQ~lx91pbJxY9h8RQ6_H7f1H820mxOm#o&5rfCK%E2Lvh?ADKP|8s85Z(Jpf zyBc`ZDseEdw*IH9kP%i9cGA1b1Xfp+;GilR9;g>zHt*ORAD;7{OzYC!MAJ2UD|5SY z#=hhOjR%b{dI$q(_M(od09b3Embc+9JmBlCy7d!E8N(vMMzy+|+``u82>74Z`%K31{J)-uDs>}`(S;!l95yD5D6Rb{1a;4}P- z+Kl0|b~%C*=N)_sg%5>M>x$9=ndMacSk+uHI&1K={+yIw-4BKKi98NVj5`KlJ_`;Bp MbTxGUFW5b2Fg?-IrT_o{ literal 0 HcmV?d00001 diff --git a/.git copy/objects/be/16fa5bc21e4fbc579a8be0e47c4ba64cc17514 b/.git copy/objects/be/16fa5bc21e4fbc579a8be0e47c4ba64cc17514 new file mode 100644 index 00000000..459576a3 --- /dev/null +++ b/.git copy/objects/be/16fa5bc21e4fbc579a8be0e47c4ba64cc17514 @@ -0,0 +1,2 @@ +x}j0 wSH)2`cK/{%6W S>;VQK֮C 7TLe%qqBeL>BֺQ9[;rwkZ7B_FxzZNeze) S< >HZW>+^B%/5x0{eK傱dYk0WFgyOu&t#ok̓-<.c \ No newline at end of file diff --git a/.git copy/objects/be/b09d2c180bec7b940011a887ec35c1ccf60fde b/.git copy/objects/be/b09d2c180bec7b940011a887ec35c1ccf60fde new file mode 100644 index 0000000000000000000000000000000000000000..f679f20746e441cabc87752f86a72edecd41b5eb GIT binary patch literal 234 zcmV5F<~$?FfcPQQP4}zEJ-XWDauSLElDkAuy)MQI$HVbcUshL z-#@pOty)#6*n*@oGd(ZAD3u|tYTbtu6BqU*mT#CH?AZNvPS#F&69XVn(912$V`$sx zv@h4sYj?-O?IsPeUfzzqFTX$y0ZNxM?CqGgUrBsR{wk)45pj%bq)Z%FMj*-SCFiCv zOmgL)tZq`U-s#;tPl=NCo0w-8a6#1+qVHrzO(8JJ`Z0Ny!cQr#?Z3jhEB literal 0 HcmV?d00001 diff --git a/.git copy/objects/bf/30b47dd0d5d6393384ce077b993d8ce96c6ab6 b/.git copy/objects/bf/30b47dd0d5d6393384ce077b993d8ce96c6ab6 new file mode 100644 index 0000000000000000000000000000000000000000..ab35d48af83926d00f4ebce91abad7b09542de83 GIT binary patch literal 49 zcmV-10M7q-0V^p=O;s>9VK6ZO0)^Cy#N2|MREEVt`>ts^{$}0&QavPe&k5hd@BLB% HG5`?K@SYXp literal 0 HcmV?d00001 diff --git a/.git copy/objects/c3/620d7e46ab42fd1535a18d7cbaefc6444513b0 b/.git copy/objects/c3/620d7e46ab42fd1535a18d7cbaefc6444513b0 new file mode 100644 index 0000000000000000000000000000000000000000..87a79e6a2dfc1d6b4f8418d40b5f600baf83457b GIT binary patch literal 81 zcmV-X0IvUd0ZYosPf{>9WGF~X&Q45ERY=ay)l02N%q_@C)k{gu&DSeVEh@`QPA#_P n;wmUj%E?StNX|(tE>;LhO-#;6EeeK6D^zmmPk0*5jshT9 literal 0 HcmV?d00001 diff --git a/.git copy/objects/c5/56e37b274e278d6264571320e2c58ae4f95222 b/.git copy/objects/c5/56e37b274e278d6264571320e2c58ae4f95222 new file mode 100644 index 0000000000000000000000000000000000000000..b5cee064860404cd946e80f96fa07ae0fc76b870 GIT binary patch literal 128 zcmV-`0Du2@0V^p=O;s>7F<>w>FfcPQQE<*LEh-5tNnXbXFXJPa7k%OYF-J7@>;nJa~zP>Kbsq`miF>2bmk|mT%I0xJb$Kcm!1oTiVo$v?? zsf7Z9onHFT-6ZDE!1oeR3{FAg8kp^LmW`>}7Nsx5C7`rOnEaLXfS^gP2~>ts5u8xM zZpOqS91o9NKo(Nql!~-U!QI{VNG{z)-S|y5PP4-azp`e%B~&PdOQFu}vaM13i`x<# zFOAL)Bcm;HDYP~o<_H)N4~c!i3D5oRE%4~s!4%%Tq~_(eHyEmEBIjj?`wK>jzL%Lb zj^g#Iv0MXRPNtdUP3trM%$Ml-U{Ph`NgQ3$s72pe9Roe!{oWxCSf4k9##7`$=@2vdbK0Ge6|_zD*sqLG zR1=5}#`TZX#8k82^^^~ji~`U)KUkz4ZlcWA{5?7xu>X&a;D9QGivPF+dehK_?n7e6 z2NLK(bS}d7oSp7*_kh-C1w3x?;TZSGNIwjGbnOl8KDg|5f!El=CmJS5aKMFwM@pl; kklKC4P23pT*mRuFb?%GokTA0Jd+snH6R)WI-&ELe!Wh9($^ZZW literal 0 HcmV?d00001 diff --git a/.git copy/objects/c7/58513be7b7063e058be587b8ee2f3c409c3e2c b/.git copy/objects/c7/58513be7b7063e058be587b8ee2f3c409c3e2c new file mode 100644 index 0000000000000000000000000000000000000000..2e6015d15364903676951905c4c1dc9739f51e18 GIT binary patch literal 79 zcmV-V0I>gf0V^p=O;s>6XD~4U0)?!^vP6ai#xLbI92$&C2s%# literal 0 HcmV?d00001 diff --git a/.git copy/objects/c8/3cc084f1f68ebd9699793a988474cb64dcb40e b/.git copy/objects/c8/3cc084f1f68ebd9699793a988474cb64dcb40e new file mode 100644 index 0000000000000000000000000000000000000000..6b9f75d3ab56701166d541281c53a9fe6d5008e7 GIT binary patch literal 74 zcmV-Q0JZ;k0V^p=O;s>6VlXiP0)^bf%shr^>(r!QoZ4Ze#$KGiRo;=uv;E>>h;&J6 gaS6l!x5>VhXMSk*D{e~vSzD`LDbk+>09=Y1?hp(lW&i*H literal 0 HcmV?d00001 diff --git a/.git copy/objects/cc/112f124f8bdebf8a8a7c7250b0330fff62d7b0 b/.git copy/objects/cc/112f124f8bdebf8a8a7c7250b0330fff62d7b0 new file mode 100644 index 0000000000000000000000000000000000000000..75228d0d33289bd01a1eb353a52318d7648dcae6 GIT binary patch literal 46 zcmV+}0MY+=0V^p=O;s>9WH2!R0)>>++9WH2!R0)>>++5F<~$?FfcPQQP4}zEJ-XWDauSLElDkAuy)MQI$HVbcUshL z-#@pOty)#6*n*@oGd(ZAD3u|tYTbtu6BqU*mT#CH?AZNvPS#F&69XVn(912$V`$sx zv@h4sYj?-O?IsPeUfzzqFTX$y0ZNxM?CqGgUrBsR{wk)45pj%bq)Z%FMj*-SCFiCv zOmgL)tZq`U-s#;tPl=NCo0w-8a6#1+5F<~$?FfcPQQP4}zEJ-XWDauSLElDkAuy)MQI$HVbcUshL z-#@pOty)#6*n*@oGd(ZAD3u|tYTbtu6BqU*mT#CH?AZNvPS#F&69XVn(912$V`$sx zv@h4sYj?-O?IsPeUfzzqFTX$y0ZNxM?CqGgUrBsR{wk)45pj%bq)Z%FMj*-SCFiCv zOmgL)tZq`U-s#;tPl=NCo0w-8a6#1+gf0V^p=O;s>6XD~4U0)?!^vP1@ls^{G$7Opv*iyf3?CVMlx+eddpq>ECE l^Gl18Q;QiKq>Lq&AAhK6xoyMe#0Sp*4=FDe1ps~H8nV+TAiw|s literal 0 HcmV?d00001 diff --git a/.git copy/objects/d1/fb0d886c44ce62fa169d1b2909a9398e84700f b/.git copy/objects/d1/fb0d886c44ce62fa169d1b2909a9398e84700f new file mode 100644 index 0000000000000000000000000000000000000000..12d8d1817e6d531e48308c94e930b5184ac9eef3 GIT binary patch literal 128 zcmV-`0Du2@0V^p=O;s>7F<>w>FfcPQQE<*LEhux=JPFStYxY7YXt!B3OQTxIylAv literal 0 HcmV?d00001 diff --git a/.git copy/objects/d2/95e68a369a0bb2330435f97f291c1916fea3a0 b/.git copy/objects/d2/95e68a369a0bb2330435f97f291c1916fea3a0 new file mode 100644 index 0000000000000000000000000000000000000000..5dbe671617ae8ebf9e5b337756f5eddb93aa2d0c GIT binary patch literal 49 zcmb9VK6ZO0)^Cy#N2|MR0gZ5rLB`M{hYM#~5 literal 0 HcmV?d00001 diff --git a/.git copy/objects/d4/eb948bb03f3f9805358f0724e239e9228a88b5 b/.git copy/objects/d4/eb948bb03f3f9805358f0724e239e9228a88b5 new file mode 100644 index 0000000000000000000000000000000000000000..91d7019bc069219981bd566185d5d9c3ec13978d GIT binary patch literal 234 zcmV5F<~$?FfcPQQP4}zEJ-XWDauSLElDkAuy)MQI$HVbcUshL z-#@pOty)#6*n*@oGd(ZAD3u|tYTbtu6BqU*mT#CH?AZNvPS#F&69XVn(912$V`$sx zv@h4sYj?-O?IsPeUfzzqFTX$y0ZNxM?CqGgUrBsR{wk)45pj%bq)Z%FMj*-SCFiCv zOmgL)tZq`U-s#;tPl=NCo0w-8a6#1+6VlXiP0)^bf%shsLUQ_YH6U-6n%S!H@g-DmA g7MC#mf1B)EdFF>^zv8C!pS896l_LFF0K@YgT=`2S`~Uy| literal 0 HcmV?d00001 diff --git a/.git copy/objects/d7/11a0f9bce94ce749752e2304134d097ad5ecb5 b/.git copy/objects/d7/11a0f9bce94ce749752e2304134d097ad5ecb5 new file mode 100644 index 0000000000000000000000000000000000000000..666c2ca8ca17a4ea477c2b0d4a0c3333dfa038d0 GIT binary patch literal 80 zcmV-W0I&ae0V^p=O;s>6XD~4U0)?!^vP6cYcVEsKA35NEbKBGvm&HHYOn3O-2$3#I mEzU13N=_|iaF8;VSbqGWrscK`pA#QA|39R>SQG$r?;r#dJ|SxW literal 0 HcmV?d00001 diff --git a/.git copy/objects/d7/44156af1b258be1ad507cc87238d9606581d8b b/.git copy/objects/d7/44156af1b258be1ad507cc87238d9606581d8b new file mode 100644 index 0000000000000000000000000000000000000000..02d8d4c2842acc88771c55b423fbaa872087e86b GIT binary patch literal 76 zcmV-S0JHyi0ZYosPf{>5U?@mT&Q45ERY=ay)l02N%q_@C)k{gu&DYD#Pf5)ww&vn0 iC{4=AOjbzFNh~f_2uV#$&PXj%sOI9TVW +v~M}1[8;6fFfGSK$R\m \4"0Z-VR `{]h"˗=U8uoSB0 \ No newline at end of file diff --git a/.git copy/objects/d9/2889f28db14ae497f8983ff7f8bc31a089e96a b/.git copy/objects/d9/2889f28db14ae497f8983ff7f8bc31a089e96a new file mode 100644 index 00000000..521db489 --- /dev/null +++ b/.git copy/objects/d9/2889f28db14ae497f8983ff7f8bc31a089e96a @@ -0,0 +1 @@ +x;0D}-C!(SQ=,ym) iӌG:NUO }Yh-|l tJ:3dXPE(gvC̰>a.VRCq?pSci]Cd!UJ7 \ No newline at end of file diff --git a/.git copy/objects/d9/d206914e101f3a2a6ae209dfc40c800df899fb b/.git copy/objects/d9/d206914e101f3a2a6ae209dfc40c800df899fb new file mode 100644 index 0000000000000000000000000000000000000000..bce02746069b835dec72c2857245c2c899ae105d GIT binary patch literal 166 zcmV;X09pTd0V^p=O;s>7HDNF`FfcPQQE*Ak&37y)$jMAjEXmBz)5}UMOJqpdYO%1U z^&RG3Tcz=KBL(vxrmf4D1 z5+SN`^HWlDiWwHheE5BHHp_MPSFx`aq*W!bYniG-6cncxm1QQU7BlF{aeP@RCsSx4 U?Y*Pn!G_}#ClqP{0C2TIBgD8%`~Uy| literal 0 HcmV?d00001 diff --git a/.git copy/objects/da/50f00ab691b4990d1e69895113255906630b6e b/.git copy/objects/da/50f00ab691b4990d1e69895113255906630b6e new file mode 100644 index 00000000..4020878d --- /dev/null +++ b/.git copy/objects/da/50f00ab691b4990d1e69895113255906630b6e @@ -0,0 +1,2 @@ +xIn0}+n ݯ`- EV֨CU2MCS"Q.`Wr0.1ZТ6 sQ_Ten ;#XzNEIyr&1LY{DX*0V^p=O;s?muwXDWFfcPQQE<*LEhHSD9Oyv)5}UM zOJwkqU=h)Mxhijo+p&EA)0u8(Z|&EG>hsJiOU%hk@yshIEkVRA zlFr@FcJF1?VyLd*lG2payb{NpqSVBcO4q!i{G6OrbX#v~bbjjH==Eg!j~Vvgf9x?_ z(D^b8RX+~rS|!(sh-sVc-juP^E}*+U+v7#;RH(*~)WqbB)FK=jStfpHdoPu<+c8RB Rj=i2+|IQE91pri1b)Fh~b4CCF literal 0 HcmV?d00001 diff --git a/.git copy/objects/e0/3d43c3f8bfdf91a49a8dd67b7f5814965e5887 b/.git copy/objects/e0/3d43c3f8bfdf91a49a8dd67b7f5814965e5887 new file mode 100644 index 00000000..3de9888d --- /dev/null +++ b/.git copy/objects/e0/3d43c3f8bfdf91a49a8dd67b7f5814965e5887 @@ -0,0 +1 @@ +xMN1 Y# 8Co`:R'ALM=@{Wڶl/8msB,-9bb_LL.u-&)һnAmv$3c.`Pxsp+VD:vS;zy+mM ^ZMw y<_?XJ;.;~V7q.SH \ No newline at end of file diff --git a/.git copy/objects/e1/6ed0c478ac036b584748731a0f19f0becaf70c b/.git copy/objects/e1/6ed0c478ac036b584748731a0f19f0becaf70c new file mode 100644 index 0000000000000000000000000000000000000000..23f0adad223b48c3ddcf2850a2061bd6e0b699f8 GIT binary patch literal 79 zcmV-V0I>gf0V^p=O;s>6XD~4U0)?!^vP6b#G5a=mF=gh*>1GF4>G4kbc-b=>B3+bP loL^d$oLbD_AZ0AE{P;sn%WWGzCq8ige@J<;C;*tQ8><~`BDDYj literal 0 HcmV?d00001 diff --git a/.git copy/objects/e3/0297abdc52bf9965363634367d4cbb190db9d6 b/.git copy/objects/e3/0297abdc52bf9965363634367d4cbb190db9d6 new file mode 100644 index 0000000000000000000000000000000000000000..0d71ad57fc33bac391024b22bd8b48be958d0760 GIT binary patch literal 234 zcmV5F<~$?FfcPQQP4}zEJ-XWDauSLElDkAuy)MQI$HVbcUshL z-#@pOty)#6*n*@oGd(ZAD3u|tYTbtu6BqU*mT#CH?AZNvPS#F&69XVn(912$V`$sx zv@h4sYj?-O?IsPeUfzzqFTX$y0ZNxM?CqGgUrBsR{wk)45pj%bq)Z%FMj*-SCFiCv zOmgL)tZq`U-s#;tPl=NCo0w-8a6#1+@~ literal 0 HcmV?d00001 diff --git a/.git copy/objects/e3/1ed9a56ef8abc73f927b3933bb789d51040a01 b/.git copy/objects/e3/1ed9a56ef8abc73f927b3933bb789d51040a01 new file mode 100644 index 0000000000000000000000000000000000000000..b3ab6a5ce35e9c3afe72863034543fc4bca7698e GIT binary patch literal 49 zcmb6XD~4U0)?!^vP1@%KXGLf(o5zY?z+Q$EPlVrge_-0Aksyt m#rdU0$*IK*4pPPv%a1?QwA{AgbK(Q%|A&+pivj={^By}wU?d>` literal 0 HcmV?d00001 diff --git a/.git copy/objects/e4/f4865a18509b07eea278289a7f1b011ed9f7e5 b/.git copy/objects/e4/f4865a18509b07eea278289a7f1b011ed9f7e5 new file mode 100644 index 0000000000000000000000000000000000000000..6b7c4ea5374348597011515755a50f4b8b100086 GIT binary patch literal 49 zcmb5F<~$?FfcPQQP4}zEJ-XWDauSLElDkAuy)MQI$HVbcUshL z-#@pOty)#6*n*@oGd(ZAD3u|tYTbtu6BqU*mT#CH?AZNvPS#F&69XVn(912$V`$sx zv@h4sYj?-O?IsPeUfzzqFTX$y0ZNxM?CqGgUrBsR{wk)45pj%bq)Z%FMj*-SCFiCv zOmgL)tZq`U-s#;tPl=NCo0w-8a6#1++W-In literal 0 HcmV?d00001 diff --git a/.git copy/objects/e7/4de7e1ae1be7603b36fda1d3992d86353939e6 b/.git copy/objects/e7/4de7e1ae1be7603b36fda1d3992d86353939e6 new file mode 100644 index 00000000..b69d8eda --- /dev/null +++ b/.git copy/objects/e7/4de7e1ae1be7603b36fda1d3992d86353939e6 @@ -0,0 +1,2 @@ +xKN1Yڿ[B}Nю!bf,'g ZTS_GeU 䖭D +i 9p踶*C U"6D)ĶfV3Gkc!5r}n}Key=lJ.qʔt?: 9ߤdY`/n0;^^T. \ No newline at end of file diff --git a/.git copy/objects/e7/d92d39e3447fd5a0b87edb8888f73ff0ea016d b/.git copy/objects/e7/d92d39e3447fd5a0b87edb8888f73ff0ea016d new file mode 100644 index 00000000..a98ed821 --- /dev/null +++ b/.git copy/objects/e7/d92d39e3447fd5a0b87edb8888f73ff0ea016d @@ -0,0 +1 @@ +x}=n0Ss)ADJU4ۤ x:12%BBefR^Z>&b􅪕8)͔$C jcd].7wT΄Օ dֈ-`x=AE&PvP-c>B dcsux 6\+ fuʋ0|s,t6z`Fl>| fL1h['܏siun;f/|=9QnXe24'M4yNb6gv \ No newline at end of file diff --git a/.git copy/objects/eb/29c00ec879b26784887a3edd2d13eb819932f3 b/.git copy/objects/eb/29c00ec879b26784887a3edd2d13eb819932f3 new file mode 100644 index 0000000000000000000000000000000000000000..e32bd91e6e4e5074f844afafad62dde41421177a GIT binary patch literal 165 zcmV;W09yZe0V^p=O;s>7HDNF`FfcPQQE*Ak&37y)$jMAjEXmBz)5}UMOJqpdYO%1U z^&RG3Tcz=KBL(vxrmf4D1 z5+SN`^HWlDiWxK*C#r4V_B1(o1EcAu)@TMUg#Z(Xg5uPovdrYvVg^2~FI!*F2-ZC% Tb!L61_58Q8@j==E3oAdKd|6HM literal 0 HcmV?d00001 diff --git a/.git copy/objects/eb/bbed024c1a46d09a7515bfaf1b078b76e839a7 b/.git copy/objects/eb/bbed024c1a46d09a7515bfaf1b078b76e839a7 new file mode 100644 index 0000000000000000000000000000000000000000..72a8b657e7f80d695dbe7968f6366a2907775827 GIT binary patch literal 166 zcmV;X09pTd0V^p=O;s>7HDNF`FfcPQQE*Ak&37y)$jMAjEXmBz)5}UMOJqpdYO%1U z^&RG3Tcz=KBL(vxrmf4D1 z5+SN`^HWlDiWxRdUHoa8v+tP)yFcv@~ literal 0 HcmV?d00001 diff --git a/.git copy/objects/ef/fac31e9124b8cb339ebb34a31bca4dad0447aa b/.git copy/objects/ef/fac31e9124b8cb339ebb34a31bca4dad0447aa new file mode 100644 index 00000000..c10ade40 --- /dev/null +++ b/.git copy/objects/ef/fac31e9124b8cb339ebb34a31bca4dad0447aa @@ -0,0 +1,2 @@ +xK0 Y#&#!GIRmU)zOMp)@VVeRjVbĺ;/j'2Yګ' I U,UMj5ĿɄG9 :0vNC۔=TĞ%XE4 ]B0Ǿ6 + ٴ:kOk \ No newline at end of file diff --git a/.git copy/objects/f2/f9341a809880c0f359fa213b78745612a6e71f b/.git copy/objects/f2/f9341a809880c0f359fa213b78745612a6e71f new file mode 100644 index 0000000000000000000000000000000000000000..75c96d2c3c58504416b9b57efccda0215c2537ad GIT binary patch literal 79 zcmV-V0I>gf0V^p=O;s>6XD~4U0)?!^vP1^yWTpU7qsp?Fuz4F;7D_s@{b99*NEf9R l=a&{Grxr6fNEu5kKmJhDa@&T_i4UCrA5vZ{3II{P8T+hpAA$e? literal 0 HcmV?d00001 diff --git a/.git copy/objects/f4/0b207dd11a858e8d009760a18d5ba4ee746198 b/.git copy/objects/f4/0b207dd11a858e8d009760a18d5ba4ee746198 new file mode 100644 index 0000000000000000000000000000000000000000..4418733071c1091b7dd667c1a5e6b71789815c37 GIT binary patch literal 46 zcmV+}0MY+=0V^p=O;s>9WH2!R0)>>++8P^1t1JAvai-B{00KS_ EHKLdkNB{r; literal 0 HcmV?d00001 diff --git a/.git copy/objects/f4/0f2eb3ca8fe00e004c6a3a1e4c4476797d7c3a b/.git copy/objects/f4/0f2eb3ca8fe00e004c6a3a1e4c4476797d7c3a new file mode 100644 index 0000000000000000000000000000000000000000..27df7658ba4209f45d779959923a55b277df6f08 GIT binary patch literal 45 zcmb9VK6ZO0)^Cy#N2|MR0gNAEpwU$gfE&){om1lYktCE_r*~F HCb$qT&K(qR literal 0 HcmV?d00001 diff --git a/.git copy/objects/f4/dea3e1676b8ead2ad0bcd73fd8a33180b21f4f b/.git copy/objects/f4/dea3e1676b8ead2ad0bcd73fd8a33180b21f4f new file mode 100644 index 0000000000000000000000000000000000000000..d3be16c06fda2ec95122454747d25aeb1426f88a GIT binary patch literal 166 zcmV;X09pTd0V^p=O;s>7HDNF`FfcPQQE*Ak&37y)$jMAjEXmBz)5}UMOJqpdYO%1U z^&RG3Tcz=KBL(vxrmf4D1 z5+SN`^HWlDiW#P!^au>Px#IS>>W1|;ss~y3zmwbxQBa&(RF;{XTFjs)$MI#QoJ^sG UwD*pN2OEx0oKUC*0FgmLIBAMdOaK4? literal 0 HcmV?d00001 diff --git a/.git copy/objects/f7/370644ae6f54875205c8be52a8224d49b430e2 b/.git copy/objects/f7/370644ae6f54875205c8be52a8224d49b430e2 new file mode 100644 index 0000000000000000000000000000000000000000..9c284728c0267334c4d6875ee0219ae4d6a0b395 GIT binary patch literal 234 zcmV5F<~$?FfcPQQP4}zEJ-XWDauSLElDkAuy)MQI$HVbcUshL z-#@pOty)#6*n*@oGd(ZAD3u|tYTbtu6BqU*mT#CH?AZNvPS#F&69XVn(912$V`$sx zv@h4sYj?-O?IsPeUfzzqFTX$y0ZNxM?CqGgUrBsR{wk)45pj%bq)Z%FMj*-SCFiCv zOmgL)tZq`U-s#;tPl=NCo0w-8a6#1+g*dbz2GF!=eD{Lj52LLs z!||N^or@Kh736vT)ZzLQHxz0q5dFfU;}j7pBodNPuFpxrL?@Mj4?JMh8^+P?R=nEt zuCF+&q2^d?xKdo-se+#b?9(YWU_+rainR?GFBar{q_$YlSRm3yQ_z@W^=&6jk$zg3 zlZIsHeTL}!EHF5exigKH>F@#$9Vy%rDcozCAtQZMnt6uB=Ax}*rCSuwWwja5DPx2g z@EU3Ya6!^7n4+dv?c-wNj6pI2dYkaL&TZnZ>QdYHinCX~i>-Ntw)P&A(`oAdR$hzC wd(?AgoKixlbMDC8VYJPdC)}XjS2~3%T1)HAlJ*kzOTmS$7 literal 0 HcmV?d00001 diff --git a/.git copy/objects/f8/a93bab7b831f10e428f1d0274d818d40ac5d53 b/.git copy/objects/f8/a93bab7b831f10e428f1d0274d818d40ac5d53 new file mode 100644 index 00000000..48e8d96d --- /dev/null +++ b/.git copy/objects/f8/a93bab7b831f10e428f1d0274d818d40ac5d53 @@ -0,0 +1,3 @@ +xMO0 9W8$T i6!J qdMi{ &qkǛJrBUK+R&W"٬LXxB0GC'XHCu[HQB)iŴ!j+Y|l$Q|eXevAh5s #Yp2{U@Az-~h6O~2)rȅ*Zʩو +!; +big0[w/aԀrVsXC;bLW4/J39%S]^R `%ͫ9Дˮmq p2H'ȧ ;.c./V \ No newline at end of file diff --git a/.git copy/objects/f9/525a325302fbe8a32b8faaf78422ba7ff803d1 b/.git copy/objects/f9/525a325302fbe8a32b8faaf78422ba7ff803d1 new file mode 100644 index 0000000000000000000000000000000000000000..63ac4c4b9fca99a97789f49c618114c76d215d8d GIT binary patch literal 234 zcmV5F<~$?FfcPQQP4}zEJ-XWDauSLElDkAuy)MQI$HVbcUshL z-#@pOty)#6*n*@oGd(ZAD3u|tYTbtu6BqU*mT#CH?AZNvPS#F&69XVn(912$V`$sx zv@h4sYj?-O?IsPeUfzzqFTX$y0ZNxM?CqGgUrBsR{wk)45pj%bq)Z%FMj*-SCFiCv zOmgL)tZq`U-s#;tPl=NCo0w-8a6#1+c3H R "4jʕ3]ǐ#3Oh +j(<M%H)Ԅ}ళMm ԙIA \ No newline at end of file diff --git a/.git copy/objects/fb/027c3f9100789b777599d55005c7126b3ae420 b/.git copy/objects/fb/027c3f9100789b777599d55005c7126b3ae420 new file mode 100644 index 0000000000000000000000000000000000000000..8c069ebe71f12acdaf89275739ead77aeddbc180 GIT binary patch literal 166 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 Date: Wed, 11 Mar 2026 00:29:59 +0400 Subject: [PATCH 17/19] All done --- .git copy/COMMIT_EDITMSG | 1 - .git copy/FETCH_HEAD | 3 - .git copy/HEAD | 1 - .git copy/ORIG_HEAD | 1 - .git copy/config | 16 -- .git copy/description | 1 - .git copy/hooks/applypatch-msg.sample | 15 -- .git copy/hooks/commit-msg.sample | 24 --- .git copy/hooks/fsmonitor-watchman.sample | 174 ------------------ .git copy/hooks/post-update.sample | 8 - .git copy/hooks/pre-applypatch.sample | 14 -- .git copy/hooks/pre-commit.sample | 49 ----- .git copy/hooks/pre-merge-commit.sample | 13 -- .git copy/hooks/pre-push.sample | 53 ------ .git copy/hooks/pre-rebase.sample | 169 ----------------- .git copy/hooks/pre-receive.sample | 24 --- .git copy/hooks/prepare-commit-msg.sample | 42 ----- .git copy/hooks/push-to-checkout.sample | 78 -------- .git copy/hooks/sendemail-validate.sample | 77 -------- .git copy/hooks/update.sample | 128 ------------- .git copy/index | Bin 3256 -> 0 bytes .git copy/info/exclude | 6 - .git copy/logs/HEAD | 17 -- .git copy/logs/refs/heads/main | 6 - .git copy/logs/refs/heads/revan-dev | 5 - .git copy/logs/refs/remotes/origin/HEAD | 1 - .git copy/logs/refs/remotes/origin/kenan-dev | 2 - .git copy/logs/refs/remotes/origin/main | 4 - .git copy/logs/refs/remotes/origin/revan-dev | 2 - .../02/67b93cefd2f812ae77f40cec511fd5d6b2d780 | Bin 234 -> 0 bytes .../02/7f41581bcf393cfa43e9cce3f3d95bc0412ded | Bin 79 -> 0 bytes .../02/afc96de49e4fec2e069b859ac162efbed90bbf | Bin 157 -> 0 bytes .../02/fc9f317f42fa61f506570a4888785f02ec78d3 | Bin 46 -> 0 bytes .../03/d8bbff78d73c5865ee892eef6c39c8e8fa9c4d | Bin 45 -> 0 bytes .../04/91f086ef1a6cbb415a1f1e077f0b2fdcf825a0 | 1 - .../0e/d4199447be1f18799f9f4f76c7ec6765eb3503 | Bin 49 -> 0 bytes .../0e/f93a0ec2e724495981f1952185da98f724b3cf | Bin 74 -> 0 bytes .../10/195d11ca235288142915e2a70b6d4b77adb861 | Bin 74 -> 0 bytes .../10/4317dc26118e5bfb62845e713637292bf33736 | Bin 165 -> 0 bytes .../10/bfe35595ad93015fd430ce74b45548f82fd0b5 | Bin 234 -> 0 bytes .../13/c7d95fc7166494b29cca06fbf16184e28806c9 | Bin 74 -> 0 bytes .../14/ba021a983b2d466855e7401737df3dd988df8c | Bin 46 -> 0 bytes .../17/76a70ad286b6684b13512801ddbfa9dc90f3bb | Bin 45 -> 0 bytes .../1a/391d331f0dff9fa72bd7ba73d0eb8c0f3ace44 | Bin 46 -> 0 bytes .../1b/630250153279765c569eb004a1194106fc053d | Bin 45 -> 0 bytes .../1b/9477616dfa5c6b8f43e05f3eb711d187ab9a96 | Bin 138 -> 0 bytes .../1c/fc5e769067749ec38adc0bc65fbf2490b4cc48 | Bin 45 -> 0 bytes .../1f/0c855308c7246201ffa689eb4c635ebe60a14c | Bin 45 -> 0 bytes .../1f/652969d7369b984ef912b2676faffebf6b5c0b | Bin 165 -> 0 bytes .../26/bdf9cc34037fd0d1f3d54ea4131680f023c129 | Bin 234 -> 0 bytes .../27/f54a60c0e2bb15b951be7c1862c2148b84c71c | Bin 45 -> 0 bytes .../28/019126b7b6e56353b00135f2855b000a205034 | Bin 120 -> 0 bytes .../2a/833a13ee965d91d6d62dcf66824e1f97af95af | Bin 366 -> 0 bytes .../2b/2a7569ae59536df7db356a445f4221a89daf89 | Bin 717 -> 0 bytes .../2b/ffb79f07f31727d8725dd7e8d5efd2f6d5ce8c | Bin 74 -> 0 bytes .../2c/0a7f7563ae882eaab072f3e71506fb5e75c054 | 3 - .../2d/4763ff9c9e2b07d223adb7f66cd17e4f7c91a2 | Bin 166 -> 0 bytes .../2e/1e08f4a91e1c71381b4bb880e0b0c79190712a | Bin 128 -> 0 bytes .../2e/d2a724b6b8193fa011365afd3be19046c235a5 | 2 - .../32/2abf802b34f3de71d618514f508845b02c31f5 | Bin 121 -> 0 bytes .../33/04bfb5f96d12dc3dbb8fcb764ecd4e45df0a1f | Bin 74 -> 0 bytes .../33/1f2a7a69e8bf358ed27f930dec3d228539bfa4 | Bin 120 -> 0 bytes .../34/e8d1672955726d9f14874d00dcce27e3bdd87f | Bin 1182 -> 0 bytes .../35/7562cfc9988fbaf48f61a6400584831322c811 | Bin 74 -> 0 bytes .../35/a060d4b8bde7e23cbc2adabc56f62c34301b61 | Bin 50 -> 0 bytes .../36/1e6046933d28dbc982ab43662dd5ff58830a0b | Bin 79 -> 0 bytes .../39/8646f243459fd5af14c77bba2312478b18c442 | Bin 1323 -> 0 bytes .../3a/637e14162b36bbb268b93e508b7f6b48e87d95 | 2 - .../3a/95758593d2f99a0704c626938277d74b88b6ea | Bin 46 -> 0 bytes .../3d/e6654902d1761008255c4f94b1d53fb662cfdc | Bin 166 -> 0 bytes .../3e/5440405f63b60b4cd9d84830a7023f6469dc8b | Bin 234 -> 0 bytes .../3e/dfbb76224aa31ad6d8183732eca22fbfe91792 | Bin 49 -> 0 bytes .../40/7ae78b7438456c09a340221c934b03473f5b8b | Bin 46 -> 0 bytes .../40/b297dc13a9295f31775fa38364e6e30b645393 | Bin 166 -> 0 bytes .../41/f7c86360ab6f9b34b2bccb543400ffd33a7025 | Bin 132 -> 0 bytes .../41/f936f209b829b34c5041c7466d48cec802e767 | Bin 938 -> 0 bytes .../42/76b49c831013d1371affb88fda9f60c347a35a | Bin 46 -> 0 bytes .../42/e93a26e2caa3b0af3cca788ef606bb34a9204f | Bin 45 -> 0 bytes .../43/bca3363d3f2e38739f7e3bfb9408f22164d712 | Bin 79 -> 0 bytes .../44/4cb17b5dec5688a94067361721398ff241c3b6 | Bin 80 -> 0 bytes .../45/ce9b702fa090b9f158fdb02956161c6280478b | Bin 80 -> 0 bytes .../46/18b729a52a797d792cdd3af91b1365dbcb976d | Bin 362 -> 0 bytes .../46/45774cfcc31901211d0ed4967977970f603687 | Bin 166 -> 0 bytes .../49/8b9add69b0d714278bd162f7c725a417e78f3e | 1 - .../4a/4a03037e1d567ded162343251bebbe67547cc6 | Bin 46 -> 0 bytes .../4b/881306a3cb3db3cf83a448a76aae017e7d9487 | Bin 79 -> 0 bytes .../4c/79cc7259d27e2b39a079046777a48013a9b654 | Bin 74 -> 0 bytes .../4d/231f7c92e52d71357f39257fa46ebb50c80cbd | 1 - .../4e/1804142de9aa6ea446c66f4fcb6946cddabf2d | Bin 139 -> 0 bytes .../4e/54ad96c79388910261b28f772d1bf701a0c3fe | 1 - .../50/1bf8144a1381f5287653f1e7e1ef62ff239660 | Bin 234 -> 0 bytes .../54/250bf3556318005e3bff92769ba775cef3fad0 | Bin 163 -> 0 bytes .../54/dac8ed6bcfbe7f99cc6b4d543a3890240edd77 | Bin 47 -> 0 bytes .../58/2f643823c14a222fdd951617e6ffbf07f58e73 | 1 - .../59/60500bbe94d36f259e35684e434e66c72829a3 | Bin 45 -> 0 bytes .../5a/04ad9c0af398e73baac0250d223b7e3e774470 | Bin 74 -> 0 bytes .../5c/6761c09c63ee1cab26c1f5f96f4e63c69a6e47 | Bin 128 -> 0 bytes .../5e/5c4f89938dc948ddff5a384ae9e587cd10ee15 | Bin 166 -> 0 bytes .../60/01f4773c082801314dd22c9cdbdbd327381ebf | Bin 45 -> 0 bytes .../62/1780064eec96be4ec20d7c89c20d1b5757cb7c | 2 - .../62/82a43e1376e1b4a498ff1fd2f5c547e4bf5960 | Bin 46 -> 0 bytes .../62/84c6dc7e23db29b9d48777118d72cf5527bb31 | Bin 49 -> 0 bytes .../62/c3c16857d66c82218ff6e6ce22e4ac6423a02c | Bin 121 -> 0 bytes .../62/eef4ce33c4c04fd9b695a8d317f13c9740ff81 | Bin 45 -> 0 bytes .../63/37a8f81a512b91d30fe70b332484959529df79 | Bin 234 -> 0 bytes .../67/185633246135b15c18a71d15cc58ea41cb01a2 | 3 - .../6a/5ef5148a9fb43d9c2ca8c118b6a89f693baf2d | Bin 166 -> 0 bytes .../6b/163f8647162303e36736c1aa2e0d92f1d3496b | Bin 45 -> 0 bytes .../6b/170c5d2d44a84a9e8212505fb2977736d6b3c6 | Bin 165 -> 0 bytes .../6c/a970f0ce8154dd012f9e1f734fe648ef9006b7 | Bin 45 -> 0 bytes .../6e/6314b9a8ae911ae8f6834d83ed4e7be12a39b1 | 4 - .../6e/fb080e3d0544517a62c1bffa3ebdeef8a0cdc1 | Bin 49 -> 0 bytes .../7d/35ca41128c21250712136c2d32c51115f5f678 | 2 - .../7d/4dd6ae6f1430a1c57110b75ceee614c8852bf4 | Bin 74 -> 0 bytes .../7d/80be016f67d7ef11b6a04d568b38e4001b0958 | 2 - .../7d/ecf2639976283ad82781c6e5e5d1c6e10b1bfb | Bin 234 -> 0 bytes .../7e/fcd01cd06b56dd5b4d5bd101f0aa8d1800638f | Bin 49 -> 0 bytes .../7f/8394e0f01f317220e588ef1ef40c216f3e5cb6 | Bin 135 -> 0 bytes .../88/02bc1f59f9c60b1966d8924ae6003b81b349cd | Bin 46 -> 0 bytes .../8a/d6fbabfba0c8248068476741e577d07379f26f | Bin 50 -> 0 bytes .../8e/2f9832d06855c029e78fdeb4cc051ae7004b17 | Bin 121 -> 0 bytes .../94/438acd21ae4c3a74eafa68082b0278bca6f905 | Bin 128 -> 0 bytes .../94/d454ff64ed1de07d81cb3500b0bce4b2601de1 | Bin 122 -> 0 bytes .../95/c9485152d9a8dbf67b80af3c25c105bfee19bd | Bin 122 -> 0 bytes .../96/ae261be8cab8322607736fb51f410c4987d1c3 | Bin 80 -> 0 bytes .../98/fb26bc79ff73c5b36baac976cd0641f71fbe1f | Bin 664 -> 0 bytes .../9b/1fc70ab3fdf983c52a2c3dd7ce352d70108c44 | Bin 185 -> 0 bytes .../9b/735e27f881fcaa3789e34fed334c429897aab5 | Bin 74 -> 0 bytes .../9b/ce8acd9d580b27bc20542ce0ceb40a80d13987 | Bin 612 -> 0 bytes .../a1/4a94fc9dcbace11868ba6ac8035827a674decd | Bin 79 -> 0 bytes .../a1/5cf0fbd99b04d707ea5deaa0667a60072a3525 | Bin 121 -> 0 bytes .../a3/52bed62941fb05b7e9275455bcc84dc3ef4e65 | Bin 46 -> 0 bytes .../a3/bbf84eb5fdff49e840ab1a13aaa1da0f921983 | Bin 530 -> 0 bytes .../a5/265af3dffc3cabbb421e9ac62c7252821cf76c | Bin 74 -> 0 bytes .../a5/79dba911ec8794b340254a5c07192827844e3a | Bin 74 -> 0 bytes .../a5/7da0e100254b976ceb772a8f8a7b7c05a40f87 | Bin 80 -> 0 bytes .../a8/d7d32b92d7f1bf0f5a10d75c4abdaacc45e1ba | Bin 157 -> 0 bytes .../a9/cac2e46b68ca0af6218a87e8f4cbf0970701a4 | Bin 166 -> 0 bytes .../aa/6164f0bb3f20e0e1d5de7c8bf66c099bfc7b08 | Bin 46 -> 0 bytes .../ab/519601bad2abff94d1c0b4bdd9ffa1e9e1fcfc | Bin 49 -> 0 bytes .../ae/e1f97b9aa36526816a9a430e67db56868b4032 | 6 - .../b0/4adb1a59e151dd67748487ed74f4b09ef9c4cd | Bin 414 -> 0 bytes .../b1/fae454aad73e2d340d3666cec62b64a08704f9 | Bin 198 -> 0 bytes .../b2/431feacbb75cdb56a652f3360052a3acdb5df7 | Bin 121 -> 0 bytes .../b2/95a3f2a6434dcce0bbf2be525d954f274db801 | Bin 121 -> 0 bytes .../b3/4e4243652728c7acc2f34b6923849ffdfc6346 | 2 - .../b4/d487dc3548afe4920fb24316838f682959d99b | Bin 74 -> 0 bytes .../b6/97d3465890103d15eeefaedb2024a9df576de2 | 1 - .../ba/4c7bd69820fbd9003ac1730930de02adfb3803 | Bin 1978 -> 0 bytes .../be/16fa5bc21e4fbc579a8be0e47c4ba64cc17514 | 2 - .../be/b09d2c180bec7b940011a887ec35c1ccf60fde | Bin 234 -> 0 bytes .../bf/30b47dd0d5d6393384ce077b993d8ce96c6ab6 | Bin 49 -> 0 bytes .../c3/620d7e46ab42fd1535a18d7cbaefc6444513b0 | Bin 81 -> 0 bytes .../c5/56e37b274e278d6264571320e2c58ae4f95222 | Bin 128 -> 0 bytes .../c6/91bc5536f3c6d6555f8b0e4d74817d047d4e85 | Bin 650 -> 0 bytes .../c7/58513be7b7063e058be587b8ee2f3c409c3e2c | Bin 79 -> 0 bytes .../c8/3cc084f1f68ebd9699793a988474cb64dcb40e | Bin 74 -> 0 bytes .../cc/112f124f8bdebf8a8a7c7250b0330fff62d7b0 | Bin 46 -> 0 bytes .../ce/2001083c051b958aa1a4de277c82b99a2bb213 | Bin 46 -> 0 bytes .../ce/970b6576fd51a7359677920572724257c824cf | Bin 234 -> 0 bytes .../cf/511031370b8b3bbe30d905ab2a91a5786aef91 | Bin 234 -> 0 bytes .../cf/b6e575e1796c7eec0bbc568b7df0c8e62099ef | Bin 79 -> 0 bytes .../d1/fb0d886c44ce62fa169d1b2909a9398e84700f | Bin 128 -> 0 bytes .../d2/95e68a369a0bb2330435f97f291c1916fea3a0 | Bin 49 -> 0 bytes .../d3/348671444711685a386ee75ddaca129ced00be | Bin 49 -> 0 bytes .../d4/eb948bb03f3f9805358f0724e239e9228a88b5 | Bin 234 -> 0 bytes .../d6/d3548f52d68a6dc1ab4cd10980d8c42951623b | Bin 74 -> 0 bytes .../d7/11a0f9bce94ce749752e2304134d097ad5ecb5 | Bin 80 -> 0 bytes .../d7/44156af1b258be1ad507cc87238d9606581d8b | Bin 76 -> 0 bytes .../d8/73b5dd24e00d3b400438e18907a1e8cc790062 | Bin 49 -> 0 bytes .../d8/e5378836e129a697fbb44a1b6dbf06dee97aa3 | 3 - .../d9/2889f28db14ae497f8983ff7f8bc31a089e96a | 1 - .../d9/d206914e101f3a2a6ae209dfc40c800df899fb | Bin 166 -> 0 bytes .../da/50f00ab691b4990d1e69895113255906630b6e | 2 - .../db/f694527bc1d50a752f5c159e6dc0e9446b39c9 | Bin 215 -> 0 bytes .../e0/3d43c3f8bfdf91a49a8dd67b7f5814965e5887 | 1 - .../e1/6ed0c478ac036b584748731a0f19f0becaf70c | Bin 79 -> 0 bytes .../e3/0297abdc52bf9965363634367d4cbb190db9d6 | Bin 234 -> 0 bytes .../e3/1ed9a56ef8abc73f927b3933bb789d51040a01 | Bin 49 -> 0 bytes .../e3/a73ec1f3c897a1bbbcaa8598665e0fc9822360 | Bin 80 -> 0 bytes .../e4/f4865a18509b07eea278289a7f1b011ed9f7e5 | Bin 49 -> 0 bytes .../e6/4d56dd5fcdef0a6c174aeaf033f6010b69ca40 | Bin 234 -> 0 bytes .../e7/4de7e1ae1be7603b36fda1d3992d86353939e6 | 2 - .../e7/d92d39e3447fd5a0b87edb8888f73ff0ea016d | 1 - .../eb/29c00ec879b26784887a3edd2d13eb819932f3 | Bin 165 -> 0 bytes .../eb/bbed024c1a46d09a7515bfaf1b078b76e839a7 | Bin 166 -> 0 bytes .../ef/fac31e9124b8cb339ebb34a31bca4dad0447aa | 2 - .../f2/f9341a809880c0f359fa213b78745612a6e71f | Bin 79 -> 0 bytes .../f4/0b207dd11a858e8d009760a18d5ba4ee746198 | Bin 46 -> 0 bytes .../f4/0f2eb3ca8fe00e004c6a3a1e4c4476797d7c3a | Bin 45 -> 0 bytes .../f4/166f29c39c79d81798c36edd2a58faf51dbbdb | Bin 46 -> 0 bytes .../f4/8866531835d4f4e21afb39f6e40cba802ef138 | Bin 49 -> 0 bytes .../f4/dea3e1676b8ead2ad0bcd73fd8a33180b21f4f | Bin 166 -> 0 bytes .../f7/370644ae6f54875205c8be52a8224d49b430e2 | Bin 234 -> 0 bytes .../f7/5a0795b1ca5079ecb436a7009881c583fd72f9 | Bin 298 -> 0 bytes .../f8/a93bab7b831f10e428f1d0274d818d40ac5d53 | 3 - .../f9/525a325302fbe8a32b8faaf78422ba7ff803d1 | Bin 234 -> 0 bytes .../fa/317df2da2b74054fdaeaf823da090711c684b8 | 3 - .../fb/027c3f9100789b777599d55005c7126b3ae420 | Bin 166 -> 0 bytes .../ff/bbc0c691aec659b68562bb1dabba30f958c3b4 | Bin 45 -> 0 bytes ...4b78e20712d73ef317ef0f34b8fe4207f0b667.idx | Bin 2108 -> 0 bytes ...b78e20712d73ef317ef0f34b8fe4207f0b667.pack | Bin 10551 -> 0 bytes ...4b78e20712d73ef317ef0f34b8fe4207f0b667.rev | Bin 200 -> 0 bytes .git copy/packed-refs | 2 - .git copy/refs/heads/main | 1 - .git copy/refs/heads/revan-dev | 1 - .git copy/refs/remotes/origin/HEAD | 1 - .git copy/refs/remotes/origin/kenan-dev | 1 - .git copy/refs/remotes/origin/main | 1 - .git copy/refs/remotes/origin/revan-dev | 1 - 210 files changed, 996 deletions(-) delete mode 100644 .git copy/COMMIT_EDITMSG delete mode 100644 .git copy/FETCH_HEAD delete mode 100644 .git copy/HEAD delete mode 100644 .git copy/ORIG_HEAD delete mode 100644 .git copy/config delete mode 100644 .git copy/description delete mode 100644 .git copy/hooks/applypatch-msg.sample delete mode 100644 .git copy/hooks/commit-msg.sample delete mode 100644 .git copy/hooks/fsmonitor-watchman.sample delete mode 100644 .git copy/hooks/post-update.sample delete mode 100644 .git copy/hooks/pre-applypatch.sample delete mode 100644 .git copy/hooks/pre-commit.sample delete mode 100644 .git copy/hooks/pre-merge-commit.sample delete mode 100644 .git copy/hooks/pre-push.sample delete mode 100644 .git copy/hooks/pre-rebase.sample delete mode 100644 .git copy/hooks/pre-receive.sample delete mode 100644 .git copy/hooks/prepare-commit-msg.sample delete mode 100644 .git copy/hooks/push-to-checkout.sample delete mode 100644 .git copy/hooks/sendemail-validate.sample delete mode 100644 .git copy/hooks/update.sample delete mode 100644 .git copy/index delete mode 100644 .git copy/info/exclude delete mode 100644 .git copy/logs/HEAD delete mode 100644 .git copy/logs/refs/heads/main delete mode 100644 .git copy/logs/refs/heads/revan-dev delete mode 100644 .git copy/logs/refs/remotes/origin/HEAD delete mode 100644 .git copy/logs/refs/remotes/origin/kenan-dev delete mode 100644 .git copy/logs/refs/remotes/origin/main delete mode 100644 .git copy/logs/refs/remotes/origin/revan-dev delete mode 100644 .git copy/objects/02/67b93cefd2f812ae77f40cec511fd5d6b2d780 delete mode 100644 .git copy/objects/02/7f41581bcf393cfa43e9cce3f3d95bc0412ded delete mode 100644 .git copy/objects/02/afc96de49e4fec2e069b859ac162efbed90bbf delete mode 100644 .git copy/objects/02/fc9f317f42fa61f506570a4888785f02ec78d3 delete mode 100644 .git copy/objects/03/d8bbff78d73c5865ee892eef6c39c8e8fa9c4d delete mode 100644 .git copy/objects/04/91f086ef1a6cbb415a1f1e077f0b2fdcf825a0 delete mode 100644 .git copy/objects/0e/d4199447be1f18799f9f4f76c7ec6765eb3503 delete mode 100644 .git copy/objects/0e/f93a0ec2e724495981f1952185da98f724b3cf delete mode 100644 .git copy/objects/10/195d11ca235288142915e2a70b6d4b77adb861 delete mode 100644 .git copy/objects/10/4317dc26118e5bfb62845e713637292bf33736 delete mode 100644 .git copy/objects/10/bfe35595ad93015fd430ce74b45548f82fd0b5 delete mode 100644 .git copy/objects/13/c7d95fc7166494b29cca06fbf16184e28806c9 delete mode 100644 .git copy/objects/14/ba021a983b2d466855e7401737df3dd988df8c delete mode 100644 .git copy/objects/17/76a70ad286b6684b13512801ddbfa9dc90f3bb delete mode 100644 .git copy/objects/1a/391d331f0dff9fa72bd7ba73d0eb8c0f3ace44 delete mode 100644 .git copy/objects/1b/630250153279765c569eb004a1194106fc053d delete mode 100644 .git copy/objects/1b/9477616dfa5c6b8f43e05f3eb711d187ab9a96 delete mode 100644 .git copy/objects/1c/fc5e769067749ec38adc0bc65fbf2490b4cc48 delete mode 100644 .git copy/objects/1f/0c855308c7246201ffa689eb4c635ebe60a14c delete mode 100644 .git copy/objects/1f/652969d7369b984ef912b2676faffebf6b5c0b delete mode 100644 .git copy/objects/26/bdf9cc34037fd0d1f3d54ea4131680f023c129 delete mode 100644 .git copy/objects/27/f54a60c0e2bb15b951be7c1862c2148b84c71c delete mode 100644 .git copy/objects/28/019126b7b6e56353b00135f2855b000a205034 delete mode 100644 .git copy/objects/2a/833a13ee965d91d6d62dcf66824e1f97af95af delete mode 100644 .git copy/objects/2b/2a7569ae59536df7db356a445f4221a89daf89 delete mode 100644 .git copy/objects/2b/ffb79f07f31727d8725dd7e8d5efd2f6d5ce8c delete mode 100644 .git copy/objects/2c/0a7f7563ae882eaab072f3e71506fb5e75c054 delete mode 100644 .git copy/objects/2d/4763ff9c9e2b07d223adb7f66cd17e4f7c91a2 delete mode 100644 .git copy/objects/2e/1e08f4a91e1c71381b4bb880e0b0c79190712a delete mode 100644 .git copy/objects/2e/d2a724b6b8193fa011365afd3be19046c235a5 delete mode 100644 .git copy/objects/32/2abf802b34f3de71d618514f508845b02c31f5 delete mode 100644 .git copy/objects/33/04bfb5f96d12dc3dbb8fcb764ecd4e45df0a1f delete mode 100644 .git copy/objects/33/1f2a7a69e8bf358ed27f930dec3d228539bfa4 delete mode 100644 .git copy/objects/34/e8d1672955726d9f14874d00dcce27e3bdd87f delete mode 100644 .git copy/objects/35/7562cfc9988fbaf48f61a6400584831322c811 delete mode 100644 .git copy/objects/35/a060d4b8bde7e23cbc2adabc56f62c34301b61 delete mode 100644 .git copy/objects/36/1e6046933d28dbc982ab43662dd5ff58830a0b delete mode 100644 .git copy/objects/39/8646f243459fd5af14c77bba2312478b18c442 delete mode 100644 .git copy/objects/3a/637e14162b36bbb268b93e508b7f6b48e87d95 delete mode 100644 .git copy/objects/3a/95758593d2f99a0704c626938277d74b88b6ea delete mode 100644 .git copy/objects/3d/e6654902d1761008255c4f94b1d53fb662cfdc delete mode 100644 .git copy/objects/3e/5440405f63b60b4cd9d84830a7023f6469dc8b delete mode 100644 .git copy/objects/3e/dfbb76224aa31ad6d8183732eca22fbfe91792 delete mode 100644 .git copy/objects/40/7ae78b7438456c09a340221c934b03473f5b8b delete mode 100644 .git copy/objects/40/b297dc13a9295f31775fa38364e6e30b645393 delete mode 100644 .git copy/objects/41/f7c86360ab6f9b34b2bccb543400ffd33a7025 delete mode 100644 .git copy/objects/41/f936f209b829b34c5041c7466d48cec802e767 delete mode 100644 .git copy/objects/42/76b49c831013d1371affb88fda9f60c347a35a delete mode 100644 .git copy/objects/42/e93a26e2caa3b0af3cca788ef606bb34a9204f delete mode 100644 .git copy/objects/43/bca3363d3f2e38739f7e3bfb9408f22164d712 delete mode 100644 .git copy/objects/44/4cb17b5dec5688a94067361721398ff241c3b6 delete mode 100644 .git copy/objects/45/ce9b702fa090b9f158fdb02956161c6280478b delete mode 100644 .git copy/objects/46/18b729a52a797d792cdd3af91b1365dbcb976d delete mode 100644 .git copy/objects/46/45774cfcc31901211d0ed4967977970f603687 delete mode 100644 .git copy/objects/49/8b9add69b0d714278bd162f7c725a417e78f3e delete mode 100644 .git copy/objects/4a/4a03037e1d567ded162343251bebbe67547cc6 delete mode 100644 .git copy/objects/4b/881306a3cb3db3cf83a448a76aae017e7d9487 delete mode 100644 .git copy/objects/4c/79cc7259d27e2b39a079046777a48013a9b654 delete mode 100644 .git copy/objects/4d/231f7c92e52d71357f39257fa46ebb50c80cbd delete mode 100644 .git copy/objects/4e/1804142de9aa6ea446c66f4fcb6946cddabf2d delete mode 100644 .git copy/objects/4e/54ad96c79388910261b28f772d1bf701a0c3fe delete mode 100644 .git copy/objects/50/1bf8144a1381f5287653f1e7e1ef62ff239660 delete mode 100644 .git copy/objects/54/250bf3556318005e3bff92769ba775cef3fad0 delete mode 100644 .git copy/objects/54/dac8ed6bcfbe7f99cc6b4d543a3890240edd77 delete mode 100644 .git copy/objects/58/2f643823c14a222fdd951617e6ffbf07f58e73 delete mode 100644 .git copy/objects/59/60500bbe94d36f259e35684e434e66c72829a3 delete mode 100644 .git copy/objects/5a/04ad9c0af398e73baac0250d223b7e3e774470 delete mode 100644 .git copy/objects/5c/6761c09c63ee1cab26c1f5f96f4e63c69a6e47 delete mode 100644 .git copy/objects/5e/5c4f89938dc948ddff5a384ae9e587cd10ee15 delete mode 100644 .git copy/objects/60/01f4773c082801314dd22c9cdbdbd327381ebf delete mode 100644 .git copy/objects/62/1780064eec96be4ec20d7c89c20d1b5757cb7c delete mode 100644 .git copy/objects/62/82a43e1376e1b4a498ff1fd2f5c547e4bf5960 delete mode 100644 .git copy/objects/62/84c6dc7e23db29b9d48777118d72cf5527bb31 delete mode 100644 .git copy/objects/62/c3c16857d66c82218ff6e6ce22e4ac6423a02c delete mode 100644 .git copy/objects/62/eef4ce33c4c04fd9b695a8d317f13c9740ff81 delete mode 100644 .git copy/objects/63/37a8f81a512b91d30fe70b332484959529df79 delete mode 100644 .git copy/objects/67/185633246135b15c18a71d15cc58ea41cb01a2 delete mode 100644 .git copy/objects/6a/5ef5148a9fb43d9c2ca8c118b6a89f693baf2d delete mode 100644 .git copy/objects/6b/163f8647162303e36736c1aa2e0d92f1d3496b delete mode 100644 .git copy/objects/6b/170c5d2d44a84a9e8212505fb2977736d6b3c6 delete mode 100644 .git copy/objects/6c/a970f0ce8154dd012f9e1f734fe648ef9006b7 delete mode 100644 .git copy/objects/6e/6314b9a8ae911ae8f6834d83ed4e7be12a39b1 delete mode 100644 .git copy/objects/6e/fb080e3d0544517a62c1bffa3ebdeef8a0cdc1 delete mode 100644 .git copy/objects/7d/35ca41128c21250712136c2d32c51115f5f678 delete mode 100644 .git copy/objects/7d/4dd6ae6f1430a1c57110b75ceee614c8852bf4 delete mode 100644 .git copy/objects/7d/80be016f67d7ef11b6a04d568b38e4001b0958 delete mode 100644 .git copy/objects/7d/ecf2639976283ad82781c6e5e5d1c6e10b1bfb delete mode 100644 .git copy/objects/7e/fcd01cd06b56dd5b4d5bd101f0aa8d1800638f delete mode 100644 .git copy/objects/7f/8394e0f01f317220e588ef1ef40c216f3e5cb6 delete mode 100644 .git copy/objects/88/02bc1f59f9c60b1966d8924ae6003b81b349cd delete mode 100644 .git copy/objects/8a/d6fbabfba0c8248068476741e577d07379f26f delete mode 100644 .git copy/objects/8e/2f9832d06855c029e78fdeb4cc051ae7004b17 delete mode 100644 .git copy/objects/94/438acd21ae4c3a74eafa68082b0278bca6f905 delete mode 100644 .git copy/objects/94/d454ff64ed1de07d81cb3500b0bce4b2601de1 delete mode 100644 .git copy/objects/95/c9485152d9a8dbf67b80af3c25c105bfee19bd delete mode 100644 .git copy/objects/96/ae261be8cab8322607736fb51f410c4987d1c3 delete mode 100644 .git copy/objects/98/fb26bc79ff73c5b36baac976cd0641f71fbe1f delete mode 100644 .git copy/objects/9b/1fc70ab3fdf983c52a2c3dd7ce352d70108c44 delete mode 100644 .git copy/objects/9b/735e27f881fcaa3789e34fed334c429897aab5 delete mode 100644 .git copy/objects/9b/ce8acd9d580b27bc20542ce0ceb40a80d13987 delete mode 100644 .git copy/objects/a1/4a94fc9dcbace11868ba6ac8035827a674decd delete mode 100644 .git copy/objects/a1/5cf0fbd99b04d707ea5deaa0667a60072a3525 delete mode 100644 .git copy/objects/a3/52bed62941fb05b7e9275455bcc84dc3ef4e65 delete mode 100644 .git copy/objects/a3/bbf84eb5fdff49e840ab1a13aaa1da0f921983 delete mode 100644 .git copy/objects/a5/265af3dffc3cabbb421e9ac62c7252821cf76c delete mode 100644 .git copy/objects/a5/79dba911ec8794b340254a5c07192827844e3a delete mode 100644 .git copy/objects/a5/7da0e100254b976ceb772a8f8a7b7c05a40f87 delete mode 100644 .git copy/objects/a8/d7d32b92d7f1bf0f5a10d75c4abdaacc45e1ba delete mode 100644 .git copy/objects/a9/cac2e46b68ca0af6218a87e8f4cbf0970701a4 delete mode 100644 .git copy/objects/aa/6164f0bb3f20e0e1d5de7c8bf66c099bfc7b08 delete mode 100644 .git copy/objects/ab/519601bad2abff94d1c0b4bdd9ffa1e9e1fcfc delete mode 100644 .git copy/objects/ae/e1f97b9aa36526816a9a430e67db56868b4032 delete mode 100644 .git copy/objects/b0/4adb1a59e151dd67748487ed74f4b09ef9c4cd delete mode 100644 .git copy/objects/b1/fae454aad73e2d340d3666cec62b64a08704f9 delete mode 100644 .git copy/objects/b2/431feacbb75cdb56a652f3360052a3acdb5df7 delete mode 100644 .git copy/objects/b2/95a3f2a6434dcce0bbf2be525d954f274db801 delete mode 100644 .git copy/objects/b3/4e4243652728c7acc2f34b6923849ffdfc6346 delete mode 100644 .git copy/objects/b4/d487dc3548afe4920fb24316838f682959d99b delete mode 100644 .git copy/objects/b6/97d3465890103d15eeefaedb2024a9df576de2 delete mode 100644 .git copy/objects/ba/4c7bd69820fbd9003ac1730930de02adfb3803 delete mode 100644 .git copy/objects/be/16fa5bc21e4fbc579a8be0e47c4ba64cc17514 delete mode 100644 .git copy/objects/be/b09d2c180bec7b940011a887ec35c1ccf60fde delete mode 100644 .git copy/objects/bf/30b47dd0d5d6393384ce077b993d8ce96c6ab6 delete mode 100644 .git copy/objects/c3/620d7e46ab42fd1535a18d7cbaefc6444513b0 delete mode 100644 .git copy/objects/c5/56e37b274e278d6264571320e2c58ae4f95222 delete mode 100644 .git copy/objects/c6/91bc5536f3c6d6555f8b0e4d74817d047d4e85 delete mode 100644 .git copy/objects/c7/58513be7b7063e058be587b8ee2f3c409c3e2c delete mode 100644 .git copy/objects/c8/3cc084f1f68ebd9699793a988474cb64dcb40e delete mode 100644 .git copy/objects/cc/112f124f8bdebf8a8a7c7250b0330fff62d7b0 delete mode 100644 .git copy/objects/ce/2001083c051b958aa1a4de277c82b99a2bb213 delete mode 100644 .git copy/objects/ce/970b6576fd51a7359677920572724257c824cf delete mode 100644 .git copy/objects/cf/511031370b8b3bbe30d905ab2a91a5786aef91 delete mode 100644 .git copy/objects/cf/b6e575e1796c7eec0bbc568b7df0c8e62099ef delete mode 100644 .git copy/objects/d1/fb0d886c44ce62fa169d1b2909a9398e84700f delete mode 100644 .git copy/objects/d2/95e68a369a0bb2330435f97f291c1916fea3a0 delete mode 100644 .git copy/objects/d3/348671444711685a386ee75ddaca129ced00be delete mode 100644 .git copy/objects/d4/eb948bb03f3f9805358f0724e239e9228a88b5 delete mode 100644 .git copy/objects/d6/d3548f52d68a6dc1ab4cd10980d8c42951623b delete mode 100644 .git copy/objects/d7/11a0f9bce94ce749752e2304134d097ad5ecb5 delete mode 100644 .git copy/objects/d7/44156af1b258be1ad507cc87238d9606581d8b delete mode 100644 .git copy/objects/d8/73b5dd24e00d3b400438e18907a1e8cc790062 delete mode 100644 .git copy/objects/d8/e5378836e129a697fbb44a1b6dbf06dee97aa3 delete mode 100644 .git copy/objects/d9/2889f28db14ae497f8983ff7f8bc31a089e96a delete mode 100644 .git copy/objects/d9/d206914e101f3a2a6ae209dfc40c800df899fb delete mode 100644 .git copy/objects/da/50f00ab691b4990d1e69895113255906630b6e delete mode 100644 .git copy/objects/db/f694527bc1d50a752f5c159e6dc0e9446b39c9 delete mode 100644 .git copy/objects/e0/3d43c3f8bfdf91a49a8dd67b7f5814965e5887 delete mode 100644 .git copy/objects/e1/6ed0c478ac036b584748731a0f19f0becaf70c delete mode 100644 .git copy/objects/e3/0297abdc52bf9965363634367d4cbb190db9d6 delete mode 100644 .git copy/objects/e3/1ed9a56ef8abc73f927b3933bb789d51040a01 delete mode 100644 .git copy/objects/e3/a73ec1f3c897a1bbbcaa8598665e0fc9822360 delete mode 100644 .git copy/objects/e4/f4865a18509b07eea278289a7f1b011ed9f7e5 delete mode 100644 .git copy/objects/e6/4d56dd5fcdef0a6c174aeaf033f6010b69ca40 delete mode 100644 .git copy/objects/e7/4de7e1ae1be7603b36fda1d3992d86353939e6 delete mode 100644 .git copy/objects/e7/d92d39e3447fd5a0b87edb8888f73ff0ea016d delete mode 100644 .git copy/objects/eb/29c00ec879b26784887a3edd2d13eb819932f3 delete mode 100644 .git copy/objects/eb/bbed024c1a46d09a7515bfaf1b078b76e839a7 delete mode 100644 .git copy/objects/ef/fac31e9124b8cb339ebb34a31bca4dad0447aa delete mode 100644 .git copy/objects/f2/f9341a809880c0f359fa213b78745612a6e71f delete mode 100644 .git copy/objects/f4/0b207dd11a858e8d009760a18d5ba4ee746198 delete mode 100644 .git copy/objects/f4/0f2eb3ca8fe00e004c6a3a1e4c4476797d7c3a delete mode 100644 .git copy/objects/f4/166f29c39c79d81798c36edd2a58faf51dbbdb delete mode 100644 .git copy/objects/f4/8866531835d4f4e21afb39f6e40cba802ef138 delete mode 100644 .git copy/objects/f4/dea3e1676b8ead2ad0bcd73fd8a33180b21f4f delete mode 100644 .git copy/objects/f7/370644ae6f54875205c8be52a8224d49b430e2 delete mode 100644 .git copy/objects/f7/5a0795b1ca5079ecb436a7009881c583fd72f9 delete mode 100644 .git copy/objects/f8/a93bab7b831f10e428f1d0274d818d40ac5d53 delete mode 100644 .git copy/objects/f9/525a325302fbe8a32b8faaf78422ba7ff803d1 delete mode 100644 .git copy/objects/fa/317df2da2b74054fdaeaf823da090711c684b8 delete mode 100644 .git copy/objects/fb/027c3f9100789b777599d55005c7126b3ae420 delete mode 100644 .git copy/objects/ff/bbc0c691aec659b68562bb1dabba30f958c3b4 delete mode 100644 .git copy/objects/pack/pack-0f4b78e20712d73ef317ef0f34b8fe4207f0b667.idx delete mode 100644 .git copy/objects/pack/pack-0f4b78e20712d73ef317ef0f34b8fe4207f0b667.pack delete mode 100644 .git copy/objects/pack/pack-0f4b78e20712d73ef317ef0f34b8fe4207f0b667.rev delete mode 100644 .git copy/packed-refs delete mode 100644 .git copy/refs/heads/main delete mode 100644 .git copy/refs/heads/revan-dev delete mode 100644 .git copy/refs/remotes/origin/HEAD delete mode 100644 .git copy/refs/remotes/origin/kenan-dev delete mode 100644 .git copy/refs/remotes/origin/main delete mode 100644 .git copy/refs/remotes/origin/revan-dev diff --git a/.git copy/COMMIT_EDITMSG b/.git copy/COMMIT_EDITMSG deleted file mode 100644 index d86bac9d..00000000 --- a/.git copy/COMMIT_EDITMSG +++ /dev/null @@ -1 +0,0 @@ -OK diff --git a/.git copy/FETCH_HEAD b/.git copy/FETCH_HEAD deleted file mode 100644 index 39e14558..00000000 --- a/.git copy/FETCH_HEAD +++ /dev/null @@ -1,3 +0,0 @@ -e74de7e1ae1be7603b36fda1d3992d86353939e6 branch 'main' of https://github.com/kenanqafarov/ironSchool -da50f00ab691b4990d1e69895113255906630b6e not-for-merge branch 'kenan-dev' of https://github.com/kenanqafarov/ironSchool -54250bf3556318005e3bff92769ba775cef3fad0 not-for-merge branch 'revan-dev' of https://github.com/kenanqafarov/ironSchool diff --git a/.git copy/HEAD b/.git copy/HEAD deleted file mode 100644 index b870d826..00000000 --- a/.git copy/HEAD +++ /dev/null @@ -1 +0,0 @@ -ref: refs/heads/main diff --git a/.git copy/ORIG_HEAD b/.git copy/ORIG_HEAD deleted file mode 100644 index f92bc4fa..00000000 --- a/.git copy/ORIG_HEAD +++ /dev/null @@ -1 +0,0 @@ -54250bf3556318005e3bff92769ba775cef3fad0 diff --git a/.git copy/config b/.git copy/config deleted file mode 100644 index 3b7086c5..00000000 --- a/.git copy/config +++ /dev/null @@ -1,16 +0,0 @@ -[core] - repositoryformatversion = 0 - filemode = false - bare = false - logallrefupdates = true - symlinks = false - ignorecase = true -[remote "origin"] - url = https://github.com/kenanqafarov/ironSchool.git - fetch = +refs/heads/*:refs/remotes/origin/* -[branch "main"] - remote = origin - merge = refs/heads/main -[branch "revan-dev"] - remote = origin - merge = refs/heads/revan-dev diff --git a/.git copy/description b/.git copy/description deleted file mode 100644 index 498b267a..00000000 --- a/.git copy/description +++ /dev/null @@ -1 +0,0 @@ -Unnamed repository; edit this file 'description' to name the repository. diff --git a/.git copy/hooks/applypatch-msg.sample b/.git copy/hooks/applypatch-msg.sample deleted file mode 100644 index a5d7b84a..00000000 --- a/.git copy/hooks/applypatch-msg.sample +++ /dev/null @@ -1,15 +0,0 @@ -#!/bin/sh -# -# An example hook script to check the commit log message taken by -# applypatch from an e-mail message. -# -# The hook should exit with non-zero status after issuing an -# appropriate message if it wants to stop the commit. The hook is -# allowed to edit the commit message file. -# -# To enable this hook, rename this file to "applypatch-msg". - -. git-sh-setup -commitmsg="$(git rev-parse --git-path hooks/commit-msg)" -test -x "$commitmsg" && exec "$commitmsg" ${1+"$@"} -: diff --git a/.git copy/hooks/commit-msg.sample b/.git copy/hooks/commit-msg.sample deleted file mode 100644 index b58d1184..00000000 --- a/.git copy/hooks/commit-msg.sample +++ /dev/null @@ -1,24 +0,0 @@ -#!/bin/sh -# -# An example hook script to check the commit log message. -# Called by "git commit" with one argument, the name of the file -# that has the commit message. The hook should exit with non-zero -# status after issuing an appropriate message if it wants to stop the -# commit. The hook is allowed to edit the commit message file. -# -# To enable this hook, rename this file to "commit-msg". - -# Uncomment the below to add a Signed-off-by line to the message. -# Doing this in a hook is a bad idea in general, but the prepare-commit-msg -# hook is more suited to it. -# -# SOB=$(git var GIT_AUTHOR_IDENT | sed -n 's/^\(.*>\).*$/Signed-off-by: \1/p') -# grep -qs "^$SOB" "$1" || echo "$SOB" >> "$1" - -# This example catches duplicate Signed-off-by lines. - -test "" = "$(grep '^Signed-off-by: ' "$1" | - sort | uniq -c | sed -e '/^[ ]*1[ ]/d')" || { - echo >&2 Duplicate Signed-off-by lines. - exit 1 -} diff --git a/.git copy/hooks/fsmonitor-watchman.sample b/.git copy/hooks/fsmonitor-watchman.sample deleted file mode 100644 index 23e856f5..00000000 --- a/.git copy/hooks/fsmonitor-watchman.sample +++ /dev/null @@ -1,174 +0,0 @@ -#!/usr/bin/perl - -use strict; -use warnings; -use IPC::Open2; - -# An example hook script to integrate Watchman -# (https://facebook.github.io/watchman/) with git to speed up detecting -# new and modified files. -# -# The hook is passed a version (currently 2) and last update token -# formatted as a string and outputs to stdout a new update token and -# all files that have been modified since the update token. Paths must -# be relative to the root of the working tree and separated by a single NUL. -# -# To enable this hook, rename this file to "query-watchman" and set -# 'git config core.fsmonitor .git/hooks/query-watchman' -# -my ($version, $last_update_token) = @ARGV; - -# Uncomment for debugging -# print STDERR "$0 $version $last_update_token\n"; - -# Check the hook interface version -if ($version ne 2) { - die "Unsupported query-fsmonitor hook version '$version'.\n" . - "Falling back to scanning...\n"; -} - -my $git_work_tree = get_working_dir(); - -my $retry = 1; - -my $json_pkg; -eval { - require JSON::XS; - $json_pkg = "JSON::XS"; - 1; -} or do { - require JSON::PP; - $json_pkg = "JSON::PP"; -}; - -launch_watchman(); - -sub launch_watchman { - my $o = watchman_query(); - if (is_work_tree_watched($o)) { - output_result($o->{clock}, @{$o->{files}}); - } -} - -sub output_result { - my ($clockid, @files) = @_; - - # Uncomment for debugging watchman output - # open (my $fh, ">", ".git/watchman-output.out"); - # binmode $fh, ":utf8"; - # print $fh "$clockid\n@files\n"; - # close $fh; - - binmode STDOUT, ":utf8"; - print $clockid; - print "\0"; - local $, = "\0"; - print @files; -} - -sub watchman_clock { - my $response = qx/watchman clock "$git_work_tree"/; - die "Failed to get clock id on '$git_work_tree'.\n" . - "Falling back to scanning...\n" if $? != 0; - - return $json_pkg->new->utf8->decode($response); -} - -sub watchman_query { - my $pid = open2(\*CHLD_OUT, \*CHLD_IN, 'watchman -j --no-pretty') - or die "open2() failed: $!\n" . - "Falling back to scanning...\n"; - - # In the query expression below we're asking for names of files that - # changed since $last_update_token but not from the .git folder. - # - # To accomplish this, we're using the "since" generator to use the - # recency index to select candidate nodes and "fields" to limit the - # output to file names only. Then we're using the "expression" term to - # further constrain the results. - my $last_update_line = ""; - if (substr($last_update_token, 0, 1) eq "c") { - $last_update_token = "\"$last_update_token\""; - $last_update_line = qq[\n"since": $last_update_token,]; - } - my $query = <<" END"; - ["query", "$git_work_tree", {$last_update_line - "fields": ["name"], - "expression": ["not", ["dirname", ".git"]] - }] - END - - # Uncomment for debugging the watchman query - # open (my $fh, ">", ".git/watchman-query.json"); - # print $fh $query; - # close $fh; - - print CHLD_IN $query; - close CHLD_IN; - my $response = do {local $/; }; - - # Uncomment for debugging the watch response - # open ($fh, ">", ".git/watchman-response.json"); - # print $fh $response; - # close $fh; - - die "Watchman: command returned no output.\n" . - "Falling back to scanning...\n" if $response eq ""; - die "Watchman: command returned invalid output: $response\n" . - "Falling back to scanning...\n" unless $response =~ /^\{/; - - return $json_pkg->new->utf8->decode($response); -} - -sub is_work_tree_watched { - my ($output) = @_; - my $error = $output->{error}; - if ($retry > 0 and $error and $error =~ m/unable to resolve root .* directory (.*) is not watched/) { - $retry--; - my $response = qx/watchman watch "$git_work_tree"/; - die "Failed to make watchman watch '$git_work_tree'.\n" . - "Falling back to scanning...\n" if $? != 0; - $output = $json_pkg->new->utf8->decode($response); - $error = $output->{error}; - die "Watchman: $error.\n" . - "Falling back to scanning...\n" if $error; - - # Uncomment for debugging watchman output - # open (my $fh, ">", ".git/watchman-output.out"); - # close $fh; - - # Watchman will always return all files on the first query so - # return the fast "everything is dirty" flag to git and do the - # Watchman query just to get it over with now so we won't pay - # the cost in git to look up each individual file. - my $o = watchman_clock(); - $error = $output->{error}; - - die "Watchman: $error.\n" . - "Falling back to scanning...\n" if $error; - - output_result($o->{clock}, ("/")); - $last_update_token = $o->{clock}; - - eval { launch_watchman() }; - return 0; - } - - die "Watchman: $error.\n" . - "Falling back to scanning...\n" if $error; - - return 1; -} - -sub get_working_dir { - my $working_dir; - if ($^O =~ 'msys' || $^O =~ 'cygwin') { - $working_dir = Win32::GetCwd(); - $working_dir =~ tr/\\/\//; - } else { - require Cwd; - $working_dir = Cwd::cwd(); - } - - return $working_dir; -} diff --git a/.git copy/hooks/post-update.sample b/.git copy/hooks/post-update.sample deleted file mode 100644 index ec17ec19..00000000 --- a/.git copy/hooks/post-update.sample +++ /dev/null @@ -1,8 +0,0 @@ -#!/bin/sh -# -# An example hook script to prepare a packed repository for use over -# dumb transports. -# -# To enable this hook, rename this file to "post-update". - -exec git update-server-info diff --git a/.git copy/hooks/pre-applypatch.sample b/.git copy/hooks/pre-applypatch.sample deleted file mode 100644 index 4142082b..00000000 --- a/.git copy/hooks/pre-applypatch.sample +++ /dev/null @@ -1,14 +0,0 @@ -#!/bin/sh -# -# An example hook script to verify what is about to be committed -# by applypatch from an e-mail message. -# -# The hook should exit with non-zero status after issuing an -# appropriate message if it wants to stop the commit. -# -# To enable this hook, rename this file to "pre-applypatch". - -. git-sh-setup -precommit="$(git rev-parse --git-path hooks/pre-commit)" -test -x "$precommit" && exec "$precommit" ${1+"$@"} -: diff --git a/.git copy/hooks/pre-commit.sample b/.git copy/hooks/pre-commit.sample deleted file mode 100644 index 29ed5ee4..00000000 --- a/.git copy/hooks/pre-commit.sample +++ /dev/null @@ -1,49 +0,0 @@ -#!/bin/sh -# -# An example hook script to verify what is about to be committed. -# Called by "git commit" with no arguments. The hook should -# exit with non-zero status after issuing an appropriate message if -# it wants to stop the commit. -# -# To enable this hook, rename this file to "pre-commit". - -if git rev-parse --verify HEAD >/dev/null 2>&1 -then - against=HEAD -else - # Initial commit: diff against an empty tree object - against=$(git hash-object -t tree /dev/null) -fi - -# If you want to allow non-ASCII filenames set this variable to true. -allownonascii=$(git config --type=bool hooks.allownonascii) - -# Redirect output to stderr. -exec 1>&2 - -# Cross platform projects tend to avoid non-ASCII filenames; prevent -# them from being added to the repository. We exploit the fact that the -# printable range starts at the space character and ends with tilde. -if [ "$allownonascii" != "true" ] && - # Note that the use of brackets around a tr range is ok here, (it's - # even required, for portability to Solaris 10's /usr/bin/tr), since - # the square bracket bytes happen to fall in the designated range. - test $(git diff-index --cached --name-only --diff-filter=A -z $against | - LC_ALL=C tr -d '[ -~]\0' | wc -c) != 0 -then - cat <<\EOF -Error: Attempt to add a non-ASCII file name. - -This can cause problems if you want to work with people on other platforms. - -To be portable it is advisable to rename the file. - -If you know what you are doing you can disable this check using: - - git config hooks.allownonascii true -EOF - exit 1 -fi - -# If there are whitespace errors, print the offending file names and fail. -exec git diff-index --check --cached $against -- diff --git a/.git copy/hooks/pre-merge-commit.sample b/.git copy/hooks/pre-merge-commit.sample deleted file mode 100644 index 399eab19..00000000 --- a/.git copy/hooks/pre-merge-commit.sample +++ /dev/null @@ -1,13 +0,0 @@ -#!/bin/sh -# -# An example hook script to verify what is about to be committed. -# Called by "git merge" with no arguments. The hook should -# exit with non-zero status after issuing an appropriate message to -# stderr if it wants to stop the merge commit. -# -# To enable this hook, rename this file to "pre-merge-commit". - -. git-sh-setup -test -x "$GIT_DIR/hooks/pre-commit" && - exec "$GIT_DIR/hooks/pre-commit" -: diff --git a/.git copy/hooks/pre-push.sample b/.git copy/hooks/pre-push.sample deleted file mode 100644 index 4ce688d3..00000000 --- a/.git copy/hooks/pre-push.sample +++ /dev/null @@ -1,53 +0,0 @@ -#!/bin/sh - -# An example hook script to verify what is about to be pushed. Called by "git -# push" after it has checked the remote status, but before anything has been -# pushed. If this script exits with a non-zero status nothing will be pushed. -# -# This hook is called with the following parameters: -# -# $1 -- Name of the remote to which the push is being done -# $2 -- URL to which the push is being done -# -# If pushing without using a named remote those arguments will be equal. -# -# Information about the commits which are being pushed is supplied as lines to -# the standard input in the form: -# -# -# -# This sample shows how to prevent push of commits where the log message starts -# with "WIP" (work in progress). - -remote="$1" -url="$2" - -zero=$(git hash-object --stdin &2 "Found WIP commit in $local_ref, not pushing" - exit 1 - fi - fi -done - -exit 0 diff --git a/.git copy/hooks/pre-rebase.sample b/.git copy/hooks/pre-rebase.sample deleted file mode 100644 index 6cbef5c3..00000000 --- a/.git copy/hooks/pre-rebase.sample +++ /dev/null @@ -1,169 +0,0 @@ -#!/bin/sh -# -# Copyright (c) 2006, 2008 Junio C Hamano -# -# The "pre-rebase" hook is run just before "git rebase" starts doing -# its job, and can prevent the command from running by exiting with -# non-zero status. -# -# The hook is called with the following parameters: -# -# $1 -- the upstream the series was forked from. -# $2 -- the branch being rebased (or empty when rebasing the current branch). -# -# This sample shows how to prevent topic branches that are already -# merged to 'next' branch from getting rebased, because allowing it -# would result in rebasing already published history. - -publish=next -basebranch="$1" -if test "$#" = 2 -then - topic="refs/heads/$2" -else - topic=`git symbolic-ref HEAD` || - exit 0 ;# we do not interrupt rebasing detached HEAD -fi - -case "$topic" in -refs/heads/??/*) - ;; -*) - exit 0 ;# we do not interrupt others. - ;; -esac - -# Now we are dealing with a topic branch being rebased -# on top of master. Is it OK to rebase it? - -# Does the topic really exist? -git show-ref -q "$topic" || { - echo >&2 "No such branch $topic" - exit 1 -} - -# Is topic fully merged to master? -not_in_master=`git rev-list --pretty=oneline ^master "$topic"` -if test -z "$not_in_master" -then - echo >&2 "$topic is fully merged to master; better remove it." - exit 1 ;# we could allow it, but there is no point. -fi - -# Is topic ever merged to next? If so you should not be rebasing it. -only_next_1=`git rev-list ^master "^$topic" ${publish} | sort` -only_next_2=`git rev-list ^master ${publish} | sort` -if test "$only_next_1" = "$only_next_2" -then - not_in_topic=`git rev-list "^$topic" master` - if test -z "$not_in_topic" - then - echo >&2 "$topic is already up to date with master" - exit 1 ;# we could allow it, but there is no point. - else - exit 0 - fi -else - not_in_next=`git rev-list --pretty=oneline ^${publish} "$topic"` - /usr/bin/perl -e ' - my $topic = $ARGV[0]; - my $msg = "* $topic has commits already merged to public branch:\n"; - my (%not_in_next) = map { - /^([0-9a-f]+) /; - ($1 => 1); - } split(/\n/, $ARGV[1]); - for my $elem (map { - /^([0-9a-f]+) (.*)$/; - [$1 => $2]; - } split(/\n/, $ARGV[2])) { - if (!exists $not_in_next{$elem->[0]}) { - if ($msg) { - print STDERR $msg; - undef $msg; - } - print STDERR " $elem->[1]\n"; - } - } - ' "$topic" "$not_in_next" "$not_in_master" - exit 1 -fi - -<<\DOC_END - -This sample hook safeguards topic branches that have been -published from being rewound. - -The workflow assumed here is: - - * Once a topic branch forks from "master", "master" is never - merged into it again (either directly or indirectly). - - * Once a topic branch is fully cooked and merged into "master", - it is deleted. If you need to build on top of it to correct - earlier mistakes, a new topic branch is created by forking at - the tip of the "master". This is not strictly necessary, but - it makes it easier to keep your history simple. - - * Whenever you need to test or publish your changes to topic - branches, merge them into "next" branch. - -The script, being an example, hardcodes the publish branch name -to be "next", but it is trivial to make it configurable via -$GIT_DIR/config mechanism. - -With this workflow, you would want to know: - -(1) ... if a topic branch has ever been merged to "next". Young - topic branches can have stupid mistakes you would rather - clean up before publishing, and things that have not been - merged into other branches can be easily rebased without - affecting other people. But once it is published, you would - not want to rewind it. - -(2) ... if a topic branch has been fully merged to "master". - Then you can delete it. More importantly, you should not - build on top of it -- other people may already want to - change things related to the topic as patches against your - "master", so if you need further changes, it is better to - fork the topic (perhaps with the same name) afresh from the - tip of "master". - -Let's look at this example: - - o---o---o---o---o---o---o---o---o---o "next" - / / / / - / a---a---b A / / - / / / / - / / c---c---c---c B / - / / / \ / - / / / b---b C \ / - / / / / \ / - ---o---o---o---o---o---o---o---o---o---o---o "master" - - -A, B and C are topic branches. - - * A has one fix since it was merged up to "next". - - * B has finished. It has been fully merged up to "master" and "next", - and is ready to be deleted. - - * C has not merged to "next" at all. - -We would want to allow C to be rebased, refuse A, and encourage -B to be deleted. - -To compute (1): - - git rev-list ^master ^topic next - git rev-list ^master next - - if these match, topic has not merged in next at all. - -To compute (2): - - git rev-list master..topic - - if this is empty, it is fully merged to "master". - -DOC_END diff --git a/.git copy/hooks/pre-receive.sample b/.git copy/hooks/pre-receive.sample deleted file mode 100644 index a1fd29ec..00000000 --- a/.git copy/hooks/pre-receive.sample +++ /dev/null @@ -1,24 +0,0 @@ -#!/bin/sh -# -# An example hook script to make use of push options. -# The example simply echoes all push options that start with 'echoback=' -# and rejects all pushes when the "reject" push option is used. -# -# To enable this hook, rename this file to "pre-receive". - -if test -n "$GIT_PUSH_OPTION_COUNT" -then - i=0 - while test "$i" -lt "$GIT_PUSH_OPTION_COUNT" - do - eval "value=\$GIT_PUSH_OPTION_$i" - case "$value" in - echoback=*) - echo "echo from the pre-receive-hook: ${value#*=}" >&2 - ;; - reject) - exit 1 - esac - i=$((i + 1)) - done -fi diff --git a/.git copy/hooks/prepare-commit-msg.sample b/.git copy/hooks/prepare-commit-msg.sample deleted file mode 100644 index 10fa14c5..00000000 --- a/.git copy/hooks/prepare-commit-msg.sample +++ /dev/null @@ -1,42 +0,0 @@ -#!/bin/sh -# -# An example hook script to prepare the commit log message. -# Called by "git commit" with the name of the file that has the -# commit message, followed by the description of the commit -# message's source. The hook's purpose is to edit the commit -# message file. If the hook fails with a non-zero status, -# the commit is aborted. -# -# To enable this hook, rename this file to "prepare-commit-msg". - -# This hook includes three examples. The first one removes the -# "# Please enter the commit message..." help message. -# -# The second includes the output of "git diff --name-status -r" -# into the message, just before the "git status" output. It is -# commented because it doesn't cope with --amend or with squashed -# commits. -# -# The third example adds a Signed-off-by line to the message, that can -# still be edited. This is rarely a good idea. - -COMMIT_MSG_FILE=$1 -COMMIT_SOURCE=$2 -SHA1=$3 - -/usr/bin/perl -i.bak -ne 'print unless(m/^. Please enter the commit message/..m/^#$/)' "$COMMIT_MSG_FILE" - -# case "$COMMIT_SOURCE,$SHA1" in -# ,|template,) -# /usr/bin/perl -i.bak -pe ' -# print "\n" . `git diff --cached --name-status -r` -# if /^#/ && $first++ == 0' "$COMMIT_MSG_FILE" ;; -# *) ;; -# esac - -# SOB=$(git var GIT_COMMITTER_IDENT | sed -n 's/^\(.*>\).*$/Signed-off-by: \1/p') -# git interpret-trailers --in-place --trailer "$SOB" "$COMMIT_MSG_FILE" -# if test -z "$COMMIT_SOURCE" -# then -# /usr/bin/perl -i.bak -pe 'print "\n" if !$first_line++' "$COMMIT_MSG_FILE" -# fi diff --git a/.git copy/hooks/push-to-checkout.sample b/.git copy/hooks/push-to-checkout.sample deleted file mode 100644 index af5a0c00..00000000 --- a/.git copy/hooks/push-to-checkout.sample +++ /dev/null @@ -1,78 +0,0 @@ -#!/bin/sh - -# An example hook script to update a checked-out tree on a git push. -# -# This hook is invoked by git-receive-pack(1) when it reacts to git -# push and updates reference(s) in its repository, and when the push -# tries to update the branch that is currently checked out and the -# receive.denyCurrentBranch configuration variable is set to -# updateInstead. -# -# By default, such a push is refused if the working tree and the index -# of the remote repository has any difference from the currently -# checked out commit; when both the working tree and the index match -# the current commit, they are updated to match the newly pushed tip -# of the branch. This hook is to be used to override the default -# behaviour; however the code below reimplements the default behaviour -# as a starting point for convenient modification. -# -# The hook receives the commit with which the tip of the current -# branch is going to be updated: -commit=$1 - -# It can exit with a non-zero status to refuse the push (when it does -# so, it must not modify the index or the working tree). -die () { - echo >&2 "$*" - exit 1 -} - -# Or it can make any necessary changes to the working tree and to the -# index to bring them to the desired state when the tip of the current -# branch is updated to the new commit, and exit with a zero status. -# -# For example, the hook can simply run git read-tree -u -m HEAD "$1" -# in order to emulate git fetch that is run in the reverse direction -# with git push, as the two-tree form of git read-tree -u -m is -# essentially the same as git switch or git checkout that switches -# branches while keeping the local changes in the working tree that do -# not interfere with the difference between the branches. - -# The below is a more-or-less exact translation to shell of the C code -# for the default behaviour for git's push-to-checkout hook defined in -# the push_to_deploy() function in builtin/receive-pack.c. -# -# Note that the hook will be executed from the repository directory, -# not from the working tree, so if you want to perform operations on -# the working tree, you will have to adapt your code accordingly, e.g. -# by adding "cd .." or using relative paths. - -if ! git update-index -q --ignore-submodules --refresh -then - die "Up-to-date check failed" -fi - -if ! git diff-files --quiet --ignore-submodules -- -then - die "Working directory has unstaged changes" -fi - -# This is a rough translation of: -# -# head_has_history() ? "HEAD" : EMPTY_TREE_SHA1_HEX -if git cat-file -e HEAD 2>/dev/null -then - head=HEAD -else - head=$(git hash-object -t tree --stdin &2 - exit 1 -} - -unset GIT_DIR GIT_WORK_TREE -cd "$worktree" && - -if grep -q "^diff --git " "$1" -then - validate_patch "$1" -else - validate_cover_letter "$1" -fi && - -if test "$GIT_SENDEMAIL_FILE_COUNTER" = "$GIT_SENDEMAIL_FILE_TOTAL" -then - git config --unset-all sendemail.validateWorktree && - trap 'git worktree remove -ff "$worktree"' EXIT && - validate_series -fi diff --git a/.git copy/hooks/update.sample b/.git copy/hooks/update.sample deleted file mode 100644 index c4d426bc..00000000 --- a/.git copy/hooks/update.sample +++ /dev/null @@ -1,128 +0,0 @@ -#!/bin/sh -# -# An example hook script to block unannotated tags from entering. -# Called by "git receive-pack" with arguments: refname sha1-old sha1-new -# -# To enable this hook, rename this file to "update". -# -# Config -# ------ -# hooks.allowunannotated -# This boolean sets whether unannotated tags will be allowed into the -# repository. By default they won't be. -# hooks.allowdeletetag -# This boolean sets whether deleting tags will be allowed in the -# repository. By default they won't be. -# hooks.allowmodifytag -# This boolean sets whether a tag may be modified after creation. By default -# it won't be. -# hooks.allowdeletebranch -# This boolean sets whether deleting branches will be allowed in the -# repository. By default they won't be. -# hooks.denycreatebranch -# This boolean sets whether remotely creating branches will be denied -# in the repository. By default this is allowed. -# - -# --- Command line -refname="$1" -oldrev="$2" -newrev="$3" - -# --- Safety check -if [ -z "$GIT_DIR" ]; then - echo "Don't run this script from the command line." >&2 - echo " (if you want, you could supply GIT_DIR then run" >&2 - echo " $0 )" >&2 - exit 1 -fi - -if [ -z "$refname" -o -z "$oldrev" -o -z "$newrev" ]; then - echo "usage: $0 " >&2 - exit 1 -fi - -# --- Config -allowunannotated=$(git config --type=bool hooks.allowunannotated) -allowdeletebranch=$(git config --type=bool hooks.allowdeletebranch) -denycreatebranch=$(git config --type=bool hooks.denycreatebranch) -allowdeletetag=$(git config --type=bool hooks.allowdeletetag) -allowmodifytag=$(git config --type=bool hooks.allowmodifytag) - -# check for no description -projectdesc=$(sed -e '1q' "$GIT_DIR/description") -case "$projectdesc" in -"Unnamed repository"* | "") - echo "*** Project description file hasn't been set" >&2 - exit 1 - ;; -esac - -# --- Check types -# if $newrev is 0000...0000, it's a commit to delete a ref. -zero=$(git hash-object --stdin &2 - echo "*** Use 'git tag [ -a | -s ]' for tags you want to propagate." >&2 - exit 1 - fi - ;; - refs/tags/*,delete) - # delete tag - if [ "$allowdeletetag" != "true" ]; then - echo "*** Deleting a tag is not allowed in this repository" >&2 - exit 1 - fi - ;; - refs/tags/*,tag) - # annotated tag - if [ "$allowmodifytag" != "true" ] && git rev-parse $refname > /dev/null 2>&1 - then - echo "*** Tag '$refname' already exists." >&2 - echo "*** Modifying a tag is not allowed in this repository." >&2 - exit 1 - fi - ;; - refs/heads/*,commit) - # branch - if [ "$oldrev" = "$zero" -a "$denycreatebranch" = "true" ]; then - echo "*** Creating a branch is not allowed in this repository" >&2 - exit 1 - fi - ;; - refs/heads/*,delete) - # delete branch - if [ "$allowdeletebranch" != "true" ]; then - echo "*** Deleting a branch is not allowed in this repository" >&2 - exit 1 - fi - ;; - refs/remotes/*,commit) - # tracking branch - ;; - refs/remotes/*,delete) - # delete tracking branch - if [ "$allowdeletebranch" != "true" ]; then - echo "*** Deleting a tracking branch is not allowed in this repository" >&2 - exit 1 - fi - ;; - *) - # Anything else (is there anything else?) - echo "*** Update hook: unknown type of update to ref $refname of type $newrev_type" >&2 - exit 1 - ;; -esac - -# --- Finished -exit 0 diff --git a/.git copy/index b/.git copy/index deleted file mode 100644 index d62672489b2b45b9a662224da32115a0cee07eda..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3256 zcmb7G2~ZPf6#mh0G@y6{MYIN_h)78c1Q1XpawsTBLqPD3$qKAKOUzsuYs^1VtgFWsCeC`l2;9R`8nK;r3WHd**yp2E2)5t#S_GeVJSr1 zN5sMH10x}^4#3CpKymI9;j|PpFzOp{Yx~TGZ6@=ksXTxKO_V66Zz)sup|gzWrDLuRe4;cZ+Ldv`h}hH-C)76`4}t^fsfmJHw^SS zs3+yU+V;{$SjAdKoobq9PQR;mI5Hd_9Ei({gQSLe5YGu#rx#X;em%_i`v#_~k_Tm% zPOVp7NxW{t>ZR6Df!`PO;K5=9FNBn6SbyD$wo~!v)3GQC*Wvxr3jO$G7w4G?f|8gB zQE!`je8B4YcE=8#%mS=o;A-=Z4_y+o)R9Q2jfBA)}OH@nuXSY90SyZ(6d;$fy4h>H$weDSn<@5o! zlfzI0mHs?O+C9GG;`JaPt?9_Q)Ha2pciyWfMxvqOY9%&+i{`uf(H#A_<}D>1eVg|e zK+`kg_xq2IZHwBL?dJ--zmTsCk|qjx5TS5{=JHeg9JxAsbSRP` zC&|OM4jo^sydivPK0X&2qgFpYm}>V`pBT9P7UDUXCB?f+s>T5)UH(!?h8}pB z)aXp3J9j^tW$-)|uQ-G?fYaufRCM%7P+(JqO(> z(^i?o4h%#`%7wty&DND1K3Po(8K2QJBQc`;amUNGgZ6vYps@kN6LpT6v~uhp_G|^k z$?E=5bJ3!Wzn2+^n`t5v@kf?D*kE!@v!Em=_kSFs-gj=~L zC$5M(TuREH#4>qjJQp2H0Pd`vRUyC8)a>Q9rO|ZrPjhp+gz;yz^NMCe0lTKzi8Ww+ zw#$(dscH!Q{bd-04KkRQNiOSu$Wi|7>%tu6v97V+nSUgc)TeoK05{uNkjf>OevmzzNZfk%^^`w_?QThb$yQSl>t8y1YCJ!{Om+M%e-E1$UQKNHwm A;s5{u diff --git a/.git copy/info/exclude b/.git copy/info/exclude deleted file mode 100644 index a5196d1b..00000000 --- a/.git copy/info/exclude +++ /dev/null @@ -1,6 +0,0 @@ -# git ls-files --others --exclude-from=.git/info/exclude -# Lines that start with '#' are comments. -# For a project mostly in C, the following would be a good set of -# exclude patterns (uncomment them if you want to use them): -# *.[oa] -# *~ diff --git a/.git copy/logs/HEAD b/.git copy/logs/HEAD deleted file mode 100644 index a36915b3..00000000 --- a/.git copy/logs/HEAD +++ /dev/null @@ -1,17 +0,0 @@ -0000000000000000000000000000000000000000 6384bc9d68a379065625d0abf32a1435babc8b82 Revan 1772792863 +0400 clone: from https://github.com/kenanqafarov/ironSchool.git -6384bc9d68a379065625d0abf32a1435babc8b82 6384bc9d68a379065625d0abf32a1435babc8b82 Revan 1772792976 +0400 checkout: moving from main to revan-dev -6384bc9d68a379065625d0abf32a1435babc8b82 2ed2a724b6b8193fa011365afd3be19046c235a5 Revan 1772794104 +0400 commit: student and course was handled -2ed2a724b6b8193fa011365afd3be19046c235a5 6384bc9d68a379065625d0abf32a1435babc8b82 Revan 1772794141 +0400 checkout: moving from revan-dev to main -6384bc9d68a379065625d0abf32a1435babc8b82 2ed2a724b6b8193fa011365afd3be19046c235a5 Revan 1772794157 +0400 merge revan-dev: Fast-forward -2ed2a724b6b8193fa011365afd3be19046c235a5 a8d7d32b92d7f1bf0f5a10d75c4abdaacc45e1ba Revan 1772794397 +0400 commit: Testing -a8d7d32b92d7f1bf0f5a10d75c4abdaacc45e1ba a8d7d32b92d7f1bf0f5a10d75c4abdaacc45e1ba Revan 1772794435 +0400 reset: moving to HEAD -a8d7d32b92d7f1bf0f5a10d75c4abdaacc45e1ba b697d3465890103d15eeefaedb2024a9df576de2 Revan 1772794493 +0400 commit (merge): kenanrevan -b697d3465890103d15eeefaedb2024a9df576de2 2ed2a724b6b8193fa011365afd3be19046c235a5 Revan 1772797894 +0400 checkout: moving from main to revan-dev -2ed2a724b6b8193fa011365afd3be19046c235a5 7d80be016f67d7ef11b6a04d568b38e4001b0958 Revan 1772797955 +0400 commit: prepull -7d80be016f67d7ef11b6a04d568b38e4001b0958 b697d3465890103d15eeefaedb2024a9df576de2 Revan 1772797978 +0400 checkout: moving from revan-dev to main -b697d3465890103d15eeefaedb2024a9df576de2 e74de7e1ae1be7603b36fda1d3992d86353939e6 Revan 1772797983 +0400 pull: Fast-forward -e74de7e1ae1be7603b36fda1d3992d86353939e6 7d80be016f67d7ef11b6a04d568b38e4001b0958 Revan 1772798009 +0400 checkout: moving from main to revan-dev -7d80be016f67d7ef11b6a04d568b38e4001b0958 9b1fc70ab3fdf983c52a2c3dd7ce352d70108c44 Revan 1772798061 +0400 commit (merge): prepull -9b1fc70ab3fdf983c52a2c3dd7ce352d70108c44 54250bf3556318005e3bff92769ba775cef3fad0 Revan 1772885987 +0400 commit: my work is done -54250bf3556318005e3bff92769ba775cef3fad0 e74de7e1ae1be7603b36fda1d3992d86353939e6 Revan 1772903337 +0400 checkout: moving from revan-dev to main -e74de7e1ae1be7603b36fda1d3992d86353939e6 54250bf3556318005e3bff92769ba775cef3fad0 Revan 1772903353 +0400 merge revan-dev: Fast-forward diff --git a/.git copy/logs/refs/heads/main b/.git copy/logs/refs/heads/main deleted file mode 100644 index 7ab3cbda..00000000 --- a/.git copy/logs/refs/heads/main +++ /dev/null @@ -1,6 +0,0 @@ -0000000000000000000000000000000000000000 6384bc9d68a379065625d0abf32a1435babc8b82 Revan 1772792863 +0400 clone: from https://github.com/kenanqafarov/ironSchool.git -6384bc9d68a379065625d0abf32a1435babc8b82 2ed2a724b6b8193fa011365afd3be19046c235a5 Revan 1772794157 +0400 merge revan-dev: Fast-forward -2ed2a724b6b8193fa011365afd3be19046c235a5 a8d7d32b92d7f1bf0f5a10d75c4abdaacc45e1ba Revan 1772794397 +0400 commit: Testing -a8d7d32b92d7f1bf0f5a10d75c4abdaacc45e1ba b697d3465890103d15eeefaedb2024a9df576de2 Revan 1772794493 +0400 commit (merge): kenanrevan -b697d3465890103d15eeefaedb2024a9df576de2 e74de7e1ae1be7603b36fda1d3992d86353939e6 Revan 1772797983 +0400 pull: Fast-forward -e74de7e1ae1be7603b36fda1d3992d86353939e6 54250bf3556318005e3bff92769ba775cef3fad0 Revan 1772903353 +0400 merge revan-dev: Fast-forward diff --git a/.git copy/logs/refs/heads/revan-dev b/.git copy/logs/refs/heads/revan-dev deleted file mode 100644 index 4a198715..00000000 --- a/.git copy/logs/refs/heads/revan-dev +++ /dev/null @@ -1,5 +0,0 @@ -0000000000000000000000000000000000000000 6384bc9d68a379065625d0abf32a1435babc8b82 Revan 1772792976 +0400 branch: Created from HEAD -6384bc9d68a379065625d0abf32a1435babc8b82 2ed2a724b6b8193fa011365afd3be19046c235a5 Revan 1772794104 +0400 commit: student and course was handled -2ed2a724b6b8193fa011365afd3be19046c235a5 7d80be016f67d7ef11b6a04d568b38e4001b0958 Revan 1772797955 +0400 commit: prepull -7d80be016f67d7ef11b6a04d568b38e4001b0958 9b1fc70ab3fdf983c52a2c3dd7ce352d70108c44 Revan 1772798061 +0400 commit (merge): prepull -9b1fc70ab3fdf983c52a2c3dd7ce352d70108c44 54250bf3556318005e3bff92769ba775cef3fad0 Revan 1772885987 +0400 commit: my work is done diff --git a/.git copy/logs/refs/remotes/origin/HEAD b/.git copy/logs/refs/remotes/origin/HEAD deleted file mode 100644 index 1e646123..00000000 --- a/.git copy/logs/refs/remotes/origin/HEAD +++ /dev/null @@ -1 +0,0 @@ -0000000000000000000000000000000000000000 6384bc9d68a379065625d0abf32a1435babc8b82 Revan 1772792863 +0400 clone: from https://github.com/kenanqafarov/ironSchool.git diff --git a/.git copy/logs/refs/remotes/origin/kenan-dev b/.git copy/logs/refs/remotes/origin/kenan-dev deleted file mode 100644 index 469ed6ba..00000000 --- a/.git copy/logs/refs/remotes/origin/kenan-dev +++ /dev/null @@ -1,2 +0,0 @@ -0000000000000000000000000000000000000000 a9cac2e46b68ca0af6218a87e8f4cbf0970701a4 Revan 1772794221 +0400 pull: storing head -a9cac2e46b68ca0af6218a87e8f4cbf0970701a4 da50f00ab691b4990d1e69895113255906630b6e Revan 1772797918 +0400 pull: fast-forward diff --git a/.git copy/logs/refs/remotes/origin/main b/.git copy/logs/refs/remotes/origin/main deleted file mode 100644 index dc623029..00000000 --- a/.git copy/logs/refs/remotes/origin/main +++ /dev/null @@ -1,4 +0,0 @@ -6384bc9d68a379065625d0abf32a1435babc8b82 02afc96de49e4fec2e069b859ac162efbed90bbf Revan 1772794367 +0400 pull: fast-forward -02afc96de49e4fec2e069b859ac162efbed90bbf b697d3465890103d15eeefaedb2024a9df576de2 Revan 1772794505 +0400 update by push -b697d3465890103d15eeefaedb2024a9df576de2 e74de7e1ae1be7603b36fda1d3992d86353939e6 Revan 1772797918 +0400 pull: fast-forward -e74de7e1ae1be7603b36fda1d3992d86353939e6 54250bf3556318005e3bff92769ba775cef3fad0 Revan 1772903445 +0400 update by push diff --git a/.git copy/logs/refs/remotes/origin/revan-dev b/.git copy/logs/refs/remotes/origin/revan-dev deleted file mode 100644 index 2cdde4e1..00000000 --- a/.git copy/logs/refs/remotes/origin/revan-dev +++ /dev/null @@ -1,2 +0,0 @@ -0000000000000000000000000000000000000000 2ed2a724b6b8193fa011365afd3be19046c235a5 Revan 1772794122 +0400 update by push -2ed2a724b6b8193fa011365afd3be19046c235a5 54250bf3556318005e3bff92769ba775cef3fad0 Revan 1772903322 +0400 update by push diff --git a/.git copy/objects/02/67b93cefd2f812ae77f40cec511fd5d6b2d780 b/.git copy/objects/02/67b93cefd2f812ae77f40cec511fd5d6b2d780 deleted file mode 100644 index af9c2d333965bd7c748cf7b5d3bca059963dce92..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 234 zcmV5F<~$?FfcPQQP4}zEJ-XWDauSLElDkAuy)MQI$HVbcUshL z-#@pOty)#6*n*@oGd(ZAD3u|tYTbtu6BqU*mT#CH?AZNvPS#F&69XVn(912$V`$sx zv@h4sYj?-O?IsPeUfzzqFTX$y0ZNxM?CqGgUrBsR{wk)45pj%bq)Z%FMj*-SCFiCv zOmgL)tZq`U-s#;tPl=NCo0w-8a6#1+gf0V^p=O;s>6XD~4U0)?!^vP1^;uU-iU9_<$08Mv=TBI%Gwcgt}Zh;&hE laeir0a%wSygOstv^5YLREw^p>ocO@`{~_hYq5%719dO-vBi;Z2 diff --git a/.git copy/objects/02/afc96de49e4fec2e069b859ac162efbed90bbf b/.git copy/objects/02/afc96de49e4fec2e069b859ac162efbed90bbf deleted file mode 100644 index d45241e4e99bf00275d47ba594805d8583ba228e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 157 zcmV;O0Al}m0i}*X4#FT106p^x?j~jn+XWJ1^eGE0+E|J<==*JqKkzo0!(>vcb?VyK zao1N7ZDm9Rgt3r~1QAmX*`v3>4vZ~?6ms%WJ$RL+YYvH%5u`{yF>oO>c=k?w!4wMw z2Mz{C#jk#AtG>&^%aaSQ?X8bL_)4JjwemC{QmZFDIA>fyYf1079Z;LyM!WoxP?veu Lxh9WH2!R0)>>++MxB@*hJVJq#{i9VK6ZO0)^Cy#N2|MR0c0EX68ECu-dm`%Fe3NulJ>g)Eol< H0^<#j;NumU diff --git a/.git copy/objects/0e/f93a0ec2e724495981f1952185da98f724b3cf b/.git copy/objects/0e/f93a0ec2e724495981f1952185da98f724b3cf deleted file mode 100644 index 06bd7eb3da533467ed644aa13f73c27abf9a5088..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 74 zcmV-Q0JZ;k0V^p=O;s>6VlXiP0)^bf%sd9~4q>*%r)@W%Z(icDJZl|eUG0>1h;&J6 gaS6l!x5>VhXMSk*D{e~vSzD`LDbk+>0CMRYmv(g_00000 diff --git a/.git copy/objects/10/195d11ca235288142915e2a70b6d4b77adb861 b/.git copy/objects/10/195d11ca235288142915e2a70b6d4b77adb861 deleted file mode 100644 index da04728bb551a8f506a161713d9cf36c0d0a530e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 74 zcmV-Q0JZ;k0V^p=O;s>6VlXiP0)^bf%shrqKTV_>W;7i59QjMpx}qdZXxVdlh;&J6 gaS6l!x5>VhXMSk*D{e~vSzD`LDbk+>0HY=xY*3FMmjD0& diff --git a/.git copy/objects/10/4317dc26118e5bfb62845e713637292bf33736 b/.git copy/objects/10/4317dc26118e5bfb62845e713637292bf33736 deleted file mode 100644 index d797bd5e5a9a97be59387768c0625f56983e6e62..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 165 zcmV;W09yZe0V^p=O;s>7HDNF`FfcPQQE*Ak&37y)$jMAjEXmBz)5}UMOJqpdYO%1U z^&RG3Tcz=KBL(vxrmf4D1 z5+SN`^HWlDiW&O!XBb_`2tA5F<~$?FfcPQQP4}zEJ-XWDauSLElDkAuy)MQI$HVbcUshL z-#@pOty)#6*n*@oGd(ZAD3u|tYTbtu6BqU*mT#CH?AZNvPS#F&69XVn(912$V`$sx zv@h4sYj?-O?IsPeUfzzqFTX$y0ZNxM?CqGgUrBsR{wk)45pj%bq)Z%FMj*-SCFiCv zOmgL)tZq`U-s#;tPl=NCo0w-8a6#1+6VlXiP0)^bf%shtcf(w4`dFk`qvs6!+Mc9|K>gt=V5b2WC g;u41cZ0V^p=O;s>9U@$QN0)^!KT!u?ipLLnd;@)J;V*0aQQ$|wk-{J)T?9&Z| DnK2ZM diff --git a/.git copy/objects/1a/391d331f0dff9fa72bd7ba73d0eb8c0f3ace44 b/.git copy/objects/1a/391d331f0dff9fa72bd7ba73d0eb8c0f3ace44 deleted file mode 100644 index ecc798f759e575e6dc2092e3371452b06524f020..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 46 zcmV+}0MY+=0V^p=O;s>9WH2!R0)>>++m` B6KMbd diff --git a/.git copy/objects/1b/9477616dfa5c6b8f43e05f3eb711d187ab9a96 b/.git copy/objects/1b/9477616dfa5c6b8f43e05f3eb711d187ab9a96 deleted file mode 100644 index af18c0f5f4a30eea20daa85b2bd512e51adeef2c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 138 zcmV;50CoR(0d}IvLTy5;JA191b-^qZ{{1u z2DUIB#$7h}Ff##i)YMJPfwZH@`q+_j^_*l5aB diff --git a/.git copy/objects/1f/652969d7369b984ef912b2676faffebf6b5c0b b/.git copy/objects/1f/652969d7369b984ef912b2676faffebf6b5c0b deleted file mode 100644 index cfc21a577ec3b8d62544af524c9c88fe19ecc07b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 165 zcmV;W09yZe0V^p=O;s>7HDNF`FfcPQQE*Ak&37y)$jMAjEXmBz)5}UMOJqpdYO%1U z^&RG3Tcz=KBL(vxrmf4D1 z5+SN`^HWlDiW!Ww_BUvoe7;wBO(M`gpu=^8j^S5`g5uPovdrYvVg^2~FI!*F2-ZC% Tb!L61_58Q8@j==EOA$di^j}a( diff --git a/.git copy/objects/26/bdf9cc34037fd0d1f3d54ea4131680f023c129 b/.git copy/objects/26/bdf9cc34037fd0d1f3d54ea4131680f023c129 deleted file mode 100644 index 4f7a6f31c6dc545740c7b83d7ccd7d343a0b4fdf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 234 zcmV5F<~$?FfcPQQP4}zEJ-XWDauSLElDkAuy)MQI$HVbcUshL z-#@pOty)#6*n*@oGd(ZAD3u|tYTbtu6BqU*mT#CH?AZNvPS#F&69XVn(912$V`$sx zv@h4sYj?-O?IsPeUfzzqFTX$y0ZNxM?CqGgUrBsR{wk)45pj%bq)Z%FMj*-SCFiCv zOmgL)tZq`U-s#;tPl=NCo0w-8a6#1+H|7v}7|C*KqST9T&A!cV{i+{oS#E@?3rS5(&PXkSsCyhA a=%!~a6KioJ$g%pm09$Vm(-HuzATL5aMl~b= diff --git a/.git copy/objects/2a/833a13ee965d91d6d62dcf66824e1f97af95af b/.git copy/objects/2a/833a13ee965d91d6d62dcf66824e1f97af95af deleted file mode 100644 index 808ecbdc0d67558b3ec0506a66dc944bd1e4d46a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 366 zcmV-!0g?WA0hN<@Y8|cRDESSEKiw(%> zoS@TcJ*b^7ok$iCRrF-r%wdg9Tjo0F|7r9DEQ=9YUY^mIVI$d&44$Lnp3gZo0EXtX8w1!s7cI;k>i<-{T$BaZ?Q~up_Al!?!+k`B**wR M_wH2u0@7z%1VO91#sB~S diff --git a/.git copy/objects/2b/2a7569ae59536df7db356a445f4221a89daf89 b/.git copy/objects/2b/2a7569ae59536df7db356a445f4221a89daf89 deleted file mode 100644 index 7e92ab07e791a99eddd62811dbb4eb95319329aa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 717 zcmV;;0y6!00hLzUYTPgo?X$l^A?L0sENbBC|Fh2L z{@E88kDz;$19&E|hG^RnS>81%(V`pVDW3O&(Tk?06ZMYC#UdM}f2B=e&R<7;U|wB! ztVRZS zM_h+6k*iPCrgmAg?orM5 zkV3nHTF&n2Mo6Dr;2iM+X{)0%HXl&-Ln-=fVZ4Fb!%a{gVMofD{k7SDtPXv$oU3a^ diff --git a/.git copy/objects/2b/ffb79f07f31727d8725dd7e8d5efd2f6d5ce8c b/.git copy/objects/2b/ffb79f07f31727d8725dd7e8d5efd2f6d5ce8c deleted file mode 100644 index 9759d0b062ff8fcd75ea4958dafccc0c306d39f7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 74 zcmV-Q0JZ;k0V^p=O;s>6VlXiP0)^bf%sd7&xdgY#wi>rjHm!C})4lpXqM3^uB3+VN gT*C1GZL)9WnID?{iks4Z*4FA*iu7jz083vQmW~)Ai2wiq diff --git a/.git copy/objects/2c/0a7f7563ae882eaab072f3e71506fb5e75c054 b/.git copy/objects/2c/0a7f7563ae882eaab072f3e71506fb5e75c054 deleted file mode 100644 index f9fb0ff2..00000000 --- a/.git copy/objects/2c/0a7f7563ae882eaab072f3e71506fb5e75c054 +++ /dev/null @@ -1,3 +0,0 @@ -xu -1DSMJdKB Lr ->*3s-væw7qM*8˨Ti6f 3=Pr ~C?psox)B'AB \ No newline at end of file diff --git a/.git copy/objects/2d/4763ff9c9e2b07d223adb7f66cd17e4f7c91a2 b/.git copy/objects/2d/4763ff9c9e2b07d223adb7f66cd17e4f7c91a2 deleted file mode 100644 index 2ae7a7bc78ea8651dbaf3aac6dd3ab1f83516808..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 166 zcmV;X09pTd0V^p=O;s>7HDNF`FfcPQQE*Ak&37y)$jMAjEXmBz)5}UMOJqpdYO%1U z^&RG3Tcz=KBL(vxrmf4D1 z5+SN`^HWlDiWxRdUHoa8v+tP)yFcvla1IH6Dr0GvBQGWkkO6aWAK diff --git a/.git copy/objects/2e/1e08f4a91e1c71381b4bb880e0b0c79190712a b/.git copy/objects/2e/1e08f4a91e1c71381b4bb880e0b0c79190712a deleted file mode 100644 index fc47a12b7f624419102eb8a052aed9a66a4a7007..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 128 zcmV-`0Du2@0V^p=O;s>7F<>w>FfcPQQE<*LEh-5tNnXbXFXJPa7k%OYF-J7@;RMMGCR!viJbO&^2uM$I@9cp<}ax7kkrKF ijMO3&<%g4a>)cj5{S`G`*juyf{V^9;;SB(sggXCe$vhzd diff --git a/.git copy/objects/2e/d2a724b6b8193fa011365afd3be19046c235a5 b/.git copy/objects/2e/d2a724b6b8193fa011365afd3be19046c235a5 deleted file mode 100644 index 54197c08..00000000 --- a/.git copy/objects/2e/d2a724b6b8193fa011365afd3be19046c235a5 +++ /dev/null @@ -1,2 +0,0 @@ -x] -0})]4D<7MR[$i2/3 |!@?$;{kh.7v}7sS3y%W@-BT}WzTaz<(qMBQ~4 b(X5Y~BKApLWk1ud+&hgeLbe+K(>XCSG-EXa diff --git a/.git copy/objects/33/04bfb5f96d12dc3dbb8fcb764ecd4e45df0a1f b/.git copy/objects/33/04bfb5f96d12dc3dbb8fcb764ecd4e45df0a1f deleted file mode 100644 index 414a5c3fd748c2133c535a55a883cef7258a8d11..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 74 zcmV-Q0JZ;k0V^p=O;s>6VlXiP0)^bf%shtU5rNjvx3k%?c0X<3@lM~yVUC>+M7kuk gxP;;V+hpI$Ge0!@6*r~-tgY3r6zR_b0B9K-83>;v?f?J) diff --git a/.git copy/objects/33/1f2a7a69e8bf358ed27f930dec3d228539bfa4 b/.git copy/objects/33/1f2a7a69e8bf358ed27f930dec3d228539bfa4 deleted file mode 100644 index 198d4b10560415dbd8c32a8336a22b485f09aff0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 120 zcmV-;0Ehp00V^p=O;s>7v}7|C*KqST9T&A!cV{i+{oS#E@?3rS5(&PXkSsCyhA a=%!~a6KioJ$g%pm09$Vm(-Ht+kS>@JlQ@O| diff --git a/.git copy/objects/34/e8d1672955726d9f14874d00dcce27e3bdd87f b/.git copy/objects/34/e8d1672955726d9f14874d00dcce27e3bdd87f deleted file mode 100644 index 02f22c73a78b6318bde91dd2856dcaee77deb528..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1182 zcmV;P1Y!Gl0j*ctZrnBy?el)c*bl)jk|;n?6h#snaT5n!q$vux>1#nt+_f4>R7q;> zMdN?(j5xgL;&`1}PZBwtIdkU1(PgDB;fL>k`tiF~Laype-iW%bWLC&pWk%{< znM?C(u_)_SX*(6ERUs>ry;Yqy^3{D}7q%;8V}qR1+sw4OY_=OMYI&{n=j>97#$+3j zTc!7zXc}dOEmf19byi)MS{7eDZmiT&*?lXs3kN@<|6A-t*4eVk&a@W$UrQ6A#JyjH zx%w#DU?uL{abRBf)2H=2H2sEAEZXj}Ds#vyVGJ-4ya)d-7Jv^ju@hFprfft7sP^@R zC32p5`BN~CLEM8AXyi38+SjMc6&s^nHwXL{S!m|y2NxojzCmd74o zuQ~6t2`(i_(s+!Fksf+(!yDmXuqhN?dK@%f|G|KIwo*9#!sCE(x(|ZFvE(FN7np;T z=9$J^Q8m3TSD95#j1tn33qF5+`f~32d~t~qGQ_1uJj~{>9a%oHE|vj9VujbRII_00 zQRJDoo5*TuJKgvVXY6)1x3|IU&wDgH<{-^V%AEkrhbt8zJ|2>`>vs?XLsc=KvrLQk z2I)QI@!axG{F`#0fhK=g5XEc>+g_;qDf|%BX4x?2-@6hJlT+6JtBPe2^)YC2Rcp zHG@4xV{`rDLB@JXGUcd_9m6HqOn`A%k&}BW(muM5!p39N$AP6xp*Uj0)W~wxSW!0S zgWUUE#{5VV|DiqQn+o;9Rp7&Nw`*jhRjAkZTGeg}Nj!-`OPtm?eeUE$Y9^oq1M7y> zk9%~eTsPYwfk~vl$u(z)h7W!_;kk)Nstilp?ev#Mup8awbE+zW24*0hO|MW&j3~^l zAoYXtAP7*|e@v#fc$Bmcc2@8_IfuKyYaIGRnf5M&jqj9`m?~W8p-Vr9ZJ0XXcr_4O(6VlXiP0)^bf%sd9BddCRq^OiQhoL`=K{P|||0Y}}p5b2WC g;u41cZ9VK6ZO0)^Cy#N2|MRE95N`I?94RNfGuaX9a;R>ZHbvb%2s I05TB~Yx@NiE&u=k diff --git a/.git copy/objects/36/1e6046933d28dbc982ab43662dd5ff58830a0b b/.git copy/objects/36/1e6046933d28dbc982ab43662dd5ff58830a0b deleted file mode 100644 index 6875b743e87131d9d338ec524256b1fb0002ec60..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 79 zcmV-V0I>gf0V^p=O;s>6XD~4U0)?!^vP6c+gaGb+Q!eML&NI#MbM{L+uA#XYB3+bP loL^d$oLbD_AZ0AE{P;sn%WWGzCq8ige@J<;C;+F+8@fNiBar|A diff --git a/.git copy/objects/39/8646f243459fd5af14c77bba2312478b18c442 b/.git copy/objects/39/8646f243459fd5af14c77bba2312478b18c442 deleted file mode 100644 index 931e2ae5629c3d2788faf5f138718fb8b1437e14..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1323 zcmV+`1=RX@0liq;ZrnBy?X$ju_Cv6XILb>36!8Vw#tyP*QxtI0*MgR~Yc-OnlGNIZ z#Q)wIa(I!njyH}`0S2_xTn=Z>42Qm|Ui;)uLUb)lZ#v4bhXG!(a2m2 zwW$iBkF)H=J?#C(;ykOGPAW5%Z)7QIonM;16s z`-7LI5?Y7fqTy9N|B^9yycP0j9eP{NNYHj_$5xHRbq-%=^aHS=MI}tHTEB(k?9Kxo zY;i5jqOQFefNc}$wFunM6p-UC%i!xN#+TtMe5v zj8xm4x2-hXRI<$%y^%MS66H75f1FzHxxW6uyWnL^x(QEr3xE2wJO>8t$xxflAx*(7 zuoPK^Y_d5EY=v*^lp$jYE%6me@g@XnVAQ3^*F<3x=8KQLe91mawi2eeh6aGS)Qq$?)`rjf1K{w=s_MVUFPuHHPC9$Oetn+O@7YQ<()1?&_y*4H)r`qh?JUg?XbGuzpG zo=BsHxmNPV24Pv(V$JJ?TK5g~sEgY|bjX?6p$BL!7nV)zN-%*I52=dK*4+RH)nN*S zmYxQUx4$*F|_#jG>|57 zmsV}sj~E5z2$F+6Gb)o399)JpmZ1?Y%c&p~N8a_u_sV5?6nb4WI_!6D9aAY~ewMkf&H|4`*R;k}-Fb(RTGL4K0}(pW;a%HoWcyC{YZC z+1|*?w>vUF$#gi>!N(uzp%1?oqjMjYE-a0co<(+jNFYliY7y2!tZZ9!{@4L^#%Isi z0b#hm1&}eU8U#Bdg@gbx4djG2G4?~td$}T6^hU4Wa%e*|c4rs&a%Lsbl?!z&Znv`? z35H2lOa{0Z_9R(Jb^NcTjD8OY5ms*@Tf?hX|0cFc6{p1i-k$QPLcJUgjr(!8Z$+zQ zU6b-VB^x(|Bs+;oOE#_Gp0W`WsT~O&I9Rr1e%zx&<+|Ah3M|R=qqgQ8;qXCkr!+Uw zNQGV3eX)l|@Ef;Fda^Eq1&Tn_O^;9{Mii!2knRI{5CpL7KO|FIR7LB9FLU-H(Sxsl zD!3koHi>3qr|=NLyn~J9=iZV+4{H+`@yis(^B7J9IfStz_xICloc}aTKa%dkj>hqL zy+2bVc~6?$*GX__c^a7)M6PLAFgy6{$O}vhNlNY*T;fGSd(@hYBA0O25+jN*MMiEYqk(4ayndegnX@6_^1v7Mb zhksbg-N@oXB?f7qj7md{%-)MRohh^7X>_Fn|;@;j#MNWMlX-C6E hl8g`9ekaIqK8#`UjqwitMRDdH2IE$n{Re@MApB=7gw6l} diff --git a/.git copy/objects/3a/637e14162b36bbb268b93e508b7f6b48e87d95 b/.git copy/objects/3a/637e14162b36bbb268b93e508b7f6b48e87d95 deleted file mode 100644 index 338d8d70..00000000 --- a/.git copy/objects/3a/637e14162b36bbb268b93e508b7f6b48e87d95 +++ /dev/null @@ -1,2 +0,0 @@ -xu;0D}-CJ -rVkeג%ӾyqMj'ϹfsIǢIcJu)zɊ5 ĕ·)\*i7k#n9EG[xYSjṶD \ No newline at end of file diff --git a/.git copy/objects/3a/95758593d2f99a0704c626938277d74b88b6ea b/.git copy/objects/3a/95758593d2f99a0704c626938277d74b88b6ea deleted file mode 100644 index bb9893d4ff8eda2a600e882d6389a11a68150037..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 46 zcmb(@ CQW9+d diff --git a/.git copy/objects/3d/e6654902d1761008255c4f94b1d53fb662cfdc b/.git copy/objects/3d/e6654902d1761008255c4f94b1d53fb662cfdc deleted file mode 100644 index 6773377c2780e14267f7a0a4baa7f0292e07b438..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 166 zcmV;X09pTd0V^p=O;s>7HDNF`FfcPQQE*Ak&37y)$jMAjEXmBz)5}UMOJqpdYO%1U z^&RG3Tcz=KBL(vxrmf4D1 z5+SN`^HWlDiW!m)AIu29meZuz|Lxg1r6+4rlo#kg6cncxm1QQU7BlF{aeP@RCsSx4 U?Y*Pn!G_}#ClqP{0E~!25z=r>Gynhq diff --git a/.git copy/objects/3e/5440405f63b60b4cd9d84830a7023f6469dc8b b/.git copy/objects/3e/5440405f63b60b4cd9d84830a7023f6469dc8b deleted file mode 100644 index e921650d21b6635658d03cb213b41dedaf60ad45..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 234 zcmV5F<~$?FfcPQQP4}zEJ-XWDauSLElDkAuy)MQI$HVbcUshL z-#@pOty)#6*n*@oGd(ZAD3u|tYTbtu6BqU*mT#CH?AZNvPS#F&69XVn(912$V`$sx zv@h4sYj?-O?IsPeUfzzqFTX$y0ZNxM?CqGgUrBsR{wk)45pj%bq)Z%FMj*-SCFiCv zOmgL)tZq`U-s#;tPl=NCo0w-8a6#1+lp;2g%ts` C(iDdP diff --git a/.git copy/objects/40/b297dc13a9295f31775fa38364e6e30b645393 b/.git copy/objects/40/b297dc13a9295f31775fa38364e6e30b645393 deleted file mode 100644 index f4e00ec444e274f552bb8dc9dd335c2717df1a1d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 166 zcmV;X09pTd0V^p=O;s>7HDNF`FfcPQQE*Ak&37y)$jMAjEXmBz)5}UMOJqpdYO%1U z^&RG3Tcz=KBL(vxrmf4D1 z5+SN`^HWlDiWxRJ%fC9kJ?3`UvY^jq3_*+6+>ZSYQBa&(RF;{XTFjs)$MI#QoJ^sG UwD*pN2OEx0oKUC*0FKB)M=oto$N&HU diff --git a/.git copy/objects/41/f7c86360ab6f9b34b2bccb543400ffd33a7025 b/.git copy/objects/41/f7c86360ab6f9b34b2bccb543400ffd33a7025 deleted file mode 100644 index ef4e8e8dc26f6192ef37fdb312e5f6fc06152227..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 132 zcmV-~0DJ#<0V^p=O;s>7v1BkbFfcPQQE<*LEhH zvF5*z)KR*#<1R~4J;^#A`SBz9(euX6;fJ4p{OP+^m!I?!p|op-cY576s484r<8m2X{bmJ6rXxV7$+nxi&eEp!>I z+bL~~4La1;sOv7+ZSAo7&+9&*LmPH2st*xcv$trBLkS)yUGGOCf#;7-Ag;g5ddcxV5mrP_97EykLr`BVH&S z62SPQh~U6b;m)A4WQd$XiBn35vG7wbpkNEQB*b0Qz~|5X4ORQM>o)9)X>QFo!phlg zpWUo!aH*SXx9rwv!rQwNTkeG7RN(ZE%f3Zmj)3g&l$c;Q{M?Uk45P;e7jXVH5r5~z zAjL9-EYur39!{u<<(gGgE$#;8w5jZxUyG>{oYV z>k7KIdLRVx{;WEKK^buSTP_Y1upgrwOT?F|u-`O;%Z!d*P@-cv5lwma3{J>72m7+F zL|;5AY*&bV<~b29G2+Z$T|QKdS$l$p@xom9w_JV{Tnpg|C|a= z{UnCvQ7Ekmx;Fk-+@+Do>-WUj{F=5;XdL}1*4OnmzGq!n8)jV!%e`=(!;hY~dQ zscbx&x{UsK=LwA|(T4p=>Med{%d)J9O)rQkYHFI8D)*>Z7GiaD5)a2cLiVqB!)2Mn z6e-J3K0XeP{~Y|Go0#y{f>-5Lpne*w5VY%0b6owyKd~N`h CNE1Q; diff --git a/.git copy/objects/42/e93a26e2caa3b0af3cca788ef606bb34a9204f b/.git copy/objects/42/e93a26e2caa3b0af3cca788ef606bb34a9204f deleted file mode 100644 index 3a8d521fce4f70e70ede4b9894d01e7e309f67b8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 45 zcmbgf0V^p=O;s>6XD~4U0)?!^vP6b2{Cb;D^*`Wa@X4~0^KmJwtgW$vNEf9R l=a&{Grxr6fNEu5kKmJhDa@&T_i4UCrA5vZ{3IM3v8=X0IB4+>q diff --git a/.git copy/objects/44/4cb17b5dec5688a94067361721398ff241c3b6 b/.git copy/objects/44/4cb17b5dec5688a94067361721398ff241c3b6 deleted file mode 100644 index 09a1f4d4eebd0d54aa22e8a7ba16142e72b13210..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 80 zcmV-W0I&ae0V^p=O;s>6XD~4U0)?!^vP1^v8@vBkT(^lxeb=e?KF9LJi(hkmA<{*u m#rdU0$*IK*4pPPv%a1?QwA{AgbK(Q%|A&+pivj>mQy*Kd6XD~4U0)?!^vP1@_msVCXC-+6 diff --git a/.git copy/objects/46/18b729a52a797d792cdd3af91b1365dbcb976d b/.git copy/objects/46/18b729a52a797d792cdd3af91b1365dbcb976d deleted file mode 100644 index e0bd3a9ff80a0782a6f36df8d63854c326cbfdf2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 362 zcmV-w0hRuE0hN5sivvZs#k* zdIY>KlkKnz%4qujAheoT>N#Qz>FFW9Lg>n6SNhEVw$!+F29ABw?Q=NezhRkbq!Z-R+=)|ZkR3~xv3A$& I7fs`2YX_ diff --git a/.git copy/objects/46/45774cfcc31901211d0ed4967977970f603687 b/.git copy/objects/46/45774cfcc31901211d0ed4967977970f603687 deleted file mode 100644 index 1d7c9c1514156abdddf5f3cd92361b8985eb60f9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 166 zcmV;X09pTd0V^p=O;s>7HDNF`FfcPQQE*Ak&37y)$jMAjEXmBz)5}UMOJqpdYO%1U z^&RG3Tcz=KBL(vxrmf4D1 z5+SN`^HWlDiWxRdUHoa8v+tP)yFcvA8/JaKk]ҥVC)Z'#wHl$b&ƒkvNA[(Azc&IoB<\]9`&HM'dڣOΌQ3l`B.6 sNvt"Y@Tѓm35vm,FdyyFcd;2x{>Ԑzgf0V^p=O;s>6XD~4U0)?!^vP1@Xp4MQF<0?sv|Ce>X_DPQ0m$1+WB3+bP loL^d$oLbD_AZ0AE{P;sn%WWGzCq8ige@J<;C;+qD96Un@BV_;p diff --git a/.git copy/objects/4c/79cc7259d27e2b39a079046777a48013a9b654 b/.git copy/objects/4c/79cc7259d27e2b39a079046777a48013a9b654 deleted file mode 100644 index df717cbbfad022e47725ff691b6dd45a6774ae99..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 74 zcmV-Q0JZ;k0V^p=O;s>6VlXiP0)^bf%sd7cpN-YAZ^AlOI;5M4D_Zt{ay+~ZB3+VN gT*C1GZL)9WnID?{iks4Z*4FA*iu7jz0BANFPI@~boB#j- diff --git a/.git copy/objects/4d/231f7c92e52d71357f39257fa46ebb50c80cbd b/.git copy/objects/4d/231f7c92e52d71357f39257fa46ebb50c80cbd deleted file mode 100644 index ae6ec5d9..00000000 --- a/.git copy/objects/4d/231f7c92e52d71357f39257fa46ebb50c80cbd +++ /dev/null @@ -1 +0,0 @@ -x+)JMU04d040031Qp/-*NJ,Kdu[*a%_6y,TYpIiJj^ D>_ч~{R"7u-_]vGws-6~ \ No newline at end of file diff --git a/.git copy/objects/4e/1804142de9aa6ea446c66f4fcb6946cddabf2d b/.git copy/objects/4e/1804142de9aa6ea446c66f4fcb6946cddabf2d deleted file mode 100644 index cac793f980a703fbc07c8af81f8a38cc07611003..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 139 zcmV;60CfL&0dy6H1M.q-DGe]6H0c 5ȡ瓯B 7x7xtMc! GýJ-35F<~$?FfcPQQP4}zEJ-XWDauSLElDkAuy)MQI$HVbcUshL z-#@pOty)#6*n*@oGd(ZAD3u|tYTbtu6BqU*mT#CH?AZNvPS#F&69XVn(912$V`$sx zv@h4sYj?-O?IsPeUfzzqFTX$y0ZNxM?CqGgUrBsR{wk)45pj%bq)Z%FMj*-SCFiCv zOmgL)tZq`U-s#;tPl=NCo0w-8a6#1+kJaY(hC0KKOW+!#FUwbfc}cKhr6f2qnB RKDFIpULn_o)erwbMm(z_PJ;jd diff --git a/.git copy/objects/54/dac8ed6bcfbe7f99cc6b4d543a3890240edd77 b/.git copy/objects/54/dac8ed6bcfbe7f99cc6b4d543a3890240edd77 deleted file mode 100644 index 329276473296b2534d508a69f19a8a692dcf8b2e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 47 zcmb6VlXiP0)^bf%shsrwF@3HsCrM&d0np6-&I}1x`e+SB3+VN gT*C1GZL)9WnID?{iks4Z*4FA*iu7jz0Bf)tDy>)}Gynhq diff --git a/.git copy/objects/5c/6761c09c63ee1cab26c1f5f96f4e63c69a6e47 b/.git copy/objects/5c/6761c09c63ee1cab26c1f5f96f4e63c69a6e47 deleted file mode 100644 index 3514f86bf99394e94e7155396325ccc1b138c4a1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 128 zcmV-`0Du2@0V^p=O;s>7F<>w>FfcPQQE<*LEhX5ocYpkhqZM(7(rDBmz1WY=9Qo*H+gX}T{E;OcfLrwFTW}x{sD~;KNli@7 iNG(E9er)2NP_xg+u7$>T^ZAxE*0R+4wE_SX*g2DIw>wb) diff --git a/.git copy/objects/5e/5c4f89938dc948ddff5a384ae9e587cd10ee15 b/.git copy/objects/5e/5c4f89938dc948ddff5a384ae9e587cd10ee15 deleted file mode 100644 index b0d8989b3d0fdade73920f75a03d4c12bee26da3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 166 zcmV;X09pTd0V^p=O;s>7HDNF`FfcPQQE*Ak&37y)$jMAjEXmBz)5}UMOJqpdYO%1U z^&RG3Tcz=KBL(vxrmf4D1 z5+SN`^HWlDiW#O{3HhJ$R`x+{<7rcd4SSw!N|1dBQBa&(RF;{XTFjs)$MI#QoJ^sG UwD*pN2OEx0oKUC*0H<+6u=$!!i~s-t diff --git a/.git copy/objects/60/01f4773c082801314dd22c9cdbdbd327381ebf b/.git copy/objects/60/01f4773c082801314dd22c9cdbdbd327381ebf deleted file mode 100644 index f1dcd678cef5f3f2322f30dab99125f082a19caf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 45 zcmV+|0Mh?>0V^p=O;s>9U@$QN0)^!KT!tIPTkono;I(#Ov3S_YzVOAFN`@o=@DmNq Dn$i?Z diff --git a/.git copy/objects/62/1780064eec96be4ec20d7c89c20d1b5757cb7c b/.git copy/objects/62/1780064eec96be4ec20d7c89c20d1b5757cb7c deleted file mode 100644 index 9b5b02d4..00000000 --- a/.git copy/objects/62/1780064eec96be4ec20d7c89c20d1b5757cb7c +++ /dev/null @@ -1,2 +0,0 @@ -x[ -0E*/t2y.eL$뷈;p8\\s^BmvKb! $#R0MJW .jAшHbqo.ON[`zk>9tz`ve]UE~J \ No newline at end of file diff --git a/.git copy/objects/62/82a43e1376e1b4a498ff1fd2f5c547e4bf5960 b/.git copy/objects/62/82a43e1376e1b4a498ff1fd2f5c547e4bf5960 deleted file mode 100644 index 06857be35c38c641bd5513050d85b7006875b24b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 46 zcmb7sF;XSFarGWXRt-@Wap1jBuP-Xs8l CoDr%3 diff --git a/.git copy/objects/62/84c6dc7e23db29b9d48777118d72cf5527bb31 b/.git copy/objects/62/84c6dc7e23db29b9d48777118d72cf5527bb31 deleted file mode 100644 index 2b408590d509907e808f84859c2be50a269c68c1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 49 zcmV-10M7q-0V^p=O;s>9VK6ZO0)^Cy#N2|MRECgSC*EeC-&a5LOtx=`mBj=VzPsfB HJ)sbb+d>ro diff --git a/.git copy/objects/62/c3c16857d66c82218ff6e6ce22e4ac6423a02c b/.git copy/objects/62/c3c16857d66c82218ff6e6ce22e4ac6423a02c deleted file mode 100644 index 0ceb2f30548f37a9c118b0dc4c87ff3d70d4f548..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 121 zcmV-<0EYi~0V^p=O;s>7v}7sS3y%W@-BT}WzTaz<(qL|wW> bn6XNt>Bbm|<+7q@B3?P3W?TdSvZ*h~H0w30 diff --git a/.git copy/objects/62/eef4ce33c4c04fd9b695a8d317f13c9740ff81 b/.git copy/objects/62/eef4ce33c4c04fd9b695a8d317f13c9740ff81 deleted file mode 100644 index eb6317403b77de88d8b12ba4ea2722b45e77fd25..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 45 zcmbPkM)(oBuw(?2m8NtL)%3hDYCd3jmJ! B6bk?V diff --git a/.git copy/objects/63/37a8f81a512b91d30fe70b332484959529df79 b/.git copy/objects/63/37a8f81a512b91d30fe70b332484959529df79 deleted file mode 100644 index 032ba09ec89ecc209c5fb07200552f5402ca7e45..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 234 zcmV5F<~$?FfcPQQP4}zEJ-XWDauSLElDkAuy)MQI$HVbcUshL z-#@pOty)#6*n*@oGd(ZAD3u|tYTbtu6BqU*mT#CH?AZNvPS#F&69XVn(912$V`$sx zv@h4sYj?-O?IsPeUfzzqFTX$y0ZNxM?CqGgUrBsR{wk)45pj%bq)Z%FMj*-SCFiCv zOmgL)tZq`U-s#;tPl=NCo0w-8a6#1+L{h5&Zy9OKkj7dۦӾ׺y{DoDj F,T8q|i?MBƇ&1p m \ No newline at end of file diff --git a/.git copy/objects/6a/5ef5148a9fb43d9c2ca8c118b6a89f693baf2d b/.git copy/objects/6a/5ef5148a9fb43d9c2ca8c118b6a89f693baf2d deleted file mode 100644 index 1d6f4c4f337adce8c0eda1a4f87451fb8c46aee5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 166 zcmV;X09pTd0V^p=O;s>7HDNF`FfcPQQE*Ak&37y)$jMAjEXmBz)5}UMOJqpdYO%1U z^&RG3Tcz=KBL(vxrmf4D1 z5+SN`^HWlDiWxRdUHoa8v+tP)yFcvTSHAzJ^%m! diff --git a/.git copy/objects/6b/163f8647162303e36736c1aa2e0d92f1d3496b b/.git copy/objects/6b/163f8647162303e36736c1aa2e0d92f1d3496b deleted file mode 100644 index 9171608ec2da11cc42097c585f0b4d69b5c6d5cd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 45 zcmV+|0Mh?>0V^p=O;s>9U@$QN0)^!KTn4-QyUUck7E4{bAz^OxW|98>m*SHE?U@cc DmGcx~ diff --git a/.git copy/objects/6b/170c5d2d44a84a9e8212505fb2977736d6b3c6 b/.git copy/objects/6b/170c5d2d44a84a9e8212505fb2977736d6b3c6 deleted file mode 100644 index 6c60dee7adc88eebd834618aa5d2b5e3731126a1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 165 zcmV;W09yZe0V^p=O;s>7HDNF`FfcPQQE*Ak&37y)$jMAjEXmBz)5}UMOJqpdYO%1U z^&RG3Tcz=KBL(vxrmf4D1 z5+SN`^HWlDiW!XMwW=~->^JSZR6m*bjjd9v<^ClQ1;wdFWtqvT#SBNo9#^aTsrM$O TgbOP?I@~B}FRn(жԖ E!uk]`?pcl )ORP)ڮRfW0,^"F4 9y*k@G9 8wG"'4H3oӢvΧ3[521R5" <9:gׅJ\a}ֹb^kO|8 -mMLݰ`ĸ3PC7adžvOLANT7,}4lV>^BE/' -k`ͅ cG2:{gM~~GNbcƺ<9kb= \ No newline at end of file diff --git a/.git copy/objects/6e/fb080e3d0544517a62c1bffa3ebdeef8a0cdc1 b/.git copy/objects/6e/fb080e3d0544517a62c1bffa3ebdeef8a0cdc1 deleted file mode 100644 index 0367c02dffd8d2d2316cb6954afa841dc6daddff..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 49 zcmbI+a2;2IXY_ FdjQ006H5R9 diff --git a/.git copy/objects/7d/35ca41128c21250712136c2d32c51115f5f678 b/.git copy/objects/7d/35ca41128c21250712136c2d32c51115f5f678 deleted file mode 100644 index dc8efec7..00000000 --- a/.git copy/objects/7d/35ca41128c21250712136c2d32c51115f5f678 +++ /dev/null @@ -1,2 +0,0 @@ -xRn0H[+UQg/p utgH(^(P$~ejjԁ>AR\gQ5bhR@/ą-* XD_H+.P##s∄!^:T >Dp9{wt5Zj 2G;y~h \ No newline at end of file diff --git a/.git copy/objects/7d/4dd6ae6f1430a1c57110b75ceee614c8852bf4 b/.git copy/objects/7d/4dd6ae6f1430a1c57110b75ceee614c8852bf4 deleted file mode 100644 index 261dd2a26dc1ed650e8d5340ce7101c7ac427736..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 74 zcmV-Q0JZ;k0V^p=O;s>6VlXiP0)^bf%sd9ybF&Nd7fjgsG2-tA%`h>Uqz3nHh;&J6 gaS6l!x5>VhXMSk*D{e~vSzD`LDbk+>0EgTg%8RNYs{jB1 diff --git a/.git copy/objects/7d/80be016f67d7ef11b6a04d568b38e4001b0958 b/.git copy/objects/7d/80be016f67d7ef11b6a04d568b38e4001b0958 deleted file mode 100644 index 1584db98..00000000 --- a/.git copy/objects/7d/80be016f67d7ef11b6a04d568b38e4001b0958 +++ /dev/null @@ -1,2 +0,0 @@ -xK -1D] D<7t::0 137WpWZ˯bNIAl~*D~ \ No newline at end of file diff --git a/.git copy/objects/7d/ecf2639976283ad82781c6e5e5d1c6e10b1bfb b/.git copy/objects/7d/ecf2639976283ad82781c6e5e5d1c6e10b1bfb deleted file mode 100644 index d35a3ec2b84998ca1b373cc74dc7340a918ef0f3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 234 zcmV5F<~$?FfcPQQP4}zEJ-XWDauSLElDkAuy)MQI$HVbcUshL z-#@pOty)#6*n*@oGd(ZAD3u|tYTbtu6BqU*mT#CH?AZNvPS#F&69XVn(912$V`$sx zv@h4sYj?-O?IsPeUfzzqFTX$y0ZNxM?CqGgUrBsR{wk)45pj%bq)Z%FMj*-SCFiCv zOmgL)tZq`U-s#;tPl=NCo0w-8a6#1+Frz|cX>Wq$CSfO$fb74!f{(`boO|Hf zm@N*cEq^X-!B56-4>vMNhYRD|3Ql;4#99%RanD}mD@DrC-zbjC$#9nY| pTtlLtcqriA|1F1WT>{TYB(go(;}rnX3N6D2jvHIms-6Q>K{1-AJ>>uZ diff --git a/.git copy/objects/88/02bc1f59f9c60b1966d8924ae6003b81b349cd b/.git copy/objects/88/02bc1f59f9c60b1966d8924ae6003b81b349cd deleted file mode 100644 index 8420a4e7173358f037d653a9e0abc8f6342af21e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 46 zcmV+}0MY+=0V^p=O;s>9WH2!R0)>>++9VK6ZO0)^Cy#N2|MREDIcC3eDP54S9t@n8PZ*Q4%F_D3cF I05w7prTC8(T>t<8 diff --git a/.git copy/objects/8e/2f9832d06855c029e78fdeb4cc051ae7004b17 b/.git copy/objects/8e/2f9832d06855c029e78fdeb4cc051ae7004b17 deleted file mode 100644 index 9966a1b51ee61da46f1f82677dfdbc96d9a769ff..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 121 zcmV-<0EYi~0V^p=O;s>7v}77F<>w>FfcPQQE<*LEh5m%nq}EBB#BceDasG&NO?Y`3tH%BsDQP iBee)c`QaqqI=9tMe??6f_SWorf6T>Icmn{tKsc(N5H{ri diff --git a/.git copy/objects/94/d454ff64ed1de07d81cb3500b0bce4b2601de1 b/.git copy/objects/94/d454ff64ed1de07d81cb3500b0bce4b2601de1 deleted file mode 100644 index b43e7124918f3a23b42216fe868eb1d6a61653fb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 122 zcmV-=0EPc}0V^p=O;s>7v}7OxWzlQU9_AnKmq c)U|x7v}7OxWzlQU9_AnLwH cu}|H2DxmVs7PI9HGa8RJ|1J6n0E+cAv>}={I{*Lx diff --git a/.git copy/objects/96/ae261be8cab8322607736fb51f410c4987d1c3 b/.git copy/objects/96/ae261be8cab8322607736fb51f410c4987d1c3 deleted file mode 100644 index 0b35cd1e227b725f7a5b76face17158e98b2d157..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 80 zcmV-W0I&ae0V^p=O;s>6XD~4U0)?!^vP6deyAK?jxb9fww$`NGva5F){ERrf1tMLP mTAW{6l$=`3;2>ozvHbW$P0MW?J|{kK{(ne$u_yq0Eg&L}iz9jf diff --git a/.git copy/objects/98/fb26bc79ff73c5b36baac976cd0641f71fbe1f b/.git copy/objects/98/fb26bc79ff73c5b36baac976cd0641f71fbe1f deleted file mode 100644 index 8230fb2ae0c6f7333a780ce9d46a5af201552401..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 664 zcmV;J0%!er0hLruPa821?RkHN#c8)nP1{=qL@7|ANNp7X;_h7!i5th>+Fodc`0pLZ z_I`vUP4^T#GjHCTH=a`Jl6?O7<`s8L2P%`iuC8-4PO0Vb&W*wlhbM= z%AOQi-IP*Pq>{{960~-i%?8 zKerGT4e9}ti|s-_?ln}K+(44muRd(baS$e7YI=T|Olmvx9qHyFCY_*UM zu!24>>?clWUW_7=znK}F?YuzZd*y`+t+bvaIA|{ce9B*O*1T_VJceCL-Vm%9cwerk zJfF;%TRbo$SSf+rIsb|xw<%9L5i?3%;?PX_Tf2IQiA`kd3GLMt;4tzvo6MRtWyfoJ z(1MSf+A-dmc1X`CSvq65D3V%it~X`tPpWcQcd3j}mB`f56>> zmW_}+@BF<62@bkla-_wZb`V^tm>e8A=>Ts9YV5Bh?M>1E diff --git a/.git copy/objects/9b/1fc70ab3fdf983c52a2c3dd7ce352d70108c44 b/.git copy/objects/9b/1fc70ab3fdf983c52a2c3dd7ce352d70108c44 deleted file mode 100644 index fc16f8fc419c65fd24e2dc1cba9f02c282eb63f9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 185 zcmV;q07n0K0hNzSY6CG4M7`E2v=5kWeYzzGA!o=9)T5SdnDGpX#^;Z+$N{pdqIgA7 z%f4-oVI76b=&F{hF3pk8naL$zYI2-#A&naAuObLa6LXZV&oTJ~qJY$hD{Dg(DiCU< zBtB^XK!F_7AFmv$vSLvbWdbjrS}j=TqN|B~^x0=6Q_gYUyZzEvdD{0P=lA~V)BEsw n+sb3TF8lUjk=b!hKxp4!j+vRxKSTfDG)LFtTvzi0q?S>R>6TqQ diff --git a/.git copy/objects/9b/735e27f881fcaa3789e34fed334c429897aab5 b/.git copy/objects/9b/735e27f881fcaa3789e34fed334c429897aab5 deleted file mode 100644 index afbd620b281fa8262e1e3473d73cec49c6a497ee..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 74 zcmV-Q0JZ;k0V^p=O;s>6VlXiP0)^bf%sd9?J&Vn3?e#2*=hs>Pp2G1-G3B}tM7kuk gxP;;V+hpI$Ge0!@6*r~-tgY3r6zR_b08maEwF5CEsQ>@~ diff --git a/.git copy/objects/9b/ce8acd9d580b27bc20542ce0ceb40a80d13987 b/.git copy/objects/9b/ce8acd9d580b27bc20542ce0ceb40a80d13987 deleted file mode 100644 index a39737e2c864126f937319c1e4ce10058f2af1c4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 612 zcmV-q0-ODK0mW5KZ`&{o-8K0Yn(wmWbwGvd}Q@(H53r;cZBw?PAqYxm4ls?(+O>K&E@yh zb{Soi9GwBiFw2z(^n`A$Zq1jvgdTHeEL_gUvWD-peaP2ZdrEplKr`#bhE*N{5*P;z zh90fw7N@+Fj9?+^FoekFjFR3AF3TlcMaP%S-;om0*BB$I^+Rh=N`^L8H^_3Mo$%T| zB8)?qWN2aNpwdmw_pC9Jk4cX?*Sygu>;`f$+PuK4ukV(t&o{SYmQ=xolqoiTLj9V% z$_f*vSbl`8sF%@3TeOPzh~CHR8zUjGwUUGeq^P)Z+{GarjOZXE50vS+)CQ&*af6wV zgBiTkRZRp{S}71TFbk+a^^oJkiNmvPLiC(SN)c89N_uf%ch5SO_d_erDLFcT%H${j z3L36z*tI^vaPSxiy-;({if+f(O;??a6-XUdePZ=jNOVk!Ixh8pA_7zPT1$6YKIj6b zS=v^4(ZFUTGtNOr{W4j4+k$5>gKGZm^`#kN&mBBC$FE13|RR%7U92idH0)?MYIsFMLBtP|M;4fgf0V^p=O;s>6XD~4U0)?!^vP6cQl?5NpHHO?})So9`?ElQ;{RFn{5b2`S l;{4L0|3k`)MF9xK9l)v=Czt>L diff --git a/.git copy/objects/a1/5cf0fbd99b04d707ea5deaa0667a60072a3525 b/.git copy/objects/a1/5cf0fbd99b04d707ea5deaa0667a60072a3525 deleted file mode 100644 index 41233388832fb667e0bcc2d5954a20069dd560c9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 121 zcmV-<0EYi~0V^p=O;s>7v}7sS3y%W@-BT}WzTaz<(qMBVe7 bx|WY!>aQ-?QFpte9WH2!R0)>>+++mpUh}-@bYGqGH8{t$-A|r0|=Sl?2M6)U?pb87(CkJ4q5z zR@%5>RH->gOK*S`YcP{1<1Co1D4>g6Hs>xun-#T{5o&d3SPA#qZ0Op#iv9pwX=UNF za>DJ-#@|CubD=n8N@>TO(2Bl1c>l?^jMh#_`c+ux?`K}yee5v9`B&|)zOkzEM$(H{ zuEDYwSyI)x6a^_Hvz8$4A(uQP#6KQj%N!7LClr%y7_t&n>(G-Xrx6}Vrg(EYJHv{h zs#^<7V{!6fP%T96A1lrlx`XUnh+F+0>rY8xz(e6NZM$@>`K~2wi}hV$JZAIucx;Tu z>aOWHU4i@V_aMzKTkUYQWRjU(nq`wm-vP;htBoSDcd9pOqubWSjD6Gd*%#6VlXiP0)^bf%sht2%k2(+J~4ga?meqoXQajPpKMZ2fJm35 g7MC#mf1B)EdFF>^zv8C!pS896l_LFF0NCdpl-8CdO#lD@ diff --git a/.git copy/objects/a5/79dba911ec8794b340254a5c07192827844e3a b/.git copy/objects/a5/79dba911ec8794b340254a5c07192827844e3a deleted file mode 100644 index 2477ff480ae06db6350bda07a591a79f36651fa6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 74 zcmV-Q0JZ;k0V^p=O;s>6VlXiP0)^bf%shtk+n$y_tjwu6XD~4U0)?!^vP1^)vgKTt+O}nQ3kPa2-rc|Q&VNJhb zde@!WqG}zaqR1Rsazt=kG9e5aC=oODrS~O6V)KRrSl;2d@=C1X+- zfx5vX3me(myDs*jyUg|~XJzo!3}=BaBN L=a=~b-JnBos3=TM diff --git a/.git copy/objects/a9/cac2e46b68ca0af6218a87e8f4cbf0970701a4 b/.git copy/objects/a9/cac2e46b68ca0af6218a87e8f4cbf0970701a4 deleted file mode 100644 index 6d2a544ed9e83d02cbbbf86c946c5eae7ef3463a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 166 zcmV;X09pTd0i}*f3IZ_@06pgwxeL-sX9W?#FZhAZ<_u0I8lvxa5P#sUs6$b))jAI@ zmEMh>GnXc$;$uVwXiI`53MQ>GDS^T`C?GKk>DhyNUI#bmRERzqM`%45ZKO^>p`aw8 zPzMUp1t%H3#?(5$=atqc73%HHk3aZIFy~vPc{#*ZPh40ltw(PZ--7~Ro83l7{v*Mz Unc}n+E^QsXElcj~1J|fd{TzNs8~^|S diff --git a/.git copy/objects/aa/6164f0bb3f20e0e1d5de7c8bf66c099bfc7b08 b/.git copy/objects/aa/6164f0bb3f20e0e1d5de7c8bf66c099bfc7b08 deleted file mode 100644 index f21e228caedabec29ab33a324c245c19a6f16369..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 46 zcmV+}0MY+=0V^p=O;s>9WH2!R0)>>++9VK6ZO0)^Cy#N2|MRE7?wJ@S!1k8w+;-I(O{jKR8bv*%d= HA5ITm̮)+8Wey@| EGXܟL҉_Roe6H׎KЇ L)XW ߜ` -^-pPO0dBSJU. c ]Uo U7u4~eͦnVUՕ]v56m-Dv,pzy+0G@vxLL;cs8pbc5̗k<N T-n euSo&Xq\:Kv94>͊lVoMOmEvQoZm}rwYW[GIZ.΀z;󈮘]u;\@X: '; I`aMW0~𻠙IBu⪪“R> ($!:3bkSе=!g ʀw8P~R,_n .:zA H48"|]&H3yq_1ކdoʼn:湧_p?8Qˣq6DZGϴ}Dc#Cӷ'rһ1/AcƣKgјm؟W,ˊƦ re&V'qdj;9G]hDD1SuN?~Kyp(djB>e#_{!p7*kPfqN{ zY16@SsVhsrKK)U)Qg7j5K7YKau{hw4pwLxLUs%~6Zr#yHgEcRr;^}h_=@dfgpc^2qA!yTjzZ^Jl#B)1nf?=WB)aeUlA-JLIA_H*>n z5KkGG_lvIoF=6$|fhW@L$c5u9MKI(VqlQ_0<#9Ant3?TRsE&eR{8X%C4so6+oFd*x zHTc6+y#p>b|6RQCJOjr|@=Z+Pr29DKY22ZaPLNM)FPus**|GF*>~qY1 I0hp_Y`ES71ga7~l diff --git a/.git copy/objects/b1/fae454aad73e2d340d3666cec62b64a08704f9 b/.git copy/objects/b1/fae454aad73e2d340d3666cec62b64a08704f9 deleted file mode 100644 index 5289b5554ebaeb7b903c4a86254171b9d73e884a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 198 zcmV;%06G770V^p=O;s?oG-NO|FfcPQQE*Ak&37y)$jMAjEXmBz)5}UMOJqpdYO%1U z^$QgDp#p~jOe`F120{&El)xe zCFkdr6y@jSq!tx3IDS8ooUl57w#lYFr$bB_{$I8#P=%<<%}+_qDQ56hmam!gRJYKy z-cq%GN#5>&6Fhq%3W`&U$}*Eviy30l6A#QuekZe9?cmp+`F_dAX63m903O^?q6Jl6 AF#rGn diff --git a/.git copy/objects/b2/431feacbb75cdb56a652f3360052a3acdb5df7 b/.git copy/objects/b2/431feacbb75cdb56a652f3360052a3acdb5df7 deleted file mode 100644 index 97c1a95664b9ddcff6e642f50ff1401431feec09..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 121 zcmV-<0EYi~0V^p=O;s>7v}7|C*KqST9T&A!cV{i+{oS#E@?3rS5(&PXkSsQVtp bK6T@%fXX*p%$76EXgu2dx9BGT&v7$us~97v}7aQ-?QFpteLxS?(3UzF diff --git a/.git copy/objects/b3/4e4243652728c7acc2f34b6923849ffdfc6346 b/.git copy/objects/b3/4e4243652728c7acc2f34b6923849ffdfc6346 deleted file mode 100644 index 857300d3..00000000 --- a/.git copy/objects/b3/4e4243652728c7acc2f34b6923849ffdfc6346 +++ /dev/null @@ -1,2 +0,0 @@ -xu; -0DS[:]uRObD]] q *yx.݂XԌ6ba{&& d'W 7"`W(pk/x?yuM@A^6'FC \ No newline at end of file diff --git a/.git copy/objects/b4/d487dc3548afe4920fb24316838f682959d99b b/.git copy/objects/b4/d487dc3548afe4920fb24316838f682959d99b deleted file mode 100644 index 974aa9289fc3a4b76ebf40571884a8abea461b19..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 74 zcmV-Q0JZ;k0V^p=O;s>6VlXiP0)^bf%shsNc^8gUtYOZMaQ7&d;+Ooe@6>l5h;&J6 gaS6l!x5>VhXMSk*D{e~vSzD`LDbk+>0D~19#li_9Q2+n{ diff --git a/.git copy/objects/b6/97d3465890103d15eeefaedb2024a9df576de2 b/.git copy/objects/b6/97d3465890103d15eeefaedb2024a9df576de2 deleted file mode 100644 index 5cf2f789..00000000 --- a/.git copy/objects/b6/97d3465890103d15eeefaedb2024a9df576de2 +++ /dev/null @@ -1 +0,0 @@ -xIj1D)7/3LLA}( ǣضԗU=LD[CDr$K(u]q*K62fNHȜ¿yI o_|lo>kK- M; }{s?U \ No newline at end of file diff --git a/.git copy/objects/ba/4c7bd69820fbd9003ac1730930de02adfb3803 b/.git copy/objects/ba/4c7bd69820fbd9003ac1730930de02adfb3803 deleted file mode 100644 index fbd9cae4ae91b367fffd8334d1097c3c1b7b9bc9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1978 zcmV;r2SxaJ0nJ%UbK5o$?%BTr&LKlh9VVAf+t~5cvE5eFrqhYzUOTV|$!sW6FKO6X=bKX z+L(Htk4$rXaF9=DRo$+NOsmWkO?qB+bz_cqiCwi_X3BP_+y|pax2E=TRXs_YS)G@Y zajmE3uBtz#O>1gXwTqcaugK5f=3jcQ)2_{n^sKJ+;@7+hHp9E0b#wbp&%BlJX2XQ_ z!q?Zs3o!iydvP%9Zi;-QMulz~MZoYY_0Pe9fFCVJ}MbsNWqbmya`Lmsp=FR1F z)-IBPl*SqDZC%}2P6ZL8zn^!hA6|9xuT$|6$dV>s4OPL&IPz_jZX|2nwn&M+JNZX3UTxp=sE;gRY zRm7tf%Oi&~)e}x)VOaJpOAfPy2ZxzJgvX#L(plFAkt3%<$kwLq>e9U+WB0ra;>wtK zvu_t*csX_nHx`6<%vFUHu;DzQ28I_hCs1PR^TDvVXaH6L1^6GF5(o%qpTbov({a_6 znYzo{TQ$6Rt)8i`og-16Lgntx0=B#pj_*`KEN4Z*Kbu5C%c`&|`Q{3JNdPg|MQ30V zV-RP1UgeqUX4z^JU=73UNV&FP?tYV<0c_F&lK!xh4gko>QXzT0OF02;s9ha$Q+fVe z9rDbufnQyyDa2Y-+w>uZm zn&|9XxSd;0L;IZvP^~k?Gns06)Kaa;01ILJUc2x%h~SPF`PKt1~~Z%p#cAbQvw0u>{Gb9 zp{KATQJ%sg+MNYUu^gYHSpM0IVg(Ss+pNpBpjcM#79VR^rC6C*p5t&QLghhQHeSn8 z2KFLUR<@H+H_{(_wi2QYNz@0fY$ALq@P&#Q?H+Q3%k&pee2gP|m1>|rc0zgjGi6=D ziRsDcFK`>@2`W7$k{OPZM!kR|CN67!E6Gj(w7eI>bn$D1l}Rg1h*kwedv1@@+c=9Q zh_dL1t0?3Ue>jDs`{+O5FLtLtePN|p-}XJ3{*HkOs_b$_L$TFxmt& z;T!Tz7O*>z7!(K%MO`>Zy{k&I_|xbbws6U-^p$8)B;**?X*uF;lMv)iP7+ZmF`b^1 z`%t#@B+1n2m5UmaY1>H46y!2=5}8nLkK<&r1Q#K)du_bJL92%p9#(=p zkkTkD3F#%m)n}W_UhGr$!5bzr??|);fXB}4;nW{m+luQ-UbNcXADv=9(DlNHikw?c zhQDX=Hv=+o4v2i|Q@Cu+d)MnChSX!x@^p9f9EZ~50#E(Hs zG(3Ro#PEt5fV<2?ZTAX3`4|Bg4z8?`s}`>K#C5xaC~uT5;3Gh`P=2!s$!u@&0~CJs zSiO1;MQ~lx91pbJxY9h8RQ6_H7f1H820mxOm#o&5rfCK%E2Lvh?ADKP|8s85Z(Jpf zyBc`ZDseEdw*IH9kP%i9cGA1b1Xfp+;GilR9;g>zHt*ORAD;7{OzYC!MAJ2UD|5SY z#=hhOjR%b{dI$q(_M(od09b3Embc+9JmBlCy7d!E8N(vMMzy+|+``u82>74Z`%K31{J)-uDs>}`(S;!l95yD5D6Rb{1a;4}P- z+Kl0|b~%C*=N)_sg%5>M>x$9=ndMacSk+uHI&1K={+yIw-4BKKi98NVj5`KlJ_`;Bp MbTxGUFW5b2Fg?-IrT_o{ diff --git a/.git copy/objects/be/16fa5bc21e4fbc579a8be0e47c4ba64cc17514 b/.git copy/objects/be/16fa5bc21e4fbc579a8be0e47c4ba64cc17514 deleted file mode 100644 index 459576a3..00000000 --- a/.git copy/objects/be/16fa5bc21e4fbc579a8be0e47c4ba64cc17514 +++ /dev/null @@ -1,2 +0,0 @@ -x}j0 wSH)2`cK/{%6W S>;VQK֮C 7TLe%qqBeL>BֺQ9[;rwkZ7B_FxzZNeze) S< >HZW>+^B%/5x0{eK傱dYk0WFgyOu&t#ok̓-<.c \ No newline at end of file diff --git a/.git copy/objects/be/b09d2c180bec7b940011a887ec35c1ccf60fde b/.git copy/objects/be/b09d2c180bec7b940011a887ec35c1ccf60fde deleted file mode 100644 index f679f20746e441cabc87752f86a72edecd41b5eb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 234 zcmV5F<~$?FfcPQQP4}zEJ-XWDauSLElDkAuy)MQI$HVbcUshL z-#@pOty)#6*n*@oGd(ZAD3u|tYTbtu6BqU*mT#CH?AZNvPS#F&69XVn(912$V`$sx zv@h4sYj?-O?IsPeUfzzqFTX$y0ZNxM?CqGgUrBsR{wk)45pj%bq)Z%FMj*-SCFiCv zOmgL)tZq`U-s#;tPl=NCo0w-8a6#1+qVHrzO(8JJ`Z0Ny!cQr#?Z3jhEB diff --git a/.git copy/objects/bf/30b47dd0d5d6393384ce077b993d8ce96c6ab6 b/.git copy/objects/bf/30b47dd0d5d6393384ce077b993d8ce96c6ab6 deleted file mode 100644 index ab35d48af83926d00f4ebce91abad7b09542de83..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 49 zcmV-10M7q-0V^p=O;s>9VK6ZO0)^Cy#N2|MREEVt`>ts^{$}0&QavPe&k5hd@BLB% HG5`?K@SYXp diff --git a/.git copy/objects/c3/620d7e46ab42fd1535a18d7cbaefc6444513b0 b/.git copy/objects/c3/620d7e46ab42fd1535a18d7cbaefc6444513b0 deleted file mode 100644 index 87a79e6a2dfc1d6b4f8418d40b5f600baf83457b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 81 zcmV-X0IvUd0ZYosPf{>9WGF~X&Q45ERY=ay)l02N%q_@C)k{gu&DSeVEh@`QPA#_P n;wmUj%E?StNX|(tE>;LhO-#;6EeeK6D^zmmPk0*5jshT9 diff --git a/.git copy/objects/c5/56e37b274e278d6264571320e2c58ae4f95222 b/.git copy/objects/c5/56e37b274e278d6264571320e2c58ae4f95222 deleted file mode 100644 index b5cee064860404cd946e80f96fa07ae0fc76b870..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 128 zcmV-`0Du2@0V^p=O;s>7F<>w>FfcPQQE<*LEh-5tNnXbXFXJPa7k%OYF-J7@>;nJa~zP>Kbsq`miF>2bmk|mT%I0xJb$Kcm!1oTiVo$v?? zsf7Z9onHFT-6ZDE!1oeR3{FAg8kp^LmW`>}7Nsx5C7`rOnEaLXfS^gP2~>ts5u8xM zZpOqS91o9NKo(Nql!~-U!QI{VNG{z)-S|y5PP4-azp`e%B~&PdOQFu}vaM13i`x<# zFOAL)Bcm;HDYP~o<_H)N4~c!i3D5oRE%4~s!4%%Tq~_(eHyEmEBIjj?`wK>jzL%Lb zj^g#Iv0MXRPNtdUP3trM%$Ml-U{Ph`NgQ3$s72pe9Roe!{oWxCSf4k9##7`$=@2vdbK0Ge6|_zD*sqLG zR1=5}#`TZX#8k82^^^~ji~`U)KUkz4ZlcWA{5?7xu>X&a;D9QGivPF+dehK_?n7e6 z2NLK(bS}d7oSp7*_kh-C1w3x?;TZSGNIwjGbnOl8KDg|5f!El=CmJS5aKMFwM@pl; kklKC4P23pT*mRuFb?%GokTA0Jd+snH6R)WI-&ELe!Wh9($^ZZW diff --git a/.git copy/objects/c7/58513be7b7063e058be587b8ee2f3c409c3e2c b/.git copy/objects/c7/58513be7b7063e058be587b8ee2f3c409c3e2c deleted file mode 100644 index 2e6015d15364903676951905c4c1dc9739f51e18..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 79 zcmV-V0I>gf0V^p=O;s>6XD~4U0)?!^vP6ai#xLbI92$&C2s%# diff --git a/.git copy/objects/c8/3cc084f1f68ebd9699793a988474cb64dcb40e b/.git copy/objects/c8/3cc084f1f68ebd9699793a988474cb64dcb40e deleted file mode 100644 index 6b9f75d3ab56701166d541281c53a9fe6d5008e7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 74 zcmV-Q0JZ;k0V^p=O;s>6VlXiP0)^bf%shr^>(r!QoZ4Ze#$KGiRo;=uv;E>>h;&J6 gaS6l!x5>VhXMSk*D{e~vSzD`LDbk+>09=Y1?hp(lW&i*H diff --git a/.git copy/objects/cc/112f124f8bdebf8a8a7c7250b0330fff62d7b0 b/.git copy/objects/cc/112f124f8bdebf8a8a7c7250b0330fff62d7b0 deleted file mode 100644 index 75228d0d33289bd01a1eb353a52318d7648dcae6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 46 zcmV+}0MY+=0V^p=O;s>9WH2!R0)>>++9WH2!R0)>>++5F<~$?FfcPQQP4}zEJ-XWDauSLElDkAuy)MQI$HVbcUshL z-#@pOty)#6*n*@oGd(ZAD3u|tYTbtu6BqU*mT#CH?AZNvPS#F&69XVn(912$V`$sx zv@h4sYj?-O?IsPeUfzzqFTX$y0ZNxM?CqGgUrBsR{wk)45pj%bq)Z%FMj*-SCFiCv zOmgL)tZq`U-s#;tPl=NCo0w-8a6#1+5F<~$?FfcPQQP4}zEJ-XWDauSLElDkAuy)MQI$HVbcUshL z-#@pOty)#6*n*@oGd(ZAD3u|tYTbtu6BqU*mT#CH?AZNvPS#F&69XVn(912$V`$sx zv@h4sYj?-O?IsPeUfzzqFTX$y0ZNxM?CqGgUrBsR{wk)45pj%bq)Z%FMj*-SCFiCv zOmgL)tZq`U-s#;tPl=NCo0w-8a6#1+gf0V^p=O;s>6XD~4U0)?!^vP1@ls^{G$7Opv*iyf3?CVMlx+eddpq>ECE l^Gl18Q;QiKq>Lq&AAhK6xoyMe#0Sp*4=FDe1ps~H8nV+TAiw|s diff --git a/.git copy/objects/d1/fb0d886c44ce62fa169d1b2909a9398e84700f b/.git copy/objects/d1/fb0d886c44ce62fa169d1b2909a9398e84700f deleted file mode 100644 index 12d8d1817e6d531e48308c94e930b5184ac9eef3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 128 zcmV-`0Du2@0V^p=O;s>7F<>w>FfcPQQE<*LEhux=JPFStYxY7YXt!B3OQTxIylAv diff --git a/.git copy/objects/d2/95e68a369a0bb2330435f97f291c1916fea3a0 b/.git copy/objects/d2/95e68a369a0bb2330435f97f291c1916fea3a0 deleted file mode 100644 index 5dbe671617ae8ebf9e5b337756f5eddb93aa2d0c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 49 zcmb9VK6ZO0)^Cy#N2|MR0gZ5rLB`M{hYM#~5 diff --git a/.git copy/objects/d4/eb948bb03f3f9805358f0724e239e9228a88b5 b/.git copy/objects/d4/eb948bb03f3f9805358f0724e239e9228a88b5 deleted file mode 100644 index 91d7019bc069219981bd566185d5d9c3ec13978d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 234 zcmV5F<~$?FfcPQQP4}zEJ-XWDauSLElDkAuy)MQI$HVbcUshL z-#@pOty)#6*n*@oGd(ZAD3u|tYTbtu6BqU*mT#CH?AZNvPS#F&69XVn(912$V`$sx zv@h4sYj?-O?IsPeUfzzqFTX$y0ZNxM?CqGgUrBsR{wk)45pj%bq)Z%FMj*-SCFiCv zOmgL)tZq`U-s#;tPl=NCo0w-8a6#1+6VlXiP0)^bf%shsLUQ_YH6U-6n%S!H@g-DmA g7MC#mf1B)EdFF>^zv8C!pS896l_LFF0K@YgT=`2S`~Uy| diff --git a/.git copy/objects/d7/11a0f9bce94ce749752e2304134d097ad5ecb5 b/.git copy/objects/d7/11a0f9bce94ce749752e2304134d097ad5ecb5 deleted file mode 100644 index 666c2ca8ca17a4ea477c2b0d4a0c3333dfa038d0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 80 zcmV-W0I&ae0V^p=O;s>6XD~4U0)?!^vP6cYcVEsKA35NEbKBGvm&HHYOn3O-2$3#I mEzU13N=_|iaF8;VSbqGWrscK`pA#QA|39R>SQG$r?;r#dJ|SxW diff --git a/.git copy/objects/d7/44156af1b258be1ad507cc87238d9606581d8b b/.git copy/objects/d7/44156af1b258be1ad507cc87238d9606581d8b deleted file mode 100644 index 02d8d4c2842acc88771c55b423fbaa872087e86b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 76 zcmV-S0JHyi0ZYosPf{>5U?@mT&Q45ERY=ay)l02N%q_@C)k{gu&DYD#Pf5)ww&vn0 iC{4=AOjbzFNh~f_2uV#$&PXj%sOI9TVW -v~M}1[8;6fFfGSK$R\m \4"0Z-VR `{]h"˗=U8uoSB0 \ No newline at end of file diff --git a/.git copy/objects/d9/2889f28db14ae497f8983ff7f8bc31a089e96a b/.git copy/objects/d9/2889f28db14ae497f8983ff7f8bc31a089e96a deleted file mode 100644 index 521db489..00000000 --- a/.git copy/objects/d9/2889f28db14ae497f8983ff7f8bc31a089e96a +++ /dev/null @@ -1 +0,0 @@ -x;0D}-C!(SQ=,ym) iӌG:NUO }Yh-|l tJ:3dXPE(gvC̰>a.VRCq?pSci]Cd!UJ7 \ No newline at end of file diff --git a/.git copy/objects/d9/d206914e101f3a2a6ae209dfc40c800df899fb b/.git copy/objects/d9/d206914e101f3a2a6ae209dfc40c800df899fb deleted file mode 100644 index bce02746069b835dec72c2857245c2c899ae105d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 166 zcmV;X09pTd0V^p=O;s>7HDNF`FfcPQQE*Ak&37y)$jMAjEXmBz)5}UMOJqpdYO%1U z^&RG3Tcz=KBL(vxrmf4D1 z5+SN`^HWlDiWwHheE5BHHp_MPSFx`aq*W!bYniG-6cncxm1QQU7BlF{aeP@RCsSx4 U?Y*Pn!G_}#ClqP{0C2TIBgD8%`~Uy| diff --git a/.git copy/objects/da/50f00ab691b4990d1e69895113255906630b6e b/.git copy/objects/da/50f00ab691b4990d1e69895113255906630b6e deleted file mode 100644 index 4020878d..00000000 --- a/.git copy/objects/da/50f00ab691b4990d1e69895113255906630b6e +++ /dev/null @@ -1,2 +0,0 @@ -xIn0}+n ݯ`- EV֨CU2MCS"Q.`Wr0.1ZТ6 sQ_Ten ;#XzNEIyr&1LY{DX*0V^p=O;s?muwXDWFfcPQQE<*LEhHSD9Oyv)5}UM zOJwkqU=h)Mxhijo+p&EA)0u8(Z|&EG>hsJiOU%hk@yshIEkVRA zlFr@FcJF1?VyLd*lG2payb{NpqSVBcO4q!i{G6OrbX#v~bbjjH==Eg!j~Vvgf9x?_ z(D^b8RX+~rS|!(sh-sVc-juP^E}*+U+v7#;RH(*~)WqbB)FK=jStfpHdoPu<+c8RB Rj=i2+|IQE91pri1b)Fh~b4CCF diff --git a/.git copy/objects/e0/3d43c3f8bfdf91a49a8dd67b7f5814965e5887 b/.git copy/objects/e0/3d43c3f8bfdf91a49a8dd67b7f5814965e5887 deleted file mode 100644 index 3de9888d..00000000 --- a/.git copy/objects/e0/3d43c3f8bfdf91a49a8dd67b7f5814965e5887 +++ /dev/null @@ -1 +0,0 @@ -xMN1 Y# 8Co`:R'ALM=@{Wڶl/8msB,-9bb_LL.u-&)һnAmv$3c.`Pxsp+VD:vS;zy+mM ^ZMw y<_?XJ;.;~V7q.SH \ No newline at end of file diff --git a/.git copy/objects/e1/6ed0c478ac036b584748731a0f19f0becaf70c b/.git copy/objects/e1/6ed0c478ac036b584748731a0f19f0becaf70c deleted file mode 100644 index 23f0adad223b48c3ddcf2850a2061bd6e0b699f8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 79 zcmV-V0I>gf0V^p=O;s>6XD~4U0)?!^vP6b#G5a=mF=gh*>1GF4>G4kbc-b=>B3+bP loL^d$oLbD_AZ0AE{P;sn%WWGzCq8ige@J<;C;*tQ8><~`BDDYj diff --git a/.git copy/objects/e3/0297abdc52bf9965363634367d4cbb190db9d6 b/.git copy/objects/e3/0297abdc52bf9965363634367d4cbb190db9d6 deleted file mode 100644 index 0d71ad57fc33bac391024b22bd8b48be958d0760..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 234 zcmV5F<~$?FfcPQQP4}zEJ-XWDauSLElDkAuy)MQI$HVbcUshL z-#@pOty)#6*n*@oGd(ZAD3u|tYTbtu6BqU*mT#CH?AZNvPS#F&69XVn(912$V`$sx zv@h4sYj?-O?IsPeUfzzqFTX$y0ZNxM?CqGgUrBsR{wk)45pj%bq)Z%FMj*-SCFiCv zOmgL)tZq`U-s#;tPl=NCo0w-8a6#1+@~ diff --git a/.git copy/objects/e3/1ed9a56ef8abc73f927b3933bb789d51040a01 b/.git copy/objects/e3/1ed9a56ef8abc73f927b3933bb789d51040a01 deleted file mode 100644 index b3ab6a5ce35e9c3afe72863034543fc4bca7698e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 49 zcmb6XD~4U0)?!^vP1@%KXGLf(o5zY?z+Q$EPlVrge_-0Aksyt m#rdU0$*IK*4pPPv%a1?QwA{AgbK(Q%|A&+pivj={^By}wU?d>` diff --git a/.git copy/objects/e4/f4865a18509b07eea278289a7f1b011ed9f7e5 b/.git copy/objects/e4/f4865a18509b07eea278289a7f1b011ed9f7e5 deleted file mode 100644 index 6b7c4ea5374348597011515755a50f4b8b100086..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 49 zcmb5F<~$?FfcPQQP4}zEJ-XWDauSLElDkAuy)MQI$HVbcUshL z-#@pOty)#6*n*@oGd(ZAD3u|tYTbtu6BqU*mT#CH?AZNvPS#F&69XVn(912$V`$sx zv@h4sYj?-O?IsPeUfzzqFTX$y0ZNxM?CqGgUrBsR{wk)45pj%bq)Z%FMj*-SCFiCv zOmgL)tZq`U-s#;tPl=NCo0w-8a6#1++W-In diff --git a/.git copy/objects/e7/4de7e1ae1be7603b36fda1d3992d86353939e6 b/.git copy/objects/e7/4de7e1ae1be7603b36fda1d3992d86353939e6 deleted file mode 100644 index b69d8eda..00000000 --- a/.git copy/objects/e7/4de7e1ae1be7603b36fda1d3992d86353939e6 +++ /dev/null @@ -1,2 +0,0 @@ -xKN1Yڿ[B}Nю!bf,'g ZTS_GeU 䖭D -i 9p踶*C U"6D)ĶfV3Gkc!5r}n}Key=lJ.qʔt?: 9ߤdY`/n0;^^T. \ No newline at end of file diff --git a/.git copy/objects/e7/d92d39e3447fd5a0b87edb8888f73ff0ea016d b/.git copy/objects/e7/d92d39e3447fd5a0b87edb8888f73ff0ea016d deleted file mode 100644 index a98ed821..00000000 --- a/.git copy/objects/e7/d92d39e3447fd5a0b87edb8888f73ff0ea016d +++ /dev/null @@ -1 +0,0 @@ -x}=n0Ss)ADJU4ۤ x:12%BBefR^Z>&b􅪕8)͔$C jcd].7wT΄Օ dֈ-`x=AE&PvP-c>B dcsux 6\+ fuʋ0|s,t6z`Fl>| fL1h['܏siun;f/|=9QnXe24'M4yNb6gv \ No newline at end of file diff --git a/.git copy/objects/eb/29c00ec879b26784887a3edd2d13eb819932f3 b/.git copy/objects/eb/29c00ec879b26784887a3edd2d13eb819932f3 deleted file mode 100644 index e32bd91e6e4e5074f844afafad62dde41421177a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 165 zcmV;W09yZe0V^p=O;s>7HDNF`FfcPQQE*Ak&37y)$jMAjEXmBz)5}UMOJqpdYO%1U z^&RG3Tcz=KBL(vxrmf4D1 z5+SN`^HWlDiWxK*C#r4V_B1(o1EcAu)@TMUg#Z(Xg5uPovdrYvVg^2~FI!*F2-ZC% Tb!L61_58Q8@j==E3oAdKd|6HM diff --git a/.git copy/objects/eb/bbed024c1a46d09a7515bfaf1b078b76e839a7 b/.git copy/objects/eb/bbed024c1a46d09a7515bfaf1b078b76e839a7 deleted file mode 100644 index 72a8b657e7f80d695dbe7968f6366a2907775827..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 166 zcmV;X09pTd0V^p=O;s>7HDNF`FfcPQQE*Ak&37y)$jMAjEXmBz)5}UMOJqpdYO%1U z^&RG3Tcz=KBL(vxrmf4D1 z5+SN`^HWlDiWxRdUHoa8v+tP)yFcv@~ diff --git a/.git copy/objects/ef/fac31e9124b8cb339ebb34a31bca4dad0447aa b/.git copy/objects/ef/fac31e9124b8cb339ebb34a31bca4dad0447aa deleted file mode 100644 index c10ade40..00000000 --- a/.git copy/objects/ef/fac31e9124b8cb339ebb34a31bca4dad0447aa +++ /dev/null @@ -1,2 +0,0 @@ -xK0 Y#&#!GIRmU)zOMp)@VVeRjVbĺ;/j'2Yګ' I U,UMj5ĿɄG9 :0vNC۔=TĞ%XE4 ]B0Ǿ6 - ٴ:kOk \ No newline at end of file diff --git a/.git copy/objects/f2/f9341a809880c0f359fa213b78745612a6e71f b/.git copy/objects/f2/f9341a809880c0f359fa213b78745612a6e71f deleted file mode 100644 index 75c96d2c3c58504416b9b57efccda0215c2537ad..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 79 zcmV-V0I>gf0V^p=O;s>6XD~4U0)?!^vP1^yWTpU7qsp?Fuz4F;7D_s@{b99*NEf9R l=a&{Grxr6fNEu5kKmJhDa@&T_i4UCrA5vZ{3II{P8T+hpAA$e? diff --git a/.git copy/objects/f4/0b207dd11a858e8d009760a18d5ba4ee746198 b/.git copy/objects/f4/0b207dd11a858e8d009760a18d5ba4ee746198 deleted file mode 100644 index 4418733071c1091b7dd667c1a5e6b71789815c37..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 46 zcmV+}0MY+=0V^p=O;s>9WH2!R0)>>++8P^1t1JAvai-B{00KS_ EHKLdkNB{r; diff --git a/.git copy/objects/f4/0f2eb3ca8fe00e004c6a3a1e4c4476797d7c3a b/.git copy/objects/f4/0f2eb3ca8fe00e004c6a3a1e4c4476797d7c3a deleted file mode 100644 index 27df7658ba4209f45d779959923a55b277df6f08..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 45 zcmb9VK6ZO0)^Cy#N2|MR0gNAEpwU$gfE&){om1lYktCE_r*~F HCb$qT&K(qR diff --git a/.git copy/objects/f4/dea3e1676b8ead2ad0bcd73fd8a33180b21f4f b/.git copy/objects/f4/dea3e1676b8ead2ad0bcd73fd8a33180b21f4f deleted file mode 100644 index d3be16c06fda2ec95122454747d25aeb1426f88a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 166 zcmV;X09pTd0V^p=O;s>7HDNF`FfcPQQE*Ak&37y)$jMAjEXmBz)5}UMOJqpdYO%1U z^&RG3Tcz=KBL(vxrmf4D1 z5+SN`^HWlDiW#P!^au>Px#IS>>W1|;ss~y3zmwbxQBa&(RF;{XTFjs)$MI#QoJ^sG UwD*pN2OEx0oKUC*0FgmLIBAMdOaK4? diff --git a/.git copy/objects/f7/370644ae6f54875205c8be52a8224d49b430e2 b/.git copy/objects/f7/370644ae6f54875205c8be52a8224d49b430e2 deleted file mode 100644 index 9c284728c0267334c4d6875ee0219ae4d6a0b395..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 234 zcmV5F<~$?FfcPQQP4}zEJ-XWDauSLElDkAuy)MQI$HVbcUshL z-#@pOty)#6*n*@oGd(ZAD3u|tYTbtu6BqU*mT#CH?AZNvPS#F&69XVn(912$V`$sx zv@h4sYj?-O?IsPeUfzzqFTX$y0ZNxM?CqGgUrBsR{wk)45pj%bq)Z%FMj*-SCFiCv zOmgL)tZq`U-s#;tPl=NCo0w-8a6#1+g*dbz2GF!=eD{Lj52LLs z!||N^or@Kh736vT)ZzLQHxz0q5dFfU;}j7pBodNPuFpxrL?@Mj4?JMh8^+P?R=nEt zuCF+&q2^d?xKdo-se+#b?9(YWU_+rainR?GFBar{q_$YlSRm3yQ_z@W^=&6jk$zg3 zlZIsHeTL}!EHF5exigKH>F@#$9Vy%rDcozCAtQZMnt6uB=Ax}*rCSuwWwja5DPx2g z@EU3Ya6!^7n4+dv?c-wNj6pI2dYkaL&TZnZ>QdYHinCX~i>-Ntw)P&A(`oAdR$hzC wd(?AgoKixlbMDC8VYJPdC)}XjS2~3%T1)HAlJ*kzOTmS$7 diff --git a/.git copy/objects/f8/a93bab7b831f10e428f1d0274d818d40ac5d53 b/.git copy/objects/f8/a93bab7b831f10e428f1d0274d818d40ac5d53 deleted file mode 100644 index 48e8d96d..00000000 --- a/.git copy/objects/f8/a93bab7b831f10e428f1d0274d818d40ac5d53 +++ /dev/null @@ -1,3 +0,0 @@ -xMO0 9W8$T i6!J qdMi{ &qkǛJrBUK+R&W"٬LXxB0GC'XHCu[HQB)iŴ!j+Y|l$Q|eXevAh5s #Yp2{U@Az-~h6O~2)rȅ*Zʩو -!; -big0[w/aԀrVsXC;bLW4/J39%S]^R `%ͫ9Дˮmq p2H'ȧ ;.c./V \ No newline at end of file diff --git a/.git copy/objects/f9/525a325302fbe8a32b8faaf78422ba7ff803d1 b/.git copy/objects/f9/525a325302fbe8a32b8faaf78422ba7ff803d1 deleted file mode 100644 index 63ac4c4b9fca99a97789f49c618114c76d215d8d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 234 zcmV5F<~$?FfcPQQP4}zEJ-XWDauSLElDkAuy)MQI$HVbcUshL z-#@pOty)#6*n*@oGd(ZAD3u|tYTbtu6BqU*mT#CH?AZNvPS#F&69XVn(912$V`$sx zv@h4sYj?-O?IsPeUfzzqFTX$y0ZNxM?CqGgUrBsR{wk)45pj%bq)Z%FMj*-SCFiCv zOmgL)tZq`U-s#;tPl=NCo0w-8a6#1+c3H R "4jʕ3]ǐ#3Oh -j(<M%H)Ԅ}ళMm ԙIA \ No newline at end of file diff --git a/.git copy/objects/fb/027c3f9100789b777599d55005c7126b3ae420 b/.git copy/objects/fb/027c3f9100789b777599d55005c7126b3ae420 deleted file mode 100644 index 8c069ebe71f12acdaf89275739ead77aeddbc180..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 166 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 Date: Wed, 11 Mar 2026 11:38:30 +0400 Subject: [PATCH 18/19] All updated --- .../Exceptions/GlobalExceptionHandler.java | 40 ++++++++++ .../demo/controllers/CourseController.java | 77 +++++++++++-------- .../demo/controllers/StudentController.java | 71 +++++++++-------- .../demo/controllers/TeacherController.java | 41 ++++------ .../java/com/example/demo/models/Course.java | 50 ++++++------ .../java/com/example/demo/models/Student.java | 24 +++--- .../java/com/example/demo/models/Teacher.java | 5 ++ .../example/demo/services/CourseService.java | 50 +++++++----- .../example/demo/services/StudentService.java | 64 ++++++++------- .../example/demo/services/TeacherService.java | 37 +++++---- .../demo/services/CourseServiceTest.java | 59 ++++++++++++++ .../demo/services/StudentServiceTest.java | 58 ++++++++++++++ .../demo/services/TeacherServiceTest.java | 58 ++++++++++++++ 13 files changed, 441 insertions(+), 193 deletions(-) create mode 100644 src/main/java/com/example/demo/Exceptions/GlobalExceptionHandler.java create mode 100644 src/test/java/com/example/demo/services/CourseServiceTest.java create mode 100644 src/test/java/com/example/demo/services/StudentServiceTest.java create mode 100644 src/test/java/com/example/demo/services/TeacherServiceTest.java diff --git a/src/main/java/com/example/demo/Exceptions/GlobalExceptionHandler.java b/src/main/java/com/example/demo/Exceptions/GlobalExceptionHandler.java new file mode 100644 index 00000000..a3f47e5a --- /dev/null +++ b/src/main/java/com/example/demo/Exceptions/GlobalExceptionHandler.java @@ -0,0 +1,40 @@ +package com.example.demo.Exceptions; + +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.ControllerAdvice; +import org.springframework.web.bind.annotation.ExceptionHandler; + +@ControllerAdvice +public class GlobalExceptionHandler { + + @ExceptionHandler(CourseNotFoundException.class) + public ResponseEntity handleCourseNotFound(CourseNotFoundException ex) { + return ResponseEntity.status(HttpStatus.NOT_FOUND).body(ex.getMessage()); + } + + @ExceptionHandler(StudentNotFoundException.class) + public ResponseEntity handleStudentNotFound(StudentNotFoundException ex) { + return ResponseEntity.status(HttpStatus.NOT_FOUND).body(ex.getMessage()); + } + + @ExceptionHandler(TeacherNotFoundException.class) + public ResponseEntity handleTeacherNotFound(TeacherNotFoundException ex) { + return ResponseEntity.status(HttpStatus.NOT_FOUND).body(ex.getMessage()); + } + + @ExceptionHandler(InvalidInputException.class) + public ResponseEntity handleInvalidInput(InvalidInputException ex) { + return ResponseEntity.badRequest().body(ex.getMessage()); + } + + @ExceptionHandler(StudentAlreadyEnrolledException.class) + public ResponseEntity handleStudentAlreadyEnrolled(StudentAlreadyEnrolledException ex) { + return ResponseEntity.badRequest().body(ex.getMessage()); + } + + @ExceptionHandler(Exception.class) + public ResponseEntity handleGeneralException(Exception ex) { + return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("An unexpected error occurred: " + ex.getMessage()); + } +} \ No newline at end of file diff --git a/src/main/java/com/example/demo/controllers/CourseController.java b/src/main/java/com/example/demo/controllers/CourseController.java index 98fb26bc..15bd1dae 100644 --- a/src/main/java/com/example/demo/controllers/CourseController.java +++ b/src/main/java/com/example/demo/controllers/CourseController.java @@ -2,56 +2,71 @@ import com.example.demo.models.Course; import com.example.demo.services.CourseService; +import jakarta.validation.Valid; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; import java.util.List; +import java.util.Map; @RestController @RequestMapping("/courses") public class CourseController { -private final CourseService courseService; + private final CourseService courseService; public CourseController(CourseService courseService) { this.courseService = courseService; } @GetMapping - public ResponseEntity>getAllCourses(){ - List allCourses=courseService.getAllCourses(); - return ResponseEntity.ok(allCourses); + public ResponseEntity> getAllCourses() { + return ResponseEntity.ok(courseService.getAllCourses()); } @PostMapping - public ResponseEntity createCourse(@RequestBody Course course){ - Course newone= courseService.createCourse(course.getName(), course.getPrice()); -return ResponseEntity.ok(newone); - } -@GetMapping("/{courseId}") - public ResponseEntity getCourseById(@PathVariable String courseId){ - Course kursId=courseService.getCourseById(courseId); - return ResponseEntity.ok(kursId); -} -@PutMapping("/{courseId}") - public ResponseEntityuptadeCourse(@PathVariable String courseId,@RequestParam String newName,@RequestParam double newPrice){ - courseService.updateCourse(courseId,newName,newPrice); -return ResponseEntity.ok().build(); - } -@DeleteMapping("/{courseId}") - public ResponseEntity deleteCourse(@PathVariable String courseID){ - courseService.deleteCourse(courseID); + public ResponseEntity createCourse(@Valid @RequestBody Course course) { + Course created = courseService.createCourse(course.getName(), course.getPrice()); + return ResponseEntity.ok(created); + } + + @GetMapping("/{courseId}") + public ResponseEntity getCourseById(@PathVariable String courseId) { + return ResponseEntity.ok(courseService.getCourseById(courseId)); + } + + @PutMapping("/{courseId}") + public ResponseEntity updateCourse(@PathVariable String courseId, @RequestBody Map updates) { + String newName = (String) updates.get("name"); + Double newPrice = updates.containsKey("price") ? ((Number) updates.get("price")).doubleValue() : null; + courseService.updateCourse(courseId, newName, newPrice); + return ResponseEntity.ok().build(); + } + + @DeleteMapping("/{courseId}") + public ResponseEntity deleteCourse(@PathVariable String courseId) { + courseService.deleteCourse(courseId); return ResponseEntity.ok().build(); -} -@PostMapping("/{courseId}/assign-teacher/{teacherId}") - public ResponseEntityassignTeacherToCourse(@PathVariable String courseId, @PathVariable String teacherId){ - courseService.assignTeacherToCourse(courseId,teacherId); -return ResponseEntity.ok().build(); } -@GetMapping("/teacher/{teacherId}") - public ResponseEntity> getCocursesByTeacher(@PathVariable String teacherId){ - List teachers=courseService.getCoursesByTeacher(teacherId); -return ResponseEntity.ok(teachers); + + @PostMapping("/{courseId}/assign-teacher/{teacherId}") + public ResponseEntity assignTeacherToCourse(@PathVariable String courseId, @PathVariable String teacherId) { + courseService.assignTeacherToCourse(courseId, teacherId); + return ResponseEntity.ok().build(); + } + + @GetMapping("/teacher/{teacherId}") + public ResponseEntity> getCoursesByTeacher(@PathVariable String teacherId) { + return ResponseEntity.ok(courseService.getCoursesByTeacher(teacherId)); } -} + @GetMapping("/profit/{courseId}") + public ResponseEntity getCourseProfit(@PathVariable String courseId) { + return ResponseEntity.ok(courseService.getCourseProfit(courseId)); + } + + @GetMapping("/total-profit") + public ResponseEntity getTotalProfit() { + return ResponseEntity.ok(courseService.getTotalProfit()); + } +} \ No newline at end of file diff --git a/src/main/java/com/example/demo/controllers/StudentController.java b/src/main/java/com/example/demo/controllers/StudentController.java index 2b2a7569..456f1185 100644 --- a/src/main/java/com/example/demo/controllers/StudentController.java +++ b/src/main/java/com/example/demo/controllers/StudentController.java @@ -3,65 +3,68 @@ import com.example.demo.models.Course; import com.example.demo.models.Student; import com.example.demo.services.StudentService; +import jakarta.validation.Valid; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; import java.util.List; +import java.util.Map; @RestController @RequestMapping("/students") public class StudentController { - private final StudentService studentService; + private final StudentService studentService; public StudentController(StudentService studentService) { this.studentService = studentService; } @PostMapping - public ResponseEntity createStudent(@RequestBody String name, String address, String email) { - Student newStudent = studentService.createStudent(name, address, email); - return ResponseEntity.ok(newStudent); + public ResponseEntity createStudent(@Valid @RequestBody Student student) { + Student created = studentService.createStudent(student.getName(), student.getAddress(), student.getEmail()); + return ResponseEntity.ok(created); } -@GetMapping("/{studentId}") - public ResponseEntitygetStudentById(@PathVariable String studentId){ - Student studentById=studentService.getStudentById(studentId); - return ResponseEntity.ok(studentById); -} - @PutMapping("/{courseId}") - public ResponseEntityupdateStudent(@RequestBody String studentId, String newName, String newAddress, String newEmail){ + + @GetMapping("/{studentId}") + public ResponseEntity getStudentById(@PathVariable String studentId) { + return ResponseEntity.ok(studentService.getStudentById(studentId)); + } + + @PutMapping("/{studentId}") + public ResponseEntity updateStudent(@PathVariable String studentId, @RequestBody Map updates) { + String newName = updates.get("name"); + String newAddress = updates.get("address"); + String newEmail = updates.get("email"); studentService.updateStudent(studentId, newName, newAddress, newEmail); -return ResponseEntity.ok().build(); + return ResponseEntity.ok().build(); } + @DeleteMapping("/{studentId}") - public ResponseEntitydeleteStudent(@PathVariable String studentId) { + public ResponseEntity deleteStudent(@PathVariable String studentId) { studentService.deleteStudent(studentId); return ResponseEntity.ok().build(); } - @PostMapping("/{studentId}/courses/{courseId}") - public ResponseEntityenrollStudentInCourse(@PathVariable String studentId,@PathVariable String courseId) { - studentService.enrollStudentInCourse(studentId,courseId); - return ResponseEntity.ok().build(); - } - @DeleteMapping("/{studentId}/course") - public ResponseEntityunenrollStudentFromCourse(@PathVariable String studentId){ - studentService.unenrollStudentFromCourse(studentId); + + @PostMapping("/{studentId}/enroll/{courseId}") + public ResponseEntity enrollStudentInCourse(@PathVariable String studentId, @PathVariable String courseId) { + studentService.enrollStudentInCourse(studentId, courseId); return ResponseEntity.ok().build(); + } + @DeleteMapping("/{studentId}/unenroll") + public ResponseEntity unenrollStudentFromCourse(@PathVariable String studentId) { + studentService.unenrollStudentFromCourse(studentId); + return ResponseEntity.ok().build(); } - @GetMapping("/{courseId}/students") - public ResponseEntity>getEnrolledStudents(String courseId) { - List studentEnrolled=studentService.getEnrolledStudents(courseId); - return ResponseEntity.ok(studentEnrolled); + + @GetMapping("/course/{courseId}") + public ResponseEntity> getEnrolledStudents(@PathVariable String courseId) { + return ResponseEntity.ok(studentService.getEnrolledStudents(courseId)); } + @GetMapping("/{studentId}/course") - public ResponseEntitygetCourseForStudent(String studentId) { - Course courseForStuden=studentService.getCourseForStudent(studentId); - return ResponseEntity.ok(courseForStuden); + public ResponseEntity getCourseForStudent(@PathVariable String studentId) { + return ResponseEntity.ok(studentService.getCourseForStudent(studentId)); } - - - - - -} +} \ No newline at end of file diff --git a/src/main/java/com/example/demo/controllers/TeacherController.java b/src/main/java/com/example/demo/controllers/TeacherController.java index a3bbf84e..47e41455 100644 --- a/src/main/java/com/example/demo/controllers/TeacherController.java +++ b/src/main/java/com/example/demo/controllers/TeacherController.java @@ -2,42 +2,44 @@ import com.example.demo.models.Teacher; import com.example.demo.services.TeacherService; +import jakarta.validation.Valid; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; import java.util.List; +import java.util.Map; @RestController @RequestMapping("/teachers") public class TeacherController { - private final TeacherService teacherService; + private final TeacherService teacherService; public TeacherController(TeacherService teacherService) { this.teacherService = teacherService; } + @PostMapping - public ResponseEntity createTeacher(@RequestBody Teacher teacher) { - Teacher createdTeacher = teacherService.createTeacher(teacher.getName(), teacher.getSalary()); - return ResponseEntity.ok(createdTeacher); + public ResponseEntity createTeacher(@Valid @RequestBody Teacher teacher) { + Teacher created = teacherService.createTeacher(teacher.getName(), teacher.getSalary()); + return ResponseEntity.ok(created); } @GetMapping("/{teacherId}") public ResponseEntity getTeacherById(@PathVariable String teacherId) { - Teacher teacher = teacherService.getTeacherById(teacherId); - return ResponseEntity.ok(teacher); + return ResponseEntity.ok(teacherService.getTeacherById(teacherId)); } @GetMapping public ResponseEntity> getAllTeachers() { - List teachers = teacherService.getAllTeachers(); - return ResponseEntity.ok(teachers); + return ResponseEntity.ok(teacherService.getAllTeachers()); } @PutMapping("/{teacherId}") - public ResponseEntity updateTeacher(@PathVariable String teacherId, - @RequestBody Teacher teacher) { - teacherService.updateTeacher(teacherId, teacher.getName(), teacher.getSalary()); + public ResponseEntity updateTeacher(@PathVariable String teacherId, @RequestBody Map updates) { + String newName = (String) updates.get("name"); + Double newSalary = updates.containsKey("salary") ? ((Number) updates.get("salary")).doubleValue() : null; + teacherService.updateTeacher(teacherId, newName, newSalary); return ResponseEntity.ok().build(); } @@ -46,19 +48,4 @@ public ResponseEntity deleteTeacher(@PathVariable String teacherId) { teacherService.deleteTeacher(teacherId); return ResponseEntity.ok().build(); } - - - - - - - - - - - - - - - -} +} \ No newline at end of file diff --git a/src/main/java/com/example/demo/models/Course.java b/src/main/java/com/example/demo/models/Course.java index b04adb1a..9d42759c 100644 --- a/src/main/java/com/example/demo/models/Course.java +++ b/src/main/java/com/example/demo/models/Course.java @@ -1,35 +1,23 @@ package com.example.demo.models; -import jakarta.annotation.Nullable; -import jakarta.validation.Valid; +import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.Positive; public class Course { - @Valid -private String courseId; -private String name; -@Positive -private double price; -private double money_earned; -@Nullable -private Teacher teacher; - + private String courseId; + @NotBlank(message = "Course name cannot be blank") + private String name; + @Positive(message = "Price must be positive") + private double price; + private double moneyEarned; + private Teacher teacher; public Course(String name, double price) { + this.name = name; this.price = price; - this.name=name; - this.money_earned=0; - } -@Nullable - public Teacher getTeacher() { - return teacher; - } - - public void setTeacher(Teacher teacher) { - this.teacher = teacher; + this.moneyEarned = 0.0; } - public String getCourseId() { return courseId; } @@ -54,11 +42,19 @@ public void setPrice(double price) { this.price = price; } - public double getMoney_earned() { - return money_earned; + public double getMoneyEarned() { + return moneyEarned; + } + + public void setMoneyEarned(double moneyEarned) { + this.moneyEarned = moneyEarned; } - public void setMoney_earned(double money_earned) { - this.money_earned = money_earned; + public Teacher getTeacher() { + return teacher; + } + + public void setTeacher(Teacher teacher) { + this.teacher = teacher; } -} +} \ No newline at end of file diff --git a/src/main/java/com/example/demo/models/Student.java b/src/main/java/com/example/demo/models/Student.java index be16fa5b..2aa0e81f 100644 --- a/src/main/java/com/example/demo/models/Student.java +++ b/src/main/java/com/example/demo/models/Student.java @@ -1,16 +1,23 @@ package com.example.demo.models; -import jakarta.annotation.Nullable; -//All +import jakarta.validation.constraints.NotBlank; public class Student { private String studentId; + @NotBlank(message = "Student name cannot be blank") private String name; + @NotBlank(message = "Student address cannot be blank") private String address; + @NotBlank(message = "Student email cannot be blank") private String email; - @Nullable private Course course; + public Student(String name, String address, String email) { + this.name = name; + this.address = address; + this.email = email; + } + public String getStudentId() { return studentId; } @@ -43,18 +50,11 @@ public void setEmail(String email) { this.email = email; } - @Nullable public Course getCourse() { return course; } - public void setCourse(@Nullable Course course) { + public void setCourse(Course course) { this.course = course; } - - public Student(String name, String address, String email) { - this.name = name; - this.address = address; - this.email = email; - } -} +} \ No newline at end of file diff --git a/src/main/java/com/example/demo/models/Teacher.java b/src/main/java/com/example/demo/models/Teacher.java index e7d92d39..6a4cd9ba 100644 --- a/src/main/java/com/example/demo/models/Teacher.java +++ b/src/main/java/com/example/demo/models/Teacher.java @@ -1,10 +1,15 @@ package com.example.demo.models; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.PositiveOrZero; + import java.util.UUID; public class Teacher { private String teacherId; + @NotBlank(message = "Teacher name cannot be blank") private String name; + @PositiveOrZero(message = "Salary cannot be negative") private double salary; public Teacher(String name, double salary) { diff --git a/src/main/java/com/example/demo/services/CourseService.java b/src/main/java/com/example/demo/services/CourseService.java index aee1f97b..84eb674e 100644 --- a/src/main/java/com/example/demo/services/CourseService.java +++ b/src/main/java/com/example/demo/services/CourseService.java @@ -1,8 +1,11 @@ package com.example.demo.services; +import com.example.demo.Exceptions.CourseNotFoundException; +import com.example.demo.Exceptions.InvalidInputException; import com.example.demo.models.Course; import com.example.demo.models.Teacher; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import java.util.ArrayList; @@ -11,37 +14,38 @@ import java.util.Map; import java.util.UUID; -//sdgsdg @Service public class CourseService { private final Map courseMap = new HashMap<>(); + private final TeacherService teacherService; @Autowired - private TeacherService teacherService; // To fetch teachers + public CourseService(@Lazy TeacherService teacherService) { + this.teacherService = teacherService; + } public Course createCourse(String name, double price) { - if (name == null || name.isEmpty()) { - throw new IllegalArgumentException("Course name cannot be empty"); + if (name == null || name.isBlank()) { + throw new InvalidInputException("Course name cannot be empty"); } - if (price < 0) { - throw new IllegalArgumentException("Price cannot be negative"); + if (price <= 0) { + throw new InvalidInputException("Price must be positive"); } String courseId = UUID.randomUUID().toString(); Course course = new Course(name, price); course.setCourseId(courseId); - course.setMoney_earned(0.0); courseMap.put(courseId, course); return course; } public Course getCourseById(String courseId) { if (courseId == null) { - throw new IllegalArgumentException("Course ID cannot be null"); + throw new InvalidInputException("Course ID cannot be null"); } Course course = courseMap.get(courseId); if (course == null) { - throw new IllegalArgumentException("Course not found with ID: " + courseId); + throw new CourseNotFoundException("Course not found with ID: " + courseId); } return course; } @@ -50,23 +54,18 @@ public List getAllCourses() { return new ArrayList<>(courseMap.values()); } - public void updateCourse(String courseId, String newName, double newPrice) { + public void updateCourse(String courseId, String newName, Double newPrice) { Course course = getCourseById(courseId); - if (newName != null && !newName.isEmpty()) { + if (newName != null && !newName.isBlank()) { course.setName(newName); } - if (newPrice >= 0) { + if (newPrice != null && newPrice > 0) { course.setPrice(newPrice); } } public void deleteCourse(String courseId) { - if (courseId == null) { - throw new IllegalArgumentException("Course ID cannot be null"); - } - if (!courseMap.containsKey(courseId)) { - throw new IllegalArgumentException("Course not found with ID: " + courseId); - } + getCourseById(courseId); courseMap.remove(courseId); } @@ -77,7 +76,7 @@ public void assignTeacherToCourse(String courseId, String teacherId) { } public List getCoursesByTeacher(String teacherId) { - teacherService.getTeacherById(teacherId); // Validate teacher exists + teacherService.getTeacherById(teacherId); List teacherCourses = new ArrayList<>(); for (Course course : courseMap.values()) { if (course.getTeacher() != null && course.getTeacher().getTeacherId().equals(teacherId)) { @@ -86,4 +85,17 @@ public List getCoursesByTeacher(String teacherId) { } return teacherCourses; } + + public double getCourseProfit(String courseId) { + Course course = getCourseById(courseId); + double earned = course.getMoneyEarned(); + double salary = course.getTeacher() != null ? course.getTeacher().getSalary() : 0; + return earned - salary; + } + + public double getTotalProfit() { + double totalEarned = courseMap.values().stream().mapToDouble(Course::getMoneyEarned).sum(); + double totalSalaries = teacherService.getAllTeachers().stream().mapToDouble(Teacher::getSalary).sum(); + return totalEarned - totalSalaries; + } } \ No newline at end of file diff --git a/src/main/java/com/example/demo/services/StudentService.java b/src/main/java/com/example/demo/services/StudentService.java index 34e8d167..d6a5c116 100644 --- a/src/main/java/com/example/demo/services/StudentService.java +++ b/src/main/java/com/example/demo/services/StudentService.java @@ -1,5 +1,8 @@ package com.example.demo.services; +import com.example.demo.Exceptions.InvalidInputException; +import com.example.demo.Exceptions.StudentAlreadyEnrolledException; +import com.example.demo.Exceptions.StudentNotFoundException; import com.example.demo.models.Course; import com.example.demo.models.Student; import org.springframework.beans.factory.annotation.Autowired; @@ -15,19 +18,22 @@ public class StudentService { private final Map studentMap = new HashMap<>(); + private final CourseService courseService; @Autowired - private CourseService courseService; // To fetch courses and update money_earned + public StudentService(CourseService courseService) { + this.courseService = courseService; + } public Student createStudent(String name, String address, String email) { - if (name == null || name.isEmpty()) { - throw new IllegalArgumentException("Student name cannot be empty"); + if (name == null || name.isBlank()) { + throw new InvalidInputException("Student name cannot be empty"); } - if (address == null || address.isEmpty()) { - throw new IllegalArgumentException("Student address cannot be empty"); + if (address == null || address.isBlank()) { + throw new InvalidInputException("Student address cannot be empty"); } - if (email == null || email.isEmpty()) { - throw new IllegalArgumentException("Student email cannot be empty"); + if (email == null || email.isBlank()) { + throw new InvalidInputException("Student email cannot be empty"); } String studentId = UUID.randomUUID().toString(); Student student = new Student(name, address, email); @@ -38,11 +44,11 @@ public Student createStudent(String name, String address, String email) { public Student getStudentById(String studentId) { if (studentId == null) { - throw new IllegalArgumentException("Student ID cannot be null"); + throw new InvalidInputException("Student ID cannot be null"); } Student student = studentMap.get(studentId); if (student == null) { - throw new IllegalArgumentException("Student not found with ID: " + studentId); + throw new StudentNotFoundException("Student not found with ID: " + studentId); } return student; } @@ -53,53 +59,53 @@ public List getAllStudents() { public void updateStudent(String studentId, String newName, String newAddress, String newEmail) { Student student = getStudentById(studentId); - if (newName != null && !newName.isEmpty()) { + if (newName != null && !newName.isBlank()) { student.setName(newName); } - if (newAddress != null && !newAddress.isEmpty()) { + if (newAddress != null && !newAddress.isBlank()) { student.setAddress(newAddress); } - if (newEmail != null && !newEmail.isEmpty()) { + if (newEmail != null && !newEmail.isBlank()) { student.setEmail(newEmail); } } public void deleteStudent(String studentId) { - if (studentId == null) { - throw new IllegalArgumentException("Student ID cannot be null"); - } - if (!studentMap.containsKey(studentId)) { - throw new IllegalArgumentException("Student not found with ID: " + studentId); - } Student student = getStudentById(studentId); - unenrollStudentFromCourse(studentId); + if (student.getCourse() != null) { + unenrollStudentFromCourse(studentId); + } studentMap.remove(studentId); } public void enrollStudentInCourse(String studentId, String courseId) { Student student = getStudentById(studentId); Course newCourse = courseService.getCourseById(courseId); - Course oldCourse = student.getCourse(); - if (oldCourse != null) { - oldCourse.setMoney_earned(oldCourse.getMoney_earned() - oldCourse.getPrice()); + + if (student.getCourse() != null && student.getCourse().getCourseId().equals(courseId)) { + throw new StudentAlreadyEnrolledException("Student is already enrolled in this course"); + } + + if (student.getCourse() != null) { + student.getCourse().setMoneyEarned(student.getCourse().getMoneyEarned() - student.getCourse().getPrice()); } + student.setCourse(newCourse); - newCourse.setMoney_earned(newCourse.getMoney_earned() + newCourse.getPrice()); + newCourse.setMoneyEarned(newCourse.getMoneyEarned() + newCourse.getPrice()); } public void unenrollStudentFromCourse(String studentId) { Student student = getStudentById(studentId); Course course = student.getCourse(); - if (course != null) { - course.setMoney_earned(course.getMoney_earned() - course.getPrice()); - student.setCourse(null); - } else { - throw new IllegalStateException("Student is not enrolled in any course"); + if (course == null) { + throw new InvalidInputException("Student is not enrolled in any course"); } + course.setMoneyEarned(course.getMoneyEarned() - course.getPrice()); + student.setCourse(null); } public List getEnrolledStudents(String courseId) { - courseService.getCourseById(courseId); // Validate course exists + courseService.getCourseById(courseId); List enrolledStudents = new ArrayList<>(); for (Student student : studentMap.values()) { if (student.getCourse() != null && student.getCourse().getCourseId().equals(courseId)) { diff --git a/src/main/java/com/example/demo/services/TeacherService.java b/src/main/java/com/example/demo/services/TeacherService.java index c691bc55..4ed4f14a 100644 --- a/src/main/java/com/example/demo/services/TeacherService.java +++ b/src/main/java/com/example/demo/services/TeacherService.java @@ -1,25 +1,35 @@ package com.example.demo.services; +import com.example.demo.Exceptions.InvalidInputException; +import com.example.demo.Exceptions.TeacherNotFoundException; import com.example.demo.models.Teacher; +import com.example.demo.models.Course; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; -import java.util.UUID; @Service public class TeacherService { private final Map teacherMap = new HashMap<>(); + private final CourseService courseService; + + @Autowired + public TeacherService(@Lazy CourseService courseService) { + this.courseService = courseService; + } public Teacher createTeacher(String name, double salary) { - if (name == null || name.isEmpty()) { - throw new IllegalArgumentException("Teacher name cannot be empty"); + if (name == null || name.isBlank()) { + throw new InvalidInputException("Teacher name cannot be empty"); } if (salary < 0) { - throw new IllegalArgumentException("Salary cannot be negative"); + throw new InvalidInputException("Salary cannot be negative"); } Teacher teacher = new Teacher(name, salary); teacherMap.put(teacher.getTeacherId(), teacher); @@ -28,11 +38,11 @@ public Teacher createTeacher(String name, double salary) { public Teacher getTeacherById(String teacherId) { if (teacherId == null) { - throw new IllegalArgumentException("Teacher ID cannot be null"); + throw new InvalidInputException("Teacher ID cannot be null"); } Teacher teacher = teacherMap.get(teacherId); if (teacher == null) { - throw new IllegalArgumentException("Teacher not found with ID: " + teacherId); + throw new TeacherNotFoundException("Teacher not found with ID: " + teacherId); } return teacher; } @@ -41,22 +51,21 @@ public List getAllTeachers() { return new ArrayList<>(teacherMap.values()); } - public void updateTeacher(String teacherId, String newName, double newSalary) { + public void updateTeacher(String teacherId, String newName, Double newSalary) { Teacher teacher = getTeacherById(teacherId); - if (newName != null && !newName.isEmpty()) { + if (newName != null && !newName.isBlank()) { teacher.setName(newName); } - if (newSalary >= 0) { + if (newSalary != null && newSalary >= 0) { teacher.setSalary(newSalary); } } public void deleteTeacher(String teacherId) { - if (teacherId == null) { - throw new IllegalArgumentException("Teacher ID cannot be null"); - } - if (!teacherMap.containsKey(teacherId)) { - throw new IllegalArgumentException("Teacher not found with ID: " + teacherId); + getTeacherById(teacherId); + List courses = courseService.getCoursesByTeacher(teacherId); + for (Course course : courses) { + course.setTeacher(null); } teacherMap.remove(teacherId); } diff --git a/src/test/java/com/example/demo/services/CourseServiceTest.java b/src/test/java/com/example/demo/services/CourseServiceTest.java new file mode 100644 index 00000000..21695da7 --- /dev/null +++ b/src/test/java/com/example/demo/services/CourseServiceTest.java @@ -0,0 +1,59 @@ +package com.example.demo.services; + +import com.example.demo.Exceptions.InvalidInputException; +import com.example.demo.models.Course; +import com.example.demo.models.Teacher; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.*; + +class CourseServiceTest { + + private CourseService courseService; + private TeacherService teacherService; + + @BeforeEach + void setUp() { + teacherService = new TeacherService(null); + courseService = new CourseService(teacherService); + + } + + @Test + void createCourseValid() { + Course course = courseService.createCourse("Math", 100.0); + assertNotNull(course.getCourseId()); + assertEquals("Math", course.getName()); + assertEquals(100.0, course.getPrice()); + } + + @Test + void createCourseInvalidName() { + assertThrows(InvalidInputException.class, () -> courseService.createCourse("", 100.0)); + } + + @Test + void getCourseById() { + Course course = courseService.createCourse("Math", 100.0); + Course found = courseService.getCourseById(course.getCourseId()); + assertEquals(course, found); + } + + @Test + void assignTeacherToCourse() { + Teacher teacher = teacherService.createTeacher("John", 500.0); + Course course = courseService.createCourse("Math", 100.0); + courseService.assignTeacherToCourse(course.getCourseId(), teacher.getTeacherId()); + assertEquals(teacher, course.getTeacher()); + } + + @Test + void getCourseProfit() { + Course course = courseService.createCourse("Math", 100.0); + course.setMoneyEarned(200.0); + Teacher teacher = teacherService.createTeacher("John", 50.0); + course.setTeacher(teacher); + assertEquals(150.0, courseService.getCourseProfit(course.getCourseId())); + } +} \ No newline at end of file diff --git a/src/test/java/com/example/demo/services/StudentServiceTest.java b/src/test/java/com/example/demo/services/StudentServiceTest.java new file mode 100644 index 00000000..c6aaa83b --- /dev/null +++ b/src/test/java/com/example/demo/services/StudentServiceTest.java @@ -0,0 +1,58 @@ +package com.example.demo.services; + +import com.example.demo.Exceptions.StudentAlreadyEnrolledException; +import com.example.demo.models.Course; +import com.example.demo.models.Student; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.*; + +class StudentServiceTest { + + private StudentService studentService; + private CourseService courseService; + + @BeforeEach + void setUp() { + TeacherService teacherService = new TeacherService(null); + courseService = new CourseService(teacherService); + + studentService = new StudentService(courseService); + } + + @Test + void createStudentValid() { + Student student = studentService.createStudent("Alice", "123 St", "alice@email.com"); + assertNotNull(student.getStudentId()); + assertEquals("Alice", student.getName()); + } + + @Test + void enrollStudentInCourse() { + Course course = courseService.createCourse("Math", 100.0); + Student student = studentService.createStudent("Alice", "123 St", "alice@email.com"); + studentService.enrollStudentInCourse(student.getStudentId(), course.getCourseId()); + assertEquals(course, student.getCourse()); + assertEquals(100.0, course.getMoneyEarned()); + } + + @Test + void enrollAlreadyEnrolledSameCourse() { + Course course = courseService.createCourse("Math", 100.0); + Student student = studentService.createStudent("Alice", "123 St", "alice@email.com"); + studentService.enrollStudentInCourse(student.getStudentId(), course.getCourseId()); + assertThrows(StudentAlreadyEnrolledException.class, + () -> studentService.enrollStudentInCourse(student.getStudentId(), course.getCourseId())); + } + + @Test + void unenrollStudentFromCourse() { + Course course = courseService.createCourse("Math", 100.0); + Student student = studentService.createStudent("Alice", "123 St", "alice@email.com"); + studentService.enrollStudentInCourse(student.getStudentId(), course.getCourseId()); + studentService.unenrollStudentFromCourse(student.getStudentId()); + assertNull(student.getCourse()); + assertEquals(0.0, course.getMoneyEarned()); + } +} \ No newline at end of file diff --git a/src/test/java/com/example/demo/services/TeacherServiceTest.java b/src/test/java/com/example/demo/services/TeacherServiceTest.java new file mode 100644 index 00000000..dad2f9fb --- /dev/null +++ b/src/test/java/com/example/demo/services/TeacherServiceTest.java @@ -0,0 +1,58 @@ +package com.example.demo.services; + +import com.example.demo.Exceptions.InvalidInputException; +import com.example.demo.models.Course; +import com.example.demo.models.Teacher; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.*; + +class TeacherServiceTest { + + private TeacherService teacherService; + private CourseService courseService; + + @BeforeEach + void setUp() { + courseService = new CourseService(null); + teacherService = new TeacherService(courseService); + } + + @Test + void createTeacherValid() { + Teacher teacher = teacherService.createTeacher("John", 500.0); + assertNotNull(teacher.getTeacherId()); + assertEquals("John", teacher.getName()); + assertEquals(500.0, teacher.getSalary()); + } + + @Test + void createTeacherInvalidSalary() { + assertThrows(InvalidInputException.class, () -> teacherService.createTeacher("John", -100.0)); + } + + @Test + void deleteTeacherUnassignsCourses() { + Teacher teacher = teacherService.createTeacher("John", 500.0); + + CourseService realCourseService = new CourseService(teacherService); + TeacherService realTeacherService = new TeacherService(realCourseService); + + Teacher t = realTeacherService.createTeacher("John", 500.0); + Course course = realCourseService.createCourse("Math", 100.0); + + realCourseService.assignTeacherToCourse(course.getCourseId(), t.getTeacherId()); + realTeacherService.deleteTeacher(t.getTeacherId()); + + assertNull(course.getTeacher()); + } + + @Test + void updateTeacher() { + Teacher teacher = teacherService.createTeacher("John", 500.0); + teacherService.updateTeacher(teacher.getTeacherId(), "Jane", 600.0); + assertEquals("Jane", teacher.getName()); + assertEquals(600.0, teacher.getSalary()); + } +} \ No newline at end of file From c1f3ccb9fc953dc214b1a14dfe37e80db31018b3 Mon Sep 17 00:00:00 2001 From: kenanqafarov Date: Wed, 11 Mar 2026 11:58:00 +0400 Subject: [PATCH 19/19] All updated --- README.md | 239 ++++++++++-------- .../Exceptions/CourseNotFoundException.java | 3 +- .../Exceptions/GlobalExceptionHandler.java | 73 +++++- .../Exceptions/InvalidInputException.java | 3 +- .../StudentAlreadyEnrolledException.java | 3 +- .../Exceptions/StudentNotFoundException.java | 3 +- .../Exceptions/TeacherNotFoundException.java | 4 +- .../demo/controllers/CourseController.java | 14 + .../demo/controllers/StudentController.java | 13 + .../demo/controllers/TeacherController.java | 10 + .../java/com/example/demo/models/Course.java | 12 + .../java/com/example/demo/models/Student.java | 14 + .../java/com/example/demo/models/Teacher.java | 9 +- .../example/demo/services/CourseService.java | 67 ++++- .../example/demo/services/StudentService.java | 57 ++++- .../example/demo/services/TeacherService.java | 33 ++- 16 files changed, 411 insertions(+), 146 deletions(-) diff --git a/README.md b/README.md index 1d3c661a..2b3272ff 100644 --- a/README.md +++ b/README.md @@ -1,108 +1,141 @@ -![logo_ironhack_blue 7](https://user-images.githubusercontent.com/23629340/40541063-a07a0a8a-601a-11e8-91b5-2f13e4e6b441.png) +# School Management System + +A RESTful Spring Boot application for managing teachers, students, and courses at a school. + +--- -# HW | Java IronSchool (Unit 2 homework) +## Getting Started -## Introduction +### Prerequisites +- Java 17+ +- Maven 3.8+ + +### Run the Application +```bash +mvn spring-boot:run +``` +The server starts at `http://localhost:8080`. -For this homework, you will be building a School Management System, that will help manage students, teachers and courses with some basic functionalities. +--- -## Instructions +## API Reference -Let's walk through the details of the homework: - -### Classes - -Three main classes are necessary to complete this homework: **Teacher**, **Student** and **Course**. - -
- -**Teacher class** - -This class will have: - -- Variable called `teacherId` of data type `string`, auto-generated (Private member) -- Variable called `name` of data type `string` (Private member) -- Variable called `salary` of data type `double`, representing the salary of the teacher (Private member) -- A parameterized constructor that takes `name` and `salary` -- Public Getter functions to access these variables -- Public Setter functions to change these variables -- Optional attributes are accepted if needed based on the code structure - -
- -**Course class** - -This class will have: - -- Variable called `courseId` of data type `string`, auto-generated (Private member) -- Variable called `name` of data type `string` (Private member) -- Variable called `price` of data type `double`, representing the price of this course (Private member) -- Variable called `money_earned` of data type `double`, representing the total money earned by this course (Private member) -- Nullable variable called `teacher` of data type `Teacher` (Private member) -- A parameterized constructor that takes `name` and `price` -- Public Getter functions to access these variables -- Public Setter functions to change these variables -- Optional attributes are accepted if needed based on the code structure - -
- -**Student class** - -This class will have: - -- Variable called `studentId` of data type `string`, auto-generated (Private member) -- Variable called `name` of data type `string` (Private member) -- Variable called `address` of data type `string` (Private member) -- Variable called `email` of data type `string` (Private member) -- Nullable variable called `course` of data type `Course`, representing the course this student is enrolled into (Private member) -- A parameterized constructor that takes `name`, `address` and `email` -- Public Getter functions to access these variables -- Public Setter functions to change these variables -- Optional attributes are accepted if needed based on the code structure - -## How the application works - -1. The application starts by asking the user for a name for the school -2. Next, the user is asked for a number of how many teachers should be created -3. Next, the user is prompted to enter the details of each teacher (based on the number chosen above) -4. Next, the user is asked for the number of courses to be created (Do not specify the teacher yet, there is a command for it) -5. Next, the user is prompted to enter details of each course based on the number chosen above -6. Next, the user is asked for the number of students to be created (Do not specify the course yet, there is a command for it) -7. Next, the user is prompted to enter details of each student based on the number chosen above -8. Next, the user is now prompted to enter any command of the list below to execute a specified action in the system. - -The IDs should be automatically generated. - -## Commands - -- **ENROLL** **[STUDENT_ID] [COURSE_ID]**: This command will help enroll the student specified in the corresponding course. While also updating the `money_earned` of that course based on its price -- **ASSIGN** **[TEACHER_ID] [COURSE_ID]**: This command will help assign the teacher specified to the corresponding course -- **SHOW COURSES**: This command will display a list of all courses -- **LOOKUP COURSE** **[COURSE_ID]**: This command will display the full details of the specified course -- **SHOW STUDENTS**: This command will display a list of all students -- **LOOKUP STUDENT** **[STUDENT_ID]**: This command will display the full details of the specified student -- **SHOW TEACHERS**: This command will display a list of all teachers -- **LOOKUP TEACHER** **[TEACHER_ID]**: This command will display the full details of the specified teacher -- **SHOW PROFIT**: This command will calculate **(The total money earned from all courses)** - **(The sum of all the teachers' salaries)** and return the result - -## Requirements - -For this project you must accomplish all of the following: - -1. Navigate through a text-based menu using Standard Input and Output. -2. Create unit tests for every method other than basic getters, setters and constructors (getters and setters with logic do require unit tests). -3. Handle all exceptions gracefully (incorrect input should not crash the program). -4. Create Teachers, Courses and Students specifying their full details. -5. Handle receiving commands in the Standard Input that corresponds to actual actions in the system. - -### Bonus - -1. Add more commands that can help display more information such as (**SHOW STUDENTS** **[COURSE_ID]**, **SHOW MONEY EARNED**, **SHOW MONEY SPENT**, etc.) - -## Important Notes - -- Everyone in the squad should contribute equally to the project in time and lines of code written. -- All code must be reviewed before it is merged into the `master` branch. -- All squad members must participate in code review. -- Every repository should have a README file with clear instructions, demo files, or any documentation needed so other teams don't have problems with the review. -- This is intended to be a challenging assignment. You will have to rely heavily on your teammates and independent research. Learning independently is a hallmark of a good developer and our job is to turn you into good developers. This process may be frustrating but you will learn a ton! \ No newline at end of file +### Teachers + +| Method | Endpoint | Description | +|--------|----------|-------------| +| POST | `/teachers` | Create a teacher | +| GET | `/teachers` | List all teachers | +| GET | `/teachers/{id}` | Get teacher by ID | +| PUT | `/teachers/{id}` | Update teacher | +| DELETE | `/teachers/{id}` | Delete teacher | + +**Create a teacher:** +```bash +curl -X POST http://localhost:8080/teachers \ + -H "Content-Type: application/json" \ + -d '{"name": "Alice Smith", "salary": 3000.0}' +``` + +--- + +### Courses + +| Method | Endpoint | Description | +|--------|----------|-------------| +| POST | `/courses` | Create a course | +| GET | `/courses` | List all courses | +| GET | `/courses/{id}` | Get course by ID | +| PUT | `/courses/{id}` | Update course | +| DELETE | `/courses/{id}` | Delete course | +| POST | `/courses/{courseId}/assign-teacher/{teacherId}` | Assign teacher to course | +| GET | `/courses/teacher/{teacherId}` | Get all courses by a teacher | +| GET | `/courses/profit/{courseId}` | Get profit for a course | +| GET | `/courses/total-profit` | Get total school profit | + +**Create a course:** +```bash +curl -X POST http://localhost:8080/courses \ + -H "Content-Type: application/json" \ + -d '{"name": "Mathematics", "price": 500.0}' +``` + +**Assign a teacher to a course:** +```bash +curl -X POST http://localhost:8080/courses/{courseId}/assign-teacher/{teacherId} +``` + +--- + +### Students + +| Method | Endpoint | Description | +|--------|----------|-------------| +| POST | `/students` | Create a student | +| GET | `/students/{id}` | Get student by ID | +| PUT | `/students/{id}` | Update student | +| DELETE | `/students/{id}` | Delete student | +| POST | `/students/{studentId}/enroll/{courseId}` | Enroll student in course | +| DELETE | `/students/{studentId}/unenroll` | Unenroll student | +| GET | `/students/course/{courseId}` | Get all students in a course | +| GET | `/students/{studentId}/course` | Get course for a student | + +**Create a student:** +```bash +curl -X POST http://localhost:8080/students \ + -H "Content-Type: application/json" \ + -d '{"name": "Bob Jones", "address": "123 Main St", "email": "bob@example.com"}' +``` + +**Enroll a student in a course:** +```bash +curl -X POST http://localhost:8080/students/{studentId}/enroll/{courseId} +``` + +--- + +## Profit Calculation + +- **Course Profit**: `moneyEarned - (teacherSalary / numberOfCoursesTeacherTeaches)` +- **Total Profit**: `totalMoneyEarned - totalTeacherSalaries` + +--- + +## Error Handling + +All errors return a meaningful HTTP status and message body: + +| Situation | HTTP Status | +|-----------|-------------| +| Entity not found | 404 Not Found | +| Student already enrolled | 409 Conflict | +| Invalid input (blank, negative) | 400 Bad Request | +| Validation failure | 400 Bad Request | +| Unexpected error | 500 Internal Server Error | + +--- + +## Project Structure + +``` +src/main/java/com/example/demo/ +├── controllers/ +│ ├── CourseController.java +│ ├── StudentController.java +│ └── TeacherController.java +├── models/ +│ ├── Course.java +│ ├── Student.java +│ └── Teacher.java +├── services/ +│ ├── CourseService.java +│ ├── StudentService.java +│ └── TeacherService.java +└── Exceptions/ + ├── GlobalExceptionHandler.java + ├── CourseNotFoundException.java + ├── StudentNotFoundException.java + ├── TeacherNotFoundException.java + ├── StudentAlreadyEnrolledException.java + └── InvalidInputException.java +``` \ No newline at end of file diff --git a/src/main/java/com/example/demo/Exceptions/CourseNotFoundException.java b/src/main/java/com/example/demo/Exceptions/CourseNotFoundException.java index 4e180414..57d2a8e6 100644 --- a/src/main/java/com/example/demo/Exceptions/CourseNotFoundException.java +++ b/src/main/java/com/example/demo/Exceptions/CourseNotFoundException.java @@ -1,7 +1,8 @@ package com.example.demo.Exceptions; +/** Thrown when a course with the specified ID cannot be found. */ public class CourseNotFoundException extends RuntimeException { public CourseNotFoundException(String message) { super(message); } -} +} \ No newline at end of file diff --git a/src/main/java/com/example/demo/Exceptions/GlobalExceptionHandler.java b/src/main/java/com/example/demo/Exceptions/GlobalExceptionHandler.java index a3f47e5a..58067155 100644 --- a/src/main/java/com/example/demo/Exceptions/GlobalExceptionHandler.java +++ b/src/main/java/com/example/demo/Exceptions/GlobalExceptionHandler.java @@ -2,39 +2,86 @@ import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.ControllerAdvice; +import org.springframework.web.bind.MethodArgumentNotValidException; import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.bind.annotation.RestControllerAdvice; -@ControllerAdvice -public class GlobalExceptionHandler { +import java.util.stream.Collectors; - @ExceptionHandler(CourseNotFoundException.class) - public ResponseEntity handleCourseNotFound(CourseNotFoundException ex) { - return ResponseEntity.status(HttpStatus.NOT_FOUND).body(ex.getMessage()); - } +/** + * Global exception handler for all REST controllers. + * Intercepts exceptions thrown during request processing and maps them + * to appropriate HTTP responses, ensuring the application never crashes + * due to unhandled errors. + */ +@RestControllerAdvice +public class GlobalExceptionHandler { + /** + * Handles cases where a requested student does not exist. + * Returns HTTP 404 Not Found. + */ @ExceptionHandler(StudentNotFoundException.class) public ResponseEntity handleStudentNotFound(StudentNotFoundException ex) { return ResponseEntity.status(HttpStatus.NOT_FOUND).body(ex.getMessage()); } + /** + * Handles cases where a requested teacher does not exist. + * Returns HTTP 404 Not Found. + */ @ExceptionHandler(TeacherNotFoundException.class) public ResponseEntity handleTeacherNotFound(TeacherNotFoundException ex) { return ResponseEntity.status(HttpStatus.NOT_FOUND).body(ex.getMessage()); } - @ExceptionHandler(InvalidInputException.class) - public ResponseEntity handleInvalidInput(InvalidInputException ex) { - return ResponseEntity.badRequest().body(ex.getMessage()); + /** + * Handles cases where a requested course does not exist. + * Returns HTTP 404 Not Found. + */ + @ExceptionHandler(CourseNotFoundException.class) + public ResponseEntity handleCourseNotFound(CourseNotFoundException ex) { + return ResponseEntity.status(HttpStatus.NOT_FOUND).body(ex.getMessage()); } + /** + * Handles cases where a student attempts to enroll in a course they are already enrolled in. + * Returns HTTP 409 Conflict. + */ @ExceptionHandler(StudentAlreadyEnrolledException.class) public ResponseEntity handleStudentAlreadyEnrolled(StudentAlreadyEnrolledException ex) { - return ResponseEntity.badRequest().body(ex.getMessage()); + return ResponseEntity.status(HttpStatus.CONFLICT).body(ex.getMessage()); + } + + /** + * Handles invalid input provided by the caller (e.g., null IDs, blank names). + * Returns HTTP 400 Bad Request. + */ + @ExceptionHandler(InvalidInputException.class) + public ResponseEntity handleInvalidInput(InvalidInputException ex) { + return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(ex.getMessage()); + } + + /** + * Handles validation failures triggered by @Valid on request bodies. + * Collects all field error messages and returns them as a combined response. + * Returns HTTP 400 Bad Request. + */ + @ExceptionHandler(MethodArgumentNotValidException.class) + public ResponseEntity handleValidationErrors(MethodArgumentNotValidException ex) { + String errors = ex.getBindingResult().getFieldErrors().stream() + .map(error -> error.getField() + ": " + error.getDefaultMessage()) + .collect(Collectors.joining(", ")); + return ResponseEntity.status(HttpStatus.BAD_REQUEST).body("Validation failed: " + errors); } + /** + * Catch-all handler for any unexpected exceptions not explicitly handled above. + * Returns HTTP 500 Internal Server Error to avoid exposing internal details. + */ @ExceptionHandler(Exception.class) - public ResponseEntity handleGeneralException(Exception ex) { - return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("An unexpected error occurred: " + ex.getMessage()); + public ResponseEntity handleGenericException(Exception ex) { + return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) + .body("An unexpected error occurred: " + ex.getMessage()); } } \ No newline at end of file diff --git a/src/main/java/com/example/demo/Exceptions/InvalidInputException.java b/src/main/java/com/example/demo/Exceptions/InvalidInputException.java index d8e53788..5f44773c 100644 --- a/src/main/java/com/example/demo/Exceptions/InvalidInputException.java +++ b/src/main/java/com/example/demo/Exceptions/InvalidInputException.java @@ -1,7 +1,8 @@ package com.example.demo.Exceptions; +/** Thrown when a caller provides invalid or missing input (e.g., blank name, negative price). */ public class InvalidInputException extends RuntimeException { public InvalidInputException(String message) { super(message); } -} +} \ No newline at end of file diff --git a/src/main/java/com/example/demo/Exceptions/StudentAlreadyEnrolledException.java b/src/main/java/com/example/demo/Exceptions/StudentAlreadyEnrolledException.java index d92889f2..d0631a6f 100644 --- a/src/main/java/com/example/demo/Exceptions/StudentAlreadyEnrolledException.java +++ b/src/main/java/com/example/demo/Exceptions/StudentAlreadyEnrolledException.java @@ -1,7 +1,8 @@ package com.example.demo.Exceptions; +/** Thrown when a student attempts to enroll in a course they are already enrolled in. */ public class StudentAlreadyEnrolledException extends RuntimeException { public StudentAlreadyEnrolledException(String message) { super(message); } -} +} \ No newline at end of file diff --git a/src/main/java/com/example/demo/Exceptions/StudentNotFoundException.java b/src/main/java/com/example/demo/Exceptions/StudentNotFoundException.java index 3a637e14..23db7893 100644 --- a/src/main/java/com/example/demo/Exceptions/StudentNotFoundException.java +++ b/src/main/java/com/example/demo/Exceptions/StudentNotFoundException.java @@ -1,7 +1,8 @@ package com.example.demo.Exceptions; +/** Thrown when a student with the specified ID cannot be found. */ public class StudentNotFoundException extends RuntimeException { public StudentNotFoundException(String message) { super(message); } -} +} \ No newline at end of file diff --git a/src/main/java/com/example/demo/Exceptions/TeacherNotFoundException.java b/src/main/java/com/example/demo/Exceptions/TeacherNotFoundException.java index 0491f086..1db32906 100644 --- a/src/main/java/com/example/demo/Exceptions/TeacherNotFoundException.java +++ b/src/main/java/com/example/demo/Exceptions/TeacherNotFoundException.java @@ -1,8 +1,8 @@ package com.example.demo.Exceptions; +/** Thrown when a teacher with the specified ID cannot be found. */ public class TeacherNotFoundException extends RuntimeException { - public TeacherNotFoundException(String message) { super(message); } -} +} \ No newline at end of file diff --git a/src/main/java/com/example/demo/controllers/CourseController.java b/src/main/java/com/example/demo/controllers/CourseController.java index 15bd1dae..2319cc76 100644 --- a/src/main/java/com/example/demo/controllers/CourseController.java +++ b/src/main/java/com/example/demo/controllers/CourseController.java @@ -9,6 +9,20 @@ import java.util.List; import java.util.Map; +/** + * REST controller for Course-related operations. + * + * Endpoints: + * GET /courses - List all courses + * POST /courses - Create a new course + * GET /courses/{courseId} - Get a course by ID + * PUT /courses/{courseId} - Update a course + * DELETE /courses/{courseId} - Delete a course + * POST /courses/{courseId}/assign-teacher/{teacherId} - Assign a teacher to a course + * GET /courses/teacher/{teacherId} - Get all courses by a teacher + * GET /courses/profit/{courseId} - Get profit for a specific course + * GET /courses/total-profit - Get total profit across all courses + */ @RestController @RequestMapping("/courses") public class CourseController { diff --git a/src/main/java/com/example/demo/controllers/StudentController.java b/src/main/java/com/example/demo/controllers/StudentController.java index 456f1185..790a4539 100644 --- a/src/main/java/com/example/demo/controllers/StudentController.java +++ b/src/main/java/com/example/demo/controllers/StudentController.java @@ -10,6 +10,19 @@ import java.util.List; import java.util.Map; +/** + * REST controller for Student-related operations. + * + * Endpoints: + * POST /students - Create a new student + * GET /students/{studentId} - Get a student by ID + * PUT /students/{studentId} - Update a student + * DELETE /students/{studentId} - Delete a student + * POST /students/{studentId}/enroll/{courseId} - Enroll student in a course + * DELETE /students/{studentId}/unenroll - Unenroll student from their course + * GET /students/course/{courseId} - Get all students enrolled in a course + * GET /students/{studentId}/course - Get the course a student is enrolled in + */ @RestController @RequestMapping("/students") public class StudentController { diff --git a/src/main/java/com/example/demo/controllers/TeacherController.java b/src/main/java/com/example/demo/controllers/TeacherController.java index 47e41455..9ad78b4a 100644 --- a/src/main/java/com/example/demo/controllers/TeacherController.java +++ b/src/main/java/com/example/demo/controllers/TeacherController.java @@ -9,6 +9,16 @@ import java.util.List; import java.util.Map; +/** + * REST controller for Teacher-related operations. + * + * Endpoints: + * POST /teachers - Create a new teacher + * GET /teachers/{teacherId} - Get a teacher by ID + * GET /teachers - List all teachers + * PUT /teachers/{teacherId} - Update a teacher + * DELETE /teachers/{teacherId} - Delete a teacher + */ @RestController @RequestMapping("/teachers") public class TeacherController { diff --git a/src/main/java/com/example/demo/models/Course.java b/src/main/java/com/example/demo/models/Course.java index 9d42759c..87191e95 100644 --- a/src/main/java/com/example/demo/models/Course.java +++ b/src/main/java/com/example/demo/models/Course.java @@ -3,16 +3,28 @@ import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.Positive; +import java.util.UUID; + +/** + * Represents a course offered by the school. + * ID is auto-generated upon construction using UUID. + */ public class Course { + private String courseId; + @NotBlank(message = "Course name cannot be blank") private String name; + @Positive(message = "Price must be positive") private double price; + private double moneyEarned; + private Teacher teacher; public Course(String name, double price) { + this.courseId = UUID.randomUUID().toString(); // Auto-generate ID in constructor this.name = name; this.price = price; this.moneyEarned = 0.0; diff --git a/src/main/java/com/example/demo/models/Student.java b/src/main/java/com/example/demo/models/Student.java index 2aa0e81f..77ddd9b6 100644 --- a/src/main/java/com/example/demo/models/Student.java +++ b/src/main/java/com/example/demo/models/Student.java @@ -1,18 +1,32 @@ package com.example.demo.models; +import jakarta.validation.constraints.Email; import jakarta.validation.constraints.NotBlank; +import java.util.UUID; + +/** + * Represents a student enrolled in the school. + * ID is auto-generated upon construction using UUID. + */ public class Student { + private String studentId; + @NotBlank(message = "Student name cannot be blank") private String name; + @NotBlank(message = "Student address cannot be blank") private String address; + @NotBlank(message = "Student email cannot be blank") + @Email(message = "Student email must be a valid email address") private String email; + private Course course; public Student(String name, String address, String email) { + this.studentId = UUID.randomUUID().toString(); // Auto-generate ID in constructor this.name = name; this.address = address; this.email = email; diff --git a/src/main/java/com/example/demo/models/Teacher.java b/src/main/java/com/example/demo/models/Teacher.java index 6a4cd9ba..cf1513c7 100644 --- a/src/main/java/com/example/demo/models/Teacher.java +++ b/src/main/java/com/example/demo/models/Teacher.java @@ -5,15 +5,22 @@ import java.util.UUID; +/** + * Represents a teacher employed by the school. + * ID is auto-generated upon construction using UUID. + */ public class Teacher { + private String teacherId; + @NotBlank(message = "Teacher name cannot be blank") private String name; + @PositiveOrZero(message = "Salary cannot be negative") private double salary; public Teacher(String name, double salary) { - this.teacherId = UUID.randomUUID().toString(); + this.teacherId = UUID.randomUUID().toString(); // Auto-generate ID in constructor this.name = name; this.salary = salary; } diff --git a/src/main/java/com/example/demo/services/CourseService.java b/src/main/java/com/example/demo/services/CourseService.java index 84eb674e..0542e5d0 100644 --- a/src/main/java/com/example/demo/services/CourseService.java +++ b/src/main/java/com/example/demo/services/CourseService.java @@ -12,8 +12,11 @@ import java.util.HashMap; import java.util.List; import java.util.Map; -import java.util.UUID; +/** + * Service layer for managing Course entities. + * Handles creation, retrieval, updating, deletion, teacher assignment, and profit calculation. + */ @Service public class CourseService { @@ -25,6 +28,10 @@ public CourseService(@Lazy TeacherService teacherService) { this.teacherService = teacherService; } + /** + * Creates a new course with the given name and price. + * The course ID is auto-generated inside the Course constructor. + */ public Course createCourse(String name, double price) { if (name == null || name.isBlank()) { throw new InvalidInputException("Course name cannot be empty"); @@ -32,13 +39,15 @@ public Course createCourse(String name, double price) { if (price <= 0) { throw new InvalidInputException("Price must be positive"); } - String courseId = UUID.randomUUID().toString(); - Course course = new Course(name, price); - course.setCourseId(courseId); - courseMap.put(courseId, course); + Course course = new Course(name, price); // ID auto-generated in constructor + courseMap.put(course.getCourseId(), course); return course; } + /** + * Retrieves a course by its ID. + * Throws CourseNotFoundException if no course matches the given ID. + */ public Course getCourseById(String courseId) { if (courseId == null) { throw new InvalidInputException("Course ID cannot be null"); @@ -50,10 +59,17 @@ public Course getCourseById(String courseId) { return course; } + /** + * Returns all courses in the system. + */ public List getAllCourses() { return new ArrayList<>(courseMap.values()); } + /** + * Updates the name and/or price of an existing course. + * Only non-null and valid values are applied. + */ public void updateCourse(String courseId, String newName, Double newPrice) { Course course = getCourseById(courseId); if (newName != null && !newName.isBlank()) { @@ -64,19 +80,30 @@ public void updateCourse(String courseId, String newName, Double newPrice) { } } + /** + * Deletes a course by its ID. + * Throws CourseNotFoundException if the course does not exist. + */ public void deleteCourse(String courseId) { - getCourseById(courseId); + getCourseById(courseId); // Validates existence courseMap.remove(courseId); } + /** + * Assigns a teacher to a course. + * Both the course and teacher must already exist. + */ public void assignTeacherToCourse(String courseId, String teacherId) { Course course = getCourseById(courseId); Teacher teacher = teacherService.getTeacherById(teacherId); course.setTeacher(teacher); } + /** + * Returns all courses assigned to a specific teacher. + */ public List getCoursesByTeacher(String teacherId) { - teacherService.getTeacherById(teacherId); + teacherService.getTeacherById(teacherId); // Validates teacher existence List teacherCourses = new ArrayList<>(); for (Course course : courseMap.values()) { if (course.getTeacher() != null && course.getTeacher().getTeacherId().equals(teacherId)) { @@ -86,13 +113,35 @@ public List getCoursesByTeacher(String teacherId) { return teacherCourses; } + /** + * Calculates profit for a specific course. + * Profit = moneyEarned - (teacher salary / number of courses the teacher teaches). + * Teacher salary is distributed evenly across all courses they teach. + * If no teacher is assigned, profit equals total money earned. + */ public double getCourseProfit(String courseId) { Course course = getCourseById(courseId); double earned = course.getMoneyEarned(); - double salary = course.getTeacher() != null ? course.getTeacher().getSalary() : 0; - return earned - salary; + + if (course.getTeacher() == null) { + return earned; + } + + String teacherId = course.getTeacher().getTeacherId(); + double teacherSalary = course.getTeacher().getSalary(); + long teacherCourseCount = courseMap.values().stream() + .filter(c -> c.getTeacher() != null && c.getTeacher().getTeacherId().equals(teacherId)) + .count(); + + // Distribute salary evenly across all courses this teacher teaches + double salaryShare = teacherCourseCount > 0 ? teacherSalary / teacherCourseCount : 0; + return earned - salaryShare; } + /** + * Calculates total profit across all courses. + * Total Profit = total money earned from all courses - total salaries of all teachers. + */ public double getTotalProfit() { double totalEarned = courseMap.values().stream().mapToDouble(Course::getMoneyEarned).sum(); double totalSalaries = teacherService.getAllTeachers().stream().mapToDouble(Teacher::getSalary).sum(); diff --git a/src/main/java/com/example/demo/services/StudentService.java b/src/main/java/com/example/demo/services/StudentService.java index d6a5c116..940da700 100644 --- a/src/main/java/com/example/demo/services/StudentService.java +++ b/src/main/java/com/example/demo/services/StudentService.java @@ -12,8 +12,11 @@ import java.util.HashMap; import java.util.List; import java.util.Map; -import java.util.UUID; +/** + * Service layer for managing Student entities. + * Handles creation, retrieval, updating, deletion, enrollment, and unenrollment. + */ @Service public class StudentService { @@ -25,6 +28,10 @@ public StudentService(CourseService courseService) { this.courseService = courseService; } + /** + * Creates a new student with the given name, address, and email. + * The student ID is auto-generated inside the Student constructor. + */ public Student createStudent(String name, String address, String email) { if (name == null || name.isBlank()) { throw new InvalidInputException("Student name cannot be empty"); @@ -35,13 +42,15 @@ public Student createStudent(String name, String address, String email) { if (email == null || email.isBlank()) { throw new InvalidInputException("Student email cannot be empty"); } - String studentId = UUID.randomUUID().toString(); - Student student = new Student(name, address, email); - student.setStudentId(studentId); - studentMap.put(studentId, student); + Student student = new Student(name, address, email); // ID auto-generated in constructor + studentMap.put(student.getStudentId(), student); return student; } + /** + * Retrieves a student by their ID. + * Throws StudentNotFoundException if no student matches the given ID. + */ public Student getStudentById(String studentId) { if (studentId == null) { throw new InvalidInputException("Student ID cannot be null"); @@ -53,10 +62,17 @@ public Student getStudentById(String studentId) { return student; } + /** + * Returns all students in the system. + */ public List getAllStudents() { return new ArrayList<>(studentMap.values()); } + /** + * Updates one or more fields of an existing student. + * Only non-null and non-blank values are applied. + */ public void updateStudent(String studentId, String newName, String newAddress, String newEmail) { Student student = getStudentById(studentId); if (newName != null && !newName.isBlank()) { @@ -70,30 +86,44 @@ public void updateStudent(String studentId, String newName, String newAddress, S } } + /** + * Deletes a student by their ID. + * If the student is enrolled in a course, they are unenrolled first to maintain data integrity. + */ public void deleteStudent(String studentId) { Student student = getStudentById(studentId); if (student.getCourse() != null) { - unenrollStudentFromCourse(studentId); + unenrollStudentFromCourse(studentId); // Clean up enrollment before deletion } studentMap.remove(studentId); } + /** + * Enrolls a student in a course. + * If already enrolled in the same course, throws StudentAlreadyEnrolledException. + * If enrolled in a different course, automatically unenrolls from the previous course first. + */ public void enrollStudentInCourse(String studentId, String courseId) { Student student = getStudentById(studentId); Course newCourse = courseService.getCourseById(courseId); - + if (student.getCourse() != null && student.getCourse().getCourseId().equals(courseId)) { throw new StudentAlreadyEnrolledException("Student is already enrolled in this course"); } - + + // If switching courses, subtract earnings from the old course if (student.getCourse() != null) { student.getCourse().setMoneyEarned(student.getCourse().getMoneyEarned() - student.getCourse().getPrice()); } - + student.setCourse(newCourse); newCourse.setMoneyEarned(newCourse.getMoneyEarned() + newCourse.getPrice()); } + /** + * Unenrolls a student from their current course. + * Throws InvalidInputException if the student is not currently enrolled. + */ public void unenrollStudentFromCourse(String studentId) { Student student = getStudentById(studentId); Course course = student.getCourse(); @@ -104,8 +134,11 @@ public void unenrollStudentFromCourse(String studentId) { student.setCourse(null); } + /** + * Returns all students currently enrolled in the specified course. + */ public List getEnrolledStudents(String courseId) { - courseService.getCourseById(courseId); + courseService.getCourseById(courseId); // Validates course existence List enrolledStudents = new ArrayList<>(); for (Student student : studentMap.values()) { if (student.getCourse() != null && student.getCourse().getCourseId().equals(courseId)) { @@ -115,6 +148,10 @@ public List getEnrolledStudents(String courseId) { return enrolledStudents; } + /** + * Returns the course a student is currently enrolled in. + * Returns null if the student is not enrolled in any course. + */ public Course getCourseForStudent(String studentId) { Student student = getStudentById(studentId); return student.getCourse(); diff --git a/src/main/java/com/example/demo/services/TeacherService.java b/src/main/java/com/example/demo/services/TeacherService.java index 4ed4f14a..ff026d63 100644 --- a/src/main/java/com/example/demo/services/TeacherService.java +++ b/src/main/java/com/example/demo/services/TeacherService.java @@ -2,8 +2,8 @@ import com.example.demo.Exceptions.InvalidInputException; import com.example.demo.Exceptions.TeacherNotFoundException; -import com.example.demo.models.Teacher; import com.example.demo.models.Course; +import com.example.demo.models.Teacher; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; @@ -13,6 +13,11 @@ import java.util.List; import java.util.Map; +/** + * Service layer for managing Teacher entities. + * Handles creation, retrieval, updating, and deletion of teachers. + * On deletion, unassigns the teacher from all their courses. + */ @Service public class TeacherService { @@ -24,6 +29,10 @@ public TeacherService(@Lazy CourseService courseService) { this.courseService = courseService; } + /** + * Creates a new teacher with the given name and salary. + * The teacher ID is auto-generated inside the Teacher constructor. + */ public Teacher createTeacher(String name, double salary) { if (name == null || name.isBlank()) { throw new InvalidInputException("Teacher name cannot be empty"); @@ -31,11 +40,15 @@ public Teacher createTeacher(String name, double salary) { if (salary < 0) { throw new InvalidInputException("Salary cannot be negative"); } - Teacher teacher = new Teacher(name, salary); + Teacher teacher = new Teacher(name, salary); // ID auto-generated in constructor teacherMap.put(teacher.getTeacherId(), teacher); return teacher; } + /** + * Retrieves a teacher by their ID. + * Throws TeacherNotFoundException if no teacher matches the given ID. + */ public Teacher getTeacherById(String teacherId) { if (teacherId == null) { throw new InvalidInputException("Teacher ID cannot be null"); @@ -47,10 +60,17 @@ public Teacher getTeacherById(String teacherId) { return teacher; } + /** + * Returns all teachers in the system. + */ public List getAllTeachers() { return new ArrayList<>(teacherMap.values()); } + /** + * Updates one or more fields of an existing teacher. + * Only non-null and valid values are applied. + */ public void updateTeacher(String teacherId, String newName, Double newSalary) { Teacher teacher = getTeacherById(teacherId); if (newName != null && !newName.isBlank()) { @@ -61,11 +81,16 @@ public void updateTeacher(String teacherId, String newName, Double newSalary) { } } + /** + * Deletes a teacher by their ID. + * Before removal, unassigns the teacher from all courses they are teaching + * to maintain data integrity. + */ public void deleteTeacher(String teacherId) { - getTeacherById(teacherId); + getTeacherById(teacherId); // Validates existence List courses = courseService.getCoursesByTeacher(teacherId); for (Course course : courses) { - course.setTeacher(null); + course.setTeacher(null); // Unassign teacher from all their courses } teacherMap.remove(teacherId); }