From 78789475f9cbbfc4015219fbf218e24599809c91 Mon Sep 17 00:00:00 2001
From: Star Rauchenberger <fefferburbia@gmail.com>
Date: Fri, 12 Jan 2024 14:24:55 -0500
Subject: Turn THE COLORFUL into a cdp

---
 Archipelago/load.gd | 13 ++++++++++++-
 1 file changed, 12 insertions(+), 1 deletion(-)

(limited to 'Archipelago')

diff --git a/Archipelago/load.gd b/Archipelago/load.gd
index a2051c3..7dda51b 100644
--- a/Archipelago/load.gd
+++ b/Archipelago/load.gd
@@ -81,9 +81,20 @@ func _load():
 
 	wanderer_achieve.translation = Vector3(-51, -33, 35)  # way under the map
 
+	# Turn THE COLORFUL into a cdp.
+	var real_colorful = panels_parent.get_node("Countdown Panels/Panel_colorful_colorful")
+	var cdp_auto_scene = load("res://nodes/panel_countdown_auto.tscn")
+	var colorful_cdp = cdp_auto_scene.instance()
+	colorful_cdp.name = "CountdownPanel_colorful"
+	colorful_cdp.replace_with = "../../Panels/Countdown Panels/Panel_colorful_colorful"
+	colorful_cdp.panels = "../../Panels/Doorways Room"
+	colorful_cdp.translation = real_colorful.translation
+	colorful_cdp.rotation = real_colorful.rotation
+	get_node("CountdownPanels").add_child(colorful_cdp)
+	real_colorful.translation = Vector3(-51, -35, 35)  # way under the map
+
 	# Set up The Master to be variable.
 	var old_master_cdp = get_node("CountdownPanels/CountdownPanel_countdown_16")
-	var cdp_auto_scene = load("res://nodes/panel_countdown_auto.tscn")
 	var new_master_cdp = cdp_auto_scene.instance()
 	new_master_cdp.name = "AP_variable_master"
 	new_master_cdp.replace_with = old_master_cdp.replace_with
-- 
cgit 1.4.1


From f6cb14330aedd0b06bca712db9fa0090ae52a7e9 Mon Sep 17 00:00:00 2001
From: Star Rauchenberger <fefferburbia@gmail.com>
Date: Fri, 12 Jan 2024 14:33:51 -0500
Subject: Add progressive colorful

---
 Archipelago/client.gd | 13 +++++++++++++
 1 file changed, 13 insertions(+)

(limited to 'Archipelago')

diff --git a/Archipelago/client.gd b/Archipelago/client.gd
index 788f6ca..3541016 100644
--- a/Archipelago/client.gd
+++ b/Archipelago/client.gd
@@ -49,6 +49,19 @@ const progressive_items = {
 	[
 		{"item": "The Fearless (First Floor) - Second Floor", "display": "Second Floor"},
 		{"item": "The Fearless (Second Floor) - Third Floor", "display": "Third Floor"},
+	],
+	"Progressive Colorful":
+	[
+		{"item": "The Colorful - White Door", "display": "White"},
+		{"item": "The Colorful - Black Door", "display": "Black"},
+		{"item": "The Colorful - Red Door", "display": "Red"},
+		{"item": "The Colorful - Yellow Door", "display": "Yellow"},
+		{"item": "The Colorful - Blue Door", "display": "Blue"},
+		{"item": "The Colorful - Purple Door", "display": "Purple"},
+		{"item": "The Colorful - Orange Door", "display": "Orange"},
+		{"item": "The Colorful - Green Door", "display": "Green"},
+		{"item": "The Colorful - Brown Door", "display": "Brown"},
+		{"item": "The Colorful - Gray Door", "display": "Gray"},
 	]
 }
 
-- 
cgit 1.4.1


From 005f63b0842352c073dcd29acf4759b6f211ecc4 Mon Sep 17 00:00:00 2001
From: Star Rauchenberger <fefferburbia@gmail.com>
Date: Fri, 19 Jan 2024 15:36:23 -0500
Subject: Need to delete door blocking Colorful cdp

---
 Archipelago/load.gd | 1 +
 1 file changed, 1 insertion(+)

(limited to 'Archipelago')

diff --git a/Archipelago/load.gd b/Archipelago/load.gd
index 7dda51b..2d5f7c6 100644
--- a/Archipelago/load.gd
+++ b/Archipelago/load.gd
@@ -92,6 +92,7 @@ func _load():
 	colorful_cdp.rotation = real_colorful.rotation
 	get_node("CountdownPanels").add_child(colorful_cdp)
 	real_colorful.translation = Vector3(-51, -35, 35)  # way under the map
+	get_node("Doors/Doorway Room Doors/Door_gray2").queue_free()
 
 	# Set up The Master to be variable.
 	var old_master_cdp = get_node("CountdownPanels/CountdownPanel_countdown_16")
-- 
cgit 1.4.1


From b2b098573ef5bcd03d61e827d11b969460d992af Mon Sep 17 00:00:00 2001
From: Star Rauchenberger <fefferburbia@gmail.com>
Date: Wed, 31 Jan 2024 15:23:08 -0500
Subject: Added support for warp items (including sunwarps)

---
 Archipelago/client.gd          | 26 ++++++++++++++++++++++++++
 Archipelago/settings_screen.gd |  1 +
 Archipelago/teleport.gd        | 24 ++++++++++++++++++++++++
 util/generate_gamedata.rb      | 24 ++++++++++++++++++++++++
 4 files changed, 75 insertions(+)
 create mode 100644 Archipelago/teleport.gd

(limited to 'Archipelago')

diff --git a/Archipelago/client.gd b/Archipelago/client.gd
index 3541016..db79e15 100644
--- a/Archipelago/client.gd
+++ b/Archipelago/client.gd
@@ -62,6 +62,15 @@ const progressive_items = {
 		{"item": "The Colorful - Green Door", "display": "Green"},
 		{"item": "The Colorful - Brown Door", "display": "Brown"},
 		{"item": "The Colorful - Gray Door", "display": "Gray"},
+	],
+	"Progressive Pilgrimage":
+	[
+		{"item": "Hub Room - 1 Sunwarp", "display": "1 Sunwarp"},
+		{"item": "Orange Tower Fourth Floor - 2 Sunwarp", "display": "2 Sunwarp"},
+		{"item": "Orange Tower Third Floor - 3 Sunwarp", "display": "3 Sunwarp"},
+		{"item": "Orange Tower First Floor - 4 Sunwarp", "display": "4 Sunwarp"},
+		{"item": "Orange Tower Fourth Floor - 5 Sunwarp", "display": "5 Sunwarp"},
+		{"item": "Outside The Agreeable - 6 Sunwarp", "display": "6 Sunwarp"},
 	]
 }
 
@@ -80,6 +89,11 @@ const kCLASSIFICATION_REMOTE_NORMAL = 0
 const kCLASSIFICATION_REMOTE_REDUCED = 1
 const kCLASSIFICATION_REMOTE_INSANITY = 2
 
+const kSUNWARP_ACCESS_NORMAL = 0
+const kSUNWARP_ACCESS_DISABLED = 1
+const kSUNWARP_ACCESS_UNLOCK = 2
+const kSUNWARP_ACCESS_PROGRESSIVE = 3
+
 var _client = WebSocketClient.new()
 var _should_process = false
 var _initiated_disconnect = false
@@ -111,6 +125,7 @@ var _door_shuffle = false
 var _color_shuffle = false
 var _panel_shuffle = 0  # none, rearrange
 var _painting_shuffle = false
+var _sunwarp_access = 0  # normal, disabled, unlock, progressive
 var _mastery_achievements = 21
 var _level_2_requirement = 223
 var _location_classification_bit = 0
@@ -276,6 +291,8 @@ func _on_data():
 				_painting_shuffle = _slot_data["shuffle_paintings"]
 			if _slot_data.has("shuffle_panels"):
 				_panel_shuffle = _slot_data["shuffle_panels"]
+			if _slot_data.has("sunwarp_access"):
+				_sunwarp_access = _slot_data["sunwarp_access"]
 			if _slot_data.has("seed"):
 				_slot_seed = _slot_data["seed"]
 			if _slot_data.has("painting_entrance_to_exit"):
@@ -632,6 +649,11 @@ func processItem(item, index, from, flags):
 				painting_node = fake_parent_node.get_node_or_null(painting_id)
 				if painting_node != null:
 					painting_node.get_node("Script").movePainting()
+	
+	if gamedata.warp_ids_by_item_id.has(int(item)):
+		var warpsNode = get_tree().get_root().get_node("Spatial/Warps")
+		for warp_id in gamedata.warp_ids_by_item_id[int(item)]:
+			warpsNode.get_node(warp_id).unlock_warp()
 
 	# Handle progressive items.
 	if item_name in progressive_items.keys():
@@ -693,6 +715,10 @@ func paintingIsVanilla(painting):
 	return !$Gamedata.mentioned_paintings.has(painting)
 
 
+func warpIsVanilla(warp):
+	return !$Gamedata.mentioned_warps.has(warp)
+
+
 func evaluateSolvability():
 	emit_signal("evaluate_solvability")
 
diff --git a/Archipelago/settings_screen.gd b/Archipelago/settings_screen.gd
index 2cabe09..0ae218e 100644
--- a/Archipelago/settings_screen.gd
+++ b/Archipelago/settings_screen.gd
@@ -46,6 +46,7 @@ func _ready():
 		installScriptExtension(ResourceLoader.load("user://maps/Archipelago/panelInput.gd"))
 		installScriptExtension(ResourceLoader.load("user://maps/Archipelago/pause_menu.gd"))
 		installScriptExtension(ResourceLoader.load("user://maps/Archipelago/player.gd"))
+		installScriptExtension(ResourceLoader.load("user://maps/Archipelago/teleport.gd"))
 		installScriptExtension(ResourceLoader.load("user://maps/Archipelago/worldTransporter.gd"))
 
 	var apclient = global.get_node("Archipelago")
diff --git a/Archipelago/teleport.gd b/Archipelago/teleport.gd
new file mode 100644
index 0000000..d322722
--- /dev/null
+++ b/Archipelago/teleport.gd
@@ -0,0 +1,24 @@
+extends "res://scripts/teleport.gd"
+
+var _unlocked = true
+
+
+func _ready():
+	var apclient = global.get_node("Archipelago")
+	if apclient._door_shuffle and !apclient.warpIsVanilla(self.get_parent().name + "/" + self.name):
+		if self.get_parent().name == "Teleporter Warps":
+			if apclient._sunwarp_access != apclient.kSUNWARP_ACCESS_NORMAL:
+				_unlocked = false
+		else:
+			_unlocked = false
+
+	._ready()
+
+
+func _body_entered(var body):
+	if _unlocked:
+		._body_entered(body)
+
+
+func unlock_warp():
+	_unlocked = true
diff --git a/util/generate_gamedata.rb b/util/generate_gamedata.rb
index 5e03655..1cce003 100644
--- a/util/generate_gamedata.rb
+++ b/util/generate_gamedata.rb
@@ -15,10 +15,12 @@ door_groups = {}
 panel_output = []
 door_ids_by_item_id = {}
 painting_ids_by_item_id = {}
+warp_ids_by_item_id = {}
 panel_ids_by_location_id = {}
 classification_by_location_id = {}
 mentioned_doors = Set[]
 mentioned_paintings = Set[]
+mentioned_warps = Set[]
 painting_output = {}
 
 ids_config = YAML.load_file(idspath)
@@ -152,6 +154,18 @@ config.each do |room_name, room_data|
           painting_ids_by_item_id[item_id] = internal_painting_ids
           mentioned_paintings.merge(internal_painting_ids)
         end
+
+        if door.include? "warp_id"
+          internal_warp_ids = []
+          if door["warp_id"].kind_of? String
+            internal_warp_ids = [door["warp_id"]]
+          else
+            internal_warp_ids = door["warp_id"]
+          end
+
+          warp_ids_by_item_id[item_id] = internal_warp_ids
+          mentioned_warps.merge(internal_warp_ids)
+        end
       end
     end
   end
@@ -181,6 +195,12 @@ File.open(outputpath, "w") do |f|
       "\"#{painting_id}\""
     end.join(",") + "]"
   end.join(","))
+  f.write "}\nvar warp_ids_by_item_id = {"
+  f.write(warp_ids_by_item_id.map do |item_id, warp_ids|
+    "#{item_id}:[" + warp_ids.map do |warp_id|
+      "\"#{warp_id}\""
+    end.join(",") + "]"
+  end.join(","))
   f.write "}\nvar panel_ids_by_location_id = {"
   f.write(panel_ids_by_location_id.map do |location_id, panel_ids|
     "#{location_id}:[" + panel_ids.map do |panel_id|
@@ -195,6 +215,10 @@ File.open(outputpath, "w") do |f|
   f.write(mentioned_paintings.map do |painting_id|
     "\"#{painting_id}\""
   end.join(","))
+  f.write "]\nvar mentioned_warps = ["
+  f.write(mentioned_warps.map do |warp_id|
+    "\"#{warp_id}\""
+  end.join(","))
   f.write "]\nvar paintings = {"
   f.write(painting_output.map do |painting_id, painting|
     "\"#{painting_id}\":{\"orientation\":\"#{painting["orientation"]}\",\"move\":#{painting.include? "move" and painting["move"]}}"
-- 
cgit 1.4.1


From 17572f8cd5945536eccffbbe832517d75993c03f Mon Sep 17 00:00:00 2001
From: Star Rauchenberger <fefferburbia@gmail.com>
Date: Tue, 20 Feb 2024 10:09:57 -0500
Subject: Revert "Added support for warp items (including sunwarps)"

This reverts commit b2b098573ef5bcd03d61e827d11b969460d992af.
---
 Archipelago/client.gd          | 26 --------------------------
 Archipelago/settings_screen.gd |  1 -
 Archipelago/teleport.gd        | 24 ------------------------
 util/generate_gamedata.rb      | 24 ------------------------
 4 files changed, 75 deletions(-)
 delete mode 100644 Archipelago/teleport.gd

(limited to 'Archipelago')

diff --git a/Archipelago/client.gd b/Archipelago/client.gd
index db79e15..3541016 100644
--- a/Archipelago/client.gd
+++ b/Archipelago/client.gd
@@ -62,15 +62,6 @@ const progressive_items = {
 		{"item": "The Colorful - Green Door", "display": "Green"},
 		{"item": "The Colorful - Brown Door", "display": "Brown"},
 		{"item": "The Colorful - Gray Door", "display": "Gray"},
-	],
-	"Progressive Pilgrimage":
-	[
-		{"item": "Hub Room - 1 Sunwarp", "display": "1 Sunwarp"},
-		{"item": "Orange Tower Fourth Floor - 2 Sunwarp", "display": "2 Sunwarp"},
-		{"item": "Orange Tower Third Floor - 3 Sunwarp", "display": "3 Sunwarp"},
-		{"item": "Orange Tower First Floor - 4 Sunwarp", "display": "4 Sunwarp"},
-		{"item": "Orange Tower Fourth Floor - 5 Sunwarp", "display": "5 Sunwarp"},
-		{"item": "Outside The Agreeable - 6 Sunwarp", "display": "6 Sunwarp"},
 	]
 }
 
@@ -89,11 +80,6 @@ const kCLASSIFICATION_REMOTE_NORMAL = 0
 const kCLASSIFICATION_REMOTE_REDUCED = 1
 const kCLASSIFICATION_REMOTE_INSANITY = 2
 
-const kSUNWARP_ACCESS_NORMAL = 0
-const kSUNWARP_ACCESS_DISABLED = 1
-const kSUNWARP_ACCESS_UNLOCK = 2
-const kSUNWARP_ACCESS_PROGRESSIVE = 3
-
 var _client = WebSocketClient.new()
 var _should_process = false
 var _initiated_disconnect = false
@@ -125,7 +111,6 @@ var _door_shuffle = false
 var _color_shuffle = false
 var _panel_shuffle = 0  # none, rearrange
 var _painting_shuffle = false
-var _sunwarp_access = 0  # normal, disabled, unlock, progressive
 var _mastery_achievements = 21
 var _level_2_requirement = 223
 var _location_classification_bit = 0
@@ -291,8 +276,6 @@ func _on_data():
 				_painting_shuffle = _slot_data["shuffle_paintings"]
 			if _slot_data.has("shuffle_panels"):
 				_panel_shuffle = _slot_data["shuffle_panels"]
-			if _slot_data.has("sunwarp_access"):
-				_sunwarp_access = _slot_data["sunwarp_access"]
 			if _slot_data.has("seed"):
 				_slot_seed = _slot_data["seed"]
 			if _slot_data.has("painting_entrance_to_exit"):
@@ -649,11 +632,6 @@ func processItem(item, index, from, flags):
 				painting_node = fake_parent_node.get_node_or_null(painting_id)
 				if painting_node != null:
 					painting_node.get_node("Script").movePainting()
-	
-	if gamedata.warp_ids_by_item_id.has(int(item)):
-		var warpsNode = get_tree().get_root().get_node("Spatial/Warps")
-		for warp_id in gamedata.warp_ids_by_item_id[int(item)]:
-			warpsNode.get_node(warp_id).unlock_warp()
 
 	# Handle progressive items.
 	if item_name in progressive_items.keys():
@@ -715,10 +693,6 @@ func paintingIsVanilla(painting):
 	return !$Gamedata.mentioned_paintings.has(painting)
 
 
-func warpIsVanilla(warp):
-	return !$Gamedata.mentioned_warps.has(warp)
-
-
 func evaluateSolvability():
 	emit_signal("evaluate_solvability")
 
diff --git a/Archipelago/settings_screen.gd b/Archipelago/settings_screen.gd
index 0ae218e..2cabe09 100644
--- a/Archipelago/settings_screen.gd
+++ b/Archipelago/settings_screen.gd
@@ -46,7 +46,6 @@ func _ready():
 		installScriptExtension(ResourceLoader.load("user://maps/Archipelago/panelInput.gd"))
 		installScriptExtension(ResourceLoader.load("user://maps/Archipelago/pause_menu.gd"))
 		installScriptExtension(ResourceLoader.load("user://maps/Archipelago/player.gd"))
-		installScriptExtension(ResourceLoader.load("user://maps/Archipelago/teleport.gd"))
 		installScriptExtension(ResourceLoader.load("user://maps/Archipelago/worldTransporter.gd"))
 
 	var apclient = global.get_node("Archipelago")
diff --git a/Archipelago/teleport.gd b/Archipelago/teleport.gd
deleted file mode 100644
index d322722..0000000
--- a/Archipelago/teleport.gd
+++ /dev/null
@@ -1,24 +0,0 @@
-extends "res://scripts/teleport.gd"
-
-var _unlocked = true
-
-
-func _ready():
-	var apclient = global.get_node("Archipelago")
-	if apclient._door_shuffle and !apclient.warpIsVanilla(self.get_parent().name + "/" + self.name):
-		if self.get_parent().name == "Teleporter Warps":
-			if apclient._sunwarp_access != apclient.kSUNWARP_ACCESS_NORMAL:
-				_unlocked = false
-		else:
-			_unlocked = false
-
-	._ready()
-
-
-func _body_entered(var body):
-	if _unlocked:
-		._body_entered(body)
-
-
-func unlock_warp():
-	_unlocked = true
diff --git a/util/generate_gamedata.rb b/util/generate_gamedata.rb
index 1cce003..5e03655 100644
--- a/util/generate_gamedata.rb
+++ b/util/generate_gamedata.rb
@@ -15,12 +15,10 @@ door_groups = {}
 panel_output = []
 door_ids_by_item_id = {}
 painting_ids_by_item_id = {}
-warp_ids_by_item_id = {}
 panel_ids_by_location_id = {}
 classification_by_location_id = {}
 mentioned_doors = Set[]
 mentioned_paintings = Set[]
-mentioned_warps = Set[]
 painting_output = {}
 
 ids_config = YAML.load_file(idspath)
@@ -154,18 +152,6 @@ config.each do |room_name, room_data|
           painting_ids_by_item_id[item_id] = internal_painting_ids
           mentioned_paintings.merge(internal_painting_ids)
         end
-
-        if door.include? "warp_id"
-          internal_warp_ids = []
-          if door["warp_id"].kind_of? String
-            internal_warp_ids = [door["warp_id"]]
-          else
-            internal_warp_ids = door["warp_id"]
-          end
-
-          warp_ids_by_item_id[item_id] = internal_warp_ids
-          mentioned_warps.merge(internal_warp_ids)
-        end
       end
     end
   end
@@ -195,12 +181,6 @@ File.open(outputpath, "w") do |f|
       "\"#{painting_id}\""
     end.join(",") + "]"
   end.join(","))
-  f.write "}\nvar warp_ids_by_item_id = {"
-  f.write(warp_ids_by_item_id.map do |item_id, warp_ids|
-    "#{item_id}:[" + warp_ids.map do |warp_id|
-      "\"#{warp_id}\""
-    end.join(",") + "]"
-  end.join(","))
   f.write "}\nvar panel_ids_by_location_id = {"
   f.write(panel_ids_by_location_id.map do |location_id, panel_ids|
     "#{location_id}:[" + panel_ids.map do |panel_id|
@@ -215,10 +195,6 @@ File.open(outputpath, "w") do |f|
   f.write(mentioned_paintings.map do |painting_id|
     "\"#{painting_id}\""
   end.join(","))
-  f.write "]\nvar mentioned_warps = ["
-  f.write(mentioned_warps.map do |warp_id|
-    "\"#{warp_id}\""
-  end.join(","))
   f.write "]\nvar paintings = {"
   f.write(painting_output.map do |painting_id, painting|
     "\"#{painting_id}\":{\"orientation\":\"#{painting["orientation"]}\",\"move\":#{painting.include? "move" and painting["move"]}}"
-- 
cgit 1.4.1


From 0e1c0f8c4643ddf972f03922df9152b737ef4641 Mon Sep 17 00:00:00 2001
From: Star Rauchenberger <fefferburbia@gmail.com>
Date: Tue, 20 Feb 2024 10:17:29 -0500
Subject: Bump version

---
 Archipelago/client.gd | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

(limited to 'Archipelago')

diff --git a/Archipelago/client.gd b/Archipelago/client.gd
index 3541016..a7cfa23 100644
--- a/Archipelago/client.gd
+++ b/Archipelago/client.gd
@@ -15,7 +15,7 @@ var ap_pass = ""
 var confusify_world = false
 var enable_multiplayer = false
 
-const my_version = "1.1.0"
+const my_version = "2.0.0-beta1"
 const ap_version = {"major": 0, "minor": 4, "build": 4, "class": "Version"}
 const color_items = [
 	"White", "Black", "Red", "Blue", "Green", "Brown", "Gray", "Orange", "Purple", "Yellow"
-- 
cgit 1.4.1


From db26ac332b91b473feb16ecf6a651413be906612 Mon Sep 17 00:00:00 2001
From: Star Rauchenberger <fefferburbia@gmail.com>
Date: Fri, 15 Mar 2024 14:13:26 -0400
Subject: Bump beta version

---
 Archipelago/client.gd | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

(limited to 'Archipelago')

diff --git a/Archipelago/client.gd b/Archipelago/client.gd
index 24c8134..17cb48a 100644
--- a/Archipelago/client.gd
+++ b/Archipelago/client.gd
@@ -15,7 +15,7 @@ var ap_pass = ""
 var confusify_world = false
 var enable_multiplayer = false
 
-const my_version = "2.0.0-beta1"
+const my_version = "2.0.0-beta2"
 const ap_version = {"major": 0, "minor": 4, "build": 4, "class": "Version"}
 const color_items = [
 	"White", "Black", "Red", "Blue", "Green", "Brown", "Gray", "Orange", "Purple", "Yellow"
-- 
cgit 1.4.1


From 38004bc2cd3d27b40ab9942488ed0257751337e0 Mon Sep 17 00:00:00 2001
From: Star Rauchenberger <fefferburbia@gmail.com>
Date: Fri, 15 Mar 2024 14:19:02 -0400
Subject: Bump AP version

---
 Archipelago/client.gd | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

(limited to 'Archipelago')

diff --git a/Archipelago/client.gd b/Archipelago/client.gd
index 17cb48a..58a099c 100644
--- a/Archipelago/client.gd
+++ b/Archipelago/client.gd
@@ -16,7 +16,7 @@ var confusify_world = false
 var enable_multiplayer = false
 
 const my_version = "2.0.0-beta2"
-const ap_version = {"major": 0, "minor": 4, "build": 4, "class": "Version"}
+const ap_version = {"major": 0, "minor": 4, "build": 5, "class": "Version"}
 const color_items = [
 	"White", "Black", "Red", "Blue", "Green", "Brown", "Gray", "Orange", "Purple", "Yellow"
 ]
-- 
cgit 1.4.1