diff --git a/acme-handbook/setup.html b/acme-handbook/setup.html
index 789ff49..438b839 100644
--- a/acme-handbook/setup.html
+++ b/acme-handbook/setup.html
@@ -160,7 +160,7 @@
Quick Start
Install the rest of the development tools:
-
$ task dev:setup
+
$ task env:setup
diff --git a/search-index.js b/search-index.js
index 8fbaaa0..9ac3b81 100644
--- a/search-index.js
+++ b/search-index.js
@@ -1 +1 @@
-antoraSearch.initSearch(lunr, {"index":{"version":"2.3.9","fields":["title","name","text","component"],"fieldVectors":[["title/1",[0,52.726]],["name/1",[1,1.557]],["text/1",[2,0.244,3,0.659,4,1.549,5,0.659,6,0.659,7,0.583,8,0.72,9,1.109,10,1.235,11,0.659,12,0.667,13,0.929,14,0.659,15,0.659,16,0.659,17,0.659,18,0.496,19,1.092,20,0.583,21,0.496,22,0.999,23,0.999,24,0.977,25,0.583,26,0.42,27,0.659,28,0.583,29,0.659,30,0.583,31,0.659,32,0.533,33,0.441,34,0.659,35,0.659,36,0.659,37,0.583,38,0.898,39,0.583,40,0.659,41,0.659,42,0.466,43,0.533,44,0.496,45,0.466,46,1.231,47,0.533,48,0.659,49,1.235,50,0.659,51,0.466,52,0.583,53,0.659,54,0.622,55,0.466,56,0.659,57,0.659,58,0.659,59,0.583,60,0.583,61,0.583,62,0.659,63,0.659,64,0.999,65,0.533,66,0.659,67,0.659,68,0.533,69,0.533,70,0.659,71,0.659,72,0.583,73,0.659,74,0.659,75,0.583,76,0.466,77,0.583,78,0.583,79,0.659,80,0.42,81,0.659,82,0.659,83,0.659,84,0.659,85,0.659,86,0.929,87,0.659,88,0.659,89,0.533,90,0.659,91,0.659,92,0.659,93,0.659,94,0.496,95,0.583,96,0.659,97,0.496,98,0.466,99,0.533,100,0.533,101,0.659,102,0.496,103,0.583,104,0.332,105,0.583,106,0.441,107,0.659,108,0.583,109,0.659,110,0.659,111,0.659,112,0.659,113,0.659,114,0.659,115,0.659,116,0.659,117,0.659,118,0.659,119,0.659,120,0.466,121,0.659,122,0.583,123,0.659,124,0.659,125,0.42,126,0.583,127,0.496,128,0.659,129,0.496,130,0.42,131,0.466]],["component/1",[132,2.202]],["title/2-1",[133,46.647]],["name/2-1",[]],["text/2-1",[]],["component/2-1",[]],["title/2-2",[129,30.576,130,25.889]],["name/2-2",[]],["text/2-2",[]],["component/2-2",[]],["title/2-3",[131,28.735,134,21.202]],["name/2-3",[]],["text/2-3",[]],["component/2-3",[]],["title/2-4",[26,21.067,131,23.383,135,29.27]],["name/2-4",[]],["text/2-4",[]],["component/2-4",[]],["title/2-5",[80,17.759,131,19.711,136,22.556,137,24.674]],["name/2-5",[]],["text/2-5",[]],["component/2-5",[]],["title/2",[12,28.487]],["name/2",[12,1.118]],["text/2",[12,2.209,19,2.288,22,2.092,23,2.092,26,3.228,33,1.731,38,1.06,55,1.828,61,2.288,129,1.945,130,1.647,138,2.288,139,2.587,140,2.587,141,2.288,142,2.587,143,2.587,144,4.088,145,1.945,146,2.587,147,2.587,148,2.587,149,2.587,150,2.288]],["component/2",[2,0.552,151,0.998]],["title/3-1",[24,22.801,76,28.735]],["name/3-1",[]],["text/3-1",[]],["component/3-1",[]],["title/3-2",[152,28.735,153,25.889]],["name/3-2",[]],["text/3-2",[]],["component/3-2",[]],["title/3",[154,52.726]],["name/3",[1,1.557]],["text/3",[2,0.892,4,0.681,9,0.614,18,0.725,24,0.984,26,0.614,33,1.173,54,1.95,76,1.239,102,1.319,104,1.95,120,0.681,132,1.552,152,3.423,153,1.537,155,0.852,156,0.964,157,0.852,158,0.725,159,0.779,160,0.779,161,0.779,162,1.418,163,0.964,164,0.964,165,2.973,166,0.681,167,1.754,168,1.552,169,1.552,170,1.552,171,2.413,172,1.537,173,0.964,174,0.964,175,0.964,176,0.681,177,1.754,178,0.964,179,0.964,180,0.614,181,0.779,182,0.852,183,0.964,184,1.754,185,0.964,186,0.852,187,0.586,188,0.779,189,0.964,190,0.964,191,0.964,192,0.964,193,0.964,194,0.964,195,0.852,196,0.964,197,0.964,198,0.964]],["component/3",[2,0.552,151,0.998]],["title/4-1",[199,46.647]],["name/4-1",[]],["text/4-1",[]],["component/4-1",[]],["title/4-2",[200,46.647]],["name/4-2",[]],["text/4-2",[]],["component/4-2",[]],["title/4-3",[8,23.72,201,35.97]],["name/4-3",[]],["text/4-3",[]],["component/4-3",[]],["title/4",[202,46.647]],["name/4",[202,1.831]],["text/4",[7,0.79,8,1.322,9,0.569,21,0.672,25,0.79,37,0.79,38,0.366,42,0.631,78,0.79,104,0.825,130,0.569,145,0.672,159,0.723,166,0.631,180,0.569,187,1.378,195,0.79,199,1.448,200,1.448,201,0.79,203,1.231,204,0.893,205,1.448,206,0.893,207,0.893,208,0.893,209,0.893,210,0.79,211,0.79,212,0.893,213,0.893,214,0.893,215,0.893,216,1.637,217,0.893,218,0.893,219,0.893,220,1.637,221,0.893,222,0.893,223,0.893,224,0.893,225,1.442,226,0.893,227,1.637,228,0.723,229,0.893,230,0.893,231,0.893,232,0.893,233,1.637,234,0.893,235,0.893,236,0.893,237,0.893,238,0.79,239,0.893,240,0.893,241,0.893,242,0.893,243,0.893,244,0.893,245,0.893,246,1.637,247,0.79,248,0.79,249,0.79,250,0.723,251,0.79,252,1.637,253,0.893,254,0.893,255,0.723,256,0.893,257,0.79,258,0.893,259,0.569,260,0.893,261,0.893,262,0.79,263,0.893,264,0.893,265,0.893,266,0.893,267,0.672,268,0.893,269,0.79,270,0.893,271,0.893,272,0.893,273,0.723,274,0.893]],["component/4",[2,0.552,151,0.998]],["title/5-1",[18,30.576,275,40.657]],["name/5-1",[]],["text/5-1",[]],["component/5-1",[]],["title/5-2",[94,30.576,276,27.202]],["name/5-2",[]],["text/5-2",[]],["component/5-2",[]],["title/5-3",[97,30.576,98,28.735]],["name/5-3",[]],["text/5-3",[]],["component/5-3",[]],["title/5-4",[120,28.735,276,27.202]],["name/5-4",[]],["text/5-4",[]],["component/5-4",[]],["title/5-5",[277,46.647]],["name/5-5",[]],["text/5-5",[]],["component/5-5",[]],["title/5-6",[94,30.576,98,28.735]],["name/5-6",[]],["text/5-6",[]],["component/5-6",[]],["title/5-7",[97,30.576,98,28.735]],["name/5-7",[]],["text/5-7",[]],["component/5-7",[]],["title/5-8",[278,46.647]],["name/5-8",[]],["text/5-8",[]],["component/5-8",[]],["title/5-9",[99,42.643]],["name/5-9",[]],["text/5-9",[]],["component/5-9",[]],["title/5-10",[279,39.652]],["name/5-10",[]],["text/5-10",[]],["component/5-10",[]],["title/5-11",[280,52.726]],["name/5-11",[]],["text/5-11",[]],["component/5-11",[]],["title/5-12",[21,30.576,281,30.576]],["name/5-12",[]],["text/5-12",[]],["component/5-12",[]],["title/5-13",[282,37.264]],["name/5-13",[]],["text/5-13",[]],["component/5-13",[]],["title/5-14",[283,39.652]],["name/5-14",[]],["text/5-14",[]],["component/5-14",[]],["title/5-15",[187,20.132,284,24.881,285,24.881]],["name/5-15",[]],["text/5-15",[]],["component/5-15",[]],["title/5-16",[282,37.264]],["name/5-16",[]],["text/5-16",[]],["component/5-16",[]],["title/5-17",[283,39.652]],["name/5-17",[]],["text/5-17",[]],["component/5-17",[]],["title/5-18",[250,32.882,286,35.97]],["name/5-18",[]],["text/5-18",[]],["component/5-18",[]],["title/5",[158,39.652]],["name/5",[158,1.557]],["text/5",[2,0.11,4,0.594,8,1.462,9,1.248,20,0.511,21,0.224,24,0.167,26,0.368,28,0.263,33,1.44,38,0.447,39,0.511,42,0.21,43,0.241,46,0.21,54,0.78,55,0.21,68,0.241,75,0.263,86,0.632,89,0.467,94,1.474,95,0.263,97,1.164,98,1.889,99,0.467,104,0.15,106,0.199,120,1.772,122,0.263,125,0.368,135,0.744,137,0.263,141,0.744,145,0.224,152,1.386,153,0.844,155,0.744,157,0.263,158,0.224,159,0.241,160,2.027,161,0.241,162,0.881,168,0.263,176,0.21,181,1.072,182,0.511,186,0.511,187,0.351,188,0.467,203,0.224,211,0.744,228,0.241,247,0.263,248,0.263,250,0.68,259,0.694,262,0.511,267,0.434,273,0.241,276,0.729,277,0.263,278,0.263,279,0.434,281,0.632,282,1.094,283,1.164,284,0.434,285,0.434,286,0.263,287,0.841,288,0.263,289,0.297,290,0.297,291,0.297,292,0.297,293,0.881,294,0.577,295,0.841,296,0.297,297,0.297,298,0.263,299,0.257,300,0.297,301,0.297,302,0.241,303,0.297,304,0.297,305,0.297,306,0.511,307,0.297,308,0.297,309,0.297,310,0.263,311,0.297,312,0.297,313,0.744,314,0.297,315,0.263,316,0.964,317,0.297,318,0.263,319,0.841,320,0.964,321,0.577,322,0.577,323,0.263,324,0.297,325,0.297,326,0.241,327,0.297,328,0.263,329,0.297,330,0.297,331,0.577,332,0.297,333,0.297,334,0.297,335,0.297,336,0.577,337,0.297,338,0.297,339,0.297,340,0.297,341,0.263,342,0.297,343,0.577,344,0.467,345,0.297,346,0.224,347,0.297,348,0.297,349,0.241,350,0.297,351,0.297,352,0.263,353,0.297,354,0.297,355,0.241,356,0.263,357,0.297,358,0.224,359,0.297,360,0.297,361,0.297,362,0.263,363,0.297,364,0.632,365,1.173,366,0.297,367,0.297,368,0.297,369,0.297,370,0.297,371,0.297,372,0.297,373,0.841,374,0.297,375,0.297,376,0.297,377,0.263,378,0.297,379,0.577,380,0.511,381,0.577,382,0.297,383,0.297,384,0.297,385,0.297,386,0.241,387,0.511,388,0.241,389,0.263,390,0.297,391,0.297,392,0.297,393,0.297]],["component/5",[2,0.552,151,0.998]],["title/6-1",[9,33.574]],["name/6-1",[]],["text/6-1",[]],["component/6-1",[]],["title/6-2",[106,35.277]],["name/6-2",[]],["text/6-2",[]],["component/6-2",[]],["title/6-3",[104,20.495,394,40.657]],["name/6-3",[]],["text/6-3",[]],["component/6-3",[]],["title/6-4",[24,29.57]],["name/6-4",[]],["text/6-4",[]],["component/6-4",[]],["title/6-5",[104,20.495,395,35.97]],["name/6-5",[]],["text/6-5",[]],["component/6-5",[]],["title/6-6",[396,52.726]],["name/6-6",[]],["text/6-6",[]],["component/6-6",[]],["title/6-7",[397,52.726]],["name/6-7",[]],["text/6-7",[]],["component/6-7",[]],["title/6-8",[104,16.678,249,43.706]],["name/6-8",[]],["text/6-8",[]],["component/6-8",[]],["title/6",[104,26.579]],["name/6",[104,1.043]],["text/6",[24,1.272,45,1.603,51,1.603,52,2.007,104,2.961,106,1.518,187,1.38,203,4.417,205,3.256,225,1.444,395,4.108,398,2.268,399,2.268,400,2.268,401,2.268,402,5.874,403,2.268,404,2.268,405,2.268]],["component/6",[2,0.552,151,0.998]],["title/7-1",[281,39.652]],["name/7-1",[]],["text/7-1",[]],["component/7-1",[]],["title/7-2",[187,20.132,284,24.881,285,24.881]],["name/7-2",[]],["text/7-2",[]],["component/7-2",[]],["title/7",[54,16.678,406,29.27,407,33.084]],["name/7",[406,1.831]],["text/7",[8,0.887,104,1.752,106,1.017,152,3.622,160,1.229,170,1.345,176,1.074,180,0.968,187,0.925,238,1.345,281,1.143,282,1.074,283,2.614,284,1.143,285,1.143,318,1.345,320,1.345,346,1.143,349,1.229,352,2.327,364,1.143,386,2.127,387,1.345,408,1.52,409,3.476,410,3.476,411,1.52,412,1.52,413,1.52,414,1.52,415,2.63,416,2.63,417,1.52,418,3.476,419,2.63,420,1.52,421,1.52,422,1.52]],["component/7",[2,0.552,151,0.998]],["title/8-1",[134,27.495]],["name/8-1",[]],["text/8-1",[]],["component/8-1",[]],["title/8-2",[299,23.491]],["name/8-2",[]],["text/8-2",[]],["component/8-2",[]],["title/8-3",[423,28.487]],["name/8-3",[]],["text/8-3",[]],["component/8-3",[]],["title/8-4",[424,28.487]],["name/8-4",[]],["text/8-4",[]],["component/8-4",[]],["title/8-5",[425,28.487]],["name/8-5",[]],["text/8-5",[]],["component/8-5",[]],["title/8-6",[426,28.487]],["name/8-6",[]],["text/8-6",[]],["component/8-6",[]],["title/8",[38,11.43,125,17.759,127,20.975,323,24.674]],["name/8",[127,0.903,427,1.201]],["text/8",[4,0.891,9,0.802,38,0.516,42,0.891,60,1.115,86,0.948,125,2.644,126,1.115,127,2.731,129,0.948,130,0.802,131,0.891,145,0.948,166,1.577,188,1.019,210,1.115,259,0.802,267,0.948,269,1.115,293,1.805,299,0.561,306,1.115,328,1.115,346,1.678,349,1.019,380,1.115,386,1.019,389,1.974,428,0.891,429,0.891,430,1.577,431,1.019,432,1.26,433,1.26,434,1.115,435,1.26,436,2.232,437,1.26,438,1.26,439,1.019,440,2.232,441,2.232,442,1.115,443,1.26,444,1.115,445,1.115,446,1.26,447,1.26,448,1.26,449,1.26,450,1.26,451,1.115,452,1.26,453,1.26,454,1.26,455,1.115,456,1.26,457,1.26]],["component/8",[2,0.552,458,0.752]],["title/9-1",[134,27.495]],["name/9-1",[]],["text/9-1",[]],["component/9-1",[]],["title/9-2",[299,23.491]],["name/9-2",[]],["text/9-2",[]],["component/9-2",[]],["title/9-3",[423,28.487]],["name/9-3",[]],["text/9-3",[]],["component/9-3",[]],["title/9-4",[424,28.487]],["name/9-4",[]],["text/9-4",[]],["component/9-4",[]],["title/9-5",[425,28.487]],["name/9-5",[]],["text/9-5",[]],["component/9-5",[]],["title/9-6",[426,28.487]],["name/9-6",[]],["text/9-6",[]],["component/9-6",[]],["title/9",[24,10.633,38,7.77,130,12.073,136,15.334,225,12.073,326,15.334,439,15.334]],["name/9",[24,0.673,459,1.201]],["text/9",[4,0.669,8,0.553,9,1.515,12,0.933,13,1.298,22,0.766,23,0.766,24,2.529,32,0.766,33,0.634,38,1.202,42,1.681,44,0.712,77,0.838,86,1.298,89,0.766,104,1.199,105,0.838,106,0.634,130,0.603,136,0.766,166,0.669,176,0.669,180,1.099,203,0.712,225,0.603,255,0.766,259,1.515,273,0.766,299,0.769,313,0.838,355,0.766,358,0.712,364,0.712,388,0.766,428,0.669,429,0.669,430,1.22,431,1.396,439,0.766,451,0.838,460,0.838,461,0.947,462,0.947,463,0.947,464,0.947,465,0.838,466,0.947,467,0.947,468,0.947,469,0.947,470,0.838,471,0.947,472,0.947,473,0.947,474,0.766,475,0.947,476,0.838,477,0.838,478,0.947,479,0.947,480,0.947,481,0.947,482,0.947,483,0.712,484,0.947,485,0.947,486,0.947,487,0.947,488,0.947,489,1.726,490,0.712,491,0.947,492,0.947,493,0.947,494,0.838]],["component/9",[2,0.552,458,0.752]],["title/10-1",[134,27.495]],["name/10-1",[]],["text/10-1",[]],["component/10-1",[]],["title/10-2",[299,23.491]],["name/10-2",[]],["text/10-2",[]],["component/10-2",[]],["title/10-3",[423,28.487]],["name/10-3",[]],["text/10-3",[]],["component/10-3",[]],["title/10-4",[424,28.487]],["name/10-4",[]],["text/10-4",[]],["component/10-4",[]],["title/10-5",[425,28.487]],["name/10-5",[]],["text/10-5",[]],["component/10-5",[]],["title/10-6",[426,28.487]],["name/10-6",[]],["text/10-6",[]],["component/10-6",[]],["title/10",[38,11.43,51,19.711,326,22.556,495,24.674]],["name/10",[51,0.849,496,1.201]],["text/10",[12,0.713,13,0.993,18,0.993,30,1.168,38,1.277,47,1.881,51,1.644,54,0.666,55,0.933,72,2.057,125,0.841,166,0.933,180,1.984,225,1.984,228,1.068,251,1.168,255,1.068,259,1.481,267,0.993,299,0.588,315,1.168,355,1.068,356,1.168,358,0.993,362,1.168,428,0.933,429,0.933,430,1.644,444,1.168,465,1.168,483,0.993,494,1.168,495,3.322,497,2.325,498,3.116,499,3.116,500,1.32,501,1.32,502,1.32,503,1.32,504,1.32,505,1.32,506,1.32,507,1.32,508,1.32,509,1.168,510,1.32,511,1.32,512,1.32,513,1.32]],["component/10",[2,0.552,458,0.752]],["title/11-1",[134,27.495]],["name/11-1",[]],["text/11-1",[]],["component/11-1",[]],["title/11-2",[299,23.491]],["name/11-2",[]],["text/11-2",[]],["component/11-2",[]],["title/11-3",[423,28.487]],["name/11-3",[]],["text/11-3",[]],["component/11-3",[]],["title/11-4",[424,28.487]],["name/11-4",[]],["text/11-4",[]],["component/11-4",[]],["title/11-5",[425,28.487]],["name/11-5",[]],["text/11-5",[]],["component/11-5",[]],["title/11-6",[426,28.487]],["name/11-6",[]],["text/11-6",[]],["component/11-6",[]],["title/11",[38,9.879,45,17.036,80,15.349,344,19.495,514,24.105]],["name/11",[45,0.849,515,1.201]],["text/11",[8,2.071,12,0.844,13,1.175,24,1.991,38,1.455,44,2.67,45,1.105,76,1.105,80,2.261,172,0.995,176,1.105,180,0.995,259,0.995,282,1.105,288,1.383,293,2.179,316,1.383,344,2.871,364,1.175,377,1.383,428,1.105,429,1.105,430,1.904,442,2.383,445,2.383,474,1.264,483,1.175,516,1.383,517,2.694,518,1.563,519,1.563,520,1.563,521,1.563,522,1.563,523,1.563,524,1.563,525,1.563,526,1.563,527,1.563]],["component/11",[2,0.552,458,0.752]],["title/12-1",[134,27.495]],["name/12-1",[]],["text/12-1",[]],["component/12-1",[]],["title/12-2",[299,23.491]],["name/12-2",[]],["text/12-2",[]],["component/12-2",[]],["title/12-3",[423,28.487]],["name/12-3",[]],["text/12-3",[]],["component/12-3",[]],["title/12-4",[424,28.487]],["name/12-4",[]],["text/12-4",[]],["component/12-4",[]],["title/12-5",[425,28.487]],["name/12-5",[]],["text/12-5",[]],["component/12-5",[]],["title/12-6",[426,28.487]],["name/12-6",[]],["text/12-6",[]],["component/12-6",[]],["title/12",[38,9.879,46,17.036,172,15.349,490,18.128,528,24.105]],["name/12",[46,0.849,529,1.201]],["text/12",[8,1.674,32,1.36,38,1.817,43,1.36,44,2.821,46,1.189,54,0.848,104,1.446,108,1.488,125,1.071,172,1.827,180,1.071,187,1.023,259,1.071,276,1.125,358,1.265,365,1.488,388,1.36,428,1.189,429,1.189,430,2.027,431,1.36,434,1.488,455,1.488,470,1.488,474,1.36,476,1.488,477,1.488,483,1.265,490,2.157,516,1.488,530,1.682,531,1.682,532,1.682,533,1.682,534,1.682,535,1.682,536,1.682,537,1.682,538,1.682,539,1.682]],["component/12",[2,0.552,458,0.752]],["title/13-1",[134,27.495]],["name/13-1",[]],["text/13-1",[]],["component/13-1",[]],["title/13-2",[299,23.491]],["name/13-2",[]],["text/13-2",[]],["component/13-2",[]],["title/13-3",[423,28.487]],["name/13-3",[]],["text/13-3",[]],["component/13-3",[]],["title/13-4",[424,28.487]],["name/13-4",[]],["text/13-4",[]],["component/13-4",[]],["title/13-5",[425,28.487]],["name/13-5",[]],["text/13-5",[]],["component/13-5",[]],["title/13-6",[426,28.487]],["name/13-6",[]],["text/13-6",[]],["component/13-6",[]],["title/13",[38,8.698,64,17.166,65,17.166,276,14.201,540,21.225,541,21.225]],["name/13",[65,0.971,542,1.201]],["text/13",[54,4.317]],["component/13",[2,0.552,458,0.752]],["title/14-1",[134,27.495]],["name/14-1",[]],["text/14-1",[]],["component/14-1",[]],["title/14-2",[299,23.491]],["name/14-2",[]],["text/14-2",[]],["component/14-2",[]],["title/14-3",[423,28.487]],["name/14-3",[]],["text/14-3",[]],["component/14-3",[]],["title/14-4",[424,28.487]],["name/14-4",[]],["text/14-4",[]],["component/14-4",[]],["title/14-5",[425,28.487]],["name/14-5",[]],["text/14-5",[]],["component/14-5",[]],["title/14-6",[426,28.487]],["name/14-6",[]],["text/14-6",[]],["component/14-6",[]],["title/14",[38,9.879,64,19.495,68,19.495,69,19.495,543,24.105]],["name/14",[69,0.971,544,1.201]],["text/14",[54,4.317]],["component/14",[2,0.552,458,0.752]],["title/15-1",[134,27.495]],["name/15-1",[]],["text/15-1",[]],["component/15-1",[]],["title/15-2",[299,23.491]],["name/15-2",[]],["text/15-2",[]],["component/15-2",[]],["title/15-3",[423,28.487]],["name/15-3",[]],["text/15-3",[]],["component/15-3",[]],["title/15-4",[424,28.487]],["name/15-4",[]],["text/15-4",[]],["component/15-4",[]],["title/15-5",[425,28.487]],["name/15-5",[]],["text/15-5",[]],["component/15-5",[]],["title/15-6",[426,28.487]],["name/15-6",[]],["text/15-6",[]],["component/15-6",[]],["title/15",[38,8.698,120,15.001,153,13.515,181,17.166,279,15.962,545,21.225]],["name/15",[279,0.903,546,1.201]],["text/15",[54,4.317]],["component/15",[2,0.552,458,0.752]],["title/16-1",[134,27.495]],["name/16-1",[]],["text/16-1",[]],["component/16-1",[]],["title/16-2",[299,23.491]],["name/16-2",[]],["text/16-2",[]],["component/16-2",[]],["title/16-3",[423,28.487]],["name/16-3",[]],["text/16-3",[]],["component/16-3",[]],["title/16-4",[424,28.487]],["name/16-4",[]],["text/16-4",[]],["component/16-4",[]],["title/16-5",[425,28.487]],["name/16-5",[]],["text/16-5",[]],["component/16-5",[]],["title/16-6",[426,28.487]],["name/16-6",[]],["text/16-6",[]],["component/16-6",[]],["title/16",[38,8.698,103,18.778,153,13.515,169,18.778,225,13.515,547,21.225]],["name/16",[548,0.846,549,0.846,550,0.846]],["text/16",[54,4.317]],["component/16",[2,0.552,458,0.752]],["title/17-1",[134,27.495]],["name/17-1",[]],["text/17-1",[]],["component/17-1",[]],["title/17-2",[299,23.491]],["name/17-2",[]],["text/17-2",[]],["component/17-2",[]],["title/17-3",[423,28.487]],["name/17-3",[]],["text/17-3",[]],["component/17-3",[]],["title/17-4",[424,28.487]],["name/17-4",[]],["text/17-4",[]],["component/17-4",[]],["title/17-5",[425,28.487]],["name/17-5",[]],["text/17-5",[]],["component/17-5",[]],["title/17-6",[426,28.487]],["name/17-6",[]],["text/17-6",[]],["component/17-6",[]],["title/17",[8,9.994,38,7.021,100,13.855,153,10.908,276,11.461,551,17.131,552,17.131,553,17.131]],["name/17",[100,0.971,554,1.201]],["text/17",[54,4.317]],["component/17",[2,0.552,458,0.752]],["title/18-1",[134,27.495]],["name/18-1",[]],["text/18-1",[]],["component/18-1",[]],["title/18-2",[299,23.491]],["name/18-2",[]],["text/18-2",[]],["component/18-2",[]],["title/18-3",[423,28.487]],["name/18-3",[]],["text/18-3",[]],["component/18-3",[]],["title/18-4",[424,28.487]],["name/18-4",[]],["text/18-4",[]],["component/18-4",[]],["title/18-5",[425,28.487]],["name/18-5",[]],["text/18-5",[]],["component/18-5",[]],["title/18-6",[426,28.487]],["name/18-6",[]],["text/18-6",[]],["component/18-6",[]],["title/18",[26,13.515,38,8.698,102,15.962,152,15.001,153,13.515,555,21.225]],["name/18",[102,0.903,556,1.201]],["text/18",[54,4.317]],["component/18",[2,0.552,458,0.752]],["title/19",[299,18.114,302,32.882]],["name/19",[1,1.557]],["text/19",[12,2.169,26,1.609,33,1.691,54,1.274,55,1.786,125,2.556,138,2.236,150,2.236,257,2.236,298,2.236,299,2.534,302,2.044,341,2.236,458,1.274,557,2.527,558,2.527,559,2.527,560,2.527,561,2.527,562,2.527,563,2.527,564,2.527,565,2.527,566,2.527]],["component/19",[2,0.552,458,0.752]],["title/20",[12,28.487]],["name/20",[12,1.118]],["text/20",[12,3.794]],["component/20",[2,0.394,80,0.678,172,0.678]],["title/21",[133,46.647]],["name/21",[1,1.557]],["text/21",[2,1.773,47,2.574,59,2.815,76,2.249,80,3.055,161,2.574,162,2.574,172,3.055,225,3.055,310,2.815,346,2.393,460,2.815,490,2.393,509,2.815,567,3.182,568,3.182]],["component/21",[2,0.394,80,0.678,172,0.678]]],"invertedIndex":[["",{"_index":54,"title":{"7":{}},"name":{},"text":{"1":{},"3":{},"5":{},"10":{},"12":{},"13":{},"14":{},"15":{},"16":{},"17":{},"18":{},"19":{}},"component":{}}],["000000",{"_index":427,"title":{},"name":{"8":{}},"text":{},"component":{}}],["000001",{"_index":459,"title":{},"name":{"9":{}},"text":{},"component":{}}],["000002",{"_index":496,"title":{},"name":{"10":{}},"text":{},"component":{}}],["000003",{"_index":515,"title":{},"name":{"11":{}},"text":{},"component":{}}],["000004",{"_index":529,"title":{},"name":{"12":{}},"text":{},"component":{}}],["000005",{"_index":542,"title":{},"name":{"13":{}},"text":{},"component":{}}],["000006",{"_index":544,"title":{},"name":{"14":{}},"text":{},"component":{}}],["000007",{"_index":546,"title":{},"name":{"15":{}},"text":{},"component":{}}],["000008",{"_index":548,"title":{},"name":{"16":{}},"text":{},"component":{}}],["000009",{"_index":554,"title":{},"name":{"17":{}},"text":{},"component":{}}],["000010",{"_index":556,"title":{},"name":{"18":{}},"text":{},"component":{}}],["01",{"_index":430,"title":{},"name":{},"text":{"8":{},"9":{},"10":{},"11":{},"12":{}},"component":{}}],["1",{"_index":323,"title":{"8":{}},"name":{},"text":{"5":{}},"component":{}}],["10",{"_index":555,"title":{"18":{}},"name":{},"text":{},"component":{}}],["1password",{"_index":312,"title":{},"name":{},"text":{"5":{}},"component":{}}],["2",{"_index":326,"title":{"9":{},"10":{}},"name":{},"text":{"5":{}},"component":{}}],["2022",{"_index":429,"title":{},"name":{},"text":{"8":{},"9":{},"10":{},"11":{},"12":{}},"component":{}}],["3",{"_index":514,"title":{"11":{}},"name":{},"text":{},"component":{}}],["4",{"_index":528,"title":{"12":{}},"name":{},"text":{},"component":{}}],["443",{"_index":345,"title":{},"name":{},"text":{"5":{}},"component":{}}],["5",{"_index":540,"title":{"13":{}},"name":{},"text":{},"component":{}}],["6",{"_index":543,"title":{"14":{}},"name":{},"text":{},"component":{}}],["7",{"_index":545,"title":{"15":{}},"name":{},"text":{},"component":{}}],["8",{"_index":547,"title":{"16":{}},"name":{},"text":{},"component":{}}],["80",{"_index":336,"title":{},"name":{},"text":{"5":{}},"component":{}}],["9",{"_index":551,"title":{"17":{}},"name":{},"text":{},"component":{}}],["accept",{"_index":428,"title":{},"name":{},"text":{"8":{},"9":{},"10":{},"11":{},"12":{}},"component":{}}],["access",{"_index":320,"title":{},"name":{},"text":{"5":{},"7":{}},"component":{}}],["acm",{"_index":2,"title":{},"name":{},"text":{"1":{},"3":{},"5":{},"21":{}},"component":{"2":{},"3":{},"4":{},"5":{},"6":{},"7":{},"8":{},"9":{},"10":{},"11":{},"12":{},"13":{},"14":{},"15":{},"16":{},"17":{},"18":{},"19":{},"20":{},"21":{}}}],["action",{"_index":236,"title":{},"name":{},"text":{"4":{}},"component":{}}],["activ",{"_index":359,"title":{},"name":{},"text":{"5":{}},"component":{}}],["addition",{"_index":388,"title":{},"name":{},"text":{"5":{},"9":{},"12":{}},"component":{}}],["adjust",{"_index":333,"title":{},"name":{},"text":{"5":{}},"component":{}}],["administr",{"_index":324,"title":{},"name":{},"text":{"5":{}},"component":{}}],["adr",{"_index":458,"title":{},"name":{},"text":{"19":{}},"component":{"8":{},"9":{},"10":{},"11":{},"12":{},"13":{},"14":{},"15":{},"16":{},"17":{},"18":{},"19":{}}}],["advantag",{"_index":367,"title":{},"name":{},"text":{"5":{}},"component":{}}],["affect",{"_index":558,"title":{},"name":{},"text":{"19":{}},"component":{}}],["afford",{"_index":346,"title":{},"name":{},"text":{"5":{},"7":{},"8":{},"21":{}},"component":{}}],["afterward",{"_index":338,"title":{},"name":{},"text":{"5":{}},"component":{}}],["aggreg",{"_index":438,"title":{},"name":{},"text":{"8":{}},"component":{}}],["aid",{"_index":516,"title":{},"name":{},"text":{"11":{},"12":{}},"component":{}}],["aim",{"_index":209,"title":{},"name":{},"text":{"4":{}},"component":{}}],["allow",{"_index":325,"title":{},"name":{},"text":{"5":{}},"component":{}}],["alreadi",{"_index":474,"title":{},"name":{},"text":{"9":{},"11":{},"12":{}},"component":{}}],["altern",{"_index":317,"title":{},"name":{},"text":{"5":{}},"component":{}}],["android",{"_index":489,"title":{},"name":{},"text":{"9":{}},"component":{}}],["angular",{"_index":46,"title":{"12":{}},"name":{"12":{}},"text":{"1":{},"5":{},"12":{}},"component":{}}],["anoth",{"_index":378,"title":{},"name":{},"text":{"5":{}},"component":{}}],["antora",{"_index":127,"title":{"8":{}},"name":{"8":{}},"text":{"1":{},"8":{}},"component":{}}],["api",{"_index":80,"title":{"11":{},"2-5":{}},"name":{},"text":{"1":{},"11":{},"21":{}},"component":{"20":{},"21":{}}}],["api:test",{"_index":173,"title":{},"name":{},"text":{"3":{}},"component":{}}],["app",{"_index":491,"title":{},"name":{},"text":{"9":{}},"component":{}}],["appli",{"_index":252,"title":{},"name":{},"text":{"4":{}},"component":{}}],["applic",{"_index":490,"title":{"12":{}},"name":{},"text":{"9":{},"12":{},"21":{}},"component":{}}],["application/hal+json",{"_index":83,"title":{},"name":{},"text":{"1":{}},"component":{}}],["application/vnd.error+json",{"_index":85,"title":{},"name":{},"text":{"1":{}},"component":{}}],["architectur",{"_index":12,"title":{"2":{},"20":{}},"name":{"2":{},"20":{}},"text":{"1":{},"2":{},"9":{},"10":{},"11":{},"19":{},"20":{}},"component":{}}],["area",{"_index":521,"title":{},"name":{},"text":{"11":{}},"component":{}}],["arguabl",{"_index":353,"title":{},"name":{},"text":{"5":{}},"component":{}}],["arrow",{"_index":410,"title":{},"name":{},"text":{"7":{}},"component":{}}],["asciidoc",{"_index":380,"title":{},"name":{},"text":{"5":{},"8":{}},"component":{}}],["asciidoctor",{"_index":126,"title":{},"name":{},"text":{"1":{},"8":{}},"component":{}}],["assum",{"_index":156,"title":{},"name":{},"text":{"3":{}},"component":{}}],["attach",{"_index":418,"title":{},"name":{},"text":{"7":{}},"component":{}}],["attempt",{"_index":19,"title":{},"name":{},"text":{"1":{},"2":{}},"component":{}}],["authent",{"_index":63,"title":{},"name":{},"text":{"1":{}},"component":{}}],["author",{"_index":68,"title":{"14":{}},"name":{},"text":{"1":{},"5":{}},"component":{}}],["automat",{"_index":447,"title":{},"name":{},"text":{"8":{}},"component":{}}],["avail",{"_index":451,"title":{},"name":{},"text":{"8":{},"9":{}},"component":{}}],["avoid",{"_index":193,"title":{},"name":{},"text":{"3":{}},"component":{}}],["awar",{"_index":382,"title":{},"name":{},"text":{"5":{}},"component":{}}],["backend",{"_index":56,"title":{},"name":{},"text":{"1":{}},"component":{}}],["base",{"_index":25,"title":{},"name":{},"text":{"1":{},"4":{}},"component":{}}],["bdd",{"_index":110,"title":{},"name":{},"text":{"1":{}},"component":{}}],["be",{"_index":271,"title":{},"name":{},"text":{"4":{}},"component":{}}],["becam",{"_index":29,"title":{},"name":{},"text":{"1":{}},"component":{}}],["befor",{"_index":195,"title":{},"name":{},"text":{"3":{},"4":{}},"component":{}}],["behind",{"_index":463,"title":{},"name":{},"text":{"9":{}},"component":{}}],["best",{"_index":141,"title":{},"name":{},"text":{"2":{},"5":{}},"component":{}}],["better",{"_index":377,"title":{},"name":{},"text":{"5":{},"11":{}},"component":{}}],["between",{"_index":243,"title":{},"name":{},"text":{"4":{}},"component":{}}],["beyond",{"_index":562,"title":{},"name":{},"text":{"19":{}},"component":{}}],["bind",{"_index":330,"title":{},"name":{},"text":{"5":{}},"component":{}}],["bit",{"_index":525,"title":{},"name":{},"text":{"11":{}},"component":{}}],["book",{"_index":139,"title":{},"name":{},"text":{"2":{}},"component":{}}],["both",{"_index":503,"title":{},"name":{},"text":{"10":{}},"component":{}}],["branch",{"_index":274,"title":{},"name":{},"text":{"4":{}},"component":{}}],["breakpoint",{"_index":422,"title":{},"name":{},"text":{"7":{}},"component":{}}],["broad",{"_index":511,"title":{},"name":{},"text":{"10":{}},"component":{}}],["buggi",{"_index":526,"title":{},"name":{},"text":{"11":{}},"component":{}}],["build",{"_index":86,"title":{},"name":{},"text":{"1":{},"5":{},"8":{},"9":{}},"component":{}}],["built",{"_index":442,"title":{},"name":{},"text":{"8":{},"11":{}},"component":{}}],["busi",{"_index":136,"title":{"9":{},"2-5":{}},"name":{},"text":{"9":{}},"component":{}}],["button",{"_index":416,"title":{},"name":{},"text":{"7":{}},"component":{}}],["c4",{"_index":129,"title":{"2-2":{}},"name":{},"text":{"1":{},"2":{},"8":{}},"component":{}}],["central",{"_index":71,"title":{},"name":{},"text":{"1":{}},"component":{}}],["cert",{"_index":553,"title":{"17":{}},"name":{},"text":{},"component":{}}],["chang",{"_index":188,"title":{},"name":{},"text":{"3":{},"5":{},"8":{}},"component":{}}],["choos",{"_index":364,"title":{},"name":{},"text":{"5":{},"7":{},"9":{},"11":{}},"component":{}}],["chosen",{"_index":399,"title":{},"name":{},"text":{"6":{}},"component":{}}],["class",{"_index":176,"title":{},"name":{},"text":{"3":{},"5":{},"7":{},"9":{},"11":{}},"component":{}}],["cli",{"_index":278,"title":{"5-8":{}},"name":{},"text":{"5":{}},"component":{}}],["click",{"_index":352,"title":{},"name":{},"text":{"5":{},"7":{}},"component":{}}],["client",{"_index":518,"title":{},"name":{},"text":{"11":{}},"component":{}}],["close",{"_index":493,"title":{},"name":{},"text":{"9":{}},"component":{}}],["cluster",{"_index":181,"title":{"15":{}},"name":{},"text":{"3":{},"5":{}},"component":{}}],["code",{"_index":187,"title":{"5-15":{},"7-2":{}},"name":{},"text":{"3":{},"4":{},"5":{},"6":{},"7":{},"12":{}},"component":{}}],["collect",{"_index":472,"title":{},"name":{},"text":{"9":{}},"component":{}}],["com.acme.web.test",{"_index":178,"title":{},"name":{},"text":{"3":{}},"component":{}}],["com.acme.web.test.scheduling.api.schedulingclientcollectionapispec",{"_index":179,"title":{},"name":{},"text":{"3":{}},"component":{}}],["come",{"_index":486,"title":{},"name":{},"text":{"9":{}},"component":{}}],["command",{"_index":162,"title":{},"name":{},"text":{"3":{},"5":{},"21":{}},"component":{}}],["common",{"_index":469,"title":{},"name":{},"text":{"9":{}},"component":{}}],["commun",{"_index":480,"title":{},"name":{},"text":{"9":{}},"component":{}}],["compil",{"_index":77,"title":{},"name":{},"text":{"1":{},"9":{}},"component":{}}],["compon",{"_index":137,"title":{"2-5":{}},"name":{},"text":{"5":{}},"component":{}}],["compos",{"_index":214,"title":{},"name":{},"text":{"4":{}},"component":{}}],["configur",{"_index":283,"title":{"5-14":{},"5-17":{}},"name":{},"text":{"5":{},"7":{}},"component":{}}],["consequ",{"_index":423,"title":{"8-3":{},"9-3":{},"10-3":{},"11-3":{},"12-3":{},"13-3":{},"14-3":{},"15-3":{},"16-3":{},"17-3":{},"18-3":{}},"name":{},"text":{},"component":{}}],["consid",{"_index":231,"title":{},"name":{},"text":{"4":{}},"component":{}}],["contain",{"_index":135,"title":{"2-4":{}},"name":{},"text":{"5":{}},"component":{}}],["content",{"_index":437,"title":{},"name":{},"text":{"8":{}},"component":{}}],["context",{"_index":134,"title":{"2-3":{},"8-1":{},"9-1":{},"10-1":{},"11-1":{},"12-1":{},"13-1":{},"14-1":{},"15-1":{},"16-1":{},"17-1":{},"18-1":{}},"name":{},"text":{},"component":{}}],["continu",{"_index":405,"title":{},"name":{},"text":{"6":{}},"component":{}}],["contrast",{"_index":501,"title":{},"name":{},"text":{"10":{}},"component":{}}],["convent",{"_index":93,"title":{},"name":{},"text":{"1":{}},"component":{}}],["coroutin",{"_index":517,"title":{},"name":{},"text":{"11":{}},"component":{}}],["cosmic",{"_index":22,"title":{},"name":{},"text":{"1":{},"2":{},"9":{}},"component":{}}],["coverag",{"_index":473,"title":{},"name":{},"text":{"9":{}},"component":{}}],["cqr",{"_index":58,"title":{},"name":{},"text":{"1":{}},"component":{}}],["creat",{"_index":244,"title":{},"name":{},"text":{"4":{}},"component":{}}],["ctrl+c",{"_index":190,"title":{},"name":{},"text":{"3":{}},"component":{}}],["cupid",{"_index":199,"title":{"4-1":{}},"name":{},"text":{"4":{}},"component":{}}],["current",{"_index":414,"title":{},"name":{},"text":{"7":{}},"component":{}}],["curv",{"_index":477,"title":{},"name":{},"text":{"9":{},"12":{}},"component":{}}],["custom",{"_index":440,"title":{},"name":{},"text":{"8":{}},"component":{}}],["data",{"_index":509,"title":{},"name":{},"text":{"10":{},"21":{}},"component":{}}],["data/sql",{"_index":396,"title":{"6-6":{}},"name":{},"text":{},"component":{}}],["databas",{"_index":497,"title":{},"name":{},"text":{"10":{}},"component":{}}],["ddd",{"_index":57,"title":{},"name":{},"text":{"1":{}},"component":{}}],["debug",{"_index":413,"title":{},"name":{},"text":{"7":{}},"component":{}}],["debugg",{"_index":419,"title":{},"name":{},"text":{"7":{}},"component":{}}],["decis",{"_index":299,"title":{"19":{},"8-2":{},"9-2":{},"10-2":{},"11-2":{},"12-2":{},"13-2":{},"14-2":{},"15-2":{},"16-2":{},"17-2":{},"18-2":{}},"name":{},"text":{"5":{},"8":{},"9":{},"10":{},"19":{}},"component":{}}],["default",{"_index":334,"title":{},"name":{},"text":{"5":{}},"component":{}}],["degre",{"_index":270,"title":{},"name":{},"text":{"4":{}},"component":{}}],["deliv",{"_index":247,"title":{},"name":{},"text":{"4":{},"5":{}},"component":{}}],["deliveri",{"_index":256,"title":{},"name":{},"text":{"4":{}},"component":{}}],["deploy",{"_index":390,"title":{},"name":{},"text":{"5":{}},"component":{}}],["describ",{"_index":203,"title":{},"name":{},"text":{"4":{},"5":{},"6":{},"9":{}},"component":{}}],["design",{"_index":55,"title":{},"name":{},"text":{"1":{},"2":{},"5":{},"10":{},"19":{}},"component":{}}],["desir",{"_index":180,"title":{},"name":{},"text":{"3":{},"4":{},"7":{},"9":{},"10":{},"11":{},"12":{}},"component":{}}],["desktop",{"_index":98,"title":{"5-3":{},"5-6":{},"5-7":{}},"name":{},"text":{"1":{},"5":{}},"component":{}}],["dev",{"_index":198,"title":{},"name":{},"text":{"3":{}},"component":{}}],["dev:setup",{"_index":311,"title":{},"name":{},"text":{"5":{}},"component":{}}],["develop",{"_index":8,"title":{"17":{},"4-3":{}},"name":{},"text":{"1":{},"4":{},"5":{},"7":{},"9":{},"11":{},"12":{}},"component":{}}],["diagram",{"_index":131,"title":{"2-3":{},"2-4":{},"2-5":{}},"name":{},"text":{"1":{},"8":{}},"component":{}}],["differ",{"_index":144,"title":{},"name":{},"text":{"2":{}},"component":{}}],["directori",{"_index":164,"title":{},"name":{},"text":{"3":{}},"component":{}}],["display",{"_index":421,"title":{},"name":{},"text":{"7":{}},"component":{}}],["docker",{"_index":94,"title":{"5-2":{},"5-6":{}},"name":{},"text":{"1":{},"5":{}},"component":{}}],["dockerd",{"_index":321,"title":{},"name":{},"text":{"5":{}},"component":{}}],["document",{"_index":125,"title":{"8":{}},"name":{},"text":{"1":{},"5":{},"8":{},"10":{},"12":{},"19":{}},"component":{}}],["domain",{"_index":225,"title":{"9":{},"16":{}},"name":{},"text":{"4":{},"6":{},"9":{},"10":{},"21":{}},"component":{}}],["door",{"_index":494,"title":{},"name":{},"text":{"9":{},"10":{}},"component":{}}],["driven",{"_index":261,"title":{},"name":{},"text":{"4":{}},"component":{}}],["driver",{"_index":462,"title":{},"name":{},"text":{"9":{}},"component":{}}],["dsl",{"_index":90,"title":{},"name":{},"text":{"1":{}},"component":{}}],["e2",{"_index":404,"title":{},"name":{},"text":{"6":{}},"component":{}}],["earli",{"_index":523,"title":{},"name":{},"text":{"11":{}},"component":{}}],["easi",{"_index":510,"title":{},"name":{},"text":{"10":{}},"component":{}}],["easiest",{"_index":354,"title":{},"name":{},"text":{"5":{}},"component":{}}],["ecosystem",{"_index":483,"title":{},"name":{},"text":{"9":{},"10":{},"11":{},"12":{}},"component":{}}],["encourag",{"_index":264,"title":{},"name":{},"text":{"4":{}},"component":{}}],["end",{"_index":249,"title":{"6-8":{}},"name":{},"text":{"4":{}},"component":{}}],["engin",{"_index":95,"title":{},"name":{},"text":{"1":{},"5":{}},"component":{}}],["ensur",{"_index":381,"title":{},"name":{},"text":{"5":{}},"component":{}}],["entir",{"_index":481,"title":{},"name":{},"text":{"9":{}},"component":{}}],["environ",{"_index":287,"title":{},"name":{},"text":{"5":{}},"component":{}}],["eslint",{"_index":392,"title":{},"name":{},"text":{"5":{}},"component":{}}],["event",{"_index":59,"title":{},"name":{},"text":{"1":{},"21":{}},"component":{}}],["exampl",{"_index":170,"title":{},"name":{},"text":{"3":{},"7":{}},"component":{}}],["execut",{"_index":161,"title":{},"name":{},"text":{"3":{},"5":{},"21":{}},"component":{}}],["exhaust",{"_index":35,"title":{},"name":{},"text":{"1":{}},"component":{}}],["expect",{"_index":221,"title":{},"name":{},"text":{"4":{}},"component":{}}],["experi",{"_index":293,"title":{},"name":{},"text":{"5":{},"8":{},"11":{}},"component":{}}],["experiment",{"_index":3,"title":{},"name":{},"text":{"1":{}},"component":{}}],["explain",{"_index":561,"title":{},"name":{},"text":{"19":{}},"component":{}}],["express",{"_index":150,"title":{},"name":{},"text":{"2":{},"19":{}},"component":{}}],["extens",{"_index":512,"title":{},"name":{},"text":{"10":{}},"component":{}}],["familiar",{"_index":431,"title":{},"name":{},"text":{"8":{},"9":{},"12":{}},"component":{}}],["fashion",{"_index":251,"title":{},"name":{},"text":{"4":{},"10":{}},"component":{}}],["fast",{"_index":289,"title":{},"name":{},"text":{"5":{}},"component":{}}],["featur",{"_index":465,"title":{},"name":{},"text":{"9":{},"10":{}},"component":{}}],["feedback",{"_index":290,"title":{},"name":{},"text":{"5":{}},"component":{}}],["feel",{"_index":223,"title":{},"name":{},"text":{"4":{}},"component":{}}],["few",{"_index":143,"title":{},"name":{},"text":{"2":{}},"component":{}}],["figur",{"_index":322,"title":{},"name":{},"text":{"5":{}},"component":{}}],["file",{"_index":386,"title":{},"name":{},"text":{"5":{},"7":{},"8":{}},"component":{}}],["first",{"_index":288,"title":{},"name":{},"text":{"5":{},"11":{}},"component":{}}],["five",{"_index":212,"title":{},"name":{},"text":{"4":{}},"component":{}}],["flex",{"_index":48,"title":{},"name":{},"text":{"1":{}},"component":{}}],["focu",{"_index":254,"title":{},"name":{},"text":{"4":{}},"component":{}}],["focus",{"_index":537,"title":{},"name":{},"text":{"12":{}},"component":{}}],["follow",{"_index":33,"title":{},"name":{},"text":{"1":{},"2":{},"3":{},"5":{},"9":{},"19":{}},"component":{}}],["framework",{"_index":44,"title":{},"name":{},"text":{"1":{},"9":{},"11":{},"12":{}},"component":{}}],["friendli",{"_index":347,"title":{},"name":{},"text":{"5":{}},"component":{}}],["frontend",{"_index":70,"title":{},"name":{},"text":{"1":{}},"component":{}}],["function",{"_index":238,"title":{},"name":{},"text":{"4":{},"7":{}},"component":{}}],["further",{"_index":393,"title":{},"name":{},"text":{"5":{}},"component":{}}],["given",{"_index":356,"title":{},"name":{},"text":{"5":{},"10":{}},"component":{}}],["goal",{"_index":300,"title":{},"name":{},"text":{"5":{}},"component":{}}],["good",{"_index":538,"title":{},"name":{},"text":{"12":{}},"component":{}}],["googl",{"_index":536,"title":{},"name":{},"text":{"12":{}},"component":{}}],["gradl",{"_index":89,"title":{},"name":{},"text":{"1":{},"5":{},"9":{}},"component":{}}],["gradlew",{"_index":165,"title":{},"name":{},"text":{"3":{}},"component":{}}],["grafana",{"_index":119,"title":{},"name":{},"text":{"1":{}},"component":{}}],["great",{"_index":479,"title":{},"name":{},"text":{"9":{}},"component":{}}],["green",{"_index":409,"title":{},"name":{},"text":{"7":{}},"component":{}}],["gui",{"_index":277,"title":{"5-5":{}},"name":{},"text":{"5":{}},"component":{}}],["guid",{"_index":204,"title":{},"name":{},"text":{"4":{}},"component":{}}],["gutter",{"_index":412,"title":{},"name":{},"text":{"7":{}},"component":{}}],["hal",{"_index":82,"title":{},"name":{},"text":{"1":{}},"component":{}}],["handbook",{"_index":151,"title":{},"name":{},"text":{},"component":{"2":{},"3":{},"4":{},"5":{},"6":{},"7":{}}}],["handi",{"_index":487,"title":{},"name":{},"text":{"9":{}},"component":{}}],["handler",{"_index":568,"title":{},"name":{},"text":{"21":{}},"component":{}}],["hard",{"_index":456,"title":{},"name":{},"text":{"8":{}},"component":{}}],["hateoa",{"_index":81,"title":{},"name":{},"text":{"1":{}},"component":{}}],["headless",{"_index":62,"title":{},"name":{},"text":{"1":{}},"component":{}}],["heavili",{"_index":534,"title":{},"name":{},"text":{"12":{}},"component":{}}],["helm",{"_index":121,"title":{},"name":{},"text":{"1":{}},"component":{}}],["help",{"_index":560,"title":{},"name":{},"text":{"19":{}},"component":{}}],["here",{"_index":559,"title":{},"name":{},"text":{"19":{}},"component":{}}],["high",{"_index":245,"title":{},"name":{},"text":{"4":{}},"component":{}}],["homebrew",{"_index":309,"title":{},"name":{},"text":{"5":{}},"component":{}}],["http",{"_index":344,"title":{"11":{}},"name":{},"text":{"5":{},"11":{}},"component":{}}],["http://nip.io",{"_index":350,"title":{},"name":{},"text":{"5":{}},"component":{}}],["i18n",{"_index":79,"title":{},"name":{},"text":{"1":{}},"component":{}}],["id",{"_index":280,"title":{"5-11":{}},"name":{},"text":{},"component":{}}],["idea",{"_index":21,"title":{"5-12":{}},"name":{},"text":{"1":{},"4":{},"5":{}},"component":{}}],["ideal",{"_index":434,"title":{},"name":{},"text":{"8":{},"12":{}},"component":{}}],["ident",{"_index":541,"title":{"13":{}},"name":{},"text":{},"component":{}}],["idiomat",{"_index":222,"title":{},"name":{},"text":{"4":{}},"component":{}}],["illustr",{"_index":5,"title":{},"name":{},"text":{"1":{}},"component":{}}],["implement",{"_index":460,"title":{},"name":{},"text":{"9":{},"21":{}},"component":{}}],["implicit",{"_index":148,"title":{},"name":{},"text":{"2":{}},"component":{}}],["includ",{"_index":445,"title":{},"name":{},"text":{"8":{},"11":{}},"component":{}}],["increment",{"_index":260,"title":{},"name":{},"text":{"4":{}},"component":{}}],["index",{"_index":1,"title":{},"name":{"1":{},"3":{},"19":{},"21":{}},"text":{},"component":{}}],["individu",{"_index":408,"title":{},"name":{},"text":{"7":{}},"component":{}}],["ingress",{"_index":122,"title":{},"name":{},"text":{"1":{},"5":{}},"component":{}}],["inlin",{"_index":468,"title":{},"name":{},"text":{"9":{}},"component":{}}],["inspir",{"_index":61,"title":{},"name":{},"text":{"1":{},"2":{}},"component":{}}],["instal",{"_index":160,"title":{},"name":{},"text":{"3":{},"5":{},"7":{}},"component":{}}],["instruct",{"_index":155,"title":{},"name":{},"text":{"3":{},"5":{}},"component":{}}],["instrument",{"_index":234,"title":{},"name":{},"text":{"4":{}},"component":{}}],["integr",{"_index":395,"title":{"6-5":{}},"name":{},"text":{"6":{}},"component":{}}],["intellij",{"_index":281,"title":{"5-12":{},"7-1":{}},"name":{},"text":{"5":{},"7":{}},"component":{}}],["interest",{"_index":14,"title":{},"name":{},"text":{"1":{}},"component":{}}],["interfac",{"_index":374,"title":{},"name":{},"text":{"5":{}},"component":{}}],["introduct",{"_index":0,"title":{"1":{}},"name":{},"text":{},"component":{}}],["invest",{"_index":535,"title":{},"name":{},"text":{"12":{}},"component":{}}],["invok",{"_index":196,"title":{},"name":{},"text":{"3":{}},"component":{}}],["io",{"_index":550,"title":{},"name":{"16":{}},"text":{},"component":{}}],["issu",{"_index":329,"title":{},"name":{},"text":{"5":{}},"component":{}}],["iter",{"_index":201,"title":{"4-3":{}},"name":{},"text":{"4":{}},"component":{}}],["it’",{"_index":464,"title":{},"name":{},"text":{"9":{}},"component":{}}],["jacoco",{"_index":471,"title":{},"name":{},"text":{"9":{}},"component":{}}],["jaeger",{"_index":116,"title":{},"name":{},"text":{"1":{}},"component":{}}],["java",{"_index":482,"title":{},"name":{},"text":{"9":{}},"component":{}}],["jdk",{"_index":384,"title":{},"name":{},"text":{"5":{}},"component":{}}],["jest",{"_index":539,"title":{},"name":{},"text":{"12":{}},"component":{}}],["jib",{"_index":96,"title":{},"name":{},"text":{"1":{}},"component":{}}],["jooq",{"_index":52,"title":{},"name":{},"text":{"1":{},"6":{}},"component":{}}],["joy",{"_index":210,"title":{},"name":{},"text":{"4":{},"8":{}},"component":{}}],["json",{"_index":506,"title":{},"name":{},"text":{"10":{}},"component":{}}],["junit5",{"_index":105,"title":{},"name":{},"text":{"1":{},"9":{}},"component":{}}],["k3d",{"_index":279,"title":{"15":{},"5-10":{}},"name":{"15":{}},"text":{"5":{}},"component":{}}],["karma",{"_index":108,"title":{},"name":{},"text":{"1":{},"12":{}},"component":{}}],["keto",{"_index":69,"title":{"14":{}},"name":{"14":{}},"text":{"1":{}},"component":{}}],["key",{"_index":147,"title":{},"name":{},"text":{"2":{}},"component":{}}],["knowledg",{"_index":449,"title":{},"name":{},"text":{"8":{}},"component":{}}],["kotest",{"_index":106,"title":{"6-2":{}},"name":{},"text":{"1":{},"5":{},"6":{},"7":{},"9":{}},"component":{}}],["kotlin",{"_index":24,"title":{"9":{},"3-1":{},"6-4":{}},"name":{"9":{}},"text":{"1":{},"3":{},"5":{},"6":{},"9":{},"11":{}},"component":{}}],["krato",{"_index":65,"title":{"13":{}},"name":{"13":{}},"text":{"1":{}},"component":{}}],["kroki",{"_index":446,"title":{},"name":{},"text":{"8":{}},"component":{}}],["ktor",{"_index":45,"title":{"11":{}},"name":{"11":{}},"text":{"1":{},"6":{},"11":{}},"component":{}}],["kubernet",{"_index":120,"title":{"15":{},"5-4":{}},"name":{},"text":{"1":{},"3":{},"5":{}},"component":{}}],["kubernetes_vers",{"_index":370,"title":{},"name":{},"text":{"5":{}},"component":{}}],["kustom",{"_index":101,"title":{},"name":{},"text":{"1":{}},"component":{}}],["languag",{"_index":42,"title":{},"name":{},"text":{"1":{},"4":{},"5":{},"8":{},"9":{}},"component":{}}],["later",{"_index":488,"title":{},"name":{},"text":{"9":{}},"component":{}}],["layout",{"_index":49,"title":{},"name":{},"text":{"1":{}},"component":{}}],["lazi",{"_index":74,"title":{},"name":{},"text":{"1":{}},"component":{}}],["lean",{"_index":513,"title":{},"name":{},"text":{"10":{}},"component":{}}],["learn",{"_index":32,"title":{},"name":{},"text":{"1":{},"9":{},"12":{}},"component":{}}],["left",{"_index":411,"title":{},"name":{},"text":{"7":{}},"component":{}}],["librari",{"_index":401,"title":{},"name":{},"text":{"6":{}},"component":{}}],["lightweight",{"_index":432,"title":{},"name":{},"text":{"8":{}},"component":{}}],["limit",{"_index":379,"title":{},"name":{},"text":{"5":{}},"component":{}}],["line",{"_index":373,"title":{},"name":{},"text":{"5":{}},"component":{}}],["linkerd",{"_index":124,"title":{},"name":{},"text":{"1":{}},"component":{}}],["linux",{"_index":286,"title":{"5-18":{}},"name":{},"text":{"5":{}},"component":{}}],["liquibas",{"_index":53,"title":{},"name":{},"text":{"1":{}},"component":{}}],["list",{"_index":36,"title":{},"name":{},"text":{"1":{}},"component":{}}],["load",{"_index":75,"title":{},"name":{},"text":{"1":{},"5":{}},"component":{}}],["local",{"_index":153,"title":{"15":{},"16":{},"17":{},"18":{},"3-2":{}},"name":{},"text":{"3":{},"5":{}},"component":{}}],["localhost",{"_index":342,"title":{},"name":{},"text":{"5":{}},"component":{}}],["locat",{"_index":383,"title":{},"name":{},"text":{"5":{}},"component":{}}],["logic",{"_index":439,"title":{"9":{}},"name":{},"text":{"8":{},"9":{}},"component":{}}],["loki",{"_index":114,"title":{},"name":{},"text":{"1":{}},"component":{}}],["long",{"_index":183,"title":{},"name":{},"text":{"3":{}},"component":{}}],["loop",{"_index":291,"title":{},"name":{},"text":{"5":{}},"component":{}}],["lot",{"_index":454,"title":{},"name":{},"text":{"8":{}},"component":{}}],["maco",{"_index":303,"title":{},"name":{},"text":{"5":{}},"component":{}}],["made",{"_index":28,"title":{},"name":{},"text":{"1":{},"5":{}},"component":{}}],["main",{"_index":273,"title":{},"name":{},"text":{"4":{},"5":{},"9":{}},"component":{}}],["maintain",{"_index":360,"title":{},"name":{},"text":{"5":{}},"component":{}}],["major",{"_index":361,"title":{},"name":{},"text":{"5":{}},"component":{}}],["make",{"_index":145,"title":{},"name":{},"text":{"2":{},"4":{},"5":{},"8":{}},"component":{}}],["manag",{"_index":276,"title":{"13":{},"17":{},"5-2":{},"5-4":{}},"name":{},"text":{"5":{},"12":{}},"component":{}}],["mani",{"_index":294,"title":{},"name":{},"text":{"5":{}},"component":{}}],["manual",{"_index":197,"title":{},"name":{},"text":{"3":{}},"component":{}}],["markup",{"_index":433,"title":{},"name":{},"text":{"8":{}},"component":{}}],["materi",{"_index":47,"title":{},"name":{},"text":{"1":{},"10":{},"21":{}},"component":{}}],["matt",{"_index":15,"title":{},"name":{},"text":{"1":{}},"component":{}}],["matur",{"_index":478,"title":{},"name":{},"text":{"9":{}},"component":{}}],["mention",{"_index":157,"title":{},"name":{},"text":{"3":{},"5":{}},"component":{}}],["menu",{"_index":387,"title":{},"name":{},"text":{"5":{},"7":{}},"component":{}}],["merg",{"_index":272,"title":{},"name":{},"text":{"4":{}},"component":{}}],["meta",{"_index":202,"title":{"4":{}},"name":{"4":{}},"text":{},"component":{}}],["method",{"_index":258,"title":{},"name":{},"text":{"4":{}},"component":{}}],["methodolog",{"_index":206,"title":{},"name":{},"text":{"4":{}},"component":{}}],["michael",{"_index":565,"title":{},"name":{},"text":{"19":{}},"component":{}}],["micromet",{"_index":117,"title":{},"name":{},"text":{"1":{}},"component":{}}],["minikub",{"_index":99,"title":{"5-9":{}},"name":{},"text":{"1":{},"5":{}},"component":{}}],["minim",{"_index":519,"title":{},"name":{},"text":{"11":{}},"component":{}}],["minor",{"_index":369,"title":{},"name":{},"text":{"5":{}},"component":{}}],["mirror",{"_index":240,"title":{},"name":{},"text":{"4":{}},"component":{}}],["mkcert",{"_index":100,"title":{"17":{}},"name":{"17":{}},"text":{"1":{}},"component":{}}],["mobi",{"_index":327,"title":{},"name":{},"text":{"5":{}},"component":{}}],["mock",{"_index":400,"title":{},"name":{},"text":{"6":{}},"component":{}}],["mockk",{"_index":398,"title":{},"name":{},"text":{"6":{}},"component":{}}],["model",{"_index":130,"title":{"9":{},"2-2":{}},"name":{},"text":{"1":{},"2":{},"4":{},"8":{},"9":{}},"component":{}}],["modul",{"_index":76,"title":{"3-1":{}},"name":{},"text":{"1":{},"3":{},"11":{},"21":{}},"component":{}}],["module(",{"_index":403,"title":{},"name":{},"text":{"6":{}},"component":{}}],["module’",{"_index":167,"title":{},"name":{},"text":{"3":{}},"component":{}}],["monolith",{"_index":88,"title":{},"name":{},"text":{"1":{}},"component":{}}],["monorepo",{"_index":87,"title":{},"name":{},"text":{"1":{}},"component":{}}],["more",{"_index":255,"title":{},"name":{},"text":{"4":{},"9":{},"10":{}},"component":{}}],["multi",{"_index":91,"title":{},"name":{},"text":{"1":{}},"component":{}}],["multipl",{"_index":484,"title":{},"name":{},"text":{"9":{}},"component":{}}],["multitud",{"_index":443,"title":{},"name":{},"text":{"8":{}},"component":{}}],["name",{"_index":169,"title":{"16":{}},"name":{},"text":{"3":{}},"component":{}}],["natur",{"_index":224,"title":{},"name":{},"text":{"4":{}},"component":{}}],["navig",{"_index":389,"title":{},"name":{},"text":{"5":{},"8":{}},"component":{}}],["necessari",{"_index":253,"title":{},"name":{},"text":{"4":{}},"component":{}}],["need",{"_index":315,"title":{},"name":{},"text":{"5":{},"10":{}},"component":{}}],["neg",{"_index":426,"title":{"8-6":{},"9-6":{},"10-6":{},"11-6":{},"12-6":{},"13-6":{},"14-6":{},"15-6":{},"16-6":{},"17-6":{},"18-6":{}},"name":{},"text":{},"component":{}}],["net.ipv4.ip_unprivileged_port_start",{"_index":335,"title":{},"name":{},"text":{"5":{}},"component":{}}],["net.ipv4.ip_unprivileged_port_start=80",{"_index":340,"title":{},"name":{},"text":{"5":{}},"component":{}}],["neutral",{"_index":425,"title":{"8-5":{},"9-5":{},"10-5":{},"11-5":{},"12-5":{},"13-5":{},"14-5":{},"15-5":{},"16-5":{},"17-5":{},"18-5":{}},"name":{},"text":{},"component":{}}],["new",{"_index":268,"title":{},"name":{},"text":{"4":{}},"component":{}}],["nginx",{"_index":123,"title":{},"name":{},"text":{"1":{}},"component":{}}],["ngrx",{"_index":73,"title":{},"name":{},"text":{"1":{}},"component":{}}],["nip",{"_index":549,"title":{},"name":{"16":{}},"text":{},"component":{}}],["nip.io",{"_index":103,"title":{"16":{}},"name":{},"text":{"1":{}},"component":{}}],["node.j",{"_index":41,"title":{},"name":{},"text":{"1":{}},"component":{}}],["nodej",{"_index":533,"title":{},"name":{},"text":{"12":{}},"component":{}}],["non",{"_index":34,"title":{},"name":{},"text":{"1":{}},"component":{}}],["normal",{"_index":502,"title":{},"name":{},"text":{"10":{}},"component":{}}],["note",{"_index":146,"title":{},"name":{},"text":{"2":{}},"component":{}}],["nvm",{"_index":532,"title":{},"name":{},"text":{"12":{}},"component":{}}],["nygard",{"_index":566,"title":{},"name":{},"text":{"19":{}},"component":{}}],["oathkeep",{"_index":66,"title":{},"name":{},"text":{"1":{}},"component":{}}],["object",{"_index":498,"title":{},"name":{},"text":{"10":{}},"component":{}}],["offer",{"_index":376,"title":{},"name":{},"text":{"5":{}},"component":{}}],["olaf",{"_index":563,"title":{},"name":{},"text":{"19":{}},"component":{}}],["on",{"_index":166,"title":{},"name":{},"text":{"3":{},"4":{},"8":{},"9":{},"10":{}},"component":{}}],["onc",{"_index":318,"title":{},"name":{},"text":{"5":{},"7":{}},"component":{}}],["op",{"_index":112,"title":{},"name":{},"text":{"1":{}},"component":{}}],["open",{"_index":385,"title":{},"name":{},"text":{"5":{}},"component":{}}],["openjdk",{"_index":40,"title":{},"name":{},"text":{"1":{}},"component":{}}],["opentrac",{"_index":115,"title":{},"name":{},"text":{"1":{}},"component":{}}],["oper",{"_index":362,"title":{},"name":{},"text":{"5":{},"10":{}},"component":{}}],["option",{"_index":417,"title":{},"name":{},"text":{"7":{}},"component":{}}],["ori",{"_index":64,"title":{"13":{},"14":{}},"name":{},"text":{"1":{}},"component":{}}],["origin",{"_index":17,"title":{},"name":{},"text":{"1":{}},"component":{}}],["other",{"_index":217,"title":{},"name":{},"text":{"4":{}},"component":{}}],["over",{"_index":343,"title":{},"name":{},"text":{"5":{}},"component":{}}],["overview",{"_index":133,"title":{"21":{},"2-1":{}},"name":{},"text":{},"component":{}}],["packag",{"_index":175,"title":{},"name":{},"text":{"3":{}},"component":{}}],["pattern",{"_index":10,"title":{},"name":{},"text":{"1":{}},"component":{}}],["persist",{"_index":495,"title":{"10":{}},"name":{},"text":{"10":{}},"component":{}}],["philosoph",{"_index":229,"title":{},"name":{},"text":{"4":{}},"component":{}}],["philosophi",{"_index":219,"title":{},"name":{},"text":{"4":{}},"component":{}}],["plantuml",{"_index":128,"title":{},"name":{},"text":{"1":{}},"component":{}}],["platform",{"_index":485,"title":{},"name":{},"text":{"9":{}},"component":{}}],["play",{"_index":215,"title":{},"name":{},"text":{"4":{}},"component":{}}],["pleas",{"_index":298,"title":{},"name":{},"text":{"5":{},"19":{}},"component":{}}],["plugin",{"_index":282,"title":{"5-13":{},"5-16":{}},"name":{},"text":{"5":{},"7":{},"11":{}},"component":{}}],["point",{"_index":351,"title":{},"name":{},"text":{"5":{}},"component":{}}],["port",{"_index":20,"title":{},"name":{},"text":{"1":{},"5":{}},"component":{}}],["posit",{"_index":424,"title":{"8-4":{},"9-4":{},"10-4":{},"11-4":{},"12-4":{},"13-4":{},"14-4":{},"15-4":{},"16-4":{},"17-4":{},"18-4":{}},"name":{},"text":{},"component":{}}],["possibl",{"_index":262,"title":{},"name":{},"text":{"4":{},"5":{}},"component":{}}],["postgresql",{"_index":51,"title":{"10":{}},"name":{"10":{}},"text":{"1":{},"6":{},"10":{}},"component":{}}],["pragmat",{"_index":200,"title":{"4-2":{}},"name":{},"text":{"4":{}},"component":{}}],["predict",{"_index":220,"title":{},"name":{},"text":{"4":{}},"component":{}}],["prefer",{"_index":313,"title":{},"name":{},"text":{"5":{},"9":{}},"component":{}}],["present",{"_index":500,"title":{},"name":{},"text":{"10":{}},"component":{}}],["press",{"_index":189,"title":{},"name":{},"text":{"3":{}},"component":{}}],["primarili",{"_index":391,"title":{},"name":{},"text":{"5":{}},"component":{}}],["principl",{"_index":205,"title":{},"name":{},"text":{"4":{},"6":{}},"component":{}}],["privileg",{"_index":331,"title":{},"name":{},"text":{"5":{}},"component":{}}],["problem",{"_index":227,"title":{},"name":{},"text":{"4":{}},"component":{}}],["process",{"_index":184,"title":{},"name":{},"text":{"3":{}},"component":{}}],["product",{"_index":316,"title":{},"name":{},"text":{"5":{},"11":{}},"component":{}}],["progress",{"_index":27,"title":{},"name":{},"text":{"1":{}},"component":{}}],["project",{"_index":4,"title":{},"name":{},"text":{"1":{},"3":{},"5":{},"8":{},"9":{}},"component":{}}],["prometheu",{"_index":118,"title":{},"name":{},"text":{"1":{}},"component":{}}],["promtail",{"_index":113,"title":{},"name":{},"text":{"1":{}},"component":{}}],["properti",{"_index":213,"title":{},"name":{},"text":{"4":{}},"component":{}}],["properties/characterist",{"_index":208,"title":{},"name":{},"text":{"4":{}},"component":{}}],["provid",{"_index":140,"title":{},"name":{},"text":{"2":{}},"component":{}}],["publicli",{"_index":450,"title":{},"name":{},"text":{"8":{}},"component":{}}],["purpos",{"_index":30,"title":{},"name":{},"text":{"1":{},"10":{}},"component":{}}],["put",{"_index":435,"title":{},"name":{},"text":{"8":{}},"component":{}}],["python",{"_index":23,"title":{},"name":{},"text":{"1":{},"2":{},"9":{}},"component":{}}],["qualiti",{"_index":246,"title":{},"name":{},"text":{"4":{}},"component":{}}],["queri",{"_index":567,"title":{},"name":{},"text":{"21":{}},"component":{}}],["quick",{"_index":275,"title":{"5-1":{}},"name":{},"text":{},"component":{}}],["quickstart",{"_index":154,"title":{"3":{}},"name":{},"text":{},"component":{}}],["rancher",{"_index":97,"title":{"5-3":{},"5-7":{}},"name":{},"text":{"1":{},"5":{}},"component":{}}],["read",{"_index":138,"title":{},"name":{},"text":{"2":{},"19":{}},"component":{}}],["realiti",{"_index":241,"title":{},"name":{},"text":{"4":{}},"component":{}}],["reason",{"_index":269,"title":{},"name":{},"text":{"4":{},"8":{}},"component":{}}],["recommend",{"_index":295,"title":{},"name":{},"text":{"5":{}},"component":{}}],["record",{"_index":302,"title":{"19":{}},"name":{},"text":{"5":{},"19":{}},"component":{}}],["redeploy",{"_index":185,"title":{},"name":{},"text":{"3":{}},"component":{}}],["reduc",{"_index":476,"title":{},"name":{},"text":{"9":{},"12":{}},"component":{}}],["reject",{"_index":237,"title":{},"name":{},"text":{"4":{}},"component":{}}],["relat",{"_index":508,"title":{},"name":{},"text":{"10":{}},"component":{}}],["repres",{"_index":239,"title":{},"name":{},"text":{"4":{}},"component":{}}],["requir",{"_index":267,"title":{},"name":{},"text":{"4":{},"5":{},"8":{},"10":{}},"component":{}}],["resourc",{"_index":341,"title":{},"name":{},"text":{"5":{},"19":{}},"component":{}}],["rest",{"_index":310,"title":{},"name":{},"text":{"5":{},"21":{}},"component":{}}],["restart",{"_index":337,"title":{},"name":{},"text":{"5":{}},"component":{}}],["revers",{"_index":457,"title":{},"name":{},"text":{"8":{}},"component":{}}],["root",{"_index":132,"title":{},"name":{},"text":{"3":{}},"component":{"1":{}}}],["run",{"_index":152,"title":{"18":{},"3-2":{}},"name":{},"text":{"3":{},"5":{},"7":{}},"component":{}}],["runner",{"_index":470,"title":{},"name":{},"text":{"9":{},"12":{}},"component":{}}],["runtim",{"_index":39,"title":{},"name":{},"text":{"1":{},"5":{}},"component":{}}],["same",{"_index":368,"title":{},"name":{},"text":{"5":{}},"component":{}}],["sandbox",{"_index":31,"title":{},"name":{},"text":{"1":{}},"component":{}}],["screenplay",{"_index":111,"title":{},"name":{},"text":{"1":{}},"component":{}}],["seal",{"_index":467,"title":{},"name":{},"text":{"9":{}},"component":{}}],["section",{"_index":159,"title":{},"name":{},"text":{"3":{},"4":{},"5":{}},"component":{}}],["select",{"_index":415,"title":{},"name":{},"text":{"7":{}},"component":{}}],["sens",{"_index":142,"title":{},"name":{},"text":{"2":{}},"component":{}}],["seren",{"_index":109,"title":{},"name":{},"text":{"1":{}},"component":{}}],["servic",{"_index":186,"title":{},"name":{},"text":{"3":{},"5":{}},"component":{}}],["set",{"_index":207,"title":{},"name":{},"text":{"4":{}},"component":{}}],["setup",{"_index":158,"title":{"5":{}},"name":{"5":{}},"text":{"3":{},"5":{}},"component":{}}],["sever",{"_index":531,"title":{},"name":{},"text":{"12":{}},"component":{}}],["shall",{"_index":257,"title":{},"name":{},"text":{"4":{},"19":{}},"component":{}}],["share",{"_index":92,"title":{},"name":{},"text":{"1":{}},"component":{}}],["significantli",{"_index":557,"title":{},"name":{},"text":{"19":{}},"component":{}}],["similar",{"_index":366,"title":{},"name":{},"text":{"5":{}},"component":{}}],["site",{"_index":436,"title":{},"name":{},"text":{"8":{}},"component":{}}],["skaffold",{"_index":102,"title":{"18":{}},"name":{"18":{}},"text":{"1":{},"3":{}},"component":{}}],["softwar",{"_index":7,"title":{},"name":{},"text":{"1":{},"4":{}},"component":{}}],["solut",{"_index":226,"title":{},"name":{},"text":{"4":{}},"component":{}}],["solv",{"_index":235,"title":{},"name":{},"text":{"4":{}},"component":{}}],["someth",{"_index":530,"title":{},"name":{},"text":{"12":{}},"component":{}}],["somewhat",{"_index":475,"title":{},"name":{},"text":{"9":{}},"component":{}}],["sourc",{"_index":60,"title":{},"name":{},"text":{"1":{},"8":{}},"component":{}}],["spars",{"_index":527,"title":{},"name":{},"text":{"11":{}},"component":{}}],["special",{"_index":448,"title":{},"name":{},"text":{"8":{}},"component":{}}],["specif",{"_index":505,"title":{},"name":{},"text":{"10":{}},"component":{}}],["specifi",{"_index":168,"title":{},"name":{},"text":{"3":{},"5":{}},"component":{}}],["sql",{"_index":50,"title":{},"name":{},"text":{"1":{}},"component":{}}],["ssl",{"_index":552,"title":{"17":{}},"name":{},"text":{},"component":{}}],["stage",{"_index":524,"title":{},"name":{},"text":{"11":{}},"component":{}}],["start",{"_index":18,"title":{"5-1":{}},"name":{},"text":{"1":{},"3":{},"10":{}},"component":{}}],["step",{"_index":296,"title":{},"name":{},"text":{"5":{}},"component":{}}],["still",{"_index":522,"title":{},"name":{},"text":{"11":{}},"component":{}}],["store",{"_index":72,"title":{},"name":{},"text":{"1":{},"10":{}},"component":{}}],["strategi",{"_index":504,"title":{},"name":{},"text":{"10":{}},"component":{}}],["strictli",{"_index":266,"title":{},"name":{},"text":{"4":{}},"component":{}}],["strive",{"_index":292,"title":{},"name":{},"text":{"5":{}},"component":{}}],["structur",{"_index":228,"title":{},"name":{},"text":{"4":{},"5":{},"10":{}},"component":{}}],["studio",{"_index":285,"title":{"5-15":{},"7-2":{}},"name":{},"text":{"5":{},"7":{}},"component":{}}],["style",{"_index":13,"title":{},"name":{},"text":{"1":{},"9":{},"10":{},"11":{}},"component":{}}],["subject",{"_index":375,"title":{},"name":{},"text":{"5":{}},"component":{}}],["subset",{"_index":174,"title":{},"name":{},"text":{"3":{}},"component":{}}],["such",{"_index":466,"title":{},"name":{},"text":{"9":{}},"component":{}}],["sudo",{"_index":319,"title":{},"name":{},"text":{"5":{}},"component":{}}],["suffic",{"_index":453,"title":{},"name":{},"text":{"8":{}},"component":{}}],["suitabl",{"_index":297,"title":{},"name":{},"text":{"5":{}},"component":{}}],["support",{"_index":259,"title":{},"name":{},"text":{"4":{},"5":{},"8":{},"9":{},"10":{},"11":{},"12":{}},"component":{}}],["surfac",{"_index":520,"title":{},"name":{},"text":{"11":{}},"component":{}}],["sysctl",{"_index":339,"title":{},"name":{},"text":{"5":{}},"component":{}}],["system",{"_index":26,"title":{"18":{},"2-4":{}},"name":{},"text":{"1":{},"2":{},"3":{},"5":{},"19":{}},"component":{}}],["task",{"_index":182,"title":{},"name":{},"text":{"3":{},"5":{}},"component":{}}],["taskfile.yaml",{"_index":372,"title":{},"name":{},"text":{"5":{}},"component":{}}],["tdd",{"_index":265,"title":{},"name":{},"text":{"4":{}},"component":{}}],["tension",{"_index":242,"title":{},"name":{},"text":{"4":{}},"component":{}}],["termin",{"_index":191,"title":{},"name":{},"text":{"3":{}},"component":{}}],["terraform",{"_index":194,"title":{},"name":{},"text":{"3":{}},"component":{}}],["test",{"_index":104,"title":{"6":{},"6-3":{},"6-5":{},"6-8":{}},"name":{"6":{}},"text":{"1":{},"3":{},"4":{},"5":{},"6":{},"7":{},"9":{},"12":{}},"component":{}}],["test(",{"_index":420,"title":{},"name":{},"text":{"7":{}},"component":{}}],["test:test",{"_index":177,"title":{},"name":{},"text":{"3":{}},"component":{}}],["testcontain",{"_index":107,"title":{},"name":{},"text":{"1":{}},"component":{}}],["theme",{"_index":452,"title":{},"name":{},"text":{"8":{}},"component":{}}],["therefor",{"_index":263,"title":{},"name":{},"text":{"4":{}},"component":{}}],["thing",{"_index":37,"title":{},"name":{},"text":{"1":{},"4":{}},"component":{}}],["thought",{"_index":233,"title":{},"name":{},"text":{"4":{}},"component":{}}],["time",{"_index":78,"title":{},"name":{},"text":{"1":{},"4":{}},"component":{}}],["tip",{"_index":406,"title":{"7":{}},"name":{"7":{}},"text":{},"component":{}}],["todo",{"_index":402,"title":{},"name":{},"text":{"6":{}},"component":{}}],["tool",{"_index":9,"title":{"6-1":{}},"name":{},"text":{"1":{},"3":{},"4":{},"5":{},"8":{},"9":{}},"component":{}}],["trade",{"_index":363,"title":{},"name":{},"text":{"5":{}},"component":{}}],["tradeoff",{"_index":301,"title":{},"name":{},"text":{"5":{}},"component":{}}],["tradit",{"_index":230,"title":{},"name":{},"text":{"4":{}},"component":{}}],["transact",{"_index":149,"title":{},"name":{},"text":{"2":{}},"component":{}}],["trick",{"_index":407,"title":{"7":{}},"name":{},"text":{},"component":{}}],["type",{"_index":444,"title":{},"name":{},"text":{"8":{},"10":{}},"component":{}}],["typescript",{"_index":43,"title":{},"name":{},"text":{"1":{},"5":{},"12":{}},"component":{}}],["typic",{"_index":507,"title":{},"name":{},"text":{"10":{}},"component":{}}],["ubiqu",{"_index":357,"title":{},"name":{},"text":{"5":{}},"component":{}}],["ubuntu",{"_index":304,"title":{},"name":{},"text":{"5":{}},"component":{}}],["ui",{"_index":441,"title":{},"name":{},"text":{"8":{}},"component":{}}],["under",{"_index":306,"title":{},"name":{},"text":{"5":{},"8":{}},"component":{}}],["unit",{"_index":394,"title":{"6-3":{}},"name":{},"text":{},"component":{}}],["unix",{"_index":218,"title":{},"name":{},"text":{"4":{}},"component":{}}],["url",{"_index":348,"title":{},"name":{},"text":{"5":{}},"component":{}}],["us",{"_index":38,"title":{"8":{},"9":{},"10":{},"11":{},"12":{},"13":{},"14":{},"15":{},"16":{},"17":{},"18":{}},"name":{},"text":{"1":{},"2":{},"4":{},"5":{},"8":{},"9":{},"10":{},"11":{},"12":{}},"component":{}}],["usag",{"_index":6,"title":{},"name":{},"text":{"1":{}},"component":{}}],["user",{"_index":250,"title":{"5-18":{}},"name":{},"text":{"4":{},"5":{}},"component":{}}],["valu",{"_index":248,"title":{},"name":{},"text":{"4":{},"5":{}},"component":{}}],["variabl",{"_index":371,"title":{},"name":{},"text":{"5":{}},"component":{}}],["varieti",{"_index":461,"title":{},"name":{},"text":{"9":{}},"component":{}}],["veri",{"_index":492,"title":{},"name":{},"text":{"9":{}},"component":{}}],["verifi",{"_index":308,"title":{},"name":{},"text":{"5":{}},"component":{}}],["version",{"_index":365,"title":{},"name":{},"text":{"5":{},"12":{}},"component":{}}],["via",{"_index":349,"title":{},"name":{},"text":{"5":{},"7":{},"8":{}},"component":{}}],["view",{"_index":499,"title":{},"name":{},"text":{"10":{}},"component":{}}],["visual",{"_index":284,"title":{"5-15":{},"7-2":{}},"name":{},"text":{"5":{},"7":{}},"component":{}}],["vnd.error",{"_index":84,"title":{},"name":{},"text":{"1":{}},"component":{}}],["way",{"_index":355,"title":{},"name":{},"text":{"5":{},"9":{},"10":{}},"component":{}}],["web",{"_index":172,"title":{"12":{}},"name":{},"text":{"3":{},"11":{},"12":{},"21":{}},"component":{"20":{},"21":{}}}],["web/http",{"_index":397,"title":{"6-7":{}},"name":{},"text":{},"component":{}}],["web:acm",{"_index":171,"title":{},"name":{},"text":{"3":{}},"component":{}}],["well",{"_index":216,"title":{},"name":{},"text":{"4":{}},"component":{}}],["wide",{"_index":358,"title":{},"name":{},"text":{"5":{},"9":{},"10":{},"12":{}},"component":{}}],["window",{"_index":305,"title":{},"name":{},"text":{"5":{}},"component":{}}],["within",{"_index":163,"title":{},"name":{},"text":{"3":{}},"component":{}}],["word",{"_index":232,"title":{},"name":{},"text":{"4":{}},"component":{}}],["work",{"_index":211,"title":{},"name":{},"text":{"4":{},"5":{}},"component":{}}],["workaround",{"_index":332,"title":{},"name":{},"text":{"5":{}},"component":{}}],["workflow",{"_index":11,"title":{},"name":{},"text":{"1":{}},"component":{}}],["wright",{"_index":16,"title":{},"name":{},"text":{"1":{}},"component":{}}],["write",{"_index":328,"title":{},"name":{},"text":{"5":{},"8":{}},"component":{}}],["written",{"_index":455,"title":{},"name":{},"text":{"8":{},"12":{}},"component":{}}],["wsl",{"_index":307,"title":{},"name":{},"text":{"5":{}},"component":{}}],["you’d",{"_index":192,"title":{},"name":{},"text":{"3":{}},"component":{}}],["you’ll",{"_index":314,"title":{},"name":{},"text":{"5":{}},"component":{}}],["zanzibar",{"_index":67,"title":{},"name":{},"text":{"1":{}},"component":{}}],["zimmermann",{"_index":564,"title":{},"name":{},"text":{"19":{}},"component":{}}]],"pipeline":["stemmer"]},"store":{"documents":{"1":{"id":1,"text":"Acme is an experimental project that illustrates usage of software development tools, patterns, workflows, and architectural styles of interest to Matt Wright. It originally started as an attempt to port ideas from Cosmic Python to a Kotlin based system. As progress was made the project became a all-purpose sandbox to learn. The following is a non-exhaustive list of things that are used, or attempted to be used, in this project: Runtimes OpenJDK Node.js Languages Kotlin TypeScript Frameworks Ktor Angular Angular Material Angular Flex Layout SQL PostgreSQL jOOQ Liquibase Architecture & Design Backend DDD, CQRS, Event Sourcing inspired by Cosmic Python Headless authentication using ORY Kratos and Oathkeeper Zanzibar style authorization using ORY Keto Frontend Centralized store with NgRx Lazy loaded modules Compile-time i18n APIs HATEOAS HAL (application/hal+json) vnd.error (application/vnd.error+json) Build Tools Monorepo (not Monolith) Gradle Kotlin DSL Multi project layout Shared build conventions Docker Engine Jib Development Tools Rancher Desktop minikube mkcert Kustomize Skaffold nip.io Testing JUnit5 Kotest Testcontainers Karma Serenity BDD + Screenplay Pattern Ops Promtail Loki OpenTracing Jaeger Micrometer Prometheus Grafana Kubernetes Helm ingress-nginx Linkerd Documentation Asciidoctor Antora PlantUML C4 Model Diagrams","title":"Introduction","component":"ROOT","version":"","name":"index","url":"/index.html","titles":[]},"2":{"id":2,"text":"The system architecture is inspired by Cosmic Python. Reading the book will provide the best sense of how this system is designed. That said, there are a few differences to make note of. Key differences: Implicit transactions The following is an attempt to express the system architecture using the C4 Model.","title":"Architecture","component":"acme-handbook","version":"","name":"architecture","url":"/acme-handbook/architecture.html","titles":[{"text":"Overview","hash":"_overview","id":1},{"text":"C4 Model","hash":"_c4_model","id":2},{"text":"Context Diagram","hash":"_context_diagram","id":3},{"text":"System Container Diagram","hash":"_system_container_diagram","id":4},{"text":"Business API Component Diagram","hash":"_business_api_component_diagram","id":5}]},"3":{"id":3,"text":"These instructions assume all tools mentioned in the Setup section have been installed. Run all Kotlin module tests by executing the following command from within the root directory: $ ./gradlew test Run one Kotlin module’s tests by specifying the module name. For example: $ ./gradlew acme-web:acme-web-api:test Run a subset of a module’s tests by specifying a package or class name. For example: $ ./gradlew acme-web:acme-web-test:test --tests 'com.acme.web.test.*' $ ./gradlew acme-web:acme-web-test:test --tests com.acme.web.test.scheduling.api.SchedulingClientCollectionApiSpec If desired, the system can be run locally on a local Kubernetes cluster. Run the following command from the root of the project: $ task run This will start a long-running process that will redeploy services when code is changed. Press Ctrl+C to terminate the process. If you’d rather avoid running terraform and the like before running locally, invoke skaffold manually: $ skaffold dev","title":"Quickstart","component":"acme-handbook","version":"","name":"index","url":"/acme-handbook/index.html","titles":[{"text":"Kotlin Modules","hash":"_kotlin_modules","id":1},{"text":"Run Locally","hash":"_run_locally","id":2}]},"4":{"id":4,"text":"This section describes guiding principles and methodologies. CUPID is a set of properties/characteristics that aim to make software a joy to work. The five CUPID properties are: Composable: plays well with others Unix philosophy: does one thing well Predictable: does what you expect Idiomatic: feels natural Domain-based: the solution domain models the problem domain in language and structure Pragmatism is a philosophical tradition that considers words and thought as tools and instruments for prediction, problem solving, and action, and rejects the idea that the function of thought is to describe, represent, or mirror reality. There is often tension between the desire to create a high quality code and delivering value to end-users in a timely fashion. Pragmatism may be applied when it is necessary to focus more on delivery than on the quality of the code. Developers shall use methods that support iterative and incremental development. Applying Test-Driven Development principles where possible is therefore encouraged. However, while TDD is not strictly required, all new code should be tested to a reasonable degree before being merged into the main branch.","title":"Meta","component":"acme-handbook","version":"","name":"meta","url":"/acme-handbook/meta.html","titles":[{"text":"CUPID","hash":"_cupid","id":1},{"text":"Pragmatism","hash":"_pragmatism","id":2},{"text":"Iterative Development","hash":"_iterative_development","id":3}]},"5":{"id":5,"text":"The development environment is a first-class component of this system. From installation and configuration to supporting fast development feedback loops, it should strive to deliver the best developer experience to as many developers as possible. This section describes the recommended steps to configure a development environment suitable for working on Acme. Please install tools as they are mentioned in the documentation. Decisions made in service of this goal are often loaded with tradeoffs and are documented as a Decision Record. These instructions are designed to work on macOS and Ubuntu. They should also work for Windows under WSL but have not been verified. Install Homebrew Install Task Install the rest of the development tools: $ task dev:setup Setup the 1Password CLI Install your preferred Docker Manager Install your preferred Kubernetes Manager To run containers you’ll need to install a Docker engine manager. The following products are supported by this tooling: Docker Desktop Rancher Desktop is an alternative to Docker Desktop. Once installed, configure Rancher Desktop with sudo access and dockerd as the container runtime: Figure 1. Administrative Access > Allow sudo access Figure 2. Container Runtime > dockerd (moby) As of this writing Rancher Desktop has an issue with binding to privileged ports on Linux. The workaround is to adjust the default net.ipv4.ip_unprivileged_port_start value to 80. Run the following command and restart Rancher Desktop afterwards: sudo sysctl net.ipv4.ip_unprivileged_port_start=80 This configuration makes it possible to access Kubernetes Ingress resources on localhost over privileged ports 80 (HTTP) and 443 (HTTPS). It also affords the user of friendly local URLs via http://nip.io/. There are many tools that will run a local Kubernetes cluster The following products are supported by this tooling: The following products require a user to point-and-click a GUI to manage a Kubernetes cluster. Using Docker Desktop is, arguably, the easiest way to run Kubernetes locally given its ubiquity. It is also widely supported and actively maintained for all major operating systems. The main trade-off when choosing Docker Desktop is that the version of Kubernetes cannot be changed. Rancher Desktop, similar to Docker Desktop, can also be used to run a local Kubernetes cluster. An advantage Rancher Desktop has over Docker Desktop is that the version of Kubernetes can be changed When choosing the Kubernetes version, choose a version with the same minor version specified by the KUBERNETES_VERSION environment variable in Taskfile.yaml The following products are command-line interfaces. Subjectively, they may offer a better user-experience for developers. minikube is a command-line tool for running Kubernetes clusters locally. Follow these instructions to install minikube. k3d is another command-line tool for running Kubernetes clusters. Follow these instructions to install k3d. IntelliJ IDEA is used for, but not limited to, Kotlin development and Asciidoc authoring. The following plugins are recommended for the best development experience: Kotest plugin AsciiDoc plugin Ensure that IntelliJ is aware of the location of the JDK by opening the File > Project Structure menu. Additionally, ensure that IntelliJ is configured to build and run tests with Gradle. Under the Preferences menu, navigate to Build, Execution, Deployment > Build Tools > Gradle: Visual Studio Code is primarily used for, but not limited to, TypeScript project development. The following plugins are recommended for the best development experience: Angular Language Service plugin ESLint plugin Visual Studio Code does not require further configuration for this project.","title":"Setup","component":"acme-handbook","version":"","name":"setup","url":"/acme-handbook/setup.html","titles":[{"text":"Quick Start","hash":"_quick_start","id":1},{"text":"Docker Manager","hash":"_docker_manager","id":2},{"text":"Rancher Desktop","hash":"_rancher_desktop","id":3},{"text":"Kubernetes Manager","hash":"_kubernetes_manager","id":4},{"text":"GUIs","hash":"_guis","id":5},{"text":"Docker Desktop","hash":"_docker_desktop","id":6},{"text":"Rancher Desktop","hash":"_rancher_desktop_2","id":7},{"text":"CLIs","hash":"_clis","id":8},{"text":"minikube","hash":"_minikube","id":9},{"text":"k3d","hash":"_k3d","id":10},{"text":"IDEs","hash":"_ides","id":11},{"text":"IntelliJ IDEA","hash":"_intellij_idea","id":12},{"text":"Plugins","hash":"_plugins","id":13},{"text":"Configuration","hash":"_configuration","id":14},{"text":"Visual Studio Code","hash":"_visual_studio_code","id":15},{"text":"Plugins","hash":"_plugins_2","id":16},{"text":"Configuration","hash":"_configuration_2","id":17},{"text":"Linux Users","hash":"_linux_users","id":18}]},"6":{"id":6,"text":"Kotest MockK is the chosen mocking library for Kotlin code. TODO: Describe integration test principles TODO: Describe testing the integration of Jooq with PostgreSQL TODO: Describe testing the integration of the Domain module(s) with Ktor TODO: Describe E2E test principles TODO: Describe continuous testing","title":"Testing","component":"acme-handbook","version":"","name":"testing","url":"/acme-handbook/testing.html","titles":[{"text":"Tools","hash":"_tools","id":1},{"text":"Kotest","hash":"_kotest","id":2},{"text":"Unit Tests","hash":"_unit_tests","id":3},{"text":"Kotlin","hash":"_kotlin","id":4},{"text":"Integration Tests","hash":"_integration_tests","id":5},{"text":"Data/SQL","hash":"_datasql","id":6},{"text":"Web/HTTP","hash":"_webhttp","id":7},{"text":"End-to-End Tests","hash":"_end_to_end_tests","id":8}]},"7":{"id":7,"text":"With the Kotest IntelliJ plugin installed, individual test classes or functions can be run. This is afforded via the green arrow in the left gutter of a test file: Access the run configurations from the Run and Debug menu: In this example a developer can choose to run all tests or just the current file. Select the desired configuration and click the green arrow button to run. Optionally, attach the debugger once the test(s) are running by selecting the Attach to debugger configuration. Click the green arrow button to attach. Visual Studio Code should then display breakpoints like so:","title":"Tips & Tricks","component":"acme-handbook","version":"","name":"tips","url":"/acme-handbook/tips.html","titles":[{"text":"IntelliJ","hash":"_intellij","id":1},{"text":"Visual Studio Code","hash":"_visual_studio_code","id":2}]},"8":{"id":8,"text":"Accepted on 2022-01-01 A documentation tool with a familiar, lightweight markup language will make writing documentation a joy. Ideally all documentation can be put under one site that affords a reasonable experience navigating across all the content. We will use Antora to be able to aggregate all project documentation into one logical site and afford us to customize the UI. Antora is built on Asciidoc, which we have experience with. Antora supports a multitude of diagram types, including C4 models, via asciidoctor-kroki Antora does not build navigation automatically from source files. Customizing the UI requires some special knowledge, however publicly available themes should suffice Changing this decision after a lot of documentation has been written would be hard to reverse.","title":"1. Documentation using Antora","component":"acme-adr","version":"","name":"000000-antora","url":"/acme-adr/000000-antora.html","titles":[{"text":"Context","hash":"_context","id":1},{"text":"Decision","hash":"_decision","id":2},{"text":"Consequences","hash":"_consequences","id":3},{"text":"Positive","hash":"_positive","id":4},{"text":"Neutral","hash":"_neutral","id":5},{"text":"Negative","hash":"_negative","id":6}]},"9":{"id":9,"text":"Accepted on 2022-01-01 The desired architectural style described in Cosmic Python can be implemented using a wide variety of languages. The main driver behind this decision is to get more familiar with Kotlin and it’s features such as sealed and inline classes. We will use Kotlin for all domain modeling and business logic to support the desired architectural style. Additionally, we will use the following tools that are common for Kotlin projects: Gradle as the build tool. Junit5 as the test runner. Kotest as the test framework. JaCoCo for collecting test coverage. We are already somewhat familiar with Kotlin which will reduce the learning curve. Kotlin is a mature language with great community and tooling support. The entire Java ecosystem is available to use with Kotlin. Kotlin supports compiling to multiple platforms which may come in handy later Kotlin is the preferred language for Android application development if we choose to build an Android app. This is very close to a one-way door decision.","title":"2. Use Kotlin for Domain Modeling and Business Logic","component":"acme-adr","version":"","name":"000001-kotlin","url":"/acme-adr/000001-kotlin.html","titles":[{"text":"Context","hash":"_context","id":1},{"text":"Decision","hash":"_decision","id":2},{"text":"Consequences","hash":"_consequences","id":3},{"text":"Positive","hash":"_positive","id":4},{"text":"Neutral","hash":"_neutral","id":5},{"text":"Negative","hash":"_negative","id":6}]},"10":{"id":10,"text":"Accepted on 2022-01-01 The desired architectural style requires a database to persist domain objects and materialized views for presentation purposes. Given the design of the domain objects, it is desirable to store them in the database as a document. In contrast, it is desirable to store materialized views in a normalized fashion. We will use PostgreSQL for all persistence needs as it supports both persistence strategies. More specifically, we will use JSON types for domain object persistence. Views will use typical relational data structures. Widely supported and easy to operate Broad ecosystem of extensions ? This is a one-way door decision if we start to lean on PostgreSQL-only features.","title":"2. Use PostgreSQL for Persistence","component":"acme-adr","version":"","name":"000002-postgresql","url":"/acme-adr/000002-postgresql.html","titles":[{"text":"Context","hash":"_context","id":1},{"text":"Decision","hash":"_decision","id":2},{"text":"Consequences","hash":"_consequences","id":3},{"text":"Positive","hash":"_positive","id":4},{"text":"Neutral","hash":"_neutral","id":5},{"text":"Negative","hash":"_negative","id":6}]},"11":{"id":11,"text":"Accepted on 2022-01-01 The desired architectural style includes HTTP APIs. Choosing a web framework will aid their development. The framework must support development using Kotlin, which we have experience with already. Better yet, the framework would be built with Kotlin and use coroutines. We will use Ktor for all HTTP APIs. First class Kotlin development experience. Built on coroutines. Includes an HTTP client module. Minimal API surface area. Still an early-stage product, likely to be a bit buggy. Sparse plugin ecosystem.","title":"3. Use Ktor for HTTP APIs","component":"acme-adr","version":"","name":"000003-ktor","url":"/acme-adr/000003-ktor.html","titles":[{"text":"Context","hash":"_context","id":1},{"text":"Decision","hash":"_decision","id":2},{"text":"Consequences","hash":"_consequences","id":3},{"text":"Positive","hash":"_positive","id":4},{"text":"Neutral","hash":"_neutral","id":5},{"text":"Negative","hash":"_negative","id":6}]},"12":{"id":12,"text":"Accepted on 2022-01-01 Using a framework will aid in the development of a web application. Ideally, the framework is something we are familiar with already to reduce the severity of the learning curve. We will use Angular for all web application development. Additionally, we will use nvm for managing the desired version of NodeJS. Widely supported and heavily invested in by Google. Focused ecosystem. Good documentation. Code will be written in TypeScript. Karma will be used as the test runner. Jest will be the testing framework. ?","title":"4. Use Angular for Web Applications","component":"acme-adr","version":"","name":"000004-angular","url":"/acme-adr/000004-angular.html","titles":[{"text":"Context","hash":"_context","id":1},{"text":"Decision","hash":"_decision","id":2},{"text":"Consequences","hash":"_consequences","id":3},{"text":"Positive","hash":"_positive","id":4},{"text":"Neutral","hash":"_neutral","id":5},{"text":"Negative","hash":"_negative","id":6}]},"13":{"id":13,"text":"? ? ? ? ? ?","title":"5. Use ORY Kratos for Identity Management","component":"acme-adr","version":"","name":"000005-kratos","url":"/acme-adr/000005-kratos.html","titles":[{"text":"Context","hash":"_context","id":1},{"text":"Decision","hash":"_decision","id":2},{"text":"Consequences","hash":"_consequences","id":3},{"text":"Positive","hash":"_positive","id":4},{"text":"Neutral","hash":"_neutral","id":5},{"text":"Negative","hash":"_negative","id":6}]},"14":{"id":14,"text":"? ? ? ? ? ?","title":"6. Use ORY Keto for Authorization","component":"acme-adr","version":"","name":"000006-keto","url":"/acme-adr/000006-keto.html","titles":[{"text":"Context","hash":"_context","id":1},{"text":"Decision","hash":"_decision","id":2},{"text":"Consequences","hash":"_consequences","id":3},{"text":"Positive","hash":"_positive","id":4},{"text":"Neutral","hash":"_neutral","id":5},{"text":"Negative","hash":"_negative","id":6}]},"15":{"id":15,"text":"? ? ? ? ? ?","title":"7. Use k3d for Local Kubernetes Clusters","component":"acme-adr","version":"","name":"000007-k3d","url":"/acme-adr/000007-k3d.html","titles":[{"text":"Context","hash":"_context","id":1},{"text":"Decision","hash":"_decision","id":2},{"text":"Consequences","hash":"_consequences","id":3},{"text":"Positive","hash":"_positive","id":4},{"text":"Neutral","hash":"_neutral","id":5},{"text":"Negative","hash":"_negative","id":6}]},"16":{"id":16,"text":"? ? ? ? ? ?","title":"8. Use nip.io for Local Domain Names","component":"acme-adr","version":"","name":"000008-nip-io","url":"/acme-adr/000008-nip-io.html","titles":[{"text":"Context","hash":"_context","id":1},{"text":"Decision","hash":"_decision","id":2},{"text":"Consequences","hash":"_consequences","id":3},{"text":"Positive","hash":"_positive","id":4},{"text":"Neutral","hash":"_neutral","id":5},{"text":"Negative","hash":"_negative","id":6}]},"17":{"id":17,"text":"? ? ? ? ? ?","title":"9. Use mkcert to Manage SSL Certs for Local Development","component":"acme-adr","version":"","name":"000009-mkcert","url":"/acme-adr/000009-mkcert.html","titles":[{"text":"Context","hash":"_context","id":1},{"text":"Decision","hash":"_decision","id":2},{"text":"Consequences","hash":"_consequences","id":3},{"text":"Positive","hash":"_positive","id":4},{"text":"Neutral","hash":"_neutral","id":5},{"text":"Negative","hash":"_negative","id":6}]},"18":{"id":18,"text":"? ? ? ? ? ?","title":"10. Use Skaffold for Running the System Locally","component":"acme-adr","version":"","name":"000010-skaffold","url":"/acme-adr/000010-skaffold.html","titles":[{"text":"Context","hash":"_context","id":1},{"text":"Decision","hash":"_decision","id":2},{"text":"Consequences","hash":"_consequences","id":3},{"text":"Positive","hash":"_positive","id":4},{"text":"Neutral","hash":"_neutral","id":5},{"text":"Negative","hash":"_negative","id":6}]},"19":{"id":19,"text":"Decisions that significantly affect the system shall be documented here. Please read the following resources that help explain how to express a decision. ADR = Any Decision Record? Architecture, Design and Beyond by Olaf Zimmermann Documenting Architecture Decisions by Michael Nygard.","title":"Decision Records","component":"acme-adr","version":"","name":"index","url":"/acme-adr/index.html","titles":[]},"20":{"id":20,"text":"This is the architecture","title":"Architecture","component":"acme-web-api","version":"0.1.0","name":"architecture","url":"/acme-web-api/0.1.0/architecture.html","titles":[]},"21":{"id":21,"text":"The acme-web-api module implements a REST API to afford web applications to execute Acme domain commands and query data materialized from domain event handlers.","title":"Overview","component":"acme-web-api","version":"0.1.0","name":"index","url":"/acme-web-api/0.1.0/index.html","titles":[]}},"components":{},"componentVersions":{"ROOT/":{"displayVersion":"default","title":"Explore","version":"","name":"ROOT","asciidoc":{"attributes":{"env":"site","env-site":"","site-gen":"antora","site-gen-antora":"","attribute-missing":"warn","data-uri":null,"icons":"font","sectanchors":"","source-highlighter":"highlight.js","site-title":"Acme","site-url":"https://mattupstate.com/acme","page-component-order":"!ROOT, acme-handbook, acme-adr, *","angular-href":"https://angular.io/","angular-vscode-href":"https://marketplace.visualstudio.com/items?itemName=Angular.ng-template","asciidoc-intellij-href":"https://plugins.jetbrains.com/plugin/7391-asciidoc","bdd-href":"https://cucumber.io/docs/bdd/","c4-model-href":"https://c4model.com/","cert-manager-href":"https://cert-manager.io/","cosmic-python-href":"https://www.cosmicpython.com/book/preface.html","cqrs-href":"https://martinfowler.com/bliki/CQRS.html","ddd-href":"https://en.wikipedia.org/wiki/Domain-driven_design","direnv-href":"https://direnv.net/","docker-engine-href":"https://docs.docker.com/engine/","eslint-vscode-href":"https://marketplace.visualstudio.com/items?itemName=dbaeumer.vscode-eslint","gradle-href":"https://gradle.org/","grafana-href":"https://grafana.com/","hal-href":"http://stateless.co/hal_specification.html","hateos-href":"https://restfulapi.net/hateoas/","helm-href":"https://helm.sh/","homebrew-href":"https://brew.sh","hyperkit-href":"https://github.com/moby/hyperkit","intellij-href":"https://www.jetbrains.com/idea/","jaeger-href":"https://www.jaegertracing.io/","java-jdk-href":"https://openjdk.java.net/projects/jdk/","jib-href":"https://github.com/GoogleContainerTools/jib","jooq-href":"https://www.jooq.org/","k3d-href":"https://k3d.io/","karma-href":"https://karma-runner.github.io/","kotest-href":"https://kotest.io/","kotest-intellij-href":"https://plugins.jetbrains.com/plugin/14080-kotest","kotlin-href":"https://kotlinlang.org/","ktor-href":"https://ktor.io/","kubectl-href":"https://kubernetes.io/docs/tasks/tools/#kubectl","kubernetes-href":"https://kubernetes.io/","kustomize-href":"https://kustomize.io/","lets-encrypt-href":"https://letsencrypt.org/","linkerd-href":"http://linkerd.io/","liquibase-href":"https://liquibase.org/","loki-href":"https://grafana.com/oss/loki/","mailhog-href":"https://github.com/mailhog/MailHog","micrometer-href":"https://micrometer.io/","minikube-href":"https://minikube.sigs.k8s.io/","mkcert-href":"https://github.com/FiloSottile/mkcert","nginx-href":"https://www.nginx.com/","ingress-nginx-href":"https://kubernetes.github.io/ingress-nginx/","ngrx-href":"https://ngrx.io/","nodejs-href":"https://nodejs.org/en/","nsq-href":"https://nsq.io/","nvm-href":"https://github.com/nvm-sh/nvm","oauth2-proxy-href":"https://oauth2-proxy.github.io/oauth2-proxy/","oh-my-zsh-href":"https://ohmyz.sh/","openid-connect-href":"https://openid.net/connect/","opentracing-href":"https://opentracing.io/","ory-keto-href":"https://www.ory.sh/docs/keto","ory-kratos-href":"https://ory.sh/docs/kratos/","ory-oathkeeper-href":"https://www.ory.sh/docs/oathkeeper","postgresql-href":"https://www.postgresql.org/","prometheus-href":"https://prometheus.io/","promtail-href":"https://github.com/grafana/loki/tree/master/docs/clients/promtail","rancher-desktop-href":"https://rancherdesktop.io/","sdkman-href":"https://sdkman.io/","sealed-secrets-href":"https://github.com/bitnami-labs/sealed-secrets","selenium-href":"https://www.selenium.dev/","serenity-href":"https://serenity-bdd.github.io/theserenitybook/latest/index.html","screenplay-href":"https://serenity-bdd.github.io/theserenitybook/latest/serenity-screenplay.html","skaffold-href":"https://skaffold.dev/","sops-href":"https://github.com/mozilla/sops","terraform-href":"https://www.terraform.io/","test-containers-href":"https://www.testcontainers.org/","typescript-href":"https://typescriptlang.org/","virtualbox-href":"https://www.virtualbox.org/","vnd-error-href":"https://github.com/blongden/vnd.error","vscode-href":"https://code.visualstudio.com/"},"sourcemap":false,"extensions":[{}]},"url":"/index.html"},"acme-handbook/":{"displayVersion":"default","title":"Handbook","version":"","name":"acme-handbook","asciidoc":{"attributes":{"env":"site","env-site":"","site-gen":"antora","site-gen-antora":"","attribute-missing":"warn","data-uri":null,"icons":"font","sectanchors":"","source-highlighter":"highlight.js","site-title":"Acme","site-url":"https://mattupstate.com/acme","page-component-order":"!ROOT, acme-handbook, acme-adr, *","angular-href":"https://angular.io/","angular-vscode-href":"https://marketplace.visualstudio.com/items?itemName=Angular.ng-template","asciidoc-intellij-href":"https://plugins.jetbrains.com/plugin/7391-asciidoc","bdd-href":"https://cucumber.io/docs/bdd/","c4-model-href":"https://c4model.com/","cert-manager-href":"https://cert-manager.io/","cosmic-python-href":"https://www.cosmicpython.com/book/preface.html","cqrs-href":"https://martinfowler.com/bliki/CQRS.html","ddd-href":"https://en.wikipedia.org/wiki/Domain-driven_design","direnv-href":"https://direnv.net/","docker-engine-href":"https://docs.docker.com/engine/","eslint-vscode-href":"https://marketplace.visualstudio.com/items?itemName=dbaeumer.vscode-eslint","go-task-href":"https://taskfile.dev","gradle-href":"https://gradle.org/","grafana-href":"https://grafana.com/","hal-href":"http://stateless.co/hal_specification.html","hateos-href":"https://restfulapi.net/hateoas/","helm-href":"https://helm.sh/","homebrew-href":"https://brew.sh","hyperkit-href":"https://github.com/moby/hyperkit","intellij-href":"https://www.jetbrains.com/idea/","jaeger-href":"https://www.jaegertracing.io/","java-jdk-href":"https://openjdk.java.net/projects/jdk/","jib-href":"https://github.com/GoogleContainerTools/jib","jooq-href":"https://www.jooq.org/","jq-href":"https://stedolan.github.io/jq/","k3d-href":"https://k3d.io/","karma-href":"https://karma-runner.github.io/","kotest-href":"https://kotest.io/","kotest-intellij-href":"https://plugins.jetbrains.com/plugin/14080-kotest","kotlin-href":"https://kotlinlang.org/","ktor-href":"https://ktor.io/","kubectl-href":"https://kubernetes.io/docs/tasks/tools/#kubectl","kubernetes-href":"https://kubernetes.io/","kustomize-href":"https://kustomize.io/","lets-encrypt-href":"https://letsencrypt.org/","linkerd-href":"http://linkerd.io/","liquibase-href":"https://liquibase.org/","loki-href":"https://grafana.com/oss/loki/","mailhog-href":"https://github.com/mailhog/MailHog","micrometer-href":"https://micrometer.io/","minikube-href":"https://minikube.sigs.k8s.io/","mkcert-href":"https://github.com/FiloSottile/mkcert","nginx-href":"https://www.nginx.com/","ingress-nginx-href":"https://kubernetes.github.io/ingress-nginx/","ngrx-href":"https://ngrx.io/","nodejs-href":"https://nodejs.org/en/","nsq-href":"https://nsq.io/","nvm-href":"https://github.com/nvm-sh/nvm","oauth2-proxy-href":"https://oauth2-proxy.github.io/oauth2-proxy/","oh-my-zsh-href":"https://ohmyz.sh/","openid-connect-href":"https://openid.net/connect/","opentracing-href":"https://opentracing.io/","ory-keto-href":"https://www.ory.sh/docs/keto","ory-kratos-href":"https://ory.sh/docs/kratos/","ory-oathkeeper-href":"https://www.ory.sh/docs/oathkeeper","postgresql-href":"https://www.postgresql.org/","prometheus-href":"https://prometheus.io/","promtail-href":"https://github.com/grafana/loki/tree/master/docs/clients/promtail","rancher-desktop-href":"https://rancherdesktop.io/","sdkman-href":"https://sdkman.io/","sealed-secrets-href":"https://github.com/bitnami-labs/sealed-secrets","selenium-href":"https://www.selenium.dev/","serenity-href":"https://serenity-bdd.github.io/theserenitybook/latest/index.html","screenplay-href":"https://serenity-bdd.github.io/theserenitybook/latest/serenity-screenplay.html","skaffold-href":"https://skaffold.dev/","sops-href":"https://github.com/mozilla/sops","terraform-href":"https://www.terraform.io/","test-containers-href":"https://www.testcontainers.org/","typescript-href":"https://typescriptlang.org/","virtualbox-href":"https://www.virtualbox.org/","vnd-error-href":"https://github.com/blongden/vnd.error","vscode-href":"https://code.visualstudio.com/"},"sourcemap":false,"extensions":[{}]},"url":"/acme-handbook/index.html","navigation":[{"items":[{"content":"Setup","url":"/acme-handbook/setup.html","urlType":"internal"},{"content":"Meta","url":"/acme-handbook/meta.html","urlType":"internal"},{"content":"Architecture","url":"/acme-handbook/architecture.html","urlType":"internal"},{"content":"Tips & Tricks","url":"/acme-handbook/tips.html","urlType":"internal"}],"root":true,"order":0}]},"acme-adr/":{"displayVersion":"default","title":"Decision Records","version":"","name":"acme-adr","asciidoc":{"attributes":{"env":"site","env-site":"","site-gen":"antora","site-gen-antora":"","attribute-missing":"warn","data-uri":null,"icons":"font","sectanchors":"","source-highlighter":"highlight.js","site-title":"Acme","site-url":"https://mattupstate.com/acme","page-component-order":"!ROOT, acme-handbook, acme-adr, *"},"sourcemap":false,"extensions":[{}]},"url":"/acme-adr/index.html","navigation":[{"items":[{"content":"1. Documentation using Antora","url":"/acme-adr/000000-antora.html","urlType":"internal"},{"content":"2. Use Kotlin for Domain Modeling and Business Logic","url":"/acme-adr/000001-kotlin.html","urlType":"internal"},{"content":"2. Use PostgreSQL for Persistence","url":"/acme-adr/000002-postgresql.html","urlType":"internal"},{"content":"3. Use Ktor for HTTP APIs","url":"/acme-adr/000003-ktor.html","urlType":"internal"},{"content":"4. Use Angular for Web Applications","url":"/acme-adr/000004-angular.html","urlType":"internal"},{"content":"5. Use ORY Kratos for Identity Management","url":"/acme-adr/000005-kratos.html","urlType":"internal"},{"content":"6. Use ORY Keto for Authorization","url":"/acme-adr/000006-keto.html","urlType":"internal"},{"content":"7. Use k3d for Local Kubernetes Clusters","url":"/acme-adr/000007-k3d.html","urlType":"internal"},{"content":"8. Use nip.io for Local Domain Names","url":"/acme-adr/000008-nip-io.html","urlType":"internal"},{"content":"9. Use mkcert to Manage SSL Certs for Local Development","url":"/acme-adr/000009-mkcert.html","urlType":"internal"},{"content":"10. Use Skaffold for Running the System Locally","url":"/acme-adr/000010-skaffold.html","urlType":"internal"}],"root":true,"order":0}]},"acme-web-api/0.1.0":{"displayVersion":"0.1.0","title":"acme-web-api","version":"0.1.0","name":"acme-web-api","asciidoc":{"attributes":{"env":"site","env-site":"","site-gen":"antora","site-gen-antora":"","attribute-missing":"warn","data-uri":null,"icons":"font","sectanchors":"","source-highlighter":"highlight.js","site-title":"Acme","site-url":"https://mattupstate.com/acme","page-component-order":"!ROOT, acme-handbook, acme-adr, *"},"sourcemap":false,"extensions":[{}]},"url":"/acme-web-api/0.1.0/index.html","navigation":[{"items":[{"content":"Architecture","url":"/acme-web-api/0.1.0/architecture.html","urlType":"internal"}],"root":true,"order":0}]}}}})
\ No newline at end of file
+antoraSearch.initSearch(lunr, {"index":{"version":"2.3.9","fields":["title","name","text","component"],"fieldVectors":[["title/1",[0,52.726]],["name/1",[1,1.557]],["text/1",[2,0.244,3,0.659,4,1.549,5,0.659,6,0.659,7,0.583,8,0.72,9,1.109,10,1.235,11,0.659,12,0.667,13,0.929,14,0.659,15,0.659,16,0.659,17,0.659,18,0.496,19,1.092,20,0.583,21,0.496,22,0.999,23,0.999,24,0.977,25,0.583,26,0.42,27,0.659,28,0.583,29,0.659,30,0.583,31,0.659,32,0.533,33,0.441,34,0.659,35,0.659,36,0.659,37,0.583,38,0.898,39,0.583,40,0.659,41,0.659,42,0.466,43,0.533,44,0.496,45,0.466,46,1.231,47,0.533,48,0.659,49,1.235,50,0.659,51,0.466,52,0.583,53,0.659,54,0.622,55,0.466,56,0.659,57,0.659,58,0.659,59,0.583,60,0.583,61,0.583,62,0.659,63,0.659,64,0.999,65,0.533,66,0.659,67,0.659,68,0.533,69,0.533,70,0.659,71,0.659,72,0.583,73,0.659,74,0.659,75,0.583,76,0.466,77,0.583,78,0.583,79,0.659,80,0.42,81,0.659,82,0.659,83,0.659,84,0.659,85,0.659,86,0.929,87,0.659,88,0.659,89,0.533,90,0.659,91,0.659,92,0.659,93,0.659,94,0.496,95,0.583,96,0.659,97,0.496,98,0.466,99,0.533,100,0.533,101,0.659,102,0.496,103,0.583,104,0.332,105,0.583,106,0.441,107,0.659,108,0.583,109,0.659,110,0.659,111,0.659,112,0.659,113,0.659,114,0.659,115,0.659,116,0.659,117,0.659,118,0.659,119,0.659,120,0.466,121,0.659,122,0.583,123,0.659,124,0.659,125,0.42,126,0.583,127,0.496,128,0.659,129,0.496,130,0.42,131,0.466]],["component/1",[132,2.202]],["title/2-1",[133,46.647]],["name/2-1",[]],["text/2-1",[]],["component/2-1",[]],["title/2-2",[129,30.576,130,25.889]],["name/2-2",[]],["text/2-2",[]],["component/2-2",[]],["title/2-3",[131,28.735,134,21.202]],["name/2-3",[]],["text/2-3",[]],["component/2-3",[]],["title/2-4",[26,21.067,131,23.383,135,29.27]],["name/2-4",[]],["text/2-4",[]],["component/2-4",[]],["title/2-5",[80,17.759,131,19.711,136,22.556,137,24.674]],["name/2-5",[]],["text/2-5",[]],["component/2-5",[]],["title/2",[12,28.487]],["name/2",[12,1.118]],["text/2",[12,2.209,19,2.288,22,2.092,23,2.092,26,3.228,33,1.731,38,1.06,55,1.828,61,2.288,129,1.945,130,1.647,138,2.288,139,2.587,140,2.587,141,2.288,142,2.587,143,2.587,144,4.088,145,1.945,146,2.587,147,2.587,148,2.587,149,2.587,150,2.288]],["component/2",[2,0.552,151,0.998]],["title/3-1",[24,22.801,76,28.735]],["name/3-1",[]],["text/3-1",[]],["component/3-1",[]],["title/3-2",[152,28.735,153,25.889]],["name/3-2",[]],["text/3-2",[]],["component/3-2",[]],["title/3",[154,52.726]],["name/3",[1,1.557]],["text/3",[2,0.892,4,0.681,9,0.614,18,0.725,24,0.984,26,0.614,33,1.173,54,1.95,76,1.239,102,1.319,104,1.95,120,0.681,132,1.552,152,3.423,153,1.537,155,0.852,156,0.964,157,0.852,158,0.725,159,0.779,160,0.779,161,0.779,162,1.418,163,0.964,164,0.964,165,2.973,166,0.681,167,1.754,168,1.552,169,1.552,170,1.552,171,2.413,172,1.537,173,0.964,174,0.964,175,0.964,176,0.681,177,1.754,178,0.964,179,0.964,180,0.614,181,0.779,182,0.852,183,0.964,184,1.754,185,0.964,186,0.852,187,0.586,188,0.779,189,0.964,190,0.964,191,0.964,192,0.964,193,0.964,194,0.964,195,0.852,196,0.964,197,0.964,198,0.964]],["component/3",[2,0.552,151,0.998]],["title/4-1",[199,46.647]],["name/4-1",[]],["text/4-1",[]],["component/4-1",[]],["title/4-2",[200,46.647]],["name/4-2",[]],["text/4-2",[]],["component/4-2",[]],["title/4-3",[8,23.72,201,35.97]],["name/4-3",[]],["text/4-3",[]],["component/4-3",[]],["title/4",[202,46.647]],["name/4",[202,1.831]],["text/4",[7,0.79,8,1.322,9,0.569,21,0.672,25,0.79,37,0.79,38,0.366,42,0.631,78,0.79,104,0.825,130,0.569,145,0.672,159,0.723,166,0.631,180,0.569,187,1.378,195,0.79,199,1.448,200,1.448,201,0.79,203,1.231,204,0.893,205,1.448,206,0.893,207,0.893,208,0.893,209,0.893,210,0.79,211,0.79,212,0.893,213,0.893,214,0.893,215,0.893,216,1.637,217,0.893,218,0.893,219,0.893,220,1.637,221,0.893,222,0.893,223,0.893,224,0.893,225,1.442,226,0.893,227,1.637,228,0.723,229,0.893,230,0.893,231,0.893,232,0.893,233,1.637,234,0.893,235,0.893,236,0.893,237,0.893,238,0.79,239,0.893,240,0.893,241,0.893,242,0.893,243,0.893,244,0.893,245,0.893,246,1.637,247,0.79,248,0.79,249,0.79,250,0.723,251,0.79,252,1.637,253,0.893,254,0.893,255,0.723,256,0.893,257,0.79,258,0.893,259,0.569,260,0.893,261,0.893,262,0.79,263,0.893,264,0.893,265,0.893,266,0.893,267,0.672,268,0.893,269,0.79,270,0.893,271,0.893,272,0.893,273,0.723,274,0.893]],["component/4",[2,0.552,151,0.998]],["title/5-1",[18,30.576,275,40.657]],["name/5-1",[]],["text/5-1",[]],["component/5-1",[]],["title/5-2",[94,30.576,276,27.202]],["name/5-2",[]],["text/5-2",[]],["component/5-2",[]],["title/5-3",[97,30.576,98,28.735]],["name/5-3",[]],["text/5-3",[]],["component/5-3",[]],["title/5-4",[120,28.735,276,27.202]],["name/5-4",[]],["text/5-4",[]],["component/5-4",[]],["title/5-5",[277,46.647]],["name/5-5",[]],["text/5-5",[]],["component/5-5",[]],["title/5-6",[94,30.576,98,28.735]],["name/5-6",[]],["text/5-6",[]],["component/5-6",[]],["title/5-7",[97,30.576,98,28.735]],["name/5-7",[]],["text/5-7",[]],["component/5-7",[]],["title/5-8",[278,46.647]],["name/5-8",[]],["text/5-8",[]],["component/5-8",[]],["title/5-9",[99,42.643]],["name/5-9",[]],["text/5-9",[]],["component/5-9",[]],["title/5-10",[279,39.652]],["name/5-10",[]],["text/5-10",[]],["component/5-10",[]],["title/5-11",[280,52.726]],["name/5-11",[]],["text/5-11",[]],["component/5-11",[]],["title/5-12",[21,30.576,281,30.576]],["name/5-12",[]],["text/5-12",[]],["component/5-12",[]],["title/5-13",[282,37.264]],["name/5-13",[]],["text/5-13",[]],["component/5-13",[]],["title/5-14",[283,39.652]],["name/5-14",[]],["text/5-14",[]],["component/5-14",[]],["title/5-15",[187,20.132,284,24.881,285,24.881]],["name/5-15",[]],["text/5-15",[]],["component/5-15",[]],["title/5-16",[282,37.264]],["name/5-16",[]],["text/5-16",[]],["component/5-16",[]],["title/5-17",[283,39.652]],["name/5-17",[]],["text/5-17",[]],["component/5-17",[]],["title/5-18",[250,32.882,286,35.97]],["name/5-18",[]],["text/5-18",[]],["component/5-18",[]],["title/5",[158,39.652]],["name/5",[158,1.557]],["text/5",[2,0.11,4,0.594,8,1.462,9,1.248,20,0.511,21,0.224,24,0.167,26,0.368,28,0.263,33,1.44,38,0.447,39,0.511,42,0.21,43,0.241,46,0.21,54,0.78,55,0.21,68,0.241,75,0.263,86,0.632,89,0.467,94,1.474,95,0.263,97,1.164,98,1.889,99,0.467,104,0.15,106,0.199,120,1.772,122,0.263,125,0.368,135,0.744,137,0.263,141,0.744,145,0.224,152,1.386,153,0.844,155,0.744,157,0.263,158,0.224,159,0.241,160,2.027,161,0.241,162,0.881,168,0.263,176,0.21,181,1.072,182,0.511,186,0.511,187,0.351,188,0.467,203,0.224,211,0.744,228,0.241,247,0.263,248,0.263,250,0.68,259,0.694,262,0.511,267,0.434,273,0.241,276,0.729,277,0.263,278,0.263,279,0.434,281,0.632,282,1.094,283,1.164,284,0.434,285,0.434,286,0.263,287,0.841,288,0.263,289,0.297,290,0.297,291,0.297,292,0.297,293,0.881,294,0.577,295,0.841,296,0.297,297,0.297,298,0.263,299,0.257,300,0.297,301,0.297,302,0.241,303,0.297,304,0.297,305,0.297,306,0.511,307,0.297,308,0.297,309,0.297,310,0.263,311,0.297,312,0.297,313,0.744,314,0.297,315,0.263,316,0.964,317,0.297,318,0.263,319,0.841,320,0.964,321,0.577,322,0.577,323,0.263,324,0.297,325,0.297,326,0.241,327,0.297,328,0.263,329,0.297,330,0.297,331,0.577,332,0.297,333,0.297,334,0.297,335,0.297,336,0.577,337,0.297,338,0.297,339,0.297,340,0.297,341,0.263,342,0.297,343,0.577,344,0.467,345,0.297,346,0.224,347,0.297,348,0.297,349,0.241,350,0.297,351,0.297,352,0.263,353,0.297,354,0.297,355,0.241,356,0.263,357,0.297,358,0.224,359,0.297,360,0.297,361,0.297,362,0.263,363,0.297,364,0.632,365,1.173,366,0.297,367,0.297,368,0.297,369,0.297,370,0.297,371,0.297,372,0.297,373,0.841,374,0.297,375,0.297,376,0.297,377,0.263,378,0.297,379,0.577,380,0.511,381,0.577,382,0.297,383,0.297,384,0.297,385,0.297,386,0.241,387,0.511,388,0.241,389,0.263,390,0.297,391,0.297,392,0.297,393,0.297]],["component/5",[2,0.552,151,0.998]],["title/6-1",[9,33.574]],["name/6-1",[]],["text/6-1",[]],["component/6-1",[]],["title/6-2",[106,35.277]],["name/6-2",[]],["text/6-2",[]],["component/6-2",[]],["title/6-3",[104,20.495,394,40.657]],["name/6-3",[]],["text/6-3",[]],["component/6-3",[]],["title/6-4",[24,29.57]],["name/6-4",[]],["text/6-4",[]],["component/6-4",[]],["title/6-5",[104,20.495,395,35.97]],["name/6-5",[]],["text/6-5",[]],["component/6-5",[]],["title/6-6",[396,52.726]],["name/6-6",[]],["text/6-6",[]],["component/6-6",[]],["title/6-7",[397,52.726]],["name/6-7",[]],["text/6-7",[]],["component/6-7",[]],["title/6-8",[104,16.678,249,43.706]],["name/6-8",[]],["text/6-8",[]],["component/6-8",[]],["title/6",[104,26.579]],["name/6",[104,1.043]],["text/6",[24,1.272,45,1.603,51,1.603,52,2.007,104,2.961,106,1.518,187,1.38,203,4.417,205,3.256,225,1.444,395,4.108,398,2.268,399,2.268,400,2.268,401,2.268,402,5.874,403,2.268,404,2.268,405,2.268]],["component/6",[2,0.552,151,0.998]],["title/7-1",[281,39.652]],["name/7-1",[]],["text/7-1",[]],["component/7-1",[]],["title/7-2",[187,20.132,284,24.881,285,24.881]],["name/7-2",[]],["text/7-2",[]],["component/7-2",[]],["title/7",[54,16.678,406,29.27,407,33.084]],["name/7",[406,1.831]],["text/7",[8,0.887,104,1.752,106,1.017,152,3.622,160,1.229,170,1.345,176,1.074,180,0.968,187,0.925,238,1.345,281,1.143,282,1.074,283,2.614,284,1.143,285,1.143,318,1.345,320,1.345,346,1.143,349,1.229,352,2.327,364,1.143,386,2.127,387,1.345,408,1.52,409,3.476,410,3.476,411,1.52,412,1.52,413,1.52,414,1.52,415,2.63,416,2.63,417,1.52,418,3.476,419,2.63,420,1.52,421,1.52,422,1.52]],["component/7",[2,0.552,151,0.998]],["title/8-1",[134,27.495]],["name/8-1",[]],["text/8-1",[]],["component/8-1",[]],["title/8-2",[299,23.491]],["name/8-2",[]],["text/8-2",[]],["component/8-2",[]],["title/8-3",[423,28.487]],["name/8-3",[]],["text/8-3",[]],["component/8-3",[]],["title/8-4",[424,28.487]],["name/8-4",[]],["text/8-4",[]],["component/8-4",[]],["title/8-5",[425,28.487]],["name/8-5",[]],["text/8-5",[]],["component/8-5",[]],["title/8-6",[426,28.487]],["name/8-6",[]],["text/8-6",[]],["component/8-6",[]],["title/8",[38,11.43,125,17.759,127,20.975,323,24.674]],["name/8",[127,0.903,427,1.201]],["text/8",[4,0.891,9,0.802,38,0.516,42,0.891,60,1.115,86,0.948,125,2.644,126,1.115,127,2.731,129,0.948,130,0.802,131,0.891,145,0.948,166,1.577,188,1.019,210,1.115,259,0.802,267,0.948,269,1.115,293,1.805,299,0.561,306,1.115,328,1.115,346,1.678,349,1.019,380,1.115,386,1.019,389,1.974,428,0.891,429,0.891,430,1.577,431,1.019,432,1.26,433,1.26,434,1.115,435,1.26,436,2.232,437,1.26,438,1.26,439,1.019,440,2.232,441,2.232,442,1.115,443,1.26,444,1.115,445,1.115,446,1.26,447,1.26,448,1.26,449,1.26,450,1.26,451,1.115,452,1.26,453,1.26,454,1.26,455,1.115,456,1.26,457,1.26]],["component/8",[2,0.552,458,0.752]],["title/9-1",[134,27.495]],["name/9-1",[]],["text/9-1",[]],["component/9-1",[]],["title/9-2",[299,23.491]],["name/9-2",[]],["text/9-2",[]],["component/9-2",[]],["title/9-3",[423,28.487]],["name/9-3",[]],["text/9-3",[]],["component/9-3",[]],["title/9-4",[424,28.487]],["name/9-4",[]],["text/9-4",[]],["component/9-4",[]],["title/9-5",[425,28.487]],["name/9-5",[]],["text/9-5",[]],["component/9-5",[]],["title/9-6",[426,28.487]],["name/9-6",[]],["text/9-6",[]],["component/9-6",[]],["title/9",[24,10.633,38,7.77,130,12.073,136,15.334,225,12.073,326,15.334,439,15.334]],["name/9",[24,0.673,459,1.201]],["text/9",[4,0.669,8,0.553,9,1.515,12,0.933,13,1.298,22,0.766,23,0.766,24,2.529,32,0.766,33,0.634,38,1.202,42,1.681,44,0.712,77,0.838,86,1.298,89,0.766,104,1.199,105,0.838,106,0.634,130,0.603,136,0.766,166,0.669,176,0.669,180,1.099,203,0.712,225,0.603,255,0.766,259,1.515,273,0.766,299,0.769,313,0.838,355,0.766,358,0.712,364,0.712,388,0.766,428,0.669,429,0.669,430,1.22,431,1.396,439,0.766,451,0.838,460,0.838,461,0.947,462,0.947,463,0.947,464,0.947,465,0.838,466,0.947,467,0.947,468,0.947,469,0.947,470,0.838,471,0.947,472,0.947,473,0.947,474,0.766,475,0.947,476,0.838,477,0.838,478,0.947,479,0.947,480,0.947,481,0.947,482,0.947,483,0.712,484,0.947,485,0.947,486,0.947,487,0.947,488,0.947,489,1.726,490,0.712,491,0.947,492,0.947,493,0.947,494,0.838]],["component/9",[2,0.552,458,0.752]],["title/10-1",[134,27.495]],["name/10-1",[]],["text/10-1",[]],["component/10-1",[]],["title/10-2",[299,23.491]],["name/10-2",[]],["text/10-2",[]],["component/10-2",[]],["title/10-3",[423,28.487]],["name/10-3",[]],["text/10-3",[]],["component/10-3",[]],["title/10-4",[424,28.487]],["name/10-4",[]],["text/10-4",[]],["component/10-4",[]],["title/10-5",[425,28.487]],["name/10-5",[]],["text/10-5",[]],["component/10-5",[]],["title/10-6",[426,28.487]],["name/10-6",[]],["text/10-6",[]],["component/10-6",[]],["title/10",[38,11.43,51,19.711,326,22.556,495,24.674]],["name/10",[51,0.849,496,1.201]],["text/10",[12,0.713,13,0.993,18,0.993,30,1.168,38,1.277,47,1.881,51,1.644,54,0.666,55,0.933,72,2.057,125,0.841,166,0.933,180,1.984,225,1.984,228,1.068,251,1.168,255,1.068,259,1.481,267,0.993,299,0.588,315,1.168,355,1.068,356,1.168,358,0.993,362,1.168,428,0.933,429,0.933,430,1.644,444,1.168,465,1.168,483,0.993,494,1.168,495,3.322,497,2.325,498,3.116,499,3.116,500,1.32,501,1.32,502,1.32,503,1.32,504,1.32,505,1.32,506,1.32,507,1.32,508,1.32,509,1.168,510,1.32,511,1.32,512,1.32,513,1.32]],["component/10",[2,0.552,458,0.752]],["title/11-1",[134,27.495]],["name/11-1",[]],["text/11-1",[]],["component/11-1",[]],["title/11-2",[299,23.491]],["name/11-2",[]],["text/11-2",[]],["component/11-2",[]],["title/11-3",[423,28.487]],["name/11-3",[]],["text/11-3",[]],["component/11-3",[]],["title/11-4",[424,28.487]],["name/11-4",[]],["text/11-4",[]],["component/11-4",[]],["title/11-5",[425,28.487]],["name/11-5",[]],["text/11-5",[]],["component/11-5",[]],["title/11-6",[426,28.487]],["name/11-6",[]],["text/11-6",[]],["component/11-6",[]],["title/11",[38,9.879,45,17.036,80,15.349,344,19.495,514,24.105]],["name/11",[45,0.849,515,1.201]],["text/11",[8,2.071,12,0.844,13,1.175,24,1.991,38,1.455,44,2.67,45,1.105,76,1.105,80,2.261,172,0.995,176,1.105,180,0.995,259,0.995,282,1.105,288,1.383,293,2.179,316,1.383,344,2.871,364,1.175,377,1.383,428,1.105,429,1.105,430,1.904,442,2.383,445,2.383,474,1.264,483,1.175,516,1.383,517,2.694,518,1.563,519,1.563,520,1.563,521,1.563,522,1.563,523,1.563,524,1.563,525,1.563,526,1.563,527,1.563]],["component/11",[2,0.552,458,0.752]],["title/12-1",[134,27.495]],["name/12-1",[]],["text/12-1",[]],["component/12-1",[]],["title/12-2",[299,23.491]],["name/12-2",[]],["text/12-2",[]],["component/12-2",[]],["title/12-3",[423,28.487]],["name/12-3",[]],["text/12-3",[]],["component/12-3",[]],["title/12-4",[424,28.487]],["name/12-4",[]],["text/12-4",[]],["component/12-4",[]],["title/12-5",[425,28.487]],["name/12-5",[]],["text/12-5",[]],["component/12-5",[]],["title/12-6",[426,28.487]],["name/12-6",[]],["text/12-6",[]],["component/12-6",[]],["title/12",[38,9.879,46,17.036,172,15.349,490,18.128,528,24.105]],["name/12",[46,0.849,529,1.201]],["text/12",[8,1.674,32,1.36,38,1.817,43,1.36,44,2.821,46,1.189,54,0.848,104,1.446,108,1.488,125,1.071,172,1.827,180,1.071,187,1.023,259,1.071,276,1.125,358,1.265,365,1.488,388,1.36,428,1.189,429,1.189,430,2.027,431,1.36,434,1.488,455,1.488,470,1.488,474,1.36,476,1.488,477,1.488,483,1.265,490,2.157,516,1.488,530,1.682,531,1.682,532,1.682,533,1.682,534,1.682,535,1.682,536,1.682,537,1.682,538,1.682,539,1.682]],["component/12",[2,0.552,458,0.752]],["title/13-1",[134,27.495]],["name/13-1",[]],["text/13-1",[]],["component/13-1",[]],["title/13-2",[299,23.491]],["name/13-2",[]],["text/13-2",[]],["component/13-2",[]],["title/13-3",[423,28.487]],["name/13-3",[]],["text/13-3",[]],["component/13-3",[]],["title/13-4",[424,28.487]],["name/13-4",[]],["text/13-4",[]],["component/13-4",[]],["title/13-5",[425,28.487]],["name/13-5",[]],["text/13-5",[]],["component/13-5",[]],["title/13-6",[426,28.487]],["name/13-6",[]],["text/13-6",[]],["component/13-6",[]],["title/13",[38,8.698,64,17.166,65,17.166,276,14.201,540,21.225,541,21.225]],["name/13",[65,0.971,542,1.201]],["text/13",[54,4.317]],["component/13",[2,0.552,458,0.752]],["title/14-1",[134,27.495]],["name/14-1",[]],["text/14-1",[]],["component/14-1",[]],["title/14-2",[299,23.491]],["name/14-2",[]],["text/14-2",[]],["component/14-2",[]],["title/14-3",[423,28.487]],["name/14-3",[]],["text/14-3",[]],["component/14-3",[]],["title/14-4",[424,28.487]],["name/14-4",[]],["text/14-4",[]],["component/14-4",[]],["title/14-5",[425,28.487]],["name/14-5",[]],["text/14-5",[]],["component/14-5",[]],["title/14-6",[426,28.487]],["name/14-6",[]],["text/14-6",[]],["component/14-6",[]],["title/14",[38,9.879,64,19.495,68,19.495,69,19.495,543,24.105]],["name/14",[69,0.971,544,1.201]],["text/14",[54,4.317]],["component/14",[2,0.552,458,0.752]],["title/15-1",[134,27.495]],["name/15-1",[]],["text/15-1",[]],["component/15-1",[]],["title/15-2",[299,23.491]],["name/15-2",[]],["text/15-2",[]],["component/15-2",[]],["title/15-3",[423,28.487]],["name/15-3",[]],["text/15-3",[]],["component/15-3",[]],["title/15-4",[424,28.487]],["name/15-4",[]],["text/15-4",[]],["component/15-4",[]],["title/15-5",[425,28.487]],["name/15-5",[]],["text/15-5",[]],["component/15-5",[]],["title/15-6",[426,28.487]],["name/15-6",[]],["text/15-6",[]],["component/15-6",[]],["title/15",[38,8.698,120,15.001,153,13.515,181,17.166,279,15.962,545,21.225]],["name/15",[279,0.903,546,1.201]],["text/15",[54,4.317]],["component/15",[2,0.552,458,0.752]],["title/16-1",[134,27.495]],["name/16-1",[]],["text/16-1",[]],["component/16-1",[]],["title/16-2",[299,23.491]],["name/16-2",[]],["text/16-2",[]],["component/16-2",[]],["title/16-3",[423,28.487]],["name/16-3",[]],["text/16-3",[]],["component/16-3",[]],["title/16-4",[424,28.487]],["name/16-4",[]],["text/16-4",[]],["component/16-4",[]],["title/16-5",[425,28.487]],["name/16-5",[]],["text/16-5",[]],["component/16-5",[]],["title/16-6",[426,28.487]],["name/16-6",[]],["text/16-6",[]],["component/16-6",[]],["title/16",[38,8.698,103,18.778,153,13.515,169,18.778,225,13.515,547,21.225]],["name/16",[548,0.846,549,0.846,550,0.846]],["text/16",[54,4.317]],["component/16",[2,0.552,458,0.752]],["title/17-1",[134,27.495]],["name/17-1",[]],["text/17-1",[]],["component/17-1",[]],["title/17-2",[299,23.491]],["name/17-2",[]],["text/17-2",[]],["component/17-2",[]],["title/17-3",[423,28.487]],["name/17-3",[]],["text/17-3",[]],["component/17-3",[]],["title/17-4",[424,28.487]],["name/17-4",[]],["text/17-4",[]],["component/17-4",[]],["title/17-5",[425,28.487]],["name/17-5",[]],["text/17-5",[]],["component/17-5",[]],["title/17-6",[426,28.487]],["name/17-6",[]],["text/17-6",[]],["component/17-6",[]],["title/17",[8,9.994,38,7.021,100,13.855,153,10.908,276,11.461,551,17.131,552,17.131,553,17.131]],["name/17",[100,0.971,554,1.201]],["text/17",[54,4.317]],["component/17",[2,0.552,458,0.752]],["title/18-1",[134,27.495]],["name/18-1",[]],["text/18-1",[]],["component/18-1",[]],["title/18-2",[299,23.491]],["name/18-2",[]],["text/18-2",[]],["component/18-2",[]],["title/18-3",[423,28.487]],["name/18-3",[]],["text/18-3",[]],["component/18-3",[]],["title/18-4",[424,28.487]],["name/18-4",[]],["text/18-4",[]],["component/18-4",[]],["title/18-5",[425,28.487]],["name/18-5",[]],["text/18-5",[]],["component/18-5",[]],["title/18-6",[426,28.487]],["name/18-6",[]],["text/18-6",[]],["component/18-6",[]],["title/18",[26,13.515,38,8.698,102,15.962,152,15.001,153,13.515,555,21.225]],["name/18",[102,0.903,556,1.201]],["text/18",[54,4.317]],["component/18",[2,0.552,458,0.752]],["title/19",[299,18.114,302,32.882]],["name/19",[1,1.557]],["text/19",[12,2.169,26,1.609,33,1.691,54,1.274,55,1.786,125,2.556,138,2.236,150,2.236,257,2.236,298,2.236,299,2.534,302,2.044,341,2.236,458,1.274,557,2.527,558,2.527,559,2.527,560,2.527,561,2.527,562,2.527,563,2.527,564,2.527,565,2.527,566,2.527]],["component/19",[2,0.552,458,0.752]],["title/20",[12,28.487]],["name/20",[12,1.118]],["text/20",[12,3.794]],["component/20",[2,0.394,80,0.678,172,0.678]],["title/21",[133,46.647]],["name/21",[1,1.557]],["text/21",[2,1.773,47,2.574,59,2.815,76,2.249,80,3.055,161,2.574,162,2.574,172,3.055,225,3.055,310,2.815,346,2.393,460,2.815,490,2.393,509,2.815,567,3.182,568,3.182]],["component/21",[2,0.394,80,0.678,172,0.678]]],"invertedIndex":[["",{"_index":54,"title":{"7":{}},"name":{},"text":{"1":{},"3":{},"5":{},"10":{},"12":{},"13":{},"14":{},"15":{},"16":{},"17":{},"18":{},"19":{}},"component":{}}],["000000",{"_index":427,"title":{},"name":{"8":{}},"text":{},"component":{}}],["000001",{"_index":459,"title":{},"name":{"9":{}},"text":{},"component":{}}],["000002",{"_index":496,"title":{},"name":{"10":{}},"text":{},"component":{}}],["000003",{"_index":515,"title":{},"name":{"11":{}},"text":{},"component":{}}],["000004",{"_index":529,"title":{},"name":{"12":{}},"text":{},"component":{}}],["000005",{"_index":542,"title":{},"name":{"13":{}},"text":{},"component":{}}],["000006",{"_index":544,"title":{},"name":{"14":{}},"text":{},"component":{}}],["000007",{"_index":546,"title":{},"name":{"15":{}},"text":{},"component":{}}],["000008",{"_index":548,"title":{},"name":{"16":{}},"text":{},"component":{}}],["000009",{"_index":554,"title":{},"name":{"17":{}},"text":{},"component":{}}],["000010",{"_index":556,"title":{},"name":{"18":{}},"text":{},"component":{}}],["01",{"_index":430,"title":{},"name":{},"text":{"8":{},"9":{},"10":{},"11":{},"12":{}},"component":{}}],["1",{"_index":323,"title":{"8":{}},"name":{},"text":{"5":{}},"component":{}}],["10",{"_index":555,"title":{"18":{}},"name":{},"text":{},"component":{}}],["1password",{"_index":312,"title":{},"name":{},"text":{"5":{}},"component":{}}],["2",{"_index":326,"title":{"9":{},"10":{}},"name":{},"text":{"5":{}},"component":{}}],["2022",{"_index":429,"title":{},"name":{},"text":{"8":{},"9":{},"10":{},"11":{},"12":{}},"component":{}}],["3",{"_index":514,"title":{"11":{}},"name":{},"text":{},"component":{}}],["4",{"_index":528,"title":{"12":{}},"name":{},"text":{},"component":{}}],["443",{"_index":345,"title":{},"name":{},"text":{"5":{}},"component":{}}],["5",{"_index":540,"title":{"13":{}},"name":{},"text":{},"component":{}}],["6",{"_index":543,"title":{"14":{}},"name":{},"text":{},"component":{}}],["7",{"_index":545,"title":{"15":{}},"name":{},"text":{},"component":{}}],["8",{"_index":547,"title":{"16":{}},"name":{},"text":{},"component":{}}],["80",{"_index":336,"title":{},"name":{},"text":{"5":{}},"component":{}}],["9",{"_index":551,"title":{"17":{}},"name":{},"text":{},"component":{}}],["accept",{"_index":428,"title":{},"name":{},"text":{"8":{},"9":{},"10":{},"11":{},"12":{}},"component":{}}],["access",{"_index":320,"title":{},"name":{},"text":{"5":{},"7":{}},"component":{}}],["acm",{"_index":2,"title":{},"name":{},"text":{"1":{},"3":{},"5":{},"21":{}},"component":{"2":{},"3":{},"4":{},"5":{},"6":{},"7":{},"8":{},"9":{},"10":{},"11":{},"12":{},"13":{},"14":{},"15":{},"16":{},"17":{},"18":{},"19":{},"20":{},"21":{}}}],["action",{"_index":236,"title":{},"name":{},"text":{"4":{}},"component":{}}],["activ",{"_index":359,"title":{},"name":{},"text":{"5":{}},"component":{}}],["addition",{"_index":388,"title":{},"name":{},"text":{"5":{},"9":{},"12":{}},"component":{}}],["adjust",{"_index":333,"title":{},"name":{},"text":{"5":{}},"component":{}}],["administr",{"_index":324,"title":{},"name":{},"text":{"5":{}},"component":{}}],["adr",{"_index":458,"title":{},"name":{},"text":{"19":{}},"component":{"8":{},"9":{},"10":{},"11":{},"12":{},"13":{},"14":{},"15":{},"16":{},"17":{},"18":{},"19":{}}}],["advantag",{"_index":367,"title":{},"name":{},"text":{"5":{}},"component":{}}],["affect",{"_index":558,"title":{},"name":{},"text":{"19":{}},"component":{}}],["afford",{"_index":346,"title":{},"name":{},"text":{"5":{},"7":{},"8":{},"21":{}},"component":{}}],["afterward",{"_index":338,"title":{},"name":{},"text":{"5":{}},"component":{}}],["aggreg",{"_index":438,"title":{},"name":{},"text":{"8":{}},"component":{}}],["aid",{"_index":516,"title":{},"name":{},"text":{"11":{},"12":{}},"component":{}}],["aim",{"_index":209,"title":{},"name":{},"text":{"4":{}},"component":{}}],["allow",{"_index":325,"title":{},"name":{},"text":{"5":{}},"component":{}}],["alreadi",{"_index":474,"title":{},"name":{},"text":{"9":{},"11":{},"12":{}},"component":{}}],["altern",{"_index":317,"title":{},"name":{},"text":{"5":{}},"component":{}}],["android",{"_index":489,"title":{},"name":{},"text":{"9":{}},"component":{}}],["angular",{"_index":46,"title":{"12":{}},"name":{"12":{}},"text":{"1":{},"5":{},"12":{}},"component":{}}],["anoth",{"_index":378,"title":{},"name":{},"text":{"5":{}},"component":{}}],["antora",{"_index":127,"title":{"8":{}},"name":{"8":{}},"text":{"1":{},"8":{}},"component":{}}],["api",{"_index":80,"title":{"11":{},"2-5":{}},"name":{},"text":{"1":{},"11":{},"21":{}},"component":{"20":{},"21":{}}}],["api:test",{"_index":173,"title":{},"name":{},"text":{"3":{}},"component":{}}],["app",{"_index":491,"title":{},"name":{},"text":{"9":{}},"component":{}}],["appli",{"_index":252,"title":{},"name":{},"text":{"4":{}},"component":{}}],["applic",{"_index":490,"title":{"12":{}},"name":{},"text":{"9":{},"12":{},"21":{}},"component":{}}],["application/hal+json",{"_index":83,"title":{},"name":{},"text":{"1":{}},"component":{}}],["application/vnd.error+json",{"_index":85,"title":{},"name":{},"text":{"1":{}},"component":{}}],["architectur",{"_index":12,"title":{"2":{},"20":{}},"name":{"2":{},"20":{}},"text":{"1":{},"2":{},"9":{},"10":{},"11":{},"19":{},"20":{}},"component":{}}],["area",{"_index":521,"title":{},"name":{},"text":{"11":{}},"component":{}}],["arguabl",{"_index":353,"title":{},"name":{},"text":{"5":{}},"component":{}}],["arrow",{"_index":410,"title":{},"name":{},"text":{"7":{}},"component":{}}],["asciidoc",{"_index":380,"title":{},"name":{},"text":{"5":{},"8":{}},"component":{}}],["asciidoctor",{"_index":126,"title":{},"name":{},"text":{"1":{},"8":{}},"component":{}}],["assum",{"_index":156,"title":{},"name":{},"text":{"3":{}},"component":{}}],["attach",{"_index":418,"title":{},"name":{},"text":{"7":{}},"component":{}}],["attempt",{"_index":19,"title":{},"name":{},"text":{"1":{},"2":{}},"component":{}}],["authent",{"_index":63,"title":{},"name":{},"text":{"1":{}},"component":{}}],["author",{"_index":68,"title":{"14":{}},"name":{},"text":{"1":{},"5":{}},"component":{}}],["automat",{"_index":447,"title":{},"name":{},"text":{"8":{}},"component":{}}],["avail",{"_index":451,"title":{},"name":{},"text":{"8":{},"9":{}},"component":{}}],["avoid",{"_index":193,"title":{},"name":{},"text":{"3":{}},"component":{}}],["awar",{"_index":382,"title":{},"name":{},"text":{"5":{}},"component":{}}],["backend",{"_index":56,"title":{},"name":{},"text":{"1":{}},"component":{}}],["base",{"_index":25,"title":{},"name":{},"text":{"1":{},"4":{}},"component":{}}],["bdd",{"_index":110,"title":{},"name":{},"text":{"1":{}},"component":{}}],["be",{"_index":271,"title":{},"name":{},"text":{"4":{}},"component":{}}],["becam",{"_index":29,"title":{},"name":{},"text":{"1":{}},"component":{}}],["befor",{"_index":195,"title":{},"name":{},"text":{"3":{},"4":{}},"component":{}}],["behind",{"_index":463,"title":{},"name":{},"text":{"9":{}},"component":{}}],["best",{"_index":141,"title":{},"name":{},"text":{"2":{},"5":{}},"component":{}}],["better",{"_index":377,"title":{},"name":{},"text":{"5":{},"11":{}},"component":{}}],["between",{"_index":243,"title":{},"name":{},"text":{"4":{}},"component":{}}],["beyond",{"_index":562,"title":{},"name":{},"text":{"19":{}},"component":{}}],["bind",{"_index":330,"title":{},"name":{},"text":{"5":{}},"component":{}}],["bit",{"_index":525,"title":{},"name":{},"text":{"11":{}},"component":{}}],["book",{"_index":139,"title":{},"name":{},"text":{"2":{}},"component":{}}],["both",{"_index":503,"title":{},"name":{},"text":{"10":{}},"component":{}}],["branch",{"_index":274,"title":{},"name":{},"text":{"4":{}},"component":{}}],["breakpoint",{"_index":422,"title":{},"name":{},"text":{"7":{}},"component":{}}],["broad",{"_index":511,"title":{},"name":{},"text":{"10":{}},"component":{}}],["buggi",{"_index":526,"title":{},"name":{},"text":{"11":{}},"component":{}}],["build",{"_index":86,"title":{},"name":{},"text":{"1":{},"5":{},"8":{},"9":{}},"component":{}}],["built",{"_index":442,"title":{},"name":{},"text":{"8":{},"11":{}},"component":{}}],["busi",{"_index":136,"title":{"9":{},"2-5":{}},"name":{},"text":{"9":{}},"component":{}}],["button",{"_index":416,"title":{},"name":{},"text":{"7":{}},"component":{}}],["c4",{"_index":129,"title":{"2-2":{}},"name":{},"text":{"1":{},"2":{},"8":{}},"component":{}}],["central",{"_index":71,"title":{},"name":{},"text":{"1":{}},"component":{}}],["cert",{"_index":553,"title":{"17":{}},"name":{},"text":{},"component":{}}],["chang",{"_index":188,"title":{},"name":{},"text":{"3":{},"5":{},"8":{}},"component":{}}],["choos",{"_index":364,"title":{},"name":{},"text":{"5":{},"7":{},"9":{},"11":{}},"component":{}}],["chosen",{"_index":399,"title":{},"name":{},"text":{"6":{}},"component":{}}],["class",{"_index":176,"title":{},"name":{},"text":{"3":{},"5":{},"7":{},"9":{},"11":{}},"component":{}}],["cli",{"_index":278,"title":{"5-8":{}},"name":{},"text":{"5":{}},"component":{}}],["click",{"_index":352,"title":{},"name":{},"text":{"5":{},"7":{}},"component":{}}],["client",{"_index":518,"title":{},"name":{},"text":{"11":{}},"component":{}}],["close",{"_index":493,"title":{},"name":{},"text":{"9":{}},"component":{}}],["cluster",{"_index":181,"title":{"15":{}},"name":{},"text":{"3":{},"5":{}},"component":{}}],["code",{"_index":187,"title":{"5-15":{},"7-2":{}},"name":{},"text":{"3":{},"4":{},"5":{},"6":{},"7":{},"12":{}},"component":{}}],["collect",{"_index":472,"title":{},"name":{},"text":{"9":{}},"component":{}}],["com.acme.web.test",{"_index":178,"title":{},"name":{},"text":{"3":{}},"component":{}}],["com.acme.web.test.scheduling.api.schedulingclientcollectionapispec",{"_index":179,"title":{},"name":{},"text":{"3":{}},"component":{}}],["come",{"_index":486,"title":{},"name":{},"text":{"9":{}},"component":{}}],["command",{"_index":162,"title":{},"name":{},"text":{"3":{},"5":{},"21":{}},"component":{}}],["common",{"_index":469,"title":{},"name":{},"text":{"9":{}},"component":{}}],["commun",{"_index":480,"title":{},"name":{},"text":{"9":{}},"component":{}}],["compil",{"_index":77,"title":{},"name":{},"text":{"1":{},"9":{}},"component":{}}],["compon",{"_index":137,"title":{"2-5":{}},"name":{},"text":{"5":{}},"component":{}}],["compos",{"_index":214,"title":{},"name":{},"text":{"4":{}},"component":{}}],["configur",{"_index":283,"title":{"5-14":{},"5-17":{}},"name":{},"text":{"5":{},"7":{}},"component":{}}],["consequ",{"_index":423,"title":{"8-3":{},"9-3":{},"10-3":{},"11-3":{},"12-3":{},"13-3":{},"14-3":{},"15-3":{},"16-3":{},"17-3":{},"18-3":{}},"name":{},"text":{},"component":{}}],["consid",{"_index":231,"title":{},"name":{},"text":{"4":{}},"component":{}}],["contain",{"_index":135,"title":{"2-4":{}},"name":{},"text":{"5":{}},"component":{}}],["content",{"_index":437,"title":{},"name":{},"text":{"8":{}},"component":{}}],["context",{"_index":134,"title":{"2-3":{},"8-1":{},"9-1":{},"10-1":{},"11-1":{},"12-1":{},"13-1":{},"14-1":{},"15-1":{},"16-1":{},"17-1":{},"18-1":{}},"name":{},"text":{},"component":{}}],["continu",{"_index":405,"title":{},"name":{},"text":{"6":{}},"component":{}}],["contrast",{"_index":501,"title":{},"name":{},"text":{"10":{}},"component":{}}],["convent",{"_index":93,"title":{},"name":{},"text":{"1":{}},"component":{}}],["coroutin",{"_index":517,"title":{},"name":{},"text":{"11":{}},"component":{}}],["cosmic",{"_index":22,"title":{},"name":{},"text":{"1":{},"2":{},"9":{}},"component":{}}],["coverag",{"_index":473,"title":{},"name":{},"text":{"9":{}},"component":{}}],["cqr",{"_index":58,"title":{},"name":{},"text":{"1":{}},"component":{}}],["creat",{"_index":244,"title":{},"name":{},"text":{"4":{}},"component":{}}],["ctrl+c",{"_index":190,"title":{},"name":{},"text":{"3":{}},"component":{}}],["cupid",{"_index":199,"title":{"4-1":{}},"name":{},"text":{"4":{}},"component":{}}],["current",{"_index":414,"title":{},"name":{},"text":{"7":{}},"component":{}}],["curv",{"_index":477,"title":{},"name":{},"text":{"9":{},"12":{}},"component":{}}],["custom",{"_index":440,"title":{},"name":{},"text":{"8":{}},"component":{}}],["data",{"_index":509,"title":{},"name":{},"text":{"10":{},"21":{}},"component":{}}],["data/sql",{"_index":396,"title":{"6-6":{}},"name":{},"text":{},"component":{}}],["databas",{"_index":497,"title":{},"name":{},"text":{"10":{}},"component":{}}],["ddd",{"_index":57,"title":{},"name":{},"text":{"1":{}},"component":{}}],["debug",{"_index":413,"title":{},"name":{},"text":{"7":{}},"component":{}}],["debugg",{"_index":419,"title":{},"name":{},"text":{"7":{}},"component":{}}],["decis",{"_index":299,"title":{"19":{},"8-2":{},"9-2":{},"10-2":{},"11-2":{},"12-2":{},"13-2":{},"14-2":{},"15-2":{},"16-2":{},"17-2":{},"18-2":{}},"name":{},"text":{"5":{},"8":{},"9":{},"10":{},"19":{}},"component":{}}],["default",{"_index":334,"title":{},"name":{},"text":{"5":{}},"component":{}}],["degre",{"_index":270,"title":{},"name":{},"text":{"4":{}},"component":{}}],["deliv",{"_index":247,"title":{},"name":{},"text":{"4":{},"5":{}},"component":{}}],["deliveri",{"_index":256,"title":{},"name":{},"text":{"4":{}},"component":{}}],["deploy",{"_index":390,"title":{},"name":{},"text":{"5":{}},"component":{}}],["describ",{"_index":203,"title":{},"name":{},"text":{"4":{},"5":{},"6":{},"9":{}},"component":{}}],["design",{"_index":55,"title":{},"name":{},"text":{"1":{},"2":{},"5":{},"10":{},"19":{}},"component":{}}],["desir",{"_index":180,"title":{},"name":{},"text":{"3":{},"4":{},"7":{},"9":{},"10":{},"11":{},"12":{}},"component":{}}],["desktop",{"_index":98,"title":{"5-3":{},"5-6":{},"5-7":{}},"name":{},"text":{"1":{},"5":{}},"component":{}}],["dev",{"_index":198,"title":{},"name":{},"text":{"3":{}},"component":{}}],["develop",{"_index":8,"title":{"17":{},"4-3":{}},"name":{},"text":{"1":{},"4":{},"5":{},"7":{},"9":{},"11":{},"12":{}},"component":{}}],["diagram",{"_index":131,"title":{"2-3":{},"2-4":{},"2-5":{}},"name":{},"text":{"1":{},"8":{}},"component":{}}],["differ",{"_index":144,"title":{},"name":{},"text":{"2":{}},"component":{}}],["directori",{"_index":164,"title":{},"name":{},"text":{"3":{}},"component":{}}],["display",{"_index":421,"title":{},"name":{},"text":{"7":{}},"component":{}}],["docker",{"_index":94,"title":{"5-2":{},"5-6":{}},"name":{},"text":{"1":{},"5":{}},"component":{}}],["dockerd",{"_index":321,"title":{},"name":{},"text":{"5":{}},"component":{}}],["document",{"_index":125,"title":{"8":{}},"name":{},"text":{"1":{},"5":{},"8":{},"10":{},"12":{},"19":{}},"component":{}}],["domain",{"_index":225,"title":{"9":{},"16":{}},"name":{},"text":{"4":{},"6":{},"9":{},"10":{},"21":{}},"component":{}}],["door",{"_index":494,"title":{},"name":{},"text":{"9":{},"10":{}},"component":{}}],["driven",{"_index":261,"title":{},"name":{},"text":{"4":{}},"component":{}}],["driver",{"_index":462,"title":{},"name":{},"text":{"9":{}},"component":{}}],["dsl",{"_index":90,"title":{},"name":{},"text":{"1":{}},"component":{}}],["e2",{"_index":404,"title":{},"name":{},"text":{"6":{}},"component":{}}],["earli",{"_index":523,"title":{},"name":{},"text":{"11":{}},"component":{}}],["easi",{"_index":510,"title":{},"name":{},"text":{"10":{}},"component":{}}],["easiest",{"_index":354,"title":{},"name":{},"text":{"5":{}},"component":{}}],["ecosystem",{"_index":483,"title":{},"name":{},"text":{"9":{},"10":{},"11":{},"12":{}},"component":{}}],["encourag",{"_index":264,"title":{},"name":{},"text":{"4":{}},"component":{}}],["end",{"_index":249,"title":{"6-8":{}},"name":{},"text":{"4":{}},"component":{}}],["engin",{"_index":95,"title":{},"name":{},"text":{"1":{},"5":{}},"component":{}}],["ensur",{"_index":381,"title":{},"name":{},"text":{"5":{}},"component":{}}],["entir",{"_index":481,"title":{},"name":{},"text":{"9":{}},"component":{}}],["env:setup",{"_index":311,"title":{},"name":{},"text":{"5":{}},"component":{}}],["environ",{"_index":287,"title":{},"name":{},"text":{"5":{}},"component":{}}],["eslint",{"_index":392,"title":{},"name":{},"text":{"5":{}},"component":{}}],["event",{"_index":59,"title":{},"name":{},"text":{"1":{},"21":{}},"component":{}}],["exampl",{"_index":170,"title":{},"name":{},"text":{"3":{},"7":{}},"component":{}}],["execut",{"_index":161,"title":{},"name":{},"text":{"3":{},"5":{},"21":{}},"component":{}}],["exhaust",{"_index":35,"title":{},"name":{},"text":{"1":{}},"component":{}}],["expect",{"_index":221,"title":{},"name":{},"text":{"4":{}},"component":{}}],["experi",{"_index":293,"title":{},"name":{},"text":{"5":{},"8":{},"11":{}},"component":{}}],["experiment",{"_index":3,"title":{},"name":{},"text":{"1":{}},"component":{}}],["explain",{"_index":561,"title":{},"name":{},"text":{"19":{}},"component":{}}],["express",{"_index":150,"title":{},"name":{},"text":{"2":{},"19":{}},"component":{}}],["extens",{"_index":512,"title":{},"name":{},"text":{"10":{}},"component":{}}],["familiar",{"_index":431,"title":{},"name":{},"text":{"8":{},"9":{},"12":{}},"component":{}}],["fashion",{"_index":251,"title":{},"name":{},"text":{"4":{},"10":{}},"component":{}}],["fast",{"_index":289,"title":{},"name":{},"text":{"5":{}},"component":{}}],["featur",{"_index":465,"title":{},"name":{},"text":{"9":{},"10":{}},"component":{}}],["feedback",{"_index":290,"title":{},"name":{},"text":{"5":{}},"component":{}}],["feel",{"_index":223,"title":{},"name":{},"text":{"4":{}},"component":{}}],["few",{"_index":143,"title":{},"name":{},"text":{"2":{}},"component":{}}],["figur",{"_index":322,"title":{},"name":{},"text":{"5":{}},"component":{}}],["file",{"_index":386,"title":{},"name":{},"text":{"5":{},"7":{},"8":{}},"component":{}}],["first",{"_index":288,"title":{},"name":{},"text":{"5":{},"11":{}},"component":{}}],["five",{"_index":212,"title":{},"name":{},"text":{"4":{}},"component":{}}],["flex",{"_index":48,"title":{},"name":{},"text":{"1":{}},"component":{}}],["focu",{"_index":254,"title":{},"name":{},"text":{"4":{}},"component":{}}],["focus",{"_index":537,"title":{},"name":{},"text":{"12":{}},"component":{}}],["follow",{"_index":33,"title":{},"name":{},"text":{"1":{},"2":{},"3":{},"5":{},"9":{},"19":{}},"component":{}}],["framework",{"_index":44,"title":{},"name":{},"text":{"1":{},"9":{},"11":{},"12":{}},"component":{}}],["friendli",{"_index":347,"title":{},"name":{},"text":{"5":{}},"component":{}}],["frontend",{"_index":70,"title":{},"name":{},"text":{"1":{}},"component":{}}],["function",{"_index":238,"title":{},"name":{},"text":{"4":{},"7":{}},"component":{}}],["further",{"_index":393,"title":{},"name":{},"text":{"5":{}},"component":{}}],["given",{"_index":356,"title":{},"name":{},"text":{"5":{},"10":{}},"component":{}}],["goal",{"_index":300,"title":{},"name":{},"text":{"5":{}},"component":{}}],["good",{"_index":538,"title":{},"name":{},"text":{"12":{}},"component":{}}],["googl",{"_index":536,"title":{},"name":{},"text":{"12":{}},"component":{}}],["gradl",{"_index":89,"title":{},"name":{},"text":{"1":{},"5":{},"9":{}},"component":{}}],["gradlew",{"_index":165,"title":{},"name":{},"text":{"3":{}},"component":{}}],["grafana",{"_index":119,"title":{},"name":{},"text":{"1":{}},"component":{}}],["great",{"_index":479,"title":{},"name":{},"text":{"9":{}},"component":{}}],["green",{"_index":409,"title":{},"name":{},"text":{"7":{}},"component":{}}],["gui",{"_index":277,"title":{"5-5":{}},"name":{},"text":{"5":{}},"component":{}}],["guid",{"_index":204,"title":{},"name":{},"text":{"4":{}},"component":{}}],["gutter",{"_index":412,"title":{},"name":{},"text":{"7":{}},"component":{}}],["hal",{"_index":82,"title":{},"name":{},"text":{"1":{}},"component":{}}],["handbook",{"_index":151,"title":{},"name":{},"text":{},"component":{"2":{},"3":{},"4":{},"5":{},"6":{},"7":{}}}],["handi",{"_index":487,"title":{},"name":{},"text":{"9":{}},"component":{}}],["handler",{"_index":568,"title":{},"name":{},"text":{"21":{}},"component":{}}],["hard",{"_index":456,"title":{},"name":{},"text":{"8":{}},"component":{}}],["hateoa",{"_index":81,"title":{},"name":{},"text":{"1":{}},"component":{}}],["headless",{"_index":62,"title":{},"name":{},"text":{"1":{}},"component":{}}],["heavili",{"_index":534,"title":{},"name":{},"text":{"12":{}},"component":{}}],["helm",{"_index":121,"title":{},"name":{},"text":{"1":{}},"component":{}}],["help",{"_index":560,"title":{},"name":{},"text":{"19":{}},"component":{}}],["here",{"_index":559,"title":{},"name":{},"text":{"19":{}},"component":{}}],["high",{"_index":245,"title":{},"name":{},"text":{"4":{}},"component":{}}],["homebrew",{"_index":309,"title":{},"name":{},"text":{"5":{}},"component":{}}],["http",{"_index":344,"title":{"11":{}},"name":{},"text":{"5":{},"11":{}},"component":{}}],["http://nip.io",{"_index":350,"title":{},"name":{},"text":{"5":{}},"component":{}}],["i18n",{"_index":79,"title":{},"name":{},"text":{"1":{}},"component":{}}],["id",{"_index":280,"title":{"5-11":{}},"name":{},"text":{},"component":{}}],["idea",{"_index":21,"title":{"5-12":{}},"name":{},"text":{"1":{},"4":{},"5":{}},"component":{}}],["ideal",{"_index":434,"title":{},"name":{},"text":{"8":{},"12":{}},"component":{}}],["ident",{"_index":541,"title":{"13":{}},"name":{},"text":{},"component":{}}],["idiomat",{"_index":222,"title":{},"name":{},"text":{"4":{}},"component":{}}],["illustr",{"_index":5,"title":{},"name":{},"text":{"1":{}},"component":{}}],["implement",{"_index":460,"title":{},"name":{},"text":{"9":{},"21":{}},"component":{}}],["implicit",{"_index":148,"title":{},"name":{},"text":{"2":{}},"component":{}}],["includ",{"_index":445,"title":{},"name":{},"text":{"8":{},"11":{}},"component":{}}],["increment",{"_index":260,"title":{},"name":{},"text":{"4":{}},"component":{}}],["index",{"_index":1,"title":{},"name":{"1":{},"3":{},"19":{},"21":{}},"text":{},"component":{}}],["individu",{"_index":408,"title":{},"name":{},"text":{"7":{}},"component":{}}],["ingress",{"_index":122,"title":{},"name":{},"text":{"1":{},"5":{}},"component":{}}],["inlin",{"_index":468,"title":{},"name":{},"text":{"9":{}},"component":{}}],["inspir",{"_index":61,"title":{},"name":{},"text":{"1":{},"2":{}},"component":{}}],["instal",{"_index":160,"title":{},"name":{},"text":{"3":{},"5":{},"7":{}},"component":{}}],["instruct",{"_index":155,"title":{},"name":{},"text":{"3":{},"5":{}},"component":{}}],["instrument",{"_index":234,"title":{},"name":{},"text":{"4":{}},"component":{}}],["integr",{"_index":395,"title":{"6-5":{}},"name":{},"text":{"6":{}},"component":{}}],["intellij",{"_index":281,"title":{"5-12":{},"7-1":{}},"name":{},"text":{"5":{},"7":{}},"component":{}}],["interest",{"_index":14,"title":{},"name":{},"text":{"1":{}},"component":{}}],["interfac",{"_index":374,"title":{},"name":{},"text":{"5":{}},"component":{}}],["introduct",{"_index":0,"title":{"1":{}},"name":{},"text":{},"component":{}}],["invest",{"_index":535,"title":{},"name":{},"text":{"12":{}},"component":{}}],["invok",{"_index":196,"title":{},"name":{},"text":{"3":{}},"component":{}}],["io",{"_index":550,"title":{},"name":{"16":{}},"text":{},"component":{}}],["issu",{"_index":329,"title":{},"name":{},"text":{"5":{}},"component":{}}],["iter",{"_index":201,"title":{"4-3":{}},"name":{},"text":{"4":{}},"component":{}}],["it’",{"_index":464,"title":{},"name":{},"text":{"9":{}},"component":{}}],["jacoco",{"_index":471,"title":{},"name":{},"text":{"9":{}},"component":{}}],["jaeger",{"_index":116,"title":{},"name":{},"text":{"1":{}},"component":{}}],["java",{"_index":482,"title":{},"name":{},"text":{"9":{}},"component":{}}],["jdk",{"_index":384,"title":{},"name":{},"text":{"5":{}},"component":{}}],["jest",{"_index":539,"title":{},"name":{},"text":{"12":{}},"component":{}}],["jib",{"_index":96,"title":{},"name":{},"text":{"1":{}},"component":{}}],["jooq",{"_index":52,"title":{},"name":{},"text":{"1":{},"6":{}},"component":{}}],["joy",{"_index":210,"title":{},"name":{},"text":{"4":{},"8":{}},"component":{}}],["json",{"_index":506,"title":{},"name":{},"text":{"10":{}},"component":{}}],["junit5",{"_index":105,"title":{},"name":{},"text":{"1":{},"9":{}},"component":{}}],["k3d",{"_index":279,"title":{"15":{},"5-10":{}},"name":{"15":{}},"text":{"5":{}},"component":{}}],["karma",{"_index":108,"title":{},"name":{},"text":{"1":{},"12":{}},"component":{}}],["keto",{"_index":69,"title":{"14":{}},"name":{"14":{}},"text":{"1":{}},"component":{}}],["key",{"_index":147,"title":{},"name":{},"text":{"2":{}},"component":{}}],["knowledg",{"_index":449,"title":{},"name":{},"text":{"8":{}},"component":{}}],["kotest",{"_index":106,"title":{"6-2":{}},"name":{},"text":{"1":{},"5":{},"6":{},"7":{},"9":{}},"component":{}}],["kotlin",{"_index":24,"title":{"9":{},"3-1":{},"6-4":{}},"name":{"9":{}},"text":{"1":{},"3":{},"5":{},"6":{},"9":{},"11":{}},"component":{}}],["krato",{"_index":65,"title":{"13":{}},"name":{"13":{}},"text":{"1":{}},"component":{}}],["kroki",{"_index":446,"title":{},"name":{},"text":{"8":{}},"component":{}}],["ktor",{"_index":45,"title":{"11":{}},"name":{"11":{}},"text":{"1":{},"6":{},"11":{}},"component":{}}],["kubernet",{"_index":120,"title":{"15":{},"5-4":{}},"name":{},"text":{"1":{},"3":{},"5":{}},"component":{}}],["kubernetes_vers",{"_index":370,"title":{},"name":{},"text":{"5":{}},"component":{}}],["kustom",{"_index":101,"title":{},"name":{},"text":{"1":{}},"component":{}}],["languag",{"_index":42,"title":{},"name":{},"text":{"1":{},"4":{},"5":{},"8":{},"9":{}},"component":{}}],["later",{"_index":488,"title":{},"name":{},"text":{"9":{}},"component":{}}],["layout",{"_index":49,"title":{},"name":{},"text":{"1":{}},"component":{}}],["lazi",{"_index":74,"title":{},"name":{},"text":{"1":{}},"component":{}}],["lean",{"_index":513,"title":{},"name":{},"text":{"10":{}},"component":{}}],["learn",{"_index":32,"title":{},"name":{},"text":{"1":{},"9":{},"12":{}},"component":{}}],["left",{"_index":411,"title":{},"name":{},"text":{"7":{}},"component":{}}],["librari",{"_index":401,"title":{},"name":{},"text":{"6":{}},"component":{}}],["lightweight",{"_index":432,"title":{},"name":{},"text":{"8":{}},"component":{}}],["limit",{"_index":379,"title":{},"name":{},"text":{"5":{}},"component":{}}],["line",{"_index":373,"title":{},"name":{},"text":{"5":{}},"component":{}}],["linkerd",{"_index":124,"title":{},"name":{},"text":{"1":{}},"component":{}}],["linux",{"_index":286,"title":{"5-18":{}},"name":{},"text":{"5":{}},"component":{}}],["liquibas",{"_index":53,"title":{},"name":{},"text":{"1":{}},"component":{}}],["list",{"_index":36,"title":{},"name":{},"text":{"1":{}},"component":{}}],["load",{"_index":75,"title":{},"name":{},"text":{"1":{},"5":{}},"component":{}}],["local",{"_index":153,"title":{"15":{},"16":{},"17":{},"18":{},"3-2":{}},"name":{},"text":{"3":{},"5":{}},"component":{}}],["localhost",{"_index":342,"title":{},"name":{},"text":{"5":{}},"component":{}}],["locat",{"_index":383,"title":{},"name":{},"text":{"5":{}},"component":{}}],["logic",{"_index":439,"title":{"9":{}},"name":{},"text":{"8":{},"9":{}},"component":{}}],["loki",{"_index":114,"title":{},"name":{},"text":{"1":{}},"component":{}}],["long",{"_index":183,"title":{},"name":{},"text":{"3":{}},"component":{}}],["loop",{"_index":291,"title":{},"name":{},"text":{"5":{}},"component":{}}],["lot",{"_index":454,"title":{},"name":{},"text":{"8":{}},"component":{}}],["maco",{"_index":303,"title":{},"name":{},"text":{"5":{}},"component":{}}],["made",{"_index":28,"title":{},"name":{},"text":{"1":{},"5":{}},"component":{}}],["main",{"_index":273,"title":{},"name":{},"text":{"4":{},"5":{},"9":{}},"component":{}}],["maintain",{"_index":360,"title":{},"name":{},"text":{"5":{}},"component":{}}],["major",{"_index":361,"title":{},"name":{},"text":{"5":{}},"component":{}}],["make",{"_index":145,"title":{},"name":{},"text":{"2":{},"4":{},"5":{},"8":{}},"component":{}}],["manag",{"_index":276,"title":{"13":{},"17":{},"5-2":{},"5-4":{}},"name":{},"text":{"5":{},"12":{}},"component":{}}],["mani",{"_index":294,"title":{},"name":{},"text":{"5":{}},"component":{}}],["manual",{"_index":197,"title":{},"name":{},"text":{"3":{}},"component":{}}],["markup",{"_index":433,"title":{},"name":{},"text":{"8":{}},"component":{}}],["materi",{"_index":47,"title":{},"name":{},"text":{"1":{},"10":{},"21":{}},"component":{}}],["matt",{"_index":15,"title":{},"name":{},"text":{"1":{}},"component":{}}],["matur",{"_index":478,"title":{},"name":{},"text":{"9":{}},"component":{}}],["mention",{"_index":157,"title":{},"name":{},"text":{"3":{},"5":{}},"component":{}}],["menu",{"_index":387,"title":{},"name":{},"text":{"5":{},"7":{}},"component":{}}],["merg",{"_index":272,"title":{},"name":{},"text":{"4":{}},"component":{}}],["meta",{"_index":202,"title":{"4":{}},"name":{"4":{}},"text":{},"component":{}}],["method",{"_index":258,"title":{},"name":{},"text":{"4":{}},"component":{}}],["methodolog",{"_index":206,"title":{},"name":{},"text":{"4":{}},"component":{}}],["michael",{"_index":565,"title":{},"name":{},"text":{"19":{}},"component":{}}],["micromet",{"_index":117,"title":{},"name":{},"text":{"1":{}},"component":{}}],["minikub",{"_index":99,"title":{"5-9":{}},"name":{},"text":{"1":{},"5":{}},"component":{}}],["minim",{"_index":519,"title":{},"name":{},"text":{"11":{}},"component":{}}],["minor",{"_index":369,"title":{},"name":{},"text":{"5":{}},"component":{}}],["mirror",{"_index":240,"title":{},"name":{},"text":{"4":{}},"component":{}}],["mkcert",{"_index":100,"title":{"17":{}},"name":{"17":{}},"text":{"1":{}},"component":{}}],["mobi",{"_index":327,"title":{},"name":{},"text":{"5":{}},"component":{}}],["mock",{"_index":400,"title":{},"name":{},"text":{"6":{}},"component":{}}],["mockk",{"_index":398,"title":{},"name":{},"text":{"6":{}},"component":{}}],["model",{"_index":130,"title":{"9":{},"2-2":{}},"name":{},"text":{"1":{},"2":{},"4":{},"8":{},"9":{}},"component":{}}],["modul",{"_index":76,"title":{"3-1":{}},"name":{},"text":{"1":{},"3":{},"11":{},"21":{}},"component":{}}],["module(",{"_index":403,"title":{},"name":{},"text":{"6":{}},"component":{}}],["module’",{"_index":167,"title":{},"name":{},"text":{"3":{}},"component":{}}],["monolith",{"_index":88,"title":{},"name":{},"text":{"1":{}},"component":{}}],["monorepo",{"_index":87,"title":{},"name":{},"text":{"1":{}},"component":{}}],["more",{"_index":255,"title":{},"name":{},"text":{"4":{},"9":{},"10":{}},"component":{}}],["multi",{"_index":91,"title":{},"name":{},"text":{"1":{}},"component":{}}],["multipl",{"_index":484,"title":{},"name":{},"text":{"9":{}},"component":{}}],["multitud",{"_index":443,"title":{},"name":{},"text":{"8":{}},"component":{}}],["name",{"_index":169,"title":{"16":{}},"name":{},"text":{"3":{}},"component":{}}],["natur",{"_index":224,"title":{},"name":{},"text":{"4":{}},"component":{}}],["navig",{"_index":389,"title":{},"name":{},"text":{"5":{},"8":{}},"component":{}}],["necessari",{"_index":253,"title":{},"name":{},"text":{"4":{}},"component":{}}],["need",{"_index":315,"title":{},"name":{},"text":{"5":{},"10":{}},"component":{}}],["neg",{"_index":426,"title":{"8-6":{},"9-6":{},"10-6":{},"11-6":{},"12-6":{},"13-6":{},"14-6":{},"15-6":{},"16-6":{},"17-6":{},"18-6":{}},"name":{},"text":{},"component":{}}],["net.ipv4.ip_unprivileged_port_start",{"_index":335,"title":{},"name":{},"text":{"5":{}},"component":{}}],["net.ipv4.ip_unprivileged_port_start=80",{"_index":340,"title":{},"name":{},"text":{"5":{}},"component":{}}],["neutral",{"_index":425,"title":{"8-5":{},"9-5":{},"10-5":{},"11-5":{},"12-5":{},"13-5":{},"14-5":{},"15-5":{},"16-5":{},"17-5":{},"18-5":{}},"name":{},"text":{},"component":{}}],["new",{"_index":268,"title":{},"name":{},"text":{"4":{}},"component":{}}],["nginx",{"_index":123,"title":{},"name":{},"text":{"1":{}},"component":{}}],["ngrx",{"_index":73,"title":{},"name":{},"text":{"1":{}},"component":{}}],["nip",{"_index":549,"title":{},"name":{"16":{}},"text":{},"component":{}}],["nip.io",{"_index":103,"title":{"16":{}},"name":{},"text":{"1":{}},"component":{}}],["node.j",{"_index":41,"title":{},"name":{},"text":{"1":{}},"component":{}}],["nodej",{"_index":533,"title":{},"name":{},"text":{"12":{}},"component":{}}],["non",{"_index":34,"title":{},"name":{},"text":{"1":{}},"component":{}}],["normal",{"_index":502,"title":{},"name":{},"text":{"10":{}},"component":{}}],["note",{"_index":146,"title":{},"name":{},"text":{"2":{}},"component":{}}],["nvm",{"_index":532,"title":{},"name":{},"text":{"12":{}},"component":{}}],["nygard",{"_index":566,"title":{},"name":{},"text":{"19":{}},"component":{}}],["oathkeep",{"_index":66,"title":{},"name":{},"text":{"1":{}},"component":{}}],["object",{"_index":498,"title":{},"name":{},"text":{"10":{}},"component":{}}],["offer",{"_index":376,"title":{},"name":{},"text":{"5":{}},"component":{}}],["olaf",{"_index":563,"title":{},"name":{},"text":{"19":{}},"component":{}}],["on",{"_index":166,"title":{},"name":{},"text":{"3":{},"4":{},"8":{},"9":{},"10":{}},"component":{}}],["onc",{"_index":318,"title":{},"name":{},"text":{"5":{},"7":{}},"component":{}}],["op",{"_index":112,"title":{},"name":{},"text":{"1":{}},"component":{}}],["open",{"_index":385,"title":{},"name":{},"text":{"5":{}},"component":{}}],["openjdk",{"_index":40,"title":{},"name":{},"text":{"1":{}},"component":{}}],["opentrac",{"_index":115,"title":{},"name":{},"text":{"1":{}},"component":{}}],["oper",{"_index":362,"title":{},"name":{},"text":{"5":{},"10":{}},"component":{}}],["option",{"_index":417,"title":{},"name":{},"text":{"7":{}},"component":{}}],["ori",{"_index":64,"title":{"13":{},"14":{}},"name":{},"text":{"1":{}},"component":{}}],["origin",{"_index":17,"title":{},"name":{},"text":{"1":{}},"component":{}}],["other",{"_index":217,"title":{},"name":{},"text":{"4":{}},"component":{}}],["over",{"_index":343,"title":{},"name":{},"text":{"5":{}},"component":{}}],["overview",{"_index":133,"title":{"21":{},"2-1":{}},"name":{},"text":{},"component":{}}],["packag",{"_index":175,"title":{},"name":{},"text":{"3":{}},"component":{}}],["pattern",{"_index":10,"title":{},"name":{},"text":{"1":{}},"component":{}}],["persist",{"_index":495,"title":{"10":{}},"name":{},"text":{"10":{}},"component":{}}],["philosoph",{"_index":229,"title":{},"name":{},"text":{"4":{}},"component":{}}],["philosophi",{"_index":219,"title":{},"name":{},"text":{"4":{}},"component":{}}],["plantuml",{"_index":128,"title":{},"name":{},"text":{"1":{}},"component":{}}],["platform",{"_index":485,"title":{},"name":{},"text":{"9":{}},"component":{}}],["play",{"_index":215,"title":{},"name":{},"text":{"4":{}},"component":{}}],["pleas",{"_index":298,"title":{},"name":{},"text":{"5":{},"19":{}},"component":{}}],["plugin",{"_index":282,"title":{"5-13":{},"5-16":{}},"name":{},"text":{"5":{},"7":{},"11":{}},"component":{}}],["point",{"_index":351,"title":{},"name":{},"text":{"5":{}},"component":{}}],["port",{"_index":20,"title":{},"name":{},"text":{"1":{},"5":{}},"component":{}}],["posit",{"_index":424,"title":{"8-4":{},"9-4":{},"10-4":{},"11-4":{},"12-4":{},"13-4":{},"14-4":{},"15-4":{},"16-4":{},"17-4":{},"18-4":{}},"name":{},"text":{},"component":{}}],["possibl",{"_index":262,"title":{},"name":{},"text":{"4":{},"5":{}},"component":{}}],["postgresql",{"_index":51,"title":{"10":{}},"name":{"10":{}},"text":{"1":{},"6":{},"10":{}},"component":{}}],["pragmat",{"_index":200,"title":{"4-2":{}},"name":{},"text":{"4":{}},"component":{}}],["predict",{"_index":220,"title":{},"name":{},"text":{"4":{}},"component":{}}],["prefer",{"_index":313,"title":{},"name":{},"text":{"5":{},"9":{}},"component":{}}],["present",{"_index":500,"title":{},"name":{},"text":{"10":{}},"component":{}}],["press",{"_index":189,"title":{},"name":{},"text":{"3":{}},"component":{}}],["primarili",{"_index":391,"title":{},"name":{},"text":{"5":{}},"component":{}}],["principl",{"_index":205,"title":{},"name":{},"text":{"4":{},"6":{}},"component":{}}],["privileg",{"_index":331,"title":{},"name":{},"text":{"5":{}},"component":{}}],["problem",{"_index":227,"title":{},"name":{},"text":{"4":{}},"component":{}}],["process",{"_index":184,"title":{},"name":{},"text":{"3":{}},"component":{}}],["product",{"_index":316,"title":{},"name":{},"text":{"5":{},"11":{}},"component":{}}],["progress",{"_index":27,"title":{},"name":{},"text":{"1":{}},"component":{}}],["project",{"_index":4,"title":{},"name":{},"text":{"1":{},"3":{},"5":{},"8":{},"9":{}},"component":{}}],["prometheu",{"_index":118,"title":{},"name":{},"text":{"1":{}},"component":{}}],["promtail",{"_index":113,"title":{},"name":{},"text":{"1":{}},"component":{}}],["properti",{"_index":213,"title":{},"name":{},"text":{"4":{}},"component":{}}],["properties/characterist",{"_index":208,"title":{},"name":{},"text":{"4":{}},"component":{}}],["provid",{"_index":140,"title":{},"name":{},"text":{"2":{}},"component":{}}],["publicli",{"_index":450,"title":{},"name":{},"text":{"8":{}},"component":{}}],["purpos",{"_index":30,"title":{},"name":{},"text":{"1":{},"10":{}},"component":{}}],["put",{"_index":435,"title":{},"name":{},"text":{"8":{}},"component":{}}],["python",{"_index":23,"title":{},"name":{},"text":{"1":{},"2":{},"9":{}},"component":{}}],["qualiti",{"_index":246,"title":{},"name":{},"text":{"4":{}},"component":{}}],["queri",{"_index":567,"title":{},"name":{},"text":{"21":{}},"component":{}}],["quick",{"_index":275,"title":{"5-1":{}},"name":{},"text":{},"component":{}}],["quickstart",{"_index":154,"title":{"3":{}},"name":{},"text":{},"component":{}}],["rancher",{"_index":97,"title":{"5-3":{},"5-7":{}},"name":{},"text":{"1":{},"5":{}},"component":{}}],["read",{"_index":138,"title":{},"name":{},"text":{"2":{},"19":{}},"component":{}}],["realiti",{"_index":241,"title":{},"name":{},"text":{"4":{}},"component":{}}],["reason",{"_index":269,"title":{},"name":{},"text":{"4":{},"8":{}},"component":{}}],["recommend",{"_index":295,"title":{},"name":{},"text":{"5":{}},"component":{}}],["record",{"_index":302,"title":{"19":{}},"name":{},"text":{"5":{},"19":{}},"component":{}}],["redeploy",{"_index":185,"title":{},"name":{},"text":{"3":{}},"component":{}}],["reduc",{"_index":476,"title":{},"name":{},"text":{"9":{},"12":{}},"component":{}}],["reject",{"_index":237,"title":{},"name":{},"text":{"4":{}},"component":{}}],["relat",{"_index":508,"title":{},"name":{},"text":{"10":{}},"component":{}}],["repres",{"_index":239,"title":{},"name":{},"text":{"4":{}},"component":{}}],["requir",{"_index":267,"title":{},"name":{},"text":{"4":{},"5":{},"8":{},"10":{}},"component":{}}],["resourc",{"_index":341,"title":{},"name":{},"text":{"5":{},"19":{}},"component":{}}],["rest",{"_index":310,"title":{},"name":{},"text":{"5":{},"21":{}},"component":{}}],["restart",{"_index":337,"title":{},"name":{},"text":{"5":{}},"component":{}}],["revers",{"_index":457,"title":{},"name":{},"text":{"8":{}},"component":{}}],["root",{"_index":132,"title":{},"name":{},"text":{"3":{}},"component":{"1":{}}}],["run",{"_index":152,"title":{"18":{},"3-2":{}},"name":{},"text":{"3":{},"5":{},"7":{}},"component":{}}],["runner",{"_index":470,"title":{},"name":{},"text":{"9":{},"12":{}},"component":{}}],["runtim",{"_index":39,"title":{},"name":{},"text":{"1":{},"5":{}},"component":{}}],["same",{"_index":368,"title":{},"name":{},"text":{"5":{}},"component":{}}],["sandbox",{"_index":31,"title":{},"name":{},"text":{"1":{}},"component":{}}],["screenplay",{"_index":111,"title":{},"name":{},"text":{"1":{}},"component":{}}],["seal",{"_index":467,"title":{},"name":{},"text":{"9":{}},"component":{}}],["section",{"_index":159,"title":{},"name":{},"text":{"3":{},"4":{},"5":{}},"component":{}}],["select",{"_index":415,"title":{},"name":{},"text":{"7":{}},"component":{}}],["sens",{"_index":142,"title":{},"name":{},"text":{"2":{}},"component":{}}],["seren",{"_index":109,"title":{},"name":{},"text":{"1":{}},"component":{}}],["servic",{"_index":186,"title":{},"name":{},"text":{"3":{},"5":{}},"component":{}}],["set",{"_index":207,"title":{},"name":{},"text":{"4":{}},"component":{}}],["setup",{"_index":158,"title":{"5":{}},"name":{"5":{}},"text":{"3":{},"5":{}},"component":{}}],["sever",{"_index":531,"title":{},"name":{},"text":{"12":{}},"component":{}}],["shall",{"_index":257,"title":{},"name":{},"text":{"4":{},"19":{}},"component":{}}],["share",{"_index":92,"title":{},"name":{},"text":{"1":{}},"component":{}}],["significantli",{"_index":557,"title":{},"name":{},"text":{"19":{}},"component":{}}],["similar",{"_index":366,"title":{},"name":{},"text":{"5":{}},"component":{}}],["site",{"_index":436,"title":{},"name":{},"text":{"8":{}},"component":{}}],["skaffold",{"_index":102,"title":{"18":{}},"name":{"18":{}},"text":{"1":{},"3":{}},"component":{}}],["softwar",{"_index":7,"title":{},"name":{},"text":{"1":{},"4":{}},"component":{}}],["solut",{"_index":226,"title":{},"name":{},"text":{"4":{}},"component":{}}],["solv",{"_index":235,"title":{},"name":{},"text":{"4":{}},"component":{}}],["someth",{"_index":530,"title":{},"name":{},"text":{"12":{}},"component":{}}],["somewhat",{"_index":475,"title":{},"name":{},"text":{"9":{}},"component":{}}],["sourc",{"_index":60,"title":{},"name":{},"text":{"1":{},"8":{}},"component":{}}],["spars",{"_index":527,"title":{},"name":{},"text":{"11":{}},"component":{}}],["special",{"_index":448,"title":{},"name":{},"text":{"8":{}},"component":{}}],["specif",{"_index":505,"title":{},"name":{},"text":{"10":{}},"component":{}}],["specifi",{"_index":168,"title":{},"name":{},"text":{"3":{},"5":{}},"component":{}}],["sql",{"_index":50,"title":{},"name":{},"text":{"1":{}},"component":{}}],["ssl",{"_index":552,"title":{"17":{}},"name":{},"text":{},"component":{}}],["stage",{"_index":524,"title":{},"name":{},"text":{"11":{}},"component":{}}],["start",{"_index":18,"title":{"5-1":{}},"name":{},"text":{"1":{},"3":{},"10":{}},"component":{}}],["step",{"_index":296,"title":{},"name":{},"text":{"5":{}},"component":{}}],["still",{"_index":522,"title":{},"name":{},"text":{"11":{}},"component":{}}],["store",{"_index":72,"title":{},"name":{},"text":{"1":{},"10":{}},"component":{}}],["strategi",{"_index":504,"title":{},"name":{},"text":{"10":{}},"component":{}}],["strictli",{"_index":266,"title":{},"name":{},"text":{"4":{}},"component":{}}],["strive",{"_index":292,"title":{},"name":{},"text":{"5":{}},"component":{}}],["structur",{"_index":228,"title":{},"name":{},"text":{"4":{},"5":{},"10":{}},"component":{}}],["studio",{"_index":285,"title":{"5-15":{},"7-2":{}},"name":{},"text":{"5":{},"7":{}},"component":{}}],["style",{"_index":13,"title":{},"name":{},"text":{"1":{},"9":{},"10":{},"11":{}},"component":{}}],["subject",{"_index":375,"title":{},"name":{},"text":{"5":{}},"component":{}}],["subset",{"_index":174,"title":{},"name":{},"text":{"3":{}},"component":{}}],["such",{"_index":466,"title":{},"name":{},"text":{"9":{}},"component":{}}],["sudo",{"_index":319,"title":{},"name":{},"text":{"5":{}},"component":{}}],["suffic",{"_index":453,"title":{},"name":{},"text":{"8":{}},"component":{}}],["suitabl",{"_index":297,"title":{},"name":{},"text":{"5":{}},"component":{}}],["support",{"_index":259,"title":{},"name":{},"text":{"4":{},"5":{},"8":{},"9":{},"10":{},"11":{},"12":{}},"component":{}}],["surfac",{"_index":520,"title":{},"name":{},"text":{"11":{}},"component":{}}],["sysctl",{"_index":339,"title":{},"name":{},"text":{"5":{}},"component":{}}],["system",{"_index":26,"title":{"18":{},"2-4":{}},"name":{},"text":{"1":{},"2":{},"3":{},"5":{},"19":{}},"component":{}}],["task",{"_index":182,"title":{},"name":{},"text":{"3":{},"5":{}},"component":{}}],["taskfile.yaml",{"_index":372,"title":{},"name":{},"text":{"5":{}},"component":{}}],["tdd",{"_index":265,"title":{},"name":{},"text":{"4":{}},"component":{}}],["tension",{"_index":242,"title":{},"name":{},"text":{"4":{}},"component":{}}],["termin",{"_index":191,"title":{},"name":{},"text":{"3":{}},"component":{}}],["terraform",{"_index":194,"title":{},"name":{},"text":{"3":{}},"component":{}}],["test",{"_index":104,"title":{"6":{},"6-3":{},"6-5":{},"6-8":{}},"name":{"6":{}},"text":{"1":{},"3":{},"4":{},"5":{},"6":{},"7":{},"9":{},"12":{}},"component":{}}],["test(",{"_index":420,"title":{},"name":{},"text":{"7":{}},"component":{}}],["test:test",{"_index":177,"title":{},"name":{},"text":{"3":{}},"component":{}}],["testcontain",{"_index":107,"title":{},"name":{},"text":{"1":{}},"component":{}}],["theme",{"_index":452,"title":{},"name":{},"text":{"8":{}},"component":{}}],["therefor",{"_index":263,"title":{},"name":{},"text":{"4":{}},"component":{}}],["thing",{"_index":37,"title":{},"name":{},"text":{"1":{},"4":{}},"component":{}}],["thought",{"_index":233,"title":{},"name":{},"text":{"4":{}},"component":{}}],["time",{"_index":78,"title":{},"name":{},"text":{"1":{},"4":{}},"component":{}}],["tip",{"_index":406,"title":{"7":{}},"name":{"7":{}},"text":{},"component":{}}],["todo",{"_index":402,"title":{},"name":{},"text":{"6":{}},"component":{}}],["tool",{"_index":9,"title":{"6-1":{}},"name":{},"text":{"1":{},"3":{},"4":{},"5":{},"8":{},"9":{}},"component":{}}],["trade",{"_index":363,"title":{},"name":{},"text":{"5":{}},"component":{}}],["tradeoff",{"_index":301,"title":{},"name":{},"text":{"5":{}},"component":{}}],["tradit",{"_index":230,"title":{},"name":{},"text":{"4":{}},"component":{}}],["transact",{"_index":149,"title":{},"name":{},"text":{"2":{}},"component":{}}],["trick",{"_index":407,"title":{"7":{}},"name":{},"text":{},"component":{}}],["type",{"_index":444,"title":{},"name":{},"text":{"8":{},"10":{}},"component":{}}],["typescript",{"_index":43,"title":{},"name":{},"text":{"1":{},"5":{},"12":{}},"component":{}}],["typic",{"_index":507,"title":{},"name":{},"text":{"10":{}},"component":{}}],["ubiqu",{"_index":357,"title":{},"name":{},"text":{"5":{}},"component":{}}],["ubuntu",{"_index":304,"title":{},"name":{},"text":{"5":{}},"component":{}}],["ui",{"_index":441,"title":{},"name":{},"text":{"8":{}},"component":{}}],["under",{"_index":306,"title":{},"name":{},"text":{"5":{},"8":{}},"component":{}}],["unit",{"_index":394,"title":{"6-3":{}},"name":{},"text":{},"component":{}}],["unix",{"_index":218,"title":{},"name":{},"text":{"4":{}},"component":{}}],["url",{"_index":348,"title":{},"name":{},"text":{"5":{}},"component":{}}],["us",{"_index":38,"title":{"8":{},"9":{},"10":{},"11":{},"12":{},"13":{},"14":{},"15":{},"16":{},"17":{},"18":{}},"name":{},"text":{"1":{},"2":{},"4":{},"5":{},"8":{},"9":{},"10":{},"11":{},"12":{}},"component":{}}],["usag",{"_index":6,"title":{},"name":{},"text":{"1":{}},"component":{}}],["user",{"_index":250,"title":{"5-18":{}},"name":{},"text":{"4":{},"5":{}},"component":{}}],["valu",{"_index":248,"title":{},"name":{},"text":{"4":{},"5":{}},"component":{}}],["variabl",{"_index":371,"title":{},"name":{},"text":{"5":{}},"component":{}}],["varieti",{"_index":461,"title":{},"name":{},"text":{"9":{}},"component":{}}],["veri",{"_index":492,"title":{},"name":{},"text":{"9":{}},"component":{}}],["verifi",{"_index":308,"title":{},"name":{},"text":{"5":{}},"component":{}}],["version",{"_index":365,"title":{},"name":{},"text":{"5":{},"12":{}},"component":{}}],["via",{"_index":349,"title":{},"name":{},"text":{"5":{},"7":{},"8":{}},"component":{}}],["view",{"_index":499,"title":{},"name":{},"text":{"10":{}},"component":{}}],["visual",{"_index":284,"title":{"5-15":{},"7-2":{}},"name":{},"text":{"5":{},"7":{}},"component":{}}],["vnd.error",{"_index":84,"title":{},"name":{},"text":{"1":{}},"component":{}}],["way",{"_index":355,"title":{},"name":{},"text":{"5":{},"9":{},"10":{}},"component":{}}],["web",{"_index":172,"title":{"12":{}},"name":{},"text":{"3":{},"11":{},"12":{},"21":{}},"component":{"20":{},"21":{}}}],["web/http",{"_index":397,"title":{"6-7":{}},"name":{},"text":{},"component":{}}],["web:acm",{"_index":171,"title":{},"name":{},"text":{"3":{}},"component":{}}],["well",{"_index":216,"title":{},"name":{},"text":{"4":{}},"component":{}}],["wide",{"_index":358,"title":{},"name":{},"text":{"5":{},"9":{},"10":{},"12":{}},"component":{}}],["window",{"_index":305,"title":{},"name":{},"text":{"5":{}},"component":{}}],["within",{"_index":163,"title":{},"name":{},"text":{"3":{}},"component":{}}],["word",{"_index":232,"title":{},"name":{},"text":{"4":{}},"component":{}}],["work",{"_index":211,"title":{},"name":{},"text":{"4":{},"5":{}},"component":{}}],["workaround",{"_index":332,"title":{},"name":{},"text":{"5":{}},"component":{}}],["workflow",{"_index":11,"title":{},"name":{},"text":{"1":{}},"component":{}}],["wright",{"_index":16,"title":{},"name":{},"text":{"1":{}},"component":{}}],["write",{"_index":328,"title":{},"name":{},"text":{"5":{},"8":{}},"component":{}}],["written",{"_index":455,"title":{},"name":{},"text":{"8":{},"12":{}},"component":{}}],["wsl",{"_index":307,"title":{},"name":{},"text":{"5":{}},"component":{}}],["you’d",{"_index":192,"title":{},"name":{},"text":{"3":{}},"component":{}}],["you’ll",{"_index":314,"title":{},"name":{},"text":{"5":{}},"component":{}}],["zanzibar",{"_index":67,"title":{},"name":{},"text":{"1":{}},"component":{}}],["zimmermann",{"_index":564,"title":{},"name":{},"text":{"19":{}},"component":{}}]],"pipeline":["stemmer"]},"store":{"documents":{"1":{"id":1,"text":"Acme is an experimental project that illustrates usage of software development tools, patterns, workflows, and architectural styles of interest to Matt Wright. It originally started as an attempt to port ideas from Cosmic Python to a Kotlin based system. As progress was made the project became a all-purpose sandbox to learn. The following is a non-exhaustive list of things that are used, or attempted to be used, in this project: Runtimes OpenJDK Node.js Languages Kotlin TypeScript Frameworks Ktor Angular Angular Material Angular Flex Layout SQL PostgreSQL jOOQ Liquibase Architecture & Design Backend DDD, CQRS, Event Sourcing inspired by Cosmic Python Headless authentication using ORY Kratos and Oathkeeper Zanzibar style authorization using ORY Keto Frontend Centralized store with NgRx Lazy loaded modules Compile-time i18n APIs HATEOAS HAL (application/hal+json) vnd.error (application/vnd.error+json) Build Tools Monorepo (not Monolith) Gradle Kotlin DSL Multi project layout Shared build conventions Docker Engine Jib Development Tools Rancher Desktop minikube mkcert Kustomize Skaffold nip.io Testing JUnit5 Kotest Testcontainers Karma Serenity BDD + Screenplay Pattern Ops Promtail Loki OpenTracing Jaeger Micrometer Prometheus Grafana Kubernetes Helm ingress-nginx Linkerd Documentation Asciidoctor Antora PlantUML C4 Model Diagrams","title":"Introduction","component":"ROOT","version":"","name":"index","url":"/index.html","titles":[]},"2":{"id":2,"text":"The system architecture is inspired by Cosmic Python. Reading the book will provide the best sense of how this system is designed. That said, there are a few differences to make note of. Key differences: Implicit transactions The following is an attempt to express the system architecture using the C4 Model.","title":"Architecture","component":"acme-handbook","version":"","name":"architecture","url":"/acme-handbook/architecture.html","titles":[{"text":"Overview","hash":"_overview","id":1},{"text":"C4 Model","hash":"_c4_model","id":2},{"text":"Context Diagram","hash":"_context_diagram","id":3},{"text":"System Container Diagram","hash":"_system_container_diagram","id":4},{"text":"Business API Component Diagram","hash":"_business_api_component_diagram","id":5}]},"3":{"id":3,"text":"These instructions assume all tools mentioned in the Setup section have been installed. Run all Kotlin module tests by executing the following command from within the root directory: $ ./gradlew test Run one Kotlin module’s tests by specifying the module name. For example: $ ./gradlew acme-web:acme-web-api:test Run a subset of a module’s tests by specifying a package or class name. For example: $ ./gradlew acme-web:acme-web-test:test --tests 'com.acme.web.test.*' $ ./gradlew acme-web:acme-web-test:test --tests com.acme.web.test.scheduling.api.SchedulingClientCollectionApiSpec If desired, the system can be run locally on a local Kubernetes cluster. Run the following command from the root of the project: $ task run This will start a long-running process that will redeploy services when code is changed. Press Ctrl+C to terminate the process. If you’d rather avoid running terraform and the like before running locally, invoke skaffold manually: $ skaffold dev","title":"Quickstart","component":"acme-handbook","version":"","name":"index","url":"/acme-handbook/index.html","titles":[{"text":"Kotlin Modules","hash":"_kotlin_modules","id":1},{"text":"Run Locally","hash":"_run_locally","id":2}]},"4":{"id":4,"text":"This section describes guiding principles and methodologies. CUPID is a set of properties/characteristics that aim to make software a joy to work. The five CUPID properties are: Composable: plays well with others Unix philosophy: does one thing well Predictable: does what you expect Idiomatic: feels natural Domain-based: the solution domain models the problem domain in language and structure Pragmatism is a philosophical tradition that considers words and thought as tools and instruments for prediction, problem solving, and action, and rejects the idea that the function of thought is to describe, represent, or mirror reality. There is often tension between the desire to create a high quality code and delivering value to end-users in a timely fashion. Pragmatism may be applied when it is necessary to focus more on delivery than on the quality of the code. Developers shall use methods that support iterative and incremental development. Applying Test-Driven Development principles where possible is therefore encouraged. However, while TDD is not strictly required, all new code should be tested to a reasonable degree before being merged into the main branch.","title":"Meta","component":"acme-handbook","version":"","name":"meta","url":"/acme-handbook/meta.html","titles":[{"text":"CUPID","hash":"_cupid","id":1},{"text":"Pragmatism","hash":"_pragmatism","id":2},{"text":"Iterative Development","hash":"_iterative_development","id":3}]},"5":{"id":5,"text":"The development environment is a first-class component of this system. From installation and configuration to supporting fast development feedback loops, it should strive to deliver the best developer experience to as many developers as possible. This section describes the recommended steps to configure a development environment suitable for working on Acme. Please install tools as they are mentioned in the documentation. Decisions made in service of this goal are often loaded with tradeoffs and are documented as a Decision Record. These instructions are designed to work on macOS and Ubuntu. They should also work for Windows under WSL but have not been verified. Install Homebrew Install Task Install the rest of the development tools: $ task env:setup Setup the 1Password CLI Install your preferred Docker Manager Install your preferred Kubernetes Manager To run containers you’ll need to install a Docker engine manager. The following products are supported by this tooling: Docker Desktop Rancher Desktop is an alternative to Docker Desktop. Once installed, configure Rancher Desktop with sudo access and dockerd as the container runtime: Figure 1. Administrative Access > Allow sudo access Figure 2. Container Runtime > dockerd (moby) As of this writing Rancher Desktop has an issue with binding to privileged ports on Linux. The workaround is to adjust the default net.ipv4.ip_unprivileged_port_start value to 80. Run the following command and restart Rancher Desktop afterwards: sudo sysctl net.ipv4.ip_unprivileged_port_start=80 This configuration makes it possible to access Kubernetes Ingress resources on localhost over privileged ports 80 (HTTP) and 443 (HTTPS). It also affords the user of friendly local URLs via http://nip.io/. There are many tools that will run a local Kubernetes cluster The following products are supported by this tooling: The following products require a user to point-and-click a GUI to manage a Kubernetes cluster. Using Docker Desktop is, arguably, the easiest way to run Kubernetes locally given its ubiquity. It is also widely supported and actively maintained for all major operating systems. The main trade-off when choosing Docker Desktop is that the version of Kubernetes cannot be changed. Rancher Desktop, similar to Docker Desktop, can also be used to run a local Kubernetes cluster. An advantage Rancher Desktop has over Docker Desktop is that the version of Kubernetes can be changed When choosing the Kubernetes version, choose a version with the same minor version specified by the KUBERNETES_VERSION environment variable in Taskfile.yaml The following products are command-line interfaces. Subjectively, they may offer a better user-experience for developers. minikube is a command-line tool for running Kubernetes clusters locally. Follow these instructions to install minikube. k3d is another command-line tool for running Kubernetes clusters. Follow these instructions to install k3d. IntelliJ IDEA is used for, but not limited to, Kotlin development and Asciidoc authoring. The following plugins are recommended for the best development experience: Kotest plugin AsciiDoc plugin Ensure that IntelliJ is aware of the location of the JDK by opening the File > Project Structure menu. Additionally, ensure that IntelliJ is configured to build and run tests with Gradle. Under the Preferences menu, navigate to Build, Execution, Deployment > Build Tools > Gradle: Visual Studio Code is primarily used for, but not limited to, TypeScript project development. The following plugins are recommended for the best development experience: Angular Language Service plugin ESLint plugin Visual Studio Code does not require further configuration for this project.","title":"Setup","component":"acme-handbook","version":"","name":"setup","url":"/acme-handbook/setup.html","titles":[{"text":"Quick Start","hash":"_quick_start","id":1},{"text":"Docker Manager","hash":"_docker_manager","id":2},{"text":"Rancher Desktop","hash":"_rancher_desktop","id":3},{"text":"Kubernetes Manager","hash":"_kubernetes_manager","id":4},{"text":"GUIs","hash":"_guis","id":5},{"text":"Docker Desktop","hash":"_docker_desktop","id":6},{"text":"Rancher Desktop","hash":"_rancher_desktop_2","id":7},{"text":"CLIs","hash":"_clis","id":8},{"text":"minikube","hash":"_minikube","id":9},{"text":"k3d","hash":"_k3d","id":10},{"text":"IDEs","hash":"_ides","id":11},{"text":"IntelliJ IDEA","hash":"_intellij_idea","id":12},{"text":"Plugins","hash":"_plugins","id":13},{"text":"Configuration","hash":"_configuration","id":14},{"text":"Visual Studio Code","hash":"_visual_studio_code","id":15},{"text":"Plugins","hash":"_plugins_2","id":16},{"text":"Configuration","hash":"_configuration_2","id":17},{"text":"Linux Users","hash":"_linux_users","id":18}]},"6":{"id":6,"text":"Kotest MockK is the chosen mocking library for Kotlin code. TODO: Describe integration test principles TODO: Describe testing the integration of Jooq with PostgreSQL TODO: Describe testing the integration of the Domain module(s) with Ktor TODO: Describe E2E test principles TODO: Describe continuous testing","title":"Testing","component":"acme-handbook","version":"","name":"testing","url":"/acme-handbook/testing.html","titles":[{"text":"Tools","hash":"_tools","id":1},{"text":"Kotest","hash":"_kotest","id":2},{"text":"Unit Tests","hash":"_unit_tests","id":3},{"text":"Kotlin","hash":"_kotlin","id":4},{"text":"Integration Tests","hash":"_integration_tests","id":5},{"text":"Data/SQL","hash":"_datasql","id":6},{"text":"Web/HTTP","hash":"_webhttp","id":7},{"text":"End-to-End Tests","hash":"_end_to_end_tests","id":8}]},"7":{"id":7,"text":"With the Kotest IntelliJ plugin installed, individual test classes or functions can be run. This is afforded via the green arrow in the left gutter of a test file: Access the run configurations from the Run and Debug menu: In this example a developer can choose to run all tests or just the current file. Select the desired configuration and click the green arrow button to run. Optionally, attach the debugger once the test(s) are running by selecting the Attach to debugger configuration. Click the green arrow button to attach. Visual Studio Code should then display breakpoints like so:","title":"Tips & Tricks","component":"acme-handbook","version":"","name":"tips","url":"/acme-handbook/tips.html","titles":[{"text":"IntelliJ","hash":"_intellij","id":1},{"text":"Visual Studio Code","hash":"_visual_studio_code","id":2}]},"8":{"id":8,"text":"Accepted on 2022-01-01 A documentation tool with a familiar, lightweight markup language will make writing documentation a joy. Ideally all documentation can be put under one site that affords a reasonable experience navigating across all the content. We will use Antora to be able to aggregate all project documentation into one logical site and afford us to customize the UI. Antora is built on Asciidoc, which we have experience with. Antora supports a multitude of diagram types, including C4 models, via asciidoctor-kroki Antora does not build navigation automatically from source files. Customizing the UI requires some special knowledge, however publicly available themes should suffice Changing this decision after a lot of documentation has been written would be hard to reverse.","title":"1. Documentation using Antora","component":"acme-adr","version":"","name":"000000-antora","url":"/acme-adr/000000-antora.html","titles":[{"text":"Context","hash":"_context","id":1},{"text":"Decision","hash":"_decision","id":2},{"text":"Consequences","hash":"_consequences","id":3},{"text":"Positive","hash":"_positive","id":4},{"text":"Neutral","hash":"_neutral","id":5},{"text":"Negative","hash":"_negative","id":6}]},"9":{"id":9,"text":"Accepted on 2022-01-01 The desired architectural style described in Cosmic Python can be implemented using a wide variety of languages. The main driver behind this decision is to get more familiar with Kotlin and it’s features such as sealed and inline classes. We will use Kotlin for all domain modeling and business logic to support the desired architectural style. Additionally, we will use the following tools that are common for Kotlin projects: Gradle as the build tool. Junit5 as the test runner. Kotest as the test framework. JaCoCo for collecting test coverage. We are already somewhat familiar with Kotlin which will reduce the learning curve. Kotlin is a mature language with great community and tooling support. The entire Java ecosystem is available to use with Kotlin. Kotlin supports compiling to multiple platforms which may come in handy later Kotlin is the preferred language for Android application development if we choose to build an Android app. This is very close to a one-way door decision.","title":"2. Use Kotlin for Domain Modeling and Business Logic","component":"acme-adr","version":"","name":"000001-kotlin","url":"/acme-adr/000001-kotlin.html","titles":[{"text":"Context","hash":"_context","id":1},{"text":"Decision","hash":"_decision","id":2},{"text":"Consequences","hash":"_consequences","id":3},{"text":"Positive","hash":"_positive","id":4},{"text":"Neutral","hash":"_neutral","id":5},{"text":"Negative","hash":"_negative","id":6}]},"10":{"id":10,"text":"Accepted on 2022-01-01 The desired architectural style requires a database to persist domain objects and materialized views for presentation purposes. Given the design of the domain objects, it is desirable to store them in the database as a document. In contrast, it is desirable to store materialized views in a normalized fashion. We will use PostgreSQL for all persistence needs as it supports both persistence strategies. More specifically, we will use JSON types for domain object persistence. Views will use typical relational data structures. Widely supported and easy to operate Broad ecosystem of extensions ? This is a one-way door decision if we start to lean on PostgreSQL-only features.","title":"2. Use PostgreSQL for Persistence","component":"acme-adr","version":"","name":"000002-postgresql","url":"/acme-adr/000002-postgresql.html","titles":[{"text":"Context","hash":"_context","id":1},{"text":"Decision","hash":"_decision","id":2},{"text":"Consequences","hash":"_consequences","id":3},{"text":"Positive","hash":"_positive","id":4},{"text":"Neutral","hash":"_neutral","id":5},{"text":"Negative","hash":"_negative","id":6}]},"11":{"id":11,"text":"Accepted on 2022-01-01 The desired architectural style includes HTTP APIs. Choosing a web framework will aid their development. The framework must support development using Kotlin, which we have experience with already. Better yet, the framework would be built with Kotlin and use coroutines. We will use Ktor for all HTTP APIs. First class Kotlin development experience. Built on coroutines. Includes an HTTP client module. Minimal API surface area. Still an early-stage product, likely to be a bit buggy. Sparse plugin ecosystem.","title":"3. Use Ktor for HTTP APIs","component":"acme-adr","version":"","name":"000003-ktor","url":"/acme-adr/000003-ktor.html","titles":[{"text":"Context","hash":"_context","id":1},{"text":"Decision","hash":"_decision","id":2},{"text":"Consequences","hash":"_consequences","id":3},{"text":"Positive","hash":"_positive","id":4},{"text":"Neutral","hash":"_neutral","id":5},{"text":"Negative","hash":"_negative","id":6}]},"12":{"id":12,"text":"Accepted on 2022-01-01 Using a framework will aid in the development of a web application. Ideally, the framework is something we are familiar with already to reduce the severity of the learning curve. We will use Angular for all web application development. Additionally, we will use nvm for managing the desired version of NodeJS. Widely supported and heavily invested in by Google. Focused ecosystem. Good documentation. Code will be written in TypeScript. Karma will be used as the test runner. Jest will be the testing framework. ?","title":"4. Use Angular for Web Applications","component":"acme-adr","version":"","name":"000004-angular","url":"/acme-adr/000004-angular.html","titles":[{"text":"Context","hash":"_context","id":1},{"text":"Decision","hash":"_decision","id":2},{"text":"Consequences","hash":"_consequences","id":3},{"text":"Positive","hash":"_positive","id":4},{"text":"Neutral","hash":"_neutral","id":5},{"text":"Negative","hash":"_negative","id":6}]},"13":{"id":13,"text":"? ? ? ? ? ?","title":"5. Use ORY Kratos for Identity Management","component":"acme-adr","version":"","name":"000005-kratos","url":"/acme-adr/000005-kratos.html","titles":[{"text":"Context","hash":"_context","id":1},{"text":"Decision","hash":"_decision","id":2},{"text":"Consequences","hash":"_consequences","id":3},{"text":"Positive","hash":"_positive","id":4},{"text":"Neutral","hash":"_neutral","id":5},{"text":"Negative","hash":"_negative","id":6}]},"14":{"id":14,"text":"? ? ? ? ? ?","title":"6. Use ORY Keto for Authorization","component":"acme-adr","version":"","name":"000006-keto","url":"/acme-adr/000006-keto.html","titles":[{"text":"Context","hash":"_context","id":1},{"text":"Decision","hash":"_decision","id":2},{"text":"Consequences","hash":"_consequences","id":3},{"text":"Positive","hash":"_positive","id":4},{"text":"Neutral","hash":"_neutral","id":5},{"text":"Negative","hash":"_negative","id":6}]},"15":{"id":15,"text":"? ? ? ? ? ?","title":"7. Use k3d for Local Kubernetes Clusters","component":"acme-adr","version":"","name":"000007-k3d","url":"/acme-adr/000007-k3d.html","titles":[{"text":"Context","hash":"_context","id":1},{"text":"Decision","hash":"_decision","id":2},{"text":"Consequences","hash":"_consequences","id":3},{"text":"Positive","hash":"_positive","id":4},{"text":"Neutral","hash":"_neutral","id":5},{"text":"Negative","hash":"_negative","id":6}]},"16":{"id":16,"text":"? ? ? ? ? ?","title":"8. Use nip.io for Local Domain Names","component":"acme-adr","version":"","name":"000008-nip-io","url":"/acme-adr/000008-nip-io.html","titles":[{"text":"Context","hash":"_context","id":1},{"text":"Decision","hash":"_decision","id":2},{"text":"Consequences","hash":"_consequences","id":3},{"text":"Positive","hash":"_positive","id":4},{"text":"Neutral","hash":"_neutral","id":5},{"text":"Negative","hash":"_negative","id":6}]},"17":{"id":17,"text":"? ? ? ? ? ?","title":"9. Use mkcert to Manage SSL Certs for Local Development","component":"acme-adr","version":"","name":"000009-mkcert","url":"/acme-adr/000009-mkcert.html","titles":[{"text":"Context","hash":"_context","id":1},{"text":"Decision","hash":"_decision","id":2},{"text":"Consequences","hash":"_consequences","id":3},{"text":"Positive","hash":"_positive","id":4},{"text":"Neutral","hash":"_neutral","id":5},{"text":"Negative","hash":"_negative","id":6}]},"18":{"id":18,"text":"? ? ? ? ? ?","title":"10. Use Skaffold for Running the System Locally","component":"acme-adr","version":"","name":"000010-skaffold","url":"/acme-adr/000010-skaffold.html","titles":[{"text":"Context","hash":"_context","id":1},{"text":"Decision","hash":"_decision","id":2},{"text":"Consequences","hash":"_consequences","id":3},{"text":"Positive","hash":"_positive","id":4},{"text":"Neutral","hash":"_neutral","id":5},{"text":"Negative","hash":"_negative","id":6}]},"19":{"id":19,"text":"Decisions that significantly affect the system shall be documented here. Please read the following resources that help explain how to express a decision. ADR = Any Decision Record? Architecture, Design and Beyond by Olaf Zimmermann Documenting Architecture Decisions by Michael Nygard.","title":"Decision Records","component":"acme-adr","version":"","name":"index","url":"/acme-adr/index.html","titles":[]},"20":{"id":20,"text":"This is the architecture","title":"Architecture","component":"acme-web-api","version":"0.1.0","name":"architecture","url":"/acme-web-api/0.1.0/architecture.html","titles":[]},"21":{"id":21,"text":"The acme-web-api module implements a REST API to afford web applications to execute Acme domain commands and query data materialized from domain event handlers.","title":"Overview","component":"acme-web-api","version":"0.1.0","name":"index","url":"/acme-web-api/0.1.0/index.html","titles":[]}},"components":{},"componentVersions":{"ROOT/":{"displayVersion":"default","title":"Explore","version":"","name":"ROOT","asciidoc":{"attributes":{"env":"site","env-site":"","site-gen":"antora","site-gen-antora":"","attribute-missing":"warn","data-uri":null,"icons":"font","sectanchors":"","source-highlighter":"highlight.js","site-title":"Acme","site-url":"https://mattupstate.com/acme","page-component-order":"!ROOT, acme-handbook, acme-adr, *","angular-href":"https://angular.io/","angular-vscode-href":"https://marketplace.visualstudio.com/items?itemName=Angular.ng-template","asciidoc-intellij-href":"https://plugins.jetbrains.com/plugin/7391-asciidoc","bdd-href":"https://cucumber.io/docs/bdd/","c4-model-href":"https://c4model.com/","cert-manager-href":"https://cert-manager.io/","cosmic-python-href":"https://www.cosmicpython.com/book/preface.html","cqrs-href":"https://martinfowler.com/bliki/CQRS.html","ddd-href":"https://en.wikipedia.org/wiki/Domain-driven_design","direnv-href":"https://direnv.net/","docker-engine-href":"https://docs.docker.com/engine/","eslint-vscode-href":"https://marketplace.visualstudio.com/items?itemName=dbaeumer.vscode-eslint","gradle-href":"https://gradle.org/","grafana-href":"https://grafana.com/","hal-href":"http://stateless.co/hal_specification.html","hateos-href":"https://restfulapi.net/hateoas/","helm-href":"https://helm.sh/","homebrew-href":"https://brew.sh","hyperkit-href":"https://github.com/moby/hyperkit","intellij-href":"https://www.jetbrains.com/idea/","jaeger-href":"https://www.jaegertracing.io/","java-jdk-href":"https://openjdk.java.net/projects/jdk/","jib-href":"https://github.com/GoogleContainerTools/jib","jooq-href":"https://www.jooq.org/","k3d-href":"https://k3d.io/","karma-href":"https://karma-runner.github.io/","kotest-href":"https://kotest.io/","kotest-intellij-href":"https://plugins.jetbrains.com/plugin/14080-kotest","kotlin-href":"https://kotlinlang.org/","ktor-href":"https://ktor.io/","kubectl-href":"https://kubernetes.io/docs/tasks/tools/#kubectl","kubernetes-href":"https://kubernetes.io/","kustomize-href":"https://kustomize.io/","lets-encrypt-href":"https://letsencrypt.org/","linkerd-href":"http://linkerd.io/","liquibase-href":"https://liquibase.org/","loki-href":"https://grafana.com/oss/loki/","mailhog-href":"https://github.com/mailhog/MailHog","micrometer-href":"https://micrometer.io/","minikube-href":"https://minikube.sigs.k8s.io/","mkcert-href":"https://github.com/FiloSottile/mkcert","nginx-href":"https://www.nginx.com/","ingress-nginx-href":"https://kubernetes.github.io/ingress-nginx/","ngrx-href":"https://ngrx.io/","nodejs-href":"https://nodejs.org/en/","nsq-href":"https://nsq.io/","nvm-href":"https://github.com/nvm-sh/nvm","oauth2-proxy-href":"https://oauth2-proxy.github.io/oauth2-proxy/","oh-my-zsh-href":"https://ohmyz.sh/","openid-connect-href":"https://openid.net/connect/","opentracing-href":"https://opentracing.io/","ory-keto-href":"https://www.ory.sh/docs/keto","ory-kratos-href":"https://ory.sh/docs/kratos/","ory-oathkeeper-href":"https://www.ory.sh/docs/oathkeeper","postgresql-href":"https://www.postgresql.org/","prometheus-href":"https://prometheus.io/","promtail-href":"https://github.com/grafana/loki/tree/master/docs/clients/promtail","rancher-desktop-href":"https://rancherdesktop.io/","sdkman-href":"https://sdkman.io/","sealed-secrets-href":"https://github.com/bitnami-labs/sealed-secrets","selenium-href":"https://www.selenium.dev/","serenity-href":"https://serenity-bdd.github.io/theserenitybook/latest/index.html","screenplay-href":"https://serenity-bdd.github.io/theserenitybook/latest/serenity-screenplay.html","skaffold-href":"https://skaffold.dev/","sops-href":"https://github.com/mozilla/sops","terraform-href":"https://www.terraform.io/","test-containers-href":"https://www.testcontainers.org/","typescript-href":"https://typescriptlang.org/","virtualbox-href":"https://www.virtualbox.org/","vnd-error-href":"https://github.com/blongden/vnd.error","vscode-href":"https://code.visualstudio.com/"},"sourcemap":false,"extensions":[{}]},"url":"/index.html"},"acme-handbook/":{"displayVersion":"default","title":"Handbook","version":"","name":"acme-handbook","asciidoc":{"attributes":{"env":"site","env-site":"","site-gen":"antora","site-gen-antora":"","attribute-missing":"warn","data-uri":null,"icons":"font","sectanchors":"","source-highlighter":"highlight.js","site-title":"Acme","site-url":"https://mattupstate.com/acme","page-component-order":"!ROOT, acme-handbook, acme-adr, *","angular-href":"https://angular.io/","angular-vscode-href":"https://marketplace.visualstudio.com/items?itemName=Angular.ng-template","asciidoc-intellij-href":"https://plugins.jetbrains.com/plugin/7391-asciidoc","bdd-href":"https://cucumber.io/docs/bdd/","c4-model-href":"https://c4model.com/","cert-manager-href":"https://cert-manager.io/","cosmic-python-href":"https://www.cosmicpython.com/book/preface.html","cqrs-href":"https://martinfowler.com/bliki/CQRS.html","ddd-href":"https://en.wikipedia.org/wiki/Domain-driven_design","direnv-href":"https://direnv.net/","docker-engine-href":"https://docs.docker.com/engine/","eslint-vscode-href":"https://marketplace.visualstudio.com/items?itemName=dbaeumer.vscode-eslint","go-task-href":"https://taskfile.dev","gradle-href":"https://gradle.org/","grafana-href":"https://grafana.com/","hal-href":"http://stateless.co/hal_specification.html","hateos-href":"https://restfulapi.net/hateoas/","helm-href":"https://helm.sh/","homebrew-href":"https://brew.sh","hyperkit-href":"https://github.com/moby/hyperkit","intellij-href":"https://www.jetbrains.com/idea/","jaeger-href":"https://www.jaegertracing.io/","java-jdk-href":"https://openjdk.java.net/projects/jdk/","jib-href":"https://github.com/GoogleContainerTools/jib","jooq-href":"https://www.jooq.org/","jq-href":"https://stedolan.github.io/jq/","k3d-href":"https://k3d.io/","karma-href":"https://karma-runner.github.io/","kotest-href":"https://kotest.io/","kotest-intellij-href":"https://plugins.jetbrains.com/plugin/14080-kotest","kotlin-href":"https://kotlinlang.org/","ktor-href":"https://ktor.io/","kubectl-href":"https://kubernetes.io/docs/tasks/tools/#kubectl","kubernetes-href":"https://kubernetes.io/","kustomize-href":"https://kustomize.io/","lets-encrypt-href":"https://letsencrypt.org/","linkerd-href":"http://linkerd.io/","liquibase-href":"https://liquibase.org/","loki-href":"https://grafana.com/oss/loki/","mailhog-href":"https://github.com/mailhog/MailHog","micrometer-href":"https://micrometer.io/","minikube-href":"https://minikube.sigs.k8s.io/","mkcert-href":"https://github.com/FiloSottile/mkcert","nginx-href":"https://www.nginx.com/","ingress-nginx-href":"https://kubernetes.github.io/ingress-nginx/","ngrx-href":"https://ngrx.io/","nodejs-href":"https://nodejs.org/en/","nsq-href":"https://nsq.io/","nvm-href":"https://github.com/nvm-sh/nvm","oauth2-proxy-href":"https://oauth2-proxy.github.io/oauth2-proxy/","oh-my-zsh-href":"https://ohmyz.sh/","openid-connect-href":"https://openid.net/connect/","opentracing-href":"https://opentracing.io/","ory-keto-href":"https://www.ory.sh/docs/keto","ory-kratos-href":"https://ory.sh/docs/kratos/","ory-oathkeeper-href":"https://www.ory.sh/docs/oathkeeper","postgresql-href":"https://www.postgresql.org/","prometheus-href":"https://prometheus.io/","promtail-href":"https://github.com/grafana/loki/tree/master/docs/clients/promtail","rancher-desktop-href":"https://rancherdesktop.io/","sdkman-href":"https://sdkman.io/","sealed-secrets-href":"https://github.com/bitnami-labs/sealed-secrets","selenium-href":"https://www.selenium.dev/","serenity-href":"https://serenity-bdd.github.io/theserenitybook/latest/index.html","screenplay-href":"https://serenity-bdd.github.io/theserenitybook/latest/serenity-screenplay.html","skaffold-href":"https://skaffold.dev/","sops-href":"https://github.com/mozilla/sops","terraform-href":"https://www.terraform.io/","test-containers-href":"https://www.testcontainers.org/","typescript-href":"https://typescriptlang.org/","virtualbox-href":"https://www.virtualbox.org/","vnd-error-href":"https://github.com/blongden/vnd.error","vscode-href":"https://code.visualstudio.com/"},"sourcemap":false,"extensions":[{}]},"url":"/acme-handbook/index.html","navigation":[{"items":[{"content":"Setup","url":"/acme-handbook/setup.html","urlType":"internal"},{"content":"Meta","url":"/acme-handbook/meta.html","urlType":"internal"},{"content":"Architecture","url":"/acme-handbook/architecture.html","urlType":"internal"},{"content":"Tips & Tricks","url":"/acme-handbook/tips.html","urlType":"internal"}],"root":true,"order":0}]},"acme-adr/":{"displayVersion":"default","title":"Decision Records","version":"","name":"acme-adr","asciidoc":{"attributes":{"env":"site","env-site":"","site-gen":"antora","site-gen-antora":"","attribute-missing":"warn","data-uri":null,"icons":"font","sectanchors":"","source-highlighter":"highlight.js","site-title":"Acme","site-url":"https://mattupstate.com/acme","page-component-order":"!ROOT, acme-handbook, acme-adr, *"},"sourcemap":false,"extensions":[{}]},"url":"/acme-adr/index.html","navigation":[{"items":[{"content":"1. Documentation using Antora","url":"/acme-adr/000000-antora.html","urlType":"internal"},{"content":"2. Use Kotlin for Domain Modeling and Business Logic","url":"/acme-adr/000001-kotlin.html","urlType":"internal"},{"content":"2. Use PostgreSQL for Persistence","url":"/acme-adr/000002-postgresql.html","urlType":"internal"},{"content":"3. Use Ktor for HTTP APIs","url":"/acme-adr/000003-ktor.html","urlType":"internal"},{"content":"4. Use Angular for Web Applications","url":"/acme-adr/000004-angular.html","urlType":"internal"},{"content":"5. Use ORY Kratos for Identity Management","url":"/acme-adr/000005-kratos.html","urlType":"internal"},{"content":"6. Use ORY Keto for Authorization","url":"/acme-adr/000006-keto.html","urlType":"internal"},{"content":"7. Use k3d for Local Kubernetes Clusters","url":"/acme-adr/000007-k3d.html","urlType":"internal"},{"content":"8. Use nip.io for Local Domain Names","url":"/acme-adr/000008-nip-io.html","urlType":"internal"},{"content":"9. Use mkcert to Manage SSL Certs for Local Development","url":"/acme-adr/000009-mkcert.html","urlType":"internal"},{"content":"10. Use Skaffold for Running the System Locally","url":"/acme-adr/000010-skaffold.html","urlType":"internal"}],"root":true,"order":0}]},"acme-web-api/0.1.0":{"displayVersion":"0.1.0","title":"acme-web-api","version":"0.1.0","name":"acme-web-api","asciidoc":{"attributes":{"env":"site","env-site":"","site-gen":"antora","site-gen-antora":"","attribute-missing":"warn","data-uri":null,"icons":"font","sectanchors":"","source-highlighter":"highlight.js","site-title":"Acme","site-url":"https://mattupstate.com/acme","page-component-order":"!ROOT, acme-handbook, acme-adr, *"},"sourcemap":false,"extensions":[{}]},"url":"/acme-web-api/0.1.0/index.html","navigation":[{"items":[{"content":"Architecture","url":"/acme-web-api/0.1.0/architecture.html","urlType":"internal"}],"root":true,"order":0}]}}}})
\ No newline at end of file
diff --git a/sitemap-ROOT.xml b/sitemap-ROOT.xml
index bf9d006..eb7be8a 100644
--- a/sitemap-ROOT.xml
+++ b/sitemap-ROOT.xml
@@ -2,6 +2,6 @@
https://mattupstate.com/acme/index.html
-2023-12-07T19:48:00.068Z
+2024-02-22T16:11:43.890Z
diff --git a/sitemap-acme-adr.xml b/sitemap-acme-adr.xml
index 68cae35..60f9304 100644
--- a/sitemap-acme-adr.xml
+++ b/sitemap-acme-adr.xml
@@ -2,50 +2,50 @@
https://mattupstate.com/acme/acme-adr/000000-antora.html
-2023-12-07T19:48:00.068Z
+2024-02-22T16:11:43.890Z
https://mattupstate.com/acme/acme-adr/000001-kotlin.html
-2023-12-07T19:48:00.068Z
+2024-02-22T16:11:43.890Z
https://mattupstate.com/acme/acme-adr/000002-postgresql.html
-2023-12-07T19:48:00.068Z
+2024-02-22T16:11:43.890Z
https://mattupstate.com/acme/acme-adr/000003-ktor.html
-2023-12-07T19:48:00.068Z
+2024-02-22T16:11:43.890Z
https://mattupstate.com/acme/acme-adr/000004-angular.html
-2023-12-07T19:48:00.068Z
+2024-02-22T16:11:43.890Z
https://mattupstate.com/acme/acme-adr/000005-kratos.html
-2023-12-07T19:48:00.068Z
+2024-02-22T16:11:43.890Z
https://mattupstate.com/acme/acme-adr/000006-keto.html
-2023-12-07T19:48:00.068Z
+2024-02-22T16:11:43.890Z
https://mattupstate.com/acme/acme-adr/000007-k3d.html
-2023-12-07T19:48:00.068Z
+2024-02-22T16:11:43.890Z
https://mattupstate.com/acme/acme-adr/000008-nip-io.html
-2023-12-07T19:48:00.068Z
+2024-02-22T16:11:43.890Z
https://mattupstate.com/acme/acme-adr/000009-mkcert.html
-2023-12-07T19:48:00.068Z
+2024-02-22T16:11:43.890Z
https://mattupstate.com/acme/acme-adr/000010-skaffold.html
-2023-12-07T19:48:00.068Z
+2024-02-22T16:11:43.890Z
https://mattupstate.com/acme/acme-adr/index.html
-2023-12-07T19:48:00.068Z
+2024-02-22T16:11:43.890Z
diff --git a/sitemap-acme-handbook.xml b/sitemap-acme-handbook.xml
index 0801e9d..fc57aa6 100644
--- a/sitemap-acme-handbook.xml
+++ b/sitemap-acme-handbook.xml
@@ -2,26 +2,26 @@
https://mattupstate.com/acme/acme-handbook/architecture.html
-2023-12-07T19:48:00.068Z
+2024-02-22T16:11:43.890Z
https://mattupstate.com/acme/acme-handbook/index.html
-2023-12-07T19:48:00.068Z
+2024-02-22T16:11:43.890Z
https://mattupstate.com/acme/acme-handbook/meta.html
-2023-12-07T19:48:00.068Z
+2024-02-22T16:11:43.890Z
https://mattupstate.com/acme/acme-handbook/setup.html
-2023-12-07T19:48:00.068Z
+2024-02-22T16:11:43.890Z
https://mattupstate.com/acme/acme-handbook/testing.html
-2023-12-07T19:48:00.068Z
+2024-02-22T16:11:43.890Z
https://mattupstate.com/acme/acme-handbook/tips.html
-2023-12-07T19:48:00.068Z
+2024-02-22T16:11:43.890Z
diff --git a/sitemap-acme-web-api.xml b/sitemap-acme-web-api.xml
index 23ea1fb..a67ba16 100644
--- a/sitemap-acme-web-api.xml
+++ b/sitemap-acme-web-api.xml
@@ -2,10 +2,10 @@
https://mattupstate.com/acme/acme-web-api/0.1.0/architecture.html
-2023-12-07T19:48:00.068Z
+2024-02-22T16:11:43.890Z
https://mattupstate.com/acme/acme-web-api/0.1.0/index.html
-2023-12-07T19:48:00.068Z
+2024-02-22T16:11:43.890Z