[{"data":1,"prerenderedAt":18330},["ShallowReactive",2],{"content-page:\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow":3,"content-page-quiz:none":3,"book-module-total-pages":4,"content-section-pages:\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F":5,"content-directory-pages:\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow":10644},null,[],[6,535,1615,2504,3600,4539,5330,6397,7123,7948],{"id":7,"title":8,"audience":9,"body":10,"contentType":508,"course":509,"description":510,"estimateBasis":511,"estimatedDiscussionMinutes":512,"estimatedLiveMinutes":513,"estimatedTotalMinutes":514,"extension":515,"meta":516,"module":517,"navigation":518,"order":519,"path":520,"promptAssist":521,"seo":522,"status":523,"stem":524,"tags":525,"videoDuration":530,"videoId":531,"videoLink":532,"videoTitle":533,"week":517,"__hash__":534},"content\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F00-learn-courses-and-discord.md","Learn Courses Platform And Discord","student",{"type":11,"value":12,"toc":491},"minimark",[13,55,95,148,198,246,280,342,384,434,463],[14,15,18,23,39],"slide",{"id":16,"level":17},"learn-courses-flow","2",[19,20,22],"h2",{"id":21},"what-is-the-learn-courses-platform","What is the Learn Courses Platform",[24,25,26,30,33,36],"ul",{},[27,28,29],"li",{},"This is a platform I've built over the years to aid assignment submissions and course utilities",[27,31,32],{},"It provides objective-based worksheets to fill in images, urls, and open responses to document assignment evidence",[27,34,35],{},"The goal is to keep tasks clear and objective for students and grading",[27,37,38],{},"Also includes a few other utilities for courses (such as joining the Discord server)",[40,41,42,43,49,50,54],"p",{},"NOTE: Summer 2026 the previous Learn Platform (",[44,45,46],"a",{"href":46,"rel":47},"https:\u002F\u002Flearn.ethereallab.app",[48],"nofollow",") has been replaced by Learn Courses Platform (",[44,51,52],{"href":52,"rel":53},"https:\u002F\u002Fcourses.ethereallab.app",[48],"). The deprecated site is still available as a backup but all activities\u002Fcontent is being migrated to the new version",[14,56,58,61,64,92],{"id":57,"level":17},"learn-courses-title",[19,59,8],{"id":60},"learn-courses-platform-and-discord",[40,62,63],{},"How to join:",[24,65,66,72,80,83,86,89],{},[27,67,68,69],{},"Visit the platform ",[44,70,52],{"href":52,"rel":71},[48],[27,73,74,75],{},"Sign in with your NJIT email\n",[24,76,77],{},[27,78,79],{},"If you're in the Canvas course, you should automatically get synced to this platform",[27,81,82],{},"Visit your Profile page",[27,84,85],{},"Associate your Discord account",[27,87,88],{},"Join the course Discord server",[27,90,91],{},"Verify that your course channels appear on Discord",[40,93,94],{},"You can follow the steps on the below slides for guidance",[14,96,99,102],{"id":97,"level":98},"visit-learn-courses","3",[19,100,101],{"id":97},"Visit Learn Courses",[103,104,107,138],"two-col",{"gap":105,"left-width":106,"right-width":106},"lg","1fr",[108,109,111,114,119],"template",{"v-slot:left":110},"",[40,112,113],{},"Go to:",[40,115,116],{},[44,117,52],{"href":52,"rel":118},[48],[24,120,121,129,132,135],{},[27,122,123,124,128],{},"Click the ",[125,126,127],"strong",{},"Login"," button",[27,130,131],{},"Use your NJIT email",[27,133,134],{},"Only NJIT accounts are allowed",[27,136,137],{},"If the browser tries a personal Chrome profile, log out of that account or switch profiles",[108,139,140],{"v-slot:right":110},[40,141,142],{},[143,144],"img",{"alt":145,"src":146,"variant":147},"Learn Courses logged-out home page with the Login button visible","\u002Fimages\u002Finternet-applications\u002Flearn-courses-discord\u002Fhome-loggedout-login-button.png","sidecar-screenshot",[14,149,151,154],{"id":150,"level":98},"associate-discord-name",[19,152,153],{"id":150},"Associate Discord Name",[103,155,156,182],{"gap":105,"left-width":106,"right-width":106},[108,157,158,161,179],{"v-slot:left":110},[40,159,160],{},"On Learn Courses:",[162,163,164,167,173,176],"ol",{},[27,165,166],{},"Open your Profile",[27,168,169,170],{},"Click ",[125,171,172],{},"Refresh Discord Username",[27,174,175],{},"Authorize the Discord prompt",[27,177,178],{},"After the success message appears, save your profile",[40,180,181],{},"If you are not sure where you are, use the Home icon in the top left to return to the dashboard.",[108,183,184,191],{"v-slot:right":110},[40,185,186],{},[143,187],{"alt":188,"src":189,"variant":147,"max-height":190},"Learn Courses dashboard sidebar with Profile and course links visible","\u002Fimages\u002Finternet-applications\u002Flearn-courses-discord\u002Fdashboard-sidebar-profile-links.png","13rem",[40,192,193],{},[143,194],{"alt":195,"src":196,"variant":147,"max-height":197},"Learn Courses profile page with Discord connection controls visible","\u002Fimages\u002Finternet-applications\u002Flearn-courses-discord\u002Fprofile-page.png","16rem",[14,199,201,204],{"id":200,"level":98},"authorize-discord",[19,202,203],{"id":200},"Authorize Discord",[103,205,206,230],{"gap":105,"left-width":106,"right-width":106},[108,207,208,211],{"v-slot:left":110},[40,209,210],{},"Discord will ask whether Learn Courses can access your Discord account.",[24,212,213,216,221,224,227],{},[27,214,215],{},"Confirm you are signed in to the correct Discord account",[27,217,169,218],{},[125,219,220],{},"Authorize",[27,222,223],{},"Return to Learn Courses",[27,225,226],{},"Look for the success message",[27,228,229],{},"Save the profile change",[108,231,232,239],{"v-slot:right":110},[40,233,234],{},[143,235],{"alt":236,"src":237,"variant":147,"max-height":238},"Discord authorization prompt for Learn Courses","\u002Fimages\u002Finternet-applications\u002Flearn-courses-discord\u002Fdiscord-auth.png","25rem",[40,240,241],{},[143,242],{"alt":243,"src":244,"variant":147,"max-height":245},"Learn Courses success message after connecting Discord","\u002Fimages\u002Finternet-applications\u002Flearn-courses-discord\u002Fdiscord-connected-success.png","7rem",[14,247,249,252,255,261,269],{"id":248,"level":98},"join-the-channel",[19,250,251],{"id":248},"Join The Channel",[40,253,254],{},"Use the Discord link provided on Canvas, or use:",[40,256,257],{},[44,258,259],{"href":259,"rel":260},"https:\u002F\u002Fdiscord.com\u002Finvite\u002FYEHcm44wzg",[48],[40,262,263,264,268],{},"This should send you to the ",[265,266,267],"code",{},"access-channel"," channel.",[24,270,271,274,277],{},[27,272,273],{},"Other channels are protected by a bot",[27,275,276],{},"Messages may be blocked until your name and role are set",[27,278,279],{},"You'll have temporary access until a role is applied so if you leave before completing the steps you'll have to revisit the invite link",[14,281,283,286],{"id":282,"level":17},"verify-with-quackbot",[19,284,285],{"id":282},"Verify With QuackBot",[103,287,288,333],{"gap":105,"left-width":106,"right-width":106},[108,289,290,302,308,313,316,330],{"v-slot:left":110},[24,291,292,295],{},[27,293,294],{},"A summer 2026 change was to have the bot attempt to auto-detect new members and apply roles automatically",[27,296,297,298,301],{},"If you don't see the proper semester category (i.e., ",[265,299,300],{},"summer-2026",") or the expected channels you can do the below action",[40,303,304,305,307],{},"In ",[265,306,267],{},", enter:",[40,309,310],{},[265,311,312],{},"@QuackBot",[40,314,315],{},"QuackBot will:",[24,317,318,321,324,327],{},[27,319,320],{},"Verify your account",[27,322,323],{},"Pull in your name and section",[27,325,326],{},"Apply your class role",[27,328,329],{},"Update your server nickname",[40,331,332],{},"This does not change your real Discord username.",[108,334,335],{"v-slot:right":110},[40,336,337],{},[143,338],{"alt":339,"src":340,"variant":147,"max-height":341},"QuackBot response showing the student already has a course role","\u002Fimages\u002Finternet-applications\u002Flearn-courses-discord\u002Fquackbot-role-response.png","8rem",[14,343,345,349,352,363,368],{"id":344,"level":17},"welcome-and-potential-issues",[19,346,348],{"id":347},"welcome","Welcome",[40,350,351],{},"If the previous steps worked, you should see a new semester category in the Discord sidebar.",[24,353,354,357,360],{},[27,355,356],{},"It should appear after the general channels",[27,358,359],{},"It should include one or more channels for your active courses",[27,361,362],{},"Use the correct course channel for class questions and discussion",[364,365,367],"h3",{"id":366},"potential-issues","Potential Issues",[24,369,370,373],{},[27,371,372],{},"If you recently joined the class, your UCID may still need to be added to Learn Courses",[27,374,375,376,379],{},"If there is an issue, email the instructor or DM ",[265,377,378],{},"MattToegel",[24,380,381],{},[27,382,383],{},"Some Discord privacy settings may require a friend request before DMs work",[14,385,387,390],{"id":386,"level":17},"general-conduct",[19,388,389],{"id":386},"General Conduct",[24,391,392,395,398,409,412,420,428,431],{},[27,393,394],{},"Use class-related channels for questions and discussion",[27,396,397],{},"Ask general course questions in the channel instead of DM when possible",[27,399,400,401],{},"Do not post screenshots of in-progress assignment solutions\n",[24,402,403,406],{},[27,404,405],{},"This would be more ideal for a DM",[27,407,408],{},"If you see posted solution-like items don't assume they're correct",[27,410,411],{},"General unrelated code is okay when it supports a discussion (like content from a presentation or reading)",[27,413,414,415],{},"If the instructor needs to see assignment code, they may ask you to DM the screenshot\n",[24,416,417],{},[27,418,419],{},"Since repositories should be set to private; repo links are fine to post in the class channel since other students should not have access to them",[27,421,422,423],{},"Keep off-topic items out of class channels\n",[24,424,425],{},[27,426,427],{},"There are plenty of categorized channels to use and I can always make more",[27,429,430],{},"Helping classmates understand topics is encouraged just be mindful not to spoon-feed",[27,432,433],{},"Sharing direct solutions goes against the Academic Integrity Policy",[14,435,437,440,443],{"id":436,"level":17},"quick-check",[19,438,439],{"id":436},"Quick Check",[40,441,442],{},"Before continuing, confirm:",[24,444,445,448,451,454,457,460],{},[27,446,447],{},"You can sign in to Learn Courses with your NJIT email",[27,449,450],{},"Your profile is saved",[27,452,453],{},"Discord is associated with your Learn Courses profile",[27,455,456],{},"You joined the Discord server",[27,458,459],{},"QuackBot applied your course role",[27,461,462],{},"You can see the correct course channel",[14,464,466,469],{"id":465,"level":17},"summary",[19,467,468],{"id":465},"Summary",[24,470,471,474,482,485,488],{},[27,472,473],{},"Learn Courses supports course tools and course-specific setup",[27,475,476,477],{},"Canvas remains the official assignment, grade, and course hub\n",[24,478,479],{},[27,480,481],{},"All necessary items will be linked on Canvas",[27,483,484],{},"Discord is the preferred quick communication channel",[27,486,487],{},"QuackBot connects your Discord account to the correct course role",[27,489,490],{},"Good course communication keeps help requests specific and protects private information",{"title":110,"searchDepth":492,"depth":492,"links":493},2,[494,495,496,497,498,499,500,501,505,506,507],{"id":21,"depth":492,"text":22},{"id":60,"depth":492,"text":8},{"id":97,"depth":492,"text":101},{"id":150,"depth":492,"text":153},{"id":200,"depth":492,"text":203},{"id":248,"depth":492,"text":251},{"id":282,"depth":492,"text":285},{"id":347,"depth":492,"text":348,"children":502},[503],{"id":366,"depth":504,"text":367},3,{"id":386,"depth":492,"text":389},{"id":436,"depth":492,"text":439},{"id":465,"depth":492,"text":468},"presentation","Internet Applications","Set up Learn Courses Platform and Discord before starting terminal, Git, and local server work.","Face-to-face class of about 40 students; includes account sign-in, Discord association, QuackBot role setup, and communication expectations.","10","20","30","md",{},"1",true,"0","\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F00-learn-courses-and-discord",false,{"title":8,"description":510},"published","internet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F00-learn-courses-and-discord",[526,527,528,529],"course-tools","learn-courses","discord","setup","11:16","ScmHyEF1sA0","https:\u002F\u002Fyoutu.be\u002FScmHyEF1sA0","Joining Learn Platform and Discord Server","tEFV7lUabcy7whz7FSHEjPXSirrd3ginqQq4O4AkW9o",{"id":536,"title":537,"audience":9,"body":538,"contentType":508,"course":509,"description":1599,"estimateBasis":1600,"estimatedDiscussionMinutes":512,"estimatedLiveMinutes":1601,"estimatedTotalMinutes":1602,"extension":515,"meta":1603,"module":517,"navigation":518,"order":512,"path":1604,"promptAssist":521,"seo":1605,"status":523,"stem":1606,"tags":1607,"videoDuration":1611,"videoId":1612,"videoLink":1613,"videoTitle":537,"week":517,"__hash__":1614},"content\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F01-basic-cli-commands.md","Basic CLI Commands",{"type":11,"value":539,"toc":1565},[540,598,635,667,729,796,847,873,893,931,959,980,1015,1037,1109,1132,1177,1240,1292,1320,1340,1369,1409,1439,1449,1518],[14,541,543,547],{"id":542,"level":17},"why-cli-first",[19,544,546],{"id":545},"why-cli-comes-first","Why CLI Comes First",[24,548,549,557,565,579,587],{},[27,550,551,552],{},"Common language for setup and developer tools\n",[24,553,554],{},[27,555,556],{},"Git, servers, package installs, deployment logs",[27,558,559,560],{},"Works when there is no full desktop\n",[24,561,562],{},[27,563,564],{},"SSH, Ubuntu Server, minimal system access",[27,566,567,568],{},"Direct check of what the computer sees\n",[24,569,570,573,576],{},[27,571,572],{},"Current folder",[27,574,575],{},"Files and permissions",[27,577,578],{},"Command output",[27,580,581,582],{},"Repeatable steps beat guessing through menus\n",[24,583,584],{},[27,585,586],{},"Run a command, read output, adjust",[27,588,589,590],{},"Location still matters\n",[24,591,592,595],{},[27,593,594],{},"Wrong folder can make correct commands fail",[27,596,597],{},"Or create files in the wrong place",[14,599,601,604,607],{"id":600,"level":17},"goal",[19,602,603],{"id":600},"Goal",[40,605,606],{},"Build the command-line habits that make setup work predictable:",[24,608,609,612,615,629,632],{},[27,610,611],{},"Know what folder the terminal is using",[27,613,614],{},"Read file and folder lists before moving",[27,616,617,618,621,622,625,626],{},"Recognize common flags like ",[265,619,620],{},"-a",", ",[265,623,624],{},"-r",", and ",[265,627,628],{},"-l",[27,630,631],{},"Make small file changes and verify them",[27,633,634],{},"Stop safely when output does not match the lesson",[14,636,638,641,644,664],{"id":637,"level":17},"before-you-start",[19,639,640],{"id":637},"Before You Start",[40,642,643],{},"Run these commands on your host computer",[24,645,646,658,661],{},[27,647,648,649],{},"Windows: Git Bash",[24,650,651],{},[27,652,653,654],{},"Need Git Bash now? Use the Windows install slide in the next presentation:\n",[44,655,657],{"href":656},"\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F02-install-git-tools\u002Fview\u002Fslides#step-1-install-git-on-windows","Install Git On Windows",[27,659,660],{},"Apple macOS: Terminal",[27,662,663],{},"Linux: Terminal",[40,665,666],{},"Use one terminal window for the whole practice so your location is easy to track",[14,668,670,674],{"id":669,"level":17},"working-directory",[19,671,673],{"id":672},"the-main-idea","The Main Idea",[24,675,676,687,698,721],{},[27,677,678,679],{},"Terminal commands run from one folder at a time\n",[24,680,681],{},[27,682,683,684],{},"That folder is the ",[125,685,686],{},"working directory",[27,688,689,692,693],{},[265,690,691],{},"pwd",": print working directory\n",[24,694,695],{},[27,696,697],{},"Shows the full path to the folder your terminal is using",[27,699,700,701],{},"Fresh terminal usually starts in your home folder\n",[24,702,703,709,715],{},[27,704,705,706],{},"Windows Git Bash: ",[265,707,708],{},"\u002Fc\u002FUsers\u002Fyour-username",[27,710,711,712],{},"Apple macOS: ",[265,713,714],{},"\u002FUsers\u002Fyour-username",[27,716,717,718],{},"Linux: ",[265,719,720],{},"\u002Fhome\u002Fyour-username",[27,722,723,724],{},"Commands from this lesson start from the working directory\n",[24,725,726],{},[27,727,728],{},"Unless you give a different path",[14,730,732,735,738,790],{"id":731,"level":17},"paths-relative-and-absolute",[19,733,734],{"id":731},"Paths: Relative And Absolute",[40,736,737],{},"Paths build on the working directory. They tell the terminal which file or folder you mean",[24,739,740,746,752,758,784],{},[27,741,742,743],{},"Relative path: starts from the working directory, like ",[265,744,745],{},"public\u002Findex.php",[27,747,748,749],{},"Absolute path: starts from the system root, like ",[265,750,751],{},"\u002Fhome\u002Fstudent\u002Fproject",[27,753,754,757],{},[265,755,756],{},"."," means the current folder",[27,759,760,763,764],{},[265,761,762],{},".."," means the parent folder\n",[24,765,766,772,778],{},[27,767,768,771],{},[265,769,770],{},"..\u002F.."," goes up two folders",[27,773,774,775],{},"Example: ",[265,776,777],{},"cd ..\u002F..",[27,779,780,783],{},[265,781,782],{},"..."," is not a shortcut",[27,785,786,789],{},[265,787,788],{},"~"," means your home folder",[40,791,792,793,795],{},"If a command affects the wrong place, check ",[265,794,691],{}," first, then check the path you typed",[14,797,799,802,805,824,827],{"id":798,"level":17},"flags-options-and-arguments",[19,800,801],{"id":798},"Flags, Options, And Arguments",[40,803,804],{},"Commands usually follow this shape:",[24,806,807,813,818],{},[27,808,809,810],{},"Command: what to do, like ",[265,811,812],{},"ls",[27,814,815,816],{},"Flag or option: how to do it, like ",[265,817,620],{},[27,819,820,821],{},"Argument: what to do it to, like ",[265,822,823],{},"public_html",[40,825,826],{},"Examples:",[24,828,829,835,841],{},[27,830,831,834],{},[265,832,833],{},"ls -a"," shows hidden files",[27,836,837,840],{},[265,838,839],{},"cp -r folder backup-folder"," copies a folder",[27,842,843,846],{},[265,844,845],{},"nano -l file.txt"," opens with line numbers",[14,848,850,854,857,868],{"id":849,"level":17},"practice-loop",[19,851,853],{"id":852},"practice-1-location-and-paths","Practice 1: Location And Paths",[40,855,856],{},"For each command, use the same pattern:",[162,858,859,862,865],{},[27,860,861],{},"Run one command",[27,863,864],{},"Read the output",[27,866,867],{},"Confirm the folder or file changed the way you expected",[24,869,870],{},[27,871,872],{},"See the slides below for workflow steps, checkpoints, and expected results",[14,874,876,879,882,887,890],{"id":875,"level":98},"step-1-confirm-where-you-are",[19,877,878],{"id":875},"Step 1: Confirm Where You Are",[40,880,881],{},"Run:",[883,884],"code-snippet",{"language":885,"src":886},"bash","\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F01-basic-cli-commands\u002Fstep-1-confirm-where-you-01.sh",[40,888,889],{},"Expected result: a folder path",[40,891,892],{},"If you see a path, the terminal is working and you know your current location",[14,894,896,899,901,904,907,910,913],{"id":895,"level":98},"step-2-list-files",[19,897,898],{"id":895},"Step 2: List Files",[40,900,881],{},[883,902],{"language":885,"src":903},"\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F01-basic-cli-commands\u002Fstep-2-list-files-02.sh",[40,905,906],{},"Expected result: file and folder names from your current location",[40,908,909],{},"For hidden files and details too, run:",[883,911],{"language":885,"src":912},"\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F01-basic-cli-commands\u002Fstep-2-list-files-03.sh",[24,914,915,920,925],{},[27,916,917,919],{},[265,918,620],{}," includes hidden files",[27,921,922,924],{},[265,923,628],{}," uses a long listing",[27,926,927,930],{},[265,928,929],{},"-la"," combines both",[14,932,934,937,940,943,950,956],{"id":933,"level":98},"step-3-change-folders",[19,935,936],{"id":933},"Step 3: Change Folders",[40,938,939],{},"Start from your home folder, then move up and back",[883,941],{"language":885,"src":942},"\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F01-basic-cli-commands\u002Fstep-3-change-folders-04.sh",[40,944,945,946,949],{},"This avoids assuming your computer has a specific folder like ",[265,947,948],{},"Documents"," in the current location",[40,951,952,953,955],{},"When you move into a named folder later, run ",[265,954,812],{}," first and pick a folder that actually appears in the list",[40,957,958],{},"If a path has spaces, wrap it in quotes",[14,960,962,966,968,971],{"id":961,"level":98},"step-4-create-practice-folder",[19,963,965],{"id":964},"step-4-create-a-practice-folder","Step 4: Create A Practice Folder",[40,967,881],{},[883,969],{"language":885,"src":970},"\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F01-basic-cli-commands\u002Fstep-4-create-a-practice-05.sh",[40,972,973,974,976,977],{},"Expected result: ",[265,975,691],{}," ends with ",[265,978,979],{},"cli-practice",[14,981,983,987,989,992,995],{"id":982,"level":98},"step-5-create-and-read-file",[19,984,986],{"id":985},"step-5-write-text-to-a-file","Step 5: Write Text To A File",[40,988,881],{},[883,990],{"language":885,"src":991},"\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F01-basic-cli-commands\u002Fstep-5-write-text-to-a-f-06.sh",[40,993,994],{},"What this command does:",[24,996,997,1003,1009],{},[27,998,999,1002],{},[265,1000,1001],{},"echo"," prepares text for the terminal",[27,1004,1005,1008],{},[265,1006,1007],{},">"," redirects that text into a file instead of printing it on screen",[27,1010,1011,1014],{},[265,1012,1013],{},"cli-proof.txt"," is created in the current folder, or replaced if it already exists",[14,1016,1018,1022,1025,1028,1034],{"id":1017,"level":98},"step-5-read-file-back",[364,1019,1021],{"id":1020},"step-5-continued-read-the-file-back","Step 5 Continued: Read The File Back",[40,1023,1024],{},"Then read it back:",[883,1026],{"language":885,"src":1027},"\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F01-basic-cli-commands\u002Fstep-5-continued-read-th-07.sh",[40,1029,1030,1033],{},[265,1031,1032],{},"cat"," prints file contents in the terminal",[40,1035,1036],{},"Expected result: the terminal prints the text you wrote",[14,1038,1040,1044,1046,1055,1058,1084,1087],{"id":1039,"level":17},"file-management-loop",[19,1041,1043],{"id":1042},"practice-2-file-management","Practice 2: File Management",[40,1045,856],{},[162,1047,1048,1050,1052],{},[27,1049,861],{},[27,1051,864],{},[27,1053,1054],{},"Confirm the file changed the way you expected",[40,1056,1057],{},"Commands in this practice:",[24,1059,1060,1066,1072,1078],{},[27,1061,1062,1065],{},[265,1063,1064],{},"touch"," creates an empty file",[27,1067,1068,1071],{},[265,1069,1070],{},"cp"," copies a file or folder",[27,1073,1074,1077],{},[265,1075,1076],{},"mv"," moves or renames",[27,1079,1080,1083],{},[265,1081,1082],{},"rm"," deletes",[40,1085,1086],{},"Important flags:",[24,1088,1089,1095,1101,1107],{},[27,1090,1091,1094],{},[265,1092,1093],{},"cp -r"," copies folders",[27,1096,1097,1100],{},[265,1098,1099],{},"rm -r"," deletes folders",[27,1102,1103,1106],{},[265,1104,1105],{},"rm -f"," forces deletion",[27,1108,872],{},[14,1110,1112,1116,1118,1121,1126],{"id":1111,"level":98},"practice-2-step-1-create-empty-file",[19,1113,1115],{"id":1114},"step-1-create-an-empty-file","Step 1: Create An Empty File",[40,1117,881],{},[883,1119],{"language":885,"src":1120},"\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F01-basic-cli-commands\u002Fstep-1-create-an-empty-f-08.sh",[40,1122,1123,1125],{},[265,1124,1064],{}," creates an empty file, or updates the timestamp if the file already exists",[40,1127,973,1128,1131],{},[265,1129,1130],{},"practice-empty.txt"," appears in the folder list",[14,1133,1135,1139,1141,1144,1147,1153,1166],{"id":1134,"level":98},"practice-2-step-2-copy-rename-and-delete",[19,1136,1138],{"id":1137},"step-2-copy-rename-and-delete","Step 2: Copy, Rename, And Delete",[40,1140,881],{},[883,1142],{"language":885,"src":1143},"\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F01-basic-cli-commands\u002Fstep-2-copy-rename-and-d-09.sh",[40,1145,1146],{},"Expected result: the backup is copied, renamed, then removed",[40,1148,1149,1150,1152],{},"Use ",[265,1151,1082],{}," carefully. Deleting from the terminal usually skips the recycle bin",[24,1154,1155,1160],{},[27,1156,1157,1159],{},[265,1158,624],{},": recursive, includes folders and everything inside them",[27,1161,1162,1165],{},[265,1163,1164],{},"-f",": force, skips many confirmation prompts",[1167,1168,1170],"alert",{"color":1169},"red",[40,1171,1172,1173,1176],{},"Never run ",[265,1174,1175],{},"rm -rf \u002F",". It can try to delete the whole system from the root folder.",[14,1178,1180,1184,1187,1205,1210,1215,1235],{"id":1179,"level":17},"terminal-editors",[19,1181,1183],{"id":1182},"practice-3-terminal-editors","Practice 3: Terminal Editors",[40,1185,1186],{},"Sometimes you need to edit a file from a terminal",[24,1188,1189,1195],{},[27,1190,1191,1194],{},[265,1192,1193],{},"nano"," is beginner-friendly",[27,1196,1197,1200,1201,1204],{},[265,1198,1199],{},"vi"," or ",[265,1202,1203],{},"vim"," is common on servers but has a learning curve",[40,1206,1149,1207,1209],{},[265,1208,1193],{}," for this course unless a lesson says otherwise",[40,1211,1149,1212,1214],{},[265,1213,845],{}," when line numbers would help",[40,1216,1217,1218,1200,1220,1222,1223,1226,1227,1230,1231,1234],{},"If you accidentally open ",[265,1219,1199],{},[265,1221,1203],{},", press ",[265,1224,1225],{},"Esc",", type ",[265,1228,1229],{},":q",", and press ",[265,1232,1233],{},"Enter"," to exit without saving",[24,1236,1237],{},[27,1238,1239],{},"See the slide below for workflow steps, checkpoints, and expected results",[14,1241,1243,1248,1250,1253,1258,1280],{"id":1242,"level":98},"edit-with-nano",[19,1244,1245,1246],{"id":1242},"Edit With ",[265,1247,1193],{},[40,1249,881],{},[883,1251],{"language":885,"src":1252},"\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F01-basic-cli-commands\u002Fedit-with-nano-10.sh",[40,1254,304,1255,1257],{},[265,1256,1193],{},":",[24,1259,1260,1263,1270,1274],{},[27,1261,1262],{},"Type a short note",[27,1264,1265,1266,1269],{},"Press ",[265,1267,1268],{},"Ctrl+O"," to save",[27,1271,1265,1272],{},[265,1273,1233],{},[27,1275,1265,1276,1279],{},[265,1277,1278],{},"Ctrl+X"," to exit",[40,1281,1282,1283,1285,1286,1226,1288,1230,1290],{},"If you open ",[265,1284,1199],{}," by mistake, press ",[265,1287,1225],{},[265,1289,1229],{},[265,1291,1233],{},[14,1293,1295,1301,1306,1309,1312,1315],{"id":1294,"level":17},"sudo-and-permission-boundaries",[19,1296,1297,1300],{"id":1294},[265,1298,1299],{},"sudo"," And Permission Boundaries",[40,1302,1303,1305],{},[265,1304,1299],{}," runs a command with elevated permissions",[40,1307,1308],{},"Use it only when a setup lesson explicitly says to use it",[40,1310,1311],{},"Example:",[883,1313],{"language":885,"src":1314},"\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F01-basic-cli-commands\u002Fsudo-and-permission-boun-11.sh",[24,1316,1317],{},[27,1318,1319],{},"See the slide below for supporting examples and follow-up details",[14,1321,1323,1328,1334],{"id":1322,"level":98},"sudo-by-operating-system",[364,1324,1325,1327],{"id":1322},[265,1326,1299],{}," By Operating System",[40,1329,1330,1331,1333],{},"On Linux and macOS, ",[265,1332,1299],{}," is common for package installation and service management",[40,1335,1336,1337,1339],{},"Modern Windows also has a native ",[265,1338,1299],{}," option, but Windows Git Bash usually does not need it for this course. If elevated access is needed on Windows, open Git Bash as administrator",[14,1341,1343,1346,1349,1360],{"id":1342,"level":17},"quick-safety-routine",[19,1344,1345],{"id":1342},"Quick Safety Routine",[40,1347,1348],{},"Before a command changes files, ask:",[24,1350,1351,1354,1357],{},[27,1352,1353],{},"What folder am I in?",[27,1355,1356],{},"Do I see the files I expect?",[27,1358,1359],{},"Am I about to change the right folder?",[40,1361,1362,1363,1365,1366],{},"If one answer is unclear, stop and run ",[265,1364,691],{}," plus ",[265,1367,1368],{},"ls -la",[14,1370,1372,1375],{"id":1371,"level":17},"common-mistakes",[19,1373,1374],{"id":1371},"Common Mistakes",[24,1376,1377,1393,1399,1407],{},[27,1378,1379,1382,1383,1385,1386,1388,1389,1392],{},[265,1380,1381],{},"No such file or directory",": run ",[265,1384,691],{},", then ",[265,1387,812],{},", then try ",[265,1390,1391],{},"cd"," again",[27,1394,1395,1396,1398],{},"Command affected the wrong folder: check ",[265,1397,691],{}," before continuing",[27,1400,1401,1403,1404,1406],{},[265,1402,1032],{}," cannot find the file: run ",[265,1405,1368],{}," and check the exact filename",[27,1408,1319],{},[14,1410,1412,1416],{"id":1411,"level":98},"common-mistakes-recovery",[364,1413,1415],{"id":1414},"recovery-checks","Recovery Checks",[24,1417,1418,1421,1427,1433],{},[27,1419,1420],{},"Spaces in a path: wrap the path in quotes",[27,1422,1423,1424],{},"Command keeps running: press ",[265,1425,1426],{},"Ctrl+C",[27,1428,1429,1430],{},"Permission denied: move back home with ",[265,1431,1432],{},"cd ~",[27,1434,1435,1436,1438],{},"Wrong ",[265,1437,1082],{},": stop and ask before doing more work",[14,1440,1441,1443,1446],{"id":436,"level":17},[19,1442,439],{"id":436},[40,1444,1445],{},"You are ready for the next setup lesson when these commands make sense:",[883,1447],{"language":885,"src":1448},"\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F01-basic-cli-commands\u002Fquick-check-12.sh",[14,1450,1452,1456],{"id":1451,"level":17},"further-learning",[19,1453,1455],{"id":1454},"key-terms-and-further-learning","Key Terms And Further Learning",[103,1457,1458,1490],{"gap":105,"left-width":106,"right-width":106},[108,1459,1460,1464,1470,1479],{"v-slot:left":110},[364,1461,1463],{"id":1462},"key-terms","Key Terms",[40,1465,1466,1469],{},[125,1467,1468],{},"Working directory"," - The folder where the next terminal command runs",[40,1471,1472,1475,1476],{},[125,1473,1474],{},"Path"," - A file or folder location, such as ",[265,1477,1478],{},"public_html\u002Findex.php",[40,1480,1481,1484,1485,1487,1488],{},[125,1482,1483],{},"Flag"," - An extra command option, such as ",[265,1486,929],{}," in ",[265,1489,1368],{},[108,1491,1492,1495],{"v-slot:right":110},[364,1493,1494],{"id":1451},"Further Learning",[24,1496,1497,1504,1511],{},[27,1498,1499],{},[44,1500,1503],{"href":1501,"rel":1502},"https:\u002F\u002Fdocumentation.ubuntu.com\u002Fdesktop\u002Fen\u002Flatest\u002Ftutorial\u002Fthe-linux-command-line-for-beginners\u002F",[48],"Ubuntu Tutorial: The Linux Command Line For Beginners",[27,1505,1506],{},[44,1507,1510],{"href":1508,"rel":1509},"https:\u002F\u002Fwww.gnu.org\u002Fsoftware\u002Fcoreutils\u002Fmanual\u002Fcoreutils.html",[48],"GNU Coreutils Manual",[27,1512,1513],{},[44,1514,1517],{"href":1515,"rel":1516},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FLearn_web_development\u002FGetting_started\u002FEnvironment_setup\u002FCommand_line",[48],"MDN: Command Line Crash Course",[14,1519,1520,1522,1525],{"id":465,"level":17},[19,1521,468],{"id":465},[40,1523,1524],{},"Before leaving this presentation, confirm you can:",[24,1526,1527,1532,1537,1548,1562],{},[27,1528,1149,1529,1531],{},[265,1530,691],{}," to check where commands will run",[27,1533,1149,1534,1536],{},[265,1535,1368],{}," to inspect the current folder",[27,1538,1149,1539,621,1541,621,1543,625,1545,1547],{},[265,1540,1391],{},[265,1542,756],{},[265,1544,762],{},[265,1546,788],{}," to move intentionally",[27,1549,1550,1551,621,1553,621,1555,621,1557,625,1559,1561],{},"Use file commands such as ",[265,1552,1064],{},[265,1554,1070],{},[265,1556,1076],{},[265,1558,1082],{},[265,1560,1193],{}," carefully",[27,1563,1564],{},"Stop and check location when output does not match the lesson",{"title":110,"searchDepth":492,"depth":492,"links":1566},[1567,1568,1569,1570,1571,1572,1573,1574,1575,1576,1577,1578,1581,1582,1583,1584,1585,1587,1592,1593,1596,1597,1598],{"id":545,"depth":492,"text":546},{"id":600,"depth":492,"text":603},{"id":637,"depth":492,"text":640},{"id":672,"depth":492,"text":673},{"id":731,"depth":492,"text":734},{"id":798,"depth":492,"text":801},{"id":852,"depth":492,"text":853},{"id":875,"depth":492,"text":878},{"id":895,"depth":492,"text":898},{"id":933,"depth":492,"text":936},{"id":964,"depth":492,"text":965},{"id":985,"depth":492,"text":986,"children":1579},[1580],{"id":1020,"depth":504,"text":1021},{"id":1042,"depth":492,"text":1043},{"id":1114,"depth":492,"text":1115},{"id":1137,"depth":492,"text":1138},{"id":1182,"depth":492,"text":1183},{"id":1242,"depth":492,"text":1586},"Edit With nano",{"id":1294,"depth":492,"text":1588,"children":1589},"sudo And Permission Boundaries",[1590],{"id":1322,"depth":504,"text":1591},"sudo By Operating System",{"id":1342,"depth":492,"text":1345},{"id":1371,"depth":492,"text":1374,"children":1594},[1595],{"id":1414,"depth":504,"text":1415},{"id":436,"depth":492,"text":439},{"id":1454,"depth":492,"text":1455},{"id":465,"depth":492,"text":468},"Practice the terminal commands you need so you can move through folders, inspect files, and verify your location before running course commands.","Face-to-face class of about 40 students; includes short CLI demo, student command practice, path\u002Fflag checks, and common beginner recovery questions.","45","55",{},"\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F01-basic-cli-commands",{"title":537,"description":1599},"internet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F01-basic-cli-commands",[1608,1609,1610],"cli","terminal","filesystem","46:05","NsSRKv_uBWM","https:\u002F\u002Fyoutu.be\u002FNsSRKv_uBWM","q_NRWUOCcsk5lm6u6kKPFGl9E9VqeQhaC0qb86nD7aY",{"id":1616,"title":1617,"audience":9,"body":1618,"contentType":508,"course":509,"description":2492,"estimateBasis":2493,"estimatedDiscussionMinutes":512,"estimatedLiveMinutes":2494,"estimatedTotalMinutes":1601,"extension":515,"meta":2495,"module":517,"navigation":518,"order":513,"path":2496,"promptAssist":521,"seo":2497,"status":523,"stem":2498,"tags":2499,"videoDuration":2500,"videoId":2501,"videoLink":2502,"videoTitle":1617,"week":517,"__hash__":2503},"content\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F02-install-git-tools.md","Git Tools",{"type":11,"value":1619,"toc":2462},[1620,1643,1672,1700,1738,1769,1801,1836,1865,1895,1932,1935,1965,1996,2025,2075,2093,2110,2130,2155,2186,2204,2245,2290,2373,2433],[14,1621,1622,1624],{"id":600,"level":17},[19,1623,603],{"id":600},[24,1625,1626,1629,1632],{},[27,1627,1628],{},"Install Git",[27,1630,1631],{},"Choose one terminal for your operating system",[27,1633,1634,1635,621,1638,625,1640,1642],{},"Confirm ",[265,1636,1637],{},"git --version",[265,1639,691],{},[265,1641,1368],{}," work before GitHub setup",[14,1644,1646,1650],{"id":1645,"level":17},"terminal-choice-by-os",[19,1647,1649],{"id":1648},"terminal-choices","Terminal Choices",[24,1651,1652,1655,1658,1661,1663,1666,1669],{},[27,1653,1654],{},"Pick the terminal for your operating system",[27,1656,1657],{},"Use that same terminal for this lesson path",[27,1659,1660],{},"Run commands on your own computer unless a later lesson explicitly says \"inside the VM\"",[27,1662,648],{},[27,1664,1665],{},"Apple macOS: Terminal, with iTerm2 optional",[27,1667,1668],{},"Linux: Terminal, with Tilix optional",[27,1670,1671],{},"These operating system notes are alternatives, not a sequence",[14,1673,1675,1679,1697],{"id":1674,"level":17},"step-1-install-git-on-windows",[19,1676,1678],{"id":1677},"windows-path-git-bash","Windows Path: Git Bash",[162,1680,1681,1688,1691,1694],{},[27,1682,1683,1684],{},"Go to ",[44,1685,1686],{"href":1686,"rel":1687},"https:\u002F\u002Fgit-scm.com\u002Finstall\u002Fwindows",[48],[27,1689,1690],{},"Download and run the Git for Windows installer",[27,1692,1693],{},"Open Git Bash from the Start menu",[27,1695,1696],{},"Use Git Bash whenever this course says to use the terminal",[40,1698,1699],{},"See the slides below for the install settings, launch check, and Windows terminal habit",[14,1701,1703,1706],{"id":1702,"level":98},"windows-installer-components",[364,1704,1705],{"id":1702},"Windows Installer: Components",[103,1707,1711,1719],{"gap":105,"left-width":1708,"right-width":1709,"stack":1710},"1.4fr","0.9fr","never",[108,1712,1713],{"v-slot:left":110},[40,1714,1715],{},[143,1716],{"alt":1717,"src":1718,"variant":147},"Git for Windows installer component selection screen","\u002Fimages\u002Finternet-applications\u002Fgitbash\u002Fstep01_components.png",[108,1720,1721],{"v-slot:right":110},[24,1722,1723,1726,1732],{},[27,1724,1725],{},"Recommended to have these components selected",[27,1727,1728,1729],{},"Keep ",[265,1730,1731],{},"Git Bash Here",[27,1733,1734,1735],{},"Continue with ",[265,1736,1737],{},"Next",[14,1739,1741,1744],{"id":1740,"level":98},"windows-installer-default-editor",[364,1742,1743],{"id":1740},"Windows Installer: Default Editor",[103,1745,1746,1754],{"gap":105,"left-width":1708,"right-width":1709,"stack":1710},[108,1747,1748],{"v-slot:left":110},[40,1749,1750],{},[143,1751],{"alt":1752,"src":1753,"variant":147},"Git for Windows installer default editor selection screen","\u002Fimages\u002Finternet-applications\u002Fgitbash\u002Fstep02_default_editor.png",[108,1755,1756],{"v-slot:right":110},[24,1757,1758,1761,1766],{},[27,1759,1760],{},"Choose the editor you are comfortable with",[27,1762,1763,1765],{},[265,1764,1193],{}," or VS Code is friendlier than Vim for most beginners",[27,1767,1768],{},"This setting affects Git messages if Git opens an editor",[14,1770,1772,1775],{"id":1771,"level":98},"windows-installer-branch-name",[364,1773,1774],{"id":1771},"Windows Installer: Branch Name",[103,1776,1777,1785],{"gap":105,"left-width":1708,"right-width":1709,"stack":1710},[108,1778,1779],{"v-slot:left":110},[40,1780,1781],{},[143,1782],{"alt":1783,"src":1784,"variant":147},"Git for Windows installer default branch name screen","\u002Fimages\u002Finternet-applications\u002Fgitbash\u002Fstep03_branch_naming.png",[108,1786,1787],{"v-slot:right":110},[24,1788,1789,1795,1798],{},[27,1790,1791,1792],{},"Select the option that uses ",[265,1793,1794],{},"main",[27,1796,1797],{},"Course repositories will tell you which branch to use later",[27,1799,1800],{},"Do not create custom branch names here",[14,1802,1804,1807],{"id":1803,"level":98},"windows-installer-path",[364,1805,1806],{"id":1803},"Windows Installer: PATH",[103,1808,1809,1817],{"gap":105,"left-width":1708,"right-width":1709,"stack":1710},[108,1810,1811],{"v-slot:left":110},[40,1812,1813],{},[143,1814],{"alt":1815,"src":1816,"variant":147},"Git for Windows installer PATH environment screen","\u002Fimages\u002Finternet-applications\u002Fgitbash\u002Fstep04_path.png",[108,1818,1819],{"v-slot:right":110},[24,1820,1821,1824,1830,1833],{},[27,1822,1823],{},"Select the recommended PATH option",[27,1825,1826,1827],{},"This lets Git Bash and common tools find ",[265,1828,1829],{},"git",[27,1831,1832],{},"Avoid options that say Git Bash only",[27,1834,1835],{},"The third option can be used if you understand the consequences",[14,1837,1839,1842],{"id":1838,"level":98},"windows-installer-ssh",[364,1840,1841],{"id":1838},"Windows Installer: SSH",[103,1843,1844,1852],{"gap":105,"left-width":1708,"right-width":1709,"stack":1710},[108,1845,1846],{"v-slot:left":110},[40,1847,1848],{},[143,1849],{"alt":1850,"src":1851,"variant":147},"Git for Windows installer SSH executable screen","\u002Fimages\u002Finternet-applications\u002Fgitbash\u002Fstep05_ssh_bundled.png",[108,1853,1854],{"v-slot:right":110},[24,1855,1856,1859,1862],{},[27,1857,1858],{},"Use the bundled OpenSSH option",[27,1860,1861],{},"This keeps Git Bash SSH behavior predictable",[27,1863,1864],{},"SSH setup happens in the next lesson",[14,1866,1868,1872],{"id":1867,"level":98},"windows-installer-openssl",[364,1869,1871],{"id":1870},"windows-installer-https","Windows Installer: HTTPS",[103,1873,1874,1882],{"gap":105,"left-width":1708,"right-width":1709,"stack":1710},[108,1875,1876],{"v-slot:left":110},[40,1877,1878],{},[143,1879],{"alt":1880,"src":1881,"variant":147},"Git for Windows installer HTTPS transport backend screen","\u002Fimages\u002Finternet-applications\u002Fgitbash\u002Fstep06_openssl.png",[108,1883,1884],{"v-slot:right":110},[24,1885,1886,1889,1892],{},[27,1887,1888],{},"Keep the OpenSSL option",[27,1890,1891],{},"This is the normal Git for Windows choice",[27,1893,1894],{},"It supports secure GitHub connections",[14,1896,1898,1902],{"id":1897,"level":98},"windows-installer-checkout-style",[364,1899,1901],{"id":1900},"windows-installer-line-endings","Windows Installer: Line Endings",[103,1903,1904,1912],{"gap":105,"left-width":1708,"right-width":1709,"stack":1710},[108,1905,1906],{"v-slot:left":110},[40,1907,1908],{},[143,1909],{"alt":1910,"src":1911,"variant":147},"Git for Windows installer line ending conversion screen","\u002Fimages\u002Finternet-applications\u002Fgitbash\u002Fstep07_checkout_style.png",[108,1913,1914,1925],{"v-slot:right":110},[24,1915,1916,1919,1922],{},[27,1917,1918],{},"Keep the default line-ending option",[27,1920,1921],{},"Git handles Windows and Linux line endings for you",[27,1923,1924],{},"Do not change this unless a lesson says to",[1926,1927,1929],"admonition",{"type":1928},"note",[40,1930,1931],{},"Line-ending warnings may appear later. They are usually informational, not a sign that there's an issue.",[40,1933,1934],{},"::\n::",[14,1936,1938,1942],{"id":1937,"level":98},"windows-installer-mintty",[364,1939,1941],{"id":1940},"windows-installer-terminal-emulator","Windows Installer: Terminal Emulator",[103,1943,1944,1952],{"gap":105,"left-width":1708,"right-width":1709,"stack":1710},[108,1945,1946],{"v-slot:left":110},[40,1947,1948],{},[143,1949],{"alt":1950,"src":1951,"variant":147},"Git for Windows installer terminal emulator screen","\u002Fimages\u002Finternet-applications\u002Fgitbash\u002Fstep08_mintty.png",[108,1953,1954],{"v-slot:right":110},[24,1955,1956,1959,1962],{},[27,1957,1958],{},"Keep MinTTY selected",[27,1960,1961],{},"This is the normal Git Bash window",[27,1963,1964],{},"Course screenshots will assume this terminal style",[14,1966,1968,1972],{"id":1967,"level":98},"windows-installer-fast-forward",[364,1969,1971],{"id":1970},"windows-installer-pull-behavior","Windows Installer: Pull Behavior",[103,1973,1974,1982],{"gap":105,"left-width":1708,"right-width":1709,"stack":1710},[108,1975,1976],{"v-slot:left":110},[40,1977,1978],{},[143,1979],{"alt":1980,"src":1981,"variant":147},"Git for Windows installer git pull behavior screen","\u002Fimages\u002Finternet-applications\u002Fgitbash\u002Fstep09_ff_merge.png",[108,1983,1984],{"v-slot:right":110},[24,1985,1986,1993],{},[27,1987,1988,1989,1992],{},"Keep the default ",[265,1990,1991],{},"git pull"," behavior",[27,1994,1995],{},"Later lessons explain pull, merge, and conflicts",[14,1997,1999,2002],{"id":1998,"level":98},"windows-installer-credential-manager",[364,2000,2001],{"id":1998},"Windows Installer: Credential Manager",[103,2003,2004,2012],{"gap":105,"left-width":1708,"right-width":1709,"stack":1710},[108,2005,2006],{"v-slot:left":110},[40,2007,2008],{},[143,2009],{"alt":2010,"src":2011,"variant":147},"Git for Windows installer credential manager screen","\u002Fimages\u002Finternet-applications\u002Fgitbash\u002Fstep10_credential_manager.png",[108,2013,2014],{"v-slot:right":110},[24,2015,2016,2019,2022],{},[27,2017,2018],{},"Keep Git Credential Manager enabled",[27,2020,2021],{},"It helps with browser-based GitHub sign-in",[27,2023,2024],{},"This course still uses SSH for repo pushes",[14,2026,2028,2031],{"id":2027,"level":98},"windows-installer-extra-options",[364,2029,2030],{"id":2027},"Windows Installer: Extra Options",[103,2032,2033,2041],{"gap":105,"left-width":1708,"right-width":1709,"stack":1710},[108,2034,2035],{"v-slot:left":110},[40,2036,2037],{},[143,2038],{"alt":2039,"src":2040,"variant":147},"Git for Windows installer extra options screen","\u002Fimages\u002Finternet-applications\u002Fgitbash\u002Fstep11_extra_options_optional.png",[108,2042,2043],{"v-slot:right":110},[24,2044,2045,2053,2064,2072],{},[27,2046,2047,2048],{},"Enable file system caching\n",[24,2049,2050],{},[27,2051,2052],{},"Improves Git performance on Windows",[27,2054,2055,2056],{},"Enable symbolic links if available\n",[24,2057,2058,2061],{},[27,2059,2060],{},"Helps Git handle link-like files correctly",[27,2062,2063],{},"May require Windows Developer Mode or admin rights",[27,2065,2066,2067],{},"Skip experimental options\n",[24,2068,2069],{},[27,2070,2071],{},"They can change behavior between Git versions",[27,2073,2074],{},"Finish the installer",[14,2076,2078,2082],{"id":2077,"level":98},"step-1-open-git-bash-on-windows",[364,2079,2081],{"id":2080},"open-git-bash","Open Git Bash",[24,2083,2084,2087,2090],{},[27,2085,2086],{},"Start menu -> Git Bash",[27,2088,2089],{},"Pin it if that helps you find the same terminal later",[27,2091,2092],{},"Run the checks in the next slides from Git Bash",[14,2094,2096,2099],{"id":2095,"level":98},"windows-terminal-habit",[364,2097,2098],{"id":2095},"Windows Terminal Habit",[24,2100,2101,2104,2107],{},[27,2102,2103],{},"Use Git Bash for course commands on Windows",[27,2105,2106],{},"If another terminal opens by accident, close it and open Git Bash",[27,2108,2109],{},"Staying in one terminal makes setup problems easier to diagnose",[14,2111,2113,2116],{"id":2112,"level":17},"macos-path-terminal",[19,2114,2115],{"id":2112},"macOS Path: Terminal",[24,2117,2118,2121,2124,2127],{},[27,2119,2120],{},"Built-in Terminal is fully supported",[27,2122,2123],{},"Optional iTerm2 gives you tabs, split panes, and profiles",[27,2125,2126],{},"Beginner default: start with Terminal unless you already prefer iTerm2",[27,2128,2129],{},"See the slide below for the optional modern terminal install path",[14,2131,2133,2137],{"id":2132,"level":98},"macos-optional-iterm2-install",[364,2134,2136],{"id":2135},"optional-iterm2-install","Optional iTerm2 Install",[24,2138,2139,2146,2149,2152],{},[27,2140,2141,2142],{},"Download the stable release from ",[44,2143,2144],{"href":2144,"rel":2145},"https:\u002F\u002Fiterm2.com\u002Fdownloads.html",[48],[27,2147,2148],{},"Move iTerm2 to Applications",[27,2150,2151],{},"Open iTerm2 and run the same checks as Terminal",[27,2153,2154],{},"Use Terminal or iTerm2 consistently for course commands",[14,2156,2158,2161,2175,2178,2181],{"id":2157,"level":17},"linux-path-terminal",[19,2159,2160],{"id":2157},"Linux Path: Terminal",[24,2162,2163,2166,2169],{},[27,2164,2165],{},"Open the built-in Terminal app",[27,2167,2168],{},"Git is often installed already",[27,2170,2171,2172,2174],{},"If ",[265,2173,1637],{}," fails, use your distribution package manager",[40,2176,2177],{},"For Ubuntu:",[883,2179],{"language":885,"src":2180},"\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F02-install-git-tools\u002Flinux-path-terminal-01.sh",[24,2182,2183],{},[27,2184,2185],{},"See the slide below for the optional split-pane terminal setup",[14,2187,2189,2193,2196,2198,2201],{"id":2188,"level":98},"linux-optional-tilix-install",[364,2190,2192],{"id":2191},"optional-tilix-install","Optional Tilix Install",[40,2194,2195],{},"Tilix is a Linux terminal with split panes and profiles",[40,2197,2177],{},[883,2199],{"language":885,"src":2200},"\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F02-install-git-tools\u002Foptional-tilix-install-02.sh",[40,2202,2203],{},"Use the built-in Terminal if optional installs add friction",[14,2205,2207,2211],{"id":2206,"level":17},"step-3-confirm-git-and-shell",[19,2208,2210],{"id":2209},"confirm-git-and-shell","Confirm Git And Shell",[103,2212,2215,2229],{"gap":105,"left-width":2213,"right-width":2214},"1.15fr","0.85fr",[108,2216,2217,2219,2222,2225],{"v-slot:left":110},[40,2218,881],{},[883,2220],{"language":885,"src":2221},"\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F02-install-git-tools\u002Fconfirm-git-and-shell-03.sh",[40,2223,2224],{},"Expected output:",[883,2226],{"language":2227,"src":2228},"plaintext","\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F02-install-git-tools\u002Fexample-output-04.txt",[108,2230,2231,2234],{"v-slot:right":110},[40,2232,2233],{},"This confirms:",[24,2235,2236,2239,2242],{},[27,2237,2238],{},"Git is installed",[27,2240,2241],{},"The terminal can find Git",[27,2243,2244],{},"Your shell matches later course commands",[14,2246,2248,2252],{"id":2247,"level":17},"step-4-cli-safety-check-before-every-git-command",[19,2249,2251],{"id":2250},"check-location-before-git-commands","Check Location Before Git Commands",[103,2253,2255,2267],{"gap":105,"left-width":2254,"right-width":1709},"1.1fr",[108,2256,2257,2259,2262,2264],{"v-slot:left":110},[40,2258,881],{},[883,2260],{"language":885,"src":2261},"\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F02-install-git-tools\u002Fcheck-location-before-git-commands-05.sh",[40,2263,2224],{},[883,2265],{"language":2227,"src":2266},"\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F02-install-git-tools\u002Fexample-output-06.txt",[108,2268,2269,2272],{"v-slot:right":110},[40,2270,2271],{},"Use this before Git commands:",[24,2273,2274,2279,2284,2287],{},[27,2275,2276,2278],{},[265,2277,691],{}," shows the current folder",[27,2280,2281,2283],{},[265,2282,1368],{}," shows what is inside it",[27,2285,2286],{},"If the folder is wrong, fix location first",[27,2288,2289],{},"Do not run Git commands while guessing",[14,2291,2292,2294],{"id":1371,"level":17},[19,2293,1374],{"id":1371},[103,2295,2296,2339],{"gap":105,"left-width":106,"right-width":106},[108,2297,2298],{"v-slot:left":110},[24,2299,2300,2313,2331],{},[27,2301,2302,2305],{},[265,2303,2304],{},"git: command not found",[24,2306,2307,2310],{},[27,2308,2309],{},"Git is missing, or this terminal cannot find it",[27,2311,2312],{},"Close the terminal and reopen the correct one",[27,2314,2315,2318],{},[265,2316,2317],{},"not a git repository",[24,2319,2320,2323],{},[27,2321,2322],{},"The command ran outside a cloned repository",[27,2324,1149,2325,2327,2328,2330],{},[265,2326,691],{}," and ",[265,2329,1368],{},", then move to the repo folder",[27,2332,2333,2334],{},"Wrong terminal",[24,2335,2336],{},[27,2337,2338],{},"Windows users should switch back to Git Bash",[108,2340,2341,2344],{"v-slot:right":110},[27,2342,2343],{},"Too many terminals open",[162,2345,2346,2349,2359,2364,2370],{},[27,2347,2348],{},"Close extra terminal windows",[27,2350,2351,2352],{},"Open the correct terminal\n",[24,2353,2354,2356],{},[27,2355,648],{},[27,2357,2358],{},"Apple macOS\u002FLinux: Terminal",[27,2360,2361,2362],{},"Run ",[265,2363,1637],{},[27,2365,2361,2366,2327,2368],{},[265,2367,691],{},[265,2369,1368],{},[27,2371,2372],{},"Continue only after the folder looks right",[14,2374,2375,2377],{"id":1451,"level":17},[19,2376,1455],{"id":1454},[103,2378,2379,2401],{"gap":105,"left-width":106,"right-width":106},[108,2380,2381,2383,2389,2395],{"v-slot:left":110},[364,2382,1463],{"id":1462},[40,2384,2385,2388],{},[125,2386,2387],{},"Terminal"," - A text-based interface where you type commands to control your computer",[40,2390,2391,2394],{},[125,2392,2393],{},"CLI (Command Line Interface)"," - The text-based interface where you type commands",[40,2396,2397,2400],{},[125,2398,2399],{},"Git"," - A tool for tracking changes in code files over time",[108,2402,2403,2405],{"v-slot:right":110},[364,2404,1494],{"id":1451},[24,2406,2407,2414,2420,2426],{},[27,2408,2409],{},[44,2410,2413],{"href":2411,"rel":2412},"https:\u002F\u002Fgit-scm.com\u002Fdownloads",[48],"Git Downloads",[27,2415,2416],{},[44,2417,2419],{"href":1686,"rel":2418},[48],"Git For Windows Install Page",[27,2421,2422],{},[44,2423,2425],{"href":2144,"rel":2424},[48],"iTerm2 Downloads",[27,2427,2428],{},[44,2429,2432],{"href":2430,"rel":2431},"https:\u002F\u002Fgnunn1.github.io\u002Ftilix-web\u002F",[48],"Tilix",[14,2434,2435,2437,2440],{"id":465,"level":17},[19,2436,468],{"id":465},[40,2438,2439],{},"Before moving on, confirm you can:",[24,2441,2442,2445,2449,2456,2459],{},[27,2443,2444],{},"Open the correct terminal for your operating system",[27,2446,2361,2447],{},[265,2448,1637],{},[27,2450,1149,2451,2327,2453,2455],{},[265,2452,691],{},[265,2454,1368],{}," to check your location",[27,2457,2458],{},"Understand what terminal\u002FCLI refers to",[27,2460,2461],{},"Keep track of terminal instances",{"title":110,"searchDepth":492,"depth":492,"links":2463},[2464,2465,2466,2481,2484,2487,2488,2489,2490,2491],{"id":600,"depth":492,"text":603},{"id":1648,"depth":492,"text":1649},{"id":1677,"depth":492,"text":1678,"children":2467},[2468,2469,2470,2471,2472,2473,2474,2475,2476,2477,2478,2479,2480],{"id":1702,"depth":504,"text":1705},{"id":1740,"depth":504,"text":1743},{"id":1771,"depth":504,"text":1774},{"id":1803,"depth":504,"text":1806},{"id":1838,"depth":504,"text":1841},{"id":1870,"depth":504,"text":1871},{"id":1900,"depth":504,"text":1901},{"id":1940,"depth":504,"text":1941},{"id":1970,"depth":504,"text":1971},{"id":1998,"depth":504,"text":2001},{"id":2027,"depth":504,"text":2030},{"id":2080,"depth":504,"text":2081},{"id":2095,"depth":504,"text":2098},{"id":2112,"depth":492,"text":2115,"children":2482},[2483],{"id":2135,"depth":504,"text":2136},{"id":2157,"depth":492,"text":2160,"children":2485},[2486],{"id":2191,"depth":504,"text":2192},{"id":2209,"depth":492,"text":2210},{"id":2250,"depth":492,"text":2251},{"id":1371,"depth":492,"text":1374},{"id":1454,"depth":492,"text":1455},{"id":465,"depth":492,"text":468},"Install Git and choose the correct terminal for course commands.","Face-to-face class of about 40 students; includes OS-specific terminal choices, Git installation, short checks, and setup friction.","35",{},"\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F02-install-git-tools",{"title":1617,"description":2492},"internet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F02-install-git-tools",[1829,1609,529],"21:30","u1x5bq-JmCg","https:\u002F\u002Fyoutu.be\u002Fu1x5bq-JmCg","71DrP8YI_ks4jUswWJXy9rmZOVVoeaJAEPancHNHsV4",{"id":2505,"title":2506,"audience":9,"body":2507,"contentType":508,"course":509,"description":3582,"estimateBasis":3583,"estimatedDiscussionMinutes":3584,"estimatedLiveMinutes":3585,"estimatedTotalMinutes":3586,"extension":515,"meta":3587,"module":517,"navigation":518,"order":514,"path":3588,"promptAssist":521,"seo":3589,"status":523,"stem":3590,"tags":3591,"videoDuration":3595,"videoId":3596,"videoLink":3597,"videoTitle":3598,"week":517,"__hash__":3599},"content\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F03-setup-github-ssh.md","Set Up GitHub SSH",{"type":11,"value":2508,"toc":3554},[2509,2535,2553,2578,2591,2618,2655,2732,2780,2847,2923,2965,2991,3023,3061,3106,3140,3209,3211,3214,3225,3297,3326,3360,3408,3454,3522],[14,2510,2512,2515],{"id":2511,"level":17},"goals",[19,2513,2514],{"id":2511},"Goals",[24,2516,2517,2520,2523,2526,2529,2532],{},[27,2518,2519],{},"Confirm Git works in the correct terminal",[27,2521,2522],{},"Sign in to GitHub with a school or personal account",[27,2524,2525],{},"Create or reuse an SSH key for GitHub",[27,2527,2528],{},"Add the public key to GitHub",[27,2530,2531],{},"Create and clone your course repository",[27,2533,2534],{},"Set Git identity inside the cloned repository",[14,2536,2538,2541,2550],{"id":2537,"level":17},"terminal-by-os",[19,2539,2540],{"id":2537},"Terminal By OS",[24,2542,2543,2545,2548],{},[27,2544,648],{},[27,2546,2547],{},"Apple macOS: Terminal or iTerm2",[27,2549,663],{},[40,2551,2552],{},"Run these commands on your own computer",[14,2554,2556,2559],{"id":2555,"level":17},"git-and-ssh-terms",[19,2557,2558],{"id":2555},"Git And SSH Terms",[24,2560,2561,2564,2572,2575],{},[27,2562,2563],{},"Git identity: name and email attached to commits in a repository",[27,2565,2566,2567],{},"SSH key pair: private key stays on your computer, public key goes to GitHub\n",[24,2568,2569],{},[27,2570,2571],{},"This is how we'll authenticate to GitHub",[27,2573,2574],{},"SSH agent: helper that keeps your private key available to Git commands",[27,2576,2577],{},"Clone: local folder connected to a GitHub repository",[14,2579,2581,2584,2588],{"id":2580,"level":17},"ssh-key-flow",[19,2582,2583],{"id":2580},"SSH Key Flow",[2585,2586],"mermaid",{"code":2587},"sequenceDiagram\n  participant Terminal\n  participant PrivateKey as Private key on your computer\n  participant GitHub as Public key in GitHub\n  Terminal->>PrivateKey: Load key with ssh-add\n  Terminal->>GitHub: Ask to authenticate\n  GitHub-->>Terminal: Confirm matching public key\n",[40,2589,2590],{},"GitHub receives only the public key. The private key stays on your computer",[14,2592,2594,2597],{"id":2593,"level":17},"step-1-check-git",[19,2595,2596],{"id":2593},"Step 1: Check Git",[103,2598,2599,2607],{"gap":105,"left-width":106,"right-width":106},[108,2600,2601,2603],{"v-slot:left":110},[40,2602,881],{},[883,2604],{"label":2605,"language":885,"src":2606},"check-git.sh","\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F03-setup-github-ssh\u002Fstep-1-check-git-01.sh",[108,2608,2609,2611,2615],{"v-slot:right":110},[40,2610,2224],{},[883,2612],{"label":2613,"language":2227,"src":2614},"example-output.txt","\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F03-setup-github-ssh\u002Fexample-output-02.txt",[40,2616,2617],{},"A valid version means Git is installed and available in this terminal",[14,2619,2621,2625],{"id":2620,"level":17},"step-2-github-account",[19,2622,2624],{"id":2623},"step-2-sign-in-to-github","Step 2: Sign In To GitHub",[103,2626,2628,2647],{"gap":105,"left-width":106,"right-width":2627},"0.8fr",[108,2629,2630],{"v-slot:left":110},[24,2631,2632,2635,2638,2641,2644],{},[27,2633,2634],{},"Use an existing GitHub account or create one",[27,2636,2637],{},"School email recommended for course identity",[27,2639,2640],{},"Personal email is fine if you prefer it",[27,2642,2643],{},"Avoid work email so course access does not depend on an employer account",[27,2645,2646],{},"Confirm you can open GitHub Settings before continuing",[108,2648,2649],{"v-slot:right":110},[40,2650,2651],{},[143,2652],{"alt":2653,"src":2654,"variant":147},"GitHub account menu open with Settings visible","\u002Fimages\u002Finternet-applications\u002Fgithub-ssh\u002Fgithub-logged-in.png",[14,2656,2658,2662],{"id":2657,"level":17},"step-2-create-repo",[19,2659,2661],{"id":2660},"step-3-create-course-repository","Step 3: Create Course Repository",[103,2663,2665,2724],{"gap":105,"left-width":2664,"right-width":2213},"0.95fr",[108,2666,2667,2670],{"v-slot:left":110},[40,2668,2669],{},"In GitHub:",[24,2671,2672,2677,2683,2689,2704,2710,2713,2721],{},[27,2673,169,2674],{},[265,2675,2676],{},"+",[27,2678,2679,2680],{},"Choose ",[265,2681,2682],{},"New repository",[27,2684,2685,2686],{},"Name it ",[265,2687,2688],{},"\u003Cucid>-IT202-\u003Csection>-\u003CsemYear>",[27,2690,2691,2692,2695,2696,2699,2700,2703],{},"Semester code examples: ",[265,2693,2694],{},"S2026"," spring, ",[265,2697,2698],{},"M2026"," summer, ",[265,2701,2702],{},"F2026"," fall",[27,2705,2706,2707],{},"Set visibility to ",[265,2708,2709],{},"Private",[27,2711,2712],{},"Toggle \"Add README\"",[27,2714,2715,2716],{},"Do not toggle \"Add .gitignore\"",[24,2717,2718],{},[27,2719,2720],{},"A future lesson will discuss and add this important file",[27,2722,2723],{},"Do not add starter files unless instructed",[108,2725,2726],{"v-slot:right":110},[40,2727,2728],{},[143,2729],{"alt":2730,"src":2731,"variant":147},"GitHub new repository form with course naming pattern, private visibility, and README enabled","\u002Fimages\u002Finternet-applications\u002Fgithub-ssh\u002Fnew-repo.png",[14,2733,2735,2739,2766],{"id":2734,"level":17},"step-3-check-existing-key",[19,2736,2738],{"id":2737},"step-4-check-for-existing-ssh-key","Step 4: Check For Existing SSH Key",[103,2740,2741,2749],{"gap":105,"left-width":106,"right-width":106},[108,2742,2743,2745],{"v-slot:left":110},[40,2744,881],{},[883,2746],{"label":2747,"language":885,"src":2748},"check-ssh-folder.sh","\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F03-setup-github-ssh\u002Fstep-3-check-for-existing-ssh-key-03.sh",[108,2750,2751,2754,2757],{"v-slot:right":110},[40,2752,2753],{},"Example output:",[883,2755],{"label":2613,"language":2227,"src":2756},"\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F03-setup-github-ssh\u002Fexample-output-04.txt",[40,2758,2759,2760,2327,2763],{},"Look for a matching GitHub-specific pair such as ",[265,2761,2762],{},"github_key",[265,2764,2765],{},"github_key.pub",[40,2767,2768,2769,2772,2773,1200,2776,2779],{},"You can reuse an existing matching pair only if it is ",[125,2770,2771],{},"NOT"," a default key such as ",[265,2774,2775],{},"id_ed25519",[265,2777,2778],{},"id_rsa",". Otherwise, create a GitHub-specific key in the next step",[14,2781,2783,2787,2789,2793,2795,2798],{"id":2782,"level":17},"step-4-create-key-if-needed",[19,2784,2786],{"id":2785},"step-5-create-ssh-key-if-needed","Step 5: Create SSH Key If Needed",[40,2788,881],{},[883,2790],{"label":2791,"language":885,"src":2792},"create-github-key.sh","\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F03-setup-github-ssh\u002Fstep-4-create-ssh-key-if-needed-05.sh",[40,2794,2753],{},[883,2796],{"label":2613,"language":2227,"src":2797},"\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F03-setup-github-ssh\u002Fexample-output-06.txt",[24,2799,2800,2826,2831,2836],{},[27,2801,2802,2803],{},"Command flags:\n",[24,2804,2805,2811,2817],{},[27,2806,2807,2810],{},[265,2808,2809],{},"-t"," chooses the key type",[27,2812,2813,2816],{},[265,2814,2815],{},"-C"," adds a comment label, usually your GitHub email",[27,2818,2819,2821,2822,2825],{},[265,2820,1164],{}," chooses the output file path (must include ",[265,2823,2824],{},"~\u002F.ssh\u002F"," followed by the file name)",[27,2827,2828,2830],{},[265,2829,2762],{}," is the private key file",[27,2832,2833,2835],{},[265,2834,2765],{}," is the public key file for GitHub",[27,2837,2838,2839],{},"Passphrase is optional unless your instructor requires one\n",[24,2840,2841,2844],{},[27,2842,2843],{},"Pro: protects the key if someone gets the file",[27,2845,2846],{},"Con: adds an unlock prompt when the key is used",[14,2848,2850,2854,2871,2903],{"id":2849,"level":17},"step-5-start-agent-and-add-key",[19,2851,2853],{"id":2852},"step-6-start-ssh-agent-and-verify-key","Step 6: Start SSH Agent And Verify Key",[103,2855,2856,2864],{"gap":105,"left-width":2254,"right-width":106},[108,2857,2858,2860],{"v-slot:left":110},[40,2859,881],{},[883,2861],{"label":2862,"language":885,"src":2863},"start-agent-add-key.sh","\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F03-setup-github-ssh\u002Fstep-5-start-ssh-agent-and-add-key-07.sh",[108,2865,2866,2868],{"v-slot:right":110},[40,2867,2753],{},[883,2869],{"label":2613,"language":2227,"src":2870},"\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F03-setup-github-ssh\u002Fexample-output-08.txt",[24,2872,2873,2879,2900],{},[27,2874,2875,2878],{},[265,2876,2877],{},"eval \"$(ssh-agent -s)\""," starts the SSH helper GitHub docs usually show",[27,2880,2881,2882,2885,2886,2889],{},"If that fails, run ",[265,2883,2884],{},"exec ssh-agent bash",", then run ",[265,2887,2888],{},"ssh-add ~\u002F.ssh\u002Fgithub_key",[24,2890,2891],{},[27,2892,1149,2893,2896,2897,2899],{},[265,2894,2895],{},"~\u002F.ssh\u002Fgithub_key"," because ",[265,2898,788],{}," avoids issues with spaces in home directory paths",[27,2901,2902],{},"Then verify the key is loaded",[103,2904,2905,2913],{"gap":105,"left-width":106,"right-width":106},[108,2906,2907,2909],{"v-slot:left":110},[40,2908,881],{},[883,2910],{"label":2911,"language":885,"src":2912},"verify-loaded-key.sh","\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F03-setup-github-ssh\u002Fverify-loaded-key-09.sh",[108,2914,2915,2917,2920],{"v-slot:right":110},[40,2916,2224],{},[883,2918],{"label":2613,"language":2227,"src":2919},"\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F03-setup-github-ssh\u002Fexample-output-10.txt",[40,2921,2922],{},"One loaded key is enough for this lesson",[14,2924,2926,2930,2947],{"id":2925,"level":17},"step-6-copy-public-key",[19,2927,2929],{"id":2928},"step-7-copy-public-key","Step 7: Copy Public Key",[103,2931,2932,2940],{"gap":105,"left-width":106,"right-width":106},[108,2933,2934,2936],{"v-slot:left":110},[40,2935,881],{},[883,2937],{"label":2938,"language":885,"src":2939},"show-public-key.sh","\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F03-setup-github-ssh\u002Fstep-6-copy-public-key-11.sh",[108,2941,2942,2944],{"v-slot:right":110},[40,2943,2753],{},[883,2945],{"label":2613,"language":2227,"src":2946},"\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F03-setup-github-ssh\u002Fexample-output-12.txt",[24,2948,2949,2959],{},[27,2950,2951,2952,2955,2956,2958],{},"Copy the full line starting with ",[265,2953,2954],{},"ssh-ed25519"," and ending with the value you set with ",[265,2957,2815],{}," earlier",[27,2960,2961,2962,2964],{},"Do not copy ",[265,2963,2762],{},", which is the private key (never share the private key)",[14,2966,2968,2972],{"id":2967,"level":17},"step-7-add-key-to-github",[19,2969,2971],{"id":2970},"step-8-add-key-to-github","Step 8: Add Key To GitHub",[24,2973,2974,2977,2982,2985,2988],{},[27,2975,2976],{},"In GitHub, open account settings",[27,2978,1683,2979],{},[265,2980,2981],{},"SSH and GPG keys",[27,2983,2984],{},"Add a new authentication key",[27,2986,2987],{},"Paste the public key from the previous step",[27,2989,2990],{},"See the slides below for the GitHub screens",[14,2992,2994,2998],{"id":2993,"level":98},"step-8-open-github-settings",[364,2995,2997],{"id":2996},"open-github-settings","Open GitHub Settings",[103,2999,3000,3008],{"gap":105,"left-width":2254,"right-width":1709,"stack":1710},[108,3001,3002],{"v-slot:left":110},[40,3003,3004],{},[143,3005],{"alt":3006,"src":3007,"variant":147},"GitHub profile menu with Settings highlighted","\u002Fimages\u002Finternet-applications\u002Fgithub-ssh\u002Fssh-key-01-gh-menu.png",[108,3009,3010],{"v-slot:right":110},[24,3011,3012,3015,3020],{},[27,3013,3014],{},"Click your GitHub profile photo",[27,3016,2679,3017],{},[265,3018,3019],{},"Settings",[27,3021,3022],{},"Use the account menu, not the repository settings",[14,3024,3026,3030],{"id":3025,"level":98},"step-8-open-ssh-keys-page",[364,3027,3029],{"id":3028},"open-ssh-and-gpg-keys","Open SSH And GPG Keys",[103,3031,3032,3040],{"gap":105,"left-width":2254,"right-width":1709,"stack":1710},[108,3033,3034],{"v-slot:left":110},[40,3035,3036],{},[143,3037],{"alt":3038,"src":3039,"variant":147},"GitHub settings sidebar with SSH and GPG keys selected","\u002Fimages\u002Finternet-applications\u002Fgithub-ssh\u002Fssh-key-02-gh-ssh-link.png",[108,3041,3042],{"v-slot:right":110},[24,3043,3044,3051,3056],{},[27,3045,3046,3047,3050],{},"Find the ",[265,3048,3049],{},"Access"," section",[27,3052,3053,3054],{},"Open ",[265,3055,2981],{},[27,3057,2679,3058],{},[265,3059,3060],{},"New SSH key",[14,3062,3064,3068],{"id":3063,"level":98},"step-8-add-new-ssh-key",[364,3065,3067],{"id":3066},"add-new-ssh-key","Add New SSH Key",[103,3069,3071,3079],{"gap":105,"left-width":3070,"right-width":2214,"stack":1710},"1.35fr",[108,3072,3073],{"v-slot:left":110},[40,3074,3075],{},[143,3076],{"alt":3077,"src":3078,"variant":147},"GitHub Add new SSH Key form with title, authentication key type, and public key field","\u002Fimages\u002Finternet-applications\u002Fgithub-ssh\u002Fssh-key-03-add-new-key.png",[108,3080,3081],{"v-slot:right":110},[24,3082,3083,3089,3095,3098,3103],{},[27,3084,3085,3086],{},"Title it clearly, such as ",[265,3087,3088],{},"\u003Ccourse> Laptop",[27,3090,3091,3092],{},"Keep key type as ",[265,3093,3094],{},"Authentication Key",[27,3096,3097],{},"Paste the full public key line",[27,3099,169,3100],{},[265,3101,3102],{},"Add SSH key",[27,3104,3105],{},"Never paste the private key",[14,3107,3109,3113],{"id":3108,"level":17},"step-8-test-auth",[19,3110,3112],{"id":3111},"step-9-test-github-ssh-access","Step 9: Test GitHub SSH Access",[103,3114,3115,3130],{"gap":105,"left-width":106,"right-width":2254},[108,3116,3117,3119,3123],{"v-slot:left":110},[40,3118,881],{},[883,3120],{"label":3121,"language":885,"src":3122},"test-github-ssh.sh","\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F03-setup-github-ssh\u002Fstep-8-test-github-ssh-access-13.sh",[40,3124,3125,3126,3129],{},"If prompted the first time, type ",[265,3127,3128],{},"yes"," to trust GitHub's host key",[108,3131,3132,3134,3137],{"v-slot:right":110},[40,3133,2224],{},[883,3135],{"label":2613,"language":2227,"src":3136},"\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F03-setup-github-ssh\u002Fexample-output-14.txt",[40,3138,3139],{},"This confirms authentication, then GitHub closes the connection",[14,3141,3143,3147],{"id":3142,"level":17},"step-9-clone-repo",[19,3144,3146],{"id":3145},"step-10-clone-course-repository","Step 10: Clone Course Repository",[103,3148,3149,3190],{"gap":105,"left-width":1709,"right-width":2254},[108,3150,3151,3155,3184],{"v-slot:left":110},[364,3152,3154],{"id":3153},"get-the-ssh-clone-url","Get The SSH Clone URL",[24,3156,3157,3163,3170,3177],{},[27,3158,3159,3160],{},"In your GitHub repository, click ",[265,3161,3162],{},"Code",[27,3164,3165,3166,3169],{},"Choose the ",[265,3167,3168],{},"SSH"," tab",[27,3171,3172,3173,3176],{},"Copy the ",[265,3174,3175],{},"git@github.com:..."," link",[27,3178,3179,3180,3183],{},"Use that link in the ",[265,3181,3182],{},"git clone"," command",[40,3185,3186],{},[143,3187],{"alt":3188,"src":3189,"variant":147},"GitHub repository Code menu with SSH clone URL selected","\u002Fimages\u002Finternet-applications\u002Fgithub-ssh\u002Fgithub-clone-url.png",[108,3191,3192,3195,3199],{"v-slot:right":110},[40,3193,3194],{},"Run from the folder that should contain your course repo:",[883,3196],{"label":3197,"language":885,"src":3198},"clone-course-repository.sh","\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F03-setup-github-ssh\u002Fstep-9-clone-course-repository-15.sh",[1926,3200,3202],{"type":3201},"tip",[40,3203,3204,3205,3208],{},"Before cloning, run ",[265,3206,3207],{},"git rev-parse --show-toplevel",". If it prints a path, move somewhere else first. Clone this repo only once.",[40,3210,2753],{},[883,3212],{"label":2613,"language":2227,"src":3213},"\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F03-setup-github-ssh\u002Fexample-output-16.txt",[40,3215,3216,3217,3220,3221,3224],{},"If you see an empty repository warning, you probably forgot to add ",[265,3218,3219],{},"README.md"," when creating the repo. Create it with ",[265,3222,3223],{},"touch README.md",", then use the add\u002Fcommit\u002Fpush commands from the next lesson\n::\n::",[14,3226,3228,3232,3251,3270,3290],{"id":3227,"level":17},"step-10-set-repo-identity",[19,3229,3231],{"id":3230},"step-11-set-repo-git-identity","Step 11: Set Repo Git Identity",[103,3233,3234,3243],{"gap":105,"left-width":106,"right-width":106},[108,3235,3236,3239],{"v-slot:left":110},[40,3237,3238],{},"Run inside the cloned repository:",[883,3240],{"label":3241,"language":885,"src":3242},"set-repo-identity.sh","\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F03-setup-github-ssh\u002Fstep-10-set-repo-git-identity-17.sh",[108,3244,3245,3247],{"v-slot:right":110},[40,3246,2224],{},[883,3248],{"label":3249,"language":2227,"src":3250},"config-output.txt","\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F03-setup-github-ssh\u002Fexample-output-19.txt",[103,3252,3253,3262],{"gap":105,"left-width":106,"right-width":106},[108,3254,3255,3258],{"v-slot:left":110},[40,3256,3257],{},"Then verify:",[883,3259],{"label":3260,"language":885,"src":3261},"verify-repo-identity.sh","\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F03-setup-github-ssh\u002Fstep-10-set-repo-git-identity-18.sh",[108,3263,3264,3266],{"v-slot:right":110},[40,3265,2224],{},[883,3267],{"label":3268,"language":2227,"src":3269},"identity-output.txt","\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F03-setup-github-ssh\u002Fexample-output-20.txt",[24,3271,3272,3278,3284],{},[27,3273,3274,3277],{},[265,3275,3276],{},"user.name"," can be your real or display name, though commonly it's your GitHub username",[27,3279,3280,3283],{},[265,3281,3282],{},"user.email"," should match a GitHub email or GitHub no-reply address for commit linking to work (this is important)",[27,3285,3286,3289],{},[265,3287,3288],{},"core.sshCommand"," tells this repository to use your course GitHub key",[40,3291,3292,3293,3296],{},"These commands set identity for this repository. The ",[265,3294,3295],{},"--global"," flag is an option only if you intentionally want the same identity for all repositories",[14,3298,3300,3304,3307,3323],{"id":3299,"level":17},"step-11-invite-collaborators",[19,3301,3303],{"id":3302},"step-12-invite-course-collaborators","Step 12: Invite Course Collaborators",[40,3305,3306],{},"In GitHub, open your course repository:",[24,3308,3309,3312,3317,3320],{},[27,3310,3311],{},"Settings -> Collaborators and teams",[27,3313,3314,3315],{},"Invite ",[265,3316,378],{},[27,3318,3319],{},"Invite your TA if your section has one",[27,3321,3322],{},"Wait until the invitation shows as sent or accepted",[40,3324,3325],{},"This is so it can be accessed for grading and assistance",[14,3327,3329,3332],{"id":3328,"level":17},"troubleshooting-auth",[19,3330,3331],{"id":3328},"Troubleshooting Auth",[24,3333,3334,3340,3347,3354,3357],{},[27,3335,3336,3339],{},[265,3337,3338],{},"Permission denied (publickey)",": GitHub did not accept a loaded key",[27,3341,3342,3343,3346],{},"No loaded key in ",[265,3344,3345],{},"ssh-add -l",": start the agent and add the key again",[27,3348,3349,3350,3353],{},"Wrong key in GitHub: delete it and paste the ",[265,3351,3352],{},".pub"," key again",[27,3355,3356],{},"Wrong account: make sure the success message names your GitHub account",[27,3358,3359],{},"See the slide below for a quick reset sequence",[14,3361,3363,3367,3369,3396],{"id":3362,"level":98},"troubleshooting-auth-recovery",[364,3364,3366],{"id":3365},"quick-reset-sequence","Quick Reset Sequence",[40,3368,881],{},[162,3370,3371,3375,3379,3383,3388,3391],{},[27,3372,3373],{},[265,3374,2877],{},[27,3376,3377],{},[265,3378,2888],{},[27,3380,3381],{},[265,3382,3345],{},[27,3384,3385],{},[265,3386,3387],{},"cat ~\u002F.ssh\u002Fgithub_key.pub",[27,3389,3390],{},"Re-paste the public key in GitHub if needed",[27,3392,3393],{},[265,3394,3395],{},"ssh -T git@github.com",[40,3397,2171,3398,3400,3401,3403,3404,3407],{},[265,3399,2877],{}," fails in Git Bash, use ",[265,3402,2884],{},", then repeat the ",[265,3405,3406],{},"ssh-add"," steps",[14,3409,3410,3412,3415],{"id":436,"level":17},[19,3411,439],{"id":436},[40,3413,3414],{},"You are done when all are true:",[24,3416,3417,3422,3429,3434,3437,3442,3445],{},[27,3418,3419,3421],{},[265,3420,1637],{}," works",[27,3423,3424,3426,3427],{},[265,3425,3345],{}," shows ",[265,3428,2762],{},[27,3430,3431,3433],{},[265,3432,3395],{}," names your GitHub account",[27,3435,3436],{},"Your private course repository exists on GitHub",[27,3438,3439,3441],{},[265,3440,378],{}," and your TA, if applicable, are invited as collaborators",[27,3443,3444],{},"Your local terminal is open to the cloned repository",[27,3446,3447,2327,3450,3453],{},[265,3448,3449],{},"git config user.name",[265,3451,3452],{},"git config user.email"," return your repo identity",[14,3455,3456,3458],{"id":1451,"level":17},[19,3457,1455],{"id":1454},[103,3459,3460,3488],{"gap":105,"left-width":106,"right-width":106},[108,3461,3462,3464,3470,3476,3482],{"v-slot:left":110},[364,3463,1463],{"id":1462},[40,3465,3466,3469],{},[125,3467,3468],{},"Git identity"," - commit name and email saved in repo config",[40,3471,3472,3475],{},[125,3473,3474],{},"SSH key pair"," - private key on your computer, public key in GitHub",[40,3477,3478,3481],{},[125,3479,3480],{},"SSH agent"," - background helper that makes your private key available",[40,3483,3484,3487],{},[125,3485,3486],{},"Clone"," - local copy of a GitHub repository",[108,3489,3490,3492],{"v-slot:right":110},[364,3491,1494],{"id":1451},[24,3493,3494,3501,3508,3515],{},[27,3495,3496],{},[44,3497,3500],{"href":3498,"rel":3499},"https:\u002F\u002Fdocs.github.com\u002Fen\u002Fauthentication\u002Fconnecting-to-github-with-ssh\u002Fgenerating-a-new-ssh-key-and-adding-it-to-the-ssh-agent",[48],"GitHub Docs: Generate a new SSH key and add it to the ssh-agent",[27,3502,3503],{},[44,3504,3507],{"href":3505,"rel":3506},"https:\u002F\u002Fdocs.github.com\u002Fen\u002Fauthentication\u002Fconnecting-to-github-with-ssh\u002Ftesting-your-ssh-connection",[48],"GitHub Docs: Testing your SSH connection",[27,3509,3510],{},[44,3511,3514],{"href":3512,"rel":3513},"https:\u002F\u002Fdocs.github.com\u002Fen\u002Frepositories\u002Fcreating-and-managing-repositories\u002Fcreating-a-new-repository",[48],"GitHub Docs: Create a repository",[27,3516,3517],{},[44,3518,3521],{"href":3519,"rel":3520},"https:\u002F\u002Fdocs.github.com\u002Fen\u002Frepositories\u002Fcreating-and-managing-repositories\u002Fcloning-a-repository",[48],"GitHub Docs: Cloning a repository",[14,3523,3524,3526,3528],{"id":465,"level":17},[19,3525,468],{"id":465},[40,3527,1524],{},[24,3529,3530,3533,3536,3539,3542,3545,3551],{},[27,3531,3532],{},"Use the correct terminal for your operating system",[27,3534,3535],{},"Authenticate to GitHub with SSH",[27,3537,3538],{},"Find your private course repository on GitHub",[27,3540,3541],{},"Invite course collaborators",[27,3543,3544],{},"Open the local clone in the terminal",[27,3546,3547,3548],{},"Show repo-local Git identity with ",[265,3549,3550],{},"git config",[27,3552,3553],{},"Next: practice the Git commands used for course work",{"title":110,"searchDepth":492,"depth":492,"links":3555},[3556,3557,3558,3559,3560,3561,3562,3563,3564,3565,3566,3567,3572,3573,3574,3575,3576,3579,3580,3581],{"id":2511,"depth":492,"text":2514},{"id":2537,"depth":492,"text":2540},{"id":2555,"depth":492,"text":2558},{"id":2580,"depth":492,"text":2583},{"id":2593,"depth":492,"text":2596},{"id":2623,"depth":492,"text":2624},{"id":2660,"depth":492,"text":2661},{"id":2737,"depth":492,"text":2738},{"id":2785,"depth":492,"text":2786},{"id":2852,"depth":492,"text":2853},{"id":2928,"depth":492,"text":2929},{"id":2970,"depth":492,"text":2971,"children":3568},[3569,3570,3571],{"id":2996,"depth":504,"text":2997},{"id":3028,"depth":504,"text":3029},{"id":3066,"depth":504,"text":3067},{"id":3111,"depth":492,"text":3112},{"id":3145,"depth":492,"text":3146},{"id":3230,"depth":492,"text":3231},{"id":3302,"depth":492,"text":3303},{"id":3328,"depth":492,"text":3331,"children":3577},[3578],{"id":3365,"depth":504,"text":3366},{"id":436,"depth":492,"text":439},{"id":1454,"depth":492,"text":1455},{"id":465,"depth":492,"text":468},"Connect your computer to GitHub with SSH, create the course repository, clone it, and set repo-local Git identity.","Face-to-face class of about 40 students; includes GitHub account check, SSH key generation, GitHub UI steps, repo creation, clone troubleshooting, repo-local Git identity, and authentication checks.","15","70","85",{},"\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F03-setup-github-ssh",{"title":2506,"description":3582},"internet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F03-setup-github-ssh",[1829,3592,3593,3594],"github","ssh","repository","48:26","HZG3_HfczOk","https:\u002F\u002Fyoutu.be\u002FHZG3_HfczOk","Setup Git SSH and GitHub","rJ2RP6nrPEoOj98kzeevFpO0YOXaJl-M5ajP_tsjwvA",{"id":3601,"title":3602,"audience":9,"body":3603,"contentType":508,"course":509,"description":4523,"estimateBasis":4524,"estimatedDiscussionMinutes":513,"estimatedLiveMinutes":3585,"estimatedTotalMinutes":4525,"extension":515,"meta":4526,"module":517,"navigation":518,"order":4527,"path":4528,"promptAssist":521,"seo":4529,"status":523,"stem":4530,"tags":4531,"videoDuration":4534,"videoId":4535,"videoLink":4536,"videoTitle":4537,"week":517,"__hash__":4538},"content\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F04-git-commands-prs.md","Git Commands And Pull Requests",{"type":11,"value":3604,"toc":4488},[3605,3634,3655,3672,3704,3738,3789,3805,3826,3857,3889,3931,3962,3997,4021,4066,4093,4123,4141,4153,4189,4222,4258,4292,4318,4346,4376,4443,4485],[14,3606,3608,3611,3614],{"id":3607,"level":17},"objectives",[19,3609,3610],{"id":3607},"Objectives",[40,3612,3613],{},"By the end, you should be able to:",[24,3615,3616,3619,3622,3625,3628,3631],{},[27,3617,3618],{},"Explain what the common Git commands do",[27,3620,3621],{},"Connect commands to the working folder, staging area, local commits, and GitHub remote",[27,3623,3624],{},"Create a branch for practice work",[27,3626,3627],{},"Stage, commit, and push a small change",[27,3629,3630],{},"Open a pull request on GitHub",[27,3632,3633],{},"Investigate a failed push and a merge conflict",[14,3635,3637,3641,3644,3647],{"id":3636,"level":17},"git-vs-github",[19,3638,3640],{"id":3639},"git-versus-github","Git Versus GitHub",[40,3642,3643],{},"Git is the tool that tracks file history",[40,3645,3646],{},"GitHub is a website that hosts a remote copy of a Git repository",[24,3648,3649,3652],{},[27,3650,3651],{},"Git: local terminal workflow",[27,3653,3654],{},"GitHub: remote branches, pull requests, issues, and project evidence",[14,3656,3658,3662,3666,3669],{"id":3657,"level":17},"git-stages",[19,3659,3661],{"id":3660},"the-git-stages","The Git Stages",[883,3663],{"language":3664,"src":3665},"text","\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F04-git-commands-prs\u002Fthe-git-stages-01.txt",[40,3667,3668],{},"Common commands:",[883,3670],{"language":3664,"src":3671},"\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F04-git-commands-prs\u002Fthe-git-stages-02.txt",[14,3673,3675,3679,3681,3684,3687,3690],{"id":3674,"level":17},"status-first",[19,3676,3678],{"id":3677},"command-1-git-status","Command 1: git status",[40,3680,881],{},[883,3682],{"language":885,"src":3683},"\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F04-git-commands-prs\u002Fcommand-1-git-status-03.sh",[40,3685,3686],{},"Use this before and after every important Git action",[40,3688,3689],{},"It tells you:",[24,3691,3692,3695,3698,3701],{},[27,3693,3694],{},"Current branch",[27,3696,3697],{},"Changed files",[27,3699,3700],{},"Staged files",[27,3702,3703],{},"Whether your working tree is clean",[14,3705,3707,3711,3713,3716],{"id":3706,"level":17},"branch-command",[19,3708,3710],{"id":3709},"command-2-git-branch","Command 2: git branch",[40,3712,881],{},[883,3714],{"language":885,"src":3715},"\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F04-git-commands-prs\u002Fcommand-2-git-branch-04.sh",[24,3717,3718,3721,3724],{},[27,3719,3720],{},"Active branch has an asterisk",[27,3722,3723],{},"Branches are separate timelines for work",[27,3725,3726,3727],{},"Branch names are case-sensitive\n",[24,3728,3729],{},[27,3730,3731,2327,3734,3737],{},[265,3732,3733],{},"Practice",[265,3735,3736],{},"practice"," are different names",[14,3739,3741,3745,3750,3753],{"id":3740,"level":17},"create-branch",[19,3742,3744],{"id":3743},"practice-step-1-create-a-branch","Practice Step 1: Create A Branch",[40,3746,3747,3748,1257],{},"Start from ",[265,3749,1794],{},[883,3751],{"language":885,"src":3752},"\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F04-git-commands-prs\u002Fpractice-step-1-create-a-05.sh",[24,3754,3755,3766],{},[27,3756,3757,3758,3760,3761],{},"First two commands: make sure ",[265,3759,1794],{}," is current\n",[24,3762,3763],{},[27,3764,3765],{},"Explained more later",[27,3767,3768,3769],{},"Branch control commands\n",[24,3770,3771,3777,3783],{},[27,3772,3773,3776],{},[265,3774,3775],{},"git checkout -b practice",": create and switch",[27,3778,3779,3782],{},[265,3780,3781],{},"git branch practice",": create only",[27,3784,3785,3788],{},[265,3786,3787],{},"git checkout practice",": switch to existing",[14,3790,3792,3796,3799,3802],{"id":3791,"level":17},"make-file",[19,3793,3795],{"id":3794},"practice-step-2-make-a-small-file","Practice Step 2: Make A Small File",[40,3797,3798],{},"Create a small practice file:",[883,3800],{"language":885,"src":3801},"\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F04-git-commands-prs\u002Fpractice-step-2-make-a-s-06.sh",[40,3803,3804],{},"Expected result: Git shows the new file as untracked",[14,3806,3808,3812,3815,3818,3821],{"id":3807,"level":17},"add-command",[19,3809,3811],{"id":3810},"command-3-git-add","Command 3: git add",[40,3813,3814],{},"Stage the new file:",[883,3816],{"language":885,"src":3817},"\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F04-git-commands-prs\u002Fcommand-3-git-add-07.sh",[40,3819,3820],{},"Staging means: include this change in the next commit",[24,3822,3823],{},[27,3824,3825],{},"See below for add patterns and verification checks",[14,3827,3829,3833,3836,3839],{"id":3828,"level":98},"add-variants",[364,3830,3832],{"id":3831},"common-git-add-patterns","Common git add Patterns",[40,3834,3835],{},"Use the smallest clear target when possible",[883,3837],{"language":885,"src":3838},"\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F04-git-commands-prs\u002Fcommon-git-add-patterns-08.sh",[24,3840,3841,3844,3847],{},[27,3842,3843],{},"Single file: safest when you changed one file",[27,3845,3846],{},"Folder: useful when one feature is grouped in one folder",[27,3848,3849,3852,3853,3856],{},[265,3850,3851],{},"git add .",": convenient, but review ",[265,3854,3855],{},"git status"," first",[14,3858,3860,3864,3867,3870],{"id":3859,"level":17},"diff-command",[19,3861,3863],{"id":3862},"command-4-git-diff","Command 4: git diff",[40,3865,3866],{},"Before committing, inspect what changed:",[883,3868],{"language":885,"src":3869},"\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F04-git-commands-prs\u002Fcommand-4-git-diff-09.sh",[24,3871,3872,3879,3882,3887],{},[27,3873,3874,3875,3878],{},"New untracked file: ",[265,3876,3877],{},"git diff"," may show nothing",[27,3880,3881],{},"That does not mean the file is missing",[27,3883,1149,3884,3886],{},[265,3885,3855],{}," to confirm untracked files",[27,3888,1319],{},[14,3890,3892,3896,3899,3902,3905,3908],{"id":3891,"level":98},"cached-rm",[364,3893,3895],{"id":3894},"if-you-staged-the-wrong-file","If You Staged The Wrong File",[40,3897,3898],{},"If a file was staged by mistake, remove it from staging:",[883,3900],{"language":885,"src":3901},"\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F04-git-commands-prs\u002Fif-you-staged-the-wrong--10.sh",[40,3903,3904],{},"For a folder:",[883,3906],{"language":885,"src":3907},"\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F04-git-commands-prs\u002Fif-you-staged-the-wrong--11.sh",[24,3909,3910,3921],{},[27,3911,3912,3915,3916],{},[265,3913,3914],{},"--cached",": remove from staging only\n",[24,3917,3918],{},[27,3919,3920],{},"Keeps the file in your working folder",[27,3922,3923,3925,3926],{},[265,3924,624],{},": folder mode\n",[24,3927,3928],{},[27,3929,3930],{},"Recursive: include files inside the folder",[14,3932,3934,3938,3941,3944,3947],{"id":3933,"level":17},"commit-command",[19,3935,3937],{"id":3936},"command-5-git-commit","Command 5: git commit",[40,3939,3940],{},"Commit the staged file:",[883,3942],{"language":885,"src":3943},"\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F04-git-commands-prs\u002Fcommand-5-git-commit-12.sh",[40,3945,3946],{},"A commit is a saved checkpoint in your local repository",[24,3948,3949,3960],{},[27,3950,3951,3954,3955],{},[265,3952,3953],{},"-m",": commit message",[24,3956,3957],{},[27,3958,3959],{},"Required, even if the message is an empty string",[27,3961,1319],{},[14,3963,3965,3969,3971,3974,3994],{"id":3964,"level":98},"log-command",[364,3966,3968],{"id":3967},"check-the-local-history","Check The Local History",[40,3970,881],{},[883,3972],{"language":885,"src":3973},"\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F04-git-commands-prs\u002Fcheck-the-local-history-13.sh",[24,3975,3976,3982,3988],{},[27,3977,3978,3981],{},[265,3979,3980],{},"log",": show commit history",[27,3983,3984,3987],{},[265,3985,3986],{},"--oneline",": one commit per line",[27,3989,3990,3993],{},[265,3991,3992],{},"-5",": show the latest five commits",[40,3995,3996],{},"You should see your latest commit near the top",[14,3998,4000,4004,4007,4010],{"id":3999,"level":17},"push-command",[19,4001,4003],{"id":4002},"command-6-git-push","Command 6: git push",[40,4005,4006],{},"Send the branch to GitHub:",[883,4008],{"language":885,"src":4009},"\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F04-git-commands-prs\u002Fcommand-6-git-push-14.sh",[24,4011,4012,4018],{},[27,4013,4014,4017],{},[265,4015,4016],{},"origin",": common remote name for GitHub",[27,4019,4020],{},"Final part: branch you are pushing",[14,4022,4024,4028],{"id":4023,"level":17},"open-pr",[19,4025,4027],{"id":4026},"pull-request","Pull Request",[103,4029,4030,4058],{"gap":105,"left-width":106,"right-width":106},[108,4031,4032,4035,4038,4041,4044,4047],{"v-slot:left":110},[40,4033,4034],{},"On GitHub, open a pull request",[40,4036,4037],{},"Use this direction:",[883,4039],{"language":3664,"src":4040},"\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F04-git-commands-prs\u002Fpull-request-15.txt",[40,4042,4043],{},"Use a clear description:",[883,4045],{"language":3664,"src":4046},"\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F04-git-commands-prs\u002Fpull-request-description-16.txt",[24,4048,4049,4052,4055],{},[27,4050,4051],{},"Review page before merge",[27,4053,4054],{},"Shows what will change",[27,4056,4057],{},"Captures branch evidence",[108,4059,4060],{"v-slot:right":110},[40,4061,4062],{},[143,4063],{"alt":4064,"src":4065,"variant":147},"GitHub pull request creation page showing base main and compare practice","\u002Fimages\u002Fshared\u002Fgit-workflow\u002Fgithub-create-pull-request.png",[14,4067,4069,4073,4076,4084,4087,4090],{"id":4068,"level":17},"merge-pr",[19,4070,4072],{"id":4071},"merge-and-sync","Merge And Sync",[40,4074,4075],{},"After GitHub merge:",[24,4077,4078],{},[27,4079,4080,4081,4083],{},"Local ",[265,4082,1794],{}," is not updated automatically",[40,4085,4086],{},"Sync it:",[883,4088],{"language":885,"src":4089},"\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F04-git-commands-prs\u002Fmerge-and-sync-15.sh",[40,4091,4092],{},"Remote changes must be pulled down intentionally",[14,4094,4096,4100,4103,4120],{"id":4095,"level":17},"why-prs",[19,4097,4099],{"id":4098},"why-pull-requests-matter","Why Pull Requests Matter",[40,4101,4102],{},"Pull requests create evidence:",[24,4104,4105,4108,4111,4114,4117],{},[27,4106,4107],{},"Which branch changed",[27,4109,4110],{},"Which files changed",[27,4112,4113],{},"What discussion or explanation was provided",[27,4115,4116],{},"Chance to review risky changes before merging",[27,4118,4119],{},"When the change was merged",[40,4121,4122],{},"For this course, pull requests are part of the workflow evidence, not just a GitHub feature",[14,4124,4126,4130,4133],{"id":4125,"level":17},"exploration-intro",[19,4127,4129],{"id":4128},"troubleshooting-explorations","Troubleshooting Explorations",[40,4131,4132],{},"The next slides use controlled problems to practice recovery",[24,4134,4135,4138],{},[27,4136,4137],{},"The goal is not avoiding every error",[27,4139,4140],{},"The goal is reading output, identifying state, and recovering without guessing",[14,4142,4144,4147,4150],{"id":4143,"level":17},"exploration-setup",[19,4145,4146],{"id":4143},"Exploration Setup",[40,4148,4149],{},"Create a conflict practice branch:",[883,4151],{"language":885,"src":4152},"\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F04-git-commands-prs\u002Fexploration-setup-16.sh",[14,4154,4156,4160,4166,4173,4178,4181,4184],{"id":4155,"level":17},"exploration-issue-1",[19,4157,4159],{"id":4158},"exploration-issue-1-push-rejected","Exploration Issue 1: Push Rejected",[40,4161,4162,4163],{},"On GitHub, switch to ",[265,4164,4165],{},"practice-conflict",[40,4167,4168,4169,4172],{},"Edit one line in ",[265,4170,4171],{},"myFile.txt"," directly on GitHub and commit the change",[24,4174,4175],{},[27,4176,4177],{},"Use the same line you will change locally",[40,4179,4180],{},"Back locally, edit that same line and commit:",[883,4182],{"language":885,"src":4183},"\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F04-git-commands-prs\u002Fexploration-issue-1-push-17.sh",[24,4185,4186],{},[27,4187,4188],{},"See the slides below for the rejected push and the pull that creates the conflict",[14,4190,4192,4196,4199],{"id":4191,"level":98},"issue-1-push-without-pulling",[364,4193,4195],{"id":4194},"try-push-without-pulling","Try Push Without Pulling",[40,4197,4198],{},"Push the local commit before pulling the GitHub commit:",[103,4200,4201,4214],{"gap":105,"left-width":106,"right-width":106},[108,4202,4203,4206],{"v-slot:left":110},[883,4204],{"language":885,"src":4205},"\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F04-git-commands-prs\u002Ftry-push-without-pulling-20.sh",[24,4207,4208,4211],{},[27,4209,4210],{},"Expected result: push rejected",[27,4212,4213],{},"Reason: GitHub has a commit your local branch does not have",[108,4215,4216],{"v-slot:right":110},[40,4217,4218],{},[143,4219],{"alt":4220,"src":4221,"variant":147},"Git push rejected because the remote branch has commits that are not local yet","\u002Fimages\u002Fshared\u002Fgit-workflow\u002Fgit-push-rejected-before-pull.png",[14,4223,4225,4229],{"id":4224,"level":98},"issue-1-read-output",[364,4226,4228],{"id":4227},"pull-the-remote-change","Pull The Remote Change",[103,4230,4231,4250],{"gap":105,"left-width":106,"right-width":106},[108,4232,4233,4236,4239,4242,4247],{"v-slot:left":110},[40,4234,4235],{},"The usual next command is:",[883,4237],{"language":885,"src":4238},"\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F04-git-commands-prs\u002Fpull-the-remote-change-20.sh",[40,4240,4241],{},"If Git asks how to reconcile divergent branches:",[24,4243,4244],{},[27,4245,4246],{},"Use merge behavior for this course practice",[883,4248],{"language":885,"src":4249},"\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F04-git-commands-prs\u002Fpull-the-remote-change-21.sh",[108,4251,4252],{"v-slot:right":110},[40,4253,4254],{},[143,4255],{"alt":4256,"src":4257,"variant":147},"Git pull output asking how to reconcile divergent branches","\u002Fimages\u002Fshared\u002Fgit-workflow\u002Fgit-pull-divergent-branches.png",[14,4259,4261,4265,4268,4272,4275,4278,4281],{"id":4260,"level":17},"exploration-issue-2",[19,4262,4264],{"id":4263},"exploration-issue-2-merge-conflict","Exploration Issue 2: Merge Conflict",[40,4266,4267],{},"After pulling, Git should report a conflict",[40,4269,3053,4270],{},[265,4271,4171],{},[40,4273,4274],{},"You may see markers like:",[883,4276],{"language":3664,"src":4277},"\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F04-git-commands-prs\u002Fexploration-issue-2-merg-18.txt",[40,4279,4280],{},"Conflict markers show:",[24,4282,4283,4286,4289],{},[27,4284,4285],{},"Your local version",[27,4287,4288],{},"The GitHub version",[27,4290,4291],{},"The part Git could not combine automatically",[14,4293,4295,4299,4305,4308,4311,4314],{"id":4294,"level":98},"resolve-conflict",[364,4296,4298],{"id":4297},"resolve-the-conflict","Resolve The Conflict",[40,4300,4301,4302,4304],{},"Edit ",[265,4303,4171],{}," so it contains the final text you want",[40,4306,4307],{},"Remove all conflict markers",[40,4309,4310],{},"Then run:",[883,4312],{"language":885,"src":4313},"\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F04-git-commands-prs\u002Fresolve-the-conflict-19.sh",[24,4315,4316],{},[27,4317,1319],{},[14,4319,4321,4325,4328],{"id":4320,"level":98},"verify-conflict-resolution",[364,4322,4324],{"id":4323},"verify-the-recovery","Verify The Recovery",[40,4326,4327],{},"Check:",[24,4329,4330,4335,4338,4343],{},[27,4331,4332,4334],{},[265,4333,3855],{}," is clean",[27,4336,4337],{},"GitHub shows the updated branch",[27,4339,4340,4342],{},[265,4341,4171],{}," contains the final text",[27,4344,4345],{},"No conflict markers remain",[14,4347,4348,4350],{"id":1371,"level":17},[19,4349,1374],{"id":1371},[24,4351,4352,4355,4358,4361,4364,4373],{},[27,4353,4354],{},"Committing on the wrong branch",[27,4356,4357],{},"Forgetting to push after committing",[27,4359,4360],{},"Forgetting to pull after merging on GitHub",[27,4362,4363],{},"Leaving conflict markers in a file",[27,4365,4366,4367,1200,4370],{},"Using vague branch names like ",[265,4368,4369],{},"stuff",[265,4371,4372],{},"final",[27,4374,4375],{},"Making several unrelated changes in one commit",[14,4377,4378,4380],{"id":1451,"level":17},[19,4379,1455],{"id":1454},[103,4381,4382,4406],{"gap":105,"left-width":106,"right-width":106},[108,4383,4384,4386],{"v-slot:left":110},[364,4385,1463],{"id":1462},[24,4387,4388,4391,4394,4397,4400,4403],{},[27,4389,4390],{},"Working folder: files you can edit",[27,4392,4393],{},"Staging area: changes selected for the next commit",[27,4395,4396],{},"Commit: local saved checkpoint",[27,4398,4399],{},"Remote: GitHub copy of the repository",[27,4401,4402],{},"Pull request: GitHub page for reviewing and merging branch work",[27,4404,4405],{},"Conflict: a change Git cannot merge automatically",[108,4407,4408,4410],{"v-slot:right":110},[364,4409,1494],{"id":1451},[24,4411,4412,4420,4427,4435],{},[27,4413,4414,4415],{},"Pro Git Book: ",[44,4416,4419],{"href":4417,"rel":4418},"https:\u002F\u002Fgit-scm.com\u002Fbook\u002Fen\u002Fv2\u002FGit-Basics-Getting-a-Git-Repository",[48],"Git Basics",[27,4421,4414,4422],{},[44,4423,4426],{"href":4424,"rel":4425},"https:\u002F\u002Fgit-scm.com\u002Fbook\u002Fen\u002Fv2\u002FGit-Branching-Basic-Branching-and-Merging",[48],"Basic Branching and Merging",[27,4428,4429,4430],{},"GitHub Docs: ",[44,4431,4434],{"href":4432,"rel":4433},"https:\u002F\u002Fdocs.github.com\u002Fen\u002Fpull-requests\u002Fcollaborating-with-pull-requests\u002Fproposing-changes-to-your-work-with-pull-requests\u002Fcreating-a-pull-request",[48],"Creating a pull request",[27,4436,4437,4438],{},"Oh Shit, Git!?!: ",[44,4439,4442],{"href":4440,"rel":4441},"https:\u002F\u002Fohshitgit.com\u002F",[48],"Common Git recovery situations",[14,4444,4445,4447],{"id":465,"level":17},[19,4446,468],{"id":465},[103,4448,4451,4475],{"gap":515,"left-width":4449,"right-width":4450},"0.72fr","1.38fr",[108,4452,4453,4455],{"v-slot:left":110},[40,4454,1524],{},[24,4456,4457,4463,4466,4469,4472],{},[27,4458,4459,4460,4462],{},"Read ",[265,4461,3855],{}," before choosing the next command",[27,4464,4465],{},"Move a change from working folder to staging area to commit",[27,4467,4468],{},"Push a branch to GitHub and open a pull request",[27,4470,4471],{},"Recognize when a failed push or conflict needs recovery",[27,4473,4474],{},"Next: open the cloned repository in VS Code",[108,4476,4477,4480],{"v-slot:right":110},[40,4478,4479],{},"Git\u002FGitHub flow:",[4481,4482],"figure-image",{"alt":4483,"src":4484},"Lane diagram showing local Git commands moving from the base branch to a feature or homework branch, then pushing to GitHub for pull request review and merge, then pulling the base branch back locally","\u002Fimages\u002Fshared\u002Fgit-github-lane-flow.svg",[40,4486,4487],{},"::",{"title":110,"searchDepth":492,"depth":492,"links":4489},[4490,4491,4492,4493,4494,4495,4496,4497,4500,4503,4506,4507,4508,4509,4510,4511,4512,4516,4520,4521,4522],{"id":3607,"depth":492,"text":3610},{"id":3639,"depth":492,"text":3640},{"id":3660,"depth":492,"text":3661},{"id":3677,"depth":492,"text":3678},{"id":3709,"depth":492,"text":3710},{"id":3743,"depth":492,"text":3744},{"id":3794,"depth":492,"text":3795},{"id":3810,"depth":492,"text":3811,"children":4498},[4499],{"id":3831,"depth":504,"text":3832},{"id":3862,"depth":492,"text":3863,"children":4501},[4502],{"id":3894,"depth":504,"text":3895},{"id":3936,"depth":492,"text":3937,"children":4504},[4505],{"id":3967,"depth":504,"text":3968},{"id":4002,"depth":492,"text":4003},{"id":4026,"depth":492,"text":4027},{"id":4071,"depth":492,"text":4072},{"id":4098,"depth":492,"text":4099},{"id":4128,"depth":492,"text":4129},{"id":4143,"depth":492,"text":4146},{"id":4158,"depth":492,"text":4159,"children":4513},[4514,4515],{"id":4194,"depth":504,"text":4195},{"id":4227,"depth":504,"text":4228},{"id":4263,"depth":492,"text":4264,"children":4517},[4518,4519],{"id":4297,"depth":504,"text":4298},{"id":4323,"depth":504,"text":4324},{"id":1371,"depth":492,"text":1374},{"id":1454,"depth":492,"text":1455},{"id":465,"depth":492,"text":468},"Practice the core Git workflow with small changes, branches, pull requests, and two guided troubleshooting scenarios.","Face-to-face class of about 40 students; includes command explanation, branch practice, pull request walkthrough, conflict exploration, and recovery discussion.","90",{},"40","\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F04-git-commands-prs",{"title":3602,"description":4523},"internet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F04-git-commands-prs",[1829,4532,4533],"branches","pull-requests","48:54","MOa9zIUOqaI","https:\u002F\u002Fyoutu.be\u002FMOa9zIUOqaI","Git Commands and PRs","GTIGHU5IyAE7RcRy68evvCM5YPZVDAWUbiTdBfC9nCI",{"id":4540,"title":4541,"audience":9,"body":4542,"contentType":508,"course":509,"description":5314,"estimateBasis":5315,"estimatedDiscussionMinutes":512,"estimatedLiveMinutes":514,"estimatedTotalMinutes":4527,"extension":515,"meta":5316,"module":517,"navigation":518,"order":5317,"path":5318,"promptAssist":521,"seo":5319,"status":523,"stem":5320,"tags":5321,"videoDuration":5325,"videoId":5326,"videoLink":5327,"videoTitle":5328,"week":517,"__hash__":5329},"content\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F05-setup-local-development-environment.md","Local Development Environment Setup",{"type":11,"value":4543,"toc":5292},[4544,4561,4579,4600,4625,4660,4692,4770,4847,4949,4977,5042,5119,5143,5170,5188,5212,5263],[14,4545,4547,4550],{"id":4546,"level":17},"local-development-environment-title",[19,4548,4541],{"id":4549},"local-development-environment-setup",[24,4551,4552,4555,4558],{},[27,4553,4554],{},"VS Code for editing course files",[27,4556,4557],{},"Course profile for Internet Applications extensions",[27,4559,4560],{},"Optional local PHP check on your own computer",[14,4562,4563,4565],{"id":600,"level":17},[19,4564,603],{"id":600},[24,4566,4567,4570,4573,4576],{},[27,4568,4569],{},"Install VS Code",[27,4571,4572],{},"Open the course repository root",[27,4574,4575],{},"Install the required extensions for the course",[27,4577,4578],{},"Have a local php install as a light weight dev server (as a backup for the VM lessons)",[14,4580,4582,4585],{"id":4581,"level":17},"what-this-setup-does",[19,4583,4584],{"id":4581},"What This Setup Does",[24,4586,4587,4590,4593],{},[27,4588,4589],{},"VS Code: editor for course files",[27,4591,4592],{},"Extensions: syntax help, Git visibility, database viewing, time tracking",[27,4594,4595,4596,4599],{},"Optional host PHP: quick ",[265,4597,4598],{},"php -v"," check and editor support",[14,4601,4603,4606],{"id":4602,"level":17},"step-1-install-vs-code",[19,4604,4605],{"id":4602},"Step 1: Install VS Code",[24,4607,4608,4616,4619,4622],{},[27,4609,4610,4611],{},"Download: ",[44,4612,4615],{"href":4613,"rel":4614},"https:\u002F\u002Fcode.visualstudio.com\u002FDownload",[48],"Visual Studio Code",[27,4617,4618],{},"Install like a normal desktop app",[27,4620,4621],{},"Do not install VS Code inside your repository folder",[27,4623,4624],{},"VS Code is the editor; the repo is the workspace folder",[14,4626,4628,4631,4634,4657],{"id":4627,"level":17},"step-2-open-the-repository",[19,4629,4630],{"id":4627},"Step 2: Open The Repository",[40,4632,4633],{},"After the course repo is cloned:",[24,4635,4636,4646,4649,4654],{},[27,4637,4638,4639,4642,4643],{},"VS Code -> ",[265,4640,4641],{},"File"," -> ",[265,4644,4645],{},"Open Folder",[27,4647,4648],{},"Choose the repository root",[27,4650,4651,4652],{},"Folder name should match ",[265,4653,2688],{},[27,4655,4656],{},"Trust the workspace only if it is your cloned GitHub repo",[40,4658,4659],{},"Do not open a ZIP copy or clone the same repo again",[14,4661,4663,4667,4689],{"id":4662,"level":17},"step-3-create-course-profile",[19,4664,4666],{"id":4665},"step-3-create-a-course-profile","Step 3: Create A Course Profile",[24,4668,4669,4675,4683,4686],{},[27,4670,4671,4672],{},"Gear icon -> ",[265,4673,4674],{},"Profiles",[27,4676,4677,4678,1200,4680],{},"Create ",[265,4679,509],{},[265,4681,4682],{},"PHP",[27,4684,4685],{},"Switch into that profile",[27,4687,4688],{},"Install course extensions there",[40,4690,4691],{},"Profiles keep this course setup separate from other projects",[14,4693,4695,4698,4702],{"id":4694,"level":17},"step-4-install-extensions",[19,4696,4697],{"id":4694},"Step 4: Install Extensions",[364,4699,4701],{"id":4700},"start-with-these","Start With These",[24,4703,4704,4712,4720,4728,4736,4744,4759,4767],{},[27,4705,4706,4707],{},"Auto Rename Tag (Jun Han)\n",[24,4708,4709],{},[27,4710,4711],{},"Auto-completes matching HTML tags while you edit",[27,4713,4714,4715],{},"Bracket Lens (wraith13)\n",[24,4716,4717],{},[27,4718,4719],{},"Adds readability cues for closing brackets",[27,4721,4722,4723],{},"GitLens (GitKraken)\n",[24,4724,4725],{},[27,4726,4727],{},"Required: Git history, blame, and branch visibility in-editor",[27,4729,4730,4731],{},"MySQL (cweijan)\n",[24,4732,4733],{},[27,4734,4735],{},"Required later: connect to and inspect course database tables",[27,4737,4738,4739],{},"PHP Intelephense (Ben Mewburn)\n",[24,4740,4741],{},[27,4742,4743],{},"PHP language support, syntax checks, and warnings",[27,4745,4746,4747],{},"Todo Tree (Gruntfuggly)\n",[24,4748,4749],{},[27,4750,4751,4752,621,4755,4758],{},"Finds and lists ",[265,4753,4754],{},"TODO",[265,4756,4757],{},"FIXME",", and similar comments",[27,4760,4761,4762],{},"WakaTime\n",[24,4763,4764],{},[27,4765,4766],{},"Required in sections that use time tracking; needs your API key",[27,4768,4769],{},"See the slides below for MySQL and WakaTime setup",[14,4771,4773,4777],{"id":4772,"level":98},"step-4a-setup-mysql-extension",[19,4774,4776],{"id":4775},"step-4a-configure-mysql-extension","Step 4A: Configure MySQL Extension",[103,4778,4780,4839],{"gap":105,"left-width":1709,"right-width":2254,"align":4779},"center",[108,4781,4782,4786],{"v-slot:left":110},[364,4783,4785],{"id":4784},"connection-settings","Connection Settings",[24,4787,4788,4791,4836],{},[27,4789,4790],{},"Open the MySQL panel from the VS Code sidebar",[27,4792,4793,4794],{},"Create a new connection with your course database details",[24,4795,4796,4802,4808,4811,4814],{},[27,4797,4798,4799],{},"Host: ",[265,4800,4801],{},"db.ethereallab.app",[27,4803,4804,4805],{},"Port: ",[265,4806,4807],{},"3306",[27,4809,4810],{},"Username: your UCID",[27,4812,4813],{},"Database: your UCID",[27,4815,4816,4817],{},"Password: from your generated connection string\n",[24,4818,4819,4827],{},[27,4820,4821,4822],{},"Get it from the ",[44,4823,4826],{"href":4824,"rel":4825},"https:\u002F\u002Fcourses.ethereallab.app\u002Fdatabase",[48],"course database page",[27,4828,4829,4830,2327,4833],{},"Use the 12 characters between ",[265,4831,4832],{},"ucid:",[265,4834,4835],{},"@",[27,4837,4838],{},"Save this connection; you will reuse it in later database lessons",[108,4840,4841],{"v-slot:right":110},[40,4842,4843],{},[143,4844],{"alt":4845,"src":4846,"variant":147},"MySQL extension connection setup for the course database","\u002Fimages\u002Finternet-applications\u002Flocal-setup\u002Fmysql-setup.png",[14,4848,4850,4854],{"id":4849,"level":98},"step-4b-setup-wakatime",[19,4851,4853],{"id":4852},"step-4b-configure-wakatime","Step 4B: Configure WakaTime",[103,4855,4857,4912],{"gap":105,"left-width":2664,"right-width":4856,"align":4779},"1.05fr",[108,4858,4859,4863],{"v-slot:left":110},[364,4860,4862],{"id":4861},"setup-order","Setup Order",[24,4864,4865,4872,4875,4878,4881,4884,4901,4906,4909],{},[27,4866,1683,4867],{},[44,4868,4871],{"href":4869,"rel":4870},"https:\u002F\u002Fwakatime.com\u002Fsignup",[48],"WakaTime",[27,4873,4874],{},"Create or open your account",[27,4876,4877],{},"Copy your API key from account settings",[27,4879,4880],{},"In VS Code, search Extensions for WakaTime",[27,4882,4883],{},"Install the WakaTime extension",[27,4885,4886,4887],{},"Open Command Palette:",[24,4888,4889,4895],{},[27,4890,4891,4892],{},"Windows\u002FLinux: ",[265,4893,4894],{},"Ctrl+Shift+P",[27,4896,4897,4898],{},"macOS: ",[265,4899,4900],{},"Cmd+Shift+P",[27,4902,2361,4903],{},[265,4904,4905],{},"WakaTime: API Key",[27,4907,4908],{},"Paste your API key",[27,4910,4911],{},"Restart VS Code if tracking does not appear right away",[108,4913,4914,4919,4926,4931,4938,4943],{"v-slot:right":110},[162,4915,4916],{},[27,4917,4918],{},"WakaTime account settings:",[40,4920,4921],{},[143,4922],{"alt":4923,"src":4924,"variant":147,"max-height":4925},"WakaTime account settings API key detail","\u002Fimages\u002Finternet-applications\u002Flocal-setup\u002Fwakatime\u002Fsettings-api-key-detail.png","14rem",[162,4927,4928],{"start":492},[27,4929,4930],{},"VS Code extension search:",[40,4932,4933],{},[143,4934],{"alt":4935,"src":4936,"variant":147,"max-height":4937},"VS Code Extensions search results showing WakaTime","\u002Fimages\u002Finternet-applications\u002Flocal-setup\u002Fwakatime\u002Fvs-code-search.png","9rem",[162,4939,4940],{"start":504},[27,4941,4942],{},"VS Code API key command:",[40,4944,4945],{},[143,4946],{"alt":4947,"src":4948,"variant":147,"max-height":4937},"Command Palette with WakaTime API key command","\u002Fimages\u002Finternet-applications\u002Flocal-setup\u002Fwakatime\u002Fvs-code-prompt.png",[14,4950,4952,4955],{"id":4951,"level":17},"step-5-optional-local-php",[19,4953,4954],{"id":4951},"Step 5: Optional Local PHP",[24,4956,4957,4960,4963,4971,4974],{},[27,4958,4959],{},"Useful for editor support",[27,4961,4962],{},"Useful for quick terminal checks",[27,4964,4965,4966],{},"Not the main course runtime\n",[24,4967,4968],{},[27,4969,4970],{},"Viable backup solution if VM lesson has issues",[27,4972,4973],{},"VM and Render still run the real app path",[27,4975,4976],{},"See the slides below for OS-specific install notes",[14,4978,4980,4983],{"id":4979,"level":98},"step-5a-windows-php-zip",[19,4981,4982],{"id":4979},"Step 5A: Windows PHP ZIP",[103,4984,4985,5016],{"gap":105,"left-width":106,"right-width":106},[108,4986,4987,4991],{"v-slot:left":110},[364,4988,4990],{"id":4989},"download-and-extract","Download And Extract",[24,4992,4993,4996,5006,5011],{},[27,4994,4995],{},"Download PHP for Windows as a ZIP",[27,4997,4998,4999],{},"Extract it outside your repository",[24,5000,5001],{},[27,5002,774,5003],{},[265,5004,5005],{},"C:\\tools\\php",[27,5007,5008,5009],{},"Add that extracted PHP folder to the user ",[265,5010,1474],{},[27,5012,5013,5014],{},"Restart Git Bash, PowerShell, and VS Code after editing ",[265,5015,1474],{},[108,5017,5018,5022,5038],{"v-slot:right":110},[364,5019,5021],{"id":5020},"visual-checks","Visual Checks",[24,5023,5024,5030,5035],{},[27,5025,5026,5027],{},"The extracted folder contains ",[265,5028,5029],{},"php.exe",[27,5031,5032,5033],{},"The Path entry points to the folder, not to ",[265,5034,5029],{},[27,5036,5037],{},"A new terminal can run:",[883,5039],{"language":885,"src":5040,"label":5041},"\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F05-setup-local-development-environment\u002Fwindows-php-path-check-03.sh","windows-php-check.sh",[14,5043,5045,5048],{"id":5044,"level":98},"step-5b-macos-homebrew-php",[19,5046,5047],{"id":5044},"Step 5B: macOS Homebrew PHP",[103,5049,5050,5081],{"gap":105,"left-width":106,"right-width":106},[108,5051,5052,5056],{"v-slot:left":110},[364,5053,5055],{"id":5054},"install-homebrew","Install Homebrew",[24,5057,5058,5061,5069,5072,5075,5078],{},[27,5059,5060],{},"Open Terminal",[27,5062,5063,5064],{},"Copy the install command from ",[44,5065,5068],{"href":5066,"rel":5067},"https:\u002F\u002Fbrew.sh\u002F",[48],"brew.sh",[27,5070,5071],{},"Expect Terminal to ask for your Mac password",[27,5073,5074],{},"Expect Homebrew to mention Command Line Tools if needed",[27,5076,5077],{},"At the end, Homebrew may print \"Next steps\"",[27,5079,5080],{},"Run those \"Next steps\" commands if shown",[108,5082,5083,5087,5091,5094],{"v-slot:right":110},[364,5084,5086],{"id":5085},"then-install-php","Then Install PHP",[883,5088],{"language":885,"src":5089,"label":5090},"\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F05-setup-local-development-environment\u002Fmacos-install-php-homebrew-04.sh","macos-php.sh",[40,5092,5093],{},"Look for:",[24,5095,5096,5102,5107,5113],{},[27,5097,5098,5101],{},[265,5099,5100],{},"brew --version"," prints a version",[27,5103,5104,5106],{},[265,5105,4598],{}," prints PHP 8 output",[27,5108,5109,5110],{},"Apple Silicon Macs commonly use ",[265,5111,5112],{},"\u002Fopt\u002Fhomebrew",[27,5114,5115,5116],{},"Intel Macs commonly use ",[265,5117,5118],{},"\u002Fusr\u002Flocal",[14,5120,5122,5126,5128,5132],{"id":5121,"level":98},"step-5c-linux-php-cli",[19,5123,5125],{"id":5124},"step-5c-ubuntulinux-php-cli","Step 5C: Ubuntu\u002FLinux PHP CLI",[40,5127,881],{},[883,5129],{"language":885,"src":5130,"label":5131},"\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F05-setup-local-development-environment\u002Flinux-install-php-cli-05.sh","linux-php.sh",[24,5133,5134,5137,5140],{},[27,5135,5136],{},"This installs command-line PHP",[27,5138,5139],{},"This is only for local terminal checks",[27,5141,5142],{},"The later VM lesson installs Apache, PHP, and MySQL together",[14,5144,5146,5149,5151,5154,5156,5159],{"id":5145,"level":17},"step-6-verify-optional-php",[19,5147,5148],{"id":5145},"Step 6: Verify Optional PHP",[40,5150,881],{},[883,5152],{"language":885,"src":5153},"\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F05-setup-local-development-environment\u002Fstep-6-verify-optional-p-01.sh",[40,5155,2753],{},[883,5157],{"language":3664,"src":5158},"\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F05-setup-local-development-environment\u002Fexample-output-02.txt",[24,5160,5161,5164,5167],{},[27,5162,5163],{},"Exact version can differ",[27,5165,5166],{},"PHP 8 output means the terminal can find PHP",[27,5168,5169],{},"Windows may need a terminal or VS Code restart after PATH changes",[14,5171,5172,5174],{"id":1371,"level":17},[19,5173,1374],{"id":1371},[24,5175,5176,5179,5182,5185],{},[27,5177,5178],{},"Installing tools inside the repository folder",[27,5180,5181],{},"Opening the parent folder instead of the repo root",[27,5183,5184],{},"Editing a ZIP copy instead of the cloned repo",[27,5186,5187],{},"Installing extensions in the wrong VS Code profile",[14,5189,5190,5192],{"id":436,"level":17},[19,5191,439],{"id":436},[24,5193,5194,5197,5200,5203,5206],{},[27,5195,5196],{},"VS Code opens your course repository root",[27,5198,5199],{},"Course profile is active",[27,5201,5202],{},"PHP Intelephense is installed",[27,5204,5205],{},"GitLens is installed",[27,5207,5208,5209,5211],{},"Optional: ",[265,5210,4598],{}," prints a PHP 8 version",[14,5213,5214,5216],{"id":1454,"level":17},[19,5215,1455],{"id":1454},[103,5217,5218,5236],{"gap":105,"left-width":106,"right-width":106},[108,5219,5220,5222],{"v-slot:left":110},[364,5221,1463],{"id":1462},[24,5223,5224,5227,5230,5233],{},[27,5225,5226],{},"IDE: editor with development tools",[27,5228,5229],{},"Extension: add-on that changes VS Code behavior",[27,5231,5232],{},"Profile: saved VS Code setup",[27,5234,5235],{},"PATH: system setting used to find commands",[108,5237,5238,5240],{"v-slot:right":110},[364,5239,1494],{"id":1451},[24,5241,5242,5249,5256],{},[27,5243,5244],{},[44,5245,5248],{"href":5246,"rel":5247},"https:\u002F\u002Fcode.visualstudio.com\u002Fdocs\u002Fintrovideos\u002Fbasics",[48],"VS Code Getting Started",[27,5250,5251],{},[44,5252,5255],{"href":5253,"rel":5254},"https:\u002F\u002Fcode.visualstudio.com\u002Fdocs\u002Fconfigure\u002Fprofiles",[48],"VS Code Profiles",[27,5257,5258],{},[44,5259,5262],{"href":5260,"rel":5261},"https:\u002F\u002Fwww.php.net\u002Fmanual\u002Fen\u002Finstall.php",[48],"PHP Installation",[14,5264,5265,5267],{"id":465,"level":17},[19,5266,468],{"id":465},[24,5268,5269,5272,5275,5278,5289],{},[27,5270,5271],{},"VS Code installed as the course editor",[27,5273,5274],{},"Repository opens from its root folder",[27,5276,5277],{},"Course extensions live in a course profile",[27,5279,5280,5281],{},"Local PHP is optional for this Internet Applications path\n",[24,5282,5283,5286],{},[27,5284,5285],{},"Summer 2026 added information about VM setup in a future lesson to teach clearer Apache\u002FMySQL topics",[27,5287,5288],{},"VM, Apache, Render QA, and Render production remain the real runtime checks",[27,5290,5291],{},"Next: copy the instructor template into the repository",{"title":110,"searchDepth":492,"depth":492,"links":5293},[5294,5295,5296,5297,5298,5299,5300,5303,5304,5305,5306,5307,5308,5309,5310,5311,5312,5313],{"id":4549,"depth":492,"text":4541},{"id":600,"depth":492,"text":603},{"id":4581,"depth":492,"text":4584},{"id":4602,"depth":492,"text":4605},{"id":4627,"depth":492,"text":4630},{"id":4665,"depth":492,"text":4666},{"id":4694,"depth":492,"text":4697,"children":5301},[5302],{"id":4700,"depth":504,"text":4701},{"id":4775,"depth":492,"text":4776},{"id":4852,"depth":492,"text":4853},{"id":4951,"depth":492,"text":4954},{"id":4979,"depth":492,"text":4982},{"id":5044,"depth":492,"text":5047},{"id":5124,"depth":492,"text":5125},{"id":5145,"depth":492,"text":5148},{"id":1371,"depth":492,"text":1374},{"id":436,"depth":492,"text":439},{"id":1454,"depth":492,"text":1455},{"id":465,"depth":492,"text":468},"Set up VS Code, course extensions, and optional local PHP checks.","First-pass timing estimate for VS Code installation, extension profile setup, optional PHP verification, and beginner folder checks.",{},"50","\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F05-setup-local-development-environment",{"title":4541,"description":5314},"internet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F05-setup-local-development-environment",[5322,5323,5324],"vscode","local-development","php","44:26","0s1N-m3LABc","https:\u002F\u002Fyoutu.be\u002F0s1N-m3LABc","Local Development Environment setup","X5U0DDKjg7X7HrYtDDcsE4QqlBLimZ9weKgnZlc8H2s",{"id":5331,"title":5332,"audience":9,"body":5333,"contentType":508,"course":509,"description":6384,"estimateBasis":6385,"estimatedDiscussionMinutes":3584,"estimatedLiveMinutes":1601,"estimatedTotalMinutes":6386,"extension":515,"meta":6387,"module":517,"navigation":518,"order":6386,"path":6388,"promptAssist":521,"seo":6389,"status":523,"stem":6390,"tags":6391,"videoDuration":6392,"videoId":6393,"videoLink":6394,"videoTitle":6395,"week":517,"__hash__":6396},"content\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F06-add-instructor-template-to-your-repository.md","Add Instructor Template To Your Repository",{"type":11,"value":5334,"toc":6356},[5335,5364,5406,5434,5467,5498,5544,5637,5681,5726,5771,5816,5888,5947,6020,6074,6150,6219,6251,6303,6327],[14,5336,5337,5339,5342],{"id":3607,"level":17},[19,5338,3610],{"id":3607},[40,5340,5341],{},"By the end, you should have:",[24,5343,5344,5347,5350,5356,5361],{},[27,5345,5346],{},"Cloned course repository open in the terminal",[27,5348,5349],{},"Starter template copied into the repository root",[27,5351,5352,5353],{},"Baseline commit on ",[265,5354,5355],{},"Module01-Course-Template",[27,5357,5358,5359],{},"Pull request merged into ",[265,5360,1794],{},[27,5362,5363],{},"Clean working tree before moving on",[14,5365,5367,5371],{"id":5366,"level":17},"step-1-open-clone",[19,5368,5370],{"id":5369},"step-1-open-the-cloned-repository","Step 1: Open The Cloned Repository",[103,5372,5373,5381],{"gap":105,"left-width":106,"right-width":106},[108,5374,5375,5377],{"v-slot:left":110},[40,5376,881],{},[883,5378],{"language":885,"src":5379,"label":5380},"\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F06-add-instructor-template-to-your-repository\u002Fstep-1-open-the-cloned-repository-01.sh","open-cloned-repository.sh",[108,5382,5383,5385,5388],{"v-slot:right":110},[40,5384,2753],{},[883,5386],{"language":2227,"src":5387,"label":2613},"\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F06-add-instructor-template-to-your-repository\u002Fopen-cloned-repository-output.txt",[24,5389,5390,5395,5400],{},[27,5391,5392,5394],{},[265,5393,691],{},": current working directory",[27,5396,5397,5399],{},[265,5398,3855],{},": current branch and file state",[27,5401,5402,5403,5405],{},"Important check: ",[265,5404,691],{}," ends with your repository folder",[14,5407,5409,5413,5416,5419],{"id":5408,"level":17},"step-2-open-vscode",[19,5410,5412],{"id":5411},"step-2-open-the-repository-root","Step 2: Open The Repository Root",[40,5414,5415],{},"Run from inside the cloned repository folder:",[883,5417],{"language":885,"src":5418},"\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F06-add-instructor-template-to-your-repository\u002Fstep-2-open-the-reposito-01.sh",[24,5420,5421,5426,5431],{},[27,5422,5423,5425],{},[265,5424,265],{},": opens VS Code from the terminal",[27,5427,5428,5430],{},[265,5429,756],{}," means \"this current folder\"",[27,5432,5433],{},"VS Code should show your repository folder, not the parent folder",[14,5435,5437,5441],{"id":5436,"level":17},"step-3-download-template",[19,5438,5440],{"id":5439},"step-3-download-the-instructor-template","Step 3: Download The Instructor Template",[24,5442,5443,5455,5458,5461,5464],{},[27,5444,5445,5446],{},"Open the instructor template repository",[24,5447,5448],{},[27,5449,5450],{},[44,5451,5454],{"href":5452,"rel":5453},"https:\u002F\u002Fgithub.com\u002FMattToegel\u002FIT202-2026",[48],"IT202-2026",[27,5456,5457],{},"Download the ZIP",[27,5459,5460],{},"Extract the ZIP",[27,5462,5463],{},"Copy scaffold contents into your repository root",[27,5465,5466],{},"See the slide below for the copy rule",[14,5468,5470,5474,5477,5480,5495],{"id":5469,"level":98},"template-copy-rule",[364,5471,5473],{"id":5472},"copy-rule","Copy Rule",[40,5475,5476],{},"Copy the contents of the extracted template folder",[40,5478,5479],{},"Do not copy:",[24,5481,5482,5485,5492],{},[27,5483,5484],{},"The extracted wrapper folder as one extra nested folder",[27,5486,5487,5488,5491],{},"The template repository's hidden ",[265,5489,5490],{},".git"," folder",[27,5493,5494],{},"Old files from a different semester",[40,5496,5497],{},"Repository root should contain the starter folders directly",[14,5499,5501,5505,5508,5511],{"id":5500,"level":17},"step-4-check-structure",[19,5502,5504],{"id":5503},"step-4-check-the-starter-structure","Step 4: Check The Starter Structure",[40,5506,5507],{},"After copying, repository root should look similar to:",[883,5509],{"language":3664,"src":5510},"\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F06-add-instructor-template-to-your-repository\u002Fstep-4-check-the-starter-02.txt",[24,5512,5513,5518,5527,5541],{},[27,5514,5515,5517],{},[265,5516,823],{}," should be directly inside your repository root",[27,5519,5520,5521,5524,5525],{},"Module folders and ",[265,5522,5523],{},"project"," live inside ",[265,5526,823],{},[27,5528,5529,621,5532,625,5535,5538,5539],{},[265,5530,5531],{},"lib",[265,5533,5534],{},"partials",[265,5536,5537],{},"sql"," stay outside ",[265,5540,823],{},[27,5542,5543],{},"See the slide below for the public\u002Fprivate folder boundary",[14,5545,5547,5551,5634],{"id":5546,"level":98},"public-html-boundary",[364,5548,5550],{"id":5549},"public-and-private-boundary","Public And Private Boundary",[24,5552,5553,5587,5609,5614,5619,5625,5631],{},[27,5554,5555,5557,5558],{},[265,5556,823],{},": web root Apache can serve\n",[24,5559,5560,5570,5575,5581],{},[27,5561,5562,5565,5566,5569],{},[265,5563,5564],{},"m01"," through ",[265,5567,5568],{},"m10",": module practice folders",[27,5571,5572,5574],{},[265,5573,5523],{},": course project folder",[27,5576,5577,5580],{},[265,5578,5579],{},"index.php",": first browser entry point",[27,5582,5583,5586],{},[265,5584,5585],{},"test_db.php",": database connection check",[27,5588,5589,5591,5592],{},[265,5590,5531],{},": reusable PHP helpers\n",[24,5593,5594,5600],{},[27,5595,5596,5599],{},[265,5597,5598],{},".env.sample",": example local config file",[27,5601,5602,2327,5605,5608],{},[265,5603,5604],{},"config.php",[265,5606,5607],{},"db.php",": config and database helpers",[27,5610,5611,5613],{},[265,5612,5534],{},": shared page pieces",[27,5615,5616,5618],{},[265,5617,5537],{},": database setup scripts",[27,5620,5621,5624],{},[265,5622,5623],{},"Dockerfile",": consistent runtime setup",[27,5626,5627,5630],{},[265,5628,5629],{},"structure.md",": starter layout notes",[27,5632,5633],{},"Private folders should not be opened directly in the browser",[40,5635,5636],{},"Later server setup expects this folder boundary",[14,5638,5640,5644],{"id":5639,"level":17},"step-5-check-status",[19,5641,5643],{"id":5642},"step-5-create-the-template-branch","Step 5: Create The Template Branch",[103,5645,5646,5654],{"gap":105,"left-width":106,"right-width":106},[108,5647,5648,5650],{"v-slot:left":110},[40,5649,881],{},[883,5651],{"language":885,"src":5652,"label":5653},"\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F06-add-instructor-template-to-your-repository\u002Fstep-5-create-template-branch-05.sh","create-template-branch.sh",[108,5655,5656,5659,5662],{"v-slot:right":110},[40,5657,5658],{},"Expected idea:",[883,5660],{"language":3664,"src":5661,"label":2613},"\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F06-add-instructor-template-to-your-repository\u002Fstatus-after-template-copy.txt",[24,5663,5664,5670,5675,5678],{},[27,5665,5666,5669],{},[265,5667,5668],{},"git checkout -b",": create and move to a new branch",[27,5671,5672,5673],{},"Branch name: ",[265,5674,5355],{},[27,5676,5677],{},"New files listed as untracked",[27,5679,5680],{},"No changes means likely wrong folder or copy missed",[14,5682,5684,5688],{"id":5683,"level":17},"step-6-stage",[19,5685,5687],{"id":5686},"step-6-stage-the-baseline-files","Step 6: Stage The Baseline Files",[103,5689,5690,5698],{"gap":105,"left-width":106,"right-width":106},[108,5691,5692,5694],{"v-slot:left":110},[40,5693,881],{},[883,5695],{"language":885,"src":5696,"label":5697},"\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F06-add-instructor-template-to-your-repository\u002Fstep-6-stage-the-baseline-files-06.sh","stage-baseline.sh",[108,5699,5700,5703,5721,5723],{"v-slot:right":110},[40,5701,5702],{},"What this means:",[24,5704,5705,5711,5716],{},[27,5706,5707,5710],{},[265,5708,5709],{},"git add",": choose files for the next commit",[27,5712,5713,5715],{},[265,5714,756],{}," means current folder and contents",[27,5717,5718,5720],{},[265,5719,3855],{},": verify what is staged before committing",[40,5722,5658],{},[883,5724],{"language":3664,"src":5725,"label":2613},"\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F06-add-instructor-template-to-your-repository\u002Fstatus-after-stage.txt",[14,5727,5729,5733],{"id":5728,"level":17},"step-7-commit",[19,5730,5732],{"id":5731},"step-7-commit-the-baseline","Step 7: Commit The Baseline",[103,5734,5735,5743],{"gap":105,"left-width":106,"right-width":106},[108,5736,5737,5739],{"v-slot:left":110},[40,5738,881],{},[883,5740],{"language":885,"src":5741,"label":5742},"\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F06-add-instructor-template-to-your-repository\u002Fstep-7-commit-the-baseline-07.sh","commit-baseline.sh",[108,5744,5745,5747,5750],{"v-slot:right":110},[40,5746,5658],{},[883,5748],{"language":3664,"src":5749,"label":2613},"\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F06-add-instructor-template-to-your-repository\u002Fcommit-baseline-output.txt",[24,5751,5752,5758,5768],{},[27,5753,5754,5757],{},[265,5755,5756],{},"git commit",": save staged changes in local history",[27,5759,5760,5762,5763],{},[265,5761,3953],{},": commit message\n",[24,5764,5765],{},[27,5766,5767],{},"Message is required, even if empty",[27,5769,5770],{},"Baseline commit: starter state before custom work",[14,5772,5774,5778],{"id":5773,"level":17},"step-8-push",[19,5775,5777],{"id":5776},"step-8-push-the-template-branch","Step 8: Push The Template Branch",[103,5779,5780,5788],{"gap":105,"left-width":106,"right-width":106},[108,5781,5782,5784],{"v-slot:left":110},[40,5783,881],{},[883,5785],{"language":885,"src":5786,"label":5787},"\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F06-add-instructor-template-to-your-repository\u002Fstep-8-push-to-github-08.sh","push-baseline.sh",[108,5789,5790,5792,5795],{"v-slot:right":110},[40,5791,5658],{},[883,5793],{"language":3664,"src":5794,"label":2613},"\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F06-add-instructor-template-to-your-repository\u002Fpush-baseline-output.txt",[24,5796,5797,5802,5808,5813],{},[27,5798,5799,5801],{},[265,5800,4016],{},": GitHub remote",[27,5803,5804,5807],{},[265,5805,5806],{},"-u",": remembers this branch's GitHub tracking branch",[27,5809,5810,5812],{},[265,5811,5355],{},": branch being sent",[27,5814,5815],{},"Refresh GitHub after the push",[14,5817,5819,5823],{"id":5818,"level":17},"step-9-open-pull-request",[19,5820,5822],{"id":5821},"step-9-open-the-pull-request","Step 9: Open The Pull Request",[103,5824,5825,5868],{"gap":105,"left-width":106,"right-width":106},[108,5826,5827,5829],{"v-slot:left":110},[40,5828,2669],{},[24,5830,5831,5834,5850,5855,5860,5863],{},[27,5832,5833],{},"Open your course repository",[27,5835,169,5836,5839],{},[125,5837,5838],{},"Compare & pull request",[24,5840,5841],{},[27,5842,5843,5844,4642,5847],{},"Or use ",[125,5845,5846],{},"Pull requests",[125,5848,5849],{},"New pull request",[27,5851,5852,5853],{},"Set base branch to ",[265,5854,1794],{},[27,5856,5857,5858],{},"Set compare branch to ",[265,5859,5355],{},[27,5861,5862],{},"Confirm the changed files are the starter template files",[27,5864,169,5865],{},[125,5866,5867],{},"Create pull request",[108,5869,5870,5873,5877],{"v-slot:right":110},[40,5871,5872],{},"Use a short title and description:",[883,5874],{"language":3664,"src":5875,"label":5876},"\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F06-add-instructor-template-to-your-repository\u002Fpull-request-description.txt","pull-request-description.txt",[24,5878,5879,5882,5885],{},[27,5880,5881],{},"Base receives the changes",[27,5883,5884],{},"Compare contains your branch work",[27,5886,5887],{},"If base and compare are reversed, do not create the pull request",[14,5889,5891,5897],{"id":5890,"level":17},"step-10-merge-sync-main",[19,5892,5894,5895],{"id":5893},"step-10-merge-and-sync-main","Step 10: Merge And Sync ",[265,5896,1794],{},[103,5898,5899,5921],{"gap":105,"left-width":106,"right-width":106},[108,5900,5901,5903,5915,5917],{"v-slot:left":110},[40,5902,2669],{},[24,5904,5905,5910],{},[27,5906,169,5907],{},[125,5908,5909],{},"Merge pull request",[27,5911,169,5912],{},[125,5913,5914],{},"Confirm merge",[40,5916,4310],{},[883,5918],{"language":885,"src":5919,"label":5920},"\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F06-add-instructor-template-to-your-repository\u002Fstep-10-sync-main-after-pr-10.sh","sync-main-after-pr.sh",[108,5922,5923,5925,5928],{"v-slot:right":110},[40,5924,5658],{},[883,5926],{"language":3664,"src":5927,"label":2613},"\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F06-add-instructor-template-to-your-repository\u002Fsync-main-after-pr-output.txt",[24,5929,5930,5936,5942],{},[27,5931,5932,5935],{},[265,5933,5934],{},"git checkout main",": return to the main branch",[27,5937,5938,5941],{},[265,5939,5940],{},"git pull origin main",": download the merged template files",[27,5943,5944,5945,4334],{},"Continue only when local ",[265,5946,1794],{},[14,5948,5950,5956],{"id":5949,"level":17},"step-11-create-local-env",[19,5951,5952,5953],{"id":5949},"Step 11: Create Local ",[265,5954,5955],{},".env",[103,5957,5958,5980],{"gap":105,"left-width":106,"right-width":106},[108,5959,5960,5963,5967],{"v-slot:left":110},[40,5961,5962],{},"Run from the repository root:",[883,5964],{"language":885,"src":5965,"label":5966},"\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F06-add-instructor-template-to-your-repository\u002Fstep-11-create-local-env-11.sh","create-local-env.sh",[24,5968,5969],{},[27,5970,5971,5972,5975,5976],{},"Get ",[265,5973,5974],{},"DB_URL"," from ",[44,5977,5979],{"href":4824,"rel":5978},[48],"courses.ethereallab.app\u002Fdatabase",[108,5981,5982,5985,5990],{"v-slot:right":110},[40,5983,5984],{},"Fill in values similar to:",[883,5986],{"language":5987,"src":5988,"label":5989},"dotenv","\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F06-add-instructor-template-to-your-repository\u002Flocal-env-example.txt","lib\u002F.env",[24,5991,5992,5997,6002,6005,6010,6015],{},[27,5993,5994,5996],{},[265,5995,5955],{}," stores local secrets",[27,5998,1728,5999,6001],{},[265,6000,5955],{}," on your computer only",[27,6003,6004],{},"Do not commit your real connection string",[27,6006,6007,6008],{},"Paste the generated database connection string as ",[265,6009,5974],{},[27,6011,6012,6014],{},[265,6013,5604],{}," loads local or hosted environment variables",[27,6016,6017,6018],{},"Do not paste secrets directly into ",[265,6019,5604],{},[14,6021,6023,6027],{"id":6022,"level":17},"step-12-test-local-db",[19,6024,6026],{"id":6025},"step-12-test-local-database-connection","Step 12: Test Local Database Connection",[103,6028,6029,6037],{"gap":105,"left-width":106,"right-width":106},[108,6030,6031,6033],{"v-slot:left":110},[40,6032,5962],{},[883,6034],{"language":885,"src":6035,"label":6036},"\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F06-add-instructor-template-to-your-repository\u002Fstep-12-test-local-db-12.sh","run-local-php.sh",[108,6038,6039,6042,6046],{"v-slot:right":110},[40,6040,6041],{},"Then open:",[883,6043],{"language":3664,"src":6044,"label":6045},"\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F06-add-instructor-template-to-your-repository\u002Ftest-db-url.txt","browser-url.txt",[24,6047,6048,6054,6060,6068],{},[27,6049,6050,6053],{},[265,6051,6052],{},"php -S",": starts PHP's built-in local server",[27,6055,6056,6059],{},[265,6057,6058],{},"-t public_html",": serves the course web root",[27,6061,6062,6064,6065,6067],{},[265,6063,5585],{},": confirms PHP can read ",[265,6066,5955],{}," and connect to MySQL",[27,6069,6070,6071,6073],{},"Stop the server with ",[265,6072,1426],{}," when finished",[14,6075,6077,6085,6091],{"id":6076,"level":17},"step-13-enable-pdo-mysql",[19,6078,6080,6081,6084],{"id":6079},"step-13-enable-pdo_mysql-if-needed","Step 13: Enable ",[265,6082,6083],{},"pdo_mysql"," If Needed",[40,6086,6087,6088,756],{},"This is usually a Windows PHP ZIP setup issue. macOS and Linux usually install MySQL support through Homebrew or ",[265,6089,6090],{},"apt",[103,6092,6093,6124],{"gap":105,"left-width":106,"right-width":106},[108,6094,6095,6098,6102,6105],{"v-slot:left":110},[40,6096,6097],{},"Find the PHP folder:",[883,6099],{"language":885,"src":6100,"label":6101},"\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F06-add-instructor-template-to-your-repository\u002Fstep-13-find-php-folder-13.sh","find-php-folder.sh",[40,6103,6104],{},"In that folder:",[24,6106,6107,6113,6119],{},[27,6108,6109,6110],{},"Find ",[265,6111,6112],{},"php.ini-development",[27,6114,6115,6116],{},"Copy it as ",[265,6117,6118],{},"php.ini",[27,6120,3053,6121,6123],{},[265,6122,6118],{}," in your editor",[108,6125,6126,6129,6133,6136,6140],{"v-slot:right":110},[40,6127,6128],{},"Uncomment these lines:",[883,6130],{"language":6131,"src":6132,"label":6118},"ini","\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F06-add-instructor-template-to-your-repository\u002Fphp-ini-pdo-mysql-settings.txt",[40,6134,6135],{},"Mac\u002FLinux usually use:",[883,6137],{"language":885,"src":6138,"label":6139},"\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F06-add-instructor-template-to-your-repository\u002Fmacos-linux-pdo-mysql-commands-14.sh","macos-linux-php-mysql.sh",[24,6141,6142,6147],{},[27,6143,6144,6145],{},"Restart the php dev server after changing ",[265,6146,6118],{},[27,6148,6149],{},"Run Step 12 again after enabling the extension",[14,6151,6153,6155,6158],{"id":6152,"level":17},"quick-check-final",[19,6154,439],{"id":436},[40,6156,6157],{},"Confirm all of these:",[24,6159,6160,6163,6171,6174,6179,6188,6194,6199,6204,6210],{},[27,6161,6162],{},"GitHub shows the starter files",[27,6164,6165,6166,6168,6169],{},"GitHub shows a pull request from ",[265,6167,5355],{}," into ",[265,6170,1794],{},[27,6172,6173],{},"The pull request is merged",[27,6175,4080,6176,6178],{},[265,6177,1794],{}," says the working tree is clean",[27,6180,6181,5565,6184,6187],{},[265,6182,6183],{},"public_html\u002Fm01",[265,6185,6186],{},"public_html\u002Fm10"," exist",[27,6189,6190,6193],{},[265,6191,6192],{},"public_html\u002Fproject"," exists",[27,6195,6196,6198],{},[265,6197,823],{}," is not nested inside another accidental folder",[27,6200,6201,6203],{},[265,6202,5989],{}," exists locally and is not committed with real secrets",[27,6205,6206,6209],{},[265,6207,6208],{},"http:\u002F\u002Flocalhost:3000\u002Ftest_db.php"," confirms the database connection",[27,6211,6212,6213,6215,6216,6218],{},"Windows PHP has ",[265,6214,6083],{}," enabled if ",[265,6217,5585],{}," reports a missing driver",[14,6220,6222,6226,6228,6231,6240],{"id":6221,"level":17},"reset-check",[19,6223,6225],{"id":6224},"if-something-looks-wrong","If Something Looks Wrong",[40,6227,881],{},[883,6229],{"language":885,"src":6230},"\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F06-add-instructor-template-to-your-repository\u002Fif-something-looks-wrong-03.sh",[6232,6233,6234],"blockquote",{},[40,6235,6236,6237,6239],{},"Tip: ",[265,6238,3207],{}," prints the repository root when your current folder is inside a Git repository",[24,6241,6242,6245,6248],{},[27,6243,6244],{},"Output should point to your course repository",[27,6246,6247],{},"If it points somewhere else, move folders before continuing",[27,6249,6250],{},"Avoid cloning inside another cloned repository",[14,6252,6253,6255],{"id":1371,"level":17},[19,6254,1374],{"id":1371},[24,6256,6257,6260,6263,6268,6271,6274,6279,6289,6294,6297],{},[27,6258,6259],{},"Opening the parent folder instead of the repository root",[27,6261,6262],{},"Copying the instructor template folder as a nested folder",[27,6264,6265,6266,5491],{},"Copying the template ",[265,6267,5490],{},[27,6269,6270],{},"Keeping the downloaded ZIP inside the repository",[27,6272,6273],{},"Re-cloning the repository instead of opening the existing clone",[27,6275,6276,6277],{},"Putting module folders outside ",[265,6278,823],{},[27,6280,6281,6282,6284,6285,6288],{},"Renaming ",[265,6283,5564],{}," to ",[265,6286,6287],{},"M1"," or mixing folder casing",[27,6290,6291,6292],{},"Doing template work directly on ",[265,6293,1794],{},[27,6295,6296],{},"Reversing base and compare branches in the pull request",[27,6298,6299,6300,6302],{},"Forgetting to sync local ",[265,6301,1794],{}," after the pull request is merged",[14,6304,6305,6307],{"id":1462,"level":17},[19,6306,1463],{"id":1462},[24,6308,6309,6312,6315,6318,6321,6324],{},[27,6310,6311],{},"Repository root: top folder of the cloned project",[27,6313,6314],{},"Baseline: starter state before custom work begins",[27,6316,6317],{},"Pull request: GitHub review page used to merge branch work",[27,6319,6320],{},"Web root: folder served to the browser",[27,6322,6323],{},"Scaffold: starter folders that organize future work",[27,6325,6326],{},"Staging: choosing files for the next commit",[14,6328,6329,6331,6334],{"id":465,"level":17},[19,6330,468],{"id":465},[40,6332,6333],{},"Before leaving this presentation, confirm the following:",[24,6335,6336,6339,6342,6345,6351],{},[27,6337,6338],{},"You still have one clone for your repository",[27,6340,6341],{},"Your VS Code is able to open directly to your repository",[27,6343,6344],{},"Your repository has the full starter baseline correctly structured",[27,6346,6347,6348,6350],{},"GitHub remote ",[265,6349,1794],{}," has the baseline content",[27,6352,4080,6353,6355],{},[265,6354,1794],{}," was synchronized",{"title":110,"searchDepth":492,"depth":492,"links":6357},[6358,6359,6360,6361,6364,6367,6368,6369,6370,6371,6372,6374,6376,6377,6379,6380,6381,6382,6383],{"id":3607,"depth":492,"text":3610},{"id":5369,"depth":492,"text":5370},{"id":5411,"depth":492,"text":5412},{"id":5439,"depth":492,"text":5440,"children":6362},[6363],{"id":5472,"depth":504,"text":5473},{"id":5503,"depth":492,"text":5504,"children":6365},[6366],{"id":5549,"depth":504,"text":5550},{"id":5642,"depth":492,"text":5643},{"id":5686,"depth":492,"text":5687},{"id":5731,"depth":492,"text":5732},{"id":5776,"depth":492,"text":5777},{"id":5821,"depth":492,"text":5822},{"id":5893,"depth":492,"text":6373},"Step 10: Merge And Sync main",{"id":5949,"depth":492,"text":6375},"Step 11: Create Local .env",{"id":6025,"depth":492,"text":6026},{"id":6079,"depth":492,"text":6378},"Step 13: Enable pdo_mysql If Needed",{"id":436,"depth":492,"text":439},{"id":6224,"depth":492,"text":6225},{"id":1371,"depth":492,"text":1374},{"id":1462,"depth":492,"text":1463},{"id":465,"depth":492,"text":468},"Continue from your cloned course repository, copy in the instructor template, and merge the baseline files through a pull request.","Face-to-face class of about 40 students; starts from an existing clone and includes template copy checks, ZIP extraction, first commit verification, and common folder mistakes.","60",{},"\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F06-add-instructor-template-to-your-repository",{"title":5332,"description":6384},"internet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F06-add-instructor-template-to-your-repository",[3594,108,1829],"47:11","4n0-QuXO_Aw","https:\u002F\u002Fyoutu.be\u002F4n0-QuXO_Aw","Adding Instructor\u002FCourse Template","iYq9WdND1ODBRrXLU2gX9dNCXvDc-Kvqufsokl_jg3E",{"id":6398,"title":6399,"audience":9,"body":6400,"contentType":508,"course":509,"description":7110,"estimateBasis":7111,"estimatedDiscussionMinutes":3584,"estimatedLiveMinutes":4527,"estimatedTotalMinutes":1602,"extension":515,"meta":7112,"module":517,"navigation":518,"order":3585,"path":7113,"promptAssist":521,"seo":7114,"status":523,"stem":7115,"tags":7116,"videoDuration":7118,"videoId":7119,"videoLink":7120,"videoTitle":7121,"week":517,"__hash__":7122},"content\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F07-qa-prod-branches.md","QA And Prod Branches",{"type":11,"value":6401,"toc":7089},[6402,6436,6484,6506,6560,6625,6683,6733,6798,6839,6931,6971,6998,7056],[14,6403,6404,6406,6408],{"id":3607,"level":17},[19,6405,3610],{"id":3607},[40,6407,3613],{},[24,6409,6410,6419,6424,6428,6433],{},[27,6411,6412,6413,2327,6416],{},"Understand the purpose and usage of ",[265,6414,6415],{},"qa",[265,6417,6418],{},"prod",[27,6420,6421,6422],{},"Create and push ",[265,6423,6415],{},[27,6425,6421,6426],{},[265,6427,6418],{},[27,6429,6430,6431],{},"Keep local work pointed at ",[265,6432,6415],{},[27,6434,6435],{},"Confirm GitHub has the expected branches",[14,6437,6439,6442,6477],{"id":6438,"level":17},"branch-roles",[19,6440,6441],{"id":6438},"Branch Roles",[24,6443,6444,6454,6464,6474],{},[27,6445,6446,6448,6449],{},[265,6447,1794],{},": starter baseline and shared source branch\n",[24,6450,6451],{},[27,6452,6453],{},"Most projects stick with this; we'll split ours into development lanes",[27,6455,6456,6458,6459],{},[265,6457,6415],{},": public testing and evidence branch\n",[24,6460,6461],{},[27,6462,6463],{},"Normal branch to return to before new course work",[27,6465,6466,6468,6469],{},[265,6467,6418],{},": stable grading and evaluation branch\n",[24,6470,6471],{},[27,6472,6473],{},"Protected from everyday local edits",[27,6475,6476],{},"Later deployment setup connects Render to these branches",[40,6478,6479,6480,4642,6482],{},"Course flow: feature or homework branch -> ",[265,6481,6415],{},[265,6483,6418],{},[14,6485,6486,6488,6491,6495],{"id":637,"level":17},[19,6487,640],{"id":637},[40,6489,6490],{},"Run inside the course repository:",[883,6492],{"label":6493,"language":885,"src":6494},"before-you-start.sh","\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F07-qa-prod-branches\u002Fbefore-you-start.sh",[24,6496,6497,6500,6503],{},[27,6498,6499],{},"Working tree should be clean",[27,6501,6502],{},"Starter baseline already pushed to GitHub",[27,6504,6505],{},"Stop if Git says files are modified or untracked",[14,6507,6509,6515],{"id":6508,"level":17},"step-1-sync-main",[19,6510,6512,6513],{"id":6511},"step-1-start-from-main","Step 1: Start From ",[265,6514,1794],{},[103,6516,6517,6525],{"gap":105,"left-width":106,"right-width":106},[108,6518,6519,6521],{"v-slot:left":110},[40,6520,881],{},[883,6522],{"label":6523,"language":885,"src":6524},"sync-main.sh","\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F07-qa-prod-branches\u002Fsync-main.sh",[108,6526,6527,6529,6532],{"v-slot:right":110},[40,6528,2753],{},[883,6530],{"label":2613,"language":3664,"src":6531},"\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F07-qa-prod-branches\u002Fsync-main-output.txt",[24,6533,6534,6541],{},[27,6535,6536,6538,6539],{},[265,6537,5934],{},": switch to ",[265,6540,1794],{},[27,6542,6543,6545,6546,6548,6549],{},[265,6544,5940],{},": get the latest ",[265,6547,1794],{}," from GitHub\n",[24,6550,6551,6555],{},[27,6552,6553,5801],{},[265,6554,4016],{},[27,6556,6557,6559],{},[265,6558,1794],{},": remote branch being pulled",[14,6561,6563,6569],{"id":6562,"level":17},"step-2-create-qa",[19,6564,6566,6567],{"id":6565},"step-2-create-and-push-qa","Step 2: Create And Push ",[265,6568,6415],{},[103,6570,6571,6579],{"gap":105,"left-width":106,"right-width":106},[108,6572,6573,6575],{"v-slot:left":110},[40,6574,881],{},[883,6576],{"label":6577,"language":885,"src":6578},"create-qa.sh","\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F07-qa-prod-branches\u002Fcreate-qa.sh",[108,6580,6581,6583,6586],{"v-slot:right":110},[40,6582,2753],{},[883,6584],{"label":2613,"language":3664,"src":6585},"\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F07-qa-prod-branches\u002Fcreate-qa-output.txt",[24,6587,6588,6605],{},[27,6589,6590,6593,6594,6596,6597],{},[265,6591,6592],{},"git checkout -b qa",": create ",[265,6595,6415],{}," and switch to it\n",[24,6598,6599],{},[27,6600,6601,6604],{},[265,6602,6603],{},"-b",": creates a new branch of the following name",[27,6606,6607,6610,6611,6613,6614],{},[265,6608,6609],{},"git push -u origin qa",": send ",[265,6612,6415],{}," to GitHub\n",[24,6615,6616],{},[27,6617,6618,6620,6621,6624],{},[265,6619,5806],{},": remember ",[265,6622,6623],{},"origin\u002Fqa"," as the upstream branch",[14,6626,6628,6634],{"id":6627,"level":17},"step-3-create-prod",[19,6629,6631,6632],{"id":6630},"step-3-create-and-push-prod","Step 3: Create And Push ",[265,6633,6418],{},[103,6635,6636,6644],{"gap":105,"left-width":106,"right-width":106},[108,6637,6638,6640],{"v-slot:left":110},[40,6639,881],{},[883,6641],{"label":6642,"language":885,"src":6643},"create-prod.sh","\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F07-qa-prod-branches\u002Fcreate-prod.sh",[108,6645,6646,6648,6651],{"v-slot:right":110},[40,6647,2753],{},[883,6649],{"label":2613,"language":3664,"src":6650},"\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F07-qa-prod-branches\u002Fcreate-prod-output.txt",[24,6652,6653,6661,6666,6678],{},[27,6654,4677,6655,6657,6658,6660],{},[265,6656,6418],{}," from the current ",[265,6659,6415],{}," branch",[27,6662,6663],{},[265,6664,6665],{},"git checkout -b prod",[27,6667,6668,6669,6613,6671],{},"Push ",[265,6670,6418],{},[24,6672,6673],{},[27,6674,6675],{},[265,6676,6677],{},"git push origin prod",[27,6679,6680,6682],{},[265,6681,6418],{}," starts from the same clean baseline",[14,6684,6686,6691],{"id":6685,"level":17},"step-4-return-to-qa",[19,6687,6688,6689],{"id":6685},"Step 4: Return To ",[265,6690,6415],{},[103,6692,6693,6701],{"gap":105,"left-width":106,"right-width":106},[108,6694,6695,6697],{"v-slot:left":110},[40,6696,881],{},[883,6698],{"label":6699,"language":885,"src":6700},"return-to-qa.sh","\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F07-qa-prod-branches\u002Freturn-to-qa.sh",[108,6702,6703,6705,6708],{"v-slot:right":110},[40,6704,2753],{},[883,6706],{"label":2613,"language":3664,"src":6707},"\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F07-qa-prod-branches\u002Freturn-to-qa-output.txt",[24,6709,6710,6715,6720],{},[27,6711,6712,6714],{},[265,6713,6415],{}," should have the asterisk",[27,6716,6717,6719],{},[265,6718,6418],{}," should still exist on GitHub",[27,6721,6722,6723,6725],{},"Do not start normal course work from ",[265,6724,6418],{},[24,6726,6727],{},[27,6728,6729,6730,6732],{},"We'll remove local ",[265,6731,6418],{}," to avoid this issue",[14,6734,6736,6742],{"id":6735,"level":17},"step-5-delete-local-prod",[19,6737,6739,6740],{"id":6738},"step-5-remove-local-prod","Step 5: Remove Local ",[265,6741,6418],{},[103,6743,6744,6752],{"gap":105,"left-width":106,"right-width":106},[108,6745,6746,6748],{"v-slot:left":110},[40,6747,881],{},[883,6749],{"label":6750,"language":885,"src":6751},"delete-local-prod.sh","\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F07-qa-prod-branches\u002Fdelete-local-prod.sh",[108,6753,6754,6756,6759],{"v-slot:right":110},[40,6755,2753],{},[883,6757],{"label":2613,"language":3664,"src":6758},"\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F07-qa-prod-branches\u002Fdelete-local-prod-output.txt",[24,6760,6761,6783],{},[27,6762,6763,6766,6767,6769],{},[265,6764,6765],{},"git branch -d prod",": delete local ",[265,6768,6418],{},[24,6770,6771,6777],{},[27,6772,6773,6776],{},[265,6774,6775],{},"-d",": delete only if Git considers it safe",[27,6778,6779,6782],{},[265,6780,6781],{},"-D",": can be used as a forced delete",[27,6784,6785,6788,6789],{},[265,6786,6787],{},"git branch -r",": list remote branches\n",[24,6790,6791],{},[27,6792,6793,6794,6797],{},"Confirms ",[265,6795,6796],{},"origin\u002Fprod"," still exists",[14,6799,6801,6804,6807,6810,6824,6827],{"id":6800,"level":17},"github-check",[19,6802,6803],{"id":6800},"GitHub Check",[40,6805,6806],{},"Open the branch dropdown on GitHub",[40,6808,6809],{},"You should see:",[24,6811,6812,6816,6820],{},[27,6813,6814],{},[265,6815,1794],{},[27,6817,6818],{},[265,6819,6415],{},[27,6821,6822],{},[265,6823,6418],{},[40,6825,6826],{},"Branch roles:",[24,6828,6829,6834],{},[27,6830,6831,6833],{},[265,6832,6415],{},": testing and evidence",[27,6835,6836,6838],{},[265,6837,6418],{},": stable grading target",[14,6840,6842,6846],{"id":6841,"level":17},"normal-workflow",[19,6843,6845],{"id":6844},"normal-workflow-after-setup","Normal Workflow After Setup",[162,6847,6848,6865,6873,6884,6889,6903,6906,6913,6925],{},[27,6849,6850,6851,6853],{},"Return to ",[265,6852,6415],{},[24,6854,6855,6860],{},[27,6856,6857],{},[265,6858,6859],{},"git checkout qa",[27,6861,6862],{},[265,6863,6864],{},"git pull origin qa",[27,6866,6867,6868],{},"Create a feature or homework branch\n",[24,6869,6870],{},[27,6871,6872],{},"Branch name matches the task",[27,6874,6875,6876],{},"Commit the work on that branch\n",[24,6877,6878],{},[27,6879,6880,6881,6883],{},"Check ",[265,6882,3855],{}," before each Git command",[27,6885,6886,6887],{},"Push the branch and open a pull request into ",[265,6888,6415],{},[27,6890,6891,6892,6894,6895],{},"Merge into ",[265,6893,6415],{}," after review\n",[24,6896,6897],{},[27,6898,6899,6900,6902],{},"QA deployment will update from ",[265,6901,6415],{}," after Render setup",[27,6904,6905],{},"Test the QA version",[27,6907,6908,6909,6168,6911],{},"Open a pull request from ",[265,6910,6415],{},[265,6912,6418],{},[27,6914,6891,6915,6917,6918],{},[265,6916,6418],{}," when stable\n",[24,6919,6920],{},[27,6921,6922,6923,6902],{},"Production deployment will use ",[265,6924,6418],{},[27,6926,6927,6928,6930],{},"Return locally to ",[265,6929,6415],{}," and pull before the next task",[14,6932,6933,6935],{"id":1371,"level":17},[19,6934,1374],{"id":1371},[24,6936,6937,6942,6947,6955,6963,6966],{},[27,6938,6939,6940],{},"Working directly on ",[265,6941,6418],{},[27,6943,6944,6945],{},"Forgetting to return to ",[265,6946,6415],{},[27,6948,6949,6950,6952,6953],{},"Pushing ",[265,6951,6415],{}," but not ",[265,6954,6418],{},[27,6956,6957,6958,6960,6961],{},"Deleting remote ",[265,6959,6418],{}," instead of local ",[265,6962,6418],{},[27,6964,6965],{},"Assuming GitHub has the branch without checking",[27,6967,6968,6969,4334],{},"Starting new work before ",[265,6970,3855],{},[14,6972,6973,6975,6978],{"id":436,"level":17},[19,6974,439],{"id":436},[40,6976,6977],{},"Answer before moving on:",[24,6979,6980,6983,6986,6989,6995],{},[27,6981,6982],{},"Which branch should QA deployment watch?",[27,6984,6985],{},"Which branch should production grading use?",[27,6987,6988],{},"Which branch should you return to before new work?",[27,6990,6991,6992,6994],{},"Why remove local ",[265,6993,6418],{}," after pushing it?",[27,6996,6997],{},"What future setup connects Render to these branches?",[14,6999,7000,7002],{"id":1451,"level":17},[19,7001,1455],{"id":1454},[103,7003,7004,7029],{"gap":105,"left-width":106,"right-width":106},[108,7005,7006,7008],{"v-slot:left":110},[364,7007,1463],{"id":1462},[24,7009,7010,7013,7016,7021,7026],{},[27,7011,7012],{},"Branch: named line of Git history",[27,7014,7015],{},"Upstream: remote branch Git remembers for push\u002Fpull",[27,7017,7018,7020],{},[265,7019,6415],{},": public testing branch",[27,7022,7023,7025],{},[265,7024,6418],{},": stable grading branch",[27,7027,7028],{},"Remote-only branch: exists on GitHub, not locally",[108,7030,7031,7033],{"v-slot:right":110},[364,7032,1494],{"id":1451},[24,7034,7035,7042,7049],{},[27,7036,4429,7037],{},[44,7038,7041],{"href":7039,"rel":7040},"https:\u002F\u002Fdocs.github.com\u002Fen\u002Fget-started\u002Fusing-git\u002Fabout-git#about-branches",[48],"About branches",[27,7043,4429,7044],{},[44,7045,7048],{"href":7046,"rel":7047},"https:\u002F\u002Fdocs.github.com\u002Fen\u002Fpull-requests\u002Fcollaborating-with-pull-requests\u002Fproposing-changes-to-your-work-with-pull-requests\u002Fabout-pull-requests",[48],"About pull requests",[27,7050,4414,7051],{},[44,7052,7055],{"href":7053,"rel":7054},"https:\u002F\u002Fgit-scm.com\u002Fbook\u002Fen\u002Fv2\u002FGit-Branching-Branches-in-a-Nutshell",[48],"Git Branching",[14,7057,7058,7060,7062],{"id":465,"level":17},[19,7059,468],{"id":465},[40,7061,1524],{},[24,7063,7064,7073,7077,7081,7086],{},[27,7065,7066,7067,621,7069,625,7071],{},"Explain ",[265,7068,1794],{},[265,7070,6415],{},[265,7072,6418],{},[27,7074,6421,7075],{},[265,7076,6415],{},[27,7078,6421,7079],{},[265,7080,6418],{},[27,7082,7083,7084],{},"Keep local work branched from ",[265,7085,6415],{},[27,7087,7088],{},"Verify remote branches on GitHub",{"title":110,"searchDepth":492,"depth":492,"links":7090},[7091,7092,7093,7094,7096,7098,7100,7102,7104,7105,7106,7107,7108,7109],{"id":3607,"depth":492,"text":3610},{"id":6438,"depth":492,"text":6441},{"id":637,"depth":492,"text":640},{"id":6511,"depth":492,"text":7095},"Step 1: Start From main",{"id":6565,"depth":492,"text":7097},"Step 2: Create And Push qa",{"id":6630,"depth":492,"text":7099},"Step 3: Create And Push prod",{"id":6685,"depth":492,"text":7101},"Step 4: Return To qa",{"id":6738,"depth":492,"text":7103},"Step 5: Remove Local prod",{"id":6800,"depth":492,"text":6803},{"id":6844,"depth":492,"text":6845},{"id":1371,"depth":492,"text":1374},{"id":436,"depth":492,"text":439},{"id":1454,"depth":492,"text":1455},{"id":465,"depth":492,"text":468},"Create the Internet Applications QA and production branches, then connect each branch to its role in the course workflow.","Face-to-face class of about 40 students; includes branch roles, command practice, GitHub branch checks, and QA\u002Fprod workflow questions.",{},"\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F07-qa-prod-branches",{"title":6399,"description":7110},"internet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F07-qa-prod-branches",[1829,4532,6415,7117],"production","10:35","32XilHQwRiY","https:\u002F\u002Fyoutu.be\u002F32XilHQwRiY","Create QA and Prod Branches","GZx1sXtI0BMbyb6Gbpj7aoBvczhhR-FV7YpFE4j4UCs",{"id":7124,"title":7125,"audience":9,"body":7126,"contentType":508,"course":509,"description":7933,"estimateBasis":7934,"estimatedDiscussionMinutes":3584,"estimatedLiveMinutes":1602,"estimatedTotalMinutes":3585,"extension":515,"meta":7935,"module":517,"navigation":518,"order":7936,"path":7937,"promptAssist":521,"seo":7938,"status":523,"stem":7939,"tags":7940,"videoDuration":7943,"videoId":7944,"videoLink":7945,"videoTitle":7946,"week":517,"__hash__":7947},"content\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F08-render-setup.md","Render Setup",{"type":11,"value":7127,"toc":7912},[7128,7155,7178,7207,7275,7336,7371,7407,7444,7494,7540,7575,7621,7658,7686,7718,7765,7798,7866],[14,7129,7131,7134],{"id":7130,"level":17},"render-setup-title",[19,7132,7125],{"id":7133},"render-setup",[24,7135,7136,7139,7144,7149,7152],{},[27,7137,7138],{},"Connect GitHub repo to Render",[27,7140,7141,7142],{},"Create a QA service from ",[265,7143,6415],{},[27,7145,7146,7147],{},"Create a production service from ",[265,7148,6418],{},[27,7150,7151],{},"Add the course database connection string",[27,7153,7154],{},"Verify live URLs and deploy logs",[14,7156,7157,7159,7161],{"id":2511,"level":17},[19,7158,2514],{"id":2511},[40,7160,3613],{},[24,7162,7163,7166,7169,7172,7175],{},[27,7164,7165],{},"Explain what Render does in the course workflow",[27,7167,7168],{},"Create separate QA and production services",[27,7170,7171],{},"Connect each service to the correct branch",[27,7173,7174],{},"Read Render logs when a deploy fails",[27,7176,7177],{},"Identify which deployed URL to submit or test",[14,7179,7181,7184,7201],{"id":7180,"level":17},"what-render-does",[19,7182,7183],{"id":7180},"What Render Does",[24,7185,7186,7189,7192,7195,7198],{},[27,7187,7188],{},"Hosts your PHP app from GitHub",[27,7190,7191],{},"Watches a selected branch",[27,7193,7194],{},"Rebuilds when that branch changes",[27,7196,7197],{},"Stores secrets as environment variables",[27,7199,7200],{},"Gives each service a public URL",[40,7202,7203,7204],{},"Course loop: ",[265,7205,7206],{},"local work -> GitHub branch -> Render URL",[14,7208,7210,7212],{"id":7209,"level":17},"free-tier-and-before-start",[19,7211,640],{"id":637},[103,7213,7214,7243],{"gap":105,"left-width":106,"right-width":106},[108,7215,7216,7220],{"v-slot:left":110},[364,7217,7219],{"id":7218},"free-tier","Free Tier",[24,7221,7222,7232,7240],{},[27,7223,2679,7224,7227],{},[265,7225,7226],{},"Free",[24,7228,7229],{},[27,7230,7231],{},"Render may default to a paid plan",[27,7233,7234,7235],{},"Free services can sleep",[24,7236,7237],{},[27,7238,7239],{},"First visit after sleep may be slow",[27,7241,7242],{},"Avoid extra services unless instructed",[108,7244,7245,7249],{"v-slot:right":110},[364,7246,7248],{"id":7247},"repo-ready","Repo Ready",[24,7250,7251,7254,7259,7268],{},[27,7252,7253],{},"Starter files committed and pushed",[27,7255,7256,7258],{},[265,7257,5623],{}," in repo root",[27,7260,7261,621,7263,625,7265,7267],{},[265,7262,823],{},[265,7264,5531],{},[265,7266,5534],{}," present",[27,7269,7270,2327,7272,7274],{},[265,7271,6415],{},[265,7273,6418],{}," branches exist on GitHub",[14,7276,7278,7281],{"id":7277,"level":17},"target-architecture",[19,7279,7280],{"id":7277},"Target Architecture",[103,7282,7283,7311],{"gap":105,"left-width":106,"right-width":106},[108,7284,7285,7289],{"v-slot:left":110},[364,7286,7288],{"id":7287},"qa-service","QA Service",[24,7290,7291,7297,7302,7305],{},[27,7292,7293,7294],{},"Name: ",[265,7295,7296],{},"\u003Cucid>-it202-\u003Csection>-qa",[27,7298,7299,7300],{},"Watches ",[265,7301,6415],{},[27,7303,7304],{},"Used for testing and evidence",[27,7306,7307,7308],{},"URL ends with ",[265,7309,7310],{},"-qa.onrender.com",[108,7312,7313,7317],{"v-slot:right":110},[364,7314,7316],{"id":7315},"production-service","Production Service",[24,7318,7319,7324,7328,7331],{},[27,7320,7293,7321],{},[265,7322,7323],{},"\u003Cucid>-it202-\u003Csection>-prod",[27,7325,7299,7326],{},[265,7327,6418],{},[27,7329,7330],{},"Stable version after QA checks",[27,7332,7307,7333],{},[265,7334,7335],{},"-prod.onrender.com",[14,7337,7339,7343],{"id":7338,"level":17},"step-1-sign-up",[19,7340,7342],{"id":7341},"step-1-sign-up-with-github","Step 1: Sign Up With GitHub",[103,7344,7345,7363],{"gap":105,"left-width":2214,"right-width":2213},[108,7346,7347],{"v-slot:left":110},[24,7348,7349,7354,7357,7360],{},[27,7350,1683,7351],{},[265,7352,7353],{},"render.com",[27,7355,7356],{},"Choose GitHub sign-in",[27,7358,7359],{},"Authorize Render when prompted",[27,7361,7362],{},"Land on the Render dashboard",[108,7364,7365],{"v-slot:right":110},[40,7366,7367],{},[143,7368],{"alt":7369,"src":7370,"variant":147},"Render GitHub sign-in screen","\u002Fimages\u002Finternet-applications\u002Frender-setup\u002Frender-01-github-signin.png",[14,7372,7374,7377],{"id":7373,"level":17},"step-2-new-web-service",[19,7375,7376],{"id":7373},"Step 2: New Web Service",[103,7378,7379,7399],{"gap":105,"left-width":2214,"right-width":2213},[108,7380,7381],{"v-slot:left":110},[24,7382,7383,7388,7393,7396],{},[27,7384,169,7385],{},[265,7386,7387],{},"New +",[27,7389,2679,7390],{},[265,7391,7392],{},"Web Service",[27,7394,7395],{},"Do not choose a database service here",[27,7397,7398],{},"This creates the hosted PHP app",[108,7400,7401],{"v-slot:right":110},[40,7402,7403],{},[143,7404],{"alt":7405,"src":7406,"variant":147},"Render New menu with Web Service option","\u002Fimages\u002Finternet-applications\u002Frender-setup\u002Frender-04-new-menu.png",[14,7408,7410,7414],{"id":7409,"level":17},"step-3-connect-repo",[19,7411,7413],{"id":7412},"step-3-connect-repository","Step 3: Connect Repository",[103,7415,7416,7436],{"gap":105,"left-width":1709,"right-width":2254},[108,7417,7418],{"v-slot:left":110},[24,7419,7420,7423,7426,7433],{},[27,7421,7422],{},"Select your student course repository",[27,7424,7425],{},"Authorize repository access if Render asks",[27,7427,7428,7429,7432],{},"Ensure it's the proper repository (format: ",[265,7430,7431],{},"ucid-course-section-semYear",")",[27,7434,7435],{},"Continue to service settings",[108,7437,7438],{"v-slot:right":110},[40,7439,7440],{},[143,7441],{"alt":7442,"src":7443,"variant":147},"Render repository selection screen","\u002Fimages\u002Finternet-applications\u002Frender-setup\u002Frender-07-select-repo.png",[14,7445,7447,7451],{"id":7446,"level":17},"step-4-configure-qa",[19,7448,7450],{"id":7449},"step-4-configure-qa-service","Step 4: Configure QA Service",[103,7452,7453,7486],{"gap":105,"left-width":2214,"right-width":2213},[108,7454,7455,7458],{"v-slot:left":110},[40,7456,7457],{},"Use these settings:",[24,7459,7460,7464,7469,7475,7480,7483],{},[27,7461,7293,7462],{},[265,7463,7296],{},[27,7465,7466,7467],{},"Branch: ",[265,7468,6415],{},[27,7470,7471,7472],{},"Runtime: ",[265,7473,7474],{},"Docker",[27,7476,7477,7478],{},"Instance type: ",[265,7479,7226],{},[27,7481,7482],{},"Root directory: blank",[27,7484,7485],{},"Build\u002Fstart commands: blank",[108,7487,7488],{"v-slot:right":110},[40,7489,7490],{},[143,7491],{"alt":7492,"src":7493,"variant":147},"Render QA service configuration","\u002Fimages\u002Finternet-applications\u002Frender-setup\u002Frender-08-qa-config-basic.png",[14,7495,7497,7501],{"id":7496,"level":17},"step-5-env-vars",[19,7498,7500],{"id":7499},"step-5-add-environment-variables","Step 5: Add Environment Variables",[103,7502,7503,7532],{"gap":105,"left-width":2664,"right-width":4856},[108,7504,7505],{"v-slot:left":110},[24,7506,7507,7520,7526,7529],{},[27,7508,7509,7510,7512],{},"Add ",[265,7511,5974],{},[24,7513,7514],{},[27,7515,7516,7517],{},"Get it from ",[44,7518,5979],{"href":4824,"rel":7519},[48],[27,7521,7522,7523,7525],{},"Do not use \"add from ",[265,7524,5955],{},"\"",[27,7527,7528],{},"Add later API keys only when a later lesson requires them",[27,7530,7531],{},"Repeat required env vars on both QA and production",[108,7533,7534],{"v-slot:right":110},[40,7535,7536],{},[143,7537],{"alt":7538,"src":7539,"variant":147},"Render environment variables section","\u002Fimages\u002Finternet-applications\u002Frender-setup\u002Frender-09-env-vars.png",[14,7541,7543,7546],{"id":7542,"level":17},"step-6-deploy-qa",[19,7544,7545],{"id":7542},"Step 6: Deploy QA",[103,7547,7548,7567],{"gap":105,"left-width":1709,"right-width":2254},[108,7549,7550],{"v-slot:left":110},[24,7551,7552,7555,7558,7561,7564],{},[27,7553,7554],{},"Create the QA service",[27,7556,7557],{},"Watch the first deploy log",[27,7559,7560],{},"Wait for a success state",[27,7562,7563],{},"Open the QA URL",[27,7565,7566],{},"Confirm the starter page loads",[108,7568,7569],{"v-slot:right":110},[40,7570,7571],{},[143,7572],{"alt":7573,"src":7574,"variant":147},"Successful Render QA deployment","\u002Fimages\u002Finternet-applications\u002Frender-setup\u002Frender-10-qa-deployed.png",[14,7576,7578,7582],{"id":7577,"level":17},"step-7-create-prod",[19,7579,7581],{"id":7580},"step-7-create-production-service","Step 7: Create Production Service",[103,7583,7584,7613],{"gap":105,"left-width":2214,"right-width":2213},[108,7585,7586,7589],{"v-slot:left":110},[40,7587,7588],{},"Create a second web service:",[24,7590,7591,7594,7598,7602,7606,7610],{},[27,7592,7593],{},"Same repository",[27,7595,7293,7596],{},[265,7597,7323],{},[27,7599,7466,7600],{},[265,7601,6418],{},[27,7603,7471,7604],{},[265,7605,7474],{},[27,7607,7477,7608],{},[265,7609,7226],{},[27,7611,7612],{},"Same required env vars",[108,7614,7615],{"v-slot:right":110},[40,7616,7617],{},[143,7618],{"alt":7619,"src":7620,"variant":147},"Render production service configuration","\u002Fimages\u002Finternet-applications\u002Frender-setup\u002Frender-11-prod-config.png",[14,7622,7623,7626],{"id":6841,"level":17},[19,7624,7625],{"id":6841},"Normal Workflow",[162,7627,7628,7631,7634,7639,7642,7645,7648,7655],{},[27,7629,7630],{},"Work locally on a feature or homework branch",[27,7632,7633],{},"Commit and push that branch to GitHub",[27,7635,7636,7637],{},"Open a pull request into ",[265,7638,6415],{},[27,7640,7641],{},"Merge after review",[27,7643,7644],{},"Render updates the QA URL",[27,7646,7647],{},"Test the QA URL",[27,7649,6908,7650,6168,7652,7654],{},[265,7651,6415],{},[265,7653,6418],{}," after evidence gathering",[27,7656,7657],{},"Render updates the production URL",[14,7659,7661,7664],{"id":7660,"level":17},"urls-and-cold-starts",[19,7662,7663],{"id":7660},"URLs And Cold Starts",[24,7665,7666,7669,7672,7675,7683],{},[27,7667,7668],{},"QA URL shows the test deployment",[27,7670,7671],{},"Production URL shows the stable deployment",[27,7673,7674],{},"Homework evidence usually starts with QA",[27,7676,7677,7678],{},"Free services may sleep after inactivity\n",[24,7679,7680],{},[27,7681,7682],{},"First visit after sleep may take extra time (2 - 5 minutes)",[27,7684,7685],{},"Do not submit before Render finishes deploying",[14,7687,7689,7692],{"id":7688,"level":17},"logs-and-status",[19,7690,7691],{"id":7688},"Logs And Status",[103,7693,7694,7710],{"gap":105,"left-width":1709,"right-width":2254},[108,7695,7696],{"v-slot:left":110},[24,7697,7698,7701,7704,7707],{},[27,7699,7700],{},"Logs show build and startup output",[27,7702,7703],{},"Dashboard status shows deploy progress",[27,7705,7706],{},"Failed deploys usually show the first useful clue",[27,7708,7709],{},"Read the first clear error before changing settings",[108,7711,7712],{"v-slot:right":110},[40,7713,7714],{},[143,7715],{"alt":7716,"src":7717,"variant":147},"Render deploy logs","\u002Fimages\u002Finternet-applications\u002Frender-setup\u002Frender-12-logs.png",[14,7719,7721,7724],{"id":7720,"level":17},"troubleshooting",[19,7722,7723],{"id":7720},"Troubleshooting",[24,7725,7726,7736,7744,7754],{},[27,7727,7728,7729],{},"Build fails\n",[24,7730,7731],{},[27,7732,6880,7733,7735],{},[265,7734,5623],{},", root directory, runtime, and instance type",[27,7737,7738,7739],{},"App deploys but page fails\n",[24,7740,7741],{},[27,7742,7743],{},"Check logs for PHP errors",[27,7745,7746,7747],{},"Database connection fails\n",[24,7748,7749],{},[27,7750,6880,7751,7753],{},[265,7752,5974],{}," spelling and copied value",[27,7755,7756,7757],{},"Wrong version appears\n",[24,7758,7759,7762],{},[27,7760,7761],{},"Confirm the service watches the expected branch",[27,7763,7764],{},"Clear browser cache or test in a private window",[14,7766,7767,7769],{"id":1371,"level":17},[19,7768,1374],{"id":1371},[24,7770,7771,7781,7784,7789,7792,7795],{},[27,7772,7773,7774,7776,7777,1200,7779],{},"Choosing ",[265,7775,1794],{}," instead of ",[265,7778,6415],{},[265,7780,6418],{},[27,7782,7783],{},"Creating one service for both environments",[27,7785,7786,7787],{},"Forgetting ",[265,7788,5974],{},[27,7790,7791],{},"Using a paid instance type by accident",[27,7793,7794],{},"Checking GitHub but not the Render URL",[27,7796,7797],{},"Changing code locally but forgetting to push and merge",[14,7799,7800,7802],{"id":1454,"level":17},[19,7801,1455],{"id":1454},[103,7803,7804,7832],{"gap":105,"left-width":106,"right-width":106},[108,7805,7806,7808,7814,7820,7826],{"v-slot:left":110},[364,7807,1463],{"id":1462},[40,7809,7810,7813],{},[125,7811,7812],{},"Service"," - one deployed app on Render",[40,7815,7816,7819],{},[125,7817,7818],{},"Watched branch"," - Git branch Render deploys from",[40,7821,7822,7825],{},[125,7823,7824],{},"Environment variable"," - setting stored outside code",[40,7827,7828,7831],{},[125,7829,7830],{},"Deploy log"," - output from Render's build\u002Fstart process",[108,7833,7834,7836],{"v-slot:right":110},[364,7835,1494],{"id":1451},[24,7837,7838,7845,7852,7859],{},[27,7839,7840],{},[44,7841,7844],{"href":7842,"rel":7843},"https:\u002F\u002Frender.com\u002Fdocs\u002Fweb-services",[48],"Render Docs: Web Services",[27,7846,7847],{},[44,7848,7851],{"href":7849,"rel":7850},"https:\u002F\u002Frender.com\u002Fdocs\u002Fdeploys",[48],"Render Docs: Deploys",[27,7853,7854],{},[44,7855,7858],{"href":7856,"rel":7857},"https:\u002F\u002Frender.com\u002Fdocs\u002Fconfigure-environment-variables",[48],"Render Docs: Environment Variables",[27,7860,7861],{},[44,7862,7865],{"href":7863,"rel":7864},"https:\u002F\u002Frender.com\u002Fdocs\u002Ffree",[48],"Render Docs: Free Instance Types",[14,7867,7868,7870,7873],{"id":465,"level":17},[19,7869,468],{"id":465},[40,7871,7872],{},"Before leaving this presentation, confirm you:",[24,7874,7875,7878,7881,7888,7891,7894],{},[27,7876,7877],{},"Created QA and production Render services",[27,7879,7880],{},"Matched each service to the correct branch",[27,7882,7883,7884,5975,7886],{},"Added ",[265,7885,5974],{},[265,7887,5979],{},[27,7889,7890],{},"Opened each deployed URL",[27,7892,7893],{},"Read logs instead of assuming it worked",[27,7895,7896,7897],{},"Understand the local -> GitHub -> Render loop\n",[24,7898,7899,7902,7907],{},[27,7900,7901],{},"Majority of your work will be done locally and tested locally",[27,7903,7904,7906],{},[265,7905,6415],{}," is just for gathering evidence for submissions",[27,7908,7909,7911],{},[265,7910,6418],{}," is what will be verified during grading",{"title":110,"searchDepth":492,"depth":492,"links":7913},[7914,7915,7916,7917,7918,7919,7920,7921,7922,7923,7924,7925,7926,7927,7928,7929,7930,7931,7932],{"id":7133,"depth":492,"text":7125},{"id":2511,"depth":492,"text":2514},{"id":7180,"depth":492,"text":7183},{"id":637,"depth":492,"text":640},{"id":7277,"depth":492,"text":7280},{"id":7341,"depth":492,"text":7342},{"id":7373,"depth":492,"text":7376},{"id":7412,"depth":492,"text":7413},{"id":7449,"depth":492,"text":7450},{"id":7499,"depth":492,"text":7500},{"id":7542,"depth":492,"text":7545},{"id":7580,"depth":492,"text":7581},{"id":6841,"depth":492,"text":7625},{"id":7660,"depth":492,"text":7663},{"id":7688,"depth":492,"text":7691},{"id":7720,"depth":492,"text":7723},{"id":1371,"depth":492,"text":1374},{"id":1454,"depth":492,"text":1455},{"id":465,"depth":492,"text":468},"Connect the course repository to Render, create QA and production services, and verify the deploy loop from GitHub to a live URL.","Face-to-face class of about 40 students; includes Render account setup, QA\u002Fprod service creation, environment variables, deploy verification, and first troubleshooting pass.",{},"80","\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F08-render-setup",{"title":7125,"description":7933},"internet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F08-render-setup",[7941,7942,6415,7117],"render","deployment","21:42","esZd5RIpqCQ","https:\u002F\u002Fyoutu.be\u002FesZd5RIpqCQ","Render.com Setup (QA and Prod)","_1jV7vdhppggQ8TAOecx_1jFvjG90__8eGGlaXbnc28",{"id":7949,"title":7950,"audience":9,"body":7951,"contentType":508,"course":509,"description":10625,"estimateBasis":10626,"estimatedDiscussionMinutes":10627,"estimatedLiveMinutes":10628,"estimatedTotalMinutes":10629,"extension":515,"meta":10630,"module":517,"navigation":518,"order":4525,"path":10631,"promptAssist":521,"seo":10632,"status":523,"stem":10633,"tags":10634,"videoDuration":10639,"videoId":10640,"videoLink":10641,"videoTitle":10642,"week":517,"__hash__":10643},"content\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F09-local-ubuntu-web-server-virtualbox.md","Local Ubuntu Web Server With VirtualBox",{"type":11,"value":7952,"toc":10557},[7953,7982,8027,8063,8132,8164,8191,8223,8249,8278,8307,8334,8365,8393,8429,8494,8529,8575,8618,8662,8709,8772,8808,8843,8880,8913,8950,8983,9013,9043,9073,9103,9133,9167,9199,9231,9263,9312,9314,9357,9383,9424,9476,9555,9606,9637,9667,9697,9747,9772,9822,9870,9928,9986,10027,10057,10091,10125,10159,10210,10262,10281,10309,10357,10429,10529],[14,7954,7956,7959],{"id":7955,"level":17},"virtualbox-title",[19,7957,7950],{"id":7958},"local-ubuntu-web-server-with-virtualbox",[24,7960,7961,7964,7967,7970,7973,7979],{},[27,7962,7963],{},"Primary course path for the local Ubuntu VM",[27,7965,7966],{},"Create an Ubuntu Server VM in VirtualBox",[27,7968,7969],{},"Connect from your host terminal with SSH",[27,7971,7972],{},"Share the course repo into Ubuntu",[27,7974,7975,7976,7978],{},"Serve ",[265,7977,823],{}," through Apache and PHP",[27,7980,7981],{},"Create a local MySQL database for testing",[14,7983,7985,7988,7991,8002,8005],{"id":7984,"level":17},"main-goal",[19,7986,7987],{"id":7984},"Main Goal",[40,7989,7990],{},"Your host computer and Ubuntu VM have different jobs:",[24,7992,7993,7996,7999],{},[27,7994,7995],{},"Host computer: edit files with VS Code and open the browser",[27,7997,7998],{},"Ubuntu VM: run Apache, PHP, MySQL, and server commands",[27,8000,8001],{},"Shared folder: lets both use the same course repo files",[40,8003,8004],{},"Target result:",[24,8006,8007,8013,8018,8021,8024],{},[27,8008,8009,8010],{},"Host browser opens ",[265,8011,8012],{},"http:\u002F\u002Flocalhost:3000",[27,8014,8015,8016],{},"Apache serves the repo's ",[265,8017,823],{},[27,8019,8020],{},"PHP executes inside Ubuntu",[27,8022,8023],{},"Local MySQL has a database and user named after your UCID",[27,8025,8026],{},"Edits made on the host appear after browser refresh",[14,8028,8030,8033,8036,8055,8058],{"id":8029,"level":17},"virtualbox-caveat",[19,8031,8032],{"id":8029},"VirtualBox Caveat",[40,8034,8035],{},"VirtualBox is the primary local VM path for this course:",[24,8037,8038,8041,8044,8052],{},[27,8039,8040],{},"Works well on modern Windows, Linux, and Intel Mac hosts",[27,8042,8043],{},"Apple Silicon Mac requires an ARM64 Ubuntu Server ISO",[27,8045,8046,8047],{},"Windows on Arm support is experimental in VirtualBox\n",[24,8048,8049],{},[27,8050,8051],{},"Avoid unless your instructor confirms it for your machine",[27,8053,8054],{},"Arm hosts cannot run x86\u002FAMD64 guest images",[40,8056,8057],{},"VMware is the fallback path if VirtualBox is not a good fit for your machine",[1926,8059,8060],{"type":3201},[40,8061,8062],{},"Most students do not need BIOS changes. If VirtualBox cannot start the VM or does not offer a 64-bit Ubuntu option, check that Intel VT-x, AMD-V, or SVM is enabled in BIOS\u002FUEFI. On Windows, Hyper-V-related features can also interfere on some systems.",[14,8064,8065,8067],{"id":637,"level":17},[19,8066,640],{"id":637},[24,8068,8069,8087,8105,8108,8111,8114,8129],{},[27,8070,8071,8072],{},"VirtualBox downloaded\n",[24,8073,8074,8081,8084],{},[27,8075,8076],{},[44,8077,8080],{"href":8078,"rel":8079},"https:\u002F\u002Fwww.virtualbox.org\u002Fwiki\u002FDownloads",[48],"VirtualBox downloads",[27,8082,8083],{},"Windows\u002FLinux\u002FIntel Mac: use the standard host installer",[27,8085,8086],{},"Apple Silicon Mac: use the macOS Arm64 host installer",[27,8088,8089,8090],{},"Ubuntu Server ISO downloaded\n",[24,8091,8092,8099,8102],{},[27,8093,8094],{},[44,8095,8098],{"href":8096,"rel":8097},"https:\u002F\u002Fubuntu.com\u002Fdownload\u002Fserver#how-to-install-tab-lts",[48],"Ubuntu Server installer",[27,8100,8101],{},"Apple Silicon Mac: use the ARM64 server ISO",[27,8103,8104],{},"Windows, Linux, and Intel Mac: use the AMD64 server ISO",[27,8106,8107],{},"Internet Applications course repo cloned on host computer",[27,8109,8110],{},"Git\u002FGitHub setup already working",[27,8112,8113],{},"Administrator access on your computer",[27,8115,8116,8117,8120,8121],{},"At least ",[265,8118,8119],{},"10 GB"," free disk space for the VM\n",[24,8122,8123],{},[27,8124,8125,8128],{},[265,8126,8127],{},"20-25 GB"," is safer if your computer has room",[27,8130,8131],{},"Stable internet for package installs",[14,8133,8135,8138],{"id":8134,"level":17},"setup-parts",[19,8136,8137],{"id":8134},"Setup Parts",[24,8139,8140,8143,8146,8149,8155,8158,8161],{},[27,8141,8142],{},"VM: Ubuntu Server running inside VirtualBox",[27,8144,8145],{},"NAT adapter: gives the VM internet access",[27,8147,8148],{},"Port forwarding: lets the host reach SSH and Apache",[27,8150,8151,8152],{},"SSH: lets the host terminal control Ubuntu through ",[265,8153,8154],{},"localhost",[27,8156,8157],{},"Shared folder: exposes the host repo inside Ubuntu",[27,8159,8160],{},"Apache\u002FPHP: serves and executes the web app",[27,8162,8163],{},"MySQL: local database server for local testing",[14,8165,8167,8171],{"id":8166,"level":17},"install-virtualbox-windows",[19,8168,8170],{"id":8169},"install-virtualbox-on-windows","Install VirtualBox On Windows",[24,8172,8173,8176,8179,8182,8185,8188],{},[27,8174,8175],{},"Download VirtualBox for Windows hosts",[27,8177,8178],{},"Run the installer as an administrator if prompted",[27,8180,8181],{},"Keep the default install path and features",[27,8183,8184],{},"Accept the network reset warning",[27,8186,8187],{},"Open VirtualBox after installation",[27,8189,8190],{},"See the slides below for the Windows installer screens",[14,8192,8194,8197],{"id":8193,"level":98},"windows-installer-start",[19,8195,8196],{"id":8193},"Windows Installer: Start",[103,8198,8199,8207],{"gap":105,"left-width":1708,"right-width":1709,"stack":1710},[108,8200,8201],{"v-slot:left":110},[40,8202,8203],{},[143,8204],{"alt":8205,"src":8206,"variant":147},"VirtualBox Windows installer start screen","\u002Fimages\u002Finternet-applications\u002Fvirtualbox\u002Fvb_step1.png",[108,8208,8209],{"v-slot:right":110},[24,8210,8211,8217,8220],{},[27,8212,8213,8214],{},"Launch the downloaded ",[265,8215,8216],{},".exe",[27,8218,8219],{},"Approve the Windows security prompt if shown",[27,8221,8222],{},"Start the setup wizard",[14,8224,8226,8229],{"id":8225,"level":98},"windows-installer-features",[19,8227,8228],{"id":8225},"Windows Installer: Features",[103,8230,8231,8239],{"gap":105,"left-width":1708,"right-width":1709,"stack":1710},[108,8232,8233],{"v-slot:left":110},[40,8234,8235],{},[143,8236],{"alt":8237,"src":8238,"variant":147},"VirtualBox Windows installer feature selection screen","\u002Fimages\u002Finternet-applications\u002Fvirtualbox\u002Fvb_step2.png",[108,8240,8241],{"v-slot:right":110},[24,8242,8243,8246],{},[27,8244,8245],{},"Keep the default install location",[27,8247,8248],{},"Keep the default features selected",[14,8250,8252,8255],{"id":8251,"level":98},"windows-installer-network-warning",[19,8253,8254],{"id":8251},"Windows Installer: Network Warning",[103,8256,8257,8265],{"gap":105,"left-width":1708,"right-width":1709,"stack":1710},[108,8258,8259],{"v-slot:left":110},[40,8260,8261],{},[143,8262],{"alt":8263,"src":8264,"variant":147},"VirtualBox Windows installer network warning","\u002Fimages\u002Finternet-applications\u002Fvirtualbox\u002Fvb_step3.png",[108,8266,8267],{"v-slot:right":110},[24,8268,8269,8272,8275],{},[27,8270,8271],{},"VirtualBox may reset network adapters briefly",[27,8273,8274],{},"This is expected during install",[27,8276,8277],{},"Save web work before continuing if needed",[14,8279,8281,8284],{"id":8280,"level":98},"windows-installer-ready",[19,8282,8283],{"id":8280},"Windows Installer: Ready",[103,8285,8286,8294],{"gap":105,"left-width":1708,"right-width":1709,"stack":1710},[108,8287,8288],{"v-slot:left":110},[40,8289,8290],{},[143,8291],{"alt":8292,"src":8293,"variant":147},"VirtualBox Windows installer ready screen","\u002Fimages\u002Finternet-applications\u002Fvirtualbox\u002Fvb_step4.png",[108,8295,8296],{"v-slot:right":110},[24,8297,8298,8301,8304],{},[27,8299,8300],{},"Start the installation",[27,8302,8303],{},"Keep the default choices",[27,8305,8306],{},"Wait for the installer to request permissions if needed",[14,8308,8310,8314],{"id":8309,"level":98},"windows-installer-progress",[19,8311,8313],{"id":8312},"windows-installer-start-options","Windows Installer: Start Options",[103,8315,8316,8324],{"gap":105,"left-width":1708,"right-width":1709,"stack":1710},[108,8317,8318],{"v-slot:left":110},[40,8319,8320],{},[143,8321],{"alt":8322,"src":8323,"variant":147},"VirtualBox Windows installer progress screen","\u002Fimages\u002Finternet-applications\u002Fvirtualbox\u002Fvb_step5.png",[108,8325,8326],{"v-slot:right":110},[24,8327,8328,8331],{},[27,8329,8330],{},"No need to create a Start Menu item or desktop shortcut unless desired",[27,8332,8333],{},"Third option is likely optional too since we'll be using the VirtualBox Manager",[14,8335,8337,8340],{"id":8336,"level":98},"windows-installer-permission",[19,8338,8339],{"id":8336},"Windows Installer: Permission",[103,8341,8342,8350],{"gap":105,"left-width":1708,"right-width":1709,"stack":1710},[108,8343,8344],{"v-slot:left":110},[40,8345,8346],{},[143,8347],{"alt":8348,"src":8349,"variant":147},"VirtualBox Windows installer permission prompt","\u002Fimages\u002Finternet-applications\u002Fvirtualbox\u002Fvb_step6.png",[108,8351,8352],{"v-slot:right":110},[24,8353,8354,8357],{},[27,8355,8356],{},"Proceed with install",[27,8358,8359,8360],{},"Approve VirtualBox driver prompts\n",[24,8361,8362],{},[27,8363,8364],{},"These let VirtualBox create virtual hardware",[14,8366,8368,8371],{"id":8367,"level":98},"windows-installer-complete",[19,8369,8370],{"id":8367},"Windows Installer: Complete",[103,8372,8373,8381],{"gap":105,"left-width":1708,"right-width":1709,"stack":1710},[108,8374,8375],{"v-slot:left":110},[40,8376,8377],{},[143,8378],{"alt":8379,"src":8380,"variant":147},"VirtualBox Windows installer completion screen","\u002Fimages\u002Finternet-applications\u002Fvirtualbox\u002Fvb_step7.png",[108,8382,8383],{"v-slot:right":110},[24,8384,8385,8387,8390],{},[27,8386,2074],{},[27,8388,8389],{},"Open VirtualBox",[27,8391,8392],{},"Continue to VM creation",[14,8394,8396,8400],{"id":8395,"level":17},"install-virtualbox-macos",[19,8397,8399],{"id":8398},"install-virtualbox-on-macos","Install VirtualBox On macOS",[103,8401,8402,8421],{"gap":105,"left-width":2664,"right-width":4856,"stack":1710},[108,8403,8404],{"v-slot:left":110},[24,8405,8406,8409,8412,8415,8418],{},[27,8407,8408],{},"Install the VirtualBox host package for your Mac CPU type",[27,8410,8411],{},"Intel Mac: standard macOS host installer",[27,8413,8414],{},"Apple Silicon Mac: Arm64 host installer and Arm64 Ubuntu Server ISO",[27,8416,8417],{},"Approve macOS security prompts if needed",[27,8419,8420],{},"If VirtualBox is not a good fit, use the VMware fallback lesson",[108,8422,8423],{"v-slot:right":110},[40,8424,8425],{},[143,8426],{"alt":8427,"src":8428,"variant":147},"Summary of macOS VirtualBox setup notes","\u002Fimages\u002Finternet-applications\u002Fvirtualbox\u002Fvm_summary_mac.png",[14,8430,8432,8436,8439],{"id":8431,"level":17},"step-1-create-vm",[19,8433,8435],{"id":8434},"step-1-create-the-vm","Step 1: Create The VM",[40,8437,8438],{},"Create a lightweight Ubuntu Server VM:",[24,8440,8441,8444,8452,8467,8479,8485,8488,8491],{},[27,8442,8443],{},"Type: Linux",[27,8445,8446,8447],{},"Version: Ubuntu 64-bit or Ubuntu Arm64\n",[24,8448,8449],{},[27,8450,8451],{},"Match the version to the ISO you downloaded",[27,8453,8454,8455,8458,8459],{},"Memory: ",[265,8456,8457],{},"1 GB"," course target\n",[24,8460,8461],{},[27,8462,1149,8463,8466],{},[265,8464,8465],{},"1.5-2 GB"," if the installer is too slow or refuses to continue (you shouldn't need to do this)",[27,8468,8469,8470,8472,8473],{},"Disk: ",[265,8471,8119],{}," course minimum\n",[24,8474,8475],{},[27,8476,8477,8128],{},[265,8478,8127],{},[27,8480,8481,8482,8484],{},"CPU: ",[265,8483,517],{}," core is enough for this course VM",[27,8486,8487],{},"Enable OpenSSH during install if prompted",[27,8489,8490],{},"Username: use your UCID",[27,8492,8493],{},"See the slides below for VM settings and Ubuntu install screens",[14,8495,8497,8500],{"id":8496,"level":98},"vm-setup-name-and-iso",[19,8498,8499],{"id":8496},"VM Setup: Name And ISO",[103,8501,8502,8510],{"gap":105,"left-width":1708,"right-width":1709,"stack":1710},[108,8503,8504],{"v-slot:left":110},[40,8505,8506],{},[143,8507],{"alt":8508,"src":8509,"variant":147},"VirtualBox VM name and ISO setup","\u002Fimages\u002Finternet-applications\u002Fvirtualbox\u002Fvb_setup_1.png",[108,8511,8512],{"v-slot:right":110},[24,8513,8514,8517,8523,8526],{},[27,8515,8516],{},"Start a new virtual machine",[27,8518,8519,8520],{},"Name it clearly, such as ",[265,8521,8522],{},"it202-vm",[27,8524,8525],{},"Choose the Ubuntu Server ISO file next",[27,8527,8528],{},"OS fields may look wrong until the ISO is selected",[14,8530,8532,8535],{"id":8531,"level":98},"vm-setup-confirm-ubuntu-iso",[19,8533,8534],{"id":8531},"VM Setup: Confirm Ubuntu ISO",[103,8536,8537,8545],{"gap":105,"left-width":1708,"right-width":1709,"stack":1710},[108,8538,8539],{"v-slot:left":110},[40,8540,8541],{},[143,8542],{"alt":8543,"src":8544,"variant":147},"VirtualBox VM name and Ubuntu ISO selected","\u002Fimages\u002Finternet-applications\u002Fvirtualbox\u002Fvb_setup_2.png",[108,8546,8547],{"v-slot:right":110},[24,8548,8549,8555,8561,8564],{},[27,8550,8551,8552],{},"Confirm OS is ",[265,8553,8554],{},"Linux",[27,8556,8557,8558],{},"Confirm distribution is ",[265,8559,8560],{},"Ubuntu",[27,8562,8563],{},"Confirm version matches your ISO",[27,8565,1728,8566,8569,8570],{},[265,8567,8568],{},"Unattended Installation"," off\n",[24,8571,8572],{},[27,8573,8574],{},"The Ubuntu installer screens are easier to teach manually",[14,8576,8578,8581],{"id":8577,"level":98},"vm-setup-memory-and-cpu",[19,8579,8580],{"id":8577},"VM Setup: Memory And CPU",[103,8582,8583,8591],{"gap":105,"left-width":1708,"right-width":1709,"stack":1710},[108,8584,8585],{"v-slot:left":110},[40,8586,8587],{},[143,8588],{"alt":8589,"src":8590,"variant":147},"VirtualBox VM memory and CPU settings","\u002Fimages\u002Finternet-applications\u002Fvirtualbox\u002Fvb_setup_4.png",[108,8592,8593],{"v-slot:right":110},[24,8594,8595,8608,8612,8615],{},[27,8596,8454,8597,8458,8600],{},[265,8598,8599],{},"1024 MB",[24,8601,8602,8605],{},[27,8603,8604],{},"The goal is to match free-tier cloud services",[27,8606,8607],{},"Demonstrates that small apps can run with limited resources",[27,8609,8481,8610],{},[265,8611,517],{},[27,8613,8614],{},"Keep EFI off unless your machine requires it",[27,8616,8617],{},"This VM is for Apache, PHP, MySQL, and local development\u002Ftesting",[14,8619,8621,8624],{"id":8620,"level":98},"vm-setup-virtual-disk",[19,8622,8623],{"id":8620},"VM Setup: Virtual Disk",[103,8625,8626,8634],{"gap":105,"left-width":1708,"right-width":1709,"stack":1710},[108,8627,8628],{"v-slot:left":110},[40,8629,8630],{},[143,8631],{"alt":8632,"src":8633,"variant":147},"VirtualBox virtual hard disk settings","\u002Fimages\u002Finternet-applications\u002Fvirtualbox\u002Fvb_setup_5.png",[108,8635,8636],{"v-slot:right":110},[24,8637,8638,8644,8647,8659],{},[27,8639,8640,8641],{},"Disk type: ",[265,8642,8643],{},"VDI",[27,8645,8646],{},"Storage: dynamically allocated",[27,8648,8649,8650,8652],{},"Minimum: ",[265,8651,8119],{},[24,8653,8654],{},[27,8655,8656,8658],{},[265,8657,8127],{}," is safer if you have room",[27,8660,8661],{},"Dynamic disk uses space as needed, not all at once",[14,8663,8665,8668],{"id":8664,"level":98},"vm-setup-start-with-gui",[19,8666,8667],{"id":8664},"VM Setup: Start With GUI",[103,8669,8670,8678],{"gap":105,"left-width":1708,"right-width":1709,"stack":1710},[108,8671,8672],{"v-slot:left":110},[40,8673,8674],{},[143,8675],{"alt":8676,"src":8677,"variant":147},"VirtualBox VM selected with the Start button visible","\u002Fimages\u002Finternet-applications\u002Fvirtualbox\u002Fvb_setup_6.png",[108,8679,8680],{"v-slot:right":110},[24,8681,8682,8685,8695,8698],{},[27,8683,8684],{},"Select the newly created VM",[27,8686,169,8687,8690],{},[265,8688,8689],{},"Start",[24,8691,8692],{},[27,8693,8694],{},"Choose the normal GUI start for the first boot",[27,8696,8697],{},"Complete the Ubuntu installer in the VM window",[27,8699,8700,8701],{},"After install and SSH setup, future starts can be headless\n",[24,8702,8703],{},[27,8704,8705,8706,8708],{},"You will connect with ",[265,8707,3593],{}," when you need the VM",[14,8710,8712,8716,8719],{"id":8711,"level":17},"ubuntu-installer",[19,8713,8715],{"id":8714},"step-2-ubuntu-installer","Step 2: Ubuntu Installer",[40,8717,8718],{},"Use the Ubuntu Server installer after the VM starts:",[24,8720,8721,8724,8727,8730,8733,8736,8769],{},[27,8722,8723],{},"Choose the default course options unless noted",[27,8725,8726],{},"Continue without updating the installer if instructed",[27,8728,8729],{},"Use your UCID for the Ubuntu username",[27,8731,8732],{},"Install OpenSSH server during setup",[27,8734,8735],{},"Skip optional server snaps",[27,8737,8738,8739],{},"Keyboard navigation:\n",[24,8740,8741,8748,8758,8764],{},[27,8742,8743,8747],{},[8744,8745,8746],"kbd",{},"Tab"," moves between fields and buttons",[27,8749,8750,8753,8754,8757],{},[8744,8751,8752],{},"Up"," \u002F ",[8744,8755,8756],{},"Down"," moves through lists",[27,8759,8760,8763],{},[8744,8761,8762],{},"Space"," toggles checkboxes",[27,8765,8766,8768],{},[8744,8767,1233],{}," confirms the selected option",[27,8770,8771],{},"See the slides below for the installer screens",[14,8773,8775,8779],{"id":8774,"level":98},"ubuntu-installer-boot-menu",[19,8776,8778],{"id":8777},"step-21-boot-menu","Step 2.1: Boot Menu",[103,8780,8783,8792],{"gap":515,"left-width":8781,"right-width":8782,"stack":1710},"1.75fr","0.65fr",[108,8784,8785],{"v-slot:left":110},[40,8786,8787],{},[143,8788],{"alt":8789,"src":8790,"variant":8791},"Ubuntu Server boot menu in VirtualBox","\u002Fimages\u002Finternet-applications\u002Fvirtualbox\u002Fvb_vm_1.png","slide-screenshot",[108,8793,8794],{"v-slot:right":110},[24,8795,8796,8801,8805],{},[27,8797,2679,8798],{},[265,8799,8800],{},"Try or Install Ubuntu Server",[27,8802,1265,8803],{},[8744,8804,1233],{},[27,8806,8807],{},"This starts the Ubuntu Server installer",[14,8809,8811,8815],{"id":8810,"level":98},"ubuntu-installer-language",[19,8812,8814],{"id":8813},"step-22-language","Step 2.2: Language",[103,8816,8817,8825],{"gap":515,"left-width":8781,"right-width":8782,"stack":1710},[108,8818,8819],{"v-slot:left":110},[40,8820,8821],{},[143,8822],{"alt":8823,"src":8824,"variant":8791},"Ubuntu Server installer language screen","\u002Fimages\u002Finternet-applications\u002Fvirtualbox\u002Fvb_vm_2.0.png",[108,8826,8827],{"v-slot:right":110},[24,8828,8829,8832,8838],{},[27,8830,8831],{},"Choose your preferred language",[27,8833,8834,8837],{},[265,8835,8836],{},"English"," is the expected course screenshot path",[27,8839,1265,8840,8842],{},[8744,8841,1233],{}," to continue",[14,8844,8846,8850],{"id":8845,"level":98},"ubuntu-installer-update",[19,8847,8849],{"id":8848},"step-23-update-prompt","Step 2.3: Update Prompt",[103,8851,8852,8860],{"gap":515,"left-width":8781,"right-width":8782,"stack":1710},[108,8853,8854],{"v-slot:left":110},[40,8855,8856],{},[143,8857],{"alt":8858,"src":8859,"variant":8791},"Ubuntu Server installer update prompt","\u002Fimages\u002Finternet-applications\u002Fvirtualbox\u002Fvb_vm_2.5.png",[108,8861,8862],{"v-slot:right":110},[24,8863,8864,8874,8877],{},[27,8865,2679,8866,8869],{},[265,8867,8868],{},"Continue without updating",[24,8870,8871],{},[27,8872,8873],{},"If I forget to update the image, it's the second option",[27,8875,8876],{},"Keeps the install path consistent",[27,8878,8879],{},"Package updates happen after Ubuntu is installed",[14,8881,8883,8887],{"id":8882,"level":98},"ubuntu-installer-keyboard",[19,8884,8886],{"id":8885},"step-24-keyboard","Step 2.4: Keyboard",[103,8888,8889,8897],{"gap":515,"left-width":8781,"right-width":8782,"stack":1710},[108,8890,8891],{"v-slot:left":110},[40,8892,8893],{},[143,8894],{"alt":8895,"src":8896,"variant":8791},"Ubuntu Server installer keyboard screen","\u002Fimages\u002Finternet-applications\u002Fvirtualbox\u002Fvb_vm_3.png",[108,8898,8899],{"v-slot:right":110},[24,8900,8901,8904,8910],{},[27,8902,8903],{},"Keep the detected keyboard layout if it matches",[27,8905,8906,8907],{},"Common setting: ",[265,8908,8909],{},"English (US)",[27,8911,8912],{},"Use Identify keyboard only if typing is wrong",[14,8914,8916,8920],{"id":8915,"level":98},"ubuntu-installer-install-type",[19,8917,8919],{"id":8918},"step-25-install-type","Step 2.5: Install Type",[103,8921,8922,8930],{"gap":515,"left-width":8781,"right-width":8782,"stack":1710},[108,8923,8924],{"v-slot:left":110},[40,8925,8926],{},[143,8927],{"alt":8928,"src":8929,"variant":8791},"Ubuntu Server installer installation type screen","\u002Fimages\u002Finternet-applications\u002Fvirtualbox\u002Fvb_vm_4.png",[108,8931,8932],{"v-slot:right":110},[24,8933,8934,8944,8947],{},[27,8935,8936,8937,8940,8941],{},"Select ",[265,8938,8939],{},"Ubuntu Server (minimized)","; don't choose full ",[265,8942,8943],{},"Ubuntu Server",[27,8945,8946],{},"Keep third-party drivers unchecked",[27,8948,8949],{},"Minimized keeps the VM lighter and aids future lessons",[14,8951,8953,8957],{"id":8952,"level":98},"ubuntu-installer-network",[19,8954,8956],{"id":8955},"step-26-network","Step 2.6: Network",[103,8958,8959,8967],{"gap":515,"left-width":8781,"right-width":8782,"stack":1710},[108,8960,8961],{"v-slot:left":110},[40,8962,8963],{},[143,8964],{"alt":8965,"src":8966,"variant":8791},"Ubuntu Server installer network configuration screen","\u002Fimages\u002Finternet-applications\u002Fvirtualbox\u002Fvb_vm_5.png",[108,8968,8969],{"v-slot:right":110},[24,8970,8971,8974,8980],{},[27,8972,8973],{},"DHCP address is expected",[27,8975,8976,8979],{},[265,8977,8978],{},"10.0.2.15"," is normal for VirtualBox NAT",[27,8981,8982],{},"Leave the network settings alone",[14,8984,8986,8990],{"id":8985,"level":98},"ubuntu-installer-proxy",[19,8987,8989],{"id":8988},"step-27-proxy","Step 2.7: Proxy",[103,8991,8992,9000],{"gap":515,"left-width":8781,"right-width":8782,"stack":1710},[108,8993,8994],{"v-slot:left":110},[40,8995,8996],{},[143,8997],{"alt":8998,"src":8999,"variant":8791},"Ubuntu Server installer proxy screen","\u002Fimages\u002Finternet-applications\u002Fvirtualbox\u002Fvb_vm_6.png",[108,9001,9002],{"v-slot:right":110},[24,9003,9004,9007,9010],{},[27,9005,9006],{},"Leave proxy blank",[27,9008,9009],{},"Only fill this in if your network requires a proxy",[27,9011,9012],{},"Most student home networks do not need one",[14,9014,9016,9020],{"id":9015,"level":98},"ubuntu-installer-mirror",[19,9017,9019],{"id":9018},"step-28-mirror","Step 2.8: Mirror",[103,9021,9022,9030],{"gap":515,"left-width":8781,"right-width":8782,"stack":1710},[108,9023,9024],{"v-slot:left":110},[40,9025,9026],{},[143,9027],{"alt":9028,"src":9029,"variant":8791},"Ubuntu Server installer archive mirror screen","\u002Fimages\u002Finternet-applications\u002Fvirtualbox\u002Fvb_vm_7.png",[108,9031,9032],{"v-slot:right":110},[24,9033,9034,9037,9040],{},[27,9035,9036],{},"Keep the default Ubuntu archive mirror",[27,9038,9039],{},"Wait for the mirror check to finish",[27,9041,9042],{},"Continue when the installer allows it",[14,9044,9046,9050],{"id":9045,"level":98},"ubuntu-installer-storage-guided",[19,9047,9049],{"id":9048},"step-29-guided-storage","Step 2.9: Guided Storage",[103,9051,9052,9060],{"gap":515,"left-width":8781,"right-width":8782,"stack":1710},[108,9053,9054],{"v-slot:left":110},[40,9055,9056],{},[143,9057],{"alt":9058,"src":9059,"variant":8791},"Ubuntu Server installer guided storage screen","\u002Fimages\u002Finternet-applications\u002Fvirtualbox\u002Fvb_vm_8.png",[108,9061,9062],{"v-slot:right":110},[24,9063,9064,9067,9070],{},[27,9065,9066],{},"Use the entire virtual disk",[27,9068,9069],{},"LVM is optional, not needed for this course VM",[27,9071,9072],{},"Leave encryption off",[14,9074,9076,9080],{"id":9075,"level":98},"ubuntu-installer-storage-summary",[19,9077,9079],{"id":9078},"step-210-storage-summary","Step 2.10: Storage Summary",[103,9081,9082,9090],{"gap":515,"left-width":8781,"right-width":8782,"stack":1710},[108,9083,9084],{"v-slot:left":110},[40,9085,9086],{},[143,9087],{"alt":9088,"src":9089,"variant":8791},"Ubuntu Server installer storage summary screen","\u002Fimages\u002Finternet-applications\u002Fvirtualbox\u002Fvb_vm_9.png",[108,9091,9092],{"v-slot:right":110},[24,9093,9094,9097,9100],{},[27,9095,9096],{},"Confirm the virtual disk is selected",[27,9098,9099],{},"This only affects the VM disk file",[27,9101,9102],{},"Continue when the layout looks correct",[14,9104,9106,9110],{"id":9105,"level":98},"ubuntu-installer-confirm-storage",[19,9107,9109],{"id":9108},"step-211-confirm-storage","Step 2.11: Confirm Storage",[103,9111,9112,9120],{"gap":515,"left-width":8781,"right-width":8782,"stack":1710},[108,9113,9114],{"v-slot:left":110},[40,9115,9116],{},[143,9117],{"alt":9118,"src":9119,"variant":8791},"Ubuntu Server installer destructive action confirmation","\u002Fimages\u002Finternet-applications\u002Fvirtualbox\u002Fvb_vm_10.png",[108,9121,9122],{"v-slot:right":110},[24,9123,9124,9127,9130],{},[27,9125,9126],{},"Confirm the virtual disk format",[27,9128,9129],{},"This does not erase your host computer files",[27,9131,9132],{},"It formats the VM's virtual disk",[14,9134,9136,9140],{"id":9135,"level":98},"ubuntu-installer-profile",[19,9137,9139],{"id":9138},"step-212-profile","Step 2.12: Profile",[103,9141,9142,9150],{"gap":515,"left-width":8781,"right-width":8782,"stack":1710},[108,9143,9144],{"v-slot:left":110},[40,9145,9146],{},[143,9147],{"alt":9148,"src":9149,"variant":8791},"Ubuntu Server installer profile configuration screen","\u002Fimages\u002Finternet-applications\u002Fvirtualbox\u002Fvb_vm_11.png",[108,9151,9152],{"v-slot:right":110},[24,9153,9154,9157,9162,9164],{},[27,9155,9156],{},"Your name: your UCID or name is fine",[27,9158,9159,9160],{},"Server name: ",[265,9161,8522],{},[27,9163,4810],{},[27,9165,9166],{},"Choose a password you can type reliably (it can be simple since it's only for local work)",[14,9168,9170,9174],{"id":9169,"level":98},"ubuntu-installer-pro",[19,9171,9173],{"id":9172},"step-213-ubuntu-pro","Step 2.13: Ubuntu Pro",[103,9175,9176,9184],{"gap":515,"left-width":8781,"right-width":8782,"stack":1710},[108,9177,9178],{"v-slot:left":110},[40,9179,9180],{},[143,9181],{"alt":9182,"src":9183,"variant":8791},"Ubuntu Server installer Ubuntu Pro screen","\u002Fimages\u002Finternet-applications\u002Fvirtualbox\u002Fvb_vm_12.png",[108,9185,9186],{"v-slot:right":110},[24,9187,9188,9193,9196],{},[27,9189,2679,9190],{},[265,9191,9192],{},"Skip for now",[27,9194,9195],{},"Ubuntu Pro is not needed for the course VM",[27,9197,9198],{},"You can continue without an Ubuntu account",[14,9200,9202,9206],{"id":9201,"level":98},"ubuntu-installer-ssh",[19,9203,9205],{"id":9204},"step-214-ssh","Step 2.14: SSH",[103,9207,9208,9216],{"gap":515,"left-width":8781,"right-width":8782,"stack":1710},[108,9209,9210],{"v-slot:left":110},[40,9211,9212],{},[143,9213],{"alt":9214,"src":9215,"variant":8791},"Ubuntu Server installer SSH configuration screen","\u002Fimages\u002Finternet-applications\u002Fvirtualbox\u002Fvb_vm_13.png",[108,9217,9218],{"v-slot:right":110},[24,9219,9220,9225,9228],{},[27,9221,6880,9222],{},[265,9223,9224],{},"Install OpenSSH server",[27,9226,9227],{},"Password authentication is fine for this local VM",[27,9229,9230],{},"No need to import SSH keys for this course setup",[14,9232,9234,9238],{"id":9233,"level":98},"ubuntu-installer-snaps",[19,9235,9237],{"id":9236},"step-215-featured-snaps","Step 2.15: Featured Snaps",[103,9239,9240,9248],{"gap":515,"left-width":8781,"right-width":8782,"stack":1710},[108,9241,9242],{"v-slot:left":110},[40,9243,9244],{},[143,9245],{"alt":9246,"src":9247,"variant":8791},"Ubuntu Server installer featured server snaps screen","\u002Fimages\u002Finternet-applications\u002Fvirtualbox\u002Fvb_vm_14.png",[108,9249,9250],{"v-slot:right":110},[24,9251,9252,9255,9260],{},[27,9253,9254],{},"Leave all featured snaps unchecked",[27,9256,9257,9258],{},"Apache, PHP, and MySQL are installed later with ",[265,9259,6090],{},[27,9261,9262],{},"Continue without selecting extra packages",[14,9264,9266,9270],{"id":9265,"level":98},"ubuntu-installer-installing",[19,9267,9269],{"id":9268},"step-216-installing","Step 2.16: Installing",[103,9271,9272,9280],{"gap":515,"left-width":8781,"right-width":8782,"stack":1710},[108,9273,9274],{"v-slot:left":110},[40,9275,9276],{},[143,9277],{"alt":9278,"src":9279,"variant":8791},"Ubuntu Server installer installing system screen","\u002Fimages\u002Finternet-applications\u002Fvirtualbox\u002Fvb_vm_15.png",[108,9281,9282,9307],{"v-slot:right":110},[24,9283,9284,9287,9290,9298,9304],{},[27,9285,9286],{},"Installation can take a while",[27,9288,9289],{},"High CPU during install is normal",[27,9291,9292,9293,9295,9296],{},"If install struggles at ",[265,9294,8457],{},", recreate the VM with ",[265,9297,8465],{},[27,9299,9300,9301,9303],{},"Keep the course target at ",[265,9302,8457],{}," after setup if possible",[27,9305,9306],{},"Reboot once complete",[1926,9308,9309],{"type":3201},[40,9310,9311],{},"These target resources stay close to common cloud free-tier VMs",[40,9313,1934],{},[14,9315,9317,9321,9324],{"id":9316,"level":17},"step-2-networking",[19,9318,9320],{"id":9319},"virtualbox-configure-networking","VirtualBox: Configure Networking",[40,9322,9323],{},"Use one NAT adapter with port forwarding:",[24,9325,9326,9332,9341,9349,9354],{},[27,9327,9328,9329],{},"VM internet: ",[265,9330,9331],{},"NAT",[27,9333,9334,9335,9338,9339],{},"Host SSH: host ",[265,9336,9337],{},"22"," -> guest ",[265,9340,9337],{},[27,9342,9343,9344,9338,9347],{},"Host browser: host ",[265,9345,9346],{},"3000",[265,9348,7936],{},[27,9350,1149,9351,9353],{},[265,9352,8154],{}," from the host computer",[27,9355,9356],{},"See the slides below for adapter and port-forwarding screens",[14,9358,9360,9364,9377],{"id":9359,"level":98},"adapter-settings-screen",[19,9361,9363],{"id":9362},"adapter-settings","Adapter Settings",[24,9365,9366,9369,9374],{},[27,9367,9368],{},"Adapter 1 enabled",[27,9370,9371,9372],{},"Attached to ",[265,9373,9331],{},[27,9375,9376],{},"No second adapter needed for the baseline path",[40,9378,9379],{},[143,9380],{"alt":9381,"src":9382,"variant":8791},"VirtualBox Adapter 1 configured as NAT","\u002Fimages\u002Finternet-applications\u002Fvirtualbox\u002Fvb_adapter_1.png",[14,9384,9386,9390,9418],{"id":9385,"level":98},"port-forwarding-screen",[19,9387,9389],{"id":9388},"port-forwarding","Port Forwarding",[24,9391,9392,9400,9407],{},[27,9393,9394,9395,9397,9398],{},"SSH: host ",[265,9396,9337],{}," to guest ",[265,9399,9337],{},[27,9401,9402,9403,9397,9405],{},"Apache HTTP: host ",[265,9404,9346],{},[265,9406,7936],{},[27,9408,9409,9410,9412,9413,9397,9416],{},"If host ",[265,9411,9337],{}," is already busy, use host ",[265,9414,9415],{},"2222",[265,9417,9337],{},[40,9419,9420],{},[143,9421],{"alt":9422,"src":9423,"variant":8791},"VirtualBox NAT port forwarding rules","\u002Fimages\u002Finternet-applications\u002Fvirtualbox\u002Fvb_adapter_1_ports.png",[14,9425,9427,9431,9434,9437,9440,9443],{"id":9426,"level":17},"step-3-connect-ssh",[19,9428,9430],{"id":9429},"step-3-connect-with-ssh","Step 3: Connect With SSH",[40,9432,9433],{},"Run from your host terminal:",[883,9435],{"language":885,"src":9436},"\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F09-local-ubuntu-web-server-virtualbox\u002Fstep-3-connect-with-ssh-01.sh",[40,9438,9439],{},"First connection prompt:",[883,9441],{"language":3664,"src":9442},"\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F09-local-ubuntu-web-server-virtualbox\u002Fstep-3-connect-with-ssh-02.txt",[24,9444,9445,9452,9461,9464,9467],{},[27,9446,9447,9448,9451],{},"Replace ",[265,9449,9450],{},"your_ucid"," with your UCID",[27,9453,9454,9455,9457,9458,9460],{},"Type ",[265,9456,3128],{}," once for this course VM on ",[265,9459,8154],{}," (if prompted like the example above)",[27,9462,9463],{},"Enter your Ubuntu password",[27,9465,9466],{},"After login, commands run inside Ubuntu",[27,9468,9469,1200,9472,9475],{},[265,9470,9471],{},"exit",[265,9473,9474],{},"logout"," disconnects from the VM",[14,9477,9479,9483,9486],{"id":9478,"level":17},"step-4-confirm-network",[19,9480,9482],{"id":9481},"step-4-confirm-vm-network","Step 4: Confirm VM Network",[40,9484,9485],{},"Run inside Ubuntu through SSH:",[103,9487,9488,9530],{"gap":105,"left-width":2254,"right-width":106,"stack":1710},[108,9489,9490,9493,9496],{"v-slot:left":110},[40,9491,9492],{},"Network check:",[883,9494],{"language":885,"src":9495},"\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F09-local-ubuntu-web-server-virtualbox\u002Fstep-4-confirm-vm-networ-03.sh",[24,9497,9498,9504,9510,9516,9522],{},[27,9499,9500,9503],{},[265,9501,9502],{},"ping",": confirms basic network access",[27,9505,9506,9509],{},[265,9507,9508],{},"-c 4",": stop after four replies",[27,9511,9512,9515],{},[265,9513,9514],{},"apt update",": refreshes package indexes",[27,9517,9518,9521],{},[265,9519,9520],{},"apt upgrade",": applies available package updates",[27,9523,2171,9524,9526,9527],{},[265,9525,9502],{}," is not found, run ",[265,9528,9529],{},"sudo apt install iputils-ping",[108,9531,9532,9535,9538],{"v-slot:right":110},[40,9533,9534],{},"Port-forwarding check:",[883,9536],{"language":885,"src":9537},"\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F09-local-ubuntu-web-server-virtualbox\u002Fslide-id-summary-level-2-04.sh",[24,9539,9540,9545,9548,9552],{},[27,9541,9542,9543],{},"The VM may show ",[265,9544,8978],{},[27,9546,9547],{},"That is normal for VirtualBox NAT",[27,9549,1149,9550,9353],{},[265,9551,8154],{},[27,9553,9554],{},"Port forwarding routes host traffic into the VM",[14,9556,9558,9562],{"id":9557,"level":17},"step-5-shared-folder",[19,9559,9561],{"id":9560},"step-5-enable-shared-folder","Step 5: Enable Shared Folder",[103,9563,9564,9598],{"gap":105,"left-width":1709,"right-width":2254,"stack":1710},[108,9565,9566,9569],{"v-slot:left":110},[40,9567,9568],{},"In VirtualBox:",[24,9570,9571,9574,9577,9580,9583,9586,9589,9592,9595],{},[27,9572,9573],{},"Open VM settings",[27,9575,9576],{},"Choose Shared Folders",[27,9578,9579],{},"Folder Path: your cloned course repository folder",[27,9581,9582],{},"Folder Name: a simple repo name with no spaces",[27,9584,9585],{},"Mount Point: leave blank",[27,9587,9588],{},"Read-only: off",[27,9590,9591],{},"Auto-mount: on",[27,9593,9594],{},"Make Machine-permanent: on",[27,9596,9597],{},"Make Global: off",[108,9599,9600],{"v-slot:right":110},[40,9601,9602],{},[143,9603],{"alt":9604,"src":9605,"variant":147},"VirtualBox shared folder settings with the course repo selected","\u002Fimages\u002Finternet-applications\u002Fvirtualbox\u002Fvb_shared_folder.png",[14,9607,9609,9613,9616,9619],{"id":9608,"level":17},"step-6-guest-additions",[19,9610,9612],{"id":9611},"step-6-install-shared-folder-support","Step 6: Install Shared Folder Support",[40,9614,9615],{},"Run inside Ubuntu:",[883,9617],{"language":885,"src":9618},"\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F09-local-ubuntu-web-server-virtualbox\u002Fstep-6-install-shared-fo-05.sh",[24,9620,9621,9628,9634],{},[27,9622,2361,9623,2327,9625,9627],{},[265,9624,9514],{},[265,9626,9520],{}," first only if you skipped the Step 4 updates",[27,9629,9630,9633],{},[265,9631,9632],{},"virtualbox-guest-utils",": VirtualBox shared-folder support",[27,9635,9636],{},"Reboot after the group step on the next slide",[14,9638,9640,9644,9647,9650],{"id":9639,"level":98},"step-6b-confirm-vboxsf",[19,9641,9643],{"id":9642},"step-61-check-the-shared-folder","Step 6.1: Check The Shared Folder",[40,9645,9646],{},"Reconnect with SSH, then run inside Ubuntu:",[883,9648],{"language":885,"src":9649},"\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F09-local-ubuntu-web-server-virtualbox\u002Fstep-6-1-check-the-share-06.sh",[24,9651,9652,9658,9664],{},[27,9653,9654,9657],{},[265,9655,9656],{},"ls \u002Fmedia",": shows available mounted folders",[27,9659,9660,9663],{},[265,9661,9662],{},"ls \u002Fmedia\u002F\u003Cshared-folder>",": checks your course repo share",[27,9665,9666],{},"Permission denied is common the first time",[14,9668,9670,9674,9677,9680],{"id":9669,"level":17},"step-7-locate-share",[19,9671,9673],{"id":9672},"step-7-allow-shared-folder-access","Step 7: Allow Shared Folder Access",[40,9675,9676],{},"If the shared folder exists but says permission denied:",[883,9678],{"language":885,"src":9679},"\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F09-local-ubuntu-web-server-virtualbox\u002Fstep-7-allow-shared-fold-07.sh",[24,9681,9682,9688,9694],{},[27,9683,9684,9687],{},[265,9685,9686],{},"vboxsf",": group allowed to read VirtualBox shared folders",[27,9689,9690,9693],{},[265,9691,9692],{},"$USER",": your Ubuntu login user for terminal access",[27,9695,9696],{},"Reboot applies the shared-folder support and new group membership",[14,9698,9700,9704,9706,9709,9726,9729],{"id":9699,"level":98},"step-7b-locate-share",[19,9701,9703],{"id":9702},"step-71-locate-the-shared-repo","Step 7.1: Locate The Shared Repo",[40,9705,9646],{},[883,9707],{"language":885,"src":9708},"\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F09-local-ubuntu-web-server-virtualbox\u002Fstep-7-1-locate-the-shar-08.sh",[24,9710,9711,9717,9723],{},[27,9712,9713,9716],{},[265,9714,9715],{},"\u002Fmedia",": VirtualBox auto-mounted shared folders",[27,9718,9719,9722],{},[265,9720,9721],{},"\u003Cshared-folder>",": your shared course repo folder name",[27,9724,9725],{},"Use the folder that points to your repository",[40,9727,9728],{},"Expected repo folders:",[24,9730,9731,9735,9739,9743],{},[27,9732,9733],{},[265,9734,823],{},[27,9736,9737],{},[265,9738,5531],{},[27,9740,9741],{},[265,9742,5534],{},[27,9744,9745],{},[265,9746,5537],{},[14,9748,9750,9754,9769],{"id":9749,"level":98},"step-7-2-shared-folder-check",[19,9751,9753],{"id":9752},"step-72-shared-folder-check","Step 7.2: Shared Folder Check",[24,9755,9756,9759,9766],{},[27,9757,9758],{},"Edit a small file from VS Code on host",[27,9760,2361,9761,1200,9763,9765],{},[265,9762,812],{},[265,9764,1032],{}," inside Ubuntu",[27,9767,9768],{},"Confirm Ubuntu sees the same file content",[40,9770,9771],{},"If the file does not match, stop and fix the share before Apache setup",[14,9773,9775,9779,9781,9784],{"id":9774,"level":17},"step-8-install-apache-php-mysql",[19,9776,9778],{"id":9777},"step-8-install-apache-php-and-mysql","Step 8: Install Apache, PHP, And MySQL",[40,9780,9615],{},[883,9782],{"language":885,"src":9783},"\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F09-local-ubuntu-web-server-virtualbox\u002Fstep-8-install-apache-ph-09.sh",[24,9785,9786,9792,9797,9803,9809,9815],{},[27,9787,9788,9791],{},[265,9789,9790],{},"apache2",": web server",[27,9793,9794,9796],{},[265,9795,5324],{},": PHP runtime",[27,9798,9799,9802],{},[265,9800,9801],{},"libapache2-mod-php",": lets Apache execute PHP files",[27,9804,9805,9808],{},[265,9806,9807],{},"mysql-server",": local MySQL database server",[27,9810,9811,9814],{},[265,9812,9813],{},"php-mysql",": lets PHP connect to MySQL",[27,9816,2361,9817,2327,9819,9821],{},[265,9818,9514],{},[265,9820,9520],{}," first only if they have not been run recently",[14,9823,9825,9829,9836],{"id":9824,"level":98},"optional-swap-check",[19,9826,9828],{"id":9827},"optional-add-swap-if-swap-is-off","Optional: Add Swap If Swap Is Off",[40,9830,9831,9832,9835],{},"Ubuntu usually has swap already. Only add this if ",[265,9833,9834],{},"swapon --show"," prints nothing.",[103,9837,9838,9852],{"gap":105,"left-width":106,"right-width":106},[108,9839,9840,9843,9846,9849],{"v-slot:left":110},[40,9841,9842],{},"Check first:",[883,9844],{"language":885,"src":9845},"\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F09-local-ubuntu-web-server-virtualbox\u002Foptional-add-swap-if-swa-10.sh",[40,9847,9848],{},"Add a small swap file only if swap is off:",[883,9850],{"language":885,"src":9851},"\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F09-local-ubuntu-web-server-virtualbox\u002Foptional-add-swap-if-swa-11.sh",[108,9853,9854],{"v-slot:right":110},[24,9855,9856,9859,9864,9867],{},[27,9857,9858],{},"Swap gives Ubuntu emergency disk-backed memory",[27,9860,9861,9862],{},"It helps when installs or MySQL briefly need more than ",[265,9863,8457],{},[27,9865,9866],{},"It is slower than RAM, so it is not a performance upgrade",[27,9868,9869],{},"Do not run the setup again if swap already exists",[14,9871,9873,9877,9883],{"id":9872,"level":98},"optional-apache-low-memory",[19,9874,9876],{"id":9875},"optional-limit-apache-memory-use","Optional: Limit Apache Memory Use",[40,9878,9879,9880,9882],{},"Use this if the ",[265,9881,8457],{}," VM feels unstable or Apache starts too many PHP workers.",[103,9884,9885,9898],{"gap":105,"left-width":106,"right-width":106},[108,9886,9887,9890,9895],{"v-slot:left":110},[40,9888,9889],{},"Edit Apache prefork settings in:",[40,9891,9892],{},[265,9893,9894],{},"\u002Fetc\u002Fapache2\u002Fmods-available\u002Fmpm_prefork.conf",[883,9896],{"language":885,"src":9897},"\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F09-local-ubuntu-web-server-virtualbox\u002Foptional-limit-apache-me-12.sh",[108,9899,9900,9903,9907],{"v-slot:right":110},[40,9901,9902],{},"Change the existing values to:",[883,9904],{"language":9905,"src":9906},"apache","\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F09-local-ubuntu-web-server-virtualbox\u002Foptional-limit-apache-me-13.txt",[24,9908,9909,9915,9918,9925],{},[27,9910,9911,9912],{},"Edit the existing lines inside ",[265,9913,9914],{},"\u003CIfModule mpm_prefork_module>",[27,9916,9917],{},"If a line is missing, add it inside that same block",[27,9919,9920,9921,9924],{},"Do not paste a second ",[265,9922,9923],{},"\u003CIfModule>"," block",[27,9926,9927],{},"Restart Apache after config changes",[14,9929,9931,9935,9941],{"id":9930,"level":98},"optional-mysql-low-memory",[19,9932,9934],{"id":9933},"optional-limit-mysql-memory-use","Optional: Limit MySQL Memory Use",[40,9936,9937,9938,9940],{},"Use this only if MySQL struggles on the ",[265,9939,8457],{}," VM.",[103,9942,9943,9956],{"gap":105,"left-width":106,"right-width":106},[108,9944,9945,9948,9953],{"v-slot:left":110},[40,9946,9947],{},"Edit MySQL server settings in:",[40,9949,9950],{},[265,9951,9952],{},"\u002Fetc\u002Fmysql\u002Fmysql.conf.d\u002Fmysqld.cnf",[883,9954],{"language":885,"src":9955},"\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F09-local-ubuntu-web-server-virtualbox\u002Foptional-limit-mysql-mem-14.sh",[108,9957,9958,9964,9967],{"v-slot:right":110},[40,9959,9960,9961,1257],{},"Add or edit these under ",[265,9962,9963],{},"[mysqld]",[883,9965],{"language":6131,"src":9966},"\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F09-local-ubuntu-web-server-virtualbox\u002Foptional-limit-mysql-mem-15.txt",[24,9968,9969,9975,9980,9983],{},[27,9970,9971,9972,9974],{},"Keep these under the existing ",[265,9973,9963],{}," heading",[27,9976,9977,9978,9974],{},"Do not create a second ",[265,9979,9963],{},[27,9981,9982],{},"If either setting already exists, edit it instead of adding a duplicate",[27,9984,9985],{},"Restart MySQL after config changes",[14,9987,9989,9992,9995,9998],{"id":9988,"level":98},"low-memory-diagnostics",[19,9990,9991],{"id":9988},"Low Memory Diagnostics",[40,9993,9994],{},"Run these after the minor tuning checks:",[883,9996],{"language":885,"src":9997},"\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F09-local-ubuntu-web-server-virtualbox\u002Flow-memory-diagnostics-10.sh",[24,9999,10000,10006,10011,10017,10024],{},[27,10001,10002,10005],{},[265,10003,10004],{},"free -h",": shows RAM and swap",[27,10007,10008,10010],{},[265,10009,9834],{},": confirms whether swap is active",[27,10012,10013,10016],{},[265,10014,10015],{},"systemctl status",": checks whether Apache and MySQL are running",[27,10018,10019,10020,10023],{},"No output from the ",[265,10021,10022],{},"grep"," line is usually good",[27,10025,10026],{},"Do not tune randomly; change one setting, restart, then retest",[14,10028,10030,10034,10036,10039,10042,10045],{"id":10029,"level":17},"step-9-create-local-mysql-db",[19,10031,10033],{"id":10032},"step-9-create-a-local-mysql-database","Step 9: Create A Local MySQL Database",[40,10035,9615],{},[883,10037],{"language":885,"src":10038},"\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F09-local-ubuntu-web-server-virtualbox\u002Fstep-9-create-a-local-my-11.sh",[40,10040,10041],{},"Then run in the MySQL prompt:",[883,10043],{"language":5537,"src":10044},"\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F09-local-ubuntu-web-server-virtualbox\u002Fstep-9-create-a-local-my-12.sql",[24,10046,10047,10051,10054],{},[27,10048,9447,10049,9451],{},[265,10050,9450],{},[27,10052,10053],{},"Database name and username should match your UCID",[27,10055,10056],{},"Password is local-only unless your instructor says otherwise",[14,10058,10060,10063,10066,10079,10082,10088],{"id":10059,"level":17},"local-vs-remote-database",[19,10061,10062],{"id":10059},"Local Vs Remote Database",[40,10064,10065],{},"This MySQL database is only for local testing:",[24,10067,10068,10072,10074,10076],{},[27,10069,4798,10070],{},[265,10071,8154],{},[27,10073,4813],{},[27,10075,4810],{},[27,10077,10078],{},"Password: your local password",[40,10080,10081],{},"Render uses the instructor-provided remote database connection string",[40,10083,10084,10085],{},"Get that string from ",[44,10086,4824],{"href":4824,"rel":10087},[48],[40,10089,10090],{},"After this lesson, you may optionally point local code at that remote database for extra testing",[14,10092,10094,10098,10100,10103,10105,10108,10111],{"id":10093,"level":17},"step-10-confirm-local-mysql",[19,10095,10097],{"id":10096},"step-10-confirm-local-mysql-login","Step 10: Confirm Local MySQL Login",[40,10099,9615],{},[883,10101],{"language":885,"src":10102},"\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F09-local-ubuntu-web-server-virtualbox\u002Fstep-10-confirm-local-my-13.sh",[40,10104,4310],{},[883,10106],{"language":5537,"src":10107},"\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F09-local-ubuntu-web-server-virtualbox\u002Fstep-10-confirm-local-my-14.sql",[40,10109,10110],{},"Expected:",[24,10112,10113,10119],{},[27,10114,10115,10118],{},[265,10116,10117],{},"SELECT DATABASE()"," returns your UCID",[27,10120,10121,10124],{},[265,10122,10123],{},"SHOW TABLES"," is empty or shows starter tables later",[14,10126,10128,10134,10137,10140,10143],{"id":10127,"level":17},"step-11-documentroot",[19,10129,10131,10132],{"id":10130},"step-11-point-apache-at-public_html","Step 11: Point Apache At ",[265,10133,823],{},[40,10135,10136],{},"Apache should serve:",[883,10138],{"language":3664,"src":10139},"\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F09-local-ubuntu-web-server-virtualbox\u002Fstep-11-point-apache-at--15.txt",[40,10141,10142],{},"Do not serve the whole repo",[24,10144,10145,10154],{},[27,10146,10147,621,10149,625,10151,10153],{},[265,10148,5531],{},[265,10150,5534],{},[265,10152,5537],{}," stay outside the web root",[27,10155,10156,10158],{},[265,10157,823],{}," is the browser-facing folder",[14,10160,10162,10166,10169,10174,10176,10181,10184,10187],{"id":10161,"level":98},"apache-site-config",[19,10163,10165],{"id":10164},"step-111-apache-site-config","Step 11.1: Apache Site Config",[40,10167,10168],{},"Create or edit this Apache site config file inside Ubuntu:",[40,10170,10171],{},[265,10172,10173],{},"\u002Fetc\u002Fapache2\u002Fsites-available\u002Fit202.conf",[40,10175,881],{},[40,10177,10178],{},[265,10179,10180],{},"sudo nano \u002Fetc\u002Fapache2\u002Fsites-available\u002Fit202.conf",[40,10182,10183],{},"Add this content to that file:",[883,10185],{"language":9905,"src":10186},"\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F09-local-ubuntu-web-server-virtualbox\u002Fstep-11-1-apache-site-co-16.txt",[24,10188,10189,10194,10200,10205],{},[27,10190,9447,10191,10193],{},[265,10192,9721],{}," with the actual shared folder name",[27,10195,10196,10197],{},"Save the file as ",[265,10198,10199],{},"it202.conf",[27,10201,10202,10203],{},"Apache listens on guest port ",[265,10204,7936],{},[27,10206,10207,10208],{},"Host browser reaches it through ",[265,10209,8012],{},[14,10211,10213,10217,10219,10222],{"id":10212,"level":98},"enable-site",[19,10214,10216],{"id":10215},"step-112-enable-the-site","Step 11.2: Enable The Site",[40,10218,9615],{},[883,10220],{"language":885,"src":10221},"\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F09-local-ubuntu-web-server-virtualbox\u002Fstep-11-2-enable-the-sit-17.sh",[24,10223,10224,10230,10236,10242,10250,10256],{},[27,10225,10226,10229],{},[265,10227,10228],{},"a2ensite",": enable a site config",[27,10231,10232,10235],{},[265,10233,10234],{},"a2dissite",": disable a site config",[27,10237,10238,10241],{},[265,10239,10240],{},"www-data",": Apache's user for browser requests",[27,10243,10244,10245,6284,10247,10249],{},"Adding ",[265,10246,10240],{},[265,10248,9686],{}," lets Apache read the shared folder",[27,10251,10252,10255],{},[265,10253,10254],{},"configtest",": check syntax before reload",[27,10257,10258,10261],{},[265,10259,10260],{},"restart",": applies the Apache user group change",[14,10263,10265,10269,10272,10275,10278],{"id":10264,"level":17},"step-12-php-check-page",[19,10266,10268],{"id":10267},"step-12-create-a-php-check-page","Step 12: Create A PHP Check Page",[40,10270,10271],{},"Create this file on the host:",[883,10273],{"language":3664,"src":10274},"\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F09-local-ubuntu-web-server-virtualbox\u002Fstep-12-create-a-php-che-18.txt",[40,10276,10277],{},"Example content:",[883,10279],{"language":5324,"src":10280},"\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F09-local-ubuntu-web-server-virtualbox\u002Fstep-12-create-a-php-che-19.php",[14,10282,10284,10287,10290,10293,10295],{"id":10283,"level":17},"final-browser-check",[19,10285,10286],{"id":10283},"Final Browser Check",[40,10288,10289],{},"Open from host browser:",[883,10291],{"language":3664,"src":10292},"\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F09-local-ubuntu-web-server-virtualbox\u002Ffinal-browser-check-20.txt",[40,10294,10110],{},[24,10296,10297,10300,10303,10306],{},[27,10298,10299],{},"Message appears",[27,10301,10302],{},"Time appears",[27,10304,10305],{},"PHP code is not shown as raw text",[27,10307,10308],{},"Editing the file on host changes output after refresh",[14,10310,10312,10315],{"id":10311,"level":17},"common-problems",[19,10313,10314],{"id":10311},"Common Problems",[24,10316,10317,10320,10323,10328,10331,10344,10354],{},[27,10318,10319],{},"Browser timeout: missing or wrong port-forwarding rule",[27,10321,10322],{},"Connection refused: Apache not running",[27,10324,10325,10326],{},"No internet in VM: check Adapter 1 is still ",[265,10327,9331],{},[27,10329,10330],{},"Shared folder missing: check Auto-mount and guest utilities",[27,10332,10333,10334,10337,10338,10340,10341,10343],{},"Browser shows ",[265,10335,10336],{},"403 Forbidden",": confirm ",[265,10339,10240],{}," is in ",[265,10342,9686],{},", then restart Apache or reboot",[27,10345,10346,10347,10350,10351,10353],{},"Permission denied on ",[265,10348,10349],{},"\u002Fmedia\u002Fsf_...",": confirm your Ubuntu user is in ",[265,10352,9686],{}," and reboot",[27,10355,10356],{},"Raw PHP code: PHP module not running through Apache",[14,10358,10360,10363,10366],{"id":10359,"level":17},"recovery-routine",[19,10361,10362],{"id":10359},"Recovery Routine",[40,10364,10365],{},"Check in this order:",[162,10367,10368,10371,10377,10383,10388,10396,10403,10409,10414,10423],{},[27,10369,10370],{},"VM is running",[27,10372,10373,10376],{},[265,10374,10375],{},"ping github.com"," works inside Ubuntu",[27,10378,10379,10382],{},[265,10380,10381],{},"ssh username@localhost"," works from host",[27,10384,10385,10387],{},[265,10386,9662],{}," shows the shared repo",[27,10389,10390,10393,10394],{},[265,10391,10392],{},"groups"," includes ",[265,10395,9686],{},[27,10397,10398,10393,10401],{},[265,10399,10400],{},"id www-data",[265,10402,9686],{},[27,10404,10405,10408],{},[265,10406,10407],{},"sudo systemctl status apache2"," is active",[27,10410,10411,10408],{},[265,10412,10413],{},"sudo systemctl status mysql",[27,10415,10416,10419,10420],{},[265,10417,10418],{},"sudo apache2ctl configtest"," says ",[265,10421,10422],{},"Syntax OK",[27,10424,10425,10428],{},[265,10426,10427],{},"http:\u002F\u002Flocalhost:3000\u002Fsystem\u002Fvm-check.php"," loads from the host browser",[14,10430,10431,10433],{"id":1454,"level":17},[19,10432,1455],{"id":1454},[103,10434,10435,10476],{"gap":105,"left-width":106,"right-width":106},[108,10436,10437,10439,10445,10454,10459,10465,10471],{"v-slot:left":110},[364,10438,1463],{"id":1462},[40,10440,10441,10444],{},[125,10442,10443],{},"VM"," - separate computer running inside your host computer",[40,10446,10447,10450,10451,10453],{},[125,10448,10449],{},"Port forwarding"," - host ",[265,10452,8154],{}," traffic routed into the VM",[40,10455,10456,10458],{},[125,10457,9686],{}," - VirtualBox shared-folder permission group",[40,10460,10461,10464],{},[125,10462,10463],{},"Guest utilities"," - VirtualBox tools that help shared folders work inside Ubuntu",[40,10466,10467,10470],{},[125,10468,10469],{},"DocumentRoot"," - folder Apache serves to browsers",[40,10472,10473,10475],{},[125,10474,9331],{}," - VM network mode that gives the VM outbound internet access",[108,10477,10478,10480],{"v-slot:right":110},[364,10479,1494],{"id":1451},[24,10481,10482,10488,10495,10502,10509,10516,10522],{},[27,10483,10484],{},[44,10485,10487],{"href":8078,"rel":10486},[48],"VirtualBox Downloads",[27,10489,10490],{},[44,10491,10494],{"href":10492,"rel":10493},"https:\u002F\u002Fdocs.oracle.com\u002Fen\u002Fvirtualization\u002Fvirtualbox\u002F7.2\u002Fuser\u002FIntroduction.html",[48],"VirtualBox Manual: Host And Guest Combinations",[27,10496,10497],{},[44,10498,10501],{"href":10499,"rel":10500},"https:\u002F\u002Fdocs.oracle.com\u002Fen\u002Fvirtualization\u002Fvirtualbox\u002F7.2\u002Fuser\u002Finstallation.html",[48],"VirtualBox Manual: Installation",[27,10503,10504],{},[44,10505,10508],{"href":10506,"rel":10507},"https:\u002F\u002Fdocs.oracle.com\u002Fen\u002Fvirtualization\u002Fvirtualbox\u002F7.2\u002Fuser\u002Fsharedfolders.html",[48],"VirtualBox Manual: Shared Folders",[27,10510,10511],{},[44,10512,10515],{"href":10513,"rel":10514},"https:\u002F\u002Fdocs.oracle.com\u002Fen\u002Fvirtualization\u002Fvirtualbox\u002F7.2\u002Fuser\u002Fnetworkingdetails.html#network_nat_service",[48],"VirtualBox Manual: NAT Port Forwarding",[27,10517,10518],{},[44,10519,10521],{"href":8096,"rel":10520},[48],"Ubuntu Server: Installer",[27,10523,10524],{},[44,10525,10528],{"href":10526,"rel":10527},"https:\u002F\u002Fdocumentation.ubuntu.com\u002Fserver\u002Fhow-to\u002Fsecurity\u002Fopenssh-server\u002F",[48],"Ubuntu Server: OpenSSH Server",[14,10530,10531,10533,10535],{"id":465,"level":17},[19,10532,468],{"id":465},[40,10534,1524],{},[24,10536,10537,10540,10543,10546,10549,10554],{},[27,10538,10539],{},"Pick the correct Ubuntu ISO for your host CPU",[27,10541,10542],{},"Configure NAT port forwarding",[27,10544,10545],{},"Connect to Ubuntu with SSH",[27,10547,10548],{},"Find the VirtualBox shared repo",[27,10550,10551,10552],{},"Configure Apache to serve ",[265,10553,823],{},[27,10555,10556],{},"Create a local MySQL database and user named after your UCID",{"title":110,"searchDepth":492,"depth":492,"links":10558},[10559,10560,10561,10562,10563,10564,10565,10566,10567,10568,10569,10570,10571,10572,10573,10574,10575,10576,10577,10578,10579,10580,10581,10582,10583,10584,10585,10586,10587,10588,10589,10590,10591,10592,10593,10594,10595,10596,10597,10598,10599,10600,10601,10602,10603,10604,10605,10606,10607,10608,10609,10610,10611,10612,10613,10614,10615,10617,10618,10619,10620,10621,10622,10623,10624],{"id":7958,"depth":492,"text":7950},{"id":7984,"depth":492,"text":7987},{"id":8029,"depth":492,"text":8032},{"id":637,"depth":492,"text":640},{"id":8134,"depth":492,"text":8137},{"id":8169,"depth":492,"text":8170},{"id":8193,"depth":492,"text":8196},{"id":8225,"depth":492,"text":8228},{"id":8251,"depth":492,"text":8254},{"id":8280,"depth":492,"text":8283},{"id":8312,"depth":492,"text":8313},{"id":8336,"depth":492,"text":8339},{"id":8367,"depth":492,"text":8370},{"id":8398,"depth":492,"text":8399},{"id":8434,"depth":492,"text":8435},{"id":8496,"depth":492,"text":8499},{"id":8531,"depth":492,"text":8534},{"id":8577,"depth":492,"text":8580},{"id":8620,"depth":492,"text":8623},{"id":8664,"depth":492,"text":8667},{"id":8714,"depth":492,"text":8715},{"id":8777,"depth":492,"text":8778},{"id":8813,"depth":492,"text":8814},{"id":8848,"depth":492,"text":8849},{"id":8885,"depth":492,"text":8886},{"id":8918,"depth":492,"text":8919},{"id":8955,"depth":492,"text":8956},{"id":8988,"depth":492,"text":8989},{"id":9018,"depth":492,"text":9019},{"id":9048,"depth":492,"text":9049},{"id":9078,"depth":492,"text":9079},{"id":9108,"depth":492,"text":9109},{"id":9138,"depth":492,"text":9139},{"id":9172,"depth":492,"text":9173},{"id":9204,"depth":492,"text":9205},{"id":9236,"depth":492,"text":9237},{"id":9268,"depth":492,"text":9269},{"id":9319,"depth":492,"text":9320},{"id":9362,"depth":492,"text":9363},{"id":9388,"depth":492,"text":9389},{"id":9429,"depth":492,"text":9430},{"id":9481,"depth":492,"text":9482},{"id":9560,"depth":492,"text":9561},{"id":9611,"depth":492,"text":9612},{"id":9642,"depth":492,"text":9643},{"id":9672,"depth":492,"text":9673},{"id":9702,"depth":492,"text":9703},{"id":9752,"depth":492,"text":9753},{"id":9777,"depth":492,"text":9778},{"id":9827,"depth":492,"text":9828},{"id":9875,"depth":492,"text":9876},{"id":9933,"depth":492,"text":9934},{"id":9988,"depth":492,"text":9991},{"id":10032,"depth":492,"text":10033},{"id":10059,"depth":492,"text":10062},{"id":10096,"depth":492,"text":10097},{"id":10130,"depth":492,"text":10616},"Step 11: Point Apache At public_html",{"id":10164,"depth":492,"text":10165},{"id":10215,"depth":492,"text":10216},{"id":10267,"depth":492,"text":10268},{"id":10283,"depth":492,"text":10286},{"id":10311,"depth":492,"text":10314},{"id":10359,"depth":492,"text":10362},{"id":1454,"depth":492,"text":1455},{"id":465,"depth":492,"text":468},"Build the local Ubuntu VM path with VirtualBox, Apache, PHP, MySQL, SSH, and shared folders.","Face-to-face class of about 40 students; includes VirtualBox install differences, CPU\u002FISO selection, networking, SSH, shared folders, Apache\u002FPHP\u002FMySQL, browser checks, and beginner troubleshooting.","25","95","120",{},"\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F09-local-ubuntu-web-server-virtualbox",{"title":7950,"description":10625},"internet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F09-local-ubuntu-web-server-virtualbox",[10635,10636,9905,10637,10638],"virtualbox","ubuntu","mysql","vm","1:06:16","ArTDIgihfd4","https:\u002F\u002Fyoutu.be\u002FArTDIgihfd4","IT202 VirtualBox and VM Setup","CNlzYvIiYNPSzbQ6tvCdcnJLlvvGSGmurOGWR_mSnms",[10645,10989,11747,12407,13185,13840,14403,15176,15739,16363],{"id":7,"title":8,"audience":9,"body":10646,"contentType":508,"course":509,"description":510,"estimateBasis":511,"estimatedDiscussionMinutes":512,"estimatedLiveMinutes":513,"estimatedTotalMinutes":514,"extension":515,"meta":10986,"module":517,"navigation":518,"order":519,"path":520,"promptAssist":521,"seo":10987,"status":523,"stem":524,"tags":10988,"videoDuration":530,"videoId":531,"videoLink":532,"videoTitle":533,"week":517,"__hash__":534},{"type":11,"value":10647,"toc":10971},[10648,10670,10699,10732,10766,10800,10823,10867,10895,10931,10951],[14,10649,10650,10652,10662],{"id":16,"level":17},[19,10651,22],{"id":21},[24,10653,10654,10656,10658,10660],{},[27,10655,29],{},[27,10657,32],{},[27,10659,35],{},[27,10661,38],{},[40,10663,42,10664,49,10667,54],{},[44,10665,46],{"href":46,"rel":10666},[48],[44,10668,52],{"href":52,"rel":10669},[48],[14,10671,10672,10674,10676,10697],{"id":57,"level":17},[19,10673,8],{"id":60},[40,10675,63],{},[24,10677,10678,10683,10689,10691,10693,10695],{},[27,10679,68,10680],{},[44,10681,52],{"href":52,"rel":10682},[48],[27,10684,74,10685],{},[24,10686,10687],{},[27,10688,79],{},[27,10690,82],{},[27,10692,85],{},[27,10694,88],{},[27,10696,91],{},[40,10698,94],{},[14,10700,10701,10703],{"id":97,"level":98},[19,10702,101],{"id":97},[103,10704,10705,10726],{"gap":105,"left-width":106,"right-width":106},[108,10706,10707,10709,10714],{"v-slot:left":110},[40,10708,113],{},[40,10710,10711],{},[44,10712,52],{"href":52,"rel":10713},[48],[24,10715,10716,10720,10722,10724],{},[27,10717,123,10718,128],{},[125,10719,127],{},[27,10721,131],{},[27,10723,134],{},[27,10725,137],{},[108,10727,10728],{"v-slot:right":110},[40,10729,10730],{},[143,10731],{"alt":145,"src":146,"variant":147},[14,10733,10734,10736],{"id":150,"level":98},[19,10735,153],{"id":150},[103,10737,10738,10756],{"gap":105,"left-width":106,"right-width":106},[108,10739,10740,10742,10754],{"v-slot:left":110},[40,10741,160],{},[162,10743,10744,10746,10750,10752],{},[27,10745,166],{},[27,10747,169,10748],{},[125,10749,172],{},[27,10751,175],{},[27,10753,178],{},[40,10755,181],{},[108,10757,10758,10762],{"v-slot:right":110},[40,10759,10760],{},[143,10761],{"alt":188,"src":189,"variant":147,"max-height":190},[40,10763,10764],{},[143,10765],{"alt":195,"src":196,"variant":147,"max-height":197},[14,10767,10768,10770],{"id":200,"level":98},[19,10769,203],{"id":200},[103,10771,10772,10790],{"gap":105,"left-width":106,"right-width":106},[108,10773,10774,10776],{"v-slot:left":110},[40,10775,210],{},[24,10777,10778,10780,10784,10786,10788],{},[27,10779,215],{},[27,10781,169,10782],{},[125,10783,220],{},[27,10785,223],{},[27,10787,226],{},[27,10789,229],{},[108,10791,10792,10796],{"v-slot:right":110},[40,10793,10794],{},[143,10795],{"alt":236,"src":237,"variant":147,"max-height":238},[40,10797,10798],{},[143,10799],{"alt":243,"src":244,"variant":147,"max-height":245},[14,10801,10802,10804,10806,10811,10815],{"id":248,"level":98},[19,10803,251],{"id":248},[40,10805,254],{},[40,10807,10808],{},[44,10809,259],{"href":259,"rel":10810},[48],[40,10812,263,10813,268],{},[265,10814,267],{},[24,10816,10817,10819,10821],{},[27,10818,273],{},[27,10820,276],{},[27,10822,279],{},[14,10824,10825,10827],{"id":282,"level":17},[19,10826,285],{"id":282},[103,10828,10829,10861],{"gap":105,"left-width":106,"right-width":106},[108,10830,10831,10839,10843,10847,10849,10859],{"v-slot:left":110},[24,10832,10833,10835],{},[27,10834,294],{},[27,10836,297,10837,301],{},[265,10838,300],{},[40,10840,304,10841,307],{},[265,10842,267],{},[40,10844,10845],{},[265,10846,312],{},[40,10848,315],{},[24,10850,10851,10853,10855,10857],{},[27,10852,320],{},[27,10854,323],{},[27,10856,326],{},[27,10858,329],{},[40,10860,332],{},[108,10862,10863],{"v-slot:right":110},[40,10864,10865],{},[143,10866],{"alt":339,"src":340,"variant":147,"max-height":341},[14,10868,10869,10871,10873,10881,10883],{"id":344,"level":17},[19,10870,348],{"id":347},[40,10872,351],{},[24,10874,10875,10877,10879],{},[27,10876,356],{},[27,10878,359],{},[27,10880,362],{},[364,10882,367],{"id":366},[24,10884,10885,10887],{},[27,10886,372],{},[27,10888,375,10889,10891],{},[265,10890,378],{},[24,10892,10893],{},[27,10894,383],{},[14,10896,10897,10899],{"id":386,"level":17},[19,10898,389],{"id":386},[24,10900,10901,10903,10905,10913,10915,10921,10927,10929],{},[27,10902,394],{},[27,10904,397],{},[27,10906,400,10907],{},[24,10908,10909,10911],{},[27,10910,405],{},[27,10912,408],{},[27,10914,411],{},[27,10916,414,10917],{},[24,10918,10919],{},[27,10920,419],{},[27,10922,422,10923],{},[24,10924,10925],{},[27,10926,427],{},[27,10928,430],{},[27,10930,433],{},[14,10932,10933,10935,10937],{"id":436,"level":17},[19,10934,439],{"id":436},[40,10936,442],{},[24,10938,10939,10941,10943,10945,10947,10949],{},[27,10940,447],{},[27,10942,450],{},[27,10944,453],{},[27,10946,456],{},[27,10948,459],{},[27,10950,462],{},[14,10952,10953,10955],{"id":465,"level":17},[19,10954,468],{"id":465},[24,10956,10957,10959,10965,10967,10969],{},[27,10958,473],{},[27,10960,476,10961],{},[24,10962,10963],{},[27,10964,481],{},[27,10966,484],{},[27,10968,487],{},[27,10970,490],{},{"title":110,"searchDepth":492,"depth":492,"links":10972},[10973,10974,10975,10976,10977,10978,10979,10980,10983,10984,10985],{"id":21,"depth":492,"text":22},{"id":60,"depth":492,"text":8},{"id":97,"depth":492,"text":101},{"id":150,"depth":492,"text":153},{"id":200,"depth":492,"text":203},{"id":248,"depth":492,"text":251},{"id":282,"depth":492,"text":285},{"id":347,"depth":492,"text":348,"children":10981},[10982],{"id":366,"depth":504,"text":367},{"id":386,"depth":492,"text":389},{"id":436,"depth":492,"text":439},{"id":465,"depth":492,"text":468},{},{"title":8,"description":510},[526,527,528,529],{"id":536,"title":537,"audience":9,"body":10990,"contentType":508,"course":509,"description":1599,"estimateBasis":1600,"estimatedDiscussionMinutes":512,"estimatedLiveMinutes":1601,"estimatedTotalMinutes":1602,"extension":515,"meta":11744,"module":517,"navigation":518,"order":512,"path":1604,"promptAssist":521,"seo":11745,"status":523,"stem":1606,"tags":11746,"videoDuration":1611,"videoId":1612,"videoLink":1613,"videoTitle":537,"week":517,"__hash__":1614},{"type":11,"value":10991,"toc":11713},[10992,11034,11058,11080,11124,11170,11206,11224,11236,11264,11282,11296,11320,11334,11386,11402,11432,11474,11514,11534,11548,11568,11596,11616,11624,11673],[14,10993,10994,10996],{"id":542,"level":17},[19,10995,546],{"id":545},[24,10997,10998,11004,11010,11020,11026],{},[27,10999,551,11000],{},[24,11001,11002],{},[27,11003,556],{},[27,11005,559,11006],{},[24,11007,11008],{},[27,11009,564],{},[27,11011,567,11012],{},[24,11013,11014,11016,11018],{},[27,11015,572],{},[27,11017,575],{},[27,11019,578],{},[27,11021,581,11022],{},[24,11023,11024],{},[27,11025,586],{},[27,11027,589,11028],{},[24,11029,11030,11032],{},[27,11031,594],{},[27,11033,597],{},[14,11035,11036,11038,11040],{"id":600,"level":17},[19,11037,603],{"id":600},[40,11039,606],{},[24,11041,11042,11044,11046,11054,11056],{},[27,11043,611],{},[27,11045,614],{},[27,11047,617,11048,621,11050,625,11052],{},[265,11049,620],{},[265,11051,624],{},[265,11053,628],{},[27,11055,631],{},[27,11057,634],{},[14,11059,11060,11062,11064,11078],{"id":637,"level":17},[19,11061,640],{"id":637},[40,11063,643],{},[24,11065,11066,11074,11076],{},[27,11067,648,11068],{},[24,11069,11070],{},[27,11071,653,11072],{},[44,11073,657],{"href":656},[27,11075,660],{},[27,11077,663],{},[40,11079,666],{},[14,11081,11082,11084],{"id":669,"level":17},[19,11083,673],{"id":672},[24,11085,11086,11094,11102,11118],{},[27,11087,678,11088],{},[24,11089,11090],{},[27,11091,683,11092],{},[125,11093,686],{},[27,11095,11096,692,11098],{},[265,11097,691],{},[24,11099,11100],{},[27,11101,697],{},[27,11103,700,11104],{},[24,11105,11106,11110,11114],{},[27,11107,705,11108],{},[265,11109,708],{},[27,11111,711,11112],{},[265,11113,714],{},[27,11115,717,11116],{},[265,11117,720],{},[27,11119,723,11120],{},[24,11121,11122],{},[27,11123,728],{},[14,11125,11126,11128,11130,11166],{"id":731,"level":17},[19,11127,734],{"id":731},[40,11129,737],{},[24,11131,11132,11136,11140,11144,11162],{},[27,11133,742,11134],{},[265,11135,745],{},[27,11137,748,11138],{},[265,11139,751],{},[27,11141,11142,757],{},[265,11143,756],{},[27,11145,11146,763,11148],{},[265,11147,762],{},[24,11149,11150,11154,11158],{},[27,11151,11152,771],{},[265,11153,770],{},[27,11155,774,11156],{},[265,11157,777],{},[27,11159,11160,783],{},[265,11161,782],{},[27,11163,11164,789],{},[265,11165,788],{},[40,11167,792,11168,795],{},[265,11169,691],{},[14,11171,11172,11174,11176,11190,11192],{"id":798,"level":17},[19,11173,801],{"id":798},[40,11175,804],{},[24,11177,11178,11182,11186],{},[27,11179,809,11180],{},[265,11181,812],{},[27,11183,815,11184],{},[265,11185,620],{},[27,11187,820,11188],{},[265,11189,823],{},[40,11191,826],{},[24,11193,11194,11198,11202],{},[27,11195,11196,834],{},[265,11197,833],{},[27,11199,11200,840],{},[265,11201,839],{},[27,11203,11204,846],{},[265,11205,845],{},[14,11207,11208,11210,11212,11220],{"id":849,"level":17},[19,11209,853],{"id":852},[40,11211,856],{},[162,11213,11214,11216,11218],{},[27,11215,861],{},[27,11217,864],{},[27,11219,867],{},[24,11221,11222],{},[27,11223,872],{},[14,11225,11226,11228,11230,11232,11234],{"id":875,"level":98},[19,11227,878],{"id":875},[40,11229,881],{},[883,11231],{"language":885,"src":886},[40,11233,889],{},[40,11235,892],{},[14,11237,11238,11240,11242,11244,11246,11248,11250],{"id":895,"level":98},[19,11239,898],{"id":895},[40,11241,881],{},[883,11243],{"language":885,"src":903},[40,11245,906],{},[40,11247,909],{},[883,11249],{"language":885,"src":912},[24,11251,11252,11256,11260],{},[27,11253,11254,919],{},[265,11255,620],{},[27,11257,11258,924],{},[265,11259,628],{},[27,11261,11262,930],{},[265,11263,929],{},[14,11265,11266,11268,11270,11272,11276,11280],{"id":933,"level":98},[19,11267,936],{"id":933},[40,11269,939],{},[883,11271],{"language":885,"src":942},[40,11273,945,11274,949],{},[265,11275,948],{},[40,11277,952,11278,955],{},[265,11279,812],{},[40,11281,958],{},[14,11283,11284,11286,11288,11290],{"id":961,"level":98},[19,11285,965],{"id":964},[40,11287,881],{},[883,11289],{"language":885,"src":970},[40,11291,973,11292,976,11294],{},[265,11293,691],{},[265,11295,979],{},[14,11297,11298,11300,11302,11304,11306],{"id":982,"level":98},[19,11299,986],{"id":985},[40,11301,881],{},[883,11303],{"language":885,"src":991},[40,11305,994],{},[24,11307,11308,11312,11316],{},[27,11309,11310,1002],{},[265,11311,1001],{},[27,11313,11314,1008],{},[265,11315,1007],{},[27,11317,11318,1014],{},[265,11319,1013],{},[14,11321,11322,11324,11326,11328,11332],{"id":1017,"level":98},[364,11323,1021],{"id":1020},[40,11325,1024],{},[883,11327],{"language":885,"src":1027},[40,11329,11330,1033],{},[265,11331,1032],{},[40,11333,1036],{},[14,11335,11336,11338,11340,11348,11350,11368,11370],{"id":1039,"level":17},[19,11337,1043],{"id":1042},[40,11339,856],{},[162,11341,11342,11344,11346],{},[27,11343,861],{},[27,11345,864],{},[27,11347,1054],{},[40,11349,1057],{},[24,11351,11352,11356,11360,11364],{},[27,11353,11354,1065],{},[265,11355,1064],{},[27,11357,11358,1071],{},[265,11359,1070],{},[27,11361,11362,1077],{},[265,11363,1076],{},[27,11365,11366,1083],{},[265,11367,1082],{},[40,11369,1086],{},[24,11371,11372,11376,11380,11384],{},[27,11373,11374,1094],{},[265,11375,1093],{},[27,11377,11378,1100],{},[265,11379,1099],{},[27,11381,11382,1106],{},[265,11383,1105],{},[27,11385,872],{},[14,11387,11388,11390,11392,11394,11398],{"id":1111,"level":98},[19,11389,1115],{"id":1114},[40,11391,881],{},[883,11393],{"language":885,"src":1120},[40,11395,11396,1125],{},[265,11397,1064],{},[40,11399,973,11400,1131],{},[265,11401,1130],{},[14,11403,11404,11406,11408,11410,11412,11416,11426],{"id":1134,"level":98},[19,11405,1138],{"id":1137},[40,11407,881],{},[883,11409],{"language":885,"src":1143},[40,11411,1146],{},[40,11413,1149,11414,1152],{},[265,11415,1082],{},[24,11417,11418,11422],{},[27,11419,11420,1159],{},[265,11421,624],{},[27,11423,11424,1165],{},[265,11425,1164],{},[1167,11427,11428],{"color":1169},[40,11429,1172,11430,1176],{},[265,11431,1175],{},[14,11433,11434,11436,11438,11450,11454,11458,11470],{"id":1179,"level":17},[19,11435,1183],{"id":1182},[40,11437,1186],{},[24,11439,11440,11444],{},[27,11441,11442,1194],{},[265,11443,1193],{},[27,11445,11446,1200,11448,1204],{},[265,11447,1199],{},[265,11449,1203],{},[40,11451,1149,11452,1209],{},[265,11453,1193],{},[40,11455,1149,11456,1214],{},[265,11457,845],{},[40,11459,1217,11460,1200,11462,1222,11464,1226,11466,1230,11468,1234],{},[265,11461,1199],{},[265,11463,1203],{},[265,11465,1225],{},[265,11467,1229],{},[265,11469,1233],{},[24,11471,11472],{},[27,11473,1239],{},[14,11475,11476,11480,11482,11484,11488,11504],{"id":1242,"level":98},[19,11477,1245,11478],{"id":1242},[265,11479,1193],{},[40,11481,881],{},[883,11483],{"language":885,"src":1252},[40,11485,304,11486,1257],{},[265,11487,1193],{},[24,11489,11490,11492,11496,11500],{},[27,11491,1262],{},[27,11493,1265,11494,1269],{},[265,11495,1268],{},[27,11497,1265,11498],{},[265,11499,1233],{},[27,11501,1265,11502,1279],{},[265,11503,1278],{},[40,11505,1282,11506,1285,11508,1226,11510,1230,11512],{},[265,11507,1199],{},[265,11509,1225],{},[265,11511,1229],{},[265,11513,1233],{},[14,11515,11516,11520,11524,11526,11528,11530],{"id":1294,"level":17},[19,11517,11518,1300],{"id":1294},[265,11519,1299],{},[40,11521,11522,1305],{},[265,11523,1299],{},[40,11525,1308],{},[40,11527,1311],{},[883,11529],{"language":885,"src":1314},[24,11531,11532],{},[27,11533,1319],{},[14,11535,11536,11540,11544],{"id":1322,"level":98},[364,11537,11538,1327],{"id":1322},[265,11539,1299],{},[40,11541,1330,11542,1333],{},[265,11543,1299],{},[40,11545,1336,11546,1339],{},[265,11547,1299],{},[14,11549,11550,11552,11554,11562],{"id":1342,"level":17},[19,11551,1345],{"id":1342},[40,11553,1348],{},[24,11555,11556,11558,11560],{},[27,11557,1353],{},[27,11559,1356],{},[27,11561,1359],{},[40,11563,1362,11564,1365,11566],{},[265,11565,691],{},[265,11567,1368],{},[14,11569,11570,11572],{"id":1371,"level":17},[19,11571,1374],{"id":1371},[24,11573,11574,11584,11588,11594],{},[27,11575,11576,1382,11578,1385,11580,1388,11582,1392],{},[265,11577,1381],{},[265,11579,691],{},[265,11581,812],{},[265,11583,1391],{},[27,11585,1395,11586,1398],{},[265,11587,691],{},[27,11589,11590,1403,11592,1406],{},[265,11591,1032],{},[265,11593,1368],{},[27,11595,1319],{},[14,11597,11598,11600],{"id":1411,"level":98},[364,11599,1415],{"id":1414},[24,11601,11602,11604,11608,11612],{},[27,11603,1420],{},[27,11605,1423,11606],{},[265,11607,1426],{},[27,11609,1429,11610],{},[265,11611,1432],{},[27,11613,1435,11614,1438],{},[265,11615,1082],{},[14,11617,11618,11620,11622],{"id":436,"level":17},[19,11619,439],{"id":436},[40,11621,1445],{},[883,11623],{"language":885,"src":1448},[14,11625,11626,11628],{"id":1451,"level":17},[19,11627,1455],{"id":1454},[103,11629,11630,11652],{"gap":105,"left-width":106,"right-width":106},[108,11631,11632,11634,11638,11644],{"v-slot:left":110},[364,11633,1463],{"id":1462},[40,11635,11636,1469],{},[125,11637,1468],{},[40,11639,11640,1475,11642],{},[125,11641,1474],{},[265,11643,1478],{},[40,11645,11646,1484,11648,1487,11650],{},[125,11647,1483],{},[265,11649,929],{},[265,11651,1368],{},[108,11653,11654,11656],{"v-slot:right":110},[364,11655,1494],{"id":1451},[24,11657,11658,11663,11668],{},[27,11659,11660],{},[44,11661,1503],{"href":1501,"rel":11662},[48],[27,11664,11665],{},[44,11666,1510],{"href":1508,"rel":11667},[48],[27,11669,11670],{},[44,11671,1517],{"href":1515,"rel":11672},[48],[14,11674,11675,11677,11679],{"id":465,"level":17},[19,11676,468],{"id":465},[40,11678,1524],{},[24,11680,11681,11685,11689,11699,11711],{},[27,11682,1149,11683,1531],{},[265,11684,691],{},[27,11686,1149,11687,1536],{},[265,11688,1368],{},[27,11690,1149,11691,621,11693,621,11695,625,11697,1547],{},[265,11692,1391],{},[265,11694,756],{},[265,11696,762],{},[265,11698,788],{},[27,11700,1550,11701,621,11703,621,11705,621,11707,625,11709,1561],{},[265,11702,1064],{},[265,11704,1070],{},[265,11706,1076],{},[265,11708,1082],{},[265,11710,1193],{},[27,11712,1564],{},{"title":110,"searchDepth":492,"depth":492,"links":11714},[11715,11716,11717,11718,11719,11720,11721,11722,11723,11724,11725,11726,11729,11730,11731,11732,11733,11734,11737,11738,11741,11742,11743],{"id":545,"depth":492,"text":546},{"id":600,"depth":492,"text":603},{"id":637,"depth":492,"text":640},{"id":672,"depth":492,"text":673},{"id":731,"depth":492,"text":734},{"id":798,"depth":492,"text":801},{"id":852,"depth":492,"text":853},{"id":875,"depth":492,"text":878},{"id":895,"depth":492,"text":898},{"id":933,"depth":492,"text":936},{"id":964,"depth":492,"text":965},{"id":985,"depth":492,"text":986,"children":11727},[11728],{"id":1020,"depth":504,"text":1021},{"id":1042,"depth":492,"text":1043},{"id":1114,"depth":492,"text":1115},{"id":1137,"depth":492,"text":1138},{"id":1182,"depth":492,"text":1183},{"id":1242,"depth":492,"text":1586},{"id":1294,"depth":492,"text":1588,"children":11735},[11736],{"id":1322,"depth":504,"text":1591},{"id":1342,"depth":492,"text":1345},{"id":1371,"depth":492,"text":1374,"children":11739},[11740],{"id":1414,"depth":504,"text":1415},{"id":436,"depth":492,"text":439},{"id":1454,"depth":492,"text":1455},{"id":465,"depth":492,"text":468},{},{"title":537,"description":1599},[1608,1609,1610],{"id":1616,"title":1617,"audience":9,"body":11748,"contentType":508,"course":509,"description":2492,"estimateBasis":2493,"estimatedDiscussionMinutes":512,"estimatedLiveMinutes":2494,"estimatedTotalMinutes":1601,"extension":515,"meta":12404,"module":517,"navigation":518,"order":513,"path":2496,"promptAssist":521,"seo":12405,"status":523,"stem":2498,"tags":12406,"videoDuration":2500,"videoId":2501,"videoLink":2502,"videoTitle":1617,"week":517,"__hash__":2503},{"type":11,"value":11749,"toc":12374},[11750,11768,11788,11807,11833,11857,11881,11907,11929,11951,11977,11979,12001,12023,12045,12083,12095,12107,12121,12138,12160,12172,12200,12234,12302,12350],[14,11751,11752,11754],{"id":600,"level":17},[19,11753,603],{"id":600},[24,11755,11756,11758,11760],{},[27,11757,1628],{},[27,11759,1631],{},[27,11761,1634,11762,621,11764,625,11766,1642],{},[265,11763,1637],{},[265,11765,691],{},[265,11767,1368],{},[14,11769,11770,11772],{"id":1645,"level":17},[19,11771,1649],{"id":1648},[24,11773,11774,11776,11778,11780,11782,11784,11786],{},[27,11775,1654],{},[27,11777,1657],{},[27,11779,1660],{},[27,11781,648],{},[27,11783,1665],{},[27,11785,1668],{},[27,11787,1671],{},[14,11789,11790,11792,11805],{"id":1674,"level":17},[19,11791,1678],{"id":1677},[162,11793,11794,11799,11801,11803],{},[27,11795,1683,11796],{},[44,11797,1686],{"href":1686,"rel":11798},[48],[27,11800,1690],{},[27,11802,1693],{},[27,11804,1696],{},[40,11806,1699],{},[14,11808,11809,11811],{"id":1702,"level":98},[364,11810,1705],{"id":1702},[103,11812,11813,11819],{"gap":105,"left-width":1708,"right-width":1709,"stack":1710},[108,11814,11815],{"v-slot:left":110},[40,11816,11817],{},[143,11818],{"alt":1717,"src":1718,"variant":147},[108,11820,11821],{"v-slot:right":110},[24,11822,11823,11825,11829],{},[27,11824,1725],{},[27,11826,1728,11827],{},[265,11828,1731],{},[27,11830,1734,11831],{},[265,11832,1737],{},[14,11834,11835,11837],{"id":1740,"level":98},[364,11836,1743],{"id":1740},[103,11838,11839,11845],{"gap":105,"left-width":1708,"right-width":1709,"stack":1710},[108,11840,11841],{"v-slot:left":110},[40,11842,11843],{},[143,11844],{"alt":1752,"src":1753,"variant":147},[108,11846,11847],{"v-slot:right":110},[24,11848,11849,11851,11855],{},[27,11850,1760],{},[27,11852,11853,1765],{},[265,11854,1193],{},[27,11856,1768],{},[14,11858,11859,11861],{"id":1771,"level":98},[364,11860,1774],{"id":1771},[103,11862,11863,11869],{"gap":105,"left-width":1708,"right-width":1709,"stack":1710},[108,11864,11865],{"v-slot:left":110},[40,11866,11867],{},[143,11868],{"alt":1783,"src":1784,"variant":147},[108,11870,11871],{"v-slot:right":110},[24,11872,11873,11877,11879],{},[27,11874,1791,11875],{},[265,11876,1794],{},[27,11878,1797],{},[27,11880,1800],{},[14,11882,11883,11885],{"id":1803,"level":98},[364,11884,1806],{"id":1803},[103,11886,11887,11893],{"gap":105,"left-width":1708,"right-width":1709,"stack":1710},[108,11888,11889],{"v-slot:left":110},[40,11890,11891],{},[143,11892],{"alt":1815,"src":1816,"variant":147},[108,11894,11895],{"v-slot:right":110},[24,11896,11897,11899,11903,11905],{},[27,11898,1823],{},[27,11900,1826,11901],{},[265,11902,1829],{},[27,11904,1832],{},[27,11906,1835],{},[14,11908,11909,11911],{"id":1838,"level":98},[364,11910,1841],{"id":1838},[103,11912,11913,11919],{"gap":105,"left-width":1708,"right-width":1709,"stack":1710},[108,11914,11915],{"v-slot:left":110},[40,11916,11917],{},[143,11918],{"alt":1850,"src":1851,"variant":147},[108,11920,11921],{"v-slot:right":110},[24,11922,11923,11925,11927],{},[27,11924,1858],{},[27,11926,1861],{},[27,11928,1864],{},[14,11930,11931,11933],{"id":1867,"level":98},[364,11932,1871],{"id":1870},[103,11934,11935,11941],{"gap":105,"left-width":1708,"right-width":1709,"stack":1710},[108,11936,11937],{"v-slot:left":110},[40,11938,11939],{},[143,11940],{"alt":1880,"src":1881,"variant":147},[108,11942,11943],{"v-slot:right":110},[24,11944,11945,11947,11949],{},[27,11946,1888],{},[27,11948,1891],{},[27,11950,1894],{},[14,11952,11953,11955],{"id":1897,"level":98},[364,11954,1901],{"id":1900},[103,11956,11957,11963],{"gap":105,"left-width":1708,"right-width":1709,"stack":1710},[108,11958,11959],{"v-slot:left":110},[40,11960,11961],{},[143,11962],{"alt":1910,"src":1911,"variant":147},[108,11964,11965,11973],{"v-slot:right":110},[24,11966,11967,11969,11971],{},[27,11968,1918],{},[27,11970,1921],{},[27,11972,1924],{},[1926,11974,11975],{"type":1928},[40,11976,1931],{},[40,11978,1934],{},[14,11980,11981,11983],{"id":1937,"level":98},[364,11982,1941],{"id":1940},[103,11984,11985,11991],{"gap":105,"left-width":1708,"right-width":1709,"stack":1710},[108,11986,11987],{"v-slot:left":110},[40,11988,11989],{},[143,11990],{"alt":1950,"src":1951,"variant":147},[108,11992,11993],{"v-slot:right":110},[24,11994,11995,11997,11999],{},[27,11996,1958],{},[27,11998,1961],{},[27,12000,1964],{},[14,12002,12003,12005],{"id":1967,"level":98},[364,12004,1971],{"id":1970},[103,12006,12007,12013],{"gap":105,"left-width":1708,"right-width":1709,"stack":1710},[108,12008,12009],{"v-slot:left":110},[40,12010,12011],{},[143,12012],{"alt":1980,"src":1981,"variant":147},[108,12014,12015],{"v-slot:right":110},[24,12016,12017,12021],{},[27,12018,1988,12019,1992],{},[265,12020,1991],{},[27,12022,1995],{},[14,12024,12025,12027],{"id":1998,"level":98},[364,12026,2001],{"id":1998},[103,12028,12029,12035],{"gap":105,"left-width":1708,"right-width":1709,"stack":1710},[108,12030,12031],{"v-slot:left":110},[40,12032,12033],{},[143,12034],{"alt":2010,"src":2011,"variant":147},[108,12036,12037],{"v-slot:right":110},[24,12038,12039,12041,12043],{},[27,12040,2018],{},[27,12042,2021],{},[27,12044,2024],{},[14,12046,12047,12049],{"id":2027,"level":98},[364,12048,2030],{"id":2027},[103,12050,12051,12057],{"gap":105,"left-width":1708,"right-width":1709,"stack":1710},[108,12052,12053],{"v-slot:left":110},[40,12054,12055],{},[143,12056],{"alt":2039,"src":2040,"variant":147},[108,12058,12059],{"v-slot:right":110},[24,12060,12061,12067,12075,12081],{},[27,12062,2047,12063],{},[24,12064,12065],{},[27,12066,2052],{},[27,12068,2055,12069],{},[24,12070,12071,12073],{},[27,12072,2060],{},[27,12074,2063],{},[27,12076,2066,12077],{},[24,12078,12079],{},[27,12080,2071],{},[27,12082,2074],{},[14,12084,12085,12087],{"id":2077,"level":98},[364,12086,2081],{"id":2080},[24,12088,12089,12091,12093],{},[27,12090,2086],{},[27,12092,2089],{},[27,12094,2092],{},[14,12096,12097,12099],{"id":2095,"level":98},[364,12098,2098],{"id":2095},[24,12100,12101,12103,12105],{},[27,12102,2103],{},[27,12104,2106],{},[27,12106,2109],{},[14,12108,12109,12111],{"id":2112,"level":17},[19,12110,2115],{"id":2112},[24,12112,12113,12115,12117,12119],{},[27,12114,2120],{},[27,12116,2123],{},[27,12118,2126],{},[27,12120,2129],{},[14,12122,12123,12125],{"id":2132,"level":98},[364,12124,2136],{"id":2135},[24,12126,12127,12132,12134,12136],{},[27,12128,2141,12129],{},[44,12130,2144],{"href":2144,"rel":12131},[48],[27,12133,2148],{},[27,12135,2151],{},[27,12137,2154],{},[14,12139,12140,12142,12152,12154,12156],{"id":2157,"level":17},[19,12141,2160],{"id":2157},[24,12143,12144,12146,12148],{},[27,12145,2165],{},[27,12147,2168],{},[27,12149,2171,12150,2174],{},[265,12151,1637],{},[40,12153,2177],{},[883,12155],{"language":885,"src":2180},[24,12157,12158],{},[27,12159,2185],{},[14,12161,12162,12164,12166,12168,12170],{"id":2188,"level":98},[364,12163,2192],{"id":2191},[40,12165,2195],{},[40,12167,2177],{},[883,12169],{"language":885,"src":2200},[40,12171,2203],{},[14,12173,12174,12176],{"id":2206,"level":17},[19,12175,2210],{"id":2209},[103,12177,12178,12188],{"gap":105,"left-width":2213,"right-width":2214},[108,12179,12180,12182,12184,12186],{"v-slot:left":110},[40,12181,881],{},[883,12183],{"language":885,"src":2221},[40,12185,2224],{},[883,12187],{"language":2227,"src":2228},[108,12189,12190,12192],{"v-slot:right":110},[40,12191,2233],{},[24,12193,12194,12196,12198],{},[27,12195,2238],{},[27,12197,2241],{},[27,12199,2244],{},[14,12201,12202,12204],{"id":2247,"level":17},[19,12203,2251],{"id":2250},[103,12205,12206,12216],{"gap":105,"left-width":2254,"right-width":1709},[108,12207,12208,12210,12212,12214],{"v-slot:left":110},[40,12209,881],{},[883,12211],{"language":885,"src":2261},[40,12213,2224],{},[883,12215],{"language":2227,"src":2266},[108,12217,12218,12220],{"v-slot:right":110},[40,12219,2271],{},[24,12221,12222,12226,12230,12232],{},[27,12223,12224,2278],{},[265,12225,691],{},[27,12227,12228,2283],{},[265,12229,1368],{},[27,12231,2286],{},[27,12233,2289],{},[14,12235,12236,12238],{"id":1371,"level":17},[19,12237,1374],{"id":1371},[103,12239,12240,12274],{"gap":105,"left-width":106,"right-width":106},[108,12241,12242],{"v-slot:left":110},[24,12243,12244,12254,12268],{},[27,12245,12246,12248],{},[265,12247,2304],{},[24,12249,12250,12252],{},[27,12251,2309],{},[27,12253,2312],{},[27,12255,12256,12258],{},[265,12257,2317],{},[24,12259,12260,12262],{},[27,12261,2322],{},[27,12263,1149,12264,2327,12266,2330],{},[265,12265,691],{},[265,12267,1368],{},[27,12269,2333,12270],{},[24,12271,12272],{},[27,12273,2338],{},[108,12275,12276,12278],{"v-slot:right":110},[27,12277,2343],{},[162,12279,12280,12282,12290,12294,12300],{},[27,12281,2348],{},[27,12283,2351,12284],{},[24,12285,12286,12288],{},[27,12287,648],{},[27,12289,2358],{},[27,12291,2361,12292],{},[265,12293,1637],{},[27,12295,2361,12296,2327,12298],{},[265,12297,691],{},[265,12299,1368],{},[27,12301,2372],{},[14,12303,12304,12306],{"id":1451,"level":17},[19,12305,1455],{"id":1454},[103,12307,12308,12324],{"gap":105,"left-width":106,"right-width":106},[108,12309,12310,12312,12316,12320],{"v-slot:left":110},[364,12311,1463],{"id":1462},[40,12313,12314,2388],{},[125,12315,2387],{},[40,12317,12318,2394],{},[125,12319,2393],{},[40,12321,12322,2400],{},[125,12323,2399],{},[108,12325,12326,12328],{"v-slot:right":110},[364,12327,1494],{"id":1451},[24,12329,12330,12335,12340,12345],{},[27,12331,12332],{},[44,12333,2413],{"href":2411,"rel":12334},[48],[27,12336,12337],{},[44,12338,2419],{"href":1686,"rel":12339},[48],[27,12341,12342],{},[44,12343,2425],{"href":2144,"rel":12344},[48],[27,12346,12347],{},[44,12348,2432],{"href":2430,"rel":12349},[48],[14,12351,12352,12354,12356],{"id":465,"level":17},[19,12353,468],{"id":465},[40,12355,2439],{},[24,12357,12358,12360,12364,12370,12372],{},[27,12359,2444],{},[27,12361,2361,12362],{},[265,12363,1637],{},[27,12365,1149,12366,2327,12368,2455],{},[265,12367,691],{},[265,12369,1368],{},[27,12371,2458],{},[27,12373,2461],{},{"title":110,"searchDepth":492,"depth":492,"links":12375},[12376,12377,12378,12393,12396,12399,12400,12401,12402,12403],{"id":600,"depth":492,"text":603},{"id":1648,"depth":492,"text":1649},{"id":1677,"depth":492,"text":1678,"children":12379},[12380,12381,12382,12383,12384,12385,12386,12387,12388,12389,12390,12391,12392],{"id":1702,"depth":504,"text":1705},{"id":1740,"depth":504,"text":1743},{"id":1771,"depth":504,"text":1774},{"id":1803,"depth":504,"text":1806},{"id":1838,"depth":504,"text":1841},{"id":1870,"depth":504,"text":1871},{"id":1900,"depth":504,"text":1901},{"id":1940,"depth":504,"text":1941},{"id":1970,"depth":504,"text":1971},{"id":1998,"depth":504,"text":2001},{"id":2027,"depth":504,"text":2030},{"id":2080,"depth":504,"text":2081},{"id":2095,"depth":504,"text":2098},{"id":2112,"depth":492,"text":2115,"children":12394},[12395],{"id":2135,"depth":504,"text":2136},{"id":2157,"depth":492,"text":2160,"children":12397},[12398],{"id":2191,"depth":504,"text":2192},{"id":2209,"depth":492,"text":2210},{"id":2250,"depth":492,"text":2251},{"id":1371,"depth":492,"text":1374},{"id":1454,"depth":492,"text":1455},{"id":465,"depth":492,"text":468},{},{"title":1617,"description":2492},[1829,1609,529],{"id":2505,"title":2506,"audience":9,"body":12408,"contentType":508,"course":509,"description":3582,"estimateBasis":3583,"estimatedDiscussionMinutes":3584,"estimatedLiveMinutes":3585,"estimatedTotalMinutes":3586,"extension":515,"meta":13182,"module":517,"navigation":518,"order":514,"path":3588,"promptAssist":521,"seo":13183,"status":523,"stem":3590,"tags":13184,"videoDuration":3595,"videoId":3596,"videoLink":3597,"videoTitle":3598,"week":517,"__hash__":3599},{"type":11,"value":12409,"toc":13154},[12410,12428,12442,12460,12468,12488,12514,12566,12598,12646,12702,12732,12750,12774,12802,12834,12858,12902,12904,12906,12912,12962,12982,13004,13042,13078,13130],[14,12411,12412,12414],{"id":2511,"level":17},[19,12413,2514],{"id":2511},[24,12415,12416,12418,12420,12422,12424,12426],{},[27,12417,2519],{},[27,12419,2522],{},[27,12421,2525],{},[27,12423,2528],{},[27,12425,2531],{},[27,12427,2534],{},[14,12429,12430,12432,12440],{"id":2537,"level":17},[19,12431,2540],{"id":2537},[24,12433,12434,12436,12438],{},[27,12435,648],{},[27,12437,2547],{},[27,12439,663],{},[40,12441,2552],{},[14,12443,12444,12446],{"id":2555,"level":17},[19,12445,2558],{"id":2555},[24,12447,12448,12450,12456,12458],{},[27,12449,2563],{},[27,12451,2566,12452],{},[24,12453,12454],{},[27,12455,2571],{},[27,12457,2574],{},[27,12459,2577],{},[14,12461,12462,12464,12466],{"id":2580,"level":17},[19,12463,2583],{"id":2580},[2585,12465],{"code":2587},[40,12467,2590],{},[14,12469,12470,12472],{"id":2593,"level":17},[19,12471,2596],{"id":2593},[103,12473,12474,12480],{"gap":105,"left-width":106,"right-width":106},[108,12475,12476,12478],{"v-slot:left":110},[40,12477,881],{},[883,12479],{"label":2605,"language":885,"src":2606},[108,12481,12482,12484,12486],{"v-slot:right":110},[40,12483,2224],{},[883,12485],{"label":2613,"language":2227,"src":2614},[40,12487,2617],{},[14,12489,12490,12492],{"id":2620,"level":17},[19,12491,2624],{"id":2623},[103,12493,12494,12508],{"gap":105,"left-width":106,"right-width":2627},[108,12495,12496],{"v-slot:left":110},[24,12497,12498,12500,12502,12504,12506],{},[27,12499,2634],{},[27,12501,2637],{},[27,12503,2640],{},[27,12505,2643],{},[27,12507,2646],{},[108,12509,12510],{"v-slot:right":110},[40,12511,12512],{},[143,12513],{"alt":2653,"src":2654,"variant":147},[14,12515,12516,12518],{"id":2657,"level":17},[19,12517,2661],{"id":2660},[103,12519,12520,12560],{"gap":105,"left-width":2664,"right-width":2213},[108,12521,12522,12524],{"v-slot:left":110},[40,12523,2669],{},[24,12525,12526,12530,12534,12538,12546,12550,12552,12558],{},[27,12527,169,12528],{},[265,12529,2676],{},[27,12531,2679,12532],{},[265,12533,2682],{},[27,12535,2685,12536],{},[265,12537,2688],{},[27,12539,2691,12540,2695,12542,2699,12544,2703],{},[265,12541,2694],{},[265,12543,2698],{},[265,12545,2702],{},[27,12547,2706,12548],{},[265,12549,2709],{},[27,12551,2712],{},[27,12553,2715,12554],{},[24,12555,12556],{},[27,12557,2720],{},[27,12559,2723],{},[108,12561,12562],{"v-slot:right":110},[40,12563,12564],{},[143,12565],{"alt":2730,"src":2731,"variant":147},[14,12567,12568,12570,12590],{"id":2734,"level":17},[19,12569,2738],{"id":2737},[103,12571,12572,12578],{"gap":105,"left-width":106,"right-width":106},[108,12573,12574,12576],{"v-slot:left":110},[40,12575,881],{},[883,12577],{"label":2747,"language":885,"src":2748},[108,12579,12580,12582,12584],{"v-slot:right":110},[40,12581,2753],{},[883,12583],{"label":2613,"language":2227,"src":2756},[40,12585,2759,12586,2327,12588],{},[265,12587,2762],{},[265,12589,2765],{},[40,12591,2768,12592,2772,12594,1200,12596,2779],{},[125,12593,2771],{},[265,12595,2775],{},[265,12597,2778],{},[14,12599,12600,12602,12604,12606,12608,12610],{"id":2782,"level":17},[19,12601,2786],{"id":2785},[40,12603,881],{},[883,12605],{"label":2791,"language":885,"src":2792},[40,12607,2753],{},[883,12609],{"label":2613,"language":2227,"src":2797},[24,12611,12612,12630,12634,12638],{},[27,12613,2802,12614],{},[24,12615,12616,12620,12624],{},[27,12617,12618,2810],{},[265,12619,2809],{},[27,12621,12622,2816],{},[265,12623,2815],{},[27,12625,12626,2821,12628,2825],{},[265,12627,1164],{},[265,12629,2824],{},[27,12631,12632,2830],{},[265,12633,2762],{},[27,12635,12636,2835],{},[265,12637,2765],{},[27,12639,2838,12640],{},[24,12641,12642,12644],{},[27,12643,2843],{},[27,12645,2846],{},[14,12647,12648,12650,12664,12686],{"id":2849,"level":17},[19,12649,2853],{"id":2852},[103,12651,12652,12658],{"gap":105,"left-width":2254,"right-width":106},[108,12653,12654,12656],{"v-slot:left":110},[40,12655,881],{},[883,12657],{"label":2862,"language":885,"src":2863},[108,12659,12660,12662],{"v-slot:right":110},[40,12661,2753],{},[883,12663],{"label":2613,"language":2227,"src":2870},[24,12665,12666,12670,12684],{},[27,12667,12668,2878],{},[265,12669,2877],{},[27,12671,2881,12672,2885,12674,12676],{},[265,12673,2884],{},[265,12675,2888],{},[24,12677,12678],{},[27,12679,1149,12680,2896,12682,2899],{},[265,12681,2895],{},[265,12683,788],{},[27,12685,2902],{},[103,12687,12688,12694],{"gap":105,"left-width":106,"right-width":106},[108,12689,12690,12692],{"v-slot:left":110},[40,12691,881],{},[883,12693],{"label":2911,"language":885,"src":2912},[108,12695,12696,12698,12700],{"v-slot:right":110},[40,12697,2224],{},[883,12699],{"label":2613,"language":2227,"src":2919},[40,12701,2922],{},[14,12703,12704,12706,12720],{"id":2925,"level":17},[19,12705,2929],{"id":2928},[103,12707,12708,12714],{"gap":105,"left-width":106,"right-width":106},[108,12709,12710,12712],{"v-slot:left":110},[40,12711,881],{},[883,12713],{"label":2938,"language":885,"src":2939},[108,12715,12716,12718],{"v-slot:right":110},[40,12717,2753],{},[883,12719],{"label":2613,"language":2227,"src":2946},[24,12721,12722,12728],{},[27,12723,2951,12724,2955,12726,2958],{},[265,12725,2954],{},[265,12727,2815],{},[27,12729,2961,12730,2964],{},[265,12731,2762],{},[14,12733,12734,12736],{"id":2967,"level":17},[19,12735,2971],{"id":2970},[24,12737,12738,12740,12744,12746,12748],{},[27,12739,2976],{},[27,12741,1683,12742],{},[265,12743,2981],{},[27,12745,2984],{},[27,12747,2987],{},[27,12749,2990],{},[14,12751,12752,12754],{"id":2993,"level":98},[364,12753,2997],{"id":2996},[103,12755,12756,12762],{"gap":105,"left-width":2254,"right-width":1709,"stack":1710},[108,12757,12758],{"v-slot:left":110},[40,12759,12760],{},[143,12761],{"alt":3006,"src":3007,"variant":147},[108,12763,12764],{"v-slot:right":110},[24,12765,12766,12768,12772],{},[27,12767,3014],{},[27,12769,2679,12770],{},[265,12771,3019],{},[27,12773,3022],{},[14,12775,12776,12778],{"id":3025,"level":98},[364,12777,3029],{"id":3028},[103,12779,12780,12786],{"gap":105,"left-width":2254,"right-width":1709,"stack":1710},[108,12781,12782],{"v-slot:left":110},[40,12783,12784],{},[143,12785],{"alt":3038,"src":3039,"variant":147},[108,12787,12788],{"v-slot:right":110},[24,12789,12790,12794,12798],{},[27,12791,3046,12792,3050],{},[265,12793,3049],{},[27,12795,3053,12796],{},[265,12797,2981],{},[27,12799,2679,12800],{},[265,12801,3060],{},[14,12803,12804,12806],{"id":3063,"level":98},[364,12805,3067],{"id":3066},[103,12807,12808,12814],{"gap":105,"left-width":3070,"right-width":2214,"stack":1710},[108,12809,12810],{"v-slot:left":110},[40,12811,12812],{},[143,12813],{"alt":3077,"src":3078,"variant":147},[108,12815,12816],{"v-slot:right":110},[24,12817,12818,12822,12826,12828,12832],{},[27,12819,3085,12820],{},[265,12821,3088],{},[27,12823,3091,12824],{},[265,12825,3094],{},[27,12827,3097],{},[27,12829,169,12830],{},[265,12831,3102],{},[27,12833,3105],{},[14,12835,12836,12838],{"id":3108,"level":17},[19,12837,3112],{"id":3111},[103,12839,12840,12850],{"gap":105,"left-width":106,"right-width":2254},[108,12841,12842,12844,12846],{"v-slot:left":110},[40,12843,881],{},[883,12845],{"label":3121,"language":885,"src":3122},[40,12847,3125,12848,3129],{},[265,12849,3128],{},[108,12851,12852,12854,12856],{"v-slot:right":110},[40,12853,2224],{},[883,12855],{"label":2613,"language":2227,"src":3136},[40,12857,3139],{},[14,12859,12860,12862],{"id":3142,"level":17},[19,12861,3146],{"id":3145},[103,12863,12864,12890],{"gap":105,"left-width":1709,"right-width":2254},[108,12865,12866,12868,12886],{"v-slot:left":110},[364,12867,3154],{"id":3153},[24,12869,12870,12874,12878,12882],{},[27,12871,3159,12872],{},[265,12873,3162],{},[27,12875,3165,12876,3169],{},[265,12877,3168],{},[27,12879,3172,12880,3176],{},[265,12881,3175],{},[27,12883,3179,12884,3183],{},[265,12885,3182],{},[40,12887,12888],{},[143,12889],{"alt":3188,"src":3189,"variant":147},[108,12891,12892,12894,12896],{"v-slot:right":110},[40,12893,3194],{},[883,12895],{"label":3197,"language":885,"src":3198},[1926,12897,12898],{"type":3201},[40,12899,3204,12900,3208],{},[265,12901,3207],{},[40,12903,2753],{},[883,12905],{"label":2613,"language":2227,"src":3213},[40,12907,3216,12908,3220,12910,3224],{},[265,12909,3219],{},[265,12911,3223],{},[14,12913,12914,12916,12930,12944,12958],{"id":3227,"level":17},[19,12915,3231],{"id":3230},[103,12917,12918,12924],{"gap":105,"left-width":106,"right-width":106},[108,12919,12920,12922],{"v-slot:left":110},[40,12921,3238],{},[883,12923],{"label":3241,"language":885,"src":3242},[108,12925,12926,12928],{"v-slot:right":110},[40,12927,2224],{},[883,12929],{"label":3249,"language":2227,"src":3250},[103,12931,12932,12938],{"gap":105,"left-width":106,"right-width":106},[108,12933,12934,12936],{"v-slot:left":110},[40,12935,3257],{},[883,12937],{"label":3260,"language":885,"src":3261},[108,12939,12940,12942],{"v-slot:right":110},[40,12941,2224],{},[883,12943],{"label":3268,"language":2227,"src":3269},[24,12945,12946,12950,12954],{},[27,12947,12948,3277],{},[265,12949,3276],{},[27,12951,12952,3283],{},[265,12953,3282],{},[27,12955,12956,3289],{},[265,12957,3288],{},[40,12959,3292,12960,3296],{},[265,12961,3295],{},[14,12963,12964,12966,12968,12980],{"id":3299,"level":17},[19,12965,3303],{"id":3302},[40,12967,3306],{},[24,12969,12970,12972,12976,12978],{},[27,12971,3311],{},[27,12973,3314,12974],{},[265,12975,378],{},[27,12977,3319],{},[27,12979,3322],{},[40,12981,3325],{},[14,12983,12984,12986],{"id":3328,"level":17},[19,12985,3331],{"id":3328},[24,12987,12988,12992,12996,13000,13002],{},[27,12989,12990,3339],{},[265,12991,3338],{},[27,12993,3342,12994,3346],{},[265,12995,3345],{},[27,12997,3349,12998,3353],{},[265,12999,3352],{},[27,13001,3356],{},[27,13003,3359],{},[14,13005,13006,13008,13010,13034],{"id":3362,"level":98},[364,13007,3366],{"id":3365},[40,13009,881],{},[162,13011,13012,13016,13020,13024,13028,13030],{},[27,13013,13014],{},[265,13015,2877],{},[27,13017,13018],{},[265,13019,2888],{},[27,13021,13022],{},[265,13023,3345],{},[27,13025,13026],{},[265,13027,3387],{},[27,13029,3390],{},[27,13031,13032],{},[265,13033,3395],{},[40,13035,2171,13036,3400,13038,3403,13040,3407],{},[265,13037,2877],{},[265,13039,2884],{},[265,13041,3406],{},[14,13043,13044,13046,13048],{"id":436,"level":17},[19,13045,439],{"id":436},[40,13047,3414],{},[24,13049,13050,13054,13060,13064,13066,13070,13072],{},[27,13051,13052,3421],{},[265,13053,1637],{},[27,13055,13056,3426,13058],{},[265,13057,3345],{},[265,13059,2762],{},[27,13061,13062,3433],{},[265,13063,3395],{},[27,13065,3436],{},[27,13067,13068,3441],{},[265,13069,378],{},[27,13071,3444],{},[27,13073,13074,2327,13076,3453],{},[265,13075,3449],{},[265,13077,3452],{},[14,13079,13080,13082],{"id":1451,"level":17},[19,13081,1455],{"id":1454},[103,13083,13084,13104],{"gap":105,"left-width":106,"right-width":106},[108,13085,13086,13088,13092,13096,13100],{"v-slot:left":110},[364,13087,1463],{"id":1462},[40,13089,13090,3469],{},[125,13091,3468],{},[40,13093,13094,3475],{},[125,13095,3474],{},[40,13097,13098,3481],{},[125,13099,3480],{},[40,13101,13102,3487],{},[125,13103,3486],{},[108,13105,13106,13108],{"v-slot:right":110},[364,13107,1494],{"id":1451},[24,13109,13110,13115,13120,13125],{},[27,13111,13112],{},[44,13113,3500],{"href":3498,"rel":13114},[48],[27,13116,13117],{},[44,13118,3507],{"href":3505,"rel":13119},[48],[27,13121,13122],{},[44,13123,3514],{"href":3512,"rel":13124},[48],[27,13126,13127],{},[44,13128,3521],{"href":3519,"rel":13129},[48],[14,13131,13132,13134,13136],{"id":465,"level":17},[19,13133,468],{"id":465},[40,13135,1524],{},[24,13137,13138,13140,13142,13144,13146,13148,13152],{},[27,13139,3532],{},[27,13141,3535],{},[27,13143,3538],{},[27,13145,3541],{},[27,13147,3544],{},[27,13149,3547,13150],{},[265,13151,3550],{},[27,13153,3553],{},{"title":110,"searchDepth":492,"depth":492,"links":13155},[13156,13157,13158,13159,13160,13161,13162,13163,13164,13165,13166,13167,13172,13173,13174,13175,13176,13179,13180,13181],{"id":2511,"depth":492,"text":2514},{"id":2537,"depth":492,"text":2540},{"id":2555,"depth":492,"text":2558},{"id":2580,"depth":492,"text":2583},{"id":2593,"depth":492,"text":2596},{"id":2623,"depth":492,"text":2624},{"id":2660,"depth":492,"text":2661},{"id":2737,"depth":492,"text":2738},{"id":2785,"depth":492,"text":2786},{"id":2852,"depth":492,"text":2853},{"id":2928,"depth":492,"text":2929},{"id":2970,"depth":492,"text":2971,"children":13168},[13169,13170,13171],{"id":2996,"depth":504,"text":2997},{"id":3028,"depth":504,"text":3029},{"id":3066,"depth":504,"text":3067},{"id":3111,"depth":492,"text":3112},{"id":3145,"depth":492,"text":3146},{"id":3230,"depth":492,"text":3231},{"id":3302,"depth":492,"text":3303},{"id":3328,"depth":492,"text":3331,"children":13177},[13178],{"id":3365,"depth":504,"text":3366},{"id":436,"depth":492,"text":439},{"id":1454,"depth":492,"text":1455},{"id":465,"depth":492,"text":468},{},{"title":2506,"description":3582},[1829,3592,3593,3594],{"id":3601,"title":3602,"audience":9,"body":13186,"contentType":508,"course":509,"description":4523,"estimateBasis":4524,"estimatedDiscussionMinutes":513,"estimatedLiveMinutes":3585,"estimatedTotalMinutes":4525,"extension":515,"meta":13837,"module":517,"navigation":518,"order":4527,"path":4528,"promptAssist":521,"seo":13838,"status":523,"stem":4530,"tags":13839,"videoDuration":4534,"videoId":4535,"videoLink":4536,"videoTitle":4537,"week":517,"__hash__":4538},{"type":11,"value":13187,"toc":13802},[13188,13208,13222,13232,13254,13278,13314,13324,13338,13358,13380,13410,13432,13456,13472,13504,13522,13542,13554,13562,13586,13610,13636,13660,13678,13698,13720,13770,13800],[14,13189,13190,13192,13194],{"id":3607,"level":17},[19,13191,3610],{"id":3607},[40,13193,3613],{},[24,13195,13196,13198,13200,13202,13204,13206],{},[27,13197,3618],{},[27,13199,3621],{},[27,13201,3624],{},[27,13203,3627],{},[27,13205,3630],{},[27,13207,3633],{},[14,13209,13210,13212,13214,13216],{"id":3636,"level":17},[19,13211,3640],{"id":3639},[40,13213,3643],{},[40,13215,3646],{},[24,13217,13218,13220],{},[27,13219,3651],{},[27,13221,3654],{},[14,13223,13224,13226,13228,13230],{"id":3657,"level":17},[19,13225,3661],{"id":3660},[883,13227],{"language":3664,"src":3665},[40,13229,3668],{},[883,13231],{"language":3664,"src":3671},[14,13233,13234,13236,13238,13240,13242,13244],{"id":3674,"level":17},[19,13235,3678],{"id":3677},[40,13237,881],{},[883,13239],{"language":885,"src":3683},[40,13241,3686],{},[40,13243,3689],{},[24,13245,13246,13248,13250,13252],{},[27,13247,3694],{},[27,13249,3697],{},[27,13251,3700],{},[27,13253,3703],{},[14,13255,13256,13258,13260,13262],{"id":3706,"level":17},[19,13257,3710],{"id":3709},[40,13259,881],{},[883,13261],{"language":885,"src":3715},[24,13263,13264,13266,13268],{},[27,13265,3720],{},[27,13267,3723],{},[27,13269,3726,13270],{},[24,13271,13272],{},[27,13273,13274,2327,13276,3737],{},[265,13275,3733],{},[265,13277,3736],{},[14,13279,13280,13282,13286,13288],{"id":3740,"level":17},[19,13281,3744],{"id":3743},[40,13283,3747,13284,1257],{},[265,13285,1794],{},[883,13287],{"language":885,"src":3752},[24,13289,13290,13298],{},[27,13291,3757,13292,3760,13294],{},[265,13293,1794],{},[24,13295,13296],{},[27,13297,3765],{},[27,13299,3768,13300],{},[24,13301,13302,13306,13310],{},[27,13303,13304,3776],{},[265,13305,3775],{},[27,13307,13308,3782],{},[265,13309,3781],{},[27,13311,13312,3788],{},[265,13313,3787],{},[14,13315,13316,13318,13320,13322],{"id":3791,"level":17},[19,13317,3795],{"id":3794},[40,13319,3798],{},[883,13321],{"language":885,"src":3801},[40,13323,3804],{},[14,13325,13326,13328,13330,13332,13334],{"id":3807,"level":17},[19,13327,3811],{"id":3810},[40,13329,3814],{},[883,13331],{"language":885,"src":3817},[40,13333,3820],{},[24,13335,13336],{},[27,13337,3825],{},[14,13339,13340,13342,13344,13346],{"id":3828,"level":98},[364,13341,3832],{"id":3831},[40,13343,3835],{},[883,13345],{"language":885,"src":3838},[24,13347,13348,13350,13352],{},[27,13349,3843],{},[27,13351,3846],{},[27,13353,13354,3852,13356,3856],{},[265,13355,3851],{},[265,13357,3855],{},[14,13359,13360,13362,13364,13366],{"id":3859,"level":17},[19,13361,3863],{"id":3862},[40,13363,3866],{},[883,13365],{"language":885,"src":3869},[24,13367,13368,13372,13374,13378],{},[27,13369,3874,13370,3878],{},[265,13371,3877],{},[27,13373,3881],{},[27,13375,1149,13376,3886],{},[265,13377,3855],{},[27,13379,1319],{},[14,13381,13382,13384,13386,13388,13390,13392],{"id":3891,"level":98},[364,13383,3895],{"id":3894},[40,13385,3898],{},[883,13387],{"language":885,"src":3901},[40,13389,3904],{},[883,13391],{"language":885,"src":3907},[24,13393,13394,13402],{},[27,13395,13396,3915,13398],{},[265,13397,3914],{},[24,13399,13400],{},[27,13401,3920],{},[27,13403,13404,3925,13406],{},[265,13405,624],{},[24,13407,13408],{},[27,13409,3930],{},[14,13411,13412,13414,13416,13418,13420],{"id":3933,"level":17},[19,13413,3937],{"id":3936},[40,13415,3940],{},[883,13417],{"language":885,"src":3943},[40,13419,3946],{},[24,13421,13422,13430],{},[27,13423,13424,3954,13426],{},[265,13425,3953],{},[24,13427,13428],{},[27,13429,3959],{},[27,13431,1319],{},[14,13433,13434,13436,13438,13440,13454],{"id":3964,"level":98},[364,13435,3968],{"id":3967},[40,13437,881],{},[883,13439],{"language":885,"src":3973},[24,13441,13442,13446,13450],{},[27,13443,13444,3981],{},[265,13445,3980],{},[27,13447,13448,3987],{},[265,13449,3986],{},[27,13451,13452,3993],{},[265,13453,3992],{},[40,13455,3996],{},[14,13457,13458,13460,13462,13464],{"id":3999,"level":17},[19,13459,4003],{"id":4002},[40,13461,4006],{},[883,13463],{"language":885,"src":4009},[24,13465,13466,13470],{},[27,13467,13468,4017],{},[265,13469,4016],{},[27,13471,4020],{},[14,13473,13474,13476],{"id":4023,"level":17},[19,13475,4027],{"id":4026},[103,13477,13478,13498],{"gap":105,"left-width":106,"right-width":106},[108,13479,13480,13482,13484,13486,13488,13490],{"v-slot:left":110},[40,13481,4034],{},[40,13483,4037],{},[883,13485],{"language":3664,"src":4040},[40,13487,4043],{},[883,13489],{"language":3664,"src":4046},[24,13491,13492,13494,13496],{},[27,13493,4051],{},[27,13495,4054],{},[27,13497,4057],{},[108,13499,13500],{"v-slot:right":110},[40,13501,13502],{},[143,13503],{"alt":4064,"src":4065,"variant":147},[14,13505,13506,13508,13510,13516,13518,13520],{"id":4068,"level":17},[19,13507,4072],{"id":4071},[40,13509,4075],{},[24,13511,13512],{},[27,13513,4080,13514,4083],{},[265,13515,1794],{},[40,13517,4086],{},[883,13519],{"language":885,"src":4089},[40,13521,4092],{},[14,13523,13524,13526,13528,13540],{"id":4095,"level":17},[19,13525,4099],{"id":4098},[40,13527,4102],{},[24,13529,13530,13532,13534,13536,13538],{},[27,13531,4107],{},[27,13533,4110],{},[27,13535,4113],{},[27,13537,4116],{},[27,13539,4119],{},[40,13541,4122],{},[14,13543,13544,13546,13548],{"id":4125,"level":17},[19,13545,4129],{"id":4128},[40,13547,4132],{},[24,13549,13550,13552],{},[27,13551,4137],{},[27,13553,4140],{},[14,13555,13556,13558,13560],{"id":4143,"level":17},[19,13557,4146],{"id":4143},[40,13559,4149],{},[883,13561],{"language":885,"src":4152},[14,13563,13564,13566,13570,13574,13578,13580,13582],{"id":4155,"level":17},[19,13565,4159],{"id":4158},[40,13567,4162,13568],{},[265,13569,4165],{},[40,13571,4168,13572,4172],{},[265,13573,4171],{},[24,13575,13576],{},[27,13577,4177],{},[40,13579,4180],{},[883,13581],{"language":885,"src":4183},[24,13583,13584],{},[27,13585,4188],{},[14,13587,13588,13590,13592],{"id":4191,"level":98},[364,13589,4195],{"id":4194},[40,13591,4198],{},[103,13593,13594,13604],{"gap":105,"left-width":106,"right-width":106},[108,13595,13596,13598],{"v-slot:left":110},[883,13597],{"language":885,"src":4205},[24,13599,13600,13602],{},[27,13601,4210],{},[27,13603,4213],{},[108,13605,13606],{"v-slot:right":110},[40,13607,13608],{},[143,13609],{"alt":4220,"src":4221,"variant":147},[14,13611,13612,13614],{"id":4224,"level":98},[364,13613,4228],{"id":4227},[103,13615,13616,13630],{"gap":105,"left-width":106,"right-width":106},[108,13617,13618,13620,13622,13624,13628],{"v-slot:left":110},[40,13619,4235],{},[883,13621],{"language":885,"src":4238},[40,13623,4241],{},[24,13625,13626],{},[27,13627,4246],{},[883,13629],{"language":885,"src":4249},[108,13631,13632],{"v-slot:right":110},[40,13633,13634],{},[143,13635],{"alt":4256,"src":4257,"variant":147},[14,13637,13638,13640,13642,13646,13648,13650,13652],{"id":4260,"level":17},[19,13639,4264],{"id":4263},[40,13641,4267],{},[40,13643,3053,13644],{},[265,13645,4171],{},[40,13647,4274],{},[883,13649],{"language":3664,"src":4277},[40,13651,4280],{},[24,13653,13654,13656,13658],{},[27,13655,4285],{},[27,13657,4288],{},[27,13659,4291],{},[14,13661,13662,13664,13668,13670,13672,13674],{"id":4294,"level":98},[364,13663,4298],{"id":4297},[40,13665,4301,13666,4304],{},[265,13667,4171],{},[40,13669,4307],{},[40,13671,4310],{},[883,13673],{"language":885,"src":4313},[24,13675,13676],{},[27,13677,1319],{},[14,13679,13680,13682,13684],{"id":4320,"level":98},[364,13681,4324],{"id":4323},[40,13683,4327],{},[24,13685,13686,13690,13692,13696],{},[27,13687,13688,4334],{},[265,13689,3855],{},[27,13691,4337],{},[27,13693,13694,4342],{},[265,13695,4171],{},[27,13697,4345],{},[14,13699,13700,13702],{"id":1371,"level":17},[19,13701,1374],{"id":1371},[24,13703,13704,13706,13708,13710,13712,13718],{},[27,13705,4354],{},[27,13707,4357],{},[27,13709,4360],{},[27,13711,4363],{},[27,13713,4366,13714,1200,13716],{},[265,13715,4369],{},[265,13717,4372],{},[27,13719,4375],{},[14,13721,13722,13724],{"id":1451,"level":17},[19,13723,1455],{"id":1454},[103,13725,13726,13744],{"gap":105,"left-width":106,"right-width":106},[108,13727,13728,13730],{"v-slot:left":110},[364,13729,1463],{"id":1462},[24,13731,13732,13734,13736,13738,13740,13742],{},[27,13733,4390],{},[27,13735,4393],{},[27,13737,4396],{},[27,13739,4399],{},[27,13741,4402],{},[27,13743,4405],{},[108,13745,13746,13748],{"v-slot:right":110},[364,13747,1494],{"id":1451},[24,13749,13750,13755,13760,13765],{},[27,13751,4414,13752],{},[44,13753,4419],{"href":4417,"rel":13754},[48],[27,13756,4414,13757],{},[44,13758,4426],{"href":4424,"rel":13759},[48],[27,13761,4429,13762],{},[44,13763,4434],{"href":4432,"rel":13764},[48],[27,13766,4437,13767],{},[44,13768,4442],{"href":4440,"rel":13769},[48],[14,13771,13772,13774],{"id":465,"level":17},[19,13773,468],{"id":465},[103,13775,13776,13794],{"gap":515,"left-width":4449,"right-width":4450},[108,13777,13778,13780],{"v-slot:left":110},[40,13779,1524],{},[24,13781,13782,13786,13788,13790,13792],{},[27,13783,4459,13784,4462],{},[265,13785,3855],{},[27,13787,4465],{},[27,13789,4468],{},[27,13791,4471],{},[27,13793,4474],{},[108,13795,13796,13798],{"v-slot:right":110},[40,13797,4479],{},[4481,13799],{"alt":4483,"src":4484},[40,13801,4487],{},{"title":110,"searchDepth":492,"depth":492,"links":13803},[13804,13805,13806,13807,13808,13809,13810,13811,13814,13817,13820,13821,13822,13823,13824,13825,13826,13830,13834,13835,13836],{"id":3607,"depth":492,"text":3610},{"id":3639,"depth":492,"text":3640},{"id":3660,"depth":492,"text":3661},{"id":3677,"depth":492,"text":3678},{"id":3709,"depth":492,"text":3710},{"id":3743,"depth":492,"text":3744},{"id":3794,"depth":492,"text":3795},{"id":3810,"depth":492,"text":3811,"children":13812},[13813],{"id":3831,"depth":504,"text":3832},{"id":3862,"depth":492,"text":3863,"children":13815},[13816],{"id":3894,"depth":504,"text":3895},{"id":3936,"depth":492,"text":3937,"children":13818},[13819],{"id":3967,"depth":504,"text":3968},{"id":4002,"depth":492,"text":4003},{"id":4026,"depth":492,"text":4027},{"id":4071,"depth":492,"text":4072},{"id":4098,"depth":492,"text":4099},{"id":4128,"depth":492,"text":4129},{"id":4143,"depth":492,"text":4146},{"id":4158,"depth":492,"text":4159,"children":13827},[13828,13829],{"id":4194,"depth":504,"text":4195},{"id":4227,"depth":504,"text":4228},{"id":4263,"depth":492,"text":4264,"children":13831},[13832,13833],{"id":4297,"depth":504,"text":4298},{"id":4323,"depth":504,"text":4324},{"id":1371,"depth":492,"text":1374},{"id":1454,"depth":492,"text":1455},{"id":465,"depth":492,"text":468},{},{"title":3602,"description":4523},[1829,4532,4533],{"id":4540,"title":4541,"audience":9,"body":13841,"contentType":508,"course":509,"description":5314,"estimateBasis":5315,"estimatedDiscussionMinutes":512,"estimatedLiveMinutes":514,"estimatedTotalMinutes":4527,"extension":515,"meta":14400,"module":517,"navigation":518,"order":5317,"path":5318,"promptAssist":521,"seo":14401,"status":523,"stem":5320,"tags":14402,"videoDuration":5325,"videoId":5326,"videoLink":5327,"videoTitle":5328,"week":517,"__hash__":5329},{"type":11,"value":13842,"toc":14378},[13843,13855,13869,13883,13900,13924,13946,14002,14055,14126,14146,14194,14247,14263,14283,14297,14315,14356],[14,13844,13845,13847],{"id":4546,"level":17},[19,13846,4541],{"id":4549},[24,13848,13849,13851,13853],{},[27,13850,4554],{},[27,13852,4557],{},[27,13854,4560],{},[14,13856,13857,13859],{"id":600,"level":17},[19,13858,603],{"id":600},[24,13860,13861,13863,13865,13867],{},[27,13862,4569],{},[27,13864,4572],{},[27,13866,4575],{},[27,13868,4578],{},[14,13870,13871,13873],{"id":4581,"level":17},[19,13872,4584],{"id":4581},[24,13874,13875,13877,13879],{},[27,13876,4589],{},[27,13878,4592],{},[27,13880,4595,13881,4599],{},[265,13882,4598],{},[14,13884,13885,13887],{"id":4602,"level":17},[19,13886,4605],{"id":4602},[24,13888,13889,13894,13896,13898],{},[27,13890,4610,13891],{},[44,13892,4615],{"href":4613,"rel":13893},[48],[27,13895,4618],{},[27,13897,4621],{},[27,13899,4624],{},[14,13901,13902,13904,13906,13922],{"id":4627,"level":17},[19,13903,4630],{"id":4627},[40,13905,4633],{},[24,13907,13908,13914,13916,13920],{},[27,13909,4638,13910,4642,13912],{},[265,13911,4641],{},[265,13913,4645],{},[27,13915,4648],{},[27,13917,4651,13918],{},[265,13919,2688],{},[27,13921,4656],{},[40,13923,4659],{},[14,13925,13926,13928,13944],{"id":4662,"level":17},[19,13927,4666],{"id":4665},[24,13929,13930,13934,13940,13942],{},[27,13931,4671,13932],{},[265,13933,4674],{},[27,13935,4677,13936,1200,13938],{},[265,13937,509],{},[265,13939,4682],{},[27,13941,4685],{},[27,13943,4688],{},[40,13945,4691],{},[14,13947,13948,13950,13952],{"id":4694,"level":17},[19,13949,4697],{"id":4694},[364,13951,4701],{"id":4700},[24,13953,13954,13960,13966,13972,13978,13984,13994,14000],{},[27,13955,4706,13956],{},[24,13957,13958],{},[27,13959,4711],{},[27,13961,4714,13962],{},[24,13963,13964],{},[27,13965,4719],{},[27,13967,4722,13968],{},[24,13969,13970],{},[27,13971,4727],{},[27,13973,4730,13974],{},[24,13975,13976],{},[27,13977,4735],{},[27,13979,4738,13980],{},[24,13981,13982],{},[27,13983,4743],{},[27,13985,4746,13986],{},[24,13987,13988],{},[27,13989,4751,13990,621,13992,4758],{},[265,13991,4754],{},[265,13993,4757],{},[27,13995,4761,13996],{},[24,13997,13998],{},[27,13999,4766],{},[27,14001,4769],{},[14,14003,14004,14006],{"id":4772,"level":98},[19,14005,4776],{"id":4775},[103,14007,14008,14049],{"gap":105,"left-width":1709,"right-width":2254,"align":4779},[108,14009,14010,14012],{"v-slot:left":110},[364,14011,4785],{"id":4784},[24,14013,14014,14016,14047],{},[27,14015,4790],{},[27,14017,4793,14018],{},[24,14019,14020,14024,14028,14030,14032],{},[27,14021,4798,14022],{},[265,14023,4801],{},[27,14025,4804,14026],{},[265,14027,4807],{},[27,14029,4810],{},[27,14031,4813],{},[27,14033,4816,14034],{},[24,14035,14036,14041],{},[27,14037,4821,14038],{},[44,14039,4826],{"href":4824,"rel":14040},[48],[27,14042,4829,14043,2327,14045],{},[265,14044,4832],{},[265,14046,4835],{},[27,14048,4838],{},[108,14050,14051],{"v-slot:right":110},[40,14052,14053],{},[143,14054],{"alt":4845,"src":4846,"variant":147},[14,14056,14057,14059],{"id":4849,"level":98},[19,14058,4853],{"id":4852},[103,14060,14061,14100],{"gap":105,"left-width":2664,"right-width":4856,"align":4779},[108,14062,14063,14065],{"v-slot:left":110},[364,14064,4862],{"id":4861},[24,14066,14067,14072,14074,14076,14078,14080,14092,14096,14098],{},[27,14068,1683,14069],{},[44,14070,4871],{"href":4869,"rel":14071},[48],[27,14073,4874],{},[27,14075,4877],{},[27,14077,4880],{},[27,14079,4883],{},[27,14081,4886,14082],{},[24,14083,14084,14088],{},[27,14085,4891,14086],{},[265,14087,4894],{},[27,14089,4897,14090],{},[265,14091,4900],{},[27,14093,2361,14094],{},[265,14095,4905],{},[27,14097,4908],{},[27,14099,4911],{},[108,14101,14102,14106,14110,14114,14118,14122],{"v-slot:right":110},[162,14103,14104],{},[27,14105,4918],{},[40,14107,14108],{},[143,14109],{"alt":4923,"src":4924,"variant":147,"max-height":4925},[162,14111,14112],{"start":492},[27,14113,4930],{},[40,14115,14116],{},[143,14117],{"alt":4935,"src":4936,"variant":147,"max-height":4937},[162,14119,14120],{"start":504},[27,14121,4942],{},[40,14123,14124],{},[143,14125],{"alt":4947,"src":4948,"variant":147,"max-height":4937},[14,14127,14128,14130],{"id":4951,"level":17},[19,14129,4954],{"id":4951},[24,14131,14132,14134,14136,14142,14144],{},[27,14133,4959],{},[27,14135,4962],{},[27,14137,4965,14138],{},[24,14139,14140],{},[27,14141,4970],{},[27,14143,4973],{},[27,14145,4976],{},[14,14147,14148,14150],{"id":4979,"level":98},[19,14149,4982],{"id":4979},[103,14151,14152,14176],{"gap":105,"left-width":106,"right-width":106},[108,14153,14154,14156],{"v-slot:left":110},[364,14155,4990],{"id":4989},[24,14157,14158,14160,14168,14172],{},[27,14159,4995],{},[27,14161,4998,14162],{},[24,14163,14164],{},[27,14165,774,14166],{},[265,14167,5005],{},[27,14169,5008,14170],{},[265,14171,1474],{},[27,14173,5013,14174],{},[265,14175,1474],{},[108,14177,14178,14180,14192],{"v-slot:right":110},[364,14179,5021],{"id":5020},[24,14181,14182,14186,14190],{},[27,14183,5026,14184],{},[265,14185,5029],{},[27,14187,5032,14188],{},[265,14189,5029],{},[27,14191,5037],{},[883,14193],{"language":885,"src":5040,"label":5041},[14,14195,14196,14198],{"id":5044,"level":98},[19,14197,5047],{"id":5044},[103,14199,14200,14221],{"gap":105,"left-width":106,"right-width":106},[108,14201,14202,14204],{"v-slot:left":110},[364,14203,5055],{"id":5054},[24,14205,14206,14208,14213,14215,14217,14219],{},[27,14207,5060],{},[27,14209,5063,14210],{},[44,14211,5068],{"href":5066,"rel":14212},[48],[27,14214,5071],{},[27,14216,5074],{},[27,14218,5077],{},[27,14220,5080],{},[108,14222,14223,14225,14227,14229],{"v-slot:right":110},[364,14224,5086],{"id":5085},[883,14226],{"language":885,"src":5089,"label":5090},[40,14228,5093],{},[24,14230,14231,14235,14239,14243],{},[27,14232,14233,5101],{},[265,14234,5100],{},[27,14236,14237,5106],{},[265,14238,4598],{},[27,14240,5109,14241],{},[265,14242,5112],{},[27,14244,5115,14245],{},[265,14246,5118],{},[14,14248,14249,14251,14253,14255],{"id":5121,"level":98},[19,14250,5125],{"id":5124},[40,14252,881],{},[883,14254],{"language":885,"src":5130,"label":5131},[24,14256,14257,14259,14261],{},[27,14258,5136],{},[27,14260,5139],{},[27,14262,5142],{},[14,14264,14265,14267,14269,14271,14273,14275],{"id":5145,"level":17},[19,14266,5148],{"id":5145},[40,14268,881],{},[883,14270],{"language":885,"src":5153},[40,14272,2753],{},[883,14274],{"language":3664,"src":5158},[24,14276,14277,14279,14281],{},[27,14278,5163],{},[27,14280,5166],{},[27,14282,5169],{},[14,14284,14285,14287],{"id":1371,"level":17},[19,14286,1374],{"id":1371},[24,14288,14289,14291,14293,14295],{},[27,14290,5178],{},[27,14292,5181],{},[27,14294,5184],{},[27,14296,5187],{},[14,14298,14299,14301],{"id":436,"level":17},[19,14300,439],{"id":436},[24,14302,14303,14305,14307,14309,14311],{},[27,14304,5196],{},[27,14306,5199],{},[27,14308,5202],{},[27,14310,5205],{},[27,14312,5208,14313,5211],{},[265,14314,4598],{},[14,14316,14317,14319],{"id":1454,"level":17},[19,14318,1455],{"id":1454},[103,14320,14321,14335],{"gap":105,"left-width":106,"right-width":106},[108,14322,14323,14325],{"v-slot:left":110},[364,14324,1463],{"id":1462},[24,14326,14327,14329,14331,14333],{},[27,14328,5226],{},[27,14330,5229],{},[27,14332,5232],{},[27,14334,5235],{},[108,14336,14337,14339],{"v-slot:right":110},[364,14338,1494],{"id":1451},[24,14340,14341,14346,14351],{},[27,14342,14343],{},[44,14344,5248],{"href":5246,"rel":14345},[48],[27,14347,14348],{},[44,14349,5255],{"href":5253,"rel":14350},[48],[27,14352,14353],{},[44,14354,5262],{"href":5260,"rel":14355},[48],[14,14357,14358,14360],{"id":465,"level":17},[19,14359,468],{"id":465},[24,14361,14362,14364,14366,14368,14376],{},[27,14363,5271],{},[27,14365,5274],{},[27,14367,5277],{},[27,14369,5280,14370],{},[24,14371,14372,14374],{},[27,14373,5285],{},[27,14375,5288],{},[27,14377,5291],{},{"title":110,"searchDepth":492,"depth":492,"links":14379},[14380,14381,14382,14383,14384,14385,14386,14389,14390,14391,14392,14393,14394,14395,14396,14397,14398,14399],{"id":4549,"depth":492,"text":4541},{"id":600,"depth":492,"text":603},{"id":4581,"depth":492,"text":4584},{"id":4602,"depth":492,"text":4605},{"id":4627,"depth":492,"text":4630},{"id":4665,"depth":492,"text":4666},{"id":4694,"depth":492,"text":4697,"children":14387},[14388],{"id":4700,"depth":504,"text":4701},{"id":4775,"depth":492,"text":4776},{"id":4852,"depth":492,"text":4853},{"id":4951,"depth":492,"text":4954},{"id":4979,"depth":492,"text":4982},{"id":5044,"depth":492,"text":5047},{"id":5124,"depth":492,"text":5125},{"id":5145,"depth":492,"text":5148},{"id":1371,"depth":492,"text":1374},{"id":436,"depth":492,"text":439},{"id":1454,"depth":492,"text":1455},{"id":465,"depth":492,"text":468},{},{"title":4541,"description":5314},[5322,5323,5324],{"id":5331,"title":5332,"audience":9,"body":14404,"contentType":508,"course":509,"description":6384,"estimateBasis":6385,"estimatedDiscussionMinutes":3584,"estimatedLiveMinutes":1601,"estimatedTotalMinutes":6386,"extension":515,"meta":15173,"module":517,"navigation":518,"order":6386,"path":6388,"promptAssist":521,"seo":15174,"status":523,"stem":6390,"tags":15175,"videoDuration":6392,"videoId":6393,"videoLink":6394,"videoTitle":6395,"week":517,"__hash__":6396},{"type":11,"value":14405,"toc":15148},[14406,14428,14460,14480,14503,14523,14555,14621,14653,14687,14721,14755,14809,14855,14908,14946,14998,15048,15070,15108,15126],[14,14407,14408,14410,14412],{"id":3607,"level":17},[19,14409,3610],{"id":3607},[40,14411,5341],{},[24,14413,14414,14416,14418,14422,14426],{},[27,14415,5346],{},[27,14417,5349],{},[27,14419,5352,14420],{},[265,14421,5355],{},[27,14423,5358,14424],{},[265,14425,1794],{},[27,14427,5363],{},[14,14429,14430,14432],{"id":5366,"level":17},[19,14431,5370],{"id":5369},[103,14433,14434,14440],{"gap":105,"left-width":106,"right-width":106},[108,14435,14436,14438],{"v-slot:left":110},[40,14437,881],{},[883,14439],{"language":885,"src":5379,"label":5380},[108,14441,14442,14444,14446],{"v-slot:right":110},[40,14443,2753],{},[883,14445],{"language":2227,"src":5387,"label":2613},[24,14447,14448,14452,14456],{},[27,14449,14450,5394],{},[265,14451,691],{},[27,14453,14454,5399],{},[265,14455,3855],{},[27,14457,5402,14458,5405],{},[265,14459,691],{},[14,14461,14462,14464,14466,14468],{"id":5408,"level":17},[19,14463,5412],{"id":5411},[40,14465,5415],{},[883,14467],{"language":885,"src":5418},[24,14469,14470,14474,14478],{},[27,14471,14472,5425],{},[265,14473,265],{},[27,14475,14476,5430],{},[265,14477,756],{},[27,14479,5433],{},[14,14481,14482,14484],{"id":5436,"level":17},[19,14483,5440],{"id":5439},[24,14485,14486,14495,14497,14499,14501],{},[27,14487,5445,14488],{},[24,14489,14490],{},[27,14491,14492],{},[44,14493,5454],{"href":5452,"rel":14494},[48],[27,14496,5457],{},[27,14498,5460],{},[27,14500,5463],{},[27,14502,5466],{},[14,14504,14505,14507,14509,14511,14521],{"id":5469,"level":98},[364,14506,5473],{"id":5472},[40,14508,5476],{},[40,14510,5479],{},[24,14512,14513,14515,14519],{},[27,14514,5484],{},[27,14516,5487,14517,5491],{},[265,14518,5490],{},[27,14520,5494],{},[40,14522,5497],{},[14,14524,14525,14527,14529,14531],{"id":5500,"level":17},[19,14526,5504],{"id":5503},[40,14528,5507],{},[883,14530],{"language":3664,"src":5510},[24,14532,14533,14537,14543,14553],{},[27,14534,14535,5517],{},[265,14536,823],{},[27,14538,5520,14539,5524,14541],{},[265,14540,5523],{},[265,14542,823],{},[27,14544,14545,621,14547,625,14549,5538,14551],{},[265,14546,5531],{},[265,14548,5534],{},[265,14550,5537],{},[265,14552,823],{},[27,14554,5543],{},[14,14556,14557,14559,14619],{"id":5546,"level":98},[364,14558,5550],{"id":5549},[24,14560,14561,14585,14601,14605,14609,14613,14617],{},[27,14562,14563,5557,14565],{},[265,14564,823],{},[24,14566,14567,14573,14577,14581],{},[27,14568,14569,5565,14571,5569],{},[265,14570,5564],{},[265,14572,5568],{},[27,14574,14575,5574],{},[265,14576,5523],{},[27,14578,14579,5580],{},[265,14580,5579],{},[27,14582,14583,5586],{},[265,14584,5585],{},[27,14586,14587,5591,14589],{},[265,14588,5531],{},[24,14590,14591,14595],{},[27,14592,14593,5599],{},[265,14594,5598],{},[27,14596,14597,2327,14599,5608],{},[265,14598,5604],{},[265,14600,5607],{},[27,14602,14603,5613],{},[265,14604,5534],{},[27,14606,14607,5618],{},[265,14608,5537],{},[27,14610,14611,5624],{},[265,14612,5623],{},[27,14614,14615,5630],{},[265,14616,5629],{},[27,14618,5633],{},[40,14620,5636],{},[14,14622,14623,14625],{"id":5639,"level":17},[19,14624,5643],{"id":5642},[103,14626,14627,14633],{"gap":105,"left-width":106,"right-width":106},[108,14628,14629,14631],{"v-slot:left":110},[40,14630,881],{},[883,14632],{"language":885,"src":5652,"label":5653},[108,14634,14635,14637,14639],{"v-slot:right":110},[40,14636,5658],{},[883,14638],{"language":3664,"src":5661,"label":2613},[24,14640,14641,14645,14649,14651],{},[27,14642,14643,5669],{},[265,14644,5668],{},[27,14646,5672,14647],{},[265,14648,5355],{},[27,14650,5677],{},[27,14652,5680],{},[14,14654,14655,14657],{"id":5683,"level":17},[19,14656,5687],{"id":5686},[103,14658,14659,14665],{"gap":105,"left-width":106,"right-width":106},[108,14660,14661,14663],{"v-slot:left":110},[40,14662,881],{},[883,14664],{"language":885,"src":5696,"label":5697},[108,14666,14667,14669,14683,14685],{"v-slot:right":110},[40,14668,5702],{},[24,14670,14671,14675,14679],{},[27,14672,14673,5710],{},[265,14674,5709],{},[27,14676,14677,5715],{},[265,14678,756],{},[27,14680,14681,5720],{},[265,14682,3855],{},[40,14684,5658],{},[883,14686],{"language":3664,"src":5725,"label":2613},[14,14688,14689,14691],{"id":5728,"level":17},[19,14690,5732],{"id":5731},[103,14692,14693,14699],{"gap":105,"left-width":106,"right-width":106},[108,14694,14695,14697],{"v-slot:left":110},[40,14696,881],{},[883,14698],{"language":885,"src":5741,"label":5742},[108,14700,14701,14703,14705],{"v-slot:right":110},[40,14702,5658],{},[883,14704],{"language":3664,"src":5749,"label":2613},[24,14706,14707,14711,14719],{},[27,14708,14709,5757],{},[265,14710,5756],{},[27,14712,14713,5762,14715],{},[265,14714,3953],{},[24,14716,14717],{},[27,14718,5767],{},[27,14720,5770],{},[14,14722,14723,14725],{"id":5773,"level":17},[19,14724,5777],{"id":5776},[103,14726,14727,14733],{"gap":105,"left-width":106,"right-width":106},[108,14728,14729,14731],{"v-slot:left":110},[40,14730,881],{},[883,14732],{"language":885,"src":5786,"label":5787},[108,14734,14735,14737,14739],{"v-slot:right":110},[40,14736,5658],{},[883,14738],{"language":3664,"src":5794,"label":2613},[24,14740,14741,14745,14749,14753],{},[27,14742,14743,5801],{},[265,14744,4016],{},[27,14746,14747,5807],{},[265,14748,5806],{},[27,14750,14751,5812],{},[265,14752,5355],{},[27,14754,5815],{},[14,14756,14757,14759],{"id":5818,"level":17},[19,14758,5822],{"id":5821},[103,14760,14761,14795],{"gap":105,"left-width":106,"right-width":106},[108,14762,14763,14765],{"v-slot:left":110},[40,14764,2669],{},[24,14766,14767,14769,14781,14785,14789,14791],{},[27,14768,5833],{},[27,14770,169,14771,14773],{},[125,14772,5838],{},[24,14774,14775],{},[27,14776,5843,14777,4642,14779],{},[125,14778,5846],{},[125,14780,5849],{},[27,14782,5852,14783],{},[265,14784,1794],{},[27,14786,5857,14787],{},[265,14788,5355],{},[27,14790,5862],{},[27,14792,169,14793],{},[125,14794,5867],{},[108,14796,14797,14799,14801],{"v-slot:right":110},[40,14798,5872],{},[883,14800],{"language":3664,"src":5875,"label":5876},[24,14802,14803,14805,14807],{},[27,14804,5881],{},[27,14806,5884],{},[27,14808,5887],{},[14,14810,14811,14815],{"id":5890,"level":17},[19,14812,5894,14813],{"id":5893},[265,14814,1794],{},[103,14816,14817,14835],{"gap":105,"left-width":106,"right-width":106},[108,14818,14819,14821,14831,14833],{"v-slot:left":110},[40,14820,2669],{},[24,14822,14823,14827],{},[27,14824,169,14825],{},[125,14826,5909],{},[27,14828,169,14829],{},[125,14830,5914],{},[40,14832,4310],{},[883,14834],{"language":885,"src":5919,"label":5920},[108,14836,14837,14839,14841],{"v-slot:right":110},[40,14838,5658],{},[883,14840],{"language":3664,"src":5927,"label":2613},[24,14842,14843,14847,14851],{},[27,14844,14845,5935],{},[265,14846,5934],{},[27,14848,14849,5941],{},[265,14850,5940],{},[27,14852,5944,14853,4334],{},[265,14854,1794],{},[14,14856,14857,14861],{"id":5949,"level":17},[19,14858,5952,14859],{"id":5949},[265,14860,5955],{},[103,14862,14863,14878],{"gap":105,"left-width":106,"right-width":106},[108,14864,14865,14867,14869],{"v-slot:left":110},[40,14866,5962],{},[883,14868],{"language":885,"src":5965,"label":5966},[24,14870,14871],{},[27,14872,5971,14873,5975,14875],{},[265,14874,5974],{},[44,14876,5979],{"href":4824,"rel":14877},[48],[108,14879,14880,14882,14884],{"v-slot:right":110},[40,14881,5984],{},[883,14883],{"language":5987,"src":5988,"label":5989},[24,14885,14886,14890,14894,14896,14900,14904],{},[27,14887,14888,5996],{},[265,14889,5955],{},[27,14891,1728,14892,6001],{},[265,14893,5955],{},[27,14895,6004],{},[27,14897,6007,14898],{},[265,14899,5974],{},[27,14901,14902,6014],{},[265,14903,5604],{},[27,14905,6017,14906],{},[265,14907,5604],{},[14,14909,14910,14912],{"id":6022,"level":17},[19,14911,6026],{"id":6025},[103,14913,14914,14920],{"gap":105,"left-width":106,"right-width":106},[108,14915,14916,14918],{"v-slot:left":110},[40,14917,5962],{},[883,14919],{"language":885,"src":6035,"label":6036},[108,14921,14922,14924,14926],{"v-slot:right":110},[40,14923,6041],{},[883,14925],{"language":3664,"src":6044,"label":6045},[24,14927,14928,14932,14936,14942],{},[27,14929,14930,6053],{},[265,14931,6052],{},[27,14933,14934,6059],{},[265,14935,6058],{},[27,14937,14938,6064,14940,6067],{},[265,14939,5585],{},[265,14941,5955],{},[27,14943,6070,14944,6073],{},[265,14945,1426],{},[14,14947,14948,14952,14956],{"id":6076,"level":17},[19,14949,6080,14950,6084],{"id":6079},[265,14951,6083],{},[40,14953,6087,14954,756],{},[265,14955,6090],{},[103,14957,14958,14980],{"gap":105,"left-width":106,"right-width":106},[108,14959,14960,14962,14964,14966],{"v-slot:left":110},[40,14961,6097],{},[883,14963],{"language":885,"src":6100,"label":6101},[40,14965,6104],{},[24,14967,14968,14972,14976],{},[27,14969,6109,14970],{},[265,14971,6112],{},[27,14973,6115,14974],{},[265,14975,6118],{},[27,14977,3053,14978,6123],{},[265,14979,6118],{},[108,14981,14982,14984,14986,14988,14990],{"v-slot:right":110},[40,14983,6128],{},[883,14985],{"language":6131,"src":6132,"label":6118},[40,14987,6135],{},[883,14989],{"language":885,"src":6138,"label":6139},[24,14991,14992,14996],{},[27,14993,6144,14994],{},[265,14995,6118],{},[27,14997,6149],{},[14,14999,15000,15002,15004],{"id":6152,"level":17},[19,15001,439],{"id":436},[40,15003,6157],{},[24,15005,15006,15008,15014,15016,15020,15026,15030,15034,15038,15042],{},[27,15007,6162],{},[27,15009,6165,15010,6168,15012],{},[265,15011,5355],{},[265,15013,1794],{},[27,15015,6173],{},[27,15017,4080,15018,6178],{},[265,15019,1794],{},[27,15021,15022,5565,15024,6187],{},[265,15023,6183],{},[265,15025,6186],{},[27,15027,15028,6193],{},[265,15029,6192],{},[27,15031,15032,6198],{},[265,15033,823],{},[27,15035,15036,6203],{},[265,15037,5989],{},[27,15039,15040,6209],{},[265,15041,6208],{},[27,15043,6212,15044,6215,15046,6218],{},[265,15045,6083],{},[265,15047,5585],{},[14,15049,15050,15052,15054,15056,15062],{"id":6221,"level":17},[19,15051,6225],{"id":6224},[40,15053,881],{},[883,15055],{"language":885,"src":6230},[6232,15057,15058],{},[40,15059,6236,15060,6239],{},[265,15061,3207],{},[24,15063,15064,15066,15068],{},[27,15065,6244],{},[27,15067,6247],{},[27,15069,6250],{},[14,15071,15072,15074],{"id":1371,"level":17},[19,15073,1374],{"id":1371},[24,15075,15076,15078,15080,15084,15086,15088,15092,15098,15102,15104],{},[27,15077,6259],{},[27,15079,6262],{},[27,15081,6265,15082,5491],{},[265,15083,5490],{},[27,15085,6270],{},[27,15087,6273],{},[27,15089,6276,15090],{},[265,15091,823],{},[27,15093,6281,15094,6284,15096,6288],{},[265,15095,5564],{},[265,15097,6287],{},[27,15099,6291,15100],{},[265,15101,1794],{},[27,15103,6296],{},[27,15105,6299,15106,6302],{},[265,15107,1794],{},[14,15109,15110,15112],{"id":1462,"level":17},[19,15111,1463],{"id":1462},[24,15113,15114,15116,15118,15120,15122,15124],{},[27,15115,6311],{},[27,15117,6314],{},[27,15119,6317],{},[27,15121,6320],{},[27,15123,6323],{},[27,15125,6326],{},[14,15127,15128,15130,15132],{"id":465,"level":17},[19,15129,468],{"id":465},[40,15131,6333],{},[24,15133,15134,15136,15138,15140,15144],{},[27,15135,6338],{},[27,15137,6341],{},[27,15139,6344],{},[27,15141,6347,15142,6350],{},[265,15143,1794],{},[27,15145,4080,15146,6355],{},[265,15147,1794],{},{"title":110,"searchDepth":492,"depth":492,"links":15149},[15150,15151,15152,15153,15156,15159,15160,15161,15162,15163,15164,15165,15166,15167,15168,15169,15170,15171,15172],{"id":3607,"depth":492,"text":3610},{"id":5369,"depth":492,"text":5370},{"id":5411,"depth":492,"text":5412},{"id":5439,"depth":492,"text":5440,"children":15154},[15155],{"id":5472,"depth":504,"text":5473},{"id":5503,"depth":492,"text":5504,"children":15157},[15158],{"id":5549,"depth":504,"text":5550},{"id":5642,"depth":492,"text":5643},{"id":5686,"depth":492,"text":5687},{"id":5731,"depth":492,"text":5732},{"id":5776,"depth":492,"text":5777},{"id":5821,"depth":492,"text":5822},{"id":5893,"depth":492,"text":6373},{"id":5949,"depth":492,"text":6375},{"id":6025,"depth":492,"text":6026},{"id":6079,"depth":492,"text":6378},{"id":436,"depth":492,"text":439},{"id":6224,"depth":492,"text":6225},{"id":1371,"depth":492,"text":1374},{"id":1462,"depth":492,"text":1463},{"id":465,"depth":492,"text":468},{},{"title":5332,"description":6384},[3594,108,1829],{"id":6398,"title":6399,"audience":9,"body":15177,"contentType":508,"course":509,"description":7110,"estimateBasis":7111,"estimatedDiscussionMinutes":3584,"estimatedLiveMinutes":4527,"estimatedTotalMinutes":1602,"extension":515,"meta":15736,"module":517,"navigation":518,"order":3585,"path":7113,"promptAssist":521,"seo":15737,"status":523,"stem":7115,"tags":15738,"videoDuration":7118,"videoId":7119,"videoLink":7120,"videoTitle":7121,"week":517,"__hash__":7122},{"type":11,"value":15178,"toc":15720},[15179,15207,15245,15261,15305,15353,15399,15439,15487,15521,15591,15623,15643,15690],[14,15180,15181,15183,15185],{"id":3607,"level":17},[19,15182,3610],{"id":3607},[40,15184,3613],{},[24,15186,15187,15193,15197,15201,15205],{},[27,15188,6412,15189,2327,15191],{},[265,15190,6415],{},[265,15192,6418],{},[27,15194,6421,15195],{},[265,15196,6415],{},[27,15198,6421,15199],{},[265,15200,6418],{},[27,15202,6430,15203],{},[265,15204,6415],{},[27,15206,6435],{},[14,15208,15209,15211,15239],{"id":6438,"level":17},[19,15210,6441],{"id":6438},[24,15212,15213,15221,15229,15237],{},[27,15214,15215,6448,15217],{},[265,15216,1794],{},[24,15218,15219],{},[27,15220,6453],{},[27,15222,15223,6458,15225],{},[265,15224,6415],{},[24,15226,15227],{},[27,15228,6463],{},[27,15230,15231,6468,15233],{},[265,15232,6418],{},[24,15234,15235],{},[27,15236,6473],{},[27,15238,6476],{},[40,15240,6479,15241,4642,15243],{},[265,15242,6415],{},[265,15244,6418],{},[14,15246,15247,15249,15251,15253],{"id":637,"level":17},[19,15248,640],{"id":637},[40,15250,6490],{},[883,15252],{"label":6493,"language":885,"src":6494},[24,15254,15255,15257,15259],{},[27,15256,6499],{},[27,15258,6502],{},[27,15260,6505],{},[14,15262,15263,15267],{"id":6508,"level":17},[19,15264,6512,15265],{"id":6511},[265,15266,1794],{},[103,15268,15269,15275],{"gap":105,"left-width":106,"right-width":106},[108,15270,15271,15273],{"v-slot:left":110},[40,15272,881],{},[883,15274],{"label":6523,"language":885,"src":6524},[108,15276,15277,15279,15281],{"v-slot:right":110},[40,15278,2753],{},[883,15280],{"label":2613,"language":3664,"src":6531},[24,15282,15283,15289],{},[27,15284,15285,6538,15287],{},[265,15286,5934],{},[265,15288,1794],{},[27,15290,15291,6545,15293,6548,15295],{},[265,15292,5940],{},[265,15294,1794],{},[24,15296,15297,15301],{},[27,15298,15299,5801],{},[265,15300,4016],{},[27,15302,15303,6559],{},[265,15304,1794],{},[14,15306,15307,15311],{"id":6562,"level":17},[19,15308,6566,15309],{"id":6565},[265,15310,6415],{},[103,15312,15313,15319],{"gap":105,"left-width":106,"right-width":106},[108,15314,15315,15317],{"v-slot:left":110},[40,15316,881],{},[883,15318],{"label":6577,"language":885,"src":6578},[108,15320,15321,15323,15325],{"v-slot:right":110},[40,15322,2753],{},[883,15324],{"label":2613,"language":3664,"src":6585},[24,15326,15327,15339],{},[27,15328,15329,6593,15331,6596,15333],{},[265,15330,6592],{},[265,15332,6415],{},[24,15334,15335],{},[27,15336,15337,6604],{},[265,15338,6603],{},[27,15340,15341,6610,15343,6613,15345],{},[265,15342,6609],{},[265,15344,6415],{},[24,15346,15347],{},[27,15348,15349,6620,15351,6624],{},[265,15350,5806],{},[265,15352,6623],{},[14,15354,15355,15359],{"id":6627,"level":17},[19,15356,6631,15357],{"id":6630},[265,15358,6418],{},[103,15360,15361,15367],{"gap":105,"left-width":106,"right-width":106},[108,15362,15363,15365],{"v-slot:left":110},[40,15364,881],{},[883,15366],{"label":6642,"language":885,"src":6643},[108,15368,15369,15371,15373],{"v-slot:right":110},[40,15370,2753],{},[883,15372],{"label":2613,"language":3664,"src":6650},[24,15374,15375,15381,15385,15395],{},[27,15376,4677,15377,6657,15379,6660],{},[265,15378,6418],{},[265,15380,6415],{},[27,15382,15383],{},[265,15384,6665],{},[27,15386,6668,15387,6613,15389],{},[265,15388,6418],{},[24,15390,15391],{},[27,15392,15393],{},[265,15394,6677],{},[27,15396,15397,6682],{},[265,15398,6418],{},[14,15400,15401,15405],{"id":6685,"level":17},[19,15402,6688,15403],{"id":6685},[265,15404,6415],{},[103,15406,15407,15413],{"gap":105,"left-width":106,"right-width":106},[108,15408,15409,15411],{"v-slot:left":110},[40,15410,881],{},[883,15412],{"label":6699,"language":885,"src":6700},[108,15414,15415,15417,15419],{"v-slot:right":110},[40,15416,2753],{},[883,15418],{"label":2613,"language":3664,"src":6707},[24,15420,15421,15425,15429],{},[27,15422,15423,6714],{},[265,15424,6415],{},[27,15426,15427,6719],{},[265,15428,6418],{},[27,15430,6722,15431,15433],{},[265,15432,6418],{},[24,15434,15435],{},[27,15436,6729,15437,6732],{},[265,15438,6418],{},[14,15440,15441,15445],{"id":6735,"level":17},[19,15442,6739,15443],{"id":6738},[265,15444,6418],{},[103,15446,15447,15453],{"gap":105,"left-width":106,"right-width":106},[108,15448,15449,15451],{"v-slot:left":110},[40,15450,881],{},[883,15452],{"label":6750,"language":885,"src":6751},[108,15454,15455,15457,15459],{"v-slot:right":110},[40,15456,2753],{},[883,15458],{"label":2613,"language":3664,"src":6758},[24,15460,15461,15477],{},[27,15462,15463,6766,15465,15467],{},[265,15464,6765],{},[265,15466,6418],{},[24,15468,15469,15473],{},[27,15470,15471,6776],{},[265,15472,6775],{},[27,15474,15475,6782],{},[265,15476,6781],{},[27,15478,15479,6788,15481],{},[265,15480,6787],{},[24,15482,15483],{},[27,15484,6793,15485,6797],{},[265,15486,6796],{},[14,15488,15489,15491,15493,15495,15509,15511],{"id":6800,"level":17},[19,15490,6803],{"id":6800},[40,15492,6806],{},[40,15494,6809],{},[24,15496,15497,15501,15505],{},[27,15498,15499],{},[265,15500,1794],{},[27,15502,15503],{},[265,15504,6415],{},[27,15506,15507],{},[265,15508,6418],{},[40,15510,6826],{},[24,15512,15513,15517],{},[27,15514,15515,6833],{},[265,15516,6415],{},[27,15518,15519,6838],{},[265,15520,6418],{},[14,15522,15523,15525],{"id":6841,"level":17},[19,15524,6845],{"id":6844},[162,15526,15527,15541,15547,15555,15559,15569,15571,15577,15587],{},[27,15528,6850,15529,15531],{},[265,15530,6415],{},[24,15532,15533,15537],{},[27,15534,15535],{},[265,15536,6859],{},[27,15538,15539],{},[265,15540,6864],{},[27,15542,6867,15543],{},[24,15544,15545],{},[27,15546,6872],{},[27,15548,6875,15549],{},[24,15550,15551],{},[27,15552,6880,15553,6883],{},[265,15554,3855],{},[27,15556,6886,15557],{},[265,15558,6415],{},[27,15560,6891,15561,6894,15563],{},[265,15562,6415],{},[24,15564,15565],{},[27,15566,6899,15567,6902],{},[265,15568,6415],{},[27,15570,6905],{},[27,15572,6908,15573,6168,15575],{},[265,15574,6415],{},[265,15576,6418],{},[27,15578,6891,15579,6917,15581],{},[265,15580,6418],{},[24,15582,15583],{},[27,15584,6922,15585,6902],{},[265,15586,6418],{},[27,15588,6927,15589,6930],{},[265,15590,6415],{},[14,15592,15593,15595],{"id":1371,"level":17},[19,15594,1374],{"id":1371},[24,15596,15597,15601,15605,15611,15617,15619],{},[27,15598,6939,15599],{},[265,15600,6418],{},[27,15602,6944,15603],{},[265,15604,6415],{},[27,15606,6949,15607,6952,15609],{},[265,15608,6415],{},[265,15610,6418],{},[27,15612,6957,15613,6960,15615],{},[265,15614,6418],{},[265,15616,6418],{},[27,15618,6965],{},[27,15620,6968,15621,4334],{},[265,15622,3855],{},[14,15624,15625,15627,15629],{"id":436,"level":17},[19,15626,439],{"id":436},[40,15628,6977],{},[24,15630,15631,15633,15635,15637,15641],{},[27,15632,6982],{},[27,15634,6985],{},[27,15636,6988],{},[27,15638,6991,15639,6994],{},[265,15640,6418],{},[27,15642,6997],{},[14,15644,15645,15647],{"id":1451,"level":17},[19,15646,1455],{"id":1454},[103,15648,15649,15669],{"gap":105,"left-width":106,"right-width":106},[108,15650,15651,15653],{"v-slot:left":110},[364,15652,1463],{"id":1462},[24,15654,15655,15657,15659,15663,15667],{},[27,15656,7012],{},[27,15658,7015],{},[27,15660,15661,7020],{},[265,15662,6415],{},[27,15664,15665,7025],{},[265,15666,6418],{},[27,15668,7028],{},[108,15670,15671,15673],{"v-slot:right":110},[364,15672,1494],{"id":1451},[24,15674,15675,15680,15685],{},[27,15676,4429,15677],{},[44,15678,7041],{"href":7039,"rel":15679},[48],[27,15681,4429,15682],{},[44,15683,7048],{"href":7046,"rel":15684},[48],[27,15686,4414,15687],{},[44,15688,7055],{"href":7053,"rel":15689},[48],[14,15691,15692,15694,15696],{"id":465,"level":17},[19,15693,468],{"id":465},[40,15695,1524],{},[24,15697,15698,15706,15710,15714,15718],{},[27,15699,7066,15700,621,15702,625,15704],{},[265,15701,1794],{},[265,15703,6415],{},[265,15705,6418],{},[27,15707,6421,15708],{},[265,15709,6415],{},[27,15711,6421,15712],{},[265,15713,6418],{},[27,15715,7083,15716],{},[265,15717,6415],{},[27,15719,7088],{},{"title":110,"searchDepth":492,"depth":492,"links":15721},[15722,15723,15724,15725,15726,15727,15728,15729,15730,15731,15732,15733,15734,15735],{"id":3607,"depth":492,"text":3610},{"id":6438,"depth":492,"text":6441},{"id":637,"depth":492,"text":640},{"id":6511,"depth":492,"text":7095},{"id":6565,"depth":492,"text":7097},{"id":6630,"depth":492,"text":7099},{"id":6685,"depth":492,"text":7101},{"id":6738,"depth":492,"text":7103},{"id":6800,"depth":492,"text":6803},{"id":6844,"depth":492,"text":6845},{"id":1371,"depth":492,"text":1374},{"id":436,"depth":492,"text":439},{"id":1454,"depth":492,"text":1455},{"id":465,"depth":492,"text":468},{},{"title":6399,"description":7110},[1829,4532,6415,7117],{"id":7124,"title":7125,"audience":9,"body":15740,"contentType":508,"course":509,"description":7933,"estimateBasis":7934,"estimatedDiscussionMinutes":3584,"estimatedLiveMinutes":1602,"estimatedTotalMinutes":3585,"extension":515,"meta":16360,"module":517,"navigation":518,"order":7936,"path":7937,"promptAssist":521,"seo":16361,"status":523,"stem":7939,"tags":16362,"videoDuration":7943,"videoId":7944,"videoLink":7945,"videoTitle":7946,"week":517,"__hash__":7947},{"type":11,"value":15741,"toc":16339},[15742,15762,15780,15800,15854,15900,15926,15954,15980,16018,16053,16079,16117,16145,16165,16189,16225,16251,16303],[14,15743,15744,15746],{"id":7130,"level":17},[19,15745,7125],{"id":7133},[24,15747,15748,15750,15754,15758,15760],{},[27,15749,7138],{},[27,15751,7141,15752],{},[265,15753,6415],{},[27,15755,7146,15756],{},[265,15757,6418],{},[27,15759,7151],{},[27,15761,7154],{},[14,15763,15764,15766,15768],{"id":2511,"level":17},[19,15765,2514],{"id":2511},[40,15767,3613],{},[24,15769,15770,15772,15774,15776,15778],{},[27,15771,7165],{},[27,15773,7168],{},[27,15775,7171],{},[27,15777,7174],{},[27,15779,7177],{},[14,15781,15782,15784,15796],{"id":7180,"level":17},[19,15783,7183],{"id":7180},[24,15785,15786,15788,15790,15792,15794],{},[27,15787,7188],{},[27,15789,7191],{},[27,15791,7194],{},[27,15793,7197],{},[27,15795,7200],{},[40,15797,7203,15798],{},[265,15799,7206],{},[14,15801,15802,15804],{"id":7209,"level":17},[19,15803,640],{"id":637},[103,15805,15806,15828],{"gap":105,"left-width":106,"right-width":106},[108,15807,15808,15810],{"v-slot:left":110},[364,15809,7219],{"id":7218},[24,15811,15812,15820,15826],{},[27,15813,2679,15814,15816],{},[265,15815,7226],{},[24,15817,15818],{},[27,15819,7231],{},[27,15821,7234,15822],{},[24,15823,15824],{},[27,15825,7239],{},[27,15827,7242],{},[108,15829,15830,15832],{"v-slot:right":110},[364,15831,7248],{"id":7247},[24,15833,15834,15836,15840,15848],{},[27,15835,7253],{},[27,15837,15838,7258],{},[265,15839,5623],{},[27,15841,15842,621,15844,625,15846,7267],{},[265,15843,823],{},[265,15845,5531],{},[265,15847,5534],{},[27,15849,15850,2327,15852,7274],{},[265,15851,6415],{},[265,15853,6418],{},[14,15855,15856,15858],{"id":7277,"level":17},[19,15857,7280],{"id":7277},[103,15859,15860,15880],{"gap":105,"left-width":106,"right-width":106},[108,15861,15862,15864],{"v-slot:left":110},[364,15863,7288],{"id":7287},[24,15865,15866,15870,15874,15876],{},[27,15867,7293,15868],{},[265,15869,7296],{},[27,15871,7299,15872],{},[265,15873,6415],{},[27,15875,7304],{},[27,15877,7307,15878],{},[265,15879,7310],{},[108,15881,15882,15884],{"v-slot:right":110},[364,15883,7316],{"id":7315},[24,15885,15886,15890,15894,15896],{},[27,15887,7293,15888],{},[265,15889,7323],{},[27,15891,7299,15892],{},[265,15893,6418],{},[27,15895,7330],{},[27,15897,7307,15898],{},[265,15899,7335],{},[14,15901,15902,15904],{"id":7338,"level":17},[19,15903,7342],{"id":7341},[103,15905,15906,15920],{"gap":105,"left-width":2214,"right-width":2213},[108,15907,15908],{"v-slot:left":110},[24,15909,15910,15914,15916,15918],{},[27,15911,1683,15912],{},[265,15913,7353],{},[27,15915,7356],{},[27,15917,7359],{},[27,15919,7362],{},[108,15921,15922],{"v-slot:right":110},[40,15923,15924],{},[143,15925],{"alt":7369,"src":7370,"variant":147},[14,15927,15928,15930],{"id":7373,"level":17},[19,15929,7376],{"id":7373},[103,15931,15932,15948],{"gap":105,"left-width":2214,"right-width":2213},[108,15933,15934],{"v-slot:left":110},[24,15935,15936,15940,15944,15946],{},[27,15937,169,15938],{},[265,15939,7387],{},[27,15941,2679,15942],{},[265,15943,7392],{},[27,15945,7395],{},[27,15947,7398],{},[108,15949,15950],{"v-slot:right":110},[40,15951,15952],{},[143,15953],{"alt":7405,"src":7406,"variant":147},[14,15955,15956,15958],{"id":7409,"level":17},[19,15957,7413],{"id":7412},[103,15959,15960,15974],{"gap":105,"left-width":1709,"right-width":2254},[108,15961,15962],{"v-slot:left":110},[24,15963,15964,15966,15968,15972],{},[27,15965,7422],{},[27,15967,7425],{},[27,15969,7428,15970,7432],{},[265,15971,7431],{},[27,15973,7435],{},[108,15975,15976],{"v-slot:right":110},[40,15977,15978],{},[143,15979],{"alt":7442,"src":7443,"variant":147},[14,15981,15982,15984],{"id":7446,"level":17},[19,15983,7450],{"id":7449},[103,15985,15986,16012],{"gap":105,"left-width":2214,"right-width":2213},[108,15987,15988,15990],{"v-slot:left":110},[40,15989,7457],{},[24,15991,15992,15996,16000,16004,16008,16010],{},[27,15993,7293,15994],{},[265,15995,7296],{},[27,15997,7466,15998],{},[265,15999,6415],{},[27,16001,7471,16002],{},[265,16003,7474],{},[27,16005,7477,16006],{},[265,16007,7226],{},[27,16009,7482],{},[27,16011,7485],{},[108,16013,16014],{"v-slot:right":110},[40,16015,16016],{},[143,16017],{"alt":7492,"src":7493,"variant":147},[14,16019,16020,16022],{"id":7496,"level":17},[19,16021,7500],{"id":7499},[103,16023,16024,16047],{"gap":105,"left-width":2664,"right-width":4856},[108,16025,16026],{"v-slot:left":110},[24,16027,16028,16039,16043,16045],{},[27,16029,7509,16030,16032],{},[265,16031,5974],{},[24,16033,16034],{},[27,16035,7516,16036],{},[44,16037,5979],{"href":4824,"rel":16038},[48],[27,16040,7522,16041,7525],{},[265,16042,5955],{},[27,16044,7528],{},[27,16046,7531],{},[108,16048,16049],{"v-slot:right":110},[40,16050,16051],{},[143,16052],{"alt":7538,"src":7539,"variant":147},[14,16054,16055,16057],{"id":7542,"level":17},[19,16056,7545],{"id":7542},[103,16058,16059,16073],{"gap":105,"left-width":1709,"right-width":2254},[108,16060,16061],{"v-slot:left":110},[24,16062,16063,16065,16067,16069,16071],{},[27,16064,7554],{},[27,16066,7557],{},[27,16068,7560],{},[27,16070,7563],{},[27,16072,7566],{},[108,16074,16075],{"v-slot:right":110},[40,16076,16077],{},[143,16078],{"alt":7573,"src":7574,"variant":147},[14,16080,16081,16083],{"id":7577,"level":17},[19,16082,7581],{"id":7580},[103,16084,16085,16111],{"gap":105,"left-width":2214,"right-width":2213},[108,16086,16087,16089],{"v-slot:left":110},[40,16088,7588],{},[24,16090,16091,16093,16097,16101,16105,16109],{},[27,16092,7593],{},[27,16094,7293,16095],{},[265,16096,7323],{},[27,16098,7466,16099],{},[265,16100,6418],{},[27,16102,7471,16103],{},[265,16104,7474],{},[27,16106,7477,16107],{},[265,16108,7226],{},[27,16110,7612],{},[108,16112,16113],{"v-slot:right":110},[40,16114,16115],{},[143,16116],{"alt":7619,"src":7620,"variant":147},[14,16118,16119,16121],{"id":6841,"level":17},[19,16120,7625],{"id":6841},[162,16122,16123,16125,16127,16131,16133,16135,16137,16143],{},[27,16124,7630],{},[27,16126,7633],{},[27,16128,7636,16129],{},[265,16130,6415],{},[27,16132,7641],{},[27,16134,7644],{},[27,16136,7647],{},[27,16138,6908,16139,6168,16141,7654],{},[265,16140,6415],{},[265,16142,6418],{},[27,16144,7657],{},[14,16146,16147,16149],{"id":7660,"level":17},[19,16148,7663],{"id":7660},[24,16150,16151,16153,16155,16157,16163],{},[27,16152,7668],{},[27,16154,7671],{},[27,16156,7674],{},[27,16158,7677,16159],{},[24,16160,16161],{},[27,16162,7682],{},[27,16164,7685],{},[14,16166,16167,16169],{"id":7688,"level":17},[19,16168,7691],{"id":7688},[103,16170,16171,16183],{"gap":105,"left-width":1709,"right-width":2254},[108,16172,16173],{"v-slot:left":110},[24,16174,16175,16177,16179,16181],{},[27,16176,7700],{},[27,16178,7703],{},[27,16180,7706],{},[27,16182,7709],{},[108,16184,16185],{"v-slot:right":110},[40,16186,16187],{},[143,16188],{"alt":7716,"src":7717,"variant":147},[14,16190,16191,16193],{"id":7720,"level":17},[19,16192,7723],{"id":7720},[24,16194,16195,16203,16209,16217],{},[27,16196,7728,16197],{},[24,16198,16199],{},[27,16200,6880,16201,7735],{},[265,16202,5623],{},[27,16204,7738,16205],{},[24,16206,16207],{},[27,16208,7743],{},[27,16210,7746,16211],{},[24,16212,16213],{},[27,16214,6880,16215,7753],{},[265,16216,5974],{},[27,16218,7756,16219],{},[24,16220,16221,16223],{},[27,16222,7761],{},[27,16224,7764],{},[14,16226,16227,16229],{"id":1371,"level":17},[19,16228,1374],{"id":1371},[24,16230,16231,16239,16241,16245,16247,16249],{},[27,16232,7773,16233,7776,16235,1200,16237],{},[265,16234,1794],{},[265,16236,6415],{},[265,16238,6418],{},[27,16240,7783],{},[27,16242,7786,16243],{},[265,16244,5974],{},[27,16246,7791],{},[27,16248,7794],{},[27,16250,7797],{},[14,16252,16253,16255],{"id":1454,"level":17},[19,16254,1455],{"id":1454},[103,16256,16257,16277],{"gap":105,"left-width":106,"right-width":106},[108,16258,16259,16261,16265,16269,16273],{"v-slot:left":110},[364,16260,1463],{"id":1462},[40,16262,16263,7813],{},[125,16264,7812],{},[40,16266,16267,7819],{},[125,16268,7818],{},[40,16270,16271,7825],{},[125,16272,7824],{},[40,16274,16275,7831],{},[125,16276,7830],{},[108,16278,16279,16281],{"v-slot:right":110},[364,16280,1494],{"id":1451},[24,16282,16283,16288,16293,16298],{},[27,16284,16285],{},[44,16286,7844],{"href":7842,"rel":16287},[48],[27,16289,16290],{},[44,16291,7851],{"href":7849,"rel":16292},[48],[27,16294,16295],{},[44,16296,7858],{"href":7856,"rel":16297},[48],[27,16299,16300],{},[44,16301,7865],{"href":7863,"rel":16302},[48],[14,16304,16305,16307,16309],{"id":465,"level":17},[19,16306,468],{"id":465},[40,16308,7872],{},[24,16310,16311,16313,16315,16321,16323,16325],{},[27,16312,7877],{},[27,16314,7880],{},[27,16316,7883,16317,5975,16319],{},[265,16318,5974],{},[265,16320,5979],{},[27,16322,7890],{},[27,16324,7893],{},[27,16326,7896,16327],{},[24,16328,16329,16331,16335],{},[27,16330,7901],{},[27,16332,16333,7906],{},[265,16334,6415],{},[27,16336,16337,7911],{},[265,16338,6418],{},{"title":110,"searchDepth":492,"depth":492,"links":16340},[16341,16342,16343,16344,16345,16346,16347,16348,16349,16350,16351,16352,16353,16354,16355,16356,16357,16358,16359],{"id":7133,"depth":492,"text":7125},{"id":2511,"depth":492,"text":2514},{"id":7180,"depth":492,"text":7183},{"id":637,"depth":492,"text":640},{"id":7277,"depth":492,"text":7280},{"id":7341,"depth":492,"text":7342},{"id":7373,"depth":492,"text":7376},{"id":7412,"depth":492,"text":7413},{"id":7449,"depth":492,"text":7450},{"id":7499,"depth":492,"text":7500},{"id":7542,"depth":492,"text":7545},{"id":7580,"depth":492,"text":7581},{"id":6841,"depth":492,"text":7625},{"id":7660,"depth":492,"text":7663},{"id":7688,"depth":492,"text":7691},{"id":7720,"depth":492,"text":7723},{"id":1371,"depth":492,"text":1374},{"id":1454,"depth":492,"text":1455},{"id":465,"depth":492,"text":468},{},{"title":7125,"description":7933},[7941,7942,6415,7117],{"id":7949,"title":7950,"audience":9,"body":16364,"contentType":508,"course":509,"description":10625,"estimateBasis":10626,"estimatedDiscussionMinutes":10627,"estimatedLiveMinutes":10628,"estimatedTotalMinutes":10629,"extension":515,"meta":18327,"module":517,"navigation":518,"order":4525,"path":10631,"promptAssist":521,"seo":18328,"status":523,"stem":10633,"tags":18329,"videoDuration":10639,"videoId":10640,"videoLink":10641,"videoTitle":10642,"week":517,"__hash__":10643},{"type":11,"value":16365,"toc":18260},[16366,16386,16418,16444,16494,16516,16534,16558,16578,16600,16622,16642,16666,16688,16714,16760,16786,16820,16854,16888,16924,16966,16992,17018,17046,17070,17096,17120,17142,17164,17186,17208,17230,17256,17280,17304,17328,17364,17366,17396,17414,17444,17478,17536,17572,17594,17614,17634,17674,17692,17728,17762,17802,17844,17872,17894,17921,17945,17971,18009,18045,18057,18077,18109,18161,18238],[14,16367,16368,16370],{"id":7955,"level":17},[19,16369,7950],{"id":7958},[24,16371,16372,16374,16376,16378,16380,16384],{},[27,16373,7963],{},[27,16375,7966],{},[27,16377,7969],{},[27,16379,7972],{},[27,16381,7975,16382,7978],{},[265,16383,823],{},[27,16385,7981],{},[14,16387,16388,16390,16392,16400,16402],{"id":7984,"level":17},[19,16389,7987],{"id":7984},[40,16391,7990],{},[24,16393,16394,16396,16398],{},[27,16395,7995],{},[27,16397,7998],{},[27,16399,8001],{},[40,16401,8004],{},[24,16403,16404,16408,16412,16414,16416],{},[27,16405,8009,16406],{},[265,16407,8012],{},[27,16409,8015,16410],{},[265,16411,823],{},[27,16413,8020],{},[27,16415,8023],{},[27,16417,8026],{},[14,16419,16420,16422,16424,16438,16440],{"id":8029,"level":17},[19,16421,8032],{"id":8029},[40,16423,8035],{},[24,16425,16426,16428,16430,16436],{},[27,16427,8040],{},[27,16429,8043],{},[27,16431,8046,16432],{},[24,16433,16434],{},[27,16435,8051],{},[27,16437,8054],{},[40,16439,8057],{},[1926,16441,16442],{"type":3201},[40,16443,8062],{},[14,16445,16446,16448],{"id":637,"level":17},[19,16447,640],{"id":637},[24,16449,16450,16463,16476,16478,16480,16482,16492],{},[27,16451,8071,16452],{},[24,16453,16454,16459,16461],{},[27,16455,16456],{},[44,16457,8080],{"href":8078,"rel":16458},[48],[27,16460,8083],{},[27,16462,8086],{},[27,16464,8089,16465],{},[24,16466,16467,16472,16474],{},[27,16468,16469],{},[44,16470,8098],{"href":8096,"rel":16471},[48],[27,16473,8101],{},[27,16475,8104],{},[27,16477,8107],{},[27,16479,8110],{},[27,16481,8113],{},[27,16483,8116,16484,8120,16486],{},[265,16485,8119],{},[24,16487,16488],{},[27,16489,16490,8128],{},[265,16491,8127],{},[27,16493,8131],{},[14,16495,16496,16498],{"id":8134,"level":17},[19,16497,8137],{"id":8134},[24,16499,16500,16502,16504,16506,16510,16512,16514],{},[27,16501,8142],{},[27,16503,8145],{},[27,16505,8148],{},[27,16507,8151,16508],{},[265,16509,8154],{},[27,16511,8157],{},[27,16513,8160],{},[27,16515,8163],{},[14,16517,16518,16520],{"id":8166,"level":17},[19,16519,8170],{"id":8169},[24,16521,16522,16524,16526,16528,16530,16532],{},[27,16523,8175],{},[27,16525,8178],{},[27,16527,8181],{},[27,16529,8184],{},[27,16531,8187],{},[27,16533,8190],{},[14,16535,16536,16538],{"id":8193,"level":98},[19,16537,8196],{"id":8193},[103,16539,16540,16546],{"gap":105,"left-width":1708,"right-width":1709,"stack":1710},[108,16541,16542],{"v-slot:left":110},[40,16543,16544],{},[143,16545],{"alt":8205,"src":8206,"variant":147},[108,16547,16548],{"v-slot:right":110},[24,16549,16550,16554,16556],{},[27,16551,8213,16552],{},[265,16553,8216],{},[27,16555,8219],{},[27,16557,8222],{},[14,16559,16560,16562],{"id":8225,"level":98},[19,16561,8228],{"id":8225},[103,16563,16564,16570],{"gap":105,"left-width":1708,"right-width":1709,"stack":1710},[108,16565,16566],{"v-slot:left":110},[40,16567,16568],{},[143,16569],{"alt":8237,"src":8238,"variant":147},[108,16571,16572],{"v-slot:right":110},[24,16573,16574,16576],{},[27,16575,8245],{},[27,16577,8248],{},[14,16579,16580,16582],{"id":8251,"level":98},[19,16581,8254],{"id":8251},[103,16583,16584,16590],{"gap":105,"left-width":1708,"right-width":1709,"stack":1710},[108,16585,16586],{"v-slot:left":110},[40,16587,16588],{},[143,16589],{"alt":8263,"src":8264,"variant":147},[108,16591,16592],{"v-slot:right":110},[24,16593,16594,16596,16598],{},[27,16595,8271],{},[27,16597,8274],{},[27,16599,8277],{},[14,16601,16602,16604],{"id":8280,"level":98},[19,16603,8283],{"id":8280},[103,16605,16606,16612],{"gap":105,"left-width":1708,"right-width":1709,"stack":1710},[108,16607,16608],{"v-slot:left":110},[40,16609,16610],{},[143,16611],{"alt":8292,"src":8293,"variant":147},[108,16613,16614],{"v-slot:right":110},[24,16615,16616,16618,16620],{},[27,16617,8300],{},[27,16619,8303],{},[27,16621,8306],{},[14,16623,16624,16626],{"id":8309,"level":98},[19,16625,8313],{"id":8312},[103,16627,16628,16634],{"gap":105,"left-width":1708,"right-width":1709,"stack":1710},[108,16629,16630],{"v-slot:left":110},[40,16631,16632],{},[143,16633],{"alt":8322,"src":8323,"variant":147},[108,16635,16636],{"v-slot:right":110},[24,16637,16638,16640],{},[27,16639,8330],{},[27,16641,8333],{},[14,16643,16644,16646],{"id":8336,"level":98},[19,16645,8339],{"id":8336},[103,16647,16648,16654],{"gap":105,"left-width":1708,"right-width":1709,"stack":1710},[108,16649,16650],{"v-slot:left":110},[40,16651,16652],{},[143,16653],{"alt":8348,"src":8349,"variant":147},[108,16655,16656],{"v-slot:right":110},[24,16657,16658,16660],{},[27,16659,8356],{},[27,16661,8359,16662],{},[24,16663,16664],{},[27,16665,8364],{},[14,16667,16668,16670],{"id":8367,"level":98},[19,16669,8370],{"id":8367},[103,16671,16672,16678],{"gap":105,"left-width":1708,"right-width":1709,"stack":1710},[108,16673,16674],{"v-slot:left":110},[40,16675,16676],{},[143,16677],{"alt":8379,"src":8380,"variant":147},[108,16679,16680],{"v-slot:right":110},[24,16681,16682,16684,16686],{},[27,16683,2074],{},[27,16685,8389],{},[27,16687,8392],{},[14,16689,16690,16692],{"id":8395,"level":17},[19,16691,8399],{"id":8398},[103,16693,16694,16708],{"gap":105,"left-width":2664,"right-width":4856,"stack":1710},[108,16695,16696],{"v-slot:left":110},[24,16697,16698,16700,16702,16704,16706],{},[27,16699,8408],{},[27,16701,8411],{},[27,16703,8414],{},[27,16705,8417],{},[27,16707,8420],{},[108,16709,16710],{"v-slot:right":110},[40,16711,16712],{},[143,16713],{"alt":8427,"src":8428,"variant":147},[14,16715,16716,16718,16720],{"id":8431,"level":17},[19,16717,8435],{"id":8434},[40,16719,8438],{},[24,16721,16722,16724,16730,16740,16750,16754,16756,16758],{},[27,16723,8443],{},[27,16725,8446,16726],{},[24,16727,16728],{},[27,16729,8451],{},[27,16731,8454,16732,8458,16734],{},[265,16733,8457],{},[24,16735,16736],{},[27,16737,1149,16738,8466],{},[265,16739,8465],{},[27,16741,8469,16742,8472,16744],{},[265,16743,8119],{},[24,16745,16746],{},[27,16747,16748,8128],{},[265,16749,8127],{},[27,16751,8481,16752,8484],{},[265,16753,517],{},[27,16755,8487],{},[27,16757,8490],{},[27,16759,8493],{},[14,16761,16762,16764],{"id":8496,"level":98},[19,16763,8499],{"id":8496},[103,16765,16766,16772],{"gap":105,"left-width":1708,"right-width":1709,"stack":1710},[108,16767,16768],{"v-slot:left":110},[40,16769,16770],{},[143,16771],{"alt":8508,"src":8509,"variant":147},[108,16773,16774],{"v-slot:right":110},[24,16775,16776,16778,16782,16784],{},[27,16777,8516],{},[27,16779,8519,16780],{},[265,16781,8522],{},[27,16783,8525],{},[27,16785,8528],{},[14,16787,16788,16790],{"id":8531,"level":98},[19,16789,8534],{"id":8531},[103,16791,16792,16798],{"gap":105,"left-width":1708,"right-width":1709,"stack":1710},[108,16793,16794],{"v-slot:left":110},[40,16795,16796],{},[143,16797],{"alt":8543,"src":8544,"variant":147},[108,16799,16800],{"v-slot:right":110},[24,16801,16802,16806,16810,16812],{},[27,16803,8551,16804],{},[265,16805,8554],{},[27,16807,8557,16808],{},[265,16809,8560],{},[27,16811,8563],{},[27,16813,1728,16814,8569,16816],{},[265,16815,8568],{},[24,16817,16818],{},[27,16819,8574],{},[14,16821,16822,16824],{"id":8577,"level":98},[19,16823,8580],{"id":8577},[103,16825,16826,16832],{"gap":105,"left-width":1708,"right-width":1709,"stack":1710},[108,16827,16828],{"v-slot:left":110},[40,16829,16830],{},[143,16831],{"alt":8589,"src":8590,"variant":147},[108,16833,16834],{"v-slot:right":110},[24,16835,16836,16846,16850,16852],{},[27,16837,8454,16838,8458,16840],{},[265,16839,8599],{},[24,16841,16842,16844],{},[27,16843,8604],{},[27,16845,8607],{},[27,16847,8481,16848],{},[265,16849,517],{},[27,16851,8614],{},[27,16853,8617],{},[14,16855,16856,16858],{"id":8620,"level":98},[19,16857,8623],{"id":8620},[103,16859,16860,16866],{"gap":105,"left-width":1708,"right-width":1709,"stack":1710},[108,16861,16862],{"v-slot:left":110},[40,16863,16864],{},[143,16865],{"alt":8632,"src":8633,"variant":147},[108,16867,16868],{"v-slot:right":110},[24,16869,16870,16874,16876,16886],{},[27,16871,8640,16872],{},[265,16873,8643],{},[27,16875,8646],{},[27,16877,8649,16878,16880],{},[265,16879,8119],{},[24,16881,16882],{},[27,16883,16884,8658],{},[265,16885,8127],{},[27,16887,8661],{},[14,16889,16890,16892],{"id":8664,"level":98},[19,16891,8667],{"id":8664},[103,16893,16894,16900],{"gap":105,"left-width":1708,"right-width":1709,"stack":1710},[108,16895,16896],{"v-slot:left":110},[40,16897,16898],{},[143,16899],{"alt":8676,"src":8677,"variant":147},[108,16901,16902],{"v-slot:right":110},[24,16903,16904,16906,16914,16916],{},[27,16905,8684],{},[27,16907,169,16908,16910],{},[265,16909,8689],{},[24,16911,16912],{},[27,16913,8694],{},[27,16915,8697],{},[27,16917,8700,16918],{},[24,16919,16920],{},[27,16921,8705,16922,8708],{},[265,16923,3593],{},[14,16925,16926,16928,16930],{"id":8711,"level":17},[19,16927,8715],{"id":8714},[40,16929,8718],{},[24,16931,16932,16934,16936,16938,16940,16942,16964],{},[27,16933,8723],{},[27,16935,8726],{},[27,16937,8729],{},[27,16939,8732],{},[27,16941,8735],{},[27,16943,8738,16944],{},[24,16945,16946,16950,16956,16960],{},[27,16947,16948,8747],{},[8744,16949,8746],{},[27,16951,16952,8753,16954,8757],{},[8744,16953,8752],{},[8744,16955,8756],{},[27,16957,16958,8763],{},[8744,16959,8762],{},[27,16961,16962,8768],{},[8744,16963,1233],{},[27,16965,8771],{},[14,16967,16968,16970],{"id":8774,"level":98},[19,16969,8778],{"id":8777},[103,16971,16972,16978],{"gap":515,"left-width":8781,"right-width":8782,"stack":1710},[108,16973,16974],{"v-slot:left":110},[40,16975,16976],{},[143,16977],{"alt":8789,"src":8790,"variant":8791},[108,16979,16980],{"v-slot:right":110},[24,16981,16982,16986,16990],{},[27,16983,2679,16984],{},[265,16985,8800],{},[27,16987,1265,16988],{},[8744,16989,1233],{},[27,16991,8807],{},[14,16993,16994,16996],{"id":8810,"level":98},[19,16995,8814],{"id":8813},[103,16997,16998,17004],{"gap":515,"left-width":8781,"right-width":8782,"stack":1710},[108,16999,17000],{"v-slot:left":110},[40,17001,17002],{},[143,17003],{"alt":8823,"src":8824,"variant":8791},[108,17005,17006],{"v-slot:right":110},[24,17007,17008,17010,17014],{},[27,17009,8831],{},[27,17011,17012,8837],{},[265,17013,8836],{},[27,17015,1265,17016,8842],{},[8744,17017,1233],{},[14,17019,17020,17022],{"id":8845,"level":98},[19,17021,8849],{"id":8848},[103,17023,17024,17030],{"gap":515,"left-width":8781,"right-width":8782,"stack":1710},[108,17025,17026],{"v-slot:left":110},[40,17027,17028],{},[143,17029],{"alt":8858,"src":8859,"variant":8791},[108,17031,17032],{"v-slot:right":110},[24,17033,17034,17042,17044],{},[27,17035,2679,17036,17038],{},[265,17037,8868],{},[24,17039,17040],{},[27,17041,8873],{},[27,17043,8876],{},[27,17045,8879],{},[14,17047,17048,17050],{"id":8882,"level":98},[19,17049,8886],{"id":8885},[103,17051,17052,17058],{"gap":515,"left-width":8781,"right-width":8782,"stack":1710},[108,17053,17054],{"v-slot:left":110},[40,17055,17056],{},[143,17057],{"alt":8895,"src":8896,"variant":8791},[108,17059,17060],{"v-slot:right":110},[24,17061,17062,17064,17068],{},[27,17063,8903],{},[27,17065,8906,17066],{},[265,17067,8909],{},[27,17069,8912],{},[14,17071,17072,17074],{"id":8915,"level":98},[19,17073,8919],{"id":8918},[103,17075,17076,17082],{"gap":515,"left-width":8781,"right-width":8782,"stack":1710},[108,17077,17078],{"v-slot:left":110},[40,17079,17080],{},[143,17081],{"alt":8928,"src":8929,"variant":8791},[108,17083,17084],{"v-slot:right":110},[24,17085,17086,17092,17094],{},[27,17087,8936,17088,8940,17090],{},[265,17089,8939],{},[265,17091,8943],{},[27,17093,8946],{},[27,17095,8949],{},[14,17097,17098,17100],{"id":8952,"level":98},[19,17099,8956],{"id":8955},[103,17101,17102,17108],{"gap":515,"left-width":8781,"right-width":8782,"stack":1710},[108,17103,17104],{"v-slot:left":110},[40,17105,17106],{},[143,17107],{"alt":8965,"src":8966,"variant":8791},[108,17109,17110],{"v-slot:right":110},[24,17111,17112,17114,17118],{},[27,17113,8973],{},[27,17115,17116,8979],{},[265,17117,8978],{},[27,17119,8982],{},[14,17121,17122,17124],{"id":8985,"level":98},[19,17123,8989],{"id":8988},[103,17125,17126,17132],{"gap":515,"left-width":8781,"right-width":8782,"stack":1710},[108,17127,17128],{"v-slot:left":110},[40,17129,17130],{},[143,17131],{"alt":8998,"src":8999,"variant":8791},[108,17133,17134],{"v-slot:right":110},[24,17135,17136,17138,17140],{},[27,17137,9006],{},[27,17139,9009],{},[27,17141,9012],{},[14,17143,17144,17146],{"id":9015,"level":98},[19,17145,9019],{"id":9018},[103,17147,17148,17154],{"gap":515,"left-width":8781,"right-width":8782,"stack":1710},[108,17149,17150],{"v-slot:left":110},[40,17151,17152],{},[143,17153],{"alt":9028,"src":9029,"variant":8791},[108,17155,17156],{"v-slot:right":110},[24,17157,17158,17160,17162],{},[27,17159,9036],{},[27,17161,9039],{},[27,17163,9042],{},[14,17165,17166,17168],{"id":9045,"level":98},[19,17167,9049],{"id":9048},[103,17169,17170,17176],{"gap":515,"left-width":8781,"right-width":8782,"stack":1710},[108,17171,17172],{"v-slot:left":110},[40,17173,17174],{},[143,17175],{"alt":9058,"src":9059,"variant":8791},[108,17177,17178],{"v-slot:right":110},[24,17179,17180,17182,17184],{},[27,17181,9066],{},[27,17183,9069],{},[27,17185,9072],{},[14,17187,17188,17190],{"id":9075,"level":98},[19,17189,9079],{"id":9078},[103,17191,17192,17198],{"gap":515,"left-width":8781,"right-width":8782,"stack":1710},[108,17193,17194],{"v-slot:left":110},[40,17195,17196],{},[143,17197],{"alt":9088,"src":9089,"variant":8791},[108,17199,17200],{"v-slot:right":110},[24,17201,17202,17204,17206],{},[27,17203,9096],{},[27,17205,9099],{},[27,17207,9102],{},[14,17209,17210,17212],{"id":9105,"level":98},[19,17211,9109],{"id":9108},[103,17213,17214,17220],{"gap":515,"left-width":8781,"right-width":8782,"stack":1710},[108,17215,17216],{"v-slot:left":110},[40,17217,17218],{},[143,17219],{"alt":9118,"src":9119,"variant":8791},[108,17221,17222],{"v-slot:right":110},[24,17223,17224,17226,17228],{},[27,17225,9126],{},[27,17227,9129],{},[27,17229,9132],{},[14,17231,17232,17234],{"id":9135,"level":98},[19,17233,9139],{"id":9138},[103,17235,17236,17242],{"gap":515,"left-width":8781,"right-width":8782,"stack":1710},[108,17237,17238],{"v-slot:left":110},[40,17239,17240],{},[143,17241],{"alt":9148,"src":9149,"variant":8791},[108,17243,17244],{"v-slot:right":110},[24,17245,17246,17248,17252,17254],{},[27,17247,9156],{},[27,17249,9159,17250],{},[265,17251,8522],{},[27,17253,4810],{},[27,17255,9166],{},[14,17257,17258,17260],{"id":9169,"level":98},[19,17259,9173],{"id":9172},[103,17261,17262,17268],{"gap":515,"left-width":8781,"right-width":8782,"stack":1710},[108,17263,17264],{"v-slot:left":110},[40,17265,17266],{},[143,17267],{"alt":9182,"src":9183,"variant":8791},[108,17269,17270],{"v-slot:right":110},[24,17271,17272,17276,17278],{},[27,17273,2679,17274],{},[265,17275,9192],{},[27,17277,9195],{},[27,17279,9198],{},[14,17281,17282,17284],{"id":9201,"level":98},[19,17283,9205],{"id":9204},[103,17285,17286,17292],{"gap":515,"left-width":8781,"right-width":8782,"stack":1710},[108,17287,17288],{"v-slot:left":110},[40,17289,17290],{},[143,17291],{"alt":9214,"src":9215,"variant":8791},[108,17293,17294],{"v-slot:right":110},[24,17295,17296,17300,17302],{},[27,17297,6880,17298],{},[265,17299,9224],{},[27,17301,9227],{},[27,17303,9230],{},[14,17305,17306,17308],{"id":9233,"level":98},[19,17307,9237],{"id":9236},[103,17309,17310,17316],{"gap":515,"left-width":8781,"right-width":8782,"stack":1710},[108,17311,17312],{"v-slot:left":110},[40,17313,17314],{},[143,17315],{"alt":9246,"src":9247,"variant":8791},[108,17317,17318],{"v-slot:right":110},[24,17319,17320,17322,17326],{},[27,17321,9254],{},[27,17323,9257,17324],{},[265,17325,6090],{},[27,17327,9262],{},[14,17329,17330,17332],{"id":9265,"level":98},[19,17331,9269],{"id":9268},[103,17333,17334,17340],{"gap":515,"left-width":8781,"right-width":8782,"stack":1710},[108,17335,17336],{"v-slot:left":110},[40,17337,17338],{},[143,17339],{"alt":9278,"src":9279,"variant":8791},[108,17341,17342,17360],{"v-slot:right":110},[24,17343,17344,17346,17348,17354,17358],{},[27,17345,9286],{},[27,17347,9289],{},[27,17349,9292,17350,9295,17352],{},[265,17351,8457],{},[265,17353,8465],{},[27,17355,9300,17356,9303],{},[265,17357,8457],{},[27,17359,9306],{},[1926,17361,17362],{"type":3201},[40,17363,9311],{},[40,17365,1934],{},[14,17367,17368,17370,17372],{"id":9316,"level":17},[19,17369,9320],{"id":9319},[40,17371,9323],{},[24,17373,17374,17378,17384,17390,17394],{},[27,17375,9328,17376],{},[265,17377,9331],{},[27,17379,9334,17380,9338,17382],{},[265,17381,9337],{},[265,17383,9337],{},[27,17385,9343,17386,9338,17388],{},[265,17387,9346],{},[265,17389,7936],{},[27,17391,1149,17392,9353],{},[265,17393,8154],{},[27,17395,9356],{},[14,17397,17398,17400,17410],{"id":9359,"level":98},[19,17399,9363],{"id":9362},[24,17401,17402,17404,17408],{},[27,17403,9368],{},[27,17405,9371,17406],{},[265,17407,9331],{},[27,17409,9376],{},[40,17411,17412],{},[143,17413],{"alt":9381,"src":9382,"variant":8791},[14,17415,17416,17418,17440],{"id":9385,"level":98},[19,17417,9389],{"id":9388},[24,17419,17420,17426,17432],{},[27,17421,9394,17422,9397,17424],{},[265,17423,9337],{},[265,17425,9337],{},[27,17427,9402,17428,9397,17430],{},[265,17429,9346],{},[265,17431,7936],{},[27,17433,9409,17434,9412,17436,9397,17438],{},[265,17435,9337],{},[265,17437,9415],{},[265,17439,9337],{},[40,17441,17442],{},[143,17443],{"alt":9422,"src":9423,"variant":8791},[14,17445,17446,17448,17450,17452,17454,17456],{"id":9426,"level":17},[19,17447,9430],{"id":9429},[40,17449,9433],{},[883,17451],{"language":885,"src":9436},[40,17453,9439],{},[883,17455],{"language":3664,"src":9442},[24,17457,17458,17462,17468,17470,17472],{},[27,17459,9447,17460,9451],{},[265,17461,9450],{},[27,17463,9454,17464,9457,17466,9460],{},[265,17465,3128],{},[265,17467,8154],{},[27,17469,9463],{},[27,17471,9466],{},[27,17473,17474,1200,17476,9475],{},[265,17475,9471],{},[265,17477,9474],{},[14,17479,17480,17482,17484],{"id":9478,"level":17},[19,17481,9482],{"id":9481},[40,17483,9485],{},[103,17485,17486,17516],{"gap":105,"left-width":2254,"right-width":106,"stack":1710},[108,17487,17488,17490,17492],{"v-slot:left":110},[40,17489,9492],{},[883,17491],{"language":885,"src":9495},[24,17493,17494,17498,17502,17506,17510],{},[27,17495,17496,9503],{},[265,17497,9502],{},[27,17499,17500,9509],{},[265,17501,9508],{},[27,17503,17504,9515],{},[265,17505,9514],{},[27,17507,17508,9521],{},[265,17509,9520],{},[27,17511,2171,17512,9526,17514],{},[265,17513,9502],{},[265,17515,9529],{},[108,17517,17518,17520,17522],{"v-slot:right":110},[40,17519,9534],{},[883,17521],{"language":885,"src":9537},[24,17523,17524,17528,17530,17534],{},[27,17525,9542,17526],{},[265,17527,8978],{},[27,17529,9547],{},[27,17531,1149,17532,9353],{},[265,17533,8154],{},[27,17535,9554],{},[14,17537,17538,17540],{"id":9557,"level":17},[19,17539,9561],{"id":9560},[103,17541,17542,17566],{"gap":105,"left-width":1709,"right-width":2254,"stack":1710},[108,17543,17544,17546],{"v-slot:left":110},[40,17545,9568],{},[24,17547,17548,17550,17552,17554,17556,17558,17560,17562,17564],{},[27,17549,9573],{},[27,17551,9576],{},[27,17553,9579],{},[27,17555,9582],{},[27,17557,9585],{},[27,17559,9588],{},[27,17561,9591],{},[27,17563,9594],{},[27,17565,9597],{},[108,17567,17568],{"v-slot:right":110},[40,17569,17570],{},[143,17571],{"alt":9604,"src":9605,"variant":147},[14,17573,17574,17576,17578,17580],{"id":9608,"level":17},[19,17575,9612],{"id":9611},[40,17577,9615],{},[883,17579],{"language":885,"src":9618},[24,17581,17582,17588,17592],{},[27,17583,2361,17584,2327,17586,9627],{},[265,17585,9514],{},[265,17587,9520],{},[27,17589,17590,9633],{},[265,17591,9632],{},[27,17593,9636],{},[14,17595,17596,17598,17600,17602],{"id":9639,"level":98},[19,17597,9643],{"id":9642},[40,17599,9646],{},[883,17601],{"language":885,"src":9649},[24,17603,17604,17608,17612],{},[27,17605,17606,9657],{},[265,17607,9656],{},[27,17609,17610,9663],{},[265,17611,9662],{},[27,17613,9666],{},[14,17615,17616,17618,17620,17622],{"id":9669,"level":17},[19,17617,9673],{"id":9672},[40,17619,9676],{},[883,17621],{"language":885,"src":9679},[24,17623,17624,17628,17632],{},[27,17625,17626,9687],{},[265,17627,9686],{},[27,17629,17630,9693],{},[265,17631,9692],{},[27,17633,9696],{},[14,17635,17636,17638,17640,17642,17654,17656],{"id":9699,"level":98},[19,17637,9703],{"id":9702},[40,17639,9646],{},[883,17641],{"language":885,"src":9708},[24,17643,17644,17648,17652],{},[27,17645,17646,9716],{},[265,17647,9715],{},[27,17649,17650,9722],{},[265,17651,9721],{},[27,17653,9725],{},[40,17655,9728],{},[24,17657,17658,17662,17666,17670],{},[27,17659,17660],{},[265,17661,823],{},[27,17663,17664],{},[265,17665,5531],{},[27,17667,17668],{},[265,17669,5534],{},[27,17671,17672],{},[265,17673,5537],{},[14,17675,17676,17678,17690],{"id":9749,"level":98},[19,17677,9753],{"id":9752},[24,17679,17680,17682,17688],{},[27,17681,9758],{},[27,17683,2361,17684,1200,17686,9765],{},[265,17685,812],{},[265,17687,1032],{},[27,17689,9768],{},[40,17691,9771],{},[14,17693,17694,17696,17698,17700],{"id":9774,"level":17},[19,17695,9778],{"id":9777},[40,17697,9615],{},[883,17699],{"language":885,"src":9783},[24,17701,17702,17706,17710,17714,17718,17722],{},[27,17703,17704,9791],{},[265,17705,9790],{},[27,17707,17708,9796],{},[265,17709,5324],{},[27,17711,17712,9802],{},[265,17713,9801],{},[27,17715,17716,9808],{},[265,17717,9807],{},[27,17719,17720,9814],{},[265,17721,9813],{},[27,17723,2361,17724,2327,17726,9821],{},[265,17725,9514],{},[265,17727,9520],{},[14,17729,17730,17732,17736],{"id":9824,"level":98},[19,17731,9828],{"id":9827},[40,17733,9831,17734,9835],{},[265,17735,9834],{},[103,17737,17738,17748],{"gap":105,"left-width":106,"right-width":106},[108,17739,17740,17742,17744,17746],{"v-slot:left":110},[40,17741,9842],{},[883,17743],{"language":885,"src":9845},[40,17745,9848],{},[883,17747],{"language":885,"src":9851},[108,17749,17750],{"v-slot:right":110},[24,17751,17752,17754,17758,17760],{},[27,17753,9858],{},[27,17755,9861,17756],{},[265,17757,8457],{},[27,17759,9866],{},[27,17761,9869],{},[14,17763,17764,17766,17770],{"id":9872,"level":98},[19,17765,9876],{"id":9875},[40,17767,9879,17768,9882],{},[265,17769,8457],{},[103,17771,17772,17782],{"gap":105,"left-width":106,"right-width":106},[108,17773,17774,17776,17780],{"v-slot:left":110},[40,17775,9889],{},[40,17777,17778],{},[265,17779,9894],{},[883,17781],{"language":885,"src":9897},[108,17783,17784,17786,17788],{"v-slot:right":110},[40,17785,9902],{},[883,17787],{"language":9905,"src":9906},[24,17789,17790,17794,17796,17800],{},[27,17791,9911,17792],{},[265,17793,9914],{},[27,17795,9917],{},[27,17797,9920,17798,9924],{},[265,17799,9923],{},[27,17801,9927],{},[14,17803,17804,17806,17810],{"id":9930,"level":98},[19,17805,9934],{"id":9933},[40,17807,9937,17808,9940],{},[265,17809,8457],{},[103,17811,17812,17822],{"gap":105,"left-width":106,"right-width":106},[108,17813,17814,17816,17820],{"v-slot:left":110},[40,17815,9947],{},[40,17817,17818],{},[265,17819,9952],{},[883,17821],{"language":885,"src":9955},[108,17823,17824,17828,17830],{"v-slot:right":110},[40,17825,9960,17826,1257],{},[265,17827,9963],{},[883,17829],{"language":6131,"src":9966},[24,17831,17832,17836,17840,17842],{},[27,17833,9971,17834,9974],{},[265,17835,9963],{},[27,17837,9977,17838,9974],{},[265,17839,9963],{},[27,17841,9982],{},[27,17843,9985],{},[14,17845,17846,17848,17850,17852],{"id":9988,"level":98},[19,17847,9991],{"id":9988},[40,17849,9994],{},[883,17851],{"language":885,"src":9997},[24,17853,17854,17858,17862,17866,17870],{},[27,17855,17856,10005],{},[265,17857,10004],{},[27,17859,17860,10010],{},[265,17861,9834],{},[27,17863,17864,10016],{},[265,17865,10015],{},[27,17867,10019,17868,10023],{},[265,17869,10022],{},[27,17871,10026],{},[14,17873,17874,17876,17878,17880,17882,17884],{"id":10029,"level":17},[19,17875,10033],{"id":10032},[40,17877,9615],{},[883,17879],{"language":885,"src":10038},[40,17881,10041],{},[883,17883],{"language":5537,"src":10044},[24,17885,17886,17890,17892],{},[27,17887,9447,17888,9451],{},[265,17889,9450],{},[27,17891,10053],{},[27,17893,10056],{},[14,17895,17896,17898,17900,17912,17914,17919],{"id":10059,"level":17},[19,17897,10062],{"id":10059},[40,17899,10065],{},[24,17901,17902,17906,17908,17910],{},[27,17903,4798,17904],{},[265,17905,8154],{},[27,17907,4813],{},[27,17909,4810],{},[27,17911,10078],{},[40,17913,10081],{},[40,17915,10084,17916],{},[44,17917,4824],{"href":4824,"rel":17918},[48],[40,17920,10090],{},[14,17922,17923,17925,17927,17929,17931,17933,17935],{"id":10093,"level":17},[19,17924,10097],{"id":10096},[40,17926,9615],{},[883,17928],{"language":885,"src":10102},[40,17930,4310],{},[883,17932],{"language":5537,"src":10107},[40,17934,10110],{},[24,17936,17937,17941],{},[27,17938,17939,10118],{},[265,17940,10117],{},[27,17942,17943,10124],{},[265,17944,10123],{},[14,17946,17947,17951,17953,17955,17957],{"id":10127,"level":17},[19,17948,10131,17949],{"id":10130},[265,17950,823],{},[40,17952,10136],{},[883,17954],{"language":3664,"src":10139},[40,17956,10142],{},[24,17958,17959,17967],{},[27,17960,17961,621,17963,625,17965,10153],{},[265,17962,5531],{},[265,17964,5534],{},[265,17966,5537],{},[27,17968,17969,10158],{},[265,17970,823],{},[14,17972,17973,17975,17977,17981,17983,17987,17989,17991],{"id":10161,"level":98},[19,17974,10165],{"id":10164},[40,17976,10168],{},[40,17978,17979],{},[265,17980,10173],{},[40,17982,881],{},[40,17984,17985],{},[265,17986,10180],{},[40,17988,10183],{},[883,17990],{"language":9905,"src":10186},[24,17992,17993,17997,18001,18005],{},[27,17994,9447,17995,10193],{},[265,17996,9721],{},[27,17998,10196,17999],{},[265,18000,10199],{},[27,18002,10202,18003],{},[265,18004,7936],{},[27,18006,10207,18007],{},[265,18008,8012],{},[14,18010,18011,18013,18015,18017],{"id":10212,"level":98},[19,18012,10216],{"id":10215},[40,18014,9615],{},[883,18016],{"language":885,"src":10221},[24,18018,18019,18023,18027,18031,18037,18041],{},[27,18020,18021,10229],{},[265,18022,10228],{},[27,18024,18025,10235],{},[265,18026,10234],{},[27,18028,18029,10241],{},[265,18030,10240],{},[27,18032,10244,18033,6284,18035,10249],{},[265,18034,10240],{},[265,18036,9686],{},[27,18038,18039,10255],{},[265,18040,10254],{},[27,18042,18043,10261],{},[265,18044,10260],{},[14,18046,18047,18049,18051,18053,18055],{"id":10264,"level":17},[19,18048,10268],{"id":10267},[40,18050,10271],{},[883,18052],{"language":3664,"src":10274},[40,18054,10277],{},[883,18056],{"language":5324,"src":10280},[14,18058,18059,18061,18063,18065,18067],{"id":10283,"level":17},[19,18060,10286],{"id":10283},[40,18062,10289],{},[883,18064],{"language":3664,"src":10292},[40,18066,10110],{},[24,18068,18069,18071,18073,18075],{},[27,18070,10299],{},[27,18072,10302],{},[27,18074,10305],{},[27,18076,10308],{},[14,18078,18079,18081],{"id":10311,"level":17},[19,18080,10314],{"id":10311},[24,18082,18083,18085,18087,18091,18093,18101,18107],{},[27,18084,10319],{},[27,18086,10322],{},[27,18088,10325,18089],{},[265,18090,9331],{},[27,18092,10330],{},[27,18094,10333,18095,10337,18097,10340,18099,10343],{},[265,18096,10336],{},[265,18098,10240],{},[265,18100,9686],{},[27,18102,10346,18103,10350,18105,10353],{},[265,18104,10349],{},[265,18106,9686],{},[27,18108,10356],{},[14,18110,18111,18113,18115],{"id":10359,"level":17},[19,18112,10362],{"id":10359},[40,18114,10365],{},[162,18116,18117,18119,18123,18127,18131,18137,18143,18147,18151,18157],{},[27,18118,10370],{},[27,18120,18121,10376],{},[265,18122,10375],{},[27,18124,18125,10382],{},[265,18126,10381],{},[27,18128,18129,10387],{},[265,18130,9662],{},[27,18132,18133,10393,18135],{},[265,18134,10392],{},[265,18136,9686],{},[27,18138,18139,10393,18141],{},[265,18140,10400],{},[265,18142,9686],{},[27,18144,18145,10408],{},[265,18146,10407],{},[27,18148,18149,10408],{},[265,18150,10413],{},[27,18152,18153,10419,18155],{},[265,18154,10418],{},[265,18156,10422],{},[27,18158,18159,10428],{},[265,18160,10427],{},[14,18162,18163,18165],{"id":1454,"level":17},[19,18164,1455],{"id":1454},[103,18166,18167,18197],{"gap":105,"left-width":106,"right-width":106},[108,18168,18169,18171,18175,18181,18185,18189,18193],{"v-slot:left":110},[364,18170,1463],{"id":1462},[40,18172,18173,10444],{},[125,18174,10443],{},[40,18176,18177,10450,18179,10453],{},[125,18178,10449],{},[265,18180,8154],{},[40,18182,18183,10458],{},[125,18184,9686],{},[40,18186,18187,10464],{},[125,18188,10463],{},[40,18190,18191,10470],{},[125,18192,10469],{},[40,18194,18195,10475],{},[125,18196,9331],{},[108,18198,18199,18201],{"v-slot:right":110},[364,18200,1494],{"id":1451},[24,18202,18203,18208,18213,18218,18223,18228,18233],{},[27,18204,18205],{},[44,18206,10487],{"href":8078,"rel":18207},[48],[27,18209,18210],{},[44,18211,10494],{"href":10492,"rel":18212},[48],[27,18214,18215],{},[44,18216,10501],{"href":10499,"rel":18217},[48],[27,18219,18220],{},[44,18221,10508],{"href":10506,"rel":18222},[48],[27,18224,18225],{},[44,18226,10515],{"href":10513,"rel":18227},[48],[27,18229,18230],{},[44,18231,10521],{"href":8096,"rel":18232},[48],[27,18234,18235],{},[44,18236,10528],{"href":10526,"rel":18237},[48],[14,18239,18240,18242,18244],{"id":465,"level":17},[19,18241,468],{"id":465},[40,18243,1524],{},[24,18245,18246,18248,18250,18252,18254,18258],{},[27,18247,10539],{},[27,18249,10542],{},[27,18251,10545],{},[27,18253,10548],{},[27,18255,10551,18256],{},[265,18257,823],{},[27,18259,10556],{},{"title":110,"searchDepth":492,"depth":492,"links":18261},[18262,18263,18264,18265,18266,18267,18268,18269,18270,18271,18272,18273,18274,18275,18276,18277,18278,18279,18280,18281,18282,18283,18284,18285,18286,18287,18288,18289,18290,18291,18292,18293,18294,18295,18296,18297,18298,18299,18300,18301,18302,18303,18304,18305,18306,18307,18308,18309,18310,18311,18312,18313,18314,18315,18316,18317,18318,18319,18320,18321,18322,18323,18324,18325,18326],{"id":7958,"depth":492,"text":7950},{"id":7984,"depth":492,"text":7987},{"id":8029,"depth":492,"text":8032},{"id":637,"depth":492,"text":640},{"id":8134,"depth":492,"text":8137},{"id":8169,"depth":492,"text":8170},{"id":8193,"depth":492,"text":8196},{"id":8225,"depth":492,"text":8228},{"id":8251,"depth":492,"text":8254},{"id":8280,"depth":492,"text":8283},{"id":8312,"depth":492,"text":8313},{"id":8336,"depth":492,"text":8339},{"id":8367,"depth":492,"text":8370},{"id":8398,"depth":492,"text":8399},{"id":8434,"depth":492,"text":8435},{"id":8496,"depth":492,"text":8499},{"id":8531,"depth":492,"text":8534},{"id":8577,"depth":492,"text":8580},{"id":8620,"depth":492,"text":8623},{"id":8664,"depth":492,"text":8667},{"id":8714,"depth":492,"text":8715},{"id":8777,"depth":492,"text":8778},{"id":8813,"depth":492,"text":8814},{"id":8848,"depth":492,"text":8849},{"id":8885,"depth":492,"text":8886},{"id":8918,"depth":492,"text":8919},{"id":8955,"depth":492,"text":8956},{"id":8988,"depth":492,"text":8989},{"id":9018,"depth":492,"text":9019},{"id":9048,"depth":492,"text":9049},{"id":9078,"depth":492,"text":9079},{"id":9108,"depth":492,"text":9109},{"id":9138,"depth":492,"text":9139},{"id":9172,"depth":492,"text":9173},{"id":9204,"depth":492,"text":9205},{"id":9236,"depth":492,"text":9237},{"id":9268,"depth":492,"text":9269},{"id":9319,"depth":492,"text":9320},{"id":9362,"depth":492,"text":9363},{"id":9388,"depth":492,"text":9389},{"id":9429,"depth":492,"text":9430},{"id":9481,"depth":492,"text":9482},{"id":9560,"depth":492,"text":9561},{"id":9611,"depth":492,"text":9612},{"id":9642,"depth":492,"text":9643},{"id":9672,"depth":492,"text":9673},{"id":9702,"depth":492,"text":9703},{"id":9752,"depth":492,"text":9753},{"id":9777,"depth":492,"text":9778},{"id":9827,"depth":492,"text":9828},{"id":9875,"depth":492,"text":9876},{"id":9933,"depth":492,"text":9934},{"id":9988,"depth":492,"text":9991},{"id":10032,"depth":492,"text":10033},{"id":10059,"depth":492,"text":10062},{"id":10096,"depth":492,"text":10097},{"id":10130,"depth":492,"text":10616},{"id":10164,"depth":492,"text":10165},{"id":10215,"depth":492,"text":10216},{"id":10267,"depth":492,"text":10268},{"id":10283,"depth":492,"text":10286},{"id":10311,"depth":492,"text":10314},{"id":10359,"depth":492,"text":10362},{"id":1454,"depth":492,"text":1455},{"id":465,"depth":492,"text":468},{},{"title":7950,"description":10625},[10635,10636,9905,10637,10638],1780581685660]