From c3c743322c56214a2f883d8aee58b11f3347a839 Mon Sep 17 00:00:00 2001 From: SomiZ <116781266+SomiZ@users.noreply.github.com> Date: Fri, 24 Jan 2025 08:08:59 -0500 Subject: [PATCH] Initial commit --- .github/ISSUE_TEMPLATE/help_wanted.md | 65 ++++++ .github/ISSUE_TEMPLATE/meeting_agenda.md | 26 +++ .github/ISSUE_TEMPLATE/new_challenge.md | 21 ++ .github/ISSUE_TEMPLATE/question.md | 15 ++ .github/PULL_REQUEST_TEMPLATE.md | 93 ++++++++ .github/workflows/ci-checks.yml | 80 +++++++ .gitignore | 7 + .ls-lint.yml | 17 ++ .markdownlint.yml | 3 + .vscode/extensions.json | 51 +++++ .vscode/launch.json | 17 ++ .vscode/settings.json | 126 +++++++++++ CONTRIBUTING.md | 0 LICENSE | 21 ++ README.md | 0 collaboration/README.md | 5 + collaboration/communication.md | 54 +++++ collaboration/constraints.md | 34 +++ collaboration/guide/0_repository_setup.md | 39 ++++ collaboration/guide/1_group_norms.md | 4 + collaboration/guide/2_learning_goals.md | 26 +++ collaboration/guide/3_constraints.md | 20 ++ collaboration/guide/4_communication.md | 33 +++ collaboration/guide/5_project_board.md | 38 ++++ collaboration/guide/6_development.md | 60 +++++ collaboration/guide/7_retrospective.md | 56 +++++ collaboration/guide/README.md | 214 ++++++++++++++++++ .../guide/assets/branching_strategy.svg | 21 ++ .../assets/claim_branch_review_merge.svg | 21 ++ collaboration/learning_goals.md | 5 + collaboration/retrospective.md | 23 ++ notes/README.md | 1 + solutions/README.md | 1 + solutions/__init__.py | 1 + solutions/tests/README.md | 1 + solutions/tests/__init__.py | 1 + 36 files changed, 1200 insertions(+) create mode 100644 .github/ISSUE_TEMPLATE/help_wanted.md create mode 100644 .github/ISSUE_TEMPLATE/meeting_agenda.md create mode 100644 .github/ISSUE_TEMPLATE/new_challenge.md create mode 100644 .github/ISSUE_TEMPLATE/question.md create mode 100644 .github/PULL_REQUEST_TEMPLATE.md create mode 100644 .github/workflows/ci-checks.yml create mode 100644 .gitignore create mode 100644 .ls-lint.yml create mode 100644 .markdownlint.yml create mode 100644 .vscode/extensions.json create mode 100644 .vscode/launch.json create mode 100644 .vscode/settings.json create mode 100644 CONTRIBUTING.md create mode 100644 LICENSE create mode 100644 README.md create mode 100644 collaboration/README.md create mode 100644 collaboration/communication.md create mode 100644 collaboration/constraints.md create mode 100644 collaboration/guide/0_repository_setup.md create mode 100644 collaboration/guide/1_group_norms.md create mode 100644 collaboration/guide/2_learning_goals.md create mode 100644 collaboration/guide/3_constraints.md create mode 100644 collaboration/guide/4_communication.md create mode 100644 collaboration/guide/5_project_board.md create mode 100644 collaboration/guide/6_development.md create mode 100644 collaboration/guide/7_retrospective.md create mode 100644 collaboration/guide/README.md create mode 100644 collaboration/guide/assets/branching_strategy.svg create mode 100644 collaboration/guide/assets/claim_branch_review_merge.svg create mode 100644 collaboration/learning_goals.md create mode 100644 collaboration/retrospective.md create mode 100644 notes/README.md create mode 100644 solutions/README.md create mode 100644 solutions/__init__.py create mode 100644 solutions/tests/README.md create mode 100644 solutions/tests/__init__.py diff --git a/.github/ISSUE_TEMPLATE/help_wanted.md b/.github/ISSUE_TEMPLATE/help_wanted.md new file mode 100644 index 0000000..939dbba --- /dev/null +++ b/.github/ISSUE_TEMPLATE/help_wanted.md @@ -0,0 +1,65 @@ +--- +name: help wanted +about: > + A template issue for when you're blocked on certain lines of code. + This template has many sections to get you thinking about your problem, + you don't need to fill all of them. +labels: "help wanted" +--- + + + +## The Code + + + +## Best Understanding + + + +## Best Efforts + + + +## Helpful Links + + + +## Hopeful Links + + diff --git a/.github/ISSUE_TEMPLATE/meeting_agenda.md b/.github/ISSUE_TEMPLATE/meeting_agenda.md new file mode 100644 index 0000000..f3e0399 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/meeting_agenda.md @@ -0,0 +1,26 @@ +--- +name: meeting agenda +about: A template issue for planning meetings +title: "Agenda: \_\_" +labels: agenda +--- + + + + + + + + +- [ ] item 1 + - description +- [ ] item 2 + - description +- [ ] ... diff --git a/.github/ISSUE_TEMPLATE/new_challenge.md b/.github/ISSUE_TEMPLATE/new_challenge.md new file mode 100644 index 0000000..856fa5e --- /dev/null +++ b/.github/ISSUE_TEMPLATE/new_challenge.md @@ -0,0 +1,21 @@ +--- +name: new challenge +about: > + A template issue for describing a new challenge on the project board. + Place this issue in the TODO column of your group's project board. +--- + + + + + + diff --git a/.github/ISSUE_TEMPLATE/question.md b/.github/ISSUE_TEMPLATE/question.md new file mode 100644 index 0000000..2fb0558 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/question.md @@ -0,0 +1,15 @@ +--- +name: question +about: > + A template issue for topics you'd like to discuss or learn more about. + specific topics, general knowledge, it does not even need to be about code. + There are no bad questions! +labels: question +--- + + diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md new file mode 100644 index 0000000..cc69ef8 --- /dev/null +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -0,0 +1,93 @@ +--- +name: solution review +about: A template PR for code review with a checklist +--- + + + + + +## Behavior + +### Files + +- [ ] The file name describes the function's behavior +- [ ] There is a module header in the function file +- [ ] There is a module docstring in the function file +- [ ] The test file's name matches the function file name - + `/tests/test_file_name.py` +- [ ] There is a module docstring in the tests file +- [ ] There is a module header in the tests file + +### Unit Tests + +- [ ] The test class has a helpful name in PascalCase +- [ ] The test class has a docstring +- Every unit test has + - [ ] A helpful name + - [ ] A clear docstring + - [ ] Only one assertion + - [ ] There is no logic in the unit test +- [ ] All tests pass +- [ ] There are tests for defensive assertions +- [ ] There are tests for boundary cases + +### Function Docstring + +- [ ] The function's behavior is described +- The function's arguments are described: + - [ ] Type + - [ ] Purpose + - [ ] Other assumptions (eg. if it's a number, what's the expected range?) +- The return value is described + - [ ] Type + - [ ] Other assumptions are documented +- The defensive assertions are documented using `Raises:` + - [ ] Each assumption about an argument is checked with an assertion + - [ ] Each assertion checks for _only one_ assumption about the argument +- [ ] Include 3 or more (passing!) doctests + +### The Function + +- [ ] The function's name describes it's behavior +- [ ] The function's name matches the file name + - _It's ok to have extra helper functions, like with mergesort_ +- [ ] The function has correct type annotations +- [ ] The function is not called at the top level of the function file + - _Recursive solutions **can** call the function from **inside** the function body_ + +## Strategy + +### Do's + +- [ ] Variable names help to understand the strategy +- [ ] Any comments are clear and describe the strategy +- [ ] Lines of code are spaced to help show different stages of the strategy + +### Don'ts + +- [ ] The function's strategy _is not_ described in any docstrings or tests +- [ ] Comments explain the _strategy_, **not** the _implementation_ +- [ ] The function _does not_ have more comments than code + - If it does, consider finding a new strategy or a simpler implementation + +## Implementation + +- [ ] The code passes the formatting checks +- [ ] The code passes all Ruff linting checks +- [ ] The code has no (reasonable) Pylint errors + - In code review, you can decide when fixing a Pylint error is helpful and + when it's too restricting. +- [ ] Variables are named with snake_case +- [ ] Variable names are clear and helpful +- [ ] The code follows the strategy as simply as possible +- [ ] The implementation is as simple as possible given the strategy +- [ ] There are no commented lines of code +- [ ] There are no `print` or `input` statements anywhere in the function or test files +- [ ] The code includes defensive assertions +- [ ] Defensive assertions include as little logic as possible diff --git a/.github/workflows/ci-checks.yml b/.github/workflows/ci-checks.yml new file mode 100644 index 0000000..b3d7b00 --- /dev/null +++ b/.github/workflows/ci-checks.yml @@ -0,0 +1,80 @@ +name: ET CI Checks + +on: [push, pull_request, workflow_dispatch] + +jobs: + ls_linting: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: ls-lint/action@v2.2.3 + + md_formatting: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: nosborn/github-action-markdown-cli@v3.3.0 + with: + files: . + config_file: .markdownlint.yml + + py_formatting: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - name: Python - Check Formatting + uses: astral-sh/ruff-action@v1 + with: + args: "format --check" + + py_linting: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + + # passing ruff linting is required + - name: Python - Check Linting - ruff + uses: astral-sh/ruff-action@v1 + + # passing pylint is not required - discuss errors in code review + # adapted from https://github.com/davidslusser/actions_python_pylint/tree/main + - name: python version + run: python --version + shell: bash + if: always() + - name: install pylint + run: | + python - m pip install --upgrade pip + pip install pylint + shell: bash + - name: Python - Check Linting - pylint + run: "pylint solutions tests || echo '::warning title=Pylint Error(s)::Discuss solutions and trade-offs in code review.'" + shell: bash + + py_tests: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + + - name: python version + run: python --version + shell: bash + + - name: Check for test files + id: check_tests + run: | + test_files=$(find ./solutions/tests -type f -name "test_*.py") + if [ -n "$test_files" ]; then + echo "Found test files:" + echo "$test_files" + echo "has_tests=true" >> $GITHUB_OUTPUT + else + echo "No test files found matching pattern ./solutions/tests/test_*.py" + echo "has_tests=false" >> $GITHUB_OUTPUT + fi + shell: bash + + - name: Python - Run Tests + if: steps.check_tests.outputs.has_tests == 'true' + run: python -m unittest + shell: bash diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..b1c6cec --- /dev/null +++ b/.gitignore @@ -0,0 +1,7 @@ +__pycache__ +*.pytest_cache +venv/ +# .env +*.db +*.idea +*.ruff_cache diff --git a/.ls-lint.yml b/.ls-lint.yml new file mode 100644 index 0000000..11468c9 --- /dev/null +++ b/.ls-lint.yml @@ -0,0 +1,17 @@ +ls: + .dir: snake_case + .*: snake_case + .md: snake_case | regex:[0-9A-Z\-]+ + .txt: snake_case | kebab-case + .yml: snake_case | kebab-case + +ignore: + - .git + - .github + - .vscode + - venv + - .ruff_cache + - .pytest_cache + - __pycache__ + - .ls-lint.yml + - .markdownlint.yml diff --git a/.markdownlint.yml b/.markdownlint.yml new file mode 100644 index 0000000..ee6205f --- /dev/null +++ b/.markdownlint.yml @@ -0,0 +1,3 @@ +ignore: + - venv + - .github diff --git a/.vscode/extensions.json b/.vscode/extensions.json new file mode 100644 index 0000000..a7e4b78 --- /dev/null +++ b/.vscode/extensions.json @@ -0,0 +1,51 @@ +{ + "recommendations": [ + // For Pair Programming + "MS-vsliveshare.vsliveshare", + + // For Git & GitHub + "mhutchie.git-graph", + "eamodio.gitlens", + "GitHub.vscode-pull-request-github", + "donjayamanne.githistory", + + // For programming generally + "streetsidesoftware.code-spell-checker", + "leodevbro.blockman", + "alefragnani.project-manager", + "vscode-icons-team.vscode-icons", + "alefragnani.bookmarks", + "visualstudioexptteam.vscodeintellicode", + "aaron-bond.better-comments", + "christian-kohler.path-intellisense", + "usernamehw.errorlens", + "tamasfe.even-better-toml", + + // For writing Markdown + "DavidAnson.vscode-markdownlint", + "yzhang.markdown-all-in-one", + "bierner.markdown-preview-github-styles", + + // For writing Python + "ms-python.python", + "ms-python.vscode-pylance", + "KevinRose.vsc-python-indent", + "njpwerner.autodocstring", + "LittleFoxTeam.vscode-python-test-adapter", + "ms-python.black-formatter", + "charliermarsh.ruff", + "ms-python.pylint", + "oderwat.indent-rainbow", + "ms-python.debugpy", + "frhtylcn.pythonsnippets", + + // For writing Notebooks + "ms-toolsai.jupyter", + "ms-toolsai.jupyter-keymap", + + // For working with data + "RandomFractalsInc.vscode-data-preview", + "mechatroner.rainbow-csv", + "mtxr.sqltools" + ] +} \ No newline at end of file diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 0000000..4342f4c --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,17 @@ +{ + // Use IntelliSense to learn about possible attributes. + // Hover to view descriptions of existing attributes. + // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 + "version": "0.2.0", + "configurations": [ + { + "name": "ET: Debug Python (unittest)", + "type": "debugpy", + "request": "launch", + "program": "-m", + "args": ["unittest", "${file}"], + "console": "integratedTerminal", + "justMyCode": true + } + ] +} diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..252022b --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,126 @@ +{ + // https://vscode-docs.readthedocs.io/en/stable/customization/userandworkspace/#default-settings + //-------- Editor configuration -------- + + // Controls auto save of editors that have unsaved changes.: https://code.visualstudio.com/docs/editor/codebasics#_save-auto-save + "files.autoSave": "onFocusChange", + + // Format a file on save. A formatter must be available. + "editor.formatOnSave": true, + + // Controls whether the editor should automatically format the pasted content. A formatter must be available. + "editor.formatOnPaste": true, + + // Controls whether the editor should render indent quides + "editor.guides.indentation": true, + + // Controls whether the editor should highlight the active indent guide. + "editor.guides.highlightActiveIndentation": true, + + // Controls the rendering size of tabs in characters. Accepted values: "auto", 2, 4, 6, etc. If set to "auto", the value will be guessed when a file is opened. + "editor.tabSize": 2, + + // Defines a default formatter which takes precedence over all other formatter settings. Must be the identifier of an extension contributing a formatter + "editor.defaultFormatter": "esbenp.prettier-vscode", + + // Controls bracket pair colorization is enabled or not + "editor.bracketPairColorization.enabled": true, + + // Controls whether bracket pair guides are enabled or not. (true, active, false) + "editor.guides.bracketPairs": "active", + + // Controls whether horizontal bracket pair guides are enabled or not. + "editor.guides.bracketPairsHorizontal": "active", + + // Controls whether the editor should highlight the active bracket pair. + "editor.guides.highlightActiveBracketPair": true, + + // Controls whether the editor has linked editing enabled. + "editor.linkedEditing": true, + + //-------- HTML configuration -------- + + // Enable/disable auto closing of HTML tags + "html.autoClosingTags": true, + + // Configures if the built-in HTML language suggests HTML5 tags, properties and values. + "html.suggest.html5": true, + + // Defines a default HTML formatter which takes precedence over all other formatter settings. Must be the identifier of an extension contributing a formatter + "[html]": { + "editor.defaultFormatter": "vscode.html-language-features" + }, + + //-------- Emmet configuration -------- + + // Enables completion when you are writing Emmet appreveation. + "html-css-class-completion.enableEmmetSupport": true, + + //-------- JavaScript configuration -------- + + // Enable/disable auto closing of JSX tags. + "javascript.autoClosingTags": true, + + // Enable/disable auto import suggestions. + "javascript.suggest.autoImports": true, + + // Enable/disable automatic updating of import paths when you rename or move a file in VS Code. + "javascript.updateImportsOnFileMove.enabled": "always", + + // Enable/disable suggestoins for paths in import statement and require calls. (change it to false to be able to use Path Intellisense extension) + "javascript.suggest.paths": false, + + //-------- TypeScript configuration -------- + + // Enable/disable auto closing of JSX tags. + "typescript.autoClosingTags": true, + + // Enable/disable auto import suggestions. + "typescript.suggest.autoImports": true, + + // Enable/disable automatic updating of import paths when you rename or move a file in VS Code. + "typescript.updateImportsOnFileMove.enabled": "always", + + // Enable/disable suggestoins for paths in import statement and require calls. (change it to false to be able to use Path Intellisense extension) + "typescript.suggest.paths": false, + + //-------- Work Bench configuration -------- + + // Controls whether a top border is drawn on tabs for editors that have unsaved changes. + "workbench.editor.highlightModifiedTabs": true, + + //-------- Files configuration -------- + + // When enabled, will trim all new lines after the final new line at the end of the file when saving it. + "files.trimFinalNewlines": true, + + // When enabled, insert a new final line at the end of the file when saving it. + "files.insertFinalNewline": true, + + //-------- Live Server configuration -------- + + // Set Custom Port Number of Live Server. Set 0 if you want random port. + "liveServer.settings.port": 5504, + + //-------- Markdown configuration -------- + + // Enable path suggestoins while writing links in markdown files + "markdown.suggest.paths.enabled": true, + + // Defines a default markdown formatter which takes precedence over all other formatter settings. Must be the identifier of an extension contributing a formatter + "[markdown]": { + "editor.defaultFormatter": "DavidAnson.vscode-markdownlint" + }, + + // Enable/disable update table of contents on save + "markdown.extension.toc.updateOnSave": false, + + "[python]": { + "editor.defaultFormatter": "charliermarsh.ruff", + "editor.formatOnSave": true, + "editor.codeActionsOnSave": { + "source.fixAll.ruff": "explicit", + "source.organizeImports.ruff": "explicit" + } + } +} diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 0000000..e69de29 diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..6e628e4 --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2024 MIT Emerging Talent + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/README.md b/README.md new file mode 100644 index 0000000..e69de29 diff --git a/collaboration/README.md b/collaboration/README.md new file mode 100644 index 0000000..20889b9 --- /dev/null +++ b/collaboration/README.md @@ -0,0 +1,5 @@ +# Collaboration + + + + diff --git a/collaboration/communication.md b/collaboration/communication.md new file mode 100644 index 0000000..484652e --- /dev/null +++ b/collaboration/communication.md @@ -0,0 +1,54 @@ + + +# Communication + +______________________________________________________________________ + +## Communication Schedule + +| Day | How | The topic of discussion | | --- | :-: | ----------------------- | +| | | | + +## Communication Channels + +how often will we get in touch on each channel, and what we will discuss there: + +- **Issues**: +- **Pull Requests**: +- **Slack/Discord**: +- **Video Calls**: + +______________________________________________________________________ + +## Availability + +### Availability for calling/messaging + +| Day | Monday | Tuesday | Wednesday | Thursday | Friday | Saturday | Sunday | | +------ | :----: | :-----: | :-------: | :------: | :----: | :------: | :----: | +| _name_ | | | | | | | | + +### How many hours everyone has per day + +- name: _5h_; +- name: _6h_; +- name: _5h_; +- name: _4h_; +- name: _3h_; + +## Asking for Help + +There's a fine line between confidently learning from your mistakes, and +stubbornly getting no where. Here is a general guide for when to ask for help +based on how long you've been stuck on the same problem: + +1. _0 -> 30 min_: Try on your own +1. _30 -> 60 min_: Ask your group for help +1. _60+ min_: Tag your coaches in Slack or GitHub diff --git a/collaboration/constraints.md b/collaboration/constraints.md new file mode 100644 index 0000000..2407950 --- /dev/null +++ b/collaboration/constraints.md @@ -0,0 +1,34 @@ + + +# Constraints + +Some boundaries around our project. + +## External + + + +## Internal: Involuntary + + + +## Internal: Voluntary + + diff --git a/collaboration/guide/0_repository_setup.md b/collaboration/guide/0_repository_setup.md new file mode 100644 index 0000000..aae9cb7 --- /dev/null +++ b/collaboration/guide/0_repository_setup.md @@ -0,0 +1,39 @@ +# Repository Setup + +Before diving into your project make sure your team has all the practical things +in place. This step isn't very hard but everything will go more smoothly if you +take the time to do this correctly at the beginning. + +## Setup and Share a Repository + +As a team you will choose the name for your team and select someone from your +team to be the repo owner. This person will fork this repository and configure +it for collaboration: + +- Public face of your repository + - Change your + [repository description](https://stackoverflow.com/questions/7757751/how-do-you-change-a-repository-description-on-github) + - Add or remove topics from your repository + - Update your main README with your group name and an initial overview of your + project. (You can change this as much as you want.) +- Under settings in your repository select: + - _Issues_ + - _Projects_ + - _Always suggest updating pull request branches_ +- Collaboration Settings + - Require a code review for PRs to `main`/`master` + ([owanateamachree](https://owanateamachree.medium.com/how-to-protect-the-master-branch-on-github-ab85e9b6b03), + [github docs](https://docs.github.com/en/github/collaborating-with-issues-and-pull-requests/approving-a-pull-request-with-required-reviews)) + - You will need to type `master` into the _Branch name pattern_ input box. + (or type `main` if you have changed your default branch) + - Select these settings to protect matching branches: + - _Require approvals_ + - _Dismiss stale pull request approvals when new commits are pushed_ + - _Require approval of the most recent reviewable push_ + - _Require conversation resolution before merging_ + - _Do not allow bypassing the above settings_ + +## README + +Write the [main README](../../README.md) for your repository! You can always +update it as you learn more about code review and collaboration on GitHub. diff --git a/collaboration/guide/1_group_norms.md b/collaboration/guide/1_group_norms.md new file mode 100644 index 0000000..c7bd0e3 --- /dev/null +++ b/collaboration/guide/1_group_norms.md @@ -0,0 +1,4 @@ +# Group Norms + +Complete the _Group Norms_ assignment from the Code Review workshop and write +your norms summary and list in the [Collaboration README](../README.md) diff --git a/collaboration/guide/2_learning_goals.md b/collaboration/guide/2_learning_goals.md new file mode 100644 index 0000000..dd660b2 --- /dev/null +++ b/collaboration/guide/2_learning_goals.md @@ -0,0 +1,26 @@ +# Objectives + +The first step to developing a software project is to make sure everyone agrees +on the project objectives. For these exercises, setting objectives means +discussing what everyone wants to learn from these exercises. + +For example, do you want to; + +- Review DSs and algorithms you have already studied. +- Learn new DSs and algorithms. +- Practice using new programming language features. +- Practice more complete, readable, and documented solutions. +- Learn to program faster, to be more a more efficient developer. +- Focus on code review, going through several cycles of feedback for each + solution. +- ... or anything else you can think of + +There are no wrong answers, it's ok if everyone has different objectives! Shat's +important is that everyone has the same expectations. + +## `/collaboration/learning_goals.md` + +Write your group's objectives for these exercises in +[/collaboration/learning_goals.md](../learning_goals.md). If different members +have different objectives, you can write this in the `learning_goals.md` file. +You don't need to have one description for everyone! diff --git a/collaboration/guide/3_constraints.md b/collaboration/guide/3_constraints.md new file mode 100644 index 0000000..ad18e64 --- /dev/null +++ b/collaboration/guide/3_constraints.md @@ -0,0 +1,20 @@ +# Constraints + +After dreaming big, the most helpful thing you can can do to define your project +is to be clear about _what it isn't_. Thinking big is great for brainstorming +but can get in the way of finishing your projects on time. + +An important step to _scoping_ your project is to discuss your group's +**constraints** before you even begin thinking of user stories. Defining your +constraints will help to define a realistic project and commit to it. +Constraints can also help you to build a more creative project! + +It may not sound intuitive, but the fewer restrictions you have on your work the +less likely you are to find a creative solution! The crucial skills you need to +learn is how to place _constructive_ constraints on your project and on your +team. + +## `/collaboration/constraints.md` + +Fill out the template file in [/collaboration/constraints.md](../constraints.md) +as a group, either in a call or asynchronously. diff --git a/collaboration/guide/4_communication.md b/collaboration/guide/4_communication.md new file mode 100644 index 0000000..8cbaacc --- /dev/null +++ b/collaboration/guide/4_communication.md @@ -0,0 +1,33 @@ +# Communication Plan + +Decide as a team when you will be able to meet, and how you'll stay in touch +between meetings. The example in this repository gives some ideas for organizing +this file, but it's up to your group to find what works best for you. + +This is one of the most important steps in collaboration! Group projects go by +very quickly, often you'll only have one week to plan and deliver a milestone. +Taking a few extra minutes to plan before starting can save you a day or two of +confusion during the sprint. + +## Meeting Agendas + +Writing a meeting agenda ahead of time is always a good idea. There is no right +way to plan a meeting, your group should search online and experiment to find +what works best for you. + +This repository has a _template issue_ you can use to create a meeting agenda. +Each time your group is planning a meeting you can create a new issue using this +template and write a meeting agenda. You can use comments to discuss +before/after the meeting, you can add meeting minutes in the issue body or +comments, and close the issue when all meeting points have been addressed. + +## `/collaboration/communication.md` + +> Careful! Be sure to protect your privacy when filling out this document. +> Everything you write here will be public, so share only what you are +> comfortable sharing online. You can share the rest in confidence with you +> group by another channel. + +Fill out the template file in +[/collaboration/communication.md](../communication.md) as a group, either in a +call or asynchronously. diff --git a/collaboration/guide/5_project_board.md b/collaboration/guide/5_project_board.md new file mode 100644 index 0000000..a0d5694 --- /dev/null +++ b/collaboration/guide/5_project_board.md @@ -0,0 +1,38 @@ +# Project Board + +Setting up your Project Board should be easy enough, using it well will take a +lot of discipline and attention to detail! + +## Columns + +Finally, create your project board and add these columns: + +1. **TODO**: Unclaimed challenges that no one is working on. +1. **DOING** Challenges someone has assigned to themselves and is actively + working on. + - Each group member can only have _one_ claimed issue in the DOING column at + a time. + - Use the `help wanted` label in this column if you are blocked. +1. **READY FOR REVIEW**: Issues with a linked PR to review. + - After your issue is READY FOR REVIEW you can claim a new challenge from the + TODO column. +1. **UNDER REVIEW**: After assigning yourself to review a challenge in the READY + FOR REVIEW column, move the issue to this column. + - Issues stay in this column until the reviewer has approved the solution and + merged it to `main`. +1. **DONE**: After merging a solution and closing the issue, the reviewer moves + challege issued to this column. + +## Issues + +Create one _**issue**_ for each interesting challenge you think someone in your +group may want to solve. I's always ok to add more issue later, so no need to +spend hours cluttering the project board right away. There's also no maximum! +Your TODO column can be as full as you like. + +Be sure each issue has: + +- A full description of the challenge. This doesn't need to be as thorough as a + docstring, but it should be clear enough that others can start solving it + without asking you for help. +- Links to any helpful references or resources for solving this challenge. diff --git a/collaboration/guide/6_development.md b/collaboration/guide/6_development.md new file mode 100644 index 0000000..655c5b5 --- /dev/null +++ b/collaboration/guide/6_development.md @@ -0,0 +1,60 @@ +# Development + +Everything is planned, the board is ready, it's time to get working. As you +develop your project, you will keep track of everything on the project board. + +## `/notes` + +This repository comes with an empty [/notes](./notes) folder your group can use +to keep shared notes on everything you learn about Python, Git, GitHub, code +review, collaboration ... or life : ) + +## `help-wanted` Label + +Add this label to your issue when you're blocked. Your team mates will be able +to see this on the project board or by filtering all the project issues. + +## Opening New Issues + +Issues are flexible, you can always create new issues or update existing ones +after the project has started. Up to now you have created issues for planned +tasks, but issues can be used for all sorts of tasks. Especially tasks that you +weren't able to plan for. + +Some common reasons to create new issues: + +- **Bugs**: if you find a _bug_ in the `master`/`main` branch you can open a new + issue, describe the problem, and attach the `bug` label. Someone can claim the + issue, fix the bug on a new branch, and open a PR. +- **Enhancements**: if you have an idea to improve code that _already exists_ in + the `main` branch you can open a new issue, describe the changes you have in + mind, and add the `enhancement` label. If some has time they can claim this + issue, develop the enhancement on a new branch, and send a PR. + +## Claim, Branch, Review, Merge + +This is it, the real deal. Finally you can write some code! + +You and your team mates will each work on one task at a time, asking for help +and tracking your progress with the project board. + +You will be responsible for writing your code on a new branch, and your team +mates will be responsible for reviewing and merging your code to main/master. As +a team you should make your best effort to use _branches_ for organizing your +work. If you wrote a good development strategy you will already be half-way +there. + +It will take a little while to get used to this workflow, but once you do +there's no going back: + +### Branching Strategy + +Your group's git branches should look something like this: + +[![branching strategy](./assets/branching_strategy.svg)](https://excalidraw.com/#json=IBDwrOShConw1SJwEqvii,-a8F2kZpRHiR2itGLU7IiA) + +## Individual Workflow + +Your individual workflow should look something like this: + +[![claim, branch, review, merge](./assets/claim_branch_review_merge.svg)](https://excalidraw.com/#json=-kZH0xSi4KCTru2JePZQV,X9da-5Fl_9AdgMdIbW1X5Q) diff --git a/collaboration/guide/7_retrospective.md b/collaboration/guide/7_retrospective.md new file mode 100644 index 0000000..5924ca3 --- /dev/null +++ b/collaboration/guide/7_retrospective.md @@ -0,0 +1,56 @@ +# Retrospective + +> “Regardless of what we discover, we understand and truly believe that everyone +> did the best job they could, given what they knew at the time, their skills +> and abilities, the resources available, and the situation at hand.” +> +> - [Norm Kerth](http://www.amazon.com/Project-Retrospectives-Handbook-Reviews-Dorset-ebook/dp/B00DY3KQJU/ref=tmm_kin_swatch_0?_encoding=UTF8&sr=&qid=) + +All done :) + +Your team has either finished the project ahead of time, or the deadline has +arrived and you're still not finished. No problem either way! + +A retrospective is meant for looking back at how the project went and learning +what to do differently next time. An incomplete project with a great +retrospective is still a success. + +## Behaviors, not People + +Focus on what your group can _do_ that will make the next sprint better. A huge +list of things to stop doing doesn't help you move forward. + +Retrospectives are all about behaviors that can be changed, not people that need +fixing. Keep your retrospectives _positive_ and _general_. **_You should NEVER +mention people by name!!!_** + +## Strategy vs. Board + +Take some time as a group to compare your Development Strategy to your Project +Board. + +- What parts of your plan went as expected? +- What parts of your plan did not work out? +- Did you need to add things that weren't in your strategy? +- Or remove extra steps? + +## The Four Points + +Your group will summarize your work by providing answers to these three +questions. You can have more than one answer! You can answer with bullet points, +paragraphs, links, images ... whatever is most clear. + +- **Stop Doing**: what mistakes did you make? did you miss a step? could your + communication have been better? be specific! +- **Continue Doing**: what went well that you should continue doing in the next + project? be specific! +- **Start Doing**: any good ideas you'd like to try out in the next project? be + specific! +- **Lessons Learned**: what cool things or general lessons has your team + learned? This can be about anything, not just code! + +## `/collaboration/retrospective.md` + +Fill out the template file in +[/collaboration/retrospective.md](../retrospective.md) as a group, either in a +call or asynchronously. diff --git a/collaboration/guide/README.md b/collaboration/guide/README.md new file mode 100644 index 0000000..6cd2bc9 --- /dev/null +++ b/collaboration/guide/README.md @@ -0,0 +1,214 @@ +# Group Study: Guide + +A brief guide to collaboration in this repository. It covers repository +configuration, setting learning goals, basic collaboration documents, and a +branching workflow. + +There is hopefully enough in here to get you started, but we know there are +still gaps. Let us know what's missing so we can fill it in! + +______________________________________________________________________ + +## Suggested Study + +Emerging Talent workshops that may be helpful: + +- [Documenting and Testing](https://github.com/MIT-Emerging-Talent/documenting-and-testing) +- [Debugging](https://github.com/MIT-Emerging-Talent/debugging/) +- [TDD with LLMs](https://github.com/MIT-Emerging-Talent/test-driven-development-with-large-language-models) + +### Local Development Without Git + +#### Visual Studio Code (VSCode) + +VSC is a very popular development environment. Take a look through these links +to start learning all you can do with VSC. You don't need to understand +everything right away, there will be more than enough time to practice: + +- [ArjanCodes](https://www.youtube.com/watch?v=fj2tuTIcUys) - _setting up + VSCode_ +- [academind VSC tutorial](https://www.youtube.com/watch?v=VqCgcpAypFQ) +- [shortcuts cheatsheet](https://vscode-shortcuts.com/) +- [The Coding Train](https://www.youtube.com/watch?v=yJw0SyKO9IU) +- VSC Intro from VSC + - [tutorial step-through](https://code.visualstudio.com/docs/introvideos/basics) + - [get started](https://code.visualstudio.com/docs/getstarted/introvideos) +- Are you using Windows? + - [Windows Subsystem for Linux](https://docs.microsoft.com/en-us/windows/wsl/install-win10) + - [WSL with VSCode](https://docs.microsoft.com/en-us/windows/wsl/tutorials/wsl-vscode) + - [nvm command not found](https://dev.to/duhbhavesh/nvm-command-not-found-1ho) + +#### VSCode Debugging + +Some tutorial series covering how to use the Python debugger in VSCode. These +tutorials are not in a special order, look around and find the one that works +best for you: + +- [Boris Paskhaver](https://www.youtube.com/playlist?list=PLQzZ4krxwT9Yay3kz8ly4wXiYJHzMtsWi) +- [Ghost Together](https://www.youtube.com/watch?v=oCcTiRGPogQ) +- [Tech with Tim](https://www.youtube.com/watch?v=7qZBwhSlfOo) +- [The examples in this repo](https://denepo.js.org/watch/?url=https://raw.githubusercontent.com/MIT-Emerging-Talent/debugging/main/0_stepping_through/guide.mp4) + +#### VSCode Extensions + +[Guide for installing extensions in VSCode.](https://code.visualstudio.com/learn/get-started/extensions) + +- [Python](https://marketplace.visualstudio.com/items?itemName=ms-python.python) +- [Pylance](https://marketplace.visualstudio.com/items?itemName=ms-python.vscode-pylance) +- [Python Preview](https://marketplace.visualstudio.com/items?itemName=dongli.python-preview) + (basically Python Tutor inside VSCode) +- [Test Explorer](https://marketplace.visualstudio.com/items?itemName=LittleFoxTeam.vscode-python-test-adapter) +- [Python Indent](https://marketplace.visualstudio.com/items?itemName=KevinRose.vsc-python-indent) + +#### Command Line Interface (CLI) + +- [relative vs. absolute paths](https://www.youtube.com/watch?v=ephId3mYu9o) +- [The Coding Train](https://www.youtube.com/watch?v=FnkkzgYuXUM&list=PLRqwX-V7Uu6Zu_uqEA6NqhLzKLACwU74X&index=3) +- [Matt's Lectures and Tutorials](https://www.youtube.com/watch?v=mUXVBMhr7Xg) +- [Jesse Showalter](https://www.youtube.com/watch?v=5XgBd6rjuDQ) +- [Enough to be Dangerous](https://www.learnenough.com/command-line-tutorial) +- CLI games: + - [bashcrawl](https://gitlab.com/slackermedia/bashcrawl/) - clone & play + - [Terminus](https://web.mit.edu/mprat/Public/web/Terminus/Web/main.html) - + online + - [iTerm](https://sr6033.github.io/lterm/) - online +- [A huge cheat sheet](https://gist.github.com/LeCoupa/122b12050f5fb267e75f) + +______________________________________________________________________ + +### Local Development With Git + +#### Git + +- Learn to visualize what happens inside of Git with: + - [learngitbranching](https://learngitbranching.js.org/) + + [a Video Guide](https://www.youtube.com/watch?v=dG0ke9vILQM) + - [git-school](https://git-school.github.io/visualizing-git/) + - [ohmygit](https://ohmygit.org/) - a git game +- [Git and GitHub for Poets](https://www.youtube.com/playlist?list=PLRqwX-V7Uu6ZF9C0YMKuns9sLDzK6zoiV) + (also talks about GitHub) +- [merge-a-matic](https://github.com/lpmi-13/merge-a-matic) +- [Git Katas](https://github.com/eficode-academy/git-katas) +- [git-it](https://github.com/jlord/git-it-electron/) +- [Understand how to use Atomic Commits](https://curiousprogrammer.io/blog/how-to-craft-your-changes-into-small-atomic-commits-using-git) +- [rebasic](https://github.com/lpmi-13/rebasic) + +______________________________________________________________________ + +### Local/Remote Development + +#### GitHub + +- [lab.github.com/githubtraining](https://lab.github.com/githubtraining/paths/) + - [first day on github](https://lab.github.com/githubtraining/first-day-on-github) + - [first week on github](https://lab.github.com/githubtraining/first-week-on-github) + - [prepare to use github](https://lab.github.com/githubtraining/prepare-to-use-github) +- [Getting Started with GitHub](https://help.github.com/en/github/getting-started-with-github) +- [Creating a GitHub Repository](https://www.youtube.com/watch?v=WfhRyz3Wf4o) +- [Connecting to GitHub with SSH](https://www.youtube.com/watch?v=p4Jhf729jgg) +- [Creating a local repo and push](https://www.youtube.com/watch?v=vbQ2bYHxxEA) +- [GitHub & VSCode](https://www.youtube.com/watch?v=ZDo0Qht5D6w) +- and much more at + [hackyourfuture.github.io/study](https://hackyourfuture.github.io/study) +- lab.github.com: + - [First Day on GitHub](https://lab.github.com/githubtraining/first-day-on-github) + - [First Week on GitHub](https://lab.github.com/githubtraining/first-week-on-github) +- [The Net Ninja](https://www.youtube.com/watch?v=QV0kVNvkMxc&list=PL4cUxeGkcC9goXbgTDQ0n_4TBzOO0ocPR&index=8) + +______________________________________________________________________ + +### Remote Collaboration + +- [Building Software Together](https://buildtogether.tech/) _a student's guide + to being a compassionate programmer_ - The technical parts are more advanced + than what you're learning now, but all the rest is gold. + +### Collaborating on GitHub + +- [Adding collaborators to a repository](https://www.youtube.com/watch?v=p49LRx3hYI8) +- [about code reviews](https://help.github.com/en/github/collaborating-with-issues-and-pull-requests/about-pull-request-reviews) +- [requesting a code review](https://help.github.com/en/github/collaborating-with-issues-and-pull-requests/requesting-a-pull-request-review) +- [prevent pushing to `main`](https://stackoverflow.com/a/57685576) +- [Git Workflow for 2](https://github.com/hackyourfuturebelgium/git-workflow-workshop-for-two) +- [Pull Requests](https://www.youtube.com/watch?v=2M16faxEQsg) +- [Git & GitHub for Poets](https://www.youtube.com/watch?v=BCQHnlnPusY&list=PLRqwX-V7Uu6ZF9C0YMKuns9sLDzK6zoiV) +- The Net Ninja: + [11](https://www.youtube.com/watch?v=MnUd31TvBoU&list=PL4cUxeGkcC9goXbgTDQ0n_4TBzOO0ocPR&index=11) +- linking PRs to Issues: + [reference 1](https://help.github.com/en/github/managing-your-work-on-github/linking-a-pull-request-to-an-issue), + [reference 2](https://help.github.com/articles/autolinked-references-and-urls/) +- [closing Issues using keywords](https://help.github.com/en/enterprise/2.16/user/github/managing-your-work-on-github/closing-issues-using-keywords) + +______________________________________________________________________ + +### Open Source Development + +#### What is Open Source Software? + +- [Mozilla](https://www.youtube.com/watch?v=7c0IrsDsNaw) +- [Brian Daigle](https://www.youtube.com/watch?v=1ehpgbb3XD0) codes of conduct + and github walk-through: +- [Explained with Legos](https://www.youtube.com/watch?v=a8fHgx9mE5U) +- [And with recipes](https://www.youtube.com/watch?v=9ShgYrBkTRs) +- [Open Source vs. Closed Source](https://www.youtube.com/watch?v=2q91vTvc7YE) +- [Free/Libre vs. Open Source](https://www.youtube.com/watch?v=Ag1AKIl_2GM) + (think "free speech", not "free food") + +To learn more about all things Open, check out the +[Open Knowledge Foundation](https://okfn.org) and +[Open Knowledge Belgium](https://openknowledge.be). + +#### Open Source Licenses + +The license attached to an Open Source project is not just a detail! Check out +these links to learn more about the many licenses available: + +- [opensource.org](https://opensource.org/licenses) +- [choosealicense.com](https://choosealicense.com) +- [techsoup](https://www.techsoup.org/support/articles-and-how-tos/making-sense-of-software-licensing) +- [infoworld](https://www.infoworld.com/article/2839560/sticking-a-license-on-everything.html) +- copyleft: [what is this?](https://www.youtube.com/watch?v=6Xky8HTqaZo), + [copyleft.org](https://copyleft.org) +- :) [ErikMcClure/bad-licenses](https://github.com/ErikMcClure/bad-licenses) + +#### Codes of Conduct + +The Code of Conduct in an Open Source project describes how contributors should +treat each other. Open Source projects are about sharing and welcoming: + +- [Contributor Covenant](https://www.contributor-covenant.org) +- [opensource.guide](https://opensource.guide/code-of-conduct/) +- [opensourcedesign.net](https://opensourcedesign.net/code-of-conduct/) + +#### Contributor Guidelines + +Contributor Guidelines are important to standardize coding practices and +workflows for an Open Source project. You could think of it as describing how +the code should be treated: + +- [mozillascience](https://mozillascience.github.io/working-open-workshop/contributing/) +- [docs.github.com](https://docs.github.com/en/github/building-a-strong-community/setting-guidelines-for-repository-contributors) +- Templates + - [briandk](https://gist.github.com/briandk/3d2e8b3ec8daf5a27a62) + - [opensource.com](https://opensource.com/life/16/3/contributor-guidelines-template-and-tips) +- Examples + - [opensource.guide](https://github.com/github/opensource.guide/blob/main/CONTRIBUTING.md) + - [github/docs](https://github.com/github/docs/blob/main/CONTRIBUTING.md) + - [microsoft/vscode](https://github.com/microsoft/vscode/blob/main/CONTRIBUTING.md) + - [atom/atom](https://github.com/atom/atom/blob/master/CONTRIBUTING.md) + - [voxmedia](https://github.com/voxmedia/open-source-contribution-guidelines) + +#### How to Contribute + +- [opensource.guide](https://opensource.guide) +- [freecodecamp](https://github.com/FreeCodeCamp/how-to-contribute-to-open-source) +- [contribution-guide.org](https://www.contribution-guide.org) +- [redhat](https://www.redhat.com/en/resources/open-source-participation-guidelines-overview) +- [better-programming](https://medium.com/better-programming/4-effortless-steps-for-contributing-to-open-source-projects-35000599367b) +- Small contributions matter! + - [Why the GitHub metric monoculture?](https://medium.com/@leskis/why-the-github-metric-monoculture-d179a2f1d130) + - [pybot](https://github.com/lpmi-13/pypobot) + +and finally ... + +- [Contribute to this Project!](https://github.com/Syknapse/Contribute-To-This-Project) diff --git a/collaboration/guide/assets/branching_strategy.svg b/collaboration/guide/assets/branching_strategy.svg new file mode 100644 index 0000000..a6d15ec --- /dev/null +++ b/collaboration/guide/assets/branching_strategy.svg @@ -0,0 +1,21 @@ + + + eyJ2ZXJzaW9uIjoiMSIsImVuY29kaW5nIjoiYnN0cmluZyIsImNvbXByZXNzZWQiOnRydWUsImVuY29kZWQiOiJ4nO1da1fiStb+3r/C6ffrIVOXXbf55lxyxftd8e1Zrlx1MDAwMFx1MDAwMVwiXHUwMDE4XHUwMDEwgqizzn+fXbSSXGJcdFxyXGZITlx1MDAxZqtXd2sqJEVqP7Wffamd/3xbW/tcdTAwMWW+tL3v/1r77j2X3aZf6bj973/Y409ep+u3XHUwMDAy7GKD37utXqc8OLNcdTAwMWWG7e6//vnP6Fx1MDAxM0659fDzU17Te/CCsIvn/T/+vrb2n8G/sfs0/cBcdTAwMWKcOzhcdTAwMWHdRZDRg0etYHBDqrikUlBcdTAwMGXDM/zuXHUwMDE23in0KthddZtdL+qxh767lZdTVW7t1tktafqnl2HvotCL7lr1m83z8KU5XHUwMDE4ULeFX1wi6uuGnVbDu/YrYd3ee+R42qc6rV6tXHUwMDFleF37xaMv0mq7ZT98sdch0VE3qFxyrlx1MDAxMVx1MDAxZHnG36RhXHUwMDBlp5pcdTAwMDLDb0spkcNe+3mphKMpXHUwMDAzYTgx2siRYW22mq2OXHUwMDFk1v+RQYtcdTAwMDZWcsuNXHUwMDFhji6oROdoqT0jo3P671/WkUZwysSwp+75tXqIXYo4XHUwMDFj762irq43ePrCUGY0gFx1MDAxZXbYu7VcdTAwMGKVgVxi/Dt65Fx1MDAxZPfBK9hPXHUwMDA0vWYz/tyCyttze1x1MDAxN5VIWNjbkT+jr2PP345cdFl0h1674v6UXGKqXGLTQlx0Lrjiw35cdTAwMTS8xujtm61yI0GIuqHbXHQ3/KDiXHUwMDA3tdGPeEElpafpdsPN1sODXHUwMDFm4jBOWn5cdTAwMTCOnjG47nqn0+rXPXfsWeCVU/va9nJcdTAwMTGqbIt+WotEafDL8Od//5F49tg82zac4ejT3+L/v83B1HiWKlxyz1opzVxipdPD+eGw9qL6YfOsXGZhUelC2dtcdTAwMTflbMNZaeNcdTAwMDDwXHUwMDE0OIM0jtRqXGJnXHUwMDAyI1x1MDAwM1tcZqClwzXTiYBcdTAwMTaCO4JxSIA0w6VWXHUwMDAyg+hcdTAwMGJlXHUwMDBi0tGz+oL0e1x1MDAxYptp22JzvCBQU1wiRo9cdTAwMGW1NFx1MDAxM6BRbGKS/itY770+nrb31PFcdTAwMDXZuORyT4dHxZP7XHUwMDE0WNfdcr3X8VZcdTAwMGZsI5UjuNQmXHUwMDEx2FxmjKOAUZB6XHUwMDAxwFx1MDAwZTtu0G27XHUwMDFkREZcdTAwMTK4lVx1MDAxNDJcdNuUaHBcYjck3vtcdTAwMDZuSiU1XHUwMDAwXHUwMDAyouX5XHUwMDBi3dlH98epti0+yTOiO/Sew0R003R0XHUwMDFiQVx1MDAwMPW2YFOju/NaXHUwMDA393D9xnve3y5B/7DHdmQ98+jm3KHSKIJr2Ti6qZaOXHUwMDEwID9cdTAwMDHdlo4lKu5cdTAwMTjTXHUwMDFlQpozzank0dzMXHLpXHUwMDBmXHUwMDFks2FXaj5cdTAwMTd2q60gPPdfXHUwMDA3y1x1MDAwN/lwNO8++E373CNcdTAwMTI/XHUwMDEwXctcYl0/+Fx1MDAxMZTwXHSWYzJle9ebfi1cdTAwMTjoMK/6UcpDXHUwMDFm7dVhd9hqR71lvFx1MDAxYl7R64w/nVbHr/mB27yYeGerMHeH66/DYvPe9Vx1MDAwNtpcdTAwMTRnXHUwMDBlJqLSazb9djfZNobRg++45CiinOK/U8OSimr73DeN/PXJ/vHpJlx1MDAwNd7f3cs2lzbcOJQollxmSlx1MDAwNmjPXHUwMDEwXHUwMDA0LiyVS1x1MDAwYmTsXHUwMDEySKLCZVxuXHUwMDE3XHJIVLeAQ9OSsWhQq8CmkFTGZfVcdTAwMTfYnFdOXHUwMDE5S5NTXHUwMDFjXHUwMDAz5SDV9DZfT5ZexU1gTnc3Xlx1MDAwZsOrzfNm8aCfdTmVTuTBXHUwMDE5lVOuuFx1MDAwM5pcdTAwMDDTRGROTlx1MDAwNaBuk1xcrFaFrFxcTClOi0SzaYb19LDTL+w91q9d0b/qdFx1MDAxZTd7J6fVbrblVEmYIKdcdTAwMDAqu3JKpaSEXHUwMDFh8vdYTzlPXHUwMDE1VIKPh2pCpufjN7R3s364mV83533++nhkeuv8OOuCylx1MDAxY0DtnyyoknxcXFCzJKaaXG4wXHUwMDA0wfO3XHUwMDEw01R6ylxiM2g3ajaD2Shhv1TcpZt7XHUwMDA3YEzfJ9u7fjv7Ypq+nlwiSFx1MDAxZG5cdTAwMDDFQWROTFx1MDAxNdeUMkN/XHUwMDFmtZ/muYyZzePhRU6NUkpPLaPmnOXzxcZ5uN9/fH3c7txvn5xm3YZcdTAwMDLpMCqFMkk2XHUwMDE0N9xRxlrwS7WhKIqiZiTZsSGUI0Dq8XhcdTAwMDRcdTAwMTCjOIWMxiNmk93YY/2tPZa5hKm2bTjJ0Vx1MDAwNb7F/5/VZSnSYVxyRmmL6ulhfXb4XHUwMDAyft5TV7xQr2ychOboOZd1hiSIXHUwMDAzMlx1MDAxNdZK21AvU3RcdTAwMTH+ynRYXHUwMDEz4XxE7iRvJYKGa1xccleqc5BaxLjZsr2V5brbbHpBzVuNy3LC7Zfrt1x1MDAwNDl6cJhcdTAwMDNAXGZVZoZY4fZdbe+mwangwXGxeEQvb/JnMuPYlMJhP3GZQFx1MDAwYtGMZY6VQsGzZ75IXHUwMDBlhlx0XHUwMDEw0aB+V17ITapcdTAwMDLRkiElXHUwMDAyOb3t8rpdb4b9x7yBRlx1MDAxMFx1MDAxNJ+2n85cdTAwMWGFs2xcdTAwMGKppspcdTAwMDFcdTAwMDU8OZxNXHTXjuZcdTAwMDLFUy8x71xmXHUwMDEwXHSMJipcdTAwMTBcco5SiWkqyFRtXHUwMDFjW2cz80xSNYPo/l1o4fhM21x1MDAxNs3xjKxwLp9cdTAwMDRcdTAwMDXFtDRsXHUwMDA211k71Du3nnvUZ49cdTAwMDdBNYT93eLGa7ZxbVx1MDAxMLjpPlx0PKAy6zszklx1MDAwMc5cdTAwMTFdufKZXHUwMDA1wUuQU6YpXHUwMDE1MFx1MDAwM0eqXj5vVdjV0U6VP5+Lwk3QL1x1MDAxNjMvppNcXGdcdTAwMDIlKKNSynDMSO7Uyj1nK1x1MDAxNlKJ1lx1MDAxY1x1MDAxMJghN//WrcnSy+bL3k7p9aBaKzz7r09+xqVcdTAwMTQmSSnllGZVTCmTVFx1MDAxYmbU77OYpjF5NsFcdTAwMTUkKVPamOmjur2boHeab72E/bOb0kPN3bhxdzJcdTAwMWXVNVo4xJhcdTAwMTQmL1x1MDAxNMpILON8OUSe6pSsNYVcYknOj+FcdTAwMDJpvF6Esv9i8Z/F4kem2bb3XHSekcGnJprLdJVDXHUwMDA1YVxmiJ6ev5+zy7OWd7lxe9ntbolGd//w0n/MOJptRIazlJw3ypl0XGJEXHUwMDAxm+XA2ZIznrKBXHUwMDA0p8FhXHUwMDFmXHUwMDEz0N9ziVx1MDAwNFx1MDAxM8pkN17zXHUwMDA16fGzXHUwMDEzptq2XFw0yzNcdTAwMDI7NWCT6lx1MDAxMqZgXUwoy9NTye3Gxl6NPz3vuseHVXnx+ljtrvOF4rriduveQoGNWFx1MDAwNoQupKSYI512QHCil1xu7PSATcygXHUwMDE5OoOtXHUwMDFkypFXrJBCSlx1MDAwMobPXHUwMDE1aJ0rYONcdTAwMDatsO511n5cdTAwMDQrXHUwMDBl3Uw1kGmCOFLPp4dJalxuXHUwMDFhx0mRhsnp/Vx1MDAxM8WHXHUwMDE3XHUwMDEzPj25OXLd7dTysKGbZivbapharoP6bLBcdTAwMDc9IVx1MDAwNVxyrTI0/IZcdTAwMWJCloLW+XZxUq5cdTAwMDWjXHUwMDE0bdKMqmFcdTAwMWSX3y81PGhcdTAwMGLexjlpS0mqtSwkYajvYXp6zTYvd1x1MDAxZkvr8qWT81tnXHJ1+1x1MDAxNFx1MDAxYZ1xXFxcdTAwMTPk10xyXHUwMDFiQEoqt8CVI4ySVGQvZ1x1MDAwZlBCOFOrT9WfXHUwMDA1wPOKqU5P1aeKXG79YVx1MDAxOL/0j+fMyUbpWD9eX21e3/nth93ScyPzclxuuCZcdTAwMTCZXFxHgDLCXHUwMDFku/9cdTAwMGayl1xcamymj0L2+NvIaSpJSs8hUFxujCZcdTAwMDSmJ0k1n+dLvftbfXBSW2/mLopeob6bbSG1iS5UXHUwMDBizlx1MDAxMpPQJOOOVHS5rlxuqVx1MDAxYy1o8nZ4+JnbmkCRXGbYXHUwMDA0XHUwMDA3+KJIfyGKlFx1MDAxYp9q24aTvDiKNGmbXHUwMDE4kdJINsM2sdvqxo6Xe9jx6F6zXHUwMDFk6vvjorffyjaspZi0nVFcbpHZoFx1MDAxN1x1MDAxMCVcZl1xiulnUSRJU8WUKSRI1kafWkx3bnLHZ512jpa2XHUwMDAyj5RI7rR0sp9xMZVcdTAwMDShT94yoEfFVHHjoH2uSVx1MDAwNrMsKVx1MDAwZdggR1p5bHbpXGZcdNJcdTAwMGKLWFx1MDAxYc9cdTAwMDSZYWd4N1C73fvOPe+Gh4rmm14+f3GYbVx1MDAxOVVEOCY1Td/yJ4nPYbleJO5cdTAwMTj9wVFcdTAwMTRcdTAwMTEkmVx1MDAxNslB+0IotojCXCJf/OizXFxIo/Ns23CGZ2RHqZWC0t1HSlipMdN7jy73blWT54rH7qPvXr1S/2B7O+PBWVx1MDAwMahUXGKQZDjjoeUn9uO66SRnTI9vudFcdTAwMWG1XGasdMe85Fx1MDAxMqL5WXb4xntue1x1MDAxZN9cdTAwMGVsNVGbSfdfwI6bdD9EOlx1MDAxNVx1MDAwNKnQ0lUzbMT2ucjrvHl+XG6uVOG1IM96+iBzKVDcRq1cdTAwMDelgYxBXHUwMDFlXHUwMDAxXHUwMDEwXHTDwH3GXHUwMDE4OFx1MDAxY1x1MDAwNvqCS1x1MDAxOfNFXHJ2ZiviXHUwMDEwUFx1MDAwNlGK16Axc2HVVXXt5kVcIlx1MDAxOMlsWtSX5lx1MDAxZD97oWV1J1x1MDAxOHxUTUjHVWBLsc2wl33TdSu7J1xijcO8d/b85PeL9DD3V4M5Mahcclx0U4ZcdTAwMWHCWbzMlL2isWX7qCBGXHUwMDFhXCJcdTAwMDXjoyNdqVx1MDAxMchcdTAwMTXH4VP++1x1MDAxOIFcdTAwMTNFd0L9WORSs1x1MDAxNGF42W5cdTAwMWSd+b1cdTAwMDNTJ1CqPjw2lNDXfz3BXHUwMDE1jlx1MDAwMFwiJC5cdTAwMWOC0ljR7IFhqFGmiDSaXHUwMDBihmZYrFx1MDAxY1BcdTAwMDZcdTAwMDRcdTAwMTeosHjTK6/EtPz4Tmyr+GiBXHUwMDFiu0mHilx1MDAxOZJg7nePqvu9u9ers/1ypU2e1nub1cXmrH1cbq1CZSdcdTAwMTjKpSRMiFiS0GC9RfPI7jDTRitDtMhSyEfht1x1MDAxMWpcdTAwMTGe4S9e9XeK+Fx1MDAxMFx1MDAwNopcdTAwMWIyw1x1MDAxNpKt+o65qFTKrerTpuxcbl5Yf9nI+D4nSrVwXHUwMDAwKH2rbj5ayVxucY3syu530pAtXzpcdTAwMDeFrG8hkdyMKKO5XCI+wFx1MDAxODJcdDFDyVx1MDAxYriBW/fA7ZTO+lvAz1x1MDAxZbzczU3WhdSg2S6QM0GSkNpcbt7IqIUtj5gxIaX2pSdcdTAwMTmoXHS4fMKk01x1MDAwYr9QyVx0zJC0tb310j3eXHUwMDE3fn9TP235OeNTryGyJqG/4ktcdTAwMTSUI1x1MDAxNXJF7DNcXMS84z8rXHUwMDA0gqOktD5j67BaXHUwMDBly58n/qNwZIBcdTAwMDbIXHUwMDAyKP5cdTAwMTdb+q3iP+nvgUGCTdBUncHPfGqK3adcdTAwMTZ4d5Wji8PmXHUwMDExbWy2TNZcdTAwMDD+UVx1MDAwNYGyb3kh5G1XXHUwMDAwkSP2XHUwMDBmIVx1MDAwZVAgjC4xnss4OMloXHUwMDFli/8wyVx1MDAxNcfFaaWKR+n4jsClv1x1MDAxZsLr1Ly1KFx1MDAwZbP2I/Cra3641ne7a91euYxfp9prfm5YaOZBLSBW5NpFJ1x1MDAxMcLptaWpZEA4m8FcdTAwMTd3lD/cXHUwMDExUKmaO9IzW+LqqsJ0xov1S0ZcdTAwMWRNSUrSqtbMQc233LpXRqWzSDXe91x1MDAxZc1FiiBcdTAwMTlnXHUwMDBiQPMylDKbXHUwMDBi5JlQyqNgWaheXHUwMDFln2zbctE8L0w1pzorXHJRUlBcdTAwMDXT4/retJRX5LeNe/5IToP1wHts1rKNa0o1d/TAOZ2Wa4VPe8l1MJh2TDKux7UzamZcdTAwMDOgVupHR8ODx+qhfV5+xtqqXHUwMDEzNFx1MDAxMlx1MDAwNrDcmqhMpCdpUFx01vOmpncySsWrvFC6XHUwMDBl9ltX7aPd+mknv+5mXHUwMDFioLaYkmAmJXlKK2btXHUwMDE3XHUwMDEwkmvCiFx1MDAxNiPjWm3NL9S6XGJcdTAwMTW16i1NM+nYeVx1MDAwNZXqVEFcdTAwMTWSXGJcdTAwMWPK9Cm7freTU4E6f915aDzXio2r41x1MDAxZJL5ynQoI3TYRr2MXHUwMDFhXHUwMDFjyKiYSmW9o6BXnVGwOClNLfnF018yTVx1MDAxNFx1MDAwZYLwXHUwMDE5XurwUDznl7eF+l4uaFx1MDAwNtvrW/lccq+QcVx1MDAxOVx1MDAwNeFcZktcdTAwMDSNL6WGO1RcdC3R/l+ejM5cdTAwMTeGZVx1MDAwMExcYmkyWrz3L2zE/Fx1MDAxNnFYSLVhKOdcdTAwMWO58ixb72Th+KRU4U+5c2jfV7f2yUW3oLJccmzNJ72txTDILEeSXHUwMDAwaEpos+qsoOUrXHUwMDFmatKzXHUwMDA1mDFcdTAwMDYoNTNon902c7dvTnv3XHJ3vVx1MDAxMPT2XHUwMDBle7vNjFx1MDAwYilcdTAwMWHa3KB2UUmlXHRsXHUwMDEykFx1MDAxYWRVL1X7zFx1MDAxMdXiXHUwMDAwXFxcdTAwMDBARnOrv3RPwtmfXHUwMDE01UpFtFx1MDAwMG5cdTAwMDM60yud1t3e02EzV7tsb16e75yYrWNcdTAwMWFcdTAwMWWk4HlcdG8/jz4zXHUwMDEzooVccmS/18RcdTAwMTnjk0I7REouXHUwMDE3UFx1MDAxNGfiu8+ldLQyXHUwMDA2XHUwMDAxobWWKlZeIyp8XHUwMDE1XHL8PVZtg+yai9UqXHUwMDFlqflcXEHpKdxo0ZS+u9FarXb3XHUwMDFmP4JSr7ZW9Z8/14OWdu9R55mISUHkPeOJ+PyJnHyhu/XQ6VJz0L99cFx1MDAwZnvV4+OTmEsrWS3/lF5mrSHCQVx1MDAxYSkofJRebvOCuN3ro4hcdTAwMDT8q8bkzso3tY5QYbfeXGKZVPVcdTAwMTSIg8ZcdTAwMGKaXFzcVjxRMcUzXHUwMDBlqVFcXFDP/plcdTAwMWRcdTAwMTfTK//RXHUwMDFkTFPVsfzVWrFU7fhuXHUwMDEwXG7GuUBcdTAwMTiN7Su160F6ZW+NXHUwMDA0XHUwMDA0NJtqu+kokj+Me9wlLvGyc5WKXajiS5VJ28alcVxcXHUwMDEzzqrrZ+ZcdTAwMTAzM4RcdNjPifrWfWO7qDZrxyd3u0ePLaLL49j/qMBcdTAwMDdcdTAwMWLs0WBcdTAwMDJcIrShaFx1MDAxYlxuMpJgxZR2XHUwMDE0cC2RlVv7MZL4YcRcdTAwMDbXXHUwMDBlnsIjI+n7gvjaJFVcdTAwMTmrayFcdTAwMTVcYja2Tc2aXHUwMDA16Vx1MDAxYoCk0Vxmllx1MDAwMWU1XGJ7zlx1MDAwM+V3TdvGc9dcdTAwMWVQNf7xIyh3PLz82mjUaOZA2FxcXHUwMDFh+kNcYmpcdTAwMWW9PcU3XHUwMDE5VeFcdTAwMTO5dHpcbmgql0ZcdTAwMDKJRM2o6VPE3FKdXFy+1vy9vZP75/OHu1x1MDAxMls355lcdTAwMDFPWuU+bd+AinqEWS4r9cclXHQ0dZRgkjKDJFeJmKpZ1JryvrYpcIRhtlYvUYbEXFzmXHUwMDExq7GWvLZpYlxuXHUwMDE3UMrFeFx1MDAxMWg8aF/JtIhtios2mlx1MDAxNT5q85Vcbjp+di5t5m1cdTAwMWKf83HuMFx1MDAxMfmpVvSEcojMUM5QXHUwMDFiT29HP7Wa6m6/XHKdMy+fv7+7MNfH3lxc7/38VOijXHUwMDFkzcBcYrRFXHUwMDE0qsKYITGAPuPI6Yh9uVx1MDAwM1x1MDAxNTz+gq9FI386VvNcdTAwMWXdXHUwMDA2VJJSLaLYz9xcdTAwMDa0Qlx1MDAxYv5cdTAwMTOzRKdQhp9hS8+hk5NcdMFcXJpcdTAwMWHVUzpeXHTj0ohcdTAwMTleybB1e1F0Xy9cdTAwMGU2Lp82nstn136zsXubebzyn1V0XHUwMDE5XHUwMDE1aElcdTAwMTH+MZ2bMmZcdTAwMWOGQEbjXHUwMDAxXHUwMDFmh4IlXHUwMDAylkiHMdDK4Hqs7WtcdTAwMTBcdTAwMTOUNcfRaNBcdTAwMDJwxGj0kTFlzSUjuLQs4t10XHUwMDBi19VMz+kh+811dfrMXHUwMDBmesfmfFHKOj3Jx5I9JVxin35r+/ou2zjaLtxXizey0OuVrzc2ve2sY1x1MDAxZtHtID1SwCVcdTAwMWGf2oxgnyOH4sZuzVwiVFEq0sNY/yv2XHUwMDE5XHUwMDBlRKbkUYyX9EIy/tHPsVx1MDAwMmUtXHUwMDE10cvydicp6279TS9GenKgOjveY8/rhp+ttKdcdTAwMWXOXHUwMDEylTekv5/FXHUwMDA2cIhGpTV9XHUwMDEw+vZo66pz17/f93TxtrbezHvd+2LGXHUwMDAxrK1vz1xihlpbaFx1MDAxNVx1MDAwN+jPz9tUbKU4QVPbmPhqtnAzm+GNXHUwMDE4KKU1UVx1MDAxYZl9gupGiCtcdTAwMDJEK1BSgolZSkM7m2iOVkNcdTAwMTZVt5TxylNfqvu95VJn3rbxOV+Q6maTXG4/XHUwMDBmSnBcdTAwMDJMz9tPxUMlfLx5KVx1MDAxN+BJtFxuObbz3LnPOPSlsFlcdTAwMDFGI7zxRzJShVx1MDAwNpW1dohG2ZVWWS6Rtc+muVxy4CpFVlrvS0lkNJ9XjvPvobm/vS1cdTAwMTDf3Xb7PMRrXHUwMDBl1+DvT77X30jIaqpcdTAwMGXa929v4Lco81x1MDAwNkv3n9/+/C8rzvjSIn0= + + + + + mainbranchchallengebranchanother challengebranchexperimentbranchmerge experiment if it was successfulexperiment branchoops!bug fixpull main,create branchpull main,create branchpush branch,create pull requestpush branch,create pull request \ No newline at end of file diff --git a/collaboration/guide/assets/claim_branch_review_merge.svg b/collaboration/guide/assets/claim_branch_review_merge.svg new file mode 100644 index 0000000..77fd84d --- /dev/null +++ b/collaboration/guide/assets/claim_branch_review_merge.svg @@ -0,0 +1,21 @@ + + + eyJ2ZXJzaW9uIjoiMSIsImVuY29kaW5nIjoiYnN0cmluZyIsImNvbXByZXNzZWQiOnRydWUsImVuY29kZWQiOiJ4nO1da1fbyLL9nl/hm/t13NPV755vXHUwMDEwwjNAeFx1MDAwNcLNWSxhXHUwMDBi28Ev/OB11vz3WyVcdTAwMDOSbfnFsYg4XHUwMDE5Zk1ILLnVkrp2711dVf3vXHUwMDBmhcLH3kM7/PhX4WN4X1xu6rVyJ7j7+Fx1MDAwN31+XHUwMDFidrq1Vlx1MDAxM1x1MDAwZono391Wv1OKzqz2eu3uX3/+XHUwMDE5f4OVWo3Bt8J62Fxim70unvd/+O9C4d/Rn4nrdMJSL2hW6mH0hehQfClcdTAwMDVi9NO9VjO6rDbeOS+5ezmh1l3Dy/XCMlx1MDAxZb1cburdMD5CXHUwMDFmffy+vfp4tMXb5mHn5vtW03WEenyIr3pVq9ePelx1MDAwZvXBPVx1MDAwNaVqv5PoU7fXaV2Hp7Vyr4rHYeTzl+91W/hcdTAwMDTib3Va/Uq1XHUwMDE5drtD32m1g1Kt90Cfcf7y6eAh/FWIP7nHf1nLmVLO439WSMvNy9Ho+4Yz7o3UXG7M4GekY59a9VaHOva/PPqJu3ZcdTAwMTmUrivYv2Y5PqdcdTAwMTSWVTmIz7l7ul2hPVx1MDAxM17j87ZeW6vUy1x1MDAxOdWwVqn28Fx1MDAxNGeZlF44bUFFf8ZcdTAwMWRcdKM3XHUwMDAyXHUwMDA231x1MDAxOFdS+ZcjdPn2VjlcdTAwMWFcdTAwMWP/it9DJ2iEW/SVZr9eTz7KZvnpUVx1MDAwZVx1MDAxZLikXHUwMDAzn0fHWXKsXHKNt6DTad293GJieFxc3Tb4Ne+LtS/rXzZ39j9cdTAwMWbb7Wbx48t5f//xynbPVrdMu3jxWL+4hEPfcpWLk4eLJbR7/92vQO+4s7FduthpXtavXHUwMDBlNvtcdTAwMDez21x1MDAxZHxZrKi1L+ZTuOqKm99lt19b3SlWh68y3IG43ae/xS+s3y5cdTAwMDdcdTAwMDOrXHUwMDAzy+nde+91YqDWa83r0ZdWb5WuY0P9kOjwXHUwMDE4QPTC+15cdTAwMWE2gIRJ2Fx1MDAwMFx1MDAwMiTnzlx1MDAwYjU3OMhd2Oiv2N3PlduNxsOXXvE+UGH+wUEzyVx1MDAxNZdGaSelVCPg4JiLkSEzcFBcdTAwMDYxSFo9XHUwMDBlXG6J5/+MXHUwMDAyzlpjXHUwMDA1nv9rUGCa6Sxt9Fx1MDAxYtCwwOiP77nV7Fx1MDAxZNVcdTAwMWXpuoJcdTAwMGZ9ulx1MDAxZTRqdXqn8WOLzFx1MDAwMjtYqlx1MDAwN7XGn6VOiL0oXHUwMDA0zUKt2+0nhiadtlKvVZrRufhwws6QMfVqOGm/nNColcvJmbiE11x1MDAwZWrNsDP+JlqdWqXWXGbqx/P1XHUwMDAzXHUwMDFmQ7j5PC6AicRQ64Z0MLrpV1x1MDAwMYFITCkjQGCNQ5rAXHUwMDEzT3NcdTAwMTZcdTAwMGWcu5/3K/Zb/dzttDo7/fPtzk3lKvc44Fx1MDAxZDNcdTAwMTJvk0BgXGZcdTAwMDfwY2a9NICzN2SHXHUwMDAzoOPX8IJcdTAwMDBcdTAwMTB/9oxcdTAwMDCWgzZKJlx1MDAxOEK+eED61LhcdTAwMTBcdTAwMDJcdTAwMThntUhcdTAwMGX9VyBcdTAwMDCYoU+nIECxXHUwMDEwdLtowIVcdTAwMDek5GhMV1x1MDAxM6y/XHUwMDFlXvWm2H6v1X6V4U+5/IjRI/jrxNB6sXvQU+1+qkKQbqLx44D0Rkth4yc5y/pcdTAwMWLdsGKPr07W2/v6oi/WXHUwMDFme3efy7m3flx1MDAxMFxmyVx1MDAxMDiUXHREXHUwMDAzhq1fasJcdTAwMDYpXHUwMDA10lx1MDAwNGGlXHUwMDFi7ddyjF9cIlx1MDAwMqVzXHUwMDAwYiGeXHUwMDBiz8FG4iBcdTAwMWW/L5RcdTAwMDCkxfeUVzzISlx1MDAxN2w1zvnPQ9/44u/31u9Vt1x1MDAxMVx1MDAxY16HS2j3+1qd35xurJrj4s/zg7Xjzdp+e31cdO1Wt3c73ZPHi7VKN9g8KVUu2vfhUba4+Do6oNVERPBcboR0izhccjY3e42DTzurn8tXXHUwMDBmXHUwMDE3ZWE6e+0rmXtEMFxubX5cIlwiOGA4XHQrXHUwMDE04847x31GuiDB8acoXHUwMDAyIZySmnOdtflnPWHPT9nXwtuw3mpcdTAwMTe+44RZOFx1MDAwZbrXhS8tnInrXHUwMDBmbztxz9GNXGZZu0qM4lx1MDAxMTPFycApXHUwMDFjmXNcdTAwMWLpZWu7fWHPP1+u1fSeO/puu9d7pdxcdTAwMWKplMxKgzc7UO/DRqqEZ5p7p1x1MDAxZFx1MDAxMnuvk3azzGlbx7b/YqNcdL70ZKNOaOO1ydxEXzkznXy/PN78tFH93uy1+ydcdTAwMGb1i/Lxxvd8M/ZG6zYs9KrhQCZcdTAwMTd6rcJaq9as/GhcdTAwMTZcdTAwMGJtvGqhXHUwMDExdFGp/9lAU6aDRK1cdTAwMGKlVqPdx0/ppGedXWiGd4XLTtAsVVx1MDAwYne1Xlx1MDAxNT+ptFrlQlx1MDAxM99E4jwkXHUwMDE3eCuFu7BeL9KhMjXWqOFTf2OpkL/7nlOjWDFcdTAwMTXlhsdmXHUwMDEy5tRkL6VWXHUwMDFhxYmT8+uTdC6ac6BD6s+s5sZpXHUwMDE0/tzHjUTOXHTNmeBgtLJKXHUwMDFi51x1MDAxM09/qc5cdCbwUXPjlUfMXHUwMDAzXHUwMDA01Vx1MDAxNKXCOXNcdTAwMTZQKlx1MDAxOeQkPInIz1JFIFx1MDAxNnNcdTAwMDVLWMKIXHUwMDEx7nlcZomnT/6Ob/BNKEy3XHUwMDE3dHqrtWZcdTAwMTntcLhjT4t3W3OsntGjXGLadFx1MDAxN8xcdTAwMWGD5NJcdTAwMTllJcpNkzjjqlXq031cdTAwMTQ549xZXHUwMDAxwmrvuPNeazt292GzPLtX01x1MDAwNftLryzDkSdpssV+aa7EhF5Jq8BIL1xmdlxunFx1MDAwMDXWqzpcdTAwMDLUp1xiQ/Dxf0Xs6o0+5uh5rlx1MDAxMFx1MDAxZVTDYGxcZuBdJY+NXHUwMDAyR5taXHUwMDFjnlx1MDAwYuO/XHUwMDE1YsOK/vHy93/9kXr25EFcdTAwMWZcdTAwMWRcdTAwMWRcdTAwMWLucXtcdTAwMWaSv1/ll0H+Nlx1MDAxMfekXHUwMDAxXHUwMDEwfJHVmU/nZ1x1MDAwZvLKP8rLjZXtjYvvm6eNnU7ecVx1MDAwZmVcctPeelx1MDAwN9ZGnlk7hHxcYnmMaJVAVepRjNmRji1cdTAwMDf4lORokWCH5rVcdTAwMTjyrGDaKiMtXHUwMDBlXHUwMDE0i2RzXHUwMDE08ZRcdTAwMDSEPGHizuWL+mXlRPlcdTAwMDVO4Km2NklFSTXRzFx1MDAxNNeeXFxcdTAwMDDzW5m52avAl/O17m1p/2G3uv1weHZWybuVaTBMXG6vxMDGRmSUsZpxwSWCvqblkWxklFApMipl8dOAXHUwMDAy8MZmbk358XVcdTAwMWOGN/2w20N+/qlVXHUwMDBlXHUwMDBih+FtLbyboDpmLk++VnfM6ESGXlx1MDAwZWsmXHUwMDA2MIGgmVx1MDAwMZF3bvvs7z2u3Nx3zuxuq9/tu+217VXXzLt9Klx1MDAwM8xxiWA08EWOzIJcdTAwMTbNXHUwMDE3qb9SXHUwMDA2jUNnZaDSp4Qs+YTUeDZQZK1OQm49XHUwMDFkVp43Pz3qa3/5c3N17St83t856+Tb09Hud6tcdTAwMDNcdTAwMWT/JNdR1pNcdTAwMDMgerCFTthuXHLp+q+HhatOqzH0XHLyXHUwMDA2/DnwXGbQuZ1cdTAwMTdr7kSGnPhCqVWvh0FcdTAwMDVcdTAwMGbTiXRzg8+x1WdvQuR4oKORK1wi/ohOOERS/lC4anWm41Rm3pH/jmc1p0fFw1REnehRsYnpczQm1HLrvJrfcZxOXHUwMDFmc46oTlx1MDAwMePI7pTn4LROLGbR97WwzEtjXHUwMDA1XG4+4WxGslx1MDAwMjVcdTAwMWPzqFxcXHUwMDA0Pm/rlE/TXHUwMDE2gvzbWiNcdTAwMDdcdTAwMDWC/jFtgUpbXG7OPSxcdTAwMDFt3507ZabjXCLplsDuXHUwMDE46clcdTAwMWaBMt7HXHUwMDFlxcKzf1x1MDAwM8Zudi7vyXRZXYh9OviShcNJ1GpcdTAwMGKgkn6EZD+Bg0a9aVx1MDAwNb5s8v64sV69J+9JceJcdTAwMTinn7HRXHUwMDFkN/ch+ftVzlx1MDAxM1x1MDAxM7vNRiFOolZ3elx1MDAwMdfJdvVordu6O17pb35cdTAwMTZn9dLPo5PuTt4hjla/pFx1MDAxMS8xbcOc0Vx1MDAwYsc0UjVuhCZcYpMj/VqS58RKJkG657C6XHUwMDE0XHUwMDA2XHTaModooVx1MDAwNE5yyns/XHUwMDE29e49XHUwMDFl1Fxc5DW4RTZcdTAwMWW3d697pZWTeq9+4D6Jx9XHkyX4T35cdTAwMDFRnWpuXHUwMDEz/Sd6SviYxKOgXHUwMDE3WIe+Lq73d068+3bha837x+vaTlDJffiYloIppFx1MDAxMdZBZE5i2NaUY+bJfzlsXHUwMDA1v8CBgrZEXHUwMDBlSZd5XG5Jfvwnn1rNcr80n/8kI10yo1x1MDAwYlx1MDAxOXpPXHUwMDFjn+jdXHUwMDE03HNcdTAwMGJcbtT8od07qztb6nTz8UK3yse9iilVjFvLu3UqY1BBxf7N4fwv7zXTSLeQodBkmM08XGIpa6XjMVwiaJrOXHSRfVx1MDAxY1dGM11cdTAwMDYzUprlL+I6Kde6yK27T3K9ilx1MDAwMyTsXHUwMDE2KDCiXHUwMDFhokonXV5ccm7JXHUwMDExQFFbka8gqF/TXHRttJVWM9L//cHpJbLcMWfB4GuVXHUwMDEwz4i8XHUwMDA15bBUK4cvXHUwMDFmXHUwMDE1alfxl5v4mrvPvXhrx8h7eFx1MDAxMlx1MDAxOVx1MDAwN5JcYtBcdTAwMTNFgaCFbeXM/Fg4Pf9vOVhYbpHKWypcdTAwMTgqxVBcblvvjPDe2ZhcdTAwMDfQ91x1MDAxZKXKOvLfSoun8GxcIt1pVVdcdKREzlx1MDAxOa1QXHUwMDAxxNrkXHUwMDA1XHUwMDFkUZswyylcdTAwMDZCcmesXHUwMDE4czRb44VcXE7M+5I9XHUwMDFm+NiUSFx1MDAxMKzlez7U3fWKrO5cdTAwMWa0+qsrXHUwMDBm/WD1S8XLx1TPXHUwMDA3MC5cdTAwMDGFtvI421vOdTJs48nxXHUwMDAxjFx1MDAwMlx1MDAxOFx1MDAxY9dcdTAwMTLHXHUwMDA1XHUwMDBlXHUwMDBiOXbzc3lCZka3PHeKM4HSk1x1MDAxMplRiHvsmlXjnXLMa+E4UuooXHUwMDAwY7xP78tcdTAwMGaCctt5K51T+Ji5XHUwMDE3f1xmXHUwMDFktYBWx0Hju1LWoI6Y3SBQeDpaXHUwMDBlXHUwMDE3QmnphsJSirRg5JVcdTAwMTVcdTAwMWOpj8FcdTAwMTalntUgcFx1MDAxY1x1MDAwNVx1MDAwNqdnYTyOYp1cZjrCXHUwMDA2jUI0tlxuzdFcdTAwMGInhZjZnuRcdTAwMDZZlZf4llxyXHUwMDA3bkaaXHUwMDFiNe64uVx1MDAwZsnfXHUwMDBiI7zWevTTWItcdTAwMWFuJTg+v98nXYHnnO2iTTHkuo6jXHUwMDEyXHUwMDA1Ye3wYr5cdTAwMTOWSce9XHUwMDA2b8EmqeZStSjjXHUwMDFh20fL5mAoNSGmfEOhguC00kjLsVdcdFx1MDAxMEg4t7nzUsBcdTAwMTJcdTAwMTKd351ze/pC9Vx1MDAxMJpcdTAwMDIgXHUwMDAwgKF3ilx1MDAwNlx1MDAwN5Bwsj6jqWYobjRCj7Y4s8P4vc+F8NP9oIVcdTAwMTFHtlx1MDAxZVx1MDAwNChcIlx1MDAwNCGKXHUwMDBiO96pd1xy6ZOHOP2MXHUwMDBm7mUhXHUwMDFjKDUxN4smXHUwMDA0ROlcdTAwMDXKuaTmueVcdTAwMWPgKFx1MDAxY0+D1IKSMVx1MDAwMVx1MDAwMS7GsKdcdTAwMDY8w1x0h3vPLSGgXHUwMDFi6dmSwiGkZIpcdTAwMDP+4lx1MDAxNs1K+Fx1MDAxNFx1MDAwZauNxklcdTAwMTUvYXGE4FxmO45w2Fx1MDAwMIpcdTAwMTKc8P+LXHUwMDExbtREl7iwx5G5guBGXHUwMDAyXHUwMDA1TCOFNePYZ5j00SSCL1xuvLTvO1x1MDAxZbmoXeTLct5cclx1MDAwMq2HiZVA3JF4XHUwMDE0WVx1MDAxN5Jroa2b2aBcdTAwMTBMIVx1MDAxM0A1XGJUV8CL4Vx1MDAxNqU3zGlcbvpGayOxNlx1MDAwN5W0xN29UtpjXHUwMDA3rFx1MDAxZG5cdTAwMTBcdTAwMTVcdTAwMWJcdTAwMDONklx1MDAwNPmY0qDkrPbwskyAk0pcbpJcdTAwMGIjVHLMxlx1MDAxNlx1MDAwNNqJpXGQWE+kkkiDXHUwMDExhVx1MDAxMmJqJtLuXHUwMDFmrGzv+db2/lbxS/OnOK9u8/vbvCOt8JzhODNI0fFtSjOcduI0PnmU8cpRbJrnXHUwMDE5lcTgKXFcdTAwMTGJgL+Xklx1MDAxOIbi4ZX4hXGhSLnFK3X/68rWXGbcZz+ad2EnLPxoPlx1MDAwNSol/UVv4Vqco1x1MDAxYvOsb1x1MDAxOPdaQqQnXHUwMDA2MzlNem+R7LB0XHUwMDE3d87tXHUwMDE05z+GbEdRrLqklYxcdTAwMTFChGbMhcRcdMFJR6lcdTAwMTLZXHUwMDE4KkPG4Fx1MDAwNWXCXGIqKpiyXHUwMDFh6fHV43xigCuhlVx1MDAxYo9cdTAwMWRcdTAwMDXpKTxnXHUwMDE5i5O5pUOTSM/0pbUh0iM4kkZcdTAwMGYk9aQ1nqdoK8fIreaUl+Bxslx1MDAxYSc9c1x1MDAxMbFWs/F4t+NcdTAwMWa25PX5xYm8cSf17Z+TXCKsyLflnSaeRVx1MDAxZSk/1inFXHUwMDFjziSg8IHirK3E+45tmjje6Wd0pC+JlCiYnFx1MDAxMWbpXctFXCI3zfG3Tzeb/W8nW+XrrSOzbY0s5j5cdTAwMTNWKs6sdU/V+sbq9SFcdEC6KrlGda5Fwi+65GKe8VOelqyCL0Xj2LCZV+rLT7DFU1xcdDks3Fx1MDAwNd1C0G53WrdvzUhm9WFcdOFcdTAwMTbTY1x1MDAwZsVERlwiUKdoVEZcdTAwMGKY6XRcdTAwMTDOqZkq65hcdTAwMDVaedJcdTAwMDBITUYoXHQqKEa+MznIZ5HZuKGl0myQszb4XHUwMDExKZxcdTAwMDQlNEMt95xZg1x1MDAxYXPUilFcXDqOiJPXortZxVx1MDAxZs4qjvs8ky1cdTAwMTF6XjUpykQhglx1MDAxMWvzOPqEUFx1MDAwYizq797feDg5O6lcdTAwMWXzi/LuwUlcdTAwMWJuXHUwMDFh53k3Nk3ZXGZWUVx1MDAwMrQhY1x1MDAxYilwLcAwYYx/Tu/MaM1cdTAwMDdg3LrG50SEXHUwMDAzoexvVatqN+xUnlJ/Pv2K2J9p188w8lDKKeVcdTAwMGKkVcbLXHUwMDA1ZsEv4mF1x1x1MDAxY4nW5re91lnNlzrto9ynXHUwMDE5afBcZic5ZOaS09rMXGJZXHUwMDE1VrFcYp6Gyj4u1ShdilHK8TRcIoX2IJyEd59VvVBcdTAwMDGp2C5cdTAwMDZcdHsjiX8pXHUwMDE5e2utZlh468i9/7yfc8bVPZUvWdhVPjmbkFJ7vCNHxNyGXtn7eWqvbtvl5s1J5+Z442z/xuQ+xFhrw6TWyiSfbJRKqC1D8zeoRVx1MDAxNVx1MDAxYXlcIlx1MDAxMGK5daNTXHUwMDAyLFKc5Fx1MDAwNsFIXHUwMDE473+jyVx1MDAxN+2i0Ks+Zeb+aEYxrle1Zq1bXHLLP5qR1fSC7vWbXHUwMDBi1MU6tVx1MDAwNFx1MDAwN/pUxSrc5MUuaXFq4ElcdTAwMWKYZcJd/7B5fL95b3pcdTAwMGafz8Jv/PLelbbybsKo/5hLXHUwMDE0eFx1MDAxZibRaMDMS4Bs7VihYJX+OSeP85TJXHUwMDFiO4dcdTAwMWSRepgyPNWYtFopylrO2ryfXHUwMDBlLLvI5Fx1MDAxZq9s93LLlK96lY3mVrO43bs9be80d/xcdTAwMWJsO/P0tzdTwJNcdTAwMDPb7URcdKxcdTAwMDVE27jMbbzpLynvxis9XHUwMDAzr1x1MDAxMKVcdTAwMTSMXHUwMDFir1x1MDAxNoqhRYGhSGJcdTAwMDVcdTAwMTml81x1MDAwYlLZTihlXHUwMDAwwJq0srAgNNNcdTAwMGWxxDo8h2rpjZqw4ILq+XGdv7D27JfAptcgLlxmxTxSUrHF9+295dr49Fxics8lvm/hlVHavDLocfpkVkgk+FNcdTAwMDVcdTAwMWXkwlx1MDAwMrwxQ/GOybBIcFxugLw0XHUwMDE0+mXhfVx1MDAwN0FOXHUwMDFl84Ojo6M9bu9D8vfC5en5ZP+6do7rRepcIq7slaq61+/+lFtcdTAwMDdy4+Fgryb9stN4lo53iHOWUbYxZczTz0hcdTAwMDFcdTAwMTPDmTbWWYhcXFx1MDAwYlx1MDAxOWX3g02BODXuXFxwXHUwMDEyNCj43VRH0Fx0XHUwMDBil4NGfzSjXHUwMDAyy79QbczVmXlUhnqlj1x1MDAwMCY76bmjKIZcdTAwMDVqXHUwMDA0PKzzi+P+/bHba1x1MDAxY/TbX3bF7e3pae5NXHUwMDE2uGaR5/t5QWpYYFiaQZCtKZelo0DN5aRcdTAwMDeEbiUpru/3MdmV7nVUimszrLff1j7Tr5yhZ1x1MDAxZdxEY1RcdTAwMTRcdTAwMDa8UD316bmIOTVGpINMeK/Sxb7TilFYK1x1MDAxMjpSXHUwMDE0XCJcdTAwMWJblDBfxVOHdJFcdTAwMDP8qk1f50l2XHUwMDFlXHUwMDFhdVx1MDAwYm/3iHJHqUT+RNaWzlx1MDAxOCvcXHUwMDA1tVx1MDAxZfL+yO6CQi9cZlx1MDAxYYVcdTAwMDZ26m1ccn+ujmRcdTAwMWSskrT1sfKqOFx1MDAxM+HYW6C+6kHNXFyXPz9cXO/fnq2uuupG0ZxcdTAwMTd3845cdTAwMDaenPScR543XCLUwy58LymbTepB+jT3I93KUaWsyL+PiOZ/t1CVWaWyXttuVo7FWfvAvbbduuuUVlxyXHUwMDA09r7b3miv3FVcdTAwMWFcdTAwMWL39zlcZtnRk1x0XGIo5dDWXHUwMDE2qbl+vb7/tfZlp3Fw0/blYq/V319ccnKPOcBcciXXXHUwMDAwPK84XGZjjuaMwqS1llx1MDAxMtmIXHUwMDE47dfbhrE6nFx1MDAwNFx1MDAxY1xyj99HXHJ8XHJqnT83oprBXzutXG7eWIPchG9KXHUwMDBmZvUhS4Wg1OTymThT4phcXEBcIpRPLz/Xy4fySFxcm1N3fFg6X3/IvYF6i9Otp1x1MDAxNEpII1x1MDAwNV4gKVx1MDAxMJS+XHUwMDFiXHUwMDE1Xc8m+U2KXHUwMDE0XHUwMDAzTaQ7vVTINI4ke17X/bKa9n/BdqppqPKaemRUXHSr3Wld4sOlXHUwMDFhW8OlwpOFuGJfXalcdTAwMWV0u6RccqJi47TXJJ7SQnOJtEM1rLffPDLpre5mzvglLV9cdTAwMDV2yLonYVx1MDAxZCUw+0WKgq31mtXm+U1cdTAwMDdOLrtH3/j1w8VZcjfvnEKdc0xJIZ6dISPbS3DHLFx1MDAxNYuJNp9cdTAwMTM6m+VT6ebbXlx1MDAwMsBaSi7P625KsyRDXHUwMDBlMSneMuGu1bl+2bmgXHUwMDEzNlq98Km638v+XHUwMDA28Y6S5XDc1oNyOVx1MDAwMlx1MDAwM7Lf4l3QxFx1MDAxYivUg8uwPr5cdTAwMWZcdTAwMDK+UCpcdFx1MDAxODRcdTAwMWYoVrHWLVx1MDAwNNG7KbSahW5cdTAwMWRcdTAwMDfOMyy8wMFTrcJcYjiijVx1MDAxY95cdTAwMWHt3v9zynhbXHSRXGJYXHUwMDFhJY3kXyGhMzeSplx1MDAxYlLOkZRcdTAwMTbBmcJcdTAwMTnjOYxsXHUwMDE4Sp1QLCp6qFx1MDAwN1v5ZFx1MDAwM6WoK1VcdTAwMWNcbkPF08eRXHUwMDE1j7KE+9uMV99cdTAwMTIgXGZcdTAwMDdv5O+4tcT0abyQjEQh96j0JJioXGZJcmeywktsXGLgWXH+TUoxw7lcIlGm+1ZcdTAwMGKF4Wxs7rVy3Cmqw2LcWJ/ed+BJcfJcdTAwMTinn/HRXHUwMDFkN/gh+XtxiFN+Yvkt7anQmVx1MDAxMPOzxfRcdTAwMDDD5WLc8kvIgnD0+DlcdTAwMTdKIFx1MDAxOVx1MDAxYoE4i49cdTAwMWVoY1x0XHUwMDA0Qa1NRltyOk2M1eFcdTAwMTPXtI1PXG7C4WtnXHUwMDFhTU5JXHUwMDFj/qDHQ+2AO4s2XHUwMDBiy6CSS1x1MDAwNziLk0TM1d6y+NbcZVxc0Vx1MDAwNoUy4DTO7DhcImhZYjxcbs8yYynXXHUwMDBiXGbVWHfg9dhzeU+4I6RgtIdcdTAwMGZcdTAwMTUvloLqviW/Xlx1MDAwNODMKO3xXHUwMDE1Ko5cdTAwMDaiZranXHUwMDAwrVx1MDAwNVx1MDAxNFpcZkdcdTAwMTWW2Lsvak9cdTAwMTnH8DJkTFx1MDAxZVuVs+vCKlq5XHUwMDE2VlE1e1qx8kPtUW1QXHJU39lwnLD07PaEkmhFIMkhT1hcdTAwMGJ6uMFRI1tcdTAwMTBnJ/pcdTAwMWb15D3fLVotxU/Ov0BQO9q5XHUwMDE3/V7lsLF5tKa3T8uVa8h9Plx1MDAwMlxib1x1MDAxOdVwsWg+3Dkx7ICUyjODXHUwMDE4a9D0XHUwMDA0TvEum1x1MDAwNEJcdTAwMWMsLFx1MDAwNVxcU6L8dJRDr23mTshpsIlPSb1dIFx1MDAwMUqsWqOAuutpO8FcdTAwMWbNoNlcdTAwMWHUuif19rb6dO7OLCHKbzI9Si5cdTAwMTKNXHUwMDE244rmXGJcdTAwMDXzXHUwMDA3XHUwMDEzpPt38263XG5cdTAwMTSTRuI0IYxOycZHi+JcdTAwMDYossJSKe1s+Fx1MDAxMUpcdTAwMGUq9kUlXHUwMDE4KVx1MDAwMjhlXHUwMDE5XHUwMDAx51x1MDAxYWbwnVx1MDAxONJcdTAwMDeQdL89WzSqXHUwMDFhKbWTeeRHWVx1MDAwYkBcdTAwMTW4Y3f18+f1iVr9vHd5t3u8Wz1MXHUwMDE3gPh8PZfANc26kJKJ4Imq4oTLXHUwMDE1zmrSmvG6V8utikppXHUwMDA2pPmk5lRcdTAwMTNK8zRiXHUwMDE2Vf13nJawXGI0jX/fdVFxtmRIL7V0VlitXHUwMDEz/mH6KVxuTztOoFQ3XHUwMDFlXHUwMDE1izNiJvNxiinnXHUwMDFkheNaikhcdTAwMTithy+ogL2W3HinnTAziVx1MDAxNFxi1EVe0ujl2K5cdTAwMTPDzFxmL8ScXHUwMDE2pFVpa1x1MDAwNDGTOeItIXVEfYWSU1KM4PBcdTAwMGVcdTAwMDBj1r0kYmblRHxcdTAwMTeoXHUwMDAzuFx1MDAxM4v4+Or6OnCljrk82Gyq8tGx3epWSrlcdTAwMDd4rTVcdTAwMWFcdTAwMTjV4Fx1MDAwNVx1MDAxY1x1MDAxN1x0wlx1MDAxM+lfpOyWXHUwMDBm/H/E2H9tVVTkh9hJpX/pbm9cYpDuVVr2VaTsR7NcdTAwMTL2XG70MJFcdTAwMDL1WpGv/n/elorN6ELWydxUen+SkVx1MDAwMlwiglx1MDAwNyFcdTAwMTZIXGKdPlx1MDAxNebUSD1cdTAwMTUnTux+OpxsXHUwMDAx4Fxys1x1MDAxYVFcdTAwMWNnbpOZeFKo0UhcdTAwMTdcdTAwMWLOQdA2R2kpocox4CjUjUR2kESTZ1x1MDAxYkZcdTAwMWRo8C5MXlc8/1x06vwnqDOqeign1pAwXHUwMDFhXHUwMDEwdvT8xKDvKoG7XGKC7cvN8u1p97HV2V3PfbUnklx1MDAwMCzawlGBXHUwMDE3iLTD28BcIlx1MDAwNHCmvVE2ykXXXHUwMDE5bUxcdTAwMDFgmY1cblx1MDAxOVwii0Sqm1ZcdTAwMDFcbrkoylx1MDAwMiW0QH1cdTAwMDfCjHlznJfISFx1MDAxM9ukv9+IT1x1MDAwNuSnpb3GKDc7XHUwMDExWD+DR5w0i6tP7b8peUi7bqa5YGJymTby90pcdTAwMTKuc1x1MDAxYm7ZftpRle8rO191o/yt94m3XHUwMDFiPPfZ1N5KZqTXSNuNoiXFXHUwMDExu9WCRaHYwnLpfUahnj4tmTru5/OqvFwi2clV5omZOSNcdTAwMDO5XHT1RLKGzUnlOdI16+aGk2JcdTAwMTQndFx1MDAxYqaH/VBcdTAwMTBPeN+uXHUwMDA3T8E7OMT7PbREXG7mXHSaT3XdSq1cdTAwMDa9nrdcdTAwMGV7Wn6/R+FMXHTyXHUwMDBi015cclxi1CZhPnFlOjNcdTAwMTXcJm9cdTAwMGWhxeTN6Y1cdTAwMTFSeCPmTzxPp2I5RzckXHUwMDA0kkG006ZcdTAwMDZcdTAwMGbOjW1cdTAwMGbhkJZo7mmZiU7Khpb859tDeIorMGJcdTAwMTlbvLw7f/TcsT+ccVxuLIs2dlx1MDAwN6CV45TdITgzyFU1XHROgTObtWM3P5dHem4nOVx1MDAwNSSBXCJcdTAwMTLmca5FdlxuNqaWL90yXGZZs8GjTnlLi95jvXpXXHUwMDFl6V+wP1x1MDAwNMDEVXNAKeCNNmZ+tFv/eSD9+uHXLd44OP9cdTAwMWF2blx1MDAwZde/XuZcdTAwMWXtUPQwQbuOPceGXHKjXHUwMDFk+eE5N9rDqNEuXHUwMDEz7XxKMHtKYp2XVE1cdTAwMTCWsf3fr5ZZ8/Kgbr9Uwlx1MDAxZb+xR3b8qpkmz01eXHUwMDA0R45jNYhFUkpOz1dcdTAwMGZOXHUwMDBmYa96XHUwMDEwdIr7ne/NXHUwMDAzt5776Fx1MDAxNcRwZlx1MDAxMe9RcVuw2lxyu0KkclxmuTO30iEvsZJntCXVvMErimSuNvBcdTAwMGKXSVx1MDAxY7mE1Fx1MDAxYm5cdTAwMWX3T+zK8z28LJtMq2NNUX3ISuZ3YaZvn5Fzs1WGXG7Wk5tcdTAwMDMtwlxiPlx1MDAxNrtcIonV4DHFkdHYbCZPrVx1MDAwNXPCXCJcdTAwMTG0YGin03FcdTAwMTPGd+WYoV1GNa1+J+vfPZm0xXdFXHUwMDFimuZvKzlUuS5ZkHX5YmGRbduQXHUwMDEwOlx1MDAxZIWgckWFXHUwMDFjx1g5XCI1vm2nJIK4U0KOXHUwMDA38M6lXHUwMDE15C5s9Ffs7ufK7Ubj4UuveFx1MDAxZqhwQp+Qk9BuckaiWlx1MDAwMJnSJ5BMcto5QSqLNNry91x1MDAxZLxSdIZccupKJ79W1JwpqqkpZm65W1x1MDAwNCtcdTAwMTggqdBcdTAwMDL/h0TBnsFRQ5uiccpcdTAwMDYhsjdPuIqgr3Dh0Vx1MDAwZbWPQriHWlSOMy1cdTAwMTAwcegoa1x1MDAxNZ+ji14xXCK7XHUwMDE0NKMsypHhXHUwMDE2kVx1MDAxNzEhhDSaS5StMHvjYi1cdTAwMTnqKsRcdO654N7J4aeHOMVQgDllXHUwMDFkwoRxM+9cdTAwMTnA0L7hSlx0pFx1MDAwM8bJkVx1MDAxMFwiQLxjWkZcdTAwMTXAPcWAz2xQeMG4oOVcdTAwMWWvrVx1MDAwNFx1MDAwMyPtjUJY3N6H5O+Fq6P6iaVcdTAwMWKstkbYXHUwMDA1XHUwMDAydHaPoX5wc3p2u3988Ll33N7bvz/8mvdJzHvinp7sXHUwMDAwRvdjQMHDrFBcdTAwMTJVXCK+aFx1MDAwYtnMYDhEWLI++1x1MDAxNFxyiLMsbbzifiNcdDha9qz65lx1MDAxNVx1MDAxN6f3YFx1MDAxMWn44cn6P1x1MDAwNu32UY9cbrc9T4FcdTAwMWZva+HdasqguYp+aO1cIrJsMqIwolx1MDAxOX9/+Pv/XHUwMDAxU3lJdCJ9 + + + + + claim/create an issue- assign yourselfDevelop Your Task Locally- move the issue to Doing- pull master/main to your computer- create a new branch with a good name- create small, well-named commitsRequest a Code Review- push your branch to the group repo- create a PR from your branch main/master- request a review from your colleagues- link your PR to your issue- move your issue to Ready for ReviewConduct a Code Review- discuss your changes in the PR- have a call to talk in person- run the code from your branch all together- decide together if the code needs changeschangeswere requestedyour code was approvedMerge your Changes- merge your PR to main/master- move your issue to Done you think youhave finishedyour taskyou are blockedwith your taskAsk for Help... waiting for a team matePair/Group Programming- discuss the problem in your issue- have a call with your classmates- ask a coach for help - push your work to your remote branch- link to your code in your issue- add the help-wanted label to your issue- see if anyone is around on slack- ask for help in the class repoclaim or create another issueget back to work!Un-Blocked- remove the help-wanted label- explain the solution in an issue commentsuccess!claim or create another issue... waiting for help \ No newline at end of file diff --git a/collaboration/learning_goals.md b/collaboration/learning_goals.md new file mode 100644 index 0000000..11c583d --- /dev/null +++ b/collaboration/learning_goals.md @@ -0,0 +1,5 @@ +# Learning Goals + +## Collective + +## Individual diff --git a/collaboration/retrospective.md b/collaboration/retrospective.md new file mode 100644 index 0000000..74e1881 --- /dev/null +++ b/collaboration/retrospective.md @@ -0,0 +1,23 @@ + + +# Retrospective + +## Stop Doing + +## Continue Doing + +## Start Doing + +## Lessons Learned + +______________________________________________________________________ + +## Strategy vs. Board + +### What parts of your plan went as expected? + +### What parts of your plan did not work out? + +### Did you need to add things that weren't in your strategy? + +### Or remove extra steps? diff --git a/notes/README.md b/notes/README.md new file mode 100644 index 0000000..17e0f0d --- /dev/null +++ b/notes/README.md @@ -0,0 +1 @@ +# Notes diff --git a/solutions/README.md b/solutions/README.md new file mode 100644 index 0000000..9852346 --- /dev/null +++ b/solutions/README.md @@ -0,0 +1 @@ +# Solutions diff --git a/solutions/__init__.py b/solutions/__init__.py new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/solutions/__init__.py @@ -0,0 +1 @@ + diff --git a/solutions/tests/README.md b/solutions/tests/README.md new file mode 100644 index 0000000..007eb95 --- /dev/null +++ b/solutions/tests/README.md @@ -0,0 +1 @@ +# Tests diff --git a/solutions/tests/__init__.py b/solutions/tests/__init__.py new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/solutions/tests/__init__.py @@ -0,0 +1 @@ +