diff --git a/CovidABM/LICENSE b/CovidAlertVaccinationModel/LICENSE
similarity index 100%
rename from CovidABM/LICENSE
rename to CovidAlertVaccinationModel/LICENSE
diff --git a/CovidAlertVaccinationModel/Manifest.toml b/CovidAlertVaccinationModel/Manifest.toml
new file mode 100644
index 0000000000000000000000000000000000000000..9f2dd289cf1e7347e1255edf9e28e64f56b22f94
--- /dev/null
+++ b/CovidAlertVaccinationModel/Manifest.toml
@@ -0,0 +1,1090 @@
+# This file is machine-generated - editing it directly is not advised
+
+[[Adapt]]
+deps = ["LinearAlgebra"]
+git-tree-sha1 = "ffcfa2d345aaee0ef3d8346a073d5dd03c983ebe"
+uuid = "79e6a3ab-5dfb-504d-930d-738a2a938a0e"
+version = "3.2.0"
+
+[[ArgCheck]]
+git-tree-sha1 = "dedbbb2ddb876f899585c4ec4433265e3017215a"
+uuid = "dce04be8-c92d-5529-be00-80e4d2c0e197"
+version = "2.1.0"
+
+[[ArgTools]]
+uuid = "0dad84c5-d112-42e6-8d28-ef12dabb789f"
+
+[[ArnoldiMethod]]
+deps = ["LinearAlgebra", "Random", "StaticArrays"]
+git-tree-sha1 = "f87e559f87a45bece9c9ed97458d3afe98b1ebb9"
+uuid = "ec485272-7323-5ecc-a04f-4719b315124d"
+version = "0.1.0"
+
+[[ArrayInterface]]
+deps = ["IfElse", "LinearAlgebra", "Requires", "SparseArrays"]
+git-tree-sha1 = "ee07ae00e3cc277dcfa5507ce25be522313ecc3e"
+uuid = "4fba245c-0d91-5ea0-9b3e-6abc04ee57a9"
+version = "3.1.1"
+
+[[Artifacts]]
+uuid = "56f22d72-fd6d-98f1-02f0-08ddc0907c33"
+
+[[BangBang]]
+deps = ["Compat", "ConstructionBase", "Future", "InitialValues", "LinearAlgebra", "Requires", "Setfield", "Tables", "ZygoteRules"]
+git-tree-sha1 = "d53b1eaefd48e233545d21f5b764c8ee54df4a09"
+uuid = "198e06fe-97b7-11e9-32a5-e1d131e6ad66"
+version = "0.3.30"
+
+[[Base64]]
+uuid = "2a0f44e3-6c83-55bd-87e4-b1978d98bd5f"
+
+[[BenchmarkTools]]
+deps = ["JSON", "Logging", "Printf", "Statistics", "UUIDs"]
+git-tree-sha1 = "9e62e66db34540a0c919d72172cc2f642ac71260"
+uuid = "6e4b80f9-dd63-53aa-95a3-0cdb28fa8baf"
+version = "0.5.0"
+
+[[Bzip2_jll]]
+deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"]
+git-tree-sha1 = "c3598e525718abcc440f69cc6d5f60dda0a1b61e"
+uuid = "6e34b625-4abd-537c-b88f-471c36dfa7a0"
+version = "1.0.6+5"
+
+[[CSV]]
+deps = ["Dates", "Mmap", "Parsers", "PooledArrays", "SentinelArrays", "Tables", "Unicode"]
+git-tree-sha1 = "1f79803452adf73e2d3fc84785adb7aaca14db36"
+uuid = "336ed68f-0bac-5ca0-87d4-7b16caf5d00b"
+version = "0.8.3"
+
+[[Cairo_jll]]
+deps = ["Artifacts", "Bzip2_jll", "Fontconfig_jll", "FreeType2_jll", "Glib_jll", "JLLWrappers", "LZO_jll", "Libdl", "Pixman_jll", "Pkg", "Xorg_libXext_jll", "Xorg_libXrender_jll", "Zlib_jll", "libpng_jll"]
+git-tree-sha1 = "e2f47f6d8337369411569fd45ae5753ca10394c6"
+uuid = "83423d85-b0ee-5818-9007-b63ccbeb887a"
+version = "1.16.0+6"
+
+[[CategoricalArrays]]
+deps = ["DataAPI", "Future", "JSON", "Missings", "Printf", "Statistics", "StructTypes", "Unicode"]
+git-tree-sha1 = "99809999c8ee01fa89498480b147f7394ea5450f"
+uuid = "324d7699-5711-5eae-9e2f-1d82baa6b597"
+version = "0.9.2"
+
+[[ChainRulesCore]]
+deps = ["Compat", "LinearAlgebra", "SparseArrays"]
+git-tree-sha1 = "de4f08843c332d355852721adb1592bce7924da3"
+uuid = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4"
+version = "0.9.29"
+
+[[ColorSchemes]]
+deps = ["ColorTypes", "Colors", "FixedPointNumbers", "Random", "StaticArrays"]
+git-tree-sha1 = "3141757b5832ee7a0386db87997ee5a23ff20f4d"
+uuid = "35d6a980-a343-548e-a6ea-1d62b119f2f4"
+version = "3.10.2"
+
+[[ColorTypes]]
+deps = ["FixedPointNumbers", "Random"]
+git-tree-sha1 = "4bffea7ed1a9f0f3d1a131bbcd4b925548d75288"
+uuid = "3da002f7-5984-5a60-b8a6-cbb66c0b333f"
+version = "0.10.9"
+
+[[Colors]]
+deps = ["ColorTypes", "FixedPointNumbers", "InteractiveUtils", "Reexport"]
+git-tree-sha1 = "ac5f2213e56ed8a34a3dd2f681f4df1166b34929"
+uuid = "5ae59095-9a9b-59fe-a467-6f913c188581"
+version = "0.12.6"
+
+[[Compat]]
+deps = ["Base64", "Dates", "DelimitedFiles", "Distributed", "InteractiveUtils", "LibGit2", "Libdl", "LinearAlgebra", "Markdown", "Mmap", "Pkg", "Printf", "REPL", "Random", "SHA", "Serialization", "SharedArrays", "Sockets", "SparseArrays", "Statistics", "Test", "UUIDs", "Unicode"]
+git-tree-sha1 = "919c7f3151e79ff196add81d7f4e45d91bbf420b"
+uuid = "34da2185-b29b-5c13-b0c7-acf172513d20"
+version = "3.25.0"
+
+[[CompilerSupportLibraries_jll]]
+deps = ["Artifacts", "Libdl"]
+uuid = "e66e0078-7015-5450-92f7-15fbd957f2ae"
+
+[[CompositionsBase]]
+git-tree-sha1 = "f3955eb38944e5dd0fabf8ca1e267d94941d34a5"
+uuid = "a33af91c-f02d-484b-be07-31d278c5ca2b"
+version = "0.1.0"
+
+[[ConstructionBase]]
+deps = ["LinearAlgebra"]
+git-tree-sha1 = "48920211c95a6da1914a06c44ec94be70e84ffff"
+uuid = "187b0558-2788-49d3-abe0-74a17ed4e7c9"
+version = "1.1.0"
+
+[[Contour]]
+deps = ["StaticArrays"]
+git-tree-sha1 = "9f02045d934dc030edad45944ea80dbd1f0ebea7"
+uuid = "d38c429a-6771-53c6-b99e-75d170b6e991"
+version = "0.5.7"
+
+[[Crayons]]
+git-tree-sha1 = "3f71217b538d7aaee0b69ab47d9b7724ca8afa0d"
+uuid = "a8cc5b0e-0ffa-5ad4-8c14-923d3ee1735f"
+version = "4.0.4"
+
+[[DataAPI]]
+git-tree-sha1 = "dfb3b7e89e395be1e25c2ad6d7690dc29cc53b1d"
+uuid = "9a962f9c-6df0-11e9-0e5d-c546b8b5ee8a"
+version = "1.6.0"
+
+[[DataFrames]]
+deps = ["CategoricalArrays", "Compat", "DataAPI", "Future", "InvertedIndices", "IteratorInterfaceExtensions", "LinearAlgebra", "Markdown", "Missings", "PooledArrays", "PrettyTables", "Printf", "REPL", "Reexport", "SortingAlgorithms", "Statistics", "TableTraits", "Tables", "Unicode"]
+git-tree-sha1 = "b0db5579803eabb33f1274ca7ca2f472fdfb7f2a"
+uuid = "a93c6f00-e57d-5684-b7b6-d8193f3e46c0"
+version = "0.22.5"
+
+[[DataStructures]]
+deps = ["Compat", "InteractiveUtils", "OrderedCollections"]
+git-tree-sha1 = "4437b64df1e0adccc3e5d1adbc3ac741095e4677"
+uuid = "864edb3b-99cc-5e75-8d2d-829cb0a9cfe8"
+version = "0.18.9"
+
+[[DataValueInterfaces]]
+git-tree-sha1 = "bfc1187b79289637fa0ef6d4436ebdfe6905cbd6"
+uuid = "e2d170a0-9d28-54be-80f0-106bbe20a464"
+version = "1.0.0"
+
+[[Dates]]
+deps = ["Printf"]
+uuid = "ade2ca70-3891-5945-98fb-dc099432e06a"
+
+[[DefineSingletons]]
+git-tree-sha1 = "77b4ca280084423b728662fe040e5ff8819347c5"
+uuid = "244e2a9f-e319-4986-a169-4d1fe445cd52"
+version = "0.1.1"
+
+[[DelimitedFiles]]
+deps = ["Mmap"]
+uuid = "8bb1440f-4735-579b-a4ab-409b98df4dab"
+
+[[Distributed]]
+deps = ["Random", "Serialization", "Sockets"]
+uuid = "8ba89e20-285c-5b6f-9357-94700520ee1b"
+
+[[Distributions]]
+deps = ["FillArrays", "LinearAlgebra", "PDMats", "Printf", "QuadGK", "Random", "SparseArrays", "SpecialFunctions", "Statistics", "StatsBase", "StatsFuns"]
+git-tree-sha1 = "5a9a742ae30f13d6172c7ea245988d932134e25b"
+uuid = "31c24e10-a181-5473-b8eb-7969acd0382f"
+version = "0.24.13"
+
+[[Downloads]]
+deps = ["ArgTools", "LibCURL", "NetworkOptions"]
+uuid = "f43a241f-c20a-4ad4-852c-f6b1247861c6"
+
+[[EarCut_jll]]
+deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"]
+git-tree-sha1 = "92d8f9f208637e8d2d28c664051a00569c01493d"
+uuid = "5ae413db-bbd1-5e63-b57d-d24a61df00f5"
+version = "2.1.5+1"
+
+[[Expat_jll]]
+deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"]
+git-tree-sha1 = "1402e52fcda25064f51c77a9655ce8680b76acf0"
+uuid = "2e619515-83b5-522b-bb60-26c02a35a201"
+version = "2.2.7+6"
+
+[[ExprTools]]
+git-tree-sha1 = "10407a39b87f29d47ebaca8edbc75d7c302ff93e"
+uuid = "e2ba6199-217a-4e67-a87a-7c52f15ade04"
+version = "0.1.3"
+
+[[EzXML]]
+deps = ["Printf", "XML2_jll"]
+git-tree-sha1 = "0fa3b52a04a4e210aeb1626def9c90df3ae65268"
+uuid = "8f5d6c58-4d21-5cfd-889c-e3ad7ee6a615"
+version = "1.1.0"
+
+[[FFMPEG]]
+deps = ["FFMPEG_jll", "x264_jll"]
+git-tree-sha1 = "9a73ffdc375be61b0e4516d83d880b265366fe1f"
+uuid = "c87230d0-a227-11e9-1b43-d7ebe4e7570a"
+version = "0.4.0"
+
+[[FFMPEG_jll]]
+deps = ["Artifacts", "Bzip2_jll", "FreeType2_jll", "FriBidi_jll", "JLLWrappers", "LAME_jll", "LibVPX_jll", "Libdl", "Ogg_jll", "OpenSSL_jll", "Opus_jll", "Pkg", "Zlib_jll", "libass_jll", "libfdk_aac_jll", "libvorbis_jll", "x264_jll", "x265_jll"]
+git-tree-sha1 = "3cc57ad0a213808473eafef4845a74766242e05f"
+uuid = "b22a6f82-2f65-5046-a5b2-351ab43fb4e5"
+version = "4.3.1+4"
+
+[[FillArrays]]
+deps = ["LinearAlgebra", "Random", "SparseArrays"]
+git-tree-sha1 = "e384d3cff80ac79c7a541a817192841836e46331"
+uuid = "1a297f60-69ca-5386-bcde-b61e274b549b"
+version = "0.11.2"
+
+[[FixedPointNumbers]]
+deps = ["Statistics"]
+git-tree-sha1 = "335bfdceacc84c5cdf16aadc768aa5ddfc5383cc"
+uuid = "53c48c17-4a7d-5ca2-90c5-79b7896eea93"
+version = "0.8.4"
+
+[[Fontconfig_jll]]
+deps = ["Artifacts", "Bzip2_jll", "Expat_jll", "FreeType2_jll", "JLLWrappers", "Libdl", "Libuuid_jll", "Pkg", "Zlib_jll"]
+git-tree-sha1 = "35895cf184ceaab11fd778b4590144034a167a2f"
+uuid = "a3f928ae-7b40-5064-980b-68af3947d34b"
+version = "2.13.1+14"
+
+[[Formatting]]
+deps = ["Printf"]
+git-tree-sha1 = "8339d61043228fdd3eb658d86c926cb282ae72a8"
+uuid = "59287772-0a20-5a39-b81b-1366585eb4c0"
+version = "0.4.2"
+
+[[FreeType2_jll]]
+deps = ["Artifacts", "Bzip2_jll", "JLLWrappers", "Libdl", "Pkg", "Zlib_jll"]
+git-tree-sha1 = "cbd58c9deb1d304f5a245a0b7eb841a2560cfec6"
+uuid = "d7e528f0-a631-5988-bf34-fe36492bcfd7"
+version = "2.10.1+5"
+
+[[FriBidi_jll]]
+deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"]
+git-tree-sha1 = "0d20aed5b14dd4c9a2453c1b601d08e1149679cc"
+uuid = "559328eb-81f9-559d-9380-de523a88c83c"
+version = "1.0.5+6"
+
+[[Future]]
+deps = ["Random"]
+uuid = "9fa8497b-333b-5362-9e8d-4d0656e87820"
+
+[[GLFW_jll]]
+deps = ["Artifacts", "JLLWrappers", "Libdl", "Libglvnd_jll", "Pkg", "Xorg_libXcursor_jll", "Xorg_libXi_jll", "Xorg_libXinerama_jll", "Xorg_libXrandr_jll"]
+git-tree-sha1 = "a1bbf700b5388bffc3d882f4f4d625cf1c714fd7"
+uuid = "0656b61e-2033-5cc2-a64a-77c0f6c09b89"
+version = "3.3.2+1"
+
+[[GR]]
+deps = ["Base64", "DelimitedFiles", "GR_jll", "HTTP", "JSON", "LinearAlgebra", "Pkg", "Printf", "Random", "Serialization", "Sockets", "Test", "UUIDs"]
+git-tree-sha1 = "aaebdf5588281c2902f499b49e67953f2b409c9c"
+uuid = "28b8d3ca-fb5f-59d9-8090-bfdbd6d07a71"
+version = "0.54.0"
+
+[[GR_jll]]
+deps = ["Artifacts", "Bzip2_jll", "Cairo_jll", "FFMPEG_jll", "Fontconfig_jll", "GLFW_jll", "JLLWrappers", "JpegTurbo_jll", "Libdl", "Libtiff_jll", "Pixman_jll", "Pkg", "Qt_jll", "Zlib_jll", "libpng_jll"]
+git-tree-sha1 = "8aee6fa096b0cbdb05e71750c978b96a08c78951"
+uuid = "d2c73de3-f751-5644-a686-071e5b155ba9"
+version = "0.53.0+0"
+
+[[GeometryBasics]]
+deps = ["EarCut_jll", "IterTools", "LinearAlgebra", "StaticArrays", "StructArrays", "Tables"]
+git-tree-sha1 = "4d4f72691933d5b6ee1ff20e27a102c3ae99d123"
+uuid = "5c1252a2-5f33-56bf-86c9-59e7332b4326"
+version = "0.3.9"
+
+[[Gettext_jll]]
+deps = ["Artifacts", "JLLWrappers", "Libdl", "Libiconv_jll", "Pkg", "XML2_jll"]
+git-tree-sha1 = "8c14294a079216000a0bdca5ec5a447f073ddc9d"
+uuid = "78b55507-aeef-58d4-861c-77aaff3498b1"
+version = "0.20.1+7"
+
+[[Glib_jll]]
+deps = ["Artifacts", "Gettext_jll", "JLLWrappers", "Libdl", "Libffi_jll", "Libiconv_jll", "Libmount_jll", "PCRE_jll", "Pkg", "Zlib_jll"]
+git-tree-sha1 = "04690cc5008b38ecbdfede949220bc7d9ba26397"
+uuid = "7746bdde-850d-59dc-9ae8-88ece973131d"
+version = "2.59.0+4"
+
+[[Grisu]]
+git-tree-sha1 = "03d381f65183cb2d0af8b3425fde97263ce9a995"
+uuid = "42e2da0e-8278-4e71-bc24-59509adca0fe"
+version = "1.0.0"
+
+[[HTTP]]
+deps = ["Base64", "Dates", "IniFile", "MbedTLS", "Sockets", "URIs"]
+git-tree-sha1 = "942c1a9c750bbe79912b7bd060a420932afd35b8"
+uuid = "cd3eb016-35fb-5094-929b-558a96fad6f3"
+version = "0.9.3"
+
+[[IfElse]]
+git-tree-sha1 = "28e837ff3e7a6c3cdb252ce49fb412c8eb3caeef"
+uuid = "615f187c-cbe4-4ef1-ba3b-2fcf58d6d173"
+version = "0.1.0"
+
+[[ImportAll]]
+deps = ["Test"]
+git-tree-sha1 = "5aa65f6204e1b68dfef024421e61fbcacecfbfa6"
+uuid = "c65182e5-40f4-518f-8165-175b85689199"
+version = "1.1.0"
+
+[[Inflate]]
+git-tree-sha1 = "f5fc07d4e706b84f72d54eedcc1c13d92fb0871c"
+uuid = "d25df0c9-e2be-5dd7-82c8-3ad0b3e990b9"
+version = "0.1.2"
+
+[[IniFile]]
+deps = ["Test"]
+git-tree-sha1 = "098e4d2c533924c921f9f9847274f2ad89e018b8"
+uuid = "83e8ac13-25f8-5344-8a64-a9f2b223428f"
+version = "0.5.0"
+
+[[InitialValues]]
+git-tree-sha1 = "26c8832afd63ac558b98a823265856670d898b6c"
+uuid = "22cec73e-a1b8-11e9-2c92-598750a2cf9c"
+version = "0.2.10"
+
+[[InteractiveUtils]]
+deps = ["Markdown"]
+uuid = "b77e0a4c-d291-57a0-90e8-8db25a27a240"
+
+[[Intervals]]
+deps = ["Dates", "Printf", "RecipesBase", "Serialization", "TimeZones"]
+git-tree-sha1 = "323a38ed1952d30586d0fe03412cde9399d3618b"
+uuid = "d8418881-c3e1-53bb-8760-2df7ec849ed5"
+version = "1.5.0"
+
+[[InvertedIndices]]
+deps = ["Test"]
+git-tree-sha1 = "15732c475062348b0165684ffe28e85ea8396afc"
+uuid = "41ab1584-1d38-5bbf-9106-f11c6c58b48f"
+version = "1.0.0"
+
+[[IterTools]]
+git-tree-sha1 = "05110a2ab1fc5f932622ffea2a003221f4782c18"
+uuid = "c8e1da08-722c-5040-9ed9-7db0dc04731e"
+version = "1.3.0"
+
+[[IteratorInterfaceExtensions]]
+git-tree-sha1 = "a3f24677c21f5bbe9d2a714f95dcd58337fb2856"
+uuid = "82899510-4779-5014-852e-03e436cf321d"
+version = "1.0.0"
+
+[[JLLWrappers]]
+git-tree-sha1 = "a431f5f2ca3f4feef3bd7a5e94b8b8d4f2f647a0"
+uuid = "692b3bcd-3c85-4b1f-b108-f13ce0eb3210"
+version = "1.2.0"
+
+[[JSON]]
+deps = ["Dates", "Mmap", "Parsers", "Unicode"]
+git-tree-sha1 = "81690084b6198a2e1da36fcfda16eeca9f9f24e4"
+uuid = "682c06a0-de6a-54ab-a142-c8b1cf79cde6"
+version = "0.21.1"
+
+[[JpegTurbo_jll]]
+deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"]
+git-tree-sha1 = "9aff0587d9603ea0de2c6f6300d9f9492bbefbd3"
+uuid = "aacddb02-875f-59d6-b918-886e6ef4fbf8"
+version = "2.0.1+3"
+
+[[LAME_jll]]
+deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"]
+git-tree-sha1 = "df381151e871f41ee86cee4f5f6fd598b8a68826"
+uuid = "c1c5ebd0-6772-5130-a774-d5fcae4a789d"
+version = "3.100.0+3"
+
+[[LZO_jll]]
+deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"]
+git-tree-sha1 = "f128cd6cd05ffd6d3df0523ed99b90ff6f9b349a"
+uuid = "dd4b983a-f0e5-5f8d-a1b7-129d4a5fb1ac"
+version = "2.10.0+3"
+
+[[LaTeXStrings]]
+git-tree-sha1 = "c7aebfecb1a60d59c0fe023a68ec947a208b1e6b"
+uuid = "b964fa9f-0449-5b57-a5c2-d3ea65f4040f"
+version = "1.2.0"
+
+[[LabelledArrays]]
+deps = ["ArrayInterface", "LinearAlgebra", "MacroTools", "StaticArrays"]
+git-tree-sha1 = "5e288800819c323de5897fa6d5a002bdad54baf7"
+uuid = "2ee39098-c373-598a-b85f-a56591580800"
+version = "1.5.0"
+
+[[Latexify]]
+deps = ["Formatting", "InteractiveUtils", "LaTeXStrings", "MacroTools", "Markdown", "Printf", "Requires"]
+git-tree-sha1 = "3a0084cec7bf157edcb45a67fac0647f88fe5eaf"
+uuid = "23fbe1c1-3f47-55db-b15f-69d7ec21a316"
+version = "0.14.7"
+
+[[LibCURL]]
+deps = ["LibCURL_jll", "MozillaCACerts_jll"]
+uuid = "b27032c2-a3e7-50c8-80cd-2d36dbcbfd21"
+
+[[LibCURL_jll]]
+deps = ["Artifacts", "LibSSH2_jll", "Libdl", "MbedTLS_jll", "Zlib_jll", "nghttp2_jll"]
+uuid = "deac9b47-8bc7-5906-a0fe-35ac56dc84c0"
+
+[[LibGit2]]
+deps = ["Base64", "NetworkOptions", "Printf", "SHA"]
+uuid = "76f85450-5226-5b5a-8eaa-529ad045b433"
+
+[[LibSSH2_jll]]
+deps = ["Artifacts", "Libdl", "MbedTLS_jll"]
+uuid = "29816b5a-b9ab-546f-933c-edad1886dfa8"
+
+[[LibVPX_jll]]
+deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"]
+git-tree-sha1 = "85fcc80c3052be96619affa2fe2e6d2da3908e11"
+uuid = "dd192d2f-8180-539f-9fb4-cc70b1dcf69a"
+version = "1.9.0+1"
+
+[[Libdl]]
+uuid = "8f399da3-3557-5675-b5ff-fb832c97cbdb"
+
+[[Libffi_jll]]
+deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"]
+git-tree-sha1 = "a2cd088a88c0d37eef7d209fd3d8712febce0d90"
+uuid = "e9f186c6-92d2-5b65-8a66-fee21dc1b490"
+version = "3.2.1+4"
+
+[[Libgcrypt_jll]]
+deps = ["Artifacts", "JLLWrappers", "Libdl", "Libgpg_error_jll", "Pkg"]
+git-tree-sha1 = "b391a18ab1170a2e568f9fb8d83bc7c780cb9999"
+uuid = "d4300ac3-e22c-5743-9152-c294e39db1e4"
+version = "1.8.5+4"
+
+[[Libglvnd_jll]]
+deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libX11_jll", "Xorg_libXext_jll"]
+git-tree-sha1 = "7739f837d6447403596a75d19ed01fd08d6f56bf"
+uuid = "7e76a0d4-f3c7-5321-8279-8d96eeed0f29"
+version = "1.3.0+3"
+
+[[Libgpg_error_jll]]
+deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"]
+git-tree-sha1 = "ec7f2e8ad5c9fa99fc773376cdbc86d9a5a23cb7"
+uuid = "7add5ba3-2f88-524e-9cd5-f83b8a55f7b8"
+version = "1.36.0+3"
+
+[[Libiconv_jll]]
+deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"]
+git-tree-sha1 = "8e924324b2e9275a51407a4e06deb3455b1e359f"
+uuid = "94ce4f54-9a6c-5748-9c1c-f9c7231a4531"
+version = "1.16.0+7"
+
+[[Libmount_jll]]
+deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"]
+git-tree-sha1 = "51ad0c01c94c1ce48d5cad629425035ad030bfd5"
+uuid = "4b2f31a3-9ecc-558c-b454-b3730dcb73e9"
+version = "2.34.0+3"
+
+[[Libtiff_jll]]
+deps = ["Artifacts", "JLLWrappers", "JpegTurbo_jll", "Libdl", "Pkg", "Zlib_jll", "Zstd_jll"]
+git-tree-sha1 = "291dd857901f94d683973cdf679984cdf73b56d0"
+uuid = "89763e89-9b03-5906-acba-b20f662cd828"
+version = "4.1.0+2"
+
+[[Libuuid_jll]]
+deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"]
+git-tree-sha1 = "f879ae9edbaa2c74c922e8b85bb83cc84ea1450b"
+uuid = "38a345b3-de98-5d2b-a5d3-14cd9215e700"
+version = "2.34.0+7"
+
+[[LightGraphs]]
+deps = ["ArnoldiMethod", "DataStructures", "Distributed", "Inflate", "LinearAlgebra", "Random", "SharedArrays", "SimpleTraits", "SparseArrays", "Statistics"]
+git-tree-sha1 = "432428df5f360964040ed60418dd5601ecd240b6"
+uuid = "093fc24a-ae57-5d10-9952-331d41423f4d"
+version = "1.3.5"
+
+[[LinearAlgebra]]
+deps = ["Libdl"]
+uuid = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e"
+
+[[Logging]]
+uuid = "56ddb016-857b-54e1-b83d-db4d58db5568"
+
+[[MacroTools]]
+deps = ["Markdown", "Random"]
+git-tree-sha1 = "6a8a2a625ab0dea913aba95c11370589e0239ff0"
+uuid = "1914dd2f-81c6-5fcd-8719-6d5c9610ff09"
+version = "0.5.6"
+
+[[Markdown]]
+deps = ["Base64"]
+uuid = "d6f4376e-aef5-505a-96c1-9c027394607a"
+
+[[MbedTLS]]
+deps = ["Dates", "MbedTLS_jll", "Random", "Sockets"]
+git-tree-sha1 = "1c38e51c3d08ef2278062ebceade0e46cefc96fe"
+uuid = "739be429-bea8-5141-9913-cc70e7f3736d"
+version = "1.0.3"
+
+[[MbedTLS_jll]]
+deps = ["Artifacts", "Libdl"]
+uuid = "c8ffd9c3-330d-5841-b78e-0817d7145fa1"
+
+[[Measures]]
+git-tree-sha1 = "e498ddeee6f9fdb4551ce855a46f54dbd900245f"
+uuid = "442fdcdd-2543-5da2-b0f3-8c86c306513e"
+version = "0.3.1"
+
+[[MicroCollections]]
+deps = ["BangBang", "Setfield"]
+git-tree-sha1 = "e991b6a9d38091c4a0d7cd051fcb57c05f98ac03"
+uuid = "128add7d-3638-4c79-886c-908ea0c25c34"
+version = "0.1.0"
+
+[[Missings]]
+deps = ["DataAPI"]
+git-tree-sha1 = "f8c673ccc215eb50fcadb285f522420e29e69e1c"
+uuid = "e1d29d7a-bbdc-5cf2-9ac0-f12de2c33e28"
+version = "0.4.5"
+
+[[Mmap]]
+uuid = "a63ad114-7e13-5084-954f-fe012c677804"
+
+[[Mocking]]
+deps = ["ExprTools"]
+git-tree-sha1 = "916b850daad0d46b8c71f65f719c49957e9513ed"
+uuid = "78c3b35d-d492-501b-9361-3d52fe80e533"
+version = "0.7.1"
+
+[[MozillaCACerts_jll]]
+uuid = "14a3606d-f60d-562e-9121-12d972cd8159"
+
+[[NaNMath]]
+git-tree-sha1 = "bfe47e760d60b82b66b61d2d44128b62e3a369fb"
+uuid = "77ba4419-2d1f-58cd-9bb1-8ffee604a2e3"
+version = "0.3.5"
+
+[[NamedTupleTools]]
+git-tree-sha1 = "63831dcea5e11db1c0925efe5ef5fc01d528c522"
+uuid = "d9ec5142-1e00-5aa0-9d6a-321866360f50"
+version = "0.13.7"
+
+[[NetworkLayout]]
+deps = ["GeometryBasics", "LinearAlgebra", "SparseArrays"]
+git-tree-sha1 = "01b5715cdd1b7c5d493c26cc05e4af663ba9a052"
+uuid = "46757867-2c16-5918-afeb-47bfcb05e46a"
+version = "0.3.0"
+
+[[NetworkOptions]]
+uuid = "ca575930-c2e3-43a9-ace4-1e988b2c1908"
+
+[[Ogg_jll]]
+deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"]
+git-tree-sha1 = "a42c0f138b9ebe8b58eba2271c5053773bde52d0"
+uuid = "e7412a2a-1a6e-54c0-be00-318e2571c051"
+version = "1.3.4+2"
+
+[[OpenSSL_jll]]
+deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"]
+git-tree-sha1 = "71bbbc616a1d710879f5a1021bcba65ffba6ce58"
+uuid = "458c3c95-2e84-50aa-8efc-19380b2a3a95"
+version = "1.1.1+6"
+
+[[OpenSpecFun_jll]]
+deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "Libdl", "Pkg"]
+git-tree-sha1 = "9db77584158d0ab52307f8c04f8e7c08ca76b5b3"
+uuid = "efe28fd5-8261-553b-a9e1-b2916fc3738e"
+version = "0.5.3+4"
+
+[[Opus_jll]]
+deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"]
+git-tree-sha1 = "f9d57f4126c39565e05a2b0264df99f497fc6f37"
+uuid = "91d4177d-7536-5919-b921-800302f37372"
+version = "1.3.1+3"
+
+[[OrderedCollections]]
+git-tree-sha1 = "d45739abcfc03b51f6a42712894a593f74c80a23"
+uuid = "bac558e1-5e72-5ebc-8fee-abe8a469f55d"
+version = "1.3.3"
+
+[[PCRE_jll]]
+deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"]
+git-tree-sha1 = "1b556ad51dceefdbf30e86ffa8f528b73c7df2bb"
+uuid = "2f80f16e-611a-54ab-bc61-aa92de5b98fc"
+version = "8.42.0+4"
+
+[[PDMats]]
+deps = ["LinearAlgebra", "SparseArrays", "SuiteSparse", "Test"]
+git-tree-sha1 = "95a4038d1011dfdbde7cecd2ad0ac411e53ab1bc"
+uuid = "90014a1f-27ba-587c-ab20-58faa44d9150"
+version = "0.10.1"
+
+[[Parsers]]
+deps = ["Dates"]
+git-tree-sha1 = "50c9a9ed8c714945e01cd53a21007ed3865ed714"
+uuid = "69de0a69-1ddd-5017-9359-2bf0b02dc9f0"
+version = "1.0.15"
+
+[[Pipe]]
+git-tree-sha1 = "6842804e7867b115ca9de748a0cf6b364523c16d"
+uuid = "b98c9c47-44ae-5843-9183-064241ee97a0"
+version = "1.3.0"
+
+[[Pixman_jll]]
+deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"]
+git-tree-sha1 = "6a20a83c1ae86416f0a5de605eaea08a552844a3"
+uuid = "30392449-352a-5448-841d-b1acce4e97dc"
+version = "0.40.0+0"
+
+[[Pkg]]
+deps = ["Artifacts", "Dates", "Downloads", "LibGit2", "Libdl", "Logging", "Markdown", "Printf", "REPL", "Random", "SHA", "Serialization", "TOML", "Tar", "UUIDs"]
+uuid = "44cfe95a-1eb2-52ea-b672-e2afdf69b78f"
+
+[[PlotThemes]]
+deps = ["PlotUtils", "Requires", "Statistics"]
+git-tree-sha1 = "a3a964ce9dc7898193536002a6dd892b1b5a6f1d"
+uuid = "ccf2f8ad-2431-5c83-bf29-c5338b663b6a"
+version = "2.0.1"
+
+[[PlotUtils]]
+deps = ["ColorSchemes", "Colors", "Dates", "Printf", "Random", "Reexport", "Statistics"]
+git-tree-sha1 = "ae9a295ac761f64d8c2ec7f9f24d21eb4ffba34d"
+uuid = "995b91a9-d308-5afd-9ec6-746e21dbc043"
+version = "1.0.10"
+
+[[Plots]]
+deps = ["Base64", "Contour", "Dates", "FFMPEG", "FixedPointNumbers", "GR", "GeometryBasics", "JSON", "Latexify", "LinearAlgebra", "Measures", "NaNMath", "PlotThemes", "PlotUtils", "Printf", "REPL", "Random", "RecipesBase", "RecipesPipeline", "Reexport", "Requires", "Scratch", "Showoff", "SparseArrays", "Statistics", "StatsBase", "UUIDs"]
+git-tree-sha1 = "cab13323a50caf17432793269677b289234f02ca"
+uuid = "91a5bcdd-55d7-5caf-9e0b-520d859cae80"
+version = "1.10.4"
+
+[[PooledArrays]]
+deps = ["DataAPI"]
+git-tree-sha1 = "0e8f5c428a41a81cd71f76d76f2fc3415fe5a676"
+uuid = "2dfb63ee-cc39-5dd5-95bd-886bf059d720"
+version = "1.1.0"
+
+[[PrettyTables]]
+deps = ["Crayons", "Formatting", "Markdown", "Reexport", "Tables"]
+git-tree-sha1 = "574a6b3ea95f04e8757c0280bb9c29f1a5e35138"
+uuid = "08abe8d2-0d0c-5749-adfa-8a2ac140af0d"
+version = "0.11.1"
+
+[[Printf]]
+deps = ["Unicode"]
+uuid = "de0858da-6303-5e67-8744-51eddeeeb8d7"
+
+[[Qt_jll]]
+deps = ["Artifacts", "CompilerSupportLibraries_jll", "Fontconfig_jll", "Glib_jll", "JLLWrappers", "Libdl", "Libglvnd_jll", "OpenSSL_jll", "Pkg", "Xorg_libXext_jll", "Xorg_libxcb_jll", "Xorg_xcb_util_image_jll", "Xorg_xcb_util_keysyms_jll", "Xorg_xcb_util_renderutil_jll", "Xorg_xcb_util_wm_jll", "Zlib_jll", "xkbcommon_jll"]
+git-tree-sha1 = "7760cfea90bec61814e31dfb204fa4b81bba7b57"
+uuid = "ede63266-ebff-546c-83e0-1c6fb6d0efc8"
+version = "5.15.2+1"
+
+[[QuadGK]]
+deps = ["DataStructures", "LinearAlgebra"]
+git-tree-sha1 = "12fbe86da16df6679be7521dfb39fbc861e1dc7b"
+uuid = "1fd47b50-473d-5c70-9696-f719f8f3bcdc"
+version = "2.4.1"
+
+[[REPL]]
+deps = ["InteractiveUtils", "Markdown", "Sockets", "Unicode"]
+uuid = "3fa0cd96-eef1-5676-8a61-b3b8758bbffb"
+
+[[Random]]
+deps = ["Serialization"]
+uuid = "9a3f8284-a2c9-5f02-9a11-845980a1fd5c"
+
+[[RandomNumbers]]
+deps = ["Random", "Requires"]
+git-tree-sha1 = "441e6fc35597524ada7f85e13df1f4e10137d16f"
+uuid = "e6cf234a-135c-5ec9-84dd-332b85af5143"
+version = "1.4.0"
+
+[[RecipesBase]]
+git-tree-sha1 = "b3fb709f3c97bfc6e948be68beeecb55a0b340ae"
+uuid = "3cdcf5f2-1ef4-517c-9805-6587b60abb01"
+version = "1.1.1"
+
+[[RecipesPipeline]]
+deps = ["Dates", "NaNMath", "PlotUtils", "RecipesBase"]
+git-tree-sha1 = "c4d54a78e287de7ec73bbc928ce5eb3c60f80b24"
+uuid = "01d81517-befc-4cb6-b9ec-a95719d0359c"
+version = "0.3.1"
+
+[[Reexport]]
+git-tree-sha1 = "57d8440b0c7d98fc4f889e478e80f268d534c9d5"
+uuid = "189a3867-3050-52da-a836-e630ba90ab69"
+version = "1.0.0"
+
+[[Referenceables]]
+git-tree-sha1 = "4a32b1dd124a846580608eb347d4337f873c2499"
+uuid = "42d2dcc6-99eb-4e98-b66c-637b7d73030e"
+version = "0.1.0"
+
+[[Requires]]
+deps = ["UUIDs"]
+git-tree-sha1 = "cfbac6c1ed70c002ec6361e7fd334f02820d6419"
+uuid = "ae029012-a4dd-5104-9daa-d747884805df"
+version = "1.1.2"
+
+[[Rmath]]
+deps = ["Random", "Rmath_jll"]
+git-tree-sha1 = "86c5647b565873641538d8f812c04e4c9dbeb370"
+uuid = "79098fc4-a85e-5d69-aa6a-4863f24498fa"
+version = "0.6.1"
+
+[[Rmath_jll]]
+deps = ["Libdl", "Pkg"]
+git-tree-sha1 = "d76185aa1f421306dec73c057aa384bad74188f0"
+uuid = "f50d1b31-88e8-58de-be2c-1cc44531875f"
+version = "0.2.2+1"
+
+[[SHA]]
+uuid = "ea8e919c-243c-51af-8825-aaa63cd721ce"
+
+[[Scratch]]
+deps = ["Dates"]
+git-tree-sha1 = "ad4b278adb62d185bbcb6864dc24959ab0627bf6"
+uuid = "6c6a2e73-6563-6170-7368-637461726353"
+version = "1.0.3"
+
+[[SentinelArrays]]
+deps = ["Dates", "Random"]
+git-tree-sha1 = "6ccde405cf0759eba835eb613130723cb8f10ff9"
+uuid = "91c51154-3ec4-41a3-a24f-3f23e20d615c"
+version = "1.2.16"
+
+[[Serialization]]
+uuid = "9e88b42a-f829-5b0c-bbe9-9e923198166b"
+
+[[Setfield]]
+deps = ["ConstructionBase", "Future", "MacroTools", "Requires"]
+git-tree-sha1 = "d5640fc570fb1b6c54512f0bd3853866bd298b3e"
+uuid = "efcf1570-3423-57d1-acb7-fd33fddbac46"
+version = "0.7.0"
+
+[[SharedArrays]]
+deps = ["Distributed", "Mmap", "Random", "Serialization"]
+uuid = "1a1011a3-84de-559e-8e89-a11a2f7dc383"
+
+[[Showoff]]
+deps = ["Dates", "Grisu"]
+git-tree-sha1 = "ee010d8f103468309b8afac4abb9be2e18ff1182"
+uuid = "992d4aef-0814-514b-bc4d-f2e9a6c4116f"
+version = "0.3.2"
+
+[[SimpleTraits]]
+deps = ["InteractiveUtils", "MacroTools"]
+git-tree-sha1 = "daf7aec3fe3acb2131388f93a4c409b8c7f62226"
+uuid = "699a6c99-e7fa-54fc-8d76-47d257e15c1d"
+version = "0.9.3"
+
+[[Sockets]]
+uuid = "6462fe0b-24de-5631-8697-dd941f90decc"
+
+[[SortingAlgorithms]]
+deps = ["DataStructures", "Random", "Test"]
+git-tree-sha1 = "03f5898c9959f8115e30bc7226ada7d0df554ddd"
+uuid = "a2af1166-a08f-5f64-846c-94a0d3cef48c"
+version = "0.3.1"
+
+[[SparseArrays]]
+deps = ["LinearAlgebra", "Random"]
+uuid = "2f01184e-e22b-5df5-ae63-d93ebab69eaf"
+
+[[SpecialFunctions]]
+deps = ["ChainRulesCore", "OpenSpecFun_jll"]
+git-tree-sha1 = "75394dbe2bd346beeed750fb02baa6445487b862"
+uuid = "276daf66-3868-5448-9aa4-cd146d93841b"
+version = "1.2.1"
+
+[[SplittablesBase]]
+deps = ["Setfield", "Test"]
+git-tree-sha1 = "edef25a158db82f4940720ebada14a60ef6c4232"
+uuid = "171d559e-b47b-412a-8079-5efa626c420e"
+version = "0.1.13"
+
+[[StaticArrays]]
+deps = ["LinearAlgebra", "Random", "Statistics"]
+git-tree-sha1 = "9da72ed50e94dbff92036da395275ed114e04d49"
+uuid = "90137ffa-7385-5640-81b9-e52037218182"
+version = "1.0.1"
+
+[[Statistics]]
+deps = ["LinearAlgebra", "SparseArrays"]
+uuid = "10745b16-79ce-11e8-11f9-7d13ad32a3b2"
+
+[[StatsBase]]
+deps = ["DataAPI", "DataStructures", "LinearAlgebra", "Missings", "Printf", "Random", "SortingAlgorithms", "SparseArrays", "Statistics"]
+git-tree-sha1 = "7bab7d4eb46b225b35179632852b595a3162cb61"
+uuid = "2913bbd2-ae8a-5f71-8c99-4fb6c76f3a91"
+version = "0.33.2"
+
+[[StatsFuns]]
+deps = ["Rmath", "SpecialFunctions"]
+git-tree-sha1 = "3b9f665c70712af3264b61c27a7e1d62055dafd1"
+uuid = "4c63d2b9-4356-54db-8cca-17b64c39e42c"
+version = "0.9.6"
+
+[[StructArrays]]
+deps = ["Adapt", "DataAPI", "Tables"]
+git-tree-sha1 = "26ea43b4be7e919a2390c3c0f824e7eb4fc19a0a"
+uuid = "09ab397b-f2b6-538f-b94a-2f83cf4a842a"
+version = "0.5.0"
+
+[[StructTypes]]
+deps = ["Dates", "UUIDs"]
+git-tree-sha1 = "65a43f5218197bc7091b76bc273a5e323a1d7b0d"
+uuid = "856f2bd8-1eba-4b0a-8007-ebc267875bd4"
+version = "1.2.3"
+
+[[SuiteSparse]]
+deps = ["Libdl", "LinearAlgebra", "Serialization", "SparseArrays"]
+uuid = "4607b0f0-06f3-5cda-b6b1-a6196a1729e9"
+
+[[TOML]]
+deps = ["Dates"]
+uuid = "fa267f1f-6049-4f14-aa54-33bafae1ed76"
+
+[[TableTraits]]
+deps = ["IteratorInterfaceExtensions"]
+git-tree-sha1 = "b1ad568ba658d8cbb3b892ed5380a6f3e781a81e"
+uuid = "3783bdb8-4a98-5b6b-af9a-565f29a5fe9c"
+version = "1.0.0"
+
+[[Tables]]
+deps = ["DataAPI", "DataValueInterfaces", "IteratorInterfaceExtensions", "LinearAlgebra", "TableTraits", "Test"]
+git-tree-sha1 = "a716dde43d57fa537a19058d044b495301ba6565"
+uuid = "bd369af6-aec1-5ad0-b16a-f7cc5008161c"
+version = "1.3.2"
+
+[[Tar]]
+deps = ["ArgTools", "SHA"]
+uuid = "a4e569a6-e804-4fa4-b0f3-eef7a1d5b13e"
+
+[[Test]]
+deps = ["InteractiveUtils", "Logging", "Random", "Serialization"]
+uuid = "8dfed614-e22c-5e08-85e1-65c5234f0b40"
+
+[[ThreadsX]]
+deps = ["ArgCheck", "BangBang", "ConstructionBase", "InitialValues", "MicroCollections", "Referenceables", "Setfield", "SplittablesBase", "Transducers"]
+git-tree-sha1 = "269f5c1955c1194086cf6d2029aa4a0b4fb8018b"
+uuid = "ac1d9e8a-700a-412c-b207-f0111f4b6c0d"
+version = "0.1.7"
+
+[[TimeZones]]
+deps = ["Dates", "EzXML", "Mocking", "Pkg", "Printf", "RecipesBase", "Serialization", "Unicode"]
+git-tree-sha1 = "4ba8a9579a243400db412b50300cd61d7447e583"
+uuid = "f269a46b-ccf7-5d73-abea-4c690281aa53"
+version = "1.5.3"
+
+[[Transducers]]
+deps = ["ArgCheck", "BangBang", "CompositionsBase", "DefineSingletons", "Distributed", "InitialValues", "Logging", "Markdown", "MicroCollections", "Requires", "Setfield", "SplittablesBase", "Tables"]
+git-tree-sha1 = "9550eba57ebc2f7677c4c946aaca56e149ca73ff"
+uuid = "28d57a85-8fef-5791-bfe6-a80928e7c999"
+version = "0.4.59"
+
+[[URIs]]
+git-tree-sha1 = "7855809b88d7b16e9b029afd17880930626f54a2"
+uuid = "5c2747f8-b7ea-4ff2-ba2e-563bfd36b1d4"
+version = "1.2.0"
+
+[[UUIDs]]
+deps = ["Random", "SHA"]
+uuid = "cf7118a7-6976-5b1a-9a39-7adc72f591a4"
+
+[[UnPack]]
+git-tree-sha1 = "387c1f73762231e86e0c9c5443ce3b4a0a9a0c2b"
+uuid = "3a884ed6-31ef-47d7-9d2a-63182c4928ed"
+version = "1.0.2"
+
+[[Unicode]]
+uuid = "4ec0a83e-493e-50e2-b9ac-8f72acf5a8f5"
+
+[[Wayland_jll]]
+deps = ["Artifacts", "Expat_jll", "JLLWrappers", "Libdl", "Libffi_jll", "Pkg", "XML2_jll"]
+git-tree-sha1 = "dc643a9b774da1c2781413fd7b6dcd2c56bb8056"
+uuid = "a2964d1f-97da-50d4-b82a-358c7fce9d89"
+version = "1.17.0+4"
+
+[[Wayland_protocols_jll]]
+deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Wayland_jll"]
+git-tree-sha1 = "2839f1c1296940218e35df0bbb220f2a79686670"
+uuid = "2381bf8a-dfd0-557d-9999-79630e7b1b91"
+version = "1.18.0+4"
+
+[[XML2_jll]]
+deps = ["Artifacts", "JLLWrappers", "Libdl", "Libiconv_jll", "Pkg", "Zlib_jll"]
+git-tree-sha1 = "afd2b541e8fd425cd3b7aa55932a257035ab4a70"
+uuid = "02c8fc9c-b97f-50b9-bbe4-9be30ff0a78a"
+version = "2.9.11+0"
+
+[[XSLT_jll]]
+deps = ["Artifacts", "JLLWrappers", "Libdl", "Libgcrypt_jll", "Pkg", "XML2_jll"]
+git-tree-sha1 = "2b3eac39df218762d2d005702d601cd44c997497"
+uuid = "aed1982a-8fda-507f-9586-7b0439959a61"
+version = "1.1.33+4"
+
+[[Xorg_libX11_jll]]
+deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libxcb_jll", "Xorg_xtrans_jll"]
+git-tree-sha1 = "5be649d550f3f4b95308bf0183b82e2582876527"
+uuid = "4f6342f7-b3d2-589e-9d20-edeb45f2b2bc"
+version = "1.6.9+4"
+
+[[Xorg_libXau_jll]]
+deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"]
+git-tree-sha1 = "4e490d5c960c314f33885790ed410ff3a94ce67e"
+uuid = "0c0b7dd1-d40b-584c-a123-a41640f87eec"
+version = "1.0.9+4"
+
+[[Xorg_libXcursor_jll]]
+deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libXfixes_jll", "Xorg_libXrender_jll"]
+git-tree-sha1 = "12e0eb3bc634fa2080c1c37fccf56f7c22989afd"
+uuid = "935fb764-8cf2-53bf-bb30-45bb1f8bf724"
+version = "1.2.0+4"
+
+[[Xorg_libXdmcp_jll]]
+deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"]
+git-tree-sha1 = "4fe47bd2247248125c428978740e18a681372dd4"
+uuid = "a3789734-cfe1-5b06-b2d0-1dd0d9d62d05"
+version = "1.1.3+4"
+
+[[Xorg_libXext_jll]]
+deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libX11_jll"]
+git-tree-sha1 = "b7c0aa8c376b31e4852b360222848637f481f8c3"
+uuid = "1082639a-0dae-5f34-9b06-72781eeb8cb3"
+version = "1.3.4+4"
+
+[[Xorg_libXfixes_jll]]
+deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libX11_jll"]
+git-tree-sha1 = "0e0dc7431e7a0587559f9294aeec269471c991a4"
+uuid = "d091e8ba-531a-589c-9de9-94069b037ed8"
+version = "5.0.3+4"
+
+[[Xorg_libXi_jll]]
+deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libXext_jll", "Xorg_libXfixes_jll"]
+git-tree-sha1 = "89b52bc2160aadc84d707093930ef0bffa641246"
+uuid = "a51aa0fd-4e3c-5386-b890-e753decda492"
+version = "1.7.10+4"
+
+[[Xorg_libXinerama_jll]]
+deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libXext_jll"]
+git-tree-sha1 = "26be8b1c342929259317d8b9f7b53bf2bb73b123"
+uuid = "d1454406-59df-5ea1-beac-c340f2130bc3"
+version = "1.1.4+4"
+
+[[Xorg_libXrandr_jll]]
+deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libXext_jll", "Xorg_libXrender_jll"]
+git-tree-sha1 = "34cea83cb726fb58f325887bf0612c6b3fb17631"
+uuid = "ec84b674-ba8e-5d96-8ba1-2a689ba10484"
+version = "1.5.2+4"
+
+[[Xorg_libXrender_jll]]
+deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libX11_jll"]
+git-tree-sha1 = "19560f30fd49f4d4efbe7002a1037f8c43d43b96"
+uuid = "ea2f1a96-1ddc-540d-b46f-429655e07cfa"
+version = "0.9.10+4"
+
+[[Xorg_libpthread_stubs_jll]]
+deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"]
+git-tree-sha1 = "6783737e45d3c59a4a4c4091f5f88cdcf0908cbb"
+uuid = "14d82f49-176c-5ed1-bb49-ad3f5cbd8c74"
+version = "0.1.0+3"
+
+[[Xorg_libxcb_jll]]
+deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "XSLT_jll", "Xorg_libXau_jll", "Xorg_libXdmcp_jll", "Xorg_libpthread_stubs_jll"]
+git-tree-sha1 = "daf17f441228e7a3833846cd048892861cff16d6"
+uuid = "c7cfdc94-dc32-55de-ac96-5a1b8d977c5b"
+version = "1.13.0+3"
+
+[[Xorg_libxkbfile_jll]]
+deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libX11_jll"]
+git-tree-sha1 = "926af861744212db0eb001d9e40b5d16292080b2"
+uuid = "cc61e674-0454-545c-8b26-ed2c68acab7a"
+version = "1.1.0+4"
+
+[[Xorg_xcb_util_image_jll]]
+deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_xcb_util_jll"]
+git-tree-sha1 = "0fab0a40349ba1cba2c1da699243396ff8e94b97"
+uuid = "12413925-8142-5f55-bb0e-6d7ca50bb09b"
+version = "0.4.0+1"
+
+[[Xorg_xcb_util_jll]]
+deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libxcb_jll"]
+git-tree-sha1 = "e7fd7b2881fa2eaa72717420894d3938177862d1"
+uuid = "2def613f-5ad1-5310-b15b-b15d46f528f5"
+version = "0.4.0+1"
+
+[[Xorg_xcb_util_keysyms_jll]]
+deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_xcb_util_jll"]
+git-tree-sha1 = "d1151e2c45a544f32441a567d1690e701ec89b00"
+uuid = "975044d2-76e6-5fbe-bf08-97ce7c6574c7"
+version = "0.4.0+1"
+
+[[Xorg_xcb_util_renderutil_jll]]
+deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_xcb_util_jll"]
+git-tree-sha1 = "dfd7a8f38d4613b6a575253b3174dd991ca6183e"
+uuid = "0d47668e-0667-5a69-a72c-f761630bfb7e"
+version = "0.3.9+1"
+
+[[Xorg_xcb_util_wm_jll]]
+deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_xcb_util_jll"]
+git-tree-sha1 = "e78d10aab01a4a154142c5006ed44fd9e8e31b67"
+uuid = "c22f9ab0-d5fe-5066-847c-f4bb1cd4e361"
+version = "0.4.1+1"
+
+[[Xorg_xkbcomp_jll]]
+deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libxkbfile_jll"]
+git-tree-sha1 = "4bcbf660f6c2e714f87e960a171b119d06ee163b"
+uuid = "35661453-b289-5fab-8a00-3d9160c6a3a4"
+version = "1.4.2+4"
+
+[[Xorg_xkeyboard_config_jll]]
+deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_xkbcomp_jll"]
+git-tree-sha1 = "5c8424f8a67c3f2209646d4425f3d415fee5931d"
+uuid = "33bec58e-1273-512f-9401-5d533626f822"
+version = "2.27.0+4"
+
+[[Xorg_xtrans_jll]]
+deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"]
+git-tree-sha1 = "79c31e7844f6ecf779705fbc12146eb190b7d845"
+uuid = "c5fb5394-a638-5e4d-96e5-b29de1b5cf10"
+version = "1.4.0+3"
+
+[[ZeroWeightedDistributions]]
+deps = ["Distributions", "Random"]
+path = "../ZeroWeightedDistributions"
+uuid = "24733ad3-391a-4e41-8839-c7177de7dea4"
+version = "0.1.0"
+
+[[Zlib_jll]]
+deps = ["Libdl"]
+uuid = "83775a58-1f1d-513f-b197-d71354ab007a"
+
+[[Zstd_jll]]
+deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"]
+git-tree-sha1 = "2c1332c54931e83f8f94d310fa447fd743e8d600"
+uuid = "3161d3a3-bdf6-5164-811a-617609db77b4"
+version = "1.4.8+0"
+
+[[ZygoteRules]]
+deps = ["MacroTools"]
+git-tree-sha1 = "9e7a1e8ca60b742e508a315c17eef5211e7fbfd7"
+uuid = "700de1a5-db45-46bc-99cf-38207098b444"
+version = "0.2.1"
+
+[[libass_jll]]
+deps = ["Artifacts", "Bzip2_jll", "FreeType2_jll", "FriBidi_jll", "JLLWrappers", "Libdl", "Pkg", "Zlib_jll"]
+git-tree-sha1 = "acc685bcf777b2202a904cdcb49ad34c2fa1880c"
+uuid = "0ac62f75-1d6f-5e53-bd7c-93b484bb37c0"
+version = "0.14.0+4"
+
+[[libfdk_aac_jll]]
+deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"]
+git-tree-sha1 = "7a5780a0d9c6864184b3a2eeeb833a0c871f00ab"
+uuid = "f638f0a6-7fb0-5443-88ba-1cc74229b280"
+version = "0.1.6+4"
+
+[[libpng_jll]]
+deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Zlib_jll"]
+git-tree-sha1 = "6abbc424248097d69c0c87ba50fcb0753f93e0ee"
+uuid = "b53b4c65-9356-5827-b1ea-8c7a1a84506f"
+version = "1.6.37+6"
+
+[[libvorbis_jll]]
+deps = ["Artifacts", "JLLWrappers", "Libdl", "Ogg_jll", "Pkg"]
+git-tree-sha1 = "fa14ac25af7a4b8a7f61b287a124df7aab601bcd"
+uuid = "f27f6e37-5d2b-51aa-960f-b287f2bc3b7a"
+version = "1.3.6+6"
+
+[[nghttp2_jll]]
+deps = ["Artifacts", "Libdl"]
+uuid = "8e850ede-7688-5339-a07c-302acd2aaf8d"
+
+[[x264_jll]]
+deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"]
+git-tree-sha1 = "d713c1ce4deac133e3334ee12f4adff07f81778f"
+uuid = "1270edf5-f2f9-52d2-97e9-ab00b5d0237a"
+version = "2020.7.14+2"
+
+[[x265_jll]]
+deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"]
+git-tree-sha1 = "487da2f8f2f0c8ee0e83f39d13037d6bbf0a45ab"
+uuid = "dfaa095f-4041-5dcd-9319-2fabd8486b76"
+version = "3.0.0+3"
+
+[[xkbcommon_jll]]
+deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Wayland_jll", "Wayland_protocols_jll", "Xorg_libxcb_jll", "Xorg_xkeyboard_config_jll"]
+git-tree-sha1 = "ece2350174195bb31de1a63bea3a41ae1aa593b6"
+uuid = "d8fb68d0-12a3-5cfd-a85a-d49703b185fd"
+version = "0.9.1+5"
diff --git a/CovidABM/Project.toml b/CovidAlertVaccinationModel/Project.toml
similarity index 94%
rename from CovidABM/Project.toml
rename to CovidAlertVaccinationModel/Project.toml
index 923bdb0023c373be5345e28486135f2a81fad8b7..cdbf10a9ae4c292df5cd3c9a878986ffdbe369ef 100644
--- a/CovidABM/Project.toml
+++ b/CovidAlertVaccinationModel/Project.toml
@@ -23,6 +23,7 @@ RandomNumbers = "e6cf234a-135c-5ec9-84dd-332b85af5143"
 StatsBase = "2913bbd2-ae8a-5f71-8c99-4fb6c76f3a91"
 ThreadsX = "ac1d9e8a-700a-412c-b207-f0111f4b6c0d"
 UnPack = "3a884ed6-31ef-47d7-9d2a-63182c4928ed"
+ZeroWeightedDistributions = "24733ad3-391a-4e41-8839-c7177de7dea4"
 
 [compat]
 julia = "1"
diff --git a/CovidABM/data/csv/COVID_ontario_data.csv b/CovidAlertVaccinationModel/data/csv/COVID_ontario_data.csv
similarity index 100%
rename from CovidABM/data/csv/COVID_ontario_data.csv
rename to CovidAlertVaccinationModel/data/csv/COVID_ontario_data.csv
diff --git a/CovidABM/data/csv/case_fatality_data.csv b/CovidAlertVaccinationModel/data/csv/case_fatality_data.csv
similarity index 100%
rename from CovidABM/data/csv/case_fatality_data.csv
rename to CovidAlertVaccinationModel/data/csv/case_fatality_data.csv
diff --git a/CovidABM/data/csv/demographic_data.csv b/CovidAlertVaccinationModel/data/csv/demographic_data.csv
similarity index 100%
rename from CovidABM/data/csv/demographic_data.csv
rename to CovidAlertVaccinationModel/data/csv/demographic_data.csv
diff --git a/CovidABM/data/csv/distancing_data.csv b/CovidAlertVaccinationModel/data/csv/distancing_data.csv
similarity index 100%
rename from CovidABM/data/csv/distancing_data.csv
rename to CovidAlertVaccinationModel/data/csv/distancing_data.csv
diff --git a/CovidABM/data/csv/home_compositions.csv b/CovidAlertVaccinationModel/data/csv/home_compositions.csv
similarity index 100%
rename from CovidABM/data/csv/home_compositions.csv
rename to CovidAlertVaccinationModel/data/csv/home_compositions.csv
diff --git a/CovidABM/fetch_data.sh b/CovidAlertVaccinationModel/fetch_data.sh
similarity index 100%
rename from CovidABM/fetch_data.sh
rename to CovidAlertVaccinationModel/fetch_data.sh
diff --git a/CovidABM/plots/graphplot.gif b/CovidAlertVaccinationModel/plots/graphplot.gif
similarity index 100%
rename from CovidABM/plots/graphplot.gif
rename to CovidAlertVaccinationModel/plots/graphplot.gif
diff --git a/CovidABM/scratch_code/sampler_performance.jl b/CovidAlertVaccinationModel/scratch_code/sampler_performance.jl
similarity index 100%
rename from CovidABM/scratch_code/sampler_performance.jl
rename to CovidAlertVaccinationModel/scratch_code/sampler_performance.jl
diff --git a/CovidABM/scratch_code/test.jl b/CovidAlertVaccinationModel/scratch_code/test.jl
similarity index 100%
rename from CovidABM/scratch_code/test.jl
rename to CovidAlertVaccinationModel/scratch_code/test.jl
diff --git a/CovidABM/scratch_code/utils.jl b/CovidAlertVaccinationModel/scratch_code/utils.jl
similarity index 100%
rename from CovidABM/scratch_code/utils.jl
rename to CovidAlertVaccinationModel/scratch_code/utils.jl
diff --git a/CovidABM/src/CovidAlertVaccinationModel.jl b/CovidAlertVaccinationModel/src/CovidAlertVaccinationModel.jl
similarity index 89%
rename from CovidABM/src/CovidAlertVaccinationModel.jl
rename to CovidAlertVaccinationModel/src/CovidAlertVaccinationModel.jl
index 2cbdd68033a9562aea5dc253231d0ae9ed6b0f47..9e8fbd5f38283f4ab00bed691e749a5606cd6982 100644
--- a/CovidABM/src/CovidAlertVaccinationModel.jl
+++ b/CovidAlertVaccinationModel/src/CovidAlertVaccinationModel.jl
@@ -1,5 +1,5 @@
 module CovidAlertVaccinationModel
-# export get_u_0, solve!,get_parameters,plot_model,main,parse_cases_data,AgentModel,vaccination_rate_test,vaccinate_uniformly!
+using ZeroWeightedDistributions
 using LightGraphs
 using RandomNumbers.Xorshifts
 using Random
@@ -12,12 +12,12 @@ import StatsBase:mean
 using Dates
 using ThreadsX
 using DelimitedFiles
+
 using NamedTupleTools
 # using CUDA
 using NetworkLayout:Stress
 using NetworkLayout:SFDP
-import Base.rand
-import Random.rand!
+
 import LightGraphs.add_edge!
 
 include("agents.jl")
diff --git a/CovidABM/src/agents.jl b/CovidAlertVaccinationModel/src/agents.jl
similarity index 100%
rename from CovidABM/src/agents.jl
rename to CovidAlertVaccinationModel/src/agents.jl
diff --git a/CovidABM/src/data.jl b/CovidAlertVaccinationModel/src/data.jl
similarity index 100%
rename from CovidABM/src/data.jl
rename to CovidAlertVaccinationModel/src/data.jl
diff --git a/CovidABM/src/graphs.jl b/CovidAlertVaccinationModel/src/graphs.jl
similarity index 100%
rename from CovidABM/src/graphs.jl
rename to CovidAlertVaccinationModel/src/graphs.jl
diff --git a/CovidABM/src/mixing_distributions.jl b/CovidAlertVaccinationModel/src/mixing_distributions.jl
similarity index 54%
rename from CovidABM/src/mixing_distributions.jl
rename to CovidAlertVaccinationModel/src/mixing_distributions.jl
index e052f8bf0f6e3960c6856f05eb1d9c4456d285b1..d97120cfe9aaff6525a6fa9d9cf77df5b5be689a 100644
--- a/CovidABM/src/mixing_distributions.jl
+++ b/CovidAlertVaccinationModel/src/mixing_distributions.jl
@@ -1,27 +1,24 @@
 
-struct ZWDist{BaseDistType,T} <: Sampleable{Univariate,Discrete}
-    α::T
-    base_dist::BaseDistType
-end
-function Base.rand(rng::AbstractRNG,  s::ZWDist{DType,EType}, n::T) where {T<:Int, EType, DType}
-    l = Vector{EType}(undef,n)
-    Random.rand!(rng,l)
-    l[l .< s.α] .= 0
-    Random.rand!(rng,s.base_dist,@view l[l .>= s.α])
-    return l
+function adjust_distributions_mean(distribution_matrix::AbstractArray{T},mean_shift_percentage) where T<:ZWDist
+    return map(distribution_matrix) do dist
+        new_mean = mean(dist)*(1 + mean_shift_percentage)
+        return from_mean(typeof(dist),dist.α, new_mean)
+    end
 end
-function Random.rand!(rng::AbstractRNG, s::ZWDist, l::T) where T<:AbstractVector
-    Random.rand!(rng,l)
-    l[l .< s.α] .= 0
-    Random.rand!(rng,s.base_dist,@view l[l .>= s.α])
-    return l
+function adjust_distributions_mean(distribution_matrix::AbstractArray{T},mean_shift_percentage) where T<:Distribution
+    return map(distribution_matrix) do dist
+        new_mean = mean(dist)*(1 + mean_shift_percentage)
+        return from_mean(typeof(dist), new_mean)
+    end
 end
 
 
-function Base.rand(rng::AbstractRNG, s::ZWDist{DType,T}) where {DType,T}
-    return ifelse(Base.rand(rng) < s.α, zero(T), Base.rand(rng,s.base_dist))
+function ZeroPoisson(α,λ)
+    return ZWDist(α,Poisson(λ))
+end
+function ZeroGeometric(α,p)
+    return ZWDist(α,Geometric(p))
 end
-
 
 
 function from_mean(::Type{Geometric{T}},μ) where T
@@ -37,39 +34,16 @@ end
 function from_mean(::Type{ZWDist{DistType,T}},α,μ) where {DistType <: Distribution{Univariate,W} where W, T}
     return ZWDist(α,from_mean(DistType,μ/(1-α)))
 end
-
-function ZeroPoisson(α,λ)
-    return ZWDist(α,Poisson(λ))
-end
-function ZeroGeometric(α,p)
-    return ZWDist(α,Geometric(p))
-end
-
-function adjust_distributions_mean(distribution_matrix::AbstractArray{T},mean_shift_percentage) where T<:ZWDist
-    return map(distribution_matrix) do dist
-        new_mean = mean(dist)*(1 + mean_shift_percentage)
-        return from_mean(typeof(dist),dist.α, new_mean)
-    end
-end
-function adjust_distributions_mean(distribution_matrix::AbstractArray{T},mean_shift_percentage) where T<:Distribution
-    return map(distribution_matrix) do dist
-        new_mean = mean(dist)*(1 + mean_shift_percentage)
-        return from_mean(typeof(dist), new_mean)
-    end
-end
-
-
-
 StatsBase.mean(d::ZWDist{Dist,T}) where {Dist,T} = (1 - d.α)*StatsBase.mean(d.base_dist)
 
-const initial_workschool_type = Union{ZWDist{Geometric{Float64},Float64},ZWDist{Poisson{Float64},Float64}}
+const initial_workschool_type = Union{ZWDist{Geometric{Float64},Discrete},ZWDist{Poisson{Float64},Discrete}}
 
 const initial_workschool_mixing_matrix = convert(Array{initial_workschool_type},map(t->from_mean(t...),[
-    (ZWDist{Geometric{Float64},Float64}, 0.433835,4.104848) (ZWDist{Geometric{Float64},Float64},0.406326,2.568782) (ZWDist{Poisson{Float64},Float64},0.888015,0.017729) (ZWDist{Geometric{Float64},Float64},0.406326,2.568782) (ZWDist{Poisson{Float64},Float64},0.888015,0.017729)
-    (ZWDist{Geometric{Float64},Float64}, 0.600966,0.975688) (ZWDist{Geometric{Float64},Float64},0.4306,5.057572) (ZWDist{Poisson{Float64},Float64}, 0.84513,0.021307) (ZWDist{Geometric{Float64},Float64},0.4306,5.057572) (ZWDist{Poisson{Float64},Float64}, 0.84513,0.021307)
-    (ZWDist{Poisson{Float64},Float64},0.887392,0.001937)   (ZWDist{Poisson{Float64},Float64},0.793004,0.00722)   (ZWDist{Poisson{Float64},Float64},0.940473, 0.022134) (ZWDist{Poisson{Float64},Float64},0.793004,0.00722)   (ZWDist{Poisson{Float64},Float64},0.940473, 0.022134)
-    (ZWDist{Geometric{Float64},Float64}, 0.600966,0.975688) (ZWDist{Geometric{Float64},Float64},0.4306,5.057572) (ZWDist{Poisson{Float64},Float64}, 0.84513,0.021307) (ZWDist{Geometric{Float64},Float64},0.4306,5.057572) (ZWDist{Poisson{Float64},Float64}, 0.84513,0.021307)
-    (ZWDist{Poisson{Float64},Float64},0.887392,0.001937)   (ZWDist{Poisson{Float64},Float64},0.793004,0.00722)   (ZWDist{Poisson{Float64},Float64},0.940473, 0.022134) (ZWDist{Poisson{Float64},Float64},0.793004,0.00722)   (ZWDist{Poisson{Float64},Float64},0.940473, 0.022134)
+    (ZWDist{Geometric{Float64},Discrete}, 0.433835,4.104848) (ZWDist{Geometric{Float64},Discrete},0.406326,2.568782) (ZWDist{Poisson{Float64},Discrete},0.888015,0.017729) (ZWDist{Geometric{Float64},Discrete},0.406326,2.568782) (ZWDist{Poisson{Float64},Discrete},0.888015,0.017729)
+    (ZWDist{Geometric{Float64},Discrete}, 0.600966,0.975688) (ZWDist{Geometric{Float64},Discrete},0.4306,5.057572) (ZWDist{Poisson{Float64},Discrete}, 0.84513,0.021307) (ZWDist{Geometric{Float64},Discrete},0.4306,5.057572) (ZWDist{Poisson{Float64},Discrete}, 0.84513,0.021307)
+    (ZWDist{Poisson{Float64},Discrete},0.887392,0.001937)   (ZWDist{Poisson{Float64},Discrete},0.793004,0.00722)   (ZWDist{Poisson{Float64},Discrete},0.940473, 0.022134) (ZWDist{Poisson{Float64},Discrete},0.793004,0.00722)   (ZWDist{Poisson{Float64},Discrete},0.940473, 0.022134)
+    (ZWDist{Geometric{Float64},Discrete}, 0.600966,0.975688) (ZWDist{Geometric{Float64},Discrete},0.4306,5.057572) (ZWDist{Poisson{Float64},Discrete}, 0.84513,0.021307) (ZWDist{Geometric{Float64},Discrete},0.4306,5.057572) (ZWDist{Poisson{Float64},Discrete}, 0.84513,0.021307)
+    (ZWDist{Poisson{Float64},Discrete},0.887392,0.001937)   (ZWDist{Poisson{Float64},Discrete},0.793004,0.00722)   (ZWDist{Poisson{Float64},Discrete},0.940473, 0.022134) (ZWDist{Poisson{Float64},Discrete},0.793004,0.00722)   (ZWDist{Poisson{Float64},Discrete},0.940473, 0.022134)
 ]))
 
 
diff --git a/CovidABM/src/model.jl b/CovidAlertVaccinationModel/src/model.jl
similarity index 100%
rename from CovidABM/src/model.jl
rename to CovidAlertVaccinationModel/src/model.jl
diff --git a/CovidABM/src/plotting.jl b/CovidAlertVaccinationModel/src/plotting.jl
similarity index 100%
rename from CovidABM/src/plotting.jl
rename to CovidAlertVaccinationModel/src/plotting.jl
diff --git a/CovidABM/test/runtests.jl b/CovidAlertVaccinationModel/test/runtests.jl
similarity index 100%
rename from CovidABM/test/runtests.jl
rename to CovidAlertVaccinationModel/test/runtests.jl
diff --git a/IntervalsModel/Manifest.toml b/IntervalsModel/Manifest.toml
index dcd5e02f5ca567557f54ee2dc877d2a084282b56..b631eb5ad75dd8b834f83f549385f62ae064f0b9 100644
--- a/IntervalsModel/Manifest.toml
+++ b/IntervalsModel/Manifest.toml
@@ -41,6 +41,11 @@ version = "3.1.1"
 [[Artifacts]]
 uuid = "56f22d72-fd6d-98f1-02f0-08ddc0907c33"
 
+[[BSON]]
+git-tree-sha1 = "dd36d7cf3d185eeaaf64db902c15174b22f5dafb"
+uuid = "fbb218c0-5317-5bc6-957e-2ee96dd4b1f0"
+version = "0.2.6"
+
 [[BangBang]]
 deps = ["Compat", "ConstructionBase", "Future", "InitialValues", "LinearAlgebra", "Requires", "Setfield", "Tables", "ZygoteRules"]
 git-tree-sha1 = "d53b1eaefd48e233545d21f5b764c8ee54df4a09"
@@ -86,6 +91,12 @@ git-tree-sha1 = "d3d0a4e0d5bc03a6c97f4d249c8a471fc20a2f33"
 uuid = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4"
 version = "0.9.28"
 
+[[CodecZlib]]
+deps = ["TranscodingStreams", "Zlib_jll"]
+git-tree-sha1 = "ded953804d019afa9a3f98981d99b33e3db7b6da"
+uuid = "944b1d66-785c-5afd-91f1-9de20f533193"
+version = "0.7.0"
+
 [[ColorSchemes]]
 deps = ["ColorTypes", "Colors", "FixedPointNumbers", "Random", "StaticArrays"]
 git-tree-sha1 = "3141757b5832ee7a0386db87997ee5a23ff20f4d"
@@ -137,8 +148,8 @@ uuid = "d38c429a-6771-53c6-b99e-75d170b6e991"
 version = "0.5.7"
 
 [[CovidAlertVaccinationModel]]
-deps = ["BenchmarkTools", "CSV", "DataFrames", "Dates", "DelimitedFiles", "Distributions", "ImportAll", "Intervals", "LabelledArrays", "LightGraphs", "NamedTupleTools", "NetworkLayout", "Pipe", "Plots", "Random", "RandomNumbers", "StatsBase", "ThreadsX", "UnPack"]
-path = "../CovidABM"
+deps = ["BenchmarkTools", "CSV", "DataFrames", "Dates", "DelimitedFiles", "Distributions", "ImportAll", "Intervals", "LabelledArrays", "LightGraphs", "NamedTupleTools", "NetworkLayout", "Pipe", "Plots", "Random", "RandomNumbers", "StatsBase", "ThreadsX", "UnPack", "ZeroWeightedDistributions"]
+path = "../CovidAlertVaccinationModel"
 uuid = "9260c4ec-b5cf-4bc2-ad29-e1d23bf2bd6f"
 version = "0.1.0"
 
@@ -231,6 +242,12 @@ git-tree-sha1 = "3cc57ad0a213808473eafef4845a74766242e05f"
 uuid = "b22a6f82-2f65-5046-a5b2-351ab43fb4e5"
 version = "4.3.1+4"
 
+[[FilePathsBase]]
+deps = ["Dates", "Mmap", "Printf", "Test", "UUIDs"]
+git-tree-sha1 = "36cf9f6b91e638bb95b16a11186287b3f616414a"
+uuid = "48062228-2e41-5def-b9a4-89aafe57970f"
+version = "0.9.9"
+
 [[FillArrays]]
 deps = ["LinearAlgebra", "Random", "SparseArrays"]
 git-tree-sha1 = "50eabdace27aa27b143f65b65e762bb0112a7708"
@@ -388,6 +405,12 @@ git-tree-sha1 = "a431f5f2ca3f4feef3bd7a5e94b8b8d4f2f647a0"
 uuid = "692b3bcd-3c85-4b1f-b108-f13ce0eb3210"
 version = "1.2.0"
 
+[[JLSO]]
+deps = ["BSON", "CodecZlib", "FilePathsBase", "Memento", "Pkg", "Serialization"]
+git-tree-sha1 = "85124b548bf4c2bb59284d353aa09ffc224d761f"
+uuid = "9da8a3cd-07a3-59c0-a743-3fdc52c30d11"
+version = "2.4.0"
+
 [[JSON]]
 deps = ["Dates", "Mmap", "Parsers", "Unicode"]
 git-tree-sha1 = "81690084b6198a2e1da36fcfda16eeca9f9f24e4"
@@ -558,6 +581,12 @@ git-tree-sha1 = "e498ddeee6f9fdb4551ce855a46f54dbd900245f"
 uuid = "442fdcdd-2543-5da2-b0f3-8c86c306513e"
 version = "0.3.1"
 
+[[Memento]]
+deps = ["Dates", "Distributed", "JSON", "Serialization", "Sockets", "Syslogs", "Test", "TimeZones", "UUIDs"]
+git-tree-sha1 = "d6dfb54d7e8a9b4a2b1773acf7275a4f607906b2"
+uuid = "f28f55f0-a522-5efc-85c2-fe41dfb9b2d9"
+version = "1.1.2"
+
 [[MicroCollections]]
 deps = ["BangBang", "Setfield"]
 git-tree-sha1 = "e991b6a9d38091c4a0d7cd051fcb57c05f98ac03"
@@ -896,6 +925,12 @@ version = "1.2.3"
 deps = ["Libdl", "LinearAlgebra", "Serialization", "SparseArrays"]
 uuid = "4607b0f0-06f3-5cda-b6b1-a6196a1729e9"
 
+[[Syslogs]]
+deps = ["Printf", "Sockets"]
+git-tree-sha1 = "46badfcc7c6e74535cc7d833a91f4ac4f805f86d"
+uuid = "cea106d9-e007-5e6c-ad93-58fe2094e9c4"
+version = "0.3.0"
+
 [[TOML]]
 deps = ["Dates"]
 uuid = "fa267f1f-6049-4f14-aa54-33bafae1ed76"
@@ -938,6 +973,12 @@ git-tree-sha1 = "4ba8a9579a243400db412b50300cd61d7447e583"
 uuid = "f269a46b-ccf7-5d73-abea-4c690281aa53"
 version = "1.5.3"
 
+[[TranscodingStreams]]
+deps = ["Random", "Test"]
+git-tree-sha1 = "7c53c35547de1c5b9d46a4797cf6d8253807108c"
+uuid = "3bb67fe8-82b1-5028-8e26-92a6c54297fa"
+version = "0.9.5"
+
 [[Transducers]]
 deps = ["ArgCheck", "BangBang", "CompositionsBase", "DefineSingletons", "Distributed", "InitialValues", "Logging", "Markdown", "MicroCollections", "Requires", "Setfield", "SplittablesBase", "Tables"]
 git-tree-sha1 = "9550eba57ebc2f7677c4c946aaca56e149ca73ff"
@@ -1117,6 +1158,12 @@ git-tree-sha1 = "79c31e7844f6ecf779705fbc12146eb190b7d845"
 uuid = "c5fb5394-a638-5e4d-96e5-b29de1b5cf10"
 version = "1.4.0+3"
 
+[[ZeroWeightedDistributions]]
+deps = ["Distributions", "Random"]
+path = "../ZeroWeightedDistributions"
+uuid = "24733ad3-391a-4e41-8839-c7177de7dea4"
+version = "0.1.0"
+
 [[Zlib_jll]]
 deps = ["Libdl"]
 uuid = "83775a58-1f1d-513f-b197-d71354ab007a"
diff --git a/IntervalsModel/Project.toml b/IntervalsModel/Project.toml
index dadafe079fa2edff18f47dbab5d30acb5657a22b..58ade50c253cbfd3ccc4dc94a0ce5c11a6aca850 100644
--- a/IntervalsModel/Project.toml
+++ b/IntervalsModel/Project.toml
@@ -10,6 +10,7 @@ CovidAlertVaccinationModel = "9260c4ec-b5cf-4bc2-ad29-e1d23bf2bd6f"
 DataFrames = "a93c6f00-e57d-5684-b7b6-d8193f3e46c0"
 Distributions = "31c24e10-a181-5473-b8eb-7969acd0382f"
 Intervals = "d8418881-c3e1-53bb-8760-2df7ec849ed5"
+JLSO = "9da8a3cd-07a3-59c0-a743-3fdc52c30d11"
 KissABC = "9c9dad79-530a-4643-a18b-2704674d4108"
 ModularIntervals = "1e07f51d-1de3-4a1c-a782-ac336877d585"
 Plots = "91a5bcdd-55d7-5caf-9e0b-520d859cae80"
diff --git a/IntervalsModel/simulation_data/ws.dat b/IntervalsModel/simulation_data/ws.dat
new file mode 100644
index 0000000000000000000000000000000000000000..22d0e133575f32da7591c998333ffd5381a12531
Binary files /dev/null and b/IntervalsModel/simulation_data/ws.dat differ
diff --git a/IntervalsModel/src/IntervalsModel.jl b/IntervalsModel/src/IntervalsModel.jl
index 8d1fa4f038a449b56aa4b2ec8eebd60020cb9c3a..f9e1e7c25bd9fc1ab7642efdf44b78b22393a466 100644
--- a/IntervalsModel/src/IntervalsModel.jl
+++ b/IntervalsModel/src/IntervalsModel.jl
@@ -7,37 +7,76 @@ using RandomNumbers.Xorshifts
 using StatsBase
 using Distributions
 using CovidAlertVaccinationModel
+using ZeroWeightedDistributions
 const PACKAGE_FOLDER = dirname(dirname(pathof(IntervalsModel)))
-const HHYMO = DataFrame(CSV.File("$PACKAGE_FOLDER/network-data/Timeuse/HH/HHYMO.csv"))
-const rng = Xoroshiro128Plus()
+
+using Serialization
+
+const rng = Xoroshiro128Plus(1)
 const YOUNG, MIDDLE,OLD = 1,2,3
-const cnst = (
-    # Set the underlying parameters for the intervals model
-    Sparam = [60,12],
-    # Set parameters for intervals sample and subpopulation size
-    numsamples = 100,
-    subsize = size(HHYMO)[1],
-    durmax = 144,
-    # Swap age brackets for numbers
-    swap = Dict("Y" => YOUNG, "M" => MIDDLE, "O" => OLD),
-    # Total weight in survey
-    Wghttotal = sum(HHYMO[:,"WGHT_PER"]),
+const durmax = 144
 
-    MUbounds = (6,12*6),
-    SIGMAbounds = (1,48),
-    ws_distributions = CovidAlertVaccinationModel.initial_workschool_mixing_matrix,
-    rest_distributions = CovidAlertVaccinationModel.initial_rest_mixing_matrix
-)
+include("interval_overlap_sampling.jl")
+include("utils.jl")
+include("hh_durations_model.jl")
+include("ws_durations_model.jl")
+include("plotting_functions.jl")
 
-include("data.jl")
 
+using KissABC
+using BenchmarkTools
+using JLSO
+using Plots
 
-const dat = make_dat_array() #assign a constant data array
 
+const μ_bounds = (6,12*6) 
+const σ_bounds = (1,48)
+const α_bounds = (0.0,1.0) 
+
+function do_hh(particles)
+    dists = [
+        Normal,
+        Poisson,
+    ]
+    bounds_list = [
+        vcat([μ_bounds for i = 1:6], [σ_bounds for i = 1:6]),
+        vcat([μ_bounds for i = 1:6])
+    ]
+    bayesian_estimate("hh",err_hh,dists,bounds_list,particles)
+end
+
+function do_ws(particles)
+    dists = [
+        ZWDist{Normal},
+        ZWDist{Poisson},
+    ]
+
+    # Set parameter bounds for fitting
+    bounds_list = [
+        vcat([α_bounds for i = 1:6],[μ_bounds for i = 1:6], [σ_bounds for i = 1:6]),
+        vcat([α_bounds for i = 1:6],[μ_bounds for i = 1:6])
+    ]
+    display(bounds_list[1])
+    bayesian_estimate("ws",err_ws,dists,bounds_list,particles)
+
+end
+
+function bayesian_estimate(fname,err_func,dists,bounds_list,particles)
+    data_pairs = map(zip(dists,bounds_list)) do (dist,bounds)
+        init = [b[1] for b in bounds]
+        priors = Factored([Uniform(l,u) for (l,u) in bounds]...) #assume uniform priors
+
+        @btime err_ws($init,$dist) #compute benchmark of the error function, not rly necessary
+        
+        out = smc(priors,p -> err_func(p, dist), verbose=true, nparticles=particles, alpha=0.95, parallel = true) #apply sequential monte carlo with 200 particles
+        
+        return dist => out
+    end |> Dict
+    serialize(joinpath(PACKAGE_FOLDER,"simulation_data","$fname.dat"),data_pairs)
+end
+function plot_estimates(fname)
+
+end
 
-include("interval_overlap_sampling.jl")
-include("hh_durations_model.jl")
-include("bayesian_estimation.jl")
-include("plots.jl")
 
 end # module
\ No newline at end of file
diff --git a/IntervalsModel/src/bayesian_estimation.jl b/IntervalsModel/src/bayesian_estimation.jl
deleted file mode 100644
index 0df0dd85a8a2cfb0ed55e9fc75b5b9a0866c6258..0000000000000000000000000000000000000000
--- a/IntervalsModel/src/bayesian_estimation.jl
+++ /dev/null
@@ -1,28 +0,0 @@
-
-
-using KissABC
-using BenchmarkTools
-using Serialization
-using Plots
-function bayesian_estimate_hh()
-
-# Set parameter bounds for fitting
-    BoundsNORM = vcat([cnst.MUbounds for i = 1:6], [cnst.SIGMAbounds for i = 1:6])
-
-    norm_init = vcat([cnst.MUbounds[1] for i = 1:6], [cnst.SIGMAbounds[1] for i = 1:6])
-    BoundsPOIS = [cnst.MUbounds for i in 1:6]
-    pois_init = [cnst.MUbounds[1] for i = 1:6]
-
-    priors_norm = Factored([Uniform(l,u) for (l,u) in BoundsNORM]...) #assume uniform priors
-    # @btime err_poisson($pois_init) #compute benchmark of the error function
-
-
-    out_norm = smc(priors_norm,err_norm, verbose=true, nparticles=2000, alpha=0.95, parallel = true) #apply sequential monte carlo with 200 particles
-    serialize("norm.dat",out_norm) #save output
-
-
-    priors_pois = Factored([Uniform(l,u) for (l,u) in BoundsPOIS]...)    
-    out_pois = smc(priors_pois,err_poisson, verbose=true, nparticles=2000, alpha=0.95, parallel = true)#apply sequential monte carlo with 200 particles
-
-    serialize("pois.dat",out_pois) #save output
-end
\ No newline at end of file
diff --git a/IntervalsModel/src/data.jl b/IntervalsModel/src/data.jl
deleted file mode 100644
index 9e9f3273b05b037a52ff344fdf7b96637727cd46..0000000000000000000000000000000000000000
--- a/IntervalsModel/src/data.jl
+++ /dev/null
@@ -1,24 +0,0 @@
-
-# This function applies pre-processing to the HHYMO data file, and splits it into a namedtuple, which should be faster to index.
-# In particular, we avoid having to modify any strings in the error function.
-function make_dat_array()
-    durs = hcat(
-        Int.(HHYMO[!,"YDUR"*string(cnst.Sparam[2])]),
-        Int.(HHYMO[!,"MDUR"*string(cnst.Sparam[2])]),
-        Int.(HHYMO[!,"ODUR"*string(cnst.Sparam[2])]),
-    )
-    nums = hcat(
-        Int.(HHYMO[!,"YNUM"]),
-        Int.(HHYMO[!,"MNUM"]),
-        Int.(HHYMO[!,"ONUM"]),
-    )
-
-    WGHT = Weights(HHYMO[!,"WGHT_PER"]./cnst.Wghttotal)
-    AGERESP = map(r -> cnst.swap[r],HHYMO[!,"AGERESP"])
-    return (;
-        nums,
-        durs,
-        WGHT,
-        AGERESP
-    )
-end
diff --git a/IntervalsModel/src/hh_durations_model.jl b/IntervalsModel/src/hh_durations_model.jl
index 0f17e1e8fab525b8de2dcf83f7bfa69fe0edfa6c..3200cb1bcc7c2010dcc25d1e593d55d9cccfa215 100644
--- a/IntervalsModel/src/hh_durations_model.jl
+++ b/IntervalsModel/src/hh_durations_model.jl
@@ -1,52 +1,61 @@
 
-#error function for Normal distributions
-function err_norm(params)
-    μ = as_symmetric_matrix(params[1:6])
-    σ = as_symmetric_matrix(params[7:12])
-
-    # this line is commented out, in we want to go back to sampling subsets of the data
-    # this also applies to the @view lines
-    # row_ids = sample(rng,1:length(dat.WGHT), dat.WGHT,cnst.subsize)
-    age_dists = [Normal(μ[i,j],σ[i,j]) for i in YOUNG:OLD, j in YOUNG:OLD]
-    duration_subarray =  dat.durs#@view dat.durs[row_ids,:]
-    num_contacts_subarray = dat.nums#@view dat.nums[row_ids,:]
-
-    # display(num_contacts_subarray)
-    AGERESP =  dat.AGERESP #@view dat.AGERESP[row_ids]
-    errsum = 0
-    @inbounds for i = 1:cnst.subsize
-        age_sample = AGERESP[i]
-        @inbounds for age_j in YOUNG:OLD #for a given age_sample loop over possible contact ages
-            running_sum = 0
-            durs = trunc.(Int,rand(rng,age_dists[age_sample,age_j],num_contacts_subarray[i,age_j])) .% 144
-            expdur = tot_dur_sample(cnst.numsamples,cnst.Sparam,durs)
-            errsum += (expdur/cnst.numsamples - duration_subarray[i,age_j])^2 #compute total 
-        end
-    end
-    return errsum/cnst.subsize #this division not actually necessary
+const HHYMO = DataFrame(CSV.File("$PACKAGE_FOLDER/network-data/Timeuse/HH/HHYMO.csv"))
+
+# This function applies pre-processing to the HHYMO data file, and splits it into a namedtuple, which should be faster to index.
+# In particular, we avoid having to modify any strings in the error function.
+
+const cnst_hh = (
+    # Set the underlying parameters for the intervals model
+    Sparam = [60,12],
+    # Set parameters for intervals sample and subpopulation size
+    numsamples = 100,
+    subsize = size(HHYMO)[1],
+    # Swap age brackets for numbers
+    swap = Dict("Y" => YOUNG, "M" => MIDDLE, "O" => OLD),
+    # Total weight in survey
+    Wghttotal = sum(HHYMO[:,"WGHT_PER"]),
+)
+function make_dat_array()
+    durs = hcat(
+        Int.(HHYMO[!,"YDUR"*string(cnst_hh.Sparam[2])]),
+        Int.(HHYMO[!,"MDUR"*string(cnst_hh.Sparam[2])]),
+        Int.(HHYMO[!,"ODUR"*string(cnst_hh.Sparam[2])]),
+    )
+    nums = hcat(
+        Int.(HHYMO[!,"YNUM"]),
+        Int.(HHYMO[!,"MNUM"]),
+        Int.(HHYMO[!,"ONUM"]),
+    )
+
+    WGHT = Weights(HHYMO[!,"WGHT_PER"]./cnst_hh.Wghttotal)
+    AGERESP = map(r -> cnst_hh.swap[r],HHYMO[!,"AGERESP"])
+    return (;
+        nums,
+        durs,
+        WGHT,
+        AGERESP
+    )
 end
+const dat = make_dat_array() #assign a constant data array
 
 
-#error function for poisson distributions
-function err_poisson(params) #error function for poisson
-    μ = as_symmetric_matrix(params)
-    # row_ids = sample(rng,1:length(dat.WGHT), dat.WGHT,cnst.subsize)
-    age_dists = [Poisson(μ[i,j]) for i in YOUNG:OLD, j in YOUNG:OLD]
-    duration_subarray =  dat.durs#@view dat.durs[row_ids,:]
-    num_contacts_subarray = dat.nums#@view dat.nums[row_ids,:]
+#error function for Normal distributions
+function err_hh(p,dist)
 
-    # display(num_contacts_subarray)
-    AGERESP =  dat.AGERESP #@view dat.AGERESP[row_ids]
+    params = get_params(dist,p)
+    age_dists = [dist(params[i,j]) for i in YOUNG:OLD, j in YOUNG:OLD]
+    duration_subarray =  dat.durs
+    num_contacts_subarray = dat.nums
 
+    AGERESP =  dat.AGERESP 
     errsum = 0
     @inbounds for i = 1:cnst.subsize
         age_sample = AGERESP[i]
-        @inbounds for age_j in YOUNG:OLD
-            running_sum = 0
+        @inbounds for age_j in YOUNG:OLD #for a given age_sample loop over possible contact ages
             durs = trunc.(Int,rand(rng,age_dists[age_sample,age_j],num_contacts_subarray[i,age_j])) .% 144
-            expdur = tot_dur_sample(cnst.numsamples,cnst.Sparam,durs)
-            errsum += (expdur/cnst.numsamples - duration_subarray[i,age_j])^2
+            expdur = tot_dur_sample(cnst_hh.numsamples,cnst_hh.Sparam,durs)
+            errsum += (expdur/cnst_hh.numsamples - duration_subarray[i,age_j])^2 #compute total 
         end
     end
-    return errsum/cnst.subsize
+    return errsum
 end
\ No newline at end of file
diff --git a/IntervalsModel/src/interval_overlap_sampling.jl b/IntervalsModel/src/interval_overlap_sampling.jl
index a137e9111fb1b0c2b6be893f77b0f5e6a7119ea9..18227477f2a414c0b7a57121c200fca8ef99f425 100644
--- a/IntervalsModel/src/interval_overlap_sampling.jl
+++ b/IntervalsModel/src/interval_overlap_sampling.jl
@@ -2,7 +2,7 @@
 function coverage!(cov,S_j,E_j)
     if E_j < S_j
         push!(cov,Interval(0,E_j))
-        push!(cov,Interval(S_j,cnst.durmax))
+        push!(cov,Interval(S_j,durmax))
     else
         push!(cov,Interval(S_j,E_j))
     end
@@ -22,8 +22,8 @@ function tot_dur_sample(n, dist,durlist)
     @inbounds for i in 1:n  
         empty!(int_list)
         @inbounds for j in 1:numcontact
-            S_j = start_matrix[j,i] % cnst.durmax
-            E_j = (S_j + durlist[j]) % cnst.durmax
+            S_j = start_matrix[j,i] % durmax
+            E_j = (S_j + durlist[j]) % durmax
             coverage!(int_list,S_j,E_j)
         end
         union!(int_list)
@@ -31,6 +31,27 @@ function tot_dur_sample(n, dist,durlist)
     end
     return total_dur
 end
+function tot_dur_sample!(sample_list, dist,durlist)
+    if isempty(durlist)
+        sample_list .= 0.0
+        return
+    end
+    numcontact = length(durlist)
+    n = length(sample_list)
+    int_list = Vector{Interval{Int,Closed,Closed}}()
+    sizehint!(int_list,numcontact*2)
+    start_matrix = trunc.(Int,(rand(rng,dist,(numcontact,n))))
+    for i in 1:n  
+        empty!(int_list)
+        for j in 1:numcontact
+            S_j = start_matrix[j,i] % durmax
+            E_j = (S_j + durlist[j]) % durmax
+            coverage!(int_list,S_j,E_j)
+        end
+        union!(int_list)
+        sample_list[i] = mapreduce(Intervals.span,+,int_list)
+    end
+end
 
 
 function as_symmetric_matrix(l) #turn a vector of length 6, l, into a symmetric 3x3 matrix, probably a nicer way to do this exists
diff --git a/IntervalsModel/src/plots.jl b/IntervalsModel/src/plotting_functions.jl
similarity index 53%
rename from IntervalsModel/src/plots.jl
rename to IntervalsModel/src/plotting_functions.jl
index 347989ca4b5400735f954c4acf2012d621c65128..978f5a01e253b2917d51ec3ebd4055b9eaae0764 100644
--- a/IntervalsModel/src/plots.jl
+++ b/IntervalsModel/src/plotting_functions.jl
@@ -1,26 +1,10 @@
-
-function plot_estimates()
-
-    estimate = deserialize("norm.dat")
-    p_list = []
-
-    for i in 1:length(estimate.P)
-        a = stephist(
-            estimate.P[i].particles;
-            normalize = true,
-            title = i <=6 ? "μ_$i" : "σ_$i" 
-        )
-        push!(p_list,a)
-    end
-    p = plot(p_list...)
-    savefig(p,"norm.png")
-
+function plot_dists(fname,dist_constructor,data)
     μ_estimate_as_array = as_symmetric_matrix(estimate.P[1:6])
     σ_estimate_as_array = as_symmetric_matrix(estimate.P[7:12])
     p_matrix = map(x -> plot(),σ_estimate_as_array)
     for i in YOUNG:OLD, j in YOUNG:OLD
         
-        dist = Normal.(μ_estimate_as_array[i,j].particles,σ_estimate_as_array[i,j].particles)
+        dist = dist_constructor.(μ_estimate_as_array[i,j].particles,σ_estimate_as_array[i,j].particles)
         
         data = [pdf.(dist,i) for i in 0.0:144.0]
         mean_dat = median.(data)
@@ -31,12 +15,26 @@ function plot_estimates()
     end
     plot!(p_matrix[end,1]; legend = true)
     p = plot(p_matrix..., size = (600,400))
-    savefig(p,"norm_dists.pdf")
-
+    savefig(p,"$fname.pdf")
+end
+function plot_posteriors(fname,parameter_names,data)
+    for i in 1:length(data.P)
+        a = stephist(
+            data.P[i].particles;
+            normalize = true,
+            title = i <=6 ? "μ_$i" : "σ_$i" 
+        )
+        push!(p_list,a)
+    end
+    p = plot(p_list...)
+    savefig(p,"$norm.png")
+end
 
+function plot_estimates_hh()
 
+    estimate = deserialize("norm.dat")
+    p_list = []
 
-    estimate = deserialize("pois.dat")
     p_list = []
     for i in 1:length(estimate.P)
         a = stephist(
@@ -68,4 +66,40 @@ function plot_estimates()
     
 
 
+end
+function plot_estimates_ws()
+    estimate = deserialize("norm_ws.dat")
+    p_list = []
+    titles = vcat(
+        ["\\alpha_$i" for i in 1:6],
+        ["\\mu_$i" for i in 1:6], 
+        ["\\sigma_$i" for i in 1:6],
+    ) 
+    for i in 1:length(estimate.P)
+        a = stephist(
+            estimate.P[i].particles;
+            normalize = true,
+            title = titles[i],
+            legend = false
+        )
+        push!(p_list,a)
+    end
+    p = plot(p_list...; size = (1000,800), dpi = 300)
+    savefig(p,"norm_ws.png")
+
+    p_estimate_as_arrays = zip([as_symmetric_matrix(estimate.P[i:i+5]) for i in 1:6:length(estimate.P)]...) |> collect
+
+    p_matrix = map(x -> plot(),p_estimate_as_arrays)
+    for i in YOUNG:OLD, j in YOUNG:OLD
+        particles = map(x-> x.particles,p_estimate_as_arrays[i,j]) |> t->zip(t...) |> collect
+        dists = map(x-> ZWDist(x[1],Normal(x[2],x[3])), particles)
+        data = [pdf.(dists,i) for i in 0.0:144.0]
+        mean_dat = median.(data)
+        err_down = quantile.(data,0.05)
+        err_up = quantile.(data,0.95)
+        p_matrix[i,j] = plot(0:144,mean_dat; ribbon = ( mean_dat .- err_down,err_up .- mean_dat),legend = false)
+    end
+    plot!(p_matrix[end,1]; legend = true)
+    p = plot(p_matrix..., size = (600,400))
+    savefig(p,"norm_dists_ws.pdf")
 end
\ No newline at end of file
diff --git a/IntervalsModel/src/utils.jl b/IntervalsModel/src/utils.jl
new file mode 100644
index 0000000000000000000000000000000000000000..60278e0caf2d4a35762f69dad8aca524f25ba90c
--- /dev/null
+++ b/IntervalsModel/src/utils.jl
@@ -0,0 +1,9 @@
+
+
+nparams(d::Type{T}) where T<:Sampleable = length(fieldnames(d)) 
+nparams(::Type{ZWDist{T,S}}) where {T<:Sampleable,S} = 1+nparams(T)
+
+function get_params(params)
+    p_list = [as_symmetric_matrix(params[i:i+5]) for i = 1:6:length(params)]
+    return zip(p_list...) |> collect
+end
\ No newline at end of file
diff --git a/IntervalsModel/src/ws_durations_model.jl b/IntervalsModel/src/ws_durations_model.jl
index 12eb412043fff0d8e17d18fb44b75cdeed7e492c..735a8f2a7e2c109ad1ec4110ef41e4ed5810fa82 100644
--- a/IntervalsModel/src/ws_durations_model.jl
+++ b/IntervalsModel/src/ws_durations_model.jl
@@ -1,52 +1,36 @@
 
-#error function for Normal distributions
-function err_norm(params)
-    μ = as_symmetric_matrix(params[1:6])
-    σ = as_symmetric_matrix(params[7:12])
+using HypothesisTests
+const ws_data = (
+    Y = CSV.File("$PACKAGE_FOLDER/network-data/Timeuse/WS/WorkschoolDataY.csv") |> Tables.matrix |> x -> dropdims(x;dims = 2),
+    M = CSV.File("$PACKAGE_FOLDER/network-data/Timeuse/WS/WorkschoolDataM.csv") |> Tables.matrix |> x -> dropdims(x;dims = 2),
+    O = CSV.File("$PACKAGE_FOLDER/network-data/Timeuse/WS/WorkschoolDataO.csv") |> Tables.matrix |> x -> dropdims(x;dims = 2),
+)
+const comparison_samples = 10_000
 
-    # this line is commented out, if we want to go back to sampling subsets of the data
-    # this also applies to the @view lines
-    # row_ids = sample(rng,1:length(dat.WGHT), dat.WGHT,cnst.subsize)
-    age_dists = [Normal(μ[i,j],σ[i,j]) for i in YOUNG:OLD, j in YOUNG:OLD]
-    duration_subarray =  dat.durs#@view dat.durs[row_ids,:]
-    num_contacts_subarray = dat.nums#@view dat.nums[row_ids,:]
+ws_distributions = CovidAlertVaccinationModel.initial_workschool_mixing_matrix
 
-    # display(num_contacts_subarray)
-    AGERESP =  dat.AGERESP #@view dat.AGERESP[row_ids]
+#error function
+function err_ws(p,dist)
+    params = get_params(p)
+    neighourhoods = rand.(rng,ws_distributions)
+    age_dists = [dist(params[i,j]...) for i in YOUNG:OLD, j in YOUNG:OLD]
+    sample_list = zeros(comparison_samples)
+    ws_samples = (
+        Y = sample(rng, ws_data.Y, comparison_samples),
+        M = sample(rng, ws_data.M, comparison_samples),
+        O = sample(rng, ws_data.O, comparison_samples),
+    )
     errsum = 0
-    @inbounds for i = 1:cnst.subsize
-        age_sample = AGERESP[i]
-        @inbounds for age_j in YOUNG:OLD #for a given age_sample loop over possible contact ages
-            running_sum = 0
-            durs = trunc.(Int,rand(rng,age_dists[age_sample,age_j],num_contacts_subarray[i,age_j])) .% 144
-            expdur = tot_dur_sample(cnst.numsamples,cnst.Sparam,durs)
-            errsum += (expdur/cnst.numsamples - duration_subarray[i,age_j])^2 #compute total 
+    for age_sample in YOUNG:OLD
+        for age_j in YOUNG:OLD #for a given age_sample loop over possible contact ages
+            if neighourhoods[age_sample,age_j] > 0
+                durs = trunc.(Int,rand(rng,age_dists[age_sample,age_j],neighourhoods[age_sample,age_j])) .% durmax
+                # display(durs)
+                tot_dur_sample!(sample_list,cnst_hh.Sparam,durs)
+                err =  1 - pvalue(KSampleADTest(ws_samples[age_sample],sample_list)) #need to maximize probability of null hypothesis, not rly valid but everyone does it so idk
+                errsum += err
+            end
         end
     end
-    return errsum/cnst.subsize #this division not actually necessary
-end
-
-
-#error function for poisson distributions
-function err_poisson(params) #error function for poisson
-    μ = as_symmetric_matrix(params)
-    # row_ids = sample(rng,1:length(dat.WGHT), dat.WGHT,cnst.subsize)
-    age_dists = [Poisson(μ[i,j]) for i in YOUNG:OLD, j in YOUNG:OLD]
-    duration_subarray =  dat.durs#@view dat.durs[row_ids,:]
-    num_contacts_subarray = dat.nums#@view dat.nums[row_ids,:]
-
-    # display(num_contacts_subarray)
-    AGERESP =  dat.AGERESP #@view dat.AGERESP[row_ids]
-
-    errsum = 0
-    @inbounds for i = 1:cnst.subsize
-        age_sample = AGERESP[i]
-        @inbounds for age_j in YOUNG:OLD
-            running_sum = 0
-            durs = trunc.(Int,rand(rng,age_dists[age_sample,age_j],num_contacts_subarray[i,age_j])) .% 144
-            expdur = tot_dur_sample(cnst.numsamples,cnst.Sparam,durs)
-            errsum += (expdur/cnst.numsamples - duration_subarray[i,age_j])^2
-        end
-    end
-    return errsum/cnst.subsize
+    return errsum
 end
\ No newline at end of file
diff --git a/README.md b/README.md
index 61f5f7feaca66fe3fe90b7096129edda9bf6cf0d..2acece3d5801c15d6f0e5ca9dc33e57aef0181e4 100644
--- a/README.md
+++ b/README.md
@@ -1,13 +1,37 @@
 # CovidAlertVaccinationModel
 
-This repo contains two packages:
+This repo contains three packages:
 
-* CovidAlertVaccinationModel (in CovidABM)
+* CovidAlertVaccinationModel
 
 * IntervalsModel
 
-The former implements the ABM, and the latter computes the time-distributions. The latter model depends on the former model because the mixing distributions are defined there, although really I guess it should be the inverse. 
+* ZeroWeightedDistributions
 
+The former implements the ABM, and the second computes the time-distributions. The latter model depends on the former model because the mixing distributions are defined there, although really I guess it should be the inverse. The last package, ZeroWeightedDistributions, implements a helpful type ZWDist{D} representing a random variable of distribution D with added weight at zero.
 
+Note that you need the Julia-1.6 beta to compile this project successfully. This is because the mixing distributions hit a compiler bug. I will try to find a workaround for when we run this on a cluster.
 
-Note that you need the Julia-1.6 beta to compile this project successfully. This is because the mixing distributions hit a compiler bug. 
+
+# Installation
+
+First, clone this repository and open the Julia-1.6 beta in the active directory
+```
+git clone https://git.uwaterloo.ca/pjentsch/covidalertabm.git
+cd covidalertabm
+julia -t auto
+```
+the `-t auto` option starts Julia with as many threads as you have physical CPU cores. You can pass this option a number if you prefer to use fewer threads.
+
+This should bring you to a julia REPL. Typing `]` at this repl will change your prompt to `pkg>`.
+
+Then add these packages to your main environment:
+```
+dev ./CovidAlertVaccinationModel
+dev ./IntervalsModel
+dev ./ZeroWeightedDistributions
+```
+
+We need to `dev` each of the above packages because they all share one git repo, and Julia's package manager doesn't seem to like that very much. I suppose we could split them into separate repos in the future.
+
+This package only tested on x86-64 Linux. It should work everywhere that Julia does though. 
\ No newline at end of file
diff --git a/ZeroWeightedDistributions/.github/workflows/CompatHelper.yml b/ZeroWeightedDistributions/.github/workflows/CompatHelper.yml
new file mode 100644
index 0000000000000000000000000000000000000000..cba9134c670f0708cf98c92f7fdef055a6c7f5d3
--- /dev/null
+++ b/ZeroWeightedDistributions/.github/workflows/CompatHelper.yml
@@ -0,0 +1,16 @@
+name: CompatHelper
+on:
+  schedule:
+    - cron: 0 0 * * *
+  workflow_dispatch:
+jobs:
+  CompatHelper:
+    runs-on: ubuntu-latest
+    steps:
+      - name: Pkg.add("CompatHelper")
+        run: julia -e 'using Pkg; Pkg.add("CompatHelper")'
+      - name: CompatHelper.main()
+        env:
+          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+          COMPATHELPER_PRIV: ${{ secrets.DOCUMENTER_KEY }}
+        run: julia -e 'using CompatHelper; CompatHelper.main()'
diff --git a/ZeroWeightedDistributions/.github/workflows/TagBot.yml b/ZeroWeightedDistributions/.github/workflows/TagBot.yml
new file mode 100644
index 0000000000000000000000000000000000000000..f49313b662013f43aac7de2c738e1163a9715ff4
--- /dev/null
+++ b/ZeroWeightedDistributions/.github/workflows/TagBot.yml
@@ -0,0 +1,15 @@
+name: TagBot
+on:
+  issue_comment:
+    types:
+      - created
+  workflow_dispatch:
+jobs:
+  TagBot:
+    if: github.event_name == 'workflow_dispatch' || github.actor == 'JuliaTagBot'
+    runs-on: ubuntu-latest
+    steps:
+      - uses: JuliaRegistries/TagBot@v1
+        with:
+          token: ${{ secrets.GITHUB_TOKEN }}
+          ssh: ${{ secrets.DOCUMENTER_KEY }}
diff --git a/ZeroWeightedDistributions/.gitignore b/ZeroWeightedDistributions/.gitignore
new file mode 100644
index 0000000000000000000000000000000000000000..b067eddee4ee0afc7c0ea1304b68c5af07c3d5ca
--- /dev/null
+++ b/ZeroWeightedDistributions/.gitignore
@@ -0,0 +1 @@
+/Manifest.toml
diff --git a/ZeroWeightedDistributions/LICENSE b/ZeroWeightedDistributions/LICENSE
new file mode 100644
index 0000000000000000000000000000000000000000..e93f61e1483823cc9acc50775972ab044cd1ebf6
--- /dev/null
+++ b/ZeroWeightedDistributions/LICENSE
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2021 pjentsch <pjentsch@uwaterloo.ca> and contributors
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/ZeroWeightedDistributions/Project.toml b/ZeroWeightedDistributions/Project.toml
new file mode 100644
index 0000000000000000000000000000000000000000..34fdd9f81402bf253da18a900d2f84e2e0981b42
--- /dev/null
+++ b/ZeroWeightedDistributions/Project.toml
@@ -0,0 +1,17 @@
+name = "ZeroWeightedDistributions"
+uuid = "24733ad3-391a-4e41-8839-c7177de7dea4"
+authors = ["pjentsch <pjentsch@uwaterloo.ca> and contributors"]
+version = "0.1.0"
+
+[deps]
+Distributions = "31c24e10-a181-5473-b8eb-7969acd0382f"
+Random = "9a3f8284-a2c9-5f02-9a11-845980a1fd5c"
+
+[compat]
+julia = "1"
+
+[extras]
+Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40"
+
+[targets]
+test = ["Test"]
diff --git a/ZeroWeightedDistributions/README.md b/ZeroWeightedDistributions/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..240f499ba29a748cf4cf920d1984e4207651b716
--- /dev/null
+++ b/ZeroWeightedDistributions/README.md
@@ -0,0 +1 @@
+# ZeroWeightedDistributions
diff --git a/ZeroWeightedDistributions/src/ZeroWeightedDistributions.jl b/ZeroWeightedDistributions/src/ZeroWeightedDistributions.jl
new file mode 100644
index 0000000000000000000000000000000000000000..8b5b044ecc95e5883dac1a8657fbf0f715e8cb7f
--- /dev/null
+++ b/ZeroWeightedDistributions/src/ZeroWeightedDistributions.jl
@@ -0,0 +1,51 @@
+module ZeroWeightedDistributions
+export ZWDist,rand,rand!
+using Random
+import Base.rand
+import Random.rand!
+using Distributions
+import Distributions.pdf
+
+
+struct ZWDist{BaseDistType <: Sampleable,T} <: Sampleable{Univariate,T}
+    α::Float64
+    base_dist::BaseDistType
+    function ZWDist(α,base_dist::Sampleable{Univariate,S}) where S
+        return new{typeof(base_dist),S}(α,base_dist)
+    end
+    function ZWDist(D::Type{<:Sampleable{Univariate,S}},α,p...) where {S}
+        return new{D,S}(α,D(p...))
+    end
+    function ZWDist{DType}(α,p...) where {S,DType<:Sampleable{Univariate,S}}
+        return new{DType,S}(α,DType(p...))
+    end
+end
+
+function Distributions.pdf(d::ZWDist, x)
+    if x == 0 
+        return d.α + (1-d.α)*pdf(d.base_dist,0)
+    else
+        return pdf(d.base_dist,0)
+    end
+end
+
+function Base.rand(rng::AbstractRNG,  s::ZWDist{DType,S},  n::Int) where {DType, S}
+    l = Vector{eltype(DType)}(undef,n)
+    Random.rand!(rng,l)
+    l[l .< s.α] .= zero(eltype(DType))
+    Random.rand!(rng,s.base_dist,@view l[l .>= s.α])
+    return l
+end
+
+function Random.rand!(rng::AbstractRNG, s::ZWDist{DType,S}, l::T) where {T<:AbstractVector, DType,S}
+    Random.rand!(rng,l)
+    l[l .< s.α] .= zero(eltype(DType))
+    Random.rand!(rng,s.base_dist,@view l[l .>= s.α])
+    return l
+end
+
+function Base.rand(rng::AbstractRNG, s::ZWDist{DType,S}) where {DType,S} 
+    return ifelse(Base.rand(rng) < s.α, zero(eltype(DType)), Base.rand(rng,s.base_dist))
+end
+
+end
diff --git a/ZeroWeightedDistributions/test/runtests.jl b/ZeroWeightedDistributions/test/runtests.jl
new file mode 100644
index 0000000000000000000000000000000000000000..e6cee1d395f081f44f498324483ea04f7c84fb08
--- /dev/null
+++ b/ZeroWeightedDistributions/test/runtests.jl
@@ -0,0 +1,6 @@
+using ZeroWeightedDistributions
+using Test
+
+@testset "ZeroWeightedDistributions.jl" begin
+    # Write your tests here.
+end
diff --git a/norm.dat b/norm.dat
deleted file mode 100644
index 2ddc1225c6b292990c169d01c3b23f659176621a..0000000000000000000000000000000000000000
Binary files a/norm.dat and /dev/null differ
diff --git a/norm.png b/norm.png
deleted file mode 100644
index c393441311b0424b862684ffb5150b63df656bf4..0000000000000000000000000000000000000000
Binary files a/norm.png and /dev/null differ
diff --git a/norm_dists.pdf b/norm_dists.pdf
deleted file mode 100644
index bb383752d90e5bfcd739f8ec148f3bd9edf13701..0000000000000000000000000000000000000000
Binary files a/norm_dists.pdf and /dev/null differ
diff --git a/pois.dat b/pois.dat
deleted file mode 100644
index 3adaceb18e8086b74a138e8cad8457561c6750a9..0000000000000000000000000000000000000000
Binary files a/pois.dat and /dev/null differ
diff --git a/pois.png b/pois.png
deleted file mode 100644
index 2133dc66a0903f6fcb49e0f152156ba9e918309b..0000000000000000000000000000000000000000
Binary files a/pois.png and /dev/null differ
diff --git a/pois_dists.pdf b/pois_dists.pdf
deleted file mode 100644
index ef1442c80f57facffdf978546141a35659405751..0000000000000000000000000000000000000000
Binary files a/pois_dists.pdf and /dev/null differ