diff options
| author | David Hovey <david@hoveytech.com> | 2019-09-25 16:48:08 -0700 |
|---|---|---|
| committer | David Hovey <david@hoveytech.com> | 2019-09-25 16:48:08 -0700 |
| commit | 72c7370548a65efcea9a9ba57c59cd10fa6e7530 (patch) | |
| tree | f549d6eb1ea92ea3eb11c062c4aa5c485206c567 | |
| parent | 1250c9771e9a5f0cb6aab40e746612d5c5a670bb (diff) | |
| parent | 0b070cdc882e6b8f38aae95fcf4c18a983a61f36 (diff) | |
Merge branch 'master' of github.com:kubernetes/community
358 files changed, 8800 insertions, 48741 deletions
@@ -1,4 +1,6 @@ -IMAGE_NAME=golang:1.11 +IMAGE_NAME=golang:1.12 +export GO111MODULE=on +export GOPROXY?=https://proxy.golang.org default: \ generate \ @@ -10,7 +12,7 @@ generate: go run ./generator/app.go generate-dockerized: - docker run --rm -e WHAT -v $(shell pwd):/go/src/app:Z $(IMAGE_NAME) make -C /go/src/app generate + docker run --rm -e WHAT -e GO111MODULE -e GOPROXY -v $(shell pwd):/go/src/app:Z $(IMAGE_NAME) make -C /go/src/app generate verify: @hack/verify.sh @@ -1,19 +1,14 @@ # See the OWNERS docs at https://go.k8s.io/owners -reviewers: - - calebamiles - - castrojo - - cblecker - - grodrigues3 - - idvoretskyi - - jdumars - - parispittman approvers: - calebamiles - castrojo - cblecker - - grodrigues3 - idvoretskyi - jdumars + - mrbobbytables + - nikhita - parispittman - committee-steering +emeritus_approvers: + - grodrigues3 diff --git a/OWNERS_ALIASES b/OWNERS_ALIASES index 7690ef3a..a11b5f9a 100644 --- a/OWNERS_ALIASES +++ b/OWNERS_ALIASES @@ -22,15 +22,6 @@ aliases: - mikedanese sig-autoscaling-leads: - mwielgus - sig-aws-leads: - - d-nishi - - justinsb - - kris-nova - sig-azure-leads: - - dstrebel - - justaugustus - - feiskyer - - khenidak sig-cli-leads: - seans3 - soltysh @@ -38,8 +29,8 @@ aliases: - soltysh sig-cloud-provider-leads: - andrewsykim + - cheftako - hogepodge - - jagosan sig-cluster-lifecycle-leads: - justinsb - luxas @@ -50,15 +41,9 @@ aliases: - cblecker - nikhita sig-docs-leads: - - bradamant3 - - jaredbhatti + - Bradamant3 + - jimangel - zacharysarah - sig-gcp-leads: - - abgworrall - sig-ibmcloud-leads: - - khahmed - - rtheis - - spzala sig-instrumentation-leads: - brancz - piosz @@ -72,15 +57,11 @@ aliases: sig-node-leads: - dchen1107 - derekwaynecarr - sig-openstack-leads: - - adisky - - chrigl - - hogepodge sig-pm-leads: - calebamiles - - idvoretskyi - jdumars - justaugustus + - lachie83 sig-release-leads: - calebamiles - justaugustus @@ -89,12 +70,11 @@ aliases: - shyamjvs - wojtek-t sig-scheduling-leads: - - bsalamat + - ahg-g - k82cn sig-service-catalog-leads: - jberkhahn - - jboyd01 - - kibbles-n-bytes + - mszostok sig-storage-leads: - childsb - saad-ali @@ -108,17 +88,21 @@ aliases: - floreks - jeefy - maciaszczykm - sig-vmware-leads: - - cantbewong - - frapposelli + sig-usability-leads: + - Rajakavitha1 + - hpandeycodeit + - tashimi + - vllry sig-windows-leads: + - PatrickLang - michmike - - patricklang + - benmoss + - ddebroy wg-apply-leads: - lavalamp wg-component-standard-leads: - - luxas - mtaufen + - stealthybox - sttts wg-iot-edge-leads: - cantbewong @@ -139,7 +123,7 @@ aliases: - kow3ns - vishh wg-multitenancy-leads: - - davidopp + - srampal - tashimi wg-policy-leads: - easeway @@ -160,7 +144,7 @@ aliases: - foxish - liyinan926 committee-code-of-conduct: - - bradamant3 + - Bradamant3 - carolynvs - eparis - jdumars @@ -168,6 +152,7 @@ aliases: committee-product-security: - cjcullen - joelsmith + - jonpulsifer - liggitt - philips - tallclair @@ -185,5 +170,24 @@ aliases: - spiffxp - timothysc ## BEGIN CUSTOM CONTENT - + provider-aws: + - d-nishi + - justinsb + - kris-nova + provider-azure: + - craiglpeters + - justaugustus + - feiskyer + - khenidak + provider-gcp: + - abgworrall + provider-ibmcloud: + - spzala + provider-openstack: + - adisky + - chrigl + - hogepodge + provider-vmware: + - cantbewong + - frapposelli ## END CUSTOM CONTENT diff --git a/committee-code-of-conduct/README.md b/committee-code-of-conduct/README.md index aa5046d8..a7af9770 100644 --- a/committee-code-of-conduct/README.md +++ b/committee-code-of-conduct/README.md @@ -10,41 +10,36 @@ To understand how this file is generated, see https://git.k8s.io/community/gener The Kubernetes Code of Conduct Committee (CoCC) is the body that is responsible for enforcing and maintaining the Kubernetes Code of Conduct. +The [charter](charter.md) defines the scope and governance of the Code of Conduct Committee. ## Members -* Jennifer Rondeau (**[@bradamant3](https://github.com/bradamant3)**), Stripe +* Jennifer Rondeau (**[@Bradamant3](https://github.com/Bradamant3)**), Stripe * Carolyn Van Slyck (**[@carolynvs](https://github.com/carolynvs)**), Microsoft * Eric Paris (**[@eparis](https://github.com/eparis)**), Red Hat * Jaice Singer DuMars (**[@jdumars](https://github.com/jdumars)**), Google * Paris Pittman (**[@parispittman](https://github.com/parispittman)**), Google ## Contact -* Private Mailing List: conduct@kubernetes.io -* [Open Community Issues/PRs](https://github.com/kubernetes/community/labels/ug%2Fconduct) - -## GitHub Teams - -The below teams can be mentioned on issues and PRs in order to get attention from the right people. -Note that the links to display team membership will only work if you are a member of the org. - -| Team Name | Details | Description | -| --------- |:-------:| ----------- | -| @kubernetes/code-of-conduct-committee | [link](https://github.com/orgs/kubernetes/teams/code-of-conduct-committee) | General Discussion | +- Private Mailing List: conduct@kubernetes.io +- [Open Community Issues/PRs](https://github.com/kubernetes/community/labels/committee%2Fcode-of-conduct) +- GitHub Teams: + - [@kubernetes/code-of-conduct-committee](https://github.com/orgs/kubernetes/teams/code-of-conduct-committee) - General Discussion +[subproject-definition]: https://github.com/kubernetes/community/blob/master/governance.md#subprojects <!-- BEGIN CUSTOM CONTENT --> ## Terms The members and their terms are as follows: ### Term ends on August 7, 2019 -- Carolyn Van Slyck (Microsoft) - 1 year - Eric Paris (Red Hat) - 1 year - Jennifer Rondeau (Heptio) - 1 year ### Term ends on August 7, 2020 - Jaice Singer Dumars (Google) - 2 years - Paris Pittman (Google) - 2 years +- Carolyn Van Slyck (Microsoft) - 2 year Please see the [bootstrapping document](./bootstrapping-process.md) for more information on how members are picked, their responsibilities, and how the committee will initially function. diff --git a/committee-code-of-conduct/charter.md b/committee-code-of-conduct/charter.md new file mode 100644 index 00000000..66bff7ba --- /dev/null +++ b/committee-code-of-conduct/charter.md @@ -0,0 +1,149 @@ +# Kubernetes Code of Conduct Committee Charter + +## Mission/Purpose +Our primary mission is creating and maintaining a safe and respectful community. +Our role is to provide and enforce a well-considered viewpoint on what +constitutes acceptable behavior within our community. The [Code of +Conduct](https://git.k8s.io/community/code-of-conduct.md) serves as the primary +policy document and is supported with additional references and tools as needed. +Since maintaining a safe environment is a very large part of what the committee +does, we must carefully balance transparency of process with preserving the +privacy of all individuals involved when an incident report is made to this +committee or to any other community leader. + +The committee understands how challenging these matters are for everyone +involved, and that the process is never perfect by nature of its need to serve +everyone in the community equally. That said, the committee is oriented toward +the protection of our community and takes that duty seriously. + +## Communication with the committee +The committee maintains a private mailing list for reporting incidents, asking +confidential questions, and internal committee communication: + +[conduct@kubernetes.io][email] + +This email alias may not be the fastest path to a response in urgent situations. +**If a response is time critical, reaching individual committee members via +Slack is advisable. But an email must also be sent to +[conduct@kubernetes.io][email] for tracking purposes**. This feedback helps +guide the implementation of new policies and procedures. + +### Others acting on behalf of the committee +Community moderation administrators in Slack, the mailing list, community +events, and elsewhere are extensions of the committee and are able to be first +responders to incidents. They are explicitly empowered to take those actions +necessary to protect the community, especially when no committee members are +available. All such events must be retroactively reviewed by the committee for +appropriateness and consistency. + +Steering committee members may also act in limited cases to enforce the code of +conduct. Examples of this may be the deletion of GitHub comments, offensive +Slack messages, or the eviction of bad actors from public meetings. These +actions must be communicated to the committee for review. + +## Composition and Scope +The [committee is composed of 5 +members](https://git.k8s.io/community/committee-code-of-conduct). +The committee is the primary recipient of all conduct complaints regardless of +where in the community they originate. The only exception is at CNCF events, +where the event Code of Conduct process supersedes this. That is primarily due +to the high-impact nature of in-person violations and the need for more +extensive staffing. This committee should be informed and consulted for all +violations involving Kubernetes community members, regardless of circumstances. + +Additionally, the committee is responsible for drafting and executing on +reporting, enforcement, and other policy matters. In most cases, policies are +made public, however some materials will be confidential by nature of their +content and application. As a general rule, the committee will provide as much +transparency as possible, except in specific incident reports where no +personally-identifying information about the reporter/reported will be shared. +Anonymized aggregated incident data may be provided to the community as the +committee sees fit. + +*The Kubernetes Steering Committee has explicitly delegated all Code of Conduct +authority and enforcement to this committee. The committee can, at its +discretion, delegate some authority to those tasked with enforcement.* + +## Election +TODO: Our election processes will be outlined in a separate document, coming soon. + +## Committee Operation +The committee strives to respond quickly to reports, as well as initiate +whatever actions are appropriate based on severity, risk, urgency, and impact. +In some cases, this requires individual committee members to [take +immediate](https://git.k8s.io/community/communication/moderation.md) action such +as (but not limited to) removing a GitHub comment, deleting a Slack message, or +ejecting someone from a community meeting. The committee, however, will +retroactively review any action taken in such instances to ensure it was +appropriate. + +The committee meets biweekly unless additional interstitial meetings are +required to address incidents or other critical work. Meetings are not recorded, +however confidential notes may be kept when necessary to provide continuity to +future committee members. Wherever possible, documentation necessary for the +internal operation of the committee will be stored in a private GitHub +repository. + +### Meeting quorum +Meetings are considered at quorum when a simple majority of the members are +present. Where there are 4 or fewer members available due vacant seats or +recusal, quorum is 2. + +### Policy change ratification +Any changes to the charter require explicit LGTM or Approve from all +committee members. For pull requests, a /hold will be applied until all +approvals are present. Any changes merged without consensus will be reverted. + +### Incident report confidentiality +The Code of Conduct committee will keep your report confidential. The CoCC may +share report information with the Steering Committee if they believe doing so is +appropriate. Past incidents are communicated generally to new committee members +so they can have historical context for future issues. While this may allow the +establishment of bias in new members it is believed that the educational value +of this information outweighs the potential negatives. + +### Incident Response Recusal +A member of the Code of Conduct committee shall recuse themselves from +evaluating and responding to any incident for which they are unable to be +impartial. If a committee member does not recuse themselves they may be removed +from participation by a unanimous vote of all other members of the committee. + +### Committee seats unoccupied +In the event that one or more of the seats on the committee is unoccupied, for any +reason, a replacement member will be appointed by the steering committee as soon +as reasonable. That person will serve out the remainder of the term of the +person they are replacing. + +### Committee dissolution +If committee members believe that the committee is no longer able to act in +accordance with the above Mission/Purpose the committee may vote to dissolve. +The committee should specify a date of dissolution. Dissolution requires an +affirmative vote of more than 75% of committee members, and must be unamimous +when the committee has only 4 or fewer members. If the committee is dissolved, +all seats are vacated on the date specified. + +### Removal +A committee member may be removed from the committee by a unanimous decision of +the other committee members. The member should be given the opportunity to +resign before they are removed. Removal should only be considered for the +following reasons: + +* The member has been found to have committed a code of conduct violation. +* The member is convicted of a felony. +* The member has been completely out of contact for more than 30 consecutive + calendar days without having made prior arrangements. +* The member has explicitly, publicly violated the privacy of individuals + involved by disclosure of personally-identifiable information (accidental + disclosure via inference is not a valid reason for removal, though may be + cause for a code of conduct violation report.) +* The member is no longer able to perform the duties of the position due to + extreme circumstances such as refugee displacement or diminution of mental + capacity. + +### Resignation +If a committee member chooses not to continue in their role, for whatever +self-elected reason, they must notify the committee as well as the steering +committee in writing. As a courtesy, such notifications should be given at least +30 calendar days in advance of their departure. + +[email]: conduct@kubernetes.io diff --git a/committee-product-security/README.md b/committee-product-security/README.md index 028a00b8..c7610300 100644 --- a/committee-product-security/README.md +++ b/committee-product-security/README.md @@ -15,31 +15,26 @@ The Kubernetes Product Security Committee is the body that is responsible for re * CJ Cullen (**[@cjcullen](https://github.com/cjcullen)**), Google * Joel Smith (**[@joelsmith](https://github.com/joelsmith)**), Red Hat +* Jonathan Pulsifer (**[@jonpulsifer](https://github.com/jonpulsifer)**), Shopify * Jordan Liggitt (**[@liggitt](https://github.com/liggitt)**), Google * Brandon Philips (**[@philips](https://github.com/philips)**), Red Hat * Tim Allclair (**[@tallclair](https://github.com/tallclair)**), Google ## Contact -* Private Mailing List: security@kubernetes.io -* [Open Community Issues/PRs](https://github.com/kubernetes/community/labels/ug%2Fproduct-security) +- Private Mailing List: security@kubernetes.io +- [Open Community Issues/PRs](https://github.com/kubernetes/community/labels/committee%2Fproduct-security) +- GitHub Teams: + - [@kubernetes/product-security-committee](https://github.com/orgs/kubernetes/teams/product-security-committee) - General Discussion ## Subprojects -The following subprojects are owned by the Product Security Committee: -- **security** - - Description: Policies and documentation for the Product Security Committee - - Owners: - - https://raw.githubusercontent.com/kubernetes/security/master/OWNERS - -## GitHub Teams - -The below teams can be mentioned on issues and PRs in order to get attention from the right people. -Note that the links to display team membership will only work if you are a member of the org. - -| Team Name | Details | Description | -| --------- |:-------:| ----------- | -| @kubernetes/product-security-committee | [link](https://github.com/orgs/kubernetes/teams/product-security-committee) | General Discussion | +The following [subprojects][subproject-definition] are owned by the Product Security Committee: +### security +Policies and documentation for the Product Security Committee +- **Owners:** + - https://raw.githubusercontent.com/kubernetes/security/master/OWNERS +[subproject-definition]: https://github.com/kubernetes/community/blob/master/governance.md#subprojects <!-- BEGIN CUSTOM CONTENT --> **Note**: Information on how members are selected can be found [here](https://git.k8s.io/security/security-release-process.md#product-security-committee-membership). diff --git a/committee-steering/README.md b/committee-steering/README.md index 3b527b37..be8a66bb 100644 --- a/committee-steering/README.md +++ b/committee-steering/README.md @@ -21,7 +21,7 @@ The [charter](https://git.k8s.io/steering/charter.md) defines the scope and gove * Brian Grant (**[@bgrant0607](https://github.com/bgrant0607)**), Google * Brendan Burns (**[@brendandburns](https://github.com/brendandburns)**), Microsoft * Derek Carr (**[@derekwaynecarr](https://github.com/derekwaynecarr)**), Red Hat -* Davanum Srinivas (**[@dims](https://github.com/dims)**), Huawei +* Davanum Srinivas (**[@dims](https://github.com/dims)**), VMware * Joe Beda (**[@jbeda](https://github.com/jbeda)**), VMware * Michelle Noorali (**[@michelleN](https://github.com/michelleN)**), Microsoft * Brandon Philips (**[@philips](https://github.com/philips)**), Red Hat @@ -32,35 +32,33 @@ The [charter](https://git.k8s.io/steering/charter.md) defines the scope and gove * Timothy St. Clair (**[@timothysc](https://github.com/timothysc)**), VMware ## Contact -* [Mailing list](https://groups.google.com/a/kubernetes.io/forum/#!forum/steering) -* Private Mailing List: steering-private@kubernetes.io -* [Open Community Issues/PRs](https://github.com/kubernetes/community/labels/ug%2Fsteering) +- [Mailing list](https://groups.google.com/a/kubernetes.io/forum/#!forum/steering) +- Private Mailing List: steering-private@kubernetes.io +- [Open Community Issues/PRs](https://github.com/kubernetes/community/labels/committee%2Fsteering) +- GitHub Teams: + - [@kubernetes/steering-committee](https://github.com/orgs/kubernetes/teams/steering-committee) - General Discussion ## Subprojects -The following subprojects are owned by the Steering Committee: -- **kubernetes-template-project** - - Description: Template for starting new projects in the GitHub organizations owned by Kubernetes. - - Owners: - - https://raw.githubusercontent.com/kubernetes/kubernetes-template-project/master/OWNERS -- **spartakus** - - Description: Collection of usage information about Kubernetes clusters. - - Owners: - - https://raw.githubusercontent.com/kubernetes-incubator/spartakus/master/OWNERS -- **steering** - - Description: Steering Committee policy and documentation - - Owners: - - https://raw.githubusercontent.com/kubernetes/steering/master/OWNERS - -## GitHub Teams - -The below teams can be mentioned on issues and PRs in order to get attention from the right people. -Note that the links to display team membership will only work if you are a member of the org. - -| Team Name | Details | Description | -| --------- |:-------:| ----------- | -| @kubernetes/steering-committee | [link](https://github.com/orgs/kubernetes/teams/steering-committee) | General Discussion | +The following [subprojects][subproject-definition] are owned by the Steering Committee: +### funding +Funding requests for project infrastructure, events, and consulting +- **Owners:** + - https://raw.githubusercontent.com/kubernetes/funding/master/OWNERS +### kubernetes-template-project +Template for starting new projects in the GitHub organizations owned by Kubernetes. +- **Owners:** + - https://raw.githubusercontent.com/kubernetes/kubernetes-template-project/master/OWNERS +### spartakus +Collection of usage information about Kubernetes clusters. +- **Owners:** + - https://raw.githubusercontent.com/kubernetes-incubator/spartakus/master/OWNERS +### steering +Steering Committee policy and documentation +- **Owners:** + - https://raw.githubusercontent.com/kubernetes/steering/master/OWNERS +[subproject-definition]: https://github.com/kubernetes/community/blob/master/governance.md#subprojects <!-- BEGIN CUSTOM CONTENT --> <!-- END CUSTOM CONTENT --> diff --git a/committee-steering/governance/wg-governance.md b/committee-steering/governance/wg-governance.md index 2613c7a4..83f568c1 100644 --- a/committee-steering/governance/wg-governance.md +++ b/committee-steering/governance/wg-governance.md @@ -11,7 +11,7 @@ more Subprojects owned by SIGs). Because a working group is an official part of the Kubernetes project it is subject to steering committee oversight over its formation and disbanding. -The tactical checklist to creation and/or retirement is found in the [SIG / WG lifeycle] document. +The tactical checklist to creation and/or retirement is found in the [SIG / WG Lifecycle] document. ## Goals of the process diff --git a/communication/K8sYoutubeCollaboration.md b/communication/K8sYoutubeCollaboration.md deleted file mode 100644 index 77516ee0..00000000 --- a/communication/K8sYoutubeCollaboration.md +++ /dev/null @@ -1,3 +0,0 @@ -This file has moved to https://git.k8s.io/community/communication/youtube/youtube-guidelines.md. - -This file is a placeholder to preserve links. Please remove after 2019-07-12. diff --git a/communication/best-practices.md b/communication/best-practices.md new file mode 100644 index 00000000..c1739839 --- /dev/null +++ b/communication/best-practices.md @@ -0,0 +1,88 @@ +# Mailing list and Github usage best practice + +The Kubernetes Mailing list or Google Groups functions as the primary means of +asynchronous communication for the project's +[Special Interest Groups (SIG)][sig-list] and [Working Groups (WG)][wg-list]. +That's why you may want to set your filters in your email account to attain a +good signal-to-noise ratio with regards to the mailing list messages and Github +notifications. All the steps below are basically for Gmail users. + +Note: Alternatively, we highly encourage people to use [Gubernator][gubernator] +and [improve][repo] it instead of setting these filters. + +Note: If you are looking to create and manage lists as a chair or other organizer, +check this mailing list [guideline][mailinglist-guidelines] doc. + +- [Example for setting filters to Kubernets Mailing lists](#example-for-setting-filters-to-kubernets-mailing-lists) +- [Examples for setting filters to Kubernetes Github notifications](#examples-for-setting-filters-to-kubernetes-github-notifications) + +## Example for setting filters to Kubernetes Mailing lists + +It depends on the SIG or/and WG you are involved in. +You can setup filters for your Gmail account to be able to categorize emails from +different mailing lists. +Create a filter following the procedure below: + +- In your Gmail account click on **Settings**: + - **Filters and Blocked Addresses** -> Scroll down and click **create a new filter** + - In the **to** fields write the email of the SIG's Google Group. + - **Create filter** -> Check the box ** Apply the label** and create new +label by choosing **New label...** in the dropdown list. + - Click on the **Create filter**. +- You can also use filters directly for lists. + - Matches: list:"kubernetes-dev@googlegroups.com" + - Do this: Apply label "lists/kubernetes-dev" + +## Examples for setting filters to Kubernetes Github notifications + +In order to not get spammed by Github notifications and to get all the +notifications in the right place, here is an example of filters to create/apply +on your Gmail account: + +- Stick a blue label on anything kubernetes-related: + - Matches: (kubernetes OR kubernetes-client OR kubernetes-sigs OR kubernetes-incubator +OR kubernetes-csi) + - Do this: Apply label "k8s", Mark it as important +- Archive your own actions (sending these is an option in Github's settings). +You can send them but also archive them, so whenever you need to see the history of +an issue you can: + - Matches: to:(your_activity@noreply.github.com) + - Do this: Skip Inbox, Mark as read +- Skip bot comments: + - Matches: (from:(notifications@github.com) (from:(k8s-merge-robot) OR +from:(Kubernetes Prow Robot) OR from:(k8s-ci-robot))) + - Do this: Skip Inbox, Mark as read +- Skip push notifications: + - Matches: to:(push@noreply.github.com) + - Do this: Skip Inbox, Mark as read +- Red label on things assigned to you and/or things request to be reviewed: + - Matches: to:(assign@noreply.github.com) + - Do this: Star it, Apply label "gh/assigned", Mark it as important + - Matches: to:(review_requested@noreply.github.com) + - Do this: Star it, Apply label "gh/requested_review", Mark it as important +- Orange label on things you commented on: + - Matches: to:(comment@noreply.github.com) + - Do this: Star it, Apply label "gh/commented" +- Yellow label on things you have been mentioned on: + - Matches: to:(mention@noreply.github.com) + - Do this: Apply label "gh/mentioned" +- Grey label: + - Matches: to:(team_mention@noreply.github.com) + - Do this: Apply label "gh/team_mention" + - Matches: to:(author@noreply.github.com) + - Do this: Star it, Apply label "gh/authored", Mark it as important +- Skip messages about issues that you are not participating in, but leave them unread: + - Matches: from:(notifications@github.com) to:(subscribed@noreply.github.com) + - Do this: Skip Inbox +- Categorize per repository: + - Matches: list:(community.kubernetes.github.com) + - Do this: Apply label "k8s/community" + +This [thread](https://groups.google.com/forum/#!topic/kubernetes-dev/5qU8irU7_tE/discussion) in kubernetes-dev google group +is also useful for setting up filters in Gmail. + +[sig-list]: /sig-list.md#master-sig-list +[wg-list]: /sig-list.md#master-working-group-list +[mailinglist-guidelines]: /communication/mailing-list-guidelines.md +[gubernator]: https://gubernator.k8s.io/pr +[repo]: https://git.k8s.io/test-infra/gubernator diff --git a/communication/mailing-list-guidelines.md b/communication/mailing-list-guidelines.md index 1eee71c9..64116908 100644 --- a/communication/mailing-list-guidelines.md +++ b/communication/mailing-list-guidelines.md @@ -48,6 +48,15 @@ Moderation of the SIG/WG lists is up to that individual SIG/WG. The admins are there to help facilitate leadership changes, or various other administrative functions. +The group management settings for Google Groups have been changed in order +to make groups simpler to manage. This has caused some breaks in certain groups +visibility settings related to SIG and WG Google Groups. +The instructions on how to fix from Google Groups for owners of the list: +Near the top right, click **Manage group**. +- **Informtation** -> **Directory** -> **Edit the setting to set the desired +visibility for your group.** -> **Save**. +- This [link] have all the details related to these changes. + Users who are violating the [Code of Conduct] or other negative activities (like spamming) should be moderated. - [Lock the thread immediately] so that people cannot reply to the thread. @@ -198,4 +207,5 @@ To archive a mailing list, use the below procedure. [lock the thread immediately]: https://support.google.com/groups/answer/2466386?hl=en# [delete the post]: https://support.google.com/groups/answer/1046523?hl=en [these instructions]: https://support.google.com/groups/answer/2646833?hl=en&ref_topic=2458761# -[groups help]: https://support.google.com/groups/answer/2466386?hl=en&ref_topic=2458761
\ No newline at end of file +[groups help]: https://support.google.com/groups/answer/2466386?hl=en&ref_topic=2458761 +[link]: https://support.google.com/a/answer/9191148?hl=en diff --git a/communication/moderators.md b/communication/moderators.md index a26d83d3..82cdea90 100644 --- a/communication/moderators.md +++ b/communication/moderators.md @@ -57,10 +57,10 @@ Administrators seats: 4 | Name | Kubernetes Discuss ID | Region | Timezone | |---------------|-----------------------|----------|---------------------------------------------------------| -| Paris Pittman | @parispittman | Americas | [PT - Pacific Time (US West Coast)](https://time.is/PT) | | Jorge Castro | @castrojo | Americas | [ET - Eastern Time (US East Coast)](https://time.is/ET) | | Bob Killen | @mrbobbytables | Americas | [ET - Eastern Time (US East Coast)](https://time.is/ET) | | Jeffrey Sica | @jeefy | Americas | [ET - Eastern Time (US East Coast)](https://time.is/ET) | +| Jorge Alarcon | @alejandrox1 | Americas | [ET - Eastern Time (US East Coast)](https://time.is/ET) | Note, due to how the software is designed, dedicated moderators are not required for discuss, the [trust system] in place allows for self moderation. In this @@ -77,7 +77,7 @@ Regional category moderators seats (per category): 3 | Name | Kubernetes Discuss ID | Region | Timezone | |-------------------------|-----------------------|--------|----------------------------------------------------| | Peter (Xiang Peng) Zhao | @xiangpengzhao | APAC | [CST - China Standard Time](https://time.is/China) | -| Yang Li | @idealhack | APAC | [CST - China Standard Time](https://time.is/China) | +| Yang Li | @idealhack | APAC | [JST - Japan Standard Time](https://time.is/Japan) | | Puja Abbassi | @puja | EMEA | [CET - Central European Time](https://time.is/CET) | **[German]** @@ -134,6 +134,7 @@ Moderators seats: 10 | Jaice Singer DuMars | @jdumars | Americas | [PT - Pacific Time (US West Coast)](https://time.is/PT) | | Joe Beda | @jbeda | Americas | [PT - Pacific Time (US West Coast)](https://time.is/PT) | | Ihor Dvoretskyi | @ihor.dvoretskyi | EMEA | [EET - Eastern European Time](https://time.is/EET) | +| Naeil Ezzoueidi | @nzoueidi | EMEA | [CST - Central European Time](https://time.is/CET) | | *Open* | *Open* | | | @@ -171,7 +172,7 @@ Moderators seats: 10 | Paris Pittman | @paris | Americas | [PT - Pacific Time (US West Coast)](https://time.is/PT) | | Noah Kantrowitz | @coderanger | Americas | [PT - Pacific Time (US West Coast)](https://time.is/PT) | | Ihor Dvoretskyi | @ihor.dvoretskyi | EMEA | [EET - Eastern European Time](https://time.is/EET) | -| Yang Li | @idealhack | APAC | [CST - China Standard Time](https://time.is/China) | +| Yang Li | @idealhack | APAC | [JST - Japan Standard Time](https://time.is/Japan) | #### Moderators Pro Tempore @@ -197,12 +198,13 @@ Moderators pro tempore seats: 10 Administrators seats: 4 -| Name | Kubernetes Slack ID | Region | Timezone | -|---------------|---------------------|----------|---------------------------------------------------------| -| Jorge Castro | @castrojo | Americas | [ET - Eastern Time (US East Coast)](https://time.is/ET) | -| Bob Killen | @mrbobbytables | Americas | [ET - Eastern Time (US East Coast)](https://time.is/ET) | -| Jorge Alarcon | @alejandrox1 | Americas | [ET - Eastern Time (US East Coast)](https://time.is/ET) | -| Paris Pittman | @paris | Americas | [PT - Pacific Time (US West Coast)](https://time.is/PT) | +| Name | Kubernetes Slack ID | Region | Timezone | +|-----------------|---------------------|----------|---------------------------------------------------------| +| Jorge Castro | @castrojo | Americas | [ET - Eastern Time (US East Coast)](https://time.is/ET) | +| Bob Killen | @mrbobbytables | Americas | [ET - Eastern Time (US East Coast)](https://time.is/ET) | +| Jorge Alarcon | @alejandrox1 | Americas | [ET - Eastern Time (US East Coast)](https://time.is/ET) | +| Paris Pittman | @paris | Americas | [PT - Pacific Time (US West Coast)](https://time.is/PT) | +| Naeil Ezzoueidi | @nzoueidi | EMEA | [CET - Central European Time](https://time.is/CET) | - License and main account controlled by the CNCF diff --git a/communication/resources/README.md b/communication/resources/README.md deleted file mode 100644 index 6dd985f8..00000000 --- a/communication/resources/README.md +++ /dev/null @@ -1,77 +0,0 @@ -# Kubernetes Resources - -> A collection of resources organized by medium (e.g. audio, text, video) - -## Table of Contents - -<!-- vim-markdown-toc GFM --> - -- [Contributions](#contributions) -- [Resources](#resources) - - [Audio](#audio) - - [Text](#text) - - [Video](#video) - - [Learning Resources](#learning-resources) - -<!-- vim-markdown-toc --> - -## Contributions - -If you would like to contribute to this list, please submit a PR and add `/sig contributor-experience` and `/assign @petermbenjamin`. - -The criteria for contributions are simple: - -- The resource must be related to Kubernetes. -- The resource must be free. -- Avoid undifferentiated search links (e.g. `https://example.com/search?q=kubernetes`), unless you can ensure the most relevant results (e.g. `https://example.com/search?q=kubernetes&category=technology`) - -## Resources - -### Audio - -- [PodCTL](https://twitter.com/PodCTL) -- [Kubernetes Podcast](https://kubernetespodcast.com) -- [The New Stack Podcasts](https://thenewstack.io/podcasts/) - -### Text - -- [Awesome Kubernetes](https://github.com/ramitsurana/awesome-kubernetes) -- [CNCF Blog](https://www.cncf.io/newsroom/blog/) -- [Dev.To](https://dev.to/t/kubernetes) -- [Heptio Blog](https://blog.heptio.com) -- [KubeTips](http://kubetips.com) -- [KubeWeekly](https://twitter.com/kubeweekly) -- [Kubedex](https://kubedex.com/category/blog/) -- [Kubernetes Blog](https://kubernetes.io/blog/) -- [Kubernetes Enhancements Repo](https://github.com/kubernetes/enhancements) -- [Kubernetes Forum](https://discuss.kubernetes.io) -- [Last Week in Kubernetes Development](http://lwkd.info) -- [Medium](https://medium.com/tag/kubernetes) -- [Reddit](https://www.reddit.com/r/kubernetes) -- [The New Stack: CI/CD With Kubernetes](https://thenewstack.io/ebooks/kubernetes/ci-cd-with-kubernetes/) -- [The New Stack: Kubernetes Deployment & Security Patterns](https://thenewstack.io/ebooks/kubernetes/kubernetes-deployment-and-security-patterns/) -- [The New Stack: Kubernetes Solutions Directory](https://thenewstack.io/ebooks/kubernetes/kubernetes-solutions-directory/) -- [The New Stack: State of Kubernetes Ecosystem](https://thenewstack.io/ebooks/kubernetes/state-of-kubernetes-ecosystem/) -- [The New Stack: Use-Cases for Kubernetes](https://thenewstack.io/ebooks/use-cases/use-cases-for-kubernetes/) -- [Weaveworks Blog](https://www.weave.works/blog/category/kubernetes/) - -### Video - -- [BrightTALK Webinars](https://www.brighttalk.com/search/?q=kubernetes) -- [Ceph YouTube Channel](https://www.youtube.com/channel/UCno-Fry25FJ7B4RycCxOtfw) -- [CNCF YouTube Channel](https://www.youtube.com/channel/UCvqbFHwN-nwalWPjPUKpvTA) -- [Heptio YouTube Channel](https://www.youtube.com/channel/UCjQU5ZI2mHswy7OOsii_URg) -- [Joe Hobot YouTube Channel](https://www.youtube.com/channel/UCdxEoi9hB617EDLEf8NWzkA) -- [Kubernetes YouTube Channel](https://www.youtube.com/channel/UCZ2bu0qutTOM0tHYa_jkIwg) -- [Lachlan Evenson YouTube Channel](https://www.youtube.com/channel/UCC5NsnXM2lE6kKfJKdQgsRQ) -- [Rancher YouTube Channel](https://www.youtube.com/channel/UCh5Xtp82q8wjijP8npkVTBA) -- [Rook YouTube Channel](https://www.youtube.com/channel/UCa7kFUSGO4NNSJV8MJVlJAA) -- [Tigera YouTube Channel](https://www.youtube.com/channel/UC8uN3yhpeBeerGNwDiQbcgw) -- [Weaveworks YouTube Channel](https://www.youtube.com/channel/UCmIz9ew1lA3-XDy5FqY-mrA/featured) - -### Learning Resources - -- [edx Courses](https://www.edx.org/course?search_query=kubernetes) -- [Katacoda Interactive Tutorials](https://www.katacoda.com) -- [Udacity Course](https://www.udacity.com/course/scalable-microservices-with-kubernetes--ud615) -- [Udemy Courses](https://www.udemy.com/courses/search/?courseLabel=&sort=relevance&q=kubernetes&price=price-free) diff --git a/communication/slack-config/channels.yaml b/communication/slack-config/channels.yaml index e2185994..54a70117 100644 --- a/communication/slack-config/channels.yaml +++ b/communication/slack-config/channels.yaml @@ -3,7 +3,6 @@ channels: - name: airflow-operator - - name: aks - name: announcements - name: api-reviews - name: apisnoop @@ -11,6 +10,7 @@ channels: archived: true - name: argentina - name: arm64 + - name: aus-nz-dev - name: aus-nz-users - name: awesome-kubernetes - name: aws-authenticator @@ -26,12 +26,26 @@ channels: - name: cka-exam-prep - name: ckad-exam-prep - name: client-go-docs + - name: provider-aws + id: C0LRMHZ1T + - name: provider-azure + id: C5HJXTT9Q + - name: provider-gcp + id: C6WB33KNJ + - name: provider-ibmcloud + id: C90BWDWCE + - name: provider-openstack + id: C0LSA3T7C + - name: provider-vsphere + id: C9PGCDKV5 - name: cluster-addons - name: cluster-api - name: cluster-api-aws - name: cluster-api-azure - name: cluster-api-baremetal + - name: cluster-api-docker - name: cluster-api-openstack + - name: cluster-api-vsphere - name: cn-dev - name: cn-events - name: cn-users @@ -58,9 +72,13 @@ channels: - name: etcdadm - name: events - name: external-dns + - name: falco + - name: fiaas - name: fi-users - name: fr-events - name: fr-users + - name: garden + - name: garden-dev - name: gardener - name: gimbal - name: github @@ -69,7 +87,6 @@ channels: - name: gitops - name: gke - name: gloo - - name: gsoc-apps - name: helm-chart-testing - name: helm-deprecated archived: true @@ -79,6 +96,8 @@ channels: id: C67TNP3FF - name: hephy-users id: C678BMZ89 + - name: id-events + - name: id-users - name: il-users - name: in-dev - name: in-events @@ -101,6 +120,7 @@ channels: - name: k8s-release archived: true - name: kapitan + - name: keda - name: keel - name: kiam - name: kind @@ -110,6 +130,7 @@ channels: - name: kong - name: kops-dev - name: kops-users + - name: kr-dev - name: kr-users - name: kraken - name: krane @@ -117,11 +138,13 @@ channels: - name: kube-aws - name: kube-deploy - name: kube-monkey + - name: kube-oidc-proxy - name: kube-router - name: kube-score - name: kube-spawn - name: kube-state-metrics - name: kubeadm + - name: kubeadm-cn - name: kubeapps - name: kubebuilder - name: kubecon @@ -130,7 +153,9 @@ channels: - name: kubekhan archived: true - name: kubeless + - name: kubeone - name: kubepack + - name: kubestack - name: kuberhealthy - name: kubernetes-batch-jobs - name: kubernetes-careers @@ -148,7 +173,9 @@ channels: - name: kubicorn - name: kudo - name: kustomize + - name: kyverno - name: leadership-summit + archived: true - name: linode - name: malaysia-users - name: malta-users @@ -156,6 +183,7 @@ channels: - name: meetup-athens - name: meetup-austin - name: meetup-bayarea + - name: meetup-bordeaux - name: meetup-boston - name: meetup-dfw - name: meetup-guatemala @@ -165,11 +193,13 @@ channels: - name: meetup-manchester - name: meetup-minneapolis - name: meetup-nyc + - name: meetup-paris - name: meetup-pittsburgh - name: meetup-sacramento - name: meetup-sanantonio - name: meetup-sandiego - name: meetup-seattle + - name: meetup-toulouse - name: meetup-trondheim - name: meetup-tunisia - name: metacontroller @@ -182,11 +212,14 @@ channels: archived: true - name: multi-platform - name: mysql-operator + - name: nais - name: navigator - name: nl-users - name: node-problem-detector - name: norw-users + - name: octant - name: office-hours + - name: okteto - name: opencontainers - name: openshift-dev - name: openshift-users @@ -195,6 +228,8 @@ channels: - name: ops-status archived: true - name: osbkit + - name: outreachy-apps + id: CDH610735 - name: pharmer - name: pl-users - name: pr-reviews @@ -210,6 +245,7 @@ channels: - name: ro-users - name: ru-users - name: se-users + - name: sealed-secrets - name: ship - name: shippable - name: shipper @@ -219,8 +255,6 @@ channels: - name: sig-architecture - name: sig-auth - name: sig-autoscaling - - name: sig-aws - - name: sig-azure - name: sig-cli - name: sig-cloud-provider - name: sig-clstr-life-leads @@ -230,6 +264,7 @@ channels: - name: sig-configuration archived: true - name: sig-contribex + - name: sig-contribex-triage - name: sig-docs - name: sig-docs-blog - name: sig-docs-maintainers @@ -237,24 +272,20 @@ channels: - name: sig-docs-release - name: sig-docs-security - name: sig-docs-tools - - name: sig-gcp - name: sig-high-availability archived: true - - name: sig-ibmcloud - name: sig-instrumentation - name: sig-multicluster - name: sig-network - name: sig-node - name: sig-node-rkt - - name: sig-openstack - name: sig-pm - name: sig-scalability - name: sig-scheduling - name: sig-service-catalog - - name: sig-storage - name: sig-testing - name: sig-ui - - name: sig-vmware + - name: sig-usability - name: sig-windows - name: skaffold - name: slack-admins @@ -289,8 +320,6 @@ channels: archived: true - name: wg-apply - name: wg-component-standard - - name: wg-csi - - name: wg-csi-migration - name: wg-iot-edge - name: wg-k8s-infra - name: wg-lts diff --git a/communication/slack-config/restrictions.yaml b/communication/slack-config/restrictions.yaml index 2cf54909..b5948281 100644 --- a/communication/slack-config/restrictions.yaml +++ b/communication/slack-config/restrictions.yaml @@ -16,5 +16,10 @@ restrictions: - path: "sig-release/*.yaml" channels: - "^sig-release$" - - "^release-managers$" + - "^release-" + - path: "sig-storage/*.yaml" + channels: + - "^sig-storage$" + - "^csi$" + - "^csi-" - path: "**/*" # prevent any other file from containing anything diff --git a/communication/slack-config/sig-release/config.yaml b/communication/slack-config/sig-release/config.yaml index bf101cfb..9cadafec 100644 --- a/communication/slack-config/sig-release/config.yaml +++ b/communication/slack-config/sig-release/config.yaml @@ -1,3 +1,6 @@ channels: - name: sig-release - - name: release-managers + - name: release-ci-signal + - name: release-management + id: CJH2GBF7Y + - name: release-notes diff --git a/communication/slack-config/sig-storage/OWNERS b/communication/slack-config/sig-storage/OWNERS new file mode 100644 index 00000000..6dd5158f --- /dev/null +++ b/communication/slack-config/sig-storage/OWNERS @@ -0,0 +1,8 @@ +# See the OWNERS docs at https://go.k8s.io/owners + +reviewers: + - sig-storage-leads +approvers: + - sig-storage-leads +labels: + - sig/storage diff --git a/communication/slack-config/sig-storage/config.yaml b/communication/slack-config/sig-storage/config.yaml new file mode 100644 index 00000000..56d94922 --- /dev/null +++ b/communication/slack-config/sig-storage/config.yaml @@ -0,0 +1,7 @@ +channels: + - name: csi + id: C8EJ01Z46 + - name: csi-migration + id: CG04EL876 + - name: csi-windows + - name: sig-storage diff --git a/communication/slack-config/usergroups.yaml b/communication/slack-config/usergroups.yaml index dfc3fe11..321320e2 100644 --- a/communication/slack-config/usergroups.yaml +++ b/communication/slack-config/usergroups.yaml @@ -1,6 +1,23 @@ # This file contains a list of all Slack usergroups that exist. usergroups: + - name: release-managers + long_name: Release Managers + description: Release Managers. Ping for questions on branch cuts and building/packaging Kubernetes. + channels: + - release-management + - sig-release + members: + - aleksandra-malinowska + - bubblemelon + - calebamiles + - feiskyer + - hoegaarden + - idealhack + - justaugustus + - listx + - sumitranr + - tpepper - name: test-infra-oncall external: true - name: youtube-admins @@ -27,4 +44,4 @@ usergroups: - paris - castrojo - mrbobbytables - - alejandrox1
\ No newline at end of file + - alejandrox1 diff --git a/communication/slack-config/users.yaml b/communication/slack-config/users.yaml index a5f0c79e..19d423f4 100644 --- a/communication/slack-config/users.yaml +++ b/communication/slack-config/users.yaml @@ -2,12 +2,22 @@ # usernames to Kubernetes Slack user IDs. users: alejandrox1: U6AS37R50 + aleksandra-malinowska: U357LUPHS + bubblemelon: U7K9C643G + calebamiles: U1ZDD4CUR castrojo: U1W1Q6PRQ + feiskyer: U0ASA4398 + hoegaarden: U7VA4RZS9 + idealhack: U5NJ3DQM9 idvoretskyi: U0CBHE6GM jbeda: U09QZ63DX jdumars: U0YJS6LHL jeefy: U5MCFK468 + justaugustus: U0E0E78AK katharine: UBTBNJ6GL + listx: UFCU8S8P3 mrbobbytables: U511ZSKHD paris: U5SB22BBQ - sarahnovotny: U0AGW7007
\ No newline at end of file + sarahnovotny: U0AGW7007 + sumitranr: UCQN13L9H + tpepper: U6UB5V4TX diff --git a/communication/youtube/youtube-guidelines.md b/communication/youtube/youtube-guidelines.md index 4db7f4f2..36e6bff8 100644 --- a/communication/youtube/youtube-guidelines.md +++ b/communication/youtube/youtube-guidelines.md @@ -90,7 +90,10 @@ community must use it responsibly and are subject to the following guidelines: in uploading should be expected. -## Admin Responsibilities +## Admin Responsibilities + +Purpose: Help maintain a robust YouTube channel that is valuable to contributors +and upholds our transparency goals as laid out by our governance docs. ### Moderator Expectations and Guidelines @@ -101,16 +104,72 @@ Moderation responsibilities for YouTube admins is minimal and is centered around checking and removing any potential comments that would violate the [Code of Conduct][coc]. Any potential violations should sent to <conduct@kubernetes.io>. - ### Trimming and Editing Recordings -YouTube admins may be asked to help [trim] and [edit] recordings. Certain events -such as the Contributor Summits are not uploaded directly to YouTube and require -editing. In other instances a Zoom recording may have significant dead-space -leading the meeting itself. In these instances the playlist owners may be asked -first to trim a recording; however there are times where this is inopportune and -an admin may step in. - +YouTube admins are asked to help [trim] and [edit] recordings that come into the +video queue. +Examples: +Certain events such as the Contributor Summits are not uploaded directly to +YouTube and require editing. +A Zoom recording may have significant dead-space leading the meeting itself +and also at the end as we end the stream. +A SIG Meeting needs to be edited to to make sure it's clear (ie "Kubernetes +Special Interest Group ContribEx 20190303 Meeting"). + +Make sure to save a copy of the video first before making adjustments as this +can delete the original if not careful. When in doubt, ask. + +### Automation + +We have been playing around with various integration features with our other +productivity tools and would love to do more! Reach out if you can help. + +One feature that we've implemented with several SIGs is splain.io. This tool +creates a pipeline between zoom and youtube. + +Here's what you need: +- UserName and Password for the zoom license account. You'll need a zoom admin +or the admin of the license (ex: SIG Chair) to either provide it to you or reset +it to a new one. +- Kubernetes YouTube admin credentials +- A correctly set up recurring meeting with a start and end time (this is + important) - check zoom guidelines for more details + +Steps: +- Install splain: https://marketplace.zoom.us/apps/WPKzwuoLQDuj_gPs68AQxw +- Connect the zoom account +- Connect YouTube account +- Click the \manage\ tab next to App Info and scroll to the config button, click +- The splain dashboard will display: make sure the box for make videos private is +checked so we can edit before it goes live. +- Test that it works +- Enjoy + +The following SIGs and groups are currently running splain.io: +- ContribEx +- PM +- Docs +- Steering Committee +- The main zoom admin account which holds Meet Our Contributors and others (if + you log in to splain using this account, all of the other accounts will be + logged here) + +TODO - look into splain.io's google drive to youtube pipeline. Also look into +using the gsuite contributors@ account to use the API for zoom cloud -> google +drive -> youtube. + +### Descriptions & Playlists + +Each video that comes into the queue needs to be added to a playlist, set to +public, and added context to the description. + +Example description: +Kubernetes Contributor Experience Special Interest Group Weekly Meeting. Check +here (link to sig list) for a complete list of SIGs and when they meet. Join us! + +### Thumbnails + +TODO - someone help us with better thumbnails to lay over the videos! ### Streaming Events diff --git a/communication/zoom-guidelines.md b/communication/zoom-guidelines.md index ba834093..2d0f3025 100644 --- a/communication/zoom-guidelines.md +++ b/communication/zoom-guidelines.md @@ -195,7 +195,7 @@ Thanks for making Kubernetes meetings work great! [Office Hours]: /events/office-hours.md [Meet Our Contributors]: /mentoring/meet-our-contributors.md [moderation]: ./moderation.md -[zoom admins]: /moderators.md#zoom +[zoom admins]: /communication/moderators.md#zoom [host key]: https://support.zoom.us/hc/en-us/articles/205172555-Host-Key [CNCF Service Desk]: https://github.com/cncf/servicedesk [Kubernetes Code of Conduct]: /code-of-conduct.md diff --git a/community-membership.md b/community-membership.md index 49d3d4ab..5dd538da 100644 --- a/community-membership.md +++ b/community-membership.md @@ -228,7 +228,7 @@ The following apply to the subproject for which one would be an owner. The Maintainer role has been removed and replaced with a greater focus on [OWNERS]. [code reviews]: /contributors/guide/collab.md -[community expectations]: /contributors/guide/community-expectations.md +[community expectations]: /contributors/guide/expectations.md [contributor guide]: /contributors/guide/README.md [Kubernetes GitHub Admin team]: /github-management/README.md#github-administration-team [Kubernetes GitHub organizations]: /github-management#actively-used-github-organizations diff --git a/contributors/design-proposals/apps/controller_history.md b/contributors/design-proposals/apps/controller_history.md index d7140bea..e9384379 100644 --- a/contributors/design-proposals/apps/controller_history.md +++ b/contributors/design-proposals/apps/controller_history.md @@ -362,7 +362,7 @@ they have a nil revision. That is, without respect to the method of [version tracking](#version-tracking) used, the generated Objects may be treated as if they have a version that corresponds to no revision, and the controller may proceed to -[reconcile their state](target-object-state-reconciliation) as appropriate to +[reconcile their state](#target-object-state-reconciliation) as appropriate to the internal implementation. ## Kubectl @@ -442,7 +442,7 @@ create a `.Named` ControllerRevision via the API Server using a conflict, the method returns false. ### Unique Name Generation -We can use our [hash function](#hashsing) and +We can use our [hash function](#hashing) and [collision resolution](#collision-resolution) scheme to generate a system wide unique identifier for an Object based on a deterministic non-unique prefix and a serialized representation of the Object. Kubernetes Object's `.Name` diff --git a/contributors/design-proposals/apps/job.md b/contributors/design-proposals/apps/job.md index 2094b125..5415ad76 100644 --- a/contributors/design-proposals/apps/job.md +++ b/contributors/design-proposals/apps/job.md @@ -204,5 +204,5 @@ Below are the possible future extensions to the Job controller: [this comment](https://github.com/kubernetes/kubernetes/issues/1624#issuecomment-97622142)) * Be able to inspect Pods running a Job, especially after a Job has finished, e.g. by providing pointers to Pods in the JobStatus ([see comment](https://github.com/kubernetes/kubernetes/pull/11746/files#r37142628)). -* help users avoid non-unique label selectors ([see this proposal](../../docs/design/selector-generation.md)) +* help users avoid non-unique label selectors ([see this proposal](selector-generation.md)) diff --git a/contributors/design-proposals/architecture/declarative-application-management.md b/contributors/design-proposals/architecture/declarative-application-management.md index f1419200..d307a617 100644 --- a/contributors/design-proposals/architecture/declarative-application-management.md +++ b/contributors/design-proposals/architecture/declarative-application-management.md @@ -322,13 +322,13 @@ Benefits of these approaches: An area where more investigation is needed is explicit inline parameter substitution, which, while overused and should be rendered unnecessary by the capabilities described above, is [frequently requested](https://stackoverflow.com/questions/44832085/passing-variables-to-args-field-in-a-yaml-file-kubernetes) and has been reinvented many times by the community. -A [simple parameterization approach derived from Openshift’s design](https://github.com/kubernetes/community/blob/master/contributors/design-proposals/templates.md) was approved because it was constrained in functionality and solved other problems (e.g., instantiation of resource variants by other controllers, [project templates in Openshift](https://github.com/openshift/training/blob/master/content/default-project-template.yaml)). That proposal explains some of the reasoning behind the design tradeoffs, as well as the [use cases](https://github.com/kubernetes/community/blob/master/contributors/design-proposals/templates.md#use-cases). Work started, but was abandoned, though there is an independent [client-based implementation](https://github.com/InQuicker/ktmpl). However, the Template resource wrapped the resource specifications in another object, which is suboptimal, since transformations would then need to be able to deal with standalone resources, Lists of resources, and Templates, or would need to be applied post-instantiation, and it couldn’t be represented using multiple files, as users prefer. +A [simple parameterization approach derived from Openshift’s design](https://github.com/kubernetes/community/blob/master/contributors/design-proposals/apps/OBSOLETE_templates.md) was approved because it was constrained in functionality and solved other problems (e.g., instantiation of resource variants by other controllers, [project templates in Openshift](https://docs.openshift.com/container-platform/3.5/dev_guide/templates.html)). That proposal explains some of the reasoning behind the design tradeoffs, as well as the [use cases](https://github.com/kubernetes/community/blob/master/contributors/design-proposals/apps/OBSOLETE_templates.md#use-cases). Work started, but was abandoned, though there is an independent [client-based implementation](https://github.com/InQuicker/ktmpl). However, the Template resource wrapped the resource specifications in another object, which is suboptimal, since transformations would then need to be able to deal with standalone resources, Lists of resources, and Templates, or would need to be applied post-instantiation, and it couldn’t be represented using multiple files, as users prefer. What is more problematic is that our client libraries, schema validators, yaml/json parsers/decoders, initializers, and protobuf encodings all require that all specified fields have valid values, so parameters cannot currently be left in non-string (e.g., int, bool) fields in actual resources. Additionally, the API server requires at least complete/final resource names to be specified, and strategic merge also requires all merge keys to be specified. Therefore, some amount of pre-instantiation (though not necessarily client-side) transformation is necessary to create valid resources, and we may want to explicitly store the output, or the fields should just contain the default values initially. Parameterized fields could be automatically converted to patches to produce valid resources. Such a transformation could be made reversible, unlike traditional substitution approaches, since the patches could be preserved (e.g., using annotations). The Template API supported the declaration of parameter names, display names, descriptions, default values, required/optional, and types (string, int, bool, base64), and both string and raw json substitutions. If we were to update that specification, we could use the same mechanism for both parameter validation and ConfigMap validation, so that the same mechanism could be used for env substitution and substitution of values of other fields. As mentioned in the [env validation issue](https://github.com/kubernetes/kubernetes/issues/4210#issuecomment-305555589), we should consider a subset of [JSON schema](http://json-schema.org/example1.html), which we’ll probably use for CRD. The only [unsupported attribute](https://tools.ietf.org/html/draft-wright-json-schema-validation-00) appears to be the display name, which is non-critical. [Base64 could be represented using media](http://json-schema.org/latest/json-schema-hypermedia.html#rfc.section.5.3.2). That could be useful as a common parameter schema to facilitate parameter discovery and documentation that is independent of the substitution syntax and mechanism ([example from Deployment Manager](https://github.com/GoogleCloudPlatform/deploymentmanager-samples/blob/master/templates/replicated_service.py.schema)). Without parameters how would we support a click-to-deploy experience? People who are kicking the tires, have undemanding use cases, are learning, etc. are unlikely to know what customization they want to perform initially, if they even need any. The main information users need to provide is the name prefix they want to apply. Otherwise, choosing among a few alternatives would suit their needs better than parameters. The overlay approach should support that pretty well. Beyond that, I suggest kicking users over to a Kubernetes-specific configuration wizard or schema-aware IDE, and/or support a fork workflow. -The other application-definition [use cases mentioned in the Template proposal](https://github.com/kubernetes/community/blob/master/contributors/design-proposals/templates.md#use-cases) are achievable without parameterization, as well. +The other application-definition [use cases mentioned in the Template proposal](https://github.com/kubernetes/community/blob/master/contributors/design-proposals/apps/OBSOLETE_templates.md#use-cases) are achievable without parameterization, as well. #### What about application configuration generation? @@ -384,7 +384,7 @@ Consider more automation, such as autoscaling, self-configuration, etc. to reduc #### What about providing an intentionally restrictive simplified, tailored developer experience to streamline a specific use case, environment, workflow, etc.? -This is essentially a [DIY PaaS](https://kubernetes.io/blog/2017/02/caas-the-foundation-for-next-gen-paas/). Write a configuration generator, either client-side or using CRDs ([example](https://github.com/pearsontechnology/environment-operator/blob/dev/User_Guide.md)). The effort involved to document the format, validate it, test it, etc. is similar to building a new API, but I could imagine someone eventually building a SDK to make that easier. +This is essentially a [DIY PaaS](https://kubernetes.io/blog/2017/02/caas-the-foundation-for-next-gen-paas/). Write a configuration generator, either client-side or using CRDs ([example](https://github.com/pearsontechnology/environment-operator/blob/dev/docs/User_Guide.md)). The effort involved to document the format, validate it, test it, etc. is similar to building a new API, but I could imagine someone eventually building a SDK to make that easier. #### What about more sophisticated deployment orchestration? @@ -392,4 +392,4 @@ Deployment pipelines, [canary deployments](https://groups.google.com/forum/#!top #### What about UI wizards, IDE integration, application frameworks, etc.? -Representing configuration using the literal API types should facilitate programmatic manipulation of the configuration via user-friendly tools, such as UI wizards (e.g., [dashboard](https://kubernetes.io/docs/tasks/access-application-cluster/web-ui-dashboard/#deploying-containerized-applications), [Yipee.io](https://yipee.io/), and many CD tools, such as [Distelli](https://www.distelli.com/docs/k8s/add-container-to-a-project/)) and IDEs (e.g., [VSCode](https://www.youtube.com/watch?v=QfqS9OSVWGs), [IntelliJ](https://github.com/tinselspoon/intellij-kubernetes)), as well as configuration generation and manipulation by application frameworks (e.g., [Spring Cloud](https://github.com/fabric8io/spring-cloud-kubernetes)). +Representing configuration using the literal API types should facilitate programmatic manipulation of the configuration via user-friendly tools, such as UI wizards (e.g., [dashboard](https://kubernetes.io/docs/tasks/access-application-cluster/web-ui-dashboard/#deploying-containerized-applications) and many CD tools, such as [Puppet Pipelines](https://puppet.com/docs/pipelines)) and IDEs (e.g., [VSCode](https://www.youtube.com/watch?v=QfqS9OSVWGs), [IntelliJ](https://github.com/tinselspoon/intellij-kubernetes)), as well as configuration generation and manipulation by application frameworks (e.g., [Spring Cloud](https://github.com/fabric8io/spring-cloud-kubernetes)). diff --git a/contributors/design-proposals/aws/OWNERS b/contributors/design-proposals/aws/OWNERS index cc03b55d..b035a798 100644 --- a/contributors/design-proposals/aws/OWNERS +++ b/contributors/design-proposals/aws/OWNERS @@ -1,8 +1,8 @@ # See the OWNERS docs at https://go.k8s.io/owners reviewers: - - sig-aws-leads + - provider-aws approvers: - - sig-aws-leads + - provider-aws labels: - sig/aws diff --git a/contributors/design-proposals/gcp/OWNERS b/contributors/design-proposals/gcp/OWNERS index 4ff966b4..5edab0a0 100644 --- a/contributors/design-proposals/gcp/OWNERS +++ b/contributors/design-proposals/gcp/OWNERS @@ -1,8 +1,8 @@ # See the OWNERS docs at https://go.k8s.io/owners reviewers: - - sig-gcp-leads + - provider-gcp approvers: - - sig-gcp-leads + - provider-gcp labels: - sig/gcp diff --git a/contributors/design-proposals/node/troubleshoot-running-pods.md b/contributors/design-proposals/node/troubleshoot-running-pods.md index 3fcc0223..d6895c28 100644 --- a/contributors/design-proposals/node/troubleshoot-running-pods.md +++ b/contributors/design-proposals/node/troubleshoot-running-pods.md @@ -1,703 +1,8 @@ # Troubleshoot Running Pods -* Status: Implementing -* Version: Alpha +* Status: Superseded +* Version: N/A * Implementation Owner: @verb -This proposal seeks to add first class support for troubleshooting by creating a -mechanism to execute a shell or other troubleshooting tools inside a running pod -without requiring that the associated container images include such tools. - -## Motivation - -### Development - -Many developers of native Kubernetes applications wish to treat Kubernetes as an -execution platform for custom binaries produced by a build system. These users -can forgo the scripted OS install of traditional Dockerfiles and instead `COPY` -the output of their build system into a container image built `FROM scratch` or -a -[distroless container image](https://github.com/GoogleCloudPlatform/distroless). -This confers several advantages: - -1. **Minimal images** lower operational burden and reduce attack vectors. -1. **Immutable images** improve correctness and reliability. -1. **Smaller image size** reduces resource usage and speeds deployments. - -The disadvantage of using containers built `FROM scratch` is the lack of system -binaries provided by an Operating System image makes it difficult to -troubleshoot running containers. Kubernetes should enable one to troubleshoot -pods regardless of the contents of the container images. - -### Operations and Support - -As Kubernetes gains in popularity, it's becoming the case that a person -troubleshooting an application is not necessarily the person who built it. -Operations staff and Support organizations want the ability to attach a "known -good" or automated debugging environment to a pod. - -## Requirements - -A solution to troubleshoot arbitrary container images MUST: - -* troubleshoot arbitrary running containers with minimal prior configuration -* allow access to namespaces and the file systems of individual containers -* fetch troubleshooting utilities at debug time rather than at the time of pod - creation -* be compatible with admission controllers and audit logging -* allow discovery of current debugging status -* support arbitrary runtimes via the CRI (possibly with reduced feature set) -* require no administrative access to the node -* have an excellent user experience (i.e. should be a feature of the platform - rather than config-time trickery) -* have no _inherent_ side effects to the running container image -* v1.Container must be available for inspection by admission controllers - -## Feature Summary - -Any new debugging functionality will require training users. We can ease the -transition by building on an existing usage pattern. We will create a new -command, `kubectl debug`, which parallels an existing command, `kubectl exec`. -Whereas `kubectl exec` runs a _process_ in a _container_, `kubectl debug` will -be similar but run a _container_ in a _pod_. - -A container created by `kubectl debug` is a _Debug Container_. Unlike `kubectl -exec`, Debug Containers have status that is reported in `PodStatus` and -displayed by `kubectl describe pod`. - -For example, the following command would attach to a newly created container in -a pod: - -``` -kubectl debug -c debug-shell --image=debian target-pod -- bash -``` - -It would be reasonable for Kubernetes to provide a default container name and -image, making the minimal possible debug command: - -``` -kubectl debug target-pod -``` - -This creates an interactive shell in a pod which can examine and signal other -processes in the pod. It has access to the same network and IPC as processes in -the pod. When [process namespace sharing](https://features.k8s.io/495) is -enabled, it can access the filesystem of other processes by `/proc/$PID/root`. -Debug Containers can enter arbitrary namespaces of another visible container via -`nsenter` when run with `CAP_SYS_ADMIN`. - -_Please see the User Stories section for additional examples and Alternatives -Considered for the considerable list of other solutions we considered._ - -## Implementation Details - -From the perspective of the user, there's a new command, `kubectl debug`, that -creates a Debug Container and attaches to its console. We believe a new command -will be less confusing for users than overloading `kubectl exec` with a new -concept. Users give Debug Containers a name (e.g. "debug" or "shell") which can -subsequently be used to reattach and is reported by `kubectl describe`. - -### Kubernetes API Changes - -This will be implemented in the Core API to avoid new dependencies in the -kubelet. The user-level concept of a _Debug Container_ implemented with the -API-level concept of an _Ephemeral Container_. The API doesn't require an -Ephemeral Container to be used as a Debug Container. It's intended as a general -purpose construct for running a short-lived process in a pod. - -#### Pod Changes - -Ephemeral Containers are represented in `PodSpec` and `PodStatus`: - -``` -type PodSpec struct { - ... - // List of user-initiated ephemeral containers to run in this pod. - // This field is alpha-level and is only honored by servers that enable the EphemeralContainers feature. - // +optional - EphemeralContainers []EphemeralContainer `json:"ephemeralContainers,omitempty" protobuf:"bytes,29,opt,name=ephemeralContainers"` -} - -type PodStatus struct { - ... - // Status for any Ephemeral Containers that running in this pod. - // This field is alpha-level and is only honored by servers that enable the EphemeralContainers feature. - // +optional - EphemeralContainerStatuses []ContainerStatus `json:"ephemeralContainerStatuses,omitempty" protobuf:"bytes,12,rep,name=ephemeralContainerStatuses"` -} -``` - -`EphemeralContainerStatuses` resembles the existing `ContainerStatuses` and -`InitContainerStatuses`, but `EphemeralContainers` introduces a new type: - -``` -// An EphemeralContainer is a container which runs temporarily in a pod for human-initiated actions -// such as troubleshooting. This is an alpha feature enabled by the EphemeralContainers feature flag. -type EphemeralContainer struct { - // Spec describes the Ephemeral Container to be created. - Spec Container `json:"spec,omitempty" protobuf:"bytes,1,opt,name=spec"` - - // If set, the name of the container from PodSpec that this ephemeral container targets. - // The ephemeral container will be run in the namespaces (IPC, PID, etc) of this container. - // If not set then the ephemeral container is run in whatever namespaces are shared - // for the pod. - // +optional - TargetContainerName string `json:"targetContainerName,omitempty" protobuf:"bytes,2,opt,name=targetContainerName"` -} -``` - -Much of the utility of Ephemeral Containers comes from the ability to run a -container within the PID namespace of another container. `TargetContainerName` -allows targeting a container that doesn't share its PID namespace with the rest -of the pod. We must modify the CRI to enable this functionality (see below). - -##### Alternative Considered: Omitting TargetContainerName - -It would be simpler for the API, kubelet and kubectl if `EphemeralContainers` -was a `[]Container`, but as isolated PID namespaces will be the default for some -time, being able to target a container will provide a better user experience. - -#### Updates - -Most fields of `Pod.Spec` are immutable once created. There is a short whitelist -of fields which may be updated, and we could extend this to include -`EphemeralContainers`. The ability to add new containers is a large change for -Pod, however, and we'd like to begin conservatively by enforcing the following -best practices: - -1. Ephemeral Containers lack guarantees for resources or execution, and they - will never be automatically restarted. To avoid pods that depend on - Ephemeral Containers, we allow their addition only in pod updates and - disallow them during pod create. -1. Some fields of `v1.Container` imply a fundamental role in a pod. We will - disallow the following fields in Ephemeral Containers: `resources`, `ports`, - `livenessProbe`, `readinessProbe`, and `lifecycle.` -1. Cluster administrators may want to restrict access to Ephemeral Containers - independent of other pod updates. - -To enforce these restrictions and new permissions, we will introduce a new Pod -subresource, `/ephemeralcontainers`. `EphemeralContainers` can only be modified -via this subresource. `EphemeralContainerStatuses` is updated with everything -else in `Pod.Status` via `/status`. - -To create a new Ephemeral Container, one appends a new `EphemeralContainer` with -the desired `v1.Container` as `Spec` in `Pod.Spec.EphemeralContainers` and -`PUT`s the pod to `/ephemeralcontainers`. - -The subresources `attach`, `exec`, `log`, and `portforward` are available for -Ephemeral Containers and will be forwarded by the apiserver. This means `kubectl -attach`, `kubelet exec`, `kubectl log`, and `kubectl port-forward` will work for -Ephemeral Containers. - -Once the pod is updated, the kubelet worker watching this pod will launch the -Ephemeral Container and update its status. The client is expected to watch for -the creation of the container status and then attach to the console of a debug -container using the existing attach endpoint, -`/api/v1/namespaces/$NS/pods/$POD_NAME/attach`. Note that any output of the new -container occurring between its creation and attach will not be replayed, but it -can be viewed using `kubectl log`. - -##### Alternative Considered: Standard Pod Updates - -It would simplify initial implementation if we updated the pod spec via the -normal means, and switched to a new update subresource if required at a future -date. It's easier to begin with a too-restrictive policy than a too-permissive -one on which users come to rely, and we expect to be able to remove the -`/ephemeralcontainers` subresource prior to exiting alpha should it prove -unnecessary. - -### Container Runtime Interface (CRI) changes - -The CRI requires no changes for basic functionality, but it will need to be -updated to support container namespace targeting, as described in the -[Shared PID Namespace Proposal](https://github.com/kubernetes/community/blob/master/contributors/design-proposals/node/pod-pid-namespace.md#targeting-a-specific-containers-namespace). - -### Creating Debug Containers - -To create a debug container, kubectl will take the following steps: - -1. `kubectl` constructs an `EphemeralContainer` based on command line arguments - and appends it to `Pod.Spec.EphemeralContainers`. It `PUT`s the modified pod - to the pod's `/ephemeralcontainers`. -1. The apiserver discards changes other than additions to - `Pod.Spec.EphemeralContainers` and validates the pod update. - 1. Pod validation fails if container spec contains fields disallowed for - Ephemeral Containers or the same name as a container in the spec or - `EphemeralContainers`. - 1. API resource versioning resolves update races. -1. The kubelet's pod watcher notices the update and triggers a `syncPod()`. - During the sync, the kubelet calls `kuberuntime.StartEphemeralContainer()` - for any new Ephemeral Container. - 1. `StartEphemeralContainer()` uses the existing `startContainer()` to - start the Ephemeral Container. - 1. After initial creation, future invocations of `syncPod()` will publish - its ContainerStatus but otherwise ignore the Ephemeral Container. It - will exist for the life of the pod sandbox or it exits. In no event will - it be restarted. -1. `syncPod()` finishes a regular sync, publishing an updated PodStatus (which - includes the new `EphemeralContainer`) by its normal, existing means. -1. The client performs an attach to the debug container's console. - -There are no limits on the number of Debug Containers that can be created in a -pod, but exceeding a pod's resource allocation may cause the pod to be evicted. - -### Restarting and Reattaching Debug Containers - -Debug Containers will not be restarted. - -We want to be more user friendly by allowing re-use of the name of an exited -debug container, but this will be left for a future improvement. - -One can reattach to a Debug Container using `kubectl attach`. When supported by -a runtime, multiple clients can attach to a single debug container and share the -terminal. This is supported by Docker. - -### Killing Debug Containers - -Debug containers will not be killed automatically unless the pod is destroyed. -Debug Containers will stop when their command exits, such as exiting a shell. -Unlike `kubectl exec`, processes in Debug Containers will not receive an EOF if -their connection is interrupted. - -A future improvement to Ephemeral Containers could allow killing Debug -Containers when they're removed the `EphemeralContainers`, but it's not clear -that we want to allow this. Removing an Ephemeral Container spec makes it -unavailable for future authorization decisions (e.g. whether to authorize exec -in a pod that had a privileged Ephemeral Container). - -### Security Considerations - -Debug Containers have no additional privileges above what is available to any -`v1.Container`. It's the equivalent of configuring an shell container in a pod -spec except that it is created on demand. - -Admission plugins must be updated to guard `/ephemeralcontainers`. They should -apply the same container image and security policy as for regular containers. - -### Additional Consideration - -1. Debug Containers are intended for interactive use and always have TTY and - Stdin enabled. -1. There are no guaranteed resources for ad-hoc troubleshooting. If - troubleshooting causes a pod to exceed its resource limit it may be evicted. -1. There's an output stream race inherent to creating then attaching a - container which causes output generated between the start and attach to go - to the log rather than the client. This is not specific to Ephemeral - Containers and exists because Kubernetes has no mechanism to attach a - container prior to starting it. This larger issue will not be addressed by - Ephemeral Containers, but Ephemeral Containers would benefit from future - improvements or work arounds. -1. Ephemeral Containers should not be used to build services, which we've - attempted to reflect in the API. - -## Implementation Plan - -### 1.12: Initial Alpha Release - -We're targeting an alpha release in Kubernetes 1.12 that includes the following -basic functionality: - -1. Approval for basic core API changes to Pod -1. Basic support in the kubelet for creating Ephemeral Containers - -Functionality out of scope for 1.12: - -* Killing running Ephemeral Containers by removing them from the Pod Spec. -* Updating `pod.Spec.EphemeralContainers` when containers are garbage - collected. -* `kubectl` commands for creating Ephemeral Containers - -Functionality will be hidden behind an alpha feature flag and disabled by -default. - -## Appendices - -We've researched many options over the life of this proposal. These Appendices -are included as optional reference material. It's not necessary to read this -material in order to understand the proposal in its current form. - -### Appendix 1: User Stories - -These user stories are intended to give examples how this proposal addresses the -above requirements. - -#### Operations - -Jonas runs a service "neato" that consists of a statically compiled Go binary -running in a minimal container image. One of the its pods is suddenly having -trouble connecting to an internal service. Being in operations, Jonas wants to -be able to inspect the running pod without restarting it, but he doesn't -necessarily need to enter the container itself. He wants to: - -1. Inspect the filesystem of target container -1. Execute debugging utilities not included in the container image -1. Initiate network requests from the pod network namespace - -This is achieved by running a new "debug" container in the pod namespaces. His -troubleshooting session might resemble: - -``` -% kubectl debug -it -m debian neato-5thn0 -- bash -root@debug-image:~# ps x - PID TTY STAT TIME COMMAND - 1 ? Ss 0:00 /pause - 13 ? Ss 0:00 bash - 26 ? Ss+ 0:00 /neato - 107 ? R+ 0:00 ps x -root@debug-image:~# cat /proc/26/root/etc/resolv.conf -search default.svc.cluster.local svc.cluster.local cluster.local -nameserver 10.155.240.10 -options ndots:5 -root@debug-image:~# dig @10.155.240.10 neato.svc.cluster.local. - -; <<>> DiG 9.9.5-9+deb8u6-Debian <<>> @10.155.240.10 neato.svc.cluster.local. -; (1 server found) -;; global options: +cmd -;; connection timed out; no servers could be reached -``` - -Thus Jonas discovers that the cluster's DNS service isn't responding. - -#### Debugging - -Thurston is debugging a tricky issue that's difficult to reproduce. He can't -reproduce the issue with the debug build, so he attaches a debug container to -one of the pods exhibiting the problem: - -``` -% kubectl debug -it --image=gcr.io/neato/debugger neato-5x9k3 -- sh -Defaulting container name to debug. -/ # ps x -PID USER TIME COMMAND - 1 root 0:00 /pause - 13 root 0:00 /neato - 26 root 0:00 sh - 32 root 0:00 ps x -/ # gdb -p 13 -... -``` - -He discovers that he needs access to the actual container, which he can achieve -by installing busybox into the target container: - -``` -root@debug-image:~# cp /bin/busybox /proc/13/root -root@debug-image:~# nsenter -t 13 -m -u -p -n -r /busybox sh - - -BusyBox v1.22.1 (Debian 1:1.22.0-9+deb8u1) built-in shell (ash) -Enter 'help' for a list of built-in commands. - -/ # ls -l /neato --rwxr-xr-x 2 0 0 746888 May 4 2016 /neato -``` - -Note that running the commands referenced above require `CAP_SYS_ADMIN` and -`CAP_SYS_PTRACE`. - -#### Automation - -Ginger is a security engineer tasked with running security audits across all of -her company's running containers. Even though his company has no standard base -image, she's able to audit all containers using: - -``` -% for pod in $(kubectl get -o name pod); do - kubectl debug -m gcr.io/neato/security-audit -p $pod /security-audit.sh - done -``` - -#### Technical Support - -Roy's team provides support for his company's multi-tenant cluster. He can -access the Kubernetes API (as a viewer) on behalf of the users he's supporting, -but he does not have administrative access to nodes or a say in how the -application image is constructed. When someone asks for help, Roy's first step -is to run his team's autodiagnose script: - -``` -% kubectl debug --image=k8s.gcr.io/autodiagnose nginx-pod-1234 -``` - -### Appendix 2: Requirements Analysis - -Many people have proposed alternate solutions to this problem. This section -discusses how the proposed solution meets all of the stated requirements and is -intended to contrast the alternatives listed below. - -**Troubleshoot arbitrary running containers with minimal prior configuration.** -This solution requires no prior configuration. - -**Access to namespaces and the file systems of individual containers.** This -solution runs a container in the shared pod namespaces (e.g. network) and will -attach to the PID namespace of a target container when not shared with the -entire pod. It relies on the behavior of `/proc/<pid>/root` to provide access to -filesystems of individual containers. - -**Fetch troubleshooting utilities at debug time**. This solution uses normal -container image distribution mechanisms to fetch images when the debug command -is run. - -**Respect admission restrictions.** Requests from kubectl are proxied through -the apiserver and so are available to existing -[admission controllers](https://kubernetes.io/docs/admin/admission-controllers/). -Plugins already exist to intercept `exec` and `attach` calls, but extending this -to support `debug` has not yet been scoped. - -**Allow introspection of pod state using existing tools**. The list of -`EphemeralContainerStatuses` is never truncated. If a debug container has run in -this pod it will appear here. - -**Support arbitrary runtimes via the CRI**. This proposal is implemented -entirely in the kubelet runtime manager and requires no changes in the -individual runtimes. - -**Have an excellent user experience**. This solution is conceptually -straightforward and surfaced in a single `kubectl` command that "runs a thing in -a pod". Debug tools are distributed by container image, which is already well -understood by users. There is no automatic copying of files or hidden paths. - -By using container images, users are empowered to create custom debug images. -Available images can be restricted by admission policy. Some examples of -possible debug images: - -* A script that automatically gathers a debugging snapshot and uploads it to a - cloud storage bucket before killing the pod. -* An image with a shell modified to log every statement to an audit API. - -**Require no direct access to the node.** This solution uses the standard -streaming API. - -**Have no inherent side effects to the running container image.** The target pod -is not modified by default, but resources used by the debug container will be -billed to the pod's cgroup, which means it could be evicted. A future -improvement could be to decrease the likelihood of eviction when there's an -active debug container. - -### Appendix 3: Alternatives Considered - -#### Container Spec in PodStatus - -Originally there was a desire to keep the pod spec immutable, so we explored -modifying only the pod status. An `EphemeralContainer` would contain a Spec, a -Status and a Target: - -``` -// EphemeralContainer describes a container to attach to a running pod for troubleshooting. -type EphemeralContainer struct { - metav1.TypeMeta `json:",inline"` - - // Spec describes the Ephemeral Container to be created. - Spec *Container `json:"spec,omitempty" protobuf:"bytes,2,opt,name=spec"` - - // Most recently observed status of the container. - // This data may not be up to date. - // Populated by the system. - // Read-only. - // +optional - Status *ContainerStatus `json:"status,omitempty" protobuf:"bytes,3,opt,name=status"` - - // If set, the name of the container from PodSpec that this ephemeral container targets. - // If not set then the ephemeral container is run in whatever namespaces are shared - // for the pod. - TargetContainerName string `json:"targetContainerName,omitempty" protobuf:"bytes,4,opt,name=targetContainerName"` -} -``` - -Ephemeral Containers for a pod would be listed in the pod's status: - -``` -type PodStatus struct { - ... - // List of user-initiated ephemeral containers that have been run in this pod. - // +optional - EphemeralContainers []EphemeralContainer `json:"ephemeralContainers,omitempty" protobuf:"bytes,11,rep,name=ephemeralContainers"` - -} -``` - -To create a new Ephemeral Container, one would append a new `EphemeralContainer` -with the desired `v1.Container` as `Spec` in `Pod.Status` and updates the `Pod` -in the API. Users cannot normally modify the pod status, so we'd create a new -subresource `/ephemeralcontainers` that allows an update of solely -`EphemeralContainers` and enforces append-only semantics. - -Since we have a requirement to describe the Ephemeral Container with a -`v1.Container`, this lead to a "spec in status" that seemed to violate API best -practices. It was confusing, and it required added complexity in the kubelet to -persist and publish user intent, which is rightfully the job of the apiserver. - -#### Extend the Existing Exec API ("exec++") - -A simpler change is to extend `v1.Pod`'s `/exec` subresource to support -"executing" container images. The current `/exec` endpoint must implement `GET` -to support streaming for all clients. We don't want to encode a (potentially -large) `v1.Container` into a query string, so we must extend `v1.PodExecOptions` -with the specific fields required for creating a Debug Container: - -``` -// PodExecOptions is the query options to a Pod's remote exec call -type PodExecOptions struct { - ... - // EphemeralContainerName is the name of an ephemeral container in which the - // command ought to be run. Either both EphemeralContainerName and - // EphemeralContainerImage fields must be set, or neither. - EphemeralContainerName *string `json:"ephemeralContainerName,omitempty" ...` - - // EphemeralContainerImage is the image of an ephemeral container in which the command - // ought to be run. Either both EphemeralContainerName and EphemeralContainerImage - // fields must be set, or neither. - EphemeralContainerImage *string `json:"ephemeralContainerImage,omitempty" ...` -} -``` - -After creating the Ephemeral Container, the kubelet would upgrade the connection -to streaming and perform an attach to the container's console. If disconnected, -the Ephemeral Container could be reattached using the pod's `/attach` endpoint -with `EphemeralContainerName`. - -Ephemeral Containers could not be removed via the API and instead the process -must terminate. While not ideal, this parallels existing behavior of `kubectl -exec`. To kill an Ephemeral Container one would `attach` and exit the process -interactively or create a new Ephemeral Container to send a signal with -`kill(1)` to the original process. - -Since the user cannot specify the `v1.Container`, this approach sacrifices a -great deal of flexibility. This solution still requires the kubelet to publish a -`Container` spec in the `PodStatus` that can be examined for future admission -decisions and so retains many of the downsides of the Container Spec in -PodStatus approach. - -#### Ephemeral Container Controller - -Kubernetes prefers declarative APIs where the client declares a state for -Kubernetes to enact. We could implement this in a declarative manner by creating -a new `EphemeralContainer` type: - -``` -type EphemeralContainer struct { - metav1.TypeMeta - metav1.ObjectMeta - - Spec v1.Container - Status v1.ContainerStatus -} -``` - -A new controller in the kubelet would watch for EphemeralContainers and -create/delete debug containers. `EphemeralContainer.Status` would be updated by -the kubelet at the same time it updates `ContainerStatus` for regular and init -containers. Clients would create a new `EphemeralContainer` object, wait for it -to be started and then attach using the pod's attach subresource and the name of -the `EphemeralContainer`. - -A new controller is a significant amount of complexity to add to the kubelet, -especially considering that the kubelet is already watching for changes to pods. -The kubelet would have to be modified to create containers in a pod from -multiple config sources. SIG Node strongly prefers to minimize kubelet -complexity. - -#### Mutable Pod Spec Containers - -Rather than adding to the pod API, we could instead make the pod spec mutable so -the client can generate an update adding a container. `SyncPod()` has no issues -adding the container to the pod at that point, but an immutable pod spec has -been a basic assumption and best practice in Kubernetes. Changing this -assumption complicates the requirements of the kubelet state machine. Since the -kubelet was not written with this in mind, we should expect such a change would -create bugs we cannot predict. - -#### Image Exec - -An earlier version of this proposal suggested simply adding `Image` parameter to -the exec API. This would run an ephemeral container in the pod namespaces -without adding it to the pod spec or status. This container would exist only as -long as the process it ran. This parallels the current kubectl exec, including -its lack of transparency. We could add constructs to track and report on both -traditional exec process and exec containers. In the end this failed to meet our -transparency requirements. - -#### Attaching Container Type Volume - -Combining container volumes ([#831](https://issues.k8s.io/831)) with the ability -to add volumes to the pod spec would get us most of the way there. One could -mount a volume of debug utilities at debug time. Docker does not allow adding a -volume to a running container, however, so this would require a container -restart. A restart doesn't meet our requirements for troubleshooting. - -Rather than attaching the container at debug time, kubernetes could always -attach a volume at a random path at run time, just in case it's needed. Though -this simplifies the solution by working within the existing constraints of -`kubectl exec`, it has a sufficient list of minor limitations (detailed in -[#10834](https://issues.k8s.io/10834)) to result in a poor user experience. - -#### Inactive container - -If Kubernetes supported the concept of an "inactive" container, we could -configure it as part of a pod and activate it at debug time. In order to avoid -coupling the debug tool versions with those of the running containers, we would -want to ensure the debug image was pulled at debug time. The container could -then be run with a TTY and attached using kubectl. - -The downside of this approach is that it requires prior configuration. In -addition to requiring prior consideration, it would increase boilerplate config. -A requirement for prior configuration makes it feel like a workaround rather -than a feature of the platform. - -#### Implicit Empty Volume - -Kubernetes could implicitly create an EmptyDir volume for every pod which would -then be available as a target for either the kubelet or a sidecar to extract a -package of binaries. - -Users would have to be responsible for hosting a package build and distribution -infrastructure or rely on a public one. The complexity of this solution makes it -undesirable. - -#### Standalone Pod in Shared Namespace ("Debug Pod") - -Rather than inserting a new container into a pod namespace, Kubernetes could -instead support creating a new pod with container namespaces shared with -another, target pod. This would be a simpler change to the Kubernetes API, which -would only need a new field in the pod spec to specify the target pod. To be -useful, the containers in this "Debug Pod" should be run inside the namespaces -(network, pid, etc) of the target pod but remain in a separate resource group -(e.g. cgroup for container-based runtimes). - -This would be a rather large change for pod, which is currently treated as an -atomic unit. The Container Runtime Interface has no provisions for sharing -outside of a pod sandbox and would need a refactor. This could be a complicated -change for non-container runtimes (e.g. hypervisor runtimes) which have more -rigid boundaries between pods. - -This is pushing the complexity of the solution from the kubelet to the runtimes. -Minimizing change to the Kubernetes API is not worth the increased complexity -for the kubelet and runtimes. - -It could also be possible to implement a Debug Pod as a privileged pod that runs -in the host namespace and interacts with the runtime directly to run a new -container in the appropriate namespace. This solution would be runtime-specific -and pushes the complexity of debugging to the user. Additionally, requiring -node-level access to debug a pod does not meet our requirements. - -#### Exec from Node - -The kubelet could support executing a troubleshooting binary from the node in -the namespaces of the container. Once executed this binary would lose access to -other binaries from the node, making it of limited utility and a confusing user -experience. - -This couples the debug tools with the lifecycle of the node, which is worse than -coupling it with container images. - -## Reference - -* [Pod Troubleshooting Tracking Issue](https://issues.k8s.io/27140) -* [CRI Tracking Issue](https://issues.k8s.io/28789) -* [CRI: expose optional runtime features](https://issues.k8s.io/32803) -* [Resource QoS in Kubernetes](resource-qos.md) -* Related Features - * [#1615](https://issues.k8s.io/1615) - Shared PID Namespace across - containers in a pod - * [#26751](https://issues.k8s.io/26751) - Pod-Level cgroup - * [#10782](https://issues.k8s.io/10782) - Vertical pod autoscaling +The Troubleshooting Running Pods proposal has moved to the +[Ephemeral Containers KEP](https://git.k8s.io/enhancements/keps/sig-node/20190212-ephemeral-containers.md). diff --git a/contributors/design-proposals/release/versioning.md b/contributors/design-proposals/release/versioning.md index da7f1bbb..1612d03b 100644 --- a/contributors/design-proposals/release/versioning.md +++ b/contributors/design-proposals/release/versioning.md @@ -90,9 +90,6 @@ should probably upgrade it, (and probably should have some time ago)". With minor releases happening approximately every three months, that means a minor release is supported for approximately nine months. -This policy is in line with -[GKE's supported upgrades policy](https://cloud.google.com/container-engine/docs/clusters/upgrade). - ## Patch releases Patch releases are intended for critical bug fixes to the latest minor version, diff --git a/contributors/devel/OWNERS b/contributors/devel/OWNERS index 4b7cccf3..4daed338 100644 --- a/contributors/devel/OWNERS +++ b/contributors/devel/OWNERS @@ -3,7 +3,6 @@ reviewers: - calebamiles - cblecker - - grodrigues3 - idvoretskyi - Phillels - spiffxp @@ -11,7 +10,6 @@ reviewers: approvers: - calebamiles - cblecker - - grodrigues3 - idvoretskyi - lavalamp - Phillels diff --git a/contributors/devel/README.md b/contributors/devel/README.md index 3b81ef4e..e49af627 100644 --- a/contributors/devel/README.md +++ b/contributors/devel/README.md @@ -57,7 +57,7 @@ Guide](http://kubernetes.io/docs/admin/). * **Annotations** ([Annotations](https://kubernetes.io/docs/concepts/overview/working-with-objects/annotations/)): are for attaching arbitrary non-identifying metadata to objects. Programs that automate Kubernetes objects may use annotations to store small amounts of their state. -* **API Conventions** ([api-conventions.md](api-conventions.md)): +* **API Conventions** ([api-conventions.md](sig-architecture/api-conventions.md)): Defining the verbs and resources used in the Kubernetes API. * **API Client Libraries** ([Client Libraries](https://kubernetes.io/docs/reference/using-api/client-libraries/)): diff --git a/contributors/devel/api-conventions.md b/contributors/devel/api-conventions.md deleted file mode 100644 index 91eb7417..00000000 --- a/contributors/devel/api-conventions.md +++ /dev/null @@ -1,3 +0,0 @@ -This file has moved to https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md. - -This file is a placeholder to preserve links. Please remove after 2019-07-01 or the release of kubernetes 1.15, whichever comes first. diff --git a/contributors/devel/api_changes.md b/contributors/devel/api_changes.md deleted file mode 100644 index fa654177..00000000 --- a/contributors/devel/api_changes.md +++ /dev/null @@ -1,3 +0,0 @@ -This file has moved to https://git.k8s.io/community/contributors/devel/sig-architecture/api_changes.md. - -This file is a placeholder to preserve links. Please remove after 2019-07-01 or the release of kubernetes 1.15, whichever comes first. diff --git a/contributors/devel/bazel.md b/contributors/devel/bazel.md deleted file mode 100644 index 82aa57d1..00000000 --- a/contributors/devel/bazel.md +++ /dev/null @@ -1,3 +0,0 @@ -This file has moved to https://git.k8s.io/community/contributors/devel/sig-testing/bazel.md. - -This file is a placeholder to preserve links. Please remove after 2019-07-01 or the release of kubernetes 1.15, whichever comes first. diff --git a/contributors/devel/cherry-picks.md b/contributors/devel/cherry-picks.md deleted file mode 100644 index 5e587d47..00000000 --- a/contributors/devel/cherry-picks.md +++ /dev/null @@ -1,3 +0,0 @@ -This file has moved to https://git.k8s.io/community/contributors/devel/sig-release/cherry-picks.md. - -This file is a placeholder to preserve links. Please remove after 2019-07-01 or the release of kubernetes 1.15, whichever comes first. diff --git a/contributors/devel/collab.md b/contributors/devel/collab.md deleted file mode 100644 index cdf234d2..00000000 --- a/contributors/devel/collab.md +++ /dev/null @@ -1,3 +0,0 @@ -This file has moved to https://git.k8s.io/community/contributors/guide/collab.md. - -This file is a placeholder to preserve links. Please remove after 2019-07-01 or the release of kubernetes 1.15, whichever comes first. diff --git a/contributors/devel/component-config-conventions.md b/contributors/devel/component-config-conventions.md deleted file mode 100644 index 3273f3b8..00000000 --- a/contributors/devel/component-config-conventions.md +++ /dev/null @@ -1,3 +0,0 @@ -This file has moved to https://git.k8s.io/community/contributors/devel/sig-architecture/component-config-conventions.md. - -This file is a placeholder to preserve links. Please remove after 2019-07-01 or the release of kubernetes 1.15, whichever comes first. diff --git a/contributors/devel/conformance-tests.md b/contributors/devel/conformance-tests.md deleted file mode 100644 index 414e9727..00000000 --- a/contributors/devel/conformance-tests.md +++ /dev/null @@ -1,3 +0,0 @@ -This file has moved to https://git.k8s.io/community/contributors/devel/sig-architecture/conformance-tests.md. - -This file is a placeholder to preserve links. Please remove after 2019-07-01 or the release of kubernetes 1.15, whichever comes first. diff --git a/contributors/devel/container-runtime-interface.md b/contributors/devel/container-runtime-interface.md deleted file mode 100644 index 6b12b564..00000000 --- a/contributors/devel/container-runtime-interface.md +++ /dev/null @@ -1,3 +0,0 @@ -This file has moved to https://git.k8s.io/community/contributors/devel/sig-node/container-runtime-interface.md. - -This file is a placeholder to preserve links. Please remove after 2019-07-01 or the release of kubernetes 1.15, whichever comes first. diff --git a/contributors/devel/controllers.md b/contributors/devel/controllers.md deleted file mode 100644 index 725c3dde..00000000 --- a/contributors/devel/controllers.md +++ /dev/null @@ -1,3 +0,0 @@ -This file has moved to https://git.k8s.io/community/contributors/devel/sig-api-machinery/controllers.md. - -This file is a placeholder to preserve links. Please remove after 2019-07-01 or the release of kubernetes 1.15, whichever comes first. diff --git a/contributors/devel/cri-container-stats.md b/contributors/devel/cri-container-stats.md deleted file mode 100644 index 10ea700c..00000000 --- a/contributors/devel/cri-container-stats.md +++ /dev/null @@ -1,3 +0,0 @@ -This file has moved to https://git.k8s.io/community/contributors/devel/sig-node/cri-container-stats.md. - -This file is a placeholder to preserve links. Please remove after 2019-07-01 or the release of kubernetes 1.15, whichever comes first. diff --git a/contributors/devel/cri-testing-policy.md b/contributors/devel/cri-testing-policy.md deleted file mode 100644 index e0dec073..00000000 --- a/contributors/devel/cri-testing-policy.md +++ /dev/null @@ -1,3 +0,0 @@ -This file has moved to https://git.k8s.io/community/contributors/devel/sig-node/cri-testing-policy.md. - -This file is a placeholder to preserve links. Please remove after 2019-07-01 or the release of kubernetes 1.15, whichever comes first. diff --git a/contributors/devel/cri-validation.md b/contributors/devel/cri-validation.md deleted file mode 100644 index 23a04f02..00000000 --- a/contributors/devel/cri-validation.md +++ /dev/null @@ -1,3 +0,0 @@ -This file has moved to https://git.k8s.io/community/contributors/devel/sig-node/cri-validation.md. - -This file is a placeholder to preserve links. Please remove after 2019-07-01 or the release of kubernetes 1.15, whichever comes first. diff --git a/contributors/devel/development.md b/contributors/devel/development.md index 6c74f9b5..2312495e 100644 --- a/contributors/devel/development.md +++ b/contributors/devel/development.md @@ -137,9 +137,10 @@ development environment, please [set one up](http://golang.org/doc/code.html). | 1.10 | 1.9.1 | | 1.11 | 1.10.2 | | 1.12 | 1.10.4 | -| 1.13 | 1.11.2 | -| 1.13 | 1.11.4 | -| 1.14+ | 1.12.1 | +| 1.13 | 1.11.13 | +| 1.14+ | 1.12.9 | + +Note that Go 1.13 is not supported yet. Ensure your GOPATH and PATH have been configured in accordance with the Go environment instructions. diff --git a/contributors/devel/e2e-node-tests.md b/contributors/devel/e2e-node-tests.md deleted file mode 100644 index 815fe0b8..00000000 --- a/contributors/devel/e2e-node-tests.md +++ /dev/null @@ -1,3 +0,0 @@ -This file has moved to https://git.k8s.io/community/contributors/devel/sig-node/e2e-node-tests.md. - -This file is a placeholder to preserve links. Please remove after 2019-07-01 or the release of kubernetes 1.15, whichever comes first. diff --git a/contributors/devel/e2e-tests.md b/contributors/devel/e2e-tests.md deleted file mode 100644 index f8427634..00000000 --- a/contributors/devel/e2e-tests.md +++ /dev/null @@ -1,3 +0,0 @@ -This file has moved to https://git.k8s.io/community/contributors/devel/sig-testing/e2e-tests.md. - -This file is a placeholder to preserve links. Please remove after 2019-07-01 or the release of kubernetes 1.15, whichever comes first. diff --git a/contributors/devel/event-style-guide.md b/contributors/devel/event-style-guide.md deleted file mode 100644 index d91c62ac..00000000 --- a/contributors/devel/event-style-guide.md +++ /dev/null @@ -1,3 +0,0 @@ -This file has moved to https://git.k8s.io/community/contributors/devel/sig-instrumentation/event-style-guide.md. - -This file is a placeholder to preserve links. Please remove after 2019-07-01 or the release of kubernetes 1.15, whichever comes first. diff --git a/contributors/devel/flaky-tests.md b/contributors/devel/flaky-tests.md deleted file mode 100644 index 13eb57fb..00000000 --- a/contributors/devel/flaky-tests.md +++ /dev/null @@ -1,3 +0,0 @@ -This file has moved to https://git.k8s.io/community/contributors/devel/sig-testing/flaky-tests.md. - -This file is a placeholder to preserve links. Please remove after 2019-07-01 or the release of kubernetes 1.15, whichever comes first. diff --git a/contributors/devel/flexvolume.md b/contributors/devel/flexvolume.md deleted file mode 100644 index f731c6df..00000000 --- a/contributors/devel/flexvolume.md +++ /dev/null @@ -1,3 +0,0 @@ -This file has moved to https://git.k8s.io/community/contributors/devel/sig-storage/flexvolume.md. - -This file is a placeholder to preserve links. Please remove after 2019-07-01 or the release of kubernetes 1.15, whichever comes first. diff --git a/contributors/devel/generating-clientset.md b/contributors/devel/generating-clientset.md deleted file mode 100644 index 4141df61..00000000 --- a/contributors/devel/generating-clientset.md +++ /dev/null @@ -1,3 +0,0 @@ -This file has moved to https://git.k8s.io/community/contributors/devel/sig-api-machinery/generating-clientset.md. - -This file is a placeholder to preserve links. Please remove after 2019-07-01 or the release of kubernetes 1.15, whichever comes first. diff --git a/contributors/devel/getting-builds.md b/contributors/devel/getting-builds.md deleted file mode 100644 index bbbcfa44..00000000 --- a/contributors/devel/getting-builds.md +++ /dev/null @@ -1,3 +0,0 @@ -This file has moved to https://git.k8s.io/community/contributors/devel/sig-release/getting-builds.md. - -This file is a placeholder to preserve links. Please remove after 2019-07-01 or the release of kubernetes 1.15, whichever comes first. diff --git a/contributors/devel/godep.md b/contributors/devel/godep.md deleted file mode 100644 index 6e896b94..00000000 --- a/contributors/devel/godep.md +++ /dev/null @@ -1,3 +0,0 @@ -This file has moved to https://git.k8s.io/community/contributors/devel/sig-architecture/godep.md. - -This file is a placeholder to preserve links. Please remove after 2019-07-01 or the release of kubernetes 1.15, whichever comes first. diff --git a/contributors/devel/gubernator.md b/contributors/devel/gubernator.md deleted file mode 100644 index c5361697..00000000 --- a/contributors/devel/gubernator.md +++ /dev/null @@ -1,3 +0,0 @@ -This file has moved to https://git.k8s.io/community/contributors/devel/sig-testing/gubernator.md. - -This file is a placeholder to preserve links. Please remove after 2019-07-01 or the release of kubernetes 1.15, whichever comes first. diff --git a/contributors/devel/help-wanted.md b/contributors/devel/help-wanted.md deleted file mode 100644 index 984deb6a..00000000 --- a/contributors/devel/help-wanted.md +++ /dev/null @@ -1,3 +0,0 @@ -This file has moved to https://git.k8s.io/community/contributors/guide/help-wanted.md. - -This file is a placeholder to preserve links. Please remove after 2019-07-01 or the release of kubernetes 1.15, whichever comes first. diff --git a/contributors/devel/instrumentation.md b/contributors/devel/instrumentation.md deleted file mode 100644 index 6681740e..00000000 --- a/contributors/devel/instrumentation.md +++ /dev/null @@ -1,3 +0,0 @@ -This file has moved to https://git.k8s.io/community/contributors/devel/sig-instrumentation/instrumentation.md. - -This file is a placeholder to preserve links. Please remove after 2019-07-01 or the release of kubernetes 1.15, whichever comes first. diff --git a/contributors/devel/kubectl-conventions.md b/contributors/devel/kubectl-conventions.md deleted file mode 100644 index 4cc1c7e0..00000000 --- a/contributors/devel/kubectl-conventions.md +++ /dev/null @@ -1,3 +0,0 @@ -This file has moved to https://git.k8s.io/community/contributors/devel/sig-cli/kubectl-conventions.md. - -This file is a placeholder to preserve links. Please remove after 2019-07-01 or the release of kubernetes 1.15, whichever comes first.
\ No newline at end of file diff --git a/contributors/devel/kubelet-cri-networking.md b/contributors/devel/kubelet-cri-networking.md deleted file mode 100644 index 148d9ae6..00000000 --- a/contributors/devel/kubelet-cri-networking.md +++ /dev/null @@ -1,3 +0,0 @@ -This file has moved to https://git.k8s.io/community/contributors/devel/sig-node/kubelet-cri-networking.md. - -This file is a placeholder to preserve links. Please remove after 2019-07-01 or the release of kubernetes 1.15, whichever comes first. diff --git a/contributors/devel/kubemark-guide.md b/contributors/devel/kubemark-guide.md deleted file mode 100644 index 719e2c76..00000000 --- a/contributors/devel/kubemark-guide.md +++ /dev/null @@ -1,3 +0,0 @@ -This file has moved to https://git.k8s.io/community/contributors/devel/sig-scalability/kubemark-guide.md. - -This file is a placeholder to preserve links. Please remove after 2019-07-01 or the release of kubernetes 1.15, whichever comes first. diff --git a/contributors/devel/logging.md b/contributors/devel/logging.md deleted file mode 100644 index a22fc799..00000000 --- a/contributors/devel/logging.md +++ /dev/null @@ -1,3 +0,0 @@ -This file has moved to https://git.k8s.io/community/contributors/devel/sig-instrumentation/logging.md. - -This file is a placeholder to preserve links. Please remove after 2019-07-01 or the release of kubernetes 1.15, whichever comes first. diff --git a/contributors/devel/node-performance-testing.md b/contributors/devel/node-performance-testing.md deleted file mode 100644 index e51417ed..00000000 --- a/contributors/devel/node-performance-testing.md +++ /dev/null @@ -1,3 +0,0 @@ -This file has moved to https://git.k8s.io/community/contributors/devel/sig-node/node-performance-testing.md. - -This file is a placeholder to preserve links. Please remove after 2019-07-01 or the release of kubernetes 1.15, whichever comes first. diff --git a/contributors/devel/profiling.md b/contributors/devel/profiling.md deleted file mode 100644 index 5c7e5a2e..00000000 --- a/contributors/devel/profiling.md +++ /dev/null @@ -1,3 +0,0 @@ -This file has moved to https://git.k8s.io/community/contributors/devel/sig-scalability/profiling.md. - -This file is a placeholder to preserve links. Please remove after 2019-07-01 or the release of kubernetes 1.15, whichever comes first. diff --git a/contributors/devel/release.md b/contributors/devel/release.md deleted file mode 100644 index 129efc96..00000000 --- a/contributors/devel/release.md +++ /dev/null @@ -1,3 +0,0 @@ -This file has moved to https://git.k8s.io/community/contributors/devel/sig-release/release.md. - -This file is a placeholder to preserve links. Please remove after 2019-07-01 or the release of kubernetes 1.15, whichever comes first. diff --git a/contributors/devel/scheduler.md b/contributors/devel/scheduler.md deleted file mode 100644 index 479f5136..00000000 --- a/contributors/devel/scheduler.md +++ /dev/null @@ -1,3 +0,0 @@ -This file has moved to https://git.k8s.io/community/contributors/devel/sig-scheduling/scheduler.md. - -This file is a placeholder to preserve links. Please remove after 2019-07-01 or the release of kubernetes 1.15, whichever comes first. diff --git a/contributors/devel/scheduler_algorithm.md b/contributors/devel/scheduler_algorithm.md deleted file mode 100644 index a64a2c3b..00000000 --- a/contributors/devel/scheduler_algorithm.md +++ /dev/null @@ -1,3 +0,0 @@ -This file has moved to https://git.k8s.io/community/contributors/devel/sig-scheduling/scheduler_algorithm.md. - -This file is a placeholder to preserve links. Please remove after 2019-07-01 or the release of kubernetes 1.15, whichever comes first. diff --git a/contributors/devel/sig-architecture/api-conventions.md b/contributors/devel/sig-architecture/api-conventions.md index f00d7c87..57fbfaad 100644 --- a/contributors/devel/sig-architecture/api-conventions.md +++ b/contributors/devel/sig-architecture/api-conventions.md @@ -86,6 +86,12 @@ word names ("extensions", "apps"), and any group name ending in "*.k8s.io" for its sole use. When choosing a group name, we recommend selecting a subdomain your group or organization owns, such as "widget.mycompany.com". +Version strings should match +[DNS_LABEL](https://github.com/kubernetes/community/blob/master/contributors/design-proposals/architecture/identifiers.md) +format. + + + Resource collections should be all lowercase and plural, whereas kinds are CamelCase and singular. Group names must be lower case and be valid DNS subdomains. diff --git a/contributors/devel/sig-architecture/api_changes.md b/contributors/devel/sig-architecture/api_changes.md index 8bf99957..8125bd88 100644 --- a/contributors/devel/sig-architecture/api_changes.md +++ b/contributors/devel/sig-architecture/api_changes.md @@ -930,6 +930,9 @@ The preferred approach adds an alpha field to the existing object, and ensures i 3. Before persisting the object to storage, clear disabled alpha fields on create, and on update if the existing object does not already have a value in the field. This prevents new usage of the feature while it is disabled, while ensuring existing data is preserved. +Ensuring existing data is preserved is needed so that when the feature is enabled by default in a future version *n* +and data is unconditionally allowed to be persisted in the field, an *n-1* API server +(with the feature still disabled by default) will not drop the data on update. The recommended place to do this is in the REST storage strategy's PrepareForCreate/PrepareForUpdate methods: ```go diff --git a/contributors/devel/sig-architecture/conformance-tests.md b/contributors/devel/sig-architecture/conformance-tests.md index c3069402..919e7cd9 100644 --- a/contributors/devel/sig-architecture/conformance-tests.md +++ b/contributors/devel/sig-architecture/conformance-tests.md @@ -33,6 +33,9 @@ specifically, a test is eligible for promotion to conformance if: - it tests only GA, non-optional features or APIs (e.g., no alpha or beta endpoints, no feature flags required, no deprecated features) +- it does not require direct access to kubelet's API to pass (nor does it + require indirect access via the API server node proxy endpoint); it MAY + use the kubelet API for debugging purposes upon failure - it works for all providers (e.g., no `SkipIfProviderIs`/`SkipUnlessProviderIs` calls) - it is non-privileged (e.g., does not require root on nodes, access to raw @@ -48,12 +51,13 @@ specifically, a test is eligible for promotion to conformance if: - it passes against the appropriate versions of kubernetes as spelled out in the [conformance test version skew policy] - it is stable and runs consistently (e.g., no flakes), and has been running - for at least one release cycle + for at least two weeks - new conformance tests or updates to conformance tests for additional scenarios are only allowed before code freeze dates set by the release team to allow enough soak time of the changes and gives folks a chance to kick the tires either in the community CI or their own infrastructure to make sure the tests are robust +- it has a name that is a literal string Examples of features which are not currently eligible for conformance tests: @@ -242,7 +246,8 @@ To promote a test to the conformance test suite, open a PR as follows: than the `framework.It()` function - adds a comment immediately before the `ConformanceIt()` call that includes all of the required [conformance test comment metadata] - - adds the test name to the [conformance.txt] file + - `go run test/conformance/walk.go test/e2e > test/conformance/testdata/conformance.txt` + adds the test name to the [conformance.txt] file - add the PR to SIG Architecture's [Conformance Test Review board] in the To Triage column @@ -287,7 +292,7 @@ framework.ConformanceIt("it should print the output to logs", func() { }) ``` -The corresponding portion of the Kubernetes Conformance Documentfor this test +The corresponding portion of the Kubernetes Conformance Document for this test would then look like this: > ## [Kubelet: log output](https://github.com/kubernetes/kubernetes/tree/release-1.9/test/e2e_node/kubelet_test.go#L47) diff --git a/contributors/devel/sig-instrumentation/instrumentation.md b/contributors/devel/sig-instrumentation/instrumentation.md index b0a11193..7595b436 100644 --- a/contributors/devel/sig-instrumentation/instrumentation.md +++ b/contributors/devel/sig-instrumentation/instrumentation.md @@ -90,7 +90,8 @@ apply additionally. ## Naming -Metrics added directly by application or package code should have a unique name. +General [metric and label naming best practices](https://prometheus.io/docs/practices/naming/) apply. +Beyond that, metrics added directly by application or package code should have a unique name. This avoids collisions of metrics added via dependencies. They also clearly distinguish metrics collected with different semantics. This is solved through prefixes: diff --git a/contributors/devel/sig-node/container-runtime-interface.md b/contributors/devel/sig-node/container-runtime-interface.md index 84dcddde..3941c942 100644 --- a/contributors/devel/sig-node/container-runtime-interface.md +++ b/contributors/devel/sig-node/container-runtime-interface.md @@ -3,10 +3,12 @@ ## What is CRI? CRI (_Container Runtime Interface_) consists of a -[protobuf API](https://git.k8s.io/kubernetes/pkg/kubelet/apis/cri/runtime/v1alpha2/api.proto), specifications/requirements (to-be-added), +[protobuf API](https://git.k8s.io/kubernetes/staging/src/k8s.io/cri-api/pkg/apis/runtime/v1alpha2/api.proto), and [libraries](https://git.k8s.io/kubernetes/pkg/kubelet/server/streaming) -for container runtimes to integrate with kubelet on a node. CRI is currently in Alpha. +for container runtimes to integrate with kubelet on a node. The CRI API is +currently in Alpha, and the CRI-Docker integration is used by default as of +Kubernetes 1.7+. In the future, we plan to add more developer tools such as the CRI validation tests. @@ -26,14 +28,7 @@ pluggable container runtimes and build a healthier ecosystem. ## How to use CRI? -For Kubernetes 1.6+: - -1. Start the image and runtime services on your node. You can have a single - service acting as both image and runtime services. -2. Set the kubelet flags - - Pass the unix socket(s) to which your services listen to kubelet: - `--container-runtime-endpoint` and `--image-service-endpoint`. - - Use the "remote" runtime by `--container-runtime=remote`. +See the [CRI installation documentation](https://kubernetes.io/docs/setup/cri/). CRI is still young and we are actively incorporating feedback from developers to improve the API. Although we strive to maintain backward compatibility, @@ -54,7 +49,6 @@ The old, pre-CRI Docker integration was removed in 1.7. The Kubernetes 1.5 [blog post on CRI](https://kubernetes.io/blog/2016/12/container-runtime-interface-cri-in-kubernetes/) serves as a general introduction. - Below is a mixed list of CRI specifications/requirements, design docs and proposals. We are working on adding more documentation for the API. @@ -74,7 +68,7 @@ proposals. We are working on adding more documentation for the API. ## [Status update](#status-update) ### Kubernetes v1.7 release (Docker-CRI integration GA, container metrics API) - - The Docker CRI integration has been promoted to GA. + - The Docker CRI integration has been promoted to GA. - The legacy, non-CRI Docker integration has been completely removed from Kubelet. The deprecated `--enable-cri` flag has been removed. - CRI has been extended to support collecting container metrics from the @@ -104,6 +98,9 @@ default in Kubelet**. #### [CRI known issues](#cri-1.5-known-issues): +Note, these are known issues as of the 1.5 release. They may or may not have +been fixed since. + - [#27097](https://github.com/kubernetes/kubernetes/issues/27097): Container metrics are not yet defined in CRI. - [#36401](https://github.com/kubernetes/kubernetes/issues/36401): The new @@ -118,6 +115,9 @@ default in Kubelet**. #### [Docker CRI integration known issues](#docker-cri-1.5-known-issues) +Note, these are known issues as of the 1.5 release. They may or may not have +been fixed since. + - Docker compatibility: Support only Docker v1.11 and v1.12. - Network: - [#35457](https://github.com/kubernetes/kubernetes/issues/35457): Does diff --git a/contributors/devel/sig-node/cri-container-stats.md b/contributors/devel/sig-node/cri-container-stats.md index c72f2c8b..a760d404 100644 --- a/contributors/devel/sig-node/cri-container-stats.md +++ b/contributors/devel/sig-node/cri-container-stats.md @@ -115,7 +115,10 @@ behind it.* ## Status -The container metrics calls are added to CRI in Kubernetes 1.7, but Kubelet does not -yet use it to gather metrics from the runtime. We plan to enable Kubelet to -optionally consume the container metrics from the API in 1.8. - +The container metrics calls were added to CRI in Kubernetes 1.7, but Kubelet did not +yet use it to gather metrics from the runtime. In Kubernetes 1.8, Kubelet was +given the option to [consume the container metrics using CRI +stats](https://github.com/kubernetes/kubernetes/pull/51557). See the +`pkg/kubelet/cadvisor.go#UsingLegacyCadvisorStats` +[function](https://github.com/kubernetes/kubernetes/blob/master/pkg/kubelet/cadvisor/util.go#L73) +for more information on how Kubelet determines the proper metrics source. diff --git a/contributors/devel/sig-node/e2e-node-tests.md b/contributors/devel/sig-node/e2e-node-tests.md index 4f3327cb..31c0459c 100644 --- a/contributors/devel/sig-node/e2e-node-tests.md +++ b/contributors/devel/sig-node/e2e-node-tests.md @@ -148,6 +148,30 @@ test in parallel against different instances of the same image. make test-e2e-node REMOTE=true INSTANCE_PREFIX="my-prefix" ``` +## Run tests using a custom image config + +This is useful if you want to test out different runtime configurations. First, make a local +(temporary) copy of the base image config from the test-infra repo: +https://github.com/kubernetes/test-infra/tree/master/jobs/e2e_node + +Make your desired modifications to the config, and update data paths to be absolute paths to the +relevant files on your local machine (e.g. prepend your home directory path to each). For example: + +```diff + images: + cos-stable: + image_regex: cos-stable-60-9592-84-0 + project: cos-cloud +- metadata: "user-data</go/src/github.com/containerd/cri/test/e2e_node/init.yaml,containerd-configure-sh</go/src/github.com/containerd/cri/cluster/gce/configure.sh,containerd-extra-init-sh</go/src/github.com/containerd/cri/test/e2e_node/gci-init.sh,containerd-env</workspace/test-infra/jobs/e2e_node/containerd/cri-master/env,gci-update-strategy=update_disabled" ++ metadata: "user-data</home/tallclair/go/src/github.com/containerd/cri/test/e2e_node/init.yaml,containerd-configure-sh</home/tallclair/go/src/github.com/containerd/cri/cluster/gce/configure.sh,containerd-extra-init-sh</home/tallclair/go/src/github.com/containerd/cri/test/e2e_node/gci-init.sh,containerd-env</home/tallclair/workspace/test-infra/jobs/e2e_node/containerd/cri-master/env,gci-update-strategy=update_disabled" +``` + +Finally, run the tests with your custom config: + +```sh +make test-e2e-node REMOTE=true IMAGE_CONFIG_FILE="<local file>" [...] +``` + # Additional Test Options for both Remote and Local execution ## Only run a subset of the tests diff --git a/contributors/devel/sig-release/cherry-picks.md b/contributors/devel/sig-release/cherry-picks.md index 934111a3..aad88ac6 100644 --- a/contributors/devel/sig-release/cherry-picks.md +++ b/contributors/devel/sig-release/cherry-picks.md @@ -31,37 +31,102 @@ branches. * You will need to run the cherry-pick script separately for each patch release you want to cherry-pick to. * Your cherry-pick PR will immediately get the `do-not-merge/cherry-pick-not-approved` label. + [Normal rules apply for code merge](https://github.com/kubernetes/community/blob/master/contributors/devel/sig-release/release.md#tldr), + with some additional caveats outlined in the next section of this document. + +## Cherry-pick Review + +As with any other PR, code OWNERS review (`/lgtm`) and approve (`/approve`) on +cherry-pick PRs as they deem appropriate. + +The same release note requirements apply as normal pull requests, +except the release note stanza will auto-populate from the master +branch pull request from which the cherry-pick originated. If this +is unsuccessful the `do-not-merge/release-note-label-needed` label +will be applied and the cherry-pick author must edit the pull request +description to [add a release note](https://git.k8s.io/community/contributors/guide/release-notes.md) +or include in a comment the `/release-note-none` command. + +Cherry-pick pull requests are reviewed slightly differently than normal +pull requests on the master branch in that they: + + * Are by default expected to be `kind/bug` and `priority/critical-urgent`. + + * Milestones must be set on the PR reflecting the milestone for the target + release branch (for example, milestone v1.11 for a cherry-pick onto branch + release-1.11). This is normally done for you by automation. + + * Have one additional level of review in that they must be approved specifically + for cherry-pick by branch approvers. + The [Branch Manager](https://git.k8s.io/sig-release/release-team/role-handbooks/branch-manager) will triage PRs targeted to the next .0 minor release branch up until the release, while the [Patch Release Team](https://git.k8s.io/sig-release/release-team/role-handbooks/patch-release-manager) will handle all cherry-picks to patch releases. - Normal rules apply for code merge. - * Reviewers `/lgtm` and owners `/approve` as they deem appropriate. - * Milestones on cherry-pick PRs should be the milestone for the target - release branch (for example, milestone 1.11 for a cherry-pick onto - release-1.11). - * During code freeze, to get attention on a cherry-pick by the current - release team members see the [appropriate release folder](https://git.k8s.io/sig-release/releases) - for the target release's team contact information. You may cc them with - `<@githubusername>` on your cherry-pick PR. + + The [Branch Manager](https://git.k8s.io/sig-release/release-team/role-handbooks/branch-manager) + or the [Patch Release Team](https://git.k8s.io/sig-release/release-team/role-handbooks/patch-release-manager) + are the final authority on branch approval by removing the `do-not-merge/cherry-pick-not-approved` + label and triggering a merge into the target branch. + + The team scrubs through incoming cherry-picks on at least a weekly basis, daily during + burndown ahead of a .0 release. Ahead of point releases, reminders of the + cherry-pick deadline will be sent out to the community. Cherry-pick PRs are + often metered into the release branches to give more deliberate CI signal across + changes. For this reason your cherry-pick must be ready to merge ahead of + the cherry-pick deadline, but those candidates may be merged during the days + between the deadline and release. + + Open cherry-pick PRs which do not land in the current release will + continue to be tracked by the team for consideration for inclusion in a next + patch release. + + If you are concerned about the status of your cherry-pick, err on the + side of overcommunicating and reach out to the branch reviewer(s): + + * During code freeze or after code thaw and ahead of a .0 release, to get attention on a cherry-pick by the current + release team members see the [appropriate release folder](https://git.k8s.io/sig-release/releases) + for the target release's team contact information. You may cc them with + `@<githubusername>` on your cherry-pick PR. + * For prior branches, check the [patch release schedule](https://git.k8s.io/sig-release/releases/patch-releases.md), which includes contact information for the patch release team. -## Cherry-pick Review +Compared to the normal master branch's merge volume across time, +the release branches see one or two orders of magnitude less PRs. +This is because there is an order or two of magnitude higher scrutiny. +Again the emphasis is on critical bug fixes, eg: + * Loss of data + * Memory corruption + * Panic, crash, hang + * Security -Cherry-pick pull requests have an additional requirement compared to normal pull -requests. -They must be approved specifically for cherry-pick by Approvers. -The [Branch Manager](https://git.k8s.io/sig-release/release-team/role-handbooks/branch-manager) -or the [Patch Release Team](https://git.k8s.io/sig-release/release-team/role-handbooks/patch-release-manager) -are the final authority on removing the `do-not-merge/cherry-pick-not-approved` -label and triggering a merge into the target branch. - -Cherry-pick pull requests follow the same release note requirements as -other pull requests, except the release note stanza will auto-populate from -the master branch pull request from which the cherry-pick originated. If -this is unsuccessful the `do-not-merge/release-note-label-needed` label -will be applied and the cherry-pick author must edit the pull request -description to [add a release note](https://git.k8s.io/community/contributors/guide/release-notes.md). +If you are proposing a cherry-pick and it is not a clear and obvious +critical bug fix, please reconsider. If upon reflection you wish to +continue, bolster your case by supplementing your PR with, eg: + + * A GitHub issue detailing the problem + + * Scope of the change + + * Risks of adding a change + + * Risks of associated regression + + * Testing performed, test cases added + + * Key stakeholder SIG reviewers/approvers attesting to their confidence in the + change being a required backport + + * If the change is in cloud-provider-specific platform code (which is in the + process of being moved out of core Kubernetes), describe the customer impact, + how the issue escaped initial testing, remediation taken to prevent similar + future escapes, and why the change cannot be carried in your downstream + fork of the Kubernetes project branches. It is critical that our full + community is actively engaged on enhancements in the project. If a + released feature was not enabled on a particular provider's platform, this + is a community miss that needs to be resolved in the master branch for + subsequent releases. Such enabling will not be backported to the patch + release branches. ## Searching for Cherry-picks diff --git a/contributors/devel/sig-scalability/hollow-node_simplified_template.yaml b/contributors/devel/sig-scalability/hollow-node_simplified_template.yaml new file mode 100644 index 00000000..8d33982e --- /dev/null +++ b/contributors/devel/sig-scalability/hollow-node_simplified_template.yaml @@ -0,0 +1,93 @@ +apiVersion: v1 +kind: ReplicationController +metadata: + name: hollow-node + namespace: kubemark +spec: + replicas: {{numreplicas}} + selector: + name: hollow-node + template: + metadata: + labels: + name: hollow-node + spec: + initContainers: + - name: init-inotify-limit + image: docker.io/busybox:latest + command: ['sysctl', '-w', 'fs.inotify.max_user_instances=200'] + securityContext: + privileged: true + volumes: + - name: kubeconfig-volume + secret: + secretName: kubeconfig + - name: logs-volume + hostPath: + path: /var/log + containers: + - name: hollow-kubelet + image: {{kubemark_image_registry}}/kubemark:{{kubemark_image_tag}} + ports: + - containerPort: 4194 + - containerPort: 10250 + - containerPort: 10255 + env: + - name: CONTENT_TYPE + valueFrom: + configMapKeyRef: + name: node-configmap + key: content.type + - name: NODE_NAME + valueFrom: + fieldRef: + fieldPath: metadata.name + command: + - /bin/sh + - -c + - /kubemark --morph=kubelet --name=$(NODE_NAME) --kubeconfig=/kubeconfig/kubelet.kubeconfig $(CONTENT_TYPE) --alsologtostderr --v=2 + volumeMounts: + - name: kubeconfig-volume + mountPath: /kubeconfig + readOnly: true + - name: logs-volume + mountPath: /var/log + resources: + requests: + cpu: 20m + memory: 50M + securityContext: + privileged: true + - name: hollow-proxy + image: {{kubemark_image_registry}}/kubemark:{{kubemark_image_tag}} + env: + - name: CONTENT_TYPE + valueFrom: + configMapKeyRef: + name: node-configmap + key: content.type + - name: NODE_NAME + valueFrom: + fieldRef: + fieldPath: metadata.name + command: + - /bin/sh + - -c + - /kubemark --morph=proxy --name=$(NODE_NAME) --use-real-proxier=false --kubeconfig=/kubeconfig/kubeproxy.kubeconfig $(CONTENT_TYPE) --alsologtostderr --v=2 + volumeMounts: + - name: kubeconfig-volume + mountPath: /kubeconfig + readOnly: true + - name: logs-volume + mountPath: /var/log + resources: + requests: + cpu: 20m + memory: 50M + tolerations: + - effect: NoExecute + key: node.kubernetes.io/unreachable + operator: Exists + - effect: NoExecute + key: node.kubernetes.io/not-ready + operator: Exists diff --git a/contributors/devel/sig-scalability/kubemark-setup-guide.md b/contributors/devel/sig-scalability/kubemark-setup-guide.md new file mode 100644 index 00000000..f2f5a81f --- /dev/null +++ b/contributors/devel/sig-scalability/kubemark-setup-guide.md @@ -0,0 +1,75 @@ +## Introduction +This document serves to understand how to set up kubemark cluster given that a base cluster (to run hollow-node pods) and separate master (to act as master for the hollow nodes) are already present. + +## Precondition +You need kubemark master and external cluster to set up a kubemark cluster. + +The functions are as follows: + +- kubemark master: can be StandAlone or HA, used to be the kubemark cluster's master +- external cluster: used to create hollow nodes for the kubemark cluster + +## Steps: +1. Build kubemark image + +If you want to build/use your own kubemark image, do as follows. Otherwise skip this section and just use the latest image `staging-k8s.gcr.io/kubemark:latest` from public repo. + +- i. pull kubernetes code + +``` +cd $GOPATH/src/k8s.io/ +git clone git@github.com:kubernetes/kubernetes.git +``` + +- ii. build kubemark binary + +``` +./hack/build-go.sh cmd/kubemark/ +cp $GOPATH/src/k8s.io/kubernetes/_output/bin/kubemark $GOPATH/src/k8s.io/kubernetes/cluster/images/kubemark/ +``` + +- iii. build kubemark image + +``` +cd $GOPATH/src/k8s.io/kubernetes/cluster/images/kubemark/ +make build +``` + +Then you can get the image named `staging-k8s.gcr.io/kubemark:latest` locally. + +- iv. push kubemark image + +``` +docker tag staging-k8s.gcr.io/kubemark:latest {{kubemark_image_registry}}/kubemark:{{kubemark_image_tag}} +docker push {{kubemark_image_registry}}/kubemark:{{kubemark_image_tag}} +``` + +2. Create hollow nodes + +- i. create namespace, configmap and secret + +Copy kubemark master's kubeconfig which is used to configure access, put it on a master of external cluster, rename it as config. + +``` +kubectl create ns kubemark +kubectl create configmap node-configmap -n kubemark --from-literal=content.type="test-cluster" +kubectl create secret generic kubeconfig --type=Opaque --namespace=kubemark --from-file=kubelet.kubeconfig=config --from-file=kubeproxy.kubeconfig=config +``` + +- ii. apply yaml to create hollow nodes + +You can use `hollow-node_simplified_template.yaml` in the current directory, or use `hollow-node_template.yaml` in `kubernetes/test/kubemark/resources/`. + +Note: + +- the parameters `{{numreplicas}}` means the number of hollow nodes in the kubemark cluster +- the parameters `{{numreplicas}}`, `{{kubemark_image_registry}}` and `{{kubemark_image_tag}}` need to be filled in the simplified template +- your external cluster should have enough resources to be able to run `{{numreplicas}}` no. of hollow-node pods + +``` +kubectl create -f hollow-node_simplified_template.yaml +``` + +Waiting for these hollow-node pods to be running. Then you can see these pods register as kubemark master's nodes. + +Finally, kubemark master and external cluster set up the kubemark cluster. diff --git a/contributors/devel/sig-scheduling/scheduler.md b/contributors/devel/sig-scheduling/scheduler.md index 486b04a9..03df88fe 100644 --- a/contributors/devel/sig-scheduling/scheduler.md +++ b/contributors/devel/sig-scheduling/scheduler.md @@ -84,7 +84,7 @@ scheduling policies to apply, and can add new ones. The policies that are applied when scheduling can be chosen in one of two ways. The default policies used are selected by the functions `defaultPredicates()` and `defaultPriorities()` in [pkg/scheduler/algorithmprovider/defaults/defaults.go](http://releases.k8s.io/HEAD/pkg/scheduler/algorithmprovider/defaults/defaults.go). -However, the choice of policies can be overridden by passing the command-line flag `--policy-config-file` to the scheduler, pointing to a JSON file specifying which scheduling policies to use. See [examples/scheduler-policy-config.json](https://git.k8s.io/examples/staging/scheduler-policy-config.json) for an example +However, the choice of policies can be overridden by passing the command-line flag `--policy-config-file` to the scheduler, pointing to a JSON file specifying which scheduling policies to use. See [examples/scheduler-policy-config.json](https://git.k8s.io/examples/staging/scheduler-policy/scheduler-policy-config.json) for an example config file. (Note that the config file format is versioned; the API is defined in [pkg/scheduler/api](http://releases.k8s.io/HEAD/pkg/scheduler/api/)). Thus to add a new scheduling policy, you should modify [pkg/scheduler/algorithm/predicates/predicates.go](http://releases.k8s.io/HEAD/pkg/scheduler/algorithm/predicates/predicates.go) or add to the directory [pkg/scheduler/algorithm/priorities](http://releases.k8s.io/HEAD/pkg/scheduler/algorithm/priorities/), and either register the policy in `defaultPredicates()` or `defaultPriorities()`, or use a policy config file. diff --git a/contributors/devel/sig-scheduling/scheduler_benchmarking.md b/contributors/devel/sig-scheduling/scheduler_benchmarking.md index dc456e21..1c08b5d8 100644 --- a/contributors/devel/sig-scheduling/scheduler_benchmarking.md +++ b/contributors/devel/sig-scheduling/scheduler_benchmarking.md @@ -11,7 +11,7 @@ To run integration benchmarks use the following command from inside a Kubernetes directory. ```sh -make test-integration WHAT=./test/integration/scheduler_perf KUBE_TEST_VMODULE="''" KUBE_TEST_ARGS="-run=xxx -bench=." +make test-integration WHAT=./test/integration/scheduler_perf KUBE_TEST_VMODULE="''" KUBE_TEST_ARGS="-run=^$$ -bench=." ``` You can also provide a benchmark name in order to run a specific set of @@ -19,9 +19,11 @@ benchmarks. Please refer to [Go documentation on benchmarks](https://golang.org/ for more information. ```sh -make test-integration WHAT=./test/integration/scheduler_perf KUBE_TEST_VMODULE="''" KUBE_TEST_ARGS="-run=xxx -bench=BenchmarkScheduling" +make test-integration WHAT=./test/integration/scheduler_perf KUBE_TEST_VMODULE="''" KUBE_TEST_ARGS="-run=^$$ -bench=BenchmarkScheduling" ``` +> To display benchmark output only, you can append `-alsologtostderr=false -logtostderr=false` to `KUBE_TEST_ARGS`. + These benchmarks are located in `./test/integration/scheduler_perf/scheduler_bench_test.go`. The function names start with `BenchmarkScheduling`. At the beginning of each function there are a few lines in the form of: @@ -51,7 +53,7 @@ it in the `-bench` argument. For example, the following will run only those benchmarks with 5000 nodes and 1000 existing pods. ```sh -make test-integration WHAT=./test/integration/scheduler_perf KUBE_TEST_VMODULE="''" KUBE_TEST_ARGS="-run=xxx -bench=BenchmarkScheduling/5000Nodes/1000Pods" +make test-integration WHAT=./test/integration/scheduler_perf KUBE_TEST_VMODULE="''" KUBE_TEST_ARGS="-run=^$$ -bench=BenchmarkScheduling/5000Nodes/1000Pods" ``` ## Profiling the scheduler @@ -60,7 +62,7 @@ You can get CPU profiling information from the benchmarks by adding a `-cpuprofi to the command above. Example: ```sh -make test-integration WHAT=./test/integration/scheduler_perf KUBE_TEST_VMODULE="''" KUBE_TEST_ARGS="-run=xxx -bench=BenchmarkScheduling -cpuprofile cpu.out" +make test-integration WHAT=./test/integration/scheduler_perf KUBE_TEST_VMODULE="''" KUBE_TEST_ARGS="-run=^$$ -bench=BenchmarkScheduling -cpuprofile cpu.out" ``` After obtaining the CPU profile, you can use `pprof` to view the results. For diff --git a/contributors/devel/sig-testing/bazel.md b/contributors/devel/sig-testing/bazel.md index 6916c0be..4047a54f 100644 --- a/contributors/devel/sig-testing/bazel.md +++ b/contributors/devel/sig-testing/bazel.md @@ -2,22 +2,20 @@ Building and testing Kubernetes with Bazel is supported but not yet default. -Bazel is used to run all Kubernetes PRs on [Prow](https://prow.k8s.io), +Bazel is used to run all Kubernetes PRs on [Prow], as remote caching enables significantly reduced build and test times. Some repositories (such as kubernetes/test-infra) have switched to using Bazel exclusively for all build, test, and release workflows. -Go rules are managed by the [`gazelle`](https://github.com/bazelbuild/rules_go/tree/master/go/tools/gazelle) -tool, with some additional rules managed by the [`kazel`](https://git.k8s.io/repo-infra/kazel) tool. +Go rules are managed by the [`gazelle`][gazelle] +tool, with some additional rules managed by the [`kazel`][kazel] tool. These tools are called via the `hack/update-bazel.sh` script. -Instructions for installing Bazel -can be found [here](https://www.bazel.io/versions/master/docs/install.html). -Please note that until [this Bazel -issue](https://github.com/bazelbuild/rules_docker/issues/454) is fixed, -`/usr/bin/env python` must be python2 in order for all the Bazel commands listed -below to succeed. +Instructions for installing Bazel can be found [here][bazel-install]. +Note that older Bazel versions did not work with Python 3, so we recommend +using version 0.27.0 or newer. If you still have Python-related problems, +please take a look at [this FAQ][bazel-python-faq]. Several convenience `make` rules have been created for common operations: @@ -37,6 +35,12 @@ tests, run $ bazel test //pkg/kubectl/... ``` +[Prow]: https://prow.k8s.io +[bazel-install]: https://www.bazel.io/versions/master/docs/install.html +[kazel]: https://git.k8s.io/repo-infra/kazel +[gazelle]: https://github.com/bazelbuild/rules_go/tree/master/go/tools/gazelle +[bazel-python-faq]: https://github.com/bazelbuild/bazel/issues/7899 + ## Planter If you don't want to install Bazel, you can instead try using the unofficial [Planter](https://git.k8s.io/test-infra/planter) tool, diff --git a/contributors/devel/sig-testing/e2e-tests.md b/contributors/devel/sig-testing/e2e-tests.md index 848662fc..45a2f11b 100644 --- a/contributors/devel/sig-testing/e2e-tests.md +++ b/contributors/devel/sig-testing/e2e-tests.md @@ -545,8 +545,9 @@ stragglers to finish. takes too many resources or restarts nodes), it is labeled `[Serial]`, and should be run in serial as part of a separate suite. - - `[Disruptive]`: If a test restarts components that might cause other tests -to fail or break the cluster completely, it is labeled `[Disruptive]`. Any + - `[Disruptive]`: If a test may impact workloads that it didn't create, + it should be marked as `[Disruptive]`. Examples of disruptive behavior +include, but are not limited to, restarting components or tainting nodes. Any `[Disruptive]` test is also assumed to qualify for the `[Serial]` label, but need not be labeled as both. These tests are not run against soak clusters to avoid restarting components. diff --git a/contributors/devel/sig-testing/testing.md b/contributors/devel/sig-testing/testing.md index ffe066c4..20562495 100644 --- a/contributors/devel/sig-testing/testing.md +++ b/contributors/devel/sig-testing/testing.md @@ -63,7 +63,7 @@ desire. If any unit test fails with a timeout panic (see [#1594](https://github.com/kubernetes/community/issues/1594)) on the testing package, you can increase the `KUBE_TIMEOUT` value as shown below. ```sh -make test KUBE_TIMEOUT="-timeout 300s" +make test KUBE_TIMEOUT="-timeout=300s" ``` ### Set go flags during unit tests diff --git a/contributors/devel/staging.md b/contributors/devel/staging.md deleted file mode 100644 index 81bf52d8..00000000 --- a/contributors/devel/staging.md +++ /dev/null @@ -1,3 +0,0 @@ -This file has moved to https://git.k8s.io/community/contributors/devel/sig-architecture/staging.md. - -This file is a placeholder to preserve links. Please remove after 2019-07-01 or the release of kubernetes 1.15, whichever comes first. diff --git a/contributors/devel/strategic-merge-patch.md b/contributors/devel/strategic-merge-patch.md deleted file mode 100644 index a0240159..00000000 --- a/contributors/devel/strategic-merge-patch.md +++ /dev/null @@ -1,3 +0,0 @@ -This file has moved to https://git.k8s.io/community/contributors/devel/sig-api-machinery/strategic-merge-patch.md. - -This file is a placeholder to preserve links. Please remove after 2019-07-01 or the release of kubernetes 1.15, whichever comes first. diff --git a/contributors/devel/testing.md b/contributors/devel/testing.md deleted file mode 100644 index d904278d..00000000 --- a/contributors/devel/testing.md +++ /dev/null @@ -1,3 +0,0 @@ -This file has moved to https://git.k8s.io/community/contributors/devel/sig-testing/testing.md. - -This file is a placeholder to preserve links. Please remove after 2019-07-01 or the release of kubernetes 1.15, whichever comes first. diff --git a/contributors/devel/writing-good-e2e-tests.md b/contributors/devel/writing-good-e2e-tests.md deleted file mode 100644 index b39208eb..00000000 --- a/contributors/devel/writing-good-e2e-tests.md +++ /dev/null @@ -1,3 +0,0 @@ -This file has moved to https://git.k8s.io/community/contributors/devel/sig-testing/writing-good-e2e-tests.md. - -This file is a placeholder to preserve links. Please remove by April 30, 2019 or the release of kubernetes 1.13, whichever comes first.
\ No newline at end of file diff --git a/contributors/guide/README.md b/contributors/guide/README.md index 9c2fcb80..d6040224 100644 --- a/contributors/guide/README.md +++ b/contributors/guide/README.md @@ -66,7 +66,7 @@ If you haven’t set up your environment, check the [developer resources](/contr Kubernetes is a community project. Consequently, it is wholly dependent on its community to provide a productive, friendly and collaborative environment. -- Read and review the [Community Expectations](community-expectations.md) for an understanding of code and review expectations. +- Read and review the [Community Expectations](expectations.md) for an understanding of code and review expectations. - See [Community Membership](/community-membership.md) for a list the various responsibilities of contributor roles. You are encouraged to move up this contributor ladder as you gain experience. # Your First Contribution @@ -103,8 +103,8 @@ Another good strategy is to find a documentation improvement, such as a missing/ #### Issue Assignment in Github -Often, new contributors ask to be assigned an issue they are willing to take on. Unfortunately, due to GitHub limitations we can only assign issues to [org members](#community) or repo collaborators. -Instead, please state in a comment that you intend to work on this issue and it will be assumed to be yours. +When you are willing to take on an issue, you can assign it to yourself. Just reply with `/assign` or `/assign @yourself` on an issue, +then the robot will assign the issue to you and your name will present at `Assignees` list. ### Learn about SIGs @@ -213,7 +213,7 @@ Common new contributor PR issues are: ## Code Review -For a brief description of the importance of code review, please read [On Code Review](/contributors/guide/community-expectations.md#code-review). +For a brief description of the importance of code review, please read [On Code Review](/contributors/guide/expectations.md#code-review). There are two aspects of code review: giving and receiving. To make it easier for your PR to receive reviews, consider the reviewers will need you to: @@ -223,7 +223,7 @@ To make it easier for your PR to receive reviews, consider the reviewers will ne * break large changes into a logical series of smaller patches which individually make easily understandable changes, and in aggregate solve a broader issue * label PRs with appropriate SIGs and reviewers: to do this read the messages the bot sends you to guide you through the PR process -Reviewers, the people giving the review, are highly encouraged to revisit the [Code of Conduct](/code-of-conduct.md) and must go above and beyond to promote a collaborative, respectful community. +Reviewers, the people giving the review, are highly encouraged to revisit the [Code of Conduct](/code-of-conduct.md) as well as [community expectations](./expectations.md#expectations-of-reviewers-review-latency) and must go above and beyond to promote a collaborative, respectful community. When reviewing PRs from others [The Gentle Art of Patch Review](http://sage.thesharps.us/2014/09/01/the-gentle-art-of-patch-review/) suggests an iterative series of focuses which is designed to lead new contributors to positive collaboration without inundating them initially with nuances: * Is the idea behind the contribution sound? diff --git a/contributors/guide/contributor-cheatsheet.md b/contributors/guide/contributor-cheatsheet.md deleted file mode 100644 index 1a1feb68..00000000 --- a/contributors/guide/contributor-cheatsheet.md +++ /dev/null @@ -1,3 +0,0 @@ -This file has moved to https://git.k8s.io/community/contributors/guide/contributor-cheatsheet/README.md. - -This file is a placeholder to preserve links. Please remove after 2019-08-01 or the release of kubernetes 1.15, whichever comes first.
\ No newline at end of file diff --git a/contributors/guide/contributor-cheatsheet/README-de.md b/contributors/guide/contributor-cheatsheet/README-de.md new file mode 100644 index 00000000..ae742810 --- /dev/null +++ b/contributors/guide/contributor-cheatsheet/README-de.md @@ -0,0 +1,392 @@ +# Cheat-Sheet für Kubernetes-Beitragende + + +Eine Liste von oft-genutzten Ressourcen zum Beitragen zu Kubernetes; Tipps, Tricks +und allgemeine Best-Practices innerhalb des Kubernetes-Projekts. +Es ist als "TL;DR" (too long, didn't read - zu lang, nicht gelesen) oder Schnellreferenz +nützlicher Informationen gedacht, um deine Beitragserfahrung auf GitHub besser zu machen. + +**Inhaltsverzeichnis** +- [Hilfreiche Ressourcen](#Hilfreiche-Ressourcen) + - [Wie man anfängt](#Wie-man-anfängt) + - [SIGs und andere Gruppen](#SIGS-und-andere-Gruppen) + - [Community](#Community) + - [Important Email Aliases](#Important-Email-Aliases) + - [Ablauf](#Ablauf) + - [Tests](#Tests) + - [Wichtige Email-Adressen](#Wichtige-Email-Adressen) + - [Andere nützliche Links](#Andere-Nützliche-Links) +- [Effektive Kommunikation auf GitHub](#Effektive-Kommunikation-auf-GitHub) + - [Seid exzellent zueinander](#Seid-exzellent-zueinander) + - [Beispiele für gute/schlechte Kommunikation](#Beispiele-für-guteschlechte-Kommunikation) +- [Einen Beitrag einreichen](#Einen-Beitrag-einreichen) + - [Das CLA unterzeichnen](#Das-CLA-unterzeichnen) + - [Erstellen von und Antworten auf Issues](#Erstellen-von-und-Antworten-auf-Issues) + - [Erstellen eines Issues](#Erstellen-eines-Issues) + - [Antworten auf Issues](#Antworten-auf-Issues) + - [Öffnen eines Pull-Requests](#Öffnen-eines-Pull-Requests) + - [Erstellen eines Pull-Requests](#Erstellen-eines-Pull-Requests) + - [Beispiel PR-Beschreibung](#Beispiel-PR-Beschreibung) + - [Troubleshooting eines Pull-Requests](#Troubleshooting-eines-Pull-Requests) + - [Labels](#Labels) +- [Lokal arbeiten](#Lokal-arbeiten) + - [Branch-Strategie](#Branch-Strategie) + - [Upstream-hinzufügen](#Upstream-hinzufügen) + - [Synchron halten von Forks](#Synchron-halten-von-Forks) + - [Commits squashen](#Commits-squashen) + +--- + +## Hilfreiche Ressourcen + +### Wie man anfängt + +- [Contributor Guide] - Anleitung zum Beginn des Beitragens zum Kubernetes-Projekt. +- [Developer Guide] - Anleitung zum Beitragen von Code direkt zum Kubernetes-Projekt. +- [Security and Disclosure Information] - Anleitung zum Melden von Schwachstellen und + zur Sicherheit des Release-Prozesses. + +### SIGs und andere Gruppen + +- [Gruppenliste][SIGs] + +### Community + +- [Kalender] - Alle Kubernetes-Community-Events (SIG/WG Treffen, Events, usw.). +- [kubernetes-dev] - Kubernetesentwicklung-Mailingliste. +- [Kubernetes Forum] - Offizielles Kubernetes-Forum. +- [Slack Channels] - Offizieller Kubernetes-Slackchannel. +- [Stack-Overflow] - Zum Stellen von Kubernetes-Nutzerfragen. +- [YouTube Channel] - Offizieller Kubernetes-Youtubechannel. + + +### Ablauf + +- [Gubernator Dashboard] - Eingehende und Ausgehende Pull-Requests, die Aufmerksamkeit erfordern. +- [Prow] - Kubernetes CI/CD-System. +- [Tide] - Prow-Plugin das Merges und Tests verwaltet. [Tide Dashboard] +- [Bot-Befehle] - Befehle zur Interaktion mit Kubernetes-Bots (zum Beispiel: `/cc`, `/lgtm`, und `/retest`) +- [GitHub Labels] - Liste an Labels des ganzen Kubernets-Projekts. +- [Kubernetes Code Search], von [@dims] maintained. + + +### Tests + +- [Prow] - Kubernetes CI/CD-System. +- [Test Grid] - Ansicht historischer Tests und den zugehörigen Informationen. +- [Triage Dashboard] - Aggregiert ähnliche Fehler zur besseren Fehlerbehandlung. +- [Velodrome] - Dashboard zur Überwachung der Job- und Testgesundheit. + + +### Wichtige Email-Adressen + +- community@kubernetes.io - Maile jemandem im Community-Team (SIG Contributor + Experience) über ein Problem in der Community. +- conduct@kubernetes.io - Kontaktiere das Code-of-Conduct-Board, private Mailingliste. +- github@kubernetes.io - Maile dem [GitHub Administration Team] privat, + für heikle Themen. +- steering@kubernetes.io - Maile der Leitungsgruppe. Öffentliche Adresse mit + öffentlichem Archiv. +- steering-private@kubernetes.io - Maile der Leitungsgruppe private, für heikle Themen. +- social@cncf.io - Kontaktiere das CNCF Socal Media Team; Blog, Twitteraccount, und + andere soziale Bereiche. + + +### Andere nützliche Links + +- [Developer Statistiken] - Entwicklerstatistiken für alle von CNCF gemanagten Projekte. + +--- + +## Effektive Kommunikation auf GitHub + + +### Seid exzellent zueinander + +Als ersten Schritt sollte man sich mit dem [Code of Conduct] bekannt machen. + + +#### Beispiele für gute/schlechte Kommunikation + +Wenn man ein Problem anspricht, oder Hilfe sucht, sollte man die Anfrage höflich +formulieren: + + 🙂 “X kompiliert nicht, wenn ich Y mache, habt ihr Vorschläge dazu? + + 😞 “X geht nicht, fixt das!" + +Beim Schließen eines PRs ist es sinnvoll eine freundliche und erklärende Nachricht +hinzuzufügen weshalb dieser nicht die Mergeanforderungen erfüllt. + +🙂 “Ich schließe diesen PR, da dieses Feature nicht den Use-Case X unterstützt. In + der forgeschlagenen Form wäre es besser dies mit Y umzusetzen. Danke für deine + Mitarbeit daran." + +😞 “Warum folgt das nicht den API-Konventionen? Das sollte woanders gemacht werden!" + +--- + +## Einen Beitrag einreichen + +### Das CLA unterzeichnen + +Bevor man einen Beitrag einreichen kann, muss das [Contributor License Agreement (CLA) unterzeichnet][cla] +werden. Das Kubernetes-Projekt kann _nur_ einen Beitrag annehmen, wenn du oder deine Firma +das CLA unterzeichnet haben. + +Solltest du Probleme beim Unterzeichnen des CLAs haben, folge den [CLA Troubleshooting Guidelines][CLA +troubleshooting guidelines]. + + +### Erstellen von und Antworten auf Issues + +GitHub Issues sind der meistgenutzte Weg um Dinge wie Bugreports und Enhancementrequests +zu verfolgen, oder andere Probleme wie fehlschlagende Tests zu melden. +Sie sind **nicht** als [Anfragen für Usersupport][user support requests] gedacht. Für diese +gibt es den [Troubleshooting Guide][troubleshooting guide], [Stack-Overflow] oder das +[Kubernetes-Forum][Kubernetes Forum]. + +**Referenzen:** +- [Labels] +- [Prow Commands][commands] + + +#### Erstellen eines Issues + +- Nutze ein Issue-Template, wenn eines zur Verfügung steht. Das korrekte Template + hilft anderen Beitragenden auf deinen Issue zu antworten. + - Folge allen Anweisungen im Template selbst. +- Beschreibe den Issue detailliert. +- Füge sinnvolle [Labels][Labels] hinzu. Wenn du dir nicht sicher bist, hilft + der [K8s-ci-robot][Prow] Bot ([Kubernetes CI bot][Prow]) mit Antworten auf Issues, + damit diese effektive verwaltet werden. +- Sei selektiv beim Zuweisen von Issues zu Nutzern mit [`/assign @<username>`][assign] + oder [`/cc @<username>`][cc]. Der Issue wird effektiver verwaltet, wenn sinnvolle + Labels zugewiesen werden und weniger Menschen. + + +#### Antworten auf Issues + +- Wenn du an einem Issue arbeitest, hinterlasse einen Kommentar damit andere + wissen, dass du daran arbeitest und doppelte Arbeit vermieden wird. +- Falls du selbst eine Lösung findest, kommentiere den Issue mit einer Erklärung + bevor du ihn schließt. +- Referenzen auf andere PRs und Issues (oder andere Materialen) mit zum Beispiel: + _"ref: #1234"_ sind sinnvoll. Diese helfen Bezüge darauf zu finden, die an + anderer Stelle bearbeitet wurden. + + +### Öffnen eines Pull-Requests + +Pull-Requests (PR) sind die meistgenutzte Variante um Code, Dokumentation oder andere Arten +von Arbeit beizutragen, die in einem Git-Repository gespeichert werden können. + +**Referenzen:** +- [Labels] +- [Prow Commands][commands] +- [Pull-Request Prozess] +- [GitHub Workflow] + + +#### Erstellen eines Pull-Requests + +- Folge den Anweisungen des Pull-Request-Templates, falls eines zur Verfügung steht. + Es wird denen helfen, die auf den PR antworten. +- Für [triviale Fixes][trivial fix] wie kaputte Links, Schreib- oder Grammatikfehler + durchsuche das gesamte Dokument für andere potentielle Fehler. Mehrere PRs für kleine + Fixes im gleichen Dokument sind unnötig. +- Füge Referenzen auf verwandte Issues oder Issues die der PR lösen könnte hinzu. +- Vermeide unnötig große Änderungen in einem einzelnen Commit. Zerteile stattdessen + den PR in mehrere kleine, logische Commits. Das erleichter Reviews. +- Kommentiere deinen eigenen PR wenn du meinst weitere Erklärungen sind nötig. +- Sei selektiv beim Erstellen des PRs mit [`/assign @<username>`][assign]. + Zu viele Reviewer garantieren keinen schnelleren PR-Review. +- Wenn der PR als _"Work in progress"_ angesehen wird, füge ein `[WIP]` am Anfang des + Titels hinzu oder nutze den [`/hold`][hold] Befehl. Das stellt sicher, dass der PR + nicht gemerged wird bis das `[WIP]` oder hold aufgehoben worden sind. +- Falls dein PR noch nicht reviewed wurde, bitte schließe ihn nicht und öffne einen Neuen + mit den gleichen Änderungen. Pinge deine Reviewer stattdessen in einem Kommentar mit + `@<github username>` an. + + +#### Beispiel PR-Beschreibung + +``` +Ref. #3064 #3097 +Alle Dateien im Besitz von SIG testing wurden von `/devel` zum neuen Ordner `/devel/sig-testing` +verschoben. + +/sig contributor-experience +/cc @stakeholder1 @stakeholder2 +/kind cleanup +/area developer-guide +/assign @approver1 @approver2 @approver3 +``` + +Was steht in diesem PR: +- **Zeile 1** - Referenzen auf andere Issues oder PRs (#3064 #3097). +- **Zeile 2** - Eine kurze Beschreibung was in diesem PR getan wird. +- **Zeile 4** - [SIG][SIGs] Zuweisung mit dem [Befehl][commands] + `/sig contributor-experience`.. +- **Zeile 5** - Reviewer die Interesse an diesem spezifischen Issue oder PR + haben könnten, werden mit [`/cc`][cc] markiert. +- **Zeile 6** - Der [`/kind cleanup`][kind] Befehl fügt ein [Label][Labels] hinzu, das + Issues oder PRs als Aufräumen von Code, Prozessen oder technologischer Schuld kategorisiert. +- **Zeile 7** - Der [`/area developer-guide`][kind] Befehl kategorisiert Issues oder PRs im Bezug + zum Developerguide. +- **Zeile 9** - Der Befehl [`/assign`][assign] fügt einen Approver zum PR hinzu. Ein Approver + wird vom [k8s-ci-robot][Prow] vorgeschlagen und wird von der Liste der Eingentümer in der + [OWNERS] Datei ausgewählt. file. Der Approver fügt das [`/approve`][approve] Label zum PR + hinzu nachdem dieser reviewed wurde. + + +#### Troubleshooting eines Pull-Requests + +Nachdem ein PR vorgeschlagen wurde, wird eine Reihe an Test von der Kubernetes +CL-Plattform [Prow] ausgeführt. Fall einer der Tests fehlschlägt, antwortet +der [K8s-ci-robot][Prow] auf den PR mit Links zu den fehlgeschlagenen Tests und +verfügbaren Logs. + +Neue Commits zu diesem PR sorgen dafür dass diese Tests erneut ausgeführt werden. + +Gelegentlich gibt es Probleme mit der Kubernetes CI-Plattform. Diese können aus +verschiedenen Gründen auftreten, selbst wenn der Beitrag alle lokalen Tests besteht. +Man kann einen neuen Testdurchlauf mit dem `/retest` Befehl auslösen. + +Für mehr Informationen zum Troubleshooting von spezifischen Test, siehe den [Testing Guide]. + + +### Labels + +Kubernetes nutzt [Labels][Labels] zum sichten und kategorisieren von Issues und Pull Requests. +Die richtigen Labels helfen dabei den Issue oder PR sinnvoller einzusortieren. + +**Referenzen:** +- [Labels] +- [Prow Commands][commands] + +Oft genutzte Labels: +- [`/sig <sig name>`][kind] Fügt eine [SIG][SIGs] als Eigentümer des Issues oder PRs hinzu. +- [`/area <area name>`][kind] Verknüpft den Issue oder PR mit einem bestimmten [Bereich][labels]. +- [`/kind <category>`][kind] [Kategorisiert][labels] den Issue oder PR. + +--- + +## Lokal arbeiten + +Bevor man einen Pull-Request vorschlagen kann, muss man lokal etwas Arbeit leisten. +Für Neueinsteiger zu git ist das [Atlassian Git-Tutorial][Atlassian git tutorial] +ein guter Einstiegspunkt. Alternativ ist das [Git Magic Tutorical][Git magic] der +Standford Uni eine gute multi-linguale Option. + +**Referenzen:** +- [Atlassion Git-Tutorial][Atlassian git tutorial] +- [Git magic] +- [GitHub Workflow] +- [Lokakes Testen][Testing locally] +- [Developer guide] + + +### Branch-Strategie + +Das Kubernetes-Projekt nutzt den Standardworkflow von GitHub, der sich _"Fork and Pull"_ +(auf Deutsch "abzweigen und ziehen") nennt. +In Begriffen aus der Git-Welt wird dein persönlicher Fork als _"`origin`"_ +(auf Deutsch "Ursprung") und das eigentliche Projekt-Gitrepository als _"`upstream`"_ +(wörtlich "flussaufwärts") bezeichnet. +Um deinen persönlichen Branch (`origin`) mit dem Projekt (`upstream`) aktuell zu halten, +muss das innerhalb der lokalen Kopie konfiguriert werden. + + +#### Upstream hinzufügen + +Füge `upstream` als sogenanntes remote hinzu und konfiguriere es so, dass man nicht dorthin +pushen kann. + +``` +# Ersetze <upstream git repo> mit der Upstreamrepo-URL +# Beispiel: +# https://github.com/kubernetes/kubernetes.git +# git@github.com/kubernetes/kubernetes.git + +git remote add upstream <upstream git repo> +git remote set-url --push upstream no_push +``` + +Das kann via `git remote -v` verifiziert werden, indem alle konfigurierten Remote-Repos +aufgelistet werden. + + +#### Synchron halten von Forks + +Hole alle Änderungen von `upstream` ab und _"rebase"_ diese auf deinem lokalen +`Master` Branch. Das wird dein lokales Repo mit dem `upstream` Projekt synchronisieren. + +``` +git fetch upstream +git checkout master +git rebase upstream/master +``` + +Das sollte minimal bevor der Erstellung eines neuen Branches für ein Feature oder +einen Fix passieren. + +``` +git checkout -b myfeature +``` + +#### Commits squashen + +Der Hauptzweck von [Commits squashen]("Commits zerquetschen") ist die Erstellung +einer sauberen, lesbaren Githistorie oder eines Logs der Änderungen die gemacht wurden. +Normal wird das in der letzten Phase einer PR Revision getan. Wenn du dir unsicher bist, +ob du deine Commits squashen solltest, ist es besser mehrere zu lassen und es dem Urteil +anderer Beitragenden zu überlassen, die als Reviewer und Approver für den PR zugeteilt wurden. + + +[Contributor Guide]: /contributors/guide/README.md +[Developer Guide]: /contributors/devel/README.md +[Gubernator Dashboard]: https://gubernator.k8s.io/pr +[Prow]: https://prow.k8s.io +[Tide]: http://git.k8s.io/test-infra/prow/cmd/tide/pr-authors.md +[Tide Dashboard]: https://prow.k8s.io/tide +[Bot-Befehle]: https://go.k8s.io/bot-commands +[GitHub Labels]: https://go.k8s.io/github-labels +[Kubernetes Code Search]: https://cs.k8s.io/ +[@dims]: https://github.com/dims +[Kalender]: https://calendar.google.com/calendar/embed?src=cgnt364vd8s86hr2phapfjc6uk%40group.calendar.google.com +[kubernetes-dev]: https://groups.google.com/forum/#!forum/kubernetes-dev +[Slack Channels]: http://slack.k8s.io/ +[Stack-Overflow]: https://stackoverflow.com/questions/tagged/kubernetes +[Youtube Channel]: https://www.youtube.com/c/KubernetesCommunity/ +[Triage Dashboard]: https://go.k8s.io/triage +[Test Grid]: https://testgrid.k8s.io +[Velodrome]: https://go.k8s.io/test-health +[Developer Statistiken]: https://k8s.devstats.cncf.io +[Code of Conduct]: /code-of-conduct.md +[user support requests]: /contributors/guide/issue-triage.md#determine-if-its-a-support-request +[troubleshooting guide]: https://kubernetes.io/docs/tasks/debug-application-cluster/troubleshooting/ +[Kubernetes Forum]: https://discuss.kubernetes.io/ +[Pull-Request Prozess]: /contributors/guide/pull-requests.md +[GitHub Workflow]: /contributors/guide/github-workflow.md +[Prow]: https://git.k8s.io/test-infra/prow#prow +[cla]: /CLA.md#how-do-i-sign +[CLA troubleshooting guidelines]: /CLA.md#troubleshooting +[commands]: https://prow.k8s.io/command-help +[kind]: https://prow.k8s.io/command-help#kind +[cc]: https://prow.k8s.io/command-help#cc +[hold]: https://prow.k8s.io/command-help#hold +[assign]: https://prow.k8s.io/command-help#assign +[SIGs]: /sig-list.md +[Testing Guide]: /contributors/devel/sig-testing/testing.md +[Labels]: https://git.k8s.io/test-infra/label_sync/labels.md +[trivial fix]: /contributors/guide/pull-requests.md#10-trivial-edits +[GitHub Workflow]: /contributors/guide/github-workflow.md#3-branch +[Commits squashen]: /contributors/guide/pull-requests.md#6-squashing-and-commit-titles +[OWNERS]: /contributors/guide/owners.md +[Testing locally]: /contributors/guide/README.md#testing +[Atlassian git tutorial]: https://www.atlassian.com/git/tutorials +[Git magic]: http://www-cs-students.stanford.edu/~blynn/gitmagic/ +[Security and Disclosure Information]: https://kubernetes.io/docs/reference/issues-security/security/ +[approve]: https://prow.k8s.io/command-help#approve +[GitHub Administration Team]: /github-management#github-administration-team diff --git a/contributors/guide/contributor-cheatsheet/README-fr.md b/contributors/guide/contributor-cheatsheet/README-fr.md new file mode 100644 index 00000000..73175a91 --- /dev/null +++ b/contributors/guide/contributor-cheatsheet/README-fr.md @@ -0,0 +1,330 @@ +# Cheat Sheet pour contributeur Kubernetes + +Une liste des ressources communes pour contribuer à Kubernetes, des trucs, des astuces et des bonnes pratiques communes utilisées dans le projet Kubernetes. +C'est un "TL;DR" ou une référence rapide d'informations utiles pour améliorer votre expérience de contribution sur GitHub. + +**Table des matières** + +- [Ressources utiles](#Ressources-utiles) + - [Commencer](#Commencer) + - [SIGs et autres groupes](#SIGs-et-autres-groupes) + - [Communauté](#Communauté) + - [Alias de messagerie importants](#Alias-de-messagerie-importants) + - [Workflow](#Workflow) + - [Tests](#Tests) + - [Autres liens utiles](#Autres-liens-utiles) +- [Communiquer efficacement sur GitHub](#Communiquer-efficacement-sur-GitHub) + - [Comment être excellent les uns envers les autres](#Comment-être-excellent-les-uns-envers-les-autres) + - [Exemples de bonne mauvaise communication](#Exemples-de-bonne-mauvaise-communication) +- [Soumettre une contribution](#Soumettre-une-contribution) + - [Signature de la CLA](#Signature-de-la-CLA) + - [Ouverture et réponse aux Issues](#Ouverture-et-réponse-aux-Issues) + - [Créer une Issue](#Créer-une-Issue) + - [Répondre à une Issue](#Répondre-à-une-Issue) + - [Ouverture d'une Pull Request](#Ouverture-d-une-Pull-Request) + - [Créer une Pull Request](#Créer-une-Pull-Request) + - [Exemple d'une description de Pull Request](#Exemple-d'une-description-de-Pull-Request) + - [Dépannage d'une Pull Request](#Dépannage-d'une-Pull-Request) + - [Labels](#Labels) +- [Travailler localement](#Travailler-localement) + - [Stratégie de branche](#Stratégie-de-branche) + - [Ajouter Upstream](#Ajouter-Upstream) + - [Garder votre Fork synchronisé](#Garder-votre-Fork-synchronisé) + - [Squashing Commits](#Squashing-Commits) + +--- + +## Ressources utiles + +### Commencer + +- [Contributor Guide] - Guide sur la façon de commencer à contribuer au projet Kubernetes. +- [Developer Guide] - Guide pour contribuer du code directement au projet Kubernetes. + +### SIGs et autres groupes + +- [Liste principale des groupes][sigs] + +### Communauté + +- [Calendar] - Voir tous les événements de la communauté Kubernetes (réunions SIG / WG, événements, etc.) +- [kubernetes-dev] - La liste de diffusion sur le développement de Kubernetes +- [Kubernetes Forum] - Forum officiel de Kubernetes. +- [Slack channels] - Slack officiel de Kubernetes. +- [StackOverflow] - Un endroit pour poser vos questions d'utilisateur final de Kubernetes. +- [YouTube Channel] - Chaine officielle de la communauté Kubernetes. + +### Workflow + +- [Gubernator Dashboard] - Voir les Pull Requests entrantes et sortantes qui nécessitent votre attention. +- [Prow] - Kubernetes CI/CD System. +- [Tide] - Prow plugin that manages merges and tests. [Tide Dashboard] +- [Bot commands] - Commands used to interact with Kubernetes Bots (examples: + `/cc`, `/lgtm`, and `/retest`) +- [GitHub labels] - Liste des labels utilisées dans le projet Kubernetes +- [Kubernetes Code Search], maintenu par [@dims] + +### Tests + +- [Prow] - Kubernetes CI/CD System. +- [Test Grid] - Afficher les tests historiques et leurs informations associées. +- [Triage Dashboard] - Regroupe les défaillances similaires pour un meilleur dépannage. +- [Velodrome] - Tableau de bord pour suivre le travail et tester la santé. + +### Alias de messagerie importants + +| Alias | Description | | +|--------------------------------|---------------------------------------------------------------------------------------------------------------------------------|---| +| community@kubernetes.io | Envoyez un courrier électronique à l’équipe de la communauté (SIG Contributor Experience) au sujet d’un problème de communauté. | | +| conduct@kubernetes.io | Contactez le comité du code de conduite, liste de diffusion privée. | | +| steering@kubernetes.io | Postez le comité de pilotage. Adresse publique avec archive publique. | | +| steering-private@kubernetes.io | Contacter le steering comité en privé, pour les sujets sensibles. | | +| social@cncf.io | Contacter l'équipe sociale de la CNCF; blog, compte twitter et autres réseaux sociaux. | | + +### Autres liens utiles + +- [Statistiques de développeur] - Consultez les statistiques des développeurs pour tous les projets gérés par le CNCF. + +--- + +## Communiquer efficacement sur GitHub + +### Comment être excellent les uns envers les autres + +Dans un premier temps, familiarisez-vous avec le [code de conduite]. + +#### Exemples de bonne / mauvaise communication + +Quand on ouvre une issue, ou si vous avez besoin d’aide, soyez poli avec votre demande: + + 🙂 "X ne compile pas quand je fais le Y, avez-vous des suggestions?" + + 😞 «X ne marche pas! Réparez-ça, s'il vous plait!" + +Lors de la fermeture d'une PR, transmettez un message explicatif et cordial expliquant pourquoi elle ne remplit pas les conditions requises pour être mergé. + +🙂 «Je ferme ce PR car cette fonctionnalité ne peut pas prendre en charge le cas d’utilisation X. Dans le contexte proposé, il serait préférable de l’implémenter avec l’outil Y. Merci d'avoir travaillé sur cela. " + +😞 «Pourquoi cela ne suit-il pas les conventions de l’API? Cela devrait être fait ailleurs! + +--- + +## Soumettre une contribution + +### Signature de la CLA + +Avant de pouvoir soumettre une contribution, vous devez [signer le Contributor License Agreement(CLA)][cla]. +Le projet Kubernetes ne peut accepter une contribution que si vous ou votre entreprise avez signé le CLA. + +Si vous rencontrez des problèmes pour signer le CLA, suivez les [consignes de dépannage du CLA]. + +### Ouverture et réponse aux Issues + +Les GitHub Issues sont le principal moyen de suivre des éléments tels que les rapports de bogues, les demandes d'amélioration ou de signaler d'autres problèmes tels que l'échec des tests. +Les issues ne sont **pas** destinées à être des [demandes de support utilisateur]. +Pour ceux-ci, veuillez consulter le [guide de dépannage], signaler le problème à [stackOverflow] ou faire un suivi sur le [forum Kubernetes]. + +**References:** + +- [Labels] +- [Prow commands][commands] + +#### Créer un Issue + +- Utilisez un Issuee template s'il en existe un. Utiliser le bon aidera d'autres contributeurs à répondre à votre problème. + - Suivez les instructions décrites dans le template d'issue lui-même. +- Soyez descriptif avec la question que vous soulevez. +- Attribuer les [labels] appropriés. Si vous n'êtes pas sûr, le [k8s-ci-robot][prow] bot ([Kubernetes CI bot][prow]) répondra à votre problème avec les étiquettes nécessaires à son tri efficace. +- Soyez sélectif lorsque vous attribuez des Issues à l'aide de [`/assign @<username>`][assign] ou + [`/cc @<username>`][cc]. Votre Issue sera triée plus efficacement en appliquant les labels corrects sur l'affectation de plus de personnes à la question. + +#### Responding to an Issue + +- Lorsque vous abordez un problème, laissez-le savoir aux autres sur lesquels vous travaillez cela pour éviter le travail en double. +- Lorsque vous avez résolu quelque chose par vous-même à un moment ultérieur, commentez la question de faire savoir aux gens avant de la fermer. +- Inclure des références à d’autres demandes PullRequests ou Issues (ou à tout matériel accessible), + Exemple: _"ref: #1234"_. Il est utile d’identifier que des travaux connexes ont été résolu quelque part ailleurs. + +### Ouverture d'une Pull Request + +Les Pull requests (PR) sont les principaux moyens de contribuer au code, à la documentation ou à d’autres formes de travail qui seraient stockés dans un dépôt git. + +**References:** + +- [Labels] +- [Prow commands][commands] +- [Pull request process] +- [Github workflow] + +#### Création d'une Pull Request + +- Follow the directions of the pull request template if one is available. Cela aidera ceux qui répondent à votre PullRequest. +- Si un [correctif trivial] tel qu'un lien brisé, une faute de frappe ou une faute de grammaire, examinez l'ensemble du document pour rechercher d'autres erreurs potentielles. Ne pas ouvrir plusieurs PullRequests pour les petites corrections dans le même document. +- Référencez tous les problèmes liés à votre PullRequest ou les problèmes que PullRequest peut résoudre. +- Évitez de créer des modifications trop volumineuses dans un seul commit. Au lieu de cela, divisez votre PullRequest en plusieurs petits commits logiques. Cela facilite la révision de votre PullRequest. +- Commentez votre propre PullRequest lorsque vous pensez que quelque chose peut nécessiter une explication. +- Soyez sélectif lorsque vous affectez votre PullRequest avec [`/assign @<username>`][assign]. + L'affectation d'un nombre excessif de réviseurs ne donnera pas une révision plus rapide de PullRequest. +- Si votre PR est considéré comme un _"Work in progress"_ ajoutez un prefixe dans son nom avec `[WIP]` ou utilisez la commande [`/hold`][hold]. Ceci empêchera le merge de la PR jusqu'à la levée du `[WIP]` ou le retrait du hold. +- Si votre demande PullRequest n'a pas été relue, ne la fermez pas et n'ouvrez pas une nouvelle demande PullRequest avec les mêmes modifications. Notifiez les relecteurs dans un commentaire avec `@<github username>`. + +#### Example PR Description + +```text +Ref. #3064 #3097 +All files owned by SIG testing were moved from `/devel` to the new folder `/devel/sig-testing`. + +/sig contributor-experience +/cc @stakeholder1 @stakeholder2 +/kind cleanup +/area developer-guide +/assign @approver1 @approver2 @approver3 +``` + +Quel est le contenu de cette PR: + +- **Line 1** - Référence à d'autres issues ou PRs (#3064 #3097). +- **Line 2** - Une brève description de ce qui se fait dans la PR. +- **Line 4** - Assignement au [SIG][sigs] avec la [commande][commands] + `/sig contributor-experience`.. +- **Line 5** - Les examinateurs qui peuvent avoir un intérêt sur cette issue ou PR sont spécifiés avec la commande [`/cc`][cc]. +- **Line 6** - La commande [`/kind cleanup`][kind] ajoute un [label][labels] qui catégorise l'issue ou la PR en rapport avec le nettoyage du code, du processus ou de la dette technique. +- **Line 7** - La commande [`/area developer-guide`][kind] catégorise une issue ou PR en relation avec le guide du développeur. +- **Line 8** - La commande [`/assign`][assign] assigne un approbateur à la PR. + Un approbateur sera suggéré par le [k8s-ci-robot][prow] est sélectionné dans la liste des propriétaires définis dans le fichier [OWNERS]. Ils vont ajouter le label [`/approve`][approve] à la PR après l'avoir passé en revue. + +#### Troubleshooting a Pull Request + +Après la proposition de votre PR, une série de tests est exécutée par la plateforme Kubernetes CI, [Prow]. +Si l’un des tests échoue, le [k8s-ci-robot][prow] répondra à la PR avec des liens vers les tests ayant échoué et les journaux disponibles. + +Pousser de nouveaux commits vers votre PR va automatiquement déclencher la ré-exécution des tests. + +Il peut parfois y avoir des problèmes avec la plate-forme Kubernetes CI. +Celles-ci peuvent survenir pour diverses raisons même si votre contribution réussit tous les tests locaux. +Vous pouvez déclencher une nouvelle exécution des tests avec la commande `/retest`. + +Pour plus d'informations sur le dépannage de tests spécifiques, voir le [Guide de test]. + +### Labels + +Kubernetes utilise [étiquettes] pour catégoriser et trier les Issues et PullRequests. +L'application de labels appropriées aidera votre Issue ou PullRequest à être triée plus efficacement. + +**References:** + +- [Labels] +- [Prow commands][commands] + +Labels fréquemment utilisés: + +- [`/sig <sig name>`][kind] Attribuer un [SIG][SIGs] à la propriété de l'issue ou de la PR. +- [`/area <area name>`][kind] Associate the issue or PRs to a specific [area][labels]. +- [`/kind <category>`][kind] [Categorizes][labels] the issue or PR. + +--- + +## Travailler localement + +Avant d'ouvrir une Pull Request, vous devrez effectuer préparer votre travail localement. +Si vous êtes nouveau sur git, le [tutoriel Atlassian git] est un bon point de départ. +En guise d'alternative, le didacticiel [Git magic] de Stanford est une bonne option multilingue. + +**References:** + +- [Atlassian git tutorial] +- [Git magic] +- [Github workflow] +- [Testing locally] +- [Developer guide] + +### Stratégie de branche + +Le projet Kubernetes utilise un workflow _"Fork and Pull"_ standard pour GitHub. +Dans le vocabulaire de git, votre fork personnel est appellée _"`origin`"_ et le dépôt git de référence du projet est appellé _"`upstream`"_. +Garder votre branche personnelle (`origin`) à jour avec le projet (`upstream`), il doit être configuré dans votre dépôt local. + +#### Ajouter Upstream + +Ajoutez `upstream` en tant que remote et configurez-le afin que vous ne puissiez pas y accéder. + +```shell +# replace <upstream git repo> with the upstream repo url +# example: +# https://github.com/kubernetes/kubernetes.git +# git@github.com/kubernetes/kubernetes.git + +git remote add upstream <upstream git repo> +git remote set-url --push upstream no_push +``` + +Cela peut être vérifié en exécutant `git remote -v` qui listera vos remotes configurées. + +#### Garder votre dépôt synchronisé + +Récupérez toutes les modifications de `upstream` et _"rebase"_ sur votre branche `master` locale. +Cela synchronisera votre dépôt local avec le projet `upstream`. + +```text +git fetch upstream +git checkout master +git rebase upstream/master +``` + +Effectuez cette opération au minimum avant de créer une nouvelle branche pour travailler sur votre fonctionnalité ou votre correctif. + +```text +git checkout -b myfeature +``` + +#### Squashing Commits + +Le but principal de [squashing commits] est de créer un historique git lisible. +Cela se fait généralement dans la dernière phase d'une PullRequest. +Si vous ne savez pas si vous devez faire un squash de vos commits, il est préférable de préférer avoir plus de commits et de laisser le soin aux autres contributeurs de réviser et d’approuver vos PullRequests. + +[guide du contributeur]: /contributors/guide/README.md +[guide du développeur]: /contributors/devel/README.md +[gubernator dashboard]: https://gubernator.k8s.io/pr +[prow]: https://prow.k8s.io +[tide]: http://git.k8s.io/test-infra/prow/cmd/tide/pr-authors.md +[tide dashboard]: https://prow.k8s.io/tide +[bot commands]: https://go.k8s.io/bot-commands +[gitHub labels]: https://go.k8s.io/github-labels +[Kubernetes Code Search]: https://cs.k8s.io/ +[@dims]: https://github.com/dims +[calendar]: https://calendar.google.com/calendar/embed?src=cgnt364vd8s86hr2phapfjc6uk%40group.calendar.google.com +[kubernetes-dev]: https://groups.google.com/forum/#!forum/kubernetes-dev +[slack channels]: http://slack.k8s.io/ +[stackOverflow]: https://stackoverflow.com/questions/tagged/kubernetes +[youtube channel]: https://www.youtube.com/c/KubernetesCommunity/ +[triage dashboard]: https://go.k8s.io/triage +[test grid]: https://testgrid.k8s.io +[velodrome]: https://go.k8s.io/test-health +[statistiques de développeur]: https://k8s.devstats.cncf.io +[code of conduct]: /code-of-conduct.md +[user support request]: /contributors/guide/issue-triage.md#determine-if-its-a-support-request +[troubleshooting guide]: https://kubernetes.io/docs/tasks/debug-application-cluster/troubleshooting/ +[stack overflow]: https://stackoverflow.com/questions/tagged/kubernetes +[kubernetes forum]: https://discuss.kubernetes.io/ +[pull request process]: /contributors/guide/pull-requests.md +[github workflow]: /contributors/guide/github-workflow.md +[prow]: https://git.k8s.io/test-infra/prow#prow +[cla]: /CLA.md#how-do-i-sign +[cla troubleshooting guidelines]: /CLA.md#troubleshooting +[commands]: https://prow.k8s.io/command-help +[kind]: https://prow.k8s.io/command-help#kind +[cc]: https://prow.k8s.io/command-help#hold +[hold]: https://prow.k8s.io/command-help#hold +[assign]: https://prow.k8s.io/command-help#assign +[SIGs]: /sig-list.md +[Guide de test]: /contributors/devel/sig-testing/testing.md +[labels]: https://git.k8s.io/test-infra/label_sync/labels.md +[solution triviale]: /contributors/guide/pull-requests.md#10-trivial-edits +[Github workflow]: /contributors/guide/github-workflow.md#3-branch +[squashing commits]: /contributors/guide/pull-requests.md#6-squashing-and-commit-titles +[owners]: /contributors/guide/owners.md +[tester localement]: /contributors/guide/README.md#testing +[developer guide]: /contributors/devel/README.md +[Atlassian git tutorial]: https://www.atlassian.com/git/tutorials +[git magic]: http://www-cs-students.stanford.edu/~blynn/gitmagic/ diff --git a/contributors/guide/contributor-cheatsheet/README-id.md b/contributors/guide/contributor-cheatsheet/README-id.md index 94e0247b..04628dcd 100644 --- a/contributors/guide/contributor-cheatsheet/README-id.md +++ b/contributors/guide/contributor-cheatsheet/README-id.md @@ -7,32 +7,33 @@ yang bermanfaat untuk meningkatkan pengalaman kamu ketika berkontribusi di GitHub menjadi lebih baik. **Daftar Isi** -- [_Resources_](#Resources) - - [Mulai Berkontribusi](#Mulai-Berkontribusi) - - [_SIG_ dan Grup Lainnya](#SIG-dan-Grup-lainnya) - - [Komunitas](#Komunitas) - - [Alamat Email Penting](#Alamat-Email-Penting) - - [_Workflow_](#Workflow) - - [Tes](#Testing) - - [Tautan Lain](#Tautan-Lain) -- [Berkomunikasi Secara Efektif di GitHub](#Berkomunikasi-Secara-Efektif-di-GitHub) - - [Bagaimana Cara Bekerja Sama dengan Baik](#Bagaimana-Cara-Bekerja-Sama-dengan-Baik) - - [Contoh Komunikasi Yang Baik/Buruk](#Contoh-Komunikasi-yang-BaikBuruk) -- [Langkah Berkontribusi](#Langkah-Berkontribusi) - - [Menyetujui CLA](#Menyetujui-CLA) - - [Membuka dan Menanggapi Isu](#Membuka-dan-Menanggapi-Isu) - - [Membuat sebuah Isu](#Membuat-sebuah-Isu) - - [Menanggapi sebuah Isu](#Menaggapi-sebuah-Isu) - - [Membuka _Pull Request_](#Membuka-Pull-Request) - - [Membuat a _Pull Request_](#Membuat-Pull-Request) - - [Contoh Deskripsi _Pull Request_](#Contoh-Deskripsi-Pull-Request) - - [_Troubleshoot_ sebuah _Pull Request_](#Troubleshooting-sebuah-Pull-Request) - - [Label](#Label) -- [Mekanisme Pengerjaan Lokal](#Mekanisme-Pengerjaan-Lokal) - - [Mekanisme Penggunaan _Branch_](#Mekanisme-Penggunaan-Branch) - - [Menambahkan _Upstream_](#Menambahkan-Upstream) - - [Memastikan _Fork_ Kamu tetap Sinkron](#Memastikan-Fork-Kamu-Tetap-Sinkron) - - [Melakukan _Commit_ _Squashing_](#Squashing-Commits) +- [_Cheat Sheet_ Kontributor Kubernetes](#cheat-sheet-kontributor-kubernetes) + - [_Resources_](#resources) + - [Mulai Berkontribusi](#mulai-berkontribusi) + - [_SIG_ dan Grup Lainnya](#sig-dan-grup-lainnya) + - [Komunitas](#komunitas) + - [_Workflow_](#workflow) + - [_Testing_](#testing) + - [Alamat Email Penting](#alamat-email-penting) + - [Tautan Lain](#tautan-lain) + - [Berkomunikasi Secara Efektif di GitHub](#berkomunikasi-secara-efektif-di-github) + - [Bagaimana Cara Bekerja Sama dengan Baik](#bagaimana-cara-bekerja-sama-dengan-baik) + - [Contoh Komunikasi Yang Baik/Buruk](#contoh-komunikasi-yang-baikburuk) + - [Mengumpulkan Kontribusi](#mengumpulkan-kontribusi) + - [Signing the CLA](#signing-the-cla) + - [Membuka dan Menanggapi Isu](#membuka-dan-menanggapi-isu) + - [Membuat Sebuah Isu](#membuat-sebuah-isu) + - [Menanggapi sebuah Isu](#menanggapi-sebuah-isu) + - [Membuka sebuah Pull Request (PR)](#membuka-sebuah-pull-request-pr) + - [Membuat sebuah Pull Request (PR)](#membuat-sebuah-pull-request-pr) + - [Contoh Deskripsi PR](#contoh-deskripsi-pr) + - [_Troubleshooting_ sebuah PR](#troubleshooting-sebuah-pr) + - [Label](#label) + - [Bekerja pada Mesin Lokal](#bekerja-pada-mesin-lokal) + - [Mekanisme _Branch_](#mekanisme-branch) + - [Menambahkan _Upstream_](#menambahkan-upstream) + - [Menjaga agar _Fork_ Kamu tetap Sinkron](#menjaga-agar-fork-kamu-tetap-sinkron) + - [Melakukan _Commit_ _Squashing_](#melakukan-commit-squashing) --- @@ -68,10 +69,9 @@ di GitHub menjadi lebih baik. - [Tide] - _Plugin_ Prow yang melakukan manajemen _merge_ dan _test_. [Dashbor Tide] - [Perintah Bot] - Perintah yang dapat kamu gunakan untuk berinteraksi dengan Bot Kubernetes (contoh: `/cc`, `/lgtm`, dan `/retest`) -- [_Label_ GitHub] - _List_ _label_ yang digunakan pada proyek Kubernetes +- [Label GitHub] - _List_ _label_ yang digunakan pada proyek Kubernetes - [Pencarian Kode Kubernetes], di-_maintain_ oleh [@dims] - ### _Testing_ - [Prow] - Mekanisme CI/CD Kubernetes. @@ -95,6 +95,7 @@ di GitHub menjadi lebih baik. ### Tautan Lain - [Statistik Pengembang] - Melihat statistik pengembang untuk semua proyek yang dikelola oleh CNCF. +- [Rilis Patch Kubernetes] Jadwal dan informasi kontak tim untuk rilis _patch_ Kubernetes --- @@ -150,7 +151,7 @@ atau ikuti [forum Kubernetes]. - [Perintah Prow][perintah bot] -#### Mmebuat Sebuah Isu +#### Membuat Sebuah Isu - Gunakan templat isu (jika tersedia). Menggunakan templat yang tersedia akan memudahkan kontributor lain ketika menanggapi isu yang kamu buat. @@ -288,7 +289,7 @@ pembelajaran yang baik. Sebagai alternatif lain, juga terdapat tutorial [_Stanfo - [Git magic] - [GitHub workflow] - [Testing locally] -- [Developer guide] +- [Panduan Pengembang] ### Mekanisme _Branch_ @@ -353,8 +354,8 @@ _squashing_ perlu dilakukan atau tidak. [tide]: http://git.k8s.io/test-infra/prow/cmd/tide/pr-authors.md [asbor tide]: https://prow.k8s.io/tide [perintah bot]: https://go.k8s.io/bot-commands -[gitHub labels]: https://go.k8s.io/github-labels -[Kubernetes Code Search]: https://cs.k8s.io/ +[Label GitHub]: https://go.k8s.io/github-labels +[Pencarian Kode Kubernetes]: https://cs.k8s.io/ [@dims]: https://github.com/dims [kalender]: https://calendar.google.com/calendar/embed?src=cgnt364vd8s86hr2phapfjc6uk%40group.calendar.google.com [kubernetes-dev]: https://groups.google.com/forum/#!forum/kubernetes-dev @@ -364,7 +365,7 @@ _squashing_ perlu dilakukan atau tidak. [dasbor triase]: https://go.k8s.io/triage [test grid]: https://testgrid.k8s.io [velodrome]: https://go.k8s.io/test-health -[developer statistics]: https://k8s.devstats.cncf.io +[Statistik Pengembang]: https://k8s.devstats.cncf.io [code of conduct]: /code-of-conduct.md [_user support request_]: /contributors/guide/issue-triage.md#determine-if-its-a-support-request [petunjuk _troubleshooting_]: https://kubernetes.io/docs/tasks/debug-application-cluster/troubleshooting/ @@ -390,3 +391,5 @@ _squashing_ perlu dilakukan atau tidak. [Tutorial git Atlassian]: https://www.atlassian.com/git/tutorials [git magic]: http://www-cs-students.stanford.edu/~blynn/gitmagic/ [_Security_ dan _Disclosure_ Informasi]: https://kubernetes.io/docs/reference/issues-security/security/ +[approve]: https://prow.k8s.io/command-help#approve +[Rilis Patch Kubernetes]: https://github.com/kubernetes/sig-release/blob/master/releases/patch-releases.md
\ No newline at end of file diff --git a/contributors/guide/contributor-cheatsheet/README-ja.md b/contributors/guide/contributor-cheatsheet/README-ja.md new file mode 100644 index 00000000..ab39c1c1 --- /dev/null +++ b/contributors/guide/contributor-cheatsheet/README-ja.md @@ -0,0 +1,339 @@ +# Kubernetesコントリビューターチートシート + +Kubernetesにコントリビュートする際のtipsや、Kubernetesプロジェクト内で使用されているベストプラクティスなどの共通リソースのリストです。 +これらのまとめや便利な情報へのクイックリファレンスはGitHubでのコントリビューションの体験をよりよいものにすることでしょう。 + +**目次** +- [便利なリソース](#便利なリソース) + - [はじめに](#はじめに) + - [SIGとその他のグループ](#SIGとその他のグループ) + - [コミュニティ](#コミュニティ) + - [重要なEメールエイリアス](#重要なEメールエイリアス) + - [ワークフロー](#ワークフロー) + - [テスト](#テスト) + - [その他の便利なリンク](#その他の便利なリンク) +- [GitHub上での効率的なコミュニケーション](#GitHub上での効率的なコミュニケーション) + - [お互いに良くあるためにはどうしたらよいか](#お互いに良くあるためにはどうしたらよいか) + - [良いまたは悪いコミュニケーションの例](#良いまたは悪いコミュニケーションの例) +- [貢献する](#貢献する) + - [CLAにサインする](#CLAにサインする) + - [Issueを開いたり返事をしたりする](#Issueを開いたり返事をしたりする) + - [Issueを作る](#Issueを作る) + - [Issueに返事をする](#Issueに返事をする) + - [Pull Requestを開く](#Pull-Requestを開く) + - [Pull Requestを作成する](#Pull-Requestを作成する) + - [PRの説明文の例](#PRの説明文の例) + - [Pull Requestのトラブルシューティング](#Pull-Requestのトラブルシューティング) + - [ラベル](#ラベル) +- [ローカルでの作業](#ローカルでの作業) + - [ブランチ戦略](#ブランチ戦略) + - [Upstreamを追加する](#Upstreamを追加する) + - [フォークを最新に保つ](#フォークを最新に保つ) + - [コミットをまとめる](#コミットをまとめる) + +--- + +## 便利なリソース + +### はじめに + +- [コントリビューターガイド] - Kubernetesプロジェクトへコントリビュートする方法のガイド +- [開発者ガイド] - Kubernetesプロジェクトへコードを直接コントリビュートする方法のガイド +- [セキュリティと情報開示] - 脆弱性の報告とセキュリティリリースプロセスのガイド + +### SIGとその他のグループ + +- [グループのリスト][sigs] + +### コミュニティ + +- [カレンダー] - Kubernetesコミュニティでのイベントの一覧(SIG/WGのミーティングやイベントなど) +- [kubernetes-dev] - Kubernetes開発メーリングリスト +- [Kubernetesフォーラム] - Kubernetesの公式フォーラム +- [Slackチャンネル] - Kubernetesの公式Slack +- [Stack Overflow] - Kubernetesのエンドユーザーとしての質問を聞く場所 +- [YouTubeチャンネル] - Kubernetesコミュニティの公式チャンネル + + +### ワークフロー + +- [Gubernatorダッシュボード] - 注意して見ておくべきPull Requests +- [Prow] - KubernetesのCI/CDシステム +- [Tide] - mergeやtestを管理するためのProw用プラグイン [Tideダッシュボード] +- [Botコマンド] - KubernetesのBotとコミュニケーションをとるためのコマンド (例: `/cc`、`/lgtm`や`/retest`) +- [GitHubラベル] - Kubernetesプロジェクトで使用されるラベルのリスト +- [@dims]によって保守されている[Kubernetes Code Search] + + +### テスト + +- [Prow] - KubernetesのCI/CDシステム +- [Test Grid] - 歴史的なテストや関連した情報を見る +- [Triageダッシュボード] - よりよくトラブルシューティングをするために、似たような失敗をまとめる +- [Velodrome] - ジョブやテスト結果を追跡するためのダッシュボード + + +### 重要なEメールエイリアス + +- community@kubernetes.io - コミュニティの問題について、コミュニティチーム(SIG Contributor Experience)の誰かにメールするアドレス +- conduct@kubernetes.io - 行動規範委員会へ連絡を取るためのプライベートメーリングリスト +- steering@kubernetes.io - 運営委員会へメールするアドレスで、公開アーカイブのある公開アドレス +- steering-private@kubernetes.io - 運営委員会へセンシティブなことを伝えるためのプライベートアドレス +- social@cncf.io - CNCFソーシャルチームへの連絡先(blogやtwitterアカウントなど) + + +### その他の便利なリンク + +- [開発者統計] - CNCFが管理するプロジェクトの開発者統計情報 + +--- + +## GitHub上での効率的なコミュニケーション + + +### お互いに良くあるためにはどうしたらよいか + +まず最初に[Code of Conduct]をよく読んでください。 + + +#### 良いまたは悪いコミュニケーションの例 + +issueをあげる時や助けを求める時、礼儀正しくしてください: + + 🙂 「Yをやった時にXがコンパイルできませんでした。なにかいい方法はありませんか?」 + + 😞 「Xが動かない!直して!」 + +PRを閉じるとき、どうしてmergeできないのか、誠心誠意説明し、伝えてください。 + +🙂 「この機能はXというユースケースをサポートしていないのでこのPRを閉じます。提案された形であれば、Yツールで実装される方がよりよいと思います。」 + +😞 「どうしてAPI規約に従っていないんですか?これは他でやるべきです!」 + +--- + +## 貢献する + +### CLAにサインする + +コントリビューションを提出する前に、[Contributor License Agreement(CLA)にサインする](cla)必要があります。Kubernetesプロジェクトは、あなたもしくはあなたの会社がCLAにサイン済みの場合にのみコントリビューションの受け入れを行います。 + +CLAのサインで何か問題があった場合、[CLAトラブルシューティングガイドライン]を参照してください。 + + +### Issueを開いたり返事をしたりする + +GitHub Issueはバグレポートや改善要求、あるいはテスト失敗のようなその他の問題を追跡するための最初の手段です。[ユーザーによるサポート要求]の方法としては使用**されていません**。そのような場合は[トラブルシューティングガイド]をみて、[Stack Overflow]や[Kubernetesフォーラム]に問題を報告してください。 + +**参考:** +- [ラベル] +- [Prowコマンド][コマンド] + + +#### Issueを作る + +- もし用意されているなら、Issue templateを使用してください。適切なテンプレートを使用することで、他のコントリビューターが返信しやすくなります。 + - Issue template自体に書かれている手順に従ってください。 +- 詳細な説明をIssueに記述してください。 +- 適切な[ラベル]を設定してください。よくわからなければ、[k8s-ci-robot][prow]([Kubernetes CI bot][prow])というボットが、重要度を適切に判断するために必要なラベルを提案します。 +- [`/assign @<username>`][assign]か[`/cc @<username>`][cc]を使用して担当者をアサインする場合は選択的に行ってください。より多くの人にアサインをするより、適切なラベルを付ける方が効果的です。 + + +#### Issueに返事をする + +- Issueに取り組む時は、他の人とバッティングしないように、コメントを残してください。 +- 自己解決した場合には、Issueを閉じる前に他の人にわかるようコメントしてください。 +- 他のPRやIssue(あるいはその他アクセス可能なもの)への参照を含めてください(例えば、 _"ref: #1234"_ のように)。他の場所にある関連した作業を特定するのに便利です。 + + +### Pull Requestを開く + +Pull request(PR)はコード、ドキュメント、あるいはgitリポジトリに格納されているその他のものに対してコントリビュートする際の主な手段です。 + +**参考:** +- [ラベル] +- [Prowコマンド][コマンド] +- [Pull request process] +- [GitHub workflow] + + +#### Pull Requestを作成する + +- 利用可能な場合、Pull Requestテンプレートの指示に従います。 それはあなたのPRに対応する人々の助けになります。 +- リンク切れやタイプミス、文法の間違いなどの[簡単な修正]の場合、他の可能性のある間違いについてドキュメント全体を見直してください。 + 同じドキュメントの小さな修正で複数のPRを作成しないでください。 +- PRに関連するIssueやPRで解決する可能性があるIssueを参照してください。 +- 一度のコミットで過大な変更を加えないでください。代わりに、PRを複数の小さなコミットに分割してください。 + これによりPRのレビューが容易になります。 +- 何か説明を加える必要があると思われる場合は、PRにコメントしてください。 +- [`/assign @<username>`][assign]でPRに割り当てるときは選択的にしてください。 + 過剰なレビュー担当者を割り当てたからといって、 迅速なレビューが得られるわけではありません。 +- あなたのPRが _"進行中"_ とされる場合、名前の前に `[WIP]` を付けるか、[`/hold`][hold]コマンドを使用してください。これは `[WIP]` またはHoldが解除されるまでPRがマージされるのを防ぎます。 +- あなたのPRがレビューされてない場合に、閉じて同じ変更のPRを新しく作成しないでください。`@<github username>` とコメントでレビュアーにPingしてください。 + + + +#### PRの説明文の例 + +``` +Ref. #3064 #3097 +All files owned by SIG testing were moved from `/devel` to the new folder `/devel/sig-testing`. + +/sig contributor-experience +/cc @stakeholder1 @stakeholder2 +/kind cleanup +/area developer-guide +/assign @approver1 @approver2 @approver3 +``` + +PRの内容: +- **1行目** - 他のIssueやPRへの参照(#3064 #3097) +- **2行目** - PRで行われていることの簡単な説明 +- **4行目** - `/sig contributor-experience` [コマンド]での[SIG][sigs]の割り当て +- **5行目** - この特定のIssueやPRに関心があるレビュアーを[`/cc`][cc]コマンドで指定 +- **6行目** - [`/kind cleanup`][kind]コマンドでコードやプロセス、技術的負債の整理に関してIssueやPRを分類する[ラベル][ラベル]を追加 +- **7行目** - [`/area developer-guide`][kind]コマンドで開発者ガイドに関してIssueやPRを分類 +- **8行目** - [`/assign`][assign]コマンドでPRにApproverを割り当て。 + Approverは[k8s-ci-robot][prow]によって提案され、[OWNERS]ファイルのオーナーのリストから選択されます。 + Approverはレビューされた後のPRに[`/approve`][approve]ラベルを追加します + +#### Pull Requestのトラブルシューティング + +PRが作成された後、KubernetesのCIプラットフォームの[Prow]によって一連のテスト +が実行されます。テストのいずれかが失敗した場合、[k8s-ci-robot][prow]は +失敗したテストへのリンクと有効なログをPRに返信します。 + +新しいコミットをPRにがプッシュすると、自動的にテストが再実行されます。 + +時折KubernetesのCIプラットフォームに問題がある場合があります。 +あなたの貢献が全てのローカルテストに合格したとしても、 +これらは様々な理由で発生する場合があります。`/retest` コマンドでテストを +再実行することができます。 + +特定のテストのトラブルシューティングの詳細については[テストガイド]を参照してください。 + +### ラベル + +KubernetesはIssueとPull Requestを分類し、優先順位を付けるために[ラベル]を使用します。 +正しいラベルを付けることであなたのIssueやPRをより効果的に処理することができます。 + + +**参考:** +- [ラベル] +- [Prowコマンド][コマンド] + +よく使われるラベル: +- [`/sig <sig name>`][kind]はIssueやPRのアサインを[SIG][SIGs]に割り当てます。 +- [`/area <area name>`][kind]はIssueやPRを特定の[分野][ラベル]に関連付けます。 +- [`/kind <category>`][kind]はIssueやPRを[分類][ラベル]します。 + +--- + +## ローカルでの作業 + +Pull Requestを作成する前に、ローカルである程度の作業を行う必要があります。 +もしあなたがgitに慣れていない場合、[Atlassian gitチュートリアル]は良い出発点です。 +他に、Stanfordの[Git magic]チュートリアルは多言語に対応しています。 + +**参考:** +- [Atlassian gitチュートリアル] +- [Git magic] +- [GitHub workflow] +- [ローカルでのテスト] +- [開発者ガイド] + + +### ブランチ戦略 + +KubernetesプロジェクトはGitHubの標準である _"Fork and Pull"_ ワークフローを使います。 +gitの用語で、あなたの個人的なフォークは _"`origin`"_ と呼ばれ、実際のプロジェクトの +gitリポジトリのことを _"`upstream`"_ と呼ばれます。 +あなたの個人的なブランチ(`origin`)をプロジェクト(`upstream`)の最新に保つために、 +ローカルの作業コピー内で設定されてなければなりません。 + + +#### Upstreamを追加する + +`upstream` をリモートとして追加し、プッシュできないように設定してください。 + +``` +# replace <upstream git repo> with the upstream repo url +# example: +# https://github.com/kubernetes/kubernetes.git +# git@github.com/kubernetes/kubernetes.git + +git remote add upstream <upstream git repo> +git remote set-url --push upstream no_push +``` + +これは設定したリモートを一覧表示する `git remote -v` を実行して確認することができます。 + + +#### フォークを最新に保つ + +`upstream` から全ての変更を取得し、ローカルの `master` ブランチに _"rebase"_ します。 +これはローカルのリポジトリを `upstream` プロジェクトと同期させます。 + +``` +git fetch upstream +git checkout master +git rebase upstream/master +``` + +あなたは機能への取り組みや修正をするためにブランチを作成する前に、最低限これをやるべきです。 + +``` +git checkout -b myfeature +``` + +#### コミットをまとめる + +[スカッシュコミット]の主な目的はきれいに読めるgitの履歴や加えられた変更のログを作成することです。通常これはPRの改定の最終段階に行われます。 +コミットをスカッシュするべきかわからない場合は、作業を止めてPRのレビューと承認を担当する他のコントリビューターの判断に任せることをおすすめします。 + + +[コントリビューターガイド]: /contributors/guide/README.md +[開発者ガイド]: /contributors/devel/README.md +[gubernatorダッシュボード]: https://gubernator.k8s.io/pr +[prow]: https://prow.k8s.io +[tide]: http://git.k8s.io/test-infra/prow/cmd/tide/pr-authors.md +[tideダッシュボード]: https://prow.k8s.io/tide +[botコマンド]: https://go.k8s.io/bot-commands +[GitHubラベル]: https://go.k8s.io/github-labels +[Kubernetes Code Search]: https://cs.k8s.io/ +[@dims]: https://github.com/dims +[カレンダー]: https://calendar.google.com/calendar/embed?src=cgnt364vd8s86hr2phapfjc6uk%40group.calendar.google.com +[kubernetes-dev]: https://groups.google.com/forum/#!forum/kubernetes-dev +[slackチャンネル]: http://slack.k8s.io/ +[Stack Overflow]: https://stackoverflow.com/questions/tagged/kubernetes +[youtubeチャンネル]: https://www.youtube.com/c/KubernetesCommunity/ +[triageダッシュボード]: https://go.k8s.io/triage +[test grid]: https://testgrid.k8s.io +[velodrome]: https://go.k8s.io/test-health +[開発者統計]: https://k8s.devstats.cncf.io +[code of conduct]: /code-of-conduct.md +[ユーザーによるサポート要求]: /contributors/guide/issue-triage.md#determine-if-its-a-support-request +[トラブルシューティングガイド]: https://kubernetes.io/docs/tasks/debug-application-cluster/troubleshooting/ +[kubernetesフォーラム]: https://discuss.kubernetes.io/ +[pull request process]: /contributors/guide/pull-requests.md +[github workflow]: /contributors/guide/github-workflow.md +[prow]: https://git.k8s.io/test-infra/prow#prow +[cla]: /CLA.md#how-do-i-sign +[claトラブルシューティングガイドライン]: /CLA.md#troubleshooting +[コマンド]: https://prow.k8s.io/command-help +[kind]: https://prow.k8s.io/command-help#kind +[cc]: https://prow.k8s.io/command-help#cc +[hold]: https://prow.k8s.io/command-help#hold +[assign]: https://prow.k8s.io/command-help#assign +[SIGs]: /sig-list.md +[テストガイド]: /contributors/devel/sig-testing/testing.md +[ラベル]: https://git.k8s.io/test-infra/label_sync/labels.md +[簡単な修正]: /contributors/guide/pull-requests.md#10-trivial-edits +[GitHub workflow]: /contributors/guide/github-workflow.md#3-branch +[スカッシュコミット]: /contributors/guide/pull-requests.md#6-squashing-and-commit-titles +[owners]: /contributors/guide/owners.md +[ローカルでのテスト]: /contributors/guide/README.md#testing +[Atlassian gitチュートリアル]: https://www.atlassian.com/git/tutorials +[git magic]: http://www-cs-students.stanford.edu/~blynn/gitmagic/ +[セキュリティと情報開示]: https://kubernetes.io/docs/reference/issues-security/security/ +[approve]: https://prow.k8s.io/command-help#approve diff --git a/contributors/guide/contributor-cheatsheet/README-ko.md b/contributors/guide/contributor-cheatsheet/README-ko.md index 2d33bda9..9a541dd5 100644 --- a/contributors/guide/contributor-cheatsheet/README-ko.md +++ b/contributors/guide/contributor-cheatsheet/README-ko.md @@ -394,3 +394,4 @@ PR을 검토하고 승인하도록 지정된 다른 참여자의 판단에 맡 [Atlassian git 튜토리얼]: https://www.atlassian.com/git/tutorials [git magic]: http://www-cs-students.stanford.edu/~blynn/gitmagic/ [보안과 정보 공개]: https://kubernetes.io/docs/reference/issues-security/security/ +[approve]: https://prow.k8s.io/command-help#approve diff --git a/contributors/guide/contributor-cheatsheet/README-pt.md b/contributors/guide/contributor-cheatsheet/README-pt.md index a66ffaa0..1388f404 100644 --- a/contributors/guide/contributor-cheatsheet/README-pt.md +++ b/contributors/guide/contributor-cheatsheet/README-pt.md @@ -375,3 +375,4 @@ fase de uma revisão do PR. Se você não tem certeza se deve efetuar o squashin [Tutorial git Atlassian]: https://www.atlassian.com/git/tutorials [Tutorial git magic]: http://www-cs-students.stanford.edu/~blynn/gitmagic/ [Informações de Segurança e Divulgações]: https://kubernetes.io/docs/reference/issues-security/security/ +[approve]: https://prow.k8s.io/command-help#approve diff --git a/contributors/guide/contributor-cheatsheet/README-zh.md b/contributors/guide/contributor-cheatsheet/README-zh.md index 8c86dfcb..65ef556e 100644 --- a/contributors/guide/contributor-cheatsheet/README-zh.md +++ b/contributors/guide/contributor-cheatsheet/README-zh.md @@ -326,3 +326,4 @@ git checkout -b myfeature [Atlassian git 教程]: https://www.atlassian.com/git/tutorials [git 魔法]: http://www-cs-students.stanford.edu/~blynn/gitmagic/ [安全和披露信息]: https://kubernetes.io/docs/reference/issues-security/security/ +[approve]: https://prow.k8s.io/command-help#approve diff --git a/contributors/guide/contributor-cheatsheet/README.md b/contributors/guide/contributor-cheatsheet/README.md index bef061d0..d5e2f460 100644 --- a/contributors/guide/contributor-cheatsheet/README.md +++ b/contributors/guide/contributor-cheatsheet/README.md @@ -1,6 +1,6 @@ # Kubernetes Contributor Cheat Sheet -[Bahasa Indonesia](README-id.md) | [한국어](README-ko.md) | [Português](README-pt.md) | [中文](README-zh.md) +[Deutsch](README-de.md) | [Français](README-fr.md) | [Bahasa Indonesia](README-id.md) | [日本語](README-ja.md) | [한국어](README-ko.md) | [Português](README-pt.md) | [中文](README-zh.md) A list of common resources when contributing to Kubernetes, tips, tricks, and common best practices used within the Kubernetes project. It is a "TL;DR" or @@ -8,32 +8,33 @@ quick reference of useful information to make your GitHub contribution experienc better. **Table of Contents** -- [Helpful Resources](#Helpful-Resources) - - [Getting Started](#Getting-Started) - - [SIGs and other Groups](#SIGS-and-Other-Groups) - - [Community](#Community) - - [Important Email Aliases](#Important-Email-Aliases) - - [Workflow](#Workflow) - - [Tests](#Tests) - - [Other Useful Links](#Other-Useful-Links) -- [Communicating effectively on GitHub](#Communicating-Effectively-on-GitHub) - - [How to be Excellent to Each Other](#How-to-be-Excellent-to-Each-Other) - - [Examples of Good/Bad Communication](#Examples-of-GoodBad-Communication) -- [Submitting a Contribution](#Submitting-a-Contribution) - - [Signing the CLA](#signing-the-CLA) - - [Opening and Responding to Issues](#Opening-and-Responding-to-Issues) - - [Creating an Issue](#Creating-an-Issue) - - [Responding to an Issue](#Responding-to-an-Issue) - - [Opening a Pull Request](#Opening-a-pull-Request) - - [Creating a Pull Request](#Creating-a-Pull-Request) - - [Example PR Description](#Example-PR-Description) - - [Troubleshooting a Pull Request](#Troubleshooting-a-Pull-Request) - - [Labels](#Labels) -- [Working Locally](#Working-Locally) - - [Branch Strategy](#Branch-Strategy) - - [Adding Upstream](#Adding-Upstream) - - [Keeping Your Fork in Sync](#Keeping-Your-Fork-in-Sync) - - [Squashing Commits](#Squashing-Commits) +- [Kubernetes Contributor Cheat Sheet](#kubernetes-contributor-cheat-sheet) + - [Helpful Resources](#helpful-resources) + - [Getting Started](#getting-started) + - [SIGs and Other Groups](#sigs-and-other-groups) + - [Community](#community) + - [Workflow](#workflow) + - [Tests](#tests) + - [Important Email Aliases](#important-email-aliases) + - [Other Useful Links](#other-useful-links) + - [Communicating Effectively on GitHub](#communicating-effectively-on-github) + - [How to be Excellent to Each Other](#how-to-be-excellent-to-each-other) + - [Examples of Good/Bad Communication](#examples-of-goodbad-communication) + - [Submitting a Contribution](#submitting-a-contribution) + - [Signing the CLA](#signing-the-cla) + - [Opening and Responding to Issues](#opening-and-responding-to-issues) + - [Creating an Issue](#creating-an-issue) + - [Responding to an Issue](#responding-to-an-issue) + - [Opening a Pull Request](#opening-a-pull-request) + - [Creating a Pull Request](#creating-a-pull-request) + - [Example PR Description](#example-pr-description) + - [Troubleshooting a Pull Request](#troubleshooting-a-pull-request) + - [Labels](#labels) + - [Working Locally](#working-locally) + - [Branch Strategy](#branch-strategy) + - [Adding Upstream](#adding-upstream) + - [Keeping Your Fork in Sync](#keeping-your-fork-in-sync) + - [Squashing Commits](#squashing-commits) --- @@ -90,6 +91,8 @@ better. Experience) about a community issue. - conduct@kubernetes.io - Contact the Code of Conduct committee, private mailing list. +- github@kubernetes.io - Mail the [GitHub Administration Team] privately, + for sensitive items. - steering@kubernetes.io - Mail the steering committee. Public address with public archive. - steering-private@kubernetes.io - Mail the steering committee privately, for @@ -102,6 +105,7 @@ better. - [Developer Statistics] - View developer statistics for all CNCF managed projects. +- [Kubernetes Patch Release] Schedule and team contact information for Kubernetes patch releases. --- @@ -395,3 +399,6 @@ the other contributors assigned to review and approve your PR. [Atlassian git tutorial]: https://www.atlassian.com/git/tutorials [git magic]: http://www-cs-students.stanford.edu/~blynn/gitmagic/ [Security and Disclosure Information]: https://kubernetes.io/docs/reference/issues-security/security/ +[approve]: https://prow.k8s.io/command-help#approve +[GitHub Administration Team]: /github-management#github-administration-team +[Kubernetes Patch Release]: https://github.com/kubernetes/sig-release/blob/master/releases/patch-releases.md
\ No newline at end of file diff --git a/contributors/guide/community-expectations.md b/contributors/guide/expectations.md index 6a7922fc..dabbb248 100644 --- a/contributors/guide/community-expectations.md +++ b/contributors/guide/expectations.md @@ -54,6 +54,8 @@ to them. Reviewers are expected to respond to an *active* PRs with reasonable latency, and if reviewers fail to respond, those PRs may be assigned to other reviewers. +If reviewers are unavailable to review for some time, they are expected to set their [user status](https://help.github.com/en/articles/personalizing-your-profile#setting-a-status) to "busy" so that the bot will not request reviews from them on new PRs automatically. If they are unavailable for a longer period of time, they are expected to remove themselves from the OWNERS file and potentially nominate someone else. + *Active* PRs are considered those which have a proper CLA (`cla:yes`) label and do not need rebase to be merged. PRs that do not have a proper CLA, or require a rebase are not considered active PRs. diff --git a/contributors/guide/github-workflow.md b/contributors/guide/github-workflow.md index 48a67fa3..8174aaf8 100644 --- a/contributors/guide/github-workflow.md +++ b/contributors/guide/github-workflow.md @@ -107,7 +107,7 @@ in a few cycles. ### 6 Push -When ready to review (or just to establish an offsite backup or your work), +When ready to review (or just to establish an offsite backup of your work), push your branch to your fork on `github.com`: ```sh diff --git a/contributors/guide/issue-triage.md b/contributors/guide/issue-triage.md index 04f30950..cbd18677 100644 --- a/contributors/guide/issue-triage.md +++ b/contributors/guide/issue-triage.md @@ -71,8 +71,8 @@ If you see support questions on kubernetes-dev@googlegroups.com or issues asking support try to redirect them to Stack Overflow. Example response: ```code -Please re-post your question to [Stack Overflow] -(http://stackoverflow.com/questions/tagged/kubernetes). +Please re-post your question to [Stack Overflow](http://stackoverflow.com/questions/tagged/kubernetes) +or our [Discussion Forums](https://discuss.kubernetes.io). We are trying to consolidate the channels to which questions for help/support are posted so that we can improve our efficiency in responding to your requests, @@ -84,8 +84,8 @@ thread only in one place or, worse, spread across multiple forums. Also, the large volume of support issues on GitHub is making it difficult for us to use issues to identify real bugs. -Members of the Kubernetes community use Stack Overflow to field support -requests. Before posting a new question, please search Stack Overflow for answers +Members of the Kubernetes community use Stack Overflow and Discussion Forums to field +support requests. Before posting a new question, please search these for answers to similar questions, and also familiarize yourself with: * [user documentation](https://kubernetes.io/docs/home/) diff --git a/contributors/guide/non-code-contributions.md b/contributors/guide/non-code-contributions.md index a110090a..43fd10e2 100644 --- a/contributors/guide/non-code-contributions.md +++ b/contributors/guide/non-code-contributions.md @@ -14,7 +14,7 @@ slug: "non-code" The list below is meant to help non-code contributors find areas of the Kubernetes project where their expertise can be best utilized. The goal of this is to both provide a starting guide for anyone looking to become a contributor not necessarily writing code, and also to fill any needs that the SIGs have that might not currently be filled by code-focused contributors. -This list is meant to be used by both new contributors looking for a good entrance into the project, and current contributors who would live to do something different. +This list is meant to be used by both new contributors looking for a good entrance into the project, and current contributors who would like to do something different. Are you interested in any of the roles below? Come chat with us [on Slack](https://kubernetes.slack.com/messages/sig-contribex)! diff --git a/contributors/guide/pull-requests.md b/contributors/guide/pull-requests.md index 1b5f6fc7..d2e252c8 100644 --- a/contributors/guide/pull-requests.md +++ b/contributors/guide/pull-requests.md @@ -1,10 +1,10 @@ --- title: "Pull Request Process" weight: 1 -slug: "pull-requests" +slug: "pull-requests" --- -This doc explains the process and best practices for submitting a pull request to the [Kubernetes project](https://github.com/kubernetes/kubernetes) and its associated subrepositories. It should serve as a reference for all contributors, and be useful especially to new and infrequent submitters. +This doc explains the process and best practices for submitting a pull request to the [Kubernetes project](https://github.com/kubernetes/kubernetes) and its associated sub-repositories. It should serve as a reference for all contributors, and be useful especially to new and infrequent submitters. - [Before You Submit a Pull Request](#before-you-submit-a-pull-request) * [Run Local Verifications](#run-local-verifications) @@ -33,7 +33,7 @@ This doc explains the process and best practices for submitting a pull request t This guide is for contributors who already have a pull request to submit. If you're looking for information on setting up your developer environment and creating code to contribute to Kubernetes, see the [development guide](/contributors/devel/development.md). -First time contributors should head to the [Contributor Guide](/contributors/guide/README.md) to get started. +First-time contributors should head to the [Contributor Guide](/contributors/guide/README.md) to get started. **Make sure your pull request adheres to our best practices. These include following project conventions, making small pull requests, and commenting thoroughly. Please read the more detailed section on [Best Practices for Faster Reviews](#best-practices-for-faster-reviews) at the end of this doc.** @@ -54,7 +54,7 @@ Merging a pull request requires the following steps to be completed before the p - [Open a pull request](https://help.github.com/articles/about-pull-requests/) - *For kubernetes/kubernetes repository only:* Add [release notes](/contributors/guide/release-notes.md) if needed. - Pass all e2e tests -- Get all necessary approvals from reviewers and code owners +- Get all necessary approvals from reviewers and code owners ## The Testing and Merge Workflow @@ -82,7 +82,7 @@ Here's the process the pull request goes through on its way from submission to m 1. Reviewer suggests edits 1. Push edits to your pull request branch -1. Repeat the prior two steps as needed until reviewer(s) add `/lgtm` label. The `/lgtm` label, when applied by someone listed as an `reviewer` in the corresponding project `OWNERS` file, is a signal that the code has passed review from one or more trusted reviewers for that project +1. Repeat the prior two steps as needed until the reviewer(s) add `/lgtm` label. The `/lgtm` label, when applied by someone listed as a `reviewer` in the corresponding project `OWNERS` file, is a signal that the code has passed review from one or more trusted reviewers for that project 1. (Optional) Some reviewers prefer that you squash commits at this step 1. Follow the bot suggestions to assign an OWNER who will add the `/approve` label to the pull request. The `/approve` label, when applied by someone listed as an `approver` in the corresponding project `OWNERS`, is a signal that the code has passed final review and is ready to be automatically merged @@ -119,7 +119,7 @@ The GitHub robots will add and remove the `do-not-merge/hold` label as you use t ## Pull Requests and the Release Cycle -If a pull request has been reviewed, but held or not approved, it might be due to the current phase in the [Release Cycle](/contributors/devel/sig-release/release.md). Occasionally, a SIG may freeze their own code base when working towards a specific feature or goal that could impact other development. During this time, your pull request could remain unmerged while their release work is completed. +If a pull request has been reviewed but held or not approved, it might be due to the current phase in the [Release Cycle](/contributors/devel/sig-release/release.md). Occasionally, a SIG may freeze their own code base when working towards a specific feature or goal that could impact other development. During this time, your pull request could remain unmerged while their release work is completed. If you feel your pull request is in this state, contact the appropriate [SIG](https://git.k8s.io/community/sig-list.md) or [SIG-Release](https://git.k8s.io/sig-release) for clarification. @@ -167,7 +167,7 @@ things you can do to move the process along: * Ping the assignee by email (many of us have publicly available email addresses). - * If you're a member of the organization ping the [team](https://github.com/orgs/kubernetes/teams) (via @team-name) that works in the area you're submitting code. + * If you're a member of the organization ping the [team](https://github.com/orgs/kubernetes/teams) (via @team-name) that works in the area you're submitting code to. * If you have fixed all the issues from a review, and you haven't heard back, you should ping the assignee on the comment stream with a "please take another look" (`PTAL`) or similar comment indicating that you are ready for another review. @@ -193,7 +193,7 @@ Are you sure Feature-X is something the Kubernetes team wants or will accept? Is It's better to get confirmation beforehand. -When you want to make a large or otherwise significant change, you should follow the [Kubernetes Enhancement Proposal process](/keps/0001-kubernetes-enhancement-proposal-process.md). +When you want to make a large or otherwise significant change, you should follow the [Kubernetes Enhancement Proposal process](https://git.k8s.io/enhancements/keps/0001-kubernetes-enhancement-proposal-process.md). Even for small changes, it is often a good idea to gather feedback on an issue you filed, or even simply ask in the appropriate SIG's Slack channel to invite discussion and feedback from code owners. Here's a [list of SIGs](/sig-list.md). @@ -253,7 +253,7 @@ Read up on [GoDoc](https://blog.golang.org/godoc-documenting-go-code) - follow t ## 5. Test -Nothing is more frustrating than starting a review, only to find that the tests are inadequate or absent. Very few pull requests can touch code and NOT touch tests. +Nothing is more frustrating than starting a review, only to find that the tests are inadequate or absent. Very few pull requests can touch the code and NOT touch tests. If you don't know how to test Feature-X, please ask! We'll be happy to help you design things for easy testing or to suggest appropriate test cases. @@ -302,10 +302,9 @@ Each incoming Pull Request needs to be reviewed, checked, and then merged. While automation helps with this, each contribution also has an engineering cost. Therefore it is appreciated if you do NOT make trivial edits and fixes, but instead focus on giving the entire file a review. -If you find one grammatical or spelling error, it is likely there are more in that file, you can really make your Pull Request count by checking formatting, checking for broken links, and fixing errors and then submitting all the fixes at once to that file. +If you find one grammatical or spelling error, it is likely there are more in that file, you can really make your Pull Request count by checking the formatting, checking for broken links, and fixing errors and then submitting all the fixes at once to that file. **Some questions to consider:** * Can the file be improved further? * Does the trivial edit greatly improve the quality of the content? - diff --git a/contributors/guide/style-guide.md b/contributors/guide/style-guide.md index babb8eb3..38acb36c 100644 --- a/contributors/guide/style-guide.md +++ b/contributors/guide/style-guide.md @@ -21,7 +21,7 @@ These are **guidelines**, not rules. Use your best judgement. - [Punctuation](#punctuation) - [Quotation](#quotation) - [Markdown formatting](#markdown-and-formatting) - - [Code Blocks](code-blocks) + - [Code Blocks](#code-blocks) - [Emphasis](#emphasis) - [Headings](#headings) - [Horizontal Lines](#horizontal-lines) @@ -176,7 +176,7 @@ These are **guidelines**, not rules. Use your best judgement. - When inserting a code block into an ordered list, indent (space) an additional two times. -**[Metadata:](metadata)** +**[Metadata:](#metadata)** - If the document is intended to be surfaced on the Contributor Site; include a yaml metadata header at the beginning of the document. - Metadata must include the `title` attribute. diff --git a/events/2019/05-contributor-summit/README.md b/events/2019/05-contributor-summit/README.md index 19a6edf8..4513127b 100644 --- a/events/2019/05-contributor-summit/README.md +++ b/events/2019/05-contributor-summit/README.md @@ -9,6 +9,7 @@ In some sense, the summit is a real-life extension of the community meetings and - Onboard new contributors to be productive in our community - Send contributors home with more context, knowledge, and skills about the project - [SIG-specific face-to-face collaboration](sig-f2f-guidelines.md) + - [All pre- and post-event email communications sent out to attendees](communications.md) ## Registration diff --git a/events/2019/05-contributor-summit/communications.md b/events/2019/05-contributor-summit/communications.md new file mode 100644 index 00000000..9f148825 --- /dev/null +++ b/events/2019/05-contributor-summit/communications.md @@ -0,0 +1,233 @@ +# Comms used for Contributor Summit Barcelona, 2019 + +This document contains all the email communications that were sent out for the Contributor Summit in Barcelona. + +--- + +## [Kubernetes Contributor Summit EU] [Sched Invite] Email +_Sent out as soon as an attendee is added and approved in Sched_ + +Welcome! + +You have been added as an attendee to the [Kubernetes Contributor Summit in Barcelona](https://events.linuxfoundation.org/events/contributor-summit-europe-2019/). + +Please sign up for the sessions you plan to attend. This information will help both the session facilitators and the event team plan appropriately for the sessions. + +If you have any questions, please send an e-mail to community@kubernetes.io or reach out in the [#contributor-summit](https://kubernetes.slack.com/messages/contributor-summit) slack channel. + +See you in Barcelona! + +- Kubernetes Contributor Summit Events Team + +--- + +## [Kubernetes Contributor Summit EU] [Registration Changes] Email +_Sent to those needing to change from 201 to 101 workshop_ + +Hello (Name), + +Thank you for signing up for the 2019 Kubernetes Contributor Summit in Barcelona. To better align contributors with the track that would best fit, we wanted to follow-up and see if you would be interested in the New Contributor Track. The current contributor track is restricted to those that are Kubernetes org members or those that are actively contributing to the upstream project. + +Unlike past New Contributor Tracks, the Contributor Summit in Barcelona has two options for new contributors: + +101 - For brand new contributors who are interested in contributing, but have little to no experience contributing to open source projects. + +201 - For people who have experience contributing to other open source projects, but who are new to Kubernetes. + +If switching is something you'd like to do, please just respond and we'll take care of it right away. + +If you feel you should still be in the current contributor track, please reply to this email or follow-up separately with community@kubernetes.io. + +Thank you. + +- Kubernetes Contributor Summit Events Team + +--- + +## [Kubernetes Contributor Summit EU] [Current Contributors Sched Info] Email +_Sent out three weeks in advance to current contributors_ + +Hi (Name), + +Welcome to the [Barcelona Kubernetes Contributor Summit](https://events.linuxfoundation.org/events/contributor-summit-europe-2019/)! + +A [Sched](https://contsummiteu19.sched.com/) invite was sent out last Friday inviting you to sign-up for sessions. + +As a reminder, the only content for current contributors on Monday are [SIG Face-to-Face (F2F) meetings](https://contsummiteu19.sched.com/overview/type/SIG+F2F); including: CLI, Cloud Provider, Cluster Lifecycle, IBM Cloud, Instrumentation, Kubebuilder subproject (API Machinery), Networking, PM, Release, Scheduling, UI, VMware, and Windows. + +If you are no longer interested in attending Monday, you may update your registration by connecting with us in Kubernetes Slack [#contributor-summit](https://kubernetes.slack.com/messages/contributor-summit) (if you don’t have an account yet, join here: https://slack.k8s.io) or e-mail us at community@kubernetes.io. + +If you are still planning on attending Monday, please sign up in [Sched](https://contsummiteu19.sched.com/overview/type/SIG+F2F) for the F2F sessions you are interested in. This will help us plan the room selection accordingly. + +Thank you and see you in Barcelona! + +- Kubernetes Contributor Summit Events Team + + +--- + +## [Kubernetes Contributor Summit EU] [New Contributor Setup Information] Email +_Sent out two weeks in advance to new contributors_ + +Hi (Name), + +It is less than two weeks until [Kubernetes Contributor Summit](https://events.linuxfoundation.org/events/contributor-summit-europe-2019/), and we want to say, from the entire Kubernetes community, that we are so excited to be seeing so many new faces! + +You can find the [schedule for the event here](https://contsummiteu19.sched.com). + +Before we get to see each other in person, we would like to send a reminder and a few suggestions on how to get the most out of the New Contributor Workshop. + +**REMINDER** +Please follow this link for instructions to sign the [Kubernetes Contributor License Agreement](https://contsummiteu19.sched.com). Your organization may have a different, and possibly lengthy, process for this, so make sure you start and complete this task well in advance. Only folks who have signed the CLA will be able to participate in our community workflow exercises. + +If you run into trouble doing so, or have questions, please do not hesitate to contact the Linux Foundation Helpdesk at https://support.linuxfoundation.org/
- they are responsive and helpful. + +**SUGGESTIONS** +Familiarize yourself with git and GitHub, if you haven't already done so. [Here’s a quick tutorial to get you started](https://guides.github.com/activities/hello-world/). It's 100% okay to be both very new and very experienced at it. Just let us know and we will help you follow along! + +Part of the workshop will involve building and testing the Kubernetes core repository. This is very exciting and fun! If you would like to try to code along, please prepare for the vagaries of conference center wifi and complete the following steps at home before the workshop: +Create your own fork of https://github.com/kubernetes/kubernetes +Clone your fork into your personal laptop (this will take a minute or so!) +Make sure you have [golang](https://golang.org/dl/) and [Docker](https://www.docker.com/get-started) installed + +**NCW 101 PARTICIPANTS** +Please look at, fork and clone the [Contributor Playground repository](https://github.com/kubernetes-sigs/contributor-playground) before attending the workshop. + +**NCW 201 PARTICIPANTS** +We are trying our best to find ways to account for variability across operating systems and individual setups. Time is limited so if you cannot follow along due to technical difficulties, we may ask folks to pair up with those whose setup is currently working. + + + +If you have any questions, please connect with us [#contributor-summit](https://kubernetes.slack.com/messages/contributor-summit) (if you don’t have an account yet, join here: https://slack.k8s.io) or at community@kubernetes.io. + +See you soon! + +- Kubernetes Contributor Summit Events Team + +--- + +## [Kubernetes Contributor Summit EU] [Pre-Event Information] Email +_Sent out one week in advance to all attendees_ + +Hi (Name), + +Happy Tuesday before the main event, contributors! It's happening!! + +You should have gotten a detailed email last week from us regarding what you need to know as we approach the event. So we want to keep this a bit shorter, making sure you have all the information that you need to have a great time at [Kubernetes Contributor Summit Barcelona](https://events.linuxfoundation.org/events/contributor-summit-europe-2019/). + +### Contributor Summit Celebration +Sunday, 19 May 2019, 17:00 - 20:00 + +**CELEBRATION VENUE** +[Hotel Arts Barcelona](https://www.hotelartsbarcelona.com/en/) +Lokal + Terrace, Ground Floor +[Marina 19-21, 08005 Barcelona, Spain](https://goo.gl/maps/yABfqg3VjkJ2) + +Fact: 85%+ of Monday’s attendees will be there! Join us for food, drinks, games, and get to know your fellow contributors. + +Pick up your Contributor Summit badge in the lobby before joining the celebration. + +### Contributor Summit +Monday, 20 May 2019, 10:00 - 17:00 + +**EVENT VENUE** +[Fira Gran Via](https://goo.gl/maps/9EANSD7gQQQ2) +Congress Center 4 & 5 (Enter through Hall 8.0) + +[All the slides for the workshop are available here.](https://docs.google.com/presentation/d/1usEbwHMSC8vR7HvbxHJBOj2ISdTkw9rmufQUq7fkIl4/) + +**BADGE PICKUP** +- **Contributor Summit Badge** + A special badge needed for the Contributor Summit can be picked up at the Contributor Celebration or at the Fira Gran Via. A ribbon showcasing that you are a New or Existing Contributor can be picked up at the same time, and attached to your KubeCon + CloudNativeCon badge. +- **KubeCon + CloudNativeCon Badge** + Available at the airport, participating hotels, and Fira Gran Via. Please see the main KubeCon + CloudNativeCon [schedule](https://kccnceu19.sched.com/overview/type/Registration+%2B+Badge+Pick-up) for detailed badge pickup information. + +**SCHEDULE** +You can find the main schedule for the event here: https://contsummiteu19.sched.com + +- **New Contributor Workshops** + We will start at 10:00 to give everyone ample room to enjoy breakfast on their own, and pick up their event badges. The workshop will start with a “Welcome and introduction” session in room CC5.1, and then break out into the 101 workshop in CC5.1 (same room), and 201 workshop in CC4.1. + +- **SIG F2F Info** + For current contributors, we have several SIG F2F meetings that are co-located with the Contributor Summit on Monday: SIG CLI, SIG Cloud Provider, SIG Cluster Lifecycle, SIG IBM Cloud, SIG Instrumentation, KubeBuilder (SIG API Machinery), SIG Networking, SIG PM, SIG Release, SIG Scheduling, SIG UI, SIG VMware, and SIG Windows. + + Please see the [schedule for SIG room information](https://contsummiteu19.sched.com/overview/type/SIG+F2F), there will be signs outside the rooms as well, and please read through the guidelines here. + +- **New Contributor Meet and Greet** + Starting at 16:00 after the workshops, we will host a Meet and Greet for all new and existing contributors. Come say hi, introduce yourself and get to know someone new! + +**TALK TO US** +Join the conversation in Kubernetes Slack in the [#contributor-summit](https://kubernetes.slack.com/messages/contributor-summit) channel (if you don’t have an account yet, join here: https://slack.k8s.io). +Are you tweeting at the event? Include us in your Twitter posts throughout the event with the hashtag [#k8scontribsummit](https://twitter.com/search?q=%23k8scontribsummit). + +See you in Barcelona! + +- Kubernetes Contributor Summit Events Team + +--- + +## [Kubernetes Contributor Summit EU] [Post Event - Current Contributors] Email +_Sent out a week after the Contributor Summit to current contributors_ + +Hi (Name), + +Thank you for attending [Kubernetes Contributor Summit EU](https://events.linuxfoundation.org/events/contributor-summit-europe-2019/). What a fantastic event! Your active participation and enthusiasm were critical to the success of the event -- we hope that you found it valuable. + +It is our goal to continually improve Kubernetes Contributor Summit events, so please share your feedback in this brief [survey](https://forms.gle/VD1NmkZeCsMCGKdT7)! + +We’d like to share a number of resources from the event: + +**Presentations** +All the slides from the workshops [can be found here](https://docs.google.com/presentation/d/1usEbwHMSC8vR7HvbxHJBOj2ISdTkw9rmufQUq7fkIl4/). + +**Videos** +The New Contributor Workshops were recorded and are available via [our Summit playlist](https://www.youtube.com/watch?v=-GayuFobHBo&list=PL69nYSiGNLP3M5X7stuD7N4r3uP2PZQUx). + +**Photo Gallery** +Thank you for all the great memories! See if you can spot yourself in the [gallery](https://bit.ly/2VrG8eB). + +Share Your Experience! +Join the conversation in Kubernetes Slack on the [#contributor-summit](https://kubernetes.slack.com/messages/contributor-summit) channel (if you don’t have an account yet, join here: https://slack.k8s.io). +Don’t forget to include us in your Twitter posts from the event #k8scontribsummit. + +Join Us in [Shanghai](https://www.lfasiallc.com/events/contributors-summit-china-2019/) and [San Diego](https://events.linuxfoundation.org/events/contributor-summit-north-america-2019/)! + +On behalf of the entire Kubernetes Contributor Summit team, thank you again for attending and we look forward to seeing you at a future event! + +Kind regards, + +- Kubernetes Contributor Summit Events Team + +--- + +## [Kubernetes Contributor Summit EU] [Post Event - New Contributors] Email +_Sent out a week after the Contributor Summit to new contributors_ + +Hi (Name), + +Thank you for attending [Kubernetes Contributor Summit EU](https://events.linuxfoundation.org/events/contributor-summit-europe-2019/). What a fantastic event! Your active participation and enthusiasm were critical to the success of the event -- we hope that you found it valuable. + +It is our goal to continually improve Kubernetes Contributor Summit events, so please share your feedback in this brief [survey](https://docs.google.com/forms/d/e/1FAIpQLSffTryOAfIITqpNYzgJsnu9CziNXbUwZmwCxtuyqMXkc0vFKw/viewform)! + +We’d like to share a number of resources from the event: + +**Presentations** +All the slides from the workshops [can be found here](https://docs.google.com/presentation/d/1usEbwHMSC8vR7HvbxHJBOj2ISdTkw9rmufQUq7fkIl4/). + +**Videos** +The New Contributor Workshops were recorded and are available via [our Summit playlist](https://www.youtube.com/watch?v=-GayuFobHBo&list=PL69nYSiGNLP3M5X7stuD7N4r3uP2PZQUx). + +**Photo Gallery** +Thank you for all the great memories! See if you can spot yourself in the [gallery](https://bit.ly/2VrG8eB). + +Share Your Experience! +Join the conversation in Kubernetes Slack on the [#contributor-summit](https://kubernetes.slack.com/messages/contributor-summit) channel (if you don’t have an account yet, join here: https://slack.k8s.io). +Don’t forget to include us in your Twitter posts from the event #k8scontribsummit. + +Join Us in [Shanghai](https://www.lfasiallc.com/events/contributors-summit-china-2019/) and [San Diego](https://events.linuxfoundation.org/events/contributor-summit-north-america-2019/)! + +On behalf of the entire Kubernetes Contributor Summit team, thank you again for attending and we look forward to seeing you at a future event! + +Kind regards, + +- Kubernetes Contributor Summit Events Team diff --git a/events/2019/06-contributor-summit/README.md b/events/2019/06-contributor-summit/README.md index f62f5bbc..480fde27 100644 --- a/events/2019/06-contributor-summit/README.md +++ b/events/2019/06-contributor-summit/README.md @@ -3,11 +3,16 @@ ## Essential Information June 24th, 2019<br /> -10am to 5pm<br /> -Shanghai Expo Center +9am to 4pm + +Shanghai Expo Center<br /> +No. 1500 Shibo Avenue<br /> +Shanghai, China [Event Page](https://www.lfasiallc.com/events/contributors-summit-china-2019/) +[Registration Required](https://www.lfasiallc.com/events/contributors-summit-china-2019/register/) + ## Description This year's contributor summit in China will be a full-day event for people who contribute to Kubernetes, or are interested in becoming contributors, whether through writing code, documentation, infrastructure, project management, or the many other places they can help. It will include three tracks: @@ -18,18 +23,35 @@ This year's contributor summit in China will be a full-day event for people who ## New Contributor Workshop +The New Contributor Workshop (NCW) will be from 9:30am to 3:30pm in Room 517. + The New Contributor Workshop is a 5-hour long tutorial, with participatory exercises, that covers the basics of contributing to Kubernetes and being part of its community. It is not possible to attend only part of the workshop, and you are expected to stay for the whole day. Attendees will be expected to bring a laptop, sign the Contributor License Agreement, and have a GitHub account. The workshop will be held in both Chinese and English, with live translation. ## Current Contributor Day +The Current Contributor Day will be from 9:00AM to 3:30PM in the Gold Hall. + This day is for people who already contribute to Kubernetes and participate in its community and want a place to have working meetings, as well as contributors who have already taken the New Contributor Workshop and want to learn more in-depth contribution topics. -Sessions during this day will be arranged by the community, and as such a final schedule will be posted here in early June. +Draft Schedule, subject to amendment: -The Contributor Day will be held primarily in English, although one or two sessions may be in Chinese. +| Time | Presentation Area | Discussion Area | +| ---- | ----------------- | --------------- | +| 9:00AM | Introductions | +| 9:15AM | Drafting a Kubenetes Enhancement Proposal | SIG API Machinery F2F Meeting | +| 10:15AM | Kubernetes Codebase Tour | SIG Scheduling F2F Meeting | +| 11:15AM | Non-Code Contributions | SIG Storage F2F Meeting | +| 12:15PM | Lunch | Lunch | +| 1:30PM | Building Kubernetes Extensions | SIG Meeting TBD | +| 2:30PM | Local Build & Test Troubleshooting | SIG Meeting TBD | + +Sessions during this day will be arranged by the community. There are still a few open slots. +Contact[Josh Berkus](mailto:jberkus@redhat.com) if your SIG wants to have a face to face meeting at the Summit. + +The Contributor Day will be held primarily in English, although one or two sessions may be in Chinese. ## Documentation Sprints diff --git a/events/2019/11-contributor-summit/README.md b/events/2019/11-contributor-summit/README.md index a3d120a7..39b0919f 100644 --- a/events/2019/11-contributor-summit/README.md +++ b/events/2019/11-contributor-summit/README.md @@ -1 +1,66 @@ # 2019 Kubernetes Contributor Summit NA + +## *This event is still in the planning stages. Please check back here for updates!* +Planning Info: +[Project Board](https://github.com/orgs/kubernetes/projects/21) - this includes content planning issues! +See [sig-list.md](/sig-list.md) for the meeting times and agenda. + +## What + +This event brings together new and current Kubernetes contributors to connect and learn from one another. It is an opportunity for existing contributors to help shape the future of the project, and offers a welcoming space for new community members to learn, explore and put the contributor workflow to practice. The summit spans two days - an optional social event in the evening of Sunday, November 17th along with the main full-day event on Monday, November 18th. + +## Registration + +- [Sign the CLA](/CLA.md) if you have not done so already. +- Website will be live in September: https://events.linuxfoundation.org/events/kubernetes-contributor-summit-north-america-2019/ + +## When and Where + +The Contributor Summit takes place in the days leading up to [KubeCon + CloudNativeCon NA](https://events.linuxfoundation.org/events/kubecon-cloudnativecon-north-america-2019/), make sure you plan travel accordingly. + +- Sunday, November 17th, 2019 ~5P - 9P + Social event (optional) +- Monday, November 18th, 2019 ~8A - 6P + Full day event +- San Diego, California +- Event website with more information: https://events.linuxfoundation.org/events/kubernetes-contributor-summit-north-america-2019/ + +**But wait!** + +During [KubeCon/CloudNativeCon](https://events.linuxfoundation.org/events/kubecon-cloudnativecon-north-america-2019/) there will be maintainer-track sessions that include SIG Intros, Deep-Dives as well as contributor talks about upstream work. + +### Transparency + +- Recording: Sessions will be video recorded and uploaded to YouTube. +- Transcription: Transcriptions will be uploaded with the video. +- Content Sharing: All presentations will be uploaded. + +## Team + +| Role | Lead | Shadow | Notes | +|---|---|---|---| +| Event Lead | Paris [@parispittman](https://github.com/parispittman) | Jeff [@jeefy](https://github.com/jeefy) | | +| Project Manager | Jamie [@JamieRachel](https://github.com/JamieRachel) | himanshu [@hpandeycodeit](https://github.com/hpandeycodeit) | | +| Registration | Bob [@mrbobbytables](https://github.com/mrbobbytables) | Nabarun [@palnabarun](https://github.com/palnabarun) | | +| Marketing | Jonas [@jonasrosland](https://github.com/jonasrosland) | nzoueidi [@nzoueidi](https://github.com/nzoueidi) | | +| CNCF Events Manager | Deb Giles [@debgiles](https://github.com/debgiles) | N/A | CNCF/LF Employee | +| Content Coordinator | Josh [@jberkus](https://github.com/jberkus) | | | +| Programmed Sessions | Yang Li [@idealhack](https://github.com/idealhack) | Tariq Ibrahim [@tariq1890](https://github.com/tariq1890) | | +| Workshops | John Belamaric [@johnbelamaric](https://github.com/johnbelamaric) | Barnabas [@makoscafee](https://github.com/makoscafee) | | +| Unconference | Marky [@markyjackson-taulia](https://github.com/markyjackson-taulia) | Cody [@thecrudge](https://github.com/thecrudge) | | +| New Contributor Workshop | Guin [@guineveresaenger](https://github.com/guineveresaenger) | Allison [@alisondy](https://github.com/alisondy)<br />Rael [@raelga](https://github.com/raelga) | | +| SIG Meet & Greet | Dawn Foster [@geekygirldawn](https://github.com/geekygirldawn) | Jason DeTiberus [@detiber](https://github.com/detiber) | +| Contributor Awards | Claire Laurence [@claurence](https://github.com/claurence), Tim Pepper [@tpepper](https://github.com/tpepper) | | +| Accessibility, Inclusiveness, and Diversity | Tasha [@tashimi](https://github.com/tashimi) | Arnaud [@ameukam](https://github.com/ameukam) | | + +## Code of Conduct + +This event, like all Kubernetes events, has a [Code of Conduct](/code-of-conduct.md). We will have an onsite rep with contact information to be provided here and posted during the event. + +## Misc + +We want to remove as many barriers as possible for you to attend this event. Please contact community@kubernetes.io to see if we can accommodate a request. + +For general info and questions, please join and direct questions to the [#contributor-summit](https://kubernetes.slack.com/messages/C7J893413/) slack channel. To speak directly to the staff, please join the [#summit-staff](https://kubernetes.slack.com/messages/CEMM39SKG/) slack channel. + +As stated above, this doc will be updated with further details. Please check back for additional information. diff --git a/events/community-meeting.md b/events/community-meeting.md index ccd19a72..12949cb5 100644 --- a/events/community-meeting.md +++ b/events/community-meeting.md @@ -5,7 +5,7 @@ a). See it on the web at [calendar.google.com](https://calendar.google.com/calendar/embed?src=cgnt364vd8s86hr2phapfjc6uk%40group.calendar.google.com&ctz=America/Los_Angeles) , or paste this [iCal url](https://calendar.google.com/calendar/ical/cgnt364vd8s86hr2phapfjc6uk%40group.calendar.google.com/public/basic.ics) into any [iCal client](https://en.wikipedia.org/wiki/ICalendar). Do NOT copy the meetings over to a your personal calendar, you will miss meeting updates. Instead use your client's calendaring feature to say you are attending the meeting so that any changes made to meetings will be reflected on your personal calendar. -All meetings are archived on the [Youtube Channel](https://www.youtube.com/playlist?list=PL69nYSiGNLP1pkHsbPjzAewvMgGUpkCnJ). +All meetings are archived on the [YouTube Channel](https://www.youtube.com/playlist?list=PL69nYSiGNLP1pkHsbPjzAewvMgGUpkCnJ). Quick links: @@ -19,7 +19,7 @@ It also provides a forum for discussion of project-level concerns that might nee ## Notetaker(s) -Notes from the meeting are published to the [Kubernetes dev](https://groups.google.com/forum/#!forum/kubernetes-dev) list. +Notes from the meeting are published to [this forum thread](https://discuss.kubernetes.io/t/kubernetes-weekly-community-meeting-notes/35/53) for wider distribution. A good notetaker is important to help get the information out to people who cannot attend. Volunteers are always welcome to either add their notes directly to the document, or inform the host that they would like to help take notes at the beginning of the call. @@ -36,12 +36,13 @@ General speaking the meeting is structured as follows: - Development Release - Stable Release and point releases - Older stable releases and point releases -- Graph of the Week (~2 minutes) - - This is meant to bring attention to different [devstats graphs](https://k8s.devstats.cncf.io/) +- Contributor Tip of the Week (~2 minutes) + - These can be a variety of topics, including [devstats graphs](https://k8s.devstats.cncf.io/) - SIG Updates - Three SIGs per meeting, 10 minutes per SIG - Announcements (~5 minutes) - Any other community announcements should go here + - Shoutouts, an aggregation of thanks from community members to other contributors via the #shoutouts channel ## Demos @@ -81,12 +82,13 @@ The SIG Update should mention: - Any pending Kubernetes Enhancement Proposals (KEPs) or general big ideas that might warrant outside input - Prior 1.X.Y release patches in flight status - Current 1.X release targeted feature status +- Rescheduling an update can happen, but is strongly discouraged as the schedule is done with as much lead time as possible to allow SIGs time to plan ahead + - SIGs should consider asking someone who is not a chair or lead to give this update as a mentorship/growth opportunity to newer members + - There is a [pregenerated slide template](https://docs.google.com/presentation/d/1-nTvKCiqu9UvFYUeM6p6RIqHS5-H-u3_x-V4xj_eIWo/edit#slide=id.g401c104a3c_0_0) that you can use for your status + - The update belongs entirely to the SIG, there will be periods when "boring" work happens and the SIG might want to not give a status update, instead consider a shorter update that at least lets the community know if you're in a quiet period. Informing the community that you've been clearing out the backlog in a 1 minute status is much better than not having a status report because you're concerned about not filling out the template in full. Just cut out what doesn't apply to you. Since you only usually have ~10 minutes generally speaking if something is internal only to your SIG and doesn't affect others it doesn't need to be mentioned, people can always attend your SIG meeting for the details. ## Archives -The document gets slow as we add notes, so it is archived regularly into another document: - -- [2017](https://docs.google.com/document/d/1sAH-74kIGROvM5MhyAkbJPVcuE9-RDHiOqfv_4PAGdw/edit#heading=h.en8cy6hno0c6) -- [2014-2016](https://docs.google.com/a/google.com/document/d/1fcs_POhXJCL1dqYrG3IxE4Ivh8jh2JYLCCdgRmBQeb8/edit?usp=sharing) +The document gets slow as we add notes, so it is archived regularly into the [Meeting Notes Archive](https://git.kubernetes.io/community/communication/meeting-notes-archive). diff --git a/events/elections/2019/OWNERS b/events/elections/2019/OWNERS new file mode 100644 index 00000000..acb3b36e --- /dev/null +++ b/events/elections/2019/OWNERS @@ -0,0 +1,12 @@ +# See the OWNERS docs at https://go.k8s.io/owners + +reviewers: + - castrojo + - idvoretskyi + - mrbobbytables + - bgrant0607 +approvers: + - castrojo + - idvoretskyi + - mrbobbytables + - bgrant0607 diff --git a/events/elections/2019/README.md b/events/elections/2019/README.md new file mode 100644 index 00000000..6e3f4004 --- /dev/null +++ b/events/elections/2019/README.md @@ -0,0 +1,173 @@ +# 2019 VOTERS GUIDE - KUBERNETES STEERING COMMITTEE ELECTION + +## Purpose + +The role of this election is to fill out the four (4) seats due for +reelection this year on the [Kubernetes Steering Committee]. Each elected +member will serve a two (2) year term. + +## Background + +This election will shape the future of Kubernetes as a community and project. +While SIGs and WGs help shape the technical direction of the project, the +[Steering Committee Charter] covers the health of the project and community +as a whole. Some direct responsibilities of steering members to consider as you are deciding +whether to run or who to vote for: + +* Through the chartering review process, delegate ownership of, responsibility + for and authority over areas of the project to specific entities +* Define, evolve, and defend the non-technical vision / mission and the values + of the project +* Charter and refine policy for defining new community groups and establish transparency and accountability policies for such groups +* Define and evolve project and group governance + structures and policies +* Act as a final non-technical escalation point for any Kubernetes repository +* Request funds and other support from the CNCF (e.g. marketing, press, etc.) +* Define and enforce requirements for community groups to be in good standing + such as having an approved charter + +For more context, please see the [current steering committee backlog] or a +previous [governance meeting video] which led to this whole process. + +## Eligibility + +Please refer to the [Steering Committee Election Charter] for: + +- [Eligibility for candidacy] +- [Eligibility for voting] and [Eligible voters] list (not in charter) + +### Schedule + +| Date | Event | +| ------------ | ------------------------ | +| August 21 | Announcement of Election | +| September 11 | All candidate bios and voting exception forms due by 0000 UTC (5pm PST) | +| September 18 | Election Begins via email ballots | +| October 2 | Election Closes by 0000 UTC (5pm PST) | +| October 3 | Announcement of Results at Community Meeting | + +## Candidacy Process + +**Nomination** + +If you want to stand for election, send an email to kubernetes-dev@googlegroups.com +with the subject line "Steering Committee Nomination: Your Name (@yourgithub)". + +If you want to nominate someone else, you may do so, but PLEASE talk to them +first. + +If you wish to accept a nomination from someone else, reply to the nomination +email saying something like "I accept the nomination" + +**Endorsement** + +Once nominated, you must get the endorsement of three (3) different eligible +voters from three (3) different employers. If you are eligible to vote +yourself, you count as one of the three. + +[Eligible voters] may endorse candidates of their choosing by replying to the +candidate's nomination email saying something like "I endorse this nominee" +or "+1". Please specify your github ID and state that you are in voters.md. + +**Running** + +Eligible candidates must submit a pull request with a biography in this +directory with their platform and intent to run. This statement is +**limited to 300 words** and must follow the format of `firstnamelastname.md`. +Please refer to the [2018 candidate bios] for examples. + +**Campaigning** + +Please refer to the [Steering Committee Election Charter] and understand +that we care deeply about [limiting corporate campaigning]. The election +officers and members of the steering committee [pledge to recuse] themselves +from any form of electioneering. + +You should be running as a "brand free" individual, based on your contribution +to the project as a member of this community, outside of whatever corporate +roles you may hold. + +## Voting Process + +Kubernetes members in [voters.md] will receive a ballot via email. If you are +not on that list and feel you have worked on Kubernetes in a way that is NOT +reflected in GitHub contributions, you can use the [voter exemption form] to ask +to participate in the election. + +Elections will be held using time-limited [Condorcet] ranking on [CIVS] +using the [IRV method]. The top vote getters will be elected to the open +seats. + +Employer diversity is encouraged, and thus maximal representation will be +enforced as spelled out in the [Steering Committee Election Charter]. + +You will be ranking your choices of the candidates with an option for +"no opinion". In the event of a tie, a coin will be flipped. + +The election will open for voting the morning September 28, 2019 via email and +end two weeks after on October 2, 2019 at 00:00am UTC. You will receive an email +to the address on file at the start of the election from "Kubernetes (CIVS Poll +Supervisor) `<civs@cs.cornell.edu>`, please whitelist if necessary. Detailed +voting instructions will be addressed in email and the CIVS polling page. Please +note that email ballots might be unreliable, so you are encouraged to contact +the election officials if you do not receive a ballot by September 29. + +### Officers + +The Steering Committee has selected the following people as [election officers]: +- Ihor Dvoretskyi, @idvoretskyi, CNCF +- Jorge Castro, @castrojo, VMware +- Bob Killen, @mrbobbytables, University of Michigan +- Brian Grant, @bgrant0607, Google + +Please direct any questions via email to <election@k8s.io>. + +### Decision + +The newly elected body will be announced in the weekly [Kubernetes Community Meeting] +on October 3, 2019. + +Following the meeting, the raw voting results and winners will be published on the +[Kubernetes Blog]. + +For more information, definitions, and/or detailed election process, please refer to +the [Steering Committee Election Charter] + +## Nominees + +| Name | Organization/Company | GitHub | +|:------------------------------------------:|:--------------------:|:----------------------------------------------------:| +| [Brendan Burns](./brendanburns.md) | Microsoft | [@brendandburns](https://github.com/brendandburns) | +| [Christoph Blecker](./christophblecker.md) | Red Hat | [@cblecker](https://github.com/cblecker) | +| [Derek Carr](./derekcarr.md) | Red Hat | [@derekwaynecarr](https://github.com/derekwaynecarr) | +| [Pengfei Ni](./pengfeini.md) | Microsoft | [@feiskyer](https://github.com/feiskyer) | +| [Stephen Augustus](./stephenaugustus.md) | VMware | [@justaugustus](https://github.com/justaugustus) | +| [Kris Nova](./krisnova.md) | Sysdig | [@kris-nova](https://github.com/kris-nova) | +| [Klaus Ma](./klausma.md) | Huawei | [@k82cn](https://github.com/k82cn) | +| [Lachlan Evenson](./lachlanevenson.md) | Microsoft | [@lachie83](https://github.com/lachie83) | +| [Nikhita Raghunath](./nikhitaraghunath.md) | Loodse | [@nikhita](https://github.com/nikhita) | +| [Paris Pittman](./parispittman.md) | Google | [@parispittman](https://github.com/parispittman) | +| [Vallery Lancey](./vallerylancey.md) | Lyft | [@vllry](https://github.com/vllry) | + +[Kubernetes Steering Committee]: https://github.com/kubernetes/steering +[Steering Committee Charter]: https://github.com/kubernetes/steering/blob/master/charter.md +[current steering committee backlog]: https://github.com/kubernetes/steering/projects/1 +[governance meeting video]: https://www.youtube.com/watch?v=ltRKXLl0RaE&list=PL69nYSiGNLP1pkHsbPjzAewvMgGUpkCnJ&index=23 + +[Steering Committee Election Charter]: https://git.k8s.io/steering/elections.md +[Eligibility for voting]: https://github.com/kubernetes/steering/blob/master/elections.md#eligibility-for-voting +[Eligibility for candidacy]: https://github.com/kubernetes/steering/blob/master/elections.md#eligibility-for-candidacy +[limiting corporate campaigning]: https://github.com/kubernetes/steering/blob/master/elections.md#limiting-corporate-campaigning +[pledge to recuse]: https://github.com/kubernetes/steering/blob/master/elections.md#steering-committee-and-election-officer-recusal + +[Condorcet]: https://en.wikipedia.org/wiki/Condorcet_method +[CIVS]: http://civs.cs.cornell.edu/ +[IRV method]: https://www.daneckam.com/?p=374 + +[2018 candidate bios]: https://github.com/kubernetes/community/tree/master/events/elections/2018 +[election officers]: https://github.com/kubernetes/community/tree/master/events/elections#election-officers +[Kubernetes Community Meeting]: https://github.com/kubernetes/community/blob/master/events/community-meeting.md +[Kubernetes Blog]: https://kubernetes.io/blog/ +[eligible voters]: https://github.com/kubernetes/community/blob/master/events/elections/2019/voters.md +[voter exemption form]: https://www.surveymonkey.com/r/k8s-sc-election-2019 +[voters.md]: ./voters.md diff --git a/events/elections/2019/brendanburns.md b/events/elections/2019/brendanburns.md new file mode 100644 index 00000000..88b9e678 --- /dev/null +++ b/events/elections/2019/brendanburns.md @@ -0,0 +1,39 @@ +# Brendan Burns + +- GitHub: @brendandburns +- Twitter: @brendandburns + +## Current work with Kubernetes + +- **Current Steering Committee Member** +- Member of the CNCF Technical Oversight Committee +- Co-Lead developer for official client libraries: + - [Java](https://github.com/kubernetes-client/java) + - [Javascript](https://github.com/kubernetes-client/javascript) + - [Generation Infrastructure](https://github.com/kubernetes-client/gen) +- Leader of the Azure Kubernetes team(s) +- Numerous videos and presentations explaining Kubernetes (e.g. https://www.youtube.com/watch?v=G3R24JSlGjY) + +## My history with Kubernetes +I was one of the original creators of the proof of concept demo system that eventually turned +into Kubernetes. I wrote much of the original Kubernetes codebase as well as +the overall system design. I helped set up the initial +trajectory and inclusive culture of the Kubernetes community. I was in the bootstrap +committee that wrote the original governance structure for Kubernetes. More recently +I worked to broaden the base of people who can use Kubernetes via efforts like +usability and client libraries for different languages. I also help shape the future of technology +on top of Kubernetes like the Service Mesh Interface (SMI) and more. + +## Where I see myself contributing +I have two unique areas to contribute. The first is a sense of history and continuity having been with the +project from it's very origin through the current day. This history helps me understand the context of the +decisions we are making today and how we have thought about it in the past. + +The other is a sense for the importance of a broad, vibrant and effective community. +Our community is the part of the project that I'm most proud of. It's the most unique +thing that we have built. I will work to preserve the best of what we've built and improve +the parts that can be improved to make us even stronger, more inclusive and more capable. + +## Where I work? + +Microsoft Azure
\ No newline at end of file diff --git a/events/elections/2019/christophblecker.md b/events/elections/2019/christophblecker.md new file mode 100644 index 00000000..4aba2755 --- /dev/null +++ b/events/elections/2019/christophblecker.md @@ -0,0 +1,54 @@ +# Christoph Blecker + +- GitHub: https://github.com/cblecker +- Twitter: https://twitter.com/tophee +- Slack: @cblecker + + +## How I contribute + +I got involved in the Kubernetes project in 2016, became a +member/reviewer/approver in 2017, and a [maintainer] in 2018. + +I'm a Technical Lead for [SIG Contributor Experience], a founding member of the +[Kubernetes Infrastructure Working Group], and a regular contributor to [SIG +Architecture], [SIG Testing], and [SIG Release]. + +I founded and manage the [GitHub Administration Team], which is responsible for +holding our Org Owner privileges and overseeing our GitHub footprint. + +I'm a recipient of the 2018 Chop Wood / Carry Water award. + + +## What I have done + +Since joining the project, I have developed a reputation for picking up the +difficult, non-glamourous parts of open source work, and making things happen. +Whether it's code or people, I don't mind tackling the stickier parts of the +project and working to make them better, even just incrementally. + +I'm a passionate advocate for our contributor base, new and experienced alike. +With the speed that the Kubernetes project moves, it's easy to become +disconnected from the needs of those who may not subscribe to all our e-mail +lists, chat in our Slack all day, or join our regular calls. I started as a +non-corporate-sponsored contributor myself, and aim to bring those perspectives +to the steering table. + +## What I'll do + +If elected, I aim to bring the voice of the contributor to the steering table. I +hope to bring my ability to make tough decisions, ask tough questions, and do +the hard work needed to allow that passionate contributor base to keep moving +this project forward. + +## Where I work + +Red Hat + +[SIG Architecture]: https://git.k8s.io/community/sig-architecture +[SIG Contributor Experience]: https://git.k8s.io/community/sig-contributor-experience +[GitHub Administration Team]: https://git.k8s.io/community/github-management +[Kubernetes Infrastructure Working Group]: https://git.k8s.io/community/wg-k8s-infra +[SIG Release]: https://git.k8s.io/community/sig-release +[SIG Testing]: https://git.k8s.io/community/sig-testing +[maintainer]: https://github.com/orgs/kubernetes/teams/kubernetes-maintainers/discussions/2 diff --git a/events/elections/2019/derekcarr.md b/events/elections/2019/derekcarr.md new file mode 100644 index 00000000..558d3738 --- /dev/null +++ b/events/elections/2019/derekcarr.md @@ -0,0 +1,47 @@ +# Derek Carr + +- GitHub: @derekwaynecarr + +## How I participate in Kubernetes? + +- **Current Steering Committee Member** +- SIG Node (co-chair) +- SIG Architecture (co-chair) +- WG Resource Management (Emeritus Lead) +- SIG API-Machinery, Autoscaling, Scheduling, Service Catalog (Contributor) + +## About me + +I joined in 2014 as an early external contributor. Over the years, I have loved +working with everyone to collaboratively build an amazing community and +technology. I have participated in multiple sub-projects helping to mentor new +contributors with code and coaching on technology and process to grow scope and +sustain the project. + +I co-lead SIG Node and advocate for expanded workload support and improvements +to node reliability. Early in the project, I was able to contribute initial +support for namespaces, quotas, limits, and internal machinery like admission +control. I continue to help maintain those areas in the project with the +broader community and use my experience to inform my participation in SIG +Architecture. + +In my service as a SIG chair and steering committee member, I try to listen, +find consensus, and empower others. I have a pragmatic approach to problem +solving that prefers minimal solutions. + +## Where I see myself contributing + +What started as a small open source project has grown into a mission critical +system for the world. I hope to continue to serve as a responsible steward of +the community that we all depend upon. + +Areas of focus + +- Delegate and empower others to meet the shifting needs of the project +- Coordinate and unblock challenges that span SIGs +- Responsibly sustain and grow contributor pool across all disciplines +- Support an inviting, fun, and collaborative environment to build together + +## Where I work? + +Red Hat
\ No newline at end of file diff --git a/events/elections/2019/klausma.md b/events/elections/2019/klausma.md new file mode 100644 index 00000000..1c1de317 --- /dev/null +++ b/events/elections/2019/klausma.md @@ -0,0 +1,27 @@ +# Klaus Ma + +* GitHub/Slack/Twitter: [@k82cn](http://github.com/k82cn) +* Email: klaus1982.cn@gmail.com + +## What I've Done + +I've been involved in the Kubernetes project since ~2016, and have worked on distributed system for 10+ years. During my journey +on the project, it's really lucky to meet lots of great folks and have worked on various roles in the kubernetes community: + +* SIG Scheduling (Lead) +* kubernetes-sigs/kube-batch (OWNER) +* SIG Apps, Node (Contributor/Reviewer/Approver) +* CNCF Research User Group (Tech Lead, on-going) + +In addition to the work in the community, I also play as a advocate for Kubernetes on technical introduction and contributing guidance +in several conferences and meetups. + +## What I'll Do + +1. Serve to governance model to empower different stakeholders in the community +1. Serve to SIG/WG/UG to take ownership on different areas and workloads +1. Serve to community to encourage current/new contributors/users + +## Where I work + +Huawei
\ No newline at end of file diff --git a/events/elections/2019/krisnova.md b/events/elections/2019/krisnova.md new file mode 100644 index 00000000..b86043c8 --- /dev/null +++ b/events/elections/2019/krisnova.md @@ -0,0 +1,25 @@ +<p align="center"><img src="https://www.nivenly.com/wp-content/uploads/2019/07/B55A3382-ACB6-452E-8D48-F63242AA9767-1.jpg" width="360"></p> +<p align="center"><b>Kris Nova</b></p> + +More about [me](https://github.com/kris-nova/me) + +## Why me? + +I want to push myself, and our community. Taking on a leadership role like this excites me, and gives me energy. +I want to understand more about how Kubernetes is able to solve problems at scale, while also bringing my experience to the table. +Furthermore, I think having a diverse set of ideas in our steering committee will help keep our technology balanced and clever. + +I have worked with major drivers in the Kubernetes space, both in OSS and professionally. I have seen a lot of leaders in Kubernetes implement change in a number of ways. +As I have been watching and working closely with these folks, I have been taking notes. I think Kubernetes is at a phase where we need protection and enablement for our contributors, and less top-down change. + +Let's let our contributors do what they do best: build amazing software. + +## What I will do + +Enable folks to be as productive as possible. Most of us have day jobs, and we all have our own agendas for work in Kubernetes. +My interest in joining is to serve as a guardian for the contributors, while empowering our many sigs with anything they need to be as useful and productive as possible. + +The implementation detail here could mean a lot of things, but overall my sentiment would be to speak for the SIGs - and their best interest. + + +I hope you consider me for a steering committee member this year.
\ No newline at end of file diff --git a/events/elections/2019/lachlanevenson.md b/events/elections/2019/lachlanevenson.md new file mode 100644 index 00000000..02e7f2aa --- /dev/null +++ b/events/elections/2019/lachlanevenson.md @@ -0,0 +1,22 @@ +# Lachlan Evenson + +G'day, I'm [lachie83](https://github.com/lachie83) on Github, Slack and @LachlanEvenson on Twitter + +## What I've Done + +As a long-time member (early 2014) of the Kubernetes community I have served in many capacities. I started as an end-user and then moved to more active community roles including: + +* SIG PM Chair: improving the KEP process and sharing the process to the community at different ecosystem events +* Release team: 1.16 release lead, 1.15 lead shadow, 1.14 enhancements shadow +* Lead PM: IPv4/IPv6 dual-stack Kubernetes enhancement +* CNCF Ambassador + +I have witnessed the impact of the Steering Committee over the years and would like to continue to build on that legacy. + +## What I'll Do + +I am specifically passionate about building the supporting structures to help scale contributions whilst actively focusing on intervening in processes that lead to contributor burnout. My experiences over the years provide me with a well rounded context in which to make effective decisions. It is my hope that by serving on the Steering Committee, I can help continue to build a safe, supportive, inclusive and collaborative environment for the project to flourish. + +## Where I Work + +Microsoft
\ No newline at end of file diff --git a/events/elections/2019/nikhitaraghunath.md b/events/elections/2019/nikhitaraghunath.md new file mode 100644 index 00000000..0478c73c --- /dev/null +++ b/events/elections/2019/nikhitaraghunath.md @@ -0,0 +1,52 @@ +# Nikhita Raghunath + +- GitHub: [nikhita](https://github.com/nikhita) +- Twitter: [TheNikhita](https://twitter.com/TheNikhita) +- Employment: Loodse + +## Why Me + +I have been facilitating the Steering Committee with automating and +unifying many organizational processes. Due to this, I am already familiar with +the responsibilities associated with the role and would love to formally help +with governance aspects. + +Being a Steering Committee member sometimes involves doing the "unexciting and +boring" parts of maintaining a project. I have never shied away from such +tasks and have been regularly contributing with lots of "unglamorous" work. + +If given a chance, I would love to do more chopping wood and carrying water +for the project! :) + +## What I do + +- I started contributing two years ago as a +[Google Summer of Code (GSoC) intern](https://github.com/nikhita/gsoc-meta-k8s). +I had a wonderful experience and wanted to give back - now, I help run the +[GSoC](https://github.com/cncf/soc) and [Outreachy](https://git.k8s.io/community/mentoring/outreachy.md) +internship programs for Kubernetes. + +- Currently, I am a Technical Lead for SIG Contributor Experience and +am on the [GitHub Administration Team](https://git.k8s.io/community/github-management#github-administration-team). + +- I can be seen [tinkering with prow plugins](https://github.com/kubernetes/test-infra/pulls?utf8=%E2%9C%93&q=is%3Apr+author%3Anikhita) +and triaging issues to help improve the contributor experience. + +- As a part of SIG API Machinery, I have written [design](https://github.com/kubernetes/community/pull/708/) +[proposals](https://github.com/kubernetes/community/pull/913) +and authored several features regarding CRDs. I also work on the release process +for client-go. + +- I am active in SIG Release and maintain the [publishing bot](https://github.com/kubernetes/publishing-bot) +and the licensing subproject. + +- I also love adding emojis in Slack and GitHub reviews so that it remains a +friendly environment for everyone! :rainbow: + +## What I will do + +- Nurture an inclusive, diverse, empathetic and open community. +- Drive staffing efforts towards unowned areas in the project +to improve the overall project stability. +- Improve reviewer/approver scalability and facilitation of knowledge transfer +to prevent contributor burnout, and to enable and empower part-time contributors. diff --git a/events/elections/2019/parispittman.md b/events/elections/2019/parispittman.md new file mode 100644 index 00000000..1572119d --- /dev/null +++ b/events/elections/2019/parispittman.md @@ -0,0 +1,44 @@ +:woman_technologist: github +[@parispittman] +:bird: twitter: +[parisinbmore@] +:hash: slack: `paris` + +## Contributions + +- Co-Chair, [Contributor Experience], 22 months +- Subproject Owner: + - [contributor events] (summits, elections); + - community management ([operational tactics], [guidelines], and policies aligned with [governance docs] (meetings, communication, etc.) for 40+ community groups: SIGs, WGs, committees, and user groups). I call it the transparency pipelines. :smile: + - [mentoring] + (outreachy, #meet-our-contributors, onsite sessions at KubeCon, group mentoring, empowering SIGs to create shadow roles/teams, hands on learning, and more); +- Member of first [Kubernetes Code of Conduct Committee] +- Work with Steering and/or CNCF directly on funding, process improvements, and contributor events and needs. Proposed and advocated for a contributor summit sustainability plan for a funding model that allows us to have logo free spaces among other things which aligns with our community > product or company [values]. +- I've never missed a pubic steering committee meeting to date; +I try to provide context to decision makers. + +:sparkles: tl;dr: focus on governance operations, contributor growth, advocating for contributor matters to CNCF and Steering, and trying to figure out how to glue it all together. :sparkles: + + +## What I’ll do :bowtie: +:checkered_flag: Continue to uphold the [values], +:checkered_flag: Continue to clean up governance documentation, educate our large contributor base on governance topics, +:checkered_flag: Encourage more dialogue with the steering committee and members of the community; +:checkered_flag: Continue to work on project wide communications, like the [Need to Know Chairs] email, but at a steering committee level +:checkered_flag: Delegate decision making to the appropriate owners and/or SIGs or work to ensure there is a communicated decision making path with the committee on unresolved matters + + +## Where I work +Google + +[@parispittman]: https://github.com/ +[parisinbmore@]: https://twitter.com/parisinbmore +[Contributor Experience]: https://github.com/kubernetes/community/blob/master/sig-contributor-experience/charter.md +[contributor events]: https://github.com/kubernetes/community/tree/master/events +[mentoring]: https://github.com/kubernetes/community/tree/master/mentoring +[operational tactics]: https://github.com/kubernetes/community/blob/master/sig-wg-lifecycle.md +[guidelines]: https://github.com/kubernetes/community/tree/master/communication +[governance docs]: https://github.com/kubernetes/community/blob/master/committee-steering/governance/sig-governance.md +[Kubernetes Code of Conduct Committee]: https://github.com/kubernetes/community/tree/master/committee-code-of-conduct +[values]: https://github.com/kubernetes/community/blob/master/values.md +[Need to Know Chairs]: https://docs.google.com/document/d/1ivmV-ouim7YcTnmv21m0pP6prmj-FFZxcRBuWbT706c/edit?usp=sharing diff --git a/events/elections/2019/pengfeini.md b/events/elections/2019/pengfeini.md new file mode 100644 index 00000000..5422457e --- /dev/null +++ b/events/elections/2019/pengfeini.md @@ -0,0 +1,21 @@ +# Pengfei Ni + +I'm [@feiskyer](https://github.com/feiskyer) on Github and @feisky on Slack/Twitter. + +## What I've Done + +I've been contributing to Kubernetes project since 2015 and is one of the Kubernetes maintainers. What I've done mainly includes: + +* I'm actively contributing to SIGs like Node, Cloud Provider, Windows, Network, Autoscaling etc. +* I'm patch release manager since 1.12. +* I've also been mentors for Google Summer of Code and advocating Kubernetes in China. I've written an open sourced Kubernetes [handbook](https://github.com/feiskyer/kubernetes-handbook). + +## What I'll Do + +* Ensure Kubernetes remains fun for new contributors and improve participation of individuals +* Establish best practices for production scenarios and evolve Kubernetes for real world requirements +* Drive an inclusive, diverse, and open community + +## Where I work + +Microsoft diff --git a/events/elections/2019/stephenaugustus.md b/events/elections/2019/stephenaugustus.md new file mode 100644 index 00000000..303809a7 --- /dev/null +++ b/events/elections/2019/stephenaugustus.md @@ -0,0 +1,60 @@ +# Stephen Augustus + +## Let's connect! + +I'm [@justaugustus] on GitHub, Kubernetes Slack, and CNCF Slack. + +Reach me on the internet: + +- [Twitter] +- [LinkedIn] +- [Keybase] +- [just.agst.us] + +## How I serve the community... + +- SIG Release + - SIG Release Chair + - Release Manager + - Founder of the Release Engineering and Licensing subprojects + - Former Release Team member +- SIG PM + - SIG PM Chair + - Primary driver of the [Kubernetes Enhancements Proposals (KEP)][KEP] process + - CNCF End User Community presenter +- SIG Azure + - Emeritus SIG Azure Chair + - Primary maintainer of [Cluster API Azure][capz] +- SIG Contributor Experience + - [New Membership Coordinator][nmc] (GitHub Management subproject) + +I was also a recipient of the 2018 Chop Wood / Carry Water award. + +## What I plan to do as a Steering Committee member... + +In all I do, I try my best to find ways to improve the project through understanding and elucidating our governance principles. + +I've had the opportunity to demonstrate my belief in and the value of developing project-wide process through my continued work in horizontal SIGs, and I believe that Steering is the next logical place to serve. + +My continued goals (on or off Steering) include: + +- Nurturing efforts that support underrepresented / marginalized groups in technology +- Encouraging the growth of new project leaders, through both example and active mentorship +- Removing friction from the contribution process, especially for new contributors +- Maturing processes that increase our reviewer / approver base +- Driving deeper adoption of the [KEP] process project-wide + +## Where I work... + +VMware + +--- + +[capz]: https://sigs.k8s.io/cluster-api-provider-azure +[@justaugustus]: https://github.com/justaugustus +[just.agst.us]: https://just.agst.us/ +[KEP]: https://git.k8s.io/enhancements/keps +[Keybase]: https://keybase.io/justaugustus +[LinkedIn]: https://www.linkedin.com/in/stephenaugustus +[nmc]: https://git.k8s.io/community/github-management#new-membership-coordinator +[Twitter]: https://twitter.com/stephenaugustus diff --git a/events/elections/2019/vallerylancey.md b/events/elections/2019/vallerylancey.md new file mode 100644 index 00000000..c123677c --- /dev/null +++ b/events/elections/2019/vallerylancey.md @@ -0,0 +1,45 @@ +Vallery Lancey +-- +* Slack: vllry +* Github: https://github.com/vllry +* Twitter: https://twitter.com/vllry +* More/misc: https://timewitch.net + +What I've Done +-- +I'm comparably new to Kubernetes upstream; +I started contributing in late 2018 after years of being a user. +I'm currently a part time contributor, and mostly contribute independently. + +I primarily contribute in SIG-Network, where I focus on bugs, code cleanup, and SIG organization. + +I also recently co-founded SIG-Usability, as a SIG lead. + +Aside from those SIGs, you can find me all over the project with the odd PR, bug report, +or community outreach. + +Why I'm Running, And What I'll Do +-- +I care deeply about Kubernetes, and the people behind it. +We are at a crucial time in the project, as we improve our maturity and start to look at what's next. +I'm running because I believe we need all kinds of perspectives and people to make that happen successfully. + +There are 3 areas I want to focus on: reliability, usability, and contributor empowerment. + +I want to incentivize attention and work toward under-prioritized areas of the project +(such as documentation, scalability, and usability). + +I want to help reduce the barriers to new contributors, +especially to allow more part time contributors, like end-users. +If we ensure our users' interests are well represented at the table, +we are more likely to create a valuable and usable Kubernetes. + +Lastly, but most importantly, I will empower my fellow contributors in the project. +To me, the spirit of open source is people coming together, throwing ideas at the wall, +and making the world a better place by collaborating. +I want to do everything I can to foster and protect that spirit in the project, so that individuals can bring their best self - ideas and work - +without being bogged down by corporate interests. + +Where I Work +-- +Lyft diff --git a/events/elections/2019/voters.md b/events/elections/2019/voters.md new file mode 100644 index 00000000..98b4c256 --- /dev/null +++ b/events/elections/2019/voters.md @@ -0,0 +1,900 @@ +## 2019 Steering Committee Election + +### Eligible Voters List + +The eligible voter process can be found in the steering committee [elections.md] +doc. + +- **2019-08-20** - Initial snapshot of DevStats based [eligible voters]. +- **2019-08-26** - Add voters 2019-08-20 - 2019-08-25. +- **2019-08-30** - Add voters 2019-08-26 - 2019-08-29. +- **2019-09-03** - Add voters 2019-08-30 - 2019-09-03. +- **2019-09-09** - Add voters 2019-09-04 - 2019-09-09. + +--- + +### GitHub IDs + +- 11janci +- 2rs2ts +- aanm +- aaron-prindle +- aaronlevy +- Abhik1998 +- achinthagunasekara +- AdamDang +- adelina-t +- Adirio +- adisky +- adohe +- adshmh +- aermakov-zalando +- afbjorklund +- agau4779 +- ahg-g +- ahmedtd +- ahmetb +- aimeeu +- ainmosni +- AishSundar +- ajatprabha +- AkihiroSuda +- akutz +- alculquicondor +- aledbf +- alejandrox1 +- aleksandra-malinowska +- alenkacz +- alexbrand +- alexcontini +- alexeldeib +- alexkursell +- alisondy +- alok87 +- alvaroaleman +- ameukam +- amwat +- amy +- andrewsykim +- andyxning +- andyzhangx +- anfernee +- anguslees +- aniket-s-kulkarni +- answer1991 +- ant31 +- anthonydahanne +- antoineco +- anvithks +- aojea +- aoxn +- apelisse +- aramase +- Arvinderpal +- ash2k +- ashish-amarnath +- ashishranjan738 +- asifdxtreme +- astrieanna +- atoato88 +- Atoms +- aveshagarwal +- avidLearnerInProgress +- awesomenix +- AWKIF +- awly +- balopat +- barney-s +- bart0sh +- bboreham +- bclau +- bene2k1 +- BenHall +- benmoss +- BenTheElder +- bertinatto +- Betula-L +- bgrant0607 +- bigkraig +- bjhaid +- blueelvis +- bowei +- Bradamant3 +- bradhoekstra +- bradtopol +- brahmaroutu +- brancz +- brendandburns +- bruceauyeung +- bsalamat +- bskiba +- bswartz +- Bubblemelon +- caesarxuchao +- calebamiles +- CaoShuFeng +- carolynvs +- caseydavenport +- castrojo +- cblecker +- cclauss +- ccojocar +- cdrage +- CecileRobertMichon +- chadswen +- chakri-nelluri +- changyaowei +- chaosaffe +- chardch +- charrywanganthony +- chases2 +- cheftako +- chendave +- chenliu1993 +- chenopis +- chenrui333 +- chenzhiwei +- childsb +- chrigl +- chris-short +- chrislovecnm +- chrisohaver +- christopherhein +- chrisz100 +- chuckha +- cjcullen +- cji +- cjwagner +- clarketm +- ClaudiaJKang +- claurence +- clyang82 +- cmluciano +- cmoulliard +- codenrhoden +- coderanger +- cody-clark +- coffeepac +- cofyc +- congfairy +- ConnorDoyle +- corneliusweig +- cpanato +- cpu100 +- craiglpeters +- crimsonfaith91 +- cstoku +- cwdsuzhou +- d-nishi +- DaiHao +- daixiang0 +- damemi +- daminisatya +- danehans +- danielqsj +- dankohn +- dannyk81 +- danwinship +- DanyC97 +- darcyllingyan +- darkowlzz +- daschott +- dashpole +- davidewatson +- davidmccormick +- davidxia +- davidz627 +- dcbw +- dchen1107 +- ddebroy +- deads2k +- deepak-vij +- deitch +- dekkagaijin +- denkensk +- derekwaynecarr +- desaintmartin +- detiber +- devaips +- devdattakulkarni +- devkid +- dghubble +- dhellmann +- dholbach +- diazjf +- dims +- DirectXMan12 +- discordianfish +- diversario +- divyenpatel +- dixudx +- dkoshkin +- dlipovetsky +- dlorenc +- Dm3Ch +- dominicgunn +- donbowman +- dougm +- draveness +- drekle +- dricoco +- droot +- droslean +- drubin +- dtaniwaki +- duglin +- dvonthenen +- DylanBLE +- DylanGraham +- easeway +- eduartua +- egernst +- ehashman +- electrocucaracha +- eloyekunle +- ElvinEfendi +- emedina +- enisoc +- enj +- enxebre +- eparis +- EppO +- ereslibre +- erictune +- errordeveloper +- ethan-daocloud +- Ethyling +- fabiand +- fabriziopandini +- fanzhangio +- fatih +- fedebongio +- Fedosin +- feiskyer +- fejta +- feloy +- femrtnz +- fenglixa +- FengyunPan2 +- figo +- fisherxu +- flaper87 +- floreks +- fntlnz +- font +- foxish +- frapposelli +- freehan +- frittentheke +- frobware +- fturib +- fudali113 +- gambol99 +- gaorong +- geekygirldawn +- geojaz +- george-angel +- girikuncoro +- giuseppe +- gjtempleton +- gliush +- glo-pena +- Globegitter +- globervinodhn +- gman0 +- gnufied +- gochist +- gongguan +- goodluckbot +- grantr +- granular-ryanbonham +- grayluck +- GregSilverman +- grosser +- guineveresaenger +- guoshimin +- gyliu513 +- gyuho +- hainesc +- haircommander +- haiyanmeng +- hangyan +- hannibalhuang +- hantaowang +- hardikdr +- harsh-px +- hchenxa +- hello2mao +- hex108 +- hh +- hidekazuna +- hjacobs +- hoegaarden +- hogepodge +- holmsten +- hongkailiu +- hormes +- houjun41544 +- howardjohn +- hoyho +- hpandeycodeit +- hprateek43 +- hswong3i +- Huang-Wei +- humblec +- hzxuzhonghu +- ialidzhikov +- iamemilio +- iamneha +- ianlewis +- ianychoi +- ibrasho +- ibzib +- idealhack +- idvoretskyi +- imjching +- imkin +- immutableT +- imroc +- inductor +- ingvagabund +- interma +- ipuustin +- irfanurrehman +- IronPan +- irvifa +- islinwb +- itowlson +- ivan4th +- ixdy +- j-griffith +- jacksontj +- janetkuo +- janosi +- jaredbhatti +- jarrpa +- jasongwartz +- javier-b-perez +- javisabalete +- jaypipes +- jayunit100 +- jbartosik +- jbeda +- jberkhahn +- jberkus +- jbornemann +- jboyd01 +- jbrette +- jcassee +- jdumars +- jeefy +- Jeffwan +- jennybuckley +- jessfraz +- jfbai +- jhalfmoon +- jiaj12 +- jianglingxia +- jiatongw +- jiaxuanzhou +- jiayingz +- jichenjc +- JieJhih +- jimangel +- jingxu97 +- jjo +- jkaniuk +- jlewi +- joelsmith +- JoelSpeed +- JoeWrightss +- johanneswuerbach +- johnbelamaric +- johnSchnake +- johnsonj +- johscheuer +- jonasrosland +- josedonizetti +- Joseph-Irving +- josephburnett +- joshuacox +- jpbetz +- jsafrane +- jsturtevant +- juandiegopalomino +- juanvallejo +- JuleeB1 +- juliantaylor +- juliohm1978 +- justaugustus +- justinsb +- jygastaud +- k-toyoda-pi +- k82cn +- kacole2 +- kad +- kakts +- karataliu +- kargakis +- KashifSaadat +- Katharine +- kawych +- kbarnard10 +- kbhawkey +- kdada +- kevin-wangzefeng +- kevtaylor +- kfox1111 +- kgolab +- khenidak +- khteh +- kiwik +- Klaven +- klueska +- knight42 +- knightXun +- kondapally1989 +- kow3ns +- kris-nova +- krmayankk +- krzysied +- krzysztof-jastrzebski +- krzyzacy +- ksubrmnn +- kvaps +- kwiesmueller +- lachie83 +- lavalamp +- lbernail +- lblackstone +- leakingtapan +- leblancd +- lichuqiang +- liggitt +- LiliC +- lingxiankong +- linki +- linyouchong +- Lion-Wei +- liqlin2015 +- liranp +- listx +- liu-cong +- liucimin +- Liujingfang1 +- liyanhui1228 +- liyinan926 +- liztio +- llamahunter +- lledru +- lmdaly +- loburm +- logicalhan +- losipiuk +- lpabon +- lubinsz +- LuckySB +- lucperkins +- luksa +- luxas +- M00nF1sh +- m1093782566 +- m1kola +- maciaszczykm +- MaciekPytel +- madhanrm +- Madhu-1 +- magicsong +- makocchi-git +- MAKOSCAFEE +- MalloZup +- marcosdiez +- mariantalla +- markthink +- MarkusTeufelberger +- markyjackson-taulia +- marpaia +- marquiz +- mars1024 +- marun +- mathu97 +- mattfarina +- matthyx +- matti +- mattjmcnaughton +- mattlandis +- mattymo +- mauilion +- max-rocket-internet +- mbohlool +- mborsz +- mcrute +- medmedchiheb +- medyagh +- mengqiy +- MengZn +- mfojtik +- mgdevstack +- mhamdisemah +- MHBauer +- MIBc +- micahhausler +- michaelgugino +- michelle192837 +- michelleN +- michmike +- micw523 +- midnightconman +- miguelbernadi +- mikedanese +- mikesplain +- MikeSpreitzer +- mikeweiwei +- mikkeloscar +- Miouge1 +- mirake +- mirandachrist +- mirwan +- misterikkit +- mistyhacks +- mitar +- mittalyashu +- MJ-CJM +- mkimuram +- mkumatag +- mlmhl +- mm4tt +- mohammedzee1000 +- monopole +- monotek +- mooncak +- Moriadry +- mortent +- morvencao +- moshe010 +- moshloop +- mourya007 +- Mr-Linus +- mrbobbytables +- mrhillsman +- MrHohn +- mrkm4ntr +- mrunalp +- ms4720 +- msau42 +- mszostok +- mtaufen +- mtrmac +- mucahitkurt +- mumoshu +- munnerz +- mvladev +- mwielgus +- mxinden +- mysunshine92 +- mythi +- nak3 +- namreg +- narg95 +- nasa9084 +- ncdc +- nckturner +- Nebulazhang +- neolit123 +- NickrenREN +- nikhita +- nikopen +- nilebox +- nilo19 +- njuettner +- nmiculinic +- nowjean +- nzoueidi +- obitech +- odinuge +- okamototk +- okartau +- oke-py +- onlydole +- onyiny-ang +- oomichi +- openstacker +- oussemos +- oxddr +- oz123 +- p0lyn0mial +- paalkr +- pablochacin +- palnabarun +- parispittman +- PatrickLang +- patsevanton +- paulangton +- PaulFurtado +- paulgmiller +- pbarker +- pdgetrf +- peibingit +- perriea +- petr-muller +- philips +- php-coder +- phyber +- pigletfly +- ping035627 +- Pingan2017 +- piontec +- piotrmiskiewicz +- pires +- pjh +- pmichali +- pmorie +- pohly +- pontiyaraja +- poothia +- prameshj +- prankul88 +- PrasadG193 +- praseodym +- priyawadhwa +- prksu +- prydonius +- pswica +- pwittrock +- pytimer +- Qedrakmar +- qingling128 +- qingsenLi +- qiujian16 +- qmfrederik +- quinton-hoole-2 +- qw1mb0 +- RA489 +- raelga +- Raffo +- RainbowMango +- Rajakavitha1 +- rajansandeep +- Rajat-0 +- rajathagasthya +- rajatjindal +- rajeshdeshpande02 +- ramineni +- ramnar +- ramnes +- Random-Liu +- randomvariable +- ravisantoshgudimetla +- Rawkode +- rbenzair +- rdodev +- rdrgmnzs +- redbaron +- rekcah78 +- remyleone +- RenaudWasTaken +- resouer +- rhatdan +- rhockenbury +- richardmarshall +- ricky1993 +- rifelpet +- rikatz +- ringtail +- ritazh +- riverzhang +- rjbez17 +- rlenferink +- rmb938 +- roberthbailey +- RobertKrawitz +- rojkov +- RonWeber +- rosti +- roycaihw +- roytman +- rphillips +- rptaylor +- rramkumar1 +- rtheis +- rudoi +- runcom +- rverma-nikiai +- ryanmcginnis +- ryanmcnamara +- ryanzidago +- s-ito-ts +- s-urbaniak +- saad-ali +- Sai-Adarsh +- saiyan86 +- SandeepPissay +- saravanan30erd +- saschagrunert +- SataQiu +- sayanarijit +- sbezverk +- sboeuf +- sbueringer +- schylek +- scottilee +- seanmalloy +- seans3 +- sebastienvas +- seh +- seokho-son +- serathius +- sethmccombs +- sethp-nr +- sethpollack +- sflxn +- sftim +- sfzylad +- sharifelgamal +- shashank0202 +- shashidharatd +- shavidissa +- shawn-hurley +- shivramsrivastava +- shiyan2016 +- Shnatsel +- shu-mutou +- shubheksha +- shyamjvs +- SidakM +- sidharthsurana +- silasbw +- simplytunde +- sjenning +- smarterclayton +- Sn0rt +- snowplayfire +- soggiest +- sohankunkerkar +- soltysh +- spencerhance +- spiffxp +- spzala +- squeed +- srampal +- stafot +- stanciuoctavian +- staticdev +- stealthybox +- steuhs +- stevekuznetsov +- steven-sheehy +- steveperry-53 +- stevesloka +- stewart-yu +- stlaz +- Stono +- stp-ip +- sttts +- subramanian-neelakantan +- sudeshsh +- superbrothers +- SupriyaSirbi +- surajssd +- sylr +- szuecs +- tallclair +- tamalsaha +- tanshanshan +- tao12345666333 +- taragu +- tariq1890 +- tashimi +- tedyu +- tengqm +- tfogo +- tg123 +- tghartland +- thandayuthapani +- thecrudge +- thockin +- tianshapjq +- tiffanyfay +- timothysc +- tizhou86 +- tnir +- tnozicka +- TommyLike +- tomplus +- TomSweeneyRedHat +- tony-yang +- tossmilestone +- towca +- tpepper +- TravisBuddy +- truongnh1992 +- tsmetana +- tstromberg +- tsuna +- uablrek +- umohnani8 +- verb +- verult +- verwilst +- vikaschoudhary16 +- vinaykul +- vincepri +- vishh +- vivekbagade +- viviyww +- vladimirvivien +- vllry +- vorburger +- vrothberg +- wackxu +- wanghh2000 +- wangxy518 +- wangzhen127 +- WanLinghao +- warmchang +- wayilau +- wayt +- wenjiaswe +- wgliang +- wilmardo +- wk8 +- wking +- wojtek-t +- wongma7 +- woopstar +- x13n +- xiangpengzhao +- xiaoanyunfei +- xiaoxubeii +- xichengliudui +- xing-yang +- xlgao-zju +- xmudrii +- xueweiz +- xunpan +- xychu +- yagonobre +- yamt +- yanghaichao12 +- yashbhutwala +- yastij +- yeya24 +- yguo0905 +- ykakarap +- yliaog +- yoonian +- YoubingLi +- youngnick +- YouthLab +- yqwang-ms +- yuchengwu +- yue9944882 +- yuexiao-wang +- yujuhong +- yujunz +- yuwenma +- yuxiangqian +- zacharya +- zacharysarah +- zer0big +- zerkms +- ZeroMagic +- zetaab +- zgfh +- zhan849 +- zhangmingld +- zhangqx2010 +- zhangxiaoyu-zidif +- zhouhaibing089 +- zhucan +- zjj2wry +- zouyee +- ZP-AlwaysWin +- zparnold +- zq-david-wang +- zrdaley +- zvonkok +- Zyqsempai + +[elections.md]: https://git.k8s.io/steering/elections.md +[eligible voters]: https://git.k8s.io/steering/elections.md#eligibility-for-voting diff --git a/events/elections/README.md b/events/elections/README.md index f3ad473a..dbae60af 100644 --- a/events/elections/README.md +++ b/events/elections/README.md @@ -32,10 +32,13 @@ eligibility for voting, eligibility for candidacy, maximal representation, etc. - Make github.com/kubernetes/community/elections/$YEAR/README.md, this is the voter’s guide. - Copy over the voter’s guide from the previous year. The voter’s guide is the single source of truth for the election that year! All announcements and notices should link to this document. - Update with new dates, candidates, and procedures (if necessary). + - Make github.com/kubernetes/community/elections/$YEAR/OWNERS with all the election officers for the election year. - Make github.com/kubernetes/community/elections/$YEAR/voters.md - - Initial list is generated via the [eligibilty for voting requirements][eligibile to vote] + - Initial list is generated via the [eligibility for voting requirements][eligible to vote] - Officers will update this list as voters submit the voting exemption form. - Announce to the candidates to submit PRs with their platform statement (if they desire), 300 word limit. Each platform document lives in the elections/$YEAR directory, with the voter’s guide (README.md) acting as the index. + - Ensure officers are members of election@kubernetes.io Google Group and that prior officers are removed. + - Start a shared postmortem document to log the lessons learned so this process can be improved. 2. Announce voting schedule to community @@ -47,23 +50,29 @@ eligibility for voting, eligibility for candidacy, maximal representation, etc. - Use [CIVS](http://civs.cs.cornell.edu/civs_create.html) to create the election, which CIVS calls a poll. Once you send out the ballots you cannot UNSEND the emails, ensure everything in the form is correct! - Name of the poll - “Kubernetes Steering Committee Election for $YEAR” - Name of supervisor - “Kubernetes Election Officers” -- Email - community@kubernetes.io : Googlegroups doesn’t work here. This mail should resolve to members of the steering committee AND the election officers. +- Email - election@kubernetes.io : Googlegroups doesn’t work here. This mail should resolve to the election officers. - Date and Time: Write in the date and time the election will stop. This field is not programmatic, the election is stopped by hand, so you can write this in plain text. -- Description: This election is to nominate the steering committee for the Kubernetes project. Select the three(3) candidates, by order of preference. Please see the voter's guide for more information. PLEASE NOTE: "No opinion" is also a voting option if you do not feel comfortable ranking every single candidate. +- Description: Use the following text, modify it for either 3 or 4 positions, depending on the amount of open seats: This election is to nominate the steering committee for the Kubernetes project. Order the candidates by preference, the top $NUMBER candidates will be selected. Please see the voter's guide for more information. PLEASE NOTE: "No opinion" is also a voting option if you do not feel comfortable ranking every single candidate. - Add the candidate list to the form - How many choices will win: This number needs to be set to the amount of open seats of a given election - More options, check the boxes for: - Do not release results to all voters. - Enable detailed ballot reporting. - Allow voters to select “no opinion” for some choices. -- Click create poll, this will send community@kubernetes.io an email with instructions. +- Click create poll, this will send election@kubernetes.io an email with instructions. - It will send you a link to “Poll Control”, bookmark this generated page as this is where you will add voters and also resend ballots to people if their ballot gets lost or filtered. - This page is where the “Start Poll” and “Stop Poll” buttons are, start the poll. -- Paste in the registered voters and click add voters. - - It will mail the ballots to the participants. - - It does duplicate detection so multiple entries are fine. +- WARNING: This is the point of no return: + - Paste in the registered voters and click add voters. + - It will mail the ballots to the participants. + - It does duplicate detection so multiple entries are fine. + - This might take a while and the web page will not update, this has taken up to 10m in the past as it's sending each ballot. Don't panic or refresh the page. - Leave the poll open for the duration of voting. - Remember to send a 24 hour reminder before closing the poll. + - Click "Stop poll" at the end of the election, wait a minute then refresh the page for results. + - Select "Condorcet IRV" on the right hand side of the page to select the results method. + - Mail results of the election to the steering committee private list and await instructions. +- Push election results into the community repo under events/elections _after_ the Steering Commmittee has announced the results. ## Roles and Responsibilities: @@ -77,9 +86,9 @@ eligibility for voting, eligibility for candidacy, maximal representation, etc. ### Election Officers -- Must be [eligible to vote][eligible to vote] +- Must be [eligible to vote] - Cannot be running for office in the current election -- Cannot be a current member of the steering committee +- Cannot be a current member of the steering committee that is a candidate in the election or whose term extends beyond the election period - [Recuse themselves from public election activities][election-recusal] except those required to run the election - May vote - May answer questions about general election specifics, ie: @@ -108,5 +117,6 @@ eligibility for voting, eligibility for candidacy, maximal representation, etc. - It is impossible for the election officers to see the results of the election until the election ends; for purposes of transparency with the community it is encouraged to release some statistics during the election (ie. “65% of the community has voted so far!”) - Ensure that the election results are handed over to the steering committee. -[eligibile to vote]: https://github.com/kubernetes/steering/blob/master/elections.md#elegibility-for-voting + +[eligible to vote]: https://github.com/kubernetes/steering/blob/master/elections.md#eligibility-for-voting [election-recusal]: https://github.com/kubernetes/steering/blob/master/elections.md#steering-committee-and-election-officer-recusal diff --git a/events/events-team/README.md b/events/events-team/README.md index 1760aaed..3deea959 100644 --- a/events/events-team/README.md +++ b/events/events-team/README.md @@ -14,7 +14,7 @@ the logistical and operational pieces together. | Role | Handbook | Notes | |---------------------------------------------|-------------------------|-----------------------------------------------------| | Events Lead/Chair | [Event Lead Handbook] | May have more than one | -| Project Manager | TODO | | +| Project Manager | [Project Manager Handbook] | | | Registration Lead | [Registration Handbook] | | | Marketing Lead | [Marketing Handbook] | | | CNCF Events Manager | CNCF | CNCF will staff this | @@ -28,10 +28,7 @@ the logistical and operational pieces together. [Event Lead Handbook] ### Project Manager -Triage project board, related issues, and PRs -Identify holes in tasks and assign/ask for volunteers; coordinate with lead -Track ongoing blockers for the event -Keep timelines +[Project Manager Handbook] ### Accessibility, Inclusiveness, and Diversity Reach out to underrepresented local groups to advertise new contributor workshop - examples: GoBridge, Women Who Code @@ -63,6 +60,7 @@ We don't coordinate meetups. CNCF leads these efforts and their information can [registration handbook]: ./registration/README.md [best-practices.md]: ./best-practices.md [here]: https://github.com/cncf/meetups -[Event Lead Handbook]: /events-lead.md +[Event Lead Handbook]: ./events-lead.md [Marketing Handbook]: ./marketing/README.md -[Content Lead Handbook]: /content-lead.md +[Content Lead Handbook]: ./content-lead.md +[Project Manager Handbook]: ./projectmanagement/README.md diff --git a/events/events-team/best-practices.md b/events/events-team/best-practices.md index 630aad6d..b8aaa338 100644 --- a/events/events-team/best-practices.md +++ b/events/events-team/best-practices.md @@ -1,3 +1,5 @@ +# Best pracices for running a Kubernetes Contributor Summit + New home for best practices, process documentation, and other artifacts that detail out the 'how to' of running a Kubernetes contributor summit. //TODO @@ -5,7 +7,23 @@ general clean up; style guide check add more reference links potentially separate into multiple docs or re-organize -## Kick Off +- [Kickoff](#kickoff) +- [Project Management](#project-management) +- [Registration](#registration) +- [Badges](#badges) +- [Venue](#venue) +- [Social / Celebration](#social-celebration) +- [Communication and Advertising](#communication-and-advertising) +- [Sponsorship](#sponsorship) +- [Swag / T-Shirts](#swag-t-shirts) +- [Day of Event Staff](#day-off-event-staff) +- [Transparency](#transparency) +- [Signage](#signage) +- [Contributor Awards](#contributor-awards) +- [Survey](#survey) +- [Resources](#resources) + +## Kickoff Event lead will start the event strategy doc that will outline goals and content strategy with content team. This doc should first be circulated within contributor experience for the [event OWNERs] to review and for the SIG to weigh in. Next, steering committee @@ -14,10 +32,10 @@ content for most of different types of contributors that we have. [Seattle 2018 doc] -A GitHub page in the events section will be created to capture history, the team, and other basic information. [(example)] This will not be used as the event website. +A GitHub repo in the events section will be created to capture history, the team, and other basic information. [(example)] This will not be used as the event website. ## Project Management -Each event will have a [project board] created. The incoming team will need to create a label `area/cityfoo-summit` and any issue or PR related to all summits will have the label `area/contributor-summit`. +Each event will have a [project board] created. The incoming team will need to create a label `area/regionfoo-summit` and any issue or PR related to all summits will have the label `area/contributor-summit`. The event team can decide if they want a dedicated project manager role at the time of planning. @@ -40,17 +58,17 @@ Accessibility If the event is being held during KubeCon/CloudNativeCon it's important to get a space that is not with other co-located events to avoid confusion like we have had in the past. -## Social -Hallway Track is listed as the favorite track at every event. The social is a longer hallway track that doesn't interfere with content. The social should have fun activities! +## Social / Celebration +The Hallway Track is listed as the favorite track at every event. The social/celebration is a longer hallway track that doesn't interfere with content. The social should have fun activities! ## Communication and Advertising -kubernetes-dev@googlegroups.com is our artery for contributor communication and should be the main news network for contributor events. +[kubernetes-dev@googlegroups.com][k-dev] is our artery for contributor communication and should be the main news network for contributor events. Other channels: -Slack - #contributor-summit, #kubecon, #kubernetes-dev -Twitter -Kubernetes blog -discuss.kubernetes.io -Thursday Community Meetings +Slack - [#contributor-summit], [#kubecon], [#kubernetes-dev] +[Twitter] +[Kubernetes blog] +[discuss.kubernetes.io] +[Weekly Thursday Community Meetings][community-meetings] ## Sponsorship We like to keep our events clear from sponsorships as it distracts from the mission. @@ -58,8 +76,9 @@ We like to keep our events clear from sponsorships as it distracts from the miss ## Swag / T-Shirts What messaging do we want to convey with the swag? thockin has designed all contributor summit NA shirts and jberkus for Shanghai; both have done an EU shirt + Best practices: -Order shirts 10 days before the event to make sure everyone gets the size that they want unless there are custom/shipping issues. +Order shirts well in advance before the event to make sure everyone gets the size that they want in case there are custom/shipping issues. Past brand that works well: Dakota. Previous brands had odd sizing and community feedback matched that. ## Day of Event Staff @@ -98,3 +117,11 @@ Links to docs that aren't a fit for markdown: [blog post example]: https://kubernetes.io/blog/2018/10/16/kubernetes-2018-north-american-contributor-summit/ [welcome slides]: https://docs.google.com/presentation/d/11eDR_0Dl_MBbeoMDF_mQaJC3shnnd6buhIVei2Ke0SM/edit#slide=id.p [project board]: https://github.com/orgs/kubernetes/projects +[k-dev]: (https://groups.google.com/forum/#!forum/kubernetes-dev) +[#contributor-summit]: (https://kubernetes.slack.com/messages/contributor-summit) +[#kubecon]: (https://kubernetes.slack.com/messages/kubecon) +[#kubernetes-dev]: (https://kubernetes.slack.com/messages/kubernetes-dev) +[Twitter]: (https://twitter.com/kubernetesio) +[Kubernetes blog]: (https://kubernetes.io/blog/) +[discuss.kubernetes.io]: (discuss.kubernetes.io) +[community-meetings]: (https://github.com/kubernetes/community/blob/master/events/community-meeting.md) diff --git a/events/events-team/content-lead.md b/events/events-team/content-lead.md deleted file mode 100644 index 79595fad..00000000 --- a/events/events-team/content-lead.md +++ /dev/null @@ -1,49 +0,0 @@ -# Content Lead Handbook - -## Overview -Lead and execute on the overall content for all personas of contributors based on -goals set forth - -## Skills and Qualifications - -TODO - -## Activities - -Work with Lead on content strategy -Use previous surveys, events, focus groups, and anything else needed to determine content ideas -If an unconference is a part of the day, recruit a coordinator to help plan and facilitate -Help keep event site up to date with the most recent content changes -Decide what trainings should be provided that would be valuable in a face to face setting (example: SIG Chair Training) -Coordinate speakers, teachers, and folks to deliver the content - -## Time Commitment - -TODO - - -======= - -New Contributor Content Lead - -## Overview - -TODO - -## Skills and Qualifications - -TODO - -## Activities - -Make modifications and continuous improvements to the new contributor workshop template -Incorporate the new contributor playground -Teach the class or recruit teachers and teachers assistants -Work with Lead on determining the capacity and how many sessions will run -Determine if different levels need to be offered -Organize SIG Meet and Greet (may be a different role to be determined by core team) - - -## Time Commitment - -TODO diff --git a/events/events-team/content/README.md b/events/events-team/content/README.md new file mode 100644 index 00000000..e8b42d8c --- /dev/null +++ b/events/events-team/content/README.md @@ -0,0 +1,34 @@ +# Content SubTeam + +The Content subteam of the events team is responsible for programming and content for periods +of the contributor summit. + +The membership of this team depends on the activities that will actually take place during that +particular Contributor Summit. As such, there are a variety of roles, but not all roles +will be present for all Summits. The mix of content is generally determined by the Content Coordinator +and the Event Lead in the first 2-3 weeks of event planning, so many of these roles +will be chosen after that. + +All roles may have shadows. Click the role name for that role's Handbook. + +| Role | Needed For | Notes | +|------|------|------| +| [Content Coordinator] | Almost all Summits | | +| [New Contributor Workshop] Lead | Summits with an NCW track | Also some standalone NCW events | +| [Programmed Sessions] Lead | Summits with an advance session submission process | | +| [Contributor Workshops] Lead | Some Summits with a session proposal process | | +| [Unconference] Lead | Summits with an Unconference Track | | +| [SIG Meet & Greet] Lead | If including a SIG M&G at the end of the NCW | | +| [SIG Face-to-Face] Lead | If there will be SIG F2F sessions | | +| [Social Event Content] Lead | Summits with a Social Event | | +| [Awards Ceremony] Leads | If giving contributor awards | | + +[Content Coordinator]: ./content-coordinator.md +[New Contributor Workshop]: ./new-contributor.md +[Programmed Sessions]: ./session-manager.md +[Unconference]: ./unconference.md +[Contributor Workshops]: ./contributor-workshops.md +[SIG Face-to-Face]: ./sig-contrib-events.md +[SIG Meet & Greet]: ./sig-contrib-events.md +[Social Event Content]: ./social-content.md +[Awards Ceremony]: ./awards-ceremony.md diff --git a/events/events-team/content/awards-ceremony.md b/events/events-team/content/awards-ceremony.md new file mode 100644 index 00000000..222bfa33 --- /dev/null +++ b/events/events-team/content/awards-ceremony.md @@ -0,0 +1,19 @@ +# Awards Ceremony Handbook + +## Overview + +The Awards Ceremony coordinators collect information on desired awards and nominees from the community, determine the form and schedule for the community awards, and ensure that awarding community members and award recipients are present for the ceremony. They also source award trophies or tokens. Because of the nature of these awards, these activities need to be carried out semi-confidentially in order to ensure that award recipients are not prematurely notified. + +## Skills and Qualifications + +TODO + +## Activities + +WIP + +## Time Commitment + +TODO + +## Instructions and Tips for Specific Tasks diff --git a/events/events-team/content/content-coordinator.md b/events/events-team/content/content-coordinator.md new file mode 100644 index 00000000..b2871861 --- /dev/null +++ b/events/events-team/content/content-coordinator.md @@ -0,0 +1,43 @@ +# Content Coordinator Handbook + +## Overview + +The Content Coordinator leads and manages the content programs associated with the event. They work with the Event Lead to determine which content programs the event will have, recruits the content leads and shadows for each content program, and coordinates between the programs to make sure they all work together. They are also a backup for any content lead who is unable to fulfill their duties, and execute any content tasks that don't fall to the content program leads. + +## Skills and Qualifications + +TODO + +## Activities + +The following list of activities is for a large Contributor Summit with multiple Content Programs. For smaller summits, many of these activities will be unnecessary, and timelines can be shortened. + +### Weeks 1-3 + +* Work with Event Lead to determine Content Strategy for the event. +* Determine what Content Programs the event will have. +* Recruit Leads & Shadows for each Content Program. +* Give Event Lead/Marketing Lead content solitication for "save the date" email. +* If having preprogrammed content, draft application form for submissions. + +### Weeks 3-6 + +* Issue Call for Sessions if having preprogrammed content. +* Organize Content Team to solicit SIGs/WGs/Teams directly for content. +* + +WIP + +Work with Lead on content strategy +Use previous surveys, events, focus groups, and anything else needed to determine content ideas +If an unconference is a part of the day, recruit a coordinator to help plan and facilitate +Help keep event site up to date with the most recent content changes +Decide what trainings should be provided that would be valuable in a face to face setting (example: SIG Chair Training) +Coordinate speakers, teachers, and folks to deliver the content + +## Time Commitment + +TODO + + +======= diff --git a/events/events-team/content/contributor-workshops.md b/events/events-team/content/contributor-workshops.md new file mode 100644 index 00000000..d09e8727 --- /dev/null +++ b/events/events-team/content/contributor-workshops.md @@ -0,0 +1,21 @@ +# Contributor Workshops Handbook + +## Overview + +The Contributor Workshop team recruits, selects, and schedules "advanced" workshops for current Kubernetes contributors to improve their skills during the Contributor Summit. Such workshops might include hands-on demonstrations of build or testing tasks, live interactive reviews of PRs, KEPs, API changes, or similar, documentation writing, or other long-form activities involving some hands-on-keyboard participation. + +This is distinct from the [New Contributor and Intermediate Contributor workshops](./new-contributor.md), although the CW team will work with that team. + +## Skills and Qualifications + +TODO + +## Activities + +WIP + +## Time Commitment + +TODO + +## Instructions and Tips for Specific Tasks diff --git a/events/events-team/content/new-contributor.md b/events/events-team/content/new-contributor.md new file mode 100644 index 00000000..56bce785 --- /dev/null +++ b/events/events-team/content/new-contributor.md @@ -0,0 +1,41 @@ +# New Contributor Content Lead + +## Overview +The New Contributor Content Lead is in charge of planning and executing the New Contributor Workshop at the Kubernetes Contributor Summit. They will coordinate with the overall Events Team and the organizers of related activities aimed at new contributors. + +## Skills and Qualifications + +The New Contributor Content Lead must be a current, active Kubernetes contributor who is knowledgeable of the community and organizational structure of the Kubernetes project, as well as familiar with building and developing Kubernetes. +They should have experience and be comfortable with teaching in a workshop setting and presenting interactively in front of an audience. +Additionally, they must be able to relate to and empathize with newcomers of many different experience levels. +As this role is part of a subproject of SIG-contributor-experience, the New Contributor Content Lead must be a member of SIG-contributor-experience. + +## Activities + +*These tasks reflect a rough timeline leading from the end of the previous Contributor Summit to the currently planned one.* +- Attend event planning meetings in preparation for the Contributor Summit, where applicable +- Create a Workshop Content Proposal and link in an Issue to k/community: + - determine sessions and their overall topic (e.g. How We Communicate, Code Base Walkthrough, etc) + - determine what difficulty/experience levels will be offered, if any, and coordinate with Lead + - determine workshop capacity, and coordinate with Lead + - determine room requirements (size, number, table/chair layout, A/V) and coordinate with the planning team +- Coordinate with New Contributor Content Shadows to prepare them for leading this role. +- Recruit and coordinate with workshop teachers for any sessions/topics you do not wish to teach yourself (e.g. invite someone to speak on "Communication in the Kubernetes Project"). +- Make modifications and continuous improvements to the new contributor workshop template. +Incorporate feedback from previous New Contributor Workshops. +Shadows and co-presenters are expected to assist and review these updates. +[Past presentations are linked here](https://github.com/cncf/presentations/tree/master/kubernetes) - please make a copy of the existing deck before updating/editing. +- Work with Registration to: + - disseminate course materials (slides) in advance + - ensure participants sign the CLA + - ensure attendees meet technical and experience requirements for their course + - obtain a comprehensive list of names, emails, and github handles +- Incorporate the new contributor playground into the workshop. +Create a New Contributor Workshop folder specific to this event, with teachers' and participants' github handles in the OWNERS file - [here is an example](sigs.k8s.io/contributor-playground/seattle) +- Coordinate with the [SIG Meet and Greet organizer](sig-contrib-events.md) (may be a different role to be determined by core team) +- Ensure to advertise the SIG-Intros +- Solicit feedback from workshop participants + +## Time Commitment + +1-2 hours/week most of the time, 4-5 in the weeks leading up to KubeCon, depending on previous teaching/shadowing experience. diff --git a/events/events-team/content/session-manager.md b/events/events-team/content/session-manager.md new file mode 100644 index 00000000..817e71f6 --- /dev/null +++ b/events/events-team/content/session-manager.md @@ -0,0 +1,21 @@ +# Programmed Sessions Handbook + +## Overview + +The Programmed Sessions lead recruits, selects, and schedules planned short-form sessions for the Contributor Summit. These sessions cover topics of interest to regular contributors, such as contribution tasks, project changes, discussions of architectural changes and features, mentorship and sustainability, or testing and conformance. + +This is distinct from Contributor Workshops (which are long-form, always-interactive sessions), and an Unconference, which are sessions NOT selected in advance. If the Summit has those types of sessions as well, the PS team will coordinate with other teams to work out a balanced schedule. + +## Skills and Qualifications + +TODO + +## Activities + +WIP + +## Time Commitment + +TODO + +## Instructions and Tips for Specific Tasks diff --git a/events/events-team/content/sig-contrib-events.md b/events/events-team/content/sig-contrib-events.md new file mode 100644 index 00000000..f37d1960 --- /dev/null +++ b/events/events-team/content/sig-contrib-events.md @@ -0,0 +1,76 @@ +# SIG Contributor Events + +This document defines planning and activities needed to organize the SIG Meet and Greet and SIG F2F activities at Contributor Summits. + +- [SIG Meet and Greet](#sig-meet-and-greet) +- [SIG F2Fs](#sig-f2fs) + +## Skills and Qualifications + +- Familiarity with the SIGs, including understanding how SIGs are related to each other and any likely overlap in membership. +- Good organizational skills, including being able to relentlessly follow up and get responses if SIGs are unresponsive. + +## SIG Meet and Greet + +### Overview + +The SIG Meet and Greet is a great place for SIGs and WGs to recruit contributors, and +every SIG / WG should send one or more experienced members to the Meet and Greet. + +As part of the Contributor Summit SIG Meet and Greet, SIGs / WGs will have easy access to + +* experienced Kubernetes contributors who are interested in expanding their involvement into new SIGs / WGs. +* new contributors, many of whom have extensive experience from other projects, and +are excited to get started in Kubernetes after attending a New Contributor Workshop. + +As SIG Meet and Greet Lead, you are responsible for contacting each SIG, encouraging them to participate, +and facilitating the session at the Contributor Summit. + +Time Commitment + + - 1-2 hours a week from 3 months in + - 2-3 hours a week in the month leading up to the event + +### Responsibilities + +- Create a form to track the details about each SIG / WG representative. See the example from the [2019 San Diego SIG M&G](https://forms.gle/hxx1qz8XtwtXEBMm8) for more details about what information to gather. +- Contact each SIG / WG and ask them to have 1 or more experienced members complete the form and commit to represent the group at the Meet and Greet. +- Expect to spend a fair amount of time following up with SIGs and WGs to get the name of their representatives. +- Add these representatives to a calendar notice for the SIG Meet and Greet. +- Make sure that we have table stands and buttons for each SIG that are organized and easy to hand out at the beginning of the event. +- Recruit a few volunteers to distribute table stands and buttons and to help SIGs / contributors find the right tables. +- Make a short announcement at the beginning with an overview of how it works. +- Walk around the room to help lost contributors get matched up with a SIG table. + +### Documentation + +- [SIG Meet and Greet Barcelona 2019](https://github.com/kubernetes/community/issues/3516) + +## SIG F2Fs + +### Overview + +At *some* Contributor Summits, we will have space available for SIGs to hold in person meetings for contributors. In most cases, these +are like the normal SIG Zoom meetings, but in person. Note that these meetings are +just for SIG contributors, and don't replace the intro and deep dive meetings held during KubeCon for users. + +As SIG F2F Lead, you are responsible for reaching out to SIGs to find out which ones would like to hold meetings, and then managing the +space available to make sure that we stop accepting new requests when we run out of space. + +Time Commitment + + - 1-3 hours a week in the 2 months prior to the event. + +### Responsibilities + +- Put together a request form to gather requests and find out how much time they require and how many people they expect. +- Promote this request form to the SIGs in our regular SIG chair emails. +- Work with the event staff to understand the space available. +- Coordinate with the New Contributor Workshop and other Contributor Summit organizers to make sure that these meetings do not overlap with other activities, especially the SIG Meet and Greet. +- Place SIGs in rooms at specific times being careful to put SIGs at different times if they are likely to overlap in membership. +- Communicate room placement / times back to the SIGs and ask them to promote their meeting within their SIG. +- Make sure that the F2F activities are on the schedule with a brief description of the purpose of these meetings. + +### Documentation + +- [SIG F2F Guidelines for Barcelona](https://github.com/kubernetes/community/blob/master/events/2019/05-contributor-summit/sig-f2f-guidelines.md) diff --git a/events/events-team/content/social-content.md b/events/events-team/content/social-content.md new file mode 100644 index 00000000..50d8d9d2 --- /dev/null +++ b/events/events-team/content/social-content.md @@ -0,0 +1,19 @@ +# Social Event Content Handbook + +## Overview + +The Social Event Content Lead is responsible for arranging and recruiting activities and/or displays during the Social Event for the Summit. The content should celebrate contributing to Kubernetes and/or help contributors meet and enjoy time together. These may include slide shows, presentations, guided socialization exercises, or even music or art. + +## Skills and Qualifications + +TODO + +## Activities + +WIP + +## Time Commitment + +TODO + +## Instructions and Tips for Specific Tasks diff --git a/events/events-team/content/unconference.md b/events/events-team/content/unconference.md new file mode 100644 index 00000000..faabb2f4 --- /dev/null +++ b/events/events-team/content/unconference.md @@ -0,0 +1,45 @@ +# Unconference Handbook + +## Overview + +The Unconference Lead is responsible for managing the unconference process, from session proposals to group selection to scheduling unconference sessions. The lead must decide how session proposal and selection will work at this particular summit, and then carry it out, driving participation as well. + +If there are other types of content at the Summit, the Unconf lead will coordinate on sessions and schedules. + +## Skills and Qualifications + +The desire to help and coordinate. Of course it is helpful to have been a part of previous unconferences. +See [kubecon 2019](https://docs.google.com/document/d/1oZF8ZYzpVbickinDXyKyWk1WdhTkVBEP5FHdcdIJnvw/edit?usp=sharing) planning doc for more information + +## Activities + +Pre-Venue +- Solicit non-selected programmed session proposers to partcipate in the unconference + +Unconference +- Setup voting for session proposals +- Layout the sessions based on the highest number of votes per session + +## Time Commitment + +Pre-Unconference +* 1 hour per week for meetings +* 1 hour per week for planning + +Unconference +* Pre-Venue: 4 to 5 hours +* Day of Unconference 5 to 8 hours + +## Materials +* Markers +* Index cards +* Rolling whiteboard + +## Instructions and Tips for Specific Tasks +* Whiteboard in place at registration table +* Move about to encourage voting +* Move whiteboard during lull to caffeine area +* Move about to encourage voting +* Hard stop for voting should be 8:30 AM PST +* Make sure to communicate the timing + diff --git a/events/events-team/diversity.md b/events/events-team/diversity.md new file mode 100644 index 00000000..a139e1ce --- /dev/null +++ b/events/events-team/diversity.md @@ -0,0 +1,90 @@ +# Accessibility, Inclusiveness, and Diversity at Events Handbook + +## Overview +Lead and execute on making events a safe, welcome, navigable and inclusive space to new and continuing contributors. Lead and execute on outreach to underrepresented communities to invite them to participate. Track participant happiness and event inclusiveness over time to make each event more successful. + +## Skills and Qualifications + +Recommended experience: +- Participated in a Kubecon Contributor Summit before +- Member of the Kubernetes org +- Demonstrated awareness of existing research into accessibility, inclusiveness, and diversity, and willingness to apply research backed methods for improving the Contributor Summit along these axis +- Demonstrated commitment to ensuring Kubecon's Contributor Summit is accessible, inclusive, diverse, safe, and pleasant for all attendees +- Well organized, responsive via email, slack +- Available to participate in weekly planning sessions +- Able to attend Contributor Summit +- Comfortable reaching out to community groups to encourage their members to attend and participate + +## Activities + +- Work with Leads cross-functionally to ensure accessibility, inclusiveness, and diversity are core to the event +- Use previous surveys, events, focus groups, and anything else needed to determine the success of previous events and how to improve for the next one +- Review the previous workplan and use feedback and data to improve it for the upcoming event +- Create a work plan for the upcoming event, review it with the events team for feedback and consensus +- Execute the workplan, working cross-functionally with other leads and the CNCF Events team + +### Work Plan Items + +- Pre-event: + * Reach out to under-represented group organizations to encourage and invite people to attend both the new Contributor workshops and the Contributor Summit, as appropriate. Remember a personal invitation, making yourself available, and encouragement can go a long way, versus simply blasting a message out to an email distribution and calling it a day + - GoBridge: https://github.com/gobridge/about-us + - Women Who Go: https://www.womenwhogo.org/ + - IEEE Women in Engineering: http://sites.ieee.org/scv-wie/introduction-to-kubernetes/ + - Women in Infrastructure: https://www.meetup.com/Women-in-Infrastructure/ + - Black girls code https://medium.com/@blackgirls_code + - Ada Academy https://www.adadevelopersacademy.org/ + - Women who code: https://www.womenwhocode.com/ + - Code Chix: https://www.codechix.org/ + - Girl Develop it: https://www.girldevelopit.com/ + - Mothercoders: http://www.mothercoders.org/ + - We can code it: https://wecancodeit.org/ + - Start Out: https://startout.org/ + - Out in Tech: https://outintech.com/ + - https://lgbtq.technology/ + - Queer Coders: https://queercoders.com/ + - Refugee Coders: https://powercoders.org/about/ + * Review previously collected anonymous gender and other demographic information to assess the environment, as perceived by different groups in your audience. Specifically ask how comfortable and welcome attendees felt at your conference and work to improve these marks (incorporating ideas they share) at future events + * Ensure the Code of Conduct is linked from all official communications including the website, and that event staff is familiar with it and how to react in case of someone who needs assistance +- Speakers and presenters should: + * Take the CNCF Diversity training for speakers + * Review the Critical Listening Guide https://www.ncwit.org/resources/critical-listening-guide + * SIG updates should include a plan for how each SIG will be reaching out to and mentoring underrepresented people to increase inclusion in the projects + * There should be no panels or groups of >3 speakers that are entirely overrepresented people +- Summit location check list: + * The website and physical conference site is welcoming to people with disabilities + * Make sure there is a microphone for all speakers + * Avoid putting panelists on a stool or on a high platform stage + * Ensure your check-in table allows attendees in wheelchairs to be greeted at eye-level + * Provide at least one all-gender restroom, conveniently located close to the main session area, with appropriate signage + * Provide preferred pronoun indication stickers + * Every session should include options for people who are vision and/or hearing impaired, etc + * When people register, leave a box for requested special accommodations + * There should be a clearly marked, private nursing room, that includes: + - ability to lock door from the inside + - clear signage + - easy to find and access without missing a lot of the summit due to transit time + - a comfortable chair + - working refrigerator + - power strip near chair + - completely private, no clear glass windows etc + - washing sink or wipes + - trash can + - paper towels + * Childcare: + - Include a questionaire at registration to understand how many attendees need child care + - Ask how old the children are so the appropriate type of childcare professionals are hired (babies may need pac and plays, for example - older kids need activities/playgrounds) + - Ask parents to let you know if they decide to make alternate arrangements for childcare + - Offering events (workshops and social) at different times of day and in differing types of venues can go a long way to ensuring parents are able to attend, as does the availability and cost of on-site childcare. (For example, late evening events probably preclude parents from attending - an earlier social event at a child friendly venue might work better) + - Post-event: + * Collect anonymous gender and other demographic information to assess the environment, as perceived by different groups in your audience. Specifically ask how comfortable and welcome attendees felt at your conference and work to improve these marks (incorporating ideas they share) at future events + * Review any issues that arose and enhance Code of Conduct if necessary + +## Time Commitment + +About 1-2 hours a week leading up to the event, and then up to 20 hours the week of the event +Ideally, you need to be able to travel to the event (this can be worked around if necessary) + + +## More reading / Citations +- https://www.ncwit.org/resources/ncwit-tips-13-tips-make-technical-conferences-more-inclusive/ncwit-tips-13-tips-make +- https://transequality.org/issues/resources/understanding-non-binary-people-how-to-be-respectful-and-supportive diff --git a/events/events-team/feedback.md b/events/events-team/feedback.md new file mode 100644 index 00000000..93f08dd3 --- /dev/null +++ b/events/events-team/feedback.md @@ -0,0 +1,36 @@ +We have been collecting feedback in some shape or form since we started doing +Contributor Summits (fka Developer Summits) from both attendees as well as our +awesome set of volunteers. The feedback is an integral part of our content +creation and overall experience of the event. This doc captures these for +historical and future planning purposes. + +Thanks to all who have provided feedback in the past. + +#### +[2016 feedback] + +#### Austin +[2017 feedback] + +#### Copenhagen +[2018 EU feedback] +[2018 EU retro] + +#### Shanghai +TODO + +#### Seattle +[2018 feedback] +[2018 retro] + +#### Barcelona +TODO + + + +[2016 feedback]: https://docs.google.com/spreadsheets/d/1W443ToSJGvk5O2ah1bOC6OUM4F7zsBoJRtq2qbLC36E/edit?usp=sharing +[2017 feedback]: https://docs.google.com/spreadsheets/d/1NNfd4O4mcwGaJJuw1QS9PUEBF08u2QlaW54t5IuJEFc/edit?usp=sharing +[2018 EU feedback]: https://docs.google.com/spreadsheets/d/1Bev8BthgC5OBtak5BDR23lG2eYs3b8UEngoewDyEsnc/edit?usp=sharing +[2018 EU retro]: https://docs.google.com/document/d/1XyjCDFiEx06TkD4vDkci00h0uZR9OVNnKd6MxVo_bAo/edit +[2018 feedback]: https://docs.google.com/spreadsheets/d/1VXwAYo8sJQk1amrayUaYRN5Ly5cYi-t2Yw355veRcDs/edit?usp=sharing +[2018 retro]: https://docs.google.com/document/d/1lonVMIO15xZoxZtX5Gr5N-Wb5GtDY5lGnjKgrfNEAyU/edit?usp=sharing&urp=gmail_link diff --git a/events/events-team/marketing/README.md b/events/events-team/marketing/README.md index 5a667354..455441e5 100644 --- a/events/events-team/marketing/README.md +++ b/events/events-team/marketing/README.md @@ -1,29 +1,39 @@ -Marketing Lead Handbook -(and supplemental marketing documentation needed to run a Contributor Summit) +# Marketing Lead Handbook + +This document defines marketing planning and activities needed to run a Contributor Summit. + +- [Overview](#overview) +- [Skills and Qualifications](#skills-and-qualifications) +- [Responsibilities](#responsibilities) +- [Documentation](#documentation) ## Overview -TODO +As Marketing Lead, you are responsible for the overall marketing communications timeline. The role also includes ensuring all non-technical content (web, mail, physical prints) is correct and informative, and supporting the other roles (registration, content) as needed. + +- Time Commitment + - 1-3 hours a week from 0-1.5 months in + - 2-5 hours a week from 1.5 months-to event ## Skills and Qualifications -TODO +- Good grasp on general marketing activities surrounding events +- Understanding of common forms of marketing communications +- Event planning experience + +## Responsibilities -## Activities +- Create a communication schedule - what, when, how, who +- Manage online presence - website, social media strategy +- Potentially recruit a social media coordinator role +- Provide updates on social media, mailing lists, and Slack throughout pre-, during-, and post-event +- Assist with GitHub event repo adds and edits +- Work with Event Lead on a recap blog +- Determine signage needs and copy, coordinate with CNCF on explicit needs +- Create/update deck templates for curated talks and/or other purposes -Create a communication schedule - what, when, how, who -Figure out online presence - website, social media strategy -Potentially recruit a social media coordinator role -Provide social updates throughout pre-during-and post event -Assist with GitHub page -Work with lead on a recap for blog -Determine signage needs and copy, coordinate with cncf on explicit needs -Create a deck template for curated talks and/or other purposes -## Time Commitment -1-3 hours a week from 0-1.5 months in -2-5 hours a week from 1.5 months-to event -## Misc Info, Docs to link, etc. +## Documentation -TODO +[Email comms used for Contributor Summit Barcelona, 2019](https://github.com/kubernetes/community/blob/master/events/2019/05-contributor-summit/communications.md) diff --git a/events/events-team/projectmanagement/README.md b/events/events-team/projectmanagement/README.md new file mode 100644 index 00000000..0f25fbfa --- /dev/null +++ b/events/events-team/projectmanagement/README.md @@ -0,0 +1,24 @@ +# Project Management Handbook + +## Overview +The Project Manager is responsible for managing the cross events tasks/issues, carrying out the strategic vision, and being the glue needed to execute on the event. + +The Project Manager(s) is responsible for Triaging the project board, related issues, and PRs. The Project Manager should be able to Identify holes in the tasks and assign these tasks to the volunteers or ask for volunteers for the tasks. Track ongoing blockers for the event and coordinate with the other event leads for the resolution of the blockers. +Also, keep track of the timelines of these tasks and outlined activited. +The Project Manager role will ideally have a shadow for succession planning. Those who have been a part of a previous event get first dibs on lead roles to maintain consistency. + + +## Skills and Qualifications +The Project Manager will have lead at least one role during a previous Contributor Summit. The shadow is signing up to commit to lead a future event within the next 12 months. + +Demonstrate empathy +Ability to work in high level event planning strategy and goal setting and switch to something very detail oriented +Management: delegation, team building, gap analysis, dealing with conflict +Good communication +Impartial and objective + +# Activities +Ensure the overall event is a great experience for all contributors Recruit a core team (see best-practices.md) and help recruit other volunteers as necessary +Create an event strategy with the Content Lead(s) and consider having a social event (decide if social needs it's own lead) Provide venue ideas and suggestions to CNCF; do a walk thru if possible +Organize and lead n cadence update meetings +Direct liaison with CNCF Event Manager
\ No newline at end of file diff --git a/events/events-team/registration/README.md b/events/events-team/registration/README.md index 9cf0d361..def500d0 100644 --- a/events/events-team/registration/README.md +++ b/events/events-team/registration/README.md @@ -3,7 +3,7 @@ The Registration lead role is charged with handling all aspects of attendee registration workflow; including before the event and potentially day-of. This -includes: +includes: - Creating the registration system or coordinating with the CNCF Events manager to make one. @@ -60,19 +60,45 @@ workshop organizers. In addition to any path specific questions, all attendees should be asked the following: -| Question | Required | Notes | -|----------------------------------------------------------------|----------|---------------------------------------------------------------| -| Name | yes | | -| Email | yes | | -| GitHub Handle | yes | | -| Signed the CLA | yes | Provide link to CLA | -| Food Restrictions | yes | values: `none`, `Gluten Free`, `Vegetarian`, `Vegan`, `Other` | -| Swag Related Question | yes* | Swag question is generally shirt size. | -| Social Event | yes* | Required if there is an independent social event. | -| Emergency Contact | No | | -| How can we make this a valuable event for you? | No | | -| If you had a speaking slot, what would you like to talk about? | No | | - +| Question | Type | Required | Notes | +|----------------------------------------------------------------|-----------|----------|---------------------------------------------------------------| +| Name | Free Text | Yes | | +| Email | Free Text | Yes | | +| GitHub Handle | Free Text | Yes | | +| Signed the CLA | Dropdown | Yes | Provide link to CLA. Options: Yes, No - but will do before workshop, No - cannot sign due to work resrictions. | +| Food Restrictions | Dropdown | Yes | Options: `none`, `Gluten Free`, `Vegetarian`, `Vegan`, `Other` | +| Swag Related Question | Dropdown | Yes | Swag question is generally shirt size. | +| Social Event | Dropdown | Yes | Required if there is an independent social event. | +| Emergency Contact | Free Text | No | Name and Phone Number. Phone number to be verified. | +| How can we make this a valuable event for you? | Free Text | No | | +| If you had a speaking slot, what would you like to talk about? | Free Text | No | | +| Where did you hear about the Contributor Summit? | Checkbox | No | Options: `Twitter`, `mailing list`, `GitHub`, `community meeting`, `SIG/WG Meeting`, `Slack`, `Other` | + +Following are some of the path specific questions that have been asked in the past: + +**New Contributor** + +| Question | Type | Required | Notes | +|----------------------------------------------------------------|-----------|----------|---------------------------------------------------------------| +| Laptop availability for workshop | Dropdown | Yes | Should be mentioned that workshop can still be attended if laptop is not available and pair with other participants. Options: Yes, No - do not have a laptop, No - have one but cannot install software on it without IT approval | +| Have you joined the kubernetes slack? If so, what is your handle? | Free Text | No | | +| If you had a speaking slot, what would you like to talk about? | Free Text | No | | +| Are there any areas of Kubernetes you're already interested in contributing to? | Checkbox | No | Options: `API`, `CLI`, `testing`, `docs`, `community`, `release`, etc | +| Are there any SIG's you are interested in joining? | Free Text | No | | +| What are you hoping to get out of the contributor summit? | Free Text | No | | +| Experience with Go | Dropdown | No | Rate from 1 to 5, with 1 being no experience | +| Experience with kubernetes as a user | Dropdown | No | Rate from 1 to 5, with 1 being no experience | +| Experience of developing application that integrate with kubernetes | Dropdown | No | Rate from 1 to 5, with 1 being no experience | + +**Active Contributor** + +| Question | Type | Required | Notes | +|----------------------------------------------------------------|-----------|----------|---------------------------------------------------------------| +| Are you member of a Kubernetes Github Org? | Dropdown | Yes | | +| What SIG's or WG's are you most active in? | Checkbox | Yes | Options: List of the SIG's and WG's | +| What session(s) would like to see at the summit? what would make this event valuable to you? We've changed content based on contributor feedback to this question in the past. | Free Text | No | | + +Additionally, a separate form can be created for registering the `summit staff`. ### Selecting the Registration System @@ -100,7 +126,7 @@ a system include: TODO: insert link/note to reg system used for KubeCon CN --> In past events, registration systems that have been used were [Google Forms], -[SurveyMonkey], and [cvent]. All have their pluses and minuses. +[SurveyMonkey], and [cvent]. All have their pluses and minuses. [Google Forms] is flexible and easy to get data in and out of, as it is essentially just a form on top of a spreadsheet. However, it lacks useful other @@ -128,13 +154,13 @@ that may mean asking them to switch tracks. A few scenarios that have occurred: **A person has signed up for the New Contributor Workshop, but in their -comments have mentioned they are unfamiliar with Kubernetes.** +comments have mentioned they are unfamiliar with Kubernetes.** They may have interpreted the event as an _"Introduction to Kubernetes"_ from an end-user perspective. In this case it is best to reach out to them and provide more context for the event. They will likely apologize and ask to be removed. -**A person who looks to be an Active Contributor has signed up for the New +**A person who looks to be an Active Contributor has signed up for the New Contributor Track.** This could be accidental, or in some scenarios a non-code contributor is looking diff --git a/generator/app.go b/generator/app.go index 371add2a..a5f05b1f 100644 --- a/generator/app.go +++ b/generator/app.go @@ -468,9 +468,9 @@ func main() { errs := ctx.Validate() if len(errs) != 0 { for _, err := range errs { - fmt.Printf("NOTICE: %s\n", err.Error()) + fmt.Printf("ERROR: %s\n", err.Error()) } - fmt.Println("NOTICE: validation errors are ignored at present") + os.Exit(1) } // Write the Context struct back to yaml to enforce formatting diff --git a/generator/committee_readme.tmpl b/generator/committee_readme.tmpl index d84bd2b5..68b5b893 100644 --- a/generator/committee_readme.tmpl +++ b/generator/committee_readme.tmpl @@ -32,55 +32,67 @@ The [charter]({{.CharterLink}}) defines the scope and governance of the {{.Name} ## Contact {{- if .Contact.Slack }} -* [Slack](https://kubernetes.slack.com/messages/{{.Contact.Slack}}) +- Slack: [#{{.Contact.Slack}}](https://kubernetes.slack.com/messages/{{.Contact.Slack}}) {{- end }} {{- if .Contact.MailingList }} -* [Mailing list]({{.Contact.MailingList}}) +- [Mailing list]({{.Contact.MailingList}}) {{- end }} {{- if .Contact.PrivateMailingList }} -* Private Mailing List: {{.Contact.PrivateMailingList}} +- Private Mailing List: {{.Contact.PrivateMailingList}} {{- end }} {{- if .Label }} -* [Open Community Issues/PRs](https://github.com/kubernetes/community/labels/ug%2F{{.Label}}) +- [Open Community Issues/PRs](https://github.com/kubernetes/community/labels/committee%2F{{.Label}}) {{- end }} +{{- if .Contact.GithubTeams }} +- GitHub Teams: +{{- range .Contact.GithubTeams }} + - [@kubernetes/{{.Name}}](https://github.com/orgs/kubernetes/teams/{{.Name}}) {{- if .Description }} - {{.Description}} {{- end}} +{{- end }} +{{- end }} + {{- if .Subprojects }} ## Subprojects -The following subprojects are owned by the {{.Name}} Committee: +The following [subprojects][subproject-definition] are owned by the {{.Name}} Committee: {{- range .Subprojects }} -- **{{.Name}}** +### {{.Name}} {{- if .Description }} - - Description: {{ trimSpace .Description }} +{{ trimSpace .Description }} {{- end }} - - Owners: +- **Owners:** {{- range .Owners }} - - {{.}} + - {{.}} +{{- end }} +{{- if .Contact }} +- **Contact:** +{{- if .Contact.Slack }} + - Slack: [#{{.Contact.Slack}}](https://kubernetes.slack.com/messages/{{.Contact.Slack}}) +{{- end }} +{{- if .Contact.MailingList }} + - [Mailing List]({{.Contact.MailingList}}) +{{- end }} +{{- if .Contact.GithubTeams }} + - GitHub Teams: +{{- range .Contact.GithubTeams }} + - [@kubernetes/{{.Name}}](https://github.com/orgs/kubernetes/teams/{{.Name}}) {{- if .Description }} - {{.Description}}{{- end}} +{{- end }} +{{- end }} {{- end }} {{- if .Meetings }} - - Meetings: +- **Meetings:** {{- range .Meetings }} - - {{.Description}}: [{{.Day}}s at {{.Time}} {{.TZ}}]({{.URL}}) ({{.Frequency}}). [Convert to your timezone](http://www.thetimezoneconverter.com/?t={{.Time}}&tz={{.TZ | tzUrlEncode}}). + - {{.Description}}: [{{.Day}}s at {{.Time}} {{.TZ}}]({{.URL}}) ({{.Frequency}}). [Convert to your timezone](http://www.thetimezoneconverter.com/?t={{.Time}}&tz={{.TZ | tzUrlEncode}}). {{- if .ArchiveURL }} - - [Meeting notes and Agenda]({{.ArchiveURL}}). + - [Meeting notes and Agenda]({{.ArchiveURL}}). {{- end }} {{- if .RecordingsURL }} - - [Meeting recordings]({{.RecordingsURL}}). + - [Meeting recordings]({{.RecordingsURL}}). {{- end }} {{- end }} {{- end }} {{- end }} {{- end }} -{{ if .Contact.GithubTeams }} -## GitHub Teams -The below teams can be mentioned on issues and PRs in order to get attention from the right people. -Note that the links to display team membership will only work if you are a member of the org. - -| Team Name | Details | Description | -| --------- |:-------:| ----------- | -{{- range .Contact.GithubTeams }} -| @kubernetes/{{.Name}} | [link](https://github.com/orgs/kubernetes/teams/{{.Name}}) | {{.Description}} | -{{- end }} -{{ end }} +[subproject-definition]: https://github.com/kubernetes/community/blob/master/governance.md#subprojects diff --git a/generator/sig_readme.tmpl b/generator/sig_readme.tmpl index 734c1512..12ad5bb4 100644 --- a/generator/sig_readme.tmpl +++ b/generator/sig_readme.tmpl @@ -48,64 +48,61 @@ subprojects, and resolve cross-subproject technical issues and decisions. {{- end }} ## Contact -* [Slack](https://kubernetes.slack.com/messages/{{.Contact.Slack}}) -* [Mailing list]({{.Contact.MailingList}}) +- Slack: [#{{.Contact.Slack}}](https://kubernetes.slack.com/messages/{{.Contact.Slack}}) +- [Mailing list]({{.Contact.MailingList}}) {{- if .Label }} -* [Open Community Issues/PRs](https://github.com/kubernetes/community/labels/sig%2F{{.Label}}) +- [Open Community Issues/PRs](https://github.com/kubernetes/community/labels/sig%2F{{.Label}}) {{- end }} +{{- if .Contact.GithubTeams }} +- GitHub Teams: +{{- range .Contact.GithubTeams }} + - [@kubernetes/{{.Name}}](https://github.com/orgs/kubernetes/teams/{{.Name}}) {{- if .Description }} - {{.Description}} {{- end}} +{{- end }} +{{- end }} + {{- if .Subprojects }} ## Subprojects -The following subprojects are owned by sig-{{.Label}}: +The following [subprojects][subproject-definition] are owned by sig-{{.Label}}: {{- range .Subprojects }} -- **{{.Name}}** +### {{.Name}} {{- if .Description }} - - Description: {{ trimSpace .Description }} +{{ trimSpace .Description }} {{- end }} - - Owners: +- **Owners:** {{- range .Owners }} - - {{.}} + - {{.}} {{- end }} {{- if .Contact }} - - Contact +- **Contact:** {{- if .Contact.Slack }} - - Slack: [#{{.Contact.Slack}}](https://kubernetes.slack.com/messages/{{.Contact.Slack}}) + - Slack: [#{{.Contact.Slack}}](https://kubernetes.slack.com/messages/{{.Contact.Slack}}) {{- end }} {{- if .Contact.MailingList }} - - [Mailing List]({{.Contact.MailingList}}) + - [Mailing List]({{.Contact.MailingList}}) {{- end }} {{- if .Contact.GithubTeams }} - - GitHub Teams: + - GitHub Teams: {{- range .Contact.GithubTeams }} - - [@kubernetes/{{.Name}}](https://github.com/orgs/kubernetes/teams/{{.Name}}) {{- if .Description }}({{.Description}}){{- end}} + - [@kubernetes/{{.Name}}](https://github.com/orgs/kubernetes/teams/{{.Name}}) {{- if .Description }} - {{.Description}}{{- end}} {{- end }} {{- end }} {{- end }} {{- if .Meetings }} - - Meetings: +- **Meetings:** {{- range .Meetings }} - - {{.Description}}: [{{.Day}}s at {{.Time}} {{.TZ}}]({{.URL}}) ({{.Frequency}}). [Convert to your timezone](http://www.thetimezoneconverter.com/?t={{.Time}}&tz={{.TZ | tzUrlEncode}}). + - {{.Description}}: [{{.Day}}s at {{.Time}} {{.TZ}}]({{.URL}}) ({{.Frequency}}). [Convert to your timezone](http://www.thetimezoneconverter.com/?t={{.Time}}&tz={{.TZ | tzUrlEncode}}). {{- if .ArchiveURL }} - - [Meeting notes and Agenda]({{.ArchiveURL}}). + - [Meeting notes and Agenda]({{.ArchiveURL}}). {{- end }} {{- if .RecordingsURL }} - - [Meeting recordings]({{.RecordingsURL}}). + - [Meeting recordings]({{.RecordingsURL}}). {{- end }} {{- end }} {{- end }} {{- end }} {{- end }} -{{ if .Contact.GithubTeams }} -## GitHub Teams - -The below teams can be mentioned on issues and PRs in order to get attention from the right people. -Note that the links to display team membership will only work if you are a member of the org. -| Team Name | Details | Description | -| --------- |:-------:| ----------- | -{{- range .Contact.GithubTeams }} -| @kubernetes/{{.Name}} | [link](https://github.com/orgs/kubernetes/teams/{{.Name}}) | {{.Description}} | -{{- end }} -{{ end }} +[subproject-definition]: https://github.com/kubernetes/community/blob/master/governance.md#subprojects diff --git a/generator/ug_readme.tmpl b/generator/ug_readme.tmpl index e665f0e8..4062128e 100644 --- a/generator/ug_readme.tmpl +++ b/generator/ug_readme.tmpl @@ -26,24 +26,24 @@ The [charter]({{.CharterLink}}) defines the scope and governance of the {{.Name} * {{.Name}} (**[@{{.GitHub}}](https://github.com/{{.GitHub}})**){{if .Company}}, {{.Company}}{{end}} {{- end }} {{- end }} +{{- if .Leadership.EmeritusLeads }} + +## Emeritus Organizers +{{ range .Leadership.EmeritusLeads }} +* {{.Name}} (**[@{{.GitHub}}](https://github.com/{{.GitHub}})**){{if .Company}}, {{.Company}}{{end}} +{{- end }} +{{- end }} {{- end }} ## Contact -* [Slack](https://kubernetes.slack.com/messages/{{.Contact.Slack}}) -* [Mailing list]({{.Contact.MailingList}}) +- Slack: [#{{.Contact.Slack}}](https://kubernetes.slack.com/messages/{{.Contact.Slack}}) +- [Mailing list]({{.Contact.MailingList}}) {{- if .Label }} -* [Open Community Issues/PRs](https://github.com/kubernetes/community/labels/ug%2F{{.Label}}) +- [Open Community Issues/PRs](https://github.com/kubernetes/community/labels/ug%2F{{.Label}}) {{- end }} - -{{ if .Contact.GithubTeams }} -## GitHub Teams - -The below teams can be mentioned on issues and PRs in order to get attention from the right people. -Note that the links to display team membership will only work if you are a member of the org. - -| Team Name | Details | Description | -| --------- |:-------:| ----------- | +{{- if .Contact.GithubTeams }} +- GitHub Teams: {{- range .Contact.GithubTeams }} -| @kubernetes/{{.Name}} | [link](https://github.com/orgs/kubernetes/teams/{{.Name}}) | {{.Description}} | + - [@kubernetes/{{.Name}}](https://github.com/orgs/kubernetes/teams/{{.Name}}) {{- if .Description }} - {{.Description}} {{- end}} +{{- end }} {{- end }} -{{ end }} diff --git a/generator/wg_readme.tmpl b/generator/wg_readme.tmpl index ed3bb99f..0fc7ff47 100644 --- a/generator/wg_readme.tmpl +++ b/generator/wg_readme.tmpl @@ -32,52 +32,24 @@ The [charter]({{.CharterLink}}) defines the scope and governance of the {{.Name} * {{.Name}} (**[@{{.GitHub}}](https://github.com/{{.GitHub}})**){{if .Company}}, {{.Company}}{{end}} {{- end }} {{- end }} -{{- end }} - -## Contact -* [Slack](https://kubernetes.slack.com/messages/{{.Contact.Slack}}) -* [Mailing list]({{.Contact.MailingList}}) -{{- if .Label }} -* [Open Community Issues/PRs](https://github.com/kubernetes/community/labels/wg%2F{{.Label}}) -{{- end }} -{{- if .Subprojects }} - -## Subprojects +{{- if .Leadership.EmeritusLeads }} -The following subprojects are owned by wg-{{.Label}}: - -{{- range .Subprojects }} -- **{{.Name}}** -{{- if .Description }} - - Description: {{ .Description }} -{{- end }} - - Owners: -{{- range .Owners }} - - {{.}} -{{- end }} -{{- if .Meetings }} - - Meetings: -{{- range .Meetings }} - - {{.Description}}: [{{.Day}}s at {{.Time}} {{.TZ}}]({{.URL}}) ({{.Frequency}}). [Convert to your timezone](http://www.thetimezoneconverter.com/?t={{.Time}}&tz={{.TZ | tzUrlEncode}}). -{{- if .ArchiveURL }} - - [Meeting notes and Agenda]({{.ArchiveURL}}). -{{- end }} -{{- if .RecordingsURL }} - - [Meeting recordings]({{.RecordingsURL}}). -{{- end }} -{{- end }} +## Emeritus Organizers +{{ range .Leadership.EmeritusLeads }} +* {{.Name}} (**[@{{.GitHub}}](https://github.com/{{.GitHub}})**){{if .Company}}, {{.Company}}{{end}} {{- end }} {{- end }} {{- end }} -{{ if .Contact.GithubTeams }} -## GitHub Teams -The below teams can be mentioned on issues and PRs in order to get attention from the right people. -Note that the links to display team membership will only work if you are a member of the org. - -| Team Name | Details | Description | -| --------- |:-------:| ----------- | +## Contact +- Slack: [#{{.Contact.Slack}}](https://kubernetes.slack.com/messages/{{.Contact.Slack}}) +- [Mailing list]({{.Contact.MailingList}}) +{{- if .Label }} +- [Open Community Issues/PRs](https://github.com/kubernetes/community/labels/wg%2F{{.Label}}) +{{- end }} +{{- if .Contact.GithubTeams }} +- GitHub Teams: {{- range .Contact.GithubTeams }} -| @kubernetes/{{.Name}} | [link](https://github.com/orgs/kubernetes/teams/{{.Name}}) | {{.Description}} | + - [@kubernetes/{{.Name}}](https://github.com/orgs/kubernetes/teams/{{.Name}}) {{- if .Description }} - {{.Description}} {{- end}} +{{- end }} {{- end }} -{{ end }} diff --git a/github-management/OWNERS b/github-management/OWNERS index a21d3f76..7bb5cee1 100644 --- a/github-management/OWNERS +++ b/github-management/OWNERS @@ -5,7 +5,6 @@ approvers: - spiffxp reviewers: - - calebamiles - fejta - idvoretskyi - justaugustus diff --git a/github-management/README.md b/github-management/README.md index 1f869162..1799bd82 100644 --- a/github-management/README.md +++ b/github-management/README.md @@ -28,7 +28,7 @@ various tasks. This team (**[@kubernetes/owners](https://github.com/orgs/kubernetes/teams/owners)**) is as follows: * Aaron Crickenberger (**[@spiffxp](https://github.com/spiffxp)**, US Pacific) -* Caleb Miles (**[@calebamiles](https://github.com/calebamiles)**, US Pacific) +* Bob Killen (**[@mrbobbytables](https://github.com/mrbobbytables)**, US Eastern) * Christoph Blecker (**[@cblecker](https://github.com/cblecker)**, CA Pacific) * Erick Fejta (**[@fejta](https://github.com/fejta)**, US Pacific) * Nikhita Raghunath (**[@nikhita](https://github.com/nikhita)**, Indian Standard Time) @@ -54,7 +54,7 @@ community members, guiding them through the GitHub organization. Our current coordinators are: -* Bob Killen (**[@mrbobbytables](https://github.com/mrbobbytables)**, US Eastern) +* Naeil Ezzoueidi (**[@nzoueidi](https://github.com/nzoueidi)**, Central European) * Stephen Augustus (**[@justaugustus](https://github.com/justaugustus)**, US Eastern) ## Project Owned Organizations diff --git a/github-management/kubernetes-repositories.md b/github-management/kubernetes-repositories.md index 803d9b1c..c6b074f4 100644 --- a/github-management/kubernetes-repositories.md +++ b/github-management/kubernetes-repositories.md @@ -22,12 +22,8 @@ against the kubernetes/org repo. - [Core Repositories](#core-repositories) * [Goals](#goals-2) * [Rules](#rules-1) -- [Creating Repositories](#creating-repositories) - * [Non-staging repositories](#non-staging-repositories) - * [Staging repositories](#staging-repositories) - [Removing Repositories](#removing-repositories) * [Grounds for removal](#grounds-for-removal) - * [Procedure for removal](#procedure-for-removal) - [FAQ](#faq) ## Associated Repositories @@ -77,7 +73,8 @@ repo page.) repositories must use the Creative Commons License version 4.0. * Must adopt the CNCF CLA bot, merge bot and Kubernetes PR commands/bots. * All OWNERS of the project must also be active SIG members. - * SIG membership must vote using lazy consensus to create a new repository + * Must be approved by the process spelled out in the SIG's charter and a + publicly linkable written decision should be available for the same. * SIG must already have identified all of their existing subprojects and code, with valid OWNERS files, in [`sigs.yaml`](https://github.com/kubernetes/community/blob/master/sigs.yaml) @@ -137,64 +134,6 @@ ecosystem. Carries the endorsement of the Kubernetes community. Kubernetes steering committee elections. in the Kubernetes community * Repository must be approved by SIG-Architecture -## Creating Repositories - -### Non-staging repositories - -For non-staging repositories, suggestions on how to create -a new repository are described below. - - * Ensure that the repo creation request has appropriate approvals - as per the rules mentioned above. - * Using the organization and repository name mentioned in the repo creation - request, create a new repo with default GitHub settings. - * Set the description as per the repo creation request. - * Clone the newly created repo locally. - * Copy the latest contents of [kubernetes-template-project] and create an - initial commit with the message *Initial commit from the - kubernetes-template-project*. - * Make the following changes in the next commit: - * If the request references a GitHub team to be listed in the `OWNERS` - file, update the `OWNERS_ALIASES` file to remove the steering-committee - alias and add a new alias for the team with members populated as per the - GitHub team. If the request does not reference a GitHub team, remove the - `OWNERS_ALIASES` file. - * Update the OWNERS file as per the request. If the repo is a - [SIG Repository], add a labels entry for the SIG that the repo belongs to. - * Update the `SECURITY_CONTACTS` file as per the request. Note that aliases - cannot be used in this case so expand the GitHub team, if specified. - * Create a new commit with the message *Update OWNERS, OWNERS_ALIASES and - SECURITY_CONTACTS*. - * Push the new commits directly to the master branch. - * If the repo is a [SIG Repository], add a new topic of the form - `k8s-sig-<sig-name-repo-belongs-to>` using the *Manage Topics* option. - * Create a PR against [kubernetes/org] to add teams as per the [team guidance] - for alloting repo admin and write access. - * Once the above PR is merged and the postsubmit has run, the new GitHub teams - will be created. In the *Collaborators and Teams* section in Settings, - assign the new teams appropriate access to the repo. - * Ask the author of the repo creation request to add the repo - as a part of a subproject in [`sigs.yaml`](/sigs.yaml). - -### Staging Repositories - -If the repository is a staging repository, there are some deviations -from the above procedure: - - * The repository **must** have an initial empty commit. The contents of the - repo will be populated from staging by the [publishing-bot]. - * Grant the [@kubernetes/stage-bots] team admin access to the repo. - * Setup branch protection and enable access to the - `stage-bots` team by adding the repo in - [`prow/config.yaml`](https://git.k8s.io/test-infra/prow/config.yaml). See - [kubernetes/test-infra#9292](https://github.com/kubernetes/test-infra/pull/9292) - for an example. - * Once the repo has been created, add the repo to - [`hack/fetch-all-latest-and-push.sh`](https://git.k8s.io/publishing-bot/hack/fetch-all-latest-and-push.sh) - in the [publishing-bot] repo. - -<!-- TODO: Add suggestions for how to migrate existing repos --> - ## Removing Repositories As important as it is to add new repositories, it is equally important to prune @@ -223,31 +162,6 @@ Associated repositories are much more loosely associated with the Kubernetes project and are generally not subject to removal, except under exceptional circumstances (e.g. a code of conduct violation). -### Procedure for removal - -When a repository has been deemed eligible for removal, we take the following -steps: - - * Ownership of the repo is transferred to the [kubernetes-retired] GitHub - organization - * The repo description is edited to start with the phrase "[EOL]" - * All open issues and PRs are closed - * All external collaborators are removed - * All webhooks, apps, integrations or services are removed - * GitHub Pages are disabled - * The repo is marked as archived using [GitHub's archive feature] - * Remove all teams associated with the repo - * Remove the repo from [sigs.yaml] - * The removal is announced on the kubernetes-dev mailing list and community - meeting - -This maintains the complete record of issues, PRs and other contributions, -leaves the repository read-only, and makes it clear that the repository should -be considered retired and unmaintained. - -In case a repository has only the initial commits adding template files -and no additional activity, it can be completely deleted. - ## FAQ **My project is currently in kubernetes-incubator, what is going to happen to @@ -306,14 +220,3 @@ owned by the authors of Kubernetes. Note that you should _never_ modify or remove a third party's copyright notice if you are not authorized by them to do so. - -[GitHub's archive feature]: -https://help.github.com/articles/archiving-a-github-repository/ -[kubernetes-retired]: https://github.com/kubernetes-retired -[kubernetes-template-project]: https://github.com/kubernetes/kubernetes-template-project -[kubernetes/org]: https://github.com/kubernetes/org -[team guidance]: /github-management/org-owners-guide.md#team-guidance -[SIG Repository]: #sig-repositories -[publishing-bot]: https://github.com/kubernetes/publishing-bot -[@kubernetes/stage-bots]: https://github.com/orgs/kubernetes/teams/stage-bots -[sigs.yaml]: /sigs.yaml diff --git a/github-management/opening-a-request.md b/github-management/opening-a-request.md index 90c136a9..3ad5ca15 100644 --- a/github-management/opening-a-request.md +++ b/github-management/opening-a-request.md @@ -31,6 +31,9 @@ Please open an issue against the [kubernetes/test-infra] repository describing your issue. If your request is urgent, please escalate to the [test-infra on-call] or reach out to `#testing-ops` on Slack. +## Sensitive issues + +To report any sensitive information, please email the private github@kubernetes.io list. [kubernetes/org]: https://github.com/kubernetes/org/issues [@kubernetes/owners]: https://github.com/orgs/kubernetes/teams/owners diff --git a/github-management/org-owners-guide.md b/github-management/org-owners-guide.md index 476c71f5..272c7cea 100644 --- a/github-management/org-owners-guide.md +++ b/github-management/org-owners-guide.md @@ -41,7 +41,8 @@ managed by the Kubernetes project or use a different name. Due to licensing and CLA issues, prior to transferring software into a Kubernetes managed organization there is some due diligence that needs to occur. -Please contact the steering committee and CNCF prior to moving any code in. +If needed, please contact the steering committee and CNCF prior to moving any +code in. It is easier to start new code in a Kubernetes organization than it is to transfer in existing code. @@ -137,7 +138,98 @@ checking on all contributions. For more details on those please see the Project](https://github.com/kubernetes/kubernetes-template-project), and the [Repository Guidelines](kubernetes-repositories.md) +The process for creating and removing new repositories is detailed below. + +### Creating Repositories + +#### Non-staging repositories + +For non-staging repositories, suggestions on how to create +a new repository are described below. + + * Ensure that the repo creation request has appropriate approvals + as per the rules mentioned above. + * Using the organization and repository name mentioned in the repo creation + request, create a new repo with: + * The [kubernetes-template-project] repo as the [template repo] + * `Description` as mentioned in the repo creation request + * Clone the newly created repo locally. + * Make the following changes: + * If the request references a team to be listed in the `OWNERS` + file, update the `OWNERS_ALIASES` file to remove the steering-committee + alias and add a new alias for the team with members populated as per the + GitHub team. If the request does not reference a team, remove the + `OWNERS_ALIASES` file. + * Update the OWNERS file as per the request. If the repo is a + [SIG Repository], add a labels entry for the SIG that the repo belongs to. + * Update the `SECURITY_CONTACTS` file as per the request. Note that aliases + cannot be used in this case so expand the team, if specified. + * Create a new commit with the message *Update OWNERS, OWNERS_ALIASES and + SECURITY_CONTACTS*. + * Push the new commit directly to the master branch. + * If the repo is a [SIG Repository], add a new topic of the form + `k8s-sig-<sig-name-repo-belongs-to>` using the *Manage Topics* option. + * Create a PR against [kubernetes/org] to add teams as per the [team guidance](#team-guidance) + for alloting repo admin and write access. + * Once the above PR is merged and the postsubmit has run, the new GitHub teams + will be created. In the *Collaborators and Teams* section in Settings, + assign the new teams appropriate access to the repo. + * Ask the author of the repo creation request to add the repo + as a part of a subproject in [`sigs.yaml`](/sigs.yaml). + +#### Staging Repositories + +If the repository is a staging repository, there are some deviations +from the above procedure: + + * The repository **must** have an initial empty commit. The contents of the + repo will be populated from staging by the [publishing-bot]. + * Grant the [@kubernetes/stage-bots] team admin access to the repo. + * Setup branch protection and enable access to the + `stage-bots` team by adding the repo in + [`prow/config.yaml`](https://git.k8s.io/test-infra/prow/config.yaml). See + [kubernetes/test-infra#9292](https://github.com/kubernetes/test-infra/pull/9292) + for an example. + * Once the repo has been created, add the repo to + [`hack/fetch-all-latest-and-push.sh`](https://git.k8s.io/publishing-bot/hack/fetch-all-latest-and-push.sh) + in the [publishing-bot] repo. + +<!-- TODO: Add suggestions for how to migrate existing repos --> + +### Removing Repositories + +When a repository has been deemed eligible for removal, we take the following +steps: + + * Ownership of the repo is transferred to the [kubernetes-retired] GitHub + organization + * The repo description is edited to start with the phrase "[EOL]" + * All open issues and PRs are closed + * All external collaborators are removed + * All webhooks, apps, integrations or services are removed + * GitHub Pages are disabled + * Remove all teams associated with the repo + * The repo is marked as archived using [GitHub's archive feature] + * Remove the repo from [sigs.yaml] + * The removal is announced on the kubernetes-dev mailing list and community + meeting + +This maintains the complete record of issues, PRs and other contributions, +leaves the repository read-only, and makes it clear that the repository should +be considered retired and unmaintained. + +In case a repository has only the initial commits adding template files +and no additional activity, it can be completely deleted. + [GitHub Administration Team]: /github-management/README.md#github-administration-team +[GitHub's archive feature]: +https://help.github.com/articles/archiving-a-github-repository/ [@kubernetes/owners]: https://github.com/orgs/kubernetes/teams/owners [kubernetes/org]: https://github.com/kubernetes/org +[publishing-bot]: https://github.com/kubernetes/publishing-bot +[@kubernetes/stage-bots]: https://github.com/orgs/kubernetes/teams/stage-bots +[kubernetes-retired]: https://github.com/kubernetes-retired +[kubernetes-template-project]: https://github.com/kubernetes/kubernetes-template-project +[SIG Repository]: /github-management/kubernetes-repositories.md##sig-repositories +[template repo]: https://help.github.com/en/articles/creating-a-repository-from-a-template diff --git a/governance.md b/governance.md index 34bbd85b..afb1045c 100644 --- a/governance.md +++ b/governance.md @@ -69,13 +69,10 @@ Each SIG must have a charter that specifies its scope (topics, subsystems, code repos and directories), responsibilities, areas of authority, how members and roles of authority/leadership are selected/granted, how decisions are made, and how conflicts are -resolved. See the [SIG charter process] for details on how charters are managed. -A [short template] for intra-SIG governance has been -developed in order to simplify SIG creation, and additional templates -are being developed, but SIGs should be relatively free to customize -or change how they operate, within some broad guidelines and -constraints imposed by cross-SIG processes (e.g., the release process) -and assets (e.g., the kubernetes repo). +resolved. See the [SIG charter process] for details on how charters are managed. +SIGs should be relatively free to customize or change how they operate, +within some broad guidelines and constraints imposed by cross-SIG processes +(e.g., the release process) and assets (e.g., the kubernetes repo). A primary reason that SIGs exist is as forums for collaboration. Much work in a SIG should stay local within that SIG. However, SIGs @@ -213,7 +210,6 @@ All contributors must sign the CNCF CLA, as described [here](CLA.md). [sig governance]: /committee-steering/governance/sig-governance.md [owners]: /community-membership.md#subproject-owner [sig charter process]: /committee-steering/governance/README.md -[short template]: /committee-steering/governance/sig-governance-template-short.md [kubernetes repository guidelines]: /github-management/kubernetes-repositories.md [working group governance]: /committee-steering/governance/wg-governance.md [user group governance]: /committee-steering/governance/ug-governance.md diff --git a/hack/.spelling_failures b/hack/.spelling_failures index 0cafda99..22fdbb0a 100644 --- a/hack/.spelling_failures +++ b/hack/.spelling_failures @@ -2,4 +2,6 @@ events/elections/2017/ vendor/ sig-contributor-experience/contribex-survey-2018.csv events/2014 +contributors/guide/contributor-cheatsheet/README-fr.md contributors/guide/contributor-cheatsheet/README-pt.md +contributors/guide/contributor-cheatsheet/README-de.md diff --git a/hack/generate-devstats-repo-sql.py b/hack/generate-devstats-repo-sql.py new file mode 100755 index 00000000..71d77497 --- /dev/null +++ b/hack/generate-devstats-repo-sql.py @@ -0,0 +1,194 @@ +#!/usr/bin/env python3 + +# Copyright 2019 The Kubernetes Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +""" +Output devstats repo_groups.sql based on subproject defintions in sigs.yaml + +This is likely missing a few repos because: + - some repos lack an owner (eg: kubernetes/kubernetes) + - it doesn't enumerate all repos from all kubernetes-owned orgs + - it ignores the fact that committees can own repos, only grouping by sig + +The sql generated is NOT intended to overwrite/replace the file that lives at +github.com/cncf/devstats/scripts/kubernetes/repo_groups.sql, but instead aid a +human in doing some manual updates to the file. Future improvements to this +script could eliminate that part of the process, but it's where we are today. +""" + +import argparse +import ruamel.yaml as yaml +import json +import re +import sys + +repo_group_sql_template = """ +update gha_repos set repo_group = '{}' where name in ( +{} +); +""" + +# copied from github.com/cncf/devstats/scripts/kubernetes/repo_groups.sql, +# if this differs, consider cncf the authoritative source and update this +repo_groups_sql_header = """-- generated by github.com/kubernetes/community/hack/generate-devstats-repo-sql.py +-- Add repository groups +""" + +# copied from github.com/cncf/devstats/scripts/kubernetes/repo_groups.sql, +# if this differs, consider cncf the authoritative source and update this +repo_groups_sql_footer = """ +-- All other unknown repositories should have 'Other' repository group +-- update gha_repos set repo_group = 'Other' where repo_group is null; + +-- By default alias is the newest repo name for given repo ID +update + gha_repos r +set + alias = coalesce(( + select e.dup_repo_name + from + gha_events e + where + e.repo_id = r.id + order by + e.created_at desc + limit 1 + ), name) +; + +update gha_repos set alias = 'kubernetes/kubernetes' where name like '%kubernetes' or name = 'kubernetes/'; + +select + repo_group, + count(*) as number_of_repos +from + gha_repos +where + repo_group is not null +group by + repo_group +order by + number_of_repos desc, + repo_group asc; + +""" + +special_case_groups = [{ + # the main repo has no single owner and has gone by many names + 'name': 'Kubernetes', + 'repos': [ + 'kubernetes/kubernetes', + 'GoogleCloudPlatform/kubernetes', + 'kubernetes', + 'kubernetes/' + ] +}] + +# devstats isn't aware of repo renames or migrations; we need to keep +# old repo names in its sql groups present for historical purposes; +# +# when reconciling deletions from repo_groups.sql by this script, use +# github.com/kubernetes/org issues to determine why; renamed, migrated, +# or used-and-retired repos belong here; unused/deleted repos do not +renamed_repos = { + 'sig-architecture': [ + 'kubernetes/contrib', + ], + 'sig-api-machinery': [ + 'kubernetes-incubator/apiserver-builder', + ], + 'sig-cluster-lifecycle': [ + 'kubernetes-incubator/kubespray', + ], + 'sig-multicluster': [ + 'kubernetes-sigs/federation-v2', + ], + 'sig-node': [ + 'kubernetes-incubator/node-feature-discovery', + ], + 'sig-pm': [ + 'kubernetes/features', + ], + 'sig-service-catalog': [ + 'kubernetes-incubator/service-catalog', + ] +} + +def repos_from_k8s_group(k8s_group): + """Returns a list of org/repos given a kubernetes community group""" + repos = {} + subprojects = k8s_group.get('subprojects', []) + if subprojects is None: + subprojects = [] + for sp in subprojects: + for uri in sp['owners']: + owners_path = re.sub(r"https://raw.githubusercontent.com/(.*)/master/(.*)",r"\1/\2",uri) + path_parts = owners_path.split('/') + # org/repo is owned by k8s_group if org/repo/OWNERS os in one of their subprojects + if path_parts[2] == 'OWNERS': + repo = '/'.join(path_parts[0:2]) + repos[repo] = True + return sorted(repos.keys()) + +def k8s_group_name(k8s_group): + group_dir = k8s_group.get('dir', '') + if group_dir.startswith('sig-'): + return "SIG " + k8s_group['name'] + if group_dir.startswith('committee-'): + return k8s_group['name'] + " Committee" + return "UNKNOWN " + group_dir + +def write_repo_groups_template(name, repos, fp): + if len(repos): + fp.write( + repo_group_sql_template.format( + name, + ',\n'.join([' \'{}\''.format(r) for r in repos]))) + +def write_repo_groups_sql(k8s_groups, fp): + fp.write(repo_groups_sql_header) + for g in special_case_groups: + write_repo_groups_template(g['name'], g['repos'], fp) + for group_type in ['sigs', 'committees']: + for g in k8s_groups[group_type]: + repos = set(repos_from_k8s_group(g)) | set(renamed_repos.get(g['dir'],[])) + repos = sorted(list(repos)) + write_repo_groups_template(k8s_group_name(g), repos, fp) + fp.write(repo_groups_sql_footer) + +def main(sigs_yaml, repo_groups_sql): + with open(sigs_yaml) as fp: + k8s_groups = yaml.round_trip_load(fp) + + if repo_groups_sql is not None: + with open(repo_groups_sql, 'w') as fp: + write_repo_groups_sql(k8s_groups, fp) + else: + write_repo_groups_sql(k8s_groups, sys.stdout) + +if __name__ == '__main__': + PARSER = argparse.ArgumentParser( + description='Generate a repo_groups.sql intended for github.com/cncf/devstats/scripts/kubernetes/repo_groups.sql') + PARSER.add_argument( + '--sigs-yaml', + default='./sigs.yaml', + help='Path to sigs.yaml') + PARSER.add_argument( + '--repo-groups-sql', + help='Path to output repo_groups.sql if provided') + ARGS = PARSER.parse_args() + + main(ARGS.sigs_yaml, ARGS.repo_groups_sql) + diff --git a/hack/verify-spelling.sh b/hack/verify-spelling.sh index 1831f8ba..f615a323 100755 --- a/hack/verify-spelling.sh +++ b/hack/verify-spelling.sh @@ -19,19 +19,15 @@ set -o nounset set -o pipefail export KUBE_ROOT=$(dirname "${BASH_SOURCE}")/.. +export GO111MODULE=on +export GOPROXY="${GOPROXY:-https://proxy.golang.org}" -# Install tools we need, but only from vendor/... -cd ${KUBE_ROOT} -go install ./vendor/github.com/client9/misspell/cmd/misspell -if ! which misspell >/dev/null 2>&1; then - echo "Can't find misspell - is your GOPATH 'bin' in your PATH?" >&2 - echo " GOPATH: ${GOPATH}" >&2 - echo " PATH: ${PATH}" >&2 - exit 1 -fi +# Pick out version of misspell from go.mod +go mod download +misspell="$(go list -m -f '{{.Dir}}' github.com/client9/misspell)" # Spell checking # All the skipping files are defined in hack/.spelling_failures skipping_file="${KUBE_ROOT}/hack/.spelling_failures" failing_packages=$(echo `cat ${skipping_file}` | sed "s| | -e |g") -git ls-files | grep -v -e ${failing_packages} | xargs misspell -i "" -error -o stderr +git ls-files | grep -v -e ${failing_packages} | xargs go run "${misspell}/cmd/misspell" -i "" -error -o stderr diff --git a/keps/0000-kep-template.md b/keps/0000-kep-template.md deleted file mode 100644 index cfd1f5fa..00000000 --- a/keps/0000-kep-template.md +++ /dev/null @@ -1,4 +0,0 @@ -KEPs have moved to https://git.k8s.io/enhancements/. -<!-- -This file is a placeholder to preserve links. Please remove after 6 months or the release of Kubernetes 1.15, whichever comes first. --->
\ No newline at end of file diff --git a/keps/0001-kubernetes-enhancement-proposal-process.md b/keps/0001-kubernetes-enhancement-proposal-process.md deleted file mode 100644 index cfd1f5fa..00000000 --- a/keps/0001-kubernetes-enhancement-proposal-process.md +++ /dev/null @@ -1,4 +0,0 @@ -KEPs have moved to https://git.k8s.io/enhancements/. -<!-- -This file is a placeholder to preserve links. Please remove after 6 months or the release of Kubernetes 1.15, whichever comes first. --->
\ No newline at end of file diff --git a/keps/0001a-meta-kep-implementation.md b/keps/0001a-meta-kep-implementation.md deleted file mode 100644 index cfd1f5fa..00000000 --- a/keps/0001a-meta-kep-implementation.md +++ /dev/null @@ -1,4 +0,0 @@ -KEPs have moved to https://git.k8s.io/enhancements/. -<!-- -This file is a placeholder to preserve links. Please remove after 6 months or the release of Kubernetes 1.15, whichever comes first. --->
\ No newline at end of file diff --git a/keps/NEXT_KEP_NUMBER b/keps/NEXT_KEP_NUMBER deleted file mode 100644 index bb95160c..00000000 --- a/keps/NEXT_KEP_NUMBER +++ /dev/null @@ -1 +0,0 @@ -33 diff --git a/keps/OWNERS b/keps/OWNERS deleted file mode 100644 index 3c544a16..00000000 --- a/keps/OWNERS +++ /dev/null @@ -1,17 +0,0 @@ -# See the OWNERS docs at https://go.k8s.io/owners - -reviewers: - - sig-architecture-leads - - calebamiles - - idvoretskyi - - jbeda - - justaugustus -approvers: - - sig-architecture-leads - - calebamiles - - idvoretskyi - - jbeda -labels: - - kind/kep - - sig/architecture - - sig/pm diff --git a/keps/README.md b/keps/README.md deleted file mode 100644 index cfd1f5fa..00000000 --- a/keps/README.md +++ /dev/null @@ -1,4 +0,0 @@ -KEPs have moved to https://git.k8s.io/enhancements/. -<!-- -This file is a placeholder to preserve links. Please remove after 6 months or the release of Kubernetes 1.15, whichever comes first. --->
\ No newline at end of file diff --git a/keps/sig-api-machinery/0006-apply.md b/keps/sig-api-machinery/0006-apply.md deleted file mode 100644 index cfd1f5fa..00000000 --- a/keps/sig-api-machinery/0006-apply.md +++ /dev/null @@ -1,4 +0,0 @@ -KEPs have moved to https://git.k8s.io/enhancements/. -<!-- -This file is a placeholder to preserve links. Please remove after 6 months or the release of Kubernetes 1.15, whichever comes first. --->
\ No newline at end of file diff --git a/keps/sig-api-machinery/0015-dry-run.md b/keps/sig-api-machinery/0015-dry-run.md deleted file mode 100644 index cfd1f5fa..00000000 --- a/keps/sig-api-machinery/0015-dry-run.md +++ /dev/null @@ -1,4 +0,0 @@ -KEPs have moved to https://git.k8s.io/enhancements/. -<!-- -This file is a placeholder to preserve links. Please remove after 6 months or the release of Kubernetes 1.15, whichever comes first. --->
\ No newline at end of file diff --git a/keps/sig-api-machinery/0030-storage-migration.md b/keps/sig-api-machinery/0030-storage-migration.md deleted file mode 100644 index cfd1f5fa..00000000 --- a/keps/sig-api-machinery/0030-storage-migration.md +++ /dev/null @@ -1,4 +0,0 @@ -KEPs have moved to https://git.k8s.io/enhancements/. -<!-- -This file is a placeholder to preserve links. Please remove after 6 months or the release of Kubernetes 1.15, whichever comes first. --->
\ No newline at end of file diff --git a/keps/sig-apps/0026-ttl-after-finish.md b/keps/sig-apps/0026-ttl-after-finish.md deleted file mode 100644 index cfd1f5fa..00000000 --- a/keps/sig-apps/0026-ttl-after-finish.md +++ /dev/null @@ -1,4 +0,0 @@ -KEPs have moved to https://git.k8s.io/enhancements/. -<!-- -This file is a placeholder to preserve links. Please remove after 6 months or the release of Kubernetes 1.15, whichever comes first. --->
\ No newline at end of file diff --git a/keps/sig-apps/0028-20180925-optional-service-environment-variables.md b/keps/sig-apps/0028-20180925-optional-service-environment-variables.md deleted file mode 100644 index cfd1f5fa..00000000 --- a/keps/sig-apps/0028-20180925-optional-service-environment-variables.md +++ /dev/null @@ -1,4 +0,0 @@ -KEPs have moved to https://git.k8s.io/enhancements/. -<!-- -This file is a placeholder to preserve links. Please remove after 6 months or the release of Kubernetes 1.15, whichever comes first. --->
\ No newline at end of file diff --git a/keps/sig-apps/0032-portable-service-definitions.md b/keps/sig-apps/0032-portable-service-definitions.md deleted file mode 100644 index cfd1f5fa..00000000 --- a/keps/sig-apps/0032-portable-service-definitions.md +++ /dev/null @@ -1,4 +0,0 @@ -KEPs have moved to https://git.k8s.io/enhancements/. -<!-- -This file is a placeholder to preserve links. Please remove after 6 months or the release of Kubernetes 1.15, whichever comes first. --->
\ No newline at end of file diff --git a/keps/sig-apps/README.md b/keps/sig-apps/README.md deleted file mode 100644 index cfd1f5fa..00000000 --- a/keps/sig-apps/README.md +++ /dev/null @@ -1,4 +0,0 @@ -KEPs have moved to https://git.k8s.io/enhancements/. -<!-- -This file is a placeholder to preserve links. Please remove after 6 months or the release of Kubernetes 1.15, whichever comes first. --->
\ No newline at end of file diff --git a/keps/sig-apps/sidecarcontainers.md b/keps/sig-apps/sidecarcontainers.md deleted file mode 100644 index cfd1f5fa..00000000 --- a/keps/sig-apps/sidecarcontainers.md +++ /dev/null @@ -1,4 +0,0 @@ -KEPs have moved to https://git.k8s.io/enhancements/. -<!-- -This file is a placeholder to preserve links. Please remove after 6 months or the release of Kubernetes 1.15, whichever comes first. --->
\ No newline at end of file diff --git a/keps/sig-auth/0000-20170814-bounding-self-labeling-kubelets.md b/keps/sig-auth/0000-20170814-bounding-self-labeling-kubelets.md deleted file mode 100644 index cfd1f5fa..00000000 --- a/keps/sig-auth/0000-20170814-bounding-self-labeling-kubelets.md +++ /dev/null @@ -1,4 +0,0 @@ -KEPs have moved to https://git.k8s.io/enhancements/. -<!-- -This file is a placeholder to preserve links. Please remove after 6 months or the release of Kubernetes 1.15, whichever comes first. --->
\ No newline at end of file diff --git a/keps/sig-auth/0014-dynamic-audit-configuration.md b/keps/sig-auth/0014-dynamic-audit-configuration.md deleted file mode 100644 index cfd1f5fa..00000000 --- a/keps/sig-auth/0014-dynamic-audit-configuration.md +++ /dev/null @@ -1,4 +0,0 @@ -KEPs have moved to https://git.k8s.io/enhancements/. -<!-- -This file is a placeholder to preserve links. Please remove after 6 months or the release of Kubernetes 1.15, whichever comes first. --->
\ No newline at end of file diff --git a/keps/sig-autoscaling/0032-enhance-hpa-metrics-specificity.md b/keps/sig-autoscaling/0032-enhance-hpa-metrics-specificity.md deleted file mode 100644 index cfd1f5fa..00000000 --- a/keps/sig-autoscaling/0032-enhance-hpa-metrics-specificity.md +++ /dev/null @@ -1,4 +0,0 @@ -KEPs have moved to https://git.k8s.io/enhancements/. -<!-- -This file is a placeholder to preserve links. Please remove after 6 months or the release of Kubernetes 1.15, whichever comes first. --->
\ No newline at end of file diff --git a/keps/sig-autoscaling/README.md b/keps/sig-autoscaling/README.md deleted file mode 100644 index cfd1f5fa..00000000 --- a/keps/sig-autoscaling/README.md +++ /dev/null @@ -1,4 +0,0 @@ -KEPs have moved to https://git.k8s.io/enhancements/. -<!-- -This file is a placeholder to preserve links. Please remove after 6 months or the release of Kubernetes 1.15, whichever comes first. --->
\ No newline at end of file diff --git a/keps/sig-aws/20181126-aws-k8s-tester-figure-01.png b/keps/sig-aws/20181126-aws-k8s-tester-figure-01.png Binary files differdeleted file mode 100644 index 5d99b9a6..00000000 --- a/keps/sig-aws/20181126-aws-k8s-tester-figure-01.png +++ /dev/null diff --git a/keps/sig-aws/20181126-aws-k8s-tester-figure-02.png b/keps/sig-aws/20181126-aws-k8s-tester-figure-02.png Binary files differdeleted file mode 100644 index df007075..00000000 --- a/keps/sig-aws/20181126-aws-k8s-tester-figure-02.png +++ /dev/null diff --git a/keps/sig-aws/20181126-aws-k8s-tester.md b/keps/sig-aws/20181126-aws-k8s-tester.md deleted file mode 100644 index cfd1f5fa..00000000 --- a/keps/sig-aws/20181126-aws-k8s-tester.md +++ /dev/null @@ -1,4 +0,0 @@ -KEPs have moved to https://git.k8s.io/enhancements/. -<!-- -This file is a placeholder to preserve links. Please remove after 6 months or the release of Kubernetes 1.15, whichever comes first. --->
\ No newline at end of file diff --git a/keps/sig-aws/20181127-aws-ebs-csi-driver.md b/keps/sig-aws/20181127-aws-ebs-csi-driver.md deleted file mode 100644 index cfd1f5fa..00000000 --- a/keps/sig-aws/20181127-aws-ebs-csi-driver.md +++ /dev/null @@ -1,4 +0,0 @@ -KEPs have moved to https://git.k8s.io/enhancements/. -<!-- -This file is a placeholder to preserve links. Please remove after 6 months or the release of Kubernetes 1.15, whichever comes first. --->
\ No newline at end of file diff --git a/keps/sig-aws/README.md b/keps/sig-aws/README.md deleted file mode 100644 index cfd1f5fa..00000000 --- a/keps/sig-aws/README.md +++ /dev/null @@ -1,4 +0,0 @@ -KEPs have moved to https://git.k8s.io/enhancements/. -<!-- -This file is a placeholder to preserve links. Please remove after 6 months or the release of Kubernetes 1.15, whichever comes first. --->
\ No newline at end of file diff --git a/keps/sig-aws/aws-lb-prefix-annotation.md b/keps/sig-aws/aws-lb-prefix-annotation.md deleted file mode 100644 index cfd1f5fa..00000000 --- a/keps/sig-aws/aws-lb-prefix-annotation.md +++ /dev/null @@ -1,4 +0,0 @@ -KEPs have moved to https://git.k8s.io/enhancements/. -<!-- -This file is a placeholder to preserve links. Please remove after 6 months or the release of Kubernetes 1.15, whichever comes first. --->
\ No newline at end of file diff --git a/keps/sig-aws/draft-20181127-aws-alb-ingress-controller.md b/keps/sig-aws/draft-20181127-aws-alb-ingress-controller.md deleted file mode 100644 index cfd1f5fa..00000000 --- a/keps/sig-aws/draft-20181127-aws-alb-ingress-controller.md +++ /dev/null @@ -1,4 +0,0 @@ -KEPs have moved to https://git.k8s.io/enhancements/. -<!-- -This file is a placeholder to preserve links. Please remove after 6 months or the release of Kubernetes 1.15, whichever comes first. --->
\ No newline at end of file diff --git a/keps/sig-azure/0018-20180711-azure-availability-zones.md b/keps/sig-azure/0018-20180711-azure-availability-zones.md deleted file mode 100644 index cfd1f5fa..00000000 --- a/keps/sig-azure/0018-20180711-azure-availability-zones.md +++ /dev/null @@ -1,4 +0,0 @@ -KEPs have moved to https://git.k8s.io/enhancements/. -<!-- -This file is a placeholder to preserve links. Please remove after 6 months or the release of Kubernetes 1.15, whichever comes first. --->
\ No newline at end of file diff --git a/keps/sig-azure/0025-20180809-cross-resource-group-nodes.md b/keps/sig-azure/0025-20180809-cross-resource-group-nodes.md deleted file mode 100644 index cfd1f5fa..00000000 --- a/keps/sig-azure/0025-20180809-cross-resource-group-nodes.md +++ /dev/null @@ -1,4 +0,0 @@ -KEPs have moved to https://git.k8s.io/enhancements/. -<!-- -This file is a placeholder to preserve links. Please remove after 6 months or the release of Kubernetes 1.15, whichever comes first. --->
\ No newline at end of file diff --git a/keps/sig-cli/0008-kustomize.md b/keps/sig-cli/0008-kustomize.md deleted file mode 100644 index cfd1f5fa..00000000 --- a/keps/sig-cli/0008-kustomize.md +++ /dev/null @@ -1,4 +0,0 @@ -KEPs have moved to https://git.k8s.io/enhancements/. -<!-- -This file is a placeholder to preserve links. Please remove after 6 months or the release of Kubernetes 1.15, whichever comes first. --->
\ No newline at end of file diff --git a/keps/sig-cli/0024-kubectl-plugins.md b/keps/sig-cli/0024-kubectl-plugins.md deleted file mode 100644 index cfd1f5fa..00000000 --- a/keps/sig-cli/0024-kubectl-plugins.md +++ /dev/null @@ -1,4 +0,0 @@ -KEPs have moved to https://git.k8s.io/enhancements/. -<!-- -This file is a placeholder to preserve links. Please remove after 6 months or the release of Kubernetes 1.15, whichever comes first. --->
\ No newline at end of file diff --git a/keps/sig-cli/0031-datadrivencommands.md b/keps/sig-cli/0031-datadrivencommands.md deleted file mode 100644 index cfd1f5fa..00000000 --- a/keps/sig-cli/0031-datadrivencommands.md +++ /dev/null @@ -1,4 +0,0 @@ -KEPs have moved to https://git.k8s.io/enhancements/. -<!-- -This file is a placeholder to preserve links. Please remove after 6 months or the release of Kubernetes 1.15, whichever comes first. --->
\ No newline at end of file diff --git a/keps/sig-cli/0031-kustomize-integration.md b/keps/sig-cli/0031-kustomize-integration.md deleted file mode 100644 index cfd1f5fa..00000000 --- a/keps/sig-cli/0031-kustomize-integration.md +++ /dev/null @@ -1,4 +0,0 @@ -KEPs have moved to https://git.k8s.io/enhancements/. -<!-- -This file is a placeholder to preserve links. Please remove after 6 months or the release of Kubernetes 1.15, whichever comes first. --->
\ No newline at end of file diff --git a/keps/sig-cloud-provider/0002-cloud-controller-manager.md b/keps/sig-cloud-provider/0002-cloud-controller-manager.md deleted file mode 100644 index cfd1f5fa..00000000 --- a/keps/sig-cloud-provider/0002-cloud-controller-manager.md +++ /dev/null @@ -1,4 +0,0 @@ -KEPs have moved to https://git.k8s.io/enhancements/. -<!-- -This file is a placeholder to preserve links. Please remove after 6 months or the release of Kubernetes 1.15, whichever comes first. --->
\ No newline at end of file diff --git a/keps/sig-cloud-provider/0013-build-deploy-ccm.md b/keps/sig-cloud-provider/0013-build-deploy-ccm.md deleted file mode 100644 index cfd1f5fa..00000000 --- a/keps/sig-cloud-provider/0013-build-deploy-ccm.md +++ /dev/null @@ -1,4 +0,0 @@ -KEPs have moved to https://git.k8s.io/enhancements/. -<!-- -This file is a placeholder to preserve links. Please remove after 6 months or the release of Kubernetes 1.15, whichever comes first. --->
\ No newline at end of file diff --git a/keps/sig-cloud-provider/0018-testgrid-conformance-e2e.md b/keps/sig-cloud-provider/0018-testgrid-conformance-e2e.md deleted file mode 100644 index cfd1f5fa..00000000 --- a/keps/sig-cloud-provider/0018-testgrid-conformance-e2e.md +++ /dev/null @@ -1,4 +0,0 @@ -KEPs have moved to https://git.k8s.io/enhancements/. -<!-- -This file is a placeholder to preserve links. Please remove after 6 months or the release of Kubernetes 1.15, whichever comes first. --->
\ No newline at end of file diff --git a/keps/sig-cloud-provider/0019-cloud-provider-documentation.md b/keps/sig-cloud-provider/0019-cloud-provider-documentation.md deleted file mode 100644 index cfd1f5fa..00000000 --- a/keps/sig-cloud-provider/0019-cloud-provider-documentation.md +++ /dev/null @@ -1,4 +0,0 @@ -KEPs have moved to https://git.k8s.io/enhancements/. -<!-- -This file is a placeholder to preserve links. Please remove after 6 months or the release of Kubernetes 1.15, whichever comes first. --->
\ No newline at end of file diff --git a/keps/sig-cloud-provider/providers/0004-cloud-provider-template.md b/keps/sig-cloud-provider/providers/0004-cloud-provider-template.md deleted file mode 100644 index cfd1f5fa..00000000 --- a/keps/sig-cloud-provider/providers/0004-cloud-provider-template.md +++ /dev/null @@ -1,4 +0,0 @@ -KEPs have moved to https://git.k8s.io/enhancements/. -<!-- -This file is a placeholder to preserve links. Please remove after 6 months or the release of Kubernetes 1.15, whichever comes first. --->
\ No newline at end of file diff --git a/keps/sig-cloud-provider/providers/0020-cloud-provider-alibaba-cloud.md b/keps/sig-cloud-provider/providers/0020-cloud-provider-alibaba-cloud.md deleted file mode 100644 index cfd1f5fa..00000000 --- a/keps/sig-cloud-provider/providers/0020-cloud-provider-alibaba-cloud.md +++ /dev/null @@ -1,4 +0,0 @@ -KEPs have moved to https://git.k8s.io/enhancements/. -<!-- -This file is a placeholder to preserve links. Please remove after 6 months or the release of Kubernetes 1.15, whichever comes first. --->
\ No newline at end of file diff --git a/keps/sig-cloud-provider/providers/0021-cloud-provider-digitalocean.md b/keps/sig-cloud-provider/providers/0021-cloud-provider-digitalocean.md deleted file mode 100644 index cfd1f5fa..00000000 --- a/keps/sig-cloud-provider/providers/0021-cloud-provider-digitalocean.md +++ /dev/null @@ -1,4 +0,0 @@ -KEPs have moved to https://git.k8s.io/enhancements/. -<!-- -This file is a placeholder to preserve links. Please remove after 6 months or the release of Kubernetes 1.15, whichever comes first. --->
\ No newline at end of file diff --git a/keps/sig-cloud-provider/providers/0022-cloud-provider-baiducloud.md b/keps/sig-cloud-provider/providers/0022-cloud-provider-baiducloud.md deleted file mode 100644 index cfd1f5fa..00000000 --- a/keps/sig-cloud-provider/providers/0022-cloud-provider-baiducloud.md +++ /dev/null @@ -1,4 +0,0 @@ -KEPs have moved to https://git.k8s.io/enhancements/. -<!-- -This file is a placeholder to preserve links. Please remove after 6 months or the release of Kubernetes 1.15, whichever comes first. --->
\ No newline at end of file diff --git a/keps/sig-cluster-lifecycle/0003-cluster-api.md b/keps/sig-cluster-lifecycle/0003-cluster-api.md deleted file mode 100644 index cfd1f5fa..00000000 --- a/keps/sig-cluster-lifecycle/0003-cluster-api.md +++ /dev/null @@ -1,4 +0,0 @@ -KEPs have moved to https://git.k8s.io/enhancements/. -<!-- -This file is a placeholder to preserve links. Please remove after 6 months or the release of Kubernetes 1.15, whichever comes first. --->
\ No newline at end of file diff --git a/keps/sig-cluster-lifecycle/0004-bootstrap-checkpointing.md b/keps/sig-cluster-lifecycle/0004-bootstrap-checkpointing.md deleted file mode 100644 index cfd1f5fa..00000000 --- a/keps/sig-cluster-lifecycle/0004-bootstrap-checkpointing.md +++ /dev/null @@ -1,4 +0,0 @@ -KEPs have moved to https://git.k8s.io/enhancements/. -<!-- -This file is a placeholder to preserve links. Please remove after 6 months or the release of Kubernetes 1.15, whichever comes first. --->
\ No newline at end of file diff --git a/keps/sig-cluster-lifecycle/0008-kubeadm-config-versioning.md b/keps/sig-cluster-lifecycle/0008-kubeadm-config-versioning.md deleted file mode 100644 index cfd1f5fa..00000000 --- a/keps/sig-cluster-lifecycle/0008-kubeadm-config-versioning.md +++ /dev/null @@ -1,4 +0,0 @@ -KEPs have moved to https://git.k8s.io/enhancements/. -<!-- -This file is a placeholder to preserve links. Please remove after 6 months or the release of Kubernetes 1.15, whichever comes first. --->
\ No newline at end of file diff --git a/keps/sig-cluster-lifecycle/0014-20180707-componentconfig-api-types-to-staging.md b/keps/sig-cluster-lifecycle/0014-20180707-componentconfig-api-types-to-staging.md deleted file mode 100644 index cfd1f5fa..00000000 --- a/keps/sig-cluster-lifecycle/0014-20180707-componentconfig-api-types-to-staging.md +++ /dev/null @@ -1,4 +0,0 @@ -KEPs have moved to https://git.k8s.io/enhancements/. -<!-- -This file is a placeholder to preserve links. Please remove after 6 months or the release of Kubernetes 1.15, whichever comes first. --->
\ No newline at end of file diff --git a/keps/sig-cluster-lifecycle/0015-kubeadm-join-control-plane.md b/keps/sig-cluster-lifecycle/0015-kubeadm-join-control-plane.md deleted file mode 100644 index cfd1f5fa..00000000 --- a/keps/sig-cluster-lifecycle/0015-kubeadm-join-control-plane.md +++ /dev/null @@ -1,4 +0,0 @@ -KEPs have moved to https://git.k8s.io/enhancements/. -<!-- -This file is a placeholder to preserve links. Please remove after 6 months or the release of Kubernetes 1.15, whichever comes first. --->
\ No newline at end of file diff --git a/keps/sig-cluster-lifecycle/0023-documentation-for-images.md b/keps/sig-cluster-lifecycle/0023-documentation-for-images.md deleted file mode 100644 index cfd1f5fa..00000000 --- a/keps/sig-cluster-lifecycle/0023-documentation-for-images.md +++ /dev/null @@ -1,4 +0,0 @@ -KEPs have moved to https://git.k8s.io/enhancements/. -<!-- -This file is a placeholder to preserve links. Please remove after 6 months or the release of Kubernetes 1.15, whichever comes first. --->
\ No newline at end of file diff --git a/keps/sig-cluster-lifecycle/0023-kubeadm-config-v1beta1.md b/keps/sig-cluster-lifecycle/0023-kubeadm-config-v1beta1.md deleted file mode 100644 index cfd1f5fa..00000000 --- a/keps/sig-cluster-lifecycle/0023-kubeadm-config-v1beta1.md +++ /dev/null @@ -1,4 +0,0 @@ -KEPs have moved to https://git.k8s.io/enhancements/. -<!-- -This file is a placeholder to preserve links. Please remove after 6 months or the release of Kubernetes 1.15, whichever comes first. --->
\ No newline at end of file diff --git a/keps/sig-cluster-lifecycle/0023-kubeadm-init.png b/keps/sig-cluster-lifecycle/0023-kubeadm-init.png Binary files differdeleted file mode 100644 index 69c402a9..00000000 --- a/keps/sig-cluster-lifecycle/0023-kubeadm-init.png +++ /dev/null diff --git a/keps/sig-cluster-lifecycle/0023-kubeadm-join.png b/keps/sig-cluster-lifecycle/0023-kubeadm-join.png Binary files differdeleted file mode 100644 index 06bd0cef..00000000 --- a/keps/sig-cluster-lifecycle/0023-kubeadm-join.png +++ /dev/null diff --git a/keps/sig-cluster-lifecycle/0023-kubeadm-reset.png b/keps/sig-cluster-lifecycle/0023-kubeadm-reset.png Binary files differdeleted file mode 100644 index 9cd4dfe2..00000000 --- a/keps/sig-cluster-lifecycle/0023-kubeadm-reset.png +++ /dev/null diff --git a/keps/sig-cluster-lifecycle/0023-kubeadm-upgrade-apply.png b/keps/sig-cluster-lifecycle/0023-kubeadm-upgrade-apply.png Binary files differdeleted file mode 100644 index 2ecbcc75..00000000 --- a/keps/sig-cluster-lifecycle/0023-kubeadm-upgrade-apply.png +++ /dev/null diff --git a/keps/sig-cluster-lifecycle/0023-kubeadm-upgrade-node.png b/keps/sig-cluster-lifecycle/0023-kubeadm-upgrade-node.png Binary files differdeleted file mode 100644 index 235ecece..00000000 --- a/keps/sig-cluster-lifecycle/0023-kubeadm-upgrade-node.png +++ /dev/null diff --git a/keps/sig-cluster-lifecycle/0029-20180918-kubeadm-phases-beta.md b/keps/sig-cluster-lifecycle/0029-20180918-kubeadm-phases-beta.md deleted file mode 100644 index cfd1f5fa..00000000 --- a/keps/sig-cluster-lifecycle/0029-20180918-kubeadm-phases-beta.md +++ /dev/null @@ -1,4 +0,0 @@ -KEPs have moved to https://git.k8s.io/enhancements/. -<!-- -This file is a placeholder to preserve links. Please remove after 6 months or the release of Kubernetes 1.15, whichever comes first. --->
\ No newline at end of file diff --git a/keps/sig-cluster-lifecycle/0031-20181022-etcdadm.md b/keps/sig-cluster-lifecycle/0031-20181022-etcdadm.md deleted file mode 100644 index cfd1f5fa..00000000 --- a/keps/sig-cluster-lifecycle/0031-20181022-etcdadm.md +++ /dev/null @@ -1,4 +0,0 @@ -KEPs have moved to https://git.k8s.io/enhancements/. -<!-- -This file is a placeholder to preserve links. Please remove after 6 months or the release of Kubernetes 1.15, whichever comes first. --->
\ No newline at end of file diff --git a/keps/sig-cluster-lifecycle/0032-create-a-k8s-io-component-repo.md b/keps/sig-cluster-lifecycle/0032-create-a-k8s-io-component-repo.md deleted file mode 100644 index cfd1f5fa..00000000 --- a/keps/sig-cluster-lifecycle/0032-create-a-k8s-io-component-repo.md +++ /dev/null @@ -1,4 +0,0 @@ -KEPs have moved to https://git.k8s.io/enhancements/. -<!-- -This file is a placeholder to preserve links. Please remove after 6 months or the release of Kubernetes 1.15, whichever comes first. --->
\ No newline at end of file diff --git a/keps/sig-cluster-lifecycle/README.md b/keps/sig-cluster-lifecycle/README.md deleted file mode 100644 index cfd1f5fa..00000000 --- a/keps/sig-cluster-lifecycle/README.md +++ /dev/null @@ -1,4 +0,0 @@ -KEPs have moved to https://git.k8s.io/enhancements/. -<!-- -This file is a placeholder to preserve links. Please remove after 6 months or the release of Kubernetes 1.15, whichever comes first. --->
\ No newline at end of file diff --git a/keps/sig-contributor-experience/0005-contributor-site.md b/keps/sig-contributor-experience/0005-contributor-site.md deleted file mode 100644 index cfd1f5fa..00000000 --- a/keps/sig-contributor-experience/0005-contributor-site.md +++ /dev/null @@ -1,4 +0,0 @@ -KEPs have moved to https://git.k8s.io/enhancements/. -<!-- -This file is a placeholder to preserve links. Please remove after 6 months or the release of Kubernetes 1.15, whichever comes first. --->
\ No newline at end of file diff --git a/keps/sig-contributor-experience/0007-20180403-community-forum.md b/keps/sig-contributor-experience/0007-20180403-community-forum.md deleted file mode 100644 index cfd1f5fa..00000000 --- a/keps/sig-contributor-experience/0007-20180403-community-forum.md +++ /dev/null @@ -1,4 +0,0 @@ -KEPs have moved to https://git.k8s.io/enhancements/. -<!-- -This file is a placeholder to preserve links. Please remove after 6 months or the release of Kubernetes 1.15, whichever comes first. --->
\ No newline at end of file diff --git a/keps/sig-instrumentation/0031-kubernetes-metrics-overhaul.md b/keps/sig-instrumentation/0031-kubernetes-metrics-overhaul.md deleted file mode 100644 index cfd1f5fa..00000000 --- a/keps/sig-instrumentation/0031-kubernetes-metrics-overhaul.md +++ /dev/null @@ -1,4 +0,0 @@ -KEPs have moved to https://git.k8s.io/enhancements/. -<!-- -This file is a placeholder to preserve links. Please remove after 6 months or the release of Kubernetes 1.15, whichever comes first. --->
\ No newline at end of file diff --git a/keps/sig-network/0007-pod-ready++.md b/keps/sig-network/0007-pod-ready++.md deleted file mode 100644 index cfd1f5fa..00000000 --- a/keps/sig-network/0007-pod-ready++.md +++ /dev/null @@ -1,4 +0,0 @@ -KEPs have moved to https://git.k8s.io/enhancements/. -<!-- -This file is a placeholder to preserve links. Please remove after 6 months or the release of Kubernetes 1.15, whichever comes first. --->
\ No newline at end of file diff --git a/keps/sig-network/0010-20180314-coredns-GA-proposal.md b/keps/sig-network/0010-20180314-coredns-GA-proposal.md deleted file mode 100644 index cfd1f5fa..00000000 --- a/keps/sig-network/0010-20180314-coredns-GA-proposal.md +++ /dev/null @@ -1,4 +0,0 @@ -KEPs have moved to https://git.k8s.io/enhancements/. -<!-- -This file is a placeholder to preserve links. Please remove after 6 months or the release of Kubernetes 1.15, whichever comes first. --->
\ No newline at end of file diff --git a/keps/sig-network/0011-ipvs-proxier.md b/keps/sig-network/0011-ipvs-proxier.md deleted file mode 100644 index cfd1f5fa..00000000 --- a/keps/sig-network/0011-ipvs-proxier.md +++ /dev/null @@ -1,4 +0,0 @@ -KEPs have moved to https://git.k8s.io/enhancements/. -<!-- -This file is a placeholder to preserve links. Please remove after 6 months or the release of Kubernetes 1.15, whichever comes first. --->
\ No newline at end of file diff --git a/keps/sig-network/0012-20180518-coredns-default-proposal.md b/keps/sig-network/0012-20180518-coredns-default-proposal.md deleted file mode 100644 index cfd1f5fa..00000000 --- a/keps/sig-network/0012-20180518-coredns-default-proposal.md +++ /dev/null @@ -1,4 +0,0 @@ -KEPs have moved to https://git.k8s.io/enhancements/. -<!-- -This file is a placeholder to preserve links. Please remove after 6 months or the release of Kubernetes 1.15, whichever comes first. --->
\ No newline at end of file diff --git a/keps/sig-network/0015-20180614-SCTP-support.md b/keps/sig-network/0015-20180614-SCTP-support.md deleted file mode 100644 index cfd1f5fa..00000000 --- a/keps/sig-network/0015-20180614-SCTP-support.md +++ /dev/null @@ -1,4 +0,0 @@ -KEPs have moved to https://git.k8s.io/enhancements/. -<!-- -This file is a placeholder to preserve links. Please remove after 6 months or the release of Kubernetes 1.15, whichever comes first. --->
\ No newline at end of file diff --git a/keps/sig-network/0030-nodelocal-dns-cache.md b/keps/sig-network/0030-nodelocal-dns-cache.md deleted file mode 100644 index cfd1f5fa..00000000 --- a/keps/sig-network/0030-nodelocal-dns-cache.md +++ /dev/null @@ -1,4 +0,0 @@ -KEPs have moved to https://git.k8s.io/enhancements/. -<!-- -This file is a placeholder to preserve links. Please remove after 6 months or the release of Kubernetes 1.15, whichever comes first. --->
\ No newline at end of file diff --git a/keps/sig-network/0031-20181017-kube-proxy-services-optional.md b/keps/sig-network/0031-20181017-kube-proxy-services-optional.md deleted file mode 100644 index cfd1f5fa..00000000 --- a/keps/sig-network/0031-20181017-kube-proxy-services-optional.md +++ /dev/null @@ -1,4 +0,0 @@ -KEPs have moved to https://git.k8s.io/enhancements/. -<!-- -This file is a placeholder to preserve links. Please remove after 6 months or the release of Kubernetes 1.15, whichever comes first. --->
\ No newline at end of file diff --git a/keps/sig-network/README.md b/keps/sig-network/README.md deleted file mode 100644 index cfd1f5fa..00000000 --- a/keps/sig-network/README.md +++ /dev/null @@ -1,4 +0,0 @@ -KEPs have moved to https://git.k8s.io/enhancements/. -<!-- -This file is a placeholder to preserve links. Please remove after 6 months or the release of Kubernetes 1.15, whichever comes first. --->
\ No newline at end of file diff --git a/keps/sig-node/0008-20180430-promote-sysctl-annotations-to-fields.md b/keps/sig-node/0008-20180430-promote-sysctl-annotations-to-fields.md deleted file mode 100644 index cfd1f5fa..00000000 --- a/keps/sig-node/0008-20180430-promote-sysctl-annotations-to-fields.md +++ /dev/null @@ -1,4 +0,0 @@ -KEPs have moved to https://git.k8s.io/enhancements/. -<!-- -This file is a placeholder to preserve links. Please remove after 6 months or the release of Kubernetes 1.15, whichever comes first. --->
\ No newline at end of file diff --git a/keps/sig-node/0009-node-heartbeat.md b/keps/sig-node/0009-node-heartbeat.md deleted file mode 100644 index cfd1f5fa..00000000 --- a/keps/sig-node/0009-node-heartbeat.md +++ /dev/null @@ -1,4 +0,0 @@ -KEPs have moved to https://git.k8s.io/enhancements/. -<!-- -This file is a placeholder to preserve links. Please remove after 6 months or the release of Kubernetes 1.15, whichever comes first. --->
\ No newline at end of file diff --git a/keps/sig-node/0014-runtime-class.md b/keps/sig-node/0014-runtime-class.md deleted file mode 100644 index cfd1f5fa..00000000 --- a/keps/sig-node/0014-runtime-class.md +++ /dev/null @@ -1,4 +0,0 @@ -KEPs have moved to https://git.k8s.io/enhancements/. -<!-- -This file is a placeholder to preserve links. Please remove after 6 months or the release of Kubernetes 1.15, whichever comes first. --->
\ No newline at end of file diff --git a/keps/sig-node/0030-20180906-quotas-for-ephemeral-storage.md b/keps/sig-node/0030-20180906-quotas-for-ephemeral-storage.md deleted file mode 100644 index cfd1f5fa..00000000 --- a/keps/sig-node/0030-20180906-quotas-for-ephemeral-storage.md +++ /dev/null @@ -1,4 +0,0 @@ -KEPs have moved to https://git.k8s.io/enhancements/. -<!-- -This file is a placeholder to preserve links. Please remove after 6 months or the release of Kubernetes 1.15, whichever comes first. --->
\ No newline at end of file diff --git a/keps/sig-node/compute-device-assignment.md b/keps/sig-node/compute-device-assignment.md deleted file mode 100644 index cfd1f5fa..00000000 --- a/keps/sig-node/compute-device-assignment.md +++ /dev/null @@ -1,4 +0,0 @@ -KEPs have moved to https://git.k8s.io/enhancements/. -<!-- -This file is a placeholder to preserve links. Please remove after 6 months or the release of Kubernetes 1.15, whichever comes first. --->
\ No newline at end of file diff --git a/keps/sig-release/k8s-image-promoter.md b/keps/sig-release/k8s-image-promoter.md deleted file mode 100644 index cfd1f5fa..00000000 --- a/keps/sig-release/k8s-image-promoter.md +++ /dev/null @@ -1,4 +0,0 @@ -KEPs have moved to https://git.k8s.io/enhancements/. -<!-- -This file is a placeholder to preserve links. Please remove after 6 months or the release of Kubernetes 1.15, whichever comes first. --->
\ No newline at end of file diff --git a/keps/sig-release/promote-process.jpg b/keps/sig-release/promote-process.jpg Binary files differdeleted file mode 100644 index 8b74b539..00000000 --- a/keps/sig-release/promote-process.jpg +++ /dev/null diff --git a/keps/sig-scheduling/node-labels-quota.md b/keps/sig-scheduling/node-labels-quota.md deleted file mode 100644 index cfd1f5fa..00000000 --- a/keps/sig-scheduling/node-labels-quota.md +++ /dev/null @@ -1,4 +0,0 @@ -KEPs have moved to https://git.k8s.io/enhancements/. -<!-- -This file is a placeholder to preserve links. Please remove after 6 months or the release of Kubernetes 1.15, whichever comes first. --->
\ No newline at end of file diff --git a/keps/sig-storage/0031-20181029-VolumeSubpathEnvExpansion-apichange.md b/keps/sig-storage/0031-20181029-VolumeSubpathEnvExpansion-apichange.md deleted file mode 100644 index cfd1f5fa..00000000 --- a/keps/sig-storage/0031-20181029-VolumeSubpathEnvExpansion-apichange.md +++ /dev/null @@ -1,4 +0,0 @@ -KEPs have moved to https://git.k8s.io/enhancements/. -<!-- -This file is a placeholder to preserve links. Please remove after 6 months or the release of Kubernetes 1.15, whichever comes first. --->
\ No newline at end of file diff --git a/keps/sig-testing/0028-20180625-new-label-for-trusted-pr-identification.md b/keps/sig-testing/0028-20180625-new-label-for-trusted-pr-identification.md deleted file mode 100644 index cfd1f5fa..00000000 --- a/keps/sig-testing/0028-20180625-new-label-for-trusted-pr-identification.md +++ /dev/null @@ -1,4 +0,0 @@ -KEPs have moved to https://git.k8s.io/enhancements/. -<!-- -This file is a placeholder to preserve links. Please remove after 6 months or the release of Kubernetes 1.15, whichever comes first. --->
\ No newline at end of file diff --git a/mentoring/OWNERS b/mentoring/OWNERS index 29b719f2..ca156d3b 100644 --- a/mentoring/OWNERS +++ b/mentoring/OWNERS @@ -5,6 +5,7 @@ reviewers: - nikhita approvers: - parispittman + - nikhita - sig-contributor-experience-leads labels: - sig/contributor-experience diff --git a/mentoring/group-mentee-guide.md b/mentoring/group-mentee-guide.md index 07ee17ba..bbf7c648 100644 --- a/mentoring/group-mentee-guide.md +++ b/mentoring/group-mentee-guide.md @@ -69,7 +69,7 @@ Suggested Activity - the docs - k/community is your friend for upstream workflows, processes, and information around contributing - This repo includes the community/devel folder which will be extra helpful that includes docs such as: - - [Code Review Expectations](/contributors/guide/community-expectations.md) + - [Code Review Expectations](/contributors/guide/expectations.md) - [Collaboration on k8s](/contributors/guide/collab.md) diff --git a/mentoring/meet-our-contributors.md b/mentoring/meet-our-contributors.md index 72f4a922..060731a8 100644 --- a/mentoring/meet-our-contributors.md +++ b/mentoring/meet-our-contributors.md @@ -6,8 +6,8 @@ Meet Our Contributors gives you a monthly one-hour opportunity to ask questions ## When: Every first Wednesday of the month at the following times. Grab a copy of the calendar to yours from [kubernetes.io/community](https://kubernetes.io/community/) -* 02:30pm UTC -* 08:00pm UTC +* 02:30pm UTC [Convert to your timezone](https://www.thetimezoneconverter.com/?t=02%3A30%20pm&tz=UTC&). +* 08:00pm UTC [Convert to your timezone](https://www.thetimezoneconverter.com/?t=08%3A00%20pm&tz=UTC&). Tune into the [Kubernetes YouTube Channel](https://www.youtube.com/c/KubernetesCommunity/live) to follow along with video and [#meet-our-contributors](https://kubernetes.slack.com/messages/meet-our-contributors) on Slack for questions and discourse. @@ -20,26 +20,26 @@ Tune into the [Kubernetes YouTube Channel](https://www.youtube.com/c/KubernetesC * Testing ## What’s off-topic: -* End-user questions (Check out [#office-hours](https://kubernetes.slack.com/messages/office-hours) on slack and details [here](/events/office-hours.md)) +* End-user questions (Check out [#office-hours](https://kubernetes.slack.com/messages/office-hours) on Slack and details [here](/events/office-hours.md)) ## Submitting questions and/or code for review/walk through: ### Questions: -* Day of on twitter - use the hashtag [#k8smoc](https://twitter.com/hashtag/k8smoc) after your question +* Day of on Twitter - use the hashtag [#k8smoc](https://twitter.com/hashtag/k8smoc) after your question * Slack - Ask your question in [#meet-our-contributors](https://kubernetes.slack.com/messages/meet-our-contributors) -Questions will be on a first-come, first-served basis. First half will be dedicated to questions for contributors and the second half, we will pick a problem (in advance) for peer code review. +Questions will be on a first-come, first-served basis. The first half of the discussion will be dedicated to questions for contributors and in the second half, we will pick a problem (in advance) for peer code review. ### Code snip / PR for peer code review / Suggestion for part of codebase walk through: -* At least 24 hours before the session to slack channel (#meet-our-contributors) +* At least 24 hours before the session to Slack channel (#meet-our-contributors) -Problems will be picked based on time commitment needed, skills of the reviewer, and if a large amount are submitted, need for the project. +Problems will be chosen based on time commitment needed, the skills of the reviewer, and if a large amount are submitted, need for the project. ## Call for Volunteers: Contributors - [sign up to answer questions!](https://goo.gl/uhEJ33) Expectations of volunteers: -* Be on 5 mins early. You can look at questions in the queue by joining the #meet-our-contributors slack channel to give yourself some prep. -* Expect questions about the contribution process, membership, navigating the kubernetes seas, testing, and general questions about you and your path to open source/kubernetes. It's ok if you don't know the answer! -* We will be using video chat (zoom but live streaming through YouTube) but voice only is fine if you are more comfortable with that. -* Be willing to provide suggestions and feedback to make this better! +* Be online 5 minutes early. You can look at questions in the queue by joining the #meet-our-contributors Slack channel to give yourself some time to prepare. +* Expect questions about the contribution process, membership, navigating the Kubernetes seas, testing, and general questions about you and your path to open source/Kubernetes. It's okay if you don't know the answer! +* We will be using video chat (Zoom, but livestreaming through YouTube) but voice-only is fine if you are more comfortable with that. +* Be willing to provide suggestions and feedback to make this process & experience better! diff --git a/mentoring/mentor-guide.md b/mentoring/mentor-guide.md index 52e460fe..32b595c3 100644 --- a/mentoring/mentor-guide.md +++ b/mentoring/mentor-guide.md @@ -94,6 +94,12 @@ A former GSoC intern for Kubernetes is now leading this for us - mentoring works * Typically a one hour a quarter time commitment is expected; this is an opt-in sign up. * You will need to be on the call 5 minutes early to test audio quality and make sure we are good to go for streaming. +*[Pod Mentoring](mentoring-events.md)* +* Short group sessions with other mentors during KubeCon/CloudNativeCon events answering mentee questions + * Designed to eliminate the awkwardness of 1:1s and ensure a wider breadth of knowledge to reduce pressure of having to provide an answer + * Requires one of the mentors to be an "anchor" who is responsible for facilitating the conversation + * Great way to learn about struggles of new contributors +* Mentees will be advised to ask well-formed questions to maximize time for mentor feedback ### Other resources TODO - add external resources/links on being a good mentor, etc. diff --git a/mentoring/mentoring-events.md b/mentoring/mentoring-events.md index de9d0a23..cd3fa7f3 100644 --- a/mentoring/mentoring-events.md +++ b/mentoring/mentoring-events.md @@ -1,16 +1,11 @@ # Mentoring Activities at Events -During events like KubeCon and other related events that arise, there will be the opportunity for mentoring activities. This doc will list those and their respective details. The KubeCon events are run by CNCF/LF and not Contributor Experience although we may advise and members could help out. +During events like KubeCon and other related events that arise, there will be the opportunity for mentoring activities. This doc will list those. The KubeCon events are run by CNCF/LF and not Contributor Experience although we may advise and members could help out. ---- +## Pod Mentoring -CNCF is hosting another speed networking and mentoring session during [KubeCon + CloudNativeCon Europe 2018](https://events.linuxfoundation.org/kubecon-eu-2018/). -Speed Networking & Mentoring Event Details: -Date: Wednesday, May 2 -Time: 15:40 - 17:00 -Location: Meeting Rooms 18 & 19 -Registration: Complimentary - pre-registration required +Pod mentoring gathers a group of mentors to help you get your Kubernetes-related questions answered quickly and efficiently. More mentors means more breadth of knowledge and experience, resulting in a better chance of at least one person being able to answer your question. It can also mean multiple perspectives since there isn't always one right answer! -Please help spread the word by encouraging KubeCon attendees to sign up for the free session. Pre-registration for this session is required - so fill out the [MENTOR](https://docs.google.com/forms/d/e/1FAIpQLSe6eClecYb4ZXWPpWDrk7FIqh6qPQPLLnXk9hSqC0b46sXO9Q/viewform) or [MENTEE](https://docs.google.com/forms/d/e/1FAIpQLSdxjqDS59NE1mi42JHDvHngSxBS4lGDDZzmXOLDO7nBawFhJw/viewform) forms today. +To be respectul of each mentors time, please have succinct questions ready and a brief summary of what you've tried and what you'd like or expect to happen. For instance, an example of a poor question would be, "How do I write a controller?" An example of a good question would be, "I'd like to create a custom controller that checks for nodes that are in the 'Not Ready' state and print our their IP address. I'm not familiar with Golang so instead of using client-go I've looked at MetaController as a way to get started using Javascript. I'm having trouble with this portion of the webhook, can you please take a look?" -The session is for those who are new or not so new to the community. Mentees are paired with mentors from across the community and CNCF projects and have the opportunity to explore growing a cloud native career, getting more involved in the ecosystem or working with new, emerging projects in areas like networking or service meshes.
\ No newline at end of file +Pod mentoring will be available during KubeCon + CloudNativeCon events. You will need to register to attend to be eligible for mentoring. For those who wish to be a mentor please take a look at the [mentor-guide](mentor-guide.md). diff --git a/sig-api-machinery/README.md b/sig-api-machinery/README.md index 8765e5cf..8dce11e4 100644 --- a/sig-api-machinery/README.md +++ b/sig-api-machinery/README.md @@ -28,100 +28,96 @@ The Chairs of the SIG run operations and processes governing the SIG. * Daniel Smith (**[@lavalamp](https://github.com/lavalamp)**), Google ## Contact -* [Slack](https://kubernetes.slack.com/messages/sig-api-machinery) -* [Mailing list](https://groups.google.com/forum/#!forum/kubernetes-sig-api-machinery) -* [Open Community Issues/PRs](https://github.com/kubernetes/community/labels/sig%2Fapi-machinery) +- Slack: [#sig-api-machinery](https://kubernetes.slack.com/messages/sig-api-machinery) +- [Mailing list](https://groups.google.com/forum/#!forum/kubernetes-sig-api-machinery) +- [Open Community Issues/PRs](https://github.com/kubernetes/community/labels/sig%2Fapi-machinery) +- GitHub Teams: + - [@kubernetes/sig-api-machinery-api-reviews](https://github.com/orgs/kubernetes/teams/sig-api-machinery-api-reviews) - API Changes and Reviews (API Machinery APIs, NOT all APIs) + - [@kubernetes/sig-api-machinery-bugs](https://github.com/orgs/kubernetes/teams/sig-api-machinery-bugs) - Bug Triage and Troubleshooting + - [@kubernetes/sig-api-machinery-feature-requests](https://github.com/orgs/kubernetes/teams/sig-api-machinery-feature-requests) - Feature Requests + - [@kubernetes/sig-api-machinery-misc](https://github.com/orgs/kubernetes/teams/sig-api-machinery-misc) - General Discussion + - [@kubernetes/sig-api-machinery-pr-reviews](https://github.com/orgs/kubernetes/teams/sig-api-machinery-pr-reviews) - PR Reviews + - [@kubernetes/sig-api-machinery-proposals](https://github.com/orgs/kubernetes/teams/sig-api-machinery-proposals) - Design Proposals + - [@kubernetes/sig-api-machinery-test-failures](https://github.com/orgs/kubernetes/teams/sig-api-machinery-test-failures) - Test Failures and Triage ## Subprojects -The following subprojects are owned by sig-api-machinery: -- **component-base** - - Owners: - - https://raw.githubusercontent.com/kubernetes-sigs/legacyflag/master/OWNERS - - https://raw.githubusercontent.com/kubernetes/component-base/master/OWNERS - - https://raw.githubusercontent.com/kubernetes/kubernetes/master/staging/src/k8s.io/component-base/OWNERS -- **control-plane-features** - - Owners: - - https://raw.githubusercontent.com/kubernetes-sigs/kube-storage-version-migrator/master/OWNERS - - https://raw.githubusercontent.com/kubernetes/kubernetes/master/pkg/controller/garbagecollector/OWNERS - - https://raw.githubusercontent.com/kubernetes/kubernetes/master/pkg/controller/namespace/OWNERS - - https://raw.githubusercontent.com/kubernetes/kubernetes/master/pkg/quota/OWNERS -- **idl-schema-client-pipeline** - - Owners: - - https://raw.githubusercontent.com/kubernetes-client/gen/master/OWNERS - - https://raw.githubusercontent.com/kubernetes-sigs/structured-merge-diff/master/OWNERS - - https://raw.githubusercontent.com/kubernetes/code-generator/master/OWNERS - - https://raw.githubusercontent.com/kubernetes/gengo/master/OWNERS - - https://raw.githubusercontent.com/kubernetes/kube-openapi/master/OWNERS - - https://raw.githubusercontent.com/kubernetes/kubernetes/master/staging/src/k8s.io/code-generator/OWNERS -- **kubernetes-clients** - - Owners: - - https://raw.githubusercontent.com/kubernetes-client/csharp/master/OWNERS - - https://raw.githubusercontent.com/kubernetes-client/go-base/master/OWNERS - - https://raw.githubusercontent.com/kubernetes-client/go/master/OWNERS - - https://raw.githubusercontent.com/kubernetes-client/haskell/master/OWNERS - - https://raw.githubusercontent.com/kubernetes-client/java/master/OWNERS - - https://raw.githubusercontent.com/kubernetes-client/javascript/master/OWNERS - - https://raw.githubusercontent.com/kubernetes-client/perl/master/OWNERS - - https://raw.githubusercontent.com/kubernetes-client/python-base/master/OWNERS - - https://raw.githubusercontent.com/kubernetes-client/ruby/master/OWNERS - - https://raw.githubusercontent.com/kubernetes-incubator/client-python/master/OWNERS - - https://raw.githubusercontent.com/kubernetes/client-go/master/OWNERS - - https://raw.githubusercontent.com/kubernetes/kubernetes/master/staging/src/k8s.io/client-go/OWNERS -- **server-api-aggregation** - - Owners: - - https://raw.githubusercontent.com/kubernetes/kube-aggregator/master/OWNERS - - https://raw.githubusercontent.com/kubernetes/kubernetes/master/staging/src/k8s.io/kube-aggregator/OWNERS -- **server-binaries** - - Owners: - - https://raw.githubusercontent.com/kubernetes/kubernetes/master/cmd/cloud-controller-manager/OWNERS - - https://raw.githubusercontent.com/kubernetes/kubernetes/master/cmd/controller-manager/OWNERS - - https://raw.githubusercontent.com/kubernetes/kubernetes/master/cmd/kube-apiserver/OWNERS - - https://raw.githubusercontent.com/kubernetes/kubernetes/master/cmd/kube-controller-manager/OWNERS - - https://raw.githubusercontent.com/kubernetes/kubernetes/master/pkg/kubeapiserver/OWNERS - - https://raw.githubusercontent.com/kubernetes/kubernetes/master/pkg/master/OWNERS -- **server-crd** - - Owners: - - https://raw.githubusercontent.com/kubernetes/apiextensions-apiserver/master/OWNERS - - https://raw.githubusercontent.com/kubernetes/kubernetes/master/staging/src/k8s.io/apiextensions-apiserver/OWNERS -- **server-frameworks** - - Owners: - - https://raw.githubusercontent.com/kubernetes/apiserver/master/OWNERS - - https://raw.githubusercontent.com/kubernetes/kubernetes/master/staging/src/k8s.io/apiserver/OWNERS -- **server-sdk** - - Owners: - - https://raw.githubusercontent.com/kubernetes-incubator/apiserver-builder-alpha/master/OWNERS - - https://raw.githubusercontent.com/kubernetes-sigs/controller-runtime/master/OWNERS - - https://raw.githubusercontent.com/kubernetes-sigs/controller-tools/master/OWNERS - - https://raw.githubusercontent.com/kubernetes-sigs/kubebuilder-declarative-pattern/master/OWNERS - - https://raw.githubusercontent.com/kubernetes-sigs/kubebuilder/master/OWNERS - - https://raw.githubusercontent.com/kubernetes/kubernetes/master/staging/src/k8s.io/sample-apiserver/OWNERS - - https://raw.githubusercontent.com/kubernetes/kubernetes/master/staging/src/k8s.io/sample-controller/OWNERS - - https://raw.githubusercontent.com/kubernetes/sample-apiserver/master/OWNERS - - https://raw.githubusercontent.com/kubernetes/sample-controller/master/OWNERS -- **universal-machinery** - - Owners: - - https://raw.githubusercontent.com/kubernetes/apimachinery/master/OWNERS - - https://raw.githubusercontent.com/kubernetes/kubernetes/master/staging/src/k8s.io/apimachinery/OWNERS -- **yaml** - - Owners: - - https://raw.githubusercontent.com/kubernetes-sigs/yaml/master/OWNERS - -## GitHub Teams - -The below teams can be mentioned on issues and PRs in order to get attention from the right people. -Note that the links to display team membership will only work if you are a member of the org. - -| Team Name | Details | Description | -| --------- |:-------:| ----------- | -| @kubernetes/sig-api-machinery-api-reviews | [link](https://github.com/orgs/kubernetes/teams/sig-api-machinery-api-reviews) | API Changes and Reviews (API Machinery APIs, NOT all APIs) | -| @kubernetes/sig-api-machinery-bugs | [link](https://github.com/orgs/kubernetes/teams/sig-api-machinery-bugs) | Bug Triage and Troubleshooting | -| @kubernetes/sig-api-machinery-feature-requests | [link](https://github.com/orgs/kubernetes/teams/sig-api-machinery-feature-requests) | Feature Requests | -| @kubernetes/sig-api-machinery-misc | [link](https://github.com/orgs/kubernetes/teams/sig-api-machinery-misc) | General Discussion | -| @kubernetes/sig-api-machinery-pr-reviews | [link](https://github.com/orgs/kubernetes/teams/sig-api-machinery-pr-reviews) | PR Reviews | -| @kubernetes/sig-api-machinery-proposals | [link](https://github.com/orgs/kubernetes/teams/sig-api-machinery-proposals) | Design Proposals | -| @kubernetes/sig-api-machinery-test-failures | [link](https://github.com/orgs/kubernetes/teams/sig-api-machinery-test-failures) | Test Failures and Triage | - +The following [subprojects][subproject-definition] are owned by sig-api-machinery: +### component-base +- **Owners:** + - https://raw.githubusercontent.com/kubernetes-sigs/legacyflag/master/OWNERS + - https://raw.githubusercontent.com/kubernetes/component-base/master/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/staging/src/k8s.io/component-base/OWNERS +### control-plane-features +- **Owners:** + - https://raw.githubusercontent.com/kubernetes-sigs/kube-storage-version-migrator/master/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/pkg/controller/garbagecollector/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/pkg/controller/namespace/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/pkg/quota/OWNERS +### idl-schema-client-pipeline +- **Owners:** + - https://raw.githubusercontent.com/kubernetes-client/gen/master/OWNERS + - https://raw.githubusercontent.com/kubernetes-sigs/structured-merge-diff/master/OWNERS + - https://raw.githubusercontent.com/kubernetes/code-generator/master/OWNERS + - https://raw.githubusercontent.com/kubernetes/gengo/master/OWNERS + - https://raw.githubusercontent.com/kubernetes/kube-openapi/master/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/staging/src/k8s.io/code-generator/OWNERS +### kubernetes-clients +- **Owners:** + - https://raw.githubusercontent.com/kubernetes-client/csharp/master/OWNERS + - https://raw.githubusercontent.com/kubernetes-client/go-base/master/OWNERS + - https://raw.githubusercontent.com/kubernetes-client/go/master/OWNERS + - https://raw.githubusercontent.com/kubernetes-client/haskell/master/OWNERS + - https://raw.githubusercontent.com/kubernetes-client/java/master/OWNERS + - https://raw.githubusercontent.com/kubernetes-client/javascript/master/OWNERS + - https://raw.githubusercontent.com/kubernetes-client/perl/master/OWNERS + - https://raw.githubusercontent.com/kubernetes-client/python-base/master/OWNERS + - https://raw.githubusercontent.com/kubernetes-client/ruby/master/OWNERS + - https://raw.githubusercontent.com/kubernetes-incubator/client-python/master/OWNERS + - https://raw.githubusercontent.com/kubernetes/client-go/master/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/staging/src/k8s.io/client-go/OWNERS +### server-api-aggregation +- **Owners:** + - https://raw.githubusercontent.com/kubernetes/kube-aggregator/master/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/staging/src/k8s.io/kube-aggregator/OWNERS +### server-binaries +- **Owners:** + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/cmd/cloud-controller-manager/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/cmd/controller-manager/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/cmd/kube-apiserver/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/cmd/kube-controller-manager/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/pkg/kubeapiserver/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/pkg/master/OWNERS +### server-crd +- **Owners:** + - https://raw.githubusercontent.com/kubernetes/apiextensions-apiserver/master/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/staging/src/k8s.io/apiextensions-apiserver/OWNERS +### server-frameworks +- **Owners:** + - https://raw.githubusercontent.com/kubernetes/apiserver/master/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/staging/src/k8s.io/apiserver/OWNERS +### server-sdk +- **Owners:** + - https://raw.githubusercontent.com/kubernetes-sigs/apiserver-builder-alpha/master/OWNERS + - https://raw.githubusercontent.com/kubernetes-sigs/controller-runtime/master/OWNERS + - https://raw.githubusercontent.com/kubernetes-sigs/controller-tools/master/OWNERS + - https://raw.githubusercontent.com/kubernetes-sigs/kubebuilder-declarative-pattern/master/OWNERS + - https://raw.githubusercontent.com/kubernetes-sigs/kubebuilder/master/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/staging/src/k8s.io/sample-apiserver/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/staging/src/k8s.io/sample-controller/OWNERS + - https://raw.githubusercontent.com/kubernetes/sample-apiserver/master/OWNERS + - https://raw.githubusercontent.com/kubernetes/sample-controller/master/OWNERS +- **Contact:** + - [Mailing List](https://groups.google.com/forum/#!forum/kubebuilder) +### universal-machinery +- **Owners:** + - https://raw.githubusercontent.com/kubernetes/apimachinery/master/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/staging/src/k8s.io/apimachinery/OWNERS +### yaml +- **Owners:** + - https://raw.githubusercontent.com/kubernetes-sigs/yaml/master/OWNERS + +[subproject-definition]: https://github.com/kubernetes/community/blob/master/governance.md#subprojects <!-- BEGIN CUSTOM CONTENT --> ## Additional links diff --git a/sig-apps/CONTRIBUTING.md b/sig-apps/CONTRIBUTING.md index 4dab7b3a..f065331c 100644 --- a/sig-apps/CONTRIBUTING.md +++ b/sig-apps/CONTRIBUTING.md @@ -33,53 +33,12 @@ controller is small. Like other parts of core Kubernetes, you can learn about contributing code or reviewing pull requests via the [Contributors Guide](https://github.com/kubernetes/community/tree/master/contributors/guide). -### Helm +### Application CRD and Controller -[Helm](https://helm.sh) is the package manager for Kubernetes. The packages for -Helm are called Charts. Helm version 2 is the current stable release series and -is currently focused on stability, minor non-breaking feature additions, and -better documentation. - -Helm is a sub-project on a much smaller scale from Kubernetes core, the most -active repository on GitHub. Contributing to Helm and navigating the project is -similar to many other open source projects. - -The [Helm Contributing Guide](https://github.com/kubernetes/helm/blob/master/CONTRIBUTING.md) -contains much of what you need to get started including: - -* Support and conversation channels -* Filing issues and the lifecycle of issues -* Project milestones and what [Semantic Versioning](http://semver.org) means to Helm -* Details on contributing a patch, via a pull request, and what to expect - -The Helm maintainers have a weekly public meeting that's open to anyone to attend. -The meeting is recorded and available on YouTube for those unable to attend. -Details on the meeting are in the [Readme](README.md) for SIG Apps. - -In addition to Helm itself, there are a number of sub-projects of Helm. These -projects can be found on the [kubernetes-helm](https://github.com/kubernetes-helm). -Each of these projects has its own contribution guide but is part of the broader -Helm project. - -### Community Charts - -[Charts](https://github.com/kubernetes/charts) is a community curated set of Helm -packages for Kubernetes. While organizations and individuals are encouraged to -create their own charts – something Helm provides tools for – the community -charts are a place for people to use, share, and contribute to. - -There are a few ways to contribute to charts: - -1. Create or improve charts -1. Contribute to continuous testing -1. Write down best practices or document other details - -Charts has its own [contributing guide](https://github.com/kubernetes/charts/blob/master/CONTRIBUTING.md) -and [review guidelines](https://github.com/kubernetes/charts/blob/master/REVIEW_GUIDELINES.md) -that can act as a launching off point for involvement. - -The charts maintainers have a weekly meeting in addition to the normal SIG Apps -meeting. Details on the meeting are in the [Readme](README.md) for SIG Apps. +The [Application CRD and controller](https://github.com/kubernetes-sigs/application) +provides a method to group application resources and describe the application. +This SIG sponsored project has a fairly minimal and straight forward [contributing +process](https://github.com/kubernetes-sigs/application/blob/master/CONTRIBUTING.md) ### Kompose @@ -87,7 +46,7 @@ meeting. Details on the meeting are in the [Readme](README.md) for SIG Apps. (the docker tooling). This project translates Docker compose configuration into Kubernetes configuration. -Kompose, like Helm and the community charts, has its own [contributing guide](https://github.com/kubernetes/kompose/blob/master/CONTRIBUTING.md). +Kompose has its own [contributing guide](https://github.com/kubernetes/kompose/blob/master/CONTRIBUTING.md). ## Contributing Beyond Code @@ -98,10 +57,8 @@ There are a couple ways to contribute beyond code and the sub-projects. They inc tying different tools together, and more. If you are interested in contributing a demo please contact the SIG leads via the [mailing list](https://groups.google.com/forum/#!forum/kubernetes-sig-apps) -* The **App Def Working Group** is a cross collaboration with SIG CLI, SIG API - Machinery, and others to look at how we can improve the core tooling and - process for operating applications. To produce real world solutions we want - input from people who operate applications. If you are interested in learning - more please contact the App Def Working Group mailing list or attend a - meeting. You can find out more on the - [working groups organization page](https://github.com/kubernetes/community/tree/master/wg-app-def)
\ No newline at end of file +* Documentation is a vital resource for those using Kubernetes. The documentation + teaches concepts, usage of resources, how to accomplish tasks, and more. When + it comes to running applications, such as when leveraging workloads, the + documentation has room for improvement. If you know how to run applications + in Kubernetes, consider [contributing to better documentation](https://kubernetes.io/docs/contribute/). diff --git a/sig-apps/README.md b/sig-apps/README.md index e6215f7f..83826420 100644 --- a/sig-apps/README.md +++ b/sig-apps/README.md @@ -13,9 +13,9 @@ Covers deploying and operating applications in Kubernetes. We focus on the devel The [charter](charter.md) defines the scope and governance of the Apps Special Interest Group. ## Meetings -* Regular SIG Meeting: [Mondays at 9:00 PT (Pacific Time)](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit) (weekly). [Convert to your timezone](http://www.thetimezoneconverter.com/?t=9:00&tz=PT%20%28Pacific%20Time%29). +* Regular SIG Meeting: [Mondays at 9:00 PT (Pacific Time)](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit) (biweekly). [Convert to your timezone](http://www.thetimezoneconverter.com/?t=9:00&tz=PT%20%28Pacific%20Time%29). * [Meeting notes and Agenda](https://docs.google.com/document/d/1LZLBGW2wRDwAfdBNHJjFfk9CFoyZPcIYGWU7R1PQ3ng/edit#). - * [Meeting recordings](https://www.youtube.com/watch?v=hn23Z-vL_cM&list=PL69nYSiGNLP2LMq7vznITnpd2Fk1YIZF3). + * [Meeting recordings](https://www.youtube.com/playlist?list=PL69nYSiGNLP2LMq7vznITnpd2Fk1YIZF3). ## Leadership @@ -25,70 +25,67 @@ The Chairs of the SIG run operations and processes governing the SIG. * Janet Kuo (**[@janetkuo](https://github.com/janetkuo)**), Google * Kenneth Owens (**[@kow3ns](https://github.com/kow3ns)**), Google * Matt Farina (**[@mattfarina](https://github.com/mattfarina)**), Samsung SDS -* Adnan Abdulhussein (**[@prydonius](https://github.com/prydonius)**), Bitnami +* Adnan Abdulhussein (**[@prydonius](https://github.com/prydonius)**), VMware ## Contact -* [Slack](https://kubernetes.slack.com/messages/sig-apps) -* [Mailing list](https://groups.google.com/forum/#!forum/kubernetes-sig-apps) -* [Open Community Issues/PRs](https://github.com/kubernetes/community/labels/sig%2Fapps) +- Slack: [#sig-apps](https://kubernetes.slack.com/messages/sig-apps) +- [Mailing list](https://groups.google.com/forum/#!forum/kubernetes-sig-apps) +- [Open Community Issues/PRs](https://github.com/kubernetes/community/labels/sig%2Fapps) +- GitHub Teams: + - [@kubernetes/sig-apps-api-reviews](https://github.com/orgs/kubernetes/teams/sig-apps-api-reviews) - API Changes and Reviews + - [@kubernetes/sig-apps-bugs](https://github.com/orgs/kubernetes/teams/sig-apps-bugs) - Bug Triage and Troubleshooting + - [@kubernetes/sig-apps-feature-requests](https://github.com/orgs/kubernetes/teams/sig-apps-feature-requests) - Feature Requests + - [@kubernetes/sig-apps-misc](https://github.com/orgs/kubernetes/teams/sig-apps-misc) - General Discussion + - [@kubernetes/sig-apps-pr-reviews](https://github.com/orgs/kubernetes/teams/sig-apps-pr-reviews) - PR Reviews + - [@kubernetes/sig-apps-proposals](https://github.com/orgs/kubernetes/teams/sig-apps-proposals) - Design Proposals + - [@kubernetes/sig-apps-test-failures](https://github.com/orgs/kubernetes/teams/sig-apps-test-failures) - Test Failures and Triage ## Subprojects -The following subprojects are owned by sig-apps: -- **application** - - Description: Application metadata descriptor CRD - - Owners: - - https://raw.githubusercontent.com/kubernetes-sigs/application/master/OWNERS -- **examples** - - Owners: - - https://raw.githubusercontent.com/kubernetes/examples/master/OWNERS -- **kompose** - - Owners: - - https://raw.githubusercontent.com/kubernetes/kompose/master/OWNERS - - Contact - - Slack: [#kompose](https://kubernetes.slack.com/messages/kompose) -- **workloads-api** - - Description: The core workloads API, which is composed of the CronJob, DaemonSet, Deployment, Job, ReplicaSet, ReplicationController, and StatefulSet kinds - - Owners: - - https://raw.githubusercontent.com/kubernetes/kubernetes/master/pkg/apis/apps/OWNERS - - https://raw.githubusercontent.com/kubernetes/kubernetes/master/pkg/apis/batch/OWNERS - - https://raw.githubusercontent.com/kubernetes/kubernetes/master/pkg/apis/core/v1/OWNERS - - https://raw.githubusercontent.com/kubernetes/kubernetes/master/pkg/apis/extensions/OWNERS - - https://raw.githubusercontent.com/kubernetes/kubernetes/master/pkg/controller/cronjob/OWNERS - - https://raw.githubusercontent.com/kubernetes/kubernetes/master/pkg/controller/daemon/OWNERS - - https://raw.githubusercontent.com/kubernetes/kubernetes/master/pkg/controller/deployment/OWNERS - - https://raw.githubusercontent.com/kubernetes/kubernetes/master/pkg/controller/disruption/OWNERS - - https://raw.githubusercontent.com/kubernetes/kubernetes/master/pkg/controller/history/OWNERS - - https://raw.githubusercontent.com/kubernetes/kubernetes/master/pkg/controller/job/OWNERS - - https://raw.githubusercontent.com/kubernetes/kubernetes/master/pkg/controller/replicaset/OWNERS - - https://raw.githubusercontent.com/kubernetes/kubernetes/master/pkg/controller/replication/OWNERS - - https://raw.githubusercontent.com/kubernetes/kubernetes/master/pkg/controller/statefulset/OWNERS - - https://raw.githubusercontent.com/kubernetes/kubernetes/master/pkg/registry/apps/OWNERS - - https://raw.githubusercontent.com/kubernetes/kubernetes/master/pkg/registry/batch/OWNERS - - https://raw.githubusercontent.com/kubernetes/kubernetes/master/pkg/registry/extensions/OWNERS - - https://raw.githubusercontent.com/kubernetes/kubernetes/master/staging/src/k8s.io/api/apps/OWNERS - - https://raw.githubusercontent.com/kubernetes/kubernetes/master/staging/src/k8s.io/api/batch/OWNERS - - https://raw.githubusercontent.com/kubernetes/kubernetes/master/staging/src/k8s.io/api/core/v1/OWNERS - - https://raw.githubusercontent.com/kubernetes/kubernetes/master/staging/src/k8s.io/api/extensions/OWNERS - - https://raw.githubusercontent.com/kubernetes/kubernetes/master/test/e2e/apps/OWNERS - - https://raw.githubusercontent.com/kubernetes/kubernetes/master/test/integration/daemonset/OWNERS - - https://raw.githubusercontent.com/kubernetes/kubernetes/master/test/integration/deployment/OWNERS - -## GitHub Teams - -The below teams can be mentioned on issues and PRs in order to get attention from the right people. -Note that the links to display team membership will only work if you are a member of the org. - -| Team Name | Details | Description | -| --------- |:-------:| ----------- | -| @kubernetes/sig-apps-api-reviews | [link](https://github.com/orgs/kubernetes/teams/sig-apps-api-reviews) | API Changes and Reviews | -| @kubernetes/sig-apps-bugs | [link](https://github.com/orgs/kubernetes/teams/sig-apps-bugs) | Bug Triage and Troubleshooting | -| @kubernetes/sig-apps-feature-requests | [link](https://github.com/orgs/kubernetes/teams/sig-apps-feature-requests) | Feature Requests | -| @kubernetes/sig-apps-misc | [link](https://github.com/orgs/kubernetes/teams/sig-apps-misc) | General Discussion | -| @kubernetes/sig-apps-pr-reviews | [link](https://github.com/orgs/kubernetes/teams/sig-apps-pr-reviews) | PR Reviews | -| @kubernetes/sig-apps-proposals | [link](https://github.com/orgs/kubernetes/teams/sig-apps-proposals) | Design Proposals | -| @kubernetes/sig-apps-test-failures | [link](https://github.com/orgs/kubernetes/teams/sig-apps-test-failures) | Test Failures and Triage | - +The following [subprojects][subproject-definition] are owned by sig-apps: +### application +Application metadata descriptor CRD +- **Owners:** + - https://raw.githubusercontent.com/kubernetes-sigs/application/master/OWNERS +### examples +- **Owners:** + - https://raw.githubusercontent.com/kubernetes/examples/master/OWNERS +### execution-hook +- **Owners:** + - https://raw.githubusercontent.com/kubernetes-sigs/execution-hook/master/OWNERS +### kompose +- **Owners:** + - https://raw.githubusercontent.com/kubernetes/kompose/master/OWNERS +- **Contact:** + - Slack: [#kompose](https://kubernetes.slack.com/messages/kompose) +### workloads-api +The core workloads API, which is composed of the CronJob, DaemonSet, Deployment, Job, ReplicaSet, ReplicationController, and StatefulSet kinds +- **Owners:** + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/pkg/apis/apps/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/pkg/apis/batch/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/pkg/apis/core/v1/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/pkg/apis/extensions/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/pkg/controller/cronjob/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/pkg/controller/daemon/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/pkg/controller/deployment/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/pkg/controller/disruption/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/pkg/controller/history/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/pkg/controller/job/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/pkg/controller/replicaset/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/pkg/controller/replication/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/pkg/controller/statefulset/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/pkg/registry/apps/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/pkg/registry/batch/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/pkg/registry/extensions/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/staging/src/k8s.io/api/apps/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/staging/src/k8s.io/api/batch/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/staging/src/k8s.io/api/core/v1/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/staging/src/k8s.io/api/extensions/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/test/e2e/apps/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/test/integration/daemonset/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/test/integration/deployment/OWNERS + +[subproject-definition]: https://github.com/kubernetes/community/blob/master/governance.md#subprojects <!-- BEGIN CUSTOM CONTENT --> ## Goals diff --git a/sig-architecture/README.md b/sig-architecture/README.md index e202136b..0d7346ea 100644 --- a/sig-architecture/README.md +++ b/sig-architecture/README.md @@ -30,58 +30,52 @@ The Chairs of the SIG run operations and processes governing the SIG. * Brian Grant (**[@bgrant0607](https://github.com/bgrant0607)**), Google * Derek Carr (**[@derekwaynecarr](https://github.com/derekwaynecarr)**), Red Hat -* Davanum Srinivas (**[@dims](https://github.com/dims)**), Huawei +* Davanum Srinivas (**[@dims](https://github.com/dims)**), VMware * Jaice Singer DuMars (**[@jdumars](https://github.com/jdumars)**), Google * Matt Farina (**[@mattfarina](https://github.com/mattfarina)**), Samsung SDS ## Contact -* [Slack](https://kubernetes.slack.com/messages/sig-architecture) -* [Mailing list](https://groups.google.com/forum/#!forum/kubernetes-sig-architecture) -* [Open Community Issues/PRs](https://github.com/kubernetes/community/labels/sig%2Farchitecture) +- Slack: [#sig-architecture](https://kubernetes.slack.com/messages/sig-architecture) +- [Mailing list](https://groups.google.com/forum/#!forum/kubernetes-sig-architecture) +- [Open Community Issues/PRs](https://github.com/kubernetes/community/labels/sig%2Farchitecture) +- GitHub Teams: + - [@kubernetes/sig-architecture-api-reviews](https://github.com/orgs/kubernetes/teams/sig-architecture-api-reviews) - API Changes and Reviews + - [@kubernetes/sig-architecture-bugs](https://github.com/orgs/kubernetes/teams/sig-architecture-bugs) - Bug Triage and Troubleshooting + - [@kubernetes/sig-architecture-feature-requests](https://github.com/orgs/kubernetes/teams/sig-architecture-feature-requests) - Feature Requests + - [@kubernetes/sig-architecture-misc-use-only-as-a-last-resort](https://github.com/orgs/kubernetes/teams/sig-architecture-misc-use-only-as-a-last-resort) - General Discussion + - [@kubernetes/sig-architecture-pr-reviews](https://github.com/orgs/kubernetes/teams/sig-architecture-pr-reviews) - PR Reviews + - [@kubernetes/sig-architecture-proposals](https://github.com/orgs/kubernetes/teams/sig-architecture-proposals) - Design Proposals + - [@kubernetes/sig-architecture-test-failures](https://github.com/orgs/kubernetes/teams/sig-architecture-test-failures) - Test Failures and Triage ## Subprojects -The following subprojects are owned by sig-architecture: -- **architecture-and-api-governance** - - Description: [Described below](#architecture-and-api-governance) - - Owners: - - https://raw.githubusercontent.com/kubernetes/api/master/OWNERS - - https://raw.githubusercontent.com/kubernetes/community/master/contributors/design-proposals/architecture/OWNERS - - https://raw.githubusercontent.com/kubernetes/kubernetes/master/staging/src/k8s.io/api/OWNERS -- **code-organization** - - Description: [Described below](#code-organization) - - Owners: - - https://raw.githubusercontent.com/kubernetes/kubernetes/master/staging/OWNERS - - https://raw.githubusercontent.com/kubernetes/kubernetes/master/third_party/OWNERS - - https://raw.githubusercontent.com/kubernetes/kubernetes/master/vendor/OWNERS - - https://raw.githubusercontent.com/kubernetes/utils/master/OWNERS - - Contact - - Slack: [#k8s-code-organization](https://kubernetes.slack.com/messages/k8s-code-organization) -- **conformance-definition** - - Description: [Described below](#conformance-definition) - - Owners: - - https://raw.githubusercontent.com/kubernetes/kubernetes/master/test/conformance/OWNERS - - https://raw.githubusercontent.com/kubernetes/kubernetes/master/test/conformance/testdata/OWNERS - - Contact - - Slack: [#k8s-conformance](https://kubernetes.slack.com/messages/k8s-conformance) - - GitHub Teams: - - [@kubernetes/cncf-conformance-wg](https://github.com/orgs/kubernetes/teams/cncf-conformance-wg) - -## GitHub Teams - -The below teams can be mentioned on issues and PRs in order to get attention from the right people. -Note that the links to display team membership will only work if you are a member of the org. - -| Team Name | Details | Description | -| --------- |:-------:| ----------- | -| @kubernetes/sig-architecture-api-reviews | [link](https://github.com/orgs/kubernetes/teams/sig-architecture-api-reviews) | API Changes and Reviews | -| @kubernetes/sig-architecture-bugs | [link](https://github.com/orgs/kubernetes/teams/sig-architecture-bugs) | Bug Triage and Troubleshooting | -| @kubernetes/sig-architecture-feature-requests | [link](https://github.com/orgs/kubernetes/teams/sig-architecture-feature-requests) | Feature Requests | -| @kubernetes/sig-architecture-misc-use-only-as-a-last-resort | [link](https://github.com/orgs/kubernetes/teams/sig-architecture-misc-use-only-as-a-last-resort) | General Discussion | -| @kubernetes/sig-architecture-pr-reviews | [link](https://github.com/orgs/kubernetes/teams/sig-architecture-pr-reviews) | PR Reviews | -| @kubernetes/sig-architecture-proposals | [link](https://github.com/orgs/kubernetes/teams/sig-architecture-proposals) | Design Proposals | -| @kubernetes/sig-architecture-test-failures | [link](https://github.com/orgs/kubernetes/teams/sig-architecture-test-failures) | Test Failures and Triage | - +The following [subprojects][subproject-definition] are owned by sig-architecture: +### architecture-and-api-governance +[Described below](#architecture-and-api-governance) +- **Owners:** + - https://raw.githubusercontent.com/kubernetes/api/master/OWNERS + - https://raw.githubusercontent.com/kubernetes/community/master/contributors/design-proposals/architecture/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/staging/src/k8s.io/api/OWNERS +### code-organization +[Described below](#code-organization) +- **Owners:** + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/staging/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/third_party/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/vendor/OWNERS + - https://raw.githubusercontent.com/kubernetes/utils/master/OWNERS +- **Contact:** + - Slack: [#k8s-code-organization](https://kubernetes.slack.com/messages/k8s-code-organization) +### conformance-definition +[Described below](#conformance-definition) +- **Owners:** + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/test/conformance/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/test/conformance/testdata/OWNERS +- **Contact:** + - Slack: [#k8s-conformance](https://kubernetes.slack.com/messages/k8s-conformance) + - GitHub Teams: + - [@kubernetes/cncf-conformance-wg](https://github.com/orgs/kubernetes/teams/cncf-conformance-wg) + +[subproject-definition]: https://github.com/kubernetes/community/blob/master/governance.md#subprojects <!-- BEGIN CUSTOM CONTENT --> # Details about SIG-Architecture sub-projects diff --git a/sig-architecture/api-review-process.md b/sig-architecture/api-review-process.md index 4c3542b6..b26a3f7e 100644 --- a/sig-architecture/api-review-process.md +++ b/sig-architecture/api-review-process.md @@ -1,10 +1,12 @@ # Kubernetes API Review Process -[API Approvers](mailto:kubernetes-api-reviewers@googlegroups.com): [Clayton Coleman](https://github.com/smarterclayton), [Jordan Liggitt](https://github.com/liggitt), [Tim Hockin](https://github.com/thockin), [Brian Grant](https://github.com/bgrant0607), [Eric Tune](https://github.com/erictune) +## Contact +* [Mailing List](mailto:kubernetes-api-reviewers@googlegroups.com) +* [Slack](https://kubernetes.slack.com/messages/api-review) # Process Overview and Motivations -To preserve usability and consistency in Kubernetes APIs, changes and additions require oversight. +To preserve usability and consistency in Kubernetes core APIs, changes and additions require oversight. The API review process is intended to maintain logical and functional integrity of the API over time, the consistency of user experience and the ability of previously written tools to function with new APIs. Wherever possible, the API review process should help change submitters follow [established conventions](/contributors/devel/sig-architecture/api-conventions.md), @@ -21,45 +23,46 @@ Ideally, those whose API review priority is shifted in a release-impacting way w * Protect Kubernetes APIs from disruptive, inconsistent, or destabilizing changes +* Optimize the experience of users consuming our APIs, balanced with the effort + required from API authors. + * Respect, maximize, and expand reviewer bandwidth * Integration with the regular review process, adding as little API-review-specific overhead as possible # What APIs need to be reviewed? -* What are the kind of reviews? - - * **mandatory**: The changer is expected to submit the changes to API review, and the change is blocked on the API reviewer approval - - * **voluntary**: Changer can request a review, or a 3rd party can nominate the API for review. The review comments are recommendations. +## Mandatory +The changer is expected to submit the changes to API review, and the change is blocked on the API reviewer approval. As a general rule of thumb, anything that is considered to be part of "core Kubernetes" requires a mandatory API review. The list below outlines what are considered Kubernetes core APIs: -* Which projects are in scope? +* All API implementations (including alpha versions) that are part of core Kubernetes must be reviewed, including CRDs, so user experience across the Kubernetes ecosystem is consistent. - * github.com/kubernetes/kubernetes, and any kubernetes-* org projects it depends on are required to be reviewed. (mandatory) +* github.com/kubernetes/kubernetes, and any kubernetes-* org projects it depends on are required to be reviewed. - * Any kubernetes-style API that uses a *.k8s.io or *.kubernetes.io name, e.g. "storage.k8s.io" (mandatory) +* Kubernetes-style API that uses a *.k8s.io or *.kubernetes.io name, e.g. "storage.k8s.io". - * "Critical" or other “highly-integrated” APIs, such as our extension points in the node, apiserver, and controllers as defined by SIG Architecture [TBD]. (mandatory) +* "Critical" or other “highly-integrated” APIs, such as our extension points in the node, apiserver, and controllers. This includes CSI, CNI, CRI, and CPI. - * any other github projects in the kubernetes-* orgs (informational, for now - may make mandatory in future) +## Voluntary +Voluntary reviews apply towards non-core APIs that do not meet the [mandatory](#mandatory) requirements listed above. Changer can request a review, or a 3rd party can nominate the API for review. The review comments are considered recommendations. - * Any projects that produce APIs (including CRDs) that are intended to work with kubectl and/or kube-apiserver. (informational - intent is to ensure consistent user experience across the Kubernetes ecosystem) +* SIG sponsored CRD based APIs outside of the core that use the "*.x-k8s.io" namespace. -* All API implementations (including alpha versions) that are part of kubernetes must be reviewed, including CRDs, so user experience across the Kubernetes ecosystem is consistent. +* SIG sponsored subprojects that produce APIs (including CRDs) outside of *.k8s.io or *.kubernetes.io API groups, and are intended to work with kubectl and/or kube-apiserver. (intent is to ensure consistent user experience across the Kubernetes ecosystem) -* What parts of a PR are "API changes"? +## What parts of a PR are "API changes"? - * "Resource APIs" include the versioned data definition (pkg/apis/*/v*/types.go or OpenAPI for CRDs), validation (pkg/apis/*/validation.go or OpenAPI for CRDs). +* "Resource APIs" include the versioned data definition (pkg/apis/*/v*/types.go or OpenAPI for CRDs), validation (pkg/apis/*/validation.go or OpenAPI for CRDs). - * Configuration files, flags, and command line arguments are all part of our user and script facing APIs and must be reviewed. +* Configuration files, flags, and command line arguments are all part of our user and script facing APIs and must be reviewed. - * Compiled-in APIs of the kube-apiserver +* Compiled-in APIs of the kube-apiserver - * Webhooks request/response formats in kube-apiserver +* Webhooks request/response formats in kube-apiserver - * HTTP APIs in kubelet +* HTTP APIs in kubelet - * plugins which are not covered by some other standards effort (e.g. CSI and CNI APIs would be deferred to those standards bodies) +* plugins which are not covered by some other standards effort (e.g. CSI and CNI APIs would be deferred to those standards bodies) # Mechanics @@ -69,6 +72,7 @@ Ideally, those whose API review priority is shifted in a release-impacting way w * Any new resource type * Any new version of a stable API * Any new functionality added to a stable API as defined by SIG Architecture and the API Reviewers + * Any change to the meaning, validation, or behavior of a field * The existing [API conventions](https://github.com/kubernetes/community/blob/master/contributors/devel/sig-architecture/api-conventions.md) (and [API change guidelines](https://github.com/kubernetes/community/blob/master/contributors/devel/sig-architecture/api_changes.md), if applicable) have been read and followed. 1. Request an API review for a PR or issue in the kubernetes org by adding the `api-review` label with a `/label api-review` comment (requests can be cancelled with a `/remove-label api-review` comment) diff --git a/sig-auth/README.md b/sig-auth/README.md index 89d580e6..032ac1c2 100644 --- a/sig-auth/README.md +++ b/sig-auth/README.md @@ -42,112 +42,106 @@ subprojects, and resolve cross-subproject technical issues and decisions. * Eric Tune (**[@erictune](https://github.com/erictune)**), Google ## Contact -* [Slack](https://kubernetes.slack.com/messages/sig-auth) -* [Mailing list](https://groups.google.com/forum/#!forum/kubernetes-sig-auth) -* [Open Community Issues/PRs](https://github.com/kubernetes/community/labels/sig%2Fauth) +- Slack: [#sig-auth](https://kubernetes.slack.com/messages/sig-auth) +- [Mailing list](https://groups.google.com/forum/#!forum/kubernetes-sig-auth) +- [Open Community Issues/PRs](https://github.com/kubernetes/community/labels/sig%2Fauth) +- GitHub Teams: + - [@kubernetes/sig-auth-api-reviews](https://github.com/orgs/kubernetes/teams/sig-auth-api-reviews) - API Changes and Reviews + - [@kubernetes/sig-auth-bugs](https://github.com/orgs/kubernetes/teams/sig-auth-bugs) - Bug Triage and Troubleshooting + - [@kubernetes/sig-auth-feature-requests](https://github.com/orgs/kubernetes/teams/sig-auth-feature-requests) - Feature Requests + - [@kubernetes/sig-auth-misc](https://github.com/orgs/kubernetes/teams/sig-auth-misc) - General Discussion + - [@kubernetes/sig-auth-pr-reviews](https://github.com/orgs/kubernetes/teams/sig-auth-pr-reviews) - PR Reviews + - [@kubernetes/sig-auth-proposals](https://github.com/orgs/kubernetes/teams/sig-auth-proposals) - Design Proposals + - [@kubernetes/sig-auth-test-failures](https://github.com/orgs/kubernetes/teams/sig-auth-test-failures) - Test Failures and Triage ## Subprojects -The following subprojects are owned by sig-auth: -- **audit-logging** - - Description: Kubernetes API support for audit logging. - - Owners: - - https://raw.githubusercontent.com/kubernetes/kubernetes/master/staging/src/k8s.io/api/auditregistration/OWNERS - - https://raw.githubusercontent.com/kubernetes/kubernetes/master/staging/src/k8s.io/apiserver/pkg/apis/audit/OWNERS - - https://raw.githubusercontent.com/kubernetes/kubernetes/master/staging/src/k8s.io/apiserver/pkg/audit/OWNERS - - https://raw.githubusercontent.com/kubernetes/kubernetes/master/staging/src/k8s.io/apiserver/plugin/pkg/audit/OWNERS -- **authenticators** - - Description: Kubernetes API support for authentication. - - Owners: - - https://raw.githubusercontent.com/kubernetes/kubernetes/master/pkg/apis/authentication/OWNERS - - https://raw.githubusercontent.com/kubernetes/kubernetes/master/pkg/kubeapiserver/authenticator/OWNERS - - https://raw.githubusercontent.com/kubernetes/kubernetes/master/pkg/registry/authentication/OWNERS - - https://raw.githubusercontent.com/kubernetes/kubernetes/master/plugin/pkg/auth/authenticator/OWNERS - - https://raw.githubusercontent.com/kubernetes/kubernetes/master/staging/src/k8s.io/api/authentication/OWNERS - - https://raw.githubusercontent.com/kubernetes/kubernetes/master/staging/src/k8s.io/apiserver/pkg/authentication/OWNERS - - https://raw.githubusercontent.com/kubernetes/kubernetes/master/staging/src/k8s.io/apiserver/plugin/pkg/authenticator/OWNERS - - https://raw.githubusercontent.com/kubernetes/kubernetes/master/staging/src/k8s.io/client-go/kubernetes/typed/authentication/OWNERS - - https://raw.githubusercontent.com/kubernetes/kubernetes/master/staging/src/k8s.io/client-go/listers/authentication/OWNERS - - https://raw.githubusercontent.com/kubernetes/kubernetes/master/staging/src/k8s.io/client-go/pkg/apis/clientauthentication/OWNERS - - https://raw.githubusercontent.com/kubernetes/kubernetes/master/staging/src/k8s.io/client-go/plugin/pkg/client/auth/OWNERS - - https://raw.githubusercontent.com/kubernetes/kubernetes/master/staging/src/k8s.io/client-go/tools/auth/OWNERS -- **authorizers** - - Description: Kubernetes API support for authorization. - - Owners: - - https://raw.githubusercontent.com/kubernetes/kubernetes/master/pkg/apis/authorization/OWNERS - - https://raw.githubusercontent.com/kubernetes/kubernetes/master/pkg/apis/rbac/OWNERS - - https://raw.githubusercontent.com/kubernetes/kubernetes/master/pkg/kubeapiserver/authorizer/OWNERS - - https://raw.githubusercontent.com/kubernetes/kubernetes/master/pkg/kubectl/cmd/auth/OWNERS - - https://raw.githubusercontent.com/kubernetes/kubernetes/master/pkg/registry/authorization/OWNERS - - https://raw.githubusercontent.com/kubernetes/kubernetes/master/pkg/registry/rbac/OWNERS - - https://raw.githubusercontent.com/kubernetes/kubernetes/master/plugin/pkg/auth/authorizer/OWNERS - - https://raw.githubusercontent.com/kubernetes/kubernetes/master/staging/src/k8s.io/api/authorization/OWNERS - - https://raw.githubusercontent.com/kubernetes/kubernetes/master/staging/src/k8s.io/api/rbac/OWNERS - - https://raw.githubusercontent.com/kubernetes/kubernetes/master/staging/src/k8s.io/apiserver/pkg/authorization/OWNERS - - https://raw.githubusercontent.com/kubernetes/kubernetes/master/staging/src/k8s.io/apiserver/plugin/pkg/authorizer/OWNERS - - https://raw.githubusercontent.com/kubernetes/kubernetes/master/staging/src/k8s.io/client-go/kubernetes/typed/authorization/OWNERS - - https://raw.githubusercontent.com/kubernetes/kubernetes/master/staging/src/k8s.io/client-go/kubernetes/typed/rbac/OWNERS - - https://raw.githubusercontent.com/kubernetes/kubernetes/master/staging/src/k8s.io/client-go/listers/authorization/OWNERS - - https://raw.githubusercontent.com/kubernetes/kubernetes/master/staging/src/k8s.io/client-go/listers/rbac/OWNERS -- **certificates** - - Description: Certificates APIs and client infrastructure to support PKI. - - Owners: - - https://raw.githubusercontent.com/kubernetes/kubernetes/master/pkg/apis/certificates/OWNERS - - https://raw.githubusercontent.com/kubernetes/kubernetes/master/pkg/controller/certificates/OWNERS - - https://raw.githubusercontent.com/kubernetes/kubernetes/master/pkg/registry/certificates/OWNERS - - https://raw.githubusercontent.com/kubernetes/kubernetes/master/staging/src/k8s.io/apiserver/pkg/authentication/request/x509/OWNERS - - https://raw.githubusercontent.com/kubernetes/kubernetes/master/staging/src/k8s.io/client-go/util/cert/OWNERS - - https://raw.githubusercontent.com/kubernetes/kubernetes/master/staging/src/k8s.io/client-go/util/certificate/OWNERS -- **encryption-at-rest** - - Description: API storage support for storing data encrypted at rest in etcd. - - Owners: - - https://raw.githubusercontent.com/kubernetes/kubernetes/master/staging/src/k8s.io/apiserver/pkg/server/options/encryptionconfig/OWNERS - - https://raw.githubusercontent.com/kubernetes/kubernetes/master/staging/src/k8s.io/apiserver/pkg/storage/value/encrypt/OWNERS -- **multi-tenancy** - - Description: Proposals and prototypes for introducing tenant model to enable multi-tenant cluster - - Owners: - - https://raw.githubusercontent.com/kubernetes-sigs/multi-tenancy/master/OWNERS -- **node-identity-and-isolation** - - Description: Node identity management (co-owned with sig-lifecycle), and authorization restrictions for isolating workloads on separate nodes (co-owned with sig-node). - - Owners: - - https://raw.githubusercontent.com/kubernetes/kubernetes/master/pkg/controller/certificates/approver/OWNERS - - https://raw.githubusercontent.com/kubernetes/kubernetes/master/pkg/kubelet/certificate/OWNERS - - https://raw.githubusercontent.com/kubernetes/kubernetes/master/plugin/pkg/admission/noderestriction/OWNERS - - https://raw.githubusercontent.com/kubernetes/kubernetes/master/plugin/pkg/auth/authorizer/node/OWNERS -- **policy-management** - - Description: API validation and policies enforced during admission, such as PodSecurityPolicy. Excludes run-time policies like NetworkPolicy and Seccomp. - - Owners: - - https://raw.githubusercontent.com/kubernetes/kubernetes/master/pkg/apis/imagepolicy/OWNERS - - https://raw.githubusercontent.com/kubernetes/kubernetes/master/pkg/apis/policy/OWNERS - - https://raw.githubusercontent.com/kubernetes/kubernetes/master/pkg/registry/policy/OWNERS - - https://raw.githubusercontent.com/kubernetes/kubernetes/master/pkg/security/podsecuritypolicy/OWNERS - - https://raw.githubusercontent.com/kubernetes/kubernetes/master/plugin/pkg/admission/imagepolicy/OWNERS - - https://raw.githubusercontent.com/kubernetes/kubernetes/master/plugin/pkg/admission/security/podsecuritypolicy/OWNERS - - https://raw.githubusercontent.com/kubernetes/kubernetes/master/staging/src/k8s.io/api/imagepolicy/OWNERS - - https://raw.githubusercontent.com/kubernetes/kubernetes/master/staging/src/k8s.io/api/policy/OWNERS -- **service-accounts** - - Description: Infrastructure implementing Kubernetes service account based workload identity. - - Owners: - - https://raw.githubusercontent.com/kubernetes/kubernetes/master/pkg/controller/serviceaccount/OWNERS - - https://raw.githubusercontent.com/kubernetes/kubernetes/master/pkg/kubelet/token/OWNERS - - https://raw.githubusercontent.com/kubernetes/kubernetes/master/pkg/serviceaccount/OWNERS - - https://raw.githubusercontent.com/kubernetes/kubernetes/master/plugin/pkg/admission/serviceaccount/OWNERS - -## GitHub Teams - -The below teams can be mentioned on issues and PRs in order to get attention from the right people. -Note that the links to display team membership will only work if you are a member of the org. - -| Team Name | Details | Description | -| --------- |:-------:| ----------- | -| @kubernetes/sig-auth-api-reviews | [link](https://github.com/orgs/kubernetes/teams/sig-auth-api-reviews) | API Changes and Reviews | -| @kubernetes/sig-auth-bugs | [link](https://github.com/orgs/kubernetes/teams/sig-auth-bugs) | Bug Triage and Troubleshooting | -| @kubernetes/sig-auth-feature-requests | [link](https://github.com/orgs/kubernetes/teams/sig-auth-feature-requests) | Feature Requests | -| @kubernetes/sig-auth-misc | [link](https://github.com/orgs/kubernetes/teams/sig-auth-misc) | General Discussion | -| @kubernetes/sig-auth-pr-reviews | [link](https://github.com/orgs/kubernetes/teams/sig-auth-pr-reviews) | PR Reviews | -| @kubernetes/sig-auth-proposals | [link](https://github.com/orgs/kubernetes/teams/sig-auth-proposals) | Design Proposals | -| @kubernetes/sig-auth-test-failures | [link](https://github.com/orgs/kubernetes/teams/sig-auth-test-failures) | Test Failures and Triage | - +The following [subprojects][subproject-definition] are owned by sig-auth: +### audit-logging +Kubernetes API support for audit logging. +- **Owners:** + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/staging/src/k8s.io/api/auditregistration/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/staging/src/k8s.io/apiserver/pkg/apis/audit/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/staging/src/k8s.io/apiserver/pkg/audit/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/staging/src/k8s.io/apiserver/plugin/pkg/audit/OWNERS +### authenticators +Kubernetes API support for authentication. +- **Owners:** + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/pkg/apis/authentication/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/pkg/kubeapiserver/authenticator/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/pkg/registry/authentication/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/plugin/pkg/auth/authenticator/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/staging/src/k8s.io/api/authentication/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/staging/src/k8s.io/apiserver/pkg/authentication/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/staging/src/k8s.io/apiserver/plugin/pkg/authenticator/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/staging/src/k8s.io/client-go/kubernetes/typed/authentication/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/staging/src/k8s.io/client-go/listers/authentication/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/staging/src/k8s.io/client-go/pkg/apis/clientauthentication/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/staging/src/k8s.io/client-go/plugin/pkg/client/auth/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/staging/src/k8s.io/client-go/tools/auth/OWNERS +### authorizers +Kubernetes API support for authorization. +- **Owners:** + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/pkg/apis/authorization/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/pkg/apis/rbac/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/pkg/kubeapiserver/authorizer/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/pkg/kubectl/cmd/auth/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/pkg/registry/authorization/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/pkg/registry/rbac/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/plugin/pkg/auth/authorizer/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/staging/src/k8s.io/api/authorization/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/staging/src/k8s.io/api/rbac/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/staging/src/k8s.io/apiserver/pkg/authorization/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/staging/src/k8s.io/apiserver/plugin/pkg/authorizer/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/staging/src/k8s.io/client-go/kubernetes/typed/authorization/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/staging/src/k8s.io/client-go/kubernetes/typed/rbac/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/staging/src/k8s.io/client-go/listers/authorization/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/staging/src/k8s.io/client-go/listers/rbac/OWNERS +### certificates +Certificates APIs and client infrastructure to support PKI. +- **Owners:** + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/pkg/apis/certificates/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/pkg/controller/certificates/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/pkg/registry/certificates/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/staging/src/k8s.io/apiserver/pkg/authentication/request/x509/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/staging/src/k8s.io/client-go/util/cert/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/staging/src/k8s.io/client-go/util/certificate/OWNERS +### encryption-at-rest +API storage support for storing data encrypted at rest in etcd. +- **Owners:** + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/staging/src/k8s.io/apiserver/pkg/server/options/encryptionconfig/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/staging/src/k8s.io/apiserver/pkg/storage/value/encrypt/OWNERS +### multi-tenancy +Proposals and prototypes for introducing tenant model to enable multi-tenant cluster +- **Owners:** + - https://raw.githubusercontent.com/kubernetes-sigs/multi-tenancy/master/OWNERS +### node-identity-and-isolation +Node identity management (co-owned with sig-lifecycle), and authorization restrictions for isolating workloads on separate nodes (co-owned with sig-node). +- **Owners:** + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/pkg/controller/certificates/approver/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/pkg/kubelet/certificate/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/plugin/pkg/admission/noderestriction/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/plugin/pkg/auth/authorizer/node/OWNERS +### policy-management +API validation and policies enforced during admission, such as PodSecurityPolicy. Excludes run-time policies like NetworkPolicy and Seccomp. +- **Owners:** + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/pkg/apis/imagepolicy/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/pkg/apis/policy/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/pkg/registry/policy/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/pkg/security/podsecuritypolicy/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/plugin/pkg/admission/imagepolicy/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/plugin/pkg/admission/security/podsecuritypolicy/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/staging/src/k8s.io/api/imagepolicy/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/staging/src/k8s.io/api/policy/OWNERS +### service-accounts +Infrastructure implementing Kubernetes service account based workload identity. +- **Owners:** + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/pkg/controller/serviceaccount/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/pkg/kubelet/token/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/pkg/serviceaccount/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/plugin/pkg/admission/serviceaccount/OWNERS + +[subproject-definition]: https://github.com/kubernetes/community/blob/master/governance.md#subprojects <!-- BEGIN CUSTOM CONTENT --> <!-- END CUSTOM CONTENT --> diff --git a/sig-autoscaling/README.md b/sig-autoscaling/README.md index cfbc4df9..ce7d480d 100644 --- a/sig-autoscaling/README.md +++ b/sig-autoscaling/README.md @@ -24,51 +24,45 @@ The Chairs of the SIG run operations and processes governing the SIG. * Marcin Wielgus (**[@mwielgus](https://github.com/mwielgus)**), Google ## Contact -* [Slack](https://kubernetes.slack.com/messages/sig-autoscaling) -* [Mailing list](https://groups.google.com/forum/#!forum/kubernetes-sig-autoscaling) -* [Open Community Issues/PRs](https://github.com/kubernetes/community/labels/sig%2Fautoscaling) +- Slack: [#sig-autoscaling](https://kubernetes.slack.com/messages/sig-autoscaling) +- [Mailing list](https://groups.google.com/forum/#!forum/kubernetes-sig-autoscaling) +- [Open Community Issues/PRs](https://github.com/kubernetes/community/labels/sig%2Fautoscaling) +- GitHub Teams: + - [@kubernetes/sig-autoscaling-api-reviews](https://github.com/orgs/kubernetes/teams/sig-autoscaling-api-reviews) - API Changes and Reviews + - [@kubernetes/sig-autoscaling-bugs](https://github.com/orgs/kubernetes/teams/sig-autoscaling-bugs) - Bug Triage and Troubleshooting + - [@kubernetes/sig-autoscaling-feature-requests](https://github.com/orgs/kubernetes/teams/sig-autoscaling-feature-requests) - Feature Requests + - [@kubernetes/sig-autoscaling-misc](https://github.com/orgs/kubernetes/teams/sig-autoscaling-misc) - General Discussion + - [@kubernetes/sig-autoscaling-pr-reviews](https://github.com/orgs/kubernetes/teams/sig-autoscaling-pr-reviews) - PR Reviews + - [@kubernetes/sig-autoscaling-proposals](https://github.com/orgs/kubernetes/teams/sig-autoscaling-proposals) - Design Proposals + - [@kubernetes/sig-autoscaling-test-failures](https://github.com/orgs/kubernetes/teams/sig-autoscaling-test-failures) - Test Failures and Triage ## Subprojects -The following subprojects are owned by sig-autoscaling: -- **addon-resizer** - - Owners: - - https://raw.githubusercontent.com/kubernetes/autoscaler/master/addon-resizer/OWNERS -- **cluster-autoscaler** - - Owners: - - https://raw.githubusercontent.com/kubernetes/autoscaler/master/OWNERS -- **cluster-proportional-autoscaler** - - Owners: - - https://raw.githubusercontent.com/kubernetes-incubator/cluster-proportional-autoscaler/master/OWNERS -- **cluster-proportional-vertical-autoscaler** - - Owners: - - https://raw.githubusercontent.com/kubernetes-incubator/cluster-proportional-vertical-autoscaler/master/OWNERS -- **horizontal-pod-autoscaler** - - Owners: - - https://raw.githubusercontent.com/kubernetes/api/master/autoscaling/OWNERS - - https://raw.githubusercontent.com/kubernetes/kubernetes/master/pkg/controller/podautoscaler/OWNERS -- **scale-client** - - Owners: - - https://raw.githubusercontent.com/kubernetes/client-go/master/scale/OWNERS -- **vertical-pod-autoscaler** - - Owners: - - https://raw.githubusercontent.com/kubernetes/autoscaler/master/OWNERS - -## GitHub Teams - -The below teams can be mentioned on issues and PRs in order to get attention from the right people. -Note that the links to display team membership will only work if you are a member of the org. - -| Team Name | Details | Description | -| --------- |:-------:| ----------- | -| @kubernetes/sig-autoscaling-api-reviews | [link](https://github.com/orgs/kubernetes/teams/sig-autoscaling-api-reviews) | API Changes and Reviews | -| @kubernetes/sig-autoscaling-bugs | [link](https://github.com/orgs/kubernetes/teams/sig-autoscaling-bugs) | Bug Triage and Troubleshooting | -| @kubernetes/sig-autoscaling-feature-requests | [link](https://github.com/orgs/kubernetes/teams/sig-autoscaling-feature-requests) | Feature Requests | -| @kubernetes/sig-autoscaling-misc | [link](https://github.com/orgs/kubernetes/teams/sig-autoscaling-misc) | General Discussion | -| @kubernetes/sig-autoscaling-pr-reviews | [link](https://github.com/orgs/kubernetes/teams/sig-autoscaling-pr-reviews) | PR Reviews | -| @kubernetes/sig-autoscaling-proposals | [link](https://github.com/orgs/kubernetes/teams/sig-autoscaling-proposals) | Design Proposals | -| @kubernetes/sig-autoscaling-test-failures | [link](https://github.com/orgs/kubernetes/teams/sig-autoscaling-test-failures) | Test Failures and Triage | - +The following [subprojects][subproject-definition] are owned by sig-autoscaling: +### addon-resizer +- **Owners:** + - https://raw.githubusercontent.com/kubernetes/autoscaler/master/addon-resizer/OWNERS +### cluster-autoscaler +- **Owners:** + - https://raw.githubusercontent.com/kubernetes/autoscaler/master/OWNERS +### cluster-proportional-autoscaler +- **Owners:** + - https://raw.githubusercontent.com/kubernetes-incubator/cluster-proportional-autoscaler/master/OWNERS +### cluster-proportional-vertical-autoscaler +- **Owners:** + - https://raw.githubusercontent.com/kubernetes-incubator/cluster-proportional-vertical-autoscaler/master/OWNERS +### horizontal-pod-autoscaler +- **Owners:** + - https://raw.githubusercontent.com/kubernetes/api/master/autoscaling/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/pkg/controller/podautoscaler/OWNERS +### scale-client +- **Owners:** + - https://raw.githubusercontent.com/kubernetes/client-go/master/scale/OWNERS +### vertical-pod-autoscaler +- **Owners:** + - https://raw.githubusercontent.com/kubernetes/autoscaler/master/OWNERS + +[subproject-definition]: https://github.com/kubernetes/community/blob/master/governance.md#subprojects <!-- BEGIN CUSTOM CONTENT --> ## Concerns * autoscaling of clusters, diff --git a/sig-aws/OWNERS b/sig-aws/OWNERS index cc03b55d..b035a798 100644 --- a/sig-aws/OWNERS +++ b/sig-aws/OWNERS @@ -1,8 +1,8 @@ # See the OWNERS docs at https://go.k8s.io/owners reviewers: - - sig-aws-leads + - provider-aws approvers: - - sig-aws-leads + - provider-aws labels: - sig/aws diff --git a/sig-aws/README.md b/sig-aws/README.md index a842a941..4d729b54 100644 --- a/sig-aws/README.md +++ b/sig-aws/README.md @@ -6,15 +6,15 @@ sigs.yaml file in the project root. To understand how this file is generated, see https://git.k8s.io/community/generator/README.md ---> -# AWS Special Interest Group +# [DEPRECATED] AWS Special Interest Group -Covers maintaining, supporting, and using Kubernetes hosted on AWS Cloud. +The AWS Special Interest Group is now a subproject of [SIG Cloud Provider](https://github.com/kubernetes/community/tree/master/sig-cloud-provider). + +## This directory is a placeholder to preserve links. Please remove after 3 months or the release of kubernetes 1.10, whichever comes first. + +The [charter](charter.md) defines the scope and governance of the [DEPRECATED] AWS Special Interest Group. -The [charter](charter.md) defines the scope and governance of the AWS Special Interest Group. -## Meetings -* Regular SIG Meeting: [Fridays at 9:00 PT (Pacific Time)](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit) (biweekly 2019 start date: Jan. 11th). [Convert to your timezone](http://www.thetimezoneconverter.com/?t=9:00&tz=PT%20%28Pacific%20Time%29). - * [Meeting notes and Agenda](https://docs.google.com/document/d/1-i0xQidlXnFEP9fXHWkBxqySkXwJnrGJP9OGyP2_P14/edit). ## Leadership @@ -30,31 +30,6 @@ The Chairs of the SIG run operations and processes governing the SIG. * [Mailing list](https://groups.google.com/forum/#!forum/kubernetes-sig-aws) * [Open Community Issues/PRs](https://github.com/kubernetes/community/labels/sig%2Faws) -## Subprojects - -The following subprojects are owned by sig-aws: -- **aws-alb-ingress-controller** - - Owners: - - https://raw.githubusercontent.com/kubernetes-sigs/aws-alb-ingress-controller/master/OWNERS -- **aws-ebs-csi-driver** - - Owners: - - https://raw.githubusercontent.com/kubernetes-sigs/aws-ebs-csi-driver/master/OWNERS -- **aws-efs-csi-driver** - - Owners: - - https://raw.githubusercontent.com/kubernetes-sigs/aws-efs-csi-driver/master/OWNERS -- **aws-encryption-provider** - - Owners: - - https://raw.githubusercontent.com/kubernetes-sigs/aws-encryption-provider/master/OWNERS -- **aws-fsx-csi-driver** - - Owners: - - https://raw.githubusercontent.com/kubernetes-sigs/aws-fsx-csi-driver/master/OWNERS -- **aws-iam-authenticator** - - Owners: - - https://raw.githubusercontent.com/kubernetes-sigs/aws-iam-authenticator/master/OWNERS -- **cloud-provider-aws** - - Owners: - - https://raw.githubusercontent.com/kubernetes/cloud-provider-aws/master/OWNERS - ## GitHub Teams The below teams can be mentioned on issues and PRs in order to get attention from the right people. diff --git a/sig-azure/OWNERS b/sig-azure/OWNERS index f6740f1d..bc483639 100644 --- a/sig-azure/OWNERS +++ b/sig-azure/OWNERS @@ -1,8 +1,8 @@ # See the OWNERS docs at https://go.k8s.io/owners reviewers: - - sig-azure-leads + - provider-azure approvers: - - sig-azure-leads + - provider-azure labels: - sig/azure diff --git a/sig-azure/README.md b/sig-azure/README.md index 9ec51187..c9b6859f 100644 --- a/sig-azure/README.md +++ b/sig-azure/README.md @@ -6,11 +6,13 @@ sigs.yaml file in the project root. To understand how this file is generated, see https://git.k8s.io/community/generator/README.md ---> -# Azure Special Interest Group +# [DEPRECATED] Azure Special Interest Group -A Special Interest Group for building, deploying, maintaining, supporting, and using Kubernetes on Azure. +The Azure Special Interest Group is now a subproject of [SIG Cloud Provider](https://github.com/kubernetes/community/tree/master/sig-cloud-provider). -The [charter](charter.md) defines the scope and governance of the Azure Special Interest Group. +### (This directory is a placeholder to preserve links. Please remove after 6 months or the release of Kubernetes 1.17, whichever comes first.) + +The [charter](charter.md) defines the scope and governance of the [DEPRECATED] Azure Special Interest Group. ## Meetings * Regular SIG Meeting: [Wednesdays at 16:00 UTC](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit) (biweekly). [Convert to your timezone](http://www.thetimezoneconverter.com/?t=16:00&tz=UTC). @@ -22,7 +24,7 @@ The [charter](charter.md) defines the scope and governance of the Azure Special ### Chairs The Chairs of the SIG run operations and processes governing the SIG. -* Dave Strebel (**[@dstrebel](https://github.com/dstrebel)**), Microsoft +* Craig Peters (**[@craiglpeters](https://github.com/craiglpeters)**), Microsoft * Stephen Augustus (**[@justaugustus](https://github.com/justaugustus)**), VMware ### Technical Leads @@ -32,25 +34,16 @@ subprojects, and resolve cross-subproject technical issues and decisions. * Pengfei Ni (**[@feiskyer](https://github.com/feiskyer)**), Microsoft * Kal Khenidak (**[@khenidak](https://github.com/khenidak)**), Microsoft +## Emeritus Leads + +* Dave Strebel (**[@dstrebel](https://github.com/dstrebel)**), Microsoft +* Jaice Singer DuMars (**[@jdumars](https://github.com/jdumars)**), Google + ## Contact * [Slack](https://kubernetes.slack.com/messages/sig-azure) * [Mailing list](https://groups.google.com/forum/#!forum/kubernetes-sig-azure) * [Open Community Issues/PRs](https://github.com/kubernetes/community/labels/sig%2Fazure) -## Subprojects - -The following subprojects are owned by sig-azure: -- **cloud-provider-azure** - - Owners: - - https://raw.githubusercontent.com/kubernetes/cloud-provider-azure/master/OWNERS -- **cluster-api-provider-azure** - - Owners: - - https://raw.githubusercontent.com/kubernetes-sigs/cluster-api-provider-azure/master/OWNERS -- **csi-drivers-azure** - - Owners: - - https://raw.githubusercontent.com/kubernetes-sigs/azuredisk-csi-driver/master/OWNERS - - https://raw.githubusercontent.com/kubernetes-sigs/azurefile-csi-driver/master/OWNERS - ## GitHub Teams The below teams can be mentioned on issues and PRs in order to get attention from the right people. diff --git a/sig-cli/README.md b/sig-cli/README.md index 494bcde3..3bb8079b 100644 --- a/sig-cli/README.md +++ b/sig-cli/README.md @@ -38,59 +38,53 @@ subprojects, and resolve cross-subproject technical issues and decisions. * Fabiano Franz (**[@fabianofranz](https://github.com/fabianofranz)**), Red Hat ## Contact -* [Slack](https://kubernetes.slack.com/messages/sig-cli) -* [Mailing list](https://groups.google.com/forum/#!forum/kubernetes-sig-cli) -* [Open Community Issues/PRs](https://github.com/kubernetes/community/labels/sig%2Fcli) +- Slack: [#sig-cli](https://kubernetes.slack.com/messages/sig-cli) +- [Mailing list](https://groups.google.com/forum/#!forum/kubernetes-sig-cli) +- [Open Community Issues/PRs](https://github.com/kubernetes/community/labels/sig%2Fcli) +- GitHub Teams: + - [@kubernetes/sig-cli-api-reviews](https://github.com/orgs/kubernetes/teams/sig-cli-api-reviews) - API Changes and Reviews + - [@kubernetes/sig-cli-bugs](https://github.com/orgs/kubernetes/teams/sig-cli-bugs) - Bug Triage and Troubleshooting + - [@kubernetes/sig-cli-feature-requests](https://github.com/orgs/kubernetes/teams/sig-cli-feature-requests) - Feature Requests + - [@kubernetes/sig-cli-maintainers](https://github.com/orgs/kubernetes/teams/sig-cli-maintainers) - CLI Maintainers + - [@kubernetes/sig-cli-misc](https://github.com/orgs/kubernetes/teams/sig-cli-misc) - General Discussion + - [@kubernetes/sig-cli-pr-reviews](https://github.com/orgs/kubernetes/teams/sig-cli-pr-reviews) - PR Reviews + - [@kubernetes/sig-cli-proposals](https://github.com/orgs/kubernetes/teams/sig-cli-proposals) - Design Proposals + - [@kubernetes/sig-cli-test-failures](https://github.com/orgs/kubernetes/teams/sig-cli-test-failures) - Test Failures and Triage ## Subprojects -The following subprojects are owned by sig-cli: -- **cli-experimental** - - Owners: - - https://raw.githubusercontent.com/kubernetes-sigs/cli-experimental/master/OWNERS -- **cli-sdk** - - Owners: - - https://raw.githubusercontent.com/kubernetes/cli-runtime/master/OWNERS - - https://raw.githubusercontent.com/kubernetes/kubernetes/master/staging/src/k8s.io/cli-runtime/OWNERS - - https://raw.githubusercontent.com/kubernetes/kubernetes/master/staging/src/k8s.io/sample-cli-plugin/OWNERS - - https://raw.githubusercontent.com/kubernetes/sample-cli-plugin/master/OWNERS -- **cli-utils** - - Owners: - - https://raw.githubusercontent.com/kubernetes-sigs/cli-utils/master/OWNERS -- **krew** - - Description: Plugin manager for kubectl. - - Owners: - - https://raw.githubusercontent.com/kubernetes-sigs/krew/master/OWNERS -- **krew-index** - - Description: Centralized plugin index for krew. - - Owners: - - https://raw.githubusercontent.com/kubernetes-sigs/krew-index/master/OWNERS -- **kubectl** - - Owners: - - https://raw.githubusercontent.com/kubernetes/kubectl/master/OWNERS - - https://raw.githubusercontent.com/kubernetes/kubernetes/master/pkg/kubectl/OWNERS -- **kustomize** - - Owners: - - https://raw.githubusercontent.com/kubernetes-sigs/kustomize/master/OWNERS - - Contact - - Slack: [#kustomize](https://kubernetes.slack.com/messages/kustomize) - -## GitHub Teams - -The below teams can be mentioned on issues and PRs in order to get attention from the right people. -Note that the links to display team membership will only work if you are a member of the org. - -| Team Name | Details | Description | -| --------- |:-------:| ----------- | -| @kubernetes/sig-cli-api-reviews | [link](https://github.com/orgs/kubernetes/teams/sig-cli-api-reviews) | API Changes and Reviews | -| @kubernetes/sig-cli-bugs | [link](https://github.com/orgs/kubernetes/teams/sig-cli-bugs) | Bug Triage and Troubleshooting | -| @kubernetes/sig-cli-feature-requests | [link](https://github.com/orgs/kubernetes/teams/sig-cli-feature-requests) | Feature Requests | -| @kubernetes/sig-cli-maintainers | [link](https://github.com/orgs/kubernetes/teams/sig-cli-maintainers) | CLI Maintainers | -| @kubernetes/sig-cli-misc | [link](https://github.com/orgs/kubernetes/teams/sig-cli-misc) | General Discussion | -| @kubernetes/sig-cli-pr-reviews | [link](https://github.com/orgs/kubernetes/teams/sig-cli-pr-reviews) | PR Reviews | -| @kubernetes/sig-cli-proposals | [link](https://github.com/orgs/kubernetes/teams/sig-cli-proposals) | Design Proposals | -| @kubernetes/sig-cli-test-failures | [link](https://github.com/orgs/kubernetes/teams/sig-cli-test-failures) | Test Failures and Triage | - +The following [subprojects][subproject-definition] are owned by sig-cli: +### cli-experimental +- **Owners:** + - https://raw.githubusercontent.com/kubernetes-sigs/cli-experimental/master/OWNERS +### cli-sdk +- **Owners:** + - https://raw.githubusercontent.com/kubernetes/cli-runtime/master/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/staging/src/k8s.io/cli-runtime/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/staging/src/k8s.io/sample-cli-plugin/OWNERS + - https://raw.githubusercontent.com/kubernetes/sample-cli-plugin/master/OWNERS +### cli-utils +- **Owners:** + - https://raw.githubusercontent.com/kubernetes-sigs/cli-utils/master/OWNERS +### krew +Plugin manager for kubectl. +- **Owners:** + - https://raw.githubusercontent.com/kubernetes-sigs/krew/master/OWNERS +### krew-index +Centralized plugin index for krew. +- **Owners:** + - https://raw.githubusercontent.com/kubernetes-sigs/krew-index/master/OWNERS +### kubectl +- **Owners:** + - https://raw.githubusercontent.com/kubernetes/kubectl/master/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/pkg/kubectl/OWNERS +### kustomize +- **Owners:** + - https://raw.githubusercontent.com/kubernetes-sigs/kustomize/master/OWNERS +- **Contact:** + - Slack: [#kustomize](https://kubernetes.slack.com/messages/kustomize) + +[subproject-definition]: https://github.com/kubernetes/community/blob/master/governance.md#subprojects <!-- BEGIN CUSTOM CONTENT --> <!-- END CUSTOM CONTENT --> diff --git a/sig-cloud-provider/README.md b/sig-cloud-provider/README.md index a65790b4..26729b6b 100644 --- a/sig-cloud-provider/README.md +++ b/sig-cloud-provider/README.md @@ -23,61 +23,106 @@ The [charter](CHARTER.md) defines the scope and governance of the Cloud Provider The Chairs of the SIG run operations and processes governing the SIG. * Andrew Sy Kim (**[@andrewsykim](https://github.com/andrewsykim)**), VMware +* Walter Fender (**[@cheftako](https://github.com/cheftako)**), Google * Chris Hoge (**[@hogepodge](https://github.com/hogepodge)**), OpenStack Foundation + +## Emeritus Leads + * Jago Macleod (**[@jagosan](https://github.com/jagosan)**), Google ## Contact -* [Slack](https://kubernetes.slack.com/messages/sig-cloud-provider) -* [Mailing list](https://groups.google.com/forum/#!forum/kubernetes-sig-cloud-provider) -* [Open Community Issues/PRs](https://github.com/kubernetes/community/labels/sig%2Fcloud-provider) +- Slack: [#sig-cloud-provider](https://kubernetes.slack.com/messages/sig-cloud-provider) +- [Mailing list](https://groups.google.com/forum/#!forum/kubernetes-sig-cloud-provider) +- [Open Community Issues/PRs](https://github.com/kubernetes/community/labels/sig%2Fcloud-provider) +- GitHub Teams: + - [@kubernetes/sig-cloud-provider-api-reviews](https://github.com/orgs/kubernetes/teams/sig-cloud-provider-api-reviews) - API Changes and Reviews + - [@kubernetes/sig-cloud-provider-bugs](https://github.com/orgs/kubernetes/teams/sig-cloud-provider-bugs) - Bug Triage and Troubleshooting + - [@kubernetes/sig-cloud-provider-feature-requests](https://github.com/orgs/kubernetes/teams/sig-cloud-provider-feature-requests) - Feature Requests + - [@kubernetes/sig-cloud-provider-maintainers](https://github.com/orgs/kubernetes/teams/sig-cloud-provider-maintainers) - Cloud Providers Maintainers + - [@kubernetes/sig-cloud-provider-pr-reviews](https://github.com/orgs/kubernetes/teams/sig-cloud-provider-pr-reviews) - PR Reviews + - [@kubernetes/sig-cloud-provider-proposals](https://github.com/orgs/kubernetes/teams/sig-cloud-provider-proposals) - Design Proposals + - [@kubernetes/sig-cloud-provider-test-failures](https://github.com/orgs/kubernetes/teams/sig-cloud-provider-test-failures) - Test Failures and Triage + - [@kubernetes/sig-cloud-providers-misc](https://github.com/orgs/kubernetes/teams/sig-cloud-providers-misc) - General Discussion ## Subprojects -The following subprojects are owned by sig-cloud-provider: -- **cloud-provider-alibaba-cloud** - - Owners: - - https://raw.githubusercontent.com/kubernetes/cloud-provider-alibaba-cloud/master/OWNERS -- **cloud-provider-extraction-migration** - - Owners: - - https://raw.githubusercontent.com/kubernetes-sigs/apiserver-network-proxy/master/OWNERS - - https://raw.githubusercontent.com/kubernetes/community/master/sig-cloud-provider/cloud-provider-extraction-migration/OWNERS - - https://raw.githubusercontent.com/kubernetes/legacy-cloud-providers/master/OWNERS - - Meetings: - - Weekly Sync removing the in-tree cloud providers led by @cheftako and @mcrute: [Thursdays at 13:30 PT (Pacific Time)](https://docs.google.com/document/d/1KLsGGzNXQbsPeELCeF_q-f0h0CEGSe20xiwvcR2NlYM/edit) (weekly). [Convert to your timezone](http://www.thetimezoneconverter.com/?t=13:30&tz=PT%20%28Pacific%20Time%29). -- **cloud-provider-gcp** - - Owners: - - https://raw.githubusercontent.com/kubernetes/cloud-provider-gcp/master/OWNERS -- **cloud-provider-openstack** - - Owners: - - https://raw.githubusercontent.com/kubernetes/cloud-provider-openstack/master/OWNERS -- **cloud-provider-vsphere** - - Owners: - - https://raw.githubusercontent.com/kubernetes/cloud-provider-vsphere/master/OWNERS -- **kubernetes-cloud-provider** - - Owners: - - https://raw.githubusercontent.com/kubernetes/cloud-provider-sample/master/OWNERS - - https://raw.githubusercontent.com/kubernetes/cloud-provider/master/OWNERS - - https://raw.githubusercontent.com/kubernetes/kubernetes/master/cmd/cloud-controller-manager/OWNERS - - https://raw.githubusercontent.com/kubernetes/kubernetes/master/pkg/cloudprovider/OWNERS - - https://raw.githubusercontent.com/kubernetes/kubernetes/master/pkg/controller/cloud/OWNERS - - https://raw.githubusercontent.com/kubernetes/kubernetes/master/staging/src/k8s.io/cloud-provider/OWNERS - -## GitHub Teams - -The below teams can be mentioned on issues and PRs in order to get attention from the right people. -Note that the links to display team membership will only work if you are a member of the org. - -| Team Name | Details | Description | -| --------- |:-------:| ----------- | -| @kubernetes/sig-cloud-provider-api-reviews | [link](https://github.com/orgs/kubernetes/teams/sig-cloud-provider-api-reviews) | API Changes and Reviews | -| @kubernetes/sig-cloud-provider-bugs | [link](https://github.com/orgs/kubernetes/teams/sig-cloud-provider-bugs) | Bug Triage and Troubleshooting | -| @kubernetes/sig-cloud-provider-feature-requests | [link](https://github.com/orgs/kubernetes/teams/sig-cloud-provider-feature-requests) | Feature Requests | -| @kubernetes/sig-cloud-provider-maintainers | [link](https://github.com/orgs/kubernetes/teams/sig-cloud-provider-maintainers) | Cloud Providers Maintainers | -| @kubernetes/sig-cloud-provider-pr-reviews | [link](https://github.com/orgs/kubernetes/teams/sig-cloud-provider-pr-reviews) | PR Reviews | -| @kubernetes/sig-cloud-provider-proposals | [link](https://github.com/orgs/kubernetes/teams/sig-cloud-provider-proposals) | Design Proposals | -| @kubernetes/sig-cloud-provider-test-failures | [link](https://github.com/orgs/kubernetes/teams/sig-cloud-provider-test-failures) | Test Failures and Triage | -| @kubernetes/sig-cloud-providers-misc | [link](https://github.com/orgs/kubernetes/teams/sig-cloud-providers-misc) | General Discussion | - +The following [subprojects][subproject-definition] are owned by sig-cloud-provider: +### cloud-provider-extraction-migration +- **Owners:** + - https://raw.githubusercontent.com/kubernetes-sigs/apiserver-network-proxy/master/OWNERS + - https://raw.githubusercontent.com/kubernetes/community/master/sig-cloud-provider/cloud-provider-extraction-migration/OWNERS + - https://raw.githubusercontent.com/kubernetes/legacy-cloud-providers/master/OWNERS +- **Meetings:** + - Weekly Sync removing the in-tree cloud providers led by @cheftako and @mcrute: [Thursdays at 13:30 PT (Pacific Time)](https://docs.google.com/document/d/1KLsGGzNXQbsPeELCeF_q-f0h0CEGSe20xiwvcR2NlYM/edit) (weekly). [Convert to your timezone](http://www.thetimezoneconverter.com/?t=13:30&tz=PT%20%28Pacific%20Time%29). +### kubernetes-cloud-provider +- **Owners:** + - https://raw.githubusercontent.com/kubernetes/cloud-provider-sample/master/OWNERS + - https://raw.githubusercontent.com/kubernetes/cloud-provider/master/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/cmd/cloud-controller-manager/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/pkg/cloudprovider/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/pkg/controller/cloud/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/staging/src/k8s.io/cloud-provider/OWNERS +### provider-alibaba-cloud +- **Owners:** + - https://raw.githubusercontent.com/kubernetes-sigs/alibaba-cloud-csi-driver/master/OWNERS + - https://raw.githubusercontent.com/kubernetes/cloud-provider-alibaba-cloud/master/OWNERS +### provider-aws +- **Owners:** + - https://raw.githubusercontent.com/kubernetes-sigs/aws-alb-ingress-controller/master/OWNERS + - https://raw.githubusercontent.com/kubernetes-sigs/aws-ebs-csi-driver/master/OWNERS + - https://raw.githubusercontent.com/kubernetes-sigs/aws-efs-csi-driver/master/OWNERS + - https://raw.githubusercontent.com/kubernetes-sigs/aws-encryption-provider/master/OWNERS + - https://raw.githubusercontent.com/kubernetes-sigs/aws-fsx-csi-driver/master/OWNERS + - https://raw.githubusercontent.com/kubernetes-sigs/aws-iam-authenticator/master/OWNERS + - https://raw.githubusercontent.com/kubernetes/cloud-provider-aws/master/OWNERS +- **Meetings:** + - Regular AWS Subproject Meeting: [Fridays at 9:00 PT (Pacific Time)](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit) (biweekly 2019 start date: Jan. 11th). [Convert to your timezone](http://www.thetimezoneconverter.com/?t=9:00&tz=PT%20%28Pacific%20Time%29). + - [Meeting notes and Agenda](https://docs.google.com/document/d/1-i0xQidlXnFEP9fXHWkBxqySkXwJnrGJP9OGyP2_P14/edit). + - [Meeting recordings](https://www.youtube.com/playlist?list=PL69nYSiGNLP29DzPOBBaJi-SO3AQ_b4HC). +### provider-azure +- **Owners:** + - https://raw.githubusercontent.com/kubernetes-sigs/azuredisk-csi-driver/master/OWNERS + - https://raw.githubusercontent.com/kubernetes-sigs/azurefile-csi-driver/master/OWNERS + - https://raw.githubusercontent.com/kubernetes-sigs/cluster-api-provider-azure/master/OWNERS + - https://raw.githubusercontent.com/kubernetes/cloud-provider-azure/master/OWNERS +- **Meetings:** + - Azure Subproject Meeting (First Monday): [Mondays at 14:30 UTC](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit) (monthly). [Convert to your timezone](http://www.thetimezoneconverter.com/?t=14:30&tz=UTC). + - [Meeting notes and Agenda](https://docs.google.com/document/d/1SpxvmOgHDhnA72Z0lbhBffrfe9inQxZkU9xqlafOW9k/edit). + - [Meeting recordings](https://www.youtube.com/watch?v=yQLeUKi_dwg&list=PL69nYSiGNLP2JNdHwB8GxRs2mikK7zyc4). + - Azure Subproject Meeting (Third Tuesday UTC, Monday Pacific): [Tuesdays at 1:00 UTC](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit) (monthly). [Convert to your timezone](http://www.thetimezoneconverter.com/?t=1:00&tz=UTC). + - [Meeting notes and Agenda](https://docs.google.com/document/d/1SpxvmOgHDhnA72Z0lbhBffrfe9inQxZkU9xqlafOW9k/edit). + - [Meeting recordings](https://www.youtube.com/watch?v=yQLeUKi_dwg&list=PL69nYSiGNLP2JNdHwB8GxRs2mikK7zyc4). +### provider-gcp +- **Owners:** + - https://raw.githubusercontent.com/kubernetes-sigs/gcp-compute-persistent-disk-csi-driver/master/OWNERS + - https://raw.githubusercontent.com/kubernetes-sigs/gcp-filestore-csi-driver/master/OWNERS + - https://raw.githubusercontent.com/kubernetes/cloud-provider-gcp/master/OWNERS +- **Meetings:** + - Regular GCP Subproject Meeting: [Thursdays at 16:00 UTC](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit) (biweekly). [Convert to your timezone](http://www.thetimezoneconverter.com/?t=16:00&tz=UTC). + - [Meeting notes and Agenda](https://docs.google.com/document/d/1mtmwZ4oVSSWhbEw8Lfzvc7ig84qxUpdK6uHyJp8rSGU/edit). +### provider-ibmcloud +- **Owners:** + - https://raw.githubusercontent.com/kubernetes-sigs/cluster-api-provider-ibmcloud/master/OWNERS +- **Meetings:** + - Regular IBM Subproject Meeting: [Wednesdays at 14:00 EST](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit) (biweekly). [Convert to your timezone](http://www.thetimezoneconverter.com/?t=14:00&tz=EST). + - [Meeting notes and Agenda](https://docs.google.com/document/d/1qd_LTu5GFaxUhSWTHigowHt3XwjJVf1L57kupj8lnwg/edit). +### provider-openstack +- **Owners:** + - https://raw.githubusercontent.com/kubernetes/cloud-provider-openstack/master/OWNERS +- **Meetings:** + - Regular OpenStack Subproject Meeting: [Wednesdays at 08:00 PT (Pacific Time)](https://docs.google.com/document/d/1bW3j4hFN4D8rv2LFv-DybB3gcE5ISAaOO_OpvDCgrGg/edit) (biweekly starting Wednesday March 20, 2019). [Convert to your timezone](http://www.thetimezoneconverter.com/?t=08:00&tz=PT%20%28Pacific%20Time%29). + - [Meeting notes and Agenda](https://docs.google.com/document/d/15UwgLbEyZyXXxVtsThcSuPiJru4CuqU9p3ttZSfTaY4/edit). + - [Meeting recordings](https://www.youtube.com/watch?v=iCfUx7ilh0E&list=PL69nYSiGNLP20iTSChQ_i2QQmTBl3M7ax). +### provider-vsphere +- **Owners:** + - https://raw.githubusercontent.com/kubernetes-sigs/vsphere-csi-driver/master/OWNERS + - https://raw.githubusercontent.com/kubernetes/cloud-provider-vsphere/master/OWNERS +- **Meetings:** + - Cloud Provider vSphere monthly syncup: [Wednesdays at 09:00 PT (Pacific Time)](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit) (monthly - first Wednesday every month). [Convert to your timezone](http://www.thetimezoneconverter.com/?t=09:00&tz=PT%20%28Pacific%20Time%29). + - [Meeting notes and Agenda](https://docs.google.com/document/d/1B0NmmKVh8Ea5hnNsbUsJC7ZyNCsq_6NXl5hRdcHlJgY/edit?usp=sharing). + - [Meeting recordings](https://www.youtube.com/playlist?list=PLutJyDdkKQIpOT4bOfuO3MEMHvU1tRqyR). + +[subproject-definition]: https://github.com/kubernetes/community/blob/master/governance.md#subprojects <!-- BEGIN CUSTOM CONTENT --> <!-- END CUSTOM CONTENT --> diff --git a/sig-cluster-lifecycle/README.md b/sig-cluster-lifecycle/README.md index 3751e883..b00ea0e7 100644 --- a/sig-cluster-lifecycle/README.md +++ b/sig-cluster-lifecycle/README.md @@ -14,7 +14,7 @@ The [charter](charter.md) defines the scope and governance of the Cluster Lifecy ## Meetings * Cluster API (AWS implementation) office hours: [Mondays at 10:00 PT (Pacific Time)](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit) (biweekly). [Convert to your timezone](http://www.thetimezoneconverter.com/?t=10:00&tz=PT%20%28Pacific%20Time%29). - * [Meeting notes and Agenda](https://docs.google.com/document/d/10dq54Fd-xa6P5Iy3p46VY1YTFqugGMd1PygDIpuRw6c/edit). + * [Meeting notes and Agenda](https://docs.google.com/document/d/1ojR0jooQaHEuz3gGW6DxcZlsws9ZX7jHPC8walm1G3A/edit). * [Meeting recordings](https://www.youtube.com/playlist?list=PL69nYSiGNLP29D0nYgAGWt1ZFqS9Z7lw4). * Cluster API Provider Implementers' office hours (EMEA): [Wednesdays at 15:00 CEST (Central European Summer Time)](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit) (weekly). [Convert to your timezone](http://www.thetimezoneconverter.com/?t=15:00&tz=CEST%20%28Central%20European%20Summer%20Time%29). * [Meeting notes and Agenda](https://docs.google.com/document/d/1IZ2-AZhe4r3CYiJuttyciS7bGZTTx4iMppcA8_Pr3xE/edit). @@ -32,13 +32,15 @@ The [charter](charter.md) defines the scope and governance of the Cluster Lifecy * Regular SIG Meeting: [Tuesdays at 09:00 PT (Pacific Time)](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit) (biweekly). [Convert to your timezone](http://www.thetimezoneconverter.com/?t=09:00&tz=PT%20%28Pacific%20Time%29). * [Meeting notes and Agenda](https://docs.google.com/document/d/1Gmc7LyCIL_148a9Tft7pdhdee0NBHdOfHS1SAF0duI4/edit). * [Meeting recordings](https://www.youtube.com/playlist?list=PL69nYSiGNLP29D0nYgAGWt1ZFqS9Z7lw4). +* Regular SIG Meeting in China: [Tuesdays at 20:00 Beijing](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit) (biweekly). [Convert to your timezone](http://www.thetimezoneconverter.com/?t=20:00&tz=Beijing). + * [Meeting notes and Agenda](https://shimo.im/docs/YcoaYlvRmIYcrwnd). * etcdadm Office Hours: [Mondays at 09:00 PT (Pacific Time)](https://docs.google.com/document/d/1b_J0oBvi9lL0gsPgTOrCw1Zlx3e7BYEuXnB3d2S15pA/edit#) (biweekly). [Convert to your timezone](http://www.thetimezoneconverter.com/?t=09:00&tz=PT%20%28Pacific%20Time%29). * kops Office Hours: [Fridays at 09:00 PT (Pacific Time)](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit) (biweekly). [Convert to your timezone](http://www.thetimezoneconverter.com/?t=09:00&tz=PT%20%28Pacific%20Time%29). * [Meeting notes and Agenda](https://docs.google.com/document/d/12QkyL0FkNbWPcLFxxRGSPt_tNPBHbmni3YLY-lHny7E/edit). * kubeadm Office Hours: [Wednesdays at 09:00 PT (Pacific Time)](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit) (weekly). [Convert to your timezone](http://www.thetimezoneconverter.com/?t=09:00&tz=PT%20%28Pacific%20Time%29). * [Meeting notes and Agenda](https://docs.google.com/document/d/130_kiXjG7graFNSnIAgtMS1G8zPDwpkshgfRYS0nggo/edit). * [Meeting recordings](https://www.youtube.com/playlist?list=PL69nYSiGNLP29D0nYgAGWt1ZFqS9Z7lw4). -* minikube Office Hours: [Mondays at 10:00 PT (Pacific Time)](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit) (biweekly). [Convert to your timezone](http://www.thetimezoneconverter.com/?t=10:00&tz=PT%20%28Pacific%20Time%29). +* minikube Office Hours: [Mondays at 11:00 PT (Pacific Time)](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit) (biweekly). [Convert to your timezone](http://www.thetimezoneconverter.com/?t=11:00&tz=PT%20%28Pacific%20Time%29). * [Meeting notes and Agenda](https://docs.google.com/document/d/1jhfmL1gsgN39uCEgz5pW9tnIotFgHhxq2yfMK3KYE4w/edit). ## Leadership @@ -55,95 +57,103 @@ The Chairs of the SIG run operations and processes governing the SIG. * Robert Bailey (**[@roberthbailey](https://github.com/roberthbailey)**), Google ## Contact -* [Slack](https://kubernetes.slack.com/messages/sig-cluster-lifecycle) -* [Mailing list](https://groups.google.com/forum/#!forum/kubernetes-sig-cluster-lifecycle) -* [Open Community Issues/PRs](https://github.com/kubernetes/community/labels/sig%2Fcluster-lifecycle) +- Slack: [#sig-cluster-lifecycle](https://kubernetes.slack.com/messages/sig-cluster-lifecycle) +- [Mailing list](https://groups.google.com/forum/#!forum/kubernetes-sig-cluster-lifecycle) +- [Open Community Issues/PRs](https://github.com/kubernetes/community/labels/sig%2Fcluster-lifecycle) +- GitHub Teams: + - [@kubernetes/sig-cluster-lifecycle](https://github.com/orgs/kubernetes/teams/sig-cluster-lifecycle) - Notify group + - [@kubernetes/sig-cluster-lifecycle-pr-reviews](https://github.com/orgs/kubernetes/teams/sig-cluster-lifecycle-pr-reviews) - PR Reviews ## Subprojects -The following subprojects are owned by sig-cluster-lifecycle: -- **bootkube** - - Owners: - - https://raw.githubusercontent.com/kubernetes-incubator/bootkube/master/OWNERS - - Contact - - Slack: [#bootkube](https://kubernetes.slack.com/messages/bootkube) -- **cluster-addons** - - Owners: - - https://raw.githubusercontent.com/kubernetes-sigs/addon-operators/master/OWNERS - - Contact - - Slack: [#cluster-addons](https://kubernetes.slack.com/messages/cluster-addons) -- **cluster-api** - - Owners: - - https://raw.githubusercontent.com/kubernetes-sigs/cluster-api/master/OWNERS - - Contact - - Slack: [#cluster-api](https://kubernetes.slack.com/messages/cluster-api) -- **cluster-api-provider-aws** - - Owners: - - https://raw.githubusercontent.com/kubernetes-sigs/cluster-api-provider-aws/master/OWNERS -- **cluster-api-provider-digitalocean** - - Owners: - - https://raw.githubusercontent.com/kubernetes-sigs/cluster-api-provider-digitalocean/master/OWNERS -- **cluster-api-provider-gcp** - - Owners: - - https://raw.githubusercontent.com/kubernetes-sigs/cluster-api-provider-gcp/master/OWNERS -- **cluster-api-provider-openstack** - - Owners: - - https://raw.githubusercontent.com/kubernetes-sigs/cluster-api-provider-openstack/master/OWNERS -- **etcdadm** - - Owners: - - https://raw.githubusercontent.com/kubernetes-sigs/etcdadm/master/OWNERS - - Contact - - Slack: [#etcdadm](https://kubernetes.slack.com/messages/etcdadm) -- **kops** - - Owners: - - https://raw.githubusercontent.com/kubernetes/kops/master/OWNERS -- **kube-aws** - - Owners: - - https://raw.githubusercontent.com/kubernetes-incubator/kube-aws/master/OWNERS - - Contact - - Slack: [#kube-aws](https://kubernetes.slack.com/messages/kube-aws) -- **kube-deploy** - - Owners: - - https://raw.githubusercontent.com/kubernetes/kube-deploy/master/OWNERS - - Contact - - Slack: [#kube-deploy](https://kubernetes.slack.com/messages/kube-deploy) -- **kube-up** - - Owners: - - https://raw.githubusercontent.com/kubernetes/kubernetes/master/cluster/OWNERS -- **kubeadm** - - Owners: - - https://raw.githubusercontent.com/kubernetes/cluster-bootstrap/master/OWNERS - - https://raw.githubusercontent.com/kubernetes/kubeadm/master/OWNERS - - https://raw.githubusercontent.com/kubernetes/kubernetes/master/cmd/kubeadm/OWNERS - - Contact - - Slack: [#kubeadm](https://kubernetes.slack.com/messages/kubeadm) -- **kubeadm-dind-cluster** - - Owners: - - https://raw.githubusercontent.com/kubernetes-sigs/kubeadm-dind-cluster/master/OWNERS -- **kubernetes-anywhere** - - Owners: - - https://raw.githubusercontent.com/kubernetes/kubernetes-anywhere/master/OWNERS -- **kubespray** - - Owners: - - https://raw.githubusercontent.com/kubernetes-sigs/kubespray/master/OWNERS - - Contact - - Slack: [#kubespray](https://kubernetes.slack.com/messages/kubespray) -- **minikube** - - Owners: - - https://raw.githubusercontent.com/kubernetes/minikube/master/OWNERS - - Contact - - Slack: [#minikube](https://kubernetes.slack.com/messages/minikube) - -## GitHub Teams - -The below teams can be mentioned on issues and PRs in order to get attention from the right people. -Note that the links to display team membership will only work if you are a member of the org. - -| Team Name | Details | Description | -| --------- |:-------:| ----------- | -| @kubernetes/sig-cluster-lifecycle | [link](https://github.com/orgs/kubernetes/teams/sig-cluster-lifecycle) | Notify group | -| @kubernetes/sig-cluster-lifecycle-pr-reviews | [link](https://github.com/orgs/kubernetes/teams/sig-cluster-lifecycle-pr-reviews) | PR Reviews | - +The following [subprojects][subproject-definition] are owned by sig-cluster-lifecycle: +### bootkube +- **Owners:** + - https://raw.githubusercontent.com/kubernetes-incubator/bootkube/master/OWNERS +- **Contact:** + - Slack: [#bootkube](https://kubernetes.slack.com/messages/bootkube) +### cluster-addons +- **Owners:** + - https://raw.githubusercontent.com/kubernetes-sigs/addon-operators/master/OWNERS +- **Contact:** + - Slack: [#cluster-addons](https://kubernetes.slack.com/messages/cluster-addons) +### cluster-api +- **Owners:** + - https://raw.githubusercontent.com/kubernetes-sigs/cluster-api-bootstrap-provider-kubeadm/master/OWNERS + - https://raw.githubusercontent.com/kubernetes-sigs/cluster-api/master/OWNERS +- **Contact:** + - Slack: [#cluster-api](https://kubernetes.slack.com/messages/cluster-api) +### cluster-api-provider-aws +- **Owners:** + - https://raw.githubusercontent.com/kubernetes-sigs/cluster-api-provider-aws/master/OWNERS +### cluster-api-provider-digitalocean +- **Owners:** + - https://raw.githubusercontent.com/kubernetes-sigs/cluster-api-provider-digitalocean/master/OWNERS +### cluster-api-provider-docker +- **Owners:** + - https://raw.githubusercontent.com/kubernetes-sigs/cluster-api-provider-docker/master/OWNERS +### cluster-api-provider-gcp +- **Owners:** + - https://raw.githubusercontent.com/kubernetes-sigs/cluster-api-provider-gcp/master/OWNERS +### cluster-api-provider-openstack +- **Owners:** + - https://raw.githubusercontent.com/kubernetes-sigs/cluster-api-provider-openstack/master/OWNERS +### cluster-api-provider-vsphere +- **Owners:** + - https://raw.githubusercontent.com/kubernetes-sigs/cluster-api-provider-vsphere/master/OWNERS +- **Contact:** + - Slack: [#cluster-api-vsphere](https://kubernetes.slack.com/messages/cluster-api-vsphere) +- **Meetings:** + - Cluster API vSphere syncup meeting: [Wednesdays at 13:00 PT (Pacific Time)](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit) (bi-weekly). [Convert to your timezone](http://www.thetimezoneconverter.com/?t=13:00&tz=PT%20%28Pacific%20Time%29). + - [Meeting notes and Agenda](https://docs.google.com/document/d/1jQrQiOW75uWraPk4b_LWtCTHwT7EZwrWWwMdxeWOEvk/edit?usp=sharing). + - [Meeting recordings](https://www.youtube.com/playlist?list=PLutJyDdkKQIovV-AONxMa2cyv-_5LAYiu). +### etcdadm +- **Owners:** + - https://raw.githubusercontent.com/kubernetes-sigs/etcdadm/master/OWNERS +- **Contact:** + - Slack: [#etcdadm](https://kubernetes.slack.com/messages/etcdadm) +### image-builder +- **Owners:** + - https://raw.githubusercontent.com/kubernetes-sigs/image-builder/master/OWNERS +### kops +- **Owners:** + - https://raw.githubusercontent.com/kubernetes/kops/master/OWNERS +### kube-aws +- **Owners:** + - https://raw.githubusercontent.com/kubernetes-incubator/kube-aws/master/OWNERS +- **Contact:** + - Slack: [#kube-aws](https://kubernetes.slack.com/messages/kube-aws) +### kube-deploy +- **Owners:** + - https://raw.githubusercontent.com/kubernetes/kube-deploy/master/OWNERS +- **Contact:** + - Slack: [#kube-deploy](https://kubernetes.slack.com/messages/kube-deploy) +### kube-up +- **Owners:** + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/cluster/OWNERS +### kubeadm +- **Owners:** + - https://raw.githubusercontent.com/kubernetes/cluster-bootstrap/master/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubeadm/master/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/cmd/kubeadm/OWNERS + - https://raw.githubusercontent.com/kubernetes/system-validators/master/OWNERS +- **Contact:** + - Slack: [#kubeadm](https://kubernetes.slack.com/messages/kubeadm) +### kubernetes-anywhere +- **Owners:** + - https://raw.githubusercontent.com/kubernetes/kubernetes-anywhere/master/OWNERS +### kubespray +- **Owners:** + - https://raw.githubusercontent.com/kubernetes-sigs/kubespray/master/OWNERS +- **Contact:** + - Slack: [#kubespray](https://kubernetes.slack.com/messages/kubespray) +### minikube +- **Owners:** + - https://raw.githubusercontent.com/kubernetes/minikube/master/OWNERS +- **Contact:** + - Slack: [#minikube](https://kubernetes.slack.com/messages/minikube) + +[subproject-definition]: https://github.com/kubernetes/community/blob/master/governance.md#subprojects <!-- BEGIN CUSTOM CONTENT --> <!-- END CUSTOM CONTENT --> diff --git a/sig-contributor-experience/README.md b/sig-contributor-experience/README.md index d364db5e..2eb26fe7 100644 --- a/sig-contributor-experience/README.md +++ b/sig-contributor-experience/README.md @@ -13,8 +13,7 @@ Developing and sustaining a healthy community of contributors is critical to sca The [charter](charter.md) defines the scope and governance of the Contributor Experience Special Interest Group. ## Meetings -* APAC SIG Meeting: [Wednesdays at 20:00 PT (Pacific Time)](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit) (monthly - fourth Wednesday every month). [Convert to your timezone](http://www.thetimezoneconverter.com/?t=20:00&tz=PT%20%28Pacific%20Time%29). -* Regular SIG Meeting: [Wednesdays at 9:30 PT (Pacific Time)](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit) (weekly - except fourth Wednesday every month). [Convert to your timezone](http://www.thetimezoneconverter.com/?t=9:30&tz=PT%20%28Pacific%20Time%29). +* Regular SIG Meeting: [Wednesdays at 9:30 PT (Pacific Time)](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit) (biweekly). [Convert to your timezone](http://www.thetimezoneconverter.com/?t=9:30&tz=PT%20%28Pacific%20Time%29). * [Meeting notes and Agenda](https://docs.google.com/document/d/1qf-02B7EOrItQgwXFxgqZ5qjW0mtfu5qkYIF1Hl4ZLI/). * [Meeting recordings](https://www.youtube.com/watch?v=EMGUdOKwSns&list=PL69nYSiGNLP2x_48wbOPO0vXQgNTm_xxr). @@ -38,71 +37,77 @@ subprojects, and resolve cross-subproject technical issues and decisions. * Garrett Rodrigues (**[@grodrigues3](https://github.com/grodrigues3)**), Google ## Contact -* [Slack](https://kubernetes.slack.com/messages/sig-contribex) -* [Mailing list](https://groups.google.com/forum/#!forum/kubernetes-sig-contribex) -* [Open Community Issues/PRs](https://github.com/kubernetes/community/labels/sig%2Fcontributor-experience) +- Slack: [#sig-contribex](https://kubernetes.slack.com/messages/sig-contribex) +- [Mailing list](https://groups.google.com/forum/#!forum/kubernetes-sig-contribex) +- [Open Community Issues/PRs](https://github.com/kubernetes/community/labels/sig%2Fcontributor-experience) +- GitHub Teams: + - [@kubernetes/sig-contributor-experience-bugs](https://github.com/orgs/kubernetes/teams/sig-contributor-experience-bugs) - Bug Triage and Troubleshooting + - [@kubernetes/sig-contributor-experience-feature-requests](https://github.com/orgs/kubernetes/teams/sig-contributor-experience-feature-requests) - Feature Requests + - [@kubernetes/sig-contributor-experience-misc-use-only-as-a-last-resort](https://github.com/orgs/kubernetes/teams/sig-contributor-experience-misc-use-only-as-a-last-resort) - General Discussion + - [@kubernetes/sig-contributor-experience-pr-reviews](https://github.com/orgs/kubernetes/teams/sig-contributor-experience-pr-reviews) - PR Reviews + - [@kubernetes/sig-contributor-experience-proposals](https://github.com/orgs/kubernetes/teams/sig-contributor-experience-proposals) - Design Proposals + - [@kubernetes/sig-contributor-experience-test-failures](https://github.com/orgs/kubernetes/teams/sig-contributor-experience-test-failures) - Test Failures and Triage ## Subprojects -The following subprojects are owned by sig-contributor-experience: -- **community** - - Owners: - - https://raw.githubusercontent.com/kubernetes/community/master/OWNERS -- **community-management** - - Owners: - - https://raw.githubusercontent.com/kubernetes/community/master/communication/OWNERS -- **contributors-documentation** - - Owners: - - https://raw.githubusercontent.com/kubernetes-sigs/contributor-site/master/OWNERS - - https://raw.githubusercontent.com/kubernetes/community/master/contributors/guide/OWNERS - - Meetings: - - Non-Code Contributors Meeting: [Wednesdays at 11:00 PT (Pacific Time)](https://docs.google.com/document/d/1gdFWfkrapQclZ4-z4Lx2JwqKsJjXXUOVoLhBzZiZgSk/edit) (biweekly). [Convert to your timezone](http://www.thetimezoneconverter.com/?t=11:00&tz=PT%20%28Pacific%20Time%29). -- **devstats** - - Owners: - - https://raw.githubusercontent.com/kubernetes/community/master/sig-contributor-experience/devstats/OWNERS - - Contact - - Slack: [#devstats](https://kubernetes.slack.com/messages/devstats) -- **events** - - Owners: - - https://raw.githubusercontent.com/kubernetes/community/master/events/OWNERS - - Contact - - Slack: [#events](https://kubernetes.slack.com/messages/events) - - Meetings: - - Contributor Summit strategy, content and planning: [Mondays at 9:00 PT (Pacific Time)]() (weekly). [Convert to your timezone](http://www.thetimezoneconverter.com/?t=9:00&tz=PT%20%28Pacific%20Time%29). -- **github-management** - - Owners: - - https://raw.githubusercontent.com/kubernetes/community/master/github-management/OWNERS - - https://raw.githubusercontent.com/kubernetes/org/master/OWNERS -- **k8s.io** - - Owners: - - https://raw.githubusercontent.com/kubernetes/k8s.io/master/OWNERS -- **mentoring** - - Owners: - - https://raw.githubusercontent.com/kubernetes-sigs/contributor-playground/master/OWNERS - - https://raw.githubusercontent.com/kubernetes/community/master/mentoring/OWNERS -- **repo-infra** - - Owners: - - https://raw.githubusercontent.com/kubernetes/repo-infra/master/OWNERS -- **slack-infra** - - Owners: - - https://raw.githubusercontent.com/kubernetes-sigs/slack-infra/master/OWNERS - - Contact - - Slack: [#slack-infra](https://kubernetes.slack.com/messages/slack-infra) - -## GitHub Teams - -The below teams can be mentioned on issues and PRs in order to get attention from the right people. -Note that the links to display team membership will only work if you are a member of the org. - -| Team Name | Details | Description | -| --------- |:-------:| ----------- | -| @kubernetes/sig-contributor-experience-bugs | [link](https://github.com/orgs/kubernetes/teams/sig-contributor-experience-bugs) | Bug Triage and Troubleshooting | -| @kubernetes/sig-contributor-experience-feature-requests | [link](https://github.com/orgs/kubernetes/teams/sig-contributor-experience-feature-requests) | Feature Requests | -| @kubernetes/sig-contributor-experience-misc-use-only-as-a-last-resort | [link](https://github.com/orgs/kubernetes/teams/sig-contributor-experience-misc-use-only-as-a-last-resort) | General Discussion | -| @kubernetes/sig-contributor-experience-pr-reviews | [link](https://github.com/orgs/kubernetes/teams/sig-contributor-experience-pr-reviews) | PR Reviews | -| @kubernetes/sig-contributor-experience-proposals | [link](https://github.com/orgs/kubernetes/teams/sig-contributor-experience-proposals) | Design Proposals | -| @kubernetes/sig-contributor-experience-test-failures | [link](https://github.com/orgs/kubernetes/teams/sig-contributor-experience-test-failures) | Test Failures and Triage | - +The following [subprojects][subproject-definition] are owned by sig-contributor-experience: +### community +Owns and manages overall community repo, including community group documentation and operations. +- **Owners:** + - https://raw.githubusercontent.com/kubernetes/community/master/OWNERS +### community-management +Manages operations and policy for upstream community group communication platforms. +- **Owners:** + - https://raw.githubusercontent.com/kubernetes/community/master/communication/OWNERS +- **Meetings:** + - APAC Coordinator Meeting: [Thursdays at 5:00 UTC](https://docs.google.com/document/d/1qf-02B7EOrItQgwXFxgqZ5qjW0mtfu5qkYIF1Hl4ZLI/edit) (biweekly). [Convert to your timezone](http://www.thetimezoneconverter.com/?t=5:00&tz=UTC). +### contributors-documentation +writes and maintains documentation around contributing to Kubernetes, including the Contributor's Guide, Developer's Guide, and contributor website. +- **Owners:** + - https://raw.githubusercontent.com/kubernetes-sigs/contributor-site/master/OWNERS + - https://raw.githubusercontent.com/kubernetes/community/master/contributors/guide/OWNERS +- **Meetings:** + - Non-Code Contributors Meeting: [Wednesdays at 11:00 PT (Pacific Time)](https://docs.google.com/document/d/1gdFWfkrapQclZ4-z4Lx2JwqKsJjXXUOVoLhBzZiZgSk/edit) (biweekly). [Convert to your timezone](http://www.thetimezoneconverter.com/?t=11:00&tz=PT%20%28Pacific%20Time%29). +### devstats +Maintains and updates https://k8s.devstats.cncf.io, including taking requests for new charts. +- **Owners:** + - https://raw.githubusercontent.com/kubernetes/community/master/sig-contributor-experience/devstats/OWNERS +- **Contact:** + - Slack: [#devstats](https://kubernetes.slack.com/messages/devstats) +### events +Creates and runs contributor-focused events, such as the Contributor Summit. Event Teams are part of this subproject. +- **Owners:** + - https://raw.githubusercontent.com/kubernetes/community/master/events/OWNERS +- **Contact:** + - Slack: [#events](https://kubernetes.slack.com/messages/events) +- **Meetings:** + - Events Planning Subproject: [Mondays at 10:00 PT (Pacific Time)](https://docs.google.com/document/d/1oLXv5_rM4f645jlXym_Vd7AUq7x6DV-O87E6tcW1sjU/edit) (weekly). [Convert to your timezone](http://www.thetimezoneconverter.com/?t=10:00&tz=PT%20%28Pacific%20Time%29). +### github-management +Manages and controls Github permissions, repos, and groups, including Org Membership. +- **Owners:** + - https://raw.githubusercontent.com/kubernetes/community/master/github-management/OWNERS + - https://raw.githubusercontent.com/kubernetes/org/master/OWNERS +### k8s.io +Creates and maintains shortcuts and automation apps running in the k8s.io domain. +- **Owners:** + - https://raw.githubusercontent.com/kubernetes/k8s.io/master/OWNERS +### mentoring +Oversees and develops programs for helping contributors ascend the contributor ladder, including the New Contributor Workshops, Meet Our Contributors, and other programs. +- **Owners:** + - https://raw.githubusercontent.com/kubernetes-sigs/contributor-playground/master/OWNERS + - https://raw.githubusercontent.com/kubernetes/community/master/mentoring/OWNERS +### repo-infra +Creates and maintains tools and templates for kubernetes-namespace repositories. +- **Owners:** + - https://raw.githubusercontent.com/kubernetes/repo-infra/master/OWNERS +### slack-infra +Creates and maintains tools and automation for Kubernetes Slack. +- **Owners:** + - https://raw.githubusercontent.com/kubernetes-sigs/slack-infra/master/OWNERS +- **Contact:** + - Slack: [#slack-infra](https://kubernetes.slack.com/messages/slack-infra) + +[subproject-definition]: https://github.com/kubernetes/community/blob/master/governance.md#subprojects <!-- BEGIN CUSTOM CONTENT --> <!-- END CUSTOM CONTENT --> diff --git a/sig-contributor-experience/devstats/OWNERS b/sig-contributor-experience/devstats/OWNERS index e347ebda..a4961cf4 100644 --- a/sig-contributor-experience/devstats/OWNERS +++ b/sig-contributor-experience/devstats/OWNERS @@ -1,16 +1,13 @@ # See the OWNERS docs at https://go.k8s.io/owners reviewers: - - Phillels - dims - - jberkus - nikhita - - parispittman - - spiffxp approvers: - Phillels - lukaszgryglicki - jberkus +emeritus_approvers: - spiffxp labels: - sig/contributor-experience diff --git a/sig-contributor-experience/role-handbooks/apac-coordinator.md b/sig-contributor-experience/role-handbooks/apac-coordinator.md new file mode 100644 index 00000000..cf0a77de --- /dev/null +++ b/sig-contributor-experience/role-handbooks/apac-coordinator.md @@ -0,0 +1,30 @@ +# Contributor Experience APAC Coordinator + +## Overview + +The Kubernetes contributor base is still heavily skewed towards the US, and we are trying to diversify geographically. APAC Coordinator in Contributor Experience SIG helps to encourage and inspire more people in APAC regions to start contributing and ensure that there are adequate representations. + +Some common tasks include: + +- help with mirroring programs and strategies for contributors +- speak at meetups and local events about the work that happens in Contributor Experience SIG +- write blog posts about the same in multiple languages, coordinate translation when necessary +- help with regional boards on discuss.kubernetes.io +- help with regional channels on Slack +- run the APAC Contributor Experience SIG update meeting + +APAC Coordinators currently meet at [5:00 UTC](http://www.thetimezoneconverter.com/?t=05:00&tz=UTC) on Thursday every two weeks, the [meeting notes doc](https://docs.google.com/document/d/1qf-02B7EOrItQgwXFxgqZ5qjW0mtfu5qkYIF1Hl4ZLI/) is the same one as the SIG's, join our [mailing list](https://groups.google.com/forum/#!forum/kubernetes-sig-contribex) to get the calendar invite. + +## Team + +| **Name** | **GitHub** | **Slack** | **Timezone** | +| ------ | ------ | ------ | ------ | +| Yang Li | [@idealhack](https://github.com/idealhack) | `@idealhack` | [JST - Japan Standard Time](https://time.is/Japan) | +| Aravind Putrevu | [@aravindputrevu](https://github.com/aravindputrevu) | `@aravindputrevu` | [IST - Indian Standard Time](https://time.is/India) | +| Alison Dowdney | [@alisondy](https://github.com/alisondy) | `@alisondy` | [NZST - New Zealand Standard Time](https://time.is/New_Zealand) | +| Saiyam Pathak | [@saiyam1814](https://github.com/saiyam1814) | `@sammy` | [IST - Indian Standard Time](https://time.is/India) | +| Peeyush Gupta | [@Pensu](https://github.com/Pensu) | `@pensu91` | [IST - Indian Standard Time](https://time.is/India) | +| Nikhita Raghunath | [@nikhita](https://github.com/nikhita) | `@nikhita` | [IST - Indian Standard Time](https://time.is/India) | +| Jintao Zhang | [@tao12345666333](https://github.com/tao12345666333) | `@TaoBeier` | [CST - China Standard Time](https://time.is/China) | + +Team members will be updated as our meetings go on. diff --git a/sig-contributor-experience/triage-team/triage.md b/sig-contributor-experience/triage-team/triage.md new file mode 100644 index 00000000..a8603eb6 --- /dev/null +++ b/sig-contributor-experience/triage-team/triage.md @@ -0,0 +1,92 @@ +# Issue and PR Management + +## Purpose + +Speed up management of issues and PRs under [k/community repo](https://git.k8s.io/community). + +## Scope + +Incoming issues and PRs in the [Kubernetes community repository](https://git.k8s.io/community). The goal is to maintain a healthy community repository by timely handling issues and PRs. The scope may be enhanced in the future. + +## People involved + +Everyone is welcome to help manage issues and PRs, however, the work and responsibilities discussed in this document is created with `sig/contributor-experience` triage team and [OWNERS](https://git.k8s.io/community/sig-contributor-experience/OWNERS) in mind. + +## Work involved + +The main work is to keep track of issues and PRs, ping people, add labels and milestone, and discuss the overall status with the SIG leads. If you can not add or can not decide the correct label or milestone, that’s fine, contact leaders of the SIG to do so. + +### Issues + +#### Validate if an issue is a bug or a support request + +Validate if the issue is indeed a bug by following these [instructions](https://git.k8s.io/community/contributors/guide/issue-triage.md#determine-if-its-a-support-request). If it is a support request, provide a response similar to this [format](https://git.k8s.io/community/contributors/guide/issue-triage.md#user-support-response-example) and close it. + +#### Determine SIG + +In order to determine a correct SIG, charter of the SIG can be helpful. For example, you can determine if an issue belongs to one of the `sig/contributor-experience` [Subprojects](https://git.k8s.io/community/sig-contributor-experience#subprojects) by looking at the [charter](https://git.k8s.io/community/sig-contributor-experience/charter.md). + +An issue can have an incorrect SIG label. If you think an issue does not belong to the labeled SIG, remove the label and provide a reason by adding a comment. For example, provide this response when an issue is incorrectly labeled with the `sig/contributor-experience`: + +```code + +`/remove-sig contributor-experience` + +I don't think this is a SIG Contributor Experience issue because .... + +If you think this is incorrect, please provide a reason and add it back with /sig contributor-experience label as a single line comment. + +``` + +#### Determine milestone + +[Milestone](https://git.k8s.io/community/milestones) should be defined considering the [priority](#determine-priorities). If the priority is `priority/critical-urgent`, the milestone should be the current milestone. If priority is not critical, the milestone can be set to current or future one. Use your experience and reference of related past issues while determining a milestone. + +#### Determine projects + +The project is defined based off of [Subprojects](https://git.k8s.io/community/sig-contributor-experience#subprojects). + +#### Determine area + +An issue `area/*` label is defined around the [Subprojects](https://git.k8s.io/community/sig-contributor-experience#subprojects). e.g. `area/devstats`. Determine the area label considering Subprojects, and using your experience and reference of related past issues. + +#### Determine priorities + +WIP. For now, define priority of an issue by following these generic [instructions](https://git.k8s.io/community/contributors/guide/issue-triage.md#define-priority). + +#### Determine kind + +For the `kind/*` label, we follow the instruction as defined in the [release guidelines](https://git.k8s.io/community/contributors/devel/sig-release/release.md#issuepr-kind-label). + +#### Determine if an issue is a candidate for new contributors + +An issue can be a good candidate for a new contributor to work. Such issues should be labeled with `good first issue` or `help wanted` as described in more detail [here](https://git.k8s.io/community/contributors/guide/help-wanted.md). + +#### Discuss the work + +Maintain a list of issues and PRs which seem to be delaying, at risk of not making it in time, labeled with `lifecycle/stale` and `lifecycle/rotten` or in need of attention by the SIG leads or other roles. Discuss this list in the bi-weekly SIG meetings. If needed, also send the list of issues and PRs that aren't getting enough attention to the mailing list biweekly. + +### PRs + +TODO - PR specific work. + +## How to Escalate + +Whenever you find out that an issue or PR is not active and it needs to be taken care, try the following escalation path. + +### Leave a comment in the issue or PR + +"This issue hasn't been updated in 3 months. Are you still expecting to complete it in the current milestone?". It's helpful here to @ mention individuals you want an attention from. + +### Send a message on the SIG slack channel or mailing list + +It's helpful to directly @ mention the SIG Leads / Owners, and to condense multiple issues into a list, e.g. "Hey, these three issues haven't seen any attention, are they still valid for the current or future milestone?" + +### Message individual owners and reviewers directly + +Send a direct message via Slack and/or email ID, if such an ID is available. + +### Escalate to the SIG Leads + +Talk to SIG leads with suggestions on what to do with non-responsive issues or PR. + diff --git a/sig-docs/README.md b/sig-docs/README.md index 2195ea14..2c60e230 100644 --- a/sig-docs/README.md +++ b/sig-docs/README.md @@ -16,6 +16,9 @@ The [charter](charter.md) defines the scope and governance of the Docs Special I * APAC SIG Meeting: [Wednesdays at 02:00 UTC](https://docs.google.com/document/d/1zg6By77SGg90EVUrhDIhopjZlSDg2jCebU-Ks9cYx0w/edit) (monthly - fourth Wednesday every month). [Convert to your timezone](http://www.thetimezoneconverter.com/?t=02:00&tz=UTC). * [Meeting notes and Agenda](https://docs.google.com/document/d/1Ds87eRiNZeXwRBEbFr6Z7ukjbTow5RQcNZLaSvWWQsE/edit). * [Meeting recordings](https://www.youtube.com/playlist?list=PL69nYSiGNLP3b5hlx0YV7Lo7DtckM84y8). +* Korean Team Meeting: [Thursdays at 13:00 UTC](https://docs.google.com/document/d/1h5sMhBpPB5unJmBAS7KzDiPs-_eFQOu5o4UyHwMtFCA/edit) (biweekly). [Convert to your timezone](http://www.thetimezoneconverter.com/?t=13:00&tz=UTC). + * [Meeting notes and Agenda](https://docs.google.com/document/d/1h5sMhBpPB5unJmBAS7KzDiPs-_eFQOu5o4UyHwMtFCA/edit). + * [Meeting recordings](https://www.youtube.com/playlist?list=PLAOP7m08QDCWZ7RwGca6cU4vzrOMw3ht7). * Regular SIG Meeting: [Tuesdays at 17:30 UTC](https://docs.google.com/document/d/1zg6By77SGg90EVUrhDIhopjZlSDg2jCebU-Ks9cYx0w/edit) (weekly - except fourth Tuesday every month). [Convert to your timezone](http://www.thetimezoneconverter.com/?t=17:30&tz=UTC). * [Meeting notes and Agenda](https://docs.google.com/document/d/1Ds87eRiNZeXwRBEbFr6Z7ukjbTow5RQcNZLaSvWWQsE/edit). * [Meeting recordings](https://www.youtube.com/playlist?list=PL69nYSiGNLP3b5hlx0YV7Lo7DtckM84y8). @@ -25,53 +28,48 @@ The [charter](charter.md) defines the scope and governance of the Docs Special I ### Chairs The Chairs of the SIG run operations and processes governing the SIG. -* Jennifer Rondeau (**[@bradamant3](https://github.com/bradamant3)**), Stripe -* Jared Bhatti (**[@jaredbhatti](https://github.com/jaredbhatti)**), Google +* Jennifer Rondeau (**[@Bradamant3](https://github.com/Bradamant3)**), Stripe +* Jim Angel (**[@jimangel](https://github.com/jimangel)**), General Motors * Zach Corleissen (**[@zacharysarah](https://github.com/zacharysarah)**), Linux Foundation ## Emeritus Leads * Andrew Chen (**[@chenopis](https://github.com/chenopis)**), Google +* Jared Bhatti (**[@jaredbhatti](https://github.com/jaredbhatti)**), Google ## Contact -* [Slack](https://kubernetes.slack.com/messages/sig-docs) -* [Mailing list](https://groups.google.com/forum/#!forum/kubernetes-sig-docs) -* [Open Community Issues/PRs](https://github.com/kubernetes/community/labels/sig%2Fdocs) +- Slack: [#sig-docs](https://kubernetes.slack.com/messages/sig-docs) +- [Mailing list](https://groups.google.com/forum/#!forum/kubernetes-sig-docs) +- [Open Community Issues/PRs](https://github.com/kubernetes/community/labels/sig%2Fdocs) +- GitHub Teams: + - [@kubernetes/kubernetes-blog](https://github.com/orgs/kubernetes/teams/kubernetes-blog) - Kubernetes blog maintainers + - [@kubernetes/sig-docs-de-owners](https://github.com/orgs/kubernetes/teams/sig-docs-de-owners) - German language content + - [@kubernetes/sig-docs-en-owners](https://github.com/orgs/kubernetes/teams/sig-docs-en-owners) - English content (default) + - [@kubernetes/sig-docs-es-owners](https://github.com/orgs/kubernetes/teams/sig-docs-es-owners) - Spanish language content + - [@kubernetes/sig-docs-fr-owners](https://github.com/orgs/kubernetes/teams/sig-docs-fr-owners) - French language content + - [@kubernetes/sig-docs-id-owners](https://github.com/orgs/kubernetes/teams/sig-docs-id-owners) - Indonesian language content + - [@kubernetes/sig-docs-it-owners](https://github.com/orgs/kubernetes/teams/sig-docs-it-owners) - Italian language content + - [@kubernetes/sig-docs-ja-owners](https://github.com/orgs/kubernetes/teams/sig-docs-ja-owners) - Japanese language content + - [@kubernetes/sig-docs-ko-owners](https://github.com/orgs/kubernetes/teams/sig-docs-ko-owners) - Korean language content + - [@kubernetes/sig-docs-maintainers](https://github.com/orgs/kubernetes/teams/sig-docs-maintainers) - Documentation maintainers + - [@kubernetes/sig-docs-pr-reviews](https://github.com/orgs/kubernetes/teams/sig-docs-pr-reviews) - Documentation PR reviews + - [@kubernetes/sig-docs-pt-owners](https://github.com/orgs/kubernetes/teams/sig-docs-pt-owners) - Portuguese language content + - [@kubernetes/sig-docs-zh-owners](https://github.com/orgs/kubernetes/teams/sig-docs-zh-owners) - Chinese language content ## Subprojects -The following subprojects are owned by sig-docs: -- **kubernetes-blog** - - Owners: - - https://raw.githubusercontent.com/kubernetes/website/master/content/en/blog/OWNERS -- **reference-docs** - - Owners: - - https://raw.githubusercontent.com/kubernetes-incubator/reference-docs/master/OWNERS -- **website** - - Owners: - - https://raw.githubusercontent.com/kubernetes/website/master/OWNERS - -## GitHub Teams - -The below teams can be mentioned on issues and PRs in order to get attention from the right people. -Note that the links to display team membership will only work if you are a member of the org. - -| Team Name | Details | Description | -| --------- |:-------:| ----------- | -| @kubernetes/kubernetes-blog | [link](https://github.com/orgs/kubernetes/teams/kubernetes-blog) | Kubernetes blog maintainers | -| @kubernetes/sig-docs-de-owners | [link](https://github.com/orgs/kubernetes/teams/sig-docs-de-owners) | German language content | -| @kubernetes/sig-docs-en-owners | [link](https://github.com/orgs/kubernetes/teams/sig-docs-en-owners) | English content (default) | -| @kubernetes/sig-docs-es-owners | [link](https://github.com/orgs/kubernetes/teams/sig-docs-es-owners) | Spanish language content | -| @kubernetes/sig-docs-fr-owners | [link](https://github.com/orgs/kubernetes/teams/sig-docs-fr-owners) | French language content | -| @kubernetes/sig-docs-id-owners | [link](https://github.com/orgs/kubernetes/teams/sig-docs-id-owners) | Indonesian language content | -| @kubernetes/sig-docs-it-owners | [link](https://github.com/orgs/kubernetes/teams/sig-docs-it-owners) | Italian language content | -| @kubernetes/sig-docs-ja-owners | [link](https://github.com/orgs/kubernetes/teams/sig-docs-ja-owners) | Japanese language content | -| @kubernetes/sig-docs-ko-owners | [link](https://github.com/orgs/kubernetes/teams/sig-docs-ko-owners) | Korean language content | -| @kubernetes/sig-docs-maintainers | [link](https://github.com/orgs/kubernetes/teams/sig-docs-maintainers) | Documentation maintainers | -| @kubernetes/sig-docs-pr-reviews | [link](https://github.com/orgs/kubernetes/teams/sig-docs-pr-reviews) | Documentation PR reviews | -| @kubernetes/sig-docs-pt-owners | [link](https://github.com/orgs/kubernetes/teams/sig-docs-pt-owners) | Portuguese language content | -| @kubernetes/sig-docs-zh-owners | [link](https://github.com/orgs/kubernetes/teams/sig-docs-zh-owners) | Chinese language content | - +The following [subprojects][subproject-definition] are owned by sig-docs: +### kubernetes-blog +- **Owners:** + - https://raw.githubusercontent.com/kubernetes/website/master/content/en/blog/OWNERS +### reference-docs +- **Owners:** + - https://raw.githubusercontent.com/kubernetes-incubator/reference-docs/master/OWNERS +### website +- **Owners:** + - https://raw.githubusercontent.com/kubernetes/website/master/OWNERS + +[subproject-definition]: https://github.com/kubernetes/community/blob/master/governance.md#subprojects <!-- BEGIN CUSTOM CONTENT --> ## Goals * Discuss documentation and docs issues for kubernetes.io diff --git a/sig-docs/blog-subproject/README.md b/sig-docs/blog-subproject/README.md index 953f4d03..6978ed1e 100644 --- a/sig-docs/blog-subproject/README.md +++ b/sig-docs/blog-subproject/README.md @@ -2,28 +2,28 @@ The Kubernetes Blog Subproject is owned by [SIG-Docs](https://github.com/kubernetes/community/tree/master/sig-docs) and run by the [Editorial Team](#leadership). -This section covers documentation, processes, and roles for the Kubernetes blog. +This section covers documentation, processes, and roles for the [Kubernetes blog](https://kubernetes.io/blog/). ## Meetings -Regular Blog Meeting: TBD (biweekly). +Regular Blog Meeting: Tuesdays at 18:30 UTC (biweekly). [Convert Your Timezone](http://www.thetimezoneconverter.com/?t=18:30&tz=UTC) -* Meeting notes and Agenda -* Meeting recording +- [Meeting notes and Agenda](https://docs.google.com/document/d/1W5MKkaQGd3YKKZINzj1tJAQbql5R_Y4KAHlFNsJ44Bc/edit?usp=sharing) +- [Meeting recordings](https://www.youtube.com/playlist?list=PL69nYSiGNLP3b5hlx0YV7Lo7DtckM84y8) ## Leadership -* **Editorial Leads:** [Kaitlyn Barnard](https://github.com/kbarnard10), [Zach Corleissen](https://github.com/zacharysarah) (shadow) -* **Technical Editors:** [Bob Killen](https://github.com/mrbobbytables) -* **Copy Editors:** [Alex Handy](https://github.com/vonguard), [Cody Clark](https://github.com/cody-clark) -* **Blog Community Managers:** [Jorge Castro](https://github.com/castrojo), [Paris Pittman](https://github.com/parispittman) (shadow) +- **Editorial Leads:** [Kaitlyn Barnard](https://github.com/kbarnard10), [Zach Corleissen](https://github.com/zacharysarah) (shadow) +- **Technical Editors:** [Bob Killen](https://github.com/mrbobbytables), [Taylor Dolezal](https://github.com/onlydole) (shadow) +- **Copy Editors:** [Alex Handy](https://github.com/vonguard), [Cody Clark](https://github.com/cody-clark) +- **Blog Community Managers:** [Jorge Castro](https://github.com/castrojo), [Paris Pittman](https://github.com/parispittman) (shadow) ## Contact -* Slack: #kubernetes-docs-blog -* Mailing List: [blog@kubernetes.io](mailto:blog@kubernetes.io) -* Open Community Issues/PRs: area/blog label -* GitHub Team: @kubernetes/sig-docs-blog-reviews +- Slack: [#kubernetes-docs-blog](https://kubernetes.slack.com/messages/CJDHVD54J) +- Mailing List: [blog@kubernetes.io](mailto:blog@kubernetes.io) +- Open Community Issues/PRs: [`is:open repo:kubernetes/website label:area/blog`](https://github.com/issues?q=is%3Aopen+label%3Aarea%2Fblog+repo%3Akubernetes%2Fwebsite) +- GitHub Teams: [@kubernetes/kubernetes-blog](https://github.com/orgs/kubernetes/teams/kubernetes-blog), [@kubernetes/kubernetes-blog-maintainers](https://github.com/orgs/kubernetes/teams/kubernetes-blog-maintainers) ## Submit a Post @@ -42,25 +42,25 @@ To submit a blog post, you can either submit it using the [Kubernetes blog submi Requested Content (with examples): -* New Kubernetes capabilities -* Kubernetes projects updates -* Updates from Special Interest Groups -* Tutorials and walkthroughs -* Thought leadership around Kubernetes -* Kubernetes Partner OSS integration -* **Original content only** +- New Kubernetes capabilities +- Kubernetes projects updates +- Updates from Special Interest Groups +- Tutorials and walkthroughs +- Thought leadership around Kubernetes +- Kubernetes Partner OSS integration +- **Original content only** Unsuitable Content: -* Vendor product pitches -* Partner updates without an integration and customer story -* Syndicated posts (language translations ok) +- Vendor product pitches +- Partner updates without an integration and customer story +- Syndicated posts (language translations ok) ## Review Process -Once a blog post is submitted either via the form or a PR, it will be routed to the editorial team for review either via email for Google Docs or auto-assigning for a PR. +Once a blog post is submitted either via the form or a PR, it will be routed to the editorial team for review either via email for Google Docs or auto-assigning for a PR. -Each blog post requires a LGTM from one copy editor, technical editor*, and blog community manager. Once the necessary LGTMs are in place, an Editorial Lead will schedule and approve the blog post. +Each blog post requires a LGTM from one copy editor, technical editor\*, and blog community manager. Once the necessary LGTMs are in place, an Editorial Lead will schedule and approve the blog post. _If a blog post does not contain any technical content (for example, [How You Can Help Localize Kubernetes Docs](https://kubernetes.io/blog/2019/04/26/how-you-can-help-localize-kubernetes-docs/)), the technical review can be omitted._ @@ -82,15 +82,15 @@ We typically do not make edits to blog posts more than 1 years old. Each Editorial Team role is responsible for staffing their respective role, with this order of fall-through in mind: -* training and selecting a successor from the current pool of role shadows -* training and selecting a successor from non-Editorial Team members -* staffing the role themselves +- training and selecting a successor from the current pool of role shadows +- training and selecting a successor from non-Editorial Team members +- staffing the role themselves Ultimately, if none of these can be satisfied, responsibility falls to the Editorial Team Lead and SIG-Docs to staff the roles. ### Shadows -We are always open to adding new shadows to the editorial team roles. If you are interested in shadowing one of the roles on the team, please fill out [this application](TBD). We review applications on a rolling basis. +We are always open to adding new shadows to the editorial team roles. If you are interested in shadowing one of the roles on the team, please fill out [this application](The application form is now live for anyone interested in joining the blog editorial team: https://docs.google.com/forms/d/e/1FAIpQLScg9fHsyW-LlsBF8rc9J0sR8u3O3g17lwFUKIE-qrjL6Z-AyA/viewform?usp=sf_link). We review applications on a rolling basis. ### Removing a Team Member diff --git a/sig-docs/survey/2019SIGDocsSurveyRaw.ods b/sig-docs/survey/2019SIGDocsSurveyRaw.ods Binary files differnew file mode 100644 index 00000000..1449dad8 --- /dev/null +++ b/sig-docs/survey/2019SIGDocsSurveyRaw.ods diff --git a/sig-docs/survey/2019SIGDocsSurveyResultsCharts.pdf b/sig-docs/survey/2019SIGDocsSurveyResultsCharts.pdf Binary files differnew file mode 100644 index 00000000..05dd01c4 --- /dev/null +++ b/sig-docs/survey/2019SIGDocsSurveyResultsCharts.pdf diff --git a/sig-docs/survey/2019SeptSurvey.md b/sig-docs/survey/2019SeptSurvey.md new file mode 100644 index 00000000..6ba371f5 --- /dev/null +++ b/sig-docs/survey/2019SeptSurvey.md @@ -0,0 +1,140 @@ +| Data | Info | +| --- | --- | +Title | Kubernetes SIG Docs Survey 2019 +Authors | @aimeeu, @zacharysarah, @sftim with input from additional SIG Docs members (see [SIG-Docs: Documentation User Survey 2019](https://github.com/kubernetes/website/issues/15828)) +Tool Used | SurveyMonkey; @aimeeu worked with the CNCF to create the survey and obtain exported results +Start | 4 September 2019 +End | 7 September 2019 +Langauage | English +Data Processing | This survey did not ask for personal identifiers. Respondent's IP addresses have been removed from results. +Files | Presentation (2019SIGDocsSurveyResultsCharts.pdf) and raw results (2019SIGDocsSurveyRaw.ods) + + +### Questions + +1. What is your level of experience using Kubernetes? + - Beginner + - Experienced + - Expert +2. How do you use Kubernetes? + - Developer + - Administrator + - Developer and Administrator + - Other (please specify) +3. How do you usually access the Kubernetes documentation site most often? + - Phone + - Tablet + - Desktop +4. How long have you been using the Kubernetes documentation? + - Less than 6 months + - 6-12 months + - More than 12 months +5. In which languages do you read the Kubernetes documentation? + - German (de) + - English (en) + - Spanish (es) + - French (fr) + - Japanese (ja) + - Korean (ko) + - Portuguese (pt) + - Chinese (zh) +6. Is the Kubernetes documentation the first place you look for information about Kubernetes? + - Yes + - No +7. How easy is it to find content using the site’s navigation (top and left)? + - Not at all easy + - Slightly easy + - Moderately easy + - Very easy + - Extremely easy +8. How often do you use the search functionality to find content? + - Never + - Rarely + - Occasionally + - Every visit + - Several times per visit +9. Why do you access the Kubernetes documentation? Check all that apply. + - Installation for learning + - Installation for production + - Architecture + - Concepts + - Terminology (glossary) + - API reference + - kubectl CLI reference + - Tasks (administering a cluster, configuring pods, securing Kubernetes, upgrading, etc) + - Troubleshooting guidance + - Tutorials +10. How often do you find what you are looking for? + - Never + - Rarely + - Occasionally + - Most visits + - Every visit +11. Concepts: How satisfied are you with the level of detail in the Concepts section? + - Not at all satisfied + - Slightly satisfied + - Moderately satisfied + - Very satisfied + - Extremely satisfied +12. Concepts: How often do you find outdated content in the Concepts section? + - Never + - Rarely + - Occasionally + - Every visit + - Several times per visit +13. Concepts: How can we improve the Concepts section? Please select all that apply. + - More diagrams + - More example code + - More detailed content + - Other (please specify) +14. Tasks: How satisfied are you with the level of detail in the Tasks section? + - Not at all satisfied + - Slightly satisfied + - Moderately satisfied + - Very satisfied + - Extremely satisfied +15. Tasks: How often do you find outdated content in the Tasks section? + - Never + - Rarely + - Occasionally + - Every visit + - Several times per visit +16. Tasks: How can we improve the Tasks section? Please select all that apply. + - More diagrams + - More example code + - More detailed content + - Other (please specify) +17. Reference: How satisfied are you with the level of detail in the Reference section? + - Not at all satisfied + - Slightly satisfied + - Moderately satisfied + - Very satisfied + - Extremely satisfied +18. Reference: How often do you find outdated content in the Reference section? + - Never + - Rarely + - Occasionally + - Every visit + - Several times per visit +19. Reference: How can we improve the Reference section? Please select all that apply. + - More example code + - More detailed content + - Other (please specify) +20. Tutorials: How satisfied are you with the level of detail in the Tutorials section? + - Not at all satisfied + - Slightly satisfied + - Moderately satisfied + - Very satisfied + - Extremely satisfied +21. Tutorials: How often do you find outdated content in the Tutorials section? Please select all that apply. + - Never + - Rarely + - Occasionally + - Every visit + - Several times per visit +22. Tutorials: How can we improve the Tutorials section? Please select all that apply. + - Advanced tutorials (security, networking, configuration, troubleshooting, etc) + - Developer-oriented content + - The availability of interactive tutorials needs to be fixed + - Other (please specify) +23. How can we improve the Kubernetes documentation? diff --git a/sig-gcp/OWNERS b/sig-gcp/OWNERS index 4ff966b4..5edab0a0 100644 --- a/sig-gcp/OWNERS +++ b/sig-gcp/OWNERS @@ -1,8 +1,8 @@ # See the OWNERS docs at https://go.k8s.io/owners reviewers: - - sig-gcp-leads + - provider-gcp approvers: - - sig-gcp-leads + - provider-gcp labels: - sig/gcp diff --git a/sig-gcp/README.md b/sig-gcp/README.md index f249d569..0dc84023 100644 --- a/sig-gcp/README.md +++ b/sig-gcp/README.md @@ -6,15 +6,15 @@ sigs.yaml file in the project root. To understand how this file is generated, see https://git.k8s.io/community/generator/README.md ---> -# GCP Special Interest Group +# [DEPRECATED] GCP Special Interest Group -A Special Interest Group for building, deploying, maintaining, supporting, and using Kubernetes on the Google Cloud Platform. +The GCP Special Interest Group is now a subproject of [SIG Cloud Provider](https://github.com/kubernetes/community/tree/master/sig-cloud-provider). + +### (This directory is a placeholder to preserve links. Please remove after 6 months or the release of Kubernetes 1.17, whichever comes first.) + +The [charter](charter.md) defines the scope and governance of the [DEPRECATED] GCP Special Interest Group. -The [charter](charter.md) defines the scope and governance of the GCP Special Interest Group. -## Meetings -* Regular SIG Meeting: [Thursdays at 16:00 UTC](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit) (biweekly). [Convert to your timezone](http://www.thetimezoneconverter.com/?t=16:00&tz=UTC). - * [Meeting notes and Agenda](https://docs.google.com/document/d/1mtmwZ4oVSSWhbEw8Lfzvc7ig84qxUpdK6uHyJp8rSGU/edit). ## Leadership @@ -28,16 +28,6 @@ The Chairs of the SIG run operations and processes governing the SIG. * [Mailing list](https://groups.google.com/forum/#!forum/kubernetes-sig-gcp) * [Open Community Issues/PRs](https://github.com/kubernetes/community/labels/sig%2Fgcp) -## Subprojects - -The following subprojects are owned by sig-gcp: -- **gcp-compute-persistent-disk-csi-driver** - - Owners: - - https://raw.githubusercontent.com/kubernetes-sigs/gcp-compute-persistent-disk-csi-driver/master/OWNERS -- **gcp-filestore-csi-driver** - - Owners: - - https://raw.githubusercontent.com/kubernetes-sigs/gcp-filestore-csi-driver/master/OWNERS - ## GitHub Teams The below teams can be mentioned on issues and PRs in order to get attention from the right people. diff --git a/sig-ibmcloud/OWNERS b/sig-ibmcloud/OWNERS index fc6de47f..78d97b4e 100644 --- a/sig-ibmcloud/OWNERS +++ b/sig-ibmcloud/OWNERS @@ -1,8 +1,8 @@ # See the OWNERS docs at https://go.k8s.io/owners reviewers: - - sig-ibmcloud-leads + - provider-ibmcloud approvers: - - sig-ibmcloud-leads + - provider-ibmcloud labels: - sig/ibmcloud diff --git a/sig-ibmcloud/README.md b/sig-ibmcloud/README.md index 65d7a53c..00fe1eb4 100644 --- a/sig-ibmcloud/README.md +++ b/sig-ibmcloud/README.md @@ -6,11 +6,13 @@ sigs.yaml file in the project root. To understand how this file is generated, see https://git.k8s.io/community/generator/README.md ---> -# IBMCloud Special Interest Group +# [DEPRECATED] IBMCloud Special Interest Group -A Special Interest Group (SIG) for building, deploying, maintaining, supporting, and using Kubernetes on IBM Public and Private Clouds. +The IBMCloud Special Interest Group is now a subproject of [SIG Cloud Provider](https://github.com/kubernetes/community/tree/master/sig-cloud-provider). -The [charter](charter.md) defines the scope and governance of the IBMCloud Special Interest Group. +### (This directory is a placeholder to preserve links. Please remove after 6 months or the release of Kubernetes 1.17, whichever comes first.) + +The [charter](charter.md) defines the scope and governance of the [DEPRECATED] IBMCloud Special Interest Group. ## Meetings * Regular SIG Meeting: [Wednesdays at 14:00 EST](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit) (biweekly). [Convert to your timezone](http://www.thetimezoneconverter.com/?t=14:00&tz=EST). @@ -30,13 +32,6 @@ The Chairs of the SIG run operations and processes governing the SIG. * [Mailing list](https://groups.google.com/forum/#!forum/kubernetes-sig-ibmcloud) * [Open Community Issues/PRs](https://github.com/kubernetes/community/labels/sig%2Fibmcloud) -## Subprojects - -The following subprojects are owned by sig-ibmcloud: -- **cluster-api-provider-ibmcloud** - - Owners: - - https://raw.githubusercontent.com/kubernetes-sigs/cluster-api-provider-ibmcloud/master/OWNERS - ## GitHub Teams The below teams can be mentioned on issues and PRs in order to get attention from the right people. diff --git a/sig-instrumentation/README.md b/sig-instrumentation/README.md index 31a7fb7b..9dce211d 100644 --- a/sig-instrumentation/README.md +++ b/sig-instrumentation/README.md @@ -25,55 +25,49 @@ The Chairs of the SIG run operations and processes governing the SIG. * Piotr Szczesniak (**[@piosz](https://github.com/piosz)**), Google ## Contact -* [Slack](https://kubernetes.slack.com/messages/sig-instrumentation) -* [Mailing list](https://groups.google.com/forum/#!forum/kubernetes-sig-instrumentation) -* [Open Community Issues/PRs](https://github.com/kubernetes/community/labels/sig%2Finstrumentation) +- Slack: [#sig-instrumentation](https://kubernetes.slack.com/messages/sig-instrumentation) +- [Mailing list](https://groups.google.com/forum/#!forum/kubernetes-sig-instrumentation) +- [Open Community Issues/PRs](https://github.com/kubernetes/community/labels/sig%2Finstrumentation) +- GitHub Teams: + - [@kubernetes/sig-instrumentation-api-reviews](https://github.com/orgs/kubernetes/teams/sig-instrumentation-api-reviews) - API Changes and Reviews + - [@kubernetes/sig-instrumentation-bugs](https://github.com/orgs/kubernetes/teams/sig-instrumentation-bugs) - Bug Triage and Troubleshooting + - [@kubernetes/sig-instrumentation-feature-requests](https://github.com/orgs/kubernetes/teams/sig-instrumentation-feature-requests) - Feature Requests + - [@kubernetes/sig-instrumentation-misc](https://github.com/orgs/kubernetes/teams/sig-instrumentation-misc) - General Discussion + - [@kubernetes/sig-instrumentation-pr-reviews](https://github.com/orgs/kubernetes/teams/sig-instrumentation-pr-reviews) - PR Reviews + - [@kubernetes/sig-instrumentation-proposals](https://github.com/orgs/kubernetes/teams/sig-instrumentation-proposals) - Design Proposals + - [@kubernetes/sig-instrumentation-test-failures](https://github.com/orgs/kubernetes/teams/sig-instrumentation-test-failures) - Test Failures and Triage ## Subprojects -The following subprojects are owned by sig-instrumentation: -- **custom-metrics-apiserver** - - Owners: - - https://raw.githubusercontent.com/kubernetes-incubator/custom-metrics-apiserver/master/OWNERS -- **heapster** - - Owners: - - https://raw.githubusercontent.com/kubernetes/heapster/master/OWNERS -- **klog** - - Owners: - - https://raw.githubusercontent.com/kubernetes/klog/master/OWNERS - - Contact - - Slack: [#klog](https://kubernetes.slack.com/messages/klog) -- **kube-state-metrics** - - Owners: - - https://raw.githubusercontent.com/kubernetes/kube-state-metrics/master/OWNERS - - Contact - - Slack: [#kube-state-metrics](https://kubernetes.slack.com/messages/kube-state-metrics) -- **metrics** - - Owners: - - https://raw.githubusercontent.com/kubernetes/kubernetes/master/staging/src/k8s.io/metrics/OWNERS - - https://raw.githubusercontent.com/kubernetes/metrics/master/OWNERS -- **metrics-server** - - Owners: - - https://raw.githubusercontent.com/kubernetes-incubator/metrics-server/master/OWNERS -- **mutating-trace-admission-controller** - - Owners: - - https://raw.githubusercontent.com/kubernetes-sigs/mutating-trace-admission-controller/master/OWNERS - -## GitHub Teams - -The below teams can be mentioned on issues and PRs in order to get attention from the right people. -Note that the links to display team membership will only work if you are a member of the org. - -| Team Name | Details | Description | -| --------- |:-------:| ----------- | -| @kubernetes/sig-instrumentation-api-reviews | [link](https://github.com/orgs/kubernetes/teams/sig-instrumentation-api-reviews) | API Changes and Reviews | -| @kubernetes/sig-instrumentation-bugs | [link](https://github.com/orgs/kubernetes/teams/sig-instrumentation-bugs) | Bug Triage and Troubleshooting | -| @kubernetes/sig-instrumentation-feature-requests | [link](https://github.com/orgs/kubernetes/teams/sig-instrumentation-feature-requests) | Feature Requests | -| @kubernetes/sig-instrumentation-misc | [link](https://github.com/orgs/kubernetes/teams/sig-instrumentation-misc) | General Discussion | -| @kubernetes/sig-instrumentation-pr-reviews | [link](https://github.com/orgs/kubernetes/teams/sig-instrumentation-pr-reviews) | PR Reviews | -| @kubernetes/sig-instrumentation-proposals | [link](https://github.com/orgs/kubernetes/teams/sig-instrumentation-proposals) | Design Proposals | -| @kubernetes/sig-instrumentation-test-failures | [link](https://github.com/orgs/kubernetes/teams/sig-instrumentation-test-failures) | Test Failures and Triage | - +The following [subprojects][subproject-definition] are owned by sig-instrumentation: +### custom-metrics-apiserver +- **Owners:** + - https://raw.githubusercontent.com/kubernetes-incubator/custom-metrics-apiserver/master/OWNERS +### heapster +- **Owners:** + - https://raw.githubusercontent.com/kubernetes/heapster/master/OWNERS +### klog +- **Owners:** + - https://raw.githubusercontent.com/kubernetes/klog/master/OWNERS +- **Contact:** + - Slack: [#klog](https://kubernetes.slack.com/messages/klog) +### kube-state-metrics +- **Owners:** + - https://raw.githubusercontent.com/kubernetes/kube-state-metrics/master/OWNERS +- **Contact:** + - Slack: [#kube-state-metrics](https://kubernetes.slack.com/messages/kube-state-metrics) +### metrics +- **Owners:** + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/staging/src/k8s.io/metrics/OWNERS + - https://raw.githubusercontent.com/kubernetes/metrics/master/OWNERS +### metrics-server +- **Owners:** + - https://raw.githubusercontent.com/kubernetes-incubator/metrics-server/master/OWNERS +### mutating-trace-admission-controller +- **Owners:** + - https://raw.githubusercontent.com/kubernetes-sigs/mutating-trace-admission-controller/master/OWNERS + +[subproject-definition]: https://github.com/kubernetes/community/blob/master/governance.md#subprojects <!-- BEGIN CUSTOM CONTENT --> <!-- END CUSTOM CONTENT --> diff --git a/sig-list.md b/sig-list.md index 4cd26c1a..0bc504b8 100644 --- a/sig-list.md +++ b/sig-list.md @@ -23,49 +23,44 @@ When the need arises, a [new SIG can be created](sig-wg-lifecycle.md) | Name | Label | Chairs | Contact | Meetings | |------|-------|--------|---------|----------| |[API Machinery](sig-api-machinery/README.md)|api-machinery|* [David Eads](https://github.com/deads2k), Red Hat<br>* [Daniel Smith](https://github.com/lavalamp), Google<br>|* [Slack](https://kubernetes.slack.com/messages/sig-api-machinery)<br>* [Mailing List](https://groups.google.com/forum/#!forum/kubernetes-sig-api-machinery)|* Kubebuilder and Controller Runtime Meeting: [Wednesdays at 10:00 PT (Pacific Time) (monthly - second Wednesday every month)]()<br>* Regular SIG Meeting: [Wednesdays at 11:00 PT (Pacific Time) (biweekly)](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit)<br> -|[Apps](sig-apps/README.md)|apps|* [Janet Kuo](https://github.com/janetkuo), Google<br>* [Kenneth Owens](https://github.com/kow3ns), Google<br>* [Matt Farina](https://github.com/mattfarina), Samsung SDS<br>* [Adnan Abdulhussein](https://github.com/prydonius), Bitnami<br>|* [Slack](https://kubernetes.slack.com/messages/sig-apps)<br>* [Mailing List](https://groups.google.com/forum/#!forum/kubernetes-sig-apps)|* Regular SIG Meeting: [Mondays at 9:00 PT (Pacific Time) (weekly)](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit)<br> -|[Architecture](sig-architecture/README.md)|architecture|* [Brian Grant](https://github.com/bgrant0607), Google<br>* [Derek Carr](https://github.com/derekwaynecarr), Red Hat<br>* [Davanum Srinivas](https://github.com/dims), Huawei<br>* [Jaice Singer DuMars](https://github.com/jdumars), Google<br>* [Matt Farina](https://github.com/mattfarina), Samsung SDS<br>|* [Slack](https://kubernetes.slack.com/messages/sig-architecture)<br>* [Mailing List](https://groups.google.com/forum/#!forum/kubernetes-sig-architecture)|* Regular SIG Meeting: [Thursdays at 19:00 UTC (biweekly)](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit)<br>* code organization Office Hours: [Thursdays at 14:00 PT (Pacific Time) (biweekly)](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit)<br>* conformance Office Hours: [Tuesdays at 12:00 PT (Pacific Time) (weekly)](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit)<br> +|[Apps](sig-apps/README.md)|apps|* [Janet Kuo](https://github.com/janetkuo), Google<br>* [Kenneth Owens](https://github.com/kow3ns), Google<br>* [Matt Farina](https://github.com/mattfarina), Samsung SDS<br>* [Adnan Abdulhussein](https://github.com/prydonius), VMware<br>|* [Slack](https://kubernetes.slack.com/messages/sig-apps)<br>* [Mailing List](https://groups.google.com/forum/#!forum/kubernetes-sig-apps)|* Regular SIG Meeting: [Mondays at 9:00 PT (Pacific Time) (biweekly)](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit)<br> +|[Architecture](sig-architecture/README.md)|architecture|* [Brian Grant](https://github.com/bgrant0607), Google<br>* [Derek Carr](https://github.com/derekwaynecarr), Red Hat<br>* [Davanum Srinivas](https://github.com/dims), VMware<br>* [Jaice Singer DuMars](https://github.com/jdumars), Google<br>* [Matt Farina](https://github.com/mattfarina), Samsung SDS<br>|* [Slack](https://kubernetes.slack.com/messages/sig-architecture)<br>* [Mailing List](https://groups.google.com/forum/#!forum/kubernetes-sig-architecture)|* Regular SIG Meeting: [Thursdays at 19:00 UTC (biweekly)](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit)<br>* code organization Office Hours: [Thursdays at 14:00 PT (Pacific Time) (biweekly)](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit)<br>* conformance Office Hours: [Tuesdays at 12:00 PT (Pacific Time) (weekly)](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit)<br> |[Auth](sig-auth/README.md)|auth|* [Mo Khan](https://github.com/enj), Red Hat<br>* [Mike Danese](https://github.com/mikedanese), Google<br>* [Tim Allclair](https://github.com/tallclair), Google<br>|* [Slack](https://kubernetes.slack.com/messages/sig-auth)<br>* [Mailing List](https://groups.google.com/forum/#!forum/kubernetes-sig-auth)|* Regular SIG Meeting: [Wednesdays at 11:00 PT (Pacific Time) (biweekly)](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit)<br> |[Autoscaling](sig-autoscaling/README.md)|autoscaling|* [Marcin Wielgus](https://github.com/mwielgus), Google<br>|* [Slack](https://kubernetes.slack.com/messages/sig-autoscaling)<br>* [Mailing List](https://groups.google.com/forum/#!forum/kubernetes-sig-autoscaling)|* Regular SIG Meeting: [Mondays at 14:00 UTC (biweekly/triweekly)](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit)<br> -|[AWS](sig-aws/README.md)|aws|* [Nishi Davidson](https://github.com/d-nishi), AWS<br>* [Justin Santa Barbara](https://github.com/justinsb), Google<br>* [Kris Nova](https://github.com/kris-nova), VMware<br>|* [Slack](https://kubernetes.slack.com/messages/sig-aws)<br>* [Mailing List](https://groups.google.com/forum/#!forum/kubernetes-sig-aws)|* Regular SIG Meeting: [Fridays at 9:00 PT (Pacific Time) (biweekly 2019 start date: Jan. 11th)](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit)<br> -|[Azure](sig-azure/README.md)|azure|* [Dave Strebel](https://github.com/dstrebel), Microsoft<br>* [Stephen Augustus](https://github.com/justaugustus), VMware<br>|* [Slack](https://kubernetes.slack.com/messages/sig-azure)<br>* [Mailing List](https://groups.google.com/forum/#!forum/kubernetes-sig-azure)|* Regular SIG Meeting: [Wednesdays at 16:00 UTC (biweekly)](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit)<br> |[CLI](sig-cli/README.md)|cli|* [Sean Sullivan](https://github.com/seans3), Google<br>* [Maciej Szulik](https://github.com/soltysh), Red Hat<br>|* [Slack](https://kubernetes.slack.com/messages/sig-cli)<br>* [Mailing List](https://groups.google.com/forum/#!forum/kubernetes-sig-cli)|* Regular SIG Meeting: [Wednesdays at 09:00 PT (Pacific Time) (biweekly)](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit)<br> -|[Cloud Provider](sig-cloud-provider/README.md)|cloud-provider|* [Andrew Sy Kim](https://github.com/andrewsykim), VMware<br>* [Chris Hoge](https://github.com/hogepodge), OpenStack Foundation<br>* [Jago Macleod](https://github.com/jagosan), Google<br>|* [Slack](https://kubernetes.slack.com/messages/sig-cloud-provider)<br>* [Mailing List](https://groups.google.com/forum/#!forum/kubernetes-sig-cloud-provider)|* Regular SIG Meeting: [Wednesdays at 1:00 PT (Pacific Time) (biweekly)](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit)<br>* (cloud-provider-extraction-migration) Weekly Sync removing the in-tree cloud providers led by @cheftako and @mcrute: [Thursdays at 13:30 PT (Pacific Time) (weekly)](https://docs.google.com/document/d/1KLsGGzNXQbsPeELCeF_q-f0h0CEGSe20xiwvcR2NlYM/edit)<br> -|[Cluster Lifecycle](sig-cluster-lifecycle/README.md)|cluster-lifecycle|* [Justin Santa Barbara](https://github.com/justinsb), Google<br>* [Lucas Käldström](https://github.com/luxas), Luxas Labs (occasionally contracting for Weaveworks)<br>* [Timothy St. Clair](https://github.com/timothysc), VMware<br>|* [Slack](https://kubernetes.slack.com/messages/sig-cluster-lifecycle)<br>* [Mailing List](https://groups.google.com/forum/#!forum/kubernetes-sig-cluster-lifecycle)|* Cluster API (AWS implementation) office hours: [Mondays at 10:00 PT (Pacific Time) (biweekly)](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit)<br>* Cluster API Provider Implementers' office hours (EMEA): [Wednesdays at 15:00 CEST (Central European Summer Time) (weekly)](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit)<br>* Cluster API Provider Implementers' office hours (US West Coast): [Tuesdays at 12:00 PT (Pacific Time) (weekly)](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit)<br>* Cluster API office hours: [Wednesdays at 10:00 PT (Pacific Time) (weekly)](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit)<br>* Cluster Addons meeting: [Tuesdays at 09:00 PT (Pacific Time) (biweekly)](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit)<br>* Kubespray Office Hours: [Wednesdays at 08:00 PT (Pacific Time) (biweekly)](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit)<br>* Regular SIG Meeting: [Tuesdays at 09:00 PT (Pacific Time) (biweekly)](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit)<br>* etcdadm Office Hours: [Mondays at 09:00 PT (Pacific Time) (biweekly)](https://docs.google.com/document/d/1b_J0oBvi9lL0gsPgTOrCw1Zlx3e7BYEuXnB3d2S15pA/edit#)<br>* kops Office Hours: [Fridays at 09:00 PT (Pacific Time) (biweekly)](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit)<br>* kubeadm Office Hours: [Wednesdays at 09:00 PT (Pacific Time) (weekly)](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit)<br>* minikube Office Hours: [Mondays at 10:00 PT (Pacific Time) (biweekly)](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit)<br> -|[Contributor Experience](sig-contributor-experience/README.md)|contributor-experience|* [Elsie Phillips](https://github.com/Phillels), Red Hat<br>* [Paris Pittman](https://github.com/parispittman), Google<br>|* [Slack](https://kubernetes.slack.com/messages/sig-contribex)<br>* [Mailing List](https://groups.google.com/forum/#!forum/kubernetes-sig-contribex)|* APAC SIG Meeting: [Wednesdays at 20:00 PT (Pacific Time) (monthly - fourth Wednesday every month)](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit)<br>* Regular SIG Meeting: [Wednesdays at 9:30 PT (Pacific Time) (weekly - except fourth Wednesday every month)](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit)<br>* (contributors-documentation) Non-Code Contributors Meeting: [Wednesdays at 11:00 PT (Pacific Time) (biweekly)](https://docs.google.com/document/d/1gdFWfkrapQclZ4-z4Lx2JwqKsJjXXUOVoLhBzZiZgSk/edit)<br>* (events) Contributor Summit strategy, content and planning: [Mondays at 9:00 PT (Pacific Time) (weekly)]()<br> -|[Docs](sig-docs/README.md)|docs|* [Jennifer Rondeau](https://github.com/bradamant3), Stripe<br>* [Jared Bhatti](https://github.com/jaredbhatti), Google<br>* [Zach Corleissen](https://github.com/zacharysarah), Linux Foundation<br>|* [Slack](https://kubernetes.slack.com/messages/sig-docs)<br>* [Mailing List](https://groups.google.com/forum/#!forum/kubernetes-sig-docs)|* APAC SIG Meeting: [Wednesdays at 02:00 UTC (monthly - fourth Wednesday every month)](https://docs.google.com/document/d/1zg6By77SGg90EVUrhDIhopjZlSDg2jCebU-Ks9cYx0w/edit)<br>* Regular SIG Meeting: [Tuesdays at 17:30 UTC (weekly - except fourth Tuesday every month)](https://docs.google.com/document/d/1zg6By77SGg90EVUrhDIhopjZlSDg2jCebU-Ks9cYx0w/edit)<br> -|[GCP](sig-gcp/README.md)|gcp|* [Adam Worrall](https://github.com/abgworrall), Google<br>|* [Slack](https://kubernetes.slack.com/messages/sig-gcp)<br>* [Mailing List](https://groups.google.com/forum/#!forum/kubernetes-sig-gcp)|* Regular SIG Meeting: [Thursdays at 16:00 UTC (biweekly)](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit)<br> -|[IBMCloud](sig-ibmcloud/README.md)|ibmcloud|* [Khalid Ahmed](https://github.com/khahmed), IBM<br>* [Richard Theis](https://github.com/rtheis), IBM<br>* [Sahdev Zala](https://github.com/spzala), IBM<br>|* [Slack](https://kubernetes.slack.com/messages/sig-ibmcloud)<br>* [Mailing List](https://groups.google.com/forum/#!forum/kubernetes-sig-ibmcloud)|* Regular SIG Meeting: [Wednesdays at 14:00 EST (biweekly)](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit)<br> +|[Cloud Provider](sig-cloud-provider/README.md)|cloud-provider|* [Andrew Sy Kim](https://github.com/andrewsykim), VMware<br>* [Walter Fender](https://github.com/cheftako), Google<br>* [Chris Hoge](https://github.com/hogepodge), OpenStack Foundation<br>|* [Slack](https://kubernetes.slack.com/messages/sig-cloud-provider)<br>* [Mailing List](https://groups.google.com/forum/#!forum/kubernetes-sig-cloud-provider)|* Regular SIG Meeting: [Wednesdays at 1:00 PT (Pacific Time) (biweekly)](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit)<br>* (cloud-provider-extraction-migration) Weekly Sync removing the in-tree cloud providers led by @cheftako and @mcrute: [Thursdays at 13:30 PT (Pacific Time) (weekly)](https://docs.google.com/document/d/1KLsGGzNXQbsPeELCeF_q-f0h0CEGSe20xiwvcR2NlYM/edit)<br>* (provider-aws) Regular AWS Subproject Meeting: [Fridays at 9:00 PT (Pacific Time) (biweekly 2019 start date: Jan. 11th)](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit)<br>* (provider-azure) Azure Subproject Meeting (First Monday): [Mondays at 14:30 UTC (monthly)](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit)<br>* (provider-azure) Azure Subproject Meeting (Third Tuesday UTC, Monday Pacific): [Tuesdays at 1:00 UTC (monthly)](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit)<br>* (provider-gcp) Regular GCP Subproject Meeting: [Thursdays at 16:00 UTC (biweekly)](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit)<br>* (provider-ibmcloud) Regular IBM Subproject Meeting: [Wednesdays at 14:00 EST (biweekly)](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit)<br>* (provider-openstack) Regular OpenStack Subproject Meeting: [Wednesdays at 08:00 PT (Pacific Time) (biweekly starting Wednesday March 20, 2019)](https://docs.google.com/document/d/1bW3j4hFN4D8rv2LFv-DybB3gcE5ISAaOO_OpvDCgrGg/edit)<br>* (provider-vsphere) Cloud Provider vSphere monthly syncup: [Wednesdays at 09:00 PT (Pacific Time) (monthly - first Wednesday every month)](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit)<br> +|[Cluster Lifecycle](sig-cluster-lifecycle/README.md)|cluster-lifecycle|* [Justin Santa Barbara](https://github.com/justinsb), Google<br>* [Lucas Käldström](https://github.com/luxas), Luxas Labs (occasionally contracting for Weaveworks)<br>* [Timothy St. Clair](https://github.com/timothysc), VMware<br>|* [Slack](https://kubernetes.slack.com/messages/sig-cluster-lifecycle)<br>* [Mailing List](https://groups.google.com/forum/#!forum/kubernetes-sig-cluster-lifecycle)|* Cluster API (AWS implementation) office hours: [Mondays at 10:00 PT (Pacific Time) (biweekly)](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit)<br>* Cluster API Provider Implementers' office hours (EMEA): [Wednesdays at 15:00 CEST (Central European Summer Time) (weekly)](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit)<br>* Cluster API Provider Implementers' office hours (US West Coast): [Tuesdays at 12:00 PT (Pacific Time) (weekly)](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit)<br>* Cluster API office hours: [Wednesdays at 10:00 PT (Pacific Time) (weekly)](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit)<br>* Cluster Addons meeting: [Tuesdays at 09:00 PT (Pacific Time) (biweekly)](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit)<br>* Kubespray Office Hours: [Wednesdays at 08:00 PT (Pacific Time) (biweekly)](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit)<br>* Regular SIG Meeting: [Tuesdays at 09:00 PT (Pacific Time) (biweekly)](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit)<br>* Regular SIG Meeting in China: [Tuesdays at 20:00 Beijing (biweekly)](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit)<br>* etcdadm Office Hours: [Mondays at 09:00 PT (Pacific Time) (biweekly)](https://docs.google.com/document/d/1b_J0oBvi9lL0gsPgTOrCw1Zlx3e7BYEuXnB3d2S15pA/edit#)<br>* kops Office Hours: [Fridays at 09:00 PT (Pacific Time) (biweekly)](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit)<br>* kubeadm Office Hours: [Wednesdays at 09:00 PT (Pacific Time) (weekly)](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit)<br>* minikube Office Hours: [Mondays at 11:00 PT (Pacific Time) (biweekly)](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit)<br>* (cluster-api-provider-vsphere) Cluster API vSphere syncup meeting: [Wednesdays at 13:00 PT (Pacific Time) (bi-weekly)](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit)<br> +|[Contributor Experience](sig-contributor-experience/README.md)|contributor-experience|* [Elsie Phillips](https://github.com/Phillels), Red Hat<br>* [Paris Pittman](https://github.com/parispittman), Google<br>|* [Slack](https://kubernetes.slack.com/messages/sig-contribex)<br>* [Mailing List](https://groups.google.com/forum/#!forum/kubernetes-sig-contribex)|* Regular SIG Meeting: [Wednesdays at 9:30 PT (Pacific Time) (biweekly)](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit)<br>* (community-management) APAC Coordinator Meeting: [Thursdays at 5:00 UTC (biweekly)](https://docs.google.com/document/d/1qf-02B7EOrItQgwXFxgqZ5qjW0mtfu5qkYIF1Hl4ZLI/edit)<br>* (contributors-documentation) Non-Code Contributors Meeting: [Wednesdays at 11:00 PT (Pacific Time) (biweekly)](https://docs.google.com/document/d/1gdFWfkrapQclZ4-z4Lx2JwqKsJjXXUOVoLhBzZiZgSk/edit)<br>* (events) Events Planning Subproject: [Mondays at 10:00 PT (Pacific Time) (weekly)](https://docs.google.com/document/d/1oLXv5_rM4f645jlXym_Vd7AUq7x6DV-O87E6tcW1sjU/edit)<br> +|[Docs](sig-docs/README.md)|docs|* [Jennifer Rondeau](https://github.com/Bradamant3), Stripe<br>* [Jim Angel](https://github.com/jimangel), General Motors<br>* [Zach Corleissen](https://github.com/zacharysarah), Linux Foundation<br>|* [Slack](https://kubernetes.slack.com/messages/sig-docs)<br>* [Mailing List](https://groups.google.com/forum/#!forum/kubernetes-sig-docs)|* APAC SIG Meeting: [Wednesdays at 02:00 UTC (monthly - fourth Wednesday every month)](https://docs.google.com/document/d/1zg6By77SGg90EVUrhDIhopjZlSDg2jCebU-Ks9cYx0w/edit)<br>* Korean Team Meeting: [Thursdays at 13:00 UTC (biweekly)](https://docs.google.com/document/d/1h5sMhBpPB5unJmBAS7KzDiPs-_eFQOu5o4UyHwMtFCA/edit)<br>* Regular SIG Meeting: [Tuesdays at 17:30 UTC (weekly - except fourth Tuesday every month)](https://docs.google.com/document/d/1zg6By77SGg90EVUrhDIhopjZlSDg2jCebU-Ks9cYx0w/edit)<br> |[Instrumentation](sig-instrumentation/README.md)|instrumentation|* [Frederic Branczyk](https://github.com/brancz), Red Hat<br>* [Piotr Szczesniak](https://github.com/piosz), Google<br>|* [Slack](https://kubernetes.slack.com/messages/sig-instrumentation)<br>* [Mailing List](https://groups.google.com/forum/#!forum/kubernetes-sig-instrumentation)|* Regular SIG Meeting: [Thursdays at 17:30 UTC (biweekly)](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit)<br> -|[Multicluster](sig-multicluster/README.md)|multicluster|* [Paul Morie](https://github.com/pmorie), Red Hat<br>* [Quinton Hoole](https://github.com/quinton-hoole), Huawei<br>|* [Slack](https://kubernetes.slack.com/messages/sig-multicluster)<br>* [Mailing List](https://groups.google.com/forum/#!forum/kubernetes-sig-multicluster)|* Federation v2 Working Group: [Wednesdays at 7:30 PT (Pacific Time) (weekly)](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit)<br>* Regular SIG Meeting: [Tuesdays at 9:30 PT (Pacific Time) (biweekly)](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit)<br> +|[Multicluster](sig-multicluster/README.md)|multicluster|* [Paul Morie](https://github.com/pmorie), Red Hat<br>* [Quinton Hoole](https://github.com/quinton-hoole), Huawei<br>|* [Slack](https://kubernetes.slack.com/messages/sig-multicluster)<br>* [Mailing List](https://groups.google.com/forum/#!forum/kubernetes-sig-multicluster)|* Cluster Federation (KubeFed) Working Group: [Wednesdays at 7:30 PT (Pacific Time) (weekly)](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit)<br>* Regular SIG Meeting: [Tuesdays at 9:30 PT (Pacific Time) (biweekly)](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit)<br> |[Network](sig-network/README.md)|network|* [Casey Davenport](https://github.com/caseydavenport), Tigera<br>* [Dan Williams](https://github.com/dcbw), Red Hat<br>* [Tim Hockin](https://github.com/thockin), Google<br>|* [Slack](https://kubernetes.slack.com/messages/sig-network)<br>* [Mailing List](https://groups.google.com/forum/#!forum/kubernetes-sig-network)|* Regular SIG Meeting: [Thursdays at 14:00 PT (Pacific Time) (biweekly)](https://zoom.us/j/361123509)<br> |[Node](sig-node/README.md)|node|* [Dawn Chen](https://github.com/dchen1107), Google<br>* [Derek Carr](https://github.com/derekwaynecarr), Red Hat<br>|* [Slack](https://kubernetes.slack.com/messages/sig-node)<br>* [Mailing List](https://groups.google.com/forum/#!forum/kubernetes-sig-node)|* Regular SIG Meeting: [Tuesdays at 10:00 PT (Pacific Time) (weekly)](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit)<br> -|[OpenStack](sig-openstack/README.md)|openstack|* [Aditi Sharma](https://github.com/adisky), NEC Technologies India<br>* [Christoph Glaubitz](https://github.com/chrigl), iNNOVO Cloud<br>* [Chris Hoge](https://github.com/hogepodge), OpenStack Foundation<br>|* [Slack](https://kubernetes.slack.com/messages/sig-openstack)<br>* [Mailing List](https://groups.google.com/forum/#!forum/kubernetes-sig-openstack)|* Regular SIG Meeting: [Wednesdays at 08:00 PT (Pacific Time) (biweekly starting Wednesday March 20, 2019)](https://docs.google.com/document/d/1bW3j4hFN4D8rv2LFv-DybB3gcE5ISAaOO_OpvDCgrGg/edit)<br> -|[PM](sig-pm/README.md)|pm|* [Caleb Miles](https://github.com/calebamiles), Google<br>* [Ihor Dvoretskyi](https://github.com/idvoretskyi), CNCF<br>* [Jaice Singer DuMars](https://github.com/jdumars), Google<br>* [Stephen Augustus](https://github.com/justaugustus), VMware<br>|* [Slack](https://kubernetes.slack.com/messages/sig-pm)<br>* [Mailing List](https://groups.google.com/forum/#!forum/kubernetes-sig-pm)|* Regular SIG Meeting: [Tuesdays at 18:30 UTC (biweekly)](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit)<br> -|[Release](sig-release/README.md)|release|* [Caleb Miles](https://github.com/calebamiles), Google<br>* [Stephen Augustus](https://github.com/justaugustus), VMware<br>* [Tim Pepper](https://github.com/tpepper), VMware<br>|* [Slack](https://kubernetes.slack.com/messages/sig-release)<br>* [Mailing List](https://groups.google.com/forum/#!forum/kubernetes-sig-release)|* Regular SIG Meeting: [Tuesdays at 21:00 UTC (biweekly)](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit)<br> -|[Scalability](sig-scalability/README.md)|scalability|* [Shyam Jeedigunta](https://github.com/shyamjvs), AWS<br>* [Wojciech Tyczynski](https://github.com/wojtek-t), Google<br>|* [Slack](https://kubernetes.slack.com/messages/sig-scalability)<br>* [Mailing List](https://groups.google.com/forum/#!forum/kubernetes-sig-scale)|* Regular SIG Meeting: [Thursdays at 17:30 UTC (bi-weekly)](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit)<br> -|[Scheduling](sig-scheduling/README.md)|scheduling|* [Bobby (Babak) Salamat](https://github.com/bsalamat), Google<br>* [Klaus Ma](https://github.com/k82cn), Huawei<br>|* [Slack](https://kubernetes.slack.com/messages/sig-scheduling)<br>* [Mailing List](https://groups.google.com/forum/#!forum/kubernetes-sig-scheduling)|* 10AM PT Meeting: [Thursdays at 17:00 UTC (biweekly starting Thursday June 7, 2018)](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit)<br>* 5PM PT Meeting: [Thursdays at 24:00 UTC (biweekly starting Thursday June 14, 2018)](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit)<br> -|[Service Catalog](sig-service-catalog/README.md)|service-catalog|* [Jonathan Berkhahn](https://github.com/jberkhahn), IBM<br>* [Jay Boyd](https://github.com/jboyd01), Red Hat<br>* [Michael Kibbe](https://github.com/kibbles-n-bytes), Google<br>|* [Slack](https://kubernetes.slack.com/messages/sig-service-catalog)<br>* [Mailing List](https://groups.google.com/forum/#!forum/kubernetes-sig-service-catalog)|* Regular SIG Meeting: [Mondays at 13:00 PT (Pacific Time) (weekly)](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit)<br> +|[PM](sig-pm/README.md)|pm|* [Caleb Miles](https://github.com/calebamiles), Google<br>* [Jaice Singer DuMars](https://github.com/jdumars), Google<br>* [Stephen Augustus](https://github.com/justaugustus), VMware<br>* [Lachie Evenson](https://github.com/lachie83), Microsoft<br>|* [Slack](https://kubernetes.slack.com/messages/sig-pm)<br>* [Mailing List](https://groups.google.com/forum/#!forum/kubernetes-sig-pm)|* Regular SIG Meeting: [Tuesdays at 18:30 UTC (biweekly)](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit)<br> +|[Release](sig-release/README.md)|release|* [Caleb Miles](https://github.com/calebamiles), Google<br>* [Stephen Augustus](https://github.com/justaugustus), VMware<br>* [Tim Pepper](https://github.com/tpepper), VMware<br>|* [Slack](https://kubernetes.slack.com/messages/sig-release)<br>* [Mailing List](https://groups.google.com/forum/#!forum/kubernetes-sig-release)|* Regular SIG Meeting: [Mondays at 15:00 UTC (biweekly)](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit)<br>* (release-engineering) Regular SIG Meeting: [Mondays at 15:00 UTC (biweekly)](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit)<br> +|[Scalability](sig-scalability/README.md)|scalability|* [Shyam Jeedigunta](https://github.com/shyamjvs), AWS<br>* [Wojciech Tyczynski](https://github.com/wojtek-t), Google<br>|* [Slack](https://kubernetes.slack.com/messages/sig-scalability)<br>* [Mailing List](https://groups.google.com/forum/#!forum/kubernetes-sig-scale)|* Regular SIG Meeting: [Thursdays at 18:30 Warsaw (bi-weekly ([upcoming meeting dates](#upcoming-2019-meeting-dates)))](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit)<br> +|[Scheduling](sig-scheduling/README.md)|scheduling|* [Abdullah Gharaibeh](https://github.com/ahg-g), Google<br>* [Klaus Ma](https://github.com/k82cn), Huawei<br>|* [Slack](https://kubernetes.slack.com/messages/sig-scheduling)<br>* [Mailing List](https://groups.google.com/forum/#!forum/kubernetes-sig-scheduling)|* 10AM PT Meeting: [Thursdays at 17:00 UTC (biweekly starting Thursday June 7, 2018)](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit)<br>* 5PM PT Meeting: [Thursdays at 24:00 UTC (biweekly starting Thursday June 14, 2018)](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit)<br> +|[Service Catalog](sig-service-catalog/README.md)|service-catalog|* [Jonathan Berkhahn](https://github.com/jberkhahn), IBM<br>* [Mateusz Szostok](https://github.com/mszostok), SAP<br>|* [Slack](https://kubernetes.slack.com/messages/sig-service-catalog)<br>* [Mailing List](https://groups.google.com/forum/#!forum/kubernetes-sig-service-catalog)|* Regular SIG Meeting: [Mondays at 9:00 PT (Pacific Time) (weekly)](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit)<br> |[Storage](sig-storage/README.md)|storage|* [Bradley Childs](https://github.com/childsb), Red Hat<br>* [Saad Ali](https://github.com/saad-ali), Google<br>|* [Slack](https://kubernetes.slack.com/messages/sig-storage)<br>* [Mailing List](https://groups.google.com/forum/#!forum/kubernetes-sig-storage)|* Regular SIG Meeting: [Thursdays at 9:00 PT (Pacific Time) (biweekly)](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit)<br> -|[Testing](sig-testing/README.md)|testing|* [Erick Fejta](https://github.com/fejta), Google<br>* [Aaron Crickenberger](https://github.com/spiffxp), Google<br>* [Steve Kuznetsov](https://github.com/stevekuznetsov), Red Hat<br>* [Timothy St. Clair](https://github.com/timothysc), VMware<br>|* [Slack](https://kubernetes.slack.com/messages/sig-testing)<br>* [Mailing List](https://groups.google.com/forum/#!forum/kubernetes-sig-testing)|* Regular SIG Meeting: [Tuesdays at 13:00 PT (Pacific Time) (weekly)](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit)<br>* (kind) sigs.k8s.io/kind bi-weekly meeting: [Mondays at 11:00 PT (Pacific Time) (bi-weekly)](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit)<br>* (testing-commons) Testing Commons: [Fridays at 07:30 PT (Pacific Time) (bi-weekly)](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit)<br> -|[UI](sig-ui/README.md)|ui|* [Dan Romlein](https://github.com/danielromlein), Google<br>* [Sebastian Florek](https://github.com/floreks), Loodse<br>* [Jeffrey Sica](https://github.com/jeefy), University of Michigan<br>* [Marcin Maciaszczyk](https://github.com/maciaszczykm), Loodse<br>|* [Slack](https://kubernetes.slack.com/messages/sig-ui)<br>* [Mailing List](https://groups.google.com/forum/#!forum/kubernetes-sig-ui)|* Regular SIG Meeting: [Thursdays at 18:00 CET (Central European Time) (bi-weekly)](https://groups.google.com/forum/#!forum/kubernetes-sig-ui)<br> -|[VMware](sig-vmware/README.md)|vmware|* [Steve Wong](https://github.com/cantbewong), VMware<br>* [Fabio Rapposelli](https://github.com/frapposelli), VMware<br>|* [Slack](https://kubernetes.slack.com/messages/sig-vmware)<br>* [Mailing List](https://groups.google.com/forum/#!forum/kubernetes-sig-vmware)|* Cloud Provider vSphere monthly syncup: [Wednesdays at 09:00 PT (Pacific Time) (monthly - first Wednesday every month)](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit)<br>* Cluster API Provider vSphere bi-weekly syncup: [Wednesdays at 13:00 PT (Pacific Time) (bi-weekly)](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit)<br>* Regular SIG Meeting: [Thursdays at 11:00 PT (Pacific Time) (bi-weekly)](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit)<br> -|[Windows](sig-windows/README.md)|windows|* [Michael Michael](https://github.com/michmike), VMware<br>* [Patrick Lang](https://github.com/patricklang), Microsoft<br>|* [Slack](https://kubernetes.slack.com/messages/sig-windows)<br>* [Mailing List](https://groups.google.com/forum/#!forum/kubernetes-sig-windows)|* Regular SIG Meeting: [Tuesdays at 12:30 Eastern Standard Time (EST) (weekly)](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit)<br> +|[Testing](sig-testing/README.md)|testing|* [Erick Fejta](https://github.com/fejta), Google<br>* [Aaron Crickenberger](https://github.com/spiffxp), Google<br>* [Steve Kuznetsov](https://github.com/stevekuznetsov), Red Hat<br>* [Timothy St. Clair](https://github.com/timothysc), VMware<br>|* [Slack](https://kubernetes.slack.com/messages/sig-testing)<br>* [Mailing List](https://groups.google.com/forum/#!forum/kubernetes-sig-testing)|* SIG Testing Office Hours: [Tuesdays at 10:00 PT (Pacific Time) (bi-weekly starting Tuesday August 13, 2019)](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit)<br>* (kind) sigs.k8s.io/kind bi-weekly meeting: [Mondays at 11:00 PT (Pacific Time) (bi-weekly)](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit)<br>* (testing-commons) Testing Commons: [Fridays at 07:30 PT (Pacific Time) (bi-weekly)](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit)<br> +|[UI](sig-ui/README.md)|ui|* [Dan Romlein](https://github.com/danielromlein), Google<br>* [Sebastian Florek](https://github.com/floreks), Loodse<br>* [Jeffrey Sica](https://github.com/jeefy), University of Michigan<br>* [Marcin Maciaszczyk](https://github.com/maciaszczykm), Loodse<br>|* [Slack](https://kubernetes.slack.com/messages/sig-ui)<br>* [Mailing List](https://groups.google.com/forum/#!forum/kubernetes-sig-ui)|* Regular SIG Meeting: [Thursdays at 09:00 PT (Pacific Time) (bi-weekly)](https://groups.google.com/forum/#!forum/kubernetes-sig-ui)<br> +|[Usability](sig-usability/README.md)|usability|* [Rajakavitha Kodhandapani](https://github.com/Rajakavitha1), The Linux Foundation<br>* [Himanshu Pandey](https://github.com/hpandeycodeit), Pivotal<br>* [Tasha Drew](https://github.com/tashimi), VMware<br>* [Vallery Lancey](https://github.com/vllry), Lyft<br>|* [Slack](https://kubernetes.slack.com/messages/sig-usability)<br>* [Mailing List](https://groups.google.com/forum/#!forum/kubernetes-sig-usability)|* Regular SIG Meeting: [Tuesdays at 14:00 PT (Pacific Time) (every third week)](https://zoom.us/j/3832562240)<br> +|[Windows](sig-windows/README.md)|windows|* [Patrick Lang](https://github.com/PatrickLang), Microsoft<br>* [Michael Michael](https://github.com/michmike), VMware<br>|* [Slack](https://kubernetes.slack.com/messages/sig-windows)<br>* [Mailing List](https://groups.google.com/forum/#!forum/kubernetes-sig-windows)|* Regular SIG Meeting: [Tuesdays at 12:30 Eastern Standard Time (EST) (weekly)](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit)<br> ### Master Working Group List | Name | Stakeholder SIGs |Organizers | Contact | Meetings | |------|------------------|-----------|---------|----------| |[Apply](wg-apply/README.md)|* API Machinery<br>* CLI<br>|* [Daniel Smith](https://github.com/lavalamp), Google<br>|* [Slack](https://kubernetes.slack.com/messages/wg-apply)<br>* [Mailing List](https://groups.google.com/forum/#!forum/kubernetes-wg-apply)|* Regular WG Meeting: [Tuesdays at 9:30 PT (Pacific Time) (biweekly)](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit)<br> -|[Component Standard](wg-component-standard/README.md)|* API Machinery<br>* Architecture<br>* Cluster Lifecycle<br>|* [Lucas Käldström](https://github.com/luxas), Luxas Labs (occasionally contracting for Weaveworks)<br>* [Michael Taufen](https://github.com/mtaufen), Google<br>* [Dr. Stefan Schimanski](https://github.com/sttts), Red Hat<br>|* [Slack](https://kubernetes.slack.com/messages/wg-component-standard)<br>* [Mailing List](https://groups.google.com/forum/#!forum/kubernetes-wg-component-standard)|* Regular WG Meeting: [Tuesdays at 08:30 PT (Pacific Time) (weekly)](https://zoom.us/j/705540322)<br> -|[IoT Edge](wg-iot-edge/README.md)|* Multicluster<br>* Network<br>|* [Steve Wong](https://github.com/cantbewong), VMware<br>* [Cindy Xing](https://github.com/cindyxing), Huawei<br>* [Dejan Bosanac](https://github.com/dejanb), Red Hat<br>* [Preston Holmes](https://github.com/ptone), Google<br>|* [Slack](https://kubernetes.slack.com/messages/wg-iot-edge)<br>* [Mailing List](https://groups.google.com/forum/#!forum/kubernetes-wg-iot-edge)|* APAC WG Meeting: [Wednesdays at 5:00 UTC (every four weeks)](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit)<br>* Regular WG Meeting: [Wednesdays at 09:00 (Pacific Time) PT (every four weeks)](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit)<br> -|[K8s Infra](wg-k8s-infra/README.md)|* Architecture<br>* Contributor Experience<br>* Release<br>* Testing<br>|* [Davanum Srinivas](https://github.com/dims), Huawei<br>* [Aaron Crickenberger](https://github.com/spiffxp), Google<br>|* [Slack](https://kubernetes.slack.com/messages/wg-k8s-infra)<br>* [Mailing List](https://groups.google.com/forum/#!forum/kubernetes-wg-k8s-infra)|* Regular WG Meeting: [Wednesdays at 8:30 PT (Pacific Time) (bi-weekly)](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit)<br> -|[LTS](wg-lts/README.md)|* API Machinery<br>* CLI<br>* Node<br>|* [Dhawal Yogesh Bhanusali](https://github.com/imkin), VMware<br>* [Quinton Hoole](https://github.com/quinton-hoole), Huawei<br>* [Tim Pepper](https://github.com/tpepper), VMware<br>* [Nick Young](https://github.com/youngnick), Atlassian<br>|* [Slack](https://kubernetes.slack.com/messages/wg-lts)<br>* [Mailing List](https://groups.google.com/forum/#!forum/kubernetes-wg-lts)|* Regular WG Meeting: [Tuesdays at 09:00 PT (Pacific Time) (bi-weekly)](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit)<br> +|[Component Standard](wg-component-standard/README.md)|* API Machinery<br>* Architecture<br>* Cluster Lifecycle<br>|* [Michael Taufen](https://github.com/mtaufen), Google<br>* [Leigh Capili](https://github.com/stealthybox), Weaveworks<br>* [Dr. Stefan Schimanski](https://github.com/sttts), Red Hat<br>|* [Slack](https://kubernetes.slack.com/messages/wg-component-standard)<br>* [Mailing List](https://groups.google.com/forum/#!forum/kubernetes-wg-component-standard)|* Regular WG Meeting (please join kubernetes-dev@googlegroups.com or kubernetes-wg-component-standard@googlegroups.com to access the notes): [Tuesdays at 08:30 PT (Pacific Time) (weekly)](https://zoom.us/j/705540322)<br> +|[IoT Edge](wg-iot-edge/README.md)|* Multicluster<br>* Network<br>|* [Steve Wong](https://github.com/cantbewong), VMware<br>* [Cindy Xing](https://github.com/cindyxing), Microsoft<br>* [Dejan Bosanac](https://github.com/dejanb), Red Hat<br>* [Preston Holmes](https://github.com/ptone), Google<br>|* [Slack](https://kubernetes.slack.com/messages/wg-iot-edge)<br>* [Mailing List](https://groups.google.com/forum/#!forum/kubernetes-wg-iot-edge)|* APAC WG Meeting: [Wednesdays at 5:00 UTC (every four weeks)](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit)<br>* Regular WG Meeting: [Wednesdays at 09:00 (Pacific Time) PT (every four weeks)](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit)<br> +|[K8s Infra](wg-k8s-infra/README.md)|* Architecture<br>* Contributor Experience<br>* Release<br>* Testing<br>|* [Davanum Srinivas](https://github.com/dims), VMware<br>* [Aaron Crickenberger](https://github.com/spiffxp), Google<br>|* [Slack](https://kubernetes.slack.com/messages/wg-k8s-infra)<br>* [Mailing List](https://groups.google.com/forum/#!forum/kubernetes-wg-k8s-infra)|* Regular WG Meeting: [Wednesdays at 8:30 PT (Pacific Time) (bi-weekly)](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit)<br> +|[LTS](wg-lts/README.md)|* API Machinery<br>* CLI<br>* Node<br>|* [Dhawal Yogesh Bhanusali](https://github.com/imkin), VMware<br>* [Quinton Hoole](https://github.com/quinton-hoole), Huawei<br>* [Tim Pepper](https://github.com/tpepper), VMware<br>* [Nick Young](https://github.com/youngnick), VMWare<br>|* [Slack](https://kubernetes.slack.com/messages/wg-lts)<br>* [Mailing List](https://groups.google.com/forum/#!forum/kubernetes-wg-lts)|* Regular WG Meeting: [Tuesdays at 09:00 PT (Pacific Time) (bi-weekly)](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit)<br> |[Machine Learning](wg-machine-learning/README.md)|* Apps<br>* Node<br>|* [Connor Doyle](https://github.com/ConnorDoyle), Intel<br>* [Balaji Subramaniam](https://github.com/balajismaniam), Intel<br>* [Kenneth Owens](https://github.com/kow3ns), Google<br>* [Vishnu Kannan](https://github.com/vishh), Google<br>|* [Slack](https://kubernetes.slack.com/messages/wg-machine-learning)<br>* [Mailing List](https://groups.google.com/forum/#!forum/kubernetes-wg-machine-learning)|* Regular WG Meeting: [Thursdays at 13:00 PT (Pacific Time) (biweekly)](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit)<br> -|[Multitenancy](wg-multitenancy/README.md)|* API Machinery<br>* Auth<br>* Network<br>* Node<br>* Scheduling<br>* Storage<br>|* [David Oppenheimer](https://github.com/davidopp), Google<br>* [Tasha Drew](https://github.com/tashimi), VMware<br>|* [Slack](https://kubernetes.slack.com/messages/wg-multitenancy)<br>* [Mailing List](https://groups.google.com/forum/#!forum/kubernetes-wg-multitenancy)|* Regular WG Meeting: [Tuesdays at 11:00 PT (Pacific Time) (biweekly)](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit)<br> +|[Multitenancy](wg-multitenancy/README.md)|* API Machinery<br>* Auth<br>* Network<br>* Node<br>* Scheduling<br>* Storage<br>|* [Sanjeev Rampal](https://github.com/srampal), Cisco<br>* [Tasha Drew](https://github.com/tashimi), VMware<br>|* [Slack](https://kubernetes.slack.com/messages/wg-multitenancy)<br>* [Mailing List](https://groups.google.com/forum/#!forum/kubernetes-wg-multitenancy)|* Regular WG Meeting: [Tuesdays at 11:00 PT (Pacific Time) (biweekly)](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit)<br> |[Policy](wg-policy/README.md)|* Architecture<br>* Auth<br>* Multicluster<br>* Network<br>* Node<br>* Scheduling<br>* Storage<br>|* [Yisui Hu](https://github.com/easeway), Google<br>* [Erica von Buelow](https://github.com/ericavonb), Red Hat<br>* [Howard Huang](https://github.com/hannibalhuang), Huawei<br>* [Michael Elder](https://github.com/mdelder), IBM<br>* [Torin Sandall](https://github.com/tsandall), Styra<br>|* [Slack](https://kubernetes.slack.com/messages/wg-policy)<br>* [Mailing List](https://groups.google.com/forum/#!forum/kubernetes-wg-policy)|* Regular WG Meeting: [Wednesdays at 16:00 PT (Pacific Time) (weekly)](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit)<br> |[Resource Management](wg-resource-management/README.md)|* Autoscaling<br>* Instrumentation<br>* Network<br>* Node<br>* Scheduling<br>* Storage<br>|* [Derek Carr](https://github.com/derekwaynecarr), Red Hat<br>* [Vishnu Kannan](https://github.com/vishh), Google<br>|* [Slack](https://kubernetes.slack.com/messages/wg-resource-mgmt)<br>* [Mailing List](https://groups.google.com/forum/#!forum/kubernetes-wg-resource-management)|* Regular WG Meeting: [Wednesdays at 11:00 PT (Pacific Time) (biweekly (On demand))](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit)<br> -|[Security Audit](wg-security-audit/README.md)||* [Aaron Small](https://github.com/aasmall), Google<br>* [Craig Ingram](https://github.com/cji), Salesforce<br>* [Jay Beale](https://github.com/jaybeale), InGuardians<br>* [Joel Smith](https://github.com/joelsmith), Red Hat<br>|* [Slack](https://kubernetes.slack.com/messages/wg-security-audit)<br>* [Mailing List](https://groups.google.com/forum/#!forum/kubernetes-wg-security-audit)|* Regular WG Meeting: [Mondays at 13:00 PT (Pacific Time) (weekly)](https://docs.google.com/document/d/1RbC4SBZBlKth7IjYv_NaEpnmLGwMJ0ElpUOmsG-bdRA/edit)<br> +|[Security Audit](wg-security-audit/README.md)|* Auth<br>|* [Aaron Small](https://github.com/aasmall), Google<br>* [Craig Ingram](https://github.com/cji), Salesforce<br>* [Jay Beale](https://github.com/jaybeale), InGuardians<br>* [Joel Smith](https://github.com/joelsmith), Red Hat<br>|* [Slack](https://kubernetes.slack.com/messages/wg-security-audit)<br>* [Mailing List](https://groups.google.com/forum/#!forum/kubernetes-wg-security-audit)|* Regular WG Meeting: [Mondays at 13:00 PT (Pacific Time) (weekly)](https://docs.google.com/document/d/1RbC4SBZBlKth7IjYv_NaEpnmLGwMJ0ElpUOmsG-bdRA/edit)<br> ### Master User Group List @@ -77,9 +72,9 @@ When the need arises, a [new SIG can be created](sig-wg-lifecycle.md) | Name | Label | Members | Contact | |------|--------|---------|---------| -|[Code of Conduct](committee-code-of-conduct/README.md)|conduct|* [Jennifer Rondeau](https://github.com/bradamant3), Stripe<br>* [Carolyn Van Slyck](https://github.com/carolynvs), Microsoft<br>* [Eric Paris](https://github.com/eparis), Red Hat<br>* [Jaice Singer DuMars](https://github.com/jdumars), Google<br>* [Paris Pittman](https://github.com/parispittman), Google<br>|* [Private Mailing List](conduct@kubernetes.io) -|[Product Security](committee-product-security/README.md)|product-security|* [CJ Cullen](https://github.com/cjcullen), Google<br>* [Joel Smith](https://github.com/joelsmith), Red Hat<br>* [Jordan Liggitt](https://github.com/liggitt), Google<br>* [Brandon Philips](https://github.com/philips), Red Hat<br>* [Tim Allclair](https://github.com/tallclair), Google<br>|* [Private Mailing List](security@kubernetes.io) -|[Steering](committee-steering/README.md)|steering|* [Brian Grant](https://github.com/bgrant0607), Google<br>* [Brendan Burns](https://github.com/brendandburns), Microsoft<br>* [Derek Carr](https://github.com/derekwaynecarr), Red Hat<br>* [Davanum Srinivas](https://github.com/dims), Huawei<br>* [Joe Beda](https://github.com/jbeda), VMware<br>* [Michelle Noorali](https://github.com/michelleN), Microsoft<br>* [Brandon Philips](https://github.com/philips), Red Hat<br>* [Phillip Wittrock](https://github.com/pwittrock), Google<br>* [Sarah Novotny](https://github.com/sarahnovotny), Google<br>* [Clayton Coleman](https://github.com/smarterclayton), Red Hat<br>* [Aaron Crickenberger](https://github.com/spiffxp), Google<br>* [Timothy St. Clair](https://github.com/timothysc), VMware<br>|* [Mailing List](https://groups.google.com/a/kubernetes.io/forum/#!forum/steering)<br>* [Private Mailing List](steering-private@kubernetes.io) +|[Code of Conduct](committee-code-of-conduct/README.md)|code-of-conduct|* [Jennifer Rondeau](https://github.com/Bradamant3), Stripe<br>* [Carolyn Van Slyck](https://github.com/carolynvs), Microsoft<br>* [Eric Paris](https://github.com/eparis), Red Hat<br>* [Jaice Singer DuMars](https://github.com/jdumars), Google<br>* [Paris Pittman](https://github.com/parispittman), Google<br>|* [Private Mailing List](conduct@kubernetes.io) +|[Product Security](committee-product-security/README.md)|product-security|* [CJ Cullen](https://github.com/cjcullen), Google<br>* [Joel Smith](https://github.com/joelsmith), Red Hat<br>* [Jonathan Pulsifer](https://github.com/jonpulsifer), Shopify<br>* [Jordan Liggitt](https://github.com/liggitt), Google<br>* [Brandon Philips](https://github.com/philips), Red Hat<br>* [Tim Allclair](https://github.com/tallclair), Google<br>|* [Private Mailing List](security@kubernetes.io) +|[Steering](committee-steering/README.md)|steering|* [Brian Grant](https://github.com/bgrant0607), Google<br>* [Brendan Burns](https://github.com/brendandburns), Microsoft<br>* [Derek Carr](https://github.com/derekwaynecarr), Red Hat<br>* [Davanum Srinivas](https://github.com/dims), VMware<br>* [Joe Beda](https://github.com/jbeda), VMware<br>* [Michelle Noorali](https://github.com/michelleN), Microsoft<br>* [Brandon Philips](https://github.com/philips), Red Hat<br>* [Phillip Wittrock](https://github.com/pwittrock), Google<br>* [Sarah Novotny](https://github.com/sarahnovotny), Google<br>* [Clayton Coleman](https://github.com/smarterclayton), Red Hat<br>* [Aaron Crickenberger](https://github.com/spiffxp), Google<br>* [Timothy St. Clair](https://github.com/timothysc), VMware<br>|* [Mailing List](https://groups.google.com/a/kubernetes.io/forum/#!forum/steering)<br>* [Private Mailing List](steering-private@kubernetes.io) <!-- BEGIN CUSTOM CONTENT --> <!-- END CUSTOM CONTENT --> diff --git a/sig-multicluster/README.md b/sig-multicluster/README.md index 949091c2..5bea45d5 100644 --- a/sig-multicluster/README.md +++ b/sig-multicluster/README.md @@ -13,7 +13,7 @@ A Special Interest Group focused on solving common challenges related to the man The [charter](charter.md) defines the scope and governance of the Multicluster Special Interest Group. ## Meetings -* Federation v2 Working Group: [Wednesdays at 7:30 PT (Pacific Time)](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit) (weekly). [Convert to your timezone](http://www.thetimezoneconverter.com/?t=7:30&tz=PT%20%28Pacific%20Time%29). +* Cluster Federation (KubeFed) Working Group: [Wednesdays at 7:30 PT (Pacific Time)](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit) (weekly). [Convert to your timezone](http://www.thetimezoneconverter.com/?t=7:30&tz=PT%20%28Pacific%20Time%29). * [Meeting notes and Agenda](https://docs.google.com/document/d/1v-Kb1pUs3ww_x0MiKtgcyTXCAuZlbVlz4_A9wS3_HXY/edit). * [Meeting recordings](https://www.youtube.com/playlist?list=PL69nYSiGNLP3iKP5EzMbtNT2zOZv6RCrX). * Regular SIG Meeting: [Tuesdays at 9:30 PT (Pacific Time)](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit) (biweekly). [Convert to your timezone](http://www.thetimezoneconverter.com/?t=9:30&tz=PT%20%28Pacific%20Time%29). @@ -29,41 +29,35 @@ The Chairs of the SIG run operations and processes governing the SIG. * Quinton Hoole (**[@quinton-hoole](https://github.com/quinton-hoole)**), Huawei ## Contact -* [Slack](https://kubernetes.slack.com/messages/sig-multicluster) -* [Mailing list](https://groups.google.com/forum/#!forum/kubernetes-sig-multicluster) -* [Open Community Issues/PRs](https://github.com/kubernetes/community/labels/sig%2Fmulticluster) +- Slack: [#sig-multicluster](https://kubernetes.slack.com/messages/sig-multicluster) +- [Mailing list](https://groups.google.com/forum/#!forum/kubernetes-sig-multicluster) +- [Open Community Issues/PRs](https://github.com/kubernetes/community/labels/sig%2Fmulticluster) +- GitHub Teams: + - [@kubernetes/sig-multicluster-api-reviews](https://github.com/orgs/kubernetes/teams/sig-multicluster-api-reviews) - API Changes and Reviews + - [@kubernetes/sig-multicluster-bugs](https://github.com/orgs/kubernetes/teams/sig-multicluster-bugs) - Bug Triage and Troubleshooting + - [@kubernetes/sig-multicluster-feature-requests](https://github.com/orgs/kubernetes/teams/sig-multicluster-feature-requests) - Feature Requests + - [@kubernetes/sig-multicluster-misc](https://github.com/orgs/kubernetes/teams/sig-multicluster-misc) - General Discussion + - [@kubernetes/sig-multicluster-pr-reviews](https://github.com/orgs/kubernetes/teams/sig-multicluster-pr-reviews) - PR Reviews + - [@kubernetes/sig-multicluster-test-failures](https://github.com/orgs/kubernetes/teams/sig-multicluster-test-failures) - Test Failures and Triage + - [@kubernetes/sig-mutlicluster-proposals](https://github.com/orgs/kubernetes/teams/sig-mutlicluster-proposals) - Design Proposals ## Subprojects -The following subprojects are owned by sig-multicluster: -- **Kubefed** - - Owners: - - https://raw.githubusercontent.com/kubernetes-sigs/kubefed/master/OWNERS -- **cluster-registry** - - Owners: - - https://raw.githubusercontent.com/kubernetes/cluster-registry/master/OWNERS -- **federation-v1** - - Owners: - - https://raw.githubusercontent.com/kubernetes/federation/master/OWNERS -- **kubemci** - - Owners: - - https://raw.githubusercontent.com/GoogleCloudPlatform/k8s-multicluster-ingress/master/OWNERS - -## GitHub Teams - -The below teams can be mentioned on issues and PRs in order to get attention from the right people. -Note that the links to display team membership will only work if you are a member of the org. - -| Team Name | Details | Description | -| --------- |:-------:| ----------- | -| @kubernetes/sig-multicluster-api-reviews | [link](https://github.com/orgs/kubernetes/teams/sig-multicluster-api-reviews) | API Changes and Reviews | -| @kubernetes/sig-multicluster-bugs | [link](https://github.com/orgs/kubernetes/teams/sig-multicluster-bugs) | Bug Triage and Troubleshooting | -| @kubernetes/sig-multicluster-feature-requests | [link](https://github.com/orgs/kubernetes/teams/sig-multicluster-feature-requests) | Feature Requests | -| @kubernetes/sig-multicluster-misc | [link](https://github.com/orgs/kubernetes/teams/sig-multicluster-misc) | General Discussion | -| @kubernetes/sig-multicluster-pr-reviews | [link](https://github.com/orgs/kubernetes/teams/sig-multicluster-pr-reviews) | PR Reviews | -| @kubernetes/sig-multicluster-test-failures | [link](https://github.com/orgs/kubernetes/teams/sig-multicluster-test-failures) | Test Failures and Triage | -| @kubernetes/sig-mutlicluster-proposals | [link](https://github.com/orgs/kubernetes/teams/sig-mutlicluster-proposals) | Design Proposals | - +The following [subprojects][subproject-definition] are owned by sig-multicluster: +### Kubefed +- **Owners:** + - https://raw.githubusercontent.com/kubernetes-sigs/kubefed/master/OWNERS +### cluster-registry +- **Owners:** + - https://raw.githubusercontent.com/kubernetes/cluster-registry/master/OWNERS +### federation-v1 +- **Owners:** + - https://raw.githubusercontent.com/kubernetes/federation/master/OWNERS +### kubemci +- **Owners:** + - https://raw.githubusercontent.com/GoogleCloudPlatform/k8s-multicluster-ingress/master/OWNERS + +[subproject-definition]: https://github.com/kubernetes/community/blob/master/governance.md#subprojects <!-- BEGIN CUSTOM CONTENT --> ## Subprojects diff --git a/sig-multicluster/charter.md b/sig-multicluster/charter.md index 0925dbf6..43e6f097 100644 --- a/sig-multicluster/charter.md +++ b/sig-multicluster/charter.md @@ -8,8 +8,8 @@ the Roles and Organization Management outlined in [sig-governance]. The scope of SIG Multicluster is limited to the following subprojects: - The [cluster-registry](https://github.com/kubernetes/cluster-registry) -- Kubernetes federation: - - [Kubefed](https://github.com/kubernetes-sigs/kubefed) +- Kubernetes Cluster Federation: + - [KubeFed](https://github.com/kubernetes-sigs/kubefed) - [Federation v1](https://github.com/kubernetes/federation) - [Kubemci](https://github.com/GoogleCloudPlatform/k8s-multicluster-ingress) diff --git a/sig-network/README.md b/sig-network/README.md index 68fbe757..d75ec52a 100644 --- a/sig-network/README.md +++ b/sig-network/README.md @@ -27,53 +27,47 @@ The Chairs of the SIG run operations and processes governing the SIG. * Tim Hockin (**[@thockin](https://github.com/thockin)**), Google ## Contact -* [Slack](https://kubernetes.slack.com/messages/sig-network) -* [Mailing list](https://groups.google.com/forum/#!forum/kubernetes-sig-network) -* [Open Community Issues/PRs](https://github.com/kubernetes/community/labels/sig%2Fnetwork) +- Slack: [#sig-network](https://kubernetes.slack.com/messages/sig-network) +- [Mailing list](https://groups.google.com/forum/#!forum/kubernetes-sig-network) +- [Open Community Issues/PRs](https://github.com/kubernetes/community/labels/sig%2Fnetwork) +- GitHub Teams: + - [@kubernetes/sig-network-api-reviews](https://github.com/orgs/kubernetes/teams/sig-network-api-reviews) - API Changes and Reviews + - [@kubernetes/sig-network-bugs](https://github.com/orgs/kubernetes/teams/sig-network-bugs) - Bug Triage and Troubleshooting + - [@kubernetes/sig-network-feature-requests](https://github.com/orgs/kubernetes/teams/sig-network-feature-requests) - Feature Requests + - [@kubernetes/sig-network-misc](https://github.com/orgs/kubernetes/teams/sig-network-misc) - General Discussion + - [@kubernetes/sig-network-pr-reviews](https://github.com/orgs/kubernetes/teams/sig-network-pr-reviews) - PR Reviews + - [@kubernetes/sig-network-proposals](https://github.com/orgs/kubernetes/teams/sig-network-proposals) - Design Proposals + - [@kubernetes/sig-network-test-failures](https://github.com/orgs/kubernetes/teams/sig-network-test-failures) - Test Failures and Triage ## Subprojects -The following subprojects are owned by sig-network: -- **external-dns** - - Owners: - - https://raw.githubusercontent.com/kubernetes-incubator/external-dns/master/OWNERS - - Contact - - Slack: [#external-dns](https://kubernetes.slack.com/messages/external-dns) -- **ingress** - - Owners: - - https://raw.githubusercontent.com/kubernetes/ingress-gce/master/OWNERS - - https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/OWNERS -- **kube-dns** - - Owners: - - https://raw.githubusercontent.com/kubernetes/dns/master/OWNERS -- **network-policy** - - Owners: - - https://raw.githubusercontent.com/kubernetes/api/master/networking/OWNERS -- **pod-networking** - - Owners: - - https://raw.githubusercontent.com/kubernetes-incubator/ip-masq-agent/master/OWNERS - - https://raw.githubusercontent.com/kubernetes/kubernetes/master/pkg/kubelet/network/OWNERS -- **services** - - Owners: - - https://raw.githubusercontent.com/kubernetes/kubernetes/master/pkg/controller/endpoint/OWNERS - - https://raw.githubusercontent.com/kubernetes/kubernetes/master/pkg/controller/service/OWNERS - - https://raw.githubusercontent.com/kubernetes/kubernetes/master/pkg/proxy/OWNERS - -## GitHub Teams - -The below teams can be mentioned on issues and PRs in order to get attention from the right people. -Note that the links to display team membership will only work if you are a member of the org. - -| Team Name | Details | Description | -| --------- |:-------:| ----------- | -| @kubernetes/sig-network-api-reviews | [link](https://github.com/orgs/kubernetes/teams/sig-network-api-reviews) | API Changes and Reviews | -| @kubernetes/sig-network-bugs | [link](https://github.com/orgs/kubernetes/teams/sig-network-bugs) | Bug Triage and Troubleshooting | -| @kubernetes/sig-network-feature-requests | [link](https://github.com/orgs/kubernetes/teams/sig-network-feature-requests) | Feature Requests | -| @kubernetes/sig-network-misc | [link](https://github.com/orgs/kubernetes/teams/sig-network-misc) | General Discussion | -| @kubernetes/sig-network-pr-reviews | [link](https://github.com/orgs/kubernetes/teams/sig-network-pr-reviews) | PR Reviews | -| @kubernetes/sig-network-proposals | [link](https://github.com/orgs/kubernetes/teams/sig-network-proposals) | Design Proposals | -| @kubernetes/sig-network-test-failures | [link](https://github.com/orgs/kubernetes/teams/sig-network-test-failures) | Test Failures and Triage | - +The following [subprojects][subproject-definition] are owned by sig-network: +### external-dns +- **Owners:** + - https://raw.githubusercontent.com/kubernetes-incubator/external-dns/master/OWNERS +- **Contact:** + - Slack: [#external-dns](https://kubernetes.slack.com/messages/external-dns) +### ingress +- **Owners:** + - https://raw.githubusercontent.com/kubernetes/ingress-gce/master/OWNERS + - https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/OWNERS +### kube-dns +- **Owners:** + - https://raw.githubusercontent.com/kubernetes/dns/master/OWNERS +### network-policy +- **Owners:** + - https://raw.githubusercontent.com/kubernetes/api/master/networking/OWNERS +### pod-networking +- **Owners:** + - https://raw.githubusercontent.com/kubernetes-sigs/ip-masq-agent/master/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/pkg/kubelet/network/OWNERS +### services +- **Owners:** + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/pkg/controller/endpoint/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/pkg/controller/service/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/pkg/proxy/OWNERS + +[subproject-definition]: https://github.com/kubernetes/community/blob/master/governance.md#subprojects <!-- BEGIN CUSTOM CONTENT --> ## Areas of Responsibility diff --git a/sig-node/README.md b/sig-node/README.md index 5e637809..1beb6d6d 100644 --- a/sig-node/README.md +++ b/sig-node/README.md @@ -26,56 +26,51 @@ The Chairs of the SIG run operations and processes governing the SIG. * Derek Carr (**[@derekwaynecarr](https://github.com/derekwaynecarr)**), Red Hat ## Contact -* [Slack](https://kubernetes.slack.com/messages/sig-node) -* [Mailing list](https://groups.google.com/forum/#!forum/kubernetes-sig-node) -* [Open Community Issues/PRs](https://github.com/kubernetes/community/labels/sig%2Fnode) +- Slack: [#sig-node](https://kubernetes.slack.com/messages/sig-node) +- [Mailing list](https://groups.google.com/forum/#!forum/kubernetes-sig-node) +- [Open Community Issues/PRs](https://github.com/kubernetes/community/labels/sig%2Fnode) +- GitHub Teams: + - [@kubernetes/sig-node-api-reviews](https://github.com/orgs/kubernetes/teams/sig-node-api-reviews) - API Changes and Reviews + - [@kubernetes/sig-node-bugs](https://github.com/orgs/kubernetes/teams/sig-node-bugs) - Bug Triage and Troubleshooting + - [@kubernetes/sig-node-feature-requests](https://github.com/orgs/kubernetes/teams/sig-node-feature-requests) - Feature Requests + - [@kubernetes/sig-node-pr-reviews](https://github.com/orgs/kubernetes/teams/sig-node-pr-reviews) - PR Reviews + - [@kubernetes/sig-node-proposals](https://github.com/orgs/kubernetes/teams/sig-node-proposals) - Design Proposals + - [@kubernetes/sig-node-test-failures](https://github.com/orgs/kubernetes/teams/sig-node-test-failures) - Test Failures and Triage ## Subprojects -The following subprojects are owned by sig-node: -- **cri-api** - - Owners: - - https://raw.githubusercontent.com/kubernetes/cri-api/master/OWNERS -- **cri-tools** - - Owners: - - https://raw.githubusercontent.com/kubernetes-sigs/cri-tools/master/OWNERS -- **frakti** - - Owners: - - https://raw.githubusercontent.com/kubernetes/frakti/master/OWNERS -- **kubelet** - - Owners: - - https://raw.githubusercontent.com/kubernetes/kubernetes/master/cmd/kubelet/OWNERS - - https://raw.githubusercontent.com/kubernetes/kubernetes/master/pkg/kubelet/OWNERS -- **node-api** - - Owners: - - https://raw.githubusercontent.com/kubernetes/kubernetes/master/staging/src/k8s.io/node-api/OWNERS - - https://raw.githubusercontent.com/kubernetes/node-api/master/OWNERS -- **node-feature-discovery** - - Owners: - - https://raw.githubusercontent.com/kubernetes-sigs/node-feature-discovery/master/OWNERS -- **node-problem-detector** - - Owners: - - https://raw.githubusercontent.com/kubernetes/node-problem-detector/master/OWNERS - - Contact - - Slack: [#node-problem-detector](https://kubernetes.slack.com/messages/node-problem-detector) -- **rktlet** - - Owners: - - https://raw.githubusercontent.com/kubernetes-incubator/rktlet/master/OWNERS - -## GitHub Teams - -The below teams can be mentioned on issues and PRs in order to get attention from the right people. -Note that the links to display team membership will only work if you are a member of the org. - -| Team Name | Details | Description | -| --------- |:-------:| ----------- | -| @kubernetes/sig-node-api-reviews | [link](https://github.com/orgs/kubernetes/teams/sig-node-api-reviews) | API Changes and Reviews | -| @kubernetes/sig-node-bugs | [link](https://github.com/orgs/kubernetes/teams/sig-node-bugs) | Bug Triage and Troubleshooting | -| @kubernetes/sig-node-feature-requests | [link](https://github.com/orgs/kubernetes/teams/sig-node-feature-requests) | Feature Requests | -| @kubernetes/sig-node-pr-reviews | [link](https://github.com/orgs/kubernetes/teams/sig-node-pr-reviews) | PR Reviews | -| @kubernetes/sig-node-proposals | [link](https://github.com/orgs/kubernetes/teams/sig-node-proposals) | Design Proposals | -| @kubernetes/sig-node-test-failures | [link](https://github.com/orgs/kubernetes/teams/sig-node-test-failures) | Test Failures and Triage | - +The following [subprojects][subproject-definition] are owned by sig-node: +### cri-api +- **Owners:** + - https://raw.githubusercontent.com/kubernetes/cri-api/master/OWNERS +### cri-tools +- **Owners:** + - https://raw.githubusercontent.com/kubernetes-sigs/cri-tools/master/OWNERS +### frakti +- **Owners:** + - https://raw.githubusercontent.com/kubernetes/frakti/master/OWNERS +### kubelet +- **Owners:** + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/cmd/kubelet/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/pkg/kubelet/OWNERS +### node-api +- **Owners:** + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/staging/src/k8s.io/node-api/OWNERS + - https://raw.githubusercontent.com/kubernetes/node-api/master/OWNERS +### node-feature-discovery +- **Owners:** + - https://raw.githubusercontent.com/kubernetes-sigs/node-feature-discovery-operator/master/OWNERS + - https://raw.githubusercontent.com/kubernetes-sigs/node-feature-discovery/master/OWNERS +### node-problem-detector +- **Owners:** + - https://raw.githubusercontent.com/kubernetes/node-problem-detector/master/OWNERS +- **Contact:** + - Slack: [#node-problem-detector](https://kubernetes.slack.com/messages/node-problem-detector) +### rktlet +- **Owners:** + - https://raw.githubusercontent.com/kubernetes-incubator/rktlet/master/OWNERS + +[subproject-definition]: https://github.com/kubernetes/community/blob/master/governance.md#subprojects <!-- BEGIN CUSTOM CONTENT --> ## Goals diff --git a/sig-openstack/OWNERS b/sig-openstack/OWNERS index 1268396e..c58380da 100644 --- a/sig-openstack/OWNERS +++ b/sig-openstack/OWNERS @@ -1,8 +1,8 @@ # See the OWNERS docs at https://go.k8s.io/owners reviewers: - - sig-openstack-leads + - provider-openstack approvers: - - sig-openstack-leads + - provider-openstack labels: - sig/openstack diff --git a/sig-openstack/README.md b/sig-openstack/README.md index a1891ddf..e7be2f4c 100644 --- a/sig-openstack/README.md +++ b/sig-openstack/README.md @@ -6,16 +6,15 @@ sigs.yaml file in the project root. To understand how this file is generated, see https://git.k8s.io/community/generator/README.md ---> -# OpenStack Special Interest Group +# [DEPRECATED] OpenStack Special Interest Group -Coordinates the cross-community efforts of the OpenStack and Kubernetes communities. This includes OpenStack-related contributions to Kubernetes projects with OpenStack as: a deployment platform for Kubernetes; a service provider for Kubernetes; a collection of applications to run on Kubernetes. +The OpenStack Special Interest Group is now a subproject of [SIG Cloud Provider](https://github.com/kubernetes/community/tree/master/sig-cloud-provider). + +### (This directory is a placeholder to preserve links. Please remove after 6 months or the release of Kubernetes 1.17, whichever comes first.) + +The [charter](charter.md) defines the scope and governance of the [DEPRECATED] OpenStack Special Interest Group. -The [charter](charter.md) defines the scope and governance of the OpenStack Special Interest Group. -## Meetings -* Regular SIG Meeting: [Wednesdays at 08:00 PT (Pacific Time)](https://docs.google.com/document/d/1bW3j4hFN4D8rv2LFv-DybB3gcE5ISAaOO_OpvDCgrGg/edit) (biweekly starting Wednesday March 20, 2019). [Convert to your timezone](http://www.thetimezoneconverter.com/?t=08:00&tz=PT%20%28Pacific%20Time%29). - * [Meeting notes and Agenda](https://docs.google.com/document/d/15UwgLbEyZyXXxVtsThcSuPiJru4CuqU9p3ttZSfTaY4/edit). - * [Meeting recordings](https://www.youtube.com/watch?v=iCfUx7ilh0E&list=PL69nYSiGNLP20iTSChQ_i2QQmTBl3M7ax). ## Leadership diff --git a/sig-pm/README.md b/sig-pm/README.md index 691ff02c..5a3ce777 100644 --- a/sig-pm/README.md +++ b/sig-pm/README.md @@ -26,26 +26,28 @@ The [charter](charter.md) defines the scope and governance of the PM Special Int The Chairs of the SIG run operations and processes governing the SIG. * Caleb Miles (**[@calebamiles](https://github.com/calebamiles)**), Google -* Ihor Dvoretskyi (**[@idvoretskyi](https://github.com/idvoretskyi)**), CNCF * Jaice Singer DuMars (**[@jdumars](https://github.com/jdumars)**), Google * Stephen Augustus (**[@justaugustus](https://github.com/justaugustus)**), VMware +* Lachie Evenson (**[@lachie83](https://github.com/lachie83)**), Microsoft ## Emeritus Leads * Aparna Sinha (**[@apsinha](https://github.com/apsinha)**), Google +* Ihor Dvoretskyi (**[@idvoretskyi](https://github.com/idvoretskyi)**), CNCF ## Contact -* [Slack](https://kubernetes.slack.com/messages/sig-pm) -* [Mailing list](https://groups.google.com/forum/#!forum/kubernetes-sig-pm) -* [Open Community Issues/PRs](https://github.com/kubernetes/community/labels/sig%2Fpm) +- Slack: [#sig-pm](https://kubernetes.slack.com/messages/sig-pm) +- [Mailing list](https://groups.google.com/forum/#!forum/kubernetes-sig-pm) +- [Open Community Issues/PRs](https://github.com/kubernetes/community/labels/sig%2Fpm) ## Subprojects -The following subprojects are owned by sig-pm: -- **enhancements** - - Owners: - - https://raw.githubusercontent.com/kubernetes/enhancements/master/OWNERS +The following [subprojects][subproject-definition] are owned by sig-pm: +### enhancements +- **Owners:** + - https://raw.githubusercontent.com/kubernetes/enhancements/master/OWNERS +[subproject-definition]: https://github.com/kubernetes/community/blob/master/governance.md#subprojects <!-- BEGIN CUSTOM CONTENT --> SIG-PM (Program, Product, Project Management) diff --git a/sig-release/README.md b/sig-release/README.md index 1b83b9ef..7e469845 100644 --- a/sig-release/README.md +++ b/sig-release/README.md @@ -13,9 +13,9 @@ Ensure quality Kubernetes releases The [charter](charter.md) defines the scope and governance of the Release Special Interest Group. ## Meetings -* Regular SIG Meeting: [Tuesdays at 21:00 UTC](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit) (biweekly). [Convert to your timezone](http://www.thetimezoneconverter.com/?t=21:00&tz=UTC). - * [Meeting notes and Agenda](https://docs.google.com/document/d/1Fu6HxXQu8wl6TwloGUEOXVzZ1rwZ72IAhglnaAMCPqA/edit?usp=sharing). - * [Meeting recordings](https://www.youtube.com/watch?v=I0KbWz8MTMk&list=PL69nYSiGNLP3QKkOsDsO6A0Y1rhgP84iZ). +* Regular SIG Meeting: [Mondays at 15:00 UTC](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit) (biweekly). [Convert to your timezone](http://www.thetimezoneconverter.com/?t=15:00&tz=UTC). + * [Meeting notes and Agenda](https://bit.ly/k8s-sig-release-meeting). + * [Meeting recordings](https://bit.ly/k8s-sig-release-videos). ## Leadership @@ -31,54 +31,51 @@ The Chairs of the SIG run operations and processes governing the SIG. * Jaice Singer DuMars (**[@jdumars](https://github.com/jdumars)**), Google ## Contact -* [Slack](https://kubernetes.slack.com/messages/sig-release) -* [Mailing list](https://groups.google.com/forum/#!forum/kubernetes-sig-release) -* [Open Community Issues/PRs](https://github.com/kubernetes/community/labels/sig%2Frelease) +- Slack: [#sig-release](https://kubernetes.slack.com/messages/sig-release) +- [Mailing list](https://groups.google.com/forum/#!forum/kubernetes-sig-release) +- [Open Community Issues/PRs](https://github.com/kubernetes/community/labels/sig%2Frelease) +- GitHub Teams: + - [@kubernetes/kubernetes-milestone-maintainers](https://github.com/orgs/kubernetes/teams/kubernetes-milestone-maintainers) - Milestone Maintainers + - [@kubernetes/kubernetes-release-managers](https://github.com/orgs/kubernetes/teams/kubernetes-release-managers) - Release Managers + - [@kubernetes/sig-release](https://github.com/orgs/kubernetes/teams/sig-release) - SIG Release Members + - [@kubernetes/sig-release-admins](https://github.com/orgs/kubernetes/teams/sig-release-admins) - Admins for SIG Release repositories ## Subprojects -The following subprojects are owned by sig-release: -- **hyperkube** - - Owners: - - https://raw.githubusercontent.com/kubernetes/kubernetes/master/build/debian-hyperkube-base/OWNERS - - https://raw.githubusercontent.com/kubernetes/kubernetes/master/cluster/images/hyperkube/OWNERS - - https://raw.githubusercontent.com/kubernetes/kubernetes/master/cmd/hyperkube/OWNERS -- **licensing** - - Description: The Licensing subproject is responsible for analyzing/reporting/remediating licensing concerns within the Kubernetes project orgs. - - Owners: - - https://raw.githubusercontent.com/kubernetes/sig-release/master/licensing/OWNERS -- **publishing-bot** - - Description: The publishing-bot publishes the contents of staging repos that live in k8s.io/kubernetes/staging to their own repositories in kubernetes - - Owners: - - https://raw.githubusercontent.com/kubernetes/publishing-bot/master/OWNERS -- **release-engineering** - - Description: The Release Engineering subproject is responsible for the [process/procedures](https://github.com/kubernetes/sig-release/tree/master/release-engineering) and [tools](https://github.com/kubernetes/release) used to create/maintain Kubernetes release artifacts. - - Owners: - - https://raw.githubusercontent.com/kubernetes-sigs/k8s-container-image-promoter/master/OWNERS - - https://raw.githubusercontent.com/kubernetes-sigs/release-notes/master/OWNERS - - https://raw.githubusercontent.com/kubernetes/release/master/OWNERS - - https://raw.githubusercontent.com/kubernetes/sig-release/master/release-engineering/OWNERS -- **release-team** - - Description: The Kubernetes Release Team is responsible for the day-to-day work required to successfully create releases of Kubernetes. - - Owners: - - https://raw.githubusercontent.com/kubernetes/sig-release/master/release-team/OWNERS -- **sig-release** - - Description: Documents and processes related to SIG Release - - Owners: - - https://raw.githubusercontent.com/kubernetes/sig-release/master/OWNERS - -## GitHub Teams - -The below teams can be mentioned on issues and PRs in order to get attention from the right people. -Note that the links to display team membership will only work if you are a member of the org. - -| Team Name | Details | Description | -| --------- |:-------:| ----------- | -| @kubernetes/kubernetes-milestone-maintainers | [link](https://github.com/orgs/kubernetes/teams/kubernetes-milestone-maintainers) | Milestone Maintainers | -| @kubernetes/kubernetes-release-managers | [link](https://github.com/orgs/kubernetes/teams/kubernetes-release-managers) | Release Managers | -| @kubernetes/sig-release | [link](https://github.com/orgs/kubernetes/teams/sig-release) | SIG Release Members | -| @kubernetes/sig-release-admins | [link](https://github.com/orgs/kubernetes/teams/sig-release-admins) | Admins for SIG Release repositories | - +The following [subprojects][subproject-definition] are owned by sig-release: +### hyperkube +- **Owners:** + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/build/debian-hyperkube-base/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/cluster/images/hyperkube/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/cmd/hyperkube/OWNERS +### licensing +The Licensing subproject is responsible for analyzing/reporting/remediating licensing concerns within the Kubernetes project orgs. +- **Owners:** + - https://raw.githubusercontent.com/kubernetes/sig-release/master/licensing/OWNERS +### release-engineering +The Release Engineering subproject is responsible for the [process/procedures](https://github.com/kubernetes/sig-release/tree/master/release-engineering) and [tools](https://github.com/kubernetes/release) used to create/maintain Kubernetes release artifacts. +- **Owners:** + - https://raw.githubusercontent.com/kubernetes-sigs/k8s-container-image-promoter/master/OWNERS + - https://raw.githubusercontent.com/kubernetes-sigs/release-notes/master/OWNERS + - https://raw.githubusercontent.com/kubernetes/publishing-bot/master/OWNERS + - https://raw.githubusercontent.com/kubernetes/release/master/OWNERS + - https://raw.githubusercontent.com/kubernetes/sig-release/master/release-engineering/OWNERS +- **Contact:** + - Slack: [#release-management](https://kubernetes.slack.com/messages/release-management) +- **Meetings:** + - Regular SIG Meeting: [Mondays at 15:00 UTC](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit) (biweekly). [Convert to your timezone](http://www.thetimezoneconverter.com/?t=15:00&tz=UTC). + - [Meeting notes and Agenda](https://bit.ly/k8s-releng-meeting). + - [Meeting recordings](https://bit.ly/k8s-sig-release-videos). +### release-team +The Kubernetes Release Team is responsible for the day-to-day work required to successfully create releases of Kubernetes. +- **Owners:** + - https://raw.githubusercontent.com/kubernetes/sig-release/master/release-team/OWNERS +### sig-release +Documents and processes related to SIG Release +- **Owners:** + - https://raw.githubusercontent.com/kubernetes/sig-release/master/OWNERS + +[subproject-definition]: https://github.com/kubernetes/community/blob/master/governance.md#subprojects <!-- BEGIN CUSTOM CONTENT --> --- diff --git a/sig-scalability/README.md b/sig-scalability/README.md index 8b609f53..d3fcf6f4 100644 --- a/sig-scalability/README.md +++ b/sig-scalability/README.md @@ -13,7 +13,7 @@ SIG Scalability is responsible for defining and driving scalability goals for Ku The [charter](charter.md) defines the scope and governance of the Scalability Special Interest Group. ## Meetings -* Regular SIG Meeting: [Thursdays at 17:30 UTC](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit) (bi-weekly). [Convert to your timezone](http://www.thetimezoneconverter.com/?t=17:30&tz=UTC). +* Regular SIG Meeting: [Thursdays at 18:30 Warsaw](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit) (bi-weekly ([upcoming meeting dates](#upcoming-2019-meeting-dates))). [Convert to your timezone](http://www.thetimezoneconverter.com/?t=18:30&tz=Warsaw). * [Meeting notes and Agenda](https://docs.google.com/a/bobsplanet.com/document/d/1hEpf25qifVWztaeZPFmjNiJvPo-5JX1z0LSvvVY5G2g/edit?usp=drive_web). * [Meeting recordings](https://www.youtube.com/watch?v=NDP1uYyom28&list=PL69nYSiGNLP2X-hzNTqyELU6jYS3p10uL). @@ -26,72 +26,76 @@ The Chairs of the SIG run operations and processes governing the SIG. * Wojciech Tyczynski (**[@wojtek-t](https://github.com/wojtek-t)**), Google ## Contact -* [Slack](https://kubernetes.slack.com/messages/sig-scalability) -* [Mailing list](https://groups.google.com/forum/#!forum/kubernetes-sig-scale) -* [Open Community Issues/PRs](https://github.com/kubernetes/community/labels/sig%2Fscalability) +- Slack: [#sig-scalability](https://kubernetes.slack.com/messages/sig-scalability) +- [Mailing list](https://groups.google.com/forum/#!forum/kubernetes-sig-scale) +- [Open Community Issues/PRs](https://github.com/kubernetes/community/labels/sig%2Fscalability) +- GitHub Teams: + - [@kubernetes/sig-scalability-api-reviews](https://github.com/orgs/kubernetes/teams/sig-scalability-api-reviews) - API Changes and Reviews + - [@kubernetes/sig-scalability-bugs](https://github.com/orgs/kubernetes/teams/sig-scalability-bugs) - Bug Triage and Troubleshooting + - [@kubernetes/sig-scalability-feature-requests](https://github.com/orgs/kubernetes/teams/sig-scalability-feature-requests) - Feature Requests + - [@kubernetes/sig-scalability-misc](https://github.com/orgs/kubernetes/teams/sig-scalability-misc) - General Discussion + - [@kubernetes/sig-scalability-pr-reviews](https://github.com/orgs/kubernetes/teams/sig-scalability-pr-reviews) - PR Reviews + - [@kubernetes/sig-scalability-proprosals](https://github.com/orgs/kubernetes/teams/sig-scalability-proprosals) - Design Proposals + - [@kubernetes/sig-scalability-test-failures](https://github.com/orgs/kubernetes/teams/sig-scalability-test-failures) - Test Failures and Triage ## Subprojects -The following subprojects are owned by sig-scalability: -- **kubernetes-scalability-and-performance-tests-and-validation** - - Description: [Described below](#kubernetes-scalability-and-performance-tests-and-validation) - - Owners: - - https://raw.githubusercontent.com/kubernetes/community/master/sig-scalability/processes/OWNERS - - https://raw.githubusercontent.com/kubernetes/kubernetes/master/test/e2e/scalability/OWNERS -- **kubernetes-scalability-bottlenecks-detection** - - Description: [Described below](#kubernetes-scalability-bottlenecks-detection) - - Owners: - - https://raw.githubusercontent.com/kubernetes/community/master/sig-scalability/blogs/OWNERS -- **kubernetes-scalability-definition** - - Description: [Described below](#kubernetes-scalability-definition) - - Owners: - - https://raw.githubusercontent.com/kubernetes/community/master/sig-scalability/configs-and-limits/OWNERS - - https://raw.githubusercontent.com/kubernetes/community/master/sig-scalability/slos/OWNERS -- **kubernetes-scalability-governance** - - Description: [Described below](#kubernetes-scalability-governance) - - Owners: - - https://raw.githubusercontent.com/kubernetes/community/master/sig-scalability/governance/OWNERS -- **kubernetes-scalability-test-frameworks** - - Description: [Described below](#kubernetes-scalability-test-frameworks) - - Owners: - - https://raw.githubusercontent.com/kubernetes/kubernetes/master/cluster/images/kubemark/OWNERS - - https://raw.githubusercontent.com/kubernetes/kubernetes/master/cmd/kubemark/OWNERS - - https://raw.githubusercontent.com/kubernetes/kubernetes/master/pkg/kubemark/OWNERS - - https://raw.githubusercontent.com/kubernetes/kubernetes/master/test/kubemark/OWNERS - - https://raw.githubusercontent.com/kubernetes/perf-tests/master/OWNERS - - https://raw.githubusercontent.com/kubernetes/perf-tests/master/clusterloader2/OWNERS - -## GitHub Teams - -The below teams can be mentioned on issues and PRs in order to get attention from the right people. -Note that the links to display team membership will only work if you are a member of the org. - -| Team Name | Details | Description | -| --------- |:-------:| ----------- | -| @kubernetes/sig-scalability-api-reviews | [link](https://github.com/orgs/kubernetes/teams/sig-scalability-api-reviews) | API Changes and Reviews | -| @kubernetes/sig-scalability-bugs | [link](https://github.com/orgs/kubernetes/teams/sig-scalability-bugs) | Bug Triage and Troubleshooting | -| @kubernetes/sig-scalability-feature-requests | [link](https://github.com/orgs/kubernetes/teams/sig-scalability-feature-requests) | Feature Requests | -| @kubernetes/sig-scalability-misc | [link](https://github.com/orgs/kubernetes/teams/sig-scalability-misc) | General Discussion | -| @kubernetes/sig-scalability-pr-reviews | [link](https://github.com/orgs/kubernetes/teams/sig-scalability-pr-reviews) | PR Reviews | -| @kubernetes/sig-scalability-proprosals | [link](https://github.com/orgs/kubernetes/teams/sig-scalability-proprosals) | Design Proposals | -| @kubernetes/sig-scalability-test-failures | [link](https://github.com/orgs/kubernetes/teams/sig-scalability-test-failures) | Test Failures and Triage | - +The following [subprojects][subproject-definition] are owned by sig-scalability: +### kubernetes-scalability-and-performance-tests-and-validation +[Described below](#kubernetes-scalability-and-performance-tests-and-validation) +- **Owners:** + - https://raw.githubusercontent.com/kubernetes/community/master/sig-scalability/processes/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/test/e2e/scalability/OWNERS +### kubernetes-scalability-bottlenecks-detection +[Described below](#kubernetes-scalability-bottlenecks-detection) +- **Owners:** + - https://raw.githubusercontent.com/kubernetes/community/master/sig-scalability/blogs/OWNERS +### kubernetes-scalability-definition +[Described below](#kubernetes-scalability-definition) +- **Owners:** + - https://raw.githubusercontent.com/kubernetes/community/master/sig-scalability/configs-and-limits/OWNERS + - https://raw.githubusercontent.com/kubernetes/community/master/sig-scalability/slos/OWNERS +### kubernetes-scalability-governance +[Described below](#kubernetes-scalability-governance) +- **Owners:** + - https://raw.githubusercontent.com/kubernetes/community/master/sig-scalability/governance/OWNERS +### kubernetes-scalability-test-frameworks +[Described below](#kubernetes-scalability-test-frameworks) +- **Owners:** + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/cluster/images/kubemark/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/cmd/kubemark/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/pkg/kubemark/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/test/kubemark/OWNERS + - https://raw.githubusercontent.com/kubernetes/perf-tests/master/OWNERS + - https://raw.githubusercontent.com/kubernetes/perf-tests/master/clusterloader2/OWNERS + +[subproject-definition]: https://github.com/kubernetes/community/blob/master/governance.md#subprojects <!-- BEGIN CUSTOM CONTENT --> +# Scalability Regression - Contact Points + +*Reach out to these folks if you have any inquiries about scalability regressions, e.g. +regression status, whether it should block the release or not, etc.* + +* Janek Lukasiewicz (**[@oxddr](https://github.com/oxddr)**), Google +* Krzysztof Siedlecki (**[@krzysied](https://github.com/krzysied)**), Google +* Maciej Borsz (**[@mborsz](https://github.com/mborsz)**), Google +* Matt Matejczyk (**[@mm4tt](https://github.com/mm4tt)**), Google +* Wojciech Tyczynski (**[@wojtek-t](https://github.com/wojtek-t)**), Google + ## Upcoming 2019 Meeting Dates - * 12/20/2018 - * 1/3 - * 1/17 - * 1/31 - * 2/14 - * 2/28 - * 3/14 - * 3/28 - * 4/11 - * 4/25 - * 5/9 - * 5/23 - * 6/6 - * 5/20 + * 07/04 + * 07/18 + * 08/01 + * 08/15 + * 08/29 + * 09/12 + * 09/26 + * 10/10 + * 10/24 + * 11/07 + * 11/21 + * 12/05 + * 12/19 # Details about SIG-Scalability sub-projects diff --git a/sig-scalability/slos/api_call_latency.md b/sig-scalability/slos/api_call_latency.md index 69af0f13..7e6b0785 100644 --- a/sig-scalability/slos/api_call_latency.md +++ b/sig-scalability/slos/api_call_latency.md @@ -50,6 +50,11 @@ the amount of work to do (which is number of objects of a given type in a given scope) plus some constant overhead. For better tracking of performance, we may want to define purely internal SLI of "latency per object". But that isn't in near term plans. +- To recall, SLOs are guaranteed only if thresholds defined in [thresholds file][] +are satisfied. This is particularly important for this SLO, because it limits +the number of objects that are returned by LIST calls. + +[thresholds file]: https://github.com/kubernetes/community/blob/master/sig-scalability/configs-and-limits/thresholds.md ### Caveats - The SLO has to be satisfied independently from used encoding in user-originated diff --git a/sig-scheduling/README.md b/sig-scheduling/README.md index 44fcfa2d..99e81457 100644 --- a/sig-scheduling/README.md +++ b/sig-scheduling/README.md @@ -23,49 +23,47 @@ The [charter](charter.md) defines the scope and governance of the Scheduling Spe ### Chairs The Chairs of the SIG run operations and processes governing the SIG. -* Bobby (Babak) Salamat (**[@bsalamat](https://github.com/bsalamat)**), Google +* Abdullah Gharaibeh (**[@ahg-g](https://github.com/ahg-g)**), Google * Klaus Ma (**[@k82cn](https://github.com/k82cn)**), Huawei -## Contact -* [Slack](https://kubernetes.slack.com/messages/sig-scheduling) -* [Mailing list](https://groups.google.com/forum/#!forum/kubernetes-sig-scheduling) -* [Open Community Issues/PRs](https://github.com/kubernetes/community/labels/sig%2Fscheduling) - -## Subprojects - -The following subprojects are owned by sig-scheduling: -- **cluster-capacity** - - Owners: - - https://raw.githubusercontent.com/kubernetes-incubator/cluster-capacity/master/OWNERS -- **descheduler** - - Owners: - - https://raw.githubusercontent.com/kubernetes-incubator/descheduler/master/OWNERS -- **kube-batch** - - Owners: - - https://raw.githubusercontent.com/kubernetes-sigs/kube-batch/master/OWNERS -- **poseidon** - - Owners: - - https://raw.githubusercontent.com/kubernetes-sigs/poseidon/master/OWNERS -- **scheduler** - - Owners: - - https://raw.githubusercontent.com/kubernetes/kubernetes/master/cmd/kube-scheduler/OWNERS - - https://raw.githubusercontent.com/kubernetes/kubernetes/master/pkg/scheduler/OWNERS +## Emeritus Leads -## GitHub Teams +* Bobby (Babak) Salamat (**[@bsalamat](https://github.com/bsalamat)**), Google -The below teams can be mentioned on issues and PRs in order to get attention from the right people. -Note that the links to display team membership will only work if you are a member of the org. +## Contact +- Slack: [#sig-scheduling](https://kubernetes.slack.com/messages/sig-scheduling) +- [Mailing list](https://groups.google.com/forum/#!forum/kubernetes-sig-scheduling) +- [Open Community Issues/PRs](https://github.com/kubernetes/community/labels/sig%2Fscheduling) +- GitHub Teams: + - [@kubernetes/sig-scheduling-api-reviews](https://github.com/orgs/kubernetes/teams/sig-scheduling-api-reviews) - API Changes and Reviews + - [@kubernetes/sig-scheduling-bugs](https://github.com/orgs/kubernetes/teams/sig-scheduling-bugs) - Bug Triage and Troubleshooting + - [@kubernetes/sig-scheduling-feature-requests](https://github.com/orgs/kubernetes/teams/sig-scheduling-feature-requests) - Feature Requests + - [@kubernetes/sig-scheduling-misc](https://github.com/orgs/kubernetes/teams/sig-scheduling-misc) - General Discussion + - [@kubernetes/sig-scheduling-pr-reviews](https://github.com/orgs/kubernetes/teams/sig-scheduling-pr-reviews) - PR Reviews + - [@kubernetes/sig-scheduling-proposals](https://github.com/orgs/kubernetes/teams/sig-scheduling-proposals) - Design Proposals + - [@kubernetes/sig-scheduling-test-failures](https://github.com/orgs/kubernetes/teams/sig-scheduling-test-failures) - Test Failures and Triage -| Team Name | Details | Description | -| --------- |:-------:| ----------- | -| @kubernetes/sig-scheduling-api-reviews | [link](https://github.com/orgs/kubernetes/teams/sig-scheduling-api-reviews) | API Changes and Reviews | -| @kubernetes/sig-scheduling-bugs | [link](https://github.com/orgs/kubernetes/teams/sig-scheduling-bugs) | Bug Triage and Troubleshooting | -| @kubernetes/sig-scheduling-feature-requests | [link](https://github.com/orgs/kubernetes/teams/sig-scheduling-feature-requests) | Feature Requests | -| @kubernetes/sig-scheduling-misc | [link](https://github.com/orgs/kubernetes/teams/sig-scheduling-misc) | General Discussion | -| @kubernetes/sig-scheduling-pr-reviews | [link](https://github.com/orgs/kubernetes/teams/sig-scheduling-pr-reviews) | PR Reviews | -| @kubernetes/sig-scheduling-proposals | [link](https://github.com/orgs/kubernetes/teams/sig-scheduling-proposals) | Design Proposals | -| @kubernetes/sig-scheduling-test-failures | [link](https://github.com/orgs/kubernetes/teams/sig-scheduling-test-failures) | Test Failures and Triage | +## Subprojects +The following [subprojects][subproject-definition] are owned by sig-scheduling: +### cluster-capacity +- **Owners:** + - https://raw.githubusercontent.com/kubernetes-incubator/cluster-capacity/master/OWNERS +### descheduler +- **Owners:** + - https://raw.githubusercontent.com/kubernetes-sigs/descheduler/master/OWNERS +### kube-batch +- **Owners:** + - https://raw.githubusercontent.com/kubernetes-sigs/kube-batch/master/OWNERS +### poseidon +- **Owners:** + - https://raw.githubusercontent.com/kubernetes-sigs/poseidon/master/OWNERS +### scheduler +- **Owners:** + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/cmd/kube-scheduler/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/pkg/scheduler/OWNERS + +[subproject-definition]: https://github.com/kubernetes/community/blob/master/governance.md#subprojects <!-- BEGIN CUSTOM CONTENT --> <!-- END CUSTOM CONTENT --> diff --git a/sig-service-catalog/README.md b/sig-service-catalog/README.md index 00d56f59..15951aa3 100644 --- a/sig-service-catalog/README.md +++ b/sig-service-catalog/README.md @@ -13,7 +13,7 @@ Service Catalog is a Kubernetes extension project that implements the [Open Serv The [charter](charter.md) defines the scope and governance of the Service Catalog Special Interest Group. ## Meetings -* Regular SIG Meeting: [Mondays at 13:00 PT (Pacific Time)](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit) (weekly). [Convert to your timezone](http://www.thetimezoneconverter.com/?t=13:00&tz=PT%20%28Pacific%20Time%29). +* Regular SIG Meeting: [Mondays at 9:00 PT (Pacific Time)](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit) (weekly). [Convert to your timezone](http://www.thetimezoneconverter.com/?t=9:00&tz=PT%20%28Pacific%20Time%29). * [Meeting notes and Agenda](https://docs.google.com/document/d/17xlpkoEbPR5M6P5VDzNx17q6-IPFxKyebEekCGYiIKM/edit). * [Meeting recordings](https://www.youtube.com/watch?v=ukPj1sFFkr0&list=PL69nYSiGNLP2k9ZXx9E1MvRSotFDoHUWs). @@ -23,44 +23,43 @@ The [charter](charter.md) defines the scope and governance of the Service Catalo The Chairs of the SIG run operations and processes governing the SIG. * Jonathan Berkhahn (**[@jberkhahn](https://github.com/jberkhahn)**), IBM -* Jay Boyd (**[@jboyd01](https://github.com/jboyd01)**), Red Hat -* Michael Kibbe (**[@kibbles-n-bytes](https://github.com/kibbles-n-bytes)**), Google +* Mateusz Szostok (**[@mszostok](https://github.com/mszostok)**), SAP ## Emeritus Leads * Aaron Schlesinger (**[@arschles](https://github.com/arschles)**), Microsoft * Carolyn Van Slyck (**[@carolynvs](https://github.com/carolynvs)**), Microsoft * Doug Davis (**[@duglin](https://github.com/duglin)**), IBM +* Jay Boyd (**[@jboyd01](https://github.com/jboyd01)**), Red Hat +* Michael Kibbe (**[@kibbles-n-bytes](https://github.com/kibbles-n-bytes)**), Google * Paul Morie (**[@pmorie](https://github.com/pmorie)**), Red Hat * Ville Aikas (**[@vaikas-google](https://github.com/vaikas-google)**), Google ## Contact -* [Slack](https://kubernetes.slack.com/messages/sig-service-catalog) -* [Mailing list](https://groups.google.com/forum/#!forum/kubernetes-sig-service-catalog) -* [Open Community Issues/PRs](https://github.com/kubernetes/community/labels/sig%2Fservice-catalog) +- Slack: [#sig-service-catalog](https://kubernetes.slack.com/messages/sig-service-catalog) +- [Mailing list](https://groups.google.com/forum/#!forum/kubernetes-sig-service-catalog) +- [Open Community Issues/PRs](https://github.com/kubernetes/community/labels/sig%2Fservice-catalog) +- GitHub Teams: + - [@kubernetes/sig-service-catalog-api-reviews](https://github.com/orgs/kubernetes/teams/sig-service-catalog-api-reviews) - API Changes and Reviews + - [@kubernetes/sig-service-catalog-bugs](https://github.com/orgs/kubernetes/teams/sig-service-catalog-bugs) - Bug Triage and Troubleshooting + - [@kubernetes/sig-service-catalog-feature-requests](https://github.com/orgs/kubernetes/teams/sig-service-catalog-feature-requests) - Feature Requests + - [@kubernetes/sig-service-catalog-misc](https://github.com/orgs/kubernetes/teams/sig-service-catalog-misc) - General Discussion + - [@kubernetes/sig-service-catalog-pr-reviews](https://github.com/orgs/kubernetes/teams/sig-service-catalog-pr-reviews) - PR Reviews + - [@kubernetes/sig-service-catalog-proposals](https://github.com/orgs/kubernetes/teams/sig-service-catalog-proposals) - Design Proposals + - [@kubernetes/sig-service-catalog-test-failures](https://github.com/orgs/kubernetes/teams/sig-service-catalog-test-failures) - Test Failures and Triage ## Subprojects -The following subprojects are owned by sig-service-catalog: -- **service-catalog** - - Owners: - - https://raw.githubusercontent.com/kubernetes-incubator/service-catalog/master/OWNERS - -## GitHub Teams - -The below teams can be mentioned on issues and PRs in order to get attention from the right people. -Note that the links to display team membership will only work if you are a member of the org. - -| Team Name | Details | Description | -| --------- |:-------:| ----------- | -| @kubernetes/sig-service-catalog-api-reviews | [link](https://github.com/orgs/kubernetes/teams/sig-service-catalog-api-reviews) | API Changes and Reviews | -| @kubernetes/sig-service-catalog-bugs | [link](https://github.com/orgs/kubernetes/teams/sig-service-catalog-bugs) | Bug Triage and Troubleshooting | -| @kubernetes/sig-service-catalog-feature-requests | [link](https://github.com/orgs/kubernetes/teams/sig-service-catalog-feature-requests) | Feature Requests | -| @kubernetes/sig-service-catalog-misc | [link](https://github.com/orgs/kubernetes/teams/sig-service-catalog-misc) | General Discussion | -| @kubernetes/sig-service-catalog-pr-reviews | [link](https://github.com/orgs/kubernetes/teams/sig-service-catalog-pr-reviews) | PR Reviews | -| @kubernetes/sig-service-catalog-proposals | [link](https://github.com/orgs/kubernetes/teams/sig-service-catalog-proposals) | Design Proposals | -| @kubernetes/sig-service-catalog-test-failures | [link](https://github.com/orgs/kubernetes/teams/sig-service-catalog-test-failures) | Test Failures and Triage | +The following [subprojects][subproject-definition] are owned by sig-service-catalog: +### minibroker +- **Owners:** + - https://raw.githubusercontent.com/kubernetes-sigs/minibroker/master/OWNERS +### service-catalog +- **Owners:** + - https://raw.githubusercontent.com/kubernetes-sigs/go-open-service-broker-client/master/OWNERS + - https://raw.githubusercontent.com/kubernetes-sigs/service-catalog/master/OWNERS +[subproject-definition]: https://github.com/kubernetes/community/blob/master/governance.md#subprojects <!-- BEGIN CUSTOM CONTENT --> <!-- END CUSTOM CONTENT --> diff --git a/sig-storage/contributing.md b/sig-storage/CONTRIBUTING.md index 7d85fe7d..7d85fe7d 100644 --- a/sig-storage/contributing.md +++ b/sig-storage/CONTRIBUTING.md diff --git a/sig-storage/README.md b/sig-storage/README.md index 892fc534..64713917 100644 --- a/sig-storage/README.md +++ b/sig-storage/README.md @@ -26,70 +26,65 @@ The Chairs of the SIG run operations and processes governing the SIG. * Saad Ali (**[@saad-ali](https://github.com/saad-ali)**), Google ## Contact -* [Slack](https://kubernetes.slack.com/messages/sig-storage) -* [Mailing list](https://groups.google.com/forum/#!forum/kubernetes-sig-storage) -* [Open Community Issues/PRs](https://github.com/kubernetes/community/labels/sig%2Fstorage) +- Slack: [#sig-storage](https://kubernetes.slack.com/messages/sig-storage) +- [Mailing list](https://groups.google.com/forum/#!forum/kubernetes-sig-storage) +- [Open Community Issues/PRs](https://github.com/kubernetes/community/labels/sig%2Fstorage) +- GitHub Teams: + - [@kubernetes/sig-storage-api-reviews](https://github.com/orgs/kubernetes/teams/sig-storage-api-reviews) - API Changes and Reviews + - [@kubernetes/sig-storage-bugs](https://github.com/orgs/kubernetes/teams/sig-storage-bugs) - Bug Triage and Troubleshooting + - [@kubernetes/sig-storage-feature-requests](https://github.com/orgs/kubernetes/teams/sig-storage-feature-requests) - Feature Requests + - [@kubernetes/sig-storage-misc](https://github.com/orgs/kubernetes/teams/sig-storage-misc) - General Discussion + - [@kubernetes/sig-storage-pr-reviews](https://github.com/orgs/kubernetes/teams/sig-storage-pr-reviews) - PR Reviews + - [@kubernetes/sig-storage-proposals](https://github.com/orgs/kubernetes/teams/sig-storage-proposals) - Design Proposals + - [@kubernetes/sig-storage-test-failures](https://github.com/orgs/kubernetes/teams/sig-storage-test-failures) - Test Failures and Triage ## Subprojects -The following subprojects are owned by sig-storage: -- **external-storage** - - Owners: - - https://raw.githubusercontent.com/kubernetes-incubator/external-storage/master/OWNERS - - https://raw.githubusercontent.com/kubernetes-sigs/sig-storage-lib-external-provisioner/master/OWNERS - - https://raw.githubusercontent.com/kubernetes-sigs/sig-storage-local-static-provisioner/master/OWNERS -- **git-sync** - - Owners: - - https://raw.githubusercontent.com/kubernetes/git-sync/master/OWNERS -- **kubernetes-csi** - - Owners: - - https://raw.githubusercontent.com/kubernetes-csi/cluster-driver-registrar/master/OWNERS - - https://raw.githubusercontent.com/kubernetes-csi/csi-driver-flex/master/OWNERS - - https://raw.githubusercontent.com/kubernetes-csi/csi-driver-host-path/master/OWNERS - - https://raw.githubusercontent.com/kubernetes-csi/csi-driver-image-populator/master/OWNERS - - https://raw.githubusercontent.com/kubernetes-csi/csi-driver-iscsi/master/OWNERS - - https://raw.githubusercontent.com/kubernetes-csi/csi-driver-nfs/master/OWNERS - - https://raw.githubusercontent.com/kubernetes-csi/csi-lib-fc/master/OWNERS - - https://raw.githubusercontent.com/kubernetes-csi/csi-lib-iscsi/master/OWNERS - - https://raw.githubusercontent.com/kubernetes-csi/csi-lib-utils/master/OWNERS - - https://raw.githubusercontent.com/kubernetes-csi/csi-release-tools/master/OWNERS - - https://raw.githubusercontent.com/kubernetes-csi/csi-test/master/OWNERS - - https://raw.githubusercontent.com/kubernetes-csi/docs/master/OWNERS - - https://raw.githubusercontent.com/kubernetes-csi/driver-registrar/master/OWNERS - - https://raw.githubusercontent.com/kubernetes-csi/drivers/master/OWNERS - - https://raw.githubusercontent.com/kubernetes-csi/external-attacher/master/OWNERS - - https://raw.githubusercontent.com/kubernetes-csi/external-provisioner/master/OWNERS - - https://raw.githubusercontent.com/kubernetes-csi/external-resizer/master/OWNERS - - https://raw.githubusercontent.com/kubernetes-csi/external-snapshotter/master/OWNERS - - https://raw.githubusercontent.com/kubernetes-csi/kubernetes-csi.github.io/master/OWNERS - - https://raw.githubusercontent.com/kubernetes-csi/livenessprobe/master/OWNERS - - https://raw.githubusercontent.com/kubernetes-csi/node-driver-registrar/master/OWNERS - - https://raw.githubusercontent.com/kubernetes/csi-api/master/OWNERS - - https://raw.githubusercontent.com/kubernetes/csi-translation-lib/master/OWNERS - - https://raw.githubusercontent.com/kubernetes/kubernetes/master/staging/src/k8s.io/csi-api/OWNERS - - https://raw.githubusercontent.com/kubernetes/kubernetes/master/staging/src/k8s.io/csi-translation-lib/OWNERS -- **nfs-provisioner** - - Owners: - - https://raw.githubusercontent.com/kubernetes-incubator/nfs-provisioner/master/OWNERS -- **volumes** - - Owners: - - https://raw.githubusercontent.com/kubernetes/kubernetes/master/pkg/volume/OWNERS - -## GitHub Teams - -The below teams can be mentioned on issues and PRs in order to get attention from the right people. -Note that the links to display team membership will only work if you are a member of the org. - -| Team Name | Details | Description | -| --------- |:-------:| ----------- | -| @kubernetes/sig-storage-api-reviews | [link](https://github.com/orgs/kubernetes/teams/sig-storage-api-reviews) | API Changes and Reviews | -| @kubernetes/sig-storage-bugs | [link](https://github.com/orgs/kubernetes/teams/sig-storage-bugs) | Bug Triage and Troubleshooting | -| @kubernetes/sig-storage-feature-requests | [link](https://github.com/orgs/kubernetes/teams/sig-storage-feature-requests) | Feature Requests | -| @kubernetes/sig-storage-misc | [link](https://github.com/orgs/kubernetes/teams/sig-storage-misc) | General Discussion | -| @kubernetes/sig-storage-pr-reviews | [link](https://github.com/orgs/kubernetes/teams/sig-storage-pr-reviews) | PR Reviews | -| @kubernetes/sig-storage-proposals | [link](https://github.com/orgs/kubernetes/teams/sig-storage-proposals) | Design Proposals | -| @kubernetes/sig-storage-test-failures | [link](https://github.com/orgs/kubernetes/teams/sig-storage-test-failures) | Test Failures and Triage | - +The following [subprojects][subproject-definition] are owned by sig-storage: +### external-storage +- **Owners:** + - https://raw.githubusercontent.com/kubernetes-incubator/external-storage/master/OWNERS + - https://raw.githubusercontent.com/kubernetes-sigs/sig-storage-lib-external-provisioner/master/OWNERS + - https://raw.githubusercontent.com/kubernetes-sigs/sig-storage-local-static-provisioner/master/OWNERS +### git-sync +- **Owners:** + - https://raw.githubusercontent.com/kubernetes/git-sync/master/OWNERS +### kubernetes-csi +- **Owners:** + - https://raw.githubusercontent.com/kubernetes-csi/cluster-driver-registrar/master/OWNERS + - https://raw.githubusercontent.com/kubernetes-csi/csi-driver-flex/master/OWNERS + - https://raw.githubusercontent.com/kubernetes-csi/csi-driver-host-path/master/OWNERS + - https://raw.githubusercontent.com/kubernetes-csi/csi-driver-image-populator/master/OWNERS + - https://raw.githubusercontent.com/kubernetes-csi/csi-driver-iscsi/master/OWNERS + - https://raw.githubusercontent.com/kubernetes-csi/csi-driver-nfs/master/OWNERS + - https://raw.githubusercontent.com/kubernetes-csi/csi-lib-fc/master/OWNERS + - https://raw.githubusercontent.com/kubernetes-csi/csi-lib-iscsi/master/OWNERS + - https://raw.githubusercontent.com/kubernetes-csi/csi-lib-utils/master/OWNERS + - https://raw.githubusercontent.com/kubernetes-csi/csi-proxy/master/OWNERS + - https://raw.githubusercontent.com/kubernetes-csi/csi-release-tools/master/OWNERS + - https://raw.githubusercontent.com/kubernetes-csi/csi-test/master/OWNERS + - https://raw.githubusercontent.com/kubernetes-csi/docs/master/OWNERS + - https://raw.githubusercontent.com/kubernetes-csi/driver-registrar/master/OWNERS + - https://raw.githubusercontent.com/kubernetes-csi/drivers/master/OWNERS + - https://raw.githubusercontent.com/kubernetes-csi/external-attacher/master/OWNERS + - https://raw.githubusercontent.com/kubernetes-csi/external-provisioner/master/OWNERS + - https://raw.githubusercontent.com/kubernetes-csi/external-resizer/master/OWNERS + - https://raw.githubusercontent.com/kubernetes-csi/external-snapshotter/master/OWNERS + - https://raw.githubusercontent.com/kubernetes-csi/kubernetes-csi.github.io/master/OWNERS + - https://raw.githubusercontent.com/kubernetes-csi/livenessprobe/master/OWNERS + - https://raw.githubusercontent.com/kubernetes-csi/node-driver-registrar/master/OWNERS + - https://raw.githubusercontent.com/kubernetes/csi-api/master/OWNERS + - https://raw.githubusercontent.com/kubernetes/csi-translation-lib/master/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/staging/src/k8s.io/csi-api/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/staging/src/k8s.io/csi-translation-lib/OWNERS +### nfs-provisioner +- **Owners:** + - https://raw.githubusercontent.com/kubernetes-incubator/nfs-provisioner/master/OWNERS +### volumes +- **Owners:** + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/pkg/volume/OWNERS + +[subproject-definition]: https://github.com/kubernetes/community/blob/master/governance.md#subprojects <!-- BEGIN CUSTOM CONTENT --> ## Details @@ -102,7 +97,7 @@ We hold a public meeting every two weeks, on Thursdays at 9 AM (PT). * Recordings of past meetings: https://www.youtube.com/playlist?list=PLb1_clREIGYVaqvKaUsVyXxjfcSQDBnmB ### Contributing -Interested in contributing to storage features in Kubernetes? [Please read our guide for new contributors](/sig-storage/contributing.md) +Interested in contributing to storage features in Kubernetes? [Please read our guide for new contributors](/sig-storage/CONTRIBUTING.md) ### Links * Public Slack Channel: https://kubernetes.slack.com/messages/sig-storage/details/ diff --git a/sig-testing/README.md b/sig-testing/README.md index d4c4d7fb..6f276686 100644 --- a/sig-testing/README.md +++ b/sig-testing/README.md @@ -13,7 +13,7 @@ Interested in how we can most effectively test Kubernetes. We're interested spec The [charter](charter.md) defines the scope and governance of the Testing Special Interest Group. ## Meetings -* Regular SIG Meeting: [Tuesdays at 13:00 PT (Pacific Time)](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit) (weekly). [Convert to your timezone](http://www.thetimezoneconverter.com/?t=13:00&tz=PT%20%28Pacific%20Time%29). +* SIG Testing Office Hours: [Tuesdays at 10:00 PT (Pacific Time)](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit) (bi-weekly starting Tuesday August 13, 2019). [Convert to your timezone](http://www.thetimezoneconverter.com/?t=10:00&tz=PT%20%28Pacific%20Time%29). * [Meeting notes and Agenda](https://bit.ly/k8s-sig-testing-notes). * [Meeting recordings](https://bit.ly/k8s-sig-testing-videos). @@ -28,66 +28,75 @@ The Chairs of the SIG run operations and processes governing the SIG. * Timothy St. Clair (**[@timothysc](https://github.com/timothysc)**), VMware ## Contact -* [Slack](https://kubernetes.slack.com/messages/sig-testing) -* [Mailing list](https://groups.google.com/forum/#!forum/kubernetes-sig-testing) -* [Open Community Issues/PRs](https://github.com/kubernetes/community/labels/sig%2Ftesting) +- Slack: [#sig-testing](https://kubernetes.slack.com/messages/sig-testing) +- [Mailing list](https://groups.google.com/forum/#!forum/kubernetes-sig-testing) +- [Open Community Issues/PRs](https://github.com/kubernetes/community/labels/sig%2Ftesting) +- GitHub Teams: + - [@kubernetes/sig-testing](https://github.com/orgs/kubernetes/teams/sig-testing) - General Discussion + - [@kubernetes/sig-testing-pr-reviews](https://github.com/orgs/kubernetes/teams/sig-testing-pr-reviews) - PR Reviews ## Subprojects -The following subprojects are owned by sig-testing: -- **boskos** - - Description: Boskos is a resource manager service that handles different kinds of resources and transitions between different states. We use it on the Kubernetes project to manage pools of GCP projects for CI/CD. - - Owners: - - https://raw.githubusercontent.com/kubernetes/test-infra/master/boskos/OWNERS -- **gopherage** - - Description: Gopherage is a tool for manipulating Go coverage files. We use it on the Kubernetes project to report on code coverage due to e2e tests - - Owners: - - https://raw.githubusercontent.com/kubernetes/test-infra/master/gopherage/OWNERS -- **gubernator** - - Description: Gubernator is a frontend for displaying Kubernetes test results stored in GCS. See gubernator.k8s.io to see it in action for the Kubernetes project. - - Owners: - - https://raw.githubusercontent.com/kubernetes/test-infra/master/gubernator/OWNERS -- **kind** - - Description: Kubernetes IN Docker. Run Kubernetes test clusters on your local machine using Docker containers as nodes. - - Owners: - - https://raw.githubusercontent.com/kubernetes-sigs/kind/master/OWNERS - - Contact - - Slack: [#kind](https://kubernetes.slack.com/messages/kind) - - Meetings: - - sigs.k8s.io/kind bi-weekly meeting: [Mondays at 11:00 PT (Pacific Time)](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit) (bi-weekly). [Convert to your timezone](http://www.thetimezoneconverter.com/?t=11:00&tz=PT%20%28Pacific%20Time%29). - - [Meeting notes and Agenda](https://docs.google.com/document/d/1b9Ppm7ZT_tMWRs5Ph1zGJJKb5nF9c3ZHzMwg1olJIrc/edit). - - [Meeting recordings](https://bit.ly/k8s-sig-testing-videos). -- **prow** - - Description: Prow is a CI/CD system based on Kubernetes. See prow.k8s.io to see it in action for the Kubernetes project - - Owners: - - https://raw.githubusercontent.com/kubernetes/test-infra/master/prow/OWNERS - - Contact - - Slack: [#prow](https://kubernetes.slack.com/messages/prow) -- **test-infra** - - Description: Miscellaneous tools and configuration to run the testing infrastructure for the Kubernetes project - - Owners: - - https://raw.githubusercontent.com/kubernetes/test-infra/master/OWNERS -- **testing-commons** - - Description: The Testing Commons is a subproject within the Kubernetes sig-testing community interested code structure, layout, and execution of common test code used throughout the kubernetes project - - Owners: - - https://raw.githubusercontent.com/kubernetes-sigs/testing_frameworks/master/OWNERS - - https://raw.githubusercontent.com/kubernetes/kubernetes/master/test/OWNERS - - Contact - - Slack: [#testing-commons](https://kubernetes.slack.com/messages/testing-commons) - - Meetings: - - Testing Commons: [Fridays at 07:30 PT (Pacific Time)](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit) (bi-weekly). [Convert to your timezone](http://www.thetimezoneconverter.com/?t=07:30&tz=PT%20%28Pacific%20Time%29). - - [Meeting notes and Agenda](https://docs.google.com/document/d/1TOC8vnmlkWw6HRNHoe5xSv5-qv7LelX6XK3UVCHuwb0/edit#heading=h.tnoevy5f439o). - -## GitHub Teams - -The below teams can be mentioned on issues and PRs in order to get attention from the right people. -Note that the links to display team membership will only work if you are a member of the org. - -| Team Name | Details | Description | -| --------- |:-------:| ----------- | -| @kubernetes/sig-testing | [link](https://github.com/orgs/kubernetes/teams/sig-testing) | General Discussion | -| @kubernetes/sig-testing-pr-reviews | [link](https://github.com/orgs/kubernetes/teams/sig-testing-pr-reviews) | PR Reviews | - +The following [subprojects][subproject-definition] are owned by sig-testing: +### boskos +Boskos is a resource manager service that handles different kinds of resources and transitions between different states. We use it on the Kubernetes project to manage pools of GCP projects for CI/CD. +- **Owners:** + - https://raw.githubusercontent.com/kubernetes/test-infra/master/boskos/OWNERS +### gopherage +Gopherage is a tool for manipulating Go coverage files. We use it on the Kubernetes project to report on code coverage due to e2e tests +- **Owners:** + - https://raw.githubusercontent.com/kubernetes/test-infra/master/gopherage/OWNERS +### gubernator +Gubernator is a frontend for displaying Kubernetes test results stored in GCS. See gubernator.k8s.io to see it in action for the Kubernetes project. +- **Owners:** + - https://raw.githubusercontent.com/kubernetes/test-infra/master/gubernator/OWNERS +### kind +Kubernetes IN Docker. Run Kubernetes test clusters on your local machine using Docker containers as nodes. +- **Owners:** + - https://raw.githubusercontent.com/kubernetes-sigs/kind/master/OWNERS +- **Contact:** + - Slack: [#kind](https://kubernetes.slack.com/messages/kind) +- **Meetings:** + - sigs.k8s.io/kind bi-weekly meeting: [Mondays at 11:00 PT (Pacific Time)](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit) (bi-weekly). [Convert to your timezone](http://www.thetimezoneconverter.com/?t=11:00&tz=PT%20%28Pacific%20Time%29). + - [Meeting notes and Agenda](https://docs.google.com/document/d/1b9Ppm7ZT_tMWRs5Ph1zGJJKb5nF9c3ZHzMwg1olJIrc/edit). + - [Meeting recordings](https://bit.ly/k8s-sig-testing-videos). +### prow +Prow is a CI/CD system based on Kubernetes. See prow.k8s.io to see it in action for the Kubernetes project +- **Owners:** + - https://raw.githubusercontent.com/kubernetes/test-infra/master/prow/OWNERS +- **Contact:** + - Slack: [#prow](https://kubernetes.slack.com/messages/prow) +### repo-infra +- **Owners:** + - https://raw.githubusercontent.com/kubernetes/repo-infra/master/OWNERS +### test-infra +Miscellaneous tools and configuration to run the testing infrastructure for the Kubernetes project +- **Owners:** + - https://raw.githubusercontent.com/kubernetes/test-infra/master/OWNERS +### testing-commons +The Testing Commons is a subproject within the Kubernetes sig-testing community interested code structure, layout, and execution of common test code used throughout the kubernetes project +- **Owners:** + - https://raw.githubusercontent.com/kubernetes-sigs/testing_frameworks/master/OWNERS + - https://raw.githubusercontent.com/kubernetes/kubernetes/master/test/OWNERS +- **Contact:** + - Slack: [#testing-commons](https://kubernetes.slack.com/messages/testing-commons) +- **Meetings:** + - Testing Commons: [Fridays at 07:30 PT (Pacific Time)](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit) (bi-weekly). [Convert to your timezone](http://www.thetimezoneconverter.com/?t=07:30&tz=PT%20%28Pacific%20Time%29). + - [Meeting notes and Agenda](https://docs.google.com/document/d/1TOC8vnmlkWw6HRNHoe5xSv5-qv7LelX6XK3UVCHuwb0/edit#heading=h.tnoevy5f439o). + +[subproject-definition]: https://github.com/kubernetes/community/blob/master/governance.md#subprojects <!-- BEGIN CUSTOM CONTENT --> +## Presentations + +| Title | Slides | Video | Speakers | +| ----- | ------ | ----- | -------- | +| KubeCon NA 2018 - SIG Testing Intro | [Slides](https://docs.google.com/presentation/d/1HOQ2df_AT-vIuz-JNaJol2oiGq84m50h9T49_5WgEaI/edit?usp=sharing) | [Video](https://www.youtube.com/watch?v=7-_O41W3FRU) | @spiffxp, @stevekuznetsov | +| KubeCon NA 2018 - SIG Testing Deep Dive | [Slides](https://static.sched.com/hosted_files/kccna18/9b/Kubecon%20Seattle%20SIG-Testing%20Deep%20Dive%20%281%29.pdf) | [Video](https://www.youtube.com/watch?v=1rwiKDTJILY) | @cjwagner, @Katharine | +| KubeCon NA 2018 - Behind Your PR: How Kubernetes Uses Kubernetes to Run Kubernetes CI | [Slides](https://static.sched.com/hosted_files/kccna18/3e/KubeCon%20Seattle%20Talk.pdf) | [Video](https://www.youtube.com/watch?v=pz0lpl6h-Gc) | @BenTheElder, @krzyzacy | +| KubeCon EU 2019 - SIG Testing Intro | [Slides](https://static.sched.com/hosted_files/kccnceu19/c8/SIG-Testing%20Intro%20Kubecon%20EU%202019.pdf) | [Video](https://www.youtube.com/watch?v=_uO5gHVTzF8) | @cjwagner, @AishSundar | +| KubeCon EU 2019 - SIG Testing Deep Dive | TBD | [Video](https://www.youtube.com/watch?v=6m9frvTxK0o) | @BenTheElder, @munnerz | +| KubeCon EU 2019 - Testing Your K8s Apps with Kind | TBD | [Video](https://www.youtube.com/watch?v=8KtmevMFfxA) | @BenTheElder, @munnerz | + + <!-- END CUSTOM CONTENT --> diff --git a/sig-testing/charter.md b/sig-testing/charter.md index d3cb74f0..7f4f0e47 100644 --- a/sig-testing/charter.md +++ b/sig-testing/charter.md @@ -48,11 +48,8 @@ health of the project. ##### Ongoing Support -- The [Release Team test-infra role] is staffed by a member of SIG Testing, as - such their responsibilities are within the scope of this SIG, including - the maintenance of release jobs - We actively collaborate with SIG Contributor Experience, often producing - tooling that they are responsible for using to implement polices and + tooling that they are responsible for using to implement policies and processes that they own, e.g. the Github Administration subproject uses [peribolos] and [label_sync] to reduce the toil involved - We reserve the right to halt automation and infrastructure that we own, diff --git a/sig-ui/README.md b/sig-ui/README.md index e91f76b4..dd404028 100644 --- a/sig-ui/README.md +++ b/sig-ui/README.md @@ -13,7 +13,7 @@ Covers all things UI related. Efforts are centered around Kubernetes Dashboard: The [charter](charter.md) defines the scope and governance of the UI Special Interest Group. ## Meetings -* Regular SIG Meeting: [Thursdays at 18:00 CET (Central European Time)](https://groups.google.com/forum/#!forum/kubernetes-sig-ui) (bi-weekly). [Convert to your timezone](http://www.thetimezoneconverter.com/?t=18:00&tz=CET%20%28Central%20European%20Time%29). +* Regular SIG Meeting: [Thursdays at 09:00 PT (Pacific Time)](https://groups.google.com/forum/#!forum/kubernetes-sig-ui) (bi-weekly). [Convert to your timezone](http://www.thetimezoneconverter.com/?t=09:00&tz=PT%20%28Pacific%20Time%29). * [Meeting notes and Agenda](https://docs.google.com/document/d/1PwHFvqiShLIq8ZpoXvE3dSUnOv1ts5BTtZ7aATuKd-E/edit?usp=sharing). * [Meeting recordings](https://www.youtube.com/watch?v=r3pL8i3wPhk&list=PL69nYSiGNLP35H5MZbg9OU6pqpfWgtbLm). @@ -28,18 +28,19 @@ The Chairs of the SIG run operations and processes governing the SIG. * Marcin Maciaszczyk (**[@maciaszczykm](https://github.com/maciaszczykm)**), Loodse ## Contact -* [Slack](https://kubernetes.slack.com/messages/sig-ui) -* [Mailing list](https://groups.google.com/forum/#!forum/kubernetes-sig-ui) -* [Open Community Issues/PRs](https://github.com/kubernetes/community/labels/sig%2Fui) +- Slack: [#sig-ui](https://kubernetes.slack.com/messages/sig-ui) +- [Mailing list](https://groups.google.com/forum/#!forum/kubernetes-sig-ui) +- [Open Community Issues/PRs](https://github.com/kubernetes/community/labels/sig%2Fui) ## Subprojects -The following subprojects are owned by sig-ui: -- **dashboard** - - Owners: - - https://raw.githubusercontent.com/kubernetes-sigs/dashboard-metrics-scraper/master/OWNERS - - https://raw.githubusercontent.com/kubernetes/dashboard/master/OWNERS +The following [subprojects][subproject-definition] are owned by sig-ui: +### dashboard +- **Owners:** + - https://raw.githubusercontent.com/kubernetes-sigs/dashboard-metrics-scraper/master/OWNERS + - https://raw.githubusercontent.com/kubernetes/dashboard/master/OWNERS +[subproject-definition]: https://github.com/kubernetes/community/blob/master/governance.md#subprojects <!-- BEGIN CUSTOM CONTENT --> <!-- END CUSTOM CONTENT --> diff --git a/sig-usability/OWNERS b/sig-usability/OWNERS new file mode 100644 index 00000000..748db310 --- /dev/null +++ b/sig-usability/OWNERS @@ -0,0 +1,8 @@ +# See the OWNERS docs at https://go.k8s.io/owners + +reviewers: + - sig-usability-leads +approvers: + - sig-usability-leads +labels: + - sig/usability diff --git a/sig-usability/README.md b/sig-usability/README.md new file mode 100644 index 00000000..b776c115 --- /dev/null +++ b/sig-usability/README.md @@ -0,0 +1,52 @@ +<!--- +This is an autogenerated file! + +Please do not edit this file directly, but instead make changes to the +sigs.yaml file in the project root. + +To understand how this file is generated, see https://git.k8s.io/community/generator/README.md +---> +# Usability Special Interest Group + +The scope of SIG usability is the core end-user usability of the Kubernetes project. This covers topics like user experience and accessibility. The goals of the SIG are to ensure that the Kubernetes project is maximally usable by users of a variety of different backgrounds and abilities. Examples of efforts include internationalization and accessibility of documentation. + +The [charter](charter.md) defines the scope and governance of the Usability Special Interest Group. + +## Meetings +* Regular SIG Meeting: [Tuesdays at 14:00 PT (Pacific Time)](https://zoom.us/j/3832562240) (every third week). [Convert to your timezone](http://www.thetimezoneconverter.com/?t=14:00&tz=PT%20%28Pacific%20Time%29). + * [Meeting notes and Agenda](https://docs.google.com/document/d/1gJHgt8RpH4TvqPuC8NtR31-CMqtTYkHy_loxubHq8lg/). + * [Meeting recordings](https://www.youtube.com/playlist?list=PL69nYSiGNLP0eY-U8DVJWHBwKvMDEtOxx). + +## Leadership + +### Chairs +The Chairs of the SIG run operations and processes governing the SIG. + +* Rajakavitha Kodhandapani (**[@Rajakavitha1](https://github.com/Rajakavitha1)**), The Linux Foundation +* Himanshu Pandey (**[@hpandeycodeit](https://github.com/hpandeycodeit)**), Pivotal +* Tasha Drew (**[@tashimi](https://github.com/tashimi)**), VMware +* Vallery Lancey (**[@vllry](https://github.com/vllry)**), Lyft + +## Contact +- Slack: [#sig-usability](https://kubernetes.slack.com/messages/sig-usability) +- [Mailing list](https://groups.google.com/forum/#!forum/kubernetes-sig-usability) +- [Open Community Issues/PRs](https://github.com/kubernetes/community/labels/sig%2Fusability) +- GitHub Teams: + - [@kubernetes/sig-usability-api-reviews](https://github.com/orgs/kubernetes/teams/sig-usability-api-reviews) - API Changes and Reviews + - [@kubernetes/sig-usability-bugs](https://github.com/orgs/kubernetes/teams/sig-usability-bugs) - Bug Triage and Troubleshooting + - [@kubernetes/sig-usability-feature-requests](https://github.com/orgs/kubernetes/teams/sig-usability-feature-requests) - Feature Requests + - [@kubernetes/sig-usability-misc](https://github.com/orgs/kubernetes/teams/sig-usability-misc) - General Discussion + - [@kubernetes/sig-usability-pr-reviews](https://github.com/orgs/kubernetes/teams/sig-usability-pr-reviews) - PR Reviews + - [@kubernetes/sig-usability-proposals](https://github.com/orgs/kubernetes/teams/sig-usability-proposals) - Design Proposals + +## Subprojects + +The following [subprojects][subproject-definition] are owned by sig-usability: +### sig-usability +- **Owners:** + - https://raw.githubusercontent.com/kubernetes-sigs/sig-usability/master/OWNERS + +[subproject-definition]: https://github.com/kubernetes/community/blob/master/governance.md#subprojects +<!-- BEGIN CUSTOM CONTENT --> + +<!-- END CUSTOM CONTENT --> diff --git a/sig-usability/charter.md b/sig-usability/charter.md new file mode 100644 index 00000000..cc003e98 --- /dev/null +++ b/sig-usability/charter.md @@ -0,0 +1,74 @@ +# SIG Usability Charter + +This charter adheres to the conventions described in the [Kubernetes Charter README] and uses +the Roles and Organization Management outlined in [sig-governance]. + +## Scope + +The scope of SIG usability is the core end-user usability of the Kubernetes project. This covers +topics like user experience and accessibility. The goal of SIG Usability is to facilitate adoption of +the Kubernetes project by as diverse a community of end users as possible. We do this by ensuring that +each end user’s interaction with Kubernetes, from discovery to successful production use is seamless +and positive. Examples of efforts include user research, internationalization and accessibility. + +### In scope + +#### Code, Binaries and Services + +- usability of end-user facing experiences (error messages, end-to-end tasks, etc) +- accessibility guidelines for Kubernetes community artifacts, examples include: + - internationalization of documentation in binaries and documentation + - color choices for people with color blind-ness + - ensuring compatibility with screen reader technology +- user interface design for core components with user interfaces. +- code for performing internationaization and other accessbility enablement. +- translations - https://github.com/kubernetes/kubernetes/tree/master/translations +- internationalization - https://github.com/kubernetes/kubernetes/tree/master/pkg/kubectl/util/i18n + +#### Repos +The SIG owns a `kubernetes-sigs/sig-usability` repo for the purpose of documenting: + +- Common end user profiles (aka personas) +- Ongoing list of research studies and findings +- Ongoing list of known needs for user research (ex: top stackoverflow questions) +- Curated research on usability best practices (ex: HCI research literature on interface usability, error message best practices) +- Templates for anybody to be able to conduct user research interviews + +#### Cross-cutting and Externally Facing Processes +SIG Usability will facilitate and collaborate with other SIGs on: +- giving end users channels for proving feedback on their experience +- surveys and other feedback gathering around project usability +- documenting common end user profiles (aka personas) +- documenting common end user interactions with Kubernetes (aka user journeys) +- design elements and language guidelines for Kubernetes concepts (e.g. 'reconciliation' or 'service') +- identifying opportunities for user research and best methods to achieve (qualitative and quantitative). +- tracking adherence to required guidelines such as [WCAG which is required to sell products in Europe]. +- documentation in the vein of https://www.microsoft.com/en-us/accessibility/ + +### Out of scope + +* Contributor user experience (covered by SIG-Contributor Experience) +* API Design (covered by SIG-Architecture) +* Command line tool infrastructure (covered by SIG-CLI) +* How-to guides for implementing accessible documentation (covered by SIG-Docs) + +## Roles and Organization Management + +This sig follows adheres to the Roles and Organization Management outlined in [sig-governance] +and opts-in to updates and modifications to [sig-governance]. + +### Additional responsibilities of Chairs +None + +### Deviations from [sig-governance] + +No Tech Leads (for now) + +### Subproject Creation + +Federation of Subprojects + +[sig-governance]: https://github.com/kubernetes/community/blob/master/committee-steering/governance/sig-governance.md +[sig-subprojects]: https://github.com/kubernetes/community/blob/master/sig-YOURSIG/README.md#subprojects +[Kubernetes Charter README]: https://github.com/kubernetes/community/blob/master/committee-steering/governance/README.md +[WCAG which is required to sell products in Europe]: https://www.w3.org/WAI/news/2018-09-13/WCAG-21-EN301549/ diff --git a/sig-vmware/OWNERS b/sig-vmware/OWNERS index ee784402..59fee21f 100644 --- a/sig-vmware/OWNERS +++ b/sig-vmware/OWNERS @@ -1,8 +1,8 @@ # See the OWNERS docs at https://go.k8s.io/owners reviewers: - - sig-vmware-leads + - provider-vmware approvers: - - sig-vmware-leads + - provider-vmware labels: - sig/vmware diff --git a/sig-vmware/README.md b/sig-vmware/README.md index 290a0712..4ff58276 100644 --- a/sig-vmware/README.md +++ b/sig-vmware/README.md @@ -6,22 +6,15 @@ sigs.yaml file in the project root. To understand how this file is generated, see https://git.k8s.io/community/generator/README.md ---> -# VMware Special Interest Group +# [DEPRECATED] VMware Special Interest Group -Bring together members of the VMware and Kubernetes community to maintain, support and run Kubernetes on VMware platforms. +The VMware Special Interest Group is now a subproject of [SIG Cloud Provider](https://github.com/kubernetes/community/tree/master/sig-cloud-provider). + +### (This directory is a placeholder to preserve links. Please remove after 6 months or the release of Kubernetes 1.17, whichever comes first.) + +The [charter](charter.md) defines the scope and governance of the [DEPRECATED] VMware Special Interest Group. -The [charter](charter.md) defines the scope and governance of the VMware Special Interest Group. -## Meetings -* Cloud Provider vSphere monthly syncup: [Wednesdays at 09:00 PT (Pacific Time)](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit) (monthly - first Wednesday every month). [Convert to your timezone](http://www.thetimezoneconverter.com/?t=09:00&tz=PT%20%28Pacific%20Time%29). - * [Meeting notes and Agenda](https://docs.google.com/document/d/1B0NmmKVh8Ea5hnNsbUsJC7ZyNCsq_6NXl5hRdcHlJgY/edit?usp=sharing). - * [Meeting recordings](https://www.youtube.com/playlist?list=PLutJyDdkKQIpOT4bOfuO3MEMHvU1tRqyR). -* Cluster API Provider vSphere bi-weekly syncup: [Wednesdays at 13:00 PT (Pacific Time)](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit) (bi-weekly). [Convert to your timezone](http://www.thetimezoneconverter.com/?t=13:00&tz=PT%20%28Pacific%20Time%29). - * [Meeting notes and Agenda](https://docs.google.com/document/d/1jQrQiOW75uWraPk4b_LWtCTHwT7EZwrWWwMdxeWOEvk/edit?usp=sharing). - * [Meeting recordings](https://www.youtube.com/playlist?list=PLutJyDdkKQIovV-AONxMa2cyv-_5LAYiu). -* Regular SIG Meeting: [Thursdays at 11:00 PT (Pacific Time)](https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit) (bi-weekly). [Convert to your timezone](http://www.thetimezoneconverter.com/?t=11:00&tz=PT%20%28Pacific%20Time%29). - * [Meeting notes and Agenda](https://docs.google.com/document/d/1RV0nVtlPoAtM0DQwNYxYCC9lHfiHpTNatyv4bek6XtA/edit?usp=sharing). - * [Meeting recordings](https://www.youtube.com/playlist?list=PLutJyDdkKQIqKv-Zq8WbyibQtemChor9y). ## Leadership @@ -36,16 +29,6 @@ The Chairs of the SIG run operations and processes governing the SIG. * [Mailing list](https://groups.google.com/forum/#!forum/kubernetes-sig-vmware) * [Open Community Issues/PRs](https://github.com/kubernetes/community/labels/sig%2Fvmware) -## Subprojects - -The following subprojects are owned by sig-vmware: -- **cluster-api-provider-vsphere** - - Owners: - - https://raw.githubusercontent.com/kubernetes-sigs/cluster-api-provider-vsphere/master/OWNERS -- **vsphere-csi-driver** - - Owners: - - https://raw.githubusercontent.com/kubernetes-sigs/vsphere-csi-driver/master/OWNERS - ## GitHub Teams The below teams can be mentioned on issues and PRs in order to get attention from the right people. @@ -64,7 +47,4 @@ Note that the links to display team membership will only work if you are a membe <!-- BEGIN CUSTOM CONTENT --> -## About the cloud-provider-vsphere subproject -The `cloud-provider-vsphere` subproject is now hosted under the new [SIG Cloud Provider](https://github.com/kubernetes/community/blob/master/sig-cloud-provider/README.md). - <!-- END CUSTOM CONTENT --> diff --git a/sig-wg-lifecycle.md b/sig-wg-lifecycle.md index 9e5aeef3..6f6de21e 100644 --- a/sig-wg-lifecycle.md +++ b/sig-wg-lifecycle.md @@ -26,7 +26,7 @@ Out of scope for this document: [subproject] creation. - [ ] Send an email to the stakeholder SIG mailing lists and steering committee with the sigs.yaml pull request ### Prerequisites for a UG -- [ ] Read [ug-governance.md] +- [ ] Read the [documentation on user group governance](committee-steering/governance/ug-governance.md) - [ ] Require to have 2 Chairs to start a User Group. - [ ] Require to have at least 2 members other than chairs to be a part of the User Group. - [ ] Requires at least 2 sponsors from steering or lazy consensus (In case of no objection within 7 week days). @@ -74,7 +74,7 @@ Each one of these has a linked canonical source guideline from set up to moderat - [ ] Create a shared calendar and schedule your weekly/biweekly/triweekly weeks [update meetings] - This calendar creation process will allow all of your leads to edit SIG/WG Meetings. This is important as we all change jobs, email addresses, and take breaks from the project. Shared calendars will also provide consistency with contributors looking for your subproject meetings, office hours, and anything else that the SIG/WGs contributors should know about. -## [Retirement] +## [Retirement] (merging or disbandment) Sometimes it might be necessary to sunset a SIG or Working Group. SIGs/WGs may also merge with an existing SIG/WG if deemed appropriate, and would save project overhead in the long run. Working Groups in particular are more ephemeral than SIGs, so this process should be followed when the Working Group has accomplished it's mission. @@ -125,7 +125,7 @@ Sometimes it might be necessary to sunset a SIG or Working Group. SIGs/WGs may a [moderation.md]: /communication/moderation.md [GoogleGroups]: /communication/mailing-list-guidelines.md [slack-guidelines.md]: /communication/slack-guidelines.md -[youtube-guidelines.md]: /communication/youtube-guidelines.md +[youtube-guidelines.md]: /communication/youtube/youtube-guidelines.md [zoom-guidelines.md]: /communication/zoom-guidelines.md [discuss-guidelines.md]: /communication/discuss-guidelines.md [Thursday community updates]: /events/community-meeting.md diff --git a/sig-windows/README.md b/sig-windows/README.md index 78689cbb..d0a9d78e 100644 --- a/sig-windows/README.md +++ b/sig-windows/README.md @@ -22,38 +22,39 @@ The [charter](charter.md) defines the scope and governance of the Windows Specia ### Chairs The Chairs of the SIG run operations and processes governing the SIG. +* Patrick Lang (**[@PatrickLang](https://github.com/PatrickLang)**), Microsoft * Michael Michael (**[@michmike](https://github.com/michmike)**), VMware -* Patrick Lang (**[@patricklang](https://github.com/patricklang)**), Microsoft -## Contact -* [Slack](https://kubernetes.slack.com/messages/sig-windows) -* [Mailing list](https://groups.google.com/forum/#!forum/kubernetes-sig-windows) -* [Open Community Issues/PRs](https://github.com/kubernetes/community/labels/sig%2Fwindows) - -## Subprojects +### Technical Leads +The Technical Leads of the SIG establish new subprojects, decommission existing +subprojects, and resolve cross-subproject technical issues and decisions. -The following subprojects are owned by sig-windows: -- **windows-gmsa** - - Owners: - - https://raw.githubusercontent.com/kubernetes-sigs/windows-gmsa/master/OWNERS -- **windows-testing** - - Owners: - - https://raw.githubusercontent.com/kubernetes-sigs/windows-testing/master/OWNERS -- **windows-tools** - - Owners: - - https://raw.githubusercontent.com/kubernetes-sigs/sig-windows-tools/master/OWNERS +* Ben Moss (**[@benmoss](https://github.com/benmoss)**), Pivotal +* Deep Debroy (**[@ddebroy](https://github.com/ddebroy)**), Docker -## GitHub Teams - -The below teams can be mentioned on issues and PRs in order to get attention from the right people. -Note that the links to display team membership will only work if you are a member of the org. +## Contact +- Slack: [#sig-windows](https://kubernetes.slack.com/messages/sig-windows) +- [Mailing list](https://groups.google.com/forum/#!forum/kubernetes-sig-windows) +- [Open Community Issues/PRs](https://github.com/kubernetes/community/labels/sig%2Fwindows) +- GitHub Teams: + - [@kubernetes/sig-windows-bugs](https://github.com/orgs/kubernetes/teams/sig-windows-bugs) - Bug Triage and Troubleshooting + - [@kubernetes/sig-windows-feature-requests](https://github.com/orgs/kubernetes/teams/sig-windows-feature-requests) - Feature Requests + - [@kubernetes/sig-windows-misc](https://github.com/orgs/kubernetes/teams/sig-windows-misc) - General Discussion -| Team Name | Details | Description | -| --------- |:-------:| ----------- | -| @kubernetes/sig-windows-bugs | [link](https://github.com/orgs/kubernetes/teams/sig-windows-bugs) | Bug Triage and Troubleshooting | -| @kubernetes/sig-windows-feature-requests | [link](https://github.com/orgs/kubernetes/teams/sig-windows-feature-requests) | Feature Requests | -| @kubernetes/sig-windows-misc | [link](https://github.com/orgs/kubernetes/teams/sig-windows-misc) | General Discussion | +## Subprojects +The following [subprojects][subproject-definition] are owned by sig-windows: +### windows-gmsa +- **Owners:** + - https://raw.githubusercontent.com/kubernetes-sigs/windows-gmsa/master/OWNERS +### windows-testing +- **Owners:** + - https://raw.githubusercontent.com/kubernetes-sigs/windows-testing/master/OWNERS +### windows-tools +- **Owners:** + - https://raw.githubusercontent.com/kubernetes-sigs/sig-windows-tools/master/OWNERS + +[subproject-definition]: https://github.com/kubernetes/community/blob/master/governance.md#subprojects <!-- BEGIN CUSTOM CONTENT --> ## Getting Started @@ -105,8 +105,10 @@ sigs: - https://raw.githubusercontent.com/kubernetes/apiserver/master/OWNERS - https://raw.githubusercontent.com/kubernetes/kubernetes/master/staging/src/k8s.io/apiserver/OWNERS - name: server-sdk + contact: + mailing_list: https://groups.google.com/forum/#!forum/kubebuilder owners: - - https://raw.githubusercontent.com/kubernetes-incubator/apiserver-builder-alpha/master/OWNERS + - https://raw.githubusercontent.com/kubernetes-sigs/apiserver-builder-alpha/master/OWNERS - https://raw.githubusercontent.com/kubernetes-sigs/controller-runtime/master/OWNERS - https://raw.githubusercontent.com/kubernetes-sigs/controller-tools/master/OWNERS - https://raw.githubusercontent.com/kubernetes-sigs/kubebuilder-declarative-pattern/master/OWNERS @@ -145,16 +147,16 @@ sigs: company: Samsung SDS - github: prydonius name: Adnan Abdulhussein - company: Bitnami + company: VMware meetings: - description: Regular SIG Meeting day: Monday time: "9:00" tz: PT (Pacific Time) - frequency: weekly + frequency: biweekly url: https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit archive_url: https://docs.google.com/document/d/1LZLBGW2wRDwAfdBNHJjFfk9CFoyZPcIYGWU7R1PQ3ng/edit# - recordings_url: https://www.youtube.com/watch?v=hn23Z-vL_cM&list=PL69nYSiGNLP2LMq7vznITnpd2Fk1YIZF3 + recordings_url: https://www.youtube.com/playlist?list=PL69nYSiGNLP2LMq7vznITnpd2Fk1YIZF3 contact: slack: sig-apps mailing_list: https://groups.google.com/forum/#!forum/kubernetes-sig-apps @@ -181,6 +183,9 @@ sigs: - name: examples owners: - https://raw.githubusercontent.com/kubernetes/examples/master/OWNERS + - name: execution-hook + owners: + - https://raw.githubusercontent.com/kubernetes-sigs/execution-hook/master/OWNERS - name: kompose contact: slack: kompose @@ -232,7 +237,7 @@ sigs: company: Red Hat - github: dims name: Davanum Srinivas - company: Huawei + company: VMware - github: jdumars name: Jaice Singer DuMars company: Google @@ -531,109 +536,6 @@ sigs: - name: vertical-pod-autoscaler owners: - https://raw.githubusercontent.com/kubernetes/autoscaler/master/OWNERS -- dir: sig-aws - name: AWS - mission_statement: > - Covers maintaining, supporting, and using Kubernetes hosted on AWS Cloud. - - charter_link: charter.md - label: aws - leadership: - chairs: - - github: d-nishi - name: Nishi Davidson - company: AWS - - github: justinsb - name: Justin Santa Barbara - company: Google - - github: kris-nova - name: Kris Nova - company: VMware - meetings: - - description: Regular SIG Meeting - day: Friday - time: "9:00" - tz: PT (Pacific Time) - frequency: 'biweekly 2019 start date: Jan. 11th' - url: https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit - archive_url: https://docs.google.com/document/d/1-i0xQidlXnFEP9fXHWkBxqySkXwJnrGJP9OGyP2_P14/edit - contact: - slack: sig-aws - mailing_list: https://groups.google.com/forum/#!forum/kubernetes-sig-aws - teams: - - name: sig-aws-misc - description: General Discussion - subprojects: - - name: aws-alb-ingress-controller - owners: - - https://raw.githubusercontent.com/kubernetes-sigs/aws-alb-ingress-controller/master/OWNERS - - name: aws-ebs-csi-driver - owners: - - https://raw.githubusercontent.com/kubernetes-sigs/aws-ebs-csi-driver/master/OWNERS - - name: aws-efs-csi-driver - owners: - - https://raw.githubusercontent.com/kubernetes-sigs/aws-efs-csi-driver/master/OWNERS - - name: aws-encryption-provider - owners: - - https://raw.githubusercontent.com/kubernetes-sigs/aws-encryption-provider/master/OWNERS - - name: aws-fsx-csi-driver - owners: - - https://raw.githubusercontent.com/kubernetes-sigs/aws-fsx-csi-driver/master/OWNERS - - name: aws-iam-authenticator - owners: - - https://raw.githubusercontent.com/kubernetes-sigs/aws-iam-authenticator/master/OWNERS - - name: cloud-provider-aws - owners: - - https://raw.githubusercontent.com/kubernetes/cloud-provider-aws/master/OWNERS -- dir: sig-azure - name: Azure - mission_statement: > - A Special Interest Group for building, deploying, maintaining, supporting, and - using Kubernetes on Azure. - - charter_link: charter.md - label: azure - leadership: - chairs: - - github: dstrebel - name: Dave Strebel - company: Microsoft - - github: justaugustus - name: Stephen Augustus - company: VMware - tech_leads: - - github: feiskyer - name: Pengfei Ni - company: Microsoft - - github: khenidak - name: Kal Khenidak - company: Microsoft - meetings: - - description: Regular SIG Meeting - day: Wednesday - time: "16:00" - tz: UTC - frequency: biweekly - url: https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit - archive_url: https://docs.google.com/document/d/1SpxvmOgHDhnA72Z0lbhBffrfe9inQxZkU9xqlafOW9k/edit - recordings_url: https://www.youtube.com/watch?v=yQLeUKi_dwg&list=PL69nYSiGNLP2JNdHwB8GxRs2mikK7zyc4 - contact: - slack: sig-azure - mailing_list: https://groups.google.com/forum/#!forum/kubernetes-sig-azure - teams: - - name: sig-azure - description: General Discussion - subprojects: - - name: cloud-provider-azure - owners: - - https://raw.githubusercontent.com/kubernetes/cloud-provider-azure/master/OWNERS - - name: cluster-api-provider-azure - owners: - - https://raw.githubusercontent.com/kubernetes-sigs/cluster-api-provider-azure/master/OWNERS - - name: csi-drivers-azure - owners: - - https://raw.githubusercontent.com/kubernetes-sigs/azuredisk-csi-driver/master/OWNERS - - https://raw.githubusercontent.com/kubernetes-sigs/azurefile-csi-driver/master/OWNERS - dir: sig-cli name: CLI mission_statement: > @@ -740,9 +642,13 @@ sigs: - github: andrewsykim name: Andrew Sy Kim company: VMware + - github: cheftako + name: Walter Fender + company: Google - github: hogepodge name: Chris Hoge company: OpenStack Foundation + emeritus_leads: - github: jagosan name: Jago Macleod company: Google @@ -776,9 +682,6 @@ sigs: - name: sig-cloud-providers-misc description: General Discussion subprojects: - - name: cloud-provider-alibaba-cloud - owners: - - https://raw.githubusercontent.com/kubernetes/cloud-provider-alibaba-cloud/master/OWNERS - name: cloud-provider-extraction-migration owners: - https://raw.githubusercontent.com/kubernetes-sigs/apiserver-network-proxy/master/OWNERS @@ -792,15 +695,6 @@ sigs: tz: PT (Pacific Time) frequency: weekly url: https://docs.google.com/document/d/1KLsGGzNXQbsPeELCeF_q-f0h0CEGSe20xiwvcR2NlYM/edit - - name: cloud-provider-gcp - owners: - - https://raw.githubusercontent.com/kubernetes/cloud-provider-gcp/master/OWNERS - - name: cloud-provider-openstack - owners: - - https://raw.githubusercontent.com/kubernetes/cloud-provider-openstack/master/OWNERS - - name: cloud-provider-vsphere - owners: - - https://raw.githubusercontent.com/kubernetes/cloud-provider-vsphere/master/OWNERS - name: kubernetes-cloud-provider owners: - https://raw.githubusercontent.com/kubernetes/cloud-provider-sample/master/OWNERS @@ -809,6 +703,100 @@ sigs: - https://raw.githubusercontent.com/kubernetes/kubernetes/master/pkg/cloudprovider/OWNERS - https://raw.githubusercontent.com/kubernetes/kubernetes/master/pkg/controller/cloud/OWNERS - https://raw.githubusercontent.com/kubernetes/kubernetes/master/staging/src/k8s.io/cloud-provider/OWNERS + - name: provider-alibaba-cloud + owners: + - https://raw.githubusercontent.com/kubernetes-sigs/alibaba-cloud-csi-driver/master/OWNERS + - https://raw.githubusercontent.com/kubernetes/cloud-provider-alibaba-cloud/master/OWNERS + - name: provider-aws + owners: + - https://raw.githubusercontent.com/kubernetes-sigs/aws-alb-ingress-controller/master/OWNERS + - https://raw.githubusercontent.com/kubernetes-sigs/aws-ebs-csi-driver/master/OWNERS + - https://raw.githubusercontent.com/kubernetes-sigs/aws-efs-csi-driver/master/OWNERS + - https://raw.githubusercontent.com/kubernetes-sigs/aws-encryption-provider/master/OWNERS + - https://raw.githubusercontent.com/kubernetes-sigs/aws-fsx-csi-driver/master/OWNERS + - https://raw.githubusercontent.com/kubernetes-sigs/aws-iam-authenticator/master/OWNERS + - https://raw.githubusercontent.com/kubernetes/cloud-provider-aws/master/OWNERS + meetings: + - description: Regular AWS Subproject Meeting + day: Friday + time: "9:00" + tz: PT (Pacific Time) + frequency: 'biweekly 2019 start date: Jan. 11th' + url: https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit + archive_url: https://docs.google.com/document/d/1-i0xQidlXnFEP9fXHWkBxqySkXwJnrGJP9OGyP2_P14/edit + recordings_url: https://www.youtube.com/playlist?list=PL69nYSiGNLP29DzPOBBaJi-SO3AQ_b4HC + - name: provider-azure + owners: + - https://raw.githubusercontent.com/kubernetes-sigs/azuredisk-csi-driver/master/OWNERS + - https://raw.githubusercontent.com/kubernetes-sigs/azurefile-csi-driver/master/OWNERS + - https://raw.githubusercontent.com/kubernetes-sigs/cluster-api-provider-azure/master/OWNERS + - https://raw.githubusercontent.com/kubernetes/cloud-provider-azure/master/OWNERS + meetings: + - description: Azure Subproject Meeting (First Monday) + day: Monday + time: "14:30" + tz: UTC + frequency: monthly + url: https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit + archive_url: https://docs.google.com/document/d/1SpxvmOgHDhnA72Z0lbhBffrfe9inQxZkU9xqlafOW9k/edit + recordings_url: https://www.youtube.com/watch?v=yQLeUKi_dwg&list=PL69nYSiGNLP2JNdHwB8GxRs2mikK7zyc4 + - description: Azure Subproject Meeting (Third Tuesday UTC, Monday Pacific) + day: Tuesday + time: "1:00" + tz: UTC + frequency: monthly + url: https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit + archive_url: https://docs.google.com/document/d/1SpxvmOgHDhnA72Z0lbhBffrfe9inQxZkU9xqlafOW9k/edit + recordings_url: https://www.youtube.com/watch?v=yQLeUKi_dwg&list=PL69nYSiGNLP2JNdHwB8GxRs2mikK7zyc4 + - name: provider-gcp + owners: + - https://raw.githubusercontent.com/kubernetes-sigs/gcp-compute-persistent-disk-csi-driver/master/OWNERS + - https://raw.githubusercontent.com/kubernetes-sigs/gcp-filestore-csi-driver/master/OWNERS + - https://raw.githubusercontent.com/kubernetes/cloud-provider-gcp/master/OWNERS + meetings: + - description: Regular GCP Subproject Meeting + day: Thursday + time: "16:00" + tz: UTC + frequency: biweekly + url: https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit + archive_url: https://docs.google.com/document/d/1mtmwZ4oVSSWhbEw8Lfzvc7ig84qxUpdK6uHyJp8rSGU/edit + - name: provider-ibmcloud + owners: + - https://raw.githubusercontent.com/kubernetes-sigs/cluster-api-provider-ibmcloud/master/OWNERS + meetings: + - description: Regular IBM Subproject Meeting + day: Wednesday + time: "14:00" + tz: EST + frequency: biweekly + url: https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit + archive_url: https://docs.google.com/document/d/1qd_LTu5GFaxUhSWTHigowHt3XwjJVf1L57kupj8lnwg/edit + - name: provider-openstack + owners: + - https://raw.githubusercontent.com/kubernetes/cloud-provider-openstack/master/OWNERS + meetings: + - description: Regular OpenStack Subproject Meeting + day: Wednesday + time: "08:00" + tz: PT (Pacific Time) + frequency: biweekly starting Wednesday March 20, 2019 + url: https://docs.google.com/document/d/1bW3j4hFN4D8rv2LFv-DybB3gcE5ISAaOO_OpvDCgrGg/edit + archive_url: https://docs.google.com/document/d/15UwgLbEyZyXXxVtsThcSuPiJru4CuqU9p3ttZSfTaY4/edit + recordings_url: https://www.youtube.com/watch?v=iCfUx7ilh0E&list=PL69nYSiGNLP20iTSChQ_i2QQmTBl3M7ax + - name: provider-vsphere + owners: + - https://raw.githubusercontent.com/kubernetes-sigs/vsphere-csi-driver/master/OWNERS + - https://raw.githubusercontent.com/kubernetes/cloud-provider-vsphere/master/OWNERS + meetings: + - description: Cloud Provider vSphere monthly syncup + day: Wednesday + time: "09:00" + tz: PT (Pacific Time) + frequency: monthly - first Wednesday every month + url: https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit + archive_url: https://docs.google.com/document/d/1B0NmmKVh8Ea5hnNsbUsJC7ZyNCsq_6NXl5hRdcHlJgY/edit?usp=sharing + recordings_url: https://www.youtube.com/playlist?list=PLutJyDdkKQIpOT4bOfuO3MEMHvU1tRqyR - dir: sig-cluster-lifecycle name: Cluster Lifecycle mission_statement: > @@ -839,7 +827,7 @@ sigs: tz: PT (Pacific Time) frequency: biweekly url: https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit - archive_url: https://docs.google.com/document/d/10dq54Fd-xa6P5Iy3p46VY1YTFqugGMd1PygDIpuRw6c/edit + archive_url: https://docs.google.com/document/d/1ojR0jooQaHEuz3gGW6DxcZlsws9ZX7jHPC8walm1G3A/edit recordings_url: https://www.youtube.com/playlist?list=PL69nYSiGNLP29D0nYgAGWt1ZFqS9Z7lw4 - description: Cluster API Provider Implementers' office hours (EMEA) day: Wednesday @@ -887,6 +875,13 @@ sigs: url: https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit archive_url: https://docs.google.com/document/d/1Gmc7LyCIL_148a9Tft7pdhdee0NBHdOfHS1SAF0duI4/edit recordings_url: https://www.youtube.com/playlist?list=PL69nYSiGNLP29D0nYgAGWt1ZFqS9Z7lw4 + - description: Regular SIG Meeting in China + day: Tuesday + time: "20:00" + tz: Beijing + frequency: biweekly + url: https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit + archive_url: https://shimo.im/docs/YcoaYlvRmIYcrwnd - description: etcdadm Office Hours day: Monday time: "09:00" @@ -910,7 +905,7 @@ sigs: recordings_url: https://www.youtube.com/playlist?list=PL69nYSiGNLP29D0nYgAGWt1ZFqS9Z7lw4 - description: minikube Office Hours day: Monday - time: "10:00" + time: "11:00" tz: PT (Pacific Time) frequency: biweekly url: https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit @@ -938,6 +933,7 @@ sigs: contact: slack: cluster-api owners: + - https://raw.githubusercontent.com/kubernetes-sigs/cluster-api-bootstrap-provider-kubeadm/master/OWNERS - https://raw.githubusercontent.com/kubernetes-sigs/cluster-api/master/OWNERS - name: cluster-api-provider-aws owners: @@ -945,17 +941,37 @@ sigs: - name: cluster-api-provider-digitalocean owners: - https://raw.githubusercontent.com/kubernetes-sigs/cluster-api-provider-digitalocean/master/OWNERS + - name: cluster-api-provider-docker + owners: + - https://raw.githubusercontent.com/kubernetes-sigs/cluster-api-provider-docker/master/OWNERS - name: cluster-api-provider-gcp owners: - https://raw.githubusercontent.com/kubernetes-sigs/cluster-api-provider-gcp/master/OWNERS - name: cluster-api-provider-openstack owners: - https://raw.githubusercontent.com/kubernetes-sigs/cluster-api-provider-openstack/master/OWNERS + - name: cluster-api-provider-vsphere + contact: + slack: cluster-api-vsphere + owners: + - https://raw.githubusercontent.com/kubernetes-sigs/cluster-api-provider-vsphere/master/OWNERS + meetings: + - description: Cluster API vSphere syncup meeting + day: Wednesday + time: "13:00" + tz: PT (Pacific Time) + frequency: bi-weekly + url: https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit + archive_url: https://docs.google.com/document/d/1jQrQiOW75uWraPk4b_LWtCTHwT7EZwrWWwMdxeWOEvk/edit?usp=sharing + recordings_url: https://www.youtube.com/playlist?list=PLutJyDdkKQIovV-AONxMa2cyv-_5LAYiu - name: etcdadm contact: slack: etcdadm owners: - https://raw.githubusercontent.com/kubernetes-sigs/etcdadm/master/OWNERS + - name: image-builder + owners: + - https://raw.githubusercontent.com/kubernetes-sigs/image-builder/master/OWNERS - name: kops owners: - https://raw.githubusercontent.com/kubernetes/kops/master/OWNERS @@ -979,9 +995,7 @@ sigs: - https://raw.githubusercontent.com/kubernetes/cluster-bootstrap/master/OWNERS - https://raw.githubusercontent.com/kubernetes/kubeadm/master/OWNERS - https://raw.githubusercontent.com/kubernetes/kubernetes/master/cmd/kubeadm/OWNERS - - name: kubeadm-dind-cluster - owners: - - https://raw.githubusercontent.com/kubernetes-sigs/kubeadm-dind-cluster/master/OWNERS + - https://raw.githubusercontent.com/kubernetes/system-validators/master/OWNERS - name: kubernetes-anywhere owners: - https://raw.githubusercontent.com/kubernetes/kubernetes-anywhere/master/OWNERS @@ -1026,17 +1040,11 @@ sigs: name: Garrett Rodrigues company: Google meetings: - - description: APAC SIG Meeting - day: Wednesday - time: "20:00" - tz: PT (Pacific Time) - frequency: monthly - fourth Wednesday every month - url: https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit - description: Regular SIG Meeting day: Wednesday time: "9:30" tz: PT (Pacific Time) - frequency: weekly - except fourth Wednesday every month + frequency: biweekly url: https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit archive_url: https://docs.google.com/document/d/1qf-02B7EOrItQgwXFxgqZ5qjW0mtfu5qkYIF1Hl4ZLI/ recordings_url: https://www.youtube.com/watch?v=EMGUdOKwSns&list=PL69nYSiGNLP2x_48wbOPO0vXQgNTm_xxr @@ -1058,12 +1066,25 @@ sigs: description: Test Failures and Triage subprojects: - name: community + description: Owns and manages overall community repo, including community group + documentation and operations. owners: - https://raw.githubusercontent.com/kubernetes/community/master/OWNERS - name: community-management + description: Manages operations and policy for upstream community group communication + platforms. owners: - https://raw.githubusercontent.com/kubernetes/community/master/communication/OWNERS + meetings: + - description: APAC Coordinator Meeting + day: Thursday + time: "5:00" + tz: UTC + frequency: biweekly + url: https://docs.google.com/document/d/1qf-02B7EOrItQgwXFxgqZ5qjW0mtfu5qkYIF1Hl4ZLI/edit - name: contributors-documentation + description: writes and maintains documentation around contributing to Kubernetes, + including the Contributor's Guide, Developer's Guide, and contributor website. owners: - https://raw.githubusercontent.com/kubernetes-sigs/contributor-site/master/OWNERS - https://raw.githubusercontent.com/kubernetes/community/master/contributors/guide/OWNERS @@ -1075,36 +1096,51 @@ sigs: frequency: biweekly url: https://docs.google.com/document/d/1gdFWfkrapQclZ4-z4Lx2JwqKsJjXXUOVoLhBzZiZgSk/edit - name: devstats + description: Maintains and updates https://k8s.devstats.cncf.io, including taking + requests for new charts. contact: slack: devstats owners: - https://raw.githubusercontent.com/kubernetes/community/master/sig-contributor-experience/devstats/OWNERS - name: events + description: Creates and runs contributor-focused events, such as the Contributor + Summit. Event Teams are part of this subproject. contact: slack: events owners: - https://raw.githubusercontent.com/kubernetes/community/master/events/OWNERS meetings: - - description: Contributor Summit strategy, content and planning + - description: Events Planning Subproject day: Monday - time: "9:00" + time: "10:00" tz: PT (Pacific Time) frequency: weekly + url: https://docs.google.com/document/d/1oLXv5_rM4f645jlXym_Vd7AUq7x6DV-O87E6tcW1sjU/edit - name: github-management + description: Manages and controls Github permissions, repos, and groups, including + Org Membership. owners: - https://raw.githubusercontent.com/kubernetes/community/master/github-management/OWNERS - https://raw.githubusercontent.com/kubernetes/org/master/OWNERS - name: k8s.io + description: Creates and maintains shortcuts and automation apps running in the + k8s.io domain. owners: - https://raw.githubusercontent.com/kubernetes/k8s.io/master/OWNERS - name: mentoring + description: Oversees and develops programs for helping contributors ascend the + contributor ladder, including the New Contributor Workshops, Meet Our Contributors, + and other programs. owners: - https://raw.githubusercontent.com/kubernetes-sigs/contributor-playground/master/OWNERS - https://raw.githubusercontent.com/kubernetes/community/master/mentoring/OWNERS - name: repo-infra + description: Creates and maintains tools and templates for kubernetes-namespace + repositories. owners: - https://raw.githubusercontent.com/kubernetes/repo-infra/master/OWNERS - name: slack-infra + description: Creates and maintains tools and automation for Kubernetes Slack. contact: slack: slack-infra owners: @@ -1118,12 +1154,12 @@ sigs: label: docs leadership: chairs: - - github: bradamant3 + - github: Bradamant3 name: Jennifer Rondeau company: Stripe - - github: jaredbhatti - name: Jared Bhatti - company: Google + - github: jimangel + name: Jim Angel + company: General Motors - github: zacharysarah name: Zach Corleissen company: Linux Foundation @@ -1131,6 +1167,9 @@ sigs: - github: chenopis name: Andrew Chen company: Google + - github: jaredbhatti + name: Jared Bhatti + company: Google meetings: - description: APAC SIG Meeting day: Wednesday @@ -1140,6 +1179,14 @@ sigs: url: https://docs.google.com/document/d/1zg6By77SGg90EVUrhDIhopjZlSDg2jCebU-Ks9cYx0w/edit archive_url: https://docs.google.com/document/d/1Ds87eRiNZeXwRBEbFr6Z7ukjbTow5RQcNZLaSvWWQsE/edit recordings_url: https://www.youtube.com/playlist?list=PL69nYSiGNLP3b5hlx0YV7Lo7DtckM84y8 + - description: Korean Team Meeting + day: Thursday + time: "13:00" + tz: UTC + frequency: biweekly + url: https://docs.google.com/document/d/1h5sMhBpPB5unJmBAS7KzDiPs-_eFQOu5o4UyHwMtFCA/edit + archive_url: https://docs.google.com/document/d/1h5sMhBpPB5unJmBAS7KzDiPs-_eFQOu5o4UyHwMtFCA/edit + recordings_url: https://www.youtube.com/playlist?list=PLAOP7m08QDCWZ7RwGca6cU4vzrOMw3ht7 - description: Regular SIG Meeting day: Tuesday time: "17:30" @@ -1188,89 +1235,6 @@ sigs: - name: website owners: - https://raw.githubusercontent.com/kubernetes/website/master/OWNERS -- dir: sig-gcp - name: GCP - mission_statement: > - A Special Interest Group for building, deploying, maintaining, supporting, and - using Kubernetes on the Google Cloud Platform. - - charter_link: charter.md - label: gcp - leadership: - chairs: - - github: abgworrall - name: Adam Worrall - company: Google - meetings: - - description: Regular SIG Meeting - day: Thursday - time: "16:00" - tz: UTC - frequency: biweekly - url: https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit - archive_url: https://docs.google.com/document/d/1mtmwZ4oVSSWhbEw8Lfzvc7ig84qxUpdK6uHyJp8rSGU/edit - contact: - slack: sig-gcp - mailing_list: https://groups.google.com/forum/#!forum/kubernetes-sig-gcp - teams: - - name: sig-gcp-api-reviews - description: API Changes and Reviews - - name: sig-gcp-bugs - description: Bug Triage and Troubleshooting - - name: sig-gcp-feature-requests - description: Feature Requests - - name: sig-gcp-misc - description: General Discussion - - name: sig-gcp-pr-reviews - description: PR Reviews - - name: sig-gcp-proposals - description: Design Proposals - - name: sig-gcp-test-failures - description: Test Failures and Triage - subprojects: - - name: gcp-compute-persistent-disk-csi-driver - owners: - - https://raw.githubusercontent.com/kubernetes-sigs/gcp-compute-persistent-disk-csi-driver/master/OWNERS - - name: gcp-filestore-csi-driver - owners: - - https://raw.githubusercontent.com/kubernetes-sigs/gcp-filestore-csi-driver/master/OWNERS -- dir: sig-ibmcloud - name: IBMCloud - mission_statement: > - A Special Interest Group (SIG) for building, deploying, maintaining, supporting, - and using Kubernetes on IBM Public and Private Clouds. - - charter_link: charter.md - label: ibmcloud - leadership: - chairs: - - github: khahmed - name: Khalid Ahmed - company: IBM - - github: rtheis - name: Richard Theis - company: IBM - - github: spzala - name: Sahdev Zala - company: IBM - meetings: - - description: Regular SIG Meeting - day: Wednesday - time: "14:00" - tz: EST - frequency: biweekly - url: https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit - archive_url: https://docs.google.com/document/d/1qd_LTu5GFaxUhSWTHigowHt3XwjJVf1L57kupj8lnwg/edit - contact: - slack: sig-ibmcloud - mailing_list: https://groups.google.com/forum/#!forum/kubernetes-sig-ibmcloud - teams: - - name: sig-ibmcloud-misc - description: General Discussion - subprojects: - - name: cluster-api-provider-ibmcloud - owners: - - https://raw.githubusercontent.com/kubernetes-sigs/cluster-api-provider-ibmcloud/master/OWNERS - dir: sig-instrumentation name: Instrumentation mission_statement: > @@ -1366,7 +1330,7 @@ sigs: name: Quinton Hoole company: Huawei meetings: - - description: Federation v2 Working Group + - description: Cluster Federation (KubeFed) Working Group day: Wednesday time: "7:30" tz: PT (Pacific Time) @@ -1476,7 +1440,7 @@ sigs: - https://raw.githubusercontent.com/kubernetes/api/master/networking/OWNERS - name: pod-networking owners: - - https://raw.githubusercontent.com/kubernetes-incubator/ip-masq-agent/master/OWNERS + - https://raw.githubusercontent.com/kubernetes-sigs/ip-masq-agent/master/OWNERS - https://raw.githubusercontent.com/kubernetes/kubernetes/master/pkg/kubelet/network/OWNERS - name: services owners: @@ -1544,6 +1508,7 @@ sigs: - https://raw.githubusercontent.com/kubernetes/node-api/master/OWNERS - name: node-feature-discovery owners: + - https://raw.githubusercontent.com/kubernetes-sigs/node-feature-discovery-operator/master/OWNERS - https://raw.githubusercontent.com/kubernetes-sigs/node-feature-discovery/master/OWNERS - name: node-problem-detector contact: @@ -1553,67 +1518,6 @@ sigs: - name: rktlet owners: - https://raw.githubusercontent.com/kubernetes-incubator/rktlet/master/OWNERS -- dir: sig-openstack - name: OpenStack - mission_statement: > - Coordinates the cross-community efforts of the OpenStack and Kubernetes communities. - This includes OpenStack-related contributions to Kubernetes projects with OpenStack - as: a deployment platform for Kubernetes; a service provider for Kubernetes; a - collection of applications to run on Kubernetes. - - charter_link: charter.md - label: openstack - leadership: - chairs: - - github: adisky - name: Aditi Sharma - company: NEC Technologies India - - github: chrigl - name: Christoph Glaubitz - company: iNNOVO Cloud - - github: hogepodge - name: Chris Hoge - company: OpenStack Foundation - emeritus_leads: - - github: dklyle - name: David Lyle - company: Intel - - github: idvoretskyi - name: Ihor Dvoretskyi - company: CNCF - - github: rjmorse - name: Robert Morse - company: Ticketmaster - - github: xsgordon - name: Steve Gordon - company: Red Hat - meetings: - - description: Regular SIG Meeting - day: Wednesday - time: "08:00" - tz: PT (Pacific Time) - frequency: biweekly starting Wednesday March 20, 2019 - url: https://docs.google.com/document/d/1bW3j4hFN4D8rv2LFv-DybB3gcE5ISAaOO_OpvDCgrGg/edit - archive_url: https://docs.google.com/document/d/15UwgLbEyZyXXxVtsThcSuPiJru4CuqU9p3ttZSfTaY4/edit - recordings_url: https://www.youtube.com/watch?v=iCfUx7ilh0E&list=PL69nYSiGNLP20iTSChQ_i2QQmTBl3M7ax - contact: - slack: sig-openstack - mailing_list: https://groups.google.com/forum/#!forum/kubernetes-sig-openstack - teams: - - name: sig-openstack-api-reviews - description: API Changes and Reviews - - name: sig-openstack-bugs - description: Bug Triage and Troubleshooting - - name: sig-openstack-feature-requests - description: Feature Requests - - name: sig-openstack-misc - description: General Discussion - - name: sig-openstack-pr-reviews - description: PR Reviews - - name: sig-openstack-proposals - description: Design Proposals - - name: sig-openstack-test-failures - description: Test Failures and Triage - dir: sig-pm name: PM mission_statement: > @@ -1642,19 +1546,22 @@ sigs: - github: calebamiles name: Caleb Miles company: Google - - github: idvoretskyi - name: Ihor Dvoretskyi - company: CNCF - github: jdumars name: Jaice Singer DuMars company: Google - github: justaugustus name: Stephen Augustus company: VMware + - github: lachie83 + name: Lachie Evenson + company: Microsoft emeritus_leads: - github: apsinha name: Aparna Sinha company: Google + - github: idvoretskyi + name: Ihor Dvoretskyi + company: CNCF meetings: - description: Regular SIG Meeting day: Tuesday @@ -1695,13 +1602,13 @@ sigs: company: Google meetings: - description: Regular SIG Meeting - day: Tuesday - time: "21:00" + day: Monday + time: "15:00" tz: UTC frequency: biweekly url: https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit - archive_url: https://docs.google.com/document/d/1Fu6HxXQu8wl6TwloGUEOXVzZ1rwZ72IAhglnaAMCPqA/edit?usp=sharing - recordings_url: https://www.youtube.com/watch?v=I0KbWz8MTMk&list=PL69nYSiGNLP3QKkOsDsO6A0Y1rhgP84iZ + archive_url: https://bit.ly/k8s-sig-release-meeting + recordings_url: https://bit.ly/k8s-sig-release-videos contact: slack: sig-release mailing_list: https://groups.google.com/forum/#!forum/kubernetes-sig-release @@ -1725,19 +1632,26 @@ sigs: The Licensing subproject is responsible for analyzing/reporting/remediating licensing concerns within the Kubernetes project orgs. owners: - https://raw.githubusercontent.com/kubernetes/sig-release/master/licensing/OWNERS - - name: publishing-bot - description: | - The publishing-bot publishes the contents of staging repos that live in k8s.io/kubernetes/staging to their own repositories in kubernetes - owners: - - https://raw.githubusercontent.com/kubernetes/publishing-bot/master/OWNERS - name: release-engineering description: | The Release Engineering subproject is responsible for the [process/procedures](https://github.com/kubernetes/sig-release/tree/master/release-engineering) and [tools](https://github.com/kubernetes/release) used to create/maintain Kubernetes release artifacts. + contact: + slack: release-management owners: - https://raw.githubusercontent.com/kubernetes-sigs/k8s-container-image-promoter/master/OWNERS - https://raw.githubusercontent.com/kubernetes-sigs/release-notes/master/OWNERS + - https://raw.githubusercontent.com/kubernetes/publishing-bot/master/OWNERS - https://raw.githubusercontent.com/kubernetes/release/master/OWNERS - https://raw.githubusercontent.com/kubernetes/sig-release/master/release-engineering/OWNERS + meetings: + - description: Regular SIG Meeting + day: Monday + time: "15:00" + tz: UTC + frequency: biweekly + url: https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit + archive_url: https://bit.ly/k8s-releng-meeting + recordings_url: https://bit.ly/k8s-sig-release-videos - name: release-team description: | The Kubernetes Release Team is responsible for the day-to-day work required to successfully create releases of Kubernetes. @@ -1777,9 +1691,9 @@ sigs: meetings: - description: Regular SIG Meeting day: Thursday - time: "17:30" - tz: UTC - frequency: bi-weekly + time: "18:30" + tz: Warsaw + frequency: bi-weekly ([upcoming meeting dates](#upcoming-2019-meeting-dates)) url: https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit archive_url: https://docs.google.com/a/bobsplanet.com/document/d/1hEpf25qifVWztaeZPFmjNiJvPo-5JX1z0LSvvVY5G2g/edit?usp=drive_web recordings_url: https://www.youtube.com/watch?v=NDP1uYyom28&list=PL69nYSiGNLP2X-hzNTqyELU6jYS3p10uL @@ -1838,12 +1752,16 @@ sigs: label: scheduling leadership: chairs: - - github: bsalamat - name: Bobby (Babak) Salamat + - github: ahg-g + name: Abdullah Gharaibeh company: Google - github: k82cn name: Klaus Ma company: Huawei + emeritus_leads: + - github: bsalamat + name: Bobby (Babak) Salamat + company: Google meetings: - description: 10AM PT Meeting day: Thursday @@ -1883,7 +1801,7 @@ sigs: - https://raw.githubusercontent.com/kubernetes-incubator/cluster-capacity/master/OWNERS - name: descheduler owners: - - https://raw.githubusercontent.com/kubernetes-incubator/descheduler/master/OWNERS + - https://raw.githubusercontent.com/kubernetes-sigs/descheduler/master/OWNERS - name: kube-batch owners: - https://raw.githubusercontent.com/kubernetes-sigs/kube-batch/master/OWNERS @@ -1909,12 +1827,9 @@ sigs: - github: jberkhahn name: Jonathan Berkhahn company: IBM - - github: jboyd01 - name: Jay Boyd - company: Red Hat - - github: kibbles-n-bytes - name: Michael Kibbe - company: Google + - github: mszostok + name: Mateusz Szostok + company: SAP emeritus_leads: - github: arschles name: Aaron Schlesinger @@ -1925,6 +1840,12 @@ sigs: - github: duglin name: Doug Davis company: IBM + - github: jboyd01 + name: Jay Boyd + company: Red Hat + - github: kibbles-n-bytes + name: Michael Kibbe + company: Google - github: pmorie name: Paul Morie company: Red Hat @@ -1934,7 +1855,7 @@ sigs: meetings: - description: Regular SIG Meeting day: Monday - time: "13:00" + time: "9:00" tz: PT (Pacific Time) frequency: weekly url: https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit @@ -1959,9 +1880,13 @@ sigs: - name: sig-service-catalog-test-failures description: Test Failures and Triage subprojects: + - name: minibroker + owners: + - https://raw.githubusercontent.com/kubernetes-sigs/minibroker/master/OWNERS - name: service-catalog owners: - - https://raw.githubusercontent.com/kubernetes-incubator/service-catalog/master/OWNERS + - https://raw.githubusercontent.com/kubernetes-sigs/go-open-service-broker-client/master/OWNERS + - https://raw.githubusercontent.com/kubernetes-sigs/service-catalog/master/OWNERS - dir: sig-storage name: Storage mission_statement: > @@ -2030,6 +1955,7 @@ sigs: - https://raw.githubusercontent.com/kubernetes-csi/csi-lib-fc/master/OWNERS - https://raw.githubusercontent.com/kubernetes-csi/csi-lib-iscsi/master/OWNERS - https://raw.githubusercontent.com/kubernetes-csi/csi-lib-utils/master/OWNERS + - https://raw.githubusercontent.com/kubernetes-csi/csi-proxy/master/OWNERS - https://raw.githubusercontent.com/kubernetes-csi/csi-release-tools/master/OWNERS - https://raw.githubusercontent.com/kubernetes-csi/csi-test/master/OWNERS - https://raw.githubusercontent.com/kubernetes-csi/docs/master/OWNERS @@ -2077,11 +2003,11 @@ sigs: name: Timothy St. Clair company: VMware meetings: - - description: Regular SIG Meeting + - description: SIG Testing Office Hours day: Tuesday - time: "13:00" + time: "10:00" tz: PT (Pacific Time) - frequency: weekly + frequency: bi-weekly starting Tuesday August 13, 2019 url: https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit archive_url: https://bit.ly/k8s-sig-testing-notes recordings_url: https://bit.ly/k8s-sig-testing-videos @@ -2132,6 +2058,9 @@ sigs: slack: prow owners: - https://raw.githubusercontent.com/kubernetes/test-infra/master/prow/OWNERS + - name: repo-infra + owners: + - https://raw.githubusercontent.com/kubernetes/repo-infra/master/OWNERS - name: test-infra description: | Miscellaneous tools and configuration to run the testing infrastructure for the Kubernetes project @@ -2180,8 +2109,8 @@ sigs: meetings: - description: Regular SIG Meeting day: Thursday - time: "18:00" - tz: CET (Central European Time) + time: "09:00" + tz: PT (Pacific Time) frequency: bi-weekly url: https://groups.google.com/forum/#!forum/kubernetes-sig-ui archive_url: https://docs.google.com/document/d/1PwHFvqiShLIq8ZpoXvE3dSUnOv1ts5BTtZ7aATuKd-E/edit?usp=sharing @@ -2194,74 +2123,60 @@ sigs: owners: - https://raw.githubusercontent.com/kubernetes-sigs/dashboard-metrics-scraper/master/OWNERS - https://raw.githubusercontent.com/kubernetes/dashboard/master/OWNERS -- dir: sig-vmware - name: VMware +- dir: sig-usability + name: Usability mission_statement: > - Bring together members of the VMware and Kubernetes community to maintain, support - and run Kubernetes on VMware platforms. + The scope of SIG usability is the core end-user usability of the Kubernetes project. + This covers topics like user experience and accessibility. The goals of the SIG + are to ensure that the Kubernetes project is maximally usable by users of a variety + of different backgrounds and abilities. Examples of efforts include internationalization + and accessibility of documentation. charter_link: charter.md - label: vmware + label: usability leadership: chairs: - - github: cantbewong - name: Steve Wong - company: VMware - - github: frapposelli - name: Fabio Rapposelli + - github: Rajakavitha1 + name: Rajakavitha Kodhandapani + company: The Linux Foundation + - github: hpandeycodeit + name: Himanshu Pandey + company: Pivotal + - github: tashimi + name: Tasha Drew company: VMware + - github: vllry + name: Vallery Lancey + company: Lyft meetings: - - description: Cloud Provider vSphere monthly syncup - day: Wednesday - time: "09:00" - tz: PT (Pacific Time) - frequency: monthly - first Wednesday every month - url: https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit - archive_url: https://docs.google.com/document/d/1B0NmmKVh8Ea5hnNsbUsJC7ZyNCsq_6NXl5hRdcHlJgY/edit?usp=sharing - recordings_url: https://www.youtube.com/playlist?list=PLutJyDdkKQIpOT4bOfuO3MEMHvU1tRqyR - - description: Cluster API Provider vSphere bi-weekly syncup - day: Wednesday - time: "13:00" - tz: PT (Pacific Time) - frequency: bi-weekly - url: https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit - archive_url: https://docs.google.com/document/d/1jQrQiOW75uWraPk4b_LWtCTHwT7EZwrWWwMdxeWOEvk/edit?usp=sharing - recordings_url: https://www.youtube.com/playlist?list=PLutJyDdkKQIovV-AONxMa2cyv-_5LAYiu - description: Regular SIG Meeting - day: Thursday - time: "11:00" + day: Tuesday + time: "14:00" tz: PT (Pacific Time) - frequency: bi-weekly - url: https://docs.google.com/document/d/1FQx0BPlkkl1Bn0c9ocVBxYIKojpmrS1CFP5h0DI68AE/edit - archive_url: https://docs.google.com/document/d/1RV0nVtlPoAtM0DQwNYxYCC9lHfiHpTNatyv4bek6XtA/edit?usp=sharing - recordings_url: https://www.youtube.com/playlist?list=PLutJyDdkKQIqKv-Zq8WbyibQtemChor9y + frequency: every third week + url: https://zoom.us/j/3832562240 + archive_url: https://docs.google.com/document/d/1gJHgt8RpH4TvqPuC8NtR31-CMqtTYkHy_loxubHq8lg/ + recordings_url: https://www.youtube.com/playlist?list=PL69nYSiGNLP0eY-U8DVJWHBwKvMDEtOxx contact: - slack: sig-vmware - mailing_list: https://groups.google.com/forum/#!forum/kubernetes-sig-vmware + slack: sig-usability + mailing_list: https://groups.google.com/forum/#!forum/kubernetes-sig-usability teams: - - name: sig-vmware-api-reviews + - name: sig-usability-api-reviews description: API Changes and Reviews - - name: sig-vmware-bugs + - name: sig-usability-bugs description: Bug Triage and Troubleshooting - - name: sig-vmware-feature-requests + - name: sig-usability-feature-requests description: Feature Requests - - name: sig-vmware-members - description: Release Team Members - - name: sig-vmware-misc + - name: sig-usability-misc description: General Discussion - - name: sig-vmware-pr-reviews + - name: sig-usability-pr-reviews description: PR Reviews - - name: sig-vmware-proposals + - name: sig-usability-proposals description: Design Proposals - - name: sig-vmware-test-failures - description: Test Failures and Triage subprojects: - - name: cluster-api-provider-vsphere + - name: sig-usability owners: - - https://raw.githubusercontent.com/kubernetes-sigs/cluster-api-provider-vsphere/master/OWNERS - - name: vsphere-csi-driver - owners: - - https://raw.githubusercontent.com/kubernetes-sigs/vsphere-csi-driver/master/OWNERS + - https://raw.githubusercontent.com/kubernetes-sigs/sig-usability/master/OWNERS - dir: sig-windows name: Windows mission_statement: > @@ -2272,12 +2187,19 @@ sigs: label: windows leadership: chairs: + - github: PatrickLang + name: Patrick Lang + company: Microsoft - github: michmike name: Michael Michael company: VMware - - github: patricklang - name: Patrick Lang - company: Microsoft + tech_leads: + - github: benmoss + name: Ben Moss + company: Pivotal + - github: ddebroy + name: Deep Debroy + company: Docker meetings: - description: Regular SIG Meeting day: Tuesday @@ -2342,7 +2264,7 @@ workinggroups: Develop a standard foundation (philosophy and libraries) for core Kubernetes components to build on top of. Areas to standardize include configuration (flags, ComponentConfig APIs, ...), status endpoints (healthz, configz, ...), integration points (delegated - authn/z, ...), and logging. Details are outlined in KEP 0032: https://github.com/kubernetes/enhancements/blob/master/keps/sig-cluster-lifecycle/0032-create-a-k8s-io-component-repo.md. + authn/z, ...), and logging. Details are outlined in KEP 0032: https://github.com/kubernetes/enhancements/blob/master/keps/sig-cluster-lifecycle/wgs/0032-create-a-k8s-io-component-repo.md. stakeholder_sigs: - API Machinery @@ -2351,17 +2273,18 @@ workinggroups: label: component-standard leadership: chairs: - - github: luxas - name: Lucas Käldström - company: Luxas Labs (occasionally contracting for Weaveworks) - github: mtaufen name: Michael Taufen company: Google + - github: stealthybox + name: Leigh Capili + company: Weaveworks - github: sttts name: Dr. Stefan Schimanski company: Red Hat meetings: - - description: Regular WG Meeting + - description: Regular WG Meeting (please join kubernetes-dev@googlegroups.com or + kubernetes-wg-component-standard@googlegroups.com to access the notes) day: Tuesday time: "08:30" tz: PT (Pacific Time) @@ -2391,7 +2314,7 @@ workinggroups: company: VMware - github: cindyxing name: Cindy Xing - company: Huawei + company: Microsoft - github: dejanb name: Dejan Bosanac company: Red Hat @@ -2435,7 +2358,7 @@ workinggroups: chairs: - github: dims name: Davanum Srinivas - company: Huawei + company: VMware - github: spiffxp name: Aaron Crickenberger company: Google @@ -2482,7 +2405,7 @@ workinggroups: company: VMware - github: youngnick name: Nick Young - company: Atlassian + company: VMWare meetings: - description: Regular WG Meeting day: Tuesday @@ -2546,12 +2469,16 @@ workinggroups: label: multitenancy leadership: chairs: - - github: davidopp - name: David Oppenheimer - company: Google + - github: srampal + name: Sanjeev Rampal + company: Cisco - github: tashimi name: Tasha Drew company: VMware + emeritus_leads: + - github: davidopp + name: David Oppenheimer + company: Google meetings: - description: Regular WG Meeting day: Tuesday @@ -2649,6 +2576,8 @@ workinggroups: Perform a security audit on k8s with a vendor and produce as artifacts a threat model and whitepaper outlining everything found during the audit. + stakeholder_sigs: + - Auth label: security-audit leadership: chairs: @@ -2717,10 +2646,11 @@ committees: The Kubernetes Code of Conduct Committee (CoCC) is the body that is responsible for enforcing and maintaining the Kubernetes Code of Conduct. - label: conduct + charter_link: charter.md + label: code-of-conduct leadership: chairs: - - github: bradamant3 + - github: Bradamant3 name: Jennifer Rondeau company: Stripe - github: carolynvs @@ -2756,6 +2686,9 @@ committees: - github: joelsmith name: Joel Smith company: Red Hat + - github: jonpulsifer + name: Jonathan Pulsifer + company: Shopify - github: liggitt name: Jordan Liggitt company: Google @@ -2799,7 +2732,7 @@ committees: company: Red Hat - github: dims name: Davanum Srinivas - company: Huawei + company: VMware - github: jbeda name: Joe Beda company: VMware @@ -2839,6 +2772,10 @@ committees: - name: steering-committee description: General Discussion subprojects: + - name: funding + description: Funding requests for project infrastructure, events, and consulting + owners: + - https://raw.githubusercontent.com/kubernetes/funding/master/OWNERS - name: kubernetes-template-project description: Template for starting new projects in the GitHub organizations owned by Kubernetes. diff --git a/ug-big-data/README.md b/ug-big-data/README.md index 4870ad3f..dc6ebcd9 100644 --- a/ug-big-data/README.md +++ b/ug-big-data/README.md @@ -22,20 +22,11 @@ Serve as a community resource for advising big data and data science related sof * Yinan Li (**[@liyinan926](https://github.com/liyinan926)**), Google ## Contact -* [Slack](https://kubernetes.slack.com/messages/ug-big-data) -* [Mailing list](https://groups.google.com/forum/#!forum/kubernetes-ug-big-data) -* [Open Community Issues/PRs](https://github.com/kubernetes/community/labels/ug%2Fbig-data) - - -## GitHub Teams - -The below teams can be mentioned on issues and PRs in order to get attention from the right people. -Note that the links to display team membership will only work if you are a member of the org. - -| Team Name | Details | Description | -| --------- |:-------:| ----------- | -| @kubernetes/ug-big-data | [link](https://github.com/orgs/kubernetes/teams/ug-big-data) | General Discussion | - +- Slack: [#ug-big-data](https://kubernetes.slack.com/messages/ug-big-data) +- [Mailing list](https://groups.google.com/forum/#!forum/kubernetes-ug-big-data) +- [Open Community Issues/PRs](https://github.com/kubernetes/community/labels/ug%2Fbig-data) +- GitHub Teams: + - [@kubernetes/ug-big-data](https://github.com/orgs/kubernetes/teams/ug-big-data) - General Discussion <!-- BEGIN CUSTOM CONTENT --> ### Goals diff --git a/vendor/github.com/client9/misspell/.gitignore b/vendor/github.com/client9/misspell/.gitignore deleted file mode 100644 index b1b707e3..00000000 --- a/vendor/github.com/client9/misspell/.gitignore +++ /dev/null @@ -1,34 +0,0 @@ -dist/ -bin/ -vendor/ - -# editor turds -*~ -*.gz -*.bz2 -*.csv - -# Compiled Object files, Static and Dynamic libs (Shared Objects) -*.o -*.a -*.so - -# Folders -_obj -_test - -# Architecture specific extensions/prefixes -*.[568vq] -[568vq].out - -*.cgo1.go -*.cgo2.c -_cgo_defun.c -_cgo_gotypes.go -_cgo_export.* - -_testmain.go - -*.exe -*.test -*.prof diff --git a/vendor/github.com/client9/misspell/.travis.yml b/vendor/github.com/client9/misspell/.travis.yml deleted file mode 100644 index e63e6c2b..00000000 --- a/vendor/github.com/client9/misspell/.travis.yml +++ /dev/null @@ -1,20 +0,0 @@ -sudo: required -dist: trusty -group: edge -language: go -go: - - "1.10" -git: - depth: 1 - -script: - - ./scripts/travis.sh - -# calls goreleaser when a new tag is pushed -deploy: -- provider: script - skip_cleanup: true - script: curl -sL http://git.io/goreleaser | bash - on: - tags: true - condition: $TRAVIS_OS_NAME = linux diff --git a/vendor/github.com/client9/misspell/Dockerfile b/vendor/github.com/client9/misspell/Dockerfile deleted file mode 100644 index b8ea37b4..00000000 --- a/vendor/github.com/client9/misspell/Dockerfile +++ /dev/null @@ -1,37 +0,0 @@ -FROM golang:1.10.0-alpine - -# cache buster -RUN echo 4 - -# git is needed for "go get" below -RUN apk add --no-cache git make - -# these are my standard testing / linting tools -RUN /bin/true \ - && go get -u github.com/golang/dep/cmd/dep \ - && go get -u github.com/alecthomas/gometalinter \ - && gometalinter --install \ - && rm -rf /go/src /go/pkg -# -# * SCOWL word list -# -# Downloads -# http://wordlist.aspell.net/dicts/ -# --> http://app.aspell.net/create -# - -# use en_US large size -# use regular size for others -ENV SOURCE_US_BIG http://app.aspell.net/create?max_size=70&spelling=US&max_variant=2&diacritic=both&special=hacker&special=roman-numerals&download=wordlist&encoding=utf-8&format=inline - -# should be able tell difference between English variations using this -ENV SOURCE_US http://app.aspell.net/create?max_size=60&spelling=US&max_variant=1&diacritic=both&download=wordlist&encoding=utf-8&format=inline -ENV SOURCE_GB_ISE http://app.aspell.net/create?max_size=60&spelling=GBs&max_variant=2&diacritic=both&download=wordlist&encoding=utf-8&format=inline -ENV SOURCE_GB_IZE http://app.aspell.net/create?max_size=60&spelling=GBz&max_variant=2&diacritic=both&download=wordlist&encoding=utf-8&format=inline -ENV SOURCE_CA http://app.aspell.net/create?max_size=60&spelling=CA&max_variant=2&diacritic=both&download=wordlist&encoding=utf-8&format=inline - -RUN /bin/true \ - && mkdir /scowl-wl \ - && wget -O /scowl-wl/words-US-60.txt ${SOURCE_US} \ - && wget -O /scowl-wl/words-GB-ise-60.txt ${SOURCE_GB_ISE} - diff --git a/vendor/github.com/client9/misspell/Gopkg.lock b/vendor/github.com/client9/misspell/Gopkg.lock deleted file mode 100644 index 90ed4511..00000000 --- a/vendor/github.com/client9/misspell/Gopkg.lock +++ /dev/null @@ -1,24 +0,0 @@ -# This file is autogenerated, do not edit; changes may be undone by the next 'dep ensure'. - - -[[projects]] - name = "github.com/gobwas/glob" - packages = [ - ".", - "compiler", - "match", - "syntax", - "syntax/ast", - "syntax/lexer", - "util/runes", - "util/strings" - ] - revision = "5ccd90ef52e1e632236f7326478d4faa74f99438" - version = "v0.2.3" - -[solve-meta] - analyzer-name = "dep" - analyzer-version = 1 - inputs-digest = "087ea4c49358ea8258ad9edfe514cd5ce9975c889c258e5ec7b5d2b720aae113" - solver-name = "gps-cdcl" - solver-version = 1 diff --git a/vendor/github.com/client9/misspell/Gopkg.toml b/vendor/github.com/client9/misspell/Gopkg.toml deleted file mode 100644 index e9b8e6a4..00000000 --- a/vendor/github.com/client9/misspell/Gopkg.toml +++ /dev/null @@ -1,34 +0,0 @@ -# Gopkg.toml example -# -# Refer to https://golang.github.io/dep/docs/Gopkg.toml.html -# for detailed Gopkg.toml documentation. -# -# required = ["github.com/user/thing/cmd/thing"] -# ignored = ["github.com/user/project/pkgX", "bitbucket.org/user/project/pkgA/pkgY"] -# -# [[constraint]] -# name = "github.com/user/project" -# version = "1.0.0" -# -# [[constraint]] -# name = "github.com/user/project2" -# branch = "dev" -# source = "github.com/myfork/project2" -# -# [[override]] -# name = "github.com/x/y" -# version = "2.4.0" -# -# [prune] -# non-go = false -# go-tests = true -# unused-packages = true - - -[[constraint]] - name = "github.com/gobwas/glob" - version = "0.2.3" - -[prune] - go-tests = true - unused-packages = true diff --git a/vendor/github.com/client9/misspell/LICENSE b/vendor/github.com/client9/misspell/LICENSE deleted file mode 100644 index 423e1f9e..00000000 --- a/vendor/github.com/client9/misspell/LICENSE +++ /dev/null @@ -1,22 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2015-2017 Nick Galbreath - -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/vendor/github.com/client9/misspell/Makefile b/vendor/github.com/client9/misspell/Makefile deleted file mode 100644 index 862ab77b..00000000 --- a/vendor/github.com/client9/misspell/Makefile +++ /dev/null @@ -1,74 +0,0 @@ -CONTAINER=nickg/misspell - -install: ## install misspell into GOPATH/bin - go install ./cmd/misspell - -build: hooks ## build and lint misspell - ./scripts/build.sh - -test: ## run all tests - go test . - -# real publishing is done only by travis -publish: ## test goreleaser - ./scripts/goreleaser-dryrun.sh - -# the grep in line 2 is to remove misspellings in the spelling dictionary -# that trigger false positives!! -falsepositives: /scowl-wl - cat /scowl-wl/words-US-60.txt | \ - grep -i -v -E "payed|Tyre|Euclidian|nonoccurence|dependancy|reenforced|accidently|surprize|dependance|idealogy|binominal|causalities|conquerer|withing|casette|analyse|analogue|dialogue|paralyse|catalogue|archaeolog|clarinettist|catalyses|cancell|chisell|ageing|cataloguing" | \ - misspell -debug -error - cat /scowl-wl/words-GB-ise-60.txt | \ - grep -v -E "payed|nonoccurence|withing" | \ - misspell -locale=UK -debug -error -# cat /scowl-wl/words-GB-ize-60.txt | \ -# grep -v -E "withing" | \ -# misspell -debug -error -# cat /scowl-wl/words-CA-60.txt | \ -# grep -v -E "withing" | \ -# misspell -debug -error - -bench: ## run benchmarks - go test -bench '.*' - -clean: ## clean up time - rm -rf dist/ bin/ - go clean ./... - git gc --aggressive - -ci: ## run test like travis-ci does, requires docker - docker run --rm \ - -v $(PWD):/go/src/github.com/client9/misspell \ - -w /go/src/github.com/client9/misspell \ - ${CONTAINER} \ - make build falsepositives - -docker-build: ## build a docker test image - docker build -t ${CONTAINER} . - -docker-pull: ## pull latest test image - docker pull ${CONTAINER} - -docker-console: ## log into the test image - docker run --rm -it \ - -v $(PWD):/go/src/github.com/client9/misspell \ - -w /go/src/github.com/client9/misspell \ - ${CONTAINER} sh - -.git/hooks/pre-commit: scripts/pre-commit.sh - cp -f scripts/pre-commit.sh .git/hooks/pre-commit -.git/hooks/commit-msg: scripts/commit-msg.sh - cp -f scripts/commit-msg.sh .git/hooks/commit-msg -hooks: .git/hooks/pre-commit .git/hooks/commit-msg ## install git precommit hooks - -.PHONY: help ci console docker-build bench - -# https://www.client9.com/self-documenting-makefiles/ -help: - @awk -F ':|##' '/^[^\t].+?:.*?##/ {\ - printf "\033[36m%-30s\033[0m %s\n", $$1, $$NF \ - }' $(MAKEFILE_LIST) -.DEFAULT_GOAL=help -.PHONY=help - diff --git a/vendor/github.com/client9/misspell/README.md b/vendor/github.com/client9/misspell/README.md deleted file mode 100644 index 5b68af04..00000000 --- a/vendor/github.com/client9/misspell/README.md +++ /dev/null @@ -1,424 +0,0 @@ -[](https://travis-ci.org/client9/misspell) [](https://goreportcard.com/report/github.com/client9/misspell) [](https://godoc.org/github.com/client9/misspell) [](http://gocover.io/github.com/client9/misspell) [](https://raw.githubusercontent.com/client9/misspell/master/LICENSE) - -Correct commonly misspelled English words... quickly. - -### Install - - -If you just want a binary and to start using `misspell`: - -``` -curl -L -o ./install-misspell.sh https://git.io/misspell -sh ./install-misspell.sh -``` - - -Both will install as `./bin/misspell`. You can adjust the download location using the `-b` flag. File a ticket if you want another platform supported. - - -If you use [Go](https://golang.org/), the best way to run `misspell` is by using [gometalinter](#gometalinter). Otherwise, install `misspell` the old-fashioned way: - -``` -go get -u github.com/client9/misspell/cmd/misspell -``` - -and misspell will be in your `GOPATH` - - -Also if you like to live dangerously, one could do - -```bash -curl -L https://git.io/misspell | bash -``` - -### Usage - - -```bash -$ misspell all.html your.txt important.md files.go -your.txt:42:10 found "langauge" a misspelling of "language" - -# ^ file, line, column -``` - -``` -$ misspell -help -Usage of misspell: - -debug - Debug matching, very slow - -error - Exit with 2 if misspelling found - -f string - 'csv', 'sqlite3' or custom Golang template for output - -i string - ignore the following corrections, comma separated - -j int - Number of workers, 0 = number of CPUs - -legal - Show legal information and exit - -locale string - Correct spellings using locale perferances for US or UK. Default is to use a neutral variety of English. Setting locale to US will correct the British spelling of 'colour' to 'color' - -o string - output file or [stderr|stdout|] (default "stdout") - -q Do not emit misspelling output - -source string - Source mode: auto=guess, go=golang source, text=plain or markdown-like text (default "auto") - -w Overwrite file with corrections (default is just to display) -``` - -## FAQ - -* [Automatic Corrections](#correct) -* [Converting UK spellings to US](#locale) -* [Using pipes and stdin](#stdin) -* [Golang special support](#golang) -* [gometalinter support](#gometalinter) -* [CSV Output](#csv) -* [Using SQLite3](#sqlite) -* [Changing output format](#output) -* [Checking a folder recursively](#recursive) -* [Performance](#performance) -* [Known Issues](#issues) -* [Debugging](#debug) -* [False Negatives and missing words](#missing) -* [Origin of Word Lists](#words) -* [Software License](#license) -* [Problem statement](#problem) -* [Other spelling correctors](#others) -* [Other ideas](#otherideas) - -<a name="correct"></a> -### How can I make the corrections automatically? - -Just add the `-w` flag! - -``` -$ misspell -w all.html your.txt important.md files.go -your.txt:9:21:corrected "langauge" to "language" - -# ^ File is rewritten only if a misspelling is found -``` - -<a name="locale"></a> -### How do I convert British spellings to American (or vice-versa)? - -Add the `-locale US` flag! - -```bash -$ misspell -locale US important.txt -important.txt:10:20 found "colour" a misspelling of "color" -``` - -Add the `-locale UK` flag! - -```bash -$ echo "My favorite color is blue" | misspell -locale UK -stdin:1:3:found "favorite color" a misspelling of "favourite colour" -``` - -Help is appreciated as I'm neither British nor an -expert in the English language. - -<a name="recursive"></a> -### How do you check an entire folder recursively? - -Just list a directory you'd like to check - -```bash -misspell . -misspell aDirectory anotherDirectory aFile -``` - -You can also run misspell recursively using the following shell tricks: - -```bash -misspell directory/**/* -``` - -or - -```bash -find . -type f | xargs misspell -``` - -You can select a type of file as well. The following examples selects all `.txt` files that are *not* in the `vendor` directory: - -```bash -find . -type f -name '*.txt' | grep -v vendor/ | xargs misspell -error -``` - -<a name="stdin"></a> -### Can I use pipes or `stdin` for input? - -Yes! - -Print messages to `stderr` only: - -```bash -$ echo "zeebra" | misspell -stdin:1:0:found "zeebra" a misspelling of "zebra" -``` - -Print messages to `stderr`, and corrected text to `stdout`: - -```bash -$ echo "zeebra" | misspell -w -stdin:1:0:corrected "zeebra" to "zebra" -zebra -``` - -Only print the corrected text to `stdout`: - -```bash -$ echo "zeebra" | misspell -w -q -zebra -``` - -<a name="golang"></a> -### Are there special rules for golang source files? - -Yes! If the file ends in `.go`, then misspell will only check spelling in -comments. - -If you want to force a file to be checked as a golang source, use `-source=go` -on the command line. Conversely, you can check a golang source as if it were -pure text by using `-source=text`. You might want to do this since many -variable names have misspellings in them! - -### Can I check only-comments in other other programming languages? - -I'm told the using `-source=go` works well for ruby, javascript, java, c and -c++. - -It doesn't work well for python and bash. - -<a name="gometalinter"></a> -### Does this work with gometalinter? - -[gometalinter](https://github.com/alecthomas/gometalinter) runs -multiple golang linters. Starting on [2016-06-12](https://github.com/alecthomas/gometalinter/pull/134) -gometalinter supports `misspell` natively but it is disabled by default. - -```bash -# update your copy of gometalinter -go get -u github.com/alecthomas/gometalinter - -# install updates and misspell -gometalinter --install --update -``` - -To use, just enable `misspell` - -``` -gometalinter --enable misspell ./... -``` - -Note that gometalinter only checks golang files, and uses the default options -of `misspell` - -You may wish to run this on your plaintext (.txt) and/or markdown files too. - - -<a name="csv"></a> -### How Can I Get CSV Output? - -Using `-f csv`, the output is standard comma-seprated values with headers in the first row. - -``` -misspell -f csv * -file,line,column,typo,corrected -"README.md",9,22,langauge,language -"README.md",47,25,langauge,language -``` - -<a name="sqlite"></a> -### How can I export to SQLite3? - -Using `-f sqlite`, the output is a [sqlite3](https://www.sqlite.org/index.html) dump-file. - -```bash -$ misspell -f sqlite * > /tmp/misspell.sql -$ cat /tmp/misspell.sql - -PRAGMA foreign_keys=OFF; -BEGIN TRANSACTION; -CREATE TABLE misspell( - "file" TEXT, - "line" INTEGER,i - "column" INTEGER,i - "typo" TEXT, - "corrected" TEXT -); -INSERT INTO misspell VALUES("install.txt",202,31,"immediatly","immediately"); -# etc... -COMMIT; -``` - -```bash -$ sqlite3 -init /tmp/misspell.sql :memory: 'select count(*) from misspell' -1 -``` - -With some tricks you can directly pipe output to sqlite3 by using `-init /dev/stdin`: - -``` -misspell -f sqlite * | sqlite3 -init /dev/stdin -column -cmd '.width 60 15' ':memory' \ - 'select substr(file,35),typo,count(*) as count from misspell group by file, typo order by count desc;' -``` - -<a name="ignore"></a> -### How can I ignore rules? - -Using the `-i "comma,separated,rules"` flag you can specify corrections to ignore. - -For example, if you were to run `misspell -w -error -source=text` against document that contains the string `Guy Finkelshteyn Braswell`, misspell would change the text to `Guy Finkelstheyn Bras well`. You can then -determine the rules to ignore by reverting the change and running the with the `-debug` flag. You can then see -that the corrections were `htey -> they` and `aswell -> as well`. To ignore these two rules, you add `-i "htey,aswell"` to -your command. With debug mode on, you can see it print the corrections, but it will no longer make them. - -<a name="output"></a> -### How can I change the output format? - -Using the `-f template` flag you can pass in a -[golang text template](https://golang.org/pkg/text/template/) to format the output. - -One can use `printf "%q" VALUE` to safely quote a value. - -The default template is compatible with [gometalinter](https://github.com/alecthomas/gometalinter) -``` -{{ .Filename }}:{{ .Line }}:{{ .Column }}:corrected {{ printf "%q" .Original }} to "{{ printf "%q" .Corrected }}" -``` - -To just print probable misspellings: - -``` --f '{{ .Original }}' -``` - -<a name="problem"></a> -### What problem does this solve? - -This corrects commonly misspelled English words in computer source -code, and other text-based formats (`.txt`, `.md`, etc). - -It is designed to run quickly so it can be -used as a [pre-commit hook](https://git-scm.com/book/en/v2/Customizing-Git-Git-Hooks) -with minimal burden on the developer. - -It does not work with binary formats (e.g. Word, etc). - -It is not a complete spell-checking program nor a grammar checker. - -<a name="others"></a> -### What are other misspelling correctors and what's wrong with them? - -Some other misspelling correctors: - -* https://github.com/vlajos/misspell_fixer -* https://github.com/lyda/misspell-check -* https://github.com/lucasdemarchi/codespell - -They all work but had problems that prevented me from using them at scale: - -* slow, all of the above check one misspelling at a time (i.e. linear) using regexps -* not MIT/Apache2 licensed (or equivalent) -* have dependencies that don't work for me (python3, bash, linux sed, etc) -* don't understand American vs. British English and sometimes makes unwelcome "corrections" - -That said, they might be perfect for you and many have more features -than this project! - -<a name="performance"></a> -### How fast is it? - -Misspell is easily 100x to 1000x faster than other spelling correctors. You -should be able to check and correct 1000 files in under 250ms. - -This uses the mighty power of golang's -[strings.Replacer](https://golang.org/pkg/strings/#Replacer) which is -a implementation or variation of the -[Aho–Corasick algorithm](https://en.wikipedia.org/wiki/Aho–Corasick_algorithm). -This makes multiple substring matches *simultaneously*. - -In addition this uses multiple CPU cores to work on multiple files. - -<a name="issues"></a> -### What problems does it have? - -Unlike the other projects, this doesn't know what a "word" is. There may be -more false positives and false negatives due to this. On the other hand, it -sometimes catches things others don't. - -Either way, please file bugs and we'll fix them! - -Since it operates in parallel to make corrections, it can be non-obvious to -determine exactly what word was corrected. - -<a name="debug"></a> -### It's making mistakes. How can I debug? - -Run using `-debug` flag on the file you want. It should then print what word -it is trying to correct. Then [file a -bug](https://github.com/client9/misspell/issues) describing the problem. -Thanks! - -<a name="missing"></a> -### Why is it making mistakes or missing items in golang files? - -The matching function is *case-sensitive*, so variable names that are multiple -worlds either in all-upper or all-lower case sometimes can cause false -positives. For instance a variable named `bodyreader` could trigger a false -positive since `yrea` is in the middle that could be corrected to `year`. -Other problems happen if the variable name uses a English contraction that -should use an apostrophe. The best way of fixing this is to use the -[Effective Go naming -conventions](https://golang.org/doc/effective_go.html#mixed-caps) and use -[camelCase](https://en.wikipedia.org/wiki/CamelCase) for variable names. You -can check your code using [golint](https://github.com/golang/lint) - -<a name="license"></a> -### What license is this? - -The main code is [MIT](https://github.com/client9/misspell/blob/master/LICENSE). - -Misspell also makes uses of the Golang standard library and contains a modified version of Golang's [strings.Replacer](https://golang.org/pkg/strings/#Replacer) -which are covered under a [BSD License](https://github.com/golang/go/blob/master/LICENSE). Type `misspell -legal` for more details or see [legal.go](https://github.com/client9/misspell/blob/master/legal.go) - -<a name="words"></a> -### Where do the word lists come from? - -It started with a word list from -[Wikipedia](https://en.wikipedia.org/wiki/Wikipedia:Lists_of_common_misspellings/For_machines). -Unfortunately, this list had to be highly edited as many of the words are -obsolete or based from mistakes on mechanical typewriters (I'm guessing). - -Additional words were added based on actually mistakes seen in -the wild (meaning self-generated). - -Variations of UK and US spellings are based on many sources including: - -* http://www.tysto.com/uk-us-spelling-list.html (with heavy editing, many are incorrect) -* http://www.oxforddictionaries.com/us/words/american-and-british-spelling-american (excellent site but incomplete) -* Diffing US and UK [scowl dictionaries](http://wordlist.aspell.net) - -American English is more accepting of spelling variations than is British -English, so "what is American or not" is subject to opinion. Corrections and help welcome. - -<a name="otherideas"></a> -### What are some other enhancements that could be done? - -Here's some ideas for enhancements: - -*Capitalization of proper nouns* could be done (e.g. weekday and month names, country names, language names) - -*Opinionated US spellings* US English has a number of words with alternate -spellings. Think [adviser vs. -advisor](http://grammarist.com/spelling/adviser-advisor/). While "advisor" is not wrong, the opinionated US -locale would correct "advisor" to "adviser". - -*Versioning* Some type of versioning is needed so reporting mistakes and errors is easier. - -*Feedback* Mistakes would be sent to some server for agregation and feedback review. - -*Contractions and Apostrophes* This would optionally correct "isnt" to -"isn't", etc. diff --git a/vendor/github.com/client9/misspell/RELEASE-HOWTO.md b/vendor/github.com/client9/misspell/RELEASE-HOWTO.md deleted file mode 100644 index 55b52d96..00000000 --- a/vendor/github.com/client9/misspell/RELEASE-HOWTO.md +++ /dev/null @@ -1,38 +0,0 @@ -# Release HOWTO - -since I forget. - - -1. Review existing tags and pick new release number - - ```sh - git tag - ``` - -2. Tag locally - - ```sh - git tag -a v0.1.0 -m "First release" - ``` - - If things get screwed up, delete the tag with - - ```sh - git tag -d v0.1.0 - ``` - -3. Test goreleaser - - TODO: how to install goreleaser - - ```sh - ./scripts/goreleaser-dryrun.sh - ``` - -4. Push - - ```bash - git push origin v0.1.0 - ``` - -5. Verify release and edit notes. See https://github.com/client9/misspell/releases diff --git a/vendor/github.com/client9/misspell/ascii.go b/vendor/github.com/client9/misspell/ascii.go deleted file mode 100644 index 1430718d..00000000 --- a/vendor/github.com/client9/misspell/ascii.go +++ /dev/null @@ -1,62 +0,0 @@ -package misspell - -// ByteToUpper converts an ascii byte to upper cases -// Uses a branchless algorithm -func ByteToUpper(x byte) byte { - b := byte(0x80) | x - c := b - byte(0x61) - d := ^(b - byte(0x7b)) - e := (c & d) & (^x & 0x7f) - return x - (e >> 2) -} - -// ByteToLower converts an ascii byte to lower case -// uses a branchless algorithm -func ByteToLower(eax byte) byte { - ebx := eax&byte(0x7f) + byte(0x25) - ebx = ebx&byte(0x7f) + byte(0x1a) - ebx = ((ebx & ^eax) >> 2) & byte(0x20) - return eax + ebx -} - -// ByteEqualFold does ascii compare, case insensitive -func ByteEqualFold(a, b byte) bool { - return a == b || ByteToLower(a) == ByteToLower(b) -} - -// StringEqualFold ASCII case-insensitive comparison -// golang toUpper/toLower for both bytes and strings -// appears to be Unicode based which is super slow -// based from https://codereview.appspot.com/5180044/patch/14007/21002 -func StringEqualFold(s1, s2 string) bool { - if len(s1) != len(s2) { - return false - } - for i := 0; i < len(s1); i++ { - c1 := s1[i] - c2 := s2[i] - // c1 & c2 - if c1 != c2 { - c1 |= 'a' - 'A' - c2 |= 'a' - 'A' - if c1 != c2 || c1 < 'a' || c1 > 'z' { - return false - } - } - } - return true -} - -// StringHasPrefixFold is similar to strings.HasPrefix but comparison -// is done ignoring ASCII case. -// / -func StringHasPrefixFold(s1, s2 string) bool { - // prefix is bigger than input --> false - if len(s1) < len(s2) { - return false - } - if len(s1) == len(s2) { - return StringEqualFold(s1, s2) - } - return StringEqualFold(s1[:len(s2)], s2) -} diff --git a/vendor/github.com/client9/misspell/case.go b/vendor/github.com/client9/misspell/case.go deleted file mode 100644 index 2ea3850d..00000000 --- a/vendor/github.com/client9/misspell/case.go +++ /dev/null @@ -1,59 +0,0 @@ -package misspell - -import ( - "strings" -) - -// WordCase is an enum of various word casing styles -type WordCase int - -// Various WordCase types.. likely to be not correct -const ( - CaseUnknown WordCase = iota - CaseLower - CaseUpper - CaseTitle -) - -// CaseStyle returns what case style a word is in -func CaseStyle(word string) WordCase { - upperCount := 0 - lowerCount := 0 - - // this iterates over RUNES not BYTES - for i := 0; i < len(word); i++ { - ch := word[i] - switch { - case ch >= 'a' && ch <= 'z': - lowerCount++ - case ch >= 'A' && ch <= 'Z': - upperCount++ - } - } - - switch { - case upperCount != 0 && lowerCount == 0: - return CaseUpper - case upperCount == 0 && lowerCount != 0: - return CaseLower - case upperCount == 1 && lowerCount > 0 && word[0] >= 'A' && word[0] <= 'Z': - return CaseTitle - } - return CaseUnknown -} - -// CaseVariations returns -// If AllUpper or First-Letter-Only is upcased: add the all upper case version -// If AllLower, add the original, the title and upcase forms -// If Mixed, return the original, and the all upcase form -// -func CaseVariations(word string, style WordCase) []string { - switch style { - case CaseLower: - return []string{word, strings.ToUpper(word[0:1]) + word[1:], strings.ToUpper(word)} - case CaseUpper: - return []string{strings.ToUpper(word)} - default: - return []string{word, strings.ToUpper(word)} - } -} diff --git a/vendor/github.com/client9/misspell/cmd/misspell/main.go b/vendor/github.com/client9/misspell/cmd/misspell/main.go deleted file mode 100644 index 174d79d8..00000000 --- a/vendor/github.com/client9/misspell/cmd/misspell/main.go +++ /dev/null @@ -1,326 +0,0 @@ -// The misspell command corrects commonly misspelled English words in source files. -package main - -import ( - "bytes" - "flag" - "fmt" - "io" - "io/ioutil" - "log" - "os" - "path/filepath" - "runtime" - "strings" - "text/template" - "time" - - "github.com/client9/misspell" -) - -var ( - defaultWrite *template.Template - defaultRead *template.Template - - stdout *log.Logger - debug *log.Logger - - version = "dev" -) - -const ( - // Note for gometalinter it must be "File:Line:Column: Msg" - // note space beteen ": Msg" - defaultWriteTmpl = `{{ .Filename }}:{{ .Line }}:{{ .Column }}: corrected "{{ .Original }}" to "{{ .Corrected }}"` - defaultReadTmpl = `{{ .Filename }}:{{ .Line }}:{{ .Column }}: "{{ .Original }}" is a misspelling of "{{ .Corrected }}"` - csvTmpl = `{{ printf "%q" .Filename }},{{ .Line }},{{ .Column }},{{ .Original }},{{ .Corrected }}` - csvHeader = `file,line,column,typo,corrected` - sqliteTmpl = `INSERT INTO misspell VALUES({{ printf "%q" .Filename }},{{ .Line }},{{ .Column }},{{ printf "%q" .Original }},{{ printf "%q" .Corrected }});` - sqliteHeader = `PRAGMA foreign_keys=OFF; -BEGIN TRANSACTION; -CREATE TABLE misspell( - "file" TEXT, "line" INTEGER, "column" INTEGER, "typo" TEXT, "corrected" TEXT -);` - sqliteFooter = "COMMIT;" -) - -func worker(writeit bool, r *misspell.Replacer, mode string, files <-chan string, results chan<- int) { - count := 0 - for filename := range files { - orig, err := misspell.ReadTextFile(filename) - if err != nil { - log.Println(err) - continue - } - if len(orig) == 0 { - continue - } - - debug.Printf("Processing %s", filename) - - var updated string - var changes []misspell.Diff - - if mode == "go" { - updated, changes = r.ReplaceGo(orig) - } else { - updated, changes = r.Replace(orig) - } - - if len(changes) == 0 { - continue - } - count += len(changes) - for _, diff := range changes { - // add in filename - diff.Filename = filename - - // output can be done by doing multiple goroutines - // and can clobber os.Stdout. - // - // the log package can be used simultaneously from multiple goroutines - var output bytes.Buffer - if writeit { - defaultWrite.Execute(&output, diff) - } else { - defaultRead.Execute(&output, diff) - } - - // goroutine-safe print to os.Stdout - stdout.Println(output.String()) - } - - if writeit { - ioutil.WriteFile(filename, []byte(updated), 0) - } - } - results <- count -} - -func main() { - t := time.Now() - var ( - workers = flag.Int("j", 0, "Number of workers, 0 = number of CPUs") - writeit = flag.Bool("w", false, "Overwrite file with corrections (default is just to display)") - quietFlag = flag.Bool("q", false, "Do not emit misspelling output") - outFlag = flag.String("o", "stdout", "output file or [stderr|stdout|]") - format = flag.String("f", "", "'csv', 'sqlite3' or custom Golang template for output") - ignores = flag.String("i", "", "ignore the following corrections, comma separated") - locale = flag.String("locale", "", "Correct spellings using locale perferances for US or UK. Default is to use a neutral variety of English. Setting locale to US will correct the British spelling of 'colour' to 'color'") - mode = flag.String("source", "auto", "Source mode: auto=guess, go=golang source, text=plain or markdown-like text") - debugFlag = flag.Bool("debug", false, "Debug matching, very slow") - exitError = flag.Bool("error", false, "Exit with 2 if misspelling found") - showVersion = flag.Bool("v", false, "Show version and exit") - - showLegal = flag.Bool("legal", false, "Show legal information and exit") - ) - flag.Parse() - - if *showVersion { - fmt.Println(version) - return - } - if *showLegal { - fmt.Println(misspell.Legal) - return - } - if *debugFlag { - debug = log.New(os.Stderr, "DEBUG ", 0) - } else { - debug = log.New(ioutil.Discard, "", 0) - } - - r := misspell.Replacer{ - Replacements: misspell.DictMain, - Debug: *debugFlag, - } - // - // Figure out regional variations - // - switch strings.ToUpper(*locale) { - case "": - // nothing - case "US": - r.AddRuleList(misspell.DictAmerican) - case "UK", "GB": - r.AddRuleList(misspell.DictBritish) - case "NZ", "AU", "CA": - log.Fatalf("Help wanted. https://github.com/client9/misspell/issues/6") - default: - log.Fatalf("Unknown locale: %q", *locale) - } - - // - // Stuff to ignore - // - if len(*ignores) > 0 { - r.RemoveRule(strings.Split(*ignores, ",")) - } - - // - // Source input mode - // - switch *mode { - case "auto": - case "go": - case "text": - default: - log.Fatalf("Mode must be one of auto=guess, go=golang source, text=plain or markdown-like text") - } - - // - // Custom output - // - switch { - case *format == "csv": - tmpl := template.Must(template.New("csv").Parse(csvTmpl)) - defaultWrite = tmpl - defaultRead = tmpl - stdout.Println(csvHeader) - case *format == "sqlite" || *format == "sqlite3": - tmpl := template.Must(template.New("sqlite3").Parse(sqliteTmpl)) - defaultWrite = tmpl - defaultRead = tmpl - stdout.Println(sqliteHeader) - case len(*format) > 0: - t, err := template.New("custom").Parse(*format) - if err != nil { - log.Fatalf("Unable to compile log format: %s", err) - } - defaultWrite = t - defaultRead = t - default: // format == "" - defaultWrite = template.Must(template.New("defaultWrite").Parse(defaultWriteTmpl)) - defaultRead = template.Must(template.New("defaultRead").Parse(defaultReadTmpl)) - } - - // we cant't just write to os.Stdout directly since we have multiple goroutine - // all writing at the same time causing broken output. Log is routine safe. - // we see it so it doesn't use a prefix or include a time stamp. - switch { - case *quietFlag || *outFlag == "/dev/null": - stdout = log.New(ioutil.Discard, "", 0) - case *outFlag == "/dev/stderr" || *outFlag == "stderr": - stdout = log.New(os.Stderr, "", 0) - case *outFlag == "/dev/stdout" || *outFlag == "stdout": - stdout = log.New(os.Stdout, "", 0) - case *outFlag == "" || *outFlag == "-": - stdout = log.New(os.Stdout, "", 0) - default: - fo, err := os.Create(*outFlag) - if err != nil { - log.Fatalf("unable to create outfile %q: %s", *outFlag, err) - } - defer fo.Close() - stdout = log.New(fo, "", 0) - } - - // - // Number of Workers / CPU to use - // - if *workers < 0 { - log.Fatalf("-j must >= 0") - } - if *workers == 0 { - *workers = runtime.NumCPU() - } - if *debugFlag { - *workers = 1 - } - - // - // Done with Flags. - // Compile the Replacer and process files - // - r.Compile() - - args := flag.Args() - debug.Printf("initialization complete in %v", time.Since(t)) - - // stdin/stdout - if len(args) == 0 { - // if we are working with pipes/stdin/stdout - // there is no concurrency, so we can directly - // send data to the writers - var fileout io.Writer - var errout io.Writer - switch *writeit { - case true: - // if we ARE writing the corrected stream - // the corrected stream goes to stdout - // and the misspelling errors goes to stderr - // so we can do something like this: - // curl something | misspell -w | gzip > afile.gz - fileout = os.Stdout - errout = os.Stderr - case false: - // if we are not writing out the corrected stream - // then work just like files. Misspelling errors - // are sent to stdout - fileout = ioutil.Discard - errout = os.Stdout - } - count := 0 - next := func(diff misspell.Diff) { - count++ - - // don't even evaluate the output templates - if *quietFlag { - return - } - diff.Filename = "stdin" - if *writeit { - defaultWrite.Execute(errout, diff) - } else { - defaultRead.Execute(errout, diff) - } - errout.Write([]byte{'\n'}) - - } - err := r.ReplaceReader(os.Stdin, fileout, next) - if err != nil { - os.Exit(1) - } - switch *format { - case "sqlite", "sqlite3": - fileout.Write([]byte(sqliteFooter)) - } - if count != 0 && *exitError { - // error - os.Exit(2) - } - return - } - - c := make(chan string, 64) - results := make(chan int, *workers) - - for i := 0; i < *workers; i++ { - go worker(*writeit, &r, *mode, c, results) - } - - for _, filename := range args { - filepath.Walk(filename, func(path string, info os.FileInfo, err error) error { - if err == nil && !info.IsDir() { - c <- path - } - return nil - }) - } - close(c) - - count := 0 - for i := 0; i < *workers; i++ { - changed := <-results - count += changed - } - - switch *format { - case "sqlite", "sqlite3": - stdout.Println(sqliteFooter) - } - - if count != 0 && *exitError { - os.Exit(2) - } -} diff --git a/vendor/github.com/client9/misspell/goreleaser.yml b/vendor/github.com/client9/misspell/goreleaser.yml deleted file mode 100644 index 560cb381..00000000 --- a/vendor/github.com/client9/misspell/goreleaser.yml +++ /dev/null @@ -1,38 +0,0 @@ -# goreleaser.yml -# https://github.com/goreleaser/goreleaser - -project_name: misspell - -builds: - - - main: cmd/misspell/main.go - binary: misspell - ldflags: -s -w -X main.version={{.Version}} - goos: - - darwin - - linux - - windows - goarch: - - amd64 - env: - - CGO_ENABLED=0 - ignore: - - goos: darwin - goarch: 386 - - goos: windows - goarch: 386 - -archive: - name_template: "{{ .Binary }}_{{ .Version }}_{{ .Os }}_{{ .Arch }}" - replacements: - amd64: 64bit - 386: 32bit - darwin: mac - files: - - none* - -checksum: - name_template: "{{ .ProjectName }}_{{ .Version }}_checksums.txt" - -snapshot: - name_template: "SNAPSHOT-{{.Commit}}" diff --git a/vendor/github.com/client9/misspell/install-misspell.sh b/vendor/github.com/client9/misspell/install-misspell.sh deleted file mode 100644 index 8e0ff5d9..00000000 --- a/vendor/github.com/client9/misspell/install-misspell.sh +++ /dev/null @@ -1,318 +0,0 @@ -#!/bin/sh -set -e -# Code generated by godownloader. DO NOT EDIT. -# - -usage() { - this=$1 - cat <<EOF -$this: download go binaries for client9/misspell - -Usage: $this [-b] bindir [version] - -b sets bindir or installation directory, default "./bin" - [version] is a version number from - https://github.com/client9/misspell/releases - If version is missing, then an attempt to find the latest will be found. - -Generated by godownloader - https://github.com/goreleaser/godownloader - -EOF - exit 2 -} - -parse_args() { - #BINDIR is ./bin unless set be ENV - # over-ridden by flag below - - BINDIR=${BINDIR:-./bin} - while getopts "b:h?" arg; do - case "$arg" in - b) BINDIR="$OPTARG" ;; - h | \?) usage "$0" ;; - esac - done - shift $((OPTIND - 1)) - VERSION=$1 -} -# this function wraps all the destructive operations -# if a curl|bash cuts off the end of the script due to -# network, either nothing will happen or will syntax error -# out preventing half-done work -execute() { - TMPDIR=$(mktmpdir) - echo "$PREFIX: downloading ${TARBALL_URL}" - http_download "${TMPDIR}/${TARBALL}" "${TARBALL_URL}" - - echo "$PREFIX: verifying checksums" - http_download "${TMPDIR}/${CHECKSUM}" "${CHECKSUM_URL}" - hash_sha256_verify "${TMPDIR}/${TARBALL}" "${TMPDIR}/${CHECKSUM}" - - (cd "${TMPDIR}" && untar "${TARBALL}") - install -d "${BINDIR}" - install "${TMPDIR}/${BINARY}" "${BINDIR}/" - echo "$PREFIX: installed as ${BINDIR}/${BINARY}" -} -is_supported_platform() { - platform=$1 - found=1 - case "$platform" in - darwin/amd64) found=0 ;; - linux/amd64) found=0 ;; - esac - case "$platform" in - darwin/386) found=1 ;; - esac - return $found -} -check_platform() { - if is_supported_platform "$PLATFORM"; then - # optional logging goes here - true - else - echo "${PREFIX}: platform $PLATFORM is not supported. Make sure this script is up-to-date and file request at https://github.com/${PREFIX}/issues/new" - exit 1 - fi -} -adjust_version() { - if [ -z "${VERSION}" ]; then - echo "$PREFIX: checking GitHub for latest version" - VERSION=$(github_last_release "$OWNER/$REPO") - fi - # if version starts with 'v', remove it - VERSION=${VERSION#v} -} -adjust_format() { - # change format (tar.gz or zip) based on ARCH - true -} -adjust_os() { - # adjust archive name based on OS - case ${OS} in - 386) OS=32bit ;; - amd64) OS=64bit ;; - darwin) OS=mac ;; - esac - true -} -adjust_arch() { - # adjust archive name based on ARCH - case ${ARCH} in - 386) ARCH=32bit ;; - amd64) ARCH=64bit ;; - darwin) ARCH=mac ;; - esac - true -} - -cat /dev/null <<EOF ------------------------------------------------------------------------- -https://github.com/client9/shlib - portable posix shell functions -Public domain - http://unlicense.org -https://github.com/client9/shlib/blob/master/LICENSE.md -but credit (and pull requests) appreciated. ------------------------------------------------------------------------- -EOF -is_command() { - command -v "$1" >/dev/null -} -uname_os() { - os=$(uname -s | tr '[:upper:]' '[:lower:]') - echo "$os" -} -uname_arch() { - arch=$(uname -m) - case $arch in - x86_64) arch="amd64" ;; - x86) arch="386" ;; - i686) arch="386" ;; - i386) arch="386" ;; - aarch64) arch="arm64" ;; - armv5*) arch="arm5" ;; - armv6*) arch="arm6" ;; - armv7*) arch="arm7" ;; - esac - echo ${arch} -} -uname_os_check() { - os=$(uname_os) - case "$os" in - darwin) return 0 ;; - dragonfly) return 0 ;; - freebsd) return 0 ;; - linux) return 0 ;; - android) return 0 ;; - nacl) return 0 ;; - netbsd) return 0 ;; - openbsd) return 0 ;; - plan9) return 0 ;; - solaris) return 0 ;; - windows) return 0 ;; - esac - echo "$0: uname_os_check: internal error '$(uname -s)' got converted to '$os' which is not a GOOS value. Please file bug at https://github.com/client9/shlib" - return 1 -} -uname_arch_check() { - arch=$(uname_arch) - case "$arch" in - 386) return 0 ;; - amd64) return 0 ;; - arm64) return 0 ;; - armv5) return 0 ;; - armv6) return 0 ;; - armv7) return 0 ;; - ppc64) return 0 ;; - ppc64le) return 0 ;; - mips) return 0 ;; - mipsle) return 0 ;; - mips64) return 0 ;; - mips64le) return 0 ;; - s390x) return 0 ;; - amd64p32) return 0 ;; - esac - echo "$0: uname_arch_check: internal error '$(uname -m)' got converted to '$arch' which is not a GOARCH value. Please file bug report at https://github.com/client9/shlib" - return 1 -} -untar() { - tarball=$1 - case "${tarball}" in - *.tar.gz | *.tgz) tar -xzf "${tarball}" ;; - *.tar) tar -xf "${tarball}" ;; - *.zip) unzip "${tarball}" ;; - *) - echo "Unknown archive format for ${tarball}" - return 1 - ;; - esac -} -mktmpdir() { - test -z "$TMPDIR" && TMPDIR="$(mktemp -d)" - mkdir -p "${TMPDIR}" - echo "${TMPDIR}" -} -http_download() { - local_file=$1 - source_url=$2 - header=$3 - headerflag='' - destflag='' - if is_command curl; then - cmd='curl --fail -sSL' - destflag='-o' - headerflag='-H' - elif is_command wget; then - cmd='wget -q' - destflag='-O' - headerflag='--header' - else - echo "http_download: unable to find wget or curl" - return 1 - fi - if [ -z "$header" ]; then - $cmd $destflag "$local_file" "$source_url" - else - $cmd $headerflag "$header" $destflag "$local_file" "$source_url" - fi -} -github_api() { - local_file=$1 - source_url=$2 - header="" - case "$source_url" in - https://api.github.com*) - test -z "$GITHUB_TOKEN" || header="Authorization: token $GITHUB_TOKEN" - ;; - esac - http_download "$local_file" "$source_url" "$header" -} -github_last_release() { - owner_repo=$1 - giturl="https://api.github.com/repos/${owner_repo}/releases/latest" - html=$(github_api - "$giturl") - version=$(echo "$html" | grep -m 1 "\"tag_name\":" | cut -f4 -d'"') - test -z "$version" && return 1 - echo "$version" -} -hash_sha256() { - TARGET=${1:-/dev/stdin} - if is_command gsha256sum; then - hash=$(gsha256sum "$TARGET") || return 1 - echo "$hash" | cut -d ' ' -f 1 - elif is_command sha256sum; then - hash=$(sha256sum "$TARGET") || return 1 - echo "$hash" | cut -d ' ' -f 1 - elif is_command shasum; then - hash=$(shasum -a 256 "$TARGET" 2>/dev/null) || return 1 - echo "$hash" | cut -d ' ' -f 1 - elif is_command openssl; then - hash=$(openssl -dst openssl dgst -sha256 "$TARGET") || return 1 - echo "$hash" | cut -d ' ' -f a - else - echo "hash_sha256: unable to find command to compute sha-256 hash" - return 1 - fi -} -hash_sha256_verify() { - TARGET=$1 - checksums=$2 - if [ -z "$checksums" ]; then - echo "hash_sha256_verify: checksum file not specified in arg2" - return 1 - fi - BASENAME=${TARGET##*/} - want=$(grep "${BASENAME}" "${checksums}" 2>/dev/null | tr '\t' ' ' | cut -d ' ' -f 1) - if [ -z "$want" ]; then - echo "hash_sha256_verify: unable to find checksum for '${TARGET}' in '${checksums}'" - return 1 - fi - got=$(hash_sha256 "$TARGET") - if [ "$want" != "$got" ]; then - echo "hash_sha256_verify: checksum for '$TARGET' did not verify ${want} vs $got" - return 1 - fi -} -cat /dev/null <<EOF ------------------------------------------------------------------------- -End of functions from https://github.com/client9/shlib ------------------------------------------------------------------------- -EOF - -OWNER=client9 -REPO=misspell -BINARY=misspell -FORMAT=tar.gz -OS=$(uname_os) -ARCH=$(uname_arch) -PREFIX="$OWNER/$REPO" -PLATFORM="${OS}/${ARCH}" -GITHUB_DOWNLOAD=https://github.com/${OWNER}/${REPO}/releases/download - -uname_os_check "$OS" -uname_arch_check "$ARCH" - -parse_args "$@" - -check_platform - -adjust_version - -adjust_format - -adjust_os - -adjust_arch - -echo "$PREFIX: found version ${VERSION} for ${OS}/${ARCH}" - -NAME=${BINARY}_${VERSION}_${OS}_${ARCH} -TARBALL=${NAME}.${FORMAT} -TARBALL_URL=${GITHUB_DOWNLOAD}/v${VERSION}/${TARBALL} -CHECKSUM=${REPO}_checksums.txt -CHECKSUM_URL=${GITHUB_DOWNLOAD}/v${VERSION}/${CHECKSUM} - -# Adjust binary name if windows -if [ "$OS" = "windows" ]; then - BINARY="${BINARY}.exe" -fi - -execute diff --git a/vendor/github.com/client9/misspell/legal.go b/vendor/github.com/client9/misspell/legal.go deleted file mode 100644 index 20076974..00000000 --- a/vendor/github.com/client9/misspell/legal.go +++ /dev/null @@ -1,48 +0,0 @@ -// Package misspell corrects commonly misspelled English words in source files. -package misspell - -// Legal provides licensing info. -const Legal = ` -Execept where noted below, the source code for misspell is -copyright Nick Galbreath and distribution is allowed under a -MIT license. See the following for details: - -* https://github.com/client9/misspell/blob/master/LICENSE -* https://tldrlegal.com/license/mit-license - -Misspell makes uses of the Golang standard library and -contains a modified version of Golang's strings.Replacer -which are covered under a BSD License. - -* https://golang.org/pkg/strings/#Replacer -* https://golang.org/src/strings/replace.go -* https://github.com/golang/go/blob/master/LICENSE - -Copyright (c) 2009 The Go Authors. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -` diff --git a/vendor/github.com/client9/misspell/mime.go b/vendor/github.com/client9/misspell/mime.go deleted file mode 100644 index 9db4902b..00000000 --- a/vendor/github.com/client9/misspell/mime.go +++ /dev/null @@ -1,210 +0,0 @@ -package misspell - -import ( - "bytes" - "fmt" - "io" - "io/ioutil" - "net/http" - "os" - "path/filepath" - "strings" -) - -// The number of possible binary formats is very large -// items that might be checked into a repo or be an -// artifact of a build. Additions welcome. -// -// Golang's internal table is very small and can't be -// relied on. Even then things like ".js" have a mime -// type of "application/javascipt" which isn't very helpful. -// "[x]" means we have sniff test and suffix test should be eliminated -var binary = map[string]bool{ - ".a": true, // [ ] archive - ".bin": true, // [ ] binary - ".bz2": true, // [ ] compression - ".class": true, // [x] Java class file - ".dll": true, // [ ] shared library - ".exe": true, // [ ] binary - ".gif": true, // [ ] image - ".gpg": true, // [x] text, but really all base64 - ".gz": true, // [ ] compression - ".ico": true, // [ ] image - ".jar": true, // [x] archive - ".jpeg": true, // [ ] image - ".jpg": true, // [ ] image - ".mp3": true, // [ ] audio - ".mp4": true, // [ ] video - ".mpeg": true, // [ ] video - ".o": true, // [ ] object file - ".pdf": true, // [x] pdf - ".png": true, // [x] image - ".pyc": true, // [ ] Python bytecode - ".pyo": true, // [ ] Python bytecode - ".so": true, // [x] shared library - ".swp": true, // [ ] vim swap file - ".tar": true, // [ ] archive - ".tiff": true, // [ ] image - ".woff": true, // [ ] font - ".woff2": true, // [ ] font - ".xz": true, // [ ] compression - ".z": true, // [ ] compression - ".zip": true, // [x] archive -} - -// isBinaryFilename returns true if the file is likely to be binary -// -// Better heuristics could be done here, in particular a binary -// file is unlikely to be UTF-8 encoded. However this is cheap -// and will solve the immediate need of making sure common -// binary formats are not corrupted by mistake. -func isBinaryFilename(s string) bool { - return binary[strings.ToLower(filepath.Ext(s))] -} - -var scm = map[string]bool{ - ".bzr": true, - ".git": true, - ".hg": true, - ".svn": true, - "CVS": true, -} - -// isSCMPath returns true if the path is likely part of a (private) SCM -// directory. E.g. ./git/something = true -func isSCMPath(s string) bool { - // hack for .git/COMMIT_EDITMSG and .git/TAG_EDITMSG - // normally we don't look at anything in .git - // but COMMIT_EDITMSG and TAG_EDITMSG are used as - // temp files for git commits. Allowing misspell to inspect - // these files allows for commit-msg hooks - // https://git-scm.com/book/en/v2/Customizing-Git-Git-Hooks - if strings.Contains(filepath.Base(s), "EDITMSG") { - return false - } - parts := strings.Split(filepath.Clean(s), string(filepath.Separator)) - for _, dir := range parts { - if scm[dir] { - return true - } - } - return false -} - -var magicHeaders = [][]byte{ - // Issue #68 - // PGP messages and signatures are "text" but really just - // blobs of base64-text and should not be misspell-checked - []byte("-----BEGIN PGP MESSAGE-----"), - []byte("-----BEGIN PGP SIGNATURE-----"), - - // ELF - {0x7f, 0x45, 0x4c, 0x46}, - - // Postscript - {0x25, 0x21, 0x50, 0x53}, - - // PDF - {0x25, 0x50, 0x44, 0x46}, - - // Java class file - // https://en.wikipedia.org/wiki/Java_class_file - {0xCA, 0xFE, 0xBA, 0xBE}, - - // PNG - // https://en.wikipedia.org/wiki/Portable_Network_Graphics - {0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a}, - - // ZIP, JAR, ODF, OOXML - {0x50, 0x4B, 0x03, 0x04}, - {0x50, 0x4B, 0x05, 0x06}, - {0x50, 0x4B, 0x07, 0x08}, -} - -func isTextFile(raw []byte) bool { - for _, magic := range magicHeaders { - if bytes.HasPrefix(raw, magic) { - return false - } - } - - // allow any text/ type with utf-8 encoding - // DetectContentType sometimes returns charset=utf-16 for XML stuff - // in which case ignore. - mime := http.DetectContentType(raw) - return strings.HasPrefix(mime, "text/") && strings.HasSuffix(mime, "charset=utf-8") -} - -// ReadTextFile returns the contents of a file, first testing if it is a text file -// returns ("", nil) if not a text file -// returns ("", error) if error -// returns (string, nil) if text -// -// unfortunately, in worse case, this does -// 1 stat -// 1 open,read,close of 512 bytes -// 1 more stat,open, read everything, close (via ioutil.ReadAll) -// This could be kinder to the filesystem. -// -// This uses some heuristics of the file's extension (e.g. .zip, .txt) and -// uses a sniffer to determine if the file is text or not. -// Using file extensions isn't great, but probably -// good enough for real-world use. -// Golang's built in sniffer is problematic for differnet reasons. It's -// optimized for HTML, and is very limited in detection. It would be good -// to explicitly add some tests for ELF/DWARF formats to make sure we never -// corrupt binary files. -func ReadTextFile(filename string) (string, error) { - if isBinaryFilename(filename) { - return "", nil - } - - if isSCMPath(filename) { - return "", nil - } - - fstat, err := os.Stat(filename) - - if err != nil { - return "", fmt.Errorf("Unable to stat %q: %s", filename, err) - } - - // directory: nothing to do. - if fstat.IsDir() { - return "", nil - } - - // avoid reading in multi-gig files - // if input is large, read the first 512 bytes to sniff type - // if not-text, then exit - isText := false - if fstat.Size() > 50000 { - fin, err := os.Open(filename) - if err != nil { - return "", fmt.Errorf("Unable to open large file %q: %s", filename, err) - } - defer fin.Close() - buf := make([]byte, 512) - _, err = io.ReadFull(fin, buf) - if err != nil { - return "", fmt.Errorf("Unable to read 512 bytes from %q: %s", filename, err) - } - if !isTextFile(buf) { - return "", nil - } - - // set so we don't double check this file - isText = true - } - - // read in whole file - raw, err := ioutil.ReadFile(filename) - if err != nil { - return "", fmt.Errorf("Unable to read all %q: %s", filename, err) - } - - if !isText && !isTextFile(raw) { - return "", nil - } - return string(raw), nil -} diff --git a/vendor/github.com/client9/misspell/notwords.go b/vendor/github.com/client9/misspell/notwords.go deleted file mode 100644 index 06d0d5a5..00000000 --- a/vendor/github.com/client9/misspell/notwords.go +++ /dev/null @@ -1,85 +0,0 @@ -package misspell - -import ( - "bytes" - "regexp" - "strings" -) - -var ( - reEmail = regexp.MustCompile(`[a-zA-Z0-9_.%+-]+@[a-zA-Z0-9-.]+\.[a-zA-Z]{2,6}[^a-zA-Z]`) - reHost = regexp.MustCompile(`[a-zA-Z0-9-.]+\.[a-zA-Z]+`) - reBackslash = regexp.MustCompile(`\\[a-z]`) -) - -// RemovePath attempts to strip away embedded file system paths, e.g. -// /foo/bar or /static/myimg.png -// -// TODO: windows style -// -func RemovePath(s string) string { - out := bytes.Buffer{} - var idx int - for len(s) > 0 { - if idx = strings.IndexByte(s, '/'); idx == -1 { - out.WriteString(s) - break - } - - if idx > 0 { - idx-- - } - - var chclass string - switch s[idx] { - case '/', ' ', '\n', '\t', '\r': - chclass = " \n\r\t" - case '[': - chclass = "]\n" - case '(': - chclass = ")\n" - default: - out.WriteString(s[:idx+2]) - s = s[idx+2:] - continue - } - - endx := strings.IndexAny(s[idx+1:], chclass) - if endx != -1 { - out.WriteString(s[:idx+1]) - out.Write(bytes.Repeat([]byte{' '}, endx)) - s = s[idx+endx+1:] - } else { - out.WriteString(s) - break - } - } - return out.String() -} - -// replaceWithBlanks returns a string with the same number of spaces as the input -func replaceWithBlanks(s string) string { - return strings.Repeat(" ", len(s)) -} - -// RemoveEmail remove email-like strings, e.g. "nickg+junk@xfoobar.com", "nickg@xyz.abc123.biz" -func RemoveEmail(s string) string { - return reEmail.ReplaceAllStringFunc(s, replaceWithBlanks) -} - -// RemoveHost removes host-like strings "foobar.com" "abc123.fo1231.biz" -func RemoveHost(s string) string { - return reHost.ReplaceAllStringFunc(s, replaceWithBlanks) -} - -// RemoveBackslashEscapes removes characters that are preceeded by a backslash -// commonly found in printf format stringd "\nto" -func removeBackslashEscapes(s string) string { - return reBackslash.ReplaceAllStringFunc(s, replaceWithBlanks) -} - -// RemoveNotWords blanks out all the not words -func RemoveNotWords(s string) string { - // do most selective/specific first - return removeBackslashEscapes(RemoveHost(RemoveEmail(RemovePath(StripURL(s))))) -} diff --git a/vendor/github.com/client9/misspell/replace.go b/vendor/github.com/client9/misspell/replace.go deleted file mode 100644 index a99bbcc5..00000000 --- a/vendor/github.com/client9/misspell/replace.go +++ /dev/null @@ -1,246 +0,0 @@ -package misspell - -import ( - "bufio" - "bytes" - "io" - "regexp" - "strings" - "text/scanner" -) - -func max(x, y int) int { - if x > y { - return x - } - return y -} - -func inArray(haystack []string, needle string) bool { - for _, word := range haystack { - if needle == word { - return true - } - } - return false -} - -var wordRegexp = regexp.MustCompile(`[a-zA-Z0-9']+`) - -// Diff is datastructure showing what changed in a single line -type Diff struct { - Filename string - FullLine string - Line int - Column int - Original string - Corrected string -} - -// Replacer is the main struct for spelling correction -type Replacer struct { - Replacements []string - Debug bool - engine *StringReplacer - corrected map[string]string -} - -// New creates a new default Replacer using the main rule list -func New() *Replacer { - r := Replacer{ - Replacements: DictMain, - } - r.Compile() - return &r -} - -// RemoveRule deletes existings rules. -// TODO: make inplace to save memory -func (r *Replacer) RemoveRule(ignore []string) { - newwords := make([]string, 0, len(r.Replacements)) - for i := 0; i < len(r.Replacements); i += 2 { - if inArray(ignore, r.Replacements[i]) { - continue - } - newwords = append(newwords, r.Replacements[i:i+2]...) - } - r.engine = nil - r.Replacements = newwords -} - -// AddRuleList appends new rules. -// Input is in the same form as Strings.Replacer: [ old1, new1, old2, new2, ....] -// Note: does not check for duplictes -func (r *Replacer) AddRuleList(additions []string) { - r.engine = nil - r.Replacements = append(r.Replacements, additions...) -} - -// Compile compiles the rules. Required before using the Replace functions -func (r *Replacer) Compile() { - - r.corrected = make(map[string]string, len(r.Replacements)/2) - for i := 0; i < len(r.Replacements); i += 2 { - r.corrected[r.Replacements[i]] = r.Replacements[i+1] - } - r.engine = NewStringReplacer(r.Replacements...) -} - -/* -line1 and line2 are different -extract words from each line1 - -replace word -> newword -if word == new-word - continue -if new-word in list of replacements - continue -new word not original, and not in list of replacements - some substring got mixed up. UNdo -*/ -func (r *Replacer) recheckLine(s string, lineNum int, buf io.Writer, next func(Diff)) { - first := 0 - redacted := RemoveNotWords(s) - - idx := wordRegexp.FindAllStringIndex(redacted, -1) - for _, ab := range idx { - word := s[ab[0]:ab[1]] - newword := r.engine.Replace(word) - if newword == word { - // no replacement done - continue - } - - // ignore camelCase words - // https://github.com/client9/misspell/issues/113 - if CaseStyle(word) == CaseUnknown { - continue - } - - if StringEqualFold(r.corrected[strings.ToLower(word)], newword) { - // word got corrected into something we know - io.WriteString(buf, s[first:ab[0]]) - io.WriteString(buf, newword) - first = ab[1] - next(Diff{ - FullLine: s, - Line: lineNum, - Original: word, - Corrected: newword, - Column: ab[0], - }) - continue - } - // Word got corrected into something unknown. Ignore it - } - io.WriteString(buf, s[first:]) -} - -// ReplaceGo is a specialized routine for correcting Golang source -// files. Currently only checks comments, not identifiers for -// spelling. -func (r *Replacer) ReplaceGo(input string) (string, []Diff) { - var s scanner.Scanner - s.Init(strings.NewReader(input)) - s.Mode = scanner.ScanIdents | scanner.ScanFloats | scanner.ScanChars | scanner.ScanStrings | scanner.ScanRawStrings | scanner.ScanComments - lastPos := 0 - output := "" -Loop: - for { - switch s.Scan() { - case scanner.Comment: - origComment := s.TokenText() - newComment := r.engine.Replace(origComment) - - if origComment != newComment { - // s.Pos().Offset is the end of the current token - // subtract len(origComment) to get the start of the token - offset := s.Pos().Offset - output = output + input[lastPos:offset-len(origComment)] + newComment - lastPos = offset - } - case scanner.EOF: - break Loop - } - } - - if lastPos == 0 { - // no changes, no copies - return input, nil - } - if lastPos < len(input) { - output = output + input[lastPos:] - } - diffs := make([]Diff, 0, 8) - buf := bytes.NewBuffer(make([]byte, 0, max(len(input), len(output))+100)) - // faster that making a bytes.Buffer and bufio.ReadString - outlines := strings.SplitAfter(output, "\n") - inlines := strings.SplitAfter(input, "\n") - for i := 0; i < len(inlines); i++ { - if inlines[i] == outlines[i] { - buf.WriteString(outlines[i]) - continue - } - r.recheckLine(inlines[i], i+1, buf, func(d Diff) { - diffs = append(diffs, d) - }) - } - - return buf.String(), diffs - -} - -// Replace is corrects misspellings in input, returning corrected version -// along with a list of diffs. -func (r *Replacer) Replace(input string) (string, []Diff) { - output := r.engine.Replace(input) - if input == output { - return input, nil - } - diffs := make([]Diff, 0, 8) - buf := bytes.NewBuffer(make([]byte, 0, max(len(input), len(output))+100)) - // faster that making a bytes.Buffer and bufio.ReadString - outlines := strings.SplitAfter(output, "\n") - inlines := strings.SplitAfter(input, "\n") - for i := 0; i < len(inlines); i++ { - if inlines[i] == outlines[i] { - buf.WriteString(outlines[i]) - continue - } - r.recheckLine(inlines[i], i+1, buf, func(d Diff) { - diffs = append(diffs, d) - }) - } - - return buf.String(), diffs -} - -// ReplaceReader applies spelling corrections to a reader stream. Diffs are -// emitted through a callback. -func (r *Replacer) ReplaceReader(raw io.Reader, w io.Writer, next func(Diff)) error { - var ( - err error - line string - lineNum int - ) - reader := bufio.NewReader(raw) - for err == nil { - lineNum++ - line, err = reader.ReadString('\n') - - // if it's EOF, then line has the last line - // don't like the check of err here and - // in for loop - if err != nil && err != io.EOF { - return err - } - // easily 5x faster than regexp+map - if line == r.engine.Replace(line) { - io.WriteString(w, line) - continue - } - // but it can be inaccurate, so we need to double check - r.recheckLine(line, lineNum, w, next) - } - return nil -} diff --git a/vendor/github.com/client9/misspell/stringreplacer.go b/vendor/github.com/client9/misspell/stringreplacer.go deleted file mode 100644 index 3151eceb..00000000 --- a/vendor/github.com/client9/misspell/stringreplacer.go +++ /dev/null @@ -1,336 +0,0 @@ -// Copyright 2011 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package misspell - -import ( - "io" - // "log" - "strings" -) - -// StringReplacer replaces a list of strings with replacements. -// It is safe for concurrent use by multiple goroutines. -type StringReplacer struct { - r replacer -} - -// replacer is the interface that a replacement algorithm needs to implement. -type replacer interface { - Replace(s string) string - WriteString(w io.Writer, s string) (n int, err error) -} - -// NewStringReplacer returns a new Replacer from a list of old, new string pairs. -// Replacements are performed in order, without overlapping matches. -func NewStringReplacer(oldnew ...string) *StringReplacer { - if len(oldnew)%2 == 1 { - panic("strings.NewReplacer: odd argument count") - } - - return &StringReplacer{r: makeGenericReplacer(oldnew)} -} - -// Replace returns a copy of s with all replacements performed. -func (r *StringReplacer) Replace(s string) string { - return r.r.Replace(s) -} - -// WriteString writes s to w with all replacements performed. -func (r *StringReplacer) WriteString(w io.Writer, s string) (n int, err error) { - return r.r.WriteString(w, s) -} - -// trieNode is a node in a lookup trie for prioritized key/value pairs. Keys -// and values may be empty. For example, the trie containing keys "ax", "ay", -// "bcbc", "x" and "xy" could have eight nodes: -// -// n0 - -// n1 a- -// n2 .x+ -// n3 .y+ -// n4 b- -// n5 .cbc+ -// n6 x+ -// n7 .y+ -// -// n0 is the root node, and its children are n1, n4 and n6; n1's children are -// n2 and n3; n4's child is n5; n6's child is n7. Nodes n0, n1 and n4 (marked -// with a trailing "-") are partial keys, and nodes n2, n3, n5, n6 and n7 -// (marked with a trailing "+") are complete keys. -type trieNode struct { - // value is the value of the trie node's key/value pair. It is empty if - // this node is not a complete key. - value string - // priority is the priority (higher is more important) of the trie node's - // key/value pair; keys are not necessarily matched shortest- or longest- - // first. Priority is positive if this node is a complete key, and zero - // otherwise. In the example above, positive/zero priorities are marked - // with a trailing "+" or "-". - priority int - - // A trie node may have zero, one or more child nodes: - // * if the remaining fields are zero, there are no children. - // * if prefix and next are non-zero, there is one child in next. - // * if table is non-zero, it defines all the children. - // - // Prefixes are preferred over tables when there is one child, but the - // root node always uses a table for lookup efficiency. - - // prefix is the difference in keys between this trie node and the next. - // In the example above, node n4 has prefix "cbc" and n4's next node is n5. - // Node n5 has no children and so has zero prefix, next and table fields. - prefix string - next *trieNode - - // table is a lookup table indexed by the next byte in the key, after - // remapping that byte through genericReplacer.mapping to create a dense - // index. In the example above, the keys only use 'a', 'b', 'c', 'x' and - // 'y', which remap to 0, 1, 2, 3 and 4. All other bytes remap to 5, and - // genericReplacer.tableSize will be 5. Node n0's table will be - // []*trieNode{ 0:n1, 1:n4, 3:n6 }, where the 0, 1 and 3 are the remapped - // 'a', 'b' and 'x'. - table []*trieNode -} - -func (t *trieNode) add(key, val string, priority int, r *genericReplacer) { - if key == "" { - if t.priority == 0 { - t.value = val - t.priority = priority - } - return - } - - if t.prefix != "" { - // Need to split the prefix among multiple nodes. - var n int // length of the longest common prefix - for ; n < len(t.prefix) && n < len(key); n++ { - if t.prefix[n] != key[n] { - break - } - } - if n == len(t.prefix) { - t.next.add(key[n:], val, priority, r) - } else if n == 0 { - // First byte differs, start a new lookup table here. Looking up - // what is currently t.prefix[0] will lead to prefixNode, and - // looking up key[0] will lead to keyNode. - var prefixNode *trieNode - if len(t.prefix) == 1 { - prefixNode = t.next - } else { - prefixNode = &trieNode{ - prefix: t.prefix[1:], - next: t.next, - } - } - keyNode := new(trieNode) - t.table = make([]*trieNode, r.tableSize) - t.table[r.mapping[t.prefix[0]]] = prefixNode - t.table[r.mapping[key[0]]] = keyNode - t.prefix = "" - t.next = nil - keyNode.add(key[1:], val, priority, r) - } else { - // Insert new node after the common section of the prefix. - next := &trieNode{ - prefix: t.prefix[n:], - next: t.next, - } - t.prefix = t.prefix[:n] - t.next = next - next.add(key[n:], val, priority, r) - } - } else if t.table != nil { - // Insert into existing table. - m := r.mapping[key[0]] - if t.table[m] == nil { - t.table[m] = new(trieNode) - } - t.table[m].add(key[1:], val, priority, r) - } else { - t.prefix = key - t.next = new(trieNode) - t.next.add("", val, priority, r) - } -} - -func (r *genericReplacer) lookup(s string, ignoreRoot bool) (val string, keylen int, found bool) { - // Iterate down the trie to the end, and grab the value and keylen with - // the highest priority. - bestPriority := 0 - node := &r.root - n := 0 - for node != nil { - if node.priority > bestPriority && !(ignoreRoot && node == &r.root) { - bestPriority = node.priority - val = node.value - keylen = n - found = true - } - - if s == "" { - break - } - if node.table != nil { - index := r.mapping[ByteToLower(s[0])] - if int(index) == r.tableSize { - break - } - node = node.table[index] - s = s[1:] - n++ - } else if node.prefix != "" && StringHasPrefixFold(s, node.prefix) { - n += len(node.prefix) - s = s[len(node.prefix):] - node = node.next - } else { - break - } - } - return -} - -// genericReplacer is the fully generic algorithm. -// It's used as a fallback when nothing faster can be used. -type genericReplacer struct { - root trieNode - // tableSize is the size of a trie node's lookup table. It is the number - // of unique key bytes. - tableSize int - // mapping maps from key bytes to a dense index for trieNode.table. - mapping [256]byte -} - -func makeGenericReplacer(oldnew []string) *genericReplacer { - r := new(genericReplacer) - // Find each byte used, then assign them each an index. - for i := 0; i < len(oldnew); i += 2 { - key := strings.ToLower(oldnew[i]) - for j := 0; j < len(key); j++ { - r.mapping[key[j]] = 1 - } - } - - for _, b := range r.mapping { - r.tableSize += int(b) - } - - var index byte - for i, b := range r.mapping { - if b == 0 { - r.mapping[i] = byte(r.tableSize) - } else { - r.mapping[i] = index - index++ - } - } - // Ensure root node uses a lookup table (for performance). - r.root.table = make([]*trieNode, r.tableSize) - - for i := 0; i < len(oldnew); i += 2 { - r.root.add(strings.ToLower(oldnew[i]), oldnew[i+1], len(oldnew)-i, r) - } - return r -} - -type appendSliceWriter []byte - -// Write writes to the buffer to satisfy io.Writer. -func (w *appendSliceWriter) Write(p []byte) (int, error) { - *w = append(*w, p...) - return len(p), nil -} - -// WriteString writes to the buffer without string->[]byte->string allocations. -func (w *appendSliceWriter) WriteString(s string) (int, error) { - *w = append(*w, s...) - return len(s), nil -} - -type stringWriterIface interface { - WriteString(string) (int, error) -} - -type stringWriter struct { - w io.Writer -} - -func (w stringWriter) WriteString(s string) (int, error) { - return w.w.Write([]byte(s)) -} - -func getStringWriter(w io.Writer) stringWriterIface { - sw, ok := w.(stringWriterIface) - if !ok { - sw = stringWriter{w} - } - return sw -} - -func (r *genericReplacer) Replace(s string) string { - buf := make(appendSliceWriter, 0, len(s)) - r.WriteString(&buf, s) - return string(buf) -} - -func (r *genericReplacer) WriteString(w io.Writer, s string) (n int, err error) { - sw := getStringWriter(w) - var last, wn int - var prevMatchEmpty bool - for i := 0; i <= len(s); { - // Fast path: s[i] is not a prefix of any pattern. - if i != len(s) && r.root.priority == 0 { - index := int(r.mapping[ByteToLower(s[i])]) - if index == r.tableSize || r.root.table[index] == nil { - i++ - continue - } - } - - // Ignore the empty match iff the previous loop found the empty match. - val, keylen, match := r.lookup(s[i:], prevMatchEmpty) - prevMatchEmpty = match && keylen == 0 - if match { - orig := s[i : i+keylen] - switch CaseStyle(orig) { - case CaseUnknown: - // pretend we didn't match - // i++ - // continue - case CaseUpper: - val = strings.ToUpper(val) - case CaseLower: - val = strings.ToLower(val) - case CaseTitle: - if len(val) < 2 { - val = strings.ToUpper(val) - } else { - val = strings.ToUpper(val[:1]) + strings.ToLower(val[1:]) - } - } - wn, err = sw.WriteString(s[last:i]) - n += wn - if err != nil { - return - } - //log.Printf("%d: Going to correct %q with %q", i, s[i:i+keylen], val) - wn, err = sw.WriteString(val) - n += wn - if err != nil { - return - } - i += keylen - last = i - continue - } - i++ - } - if last != len(s) { - wn, err = sw.WriteString(s[last:]) - n += wn - } - return -} diff --git a/vendor/github.com/client9/misspell/stringreplacer_test.gox b/vendor/github.com/client9/misspell/stringreplacer_test.gox deleted file mode 100644 index 70da997f..00000000 --- a/vendor/github.com/client9/misspell/stringreplacer_test.gox +++ /dev/null @@ -1,421 +0,0 @@ -// Copyright 2009 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package misspell_test - -import ( - "bytes" - "fmt" - "strings" - "testing" - - . "github.com/client9/misspell" -) - -var htmlEscaper = NewStringReplacer( - "&", "&", - "<", "<", - ">", ">", - `"`, """, - "'", "'", -) - -var htmlUnescaper = NewStringReplacer( - "&", "&", - "<", "<", - ">", ">", - """, `"`, - "'", "'", -) - -// The http package's old HTML escaping function. -func oldHTMLEscape(s string) string { - s = strings.Replace(s, "&", "&", -1) - s = strings.Replace(s, "<", "<", -1) - s = strings.Replace(s, ">", ">", -1) - s = strings.Replace(s, `"`, """, -1) - s = strings.Replace(s, "'", "'", -1) - return s -} - -var capitalLetters = NewStringReplacer("a", "A", "b", "B") - -// TestReplacer tests the replacer implementations. -func TestReplacer(t *testing.T) { - type testCase struct { - r *StringReplacer - in, out string - } - var testCases []testCase - - // str converts 0xff to "\xff". This isn't just string(b) since that converts to UTF-8. - str := func(b byte) string { - return string([]byte{b}) - } - var s []string - - // inc maps "\x00"->"\x01", ..., "a"->"b", "b"->"c", ..., "\xff"->"\x00". - for i := 0; i < 256; i++ { - s = append(s, str(byte(i)), str(byte(i+1))) - } - inc := NewStringReplacer(s...) - - // Test cases with 1-byte old strings, 1-byte new strings. - testCases = append(testCases, - testCase{capitalLetters, "brad", "BrAd"}, - testCase{capitalLetters, strings.Repeat("a", (32<<10)+123), strings.Repeat("A", (32<<10)+123)}, - testCase{capitalLetters, "", ""}, - - testCase{inc, "brad", "csbe"}, - testCase{inc, "\x00\xff", "\x01\x00"}, - testCase{inc, "", ""}, - - testCase{NewStringReplacer("a", "1", "a", "2"), "brad", "br1d"}, - ) - - // repeat maps "a"->"a", "b"->"bb", "c"->"ccc", ... - s = nil - for i := 0; i < 256; i++ { - n := i + 1 - 'a' - if n < 1 { - n = 1 - } - s = append(s, str(byte(i)), strings.Repeat(str(byte(i)), n)) - } - repeat := NewStringReplacer(s...) - - // Test cases with 1-byte old strings, variable length new strings. - testCases = append(testCases, - testCase{htmlEscaper, "No changes", "No changes"}, - testCase{htmlEscaper, "I <3 escaping & stuff", "I <3 escaping & stuff"}, - testCase{htmlEscaper, "&&&", "&&&"}, - testCase{htmlEscaper, "", ""}, - - testCase{repeat, "brad", "bbrrrrrrrrrrrrrrrrrradddd"}, - testCase{repeat, "abba", "abbbba"}, - testCase{repeat, "", ""}, - - testCase{NewStringReplacer("a", "11", "a", "22"), "brad", "br11d"}, - ) - - // The remaining test cases have variable length old strings. - - testCases = append(testCases, - testCase{htmlUnescaper, "&amp;", "&"}, - testCase{htmlUnescaper, "<b>HTML's neat</b>", "<b>HTML's neat</b>"}, - testCase{htmlUnescaper, "", ""}, - - testCase{NewStringReplacer("a", "1", "a", "2", "xxx", "xxx"), "brad", "br1d"}, - - testCase{NewStringReplacer("a", "1", "aa", "2", "aaa", "3"), "aaaa", "1111"}, - - testCase{NewStringReplacer("aaa", "3", "aa", "2", "a", "1"), "aaaa", "31"}, - ) - - // gen1 has multiple old strings of variable length. There is no - // overall non-empty common prefix, but some pairwise common prefixes. - gen1 := NewStringReplacer( - "aaa", "3[aaa]", - "aa", "2[aa]", - "a", "1[a]", - "i", "i", - "longerst", "most long", - "longer", "medium", - "long", "short", - "xx", "xx", - "x", "X", - "X", "Y", - "Y", "Z", - ) - testCases = append(testCases, - testCase{gen1, "fooaaabar", "foo3[aaa]b1[a]r"}, - testCase{gen1, "long, longerst, longer", "short, most long, medium"}, - testCase{gen1, "xxxxx", "xxxxX"}, - testCase{gen1, "XiX", "YiY"}, - testCase{gen1, "", ""}, - ) - - // gen2 has multiple old strings with no pairwise common prefix. - gen2 := NewStringReplacer( - "roses", "red", - "violets", "blue", - "sugar", "sweet", - ) - testCases = append(testCases, - testCase{gen2, "roses are red, violets are blue...", "red are red, blue are blue..."}, - testCase{gen2, "", ""}, - ) - - // gen3 has multiple old strings with an overall common prefix. - gen3 := NewStringReplacer( - "abracadabra", "poof", - "abracadabrakazam", "splat", - "abraham", "lincoln", - "abrasion", "scrape", - "abraham", "isaac", - ) - testCases = append(testCases, - testCase{gen3, "abracadabrakazam abraham", "poofkazam lincoln"}, - testCase{gen3, "abrasion abracad", "scrape abracad"}, - testCase{gen3, "abba abram abrasive", "abba abram abrasive"}, - testCase{gen3, "", ""}, - ) - - // foo{1,2,3,4} have multiple old strings with an overall common prefix - // and 1- or 2- byte extensions from the common prefix. - foo1 := NewStringReplacer( - "foo1", "A", - "foo2", "B", - "foo3", "C", - ) - foo2 := NewStringReplacer( - "foo1", "A", - "foo2", "B", - "foo31", "C", - "foo32", "D", - ) - foo3 := NewStringReplacer( - "foo11", "A", - "foo12", "B", - "foo31", "C", - "foo32", "D", - ) - foo4 := NewStringReplacer( - "foo12", "B", - "foo32", "D", - ) - testCases = append(testCases, - testCase{foo1, "fofoofoo12foo32oo", "fofooA2C2oo"}, - testCase{foo1, "", ""}, - - testCase{foo2, "fofoofoo12foo32oo", "fofooA2Doo"}, - testCase{foo2, "", ""}, - - testCase{foo3, "fofoofoo12foo32oo", "fofooBDoo"}, - testCase{foo3, "", ""}, - - testCase{foo4, "fofoofoo12foo32oo", "fofooBDoo"}, - testCase{foo4, "", ""}, - ) - - // genAll maps "\x00\x01\x02...\xfe\xff" to "[all]", amongst other things. - allBytes := make([]byte, 256) - for i := range allBytes { - allBytes[i] = byte(i) - } - allString := string(allBytes) - genAll := NewStringReplacer( - allString, "[all]", - "\xff", "[ff]", - "\x00", "[00]", - ) - testCases = append(testCases, - testCase{genAll, allString, "[all]"}, - testCase{genAll, "a\xff" + allString + "\x00", "a[ff][all][00]"}, - testCase{genAll, "", ""}, - ) - - // Test cases with empty old strings. - - blankToX1 := NewStringReplacer("", "X") - blankToX2 := NewStringReplacer("", "X", "", "") - blankHighPriority := NewStringReplacer("", "X", "o", "O") - blankLowPriority := NewStringReplacer("o", "O", "", "X") - blankNoOp1 := NewStringReplacer("", "") - blankNoOp2 := NewStringReplacer("", "", "", "A") - blankFoo := NewStringReplacer("", "X", "foobar", "R", "foobaz", "Z") - testCases = append(testCases, - testCase{blankToX1, "foo", "XfXoXoX"}, - testCase{blankToX1, "", "X"}, - - testCase{blankToX2, "foo", "XfXoXoX"}, - testCase{blankToX2, "", "X"}, - - testCase{blankHighPriority, "oo", "XOXOX"}, - testCase{blankHighPriority, "ii", "XiXiX"}, - testCase{blankHighPriority, "oiio", "XOXiXiXOX"}, - testCase{blankHighPriority, "iooi", "XiXOXOXiX"}, - testCase{blankHighPriority, "", "X"}, - - testCase{blankLowPriority, "oo", "OOX"}, - testCase{blankLowPriority, "ii", "XiXiX"}, - testCase{blankLowPriority, "oiio", "OXiXiOX"}, - testCase{blankLowPriority, "iooi", "XiOOXiX"}, - testCase{blankLowPriority, "", "X"}, - - testCase{blankNoOp1, "foo", "foo"}, - testCase{blankNoOp1, "", ""}, - - testCase{blankNoOp2, "foo", "foo"}, - testCase{blankNoOp2, "", ""}, - - testCase{blankFoo, "foobarfoobaz", "XRXZX"}, - testCase{blankFoo, "foobar-foobaz", "XRX-XZX"}, - testCase{blankFoo, "", "X"}, - ) - - // single string replacer - - abcMatcher := NewStringReplacer("abc", "[match]") - - testCases = append(testCases, - testCase{abcMatcher, "", ""}, - testCase{abcMatcher, "ab", "ab"}, - testCase{abcMatcher, "abc", "[match]"}, - testCase{abcMatcher, "abcd", "[match]d"}, - testCase{abcMatcher, "cabcabcdabca", "c[match][match]d[match]a"}, - ) - - // Issue 6659 cases (more single string replacer) - - noHello := NewStringReplacer("Hello", "") - testCases = append(testCases, - testCase{noHello, "Hello", ""}, - testCase{noHello, "Hellox", "x"}, - testCase{noHello, "xHello", "x"}, - testCase{noHello, "xHellox", "xx"}, - ) - - // No-arg test cases. - - nop := NewStringReplacer() - testCases = append(testCases, - testCase{nop, "abc", "abc"}, - testCase{nop, "", ""}, - ) - - // Run the test cases. - - for i, tc := range testCases { - if s := tc.r.Replace(tc.in); s != tc.out { - t.Errorf("%d. strings.Replace(%q) = %q, want %q", i, tc.in, s, tc.out) - } - var buf bytes.Buffer - n, err := tc.r.WriteString(&buf, tc.in) - if err != nil { - t.Errorf("%d. WriteString: %v", i, err) - continue - } - got := buf.String() - if got != tc.out { - t.Errorf("%d. WriteString(%q) wrote %q, want %q", i, tc.in, got, tc.out) - continue - } - if n != len(tc.out) { - t.Errorf("%d. WriteString(%q) wrote correct string but reported %d bytes; want %d (%q)", - i, tc.in, n, len(tc.out), tc.out) - } - } -} - -type errWriter struct{} - -func (errWriter) Write(p []byte) (n int, err error) { - return 0, fmt.Errorf("unwritable") -} - -func BenchmarkGenericNoMatch(b *testing.B) { - str := strings.Repeat("A", 100) + strings.Repeat("B", 100) - generic := NewStringReplacer("a", "A", "b", "B", "12", "123") // varying lengths forces generic - for i := 0; i < b.N; i++ { - generic.Replace(str) - } -} - -func BenchmarkGenericMatch1(b *testing.B) { - str := strings.Repeat("a", 100) + strings.Repeat("b", 100) - generic := NewStringReplacer("a", "A", "b", "B", "12", "123") - for i := 0; i < b.N; i++ { - generic.Replace(str) - } -} - -func BenchmarkGenericMatch2(b *testing.B) { - str := strings.Repeat("It's <b>HTML</b>!", 100) - for i := 0; i < b.N; i++ { - htmlUnescaper.Replace(str) - } -} - -func benchmarkSingleString(b *testing.B, pattern, text string) { - r := NewStringReplacer(pattern, "[match]") - b.SetBytes(int64(len(text))) - b.ResetTimer() - for i := 0; i < b.N; i++ { - r.Replace(text) - } -} - -func BenchmarkSingleMaxSkipping(b *testing.B) { - benchmarkSingleString(b, strings.Repeat("b", 25), strings.Repeat("a", 10000)) -} - -func BenchmarkSingleLongSuffixFail(b *testing.B) { - benchmarkSingleString(b, "b"+strings.Repeat("a", 500), strings.Repeat("a", 1002)) -} - -func BenchmarkSingleMatch(b *testing.B) { - benchmarkSingleString(b, "abcdef", strings.Repeat("abcdefghijklmno", 1000)) -} - -func BenchmarkByteByteNoMatch(b *testing.B) { - str := strings.Repeat("A", 100) + strings.Repeat("B", 100) - for i := 0; i < b.N; i++ { - capitalLetters.Replace(str) - } -} - -func BenchmarkByteByteMatch(b *testing.B) { - str := strings.Repeat("a", 100) + strings.Repeat("b", 100) - for i := 0; i < b.N; i++ { - capitalLetters.Replace(str) - } -} - -func BenchmarkByteStringMatch(b *testing.B) { - str := "<" + strings.Repeat("a", 99) + strings.Repeat("b", 99) + ">" - for i := 0; i < b.N; i++ { - htmlEscaper.Replace(str) - } -} - -func BenchmarkHTMLEscapeNew(b *testing.B) { - str := "I <3 to escape HTML & other text too." - for i := 0; i < b.N; i++ { - htmlEscaper.Replace(str) - } -} - -func BenchmarkHTMLEscapeOld(b *testing.B) { - str := "I <3 to escape HTML & other text too." - for i := 0; i < b.N; i++ { - oldHTMLEscape(str) - } -} - -func BenchmarkByteStringReplacerWriteString(b *testing.B) { - str := strings.Repeat("I <3 to escape HTML & other text too.", 100) - buf := new(bytes.Buffer) - for i := 0; i < b.N; i++ { - htmlEscaper.WriteString(buf, str) - buf.Reset() - } -} - -func BenchmarkByteReplacerWriteString(b *testing.B) { - str := strings.Repeat("abcdefghijklmnopqrstuvwxyz", 100) - buf := new(bytes.Buffer) - for i := 0; i < b.N; i++ { - capitalLetters.WriteString(buf, str) - buf.Reset() - } -} - -// BenchmarkByteByteReplaces compares byteByteImpl against multiple Replaces. -func BenchmarkByteByteReplaces(b *testing.B) { - str := strings.Repeat("a", 100) + strings.Repeat("b", 100) - for i := 0; i < b.N; i++ { - strings.Replace(strings.Replace(str, "a", "A", -1), "b", "B", -1) - } -} diff --git a/vendor/github.com/client9/misspell/url.go b/vendor/github.com/client9/misspell/url.go deleted file mode 100644 index 1a259f5f..00000000 --- a/vendor/github.com/client9/misspell/url.go +++ /dev/null @@ -1,17 +0,0 @@ -package misspell - -import ( - "regexp" -) - -// Regexp for URL https://mathiasbynens.be/demo/url-regex -// -// original @imme_emosol (54 chars) has trouble with dashes in hostname -// @(https?|ftp)://(-\.)?([^\s/?\.#-]+\.?)+(/[^\s]*)?$@iS -var reURL = regexp.MustCompile(`(?i)(https?|ftp)://(-\.)?([^\s/?\.#]+\.?)+(/[^\s]*)?`) - -// StripURL attemps to replace URLs with blank spaces, e.g. -// "xxx http://foo.com/ yyy -> "xxx yyyy" -func StripURL(s string) string { - return reURL.ReplaceAllStringFunc(s, replaceWithBlanks) -} diff --git a/vendor/github.com/client9/misspell/words.go b/vendor/github.com/client9/misspell/words.go deleted file mode 100644 index c92dd19d..00000000 --- a/vendor/github.com/client9/misspell/words.go +++ /dev/null @@ -1,31158 +0,0 @@ -package misspell - -// Code generated automatically. DO NOT EDIT. - -// DictMain is the main rule set, not including locale-specific spellings -var DictMain = []string{ - "differentiatiations", "differentiations", - "disproportionaltely", "disproportionately", - "oversimplificiation", "oversimplification", - "transcendentational", "transcendental", - "anthromorphization", "anthropomorphization", - "disporportionately", "disproportionately", - "dispraportionately", "disproportionately", - "disproportianately", "disproportionately", - "disproportionatley", "disproportionately", - "disproprotionately", "disproportionately", - "fundamentalistisch", "fundamentalists", - "fundamentalistiska", "fundamentalists", - "fundamentalistiske", "fundamentalists", - "fundamentalistiskt", "fundamentalists", - "histocompatability", "histocompatibility", - "microtransacations", "microtransactions", - "microtransacciones", "microtransactions", - "microtransactional", "microtransactions", - "microtransactioned", "microtransactions", - "misunderstandingly", "misunderstandings", - "oversemplification", "oversimplification", - "oversimplifacation", "oversimplification", - "oversimplificaiton", "oversimplification", - "oversimplificating", "oversimplification", - "oversimplyfication", "oversimplification", - "cardiovasculaires", "cardiovascular", - "certificationkits", "certifications", - "counterporductive", "counterproductive", - "coutnerproductive", "counterproductive", - "disporportionatly", "disproportionately", - "disproportiantely", "disproportionately", - "disproportionatly", "disproportionately", - "disproportionnate", "disproportionate", - "disrepresentation", "misrepresentation", - "fundamentalistisk", "fundamentalists", - "incompatabilities", "incompatibilities", - "inconsequentional", "inconsequential", - "indistinguishible", "indistinguishable", - "indistingusihable", "indistinguishable", - "indistinquishable", "indistinguishable", - "indistuingishable", "indistinguishable", - "instatutionalized", "institutionalized", - "institucionalized", "institutionalized", - "institutionilized", "institutionalized", - "instutitionalized", "institutionalized", - "instututionalized", "institutionalized", - "interchangeablely", "interchangeably", - "interchangeablity", "interchangeably", - "intercontinential", "intercontinental", - "micortransactions", "microtransactions", - "microstansactions", "microtransactions", - "microtramsactions", "microtransactions", - "microtranasctions", "microtransactions", - "microtransacitons", "microtransactions", - "microtransacrions", "microtransactions", - "microtransactioms", "microtransactions", - "microtransactiosn", "microtransactions", - "microtranscations", "microtransactions", - "microtrasnactions", "microtransactions", - "mircotransactions", "microtransactions", - "misinterpretating", "misinterpreting", - "misrepresantation", "misrepresentation", - "misrepresentaiton", "misrepresentation", - "misrepresentating", "misrepresenting", - "misunderstantings", "misunderstandings", - "mocrotransactions", "microtransactions", - "oversimplifaction", "oversimplification", - "oversimplificaton", "oversimplification", - "oversimplifiction", "oversimplification", - "responsibillities", "responsibilities", - "unconstitutionnal", "unconstitutional", - "accomplishements", "accomplishments", - "admininistrative", "administrative", - "antidepresssants", "antidepressants", - "architechturally", "architecturally", - "cardiovasculaire", "cardiovascular", - "charactarization", "characterization", - "characterazation", "characterization", - "characterisitics", "characteristics", - "characteristsics", "characteristic", - "characterizarion", "characterization", - "charecterization", "characterization", - "charicterization", "characterization", - "circumstantional", "circumstantial", - "conversationable", "conversational", - "counterprodutive", "counterproductive", - "demonstrationens", "demonstrations", - "deterministische", "deterministic", - "differenciations", "differentiation", - "differentiantion", "differentiation", - "differentiatiors", "differentiation", - "differentitation", "differentiation", - "disperportionate", "disproportionate", - "disporportionate", "disproportionate", - "dispraportionate", "disproportionate", - "disproportianate", "disproportionate", - "disproportionaly", "disproportionately", - "disproprotionate", "disproportionate", - "electromagnectic", "electromagnetic", - "enviornmentalist", "environmentalist", - "environmentality", "environmentally", - "extraordinairily", "extraordinarily", - "extraordinarilly", "extraordinary", - "extraterrestials", "extraterrestrials", - "fundamentalismos", "fundamentalists", - "fundamentalismus", "fundamentalists", - "fundamentalistas", "fundamentalists", - "fundamentalisten", "fundamentalists", - "fundamentalister", "fundamentalists", - "imcomprehensible", "incomprehensible", - "immunosupressant", "immunosuppressant", - "imperfectionists", "imperfections", - "implementaciones", "implementations", - "implementationen", "implementations", - "implementationer", "implementations", - "inappropriatelly", "inappropriately", - "incompatablities", "incompatibilities", - "incompatiblities", "incompatibilities", - "incomprehencible", "incomprehensible", - "incomprehendible", "incomprehensible", - "incomprehenisble", "incomprehensible", - "incomprehensable", "incomprehensible", - "incomprehinsible", "incomprehensible", - "incomprihensible", "incomprehensible", - "inconprehensible", "incomprehensible", - "inconsistentcies", "inconsistencies", - "inconstitutional", "unconstitutional", - "incrompehensible", "incomprehensible", - "indistinguisable", "indistinguishable", - "institutionlized", "institutionalized", - "intellectualiser", "intellectuals", - "intellectualisme", "intellectuals", - "interchangeabley", "interchangeably", - "internationnally", "internationally", - "interpretaciones", "interpretations", - "interpretationen", "interpretations", - "manoeuverability", "maneuverability", - "massachusettians", "massachusetts", - "microtransacions", "microtransactions", - "microtransacting", "microtransactions", - "microtransactios", "microtransactions", - "microtransactons", "microtransactions", - "microtransations", "microtransactions", - "microtranscation", "microtransactions", - "mircotransaction", "microtransactions", - "miscommunciation", "miscommunication", - "miscommunicaiton", "miscommunication", - "miscomunnication", "miscommunication", - "miscummunication", "miscommunication", - "misinterpretated", "misinterpreted", - "misinterpretions", "misinterpreting", - "misinterpretting", "misinterpreting", - "misproportionate", "disproportionate", - "misrepresenation", "misrepresentation", - "misrepresentaion", "misrepresentation", - "misrepresentated", "misrepresented", - "misrepresentatie", "misrepresentation", - "misrepresentativ", "misrepresentation", - "misubderstanding", "misunderstandings", - "misudnerstanding", "misunderstandings", - "misundarstanding", "misunderstandings", - "misunderatanding", "misunderstandings", - "misunderdtanding", "misunderstandings", - "misundersatnding", "misunderstandings", - "misundersranding", "misunderstandings", - "misunderstadings", "misunderstandings", - "misunderstadning", "misunderstandings", - "misunderstamding", "misunderstandings", - "misunderstandigs", "misunderstandings", - "misunderstandimg", "misunderstandings", - "misunderstandind", "misunderstandings", - "misunderstanging", "misunderstandings", - "misunderstanidng", "misunderstandings", - "misunderstanings", "misunderstandings", - "misunderstansing", "misunderstandings", - "misunderstanting", "misunderstandings", - "misunderstending", "misunderstandings", - "misunderstnading", "misunderstandings", - "misunderstsnding", "misunderstandings", - "misunderstunding", "misunderstandings", - "misundertsanding", "misunderstandings", - "misundrestanding", "misunderstandings", - "misunterstanding", "misunderstandings", - "nationalistische", "nationalistic", - "nationalististic", "nationalistic", - "neconstitutional", "unconstitutional", - "notwhithstanding", "notwithstanding", - "objectificiation", "objectification", - "organisationnels", "organisations", - "perpendiculaires", "perpendicular", - "phillosophically", "philosophically", - "preinitalization", "preinitialization", - "prescriptionists", "prescriptions", - "procrastinarting", "procrastinating", - "procrastinationg", "procrastinating", - "procrastinazione", "procrastination", - "professionalisim", "professionalism", - "professionalisme", "professionals", - "professionallism", "professionalism", - "professionnalism", "professionalism", - "programattically", "programmatically", - "proportionallity", "proportionally", - "reaponsibilities", "responsibilities", - "reinitalizations", "reinitializations", - "representaciones", "representations", - "representationen", "representations", - "representationer", "representations", - "repsonsibilities", "responsibilities", - "responcibilities", "responsibilities", - "responisbilities", "responsibilities", - "responsabilities", "responsibilities", - "responsebilities", "responsibilities", - "straightforeward", "straightforward", - "surrepetitiously", "surreptitiously", - "technologicially", "technologically", - "unconditionnally", "unconditionally", - "unconfortability", "discomfort", - "unconstititional", "unconstitutional", - "uncontrollablely", "uncontrollably", - "underestimateing", "underestimating", - "understandablely", "understandably", - "unintentionnally", "unintentionally", - "unsubstantianted", "unsubstantiated", - "unsubstantiative", "unsubstantiated", - "acclimitization", "acclimatization", - "accomplishemnts", "accomplishments", - "accountabillity", "accountability", - "acknolwedgement", "acknowledgement", - "acknoweldgement", "acknowledgement", - "acknowldegement", "acknowledgement", - "acknowlegdement", "acknowledgement", - "administratieve", "administrative", - "administratiors", "administrators", - "administrativne", "administrative", - "aforementionned", "aforementioned", - "anitdepressants", "antidepressants", - "antidepressents", "antidepressants", - "archetecturally", "architecturally", - "associationthis", "associations", - "authobiographic", "autobiographic", - "awknowledgement", "acknowledgement", - "bureaucratische", "bureaucratic", - "cardiovascualar", "cardiovascular", - "carnagie-mellon", "carnegie-mellon", - "carnigie-mellon", "carnegie-mellon", - "celebrationists", "celebrations", - "charactaristics", "characteristics", - "characterisitcs", "characteristics", - "characterisitic", "characteristic", - "characterizaton", "characterization", - "charactersistic", "characteristic", - "charactersitics", "characteristics", - "charactoristics", "characteristics", - "charecteristics", "characteristics", - "comfrontational", "confrontational", - "commuinications", "communications", - "compatabilities", "compatibilities", - "complimentarity", "complimentary", - "compositionwise", "compositions", - "confidenciality", "confidential", - "confidentuality", "confidential", - "confrentational", "confrontational", - "confrontacional", "confrontational", - "conglaturations", "congratulations", - "congradulations", "congratulations", - "congragulations", "congratulations", - "congratualtions", "congratulations", - "congraturations", "congratulations", - "consequentually", "consequently", - "constitutionnal", "constitutional", - "deinitalization", "deinitialization", - "denominationals", "denominations", - "destinationhash", "destinations", - "deterministisch", "deterministic", - "developmentwise", "developments", - "differantiation", "differentiation", - "differenciation", "differentiation", - "differientation", "differentiation", - "discriminatoire", "discriminate", - "discriminatorie", "discriminate", - "disproportiante", "disproportionate", - "disproportinate", "disproportionate", - "elecrtomagnetic", "electromagnetic", - "electormagnetic", "electromagnetic", - "electromagentic", "electromagnetic", - "electromagnatic", "electromagnetic", - "electromangetic", "electromagnetic", - "electromegnetic", "electromagnetic", - "electronagnetic", "electromagnetic", - "enivronmentally", "environmentally", - "entrepreneurers", "entrepreneurs", - "enviornmentally", "environmentally", - "enviromentalist", "environmentalist", - "environemntally", "environmentally", - "envrionmentally", "environmentally", - "evolutionarilly", "evolutionary", - "experementation", "experimentation", - "experimantation", "experimentation", - "experimentacion", "experimentation", - "experimentating", "experimentation", - "experimenterade", "experimented", - "experimintation", "experimentation", - "expirementation", "experimentation", - "extraodrinarily", "extraordinarily", - "extraordinairly", "extraordinarily", - "extraordinarely", "extraordinarily", - "extraordinaryly", "extraordinarily", - "extraterrestial", "extraterrestrial", - "extroardinarily", "extraordinarily", - "fondamentalists", "fundamentalists", - "fundamendalists", "fundamentalists", - "fundamentalisme", "fundamentals", - "fundamentalismo", "fundamentals", - "fundamentalista", "fundamentals", - "fundamentalisti", "fundamentals", - "fundamnetalists", "fundamentalists", - "fundemantalists", "fundamentalists", - "fundimentalists", "fundamentalists", - "fundumentalists", "fundamentalists", - "gongratulations", "congratulations", - "grammaticallity", "grammatically", - "gundamentalists", "fundamentalists", - "idiosynchracies", "idiosyncrasies", - "implementaitons", "implementations", - "implimentations", "implementations", - "inapporpriately", "inappropriately", - "inappropraitely", "inappropriately", - "inappropriatley", "inappropriately", - "incompatability", "incompatibility", - "incompetentence", "incompetence", - "incomprehensibe", "incomprehensible", - "incomprehesible", "incomprehensible", - "inconcequential", "inconsequential", - "inconcistencies", "inconsistencies", - "inconditionally", "unconditionally", - "inconsecuential", "inconsequential", - "inconsequantial", "inconsequential", - "inconsequencial", "inconsequential", - "inconsequentual", "inconsequential", - "inconsiquential", "inconsequential", - "inconsistancies", "inconsistencies", - "inconsistencias", "inconsistencies", - "inconsistensies", "inconsistencies", - "inconsistenties", "inconsistencies", - "independentisme", "independents", - "independentiste", "independents", - "independentness", "independents", - "inexperiencable", "inexperience", - "inplementations", "implementations", - "instantaneoulsy", "instantaneous", - "institutionella", "institutional", - "institutionnels", "institutions", - "instutionalized", "institutionalized", - "insubstantiated", "unsubstantiated", - "interchangabley", "interchangeably", - "interchangebale", "interchangeable", - "intercontinetal", "intercontinental", - "interpertations", "interpretations", - "interpratations", "interpretations", - "interpritations", "interpretations", - "intersectionals", "intersections", - "intrepretations", "interpretations", - "investigationes", "investigations", - "journalistische", "journalistic", - "libertarianisim", "libertarianism", - "libertarianisme", "libertarians", - "libertarianismo", "libertarians", - "libertarianists", "libertarians", - "libertariansism", "libertarianism", - "manisfestations", "manifestations", - "manouverability", "maneuverability", - "manufacturerers", "manufacturers", - "marshmallowiest", "marshmallows", - "marshmallowness", "marshmallows", - "microtransacton", "microtransactions", - "mininterpreting", "misinterpreting", - "miscommuniation", "miscommunication", - "miscommunicatie", "miscommunication", - "miscommuniction", "miscommunication", - "misinterperting", "misinterpreting", - "misinterprating", "misinterpreting", - "misinterprented", "misinterpret", - "misinterprested", "misinterpret", - "misinterpretion", "misinterpreting", - "misinterpretted", "misinterpreted", - "misinterpriting", "misinterpreting", - "misintrepreting", "misinterpreting", - "misrepresention", "misrepresenting", - "misunderstading", "misunderstanding", - "misunderstandig", "misunderstandings", - "misunderstandng", "misunderstandings", - "misunderstaning", "misunderstanding", - "multicultralism", "multiculturalism", - "multinationella", "multinational", - "nationalistisch", "nationalists", - "nationalistisen", "nationalists", - "nationalistiska", "nationalists", - "nationalistiske", "nationalists", - "nationalistiskt", "nationalists", - "nationalistista", "nationalists", - "objectificaiton", "objectification", - "objectivication", "objectification", - "organisationens", "organisations", - "organisationers", "organisations", - "overestimateing", "overestimating", - "paychologically", "psychologically", - "performancetest", "performances", - "performancewise", "performances", - "perpendiculaire", "perpendicular", - "pharamceuticals", "pharmaceutical", - "pharmacueticals", "pharmaceutical", - "philoshopically", "philosophically", - "philosohpically", "philosophically", - "philosophycally", "philosophically", - "phsycologically", "psychologically", - "phychologically", "psychologically", - "phylosophically", "philosophically", - "physcologically", "psychologically", - "precrastination", "procrastination", - "prefessionalism", "professionalism", - "premonasterians", "premonstratensians", - "procastrinating", "procrastinating", - "procastrination", "procrastination", - "procrascinating", "procrastinating", - "procrastenating", "procrastinating", - "procrastiantion", "procrastination", - "procrastibating", "procrastinating", - "procrastibation", "procrastination", - "procrastonating", "procrastinating", - "procrestinating", "procrastinating", - "procrestination", "procrastination", - "professionalsim", "professionalism", - "prograstination", "procrastination", - "progressionists", "progressions", - "progressionwise", "progressions", - "prokrastination", "procrastination", - "proportionallly", "proportionally", - "proscratination", "procrastination", - "pscyhologically", "psychologically", - "pshycologically", "psychologically", - "psichologically", "psychologically", - "psychedelicious", "psychedelics", - "psychedelicness", "psychedelics", - "psycholigically", "psychologically", - "psychopathische", "psychopathic", - "pyschologically", "psychologically", - "racionalization", "rationalization", - "rationalizaiton", "rationalization", - "rationalizating", "rationalization", - "reccomendations", "recommendations", - "recommandations", "recommendations", - "recommondations", "recommendations", - "reinitalization", "reinitialization", - "repersentations", "representations", - "represantations", "representations", - "represantatives", "representatives", - "representatieve", "representative", - "representativas", "representatives", - "representetives", "representatives", - "representitives", "representatives", - "responibilities", "responsibilities", - "responsibilites", "responsibilities", - "responsibilitys", "responsibilities", - "responsibillity", "responsibility", - "responsibilties", "responsibilities", - "responsiblities", "responsibilities", - "ridiculoussness", "ridiculousness", - "saskatchewinian", "saskatchewan", - "satisfactorally", "satisfactory", - "satisfactorilly", "satisfactory", - "schizophreniiic", "schizophrenic", - "sensationalisim", "sensationalism", - "spreadsheeticus", "spreadsheets", - "starightforward", "straightforward", - "straigthforward", "straightforward", - "striaghtforward", "straightforward", - "sustainabillity", "sustainability", - "technoligically", "technologically", - "troubelshooting", "troubleshooting", - "troublehsooting", "troubleshooting", - "troubleshotting", "troubleshooting", - "trustworthyness", "trustworthiness", - "ubsubstantiated", "unsubstantiated", - "unappropriately", "inappropriately", - "uncomfortablely", "uncomfortably", - "uncomfortablity", "uncomfortably", - "unconditionable", "unconditional", - "unconstituional", "unconstitutional", - "uncontitutional", "unconstitutional", - "uncontrollabley", "uncontrollably", - "uncontrollablly", "uncontrollably", - "unconventionnal", "unconventional", - "underastimating", "underestimating", - "underestemating", "underestimating", - "understandabley", "understandably", - "unintensionally", "unintentionally", - "unprofessionnal", "unprofessional", - "unresponsivness", "unresponsive", - "unsibstantiated", "unsubstantiated", - "unsubstanciated", "unsubstantiated", - "unsubstansiated", "unsubstantiated", - "unsusbtantiated", "unsubstantiated", - "untranslateable", "untranslatable", - "vulernabilities", "vulnerabilities", - "vulnarabilities", "vulnerabilities", - "vulnurabilities", "vulnerabilities", - "vunlerabilities", "vulnerabilities", - "vurnerabilities", "vulnerabilities", - "accomplishemnt", "accomplishment", - "accomplishents", "accomplishes", - "acconplishment", "accomplishment", - "acknowledgeing", "acknowledging", - "acknowledgemnt", "acknowledgement", - "acomplishments", "accomplishments", - "administartion", "administration", - "administartors", "administrators", - "administraters", "administrators", - "administratief", "administrative", - "administratiei", "administrative", - "administratior", "administrator", - "administrativo", "administration", - "adminsitration", "administration", - "adminsitrative", "administrative", - "adminsitrators", "administrators", - "affectionatley", "affectionate", - "aforememtioned", "aforementioned", - "aforementioend", "aforementioned", - "alternativelly", "alternatively", - "amministrative", "administrative", - "anitdepressant", "antidepressants", - "approproximate", "approximate", - "approximatelly", "approximately", - "archeaologists", "archeologists", - "architechtures", "architectures", - "architectureal", "architectural", - "architecturial", "architectural", - "assassintation", "assassination", - "authenitcation", "authentication", - "authenticaiton", "authentication", - "authobiography", "autobiography", - "breakthroughts", "breakthroughs", - "bureaucratisch", "bureaucratic", - "calssification", "classification", - "capatilization", "capitalization", - "capitalizacion", "capitalization", - "capitalizaiton", "capitalization", - "capitalizating", "capitalization", - "capitilazation", "capitalization", - "capitolization", "capitalization", - "captialization", "capitalization", - "cardiocascular", "cardiovascular", - "cardiovascualr", "cardiovascular", - "cardiovasuclar", "cardiovascular", - "caridovascular", "cardiovascular", - "cessationalism", "sensationalism", - "cessationalist", "sensationalist", - "charactaristic", "characteristic", - "characterisics", "characteristics", - "characterisitc", "characteristics", - "characteristcs", "characteristics", - "characteritics", "characteristic", - "charactersitic", "characteristics", - "charasteristic", "characteristics", - "charecteristic", "characteristic", - "cheeseburguers", "cheeseburgers", - "cinematagraphy", "cinematography", - "cinematagrophy", "cinematography", - "cinematograhpy", "cinematography", - "cinematogrophy", "cinematography", - "cinematogrpahy", "cinematography", - "cinemetography", "cinematography", - "cinimatography", "cinematography", - "circumstansial", "circumstantial", - "circumstantual", "circumstantial", - "circumstential", "circumstantial", - "circunstantial", "circumstantial", - "classificaiton", "classification", - "coincedentally", "coincidentally", - "coinsidentally", "coincidentally", - "commemmorating", "commemorating", - "communciations", "communications", - "compatablities", "compatibilities", - "compatibillity", "compatibility", - "compatiblities", "compatibilities", - "competitioners", "competitions", - "comphrehensive", "comprehensive", - "computationnal", "computational", - "conciderations", "considerations", - "condescenscion", "condescension", - "condradictions", "contradictions", - "configuartions", "configurations", - "confugurations", "configurations", - "conglaturation", "congratulations", - "congratulatons", "congratulations", - "conicidentally", "coincidentally", - "conifgurations", "configurations", - "conscioussness", "consciousness", - "consentrations", "concentrations", - "consiciousness", "consciousness", - "considerablely", "considerably", - "considerstions", "considerations", - "constititional", "constitutional", - "constitucional", "constitutional", - "contamporaries", "contemporaries", - "contemporaneus", "contemporaneous", - "contraceptivos", "contraceptives", - "contradicitons", "contradictions", - "contradictiong", "contradicting", - "contriceptives", "contraceptives", - "controceptives", "contraceptives", - "controdictions", "contradictions", - "conversacional", "conversational", - "converstaional", "conversational", - "correpsondence", "correspondence", - "correspondants", "correspondents", - "correspondense", "correspondence", - "correspondente", "correspondence", - "corrispondants", "correspondents", - "corrispondence", "correspondence", - "corrospondence", "correspondence", - "costumizations", "customization", - "councidentally", "coincidentally", - "crystalisation", "crystallisation", - "curcumstantial", "circumstantial", - "demenstrations", "demonstrations", - "deminstrations", "demonstrations", - "demonstartions", "demonstrations", - "demonstrativno", "demonstrations", - "demonstrativos", "demonstrations", - "demosntrations", "demonstrations", - "desintegration", "disintegration", - "deterioriating", "deteriorating", - "determinisitic", "deterministic", - "differentiaton", "differentiation", - "disatisfaction", "dissatisfaction", - "discrimanatory", "discriminatory", - "discriminacion", "discrimination", - "discriminitory", "discriminatory", - "disillusionned", "disillusioned", - "diskrimination", "discrimination", - "disproportiate", "disproportionate", - "distingiushing", "distinguishing", - "distingquished", "distinguished", - "distingusihing", "distinguishing", - "distinquishing", "distinguishing", - "distuingishing", "distinguishing", - "dysfunctionnal", "dysfunctional", - "eldistribution", "redistribution", - "electromagnetc", "electromagnetic", - "electromagntic", "electromagnetic", - "endoctrination", "indoctrination", - "enthusiastisch", "enthusiastic", - "entrepreneuers", "entrepreneurs", - "entrepreneures", "entrepreneurs", - "enviormentally", "environmentally", - "enviromentally", "environmentally", - "environmentals", "environments", - "environmentaly", "environmentally", - "experimentaion", "experimentation", - "experimentella", "experimental", - "extraordinairy", "extraordinary", - "extraordinarly", "extraordinary", - "extrordinarily", "extraordinarily", - "fondamentalist", "fundamentalist", - "foreshadowning", "foreshadowing", - "functionallity", "functionality", - "fundamendalist", "fundamentalist", - "fundamentalits", "fundamentalists", - "fundamnetalist", "fundamentalist", - "fundemantalist", "fundamentalist", - "fundimentalist", "fundamentalist", - "fundumentalist", "fundamentalist", - "generalizacion", "generalization", - "generalizating", "generalization", - "generelization", "generalization", - "geographacilly", "geographically", - "geographycally", "geographically", - "geogrpahically", "geographically", - "geopraphically", "geographically", - "goegraphically", "geographically", - "grandchilderen", "grandchildren", - "gravitationnal", "gravitational", - "groubdbreaking", "groundbreaking", - "groudnbreaking", "groundbreaking", - "hallcuinations", "hallucination", - "hallicunations", "hallucinations", - "hallucenations", "hallucinations", - "halluciantions", "hallucinations", - "hallucinaitons", "hallucination", - "hallunications", "hallucinations", - "hallusinations", "hallucinations", - "halluzinations", "hallucinations", - "hellucinations", "hallucinations", - "heterosexuella", "heterosexual", - "hipothetically", "hypothetically", - "homosexuallity", "homosexuality", - "hullucinations", "hallucinations", - "hyopthetically", "hypothetically", - "hypathetically", "hypothetically", - "hypethetically", "hypothetically", - "hypotehtically", "hypothetically", - "hypotethically", "hypothetically", - "identificacion", "identification", - "identificaiton", "identification", - "identificativo", "identification", - "identifikation", "identification", - "imlpementation", "implementations", - "impelmentation", "implementations", - "impersonationg", "impersonating", - "implementacion", "implementation", - "implementaiton", "implementation", - "implementating", "implementation", - "implementatino", "implementations", - "implemetnation", "implementations", - "implimentation", "implementation", - "impossibillity", "impossibility", - "inadvertantely", "inadvertently", - "inappropriatly", "inappropriately", - "inapproprietly", "inappropriately", - "incompatablity", "incompatibility", - "incompatiblity", "incompatibility", - "inconsequental", "inconsequential", - "inconsistentcy", "inconsistency", - "incontrollably", "uncontrollably", - "inconventional", "unconventional", - "inconvienenced", "inconvenience", - "indestrictible", "indestructible", - "indestructuble", "indestructible", - "indetification", "identification", - "indistructible", "indestructible", - "individuallity", "individuality", - "indocrtination", "indoctrination", - "indoctrication", "indoctrination", - "indoktrination", "indoctrination", - "industiralized", "industrialized", - "industrailized", "industrialized", - "industrualized", "industrialized", - "industructible", "indestructible", - "inexplicablely", "inexplicably", - "infrastracture", "infrastructure", - "infrastructuur", "infrastructure", - "infrastrucutre", "infrastructure", - "infrastrukture", "infrastructure", - "infrastrutture", "infrastructure", - "infrasturcture", "infrastructure", - "initalisations", "initialisations", - "initalizations", "initializations", - "inplementation", "implementation", - "inspirationnal", "inspirational", - "instinctivelly", "instinctively", - "institutionale", "institutionalized", - "institutionals", "institutions", - "institutionnal", "institutional", - "intellectualis", "intellectuals", - "intellectualls", "intellectuals", - "intellecutally", "intellectually", - "intercepticons", "interceptions", - "interchangable", "interchangeable", - "interchangably", "interchangeably", - "interchangeble", "interchangeable", - "interchangebly", "interchangeably", - "interlectually", "intellectually", - "internationaal", "international", - "internationaly", "internationally", - "internationnal", "international", - "interpersonnal", "interpersonal", - "interpertation", "interpretation", - "interpratation", "interpretation", - "interpretacion", "interpretation", - "interpretaiton", "interpretations", - "interpretating", "interpretation", - "interpritation", "interpretation", - "interstellaire", "interstellar", - "intillectually", "intellectually", - "intrepretation", "interpretation", - "invesitgations", "investigations", - "investiagtions", "investigations", - "investigatiors", "investigations", - "investigativos", "investigations", - "investigstions", "investigations", - "irrationallity", "irrationally", - "irresponsibile", "irresponsible", - "journalistisch", "journalistic", - "justificativos", "justifications", - "koncentrations", "concentrations", - "liberatrianism", "libertarianism", - "libertarainism", "libertarianism", - "libertariansim", "libertarianism", - "libertarinaism", "libertarianism", - "libertaryanism", "libertarianism", - "libertatianism", "libertarianism", - "liberterianism", "libertarianism", - "libretarianism", "libertarianism", - "manufactureers", "manufactures", - "manufactureras", "manufactures", - "manufacturered", "manufactured", - "manufactureres", "manufacturers", - "manufactureros", "manufactures", - "massachusettes", "massachusetts", - "massachussetts", "massachusetts", - "mataphorically", "metaphorically", - "mathameticians", "mathematicians", - "mathemagically", "mathematically", - "mathematitians", "mathematicians", - "mathemetically", "mathematically", - "mathemeticians", "mathematicians", - "mathimatically", "mathematically", - "mediterainnean", "mediterranean", - "mediterrannean", "mediterranean", - "metaphotically", "metaphorically", - "metephorically", "metaphorically", - "methaporically", "metaphorically", - "metiphorically", "metaphorically", - "metophorically", "metaphorically", - "metropolitaine", "metropolitan", - "misconseptions", "misconceptions", - "misinterperted", "misinterpreted", - "misintrepreted", "misinterpreted", - "mulitnationals", "multinational", - "mulitplication", "multiplication", - "multiplicacion", "multiplication", - "multiplicaiton", "multiplication", - "multiplicativo", "multiplication", - "multiplikation", "multiplication", - "mutlinationals", "multinational", - "mutliplication", "multiplication", - "nationalisitic", "nationalistic", - "nationalistics", "nationalists", - "nationalisties", "nationalists", - "nationalistisk", "nationalists", - "neighbourhoood", "neighbourhood", - "nieghbourhoods", "neighbourhood", - "northereastern", "northeastern", - "objectificaton", "objectification", - "opthalmologist", "ophthalmologist", - "organizacional", "organizational", - "organizaitonal", "organizational", - "organziational", "organizational", - "orginazational", "organizational", - "overestemating", "overestimating", - "overextimating", "overestimating", - "overhwelmingly", "overwhelmingly", - "overhwlemingly", "overwhelmingly", - "overpolulation", "overpopulation", - "overpopluation", "overpopulation", - "oversetimating", "overestimating", - "overshadowered", "overshadowed", - "overwhemlingly", "overwhelmingly", - "overwhlemingly", "overwhelmingly", - "paliamentarian", "parliamentarian", - "parliamentiary", "parliamentary", - "performancepcs", "performances", - "personalitites", "personalities", - "pharamceutical", "pharmaceutical", - "pharmaceudical", "pharmaceutical", - "pharmacuetical", "pharmaceutical", - "pharmaseutical", "pharmaceutical", - "pharmeceutical", "pharmaceutical", - "philosophicaly", "philosophically", - "phramaceutical", "pharmaceutical", - "playthroughers", "playthroughs", - "porportionally", "proportionally", - "practitionners", "practitioners", - "predeterminded", "predetermined", - "predominantely", "predominantly", - "predominantley", "predominantly", - "preinitalizing", "preinitializing", - "prerequisities", "prerequisite", - "procrastinatin", "procrastination", - "procrastinaton", "procrastination", - "professionials", "professionalism", - "professionnals", "professionals", - "profitabillity", "profitability", - "progressivelly", "progressively", - "progressivisme", "progressives", - "pronounciation", "pronunciation", - "proportianally", "proportionally", - "proportionalty", "proportionally", - "proportionella", "proportionally", - "proprotionally", "proportionally", - "protruberances", "protuberances", - "pseudononymous", "pseudonymous", - "psychologicaly", "psychologically", - "qaulifications", "qualification", - "qualifiactions", "qualification", - "qualificaitons", "qualifications", - "quarterbackers", "quarterbacks", - "rationalizaton", "rationalization", - "reaponsibility", "responsibility", - "recommandation", "recommendation", - "recommedations", "recommendations", - "recommondation", "recommendation", - "reconnaissence", "reconnaissance", - "reconstruccion", "reconstruction", - "reconsturction", "reconstruction", - "redistirbution", "redistribution", - "redistribucion", "redistribution", - "redistributivo", "redistribution", - "redistrubition", "redistribution", - "refridgeration", "refrigeration", - "rehabilitacion", "rehabilitation", - "rehabilitaiton", "rehabilitation", - "reinforcemnets", "reinforcements", - "rekommendation", "recommendation", - "rektifications", "certifications", - "reniforcements", "reinforcements", - "repersentation", "representation", - "represantation", "representation", - "represantative", "representative", - "representacion", "representation", - "representaiton", "representations", - "representatief", "representative", - "representating", "representation", - "representativo", "representation", - "representetive", "representative", - "representitive", "representative", - "representstion", "representations", - "representstive", "representatives", - "represetnation", "representations", - "represnetation", "representations", - "reprezentative", "representative", - "repsonsibility", "responsibility", - "resistribution", "redistribution", - "responcibility", "responsibility", - "responisbility", "responsibility", - "responnsibilty", "responsibility", - "responsability", "responsibility", - "responsibilies", "responsibilities", - "responsibities", "responsibilities", - "restaraunteurs", "restaurateurs", - "retroactivelly", "retroactively", - "revolutionairy", "revolutionary", - "revolutionnary", "revolutionary", - "ridicilousness", "ridiculousness", - "ridicoulusness", "ridiculousness", - "rienforcements", "reinforcements", - "righteoussness", "righteousness", - "satisfactoraly", "satisfactory", - "satisfactority", "satisfactorily", - "sceintifically", "scientifically", - "schizophrentic", "schizophrenic", - "screenwrighter", "screenwriter", - "sensacionalism", "sensationalism", - "sensacionalist", "sensationalist", - "sensasionalism", "sensationalism", - "sensasionalist", "sensationalist", - "sensationality", "sensationalist", - "sensationalizm", "sensationalism", - "sensationalsim", "sensationalism", - "sensationilism", "sensationalism", - "sensationilist", "sensationalist", - "sensationslism", "sensationalism", - "sensetionalism", "sensationalism", - "sensibilisiert", "sensibilities", - "sentationalism", "sensationalism", - "sentationalist", "sensationalist", - "senzationalism", "sensationalism", - "senzationalist", "sensationalist", - "sepcifications", "specification", - "simaltaneously", "simultaneously", - "simeltaneously", "simultaneously", - "similtaneously", "simultaneously", - "simlutaneously", "simultaneously", - "simplificacion", "simplification", - "simplificaiton", "simplification", - "simplificating", "simplification", - "simulatenously", "simultaneously", - "simulatneously", "simultaneously", - "simultaenously", "simultaneously", - "simultainously", "simultaneously", - "simultaneoulsy", "simultaneously", - "simultaniously", "simultaneously", - "simulteanously", "simultaneously", - "sistematically", "systematically", - "slaugterhouses", "slaughterhouses", - "specailization", "specialization", - "specialication", "specialization", - "specializaiton", "specialization", - "specificaitons", "specification", - "speciliazation", "specialization", - "spectacularely", "spectacularly", - "spectacularily", "spectacularly", - "spesifications", "specifications", - "spezialisation", "specialization", - "sportsmansship", "sportsmanship", - "spreadsheeters", "spreadsheets", - "straightforwad", "straightforward", - "subconcsiously", "subconsciously", - "subconsicously", "subconsciously", - "subsconciously", "subconsciously", - "sunconsciously", "subconsciously", - "superintendant", "superintendent", - "suppliementing", "supplementing", - "surrepetitious", "surreptitious", - "survivabililty", "survivability", - "survivabillity", "survivability", - "sustainabiltiy", "sustainability", - "syncronization", "synchronization", - "systemetically", "systematically", - "systimatically", "systematically", - "technologicaly", "technologically", - "thermodinamics", "thermodynamics", - "thermodyanmics", "thermodynamics", - "thermodymamics", "thermodynamics", - "thermodymanics", "thermodynamics", - "thermodynamcis", "thermodynamics", - "thermodynanics", "thermodynamics", - "thermodynmaics", "thermodynamics", - "thernodynamics", "thermodynamics", - "theromdynamics", "thermodynamics", - "transformacion", "transformation", - "transfromation", "transformation", - "transitionable", "transitional", - "transitionning", "transitioning", - "transofrmation", "transformation", - "trasnformation", "transformation", - "trasnportation", "transportation", - "unbelievablely", "unbelievably", - "unchallengable", "unchallengeable", - "uncomfortabley", "uncomfortably", - "uncomfortablly", "uncomfortably", - "unconciousness", "unconsciousness", - "unconditionaly", "unconditionally", - "unconditionnal", "unconditional", - "unconsciouslly", "unconsciously", - "uncontrallable", "uncontrollable", - "uncontrallably", "uncontrollably", - "uncontrolablly", "uncontrollably", - "unconvectional", "unconventional", - "unconvencional", "unconventional", - "unconvensional", "unconventional", - "unconventianal", "unconventional", - "underastimated", "underestimated", - "underestamated", "underestimated", - "underestemated", "underestimated", - "underestimeted", "underestimated", - "undersetimated", "underestimated", - "understandebly", "understandably", - "understandible", "understandable", - "understandibly", "understandably", - "undestructible", "indestructible", - "unforetunately", "unfortunately", - "unfortunatelly", "unfortunately", - "unfourtunately", "unfortunately", - "uninitalizable", "uninitializable", - "unintelligient", "unintelligent", - "unintentionaly", "unintentionally", - "unintentionnal", "unintentional", - "unmanouverable", "unmaneuverable", - "unneccessarily", "unnecessarily", - "unnecessarilly", "unnecessarily", - "unprecendented", "unprecedented", - "unprofessionel", "unprofessional", - "unreasonablely", "unreasonably", - "unsubstantiaed", "unsubstantiated", - "unsurprizingly", "unsurprisingly", - "vizualisations", "visualization", - "vulnerabilites", "vulnerabilities", - "vulnerabillity", "vulnerability", - "vulnerablility", "vulnerability", - "wholeheartadly", "wholeheartedly", - "wholeheartidly", "wholeheartedly", - "abbrievations", "abbreviation", - "accelleration", "acceleration", - "accomadations", "accommodations", - "accommadating", "accommodating", - "accommadation", "accommodation", - "accommidation", "accommodation", - "accomodations", "accommodations", - "accomondating", "accommodating", - "accomondation", "accommodation", - "accomplishent", "accomplishment", - "accountabilty", "accountability", - "accredidation", "accreditation", - "acknolwedging", "acknowledging", - "acknowlegding", "acknowledging", - "acomplishment", "accomplishment", - "acquaintaince", "acquaintance", - "acquaintences", "acquaintances", - "acquaintinces", "acquaintances", - "acquanitances", "acquaintance", - "acquantainces", "acquaintances", - "acquantiances", "acquaintances", - "acquiantances", "acquaintances", - "acquiantences", "acquaintances", - "adminastrator", "administrator", - "administartor", "administrator", - "administraion", "administration", - "administraron", "administrator", - "administrater", "administrator", - "administratio", "administrator", - "administraton", "administration", - "adminsitrator", "administrator", - "adminstration", "administration", - "adminstrative", "administrative", - "admissability", "admissibility", - "adnimistrator", "administrators", - "adverticement", "advertisement", - "advertisiment", "advertisement", - "advertisments", "advertisements", - "advirtisement", "advertisement", - "aestethically", "aesthetically", - "aesthatically", "aesthetically", - "aesthitically", "aesthetically", - "affectionnate", "affectionate", - "aforementiond", "aforementioned", - "agriculturual", "agricultural", - "agrumentative", "argumentative", - "alterantively", "alternatively", - "alternativets", "alternatives", - "alternativley", "alternatively", - "alternitavely", "alternatively", - "alternitively", "alternatively", - "aninteresting", "uninteresting", - "annoucnements", "announcements", - "antagonisitic", "antagonistic", - "anthropolgist", "anthropologist", - "apporpriately", "appropriately", - "apporpriation", "appropriation", - "apporximately", "approximately", - "appreciateing", "appreciating", - "appreciateive", "appreciative", - "appreciationg", "appreciating", - "appropirately", "appropriately", - "appropiration", "appropriation", - "appropraitely", "appropriately", - "appropreation", "appropriation", - "appropriatley", "appropriately", - "appropropiate", "appropriate", - "approrpiation", "appropriation", - "approxamately", "approximately", - "approxiamtely", "approximately", - "approximatley", "approximately", - "approximitely", "approximately", - "aqcuaintances", "acquaintances", - "aqquaintances", "acquaintances", - "archaelogical", "archaeological", - "archaelogists", "archaeologists", - "archeaologist", "archeologist", - "archetectural", "architectural", - "architechture", "architecture", - "architechural", "architectural", - "architectrual", "architectural", - "architecutral", "architectural", - "argumentitive", "argumentative", - "arugmentative", "argumentative", - "asethetically", "aesthetically", - "assasinations", "assassinations", - "audomoderator", "automoderator", - "australianess", "australians", - "authenticaion", "authentication", - "authenticaton", "authentication", - "autherization", "authorization", - "authoratitive", "authoritative", - "authoritatian", "authoritarian", - "authoritation", "authorization", - "authorititive", "authoritative", - "authoritorian", "authoritarian", - "authorotative", "authoritative", - "authroization", "authorization", - "automoderador", "automoderator", - "automoderater", "automoderator", - "automodorator", "automoderator", - "automoterator", "automoderator", - "autoritharian", "authoritarian", - "availabillity", "availability", - "awknowledging", "acknowledging", - "billingualism", "bilingualism", - "billionairres", "billionaire", - "borderlanders", "borderlands", - "breadtfeeding", "breastfeeding", - "breastfeading", "breastfeeding", - "breatsfeeding", "breastfeeding", - "broadacasting", "broadcasting", - "bureaucractic", "bureaucratic", - "bureaucratics", "bureaucrats", - "bureaucratius", "bureaucrats", - "californiaman", "californian", - "calrification", "clarification", - "capitalizaton", "capitalization", - "carbohdyrates", "carbohydrates", - "carbohidrates", "carbohydrates", - "carbohyrdates", "carbohydrates", - "carboyhdrates", "carbohydrates", - "carthographer", "cartographer", - "catagorically", "categorically", - "catastrophies", "catastrophe", - "catastrophize", "catastrophe", - "catigorically", "categorically", - "catterpillars", "caterpillars", - "celebrationis", "celebrations", - "ceritfication", "certifications", - "certificaiton", "certification", - "championchips", "championship", - "championshiop", "championships", - "championsship", "championships", - "chanpionships", "championships", - "charactarized", "characterized", - "characterisic", "characteristic", - "characteristc", "characteristics", - "characterists", "characteristics", - "charicterized", "characterized", - "charismatisch", "charismatic", - "checkpointusa", "checkpoints", - "cheeseburgare", "cheeseburger", - "cheeseburgler", "cheeseburger", - "cheeseburguer", "cheeseburger", - "cheezeburgers", "cheeseburgers", - "chornological", "chronological", - "chronoligical", "chronological", - "chronologicly", "chronological", - "cinematograhy", "cinematography", - "cinematograpy", "cinematography", - "circomference", "circumference", - "circumcission", "circumcision", - "circumferance", "circumference", - "circumsicions", "circumcision", - "circumstanial", "circumstantial", - "circumstantal", "circumstantial", - "circumstnaces", "circumstance", - "circunference", "circumference", - "circunstances", "circumstances", - "cirucmference", "circumference", - "cirucmstances", "circumstances", - "civilications", "civilizations", - "civilizaitons", "civilizations", - "clarificaiton", "clarification", - "clasification", "clarification", - "clerification", "clarification", - "coincidentaly", "coincidentally", - "coincidential", "coincidental", - "colaborations", "collaborations", - "collabaration", "collaboration", - "collaberation", "collaboration", - "collaberative", "collaborative", - "collaboratore", "collaborate", - "collectioners", "collections", - "collectivelly", "collectively", - "collobaration", "collaboration", - "combatibility", "compatibility", - "comeptitively", "competitively", - "comfortablely", "comfortably", - "comfortablity", "comfortably", - "comfrontation", "confrontation", - "commemerative", "commemorative", - "commericially", "commercially", - "commerorative", "commemorative", - "comminication", "communication", - "comminucation", "communications", - "commissionees", "commissions", - "commissionned", "commissioned", - "commissionner", "commissioner", - "commmemorated", "commemorated", - "commuications", "communications", - "commuincation", "communications", - "communciation", "communication", - "communiaction", "communications", - "communicaiton", "communication", - "communicatoin", "communications", - "communicatons", "communications", - "compadibility", "compatibility", - "comparativley", "comparatively", - "comparetively", "comparatively", - "comparitavely", "comparatively", - "comparitively", "comparatively", - "compatability", "compatibility", - "compatibiltiy", "compatibility", - "compeditively", "competitively", - "compensantion", "compensation", - "compensationg", "compensating", - "comperatively", "comparatively", - "comperhension", "comprehension", - "competatively", "competitively", - "competitavely", "competitively", - "competitevely", "competitively", - "competitivley", "competitively", - "competiveness", "competitiveness", - "compilcations", "complication", - "compitability", "compatibility", - "complciations", "complication", - "complecations", "complications", - "compliactions", "complication", - "complicaitons", "complication", - "complilations", "complications", - "complimentery", "complimentary", - "complimentoni", "complimenting", - "complimentory", "complimentary", - "comprehention", "comprehension", - "computacional", "computational", - "comtamination", "contamination", - "comtemplating", "contemplating", - "concatination", "contamination", - "conceivablely", "conceivably", - "concencration", "concentration", - "concenrtation", "concentrations", - "concentartion", "concentrations", - "concentracion", "concentration", - "concentraited", "concentrated", - "concentraiton", "concentrations", - "concentratons", "concentrations", - "concervatives", "conservatives", - "concideration", "consideration", - "concioussness", "consciousness", - "concnetration", "concentrations", - "concsiousness", "consciousness", - "condascending", "condescending", - "condescencion", "condescension", - "condescendion", "condescension", - "condescensing", "condescension", - "condiscending", "condescending", - "conditionning", "conditioning", - "condradicting", "contradicting", - "condradiction", "contradiction", - "condradictory", "contradictory", - "conecntration", "concentrations", - "conenctration", "concentrations", - "confidentally", "confidentially", - "configruation", "configurations", - "configuartion", "configuration", - "configuracion", "configuration", - "configuraiton", "configuration", - "configuratoin", "configurations", - "configureable", "configurable", - "confrentation", "confrontation", - "confrontacion", "confrontation", - "confrontating", "confrontation", - "confrontativo", "confrontation", - "congratualted", "congratulate", - "conifguration", "configurations", - "conisderation", "considerations", - "connecticunts", "connecticut", - "connectivitiy", "connectivity", - "conpassionate", "compassionate", - "conplications", "complications", - "conplimentary", "complimentary", - "conplimenting", "complimenting", - "conprehension", "comprehension", - "consdieration", "considerations", - "consenquently", "consequently", - "consentrating", "concentrating", - "consentration", "concentration", - "consequencies", "consequence", - "consequentely", "consequently", - "consequeseces", "consequences", - "conservatisim", "conservatism", - "conservativsm", "conservatism", - "conservitives", "conservatives", - "consicousness", "consciousness", - "considerabely", "considerable", - "considerabile", "considerable", - "considerabley", "considerably", - "considerablly", "considerably", - "consideracion", "consideration", - "consideratoin", "considerations", - "considerstion", "considerations", - "considertaion", "considerations", - "consituencies", "constituencies", - "consitutional", "constitutional", - "constallation", "constellation", - "constarnation", "consternation", - "constillation", "constellation", - "constituintes", "constituents", - "constituional", "constitutional", - "constitutents", "constitutes", - "constitutinal", "constitutional", - "constructicon", "construction", - "constructieve", "constructive", - "constructiong", "constructing", - "consttruction", "construction", - "contaminacion", "contamination", - "contaminanted", "contaminated", - "contanimation", "contamination", - "contenplating", "contemplating", - "contimplating", "contemplating", - "contraceptivo", "contraception", - "contradiccion", "contradiction", - "contradicitng", "contradicting", - "contradiciton", "contradiction", - "contradictary", "contradictory", - "contradictons", "contradicts", - "contraticting", "contradicting", - "contravercial", "controversial", - "contraversial", "controversial", - "contreception", "contraception", - "contreversial", "controversial", - "contributeurs", "contributes", - "contributiors", "contributors", - "contriception", "contraception", - "contridictory", "contradictory", - "contritutions", "contributions", - "contriversial", "controversial", - "controception", "contraception", - "controdicting", "contradicting", - "controdiction", "contradiction", - "controvercial", "controversial", - "controverisal", "controversial", - "controversary", "controversy", - "controversity", "controversy", - "controvertial", "controversial", - "contstruction", "construction", - "conventionnal", "conventional", - "converastions", "conservation", - "conversationa", "conservation", - "conversationg", "conservation", - "conversationy", "conservation", - "conversatiosn", "conservation", - "conversatives", "conservatives", - "converstaions", "conversations", - "convorsations", "conversations", - "cooresponding", "corresponding", - "coorperations", "corporations", - "correctionals", "corrections", - "correpsonding", "corresponding", - "correspondant", "correspondent", - "correspondece", "correspondence", - "corresponders", "corresponds", - "corresponsing", "corresponding", - "corrispondant", "correspondent", - "corrisponding", "corresponding", - "corrosponding", "corresponding", - "costomization", "customization", - "costumization", "customization", - "counterfeight", "counterfeit", - "creationistas", "creationists", - "cricumference", "circumference", - "cringeworthey", "cringeworthy", - "cringeworthly", "cringeworthy", - "crytopgraphic", "cryptographic", - "curcumference", "circumference", - "curcumstances", "circumstances", - "custumization", "customization", - "cuztomization", "customization", - "decentraliced", "decentralized", - "decentrilized", "decentralized", - "decomissioned", "decommissioned", - "decompositing", "decomposing", - "definitivelly", "definitively", - "deinitalizing", "deinitializing", - "demenstration", "demonstration", - "democraticaly", "democratically", - "democraticlly", "democratically", - "demoninations", "denominations", - "demonstarting", "demonstrating", - "demonstartion", "demonstration", - "demonstraiton", "demonstrations", - "demonstratbly", "demonstrably", - "demonstraties", "demonstrate", - "demonstrativo", "demonstration", - "demosntrating", "demonstrating", - "demosntration", "demonstrations", - "denomenations", "denominations", - "denomonations", "denominations", - "deomnstration", "demonstrations", - "dermatalogist", "dermatologist", - "dermatolagist", "dermatologist", - "dermatoligist", "dermatologist", - "dermatologyst", "dermatologist", - "dermetologist", "dermatologist", - "dermitologist", "dermatologist", - "derpatologist", "dermatologist", - "desentralized", "decentralized", - "desillusioned", "disillusioned", - "desintegrated", "disintegrated", - "desinterested", "disinterested", - "determenation", "determination", - "determinacion", "determination", - "determinining", "determining", - "determinisitc", "deterministic", - "determinsitic", "deterministic", - "detmatologist", "dermatologist", - "developmently", "developmental", - "dezentralized", "decentralized", - "differantiate", "differentiate", - "differenciate", "differentiate", - "differintiate", "differentiate", - "diffirentiate", "differentiate", - "disadvandages", "disadvantaged", - "disadvantadge", "disadvantaged", - "disadvanteged", "disadvantaged", - "disadvanteges", "disadvantages", - "disadvatanges", "disadvantages", - "disadventaged", "disadvantaged", - "disadventages", "disadvantages", - "disallusioned", "disillusioned", - "disappearence", "disappearance", - "disappearnace", "disappearance", - "disappearring", "disappearing", - "disatvantaged", "disadvantaged", - "disatvantages", "disadvantages", - "disciplinairy", "disciplinary", - "disciplinerad", "disciplined", - "discipliniary", "disciplinary", - "disconnecters", "disconnects", - "discontinuted", "discontinued", - "discrimianted", "discriminated", - "discriminante", "discriminate", - "discriminatie", "discriminate", - "discriminatin", "discrimination", - "disillisioned", "disillusioned", - "disillutioned", "disillusioned", - "disingenuious", "disingenuous", - "disollusioned", "disillusioned", - "disrecpectful", "disrespectful", - "disrecpecting", "disrespecting", - "disrepsectful", "disrespectful", - "disrepsecting", "disrespecting", - "disresepctful", "disrespectful", - "disresepcting", "disrespecting", - "disrespection", "disrespecting", - "disrespekting", "disrespecting", - "disrispectful", "disrespectful", - "disrispecting", "disrespecting", - "dissagreement", "disagreement", - "dissapearance", "disappearance", - "dissapointted", "dissapointed", - "dissappointed", "disappointed", - "dissobediance", "disobedience", - "dissobedience", "disobedience", - "distingishing", "distinguishing", - "distinguising", "distinguishing", - "distinquished", "distinguished", - "distirbutions", "distributions", - "distiungished", "distinguished", - "distribustion", "distributions", - "distributiors", "distributors", - "distributivos", "distributions", - "distrobutions", "distributions", - "distrubitions", "distributions", - "distuingished", "distinguished", - "documantaries", "documentaries", - "documenatries", "documentaries", - "documentacion", "documentation", - "documentaires", "documentaries", - "documentaiton", "documentation", - "documentarios", "documentaries", - "documentaties", "documentaries", - "documentating", "documentation", - "documenteries", "documentaries", - "documentories", "documentaries", - "drammatically", "grammatically", - "dsyfunctional", "dysfunctional", - "dumbfoundeads", "dumbfounded", - "dusfunctional", "dysfunctional", - "dustification", "justification", - "dysfonctional", "dysfunctional", - "dysfucntional", "dysfunctional", - "dysfuncitonal", "dysfunctional", - "dysfunktional", "dysfunctional", - "easthetically", "aesthetically", - "effectiviness", "effectiveness", - "effictiveness", "effectiveness", - "effortlessely", "effortlessly", - "effortlessley", "effortlessly", - "embarrasement", "embarrassment", - "embarrasments", "embarrassment", - "embarressment", "embarrassment", - "emberrassment", "embarrassment", - "encarceration", "incarceration", - "encorporating", "incorporating", - "encyclopeadia", "encyclopedia", - "encyclopeadic", "encyclopedia", - "encyclopeedia", "encyclopedia", - "encycolpedias", "encyclopedia", - "endoctrinated", "indoctrinated", - "enlightenting", "enlightening", - "enlightnement", "enlightenment", - "enligthenment", "enlightenment", - "enteratinment", "entertainment", - "enterpreneurs", "entrepreneurs", - "enterprenuers", "entrepreneurs", - "enterpreuners", "entrepreneurs", - "entertianment", "entertainment", - "enthusiasists", "enthusiasts", - "enthusiastics", "enthusiasts", - "entrepraneurs", "entrepreneurs", - "entreprenaurs", "entrepreneurs", - "entrepreneuer", "entrepreneurs", - "entreprenours", "entrepreneurs", - "entreprenuers", "entrepreneurs", - "entreprenures", "entrepreneurs", - "entrepreuners", "entrepreneurs", - "entretainment", "entertainment", - "enviornmental", "environmental", - "environemntal", "environmental", - "environmently", "environmental", - "envolutionary", "evolutionary", - "envrionmental", "environmental", - "estabilshment", "establishments", - "establishemnt", "establishments", - "establishmnet", "establishments", - "establsihment", "establishments", - "estbalishment", "establishments", - "ethnocentricm", "ethnocentrism", - "evolutionairy", "evolutionary", - "evolutionarly", "evolutionary", - "evolutionnary", "evolutionary", - "exaggeratting", "exaggerating", - "excpetionally", "exceptionally", - "executioneers", "executioner", - "existentiella", "existential", - "expectionally", "exceptionally", - "experementing", "experimenting", - "experienceing", "experiencing", - "experimentais", "experiments", - "experimention", "experimenting", - "experimentors", "experiments", - "expirementing", "experimenting", - "expodentially", "exponentially", - "exponantially", "exponentially", - "exponencially", "exponentially", - "exponentiella", "exponential", - "extraodrinary", "extraordinary", - "extraordianry", "extraordinary", - "extraordinair", "extraordinary", - "extraordinaly", "extraordinary", - "extraoridnary", "extraordinary", - "extremeophile", "extremophile", - "extroardinary", "extraordinary", - "familiarizate", "familiarize", - "fantasitcally", "fantastically", - "fantasmically", "fantastically", - "fantistically", "fantastically", - "faptastically", "fantastically", - "figurativeley", "figuratively", - "figurativelly", "figuratively", - "frankenstiens", "frankenstein", - "frankenstined", "frankenstein", - "frankenstiner", "frankenstein", - "frankenstines", "frankenstein", - "friendzoneado", "friendzoned", - "fucntionality", "functionality", - "funcitonality", "functionality", - "functionailty", "functionality", - "fundamentalis", "fundamentals", - "fundamnetally", "fundamentally", - "fundementally", "fundamentally", - "fundimentally", "fundamentally", - "gamifications", "ramifications", - "generalizaing", "generalizing", - "generalizaton", "generalization", - "generationals", "generations", - "generationens", "generations", - "generationers", "generations", - "generationnal", "generational", - "geographicaly", "geographically", - "geographicial", "geographical", - "geometricians", "geometers", - "goreshadowing", "foreshadowing", - "governmential", "governmental", - "gradification", "gratification", - "grammarically", "grammatically", - "grandchildern", "grandchildren", - "gratificacion", "gratification", - "gratificaiton", "gratification", - "grativational", "gravitational", - "gravitacional", "gravitational", - "gravitaitonal", "gravitational", - "hallcuination", "hallucination", - "hallicunation", "hallucination", - "hallucenation", "hallucination", - "halluciantion", "hallucinations", - "hallukination", "hallucination", - "hallunication", "hallucination", - "hallusination", "hallucination", - "halluzination", "hallucination", - "heiroglyphics", "hieroglyphics", - "hellucination", "hallucination", - "highlightning", "highlighting", - "homesexuality", "homosexuality", - "homosexualtiy", "homosexuality", - "homosexulaity", "homosexuality", - "horizontallly", "horizontally", - "hullucination", "hallucination", - "hypocriticial", "hypocritical", - "hypotheticaly", "hypothetically", - "hystericallly", "hysterically", - "identificaton", "identification", - "ideoligically", "ideologically", - "ideosyncratic", "idiosyncratic", - "idiologically", "ideologically", - "illistrations", "illustrations", - "illustartions", "illustrations", - "imperfactions", "imperfections", - "impersinating", "impersonating", - "implementaion", "implementation", - "implementatin", "implementations", - "implimenation", "implementation", - "imprefections", "imperfections", - "impresonating", "impersonating", - "inaccessibile", "inaccessible", - "inadventently", "inadvertently", - "inadverdently", "inadvertently", - "inadvertantly", "inadvertently", - "inadvertendly", "inadvertently", - "inapporpriate", "inappropriate", - "inappropirate", "inappropriate", - "inappropraite", "inappropriate", - "inaproppriate", "inappropriate", - "incarcaration", "incarceration", - "incarciration", "incarceration", - "incarseration", "incarceration", - "incerceration", "incarceration", - "incidentially", "incidentally", - "incomfortable", "uncomfortable", - "incomfortably", "uncomfortably", - "incompatabile", "incompatible", - "incompatiable", "incompatible", - "incompatibile", "incompatible", - "inconciderate", "inconsiderate", - "inconcistency", "inconsistency", - "inconditional", "unconditional", - "inconsciously", "unconsciously", - "inconsiderant", "inconsiderate", - "inconsistance", "inconsistency", - "inconsistancy", "inconsistency", - "inconsistenly", "inconsistency", - "inconsistensy", "inconsistency", - "inconsistenty", "inconsistency", - "inconveinence", "inconvenience", - "inconveniance", "inconvenience", - "inconveniente", "inconvenience", - "inconvienence", "inconvenience", - "incoroporated", "incorporated", - "incorparating", "incorporating", - "incorperating", "incorporating", - "incorperation", "incorporation", - "incorruptable", "incorruptible", - "incramentally", "incrementally", - "incrementarla", "incremental", - "incrementarlo", "incremental", - "indavertently", "inadvertently", - "indefinitelly", "indefinitely", - "independantes", "independents", - "independantly", "independently", - "independendet", "independent", - "independendly", "independently", - "indepentently", "independently", - "indespensable", "indispensable", - "indespensible", "indispensable", - "indestructble", "indestructible", - "indestructibe", "indestructible", - "indictrinated", "indoctrinated", - "indipendently", "independently", - "indispensible", "indispensable", - "indivuduality", "individuality", - "indocrtinated", "indoctrinated", - "indocternated", "indoctrinated", - "indoctornated", "indoctrinated", - "indoctrinatie", "indoctrinated", - "indoctrinatin", "indoctrination", - "indoctronated", "indoctrinated", - "industrialied", "industrialized", - "industrialzed", "industrialized", - "inexeprienced", "inexperience", - "inexpeirenced", "inexperience", - "inexpereinced", "inexperienced", - "inexperianced", "inexperienced", - "inexperiecned", "inexperience", - "inexperineced", "inexperience", - "inexpierenced", "inexperienced", - "inexplicabley", "inexplicably", - "inexplicablly", "inexplicably", - "infilitration", "infiltration", - "infrastructre", "infrastructure", - "infrastrucure", "infrastructure", - "inintelligent", "unintelligent", - "ininteresting", "uninteresting", - "initalisation", "initialisation", - "initalization", "initialization", - "inperfections", "imperfections", - "inpersonating", "impersonating", - "inpossibility", "impossibility", - "inpredictable", "unpredictable", - "inresponsible", "irresponsible", - "insectiverous", "insectivorous", - "insecuritites", "insecurities", - "insiginficant", "insignificant", - "insiginifcant", "insignificant", - "insignificent", "insignificant", - "insignificunt", "insignificant", - "insignifigant", "insignificant", - "insiprational", "inspirational", - "insperational", "inspirational", - "inspiritional", "inspirational", - "inspriational", "inspirational", - "instantaenous", "instantaneous", - "instantanious", "instantaneous", - "instanteneous", "instantaneous", - "instantenious", "instantaneous", - "instincitvely", "instinctively", - "instinctivley", "instinctively", - "instititional", "institutional", - "institutionel", "institutional", - "insturmentals", "instrumental", - "instutitional", "institutional", - "insustainable", "unsustainable", - "intelelctuals", "intellectuals", - "intellectualy", "intellectually", - "intellectuels", "intellectuals", - "intellecutals", "intellectuals", - "intellegently", "intelligently", - "intelluctuals", "intellectuals", - "intepretation", "interpretation", - "intereactions", "intersections", - "interesctions", "intersections", - "interlectuals", "intellectuals", - "intermittient", "intermittent", - "intermittment", "intermittent", - "internacional", "international", - "interpersonel", "interpersonal", - "interpresonal", "interpersonal", - "interpretaion", "interpretation", - "interpretarea", "interpreter", - "interpretarem", "interpreter", - "interpretares", "interpreter", - "interpretarse", "interpreter", - "interpretarte", "interpreter", - "interpretatin", "interpretations", - "interpreteert", "interpreter", - "interragation", "interrogation", - "interregation", "interrogation", - "interrigation", "interrogation", - "interrogacion", "interrogation", - "interrogativo", "interrogation", - "intertainment", "entertainment", - "intillectuals", "intellectuals", - "intraspection", "introspection", - "intrensically", "intrinsically", - "intriniscally", "intrinsically", - "intrinsecally", "intrinsically", - "intrisincally", "intrinsically", - "intristically", "intrinsically", - "introductiory", "introductory", - "introspeccion", "introspection", - "introspectivo", "introspection", - "introspektion", "introspection", - "invertibrates", "invertebrates", - "invesitgation", "investigation", - "invesitgative", "investigative", - "invesitgators", "investigators", - "investagators", "investigators", - "investegating", "investigating", - "investegators", "investigators", - "investiagtion", "investigation", - "investiagtive", "investigative", - "investigacion", "investigation", - "investigaiton", "investigations", - "investigaters", "investigators", - "investigativo", "investigation", - "investigatons", "investigations", - "investigsting", "investigating", - "investigstion", "investigations", - "investogators", "investigators", - "invisibillity", "invisibility", - "involuntarely", "involuntary", - "involuntarity", "involuntary", - "invulnerabile", "invulnerable", - "irrationallly", "irrationally", - "irresponcible", "irresponsible", - "irresponisble", "irresponsible", - "irresponsable", "irresponsible", - "irresponsbile", "irresponsible", - "irreversiable", "irreversible", - "irreversibelt", "irreversible", - "irreversibile", "irreversible", - "irrisponsible", "irresponsible", - "jacksonvillle", "jacksonville", - "journalisitic", "journalistic", - "journalistens", "journalists", - "journalisters", "journalists", - "journalistisk", "journalists", - "jsutification", "justifications", - "jurisdicitons", "jurisdictions", - "jurisidctions", "jurisdictions", - "juristictions", "jurisdictions", - "jursidictions", "jurisdictions", - "jusitfication", "justifications", - "justifiaction", "justifications", - "justificacion", "justification", - "justificaiton", "justification", - "justificativo", "justification", - "justificatons", "justifications", - "justificstion", "justifications", - "justiifcation", "justifications", - "karbohydrates", "carbohydrates", - "knoweldgeable", "knowledgeable", - "knowledegable", "knowledgeable", - "knowledgebale", "knowledgable", - "knowlegdeable", "knowledgeable", - "kollaboration", "collaboration", - "koncentration", "concentration", - "konfiguration", "configuration", - "konfrontation", "confrontation", - "konservatives", "conservatives", - "konstellation", "constellation", - "kontamination", "contamination", - "legitimatelly", "legitimately", - "libertariaism", "libertarianism", - "libertariansm", "libertarianism", - "libitarianisn", "libertarianism", - "lighthearthed", "lighthearted", - "mainfestation", "manifestation", - "manafacturers", "manufacturers", - "manafacturing", "manufacturing", - "manafestation", "manifestation", - "manefestation", "manifestation", - "manfuacturers", "manufactures", - "manifacturers", "manufacturers", - "manifacturing", "manufacturing", - "manifastation", "manifestation", - "manifestacion", "manifestation", - "manifestating", "manifestation", - "manifistation", "manifestation", - "manipulationg", "manipulating", - "manufacterers", "manufacturers", - "manufactering", "manufacturing", - "manufacterurs", "manufactures", - "manufactorers", "manufacturers", - "manufactoring", "manufacturing", - "manufactuered", "manufactured", - "manufactuerer", "manufacturer", - "manufactueres", "manufactures", - "manufacturedd", "manufactured", - "manufactureds", "manufactures", - "manufacturerd", "manufactured", - "manufacturier", "manufacturer", - "manufacturors", "manufacturers", - "manufactuters", "manufactures", - "manufacutrers", "manufactures", - "manufcaturers", "manufactures", - "marshmalllows", "marshmallows", - "massachsuetts", "massachusetts", - "massachucetts", "massachusetts", - "massachuestts", "massachusetts", - "massachusents", "massachusetts", - "massachusites", "massachusetts", - "massachussets", "massachusetts", - "massechusetts", "massachusetts", - "masturbateing", "masturbating", - "materialisimo", "materialism", - "mathamatician", "mathematician", - "mathametician", "mathematician", - "mathematicals", "mathematics", - "mathematicaly", "mathematically", - "mathematicans", "mathematics", - "mathematicion", "mathematician", - "mathematitian", "mathematician", - "mathemetician", "mathematician", - "mathmatically", "mathematically", - "mathmaticians", "mathematicians", - "mechanicallly", "mechanically", - "medeterranean", "mediterranean", - "meditarrenean", "mediterranean", - "meditereanean", "mediterranean", - "membranaphone", "membranophone", - "metamorphysis", "metamorphosis", - "metaphoricaly", "metaphorically", - "metaphoricial", "metaphorical", - "metaphysicals", "metaphysics", - "metaphysicans", "metaphysics", - "methamatician", "mathematician", - "methematician", "mathematician", - "metropolitain", "metropolitan", - "metropolitcan", "metropolitan", - "metropolitian", "metropolitan", - "millionairres", "millionaire", - "minneapolites", "minneapolis", - "misanderstood", "misunderstood", - "miscellanious", "miscellaneous", - "misconcpetion", "misconceptions", - "misconecption", "misconceptions", - "misinterperet", "misinterpret", - "misinterprate", "misinterpret", - "misinterprent", "misinterpret", - "misinterprted", "misinterpret", - "misogynisitic", "misogynistic", - "misrepreseted", "misrepresented", - "misunterstood", "misunderstood", - "modificaitons", "modifications", - "motivationals", "motivations", - "motivationnal", "motivational", - "mulitnational", "multinational", - "multimational", "multinational", - "multiplicaton", "multiplication", - "muncipalities", "municipalities", - "munnicipality", "municipality", - "mutlinational", "multinational", - "nacionalistic", "nationalistic", - "narcissisitic", "narcissistic", - "narcississtic", "narcissistic", - "natioanlistic", "nationalistic", - "nationalisitc", "nationalistic", - "nationalistes", "nationalists", - "nationalsitic", "nationalistic", - "neigbhourhood", "neighbourhood", - "neighboorhoud", "neighbourhood", - "neighborehood", "neighbourhood", - "neighborhoood", "neighborhoods", - "neighbourbood", "neighbourhood", - "neighbourgood", "neighbourhood", - "neighbourhoud", "neighbourhood", - "neighourhoods", "neighborhoods", - "nieghborhoods", "neighborhoods", - "nieghbourhood", "neighbourhood", - "noncombatents", "noncombatants", - "noninitalized", "noninitialized", - "northwestener", "northwestern", - "notificaitons", "notifications", - "occassionally", "occasionally", - "operationable", "operational", - "oppertunities", "opportunities", - "opprotunities", "opportunities", - "oppurtunities", "opportunities", - "opthamologist", "ophthalmologist", - "organistaions", "organisations", - "organizatinal", "organizational", - "organizativos", "organizations", - "organsiations", "organisations", - "organziations", "organizations", - "orginasations", "organisations", - "orginazations", "organizations", - "overpopulaton", "overpopulation", - "overreactiong", "overreacting", - "overshaddowed", "overshadowed", - "overwheliming", "overwhelming", - "overwhelmigly", "overwhelmingly", - "overwhelmingy", "overwhelmingly", - "overwhelminly", "overwhelmingly", - "palestininans", "palestinians", - "paraphraseing", "paraphrasing", - "paraphrashing", "paraphrasing", - "parilamentary", "parliamentary", - "parlaimentary", "parliamentary", - "parliamantary", "parliamentary", - "parliamentery", "parliamentary", - "parliamnetary", "parliamentary", - "parliementary", "parliamentary", - "particiaption", "participation", - "participacion", "participation", - "participantes", "participants", - "participativo", "participation", - "particularely", "particularly", - "particularily", "particularly", - "particularlly", "particularly", - "partizipation", "participation", - "passionatelly", "passionately", - "paychiatrists", "psychiatrists", - "paychologists", "psychologists", - "pennsylvainia", "pennsylvania", - "pennsylvanica", "pennsylvania", - "pennsylvannia", "pennsylvania", - "perdominantly", "predominantly", - "perpandicular", "perpendicular", - "perpendicualr", "perpendicular", - "perpenticular", "perpendicular", - "perpetuationg", "perpetuating", - "perpindicular", "perpendicular", - "personalitits", "personalities", - "pessimistisch", "pessimistic", - "pharmaceutial", "pharmaceutical", - "philisophical", "philosophical", - "philosiphical", "philosophical", - "philosohpical", "philosophical", - "philosophycal", "philosophically", - "philospohical", "philosophical", - "phisiological", "physiological", - "photagraphers", "photographers", - "photographics", "photographs", - "photographied", "photographed", - "photographier", "photographer", - "photograpphed", "photographed", - "photogrophers", "photographers", - "photogrpahers", "photographers", - "photoshoppade", "photoshopped", - "photoshoppped", "photoshopped", - "phsyiological", "physiological", - "phychiatrists", "psychiatrists", - "phychological", "psychological", - "phychologists", "psychologists", - "phylosophical", "philosophical", - "physciatrists", "psychiatrists", - "physcological", "psychological", - "physcologists", "psychologists", - "physioligical", "physiological", - "planeswlakers", "planeswalker", - "plansewalkers", "planeswalker", - "playthroughts", "playthroughs", - "polysaccaride", "polysaccharide", - "practicallity", "practically", - "practicioners", "practitioners", - "practisioners", "practitioners", - "practitioneer", "practitioners", - "practitionner", "practitioner", - "pratictioners", "practitioners", - "preconceieved", "preconceived", - "predecessores", "predecessors", - "predetermiend", "predetermined", - "predetirmined", "predetermined", - "preditermined", "predetermined", - "predomenantly", "predominantly", - "predominently", "predominantly", - "pregressively", "progressively", - "preinitalized", "preinitialized", - "preinitalizes", "preinitializes", - "preliferation", "proliferation", - "prependicular", "perpendicular", - "preposterious", "preposterous", - "prerequisties", "prerequisite", - "prerequistite", "prerequisite", - "prescribtions", "prescriptions", - "presumptuious", "presumptuous", - "pretedermined", "predetermined", - "problematisch", "problematic", - "proclaimation", "proclamation", - "prodominantly", "predominantly", - "professionnal", "professional", - "profitiablity", "profitability", - "profitibality", "profitability", - "progressivily", "progressively", - "progressivley", "progressively", - "prononciation", "pronunciation", - "pronouciation", "pronunciation", - "pronunciacion", "pronunciation", - "pronunciating", "pronunciation", - "pronuncuation", "pronunciation", - "pronunication", "pronunciation", - "pronuntiation", "pronunciation", - "propabilities", "probabilities", - "proportionaly", "proportionally", - "proportionnal", "proportional", - "proseletyzing", "proselytizing", - "protagonistas", "protagonists", - "protagonistes", "protagonists", - "protestantisk", "protestants", - "protruberance", "protuberance", - "provocativley", "provocative", - "pscyhiatrists", "psychiatrists", - "pscyhological", "psychological", - "pscyhologists", "psychologists", - "pshycological", "psychological", - "pshycologists", "psychologists", - "psichological", "psychological", - "psychaitrists", "psychiatrists", - "psychedellics", "psychedelics", - "psychiatrisch", "psychiatric", - "psycholigical", "psychological", - "psycholigists", "psychologists", - "psychologycal", "psychologically", - "psychologysts", "psychologists", - "psychyatrists", "psychiatrists", - "psysiological", "physiological", - "purpendicular", "perpendicular", - "pyschiatrists", "psychiatrists", - "pyschological", "psychological", - "pyschologists", "psychologists", - "qaulification", "qualification", - "qualifiaction", "qualification", - "qualificaiton", "qualifications", - "qualificatons", "qualifications", - "qualifikation", "qualification", - "questionalble", "questionable", - "quinessential", "quintessential", - "ramificaitons", "ramifications", - "realisitcally", "realistically", - "realtionships", "relationships", - "reccommending", "recommending", - "receptionnist", "receptionist", - "receptionsist", "receptionist", - "reconaissance", "reconnaissance", - "reconcilation", "reconciliation", - "reconnaisance", "reconnaissance", - "reconstrucion", "reconstruction", - "recreationnal", "recreational", - "rectangulaire", "rectangular", - "redistribuito", "redistribution", - "redistributin", "redistribution", - "reencarnation", "reincarnation", - "refridgerator", "refrigerator", - "rehabilitaion", "rehabilitation", - "rehabilitatin", "rehabilitation", - "rehabilitaton", "rehabilitation", - "reincarantion", "reincarnation", - "reincatnation", "reincarnation", - "reinforcemens", "reinforcements", - "reinforcemnts", "reinforcements", - "reinitalising", "reinitialising", - "reinitalizing", "reinitializing", - "reinkarnation", "reincarnation", - "reinstallling", "reinstalling", - "reintarnation", "reincarnation", - "relationshits", "relationships", - "relationsship", "relationships", - "relatiopnship", "relationship", - "relentlessely", "relentlessly", - "relentlessley", "relentlessly", - "relinqushment", "relinquishment", - "remifications", "ramifications", - "reprehenisble", "reprehensible", - "reprehensable", "reprehensible", - "reprehinsible", "reprehensible", - "represenation", "representation", - "represensible", "reprehensible", - "representaion", "representation", - "representatie", "representatives", - "representatin", "representations", - "representerad", "represented", - "representitve", "representative", - "representives", "representatives", - "repricussions", "repercussions", - "reprihensible", "reprehensible", - "resolutionary", "revolutionary", - "respectivelly", "respectively", - "responsibiliy", "responsibility", - "responsibilty", "responsibility", - "responsiblity", "responsibility", - "respositories", "repositories", - "resssurecting", "resurrecting", - "ressurrection", "resurrection", - "restaraunteur", "restaurateur", - "retoractively", "retroactively", - "retroactivily", "retroactively", - "retroactivley", "retroactively", - "retrocatively", "retroactively", - "revelutionary", "revolutionary", - "revolutionair", "revolutionary", - "revolutionens", "revolutions", - "revolutioners", "revolutions", - "revoultionary", "revolutionary", - "ridiculouness", "ridiculousness", - "rienforcement", "reinforcements", - "righetousness", "righteousness", - "rightiousness", "righteousness", - "rigtheousness", "righteousness", - "rollarcoaster", "rollercoaster", - "rollercaoster", "rollercoaster", - "rollercoaters", "rollercoaster", - "rollercoatser", "rollercoaster", - "rollerocaster", "rollercoaster", - "rollertoaster", "rollercoaster", - "rollorcoaster", "rollercoaster", - "sacrastically", "sarcastically", - "sarcasitcally", "sarcastically", - "satisfactorly", "satisfactory", - "scandianvians", "scandinavian", - "scateboarding", "skateboarding", - "schisophrenic", "schizophrenic", - "schiziphrenic", "schizophrenic", - "schizophernia", "schizophrenia", - "schizophernic", "schizophrenic", - "schizophrania", "schizophrenia", - "schizoprhenia", "schizophrenia", - "schizoprhenic", "schizophrenic", - "schozophrenia", "schizophrenia", - "schozophrenic", "schizophrenic", - "schyzophrenia", "schizophrenia", - "schyzophrenic", "schizophrenic", - "schziophrenia", "schizophrenia", - "schziophrenic", "schizophrenic", - "scientificaly", "scientifically", - "scientificlly", "scientifically", - "segementation", "segmentation", - "sensationable", "sensational", - "sensationails", "sensationalism", - "sensationaism", "sensationalism", - "sensationalim", "sensationalism", - "sensationella", "sensational", - "shcizophrenic", "schizophrenic", - "significanlty", "significantly", - "significently", "significantly", - "signifigantly", "significantly", - "simultaneosly", "simultaneously", - "simultaneuous", "simultaneous", - "simultanously", "simultaneously", - "singificantly", "significantly", - "skatebaording", "skateboarding", - "skateborading", "skateboarding", - "socioecenomic", "socioeconomic", - "socioecomonic", "socioeconomic", - "socioeconimic", "socioeconomic", - "sohpisticated", "sophisticated", - "sophisitcated", "sophisticated", - "sophistacated", "sophisticated", - "sophistocated", "sophisticated", - "sophosticated", "sophisticated", - "spacification", "specification", - "specializaton", "specialization", - "specificaiton", "specifications", - "specificatons", "specifications", - "specifikation", "specification", - "spectaculaire", "spectacular", - "spectaculalry", "spectacularly", - "spectatularly", "spectacularly", - "spesification", "specification", - "spirituallity", "spiritually", - "sponatenously", "spontaneously", - "spontaenously", "spontaneously", - "spontainously", "spontaneously", - "spontaneoulsy", "spontaneously", - "spontaneuosly", "spontaneously", - "spontaniously", "spontaneously", - "spontanuously", "spontaneously", - "sponteanously", "spontaneously", - "sponteneously", "spontaneously", - "sporstmanship", "sportsmanship", - "sportmansship", "sportsmanship", - "sportsmamship", "sportsmanship", - "sportsmenship", "sportsmanship", - "sprotsmanship", "sportsmanship", - "stakeboarding", "skateboarding", - "startegically", "strategically", - "statisitcally", "statistically", - "statistacally", "statistically", - "stereotipical", "stereotypical", - "stereotpyical", "stereotypical", - "stereotypcial", "stereotypical", - "stereotypeing", "stereotyping", - "stereotypying", "stereotyping", - "steriotypical", "stereotypical", - "steroetypical", "stereotypical", - "steryotypical", "stereotypical", - "storytellling", "storytelling", - "stragegically", "strategically", - "stragetically", "strategically", - "straightenend", "straightened", - "straitforward", "straightforward", - "stratagically", "strategically", - "stratigically", "strategically", - "strawberrries", "strawberries", - "stregnthening", "strengthening", - "strenghtening", "strengthening", - "strengthining", "strengthening", - "stretegically", "strategically", - "subcatagories", "subcategories", - "subconsciosly", "subconsciously", - "subconsciouly", "subconsciously", - "subconsiously", "subconsciously", - "subjectivelly", "subjectively", - "subscribtions", "subscriptions", - "substancially", "substantially", - "substanitally", "substantially", - "substansially", "substantially", - "substantiable", "substantial", - "substantually", "substantially", - "substitutents", "substitutes", - "successfullly", "successfully", - "supermarkedet", "supermarket", - "supermarkerts", "supermarkets", - "superpowereds", "superpowers", - "supersticious", "superstitious", - "superstisious", "superstitious", - "superstitiosi", "superstitious", - "superstitiuos", "superstitious", - "superstituous", "superstitious", - "suphisticated", "sophisticated", - "supscriptions", "subscriptions", - "surreptiously", "surreptitiously", - "survavibility", "survivability", - "survibability", "survivability", - "survivabiltiy", "survivability", - "survivalibity", "survivability", - "survivavility", "survivability", - "survivebility", "survivability", - "susbtantially", "substantially", - "sustainabilty", "sustainability", - "synchornously", "synchronously", - "systematicaly", "systematically", - "systematiclly", "systematically", - "techmological", "technological", - "technicallity", "technically", - "technoligical", "technological", - "technologicly", "technological", - "techonlogical", "technological", - "telaportation", "teleportation", - "teleportating", "teleportation", - "teleprotation", "teleportation", - "teliportation", "teleportation", - "teloportation", "teleportation", - "territoriella", "territorial", - "theoratically", "theoretically", - "theoritically", "theoretically", - "therapeutisch", "therapeutic", - "thereotically", "theoretically", - "thermodynaics", "thermodynamics", - "thermodynamcs", "thermodynamics", - "theroetically", "theoretically", - "thoeretically", "theoretically", - "tranistioning", "transitioning", - "transcendance", "transcendence", - "transcribtion", "transcription", - "transcripcion", "transcription", - "transferrring", "transferring", - "transformarea", "transformer", - "transformarem", "transformer", - "transformarse", "transformers", - "transformaton", "transformation", - "transformered", "transformed", - "transgengered", "transgendered", - "transisioning", "transitioning", - "transitionals", "transitions", - "transitionnal", "transitional", - "transitionned", "transitioned", - "transkription", "transcription", - "translyvanian", "transylvania", - "transmisisons", "transmissions", - "transmissable", "transmissible", - "transmisssion", "transmissions", - "transparantie", "transparent", - "transparentcy", "transparency", - "transplantees", "transplants", - "transporation", "transportation", - "transportaion", "transportation", - "transportarme", "transporter", - "transportarse", "transporter", - "transportarte", "transporter", - "transporteurs", "transporter", - "transsexuella", "transsexual", - "transylvannia", "transylvania", - "trasngendered", "transgendered", - "troubleshooot", "troubleshoot", - "udnerestimate", "underestimated", - "umcomfortable", "uncomfortable", - "umcomfortably", "uncomfortably", - "umpredictable", "unpredictable", - "unappropriate", "inappropriate", - "unbelievabley", "unbelievably", - "unbelievablly", "unbelievably", - "uncertaintity", "uncertainty", - "uncomfertable", "uncomfortable", - "uncomfertably", "uncomfortably", - "uncomfortabel", "uncomfortably", - "uncomforyable", "uncomfortably", - "uncomfrotable", "uncomfortable", - "uncomfrotably", "uncomfortably", - "uncomftorable", "uncomfortable", - "uncomftorably", "uncomfortably", - "unconcsiously", "unconsciously", - "unconfortable", "uncomfortable", - "unconfortably", "uncomfortably", - "unconscioulsy", "unconsciously", - "unconsicously", "unconsciously", - "unconsiderate", "inconsiderate", - "uncontrollabe", "uncontrollable", - "uncontrollaby", "uncontrollably", - "unconventinal", "unconventional", - "uncounciously", "unconsciously", - "uncousciously", "unconsciously", - "underastimate", "underestimate", - "underesitmate", "underestimated", - "underestamate", "underestimate", - "underestemate", "underestimate", - "underestiamte", "underestimated", - "undergratuate", "undergraduate", - "underhwelming", "underwhelming", - "underhwleming", "underwhelming", - "underminining", "undermining", - "underpowererd", "underpowered", - "undersetimate", "underestimate", - "understandble", "understandable", - "understandbly", "understandably", - "underwealming", "underwhelming", - "underwhemling", "underwhelming", - "underwhleming", "underwhelming", - "undoctrinated", "indoctrinated", - "unexpectadely", "unexpectedly", - "unfomfortable", "uncomfortable", - "unforgiveable", "unforgivable", - "unfortuantely", "unfortunately", - "unfortunantly", "unfortunately", - "unfortunatley", "unfortunately", - "unfortuneatly", "unfortunately", - "unfortunetely", "unfortunately", - "unilaterallly", "unilaterally", - "uninstallling", "uninstalling", - "unintellegent", "unintelligent", - "unintelligant", "unintelligent", - "unintensional", "unintentional", - "uninteristing", "uninteresting", - "universitites", "universities", - "unnecassarily", "unnecessarily", - "unneccesarily", "unnecessarily", - "unnecessairly", "unnecessarily", - "unnecessarely", "unnecessarily", - "unnecessarity", "unnecessarily", - "unnecesserily", "unnecessarily", - "unnecissarily", "unnecessarily", - "unnessecarily", "unnecessarily", - "unoperational", "nonoperational", - "unprecendeted", "unprecedented", - "unprecidented", "unprecedented", - "unpredecented", "unprecedented", - "unpredicatble", "unpredictable", - "unpredictible", "unpredictable", - "unpresedented", "unprecedented", - "unpridictable", "unpredictable", - "unprofessinal", "unprofessional", - "unrealistisch", "unrealistic", - "unreasonabley", "unreasonably", - "unreasonablly", "unreasonably", - "unrestrictred", "unrestricted", - "unsistainable", "unsustainable", - "unsubscribade", "unsubscribed", - "unsubscribbed", "unsubscribe", - "unsuccesfully", "unsuccessfully", - "unsuccessfull", "unsuccessful", - "unsucessfully", "unsuccessfully", - "unsuprisingly", "unsurprisingly", - "unsuprizingly", "unsurprisingly", - "unsustainible", "unsustainable", - "unsustianable", "unsustainable", - "vertification", "certification", - "villification", "vilification", - "virualization", "visualization", - "visualizacion", "visualization", - "visualizaiton", "visualization", - "visualizating", "visualization", - "vitualization", "visualization", - "vizualization", "visualization", - "volounteering", "volunteering", - "vulberability", "vulnerability", - "vulernability", "vulnerability", - "vulnarability", "vulnerability", - "vulnerabiltiy", "vulnerability", - "vulnurability", "vulnerability", - "vunlerability", "vulnerability", - "vurnerability", "vulnerability", - "weightlfiting", "weightlifting", - "weightlifitng", "weightlifting", - "weightligting", "weightlifting", - "weigthlifting", "weightlifting", - "wholeheartdly", "wholeheartedly", - "wholeheartedy", "wholeheartedly", - "wholeheartely", "wholeheartedly", - "wieghtlifting", "weightlifting", - "abberivation", "abbreviation", - "abberviation", "abbreviation", - "abbreivation", "abbreviation", - "abbreveation", "abbreviation", - "abbrievation", "abbreviation", - "abortificant", "abortifacient", - "abrreviation", "abbreviation", - "academcially", "academically", - "accedentally", "accidentally", - "accelarating", "accelerating", - "accelaration", "acceleration", - "acceleartion", "acceleration", - "acceleraptor", "accelerator", - "accelorating", "accelerating", - "accessibilty", "accessibility", - "accidentlaly", "accidently", - "accomadating", "accommodating", - "accomadation", "accommodation", - "accomodating", "accommodating", - "accomodation", "accommodation", - "accrediation", "accreditation", - "acculumation", "accumulation", - "accumalation", "accumulation", - "accumilation", "accumulation", - "acedemically", "academically", - "acheivements", "achievements", - "acknolwedged", "acknowledged", - "acknolwedges", "acknowledges", - "acknoweldged", "acknowledged", - "acknoweldges", "acknowledges", - "acknowiedged", "acknowledged", - "acknowladges", "acknowledges", - "acknowldeged", "acknowledged", - "acknowledget", "acknowledgement", - "acknowleding", "acknowledging", - "acknowlegded", "acknowledged", - "acknowlegdes", "acknowledges", - "ackumulation", "accumulation", - "acquaintaces", "acquaintances", - "acquaintence", "acquaintance", - "acquantaince", "acquaintance", - "acquantiance", "acquaintances", - "acquiantance", "acquaintances", - "acquiantence", "acquaintance", - "adknowledged", "acknowledged", - "adknowledges", "acknowledges", - "administored", "administer", - "adminsitered", "administered", - "adminstrator", "administrator", - "advantagious", "advantageous", - "advantegeous", "advantageous", - "adventageous", "advantageous", - "adventureous", "adventures", - "adventureres", "adventures", - "adventurious", "adventurous", - "adventuruous", "adventurous", - "advertisiers", "advertisers", - "advertisment", "advertisement", - "advertisters", "advertisers", - "advertisting", "advertising", - "aestheticaly", "aesthetically", - "aestheticlly", "aesthetically", - "afficianados", "aficionados", - "afficionados", "aficionados", - "afghanisthan", "afghanistan", - "afterhtought", "afterthought", - "afterthougth", "afterthought", - "aggressivley", "aggressively", - "agircultural", "agricultural", - "agknowledged", "acknowledged", - "agnosticisim", "agnosticism", - "agracultural", "agricultural", - "agriculteral", "agricultural", - "agriculteurs", "agriculture", - "agricultrual", "agricultural", - "agriculutral", "agricultural", - "agrigultural", "agricultural", - "agrocultural", "agricultural", - "allegiancies", "allegiance", - "alterantives", "alternatives", - "alternatevly", "alternately", - "alternatiely", "alternately", - "alternatieve", "alternative", - "alternativly", "alternatively", - "alternativos", "alternatives", - "alternatvely", "alternately", - "alternitives", "alternatives", - "altruistisch", "altruistic", - "amendmenters", "amendments", - "amohetamines", "amphetamines", - "ampehtamines", "amphetamines", - "ampethamines", "amphetamines", - "amphatamines", "amphetamines", - "amphedamines", "amphetamines", - "amphetamenes", "amphetamines", - "amphetemines", "amphetamines", - "amphetimines", "amphetamines", - "amphetmaines", "amphetamines", - "anecdotallly", "anecdotally", - "annhiliation", "annihilation", - "annihalition", "annihilation", - "annihilatron", "annihilation", - "annihliation", "annihilation", - "annilihation", "annihilation", - "anniversairy", "anniversary", - "anniversarry", "anniversary", - "anniversiary", "anniversary", - "annoucenment", "announcements", - "annoucnement", "announcement", - "announcemnet", "announcements", - "announcemnts", "announcements", - "anphetamines", "amphetamines", - "ansalisation", "nasalisation", - "ansalization", "nasalization", - "antaganistic", "antagonistic", - "antagonisitc", "antagonistic", - "antagonostic", "antagonist", - "antibioticos", "antibiotics", - "anticiaption", "anticipation", - "anticipacion", "anticipation", - "antisipation", "anticipation", - "antogonistic", "antagonistic", - "antrhopology", "anthropology", - "antrophology", "anthropology", - "apllications", "applications", - "apocalypitic", "apocalyptic", - "apologistics", "apologists", - "apologizeing", "apologizing", - "apostrophied", "apostrophe", - "apostrophies", "apostrophe", - "apperciation", "appreciation", - "applicaitons", "applications", - "appoitnments", "appointments", - "apporachable", "approachable", - "appraochable", "approachable", - "appreceating", "appreciating", - "appreciaters", "appreciates", - "appreciatied", "appreciative", - "appreicating", "appreciating", - "appreication", "appreciation", - "appretiation", "appreciation", - "appropriatin", "appropriation", - "appropriatly", "appropriately", - "appropriaton", "appropriation", - "approprietly", "appropriately", - "approstraphe", "apostrophe", - "approxiately", "approximately", - "approximatly", "approximately", - "approximetly", "approximately", - "aproximately", "approximately", - "aqcuaintance", "acquaintance", - "aqquaintance", "acquaintance", - "arbitrariliy", "arbitrarily", - "arbitrarilly", "arbitrarily", - "archetecture", "architecture", - "architechure", "architecture", - "architectual", "architectural", - "architectuur", "architecture", - "architecutre", "architecture", - "architexture", "architecture", - "arcitechture", "architecture", - "areodynamics", "aerodynamics", - "argicultural", "agricultural", - "argumentatie", "argumentative", - "arithmetisch", "arithmetic", - "armageddomon", "armageddon", - "arrengements", "arrangements", - "articifially", "artificially", - "artificailly", "artificially", - "artificiella", "artificial", - "artificually", "artificially", - "artifiically", "artificially", - "assasination", "assassination", - "assassinatin", "assassination", - "assissinated", "assassinated", - "associationg", "associating", - "assoications", "associations", - "assosiations", "associations", - "assosication", "assassination", - "assotiations", "associations", - "assymetrical", "asymmetrical", - "asthetically", "aesthetically", - "astranomical", "astronomical", - "astromonical", "astronomical", - "astronautlis", "astronauts", - "astronimical", "astronomical", - "astronomicly", "astronomical", - "athleticisim", "athleticism", - "atmosphereic", "atmospheric", - "audiobookmrs", "audiobooks", - "auhtenticate", "authenticate", - "australianas", "australians", - "australianos", "australians", - "authentisity", "authenticity", - "authorithies", "authorities", - "authoritiers", "authorities", - "authorizaton", "authorization", - "authrorities", "authorities", - "autochtonous", "autochthonous", - "autocorrrect", "autocorrect", - "automobilies", "automobile", - "automodertor", "automoderator", - "automonomous", "autonomous", - "auxilliaries", "auxiliaries", - "avaliability", "availability", - "avialability", "availability", - "awknowledged", "acknowledged", - "awknowledges", "acknowledges", - "awkwardsness", "awkwardness", - "babysittting", "babysitting", - "beaurocratic", "bureaucratic", - "beautifullly", "beautifully", - "belligerante", "belligerent", - "beuraucratic", "bureaucratic", - "billionairre", "billionaire", - "billionaries", "billionaires", - "billioniares", "billionaires", - "bioligically", "biologically", - "birmingharam", "birmingham", - "bittersweeet", "bittersweet", - "blamethrower", "flamethrower", - "blueberrries", "blueberries", - "blueprintcss", "blueprints", - "boardcasting", "broadcasting", - "bobybuilding", "bodybuilding", - "bodybuidling", "bodybuilding", - "bodybuilidng", "bodybuilding", - "bodybuliding", "bodybuilding", - "bodydbuilder", "bodybuilder", - "bombardement", "bombardment", - "boradcasting", "broadcasting", - "botivational", "motivational", - "brainwahsing", "brainwashing", - "brakethrough", "breakthrough", - "braodcasting", "broadcasting", - "brazilianese", "brazilians", - "brazilianess", "brazilians", - "breakthorugh", "breakthrough", - "breaktrhough", "breakthrough", - "breastfeedig", "breastfeeding", - "breastfeeing", "breastfeeding", - "breasttaking", "breathtaking", - "brianwashing", "brainwashing", - "broadcastors", "broadcasts", - "brotherhoood", "brotherhood", - "buearucratic", "bureaucratic", - "bueraucratic", "bureaucratic", - "bulletprooof", "bulletproof", - "bureaocratic", "bureaucratic", - "bureaucracie", "bureaucratic", - "bureaucracts", "bureaucrats", - "bureaucrates", "bureaucrats", - "bureuacratic", "bureaucratic", - "businessemen", "businessmen", - "cababilities", "capabilities", - "caclulations", "calculations", - "calcluations", "calculation", - "calcualtions", "calculations", - "calculationg", "calculating", - "calculatoare", "calculator", - "californains", "californian", - "californican", "californian", - "californinan", "californian", - "caluclations", "calculations", - "camouflagued", "camouflage", - "canceltation", "cancellation", - "cannibalisim", "cannibalism", - "canniballism", "cannibalism", - "cannotations", "connotations", - "capitalistes", "capitalists", - "caracterized", "characterized", - "carbohydrats", "carbohydrates", - "carbohyrdate", "carbohydrates", - "caricaturale", "caricature", - "caricaturile", "caricature", - "caricaturise", "caricature", - "caricaturize", "caricature", - "catastraphic", "catastrophic", - "catastrohpic", "catastrophic", - "catastrophie", "catastrophe", - "categoricaly", "categorically", - "categoriezed", "categorized", - "catergorized", "categorized", - "caterpillers", "caterpillars", - "catestrophic", "catastrophic", - "catholicisim", "catholicism", - "catholocisim", "catholicism", - "catistrophic", "catastrophic", - "catostraphic", "catastrophic", - "catostrophic", "catastrophic", - "catterpilars", "caterpillars", - "catterpillar", "caterpillar", - "celebratings", "celebrations", - "celebritites", "celebrities", - "celibrations", "celebrations", - "cententenial", "centennial", - "cercumstance", "circumstance", - "cerification", "verification", - "certificiate", "certificate", - "challengeing", "challenging", - "chamiponship", "championships", - "champinoship", "championships", - "championchip", "championship", - "championsihp", "championships", - "championsips", "championships", - "champiosnhip", "championships", - "champoinship", "championship", - "chanpionship", "championship", - "charactarize", "characterize", - "charaterized", "characterized", - "charismastic", "charismatic", - "cheerlearder", "cheerleader", - "cheerleeders", "cheerleaders", - "cheeseberger", "cheeseburger", - "cheeseborger", "cheeseburger", - "cheesebruger", "cheeseburgers", - "cheeseburges", "cheeseburgers", - "cheeseburgie", "cheeseburger", - "cheezeburger", "cheeseburger", - "chirstianity", "christianity", - "chocolateers", "chocolates", - "chrisitanity", "christianity", - "christainity", "christianity", - "christiantiy", "christianity", - "christinaity", "christianity", - "chromosomers", "chromosomes", - "chronologial", "chronological", - "chrsitianity", "christianity", - "cilivization", "civilizations", - "circulatiing", "circulating", - "circulationg", "circulating", - "circumcisied", "circumcised", - "circumcition", "circumcision", - "circumsicion", "circumcision", - "circumsision", "circumcision", - "circumsition", "circumcision", - "circumsizion", "circumcision", - "circumstanes", "circumstance", - "circumstanta", "circumstantial", - "circumstante", "circumstance", - "circuncision", "circumcision", - "circunstance", "circumstance", - "civiliaztion", "civilizations", - "civilizacion", "civilization", - "civilizaiton", "civilization", - "civilizatoin", "civilizations", - "civilizatons", "civilizations", - "civilziation", "civilizations", - "civizilation", "civilizations", - "claculations", "calculations", - "classificato", "classification", - "cockroachers", "cockroaches", - "coefficienct", "coefficient", - "coencidental", "coincidental", - "coincedental", "coincidental", - "coincidencal", "coincidental", - "coincidentia", "coincidental", - "coindidental", "coincidental", - "coinsidental", "coincidental", - "cointerpoint", "counterpoint", - "collaberator", "collaborate", - "collaboratie", "collaborate", - "collaboratin", "collaboration", - "collectivily", "collectively", - "collectivley", "collectively", - "colonialisim", "colonialism", - "colonizacion", "colonization", - "colonizators", "colonizers", - "colonozation", "colonization", - "combanations", "combinations", - "combonations", "combinations", - "comdemnation", "condemnation", - "comemmorates", "commemorates", - "comemoretion", "commemoration", - "comeptitions", "competitions", - "comfirmation", "confirmation", - "comfortabley", "comfortably", - "comfortablly", "comfortably", - "comissioning", "commissioning", - "commandemnts", "commandment", - "commandmants", "commandments", - "commandmends", "commandments", - "commemmorate", "commemorate", - "commendments", "commandments", - "commenteries", "commenters", - "commenwealth", "commonwealth", - "commerciales", "commercials", - "commerically", "commercially", - "comminicated", "communicated", - "commishioned", "commissioned", - "commishioner", "commissioner", - "commisioning", "commissioning", - "commissionar", "commissioner", - "commissionor", "commissioner", - "committments", "commitments", - "commoditites", "commodities", - "commomwealth", "commonwealth", - "commonhealth", "commonwealth", - "commonweatlh", "commonwealth", - "commonwelath", "commonwealth", - "communciated", "communicated", - "communiation", "communication", - "communicatie", "communicate", - "communicatin", "communications", - "communicaton", "communication", - "communitites", "communities", - "compansating", "compensating", - "compansation", "compensation", - "comparativly", "comparatively", - "comparisions", "comparisons", - "comparission", "comparisons", - "comparissons", "comparisons", - "compatablity", "compatibility", - "compatibiliy", "compatibility", - "compatibilty", "compatibility", - "compatiblity", "compatibility", - "compensacion", "compensation", - "compensative", "compensate", - "compesitions", "compositions", - "competetions", "competitions", - "competitevly", "competitively", - "competitiion", "competition", - "competitiors", "competitors", - "competitivly", "competitively", - "competitivos", "competitions", - "compinsating", "compensating", - "compinsation", "compensation", - "complainging", "complaining", - "completetion", "completion", - "compliations", "compilation", - "complicacion", "complication", - "complicatied", "complicate", - "complicaties", "complicate", - "complicatred", "complicate", - "complicatted", "complicate", - "complilation", "complication", - "complimation", "complication", - "complimenary", "complimentary", - "complimentje", "complimented", - "complimentry", "complimentary", - "complination", "complication", - "complitation", "complication", - "composistion", "compositions", - "compramising", "compromising", - "compremising", "compromising", - "compresssion", "compression", - "compromissen", "compromise", - "compromisses", "compromises", - "compromizing", "compromising", - "compromosing", "compromising", - "comptability", "compatibility", - "compulsivley", "compulsive", - "compulsorary", "compulsory", - "computarized", "computerized", - "comrpomising", "compromising", - "comtaminated", "contaminated", - "comtemporary", "contemporary", - "conbinations", "combinations", - "concatinated", "contaminated", - "conceivabley", "conceivably", - "concellation", "cancellation", - "concentraded", "concentrated", - "concentraing", "concentrating", - "concentraion", "concentration", - "concentrarte", "concentrate", - "concentratie", "concentrate", - "concentratin", "concentration", - "concequences", "consequences", - "concequently", "consequently", - "concersation", "conservation", - "concervation", "conservation", - "concervatism", "conservatism", - "concervative", "conservative", - "conciderable", "considerable", - "conciderably", "considerably", - "conciousness", "consciousness", - "conclusiones", "conclusions", - "conclusivley", "conclusive", - "condamnation", "condemnation", - "condemantion", "condemnation", - "condenmation", "condemnation", - "condescening", "condescending", - "condescenion", "condescension", - "conditionnal", "conditional", - "conditionned", "conditioned", - "conditionner", "conditioner", - "condmenation", "condemnation", - "condolencies", "condolences", - "condolensces", "condolences", - "condomnation", "condemnation", - "condradicted", "contradicted", - "conenctivity", "connectivity", - "confedential", "confidential", - "confederancy", "confederacy", - "confederatie", "confederate", - "confermation", "confirmation", - "confersation", "conservation", - "confessionis", "confessions", - "confidencial", "confidential", - "confidentail", "confidential", - "confidentaly", "confidently", - "confidentely", "confidently", - "confidentiel", "confidential", - "configuratin", "configurations", - "configuraton", "configuration", - "confirmacion", "confirmation", - "confrimation", "confirmation", - "confrontaion", "confrontation", - "congegration", "congregation", - "congergation", "congregation", - "congradulate", "congratulate", - "congragation", "congregation", - "congragulate", "congratulate", - "congratualte", "congratulate", - "congregacion", "congregation", - "congresional", "congressional", - "congresssman", "congressman", - "congresssmen", "congressmen", - "congretation", "congregation", - "congrigation", "congregation", - "conicidental", "coincidental", - "connatations", "connotations", - "connecticuit", "connecticut", - "connectivety", "connectivity", - "connetations", "connotations", - "connitations", "connotations", - "connonations", "connotations", - "conolization", "colonization", - "conpensating", "compensating", - "conpensation", "compensation", - "conpetitions", "competitions", - "conplimented", "complimented", - "conpromising", "compromising", - "consciouness", "consciousness", - "consciouslly", "consciously", - "consectutive", "consecutive", - "consecuences", "consequences", - "consecuentes", "consequences", - "consecuently", "consequently", - "consensuarlo", "consensual", - "consentrated", "concentrated", - "consentrates", "concentrates", - "conseqeunces", "consequence", - "consequenses", "consequences", - "consequental", "consequently", - "consequneces", "consequence", - "conservacion", "conservation", - "conservaties", "conservatives", - "conservativo", "conservation", - "conservativs", "conservatism", - "conservitave", "conservatives", - "conservitism", "conservatism", - "conservitive", "conservative", - "considerarle", "considerable", - "considerarte", "considerate", - "consideraste", "considerate", - "consideratie", "considerate", - "consideratin", "considerations", - "consideribly", "considerably", - "consilidated", "consolidated", - "consipracies", "conspiracies", - "consiquently", "consequently", - "consistantly", "consistently", - "consistencey", "consistency", - "consistentcy", "consistently", - "consitutents", "constituents", - "consoldiated", "consolidated", - "consolitated", "consolidate", - "consolodated", "consolidated", - "consoltation", "consultation", - "conspericies", "conspiracies", - "conspiracize", "conspiracies", - "conspiriator", "conspirator", - "conspiricies", "conspiracies", - "conspriacies", "conspiracies", - "consqeuences", "consequence", - "constinually", "continually", - "constitition", "constitution", - "constituante", "constituents", - "constituants", "constituents", - "constituates", "constitutes", - "constitucion", "constitution", - "constituient", "constitute", - "constituinte", "constituents", - "constitutiei", "constitute", - "constitutues", "constitute", - "constiutents", "constituents", - "constracting", "constructing", - "constraction", "construction", - "constrainsts", "constraints", - "construccion", "construction", - "construciton", "construction", - "constructeds", "constructs", - "constructief", "constructive", - "constructies", "constructs", - "constructifs", "constructs", - "constructiin", "constructing", - "constructivo", "construction", - "consturction", "construction", - "consultating", "consultation", - "consumerisim", "consumerism", - "contaiminate", "contaminate", - "contaminatie", "contaminated", - "contaminaton", "contamination", - "contaminents", "containment", - "contamporary", "contemporary", - "contanimated", "contaminated", - "contaniments", "containment", - "contemperary", "contemporary", - "contemporany", "contemporary", - "continentais", "continents", - "continential", "continental", - "contineously", "continuously", - "continiously", "continuously", - "continuacion", "continuation", - "continuating", "continuation", - "continuativo", "continuation", - "continuining", "continuing", - "contirbution", "contribution", - "contirbutors", "contributors", - "contiunation", "continuation", - "contrabution", "contribution", - "contraceptie", "contraceptives", - "contradicing", "contradicting", - "contradicion", "contradiction", - "contradicory", "contradictory", - "contradictie", "contradicted", - "contradictin", "contradiction", - "contradicton", "contradiction", - "contraticted", "contradicted", - "contribucion", "contribution", - "contribuitor", "contributor", - "contributers", "contributors", - "contributivo", "contribution", - "contributons", "contributors", - "contrictions", "contractions", - "contridicted", "contradicted", - "controlleras", "controllers", - "controlllers", "controllers", - "controverial", "controversial", - "controveries", "controversies", - "controversal", "controversial", - "controversey", "controversy", - "contructions", "contractions", - "conveinently", "conveniently", - "convencional", "conventional", - "conveniantly", "conveniently", - "converastion", "conversations", - "converdation", "conservation", - "conversacion", "conversation", - "conversaiton", "conversations", - "conversatino", "conservation", - "conversatism", "conservatism", - "conversatoin", "conversations", - "conversiones", "conversions", - "converstaion", "conversation", - "convertables", "convertibles", - "convertiable", "convertible", - "convertibile", "convertible", - "convervation", "conservation", - "convervatism", "conservatism", - "converzation", "conservation", - "convesration", "conservation", - "convienently", "conveniently", - "convorsation", "conversation", - "convseration", "conservation", - "coordenation", "coordination", - "coordiantion", "coordination", - "coordinacion", "coordination", - "coordinaters", "coordinates", - "coordinatior", "coordinator", - "coordinatore", "coordinate", - "coordonation", "coordination", - "cooridnation", "coordination", - "coorperation", "cooperation", - "coprorations", "corporations", - "corinthianos", "corinthians", - "corinthinans", "corinthians", - "corparations", "corporations", - "corperations", "corporations", - "corporativos", "corporations", - "corproations", "corporations", - "corrdination", "coordination", - "correponding", "corresponding", - "correposding", "corresponding", - "correspondes", "corresponds", - "correspondig", "corresponding", - "corresponing", "corresponding", - "corrisponded", "corresponded", - "costomizable", "customizable", - "costumizable", "customizable", - "councidental", "coincidental", - "counsellling", "counselling", - "counterfiets", "counterfeit", - "counterfited", "counterfeit", - "counterracts", "counterparts", - "countertraps", "counterparts", - "countrywides", "countryside", - "coutnerparts", "counterparts", - "coutnerpoint", "counterpoint", - "covnersation", "conservation", - "crankenstein", "frankenstein", - "creationisim", "creationism", - "creationnism", "creationism", - "creationnist", "creationist", - "creationsism", "creationism", - "creationsist", "creationist", - "creationsits", "creationists", - "credibillity", "credibility", - "crigneworthy", "cringeworthy", - "cringewhorty", "cringeworthy", - "cringeworhty", "cringeworthy", - "cringewrothy", "cringeworthy", - "cringyworthy", "cringeworthy", - "criticallity", "critically", - "criticiszing", "criticising", - "croporations", "corporations", - "crucifiction", "crucifixion", - "cuestionable", "questionable", - "culiminating", "culminating", - "cumulatative", "cumulative", - "cuntaminated", "contaminated", - "curcumcision", "circumcision", - "curcumstance", "circumstance", - "custamizable", "customizable", - "custimizable", "customizable", - "customizaton", "customization", - "customizeble", "customizable", - "customizible", "customizable", - "custumizable", "customizable", - "cuztomizable", "customizable", - "dabilitating", "debilitating", - "dangerousely", "dangerously", - "decensitized", "desensitized", - "deceptionist", "receptionist", - "declareation", "declaration", - "decomposeion", "decomposition", - "decomposited", "decomposed", - "decscription", "description", - "deffensively", "defensively", - "deficiancies", "deficiencies", - "deficiencias", "deficiencies", - "deficiensies", "deficiencies", - "definatively", "definitively", - "defininitely", "definitively", - "definitavely", "definitively", - "definitevely", "definitively", - "definitifely", "definitively", - "definitinely", "definitively", - "definititely", "definitively", - "definitivley", "definitively", - "deinitalized", "deinitialized", - "deinitalizes", "deinitializes", - "delibaretely", "deliberately", - "deliberatley", "deliberately", - "delibirately", "deliberately", - "delibitating", "debilitating", - "deliverately", "deliberately", - "delusionally", "delusively", - "demesticated", "domesticated", - "democracries", "democracies", - "democraphics", "demographics", - "democratisch", "democratic", - "demograhpics", "demographics", - "demogrpahics", "demographics", - "demonination", "denominations", - "demonstarted", "demonstrated", - "demonstartes", "demonstrates", - "demonstrabil", "demonstrably", - "demonstraion", "demonstration", - "demonstraits", "demonstrates", - "demonstrants", "demonstrates", - "demonstratie", "demonstrate", - "demonstratin", "demonstration", - "demonstrerat", "demonstrate", - "demosntrably", "demonstrably", - "demosntrated", "demonstrated", - "demosntrates", "demonstrates", - "demostration", "demonstration", - "denomenation", "denomination", - "denominacion", "denomination", - "denominatior", "denominator", - "denominatons", "denominations", - "denomonation", "denomination", - "deomgraphics", "demographics", - "depencencies", "dependencies", - "dependancies", "dependencies", - "dependencias", "dependencies", - "dependenices", "dependencies", - "dependensies", "dependencies", - "deperecation", "deprecation", - "deplacements", "replacements", - "deregualtion", "deregulation", - "deregulaiton", "deregulation", - "derugulation", "deregulation", - "describtions", "descriptions", - "descriminant", "discriminant", - "descriptivos", "descriptions", - "desctiptions", "descriptions", - "desctruction", "destruction", - "desencitized", "desensitized", - "desensatized", "desensitized", - "desensitived", "desensitized", - "desentisized", "desensitized", - "desentitized", "desensitized", - "desentizised", "desensitized", - "desginations", "destinations", - "desgustingly", "disgustingly", - "desitnations", "destinations", - "despectively", "respectively", - "despensaries", "dispensaries", - "desperatedly", "desperately", - "desperatelly", "desperately", - "desqualified", "disqualified", - "desregarding", "disregarding", - "dessertation", "dissertation", - "destiantions", "destinations", - "destinctions", "destinations", - "destractions", "distractions", - "destributors", "distributors", - "determinanti", "determination", - "determinaton", "determination", - "determinging", "determining", - "determinisic", "deterministic", - "determinisim", "determinism", - "deterministc", "deterministic", - "determinitic", "deterministic", - "detrimential", "detrimental", - "developement", "development", - "developmenet", "developments", - "develpoments", "developments", - "devolopement", "development", - "devolopments", "developments", - "diasspointed", "dissapointed", - "dicitonaries", "dictionaries", - "dictadorship", "dictatorship", - "dictarorship", "dictatorship", - "dictatorshop", "dictatorship", - "dictionaires", "dictionaries", - "didsapointed", "dissapointed", - "differencial", "differential", - "differencies", "differences", - "differentate", "differentiate", - "differnetial", "differential", - "difficulites", "difficulties", - "difficutlies", "difficulties", - "diffuculties", "difficulties", - "dimensionals", "dimensions", - "dimensionnal", "dimensional", - "dimensionsal", "dimensional", - "diplomatisch", "diplomatic", - "directionnal", "directional", - "disaapointed", "dissapointed", - "disadvandage", "disadvantaged", - "disadvantged", "disadvantaged", - "disadvantges", "disadvantages", - "disadvatange", "disadvantage", - "disadventage", "disadvantage", - "disagremeent", "disagreements", - "disapointing", "disappointing", - "disappearnce", "disappearance", - "disappearred", "disappeared", - "disapperaing", "disappearing", - "disaspointed", "dissapointed", - "disastisfied", "dissatisfied", - "disatissfied", "dissatisfied", - "disatvantage", "disadvantage", - "discertation", "dissertation", - "disciniplary", "disciplinary", - "disciplanary", "disciplinary", - "disciplenary", "disciplinary", - "disciplinare", "discipline", - "disciplinera", "disciplinary", - "disciplinery", "disciplinary", - "disclipinary", "disciplinary", - "disconencted", "disconnected", - "disconnectes", "disconnects", - "disconnectme", "disconnected", - "disconnectus", "disconnects", - "discontiuned", "discontinued", - "discountined", "discontinued", - "discreditied", "discredited", - "discreditted", "discredited", - "discriminare", "discriminate", - "discriminted", "discriminated", - "disctinction", "distinction", - "disctinctive", "distinctive", - "disctintions", "distinctions", - "discualified", "disqualified", - "discustingly", "disgustingly", - "disemination", "dissemination", - "disenchanged", "disenchanted", - "disengenuous", "disingenuous", - "disenginuous", "disingenuous", - "disensitized", "desensitized", - "disgareement", "disagreements", - "disgruntaled", "disgruntled", - "disgrunteled", "disgruntled", - "disguntingly", "disgustingly", - "disingeneous", "disingenuous", - "disingenious", "disingenuous", - "disinteresed", "disinterested", - "disintereted", "disinterested", - "dismantleing", "dismantling", - "disobediance", "disobedience", - "disobeidence", "disobedience", - "dispalcement", "displacement", - "dispapointed", "dissapointed", - "dispencaries", "dispensaries", - "dispensaires", "dispensaries", - "dispensarios", "dispensaries", - "dispensiries", "dispensaries", - "dispensories", "dispensaries", - "disqaulified", "disqualified", - "disqualifyed", "disqualified", - "disqustingly", "disgustingly", - "disrecpected", "disrespected", - "disrepsected", "disrespected", - "disresepcted", "disrespected", - "disrespecful", "disrespectful", - "disrespecing", "disrespecting", - "disrespectul", "disrespectful", - "disrespekted", "disrespected", - "disrtibution", "distributions", - "dissapearing", "disappearing", - "dissapionted", "dissapointed", - "dissapoimted", "dissapointed", - "dissapoitned", "dissapointed", - "dissaponited", "dissapointed", - "dissapoonted", "dissapointed", - "dissapounted", "dissapointed", - "dissappinted", "dissapointed", - "dissapponted", "dissapointed", - "dissastified", "dissatisfied", - "dissatisifed", "dissatisfied", - "dissatsified", "dissatisfied", - "dissepointed", "dissapointed", - "dissipointed", "dissapointed", - "dissobediant", "disobedient", - "dissobedient", "disobedient", - "dissopointed", "dissapointed", - "disspaointed", "dissapointed", - "dissppointed", "dissapointed", - "dissspointed", "dissapointed", - "distinations", "distinctions", - "distincitons", "distinctions", - "distingished", "distinguished", - "distingishes", "distinguishes", - "distinguised", "distinguished", - "distirbuting", "distributing", - "distirbution", "distribution", - "distrabution", "distribution", - "distribitors", "distributors", - "distribtuion", "distributions", - "distribucion", "distribution", - "distribuited", "distributed", - "distribuiton", "distributions", - "distribuitor", "distributor", - "distribusion", "distributions", - "distributino", "distributions", - "distributior", "distributor", - "distributons", "distributors", - "distributore", "distribute", - "distriubtion", "distributions", - "distrobution", "distribution", - "distrubances", "disturbance", - "distrubiting", "distributing", - "distrubition", "distribution", - "distrubitors", "distributors", - "distrubution", "distribution", - "distrubutors", "distributors", - "distructions", "distractions", - "distustingly", "disgustingly", - "ditactorship", "dictatorship", - "documenation", "documentation", - "documentaion", "documentation", - "documentaire", "documentaries", - "documentarse", "documentaries", - "documentarsi", "documentaries", - "domesitcated", "domesticated", - "domisticated", "domesticated", - "donesticated", "domesticated", - "donwloadable", "downloadable", - "dossapointed", "dissapointed", - "downlaodable", "downloadable", - "downloadbale", "downloadable", - "downloadeble", "downloadable", - "drankenstein", "frankenstein", - "dublications", "publications", - "dusgustingly", "disgustingly", - "dynamicallly", "dynamically", - "dyregulation", "deregulation", - "earthquackes", "earthquakes", - "earthquakers", "earthquakes", - "econimically", "economically", - "economisesti", "economists", - "educationnal", "educational", - "effectionate", "affectionate", - "effectivelly", "effectively", - "effectivenss", "effectiveness", - "efficienctly", "efficiency", - "effordlessly", "effortlessly", - "ejacualtions", "ejaculation", - "electorlytes", "electrolytes", - "electricrain", "electrician", - "electrictian", "electrician", - "electrobytes", "electrolytes", - "electrocytes", "electrolytes", - "electrolites", "electrolytes", - "electroltyes", "electrolytes", - "electronicas", "electronics", - "electronicos", "electronics", - "electroyltes", "electrolytes", - "elektrolytes", "electrolytes", - "eloctrolytes", "electrolytes", - "embarassment", "embarrassment", - "embarasssing", "embarassing", - "embarrasment", "embarrassment", - "embarressing", "embarrassing", - "embarrissing", "embarrassing", - "emberrassing", "embarrassing", - "emphetamines", "amphetamines", - "emprisonment", "imprisonment", - "encarcerated", "incarcerated", - "enceclopedia", "encyclopedia", - "enchancement", "enhancement", - "enchancments", "enchantments", - "enchantmants", "enchantments", - "enchentments", "enchantments", - "enciclopedia", "encyclopedia", - "enclycopedia", "encyclopedia", - "encorporated", "incorporated", - "encourageing", "encouraging", - "encyclapedia", "encyclopedia", - "encyclepedia", "encyclopedia", - "encyclopadia", "encyclopedia", - "encyclopeida", "encyclopedia", - "encyclopidia", "encyclopedia", - "encycolpedia", "encyclopedia", - "encyklopedia", "encyclopedia", - "encylcopedia", "encyclopedia", - "encyplopedia", "encyclopedia", - "endoresments", "endorsement", - "enemployment", "unemployment", - "enfringement", "infringement", - "enlightended", "enlightened", - "enlightenend", "enlightened", - "enlightented", "enlightened", - "enlightining", "enlightening", - "enligthening", "enlightening", - "entaglements", "entanglements", - "entartaining", "entertaining", - "enterpreneur", "entrepreneurs", - "enterprenuer", "entrepreneur", - "entertainted", "entertained", - "enthusiaists", "enthusiasts", - "enthusuastic", "enthusiastic", - "entoxication", "intoxication", - "entrepeneurs", "entrepreneurs", - "entreperneur", "entrepreneurs", - "entreprenaur", "entrepreneur", - "entrepreners", "entrepreneurs", - "entrepreneus", "entrepreneurs", - "entreprenour", "entrepreneur", - "entreprenure", "entrepreneurs", - "entreprenurs", "entrepreneurs", - "entrepreuner", "entrepreneurs", - "entretaining", "entertaining", - "enviormental", "environmental", - "enviornments", "environments", - "enviromental", "environmental", - "environemnts", "environments", - "environmentl", "environmentally", - "environmetal", "environmental", - "envrionments", "environments", - "establishmet", "establishments", - "evelutionary", "evolutionary", - "exagerrating", "exaggerating", - "exaggarating", "exaggerating", - "exaggaration", "exaggeration", - "exaggeratted", "exaggerated", - "exaggurating", "exaggerating", - "exagguration", "exaggeration", - "exceptionaly", "exceptionally", - "exceptionnal", "exceptional", - "exclusiveity", "exclusivity", - "exclusivelly", "exclusively", - "exclusivitiy", "exclusivity", - "excorciating", "excruciating", - "excrusiating", "excruciating", - "excurciating", "excruciating", - "exectuioners", "executioner", - "executioneer", "executioner", - "executionees", "executions", - "executioness", "executions", - "executionier", "executioner", - "executionner", "executioner", - "exeggerating", "exaggerating", - "exeggeration", "exaggeration", - "expeditonary", "expeditionary", - "expendatures", "expenditures", - "expendetures", "expenditures", - "expentitures", "expenditures", - "experamental", "experimental", - "expereincing", "experiencing", - "experemental", "experimental", - "experiancing", "experiencing", - "experiemntal", "experimental", - "experiemnted", "experimented", - "experimantal", "experimental", - "experimentan", "experimentation", - "experimentes", "experiments", - "experimentle", "experimented", - "experimentos", "experiments", - "experimentul", "experimental", - "expidentures", "expenditures", - "expierencing", "experiencing", - "expiremental", "experimental", - "expiremented", "experimented", - "explaination", "explanation", - "explenations", "explanations", - "expliotation", "exploitation", - "exploitaiton", "exploitation", - "exploitating", "exploitation", - "exploititive", "exploitative", - "explortation", "exploitation", - "explotiation", "exploitation", - "explotiative", "exploitative", - "expolitation", "exploitation", - "expolitative", "exploitative", - "exponentialy", "exponentially", - "expropiation", "expropriation", - "extensivelly", "extensively", - "extradiction", "extradition", - "extraordiary", "extraordinary", - "extraordinay", "extraordinary", - "extrapolerat", "extrapolate", - "extrapoloate", "extrapolate", - "extremistisk", "extremists", - "extrordinary", "extraordinary", - "extruciating", "excruciating", - "facilitatile", "facilitate", - "fahrenheight", "fahrenheit", - "falmethrower", "flamethrower", - "familiarlize", "familiarize", - "fanslaughter", "manslaughter", - "fantasticaly", "fantastically", - "fantasticlly", "fantastically", - "fashionalble", "fashionable", - "fermantation", "fermentation", - "fermentacion", "fermentation", - "fermentaiton", "fermentation", - "fermentating", "fermentation", - "fermintation", "fermentation", - "fictionaries", "dictionaries", - "figuartively", "figuratively", - "figuratevely", "figuratively", - "figurativley", "figuratively", - "figuretively", "figuratively", - "figuritively", "figuratively", - "fingerpoints", "fingerprints", - "firefigthers", "firefighters", - "flamethorwer", "flamethrower", - "flametrhower", "flamethrower", - "flanethrower", "flamethrower", - "flexibillity", "flexibility", - "flourishment", "flourishing", - "fluctiations", "fluctuations", - "flucutations", "fluctuations", - "fluxtuations", "fluctuations", - "forgivenness", "forgiveness", - "fortunatelly", "fortunately", - "framethrower", "flamethrower", - "frankenstain", "frankenstein", - "frankensteen", "frankenstein", - "frankenstine", "frankenstein", - "frankinstein", "frankenstein", - "frementation", "fermentation", - "friendzonded", "friendzoned", - "friendzonned", "friendzoned", - "friendzowned", "friendzoned", - "fringeworthy", "cringeworthy", - "fronkenstein", "frankenstein", - "fruitsations", "frustrations", - "frustrastion", "frustrations", - "fucntionally", "functionally", - "funcitonally", "functionally", - "functionable", "functional", - "functionaliy", "functionally", - "functionalty", "functionality", - "functionlity", "functionality", - "functionning", "functioning", - "fundamentais", "fundamentals", - "fundamentalt", "fundamentalist", - "fundamentaly", "fundamentally", - "fundemantals", "fundamentals", - "fundementals", "fundamentals", - "fundimentals", "fundamentals", - "furstrations", "frustrations", - "futuristisch", "futuristic", - "fwankenstein", "frankenstein", - "geneological", "genealogical", - "generacional", "generational", - "generalizare", "generalize", - "generalizate", "generalize", - "generelizing", "generalizing", - "geograhpical", "geographical", - "geographicly", "geographical", - "geographisch", "geographic", - "geogrpahical", "geographical", - "goegraphical", "geographical", - "governemntal", "governmental", - "governmently", "governmental", - "grammaticaal", "grammatical", - "grammaticaly", "grammatically", - "grandchilden", "grandchildren", - "grandchilder", "grandchildren", - "grandchilren", "grandchildren", - "grassrooters", "grassroots", - "gringeworthy", "cringeworthy", - "guantanameow", "guantanamo", - "guantanamero", "guantanamo", - "hallucinatin", "hallucinations", - "hallucinaton", "hallucination", - "handwritting", "handwriting", - "harrassments", "harassments", - "headqaurters", "headquarters", - "headquatered", "headquartered", - "healthercare", "healthcare", - "heavywieghts", "heavyweight", - "helicopteros", "helicopters", - "hererosexual", "heterosexual", - "heretosexual", "heterosexual", - "heteresexual", "heterosexual", - "hetreosexual", "heterosexual", - "highligthing", "highlighting", - "hipocritical", "hypocritical", - "hipothetical", "hypothetical", - "histarically", "historically", - "histerically", "historically", - "historicians", "historians", - "homogeneized", "homogenized", - "homogenenous", "homogeneous", - "homosexuales", "homosexuals", - "homosexualiy", "homosexuality", - "homosexualls", "homosexuals", - "homosexualty", "homosexuality", - "homosexuella", "homosexual", - "hopsitalized", "hospitalized", - "horisontally", "horizontally", - "horizantally", "horizontally", - "horiztonally", "horizontally", - "horozontally", "horizontally", - "hospitallity", "hospitality", - "hospitilized", "hospitalized", - "hospitolized", "hospitalized", - "hosptialized", "hospitalized", - "humanitarien", "humanitarian", - "humanitarion", "humanitarian", - "humanitatian", "humanitarian", - "humaniterian", "humanitarian", - "humantiarian", "humanitarian", - "huminatarian", "humanitarian", - "hurricanefps", "hurricanes", - "hyopthetical", "hypothetical", - "hypathetical", "hypothetical", - "hypertrophey", "hypertrophy", - "hypethetical", "hypothetical", - "hypocrticial", "hypocritical", - "hypocrytical", "hypocritical", - "hypotehtical", "hypothetical", - "hypotethical", "hypothetical", - "hypotherical", "hypothetical", - "hypotheticly", "hypothetical", - "hystarically", "hysterically", - "hystorically", "hysterically", - "idealistisch", "idealistic", - "identificato", "identification", - "identifierad", "identified", - "identifieras", "identifies", - "identifyable", "identifiable", - "ideologicaly", "ideologically", - "idiosyncracy", "idiosyncrasy", - "illegetimate", "illegitimate", - "illegitamate", "illegitimate", - "illegitamite", "illegitimate", - "illegitemate", "illegitimate", - "illegitimite", "illegitimate", - "illigetimate", "illegitimate", - "illigitemate", "illegitimate", - "illistration", "illustration", - "illsutration", "illustrations", - "illustartion", "illustration", - "illustraitor", "illustrator", - "illustraties", "illustrate", - "illustratior", "illustrator", - "imcompatible", "incompatible", - "imcompetence", "incompetence", - "imexperience", "inexperience", - "immediatelly", "immediately", - "immortallity", "immortality", - "imperialfist", "imperialist", - "imperialisim", "imperialism", - "imperialstic", "imperialist", - "implamenting", "implementing", - "implausibile", "implausible", - "implecations", "implications", - "implementase", "implements", - "implementasi", "implements", - "implementato", "implementation", - "implentation", "implementation", - "implimenting", "implementing", - "imporvements", "improvements", - "impossibilty", "impossibility", - "impossiblely", "impossibly", - "impossiblity", "impossibly", - "impovershied", "impoverished", - "impoversihed", "impoverished", - "imprefection", "imperfections", - "improsonment", "imprisonment", - "improviserad", "improvised", - "imrpovements", "improvements", - "imtimidating", "intimidating", - "imtimidation", "intimidation", - "inaccesibles", "inaccessible", - "inaccessable", "inaccessible", - "inaccessbile", "inaccessible", - "inaccurasies", "inaccuracies", - "inaccuraties", "inaccuracies", - "inaccuricies", "inaccuracies", - "inacuraccies", "inaccuracies", - "inadvertenly", "inadvertently", - "inappropiate", "inappropriate", - "inapproprate", "inappropriate", - "inappropriae", "inappropriately", - "inappropriet", "inappropriately", - "inattractive", "unattractive", - "inbelievable", "unbelievable", - "incarcelated", "incarcerated", - "incarcirated", "incarcerated", - "incarserated", "incarcerated", - "incedentally", "incidentally", - "incentiveise", "incentives", - "incestigator", "investigator", - "incomaptible", "incompatible", - "incomparible", "incompatible", - "incompatable", "incompatible", - "incompatibil", "incompatible", - "incompetance", "incompetence", - "incompetente", "incompetence", - "incompitable", "incompatible", - "incomptetent", "incompetent", - "inconcistent", "inconsistent", - "inconsistant", "inconsistent", - "inconsistecy", "inconsistency", - "inconsisteny", "inconsistency", - "inconveinent", "inconvenient", - "inconveniant", "inconvenient", - "inconveniece", "inconvenience", - "inconvenince", "inconvenience", - "inconvienent", "inconvenient", - "incorparated", "incorporated", - "incorperated", "incorporated", - "incorportaed", "incorporated", - "incorportate", "incorporate", - "incrediblely", "incredibly", - "incrementers", "increments", - "incremential", "incremental", - "indefinately", "indefinitely", - "indefineable", "undefinable", - "indefinetely", "indefinitely", - "indefinitive", "indefinite", - "indefinitley", "indefinitely", - "indefintiely", "indefinitely", - "indepedantly", "independently", - "indepencence", "independence", - "independance", "independence", - "independante", "independents", - "independenet", "independents", - "independenly", "independently", - "independense", "independents", - "independente", "independence", - "independetly", "independently", - "indepentents", "independents", - "indetifiable", "identifiable", - "indianaoplis", "indianapolis", - "indianopolis", "indianapolis", - "indicentally", "incidentally", - "indifferance", "indifference", - "indifferente", "indifference", - "indiffernece", "indifference", - "indimidating", "intimidating", - "indimidation", "intimidation", - "indipendence", "independence", - "indisputible", "indisputable", - "indisputibly", "indisputably", - "individuales", "individuals", - "individualty", "individuality", - "individuella", "individual", - "indiviudally", "individually", - "indivudually", "individually", - "indpendently", "independently", - "indroduction", "introduction", - "indroductory", "introductory", - "industriella", "industrial", - "industrijske", "industries", - "inefficienct", "inefficient", - "inefficienty", "inefficiently", - "inevitablely", "inevitably", - "inevitablity", "inevitably", - "inevititably", "inevitably", - "inexblicably", "inexplicably", - "inexpectedly", "unexpectedly", - "inexpereince", "inexperience", - "inexperiance", "inexperience", - "inexperieced", "inexperienced", - "inexperiened", "inexperienced", - "inexperiente", "inexperience", - "inexpierence", "inexperienced", - "inexplicabil", "inexplicably", - "inexplicibly", "inexplicably", - "infalability", "infallibility", - "infilitrated", "infiltrated", - "infiltraitor", "infiltrator", - "infiltratior", "infiltrator", - "infiltratred", "infiltrate", - "influenceing", "influencing", - "infogrpahics", "infographic", - "inforgivable", "unforgivable", - "infrantryman", "infantryman", - "infridgement", "infringement", - "infrignement", "infringement", - "ingestigator", "investigator", - "ingredientes", "ingredients", - "ingreediants", "ingredients", - "ininterested", "uninterested", - "initalizable", "initializable", - "inkompatible", "incompatible", - "inkompetence", "incompetence", - "inkonsistent", "inconsistent", - "inlightening", "enlightening", - "innersection", "intersection", - "innerstellar", "interstellar", - "inpenetrable", "impenetrable", - "inplementing", "implementing", - "inplications", "implications", - "inpoverished", "impoverished", - "inprisonment", "imprisonment", - "inproductive", "unproductive", - "inprovements", "improvements", - "inresponsive", "unresponsive", - "insentivised", "insensitive", - "insentivises", "insensitive", - "insignifiant", "insignificant", - "insignificat", "insignificant", - "insinuationg", "insinuating", - "instabillity", "instability", - "instalaltion", "installations", - "installatons", "installations", - "installatron", "installation", - "instantaneos", "instantaneous", - "instantaneus", "instantaneous", - "instantanous", "instantaneous", - "instinctivly", "instinctively", - "institutuion", "institution", - "instramental", "instrumental", - "instrcutions", "instruction", - "instrucitons", "instruction", - "instructiosn", "instruction", - "instructores", "instructors", - "instrumentos", "instruments", - "instrumentul", "instrumental", - "insturmental", "instrumental", - "instutitions", "institutions", - "insuccessful", "unsuccessful", - "insufficiant", "insufficient", - "insuffucient", "insufficient", - "insuspecting", "unsuspecting", - "intaxication", "intoxication", - "intelelctual", "intellectuals", - "intellectals", "intellectuals", - "intellectaul", "intellectuals", - "intellectuel", "intellectual", - "intellecutal", "intellectual", - "intelligance", "intelligence", - "intelligenly", "intelligently", - "intelligente", "intelligence", - "intelligenty", "intelligently", - "intelligient", "intelligent", - "intenational", "international", - "intentionnal", "intentional", - "intepretator", "interpretor", - "interatellar", "interstellar", - "interational", "international", - "intercection", "interception", - "intercepcion", "interception", - "interceptons", "interceptions", - "intereaction", "intersection", - "interections", "interactions", - "interersting", "interpreting", - "interesction", "intersection", - "interestigly", "interestingly", - "interestinly", "interestingly", - "interferance", "interference", - "interfereing", "interfering", - "interferisce", "interferes", - "interferisse", "interferes", - "interferring", "interfering", - "intergration", "integration", - "interlectual", "intellectual", - "intermediare", "intermediate", - "intermediete", "intermediate", - "intermettent", "intermittent", - "intermideate", "intermediate", - "intermidiate", "intermediate", - "internatinal", "international", - "internationl", "international", - "internations", "interactions", - "internediate", "intermediate", - "internelized", "internalized", - "internilized", "internalized", - "interperters", "interpreter", - "interperting", "interpreting", - "interprating", "interpreting", - "interpretare", "interpreter", - "interpretato", "interpretation", - "interpreteer", "interpreter", - "interpretier", "interpreter", - "interpretion", "interpreting", - "interpretter", "interpreter", - "interpriting", "interpreting", - "interraccial", "interracial", - "interractial", "interracial", - "interrogatin", "interrogation", - "interrumping", "interrupting", - "interrupteds", "interrupts", - "interruptors", "interrupts", - "interseccion", "intersection", - "interseciton", "intersections", - "interseption", "interception", - "intersetllar", "interstellar", - "interstallar", "interstellar", - "interstaller", "interstellar", - "intersteller", "interstellar", - "interstellor", "interstellar", - "intertaining", "entertaining", - "intertwinded", "intertwined", - "intertwinned", "intertwined", - "interveiwing", "interviewing", - "intervencion", "intervention", - "interveneing", "intervening", - "intervension", "intervention", - "interviening", "interviewing", - "intidimation", "intimidation", - "intillectual", "intellectual", - "intimidacion", "intimidation", - "intimidative", "intimidate", - "intimitading", "intimidating", - "intimitating", "intimidating", - "intimitation", "intimidation", - "intorduction", "introduction", - "intorductory", "introductory", - "intoxicacion", "intoxication", - "intoxination", "intoxication", - "intrepreting", "interpreting", - "intrinsicaly", "intrinsically", - "introdiction", "introduction", - "introduccion", "introduction", - "introduceras", "introduces", - "introduceres", "introduces", - "introduciton", "introduction", - "introductary", "introductory", - "introducting", "introduction", - "introductury", "introductory", - "introduktion", "introduction", - "introspectin", "introspection", - "intruduction", "introduction", - "intruductory", "introductory", - "intsrumental", "instrumental", - "intuitivelly", "intuitively", - "inturrupting", "interrupting", - "invervention", "intervention", - "investagated", "investigated", - "investagator", "investigator", - "investegated", "investigated", - "investegator", "investigator", - "investigaron", "investigator", - "investigater", "investigator", - "investigatie", "investigative", - "investigatin", "investigation", - "investigatio", "investigator", - "investigaton", "investigation", - "investingate", "investigate", - "investogator", "investigator", - "invicibility", "invisibility", - "invididually", "individually", - "invisibiltiy", "invisibility", - "invisilibity", "invisibility", - "invisivility", "invisibility", - "invlunerable", "invulnerable", - "involnerable", "invulnerable", - "involuntairy", "involuntary", - "involuntarly", "involuntary", - "invonvenient", "inconvenient", - "invulenrable", "invulnerable", - "invulernable", "invulnerable", - "invulnarable", "invulnerable", - "invulnerbale", "invulnerable", - "invulnurable", "invulnerable", - "invulverable", "invulnerable", - "invunlerable", "invulnerable", - "invurnerable", "invulnerable", - "irrationably", "irrationally", - "irrationatly", "irrationally", - "irrationella", "irrational", - "irreplacable", "irreplaceable", - "irresistable", "irresistible", - "irresistably", "irresistibly", - "irrespecitve", "irrespective", - "irresponsble", "irresponsible", - "irresponsibe", "irresponsible", - "irreverisble", "irreversible", - "irreversebly", "irreversible", - "irreversibel", "irreversible", - "irrevirsible", "irreversible", - "irrispective", "irrespective", - "irriversible", "irreversible", - "isdefinitely", "indefinitely", - "isntallation", "installation", - "isntrumental", "instrumental", - "jackonsville", "jacksonville", - "jounralistic", "journalistic", - "jouranlistic", "journalistic", - "journalisitc", "journalistic", - "journalistes", "journalists", - "judgementals", "judgements", - "juggernaunts", "juggernaut", - "juridisction", "jurisdictions", - "jurisdiccion", "jurisdiction", - "jurisdiciton", "jurisdiction", - "jurisdiktion", "jurisdiction", - "jurisfiction", "jurisdiction", - "jurisidction", "jurisdiction", - "juristiction", "jurisdiction", - "jursidiction", "jurisdiction", - "jusridiction", "jurisdiction", - "justificatin", "justifications", - "katastrophic", "catastrophic", - "kidnergarten", "kindergarten", - "kindergarden", "kindergarten", - "kingergarten", "kindergarten", - "kintergarten", "kindergarten", - "knolwedgable", "knowledgable", - "knoweldgable", "knowledgable", - "knowladgable", "knowledgable", - "knowldegable", "knowledgable", - "knowldgeable", "knowledgable", - "knowleagable", "knowledgable", - "knowledagble", "knowledgable", - "knowledeable", "knowledgable", - "knowledgabel", "knowledgable", - "knowledgeble", "knowledgeable", - "knowledgebly", "knowledgable", - "knowledgible", "knowledgable", - "knowlegdable", "knowledgable", - "knowlegeable", "knowledgeable", - "knwoledgable", "knowledgable", - "kolonization", "colonization", - "kombinations", "combinations", - "kommissioner", "commissioner", - "kompensation", "compensation", - "konfidential", "confidential", - "konfirmation", "confirmation", - "kongregation", "congregation", - "konservatism", "conservatism", - "konservative", "conservative", - "konsultation", "consultation", - "konversation", "conversation", - "koordination", "coordination", - "krankenstein", "frankenstein", - "leaglization", "legalization", - "legalizacion", "legalization", - "legalizaiton", "legalization", - "legendariske", "legendaries", - "legimitately", "legitimately", - "legislatiors", "legislators", - "legistration", "registration", - "legitamately", "legitimately", - "legitamitely", "legitimately", - "legitemately", "legitimately", - "legitimatley", "legitimately", - "legitimitely", "legitimately", - "liberatrians", "libertarians", - "libertarains", "libertarians", - "libertariens", "libertarians", - "libertaryans", "libertarians", - "libertatians", "libertarians", - "liberterians", "libertarians", - "libretarians", "libertarians", - "lighthearded", "lighthearted", - "linguisticas", "linguistics", - "linguisticos", "linguistics", - "linguistisch", "linguistics", - "litllefinger", "littlefinger", - "littelfinger", "littlefinger", - "litterfinger", "littlefinger", - "littiefinger", "littlefinger", - "littlefigner", "littlefinger", - "littlefinder", "littlefinger", - "littlepinger", "littlefinger", - "lnowledgable", "knowledgable", - "longitudonal", "longitudinal", - "madturbating", "masturbating", - "madturbation", "masturbation", - "magnificient", "magnificent", - "maintainance", "maintenance", - "maintainence", "maintenance", - "maintenaince", "maintenance", - "malfucntions", "malfunction", - "manafactured", "manufactured", - "manafacturer", "manufacturer", - "manafactures", "manufactures", - "manifactured", "manufactured", - "manifacturer", "manufacturer", - "manifactures", "manufactures", - "manifestaion", "manifestation", - "manifestanti", "manifestation", - "manipluating", "manipulating", - "manipluation", "manipulation", - "manipualting", "manipulating", - "manipualtion", "manipulation", - "manipualtive", "manipulative", - "manipulacion", "manipulation", - "manipulitive", "manipulative", - "maniuplating", "manipulating", - "maniuplation", "manipulation", - "maniuplative", "manipulative", - "manouverable", "maneuverable", - "mansalughter", "manslaughter", - "manslaugther", "manslaughter", - "mansluaghter", "manslaughter", - "manufactered", "manufactured", - "manufacterer", "manufacturer", - "manufacteres", "manufactures", - "manufacteurs", "manufactures", - "manufactored", "manufactured", - "manufactorer", "manufacturer", - "manufactores", "manufactures", - "manufactuers", "manufacturers", - "manufactuing", "manufacturing", - "manufacturas", "manufactures", - "manufacturor", "manufacturer", - "manufactuter", "manufacture", - "manufacuters", "manufactures", - "manufacutred", "manufacture", - "manufacutres", "manufactures", - "manufaturing", "manufacturing", - "manupilating", "manipulating", - "manupulating", "manipulating", - "manupulation", "manipulation", - "manupulative", "manipulative", - "marchmallows", "marshmallows", - "marganilized", "marginalized", - "margenalized", "marginalized", - "marginilized", "marginalized", - "marhsmallows", "marshmallows", - "marshamllows", "marshmallows", - "marshmallons", "marshmallows", - "masoginistic", "misogynistic", - "masogynistic", "misogynistic", - "massachusets", "massachusetts", - "massachustts", "massachusetts", - "masterbation", "masturbation", - "masterpeices", "masterpiece", - "mastrubating", "masturbating", - "mastrubation", "masturbation", - "mastubration", "masturbation", - "masturabting", "masturbating", - "masturabtion", "masturbation", - "masturbacion", "masturbation", - "masturbaited", "masturbated", - "masturbathon", "masturbation", - "masturbsting", "masturbating", - "masturdating", "masturbating", - "mastutbation", "masturbation", - "mataphorical", "metaphorical", - "mataphysical", "metaphysical", - "matchmakeing", "matchmaking", - "mathemathics", "mathematics", - "mathematican", "mathematician", - "mathematicas", "mathematics", - "mathematicks", "mathematics", - "mathematicly", "mathematical", - "mathematisch", "mathematics", - "mathemetical", "mathematical", - "matheticians", "mathematicians", - "mathimatical", "mathematical", - "mathmatician", "mathematician", - "mecahnically", "mechanically", - "mechancially", "mechanically", - "meditaciones", "medications", - "mediteranean", "mediterranean", - "mediterraean", "mediterranean", - "mediterranen", "mediterranean", - "memerization", "memorization", - "memorizacion", "memorization", - "memorozation", "memorization", - "metalurgical", "metallurgical", - "metaphisical", "metaphysical", - "metaphoricly", "metaphorical", - "metaphsyical", "metaphysical", - "metaphyiscal", "metaphysical", - "metaphyscial", "metaphysical", - "metaphysisch", "metaphysics", - "metephorical", "metaphorical", - "metephysical", "metaphysical", - "meterologist", "meteorologist", - "meterosexual", "heterosexual", - "methaporical", "metaphorical", - "methematical", "mathematical", - "metiphorical", "metaphorical", - "metophorical", "metaphorical", - "metorpolitan", "metropolitan", - "metrololitan", "metropolitan", - "metropilitan", "metropolitan", - "metroploitan", "metropolitan", - "metropolians", "metropolis", - "metropoliten", "metropolitan", - "metropolitin", "metropolitan", - "metropoliton", "metropolitan", - "microcentres", "microcenter", - "microphonies", "microphones", - "microscophic", "microscopic", - "microscopice", "microscope", - "microscoptic", "microscopic", - "midfieldiers", "midfielders", - "millenialism", "millennialism", - "millionairre", "millionaire", - "millionaries", "millionaires", - "millioniares", "millionaires", - "minimalisitc", "minimalist", - "minimalisity", "minimalist", - "mininterpret", "misinterpret", - "minipulating", "manipulating", - "minipulation", "manipulation", - "minipulative", "manipulative", - "miracilously", "miraculously", - "miracurously", "miraculous", - "miscarraiges", "miscarriage", - "miscelaneous", "miscellaneous", - "miscellanous", "miscellaneous", - "mischievious", "mischievous", - "misdameanors", "misdemeanors", - "misdeamenors", "misdemeanor", - "misfourtunes", "misfortunes", - "misgoynistic", "misogynistic", - "misinterpert", "misinterpret", - "misinterpred", "misinterpreted", - "misinterprit", "misinterpreting", - "misinterpted", "misinterpret", - "misintrepret", "misinterpret", - "misisonaries", "missionaries", - "misoganistic", "misogynistic", - "misogenistic", "misogynistic", - "misoginystic", "misogynistic", - "misognyistic", "misogynistic", - "misogonistic", "misogynistic", - "misogynisitc", "misogynistic", - "misogynsitic", "misogynistic", - "misogynystic", "misogynistic", - "missionaires", "missionaries", - "mississipppi", "mississippi", - "misspellling", "misspelling", - "misteriously", "mysteriously", - "misundersood", "misunderstood", - "misunderstod", "misunderstood", - "misygonistic", "misogynistic", - "modificacion", "modification", - "modificaiton", "modification", - "modificatons", "modifications", - "modifikation", "modification", - "modivational", "motivational", - "moisterizing", "moisturizing", - "moistorizing", "moisturizing", - "moisutrizing", "moisturizing", - "momentarilly", "momentarily", - "monolithisch", "monolithic", - "mositurizing", "moisturizing", - "motherbaords", "motherboards", - "motherborads", "motherboards", - "motivacional", "motivational", - "motovational", "motivational", - "mousturizing", "moisturizing", - "muktitasking", "multitasking", - "mulittasking", "multitasking", - "multinatinal", "multinational", - "multitaksing", "multitasking", - "munipulative", "manipulative", - "mutlitasking", "multitasking", - "mysoganistic", "misogynistic", - "mysogenistic", "misogynistic", - "mysogonistic", "misogynistic", - "mysterioulsy", "mysteriously", - "nacionalists", "nationalists", - "narcisisstic", "narcissistic", - "narcissictic", "narcissistic", - "narcissisism", "narcissism", - "narcissisist", "narcissist", - "narcissisitc", "narcissist", - "narcississts", "narcissist", - "narssicistic", "narcissistic", - "natioanlists", "nationalists", - "nationalisic", "nationalistic", - "nationalisim", "nationalism", - "nationalistc", "nationalistic", - "nationalites", "nationalist", - "nationalitic", "nationalistic", - "nationalitys", "nationalist", - "nationallity", "nationally", - "nationalsits", "nationalists", - "nationalties", "nationalist", - "nazionalists", "nationalists", - "neccessarily", "necessarily", - "neccessities", "necessities", - "necessarilly", "necessarily", - "necessitites", "necessities", - "neckbearders", "neckbeards", - "neckbeardese", "neckbeards", - "neckbeardest", "neckbeards", - "neckbeardies", "neckbeards", - "neckbeardius", "neckbeards", - "negociations", "negotiations", - "negoitations", "negotiations", - "negotiatians", "negotiations", - "negotiatiing", "negotiating", - "negotiationg", "negotiating", - "negotiatiors", "negotiations", - "neigbhorhood", "neighborhoods", - "neigbourhood", "neighbourhood", - "neighboorhod", "neighbourhood", - "neighborhing", "neighboring", - "neighborhods", "neighborhoods", - "neighbourghs", "neighbours", - "neighbourhod", "neighbourhood", - "neighbourood", "neighbourhood", - "neighbrohood", "neighborhoods", - "neighourhood", "neighborhood", - "neoroscience", "neuroscience", - "neruological", "neurological", - "neruoscience", "neuroscience", - "netropolitan", "metropolitan", - "neuorscience", "neuroscience", - "neuralogical", "neurological", - "neuroligical", "neurological", - "neurosceince", "neuroscience", - "neuroscienze", "neuroscience", - "neurosicence", "neuroscience", - "neverhteless", "nevertheless", - "nieghborhood", "neighborhood", - "norhtwestern", "northwestern", - "nothingsness", "nothingness", - "noticeablely", "noticeably", - "notificacion", "notification", - "notificaiton", "notification", - "notificatons", "notifications", - "nuerological", "neurological", - "nueroscience", "neuroscience", - "nutritionnal", "nutritional", - "obersvations", "observations", - "objectivelly", "objectively", - "objectiviser", "objectives", - "objectivitiy", "objectivity", - "obversations", "observations", - "ocassionally", "occasionally", - "occaisonally", "occasionally", - "occasioanlly", "occasionally", - "occassionaly", "occasionally", - "occationally", "occasionally", - "occurrencies", "occurrences", - "offensivelly", "offensively", - "ogranisation", "organisation", - "omniverously", "omnivorously", - "operationnal", "operational", - "opportuniste", "opportunities", - "opportunites", "opportunities", - "oppositition", "opposition", - "opthalmology", "ophthalmology", - "optimistisch", "optimistic", - "optimizacion", "optimization", - "optimizating", "optimization", - "optimziation", "optimization", - "optmizations", "optimizations", - "oragnisation", "organisation", - "orchastrated", "orchestrated", - "orchestarted", "orchestrated", - "orchestraded", "orchestrated", - "orchistrated", "orchestrated", - "orgainsation", "organisation", - "orgainzation", "organizations", - "organisaiton", "organisation", - "organisatons", "organisations", - "organistaion", "organisation", - "organizacion", "organization", - "organizaiton", "organization", - "organizativo", "organization", - "organizatons", "organizations", - "organsiation", "organisation", - "organziation", "organization", - "orginasation", "organisation", - "orginazation", "organization", - "orgnaisation", "organisations", - "originallity", "originality", - "outraegously", "outrageously", - "outrageoulsy", "outrageously", - "outragesouly", "outrageously", - "outrageuosly", "outrageously", - "outragiously", "outrageously", - "outsourceing", "outsourcing", - "overbearring", "overbearing", - "overblocking", "overclocking", - "overclcoking", "overclocking", - "overclicking", "overclocking", - "overcloaking", "overclocking", - "overclockign", "overclocking", - "overclokcing", "overclocking", - "overhearting", "overreacting", - "overheathing", "overheating", - "overhtinking", "overthinking", - "overhwelming", "overwhelming", - "overlappping", "overlapping", - "overlcocking", "overclocking", - "overreaktion", "overreaction", - "overwealming", "overwhelming", - "overwhelemed", "overwhelmed", - "overwhemling", "overwhelming", - "overwhleming", "overwhelming", - "owerpowering", "overpowering", - "painkilllers", "painkillers", - "palastinians", "palestinians", - "palesitnians", "palestinians", - "palestenians", "palestinians", - "palestinains", "palestinians", - "palestiniens", "palestinians", - "palestininan", "palestinian", - "palestininas", "palestinians", - "palistinians", "palestinians", - "palythroughs", "playthroughs", - "parapharsing", "paraphrasing", - "paraphenalia", "paraphernalia", - "paraphrashed", "paraphrase", - "paraphrazing", "paraphrasing", - "paraprashing", "paraphrasing", - "paraprhasing", "paraphrasing", - "parenthesees", "parentheses", - "parenthesies", "parenthesis", - "parliamentry", "parliamentary", - "partecipants", "participants", - "partecipated", "participated", - "parternships", "partnership", - "particapated", "participated", - "particiapnts", "participant", - "particiapted", "participated", - "participante", "participate", - "participaste", "participants", - "participatie", "participated", - "participatin", "participation", - "participatns", "participant", - "participaton", "participant", - "participents", "participants", - "particualrly", "particularly", - "particulalry", "particularly", - "particullary", "particularly", - "passionatley", "passionately", - "pathalogical", "pathological", - "pathelogical", "pathological", - "patholigical", "pathological", - "paychedelics", "psychedelics", - "paychiatrist", "psychiatrist", - "paychologist", "psychologist", - "paychopathic", "psychopathic", - "penetratiing", "penetrating", - "penisylvania", "pennsylvania", - "pennsilvania", "pennsylvania", - "pennslyvania", "pennsylvania", - "pennsylvaina", "pennsylvania", - "pennsyvlania", "pennsylvania", - "pennyslvania", "pennsylvania", - "penssylvania", "pennsylvania", - "pentsylvania", "pennsylvania", - "percentagens", "percentages", - "perferential", "preferential", - "performantes", "performances", - "performences", "performances", - "perfromances", "performances", - "peridoically", "periodically", - "peripathetic", "peripatetic", - "periphereals", "peripherals", - "peripherials", "peripherals", - "permanantely", "permanently", - "permanentely", "permanently", - "permissiable", "permissible", - "peroidically", "periodically", - "perpatrators", "perpetrators", - "perpatuating", "perpetuating", - "perpertators", "perpetrators", - "perpertrated", "perpetrated", - "perpetraitor", "perpetrator", - "perpetraters", "perpetrators", - "perpetuaters", "perpetuates", - "perpitrators", "perpetrators", - "perposefully", "purposefully", - "perposterous", "preposterous", - "perpretators", "perpetrators", - "perpsectives", "perspectives", - "perputrators", "perpetrators", - "perputuating", "perpetuating", - "persepctives", "perspectives", - "perservation", "preservation", - "perseverence", "perseverance", - "personalites", "personalities", - "personallity", "personally", - "personilized", "personalized", - "perspecitves", "perspectives", - "perspectivas", "perspectives", - "persumptuous", "presumptuous", - "perticularly", "particularly", - "pertubations", "perturbations", - "pessimisitic", "pessimistic", - "pessimisstic", "pessimistic", - "phenomenonal", "phenomenal", - "phenomenonly", "phenomenally", - "phenomonenon", "phenomenon", - "phialdelphia", "philadelphia", - "philadalphia", "philadelphia", - "philadelhpia", "philadelphia", - "philadeplhia", "philadelphia", - "philadlephia", "philadelphia", - "philedalphia", "philadelphia", - "philedelphia", "philadelphia", - "philidalphia", "philadelphia", - "philippinnes", "philippines", - "philippinoes", "philippines", - "philisophers", "philosophers", - "philisophies", "philosophies", - "phillippines", "philippines", - "philosiphers", "philosophers", - "philosiphies", "philosophies", - "philosohpers", "philosopher", - "philosohpies", "philosophies", - "philosophiae", "philosophies", - "philosophics", "philosophies", - "philosophios", "philosophies", - "philospohers", "philosophers", - "philospohies", "philosophies", - "photagrapher", "photographer", - "photochopped", "photoshopped", - "photograhper", "photographer", - "photograpers", "photographers", - "photographes", "photographs", - "photographyi", "photographic", - "photogropher", "photographer", - "photogrpahed", "photographed", - "photogrpaher", "photographer", - "photoshipped", "photoshopped", - "photoshooped", "photoshopped", - "photoshoppad", "photoshopped", - "phychedelics", "psychedelics", - "phychiatrist", "psychiatrist", - "phychologist", "psychologist", - "phychopathic", "psychopathic", - "physcedelics", "psychedelics", - "physciatrist", "psychiatrist", - "physcologist", "psychologist", - "physcopathic", "psychopathic", - "physicallity", "physically", - "physiologial", "physiological", - "pilgrimmages", "pilgrimages", - "pitchforkers", "pitchforks", - "pkaythroughs", "playthroughs", - "plabeswalker", "planeswalker", - "plaestinians", "palestinians", - "planeswaller", "planeswalker", - "planeswlaker", "planeswalker", - "planetwalker", "planeswalker", - "plansewalker", "planeswalker", - "plauthroughs", "playthroughs", - "playhtroughs", "playthroughs", - "playtgroughs", "playthroughs", - "playthorughs", "playthroughs", - "playthourghs", "playthroughs", - "playthrougth", "playthroughs", - "playthrouhgs", "playthroughs", - "playthtoughs", "playthroughs", - "playtrhoughs", "playthroughs", - "populationes", "populations", - "pornograpghy", "pornography", - "porportional", "proportional", - "portabillity", "portability", - "portagonists", "protagonists", - "positionning", "positioning", - "positivitely", "positivity", - "possessivize", "possessive", - "possibillity", "possibility", - "possiblility", "possibility", - "possiblities", "possibilities", - "powerfisting", "powerlifting", - "powerlfiting", "powerlifting", - "powerlifitng", "powerlifting", - "powerlisting", "powerlifting", - "powetlifting", "powerlifting", - "powrrlifting", "powerlifting", - "practicioner", "practitioner", - "practisioner", "practitioner", - "pratictioner", "practitioners", - "precedessors", "predecessors", - "preconveived", "preconceived", - "predacessors", "predecessors", - "predeccesors", "predecessor", - "predecesores", "predecessor", - "predescesors", "predecessors", - "predessecors", "predecessors", - "predetermind", "predetermined", - "predicessors", "predecessors", - "predocessors", "predecessors", - "predomiantly", "predominately", - "predominanty", "predominantly", - "predominatly", "predominantly", - "preferantial", "preferential", - "preferentail", "preferential", - "preformances", "performances", - "preinitalize", "preinitialize", - "preliminarly", "preliminary", - "prematurelly", "prematurely", - "premillenial", "premillennial", - "preocupation", "preoccupation", - "preperations", "preparations", - "prepetrators", "perpetrators", - "prepetuating", "perpetuating", - "prepostorous", "preposterous", - "preposturous", "preposterous", - "prerequisets", "prerequisite", - "prescirption", "prescriptions", - "prescribtion", "prescription", - "prescripcion", "prescription", - "prescriptons", "prescriptions", - "prescritpion", "prescriptions", - "presedential", "presidential", - "presentacion", "presentation", - "presentaiton", "presentations", - "preservacion", "preservation", - "preservating", "preservation", - "preservativo", "preservation", - "presidencial", "presidential", - "presidenital", "presidential", - "presidentail", "presidential", - "presnetation", "presentations", - "presonalized", "personalized", - "prespectives", "perspectives", - "presrciption", "prescriptions", - "presumpteous", "presumptuous", - "presumputous", "presumptuous", - "prevantative", "preventative", - "preventation", "presentation", - "preventetive", "preventative", - "preventitive", "preventative", - "prezidential", "presidential", - "principlaity", "principality", - "probabiliste", "probabilities", - "probabilites", "probabilities", - "probabillity", "probability", - "probablistic", "probabilistic", - "proclomation", "proclamation", - "proconceived", "preconceived", - "profesisonal", "professionals", - "professiinal", "professionalism", - "professioanl", "professionals", - "professiomal", "professionalism", - "professionel", "professional", - "professionsl", "professionalism", - "professoinal", "professionals", - "professonial", "professionals", - "proffesional", "professional", - "proficientcy", "proficiency", - "profissional", "professional", - "profitabiliy", "profitability", - "profitabilty", "profitability", - "profressions", "progressions", - "progatonists", "protagonists", - "programmeurs", "programmer", - "progressieve", "progressive", - "progressioin", "progressions", - "progressiong", "progressing", - "progressisme", "progresses", - "progressiste", "progresses", - "progressivas", "progressives", - "progressivey", "progressively", - "progressivly", "progressively", - "progressivsm", "progressives", - "progresssing", "progressing", - "progresssion", "progressions", - "progresssive", "progressives", - "prohibitting", "prohibiting", - "projecticles", "projectiles", - "proletariaat", "proletariat", - "proletariant", "proletariat", - "proletaricat", "proletariat", - "prominantely", "prominently", - "promiscuious", "promiscuous", - "promisculous", "promiscuous", - "promotionnal", "promotional", - "pronounceing", "pronouncing", - "pronunciaton", "pronunciation", - "propertional", "proportional", - "propesterous", "preposterous", - "proportianal", "proportional", - "proportionel", "proportional", - "proposterous", "preposterous", - "proprotional", "proportional", - "prostetution", "prostitution", - "prostitition", "prostitution", - "prostitucion", "prostitution", - "prostituiton", "prostitution", - "prostitutiei", "prostitute", - "protaganists", "protagonists", - "protaginists", "protagonists", - "protagnoists", "protagonists", - "protestantes", "protestants", - "protoganists", "protagonists", - "prouncements", "pronouncements", - "pruposefully", "purposefully", - "pscyhologist", "psychologist", - "pscyhopathic", "psychopathic", - "pshyciatrist", "psychiatrist", - "pshycologist", "psychologist", - "pshycopathic", "psychopathic", - "psichologist", "psychologist", - "psychaitrist", "psychiatrist", - "psychedellic", "psychedelic", - "psychedilics", "psychedelics", - "psychemedics", "psychedelics", - "psychiatirst", "psychiatrists", - "psychiatrics", "psychiatrist", - "psychiatrict", "psychiatrist", - "psychiatrits", "psychiatrists", - "psychistrist", "psychiatrist", - "psychodelics", "psychedelics", - "psycholigist", "psychologist", - "psychologial", "psychological", - "psychologits", "psychologists", - "psychologyst", "psychologist", - "psychopathes", "psychopaths", - "psychyatrist", "psychiatrist", - "puplications", "publications", - "puritannical", "puritanical", - "purpetrators", "perpetrators", - "purpetuating", "perpetuating", - "purpusefully", "purposefully", - "pyschedelics", "psychedelics", - "pyschiatrist", "psychiatrist", - "pyschologist", "psychologist", - "pyschopathic", "psychopathic", - "qualificaton", "qualification", - "qualifierais", "qualifiers", - "qualtitative", "quantitative", - "quantatitive", "quantitative", - "quantititive", "quantitative", - "quarterblack", "quarterback", - "quesitonable", "questionable", - "questionalbe", "questionable", - "questionning", "questioning", - "questionsign", "questioning", - "radioactieve", "radioactive", - "rationallity", "rationally", - "reactionairy", "reactionary", - "reactionnary", "reactionary", - "realisticaly", "realistically", - "realisticlly", "realistically", - "reasonablely", "reasonably", - "recallection", "recollection", - "reccomending", "recommending", - "reccommended", "recommended", - "recepcionist", "receptionist", - "receptionest", "receptionist", - "recgonizable", "recognizable", - "reciporcated", "reciprocate", - "reciprociate", "reciprocate", - "reciprocrate", "reciprocate", - "recognizible", "recognizable", - "recolleciton", "recollection", - "recommanding", "recommending", - "recommendeds", "recommends", - "recommendors", "recommends", - "recommeneded", "recommended", - "recommenting", "recommending", - "recongizable", "recognizable", - "recontructed", "reconstructed", - "recpetionist", "receptionist", - "recreacional", "recreational", - "recriational", "recreational", - "referenceing", "referencing", - "refirgerator", "refrigerator", - "refriderator", "refrigerator", - "refrigarator", "refrigerator", - "refrigerador", "refrigerator", - "refrigerater", "refrigerator", - "refrigirator", "refrigerator", - "regenaration", "regeneration", - "regeneracion", "regeneration", - "regestration", "registration", - "registartion", "registration", - "registrating", "registration", - "regrigerator", "refrigerator", - "regulatorias", "regulators", - "regulatories", "regulators", - "regulatorios", "regulators", - "reicarnation", "reincarnation", - "reinforcemnt", "reinforcement", - "reinitalised", "reinitialised", - "reinitalises", "reinitialises", - "reinitalized", "reinitialized", - "reinitalizes", "reinitializes", - "reinstallled", "reinstalled", - "reisntalling", "reinstalling", - "relaitonship", "relationships", - "relatinoship", "relationships", - "reliabillity", "reliability", - "reluctanctly", "reluctantly", - "remarkablely", "remarkably", - "rememberance", "remembrance", - "reminiscient", "reminiscent", - "renaissaince", "renaissance", - "renegeration", "regeneration", - "reorganision", "reorganisation", - "repalcements", "replacements", - "repersenting", "representing", - "reporduction", "reproduction", - "reporductive", "reproductive", - "reprecussion", "repercussions", - "representate", "representative", - "represention", "representing", - "representive", "representative", - "reproducable", "reproducible", - "reproduccion", "reproduction", - "reproduciton", "reproduction", - "reproducting", "reproduction", - "reproductivo", "reproduction", - "reproduktion", "reproduction", - "repsectfully", "respectfully", - "repsectively", "respectively", - "republicanas", "republicans", - "republicanos", "republicans", - "republicants", "republicans", - "republicians", "republicans", - "requerimento", "requirement", - "requeriments", "requirements", - "requierments", "requirements", - "requriements", "requirements", - "resembelance", "resemblance", - "reseptionist", "receptionist", - "reserrection", "resurrection", - "resintalling", "reinstalling", - "resistancies", "resistances", - "resistencias", "resistances", - "respecitvely", "respectively", - "respectabile", "respectable", - "respectivily", "respectively", - "respectivley", "respectively", - "respectuflly", "respectfully", - "respiratiory", "respiratory", - "responsabile", "responsible", - "responsaveis", "responsive", - "responsbilty", "responsibly", - "responsibile", "responsible", - "responsibily", "responsibility", - "responsibley", "responsibly", - "responsibliy", "responsibly", - "responsiblty", "responsibly", - "ressemblance", "resemblance", - "ressemblence", "resemblance", - "ressurection", "resurrection", - "restaurantes", "restaurants", - "restauration", "restoration", - "restauraunts", "restaurants", - "restirctions", "restrictions", - "restrainting", "restraining", - "restrcitions", "restriction", - "restricitons", "restrictions", - "resurreccion", "resurrection", - "resurrektion", "resurrection", - "retalitation", "retaliation", - "retributioon", "retribution", - "retroactivly", "retroactively", - "revolutionay", "revolutionary", - "revolutionos", "revolutions", - "rezurrection", "resurrection", - "rictatorship", "dictatorship", - "ridicilously", "ridiculously", - "ridicoulusly", "ridiculously", - "righteouness", "righteousness", - "rockerfeller", "rockefeller", - "rollercoaser", "rollercoaster", - "rollercoater", "rollercoaster", - "romanitcally", "romantically", - "roundabounts", "roundabout", - "rudimentatry", "rudimentary", - "rysurrection", "resurrection", - "sacksonville", "jacksonville", - "sacreligious", "sacrilegious", - "sacrificeing", "sacrificing", - "saksatchewan", "saskatchewan", - "salughtering", "slaughtering", - "sanctionning", "sanctioning", - "sarcasticaly", "sarcastically", - "sarcasticlly", "sarcastically", - "sascatchewan", "saskatchewan", - "saskatcehwan", "saskatchewan", - "saskatchawan", "saskatchewan", - "saskatechwan", "saskatchewan", - "sasketchawan", "saskatchewan", - "sasketchewan", "saskatchewan", - "sasktachewan", "saskatchewan", - "satasfaction", "satisfaction", - "satasfactory", "satisfactory", - "satisfaccion", "satisfaction", - "satisfacting", "satisfaction", - "satisfcation", "satisfaction", - "satisfiction", "satisfaction", - "satistactory", "satisfactory", - "satsifaction", "satisfaction", - "satsifactory", "satisfactory", - "scandanivian", "scandinavian", - "scandenavian", "scandinavian", - "scandianvian", "scandinavian", - "scandinacian", "scandinavian", - "scandinaivan", "scandinavia", - "scandinavica", "scandinavian", - "scandinavien", "scandinavian", - "scandinavion", "scandinavian", - "scandivanian", "scandinavian", - "scandonavian", "scandinavian", - "schizophrena", "schizophrenia", - "scholarhsips", "scholarships", - "scholerships", "scholarships", - "scholorships", "scholarships", - "scnadinavian", "scandinavian", - "screenshoots", "screenshot", - "sensationail", "sensational", - "sensationnal", "sensational", - "sensibilites", "sensibilities", - "sensitivitiy", "sensitivity", - "sentimentals", "sentiments", - "sertificates", "certificates", - "serveillance", "surveillance", - "seskatchewan", "saskatchewan", - "shakesperean", "shakespeare", - "shamelessely", "shamelessly", - "shamelessley", "shamelessly", - "shampionship", "championship", - "shardholders", "shareholders", - "shenanigains", "shenanigans", - "shenanigangs", "shenanigans", - "shenaniganns", "shenanigans", - "shenanighans", "shenanigans", - "shopkeeepers", "shopkeepers", - "showboarding", "snowboarding", - "siginificant", "significant", - "significanly", "significantly", - "significante", "significance", - "significanty", "significantly", - "significatly", "significantly", - "signleplayer", "singleplayer", - "simaltaneous", "simultaneous", - "simeltaneous", "simultaneous", - "similaraties", "similarities", - "similiarites", "similarities", - "similiarties", "similarities", - "similiraties", "similarities", - "similtaneous", "simultaneous", - "simliarities", "similarities", - "simlutaneous", "simultaneous", - "simpathizers", "sympathizers", - "simplistisch", "simplistic", - "simulatenous", "simultaneous", - "simulatneous", "simultaneous", - "simultaenous", "simultaneous", - "simultaneuos", "simultaneous", - "simultanious", "simultaneous", - "simulteneous", "simultaneous", - "singelplayer", "singleplayer", - "singlepalyer", "singleplayer", - "sinlgeplayer", "singleplayer", - "situationals", "situations", - "situationnal", "situational", - "skandinavian", "scandinavian", - "skateboaring", "skateboarding", - "skrawberries", "strawberries", - "slaugthering", "slaughtering", - "sloughtering", "slaughtering", - "sluaghtering", "slaughtering", - "snowballling", "snowballing", - "snowbaording", "snowboarding", - "socialistisk", "socialists", - "socialogical", "sociological", - "socioeconimc", "socioeconomic", - "socioeconmic", "socioeconomic", - "socioligical", "sociological", - "sociopolical", "sociological", - "somethingest", "somethings", - "sophisticaed", "sophisticated", - "sophisticted", "sophisticated", - "southamption", "southampton", - "southernerns", "southerners", - "sovereighnty", "sovereignty", - "sovereignety", "sovereignty", - "sovereignity", "sovereignty", - "specialistes", "specialists", - "specializare", "specialize", - "specializate", "specialize", - "specializeds", "specializes", - "specializied", "specialize", - "speciallized", "specialised", - "specifcation", "specification", - "spectacuarly", "spectacular", - "spectaculair", "spectacular", - "spectaculary", "spectacularly", - "spectacullar", "spectacularly", - "specualtions", "speculation", - "spermatozoan", "spermatozoon", - "spesifically", "specifically", - "spirituallly", "spiritually", - "spirtiuality", "spirituality", - "spirutuality", "spirituality", - "spontaneosly", "spontaneously", - "spontaneouly", "spontaneously", - "spreadhseets", "spreadsheets", - "spreadsheats", "spreadsheets", - "spreadsheeds", "spreadsheets", - "spreadsheeet", "spreadsheets", - "standartized", "standardized", - "standerdized", "standardized", - "stardardized", "standardized", - "starightened", "straightened", - "starwberries", "strawberries", - "statisticaly", "statistically", - "stereotpying", "stereotyping", - "stereotypers", "stereotypes", - "stereotypian", "stereotyping", - "steriotyping", "stereotyping", - "steroetyping", "stereotyping", - "steryotyping", "stereotyping", - "straigntened", "straightened", - "straigthened", "straightened", - "strategicaly", "strategically", - "strategiclly", "strategically", - "strawburries", "strawberries", - "streemlining", "streamlining", - "streightened", "straightened", - "strenghening", "strengthening", - "strenghtened", "strengthened", - "strengtheing", "strengthening", - "stroytelling", "storytelling", - "subconcsious", "subconscious", - "subconsicous", "subconscious", - "subcouncious", "subconscious", - "subcsription", "subscriptions", - "subesquently", "subsequently", - "subjectivety", "subjectively", - "subjectivily", "subjectively", - "subjectivley", "subjectively", - "subjudgation", "subjugation", - "subredditors", "subreddits", - "subscirption", "subscriptions", - "subsconcious", "subconscious", - "subscribbers", "subscribers", - "subscribbing", "subscribing", - "subscribirse", "subscriber", - "subscribtion", "subscription", - "subscriptons", "subscriptions", - "subscritpion", "subscriptions", - "subscrpition", "subscriptions", - "subsiquently", "subsequently", - "subsrciption", "subscriptions", - "subsricption", "subscriptions", - "substantialy", "substantially", - "substantitve", "substantive", - "substitition", "substitution", - "substituters", "substitutes", - "substitutivo", "substitution", - "substitutues", "substitutes", - "substracting", "subtracting", - "substraction", "subtraction", - "subterranian", "subterranean", - "succsessfull", "successful", - "sunconscious", "subconscious", - "supermarkeds", "supermarkets", - "supermarkers", "supermarkets", - "supermarkert", "supermarkets", - "supermarkten", "supermarket", - "supermarktes", "supermarkets", - "supernarkets", "supermarkets", - "supernatrual", "supernatural", - "supersticion", "superstition", - "superstision", "superstition", - "superstitios", "superstitious", - "superstitous", "superstitious", - "supervisiors", "supervisors", - "supervisoras", "supervisors", - "supervisores", "supervisors", - "supllemental", "supplemental", - "supplamental", "supplemental", - "supplamented", "supplemented", - "supplimental", "supplemental", - "suppresssion", "suppression", - "supscription", "subscription", - "supsiciously", "suspiciously", - "surprizingly", "surprisingly", - "surrenderred", "surrendered", - "surrundering", "surrendering", - "survaillance", "surveillance", - "survaillence", "surveillance", - "survallience", "surveillance", - "surveillence", "surveillance", - "survelliance", "surveillance", - "surviellance", "surveillance", - "survivabiity", "survivability", - "survivabiliy", "survivability", - "survivabilty", "survivability", - "susceptiable", "susceptible", - "susceptibile", "susceptible", - "suspeciously", "suspiciously", - "suspicioulsy", "suspiciously", - "suspiciuosly", "suspiciously", - "suspisiously", "suspiciously", - "sustainabily", "sustainability", - "symapthizers", "sympathizers", - "symetrically", "symmetrically", - "symmetricaly", "symmetrically", - "sympathethic", "sympathetic", - "sympathsizer", "sympathizers", - "sympathyzers", "sympathizers", - "sympethizers", "sympathizers", - "symphatizers", "sympathizers", - "sympithizers", "sympathizers", - "syncronously", "synchronously", - "sysmatically", "systematically", - "systematisch", "systematic", - "tablespooons", "tablespoon", - "tacticallity", "tactically", - "tangencially", "tangentially", - "tangenitally", "tangentially", - "tangientally", "tangentially", - "teamfighters", "teamfights", - "teansylvania", "transylvania", - "techanically", "mechanically", - "techincality", "technicality", - "technologial", "technological", - "telelevision", "television", - "teleportaion", "teleportation", - "teleportaton", "teleportation", - "temepratures", "temperatures", - "temparatures", "temperatures", - "temperaturas", "temperatures", - "temporarilly", "temporarily", - "tempreatures", "temperatures", - "tempuratures", "temperatures", - "tengentially", "tangentially", - "termendously", "tremendously", - "territorrial", "territorial", - "territorries", "territories", - "testasterone", "testosterone", - "testestorone", "testosterone", - "thanskgiving", "thanksgiving", - "theologicial", "theological", - "theoreticaly", "theoretically", - "thermomenter", "thermometer", - "thermomether", "thermometer", - "thumbnailers", "thumbnails", - "thunderboldt", "thunderbolt", - "tindergarten", "kindergarten", - "torubleshoot", "troubleshoot", - "totalitarion", "totalitarian", - "totalitatian", "totalitarian", - "touchscreeen", "touchscreen", - "traditionaly", "traditionally", - "traditionnal", "traditional", - "tradtionally", "traditionally", - "tramendously", "tremendously", - "tramsformers", "transformers", - "tramsforming", "transforming", - "tranditional", "transitional", - "tranistional", "transitional", - "tranistioned", "transitioned", - "tranlsations", "translations", - "tranmsission", "transmissions", - "transaltions", "translations", - "transaprency", "transparency", - "transational", "transitional", - "transcations", "transactions", - "transcendant", "transcendent", - "transcripton", "transcription", - "transcriptus", "transcripts", - "transesxuals", "transsexuals", - "transfarmers", "transformers", - "transfarring", "transferring", - "transferrred", "transferred", - "transformare", "transformers", - "transformase", "transforms", - "transformees", "transforms", - "transforners", "transformers", - "transfromers", "transformers", - "transfroming", "transforming", - "transgenderd", "transgendered", - "transgendred", "transgendered", - "transgenered", "transgender", - "transicional", "transitional", - "transilvania", "transylvania", - "transimssion", "transmissions", - "transisioned", "transitioned", - "translastion", "translations", - "translateing", "translating", - "translationg", "translating", - "translucient", "translucent", - "translyvania", "transylvania", - "transmisions", "transmission", - "transmisison", "transmission", - "transmissons", "transmissions", - "transmitirte", "transmitter", - "transmittted", "transmitted", - "transmorfers", "transformer", - "transofrmers", "transformers", - "transofrming", "transforming", - "transparancy", "transparency", - "transparenty", "transparency", - "transparrent", "transparent", - "transperancy", "transparency", - "transperency", "transparency", - "transplantes", "transplants", - "transporteur", "transporter", - "transportion", "transporting", - "transpotting", "transporting", - "transsmision", "transmissions", - "transylmania", "transylvania", - "transylvanai", "transylvania", - "trasnferring", "transferring", - "trasnformers", "transformers", - "trasnforming", "transforming", - "trasnmission", "transmissions", - "trasnparency", "transparency", - "trasnporting", "transporting", - "trememdously", "tremendously", - "tremendoulsy", "tremendously", - "tremondously", "tremendously", - "troubelshoot", "troubleshoot", - "troublehsoot", "troubleshoot", - "trumendously", "tremendously", - "trustworthly", "trustworthy", - "ubsubscribed", "unsubscribed", - "udnerpowered", "underpowered", - "umbelievable", "unbelievable", - "umemployment", "unemployment", - "unaccaptable", "unacceptable", - "unacceptible", "unacceptable", - "unaccpetable", "unacceptable", - "unacompanied", "unaccompanied", - "unappealling", "unappealing", - "unattractice", "unattractive", - "unautherized", "unauthorized", - "unauthroized", "unauthorized", - "unbeleivable", "unbelievable", - "unbeleivably", "unbelievably", - "unbeliavable", "unbelievable", - "unbeliavably", "unbelievably", - "unbeliebable", "unbelievable", - "unbelieveble", "unbelievable", - "unbelievibly", "unbelievably", - "unbeliveable", "unbelievable", - "unbeliveably", "unbelievably", - "unbelizeable", "unbelievable", - "unbolievable", "unbelievable", - "uncertainity", "uncertainty", - "uncertaintly", "uncertainty", - "uncompatible", "incompatible", - "unconditinal", "unconditional", - "unconsciosly", "unconsciously", - "unconsciouly", "unconsciously", - "unconsistent", "inconsistent", - "unconvenient", "inconvenient", - "unconvential", "unconventional", - "undecideable", "undecidable", - "undefinitely", "indefinitely", - "undeniablely", "undeniably", - "undergradate", "undergraduate", - "undergradute", "undergraduate", - "underminding", "undermining", - "undermineing", "undermining", - "undermineras", "undermines", - "undermineres", "undermines", - "underminging", "undermining", - "underminning", "undermining", - "undertakeing", "undertaking", - "underwhelimg", "underwhelming", - "underwheling", "underwhelming", - "undesireable", "undesirable", - "undoubtedbly", "undoubtedly", - "unemployemnt", "unemployment", - "unemplyoment", "unemployment", - "unempolyment", "unemployment", - "unenployment", "unemployment", - "unequalities", "inequalities", - "unexpectadly", "unexpectedly", - "unexpectetly", "unexpectedly", - "unexpectidly", "unexpectedly", - "unexperience", "inexperience", - "unexpextedly", "unexpectedly", - "unexplicably", "inexplicably", - "unforgetable", "unforgettable", - "unforgiveble", "unforgivable", - "unforgivible", "unforgivable", - "unfortunatly", "unfortunately", - "unfortunetly", "unfortunately", - "unilatreally", "unilaterally", - "uniliterally", "unilaterally", - "unimpresssed", "unimpressed", - "uninitalised", "uninitialised", - "uninitalized", "uninitialized", - "uninstallimg", "uninstalling", - "uninstallled", "uninstalled", - "unintentinal", "unintentional", - "uninteresing", "uninteresting", - "uninterneted", "uninterested", - "uninterruped", "uninterrupted", - "uninterupted", "uninterrupted", - "unisntalling", "uninstalling", - "unitesstates", "unitedstates", - "univerisites", "universities", - "univeristies", "universities", - "universitets", "universities", - "unliaterally", "unilaterally", - "unneccessary", "unnecessary", - "unnecesarily", "unnecessarily", - "unnecessairy", "unnecessarily", - "unnecessarly", "unnecessarily", - "unnistalling", "uninstalling", - "unpredictabe", "unpredictable", - "unpreductive", "unproductive", - "unproduktive", "unproductive", - "unrealisitic", "unrealistic", - "unreaponsive", "unresponsive", - "unreasonalby", "unreasonably", - "unrepsonsive", "unresponsive", - "unresponcive", "unresponsive", - "unresponisve", "unresponsive", - "unresponsibe", "unresponsive", - "unrestircted", "unrestricted", - "unrestrcited", "unrestricted", - "unristricted", "unrestricted", - "unseccessful", "unsuccessful", - "unsespecting", "unsuspecting", - "unsibscribed", "unsubscribed", - "unsoliciated", "unsolicited", - "unsolicitied", "unsolicited", - "unsubscirbed", "unsubscribed", - "unsubscrible", "unsubscribed", - "unsubscrided", "unsubscribed", - "unsubscriped", "unsubscribed", - "unsubscrubed", "unsubscribed", - "unsubsrcibed", "unsubscribed", - "unsucessfull", "unsuccessful", - "unsunscribed", "unsubscribed", - "unsurprizing", "unsurprising", - "unsusbcribed", "unsubscribed", - "unsustainble", "unsustainable", - "unvelievable", "unbelievable", - "unvelievably", "unbelievably", - "unviersities", "universities", - "unvulnerable", "invulnerable", - "varification", "verification", - "vegetarianas", "vegetarians", - "vegetarianos", "vegetarians", - "verficiation", "verification", - "verificacion", "verification", - "verificaiton", "verification", - "verifikation", "verification", - "vernaculaire", "vernacular", - "versatillity", "versatility", - "verticallity", "vertically", - "videogamemes", "videogames", - "visualizaton", "visualization", - "vocabularily", "vocabulary", - "vocabularity", "vocabulary", - "volonteering", "volunteering", - "volounteered", "volunteered", - "voluntarilly", "voluntarily", - "volunterring", "volunteering", - "vulnerabilty", "vulnerability", - "weightlifing", "weightlifting", - "withdrawalls", "withdrawals", - "withdrawling", "withdrawing", - "withdrawning", "withdrawing", - "wonderfullly", "wonderfully", - "worshippping", "worshipping", - "xenophobical", "xenophobia", - "abandenment", "abandonment", - "abandomnent", "abandonment", - "abandonding", "abandoning", - "abandonnent", "abandonment", - "abandonning", "abandoning", - "abbreviatin", "abbreviation", - "abbreviaton", "abbreviation", - "abdominable", "abdominal", - "abomanation", "abomination", - "abominacion", "abomination", - "abomonation", "abomination", - "abonimation", "abomination", - "aboriginial", "aboriginal", - "aborigional", "aboriginal", - "abreviation", "abbreviation", - "abritrarily", "arbitrarily", - "abritration", "arbitration", - "absolutelly", "absolutely", - "absolutelys", "absolutes", - "absolutisme", "absolutes", - "absolutiste", "absolutes", - "abstraccion", "abstraction", - "abstraktion", "abstraction", - "abstruction", "abstraction", - "abundancies", "abundances", - "academicaly", "academically", - "academicese", "academics", - "accelarated", "accelerated", - "accelarator", "accelerator", - "accelerater", "accelerator", - "acceleratie", "accelerate", - "acceleratio", "accelerator", - "acceleraton", "acceleration", - "accelorated", "accelerated", - "accelorator", "accelerator", - "acceptabelt", "acceptable", - "accesseries", "accessories", - "accessibile", "accessible", - "accessibily", "accessibility", - "accessoires", "accessories", - "accidantely", "accidently", - "accidentaly", "accidentally", - "accidentely", "accidently", - "accidential", "accidental", - "accidentily", "accidently", - "accidentlay", "accidently", - "accidentley", "accidently", - "accidentlly", "accidently", - "accomadated", "accommodated", - "accomadates", "accommodates", - "accommadate", "accommodate", - "accommidate", "accommodate", - "accomodated", "accommodated", - "accomodates", "accommodates", - "accomondate", "accommodate", - "accompained", "accompanied", - "accompanyed", "accompanied", - "accompianed", "accompanied", - "accompinied", "accompanied", - "accomplises", "accomplishes", - "accomplishs", "accomplishes", - "accomponied", "accompanied", - "accountatns", "accountants", - "accountents", "accountants", - "accquainted", "acquainted", - "accrediated", "accredited", - "accreditied", "accredited", - "accreditted", "accredited", - "acculumated", "accumulated", - "accumalated", "accumulated", - "accumelated", "accumulated", - "accumilated", "accumulated", - "accumulatin", "accumulation", - "accumulaton", "accumulation", - "accuratelly", "accurately", - "accustommed", "accustomed", - "acheivement", "achievement", - "acheivments", "achievements", - "achievemint", "achievement", - "achievemnts", "achievements", - "achievments", "achievements", - "achivements", "achievements", - "acknolwedge", "acknowledge", - "acknoweldge", "acknowledge", - "acknowleded", "acknowledged", - "acknowlegde", "acknowledge", - "acknowleged", "acknowledge", - "acknowleges", "acknowledges", - "acknwoledge", "acknowledges", - "acomplished", "accomplished", - "acopalyptic", "apocalyptic", - "acquaintace", "acquaintance", - "acquisation", "acquisition", - "activateing", "activating", - "activationg", "activating", - "activistion", "activision", - "additinally", "additionally", - "additionaly", "additionally", - "additonally", "additionally", - "adequatedly", "adequately", - "adjectiveus", "adjectives", - "administerd", "administered", - "administrar", "administrator", - "administren", "administer", - "administrer", "administer", - "administres", "administer", - "administrez", "administer", - "adminstered", "administered", - "adminstrate", "administrate", - "admittadely", "admittedly", - "adolencence", "adolescence", - "adolescance", "adolescence", - "adolescense", "adolescence", - "advantadges", "advantages", - "advantageos", "advantageous", - "advantageus", "advantageous", - "advantagous", "advantageous", - "adventerous", "adventures", - "adventourus", "adventurous", - "adversiting", "advertising", - "advertisors", "advertisers", - "advertisted", "advertised", - "aesthethics", "aesthetics", - "afficionado", "aficionado", - "affiliction", "affiliation", - "affirmitave", "affirmative", - "affirmitive", "affirmative", - "affixiation", "affiliation", - "affrimative", "affirmative", - "afgahnistan", "afghanistan", - "afganhistan", "afghanistan", - "afghanastan", "afghanistan", - "afghansitan", "afghanistan", - "afhganistan", "afghanistan", - "afternarket", "aftermarket", - "afterthougt", "afterthought", - "aggaravates", "aggravates", - "aggragating", "aggravating", - "aggregatore", "aggregate", - "aggressivly", "aggressively", - "aggresssion", "aggression", - "aggrovating", "aggravating", - "agnostacism", "agnosticism", - "agnostisicm", "agnosticism", - "agnostisism", "agnosticism", - "agnostocism", "agnosticism", - "agnsoticism", "agnosticism", - "agonsticism", "agnosticism", - "agressively", "aggressively", - "agressivley", "agressive", - "agressivnes", "agressive", - "agricolture", "agriculture", - "agriculteur", "agriculture", - "agricultral", "agricultural", - "agricultual", "agricultural", - "agricutlure", "agriculture", - "ahtleticism", "athleticism", - "alcoholicas", "alcoholics", - "alcoholicos", "alcoholics", - "alcoholisim", "alcoholism", - "algorithems", "algorithm", - "algorithims", "algorithm", - "algorithmes", "algorithms", - "algorithmns", "algorithms", - "algorithmus", "algorithms", - "algorithyms", "algorithm", - "algorythims", "algorithms", - "alientating", "alienating", - "alleigances", "allegiance", - "alltogether", "altogether", - "alterantive", "alternative", - "alternatley", "alternately", - "alternitive", "alternative", - "altheticism", "athleticism", - "altnerately", "alternately", - "altruisitic", "altruistic", - "altruistric", "altruistic", - "amalgomated", "amalgamated", - "ambulancier", "ambulance", - "amerliorate", "ameliorate", - "ammendments", "amendments", - "ampehtamine", "amphetamine", - "ampethamine", "amphetamine", - "amphetamies", "amphetamines", - "amphetamins", "amphetamines", - "amphetemine", "amphetamine", - "amphetimine", "amphetamine", - "amphetmaine", "amphetamines", - "analyticals", "analytics", - "anarchistes", "anarchists", - "ancedotally", "anecdotally", - "androgenous", "androgynous", - "anecdatally", "anecdotally", - "anecdotelly", "anecdotally", - "anecodtally", "anecdotally", - "anectodally", "anecdotally", - "anectotally", "anecdotally", - "anedoctally", "anecdotally", - "angosticism", "agnosticism", - "anihilation", "annihilation", - "anitbiotics", "antibiotics", - "annihalated", "annihilated", - "annihilaton", "annihilation", - "annihilited", "annihilated", - "annihliated", "annihilated", - "annilihated", "annihilated", - "anniversery", "anniversary", - "annonymouse", "anonymous", - "announceing", "announcing", - "announcemet", "announcements", - "announcemnt", "announcement", - "announcents", "announces", - "annoymously", "anonymously", - "anonamously", "anonymously", - "anonimously", "anonymously", - "anonmyously", "anonymously", - "anonomously", "anonymously", - "anonymousny", "anonymously", - "anouncement", "announcement", - "antagonisic", "antagonistic", - "antagonistc", "antagonistic", - "antagonstic", "antagonist", - "anthropolgy", "anthropology", - "anthropoloy", "anthropology", - "antibiodics", "antibiotics", - "antibioitcs", "antibiotic", - "antibioitic", "antibiotic", - "antibitoics", "antibiotics", - "antiboitics", "antibiotics", - "anticapated", "anticipated", - "anticiapted", "anticipated", - "anticipatin", "anticipation", - "antiobitics", "antibiotic", - "antiquaited", "antiquated", - "antisipated", "anticipated", - "apacolyptic", "apocalyptic", - "apocaliptic", "apocalyptic", - "apocalpytic", "apocalyptic", - "apocalytpic", "apocalyptic", - "apolagizing", "apologizing", - "apolegetics", "apologetics", - "apologistas", "apologists", - "apologistes", "apologists", - "apostrophie", "apostrophe", - "apparantely", "apparently", - "appareances", "appearances", - "apparentely", "apparently", - "appartments", "apartments", - "appeareance", "appearance", - "appearences", "appearances", - "apperciated", "appreciated", - "apperciates", "appreciates", - "appereances", "appearances", - "applicabile", "applicable", - "applicaiton", "application", - "applicatins", "applicants", - "applicatons", "applications", - "appoitnment", "appointments", - "apporaching", "approaching", - "apporpriate", "appropriate", - "apporximate", "approximate", - "appraoching", "approaching", - "apprearance", "appearance", - "apprecaited", "appreciated", - "apprecaites", "appreciates", - "appreciaite", "appreciative", - "appreciatie", "appreciative", - "appreciatin", "appreciation", - "appreciaton", "appreciation", - "appreciatve", "appreciative", - "appreicated", "appreciated", - "appreicates", "appreciates", - "apprentince", "apprentice", - "appriciated", "appreciated", - "appriciates", "appreciates", - "apprieciate", "appreciate", - "appropirate", "appropriate", - "appropraite", "appropriate", - "appropriato", "appropriation", - "approxamate", "approximate", - "approxiamte", "approximate", - "approxmiate", "approximate", - "aprehensive", "apprehensive", - "apsirations", "aspirations", - "aqcuisition", "acquisition", - "aquaintance", "acquaintance", - "aquiantance", "acquaintance", - "arbitrairly", "arbitrarily", - "arbitralily", "arbitrarily", - "arbitrarely", "arbitrarily", - "arbitrarion", "arbitration", - "arbitratily", "arbitrarily", - "arbritarily", "arbitrarily", - "arbritation", "arbitration", - "arcaheology", "archaeology", - "archaoelogy", "archeology", - "archeaology", "archaeology", - "archimedian", "archimedean", - "architechts", "architect", - "architectes", "architects", - "architecure", "architecture", - "argiculture", "agriculture", - "argumentate", "argumentative", - "aribtrarily", "arbitrarily", - "aribtration", "arbitration", - "arithmentic", "arithmetic", - "arithmethic", "arithmetic", - "arithmetric", "arithmetic", - "armagedddon", "armageddon", - "armageddeon", "armageddon", - "arrangments", "arrangements", - "arrengement", "arrangement", - "articluated", "articulated", - "articualted", "articulated", - "artifically", "artificially", - "artificialy", "artificially", - "aspergerers", "aspergers", - "asphyxation", "asphyxiation", - "aspriations", "aspirations", - "assasinated", "assassinated", - "assasinates", "assassinates", - "assassiante", "assassinate", - "assassinare", "assassinate", - "assassinatd", "assassinated", - "assassinato", "assassination", - "assassinats", "assassins", - "assassinted", "assassinated", - "assembleing", "assembling", - "assemblying", "assembling", - "assertation", "assertion", - "assignemnts", "assignments", - "assimialted", "assimilate", - "assimilatie", "assimilate", - "assimilerat", "assimilate", - "assimiliate", "assimilate", - "assimliated", "assimilate", - "assingments", "assignments", - "assistantes", "assistants", - "assocaition", "associations", - "associaiton", "associations", - "associaties", "associates", - "associatons", "associations", - "assoication", "association", - "assosiating", "associating", - "assosiation", "association", - "assoziation", "association", - "assumptious", "assumptions", - "astonashing", "astonishing", - "astonoshing", "astonishing", - "astronaught", "astronaut", - "astronaunts", "astronaut", - "astronautas", "astronauts", - "astronautes", "astronauts", - "asychronous", "asynchronous", - "asyncronous", "asynchronous", - "atatchments", "attachments", - "atheistisch", "atheistic", - "athelticism", "athleticism", - "athletecism", "athleticism", - "athleticsim", "athleticism", - "athletisicm", "athleticism", - "athletisism", "athleticism", - "atmopsheric", "atmospheric", - "atmoshperic", "atmospheric", - "atmosoheric", "atmospheric", - "atomspheric", "atmospheric", - "atrocitites", "atrocities", - "attachemnts", "attachments", - "attackerasu", "attackers", - "attackerats", "attackers", - "attactments", "attachments", - "attributred", "attributed", - "attributted", "attribute", - "attrocities", "atrocities", - "audiobookas", "audiobooks", - "audioboooks", "audiobook", - "auotcorrect", "autocorrect", - "austrailans", "australians", - "austrailian", "australian", - "australiaan", "australians", - "australiams", "australians", - "australiens", "australians", - "australlian", "australian", - "authenticiy", "authenticity", - "authenticor", "authenticator", - "authenticty", "authenticity", - "authorative", "authoritative", - "authoritate", "authoritative", - "authoroties", "authorities", - "autoatttack", "autoattack", - "autocoreect", "autocorrect", - "autocorrekt", "autocorrect", - "autocorrent", "autocorrect", - "autocorrext", "autocorrect", - "autoctonous", "autochthonous", - "autokorrect", "autocorrect", - "automaticly", "automatically", - "automatonic", "automation", - "automoblies", "automobile", - "auxillaries", "auxiliaries", - "availabiliy", "availability", - "availabilty", "availability", - "availablity", "availability", - "awesoneness", "awesomeness", - "babysittter", "babysitter", - "backbacking", "backpacking", - "backgorunds", "backgrounds", - "backhacking", "backpacking", - "backjacking", "backpacking", - "backtacking", "backpacking", - "bangaldeshi", "bangladesh", - "bangladesch", "bangladesh", - "barceloneta", "barcelona", - "bargainning", "bargaining", - "battelfield", "battlefield", - "battelfront", "battlefront", - "battelships", "battleship", - "battlefeild", "battlefield", - "battlefiend", "battlefield", - "battlefiled", "battlefield", - "battlefornt", "battlefront", - "battlehsips", "battleship", - "beastiality", "bestiality", - "beaurocracy", "bureaucracy", - "beautyfully", "beautifully", - "behaviorial", "behavioral", - "belittleing", "belittling", - "belittlling", "belittling", - "belligerant", "belligerent", - "belligirent", "belligerent", - "bellweather", "bellwether", - "benefitical", "beneficial", - "bestiallity", "bestiality", - "beuatifully", "beautifully", - "beuraucracy", "bureaucracy", - "beuraucrats", "bureaucrats", - "billegerent", "belligerent", - "billionairs", "billionaires", - "billionarie", "billionaire", - "billioniare", "billionaire", - "biologicaly", "biologically", - "birthdayers", "birthdays", - "birthdaymas", "birthdays", - "bittersweat", "bittersweet", - "bitterwseet", "bittersweet", - "blackberrry", "blackberry", - "blacksmitch", "blacksmith", - "bloodboorne", "bloodborne", - "bluebarries", "blueberries", - "blueburries", "blueberries", - "blueprients", "blueprints", - "bodybuildig", "bodybuilding", - "bodybuildng", "bodybuilding", - "bodybuiling", "bodybuilding", - "bombardeada", "bombarded", - "bombardeado", "bombarded", - "bombarderad", "bombarded", - "bordelrands", "borderlands", - "bordlerands", "borderlands", - "bortherhood", "brotherhood", - "bourgeousie", "bourgeois", - "boycottting", "boycotting", - "bracelettes", "bracelets", - "brainwahsed", "brainwashed", - "brainwasing", "brainwashing", - "braziliians", "brazilians", - "breakthough", "breakthrough", - "breakthrouh", "breakthrough", - "breathtakng", "breathtaking", - "brianwashed", "brainwashed", - "brillaintly", "brilliantly", - "broadcasing", "broadcasting", - "broadcastes", "broadcasts", - "broderlands", "borderlands", - "brotherwood", "brotherhood", - "buddhistisk", "buddhists", - "buearucrats", "bureaucrats", - "bueraucracy", "bureaucracy", - "bueraucrats", "bureaucrats", - "buisnessman", "businessman", - "buisnessmen", "businessmen", - "bullerproof", "bulletproof", - "bulletbroof", "bulletproof", - "bulletproff", "bulletproof", - "bulletprrof", "bulletproof", - "bullitproof", "bulletproof", - "bureacuracy", "bureaucracy", - "bureaocracy", "bureaucracy", - "bureaocrats", "bureaucrats", - "bureaucraps", "bureaucrats", - "bureaucrash", "bureaucrats", - "bureaucrasy", "bureaucrats", - "bureaucrazy", "bureaucracy", - "bureuacracy", "bureaucracy", - "bureuacrats", "bureaucrats", - "burueacrats", "bureaucrats", - "businessnes", "businessmen", - "busniessmen", "businessmen", - "butterfiles", "butterflies", - "butterfleye", "butterfly", - "butterflyes", "butterflies", - "butterfries", "butterflies", - "butterlfies", "butterflies", - "caclulating", "calculating", - "caclulation", "calculation", - "caclulators", "calculators", - "cailbration", "calibration", - "calbiration", "calibration", - "calcualting", "calculating", - "calcualtion", "calculations", - "calcualtors", "calculators", - "calculaters", "calculators", - "calculatios", "calculators", - "calculatons", "calculations", - "calibartion", "calibration", - "calibraiton", "calibration", - "califorinan", "californian", - "californain", "californian", - "californica", "california", - "californien", "californian", - "californiia", "californian", - "californina", "californian", - "californnia", "californian", - "califronian", "californian", - "caluclating", "calculating", - "caluclation", "calculation", - "caluclators", "calculators", - "caluculated", "calculated", - "caluiflower", "cauliflower", - "camouflague", "camouflage", - "camouflauge", "camouflage", - "campagining", "campaigning", - "campainging", "campaigning", - "canadianese", "canadians", - "cannabilism", "cannibalism", - "cannabolism", "cannibalism", - "canniablism", "cannibalism", - "cannibalizm", "cannibalism", - "cannibaljim", "cannibalism", - "cannibalsim", "cannibalism", - "cannibilism", "cannibalism", - "cannobalism", "cannibalism", - "cannotation", "connotation", - "capabilites", "capabilities", - "capabilitiy", "capability", - "capabillity", "capability", - "capacitaron", "capacitor", - "capacitores", "capacitors", - "capatilists", "capitalists", - "capatilized", "capitalized", - "caperbility", "capability", - "capitalisim", "capitalism", - "capitilists", "capitalists", - "capitilized", "capitalized", - "capitolists", "capitalists", - "capitolized", "capitalized", - "captialists", "capitalists", - "captialized", "capitalized", - "cariactures", "caricature", - "carniverous", "carnivorous", - "castatrophe", "catastrophe", - "catagorized", "categorized", - "catapillars", "caterpillars", - "catapillers", "caterpillars", - "catasthrope", "catastrophe", - "catastraphe", "catastrophe", - "catastrohpe", "catastrophe", - "catastropic", "catastrophic", - "categroized", "categorized", - "catepillars", "caterpillars", - "catergorize", "categorize", - "caterogized", "categorized", - "caterpilars", "caterpillars", - "caterpiller", "caterpillar", - "catholacism", "catholicism", - "catholicsim", "catholicism", - "catholisicm", "catholicism", - "catholisism", "catholicism", - "catholizism", "catholicism", - "catholocism", "catholicism", - "catogerized", "categorized", - "catterpilar", "caterpillar", - "cauilflower", "cauliflower", - "caulfilower", "cauliflower", - "celebartion", "celebrations", - "celebirties", "celebrities", - "celebracion", "celebration", - "celebrasion", "celebrations", - "celebratons", "celebrations", - "centipeddle", "centipede", - "cerimonious", "ceremonious", - "certaintity", "certainty", - "certificaat", "certificate", - "certificare", "certificate", - "certificato", "certification", - "certificats", "certificates", - "challanging", "challenging", - "challeneged", "challenged", - "challeneger", "challenger", - "challeneges", "challenges", - "chameleooon", "chameleon", - "championshp", "championship", - "championsip", "championship", - "chancellour", "chancellor", - "charachters", "characters", - "charasmatic", "charismatic", - "charimastic", "charismatic", - "charsimatic", "charismatic", - "cheerleadra", "cheerleader", - "cheerleards", "cheerleaders", - "cheerleeder", "cheerleader", - "cheesebuger", "cheeseburger", - "cheeseburgs", "cheeseburgers", - "chihuahuita", "chihuahua", - "childrenmrs", "childrens", - "chloesterol", "cholesterol", - "cholesteral", "cholesterol", - "cholestoral", "cholesterol", - "cholestorol", "cholesterol", - "cholosterol", "cholesterol", - "chormosomes", "chromosomes", - "christianty", "christianity", - "chromasomes", "chromosomes", - "chromesomes", "chromosomes", - "chromisomes", "chromosomes", - "chromosones", "chromosomes", - "chromossome", "chromosomes", - "chromozomes", "chromosomes", - "chronicales", "chronicles", - "chronichles", "chronicles", - "cicrulating", "circulating", - "cincinnasti", "cincinnati", - "cincinnatti", "cincinnati", - "cincinnnati", "cincinnati", - "circimcised", "circumcised", - "circluating", "circulating", - "circualtion", "circulation", - "circulacion", "circulation", - "circumcison", "circumcision", - "circumsiced", "circumcised", - "circumsised", "circumcised", - "circumstace", "circumstance", - "circumvrent", "circumvent", - "circuncised", "circumcised", - "cirticising", "criticising", - "ciruclating", "circulating", - "ciruclation", "circulation", - "citicenship", "citizenship", - "citisenship", "citizenship", - "citizinship", "citizenship", - "civilizatin", "civilizations", - "civilizaton", "civilization", - "claculators", "calculators", - "classifides", "classified", - "cleanilness", "cleanliness", - "cleanleness", "cleanliness", - "cleanlyness", "cleanliness", - "cleansiness", "cleanliness", - "cliffbanger", "cliffhanger", - "cliffhander", "cliffhanger", - "cliffhangar", "cliffhanger", - "clifthanger", "cliffhanger", - "cockaroches", "cockroaches", - "cockraoches", "cockroaches", - "cockroackes", "cockroaches", - "cocktailers", "cocktails", - "coefficeint", "coefficient", - "coefficiant", "coefficient", - "coincedince", "coincidence", - "coincidance", "coincidence", - "coincidense", "coincidence", - "coincidente", "coincidence", - "coincidince", "coincidence", - "coinsidence", "coincidence", - "collabarate", "collaborate", - "collaberate", "collaborate", - "collaborant", "collaborate", - "collaborare", "collaborate", - "collaborato", "collaboration", - "collapseing", "collapsing", - "collaterial", "collateral", - "collectieve", "collective", - "collectivly", "collectively", - "collectivos", "collections", - "collobarate", "collaborate", - "colloborate", "collaborate", - "colonializm", "colonialism", - "colonialsim", "colonialism", - "colonianism", "colonialism", - "colonizaton", "colonization", - "comaprisons", "comparisons", - "combiantion", "combinations", - "combinacion", "combination", - "combinaison", "combinations", - "combinaiton", "combinations", - "combinatino", "combinations", - "combinatins", "combinations", - "combinatios", "combinations", - "combinining", "combining", - "combonation", "combination", - "comediantes", "comedians", - "comeptition", "competition", - "comeptitive", "competitive", - "comeptitors", "competitors", - "comfertable", "comfortable", - "comfertably", "comfortably", - "comfortabel", "comfortably", - "comfortabil", "comfortably", - "comfrotable", "comfortable", - "comftorable", "comfortable", - "comftorably", "comfortably", - "comisioning", "commissioning", - "comissioned", "commissioned", - "comissioner", "commissioner", - "commandered", "commanded", - "commandmant", "commandment", - "commantator", "commentator", - "commendment", "commandment", - "commentarea", "commenter", - "commentaren", "commenter", - "commentater", "commentator", - "commenteers", "commenter", - "commentries", "commenters", - "commercialy", "commercially", - "commericals", "commercials", - "commericial", "commercial", - "comminicate", "communicate", - "comminucate", "communicate", - "commisioned", "commissioned", - "commisioner", "commissioner", - "commisssion", "commissions", - "committment", "commitment", - "commodoties", "commodities", - "commomplace", "commonplace", - "commonspace", "commonplace", - "commonweath", "commonwealth", - "commonwelth", "commonwealth", - "commuincate", "communicated", - "communciate", "communicate", - "communicted", "communicated", - "communistas", "communists", - "communistes", "communists", - "compability", "compatibility", - "compalation", "compilation", - "compansated", "compensated", - "comparabile", "comparable", - "comparasion", "comparison", - "comparasons", "comparisons", - "comparement", "compartment", - "comparetive", "comparative", - "comparision", "comparison", - "comparisson", "comparisons", - "comparitave", "comparative", - "comparitive", "comparative", - "comparsions", "comparisons", - "compassione", "compassionate", - "compasssion", "compassion", - "compatabile", "compatible", - "compatative", "comparative", - "compatiable", "compatible", - "compatibile", "compatible", - "compatibily", "compatibility", - "compeditive", "competitive", - "compeditors", "competitors", - "compeitions", "competitions", - "compeittion", "competitions", - "compelation", "compilation", - "compensante", "compensate", - "compensatie", "compensate", - "compensatin", "compensation", - "compenstate", "compensate", - "comperative", "comparative", - "compesition", "composition", - "competation", "computation", - "competative", "competitive", - "competators", "competitors", - "competetion", "competition", - "competetors", "competitors", - "competiters", "competitors", - "competiting", "competition", - "competitior", "competitor", - "competitivo", "competition", - "competitoin", "competitions", - "competitons", "competitors", - "competution", "computation", - "compilacion", "compilation", - "compilcated", "complicate", - "compination", "compilation", - "compinsated", "compensated", - "compitation", "computation", - "compitetion", "competitions", - "complacient", "complacent", - "complciated", "complicate", - "compleation", "compilation", - "complecated", "complicated", - "completaste", "completes", - "completeing", "completing", - "completeion", "completion", - "completelly", "completely", - "completelyl", "completely", - "completelys", "completes", - "completenes", "completes", - "complexitiy", "complexity", - "compliacted", "complicate", - "compliation", "compilation", - "complicarte", "complicate", - "complicatie", "complicit", - "complicatii", "complicit", - "complicatin", "complicit", - "complictaed", "complicate", - "complimente", "complement", - "complimenty", "complimentary", - "complusions", "compulsion", - "compolation", "compilation", - "componenets", "components", - "componentes", "components", - "composicion", "composition", - "composiiton", "compositions", - "composision", "compositions", - "compositied", "composite", - "composities", "composite", - "compositoin", "compositions", - "compositons", "compositions", - "compositore", "composite", - "compostiion", "compositions", - "compotition", "composition", - "compramised", "compromised", - "compramises", "compromises", - "compremised", "compromised", - "compremises", "compromises", - "comprension", "compression", - "compresores", "compressor", - "compresssed", "compressed", - "compresssor", "compressor", - "comprimised", "compromised", - "comprimises", "compromises", - "compromessi", "compromises", - "compromisng", "compromising", - "compromisse", "compromises", - "compromisso", "compromises", - "compromized", "compromised", - "compulstion", "compulsion", - "compunation", "computation", - "computacion", "computation", - "computating", "computation", - "computition", "computation", - "conceivibly", "conceivably", - "concencrate", "concentrate", - "concentrace", "concentrate", - "concentrade", "concentrated", - "concentrait", "concentrate", - "concentrant", "concentrate", - "concentrare", "concentrate", - "concentrato", "concentration", - "concertmate", "concentrate", - "conceviable", "conceivable", - "conceviably", "conceivably", - "concidering", "considering", - "conciveable", "conceivable", - "conciveably", "conceivably", - "conclsuions", "concussions", - "concludendo", "concluded", - "conclussion", "conclusions", - "conclussive", "conclusive", - "conclutions", "conclusions", - "concsiously", "consciously", - "conculsions", "conclusions", - "concusssion", "concussions", - "condeferacy", "confederacy", - "condicional", "conditional", - "condidtions", "conditions", - "conditionar", "conditioner", - "conditionel", "conditional", - "condolances", "condolences", - "condolenses", "condolences", - "condolonces", "condolences", - "conductiong", "conducting", - "condulences", "condolences", - "conenctions", "connections", - "conescutive", "consecutive", - "confedaracy", "confederacy", - "confedarate", "confederate", - "confederecy", "confederacy", - "conferances", "conferences", - "conferedate", "confederate", - "confererate", "confederate", - "confescated", "confiscated", - "confesssion", "confessions", - "confidantly", "confidently", - "configurare", "configure", - "configurate", "configure", - "configurato", "configuration", - "confilcting", "conflicting", - "confisgated", "confiscated", - "conflciting", "conflicting", - "confortable", "comfortable", - "confrontato", "confrontation", - "confussions", "confessions", - "congrassman", "congressman", - "congratuate", "congratulate", - "conicidence", "coincidence", - "conjonction", "conjunction", - "conjucntion", "conjunction", - "conjuncting", "conjunction", - "conlcusions", "conclusions", - "connatation", "connotation", - "connecitcut", "connecticut", - "connecticon", "connection", - "connectiong", "connecting", - "connectivty", "connectivity", - "connetation", "connotation", - "connonation", "connotation", - "connotacion", "connotation", - "conontation", "connotation", - "conotations", "connotations", - "conquerring", "conquering", - "consdidered", "considered", - "consectuive", "consecutive", - "consecuence", "consequence", - "conseguence", "consequence", - "conselation", "consolation", - "consentrate", "concentrate", - "consequenes", "consequence", - "consequense", "consequences", - "consequente", "consequence", - "consequenty", "consequently", - "consequtive", "consecutive", - "conservanti", "conservation", - "conservatie", "conservatives", - "conservaton", "conservation", - "consficated", "confiscated", - "considerabe", "considerate", - "considerais", "considers", - "considerant", "considerate", - "considerato", "consideration", - "considerble", "considerable", - "considerbly", "considerably", - "considereis", "considers", - "consilation", "consolation", - "consilidate", "consolidate", - "consistance", "consistency", - "consistenly", "consistently", - "consistensy", "consistency", - "consistenty", "consistently", - "consitution", "constitution", - "conslutants", "consultant", - "consolacion", "consolation", - "consoldiate", "consolidate", - "consolidare", "consolidate", - "consolodate", "consolidate", - "consomation", "consolation", - "conspiraces", "conspiracies", - "conspiracys", "conspiracies", - "conspirancy", "conspiracy", - "constantins", "constants", - "constantivs", "constants", - "constarints", "constraint", - "constituant", "constituent", - "constituion", "constitution", - "constituite", "constitute", - "constitutie", "constitutes", - "constrating", "constraint", - "constriants", "constraints", - "construcing", "constructing", - "construcion", "construction", - "construcive", "constructive", - "constructie", "constructive", - "constructos", "constructs", - "constructur", "constructor", - "constructus", "constructs", - "constuction", "construction", - "consturcted", "constructed", - "consuelling", "counselling", - "consulation", "consolation", - "consultaion", "consultation", - "consultanti", "consultation", - "consumation", "consumption", - "consumbales", "consumables", - "consumersim", "consumerism", - "consumibles", "consumables", - "contagiosum", "contagious", - "containered", "contained", - "containmemt", "containment", - "containters", "containers", - "containting", "containing", - "contaminato", "contamination", - "contaminent", "containment", - "contaminted", "contaminated", - "contancting", "contracting", - "contanimate", "contaminated", - "contemplare", "contemplate", - "contempoary", "contemporary", - "contemporay", "contemporary", - "contencious", "contentious", - "contenental", "continental", - "contengency", "contingency", - "contenintal", "continental", - "contenplate", "contemplate", - "contensious", "contentious", - "contentants", "contestants", - "contentuous", "contentious", - "contestaste", "contestants", - "contestents", "contestants", - "contianment", "containment", - "contientous", "contentious", - "contimplate", "contemplate", - "continenets", "continents", - "continentes", "continents", - "continentul", "continental", - "contingancy", "contingency", - "contingient", "contingent", - "contingincy", "contingency", - "continously", "continuously", - "continuarla", "continual", - "continuarlo", "continual", - "continuasse", "continues", - "continueing", "continuing", - "continuemos", "continues", - "continueous", "continuous", - "continuious", "continuous", - "continuning", "continuing", - "continunity", "continuity", - "continuosly", "continuously", - "continuting", "continuing", - "continutity", "continuity", - "continuuing", "continuing", - "continuuity", "continuity", - "contirbuted", "contributed", - "contiunally", "continually", - "contraccion", "contraction", - "contraddice", "contradicted", - "contradices", "contradicts", - "contradtion", "contraction", - "contraversy", "controversy", - "contreversy", "controversy", - "contribuent", "contribute", - "contribuito", "contribution", - "contributer", "contributor", - "contributie", "contribute", - "contributin", "contribution", - "contributos", "contributors", - "contribuyes", "contributes", - "contricting", "contracting", - "contriction", "contraction", - "contridicts", "contradicts", - "contriversy", "controversy", - "controleurs", "controllers", - "controllore", "controllers", - "controvercy", "controversy", - "controversa", "controversial", - "contrubutes", "contributes", - "contructing", "contracting", - "contruction", "construction", - "contructors", "contractors", - "conveinence", "convenience", - "conveneince", "convenience", - "conveniance", "convenience", - "conveniente", "convenience", - "convenietly", "conveniently", - "conventinal", "conventional", - "converitble", "convertible", - "conversaion", "conversion", - "conversatin", "conversations", - "converseley", "conversely", - "converstion", "conversion", - "convertirea", "converter", - "convertirle", "convertible", - "convertirme", "converter", - "convertirte", "converter", - "convicitons", "convictions", - "convienence", "convenience", - "convienient", "convenient", - "convinceing", "convincing", - "convincente", "convenient", - "convincersi", "convinces", - "convirtible", "convertible", - "cooperacion", "cooperation", - "cooperativo", "cooperation", - "cooporation", "cooperation", - "cooporative", "cooperative", - "coordenated", "coordinated", - "coordenates", "coordinates", - "coordianted", "coordinated", - "coordiantes", "coordinates", - "coordiantor", "coordinator", - "coordinador", "coordinator", - "coordinants", "coordinates", - "coordinater", "coordinator", - "coordinaton", "coordination", - "coordonated", "coordinated", - "coordonates", "coordinates", - "coordonator", "coordinator", - "cooridnated", "coordinated", - "cooridnates", "coordinates", - "cooridnator", "coordinator", - "copenhaagen", "copenhagen", - "copenhaegen", "copenhagen", - "copenhaguen", "copenhagen", - "copenhangen", "copenhagen", - "copmetitors", "competitors", - "coproration", "corporation", - "copyrigthed", "copyrighted", - "corinthains", "corinthians", - "corintheans", "corinthians", - "corinthiens", "corinthians", - "corinthinas", "corinthians", - "cornithians", "corinthians", - "corparation", "corporation", - "corperation", "corporation", - "corporacion", "corporation", - "corporativo", "corporation", - "corralation", "correlation", - "correctings", "corrections", - "correctivos", "corrections", - "correktions", "corrections", - "correktness", "correctness", - "correlacion", "correlation", - "correlaties", "correlates", - "corrilation", "correlation", - "corrisponds", "corresponds", - "corrolation", "correlation", - "corrosponds", "corresponds", - "costitution", "constitution", - "councellors", "councillors", - "counrtyside", "countryside", - "counsilling", "counselling", - "countercoat", "counteract", - "counteredit", "counterfeit", - "counterfact", "counteract", - "counterfait", "counterfeit", - "counterfest", "counterfeit", - "counterfiet", "counterfeit", - "counterpaly", "counterplay", - "counterpary", "counterplay", - "counterpath", "counterpart", - "counterpats", "counterparts", - "counterpont", "counterpoint", - "counterract", "counterpart", - "counterside", "countryside", - "countertrap", "counterpart", - "countriside", "countryside", - "countrycide", "countryside", - "countrywise", "countryside", - "courthourse", "courthouse", - "coutnerfeit", "counterfeit", - "coutnerpart", "counterpart", - "coutnerplay", "counterplay", - "creacionism", "creationism", - "creationkit", "creationist", - "creationsim", "creationism", - "creationsit", "creationist", - "creationsts", "creationists", - "creativelly", "creatively", - "credencials", "credentials", - "credentails", "credentials", - "credentaisl", "credentials", - "credientals", "credentials", - "credintials", "credentials", - "cricitising", "criticising", - "criculating", "circulating", - "cringeworhy", "cringeworthy", - "cringeworty", "cringeworthy", - "cringewothy", "cringeworthy", - "criticicing", "criticising", - "criticisied", "criticise", - "criticisims", "criticisms", - "criticisize", "criticise", - "criticiszed", "criticise", - "critisicing", "criticizing", - "critisising", "criticising", - "critizicing", "criticizing", - "critizising", "criticizing", - "critizizing", "criticizing", - "crockodiles", "crocodiles", - "crocodiller", "crocodile", - "crocodilule", "crocodile", - "croporation", "corporation", - "crossfiters", "crossfire", - "cultivative", "cultivate", - "curricullum", "curriculum", - "customizabe", "customizable", - "customizble", "customizable", - "dangeroulsy", "dangerously", - "dardenelles", "dardanelles", - "deadlifters", "deadlifts", - "dealershits", "dealerships", - "deceptivley", "deceptive", - "declaracion", "declaration", - "decleration", "declaration", - "declinining", "declining", - "decloration", "declaration", - "decoartions", "decoration", - "decomposits", "decomposes", - "decoratieve", "decorative", - "decorativos", "decorations", - "decotations", "decorations", - "decsendants", "descendants", - "deductiable", "deductible", - "defenderlas", "defenders", - "defenderlos", "defenders", - "defendernos", "defenders", - "defenesless", "defenseless", - "defenisvely", "defensively", - "defensivley", "defensively", - "deficiencey", "deficiency", - "deficienies", "deficiencies", - "deficientcy", "deficiency", - "definantley", "definately", - "definatedly", "definately", - "definateley", "definately", - "definatelly", "definately", - "definatelty", "definately", - "definatetly", "definately", - "definations", "definitions", - "definatlely", "definately", - "definetally", "definately", - "definetlely", "definetly", - "definitaley", "definately", - "definitelly", "definitely", - "definitevly", "definitively", - "definitiely", "definitively", - "definitieve", "definitive", - "definitiley", "definitively", - "definitivly", "definitively", - "definitivno", "definition", - "definitivos", "definitions", - "definitlely", "definitly", - "definitlety", "definitly", - "deflecticon", "deflection", - "degenererat", "degenerate", - "degradacion", "degradation", - "degradating", "degradation", - "degragation", "degradation", - "degridation", "degradation", - "dehyrdation", "dehydration", - "deinitalize", "deinitialize", - "delaerships", "dealerships", - "delapidated", "dilapidated", - "delcaration", "declaration", - "delearships", "dealerships", - "delevopment", "development", - "deliberante", "deliberate", - "deliberatly", "deliberately", - "deliberetly", "deliberately", - "delightlful", "delightful", - "deliverying", "delivering", - "delusionnal", "delusional", - "deminsional", "dimensional", - "democarcies", "democracies", - "democracize", "democracies", - "democractic", "democratic", - "democraphic", "demographic", - "democrasies", "democracies", - "democrazies", "democracies", - "democrocies", "democracies", - "demograhpic", "demographic", - "demographis", "demographics", - "demograpics", "demographics", - "demogrpahic", "demographic", - "demoninator", "denominator", - "demonstarte", "demonstrate", - "demonstates", "demonstrates", - "demonstraby", "demonstrably", - "demonstrant", "demonstrate", - "demonstrats", "demonstrates", - "demosntrate", "demonstrate", - "denegrating", "denigrating", - "denomenator", "denominator", - "denominador", "denominator", - "denominaron", "denominator", - "denominater", "denominator", - "denominaton", "denomination", - "denomitator", "denominator", - "denomonator", "denominator", - "denonimator", "denominator", - "deocrations", "decorations", - "deomcracies", "democracies", - "deparmental", "departmental", - "depedencies", "dependencies", - "dependancey", "dependency", - "dependencey", "dependency", - "dependencie", "dependence", - "dependenies", "dependencies", - "deplorabile", "deplorable", - "depressieve", "depressive", - "depresssion", "depression", - "deprevation", "deprivation", - "deprication", "deprivation", - "deprivating", "deprivation", - "deprivition", "deprivation", - "deprovation", "deprivation", - "depserately", "desperately", - "depseration", "desperation", - "deregulatin", "deregulation", - "derivativos", "derivatives", - "derivitaves", "derivatives", - "derivitives", "derivatives", - "derpivation", "deprivation", - "derviatives", "derivatives", - "descandants", "descendants", - "descendands", "descendants", - "descendends", "descended", - "descendenta", "descendants", - "descentants", "descendants", - "descirption", "descriptions", - "descprition", "descriptions", - "describiste", "describes", - "describtion", "description", - "descripcion", "description", - "descripiton", "descriptions", - "descripters", "descriptors", - "descriptoin", "descriptions", - "descriptons", "descriptions", - "descritpion", "descriptions", - "descrpition", "descriptions", - "desensitied", "desensitized", - "desensitzed", "desensitized", - "desentisize", "desensitized", - "desgination", "designation", - "designacion", "designation", - "designstion", "designation", - "desinations", "destinations", - "desingation", "designation", - "desitnation", "destination", - "desoriented", "disoriented", - "desparately", "desperately", - "desparation", "desperation", - "desperating", "desperation", - "desperatley", "desperately", - "despirately", "desperately", - "despiration", "desperation", - "destablized", "destabilized", - "destiantion", "destinations", - "destinaiton", "destinations", - "destinatons", "destinations", - "destinction", "destination", - "destraction", "destruction", - "destruccion", "destruction", - "destruciton", "destruction", - "destructivo", "destruction", - "destruktion", "destruction", - "destruktive", "destructive", - "deteoriated", "deteriorated", - "determanism", "determinism", - "determening", "determining", - "determenism", "determinism", - "determinare", "determine", - "determinato", "determination", - "determinded", "determine", - "determinsim", "determinism", - "detramental", "detrimental", - "detremental", "detrimental", - "detrimentul", "detrimental", - "detuschland", "deutschland", - "deustchland", "deutschland", - "deutchsland", "deutschland", - "deutcshland", "deutschland", - "deutschalnd", "deutschland", - "deutshcland", "deutschland", - "develepmont", "developments", - "develompent", "developments", - "developemnt", "developments", - "developmant", "developmental", - "developmetn", "developments", - "developmnet", "developments", - "developpers", "developers", - "develpoment", "developments", - "deveolpment", "developments", - "deveploment", "developments", - "devestating", "devastating", - "devistating", "devastating", - "deyhdration", "dehydration", - "diagnositcs", "diagnostic", - "diagnositic", "diagnostic", - "diagonstics", "diagnostic", - "dictatorhip", "dictatorship", - "dictionaire", "dictionaries", - "dictionairy", "dictionary", - "dictionarys", "dictionaries", - "dictionnary", "dictionary", - "differances", "differences", - "differantly", "differently", - "differental", "differential", - "differentes", "differences", - "differneces", "differences", - "differnetly", "differently", - "difficulity", "difficulty", - "difficultes", "difficulties", - "dificulties", "difficulties", - "dimensiones", "dimensions", - "dimentional", "dimensional", - "dimesnional", "dimensional", - "diminisheds", "diminishes", - "diminsihing", "diminishing", - "diminuitive", "diminutive", - "diminushing", "diminishing", - "dinosaurios", "dinosaurs", - "direccional", "directional", - "direcitonal", "directional", - "directorguy", "directory", - "directorios", "directors", - "direktional", "directional", - "disadvantge", "disadvantage", - "disagreemet", "disagreements", - "disagreemtn", "disagreements", - "disapperead", "disappeared", - "disapporval", "disapproval", - "disapprovel", "disapproval", - "disasterous", "disastrous", - "disastreous", "disastrous", - "disastrious", "disastrous", - "disastruous", "disastrous", - "disatisfied", "dissatisfied", - "disciplened", "disciplined", - "disciplinas", "disciplines", - "disciplince", "disciplines", - "disclipined", "disciplined", - "disclipines", "disciplines", - "discogrophy", "discography", - "discogrpahy", "discography", - "disconencts", "disconnects", - "disconneted", "disconnected", - "disconnnect", "disconnect", - "discontined", "discontinued", - "discontiued", "discontinued", - "discrapency", "discrepancy", - "discretited", "discredited", - "discrimante", "discriminate", - "discrimiate", "discriminate", - "discussiong", "discussing", - "discusssion", "discussions", - "disgraseful", "disgraceful", - "disgrateful", "disgraceful", - "disgrunteld", "disgruntled", - "disgustigly", "disgustingly", - "disgustingy", "disgustingly", - "disgustinly", "disgustingly", - "disicplined", "disciplined", - "disicplines", "disciplines", - "disingenuos", "disingenuous", - "dismanlting", "dismantling", - "dismantaled", "dismantled", - "dismanteled", "dismantled", - "disobediant", "disobedient", - "disocgraphy", "discography", - "disparingly", "disparagingly", - "dispensaire", "dispensaries", - "dispensarie", "dispenser", - "dispensiary", "dispensary", - "displacemnt", "displacement", - "disposicion", "disposition", - "disputandem", "disputandum", - "disqualifed", "disqualified", - "disregaring", "disregarding", - "dissapeared", "disappeared", - "dissapoined", "dissapointed", - "dissapointd", "dissapointed", - "dissapoited", "dissapointed", - "dissappears", "disappears", - "dissatisfed", "dissatisfied", - "disscusions", "discussions", - "dissertaion", "dissertation", - "dissipatore", "dissipate", - "distatesful", "distasteful", - "distatseful", "distasteful", - "disterbance", "disturbance", - "disticntion", "distinctions", - "distinciton", "distinction", - "distincitve", "distinctive", - "distinctily", "distinctly", - "distingiush", "distinguish", - "distinguise", "distinguished", - "distinktion", "distinction", - "distinquish", "distinguish", - "distirbance", "disturbance", - "distirbuted", "distribute", - "distirbutor", "distributor", - "distraccion", "distraction", - "distractons", "distracts", - "distraktion", "distraction", - "distribitor", "distributor", - "distribuent", "distribute", - "distribuite", "distribute", - "distribuito", "distribution", - "distributie", "distributed", - "distributin", "distribution", - "distributio", "distributor", - "distrobuted", "distributed", - "distrubance", "disturbance", - "distrubited", "distributed", - "distrubitor", "distributor", - "distrubuted", "distributed", - "distrubutor", "distributor", - "distructive", "destructive", - "distuingish", "distinguish", - "distunguish", "distinguish", - "disturbante", "disturbance", - "disturbence", "disturbance", - "disucssions", "discussions", - "divisionals", "divisions", - "doccumented", "documented", - "documantary", "documentary", - "documenatry", "documentary", - "documentare", "documentaries", - "documentato", "documentation", - "documentery", "documentary", - "documentory", "documentary", - "domesticted", "domesticated", - "dominateurs", "dominates", - "dominationg", "dominating", - "donwloading", "downloading", - "doublellift", "doublelift", - "downlaoding", "downloading", - "downloadbel", "downloadable", - "downloadbig", "downloading", - "downloadble", "downloadable", - "downvoteers", "downvoters", - "downvoteing", "downvoting", - "downvoteres", "downvoters", - "downvoteros", "downvoters", - "downvoteurs", "downvoters", - "downvotters", "downvoters", - "downvotting", "downvoting", - "dramaticaly", "dramatically", - "dramaticlly", "dramatically", - "drasitcally", "drastically", - "dsyfunction", "dysfunction", - "duetschland", "deutschland", - "durabillity", "durability", - "dyanmically", "dynamically", - "dymanically", "dynamically", - "dysfonction", "dysfunction", - "dysfucntion", "dysfunction", - "dysfunciton", "dysfunction", - "dysfunktion", "dysfunction", - "earhtquakes", "earthquakes", - "earthqaukes", "earthquakes", - "earthquacks", "earthquakes", - "economicaly", "economically", - "economiclly", "economically", - "economisiti", "economist", - "economistes", "economists", - "educacional", "educational", - "effeciently", "efficiently", - "effecitvely", "effectively", - "effectivley", "effectively", - "efficeintly", "efficiently", - "efficiantly", "efficiently", - "efficientcy", "efficiently", - "effortlesly", "effortlessly", - "effortlessy", "effortlessly", - "egaletarian", "egalitarian", - "egalitatian", "egalitarian", - "egaliterian", "egalitarian", - "egostitical", "egotistical", - "egotastical", "egotistical", - "egotestical", "egotistical", - "egotisitcal", "egotistical", - "egotisticle", "egotistical", - "egotystical", "egotistical", - "ehtnicities", "ethnicities", - "ejacluation", "ejaculation", - "ejacualtion", "ejaculation", - "electoratul", "electoral", - "electornics", "electronics", - "electricain", "electrician", - "electricial", "electrical", - "electricien", "electrician", - "electricion", "electrician", - "electricman", "electrician", - "electrisity", "electricity", - "electritian", "electrician", - "electrocity", "electricity", - "electrolyes", "electrolytes", - "electrolyts", "electrolytes", - "electroncis", "electrons", - "electroylte", "electrolytes", - "elementrary", "elementary", - "eleminating", "eliminating", - "elimanation", "elimination", - "eliminacion", "elimination", - "elimintates", "eliminates", - "ellipitcals", "elliptical", - "eloquentely", "eloquently", - "emabrassing", "embarassing", - "embaraasing", "embarassing", - "embarasaing", "embarassing", - "embarassign", "embarassing", - "embarassimg", "embarassing", - "embarassing", "embarrassing", - "embarissing", "embarassing", - "embarrasing", "embarrassing", - "embarressed", "embarrassed", - "embarrssing", "embarassing", - "emergancies", "emergencies", - "emergencias", "emergencies", - "emergenices", "emergencies", - "emmediately", "immediately", - "emmisarries", "emissaries", - "emotionella", "emotionally", - "empahsizing", "emphasizing", - "empathethic", "empathetic", - "emphacizing", "emphasizing", - "emphatising", "emphasizing", - "emphatizing", "emphasizing", - "emphazising", "emphasizing", - "emphesizing", "emphasizing", - "empiracally", "empirically", - "empirialism", "imperialism", - "empirialist", "imperialist", - "enchamtment", "enchantment", - "enchancment", "enchantment", - "enchanement", "enchantment", - "enchanthing", "enchanting", - "enchantmant", "enchantment", - "enchantmens", "enchantments", - "enchantmets", "enchantments", - "encomapsses", "encompasses", - "encompasess", "encompasses", - "encompesses", "encompasses", - "encounteres", "encounters", - "encoutnered", "encountered", - "encryptiion", "encryption", - "encyclopdia", "encyclopedia", - "encylopedia", "encyclopedia", - "endagnering", "endangering", - "endandering", "endangering", - "endorcement", "endorsement", - "endoresment", "endorsement", - "engagaments", "engagements", - "engeneering", "engineering", - "enginerring", "engineering", - "enginnering", "engineering", - "enlargments", "enlargements", - "enligthened", "enlightened", - "enourmously", "enormously", - "enterpirses", "enterprises", - "enterprices", "enterprises", - "enterprishe", "enterprises", - "entertainig", "entertaining", - "entertwined", "entertained", - "enthicities", "ethnicities", - "enthisiasts", "enthusiasts", - "enthuasists", "enthusiasts", - "enthuisasts", "enthusiasts", - "enthusaists", "enthusiasts", - "enthusiants", "enthusiast", - "enthusiasic", "enthusiastic", - "enthusiasim", "enthusiasm", - "enthusiasum", "enthusiasm", - "enthusiatic", "enthusiastic", - "enthusiests", "enthusiasts", - "enthusigasm", "enthusiasm", - "enthusisast", "enthusiasts", - "entrepeneur", "entrepreneur", - "entreperure", "entrepreneur", - "entrepeuner", "entrepreneur", - "entreprener", "entrepreneurs", - "entreprenur", "entrepreneur", - "entretained", "entertained", - "envinroment", "environments", - "enviorments", "environments", - "enviornment", "environment", - "envirnoment", "environment", - "enviroments", "environments", - "enviromnent", "environments", - "environemnt", "environment", - "environmnet", "environments", - "envrionment", "environment", - "equilavents", "equivalents", - "equilbirium", "equilibrium", - "equilevants", "equivalents", - "equilibirum", "equilibrium", - "equilibriam", "equilibrium", - "equilibruim", "equilibrium", - "equivalance", "equivalence", - "equivalants", "equivalents", - "equivalenet", "equivalents", - "equivallent", "equivalent", - "equivelance", "equivalence", - "equivelants", "equivalents", - "equivelents", "equivalents", - "equivilants", "equivalents", - "equivilence", "equivalence", - "equivilents", "equivalents", - "equivlalent", "equivalent", - "equivlanets", "equivalents", - "equivolence", "equivalence", - "equivolents", "equivalents", - "essencially", "essentially", - "essentailly", "essentially", - "essentialls", "essentials", - "essentually", "essentially", - "establising", "establishing", - "ethicallity", "ethically", - "ethincities", "ethnicities", - "ethniticies", "ethnicities", - "europeaners", "europeans", - "europeaness", "europeans", - "evaluatiing", "evaluating", - "evaluationg", "evaluating", - "evangalical", "evangelical", - "evangelikal", "evangelical", - "evengalical", "evangelical", - "evenhtually", "eventually", - "everyonehas", "everyones", - "everyonelse", "everyones", - "evidentally", "evidently", - "exacarbated", "exacerbated", - "exacberated", "exacerbated", - "exagerating", "exaggerating", - "exagerrated", "exaggerated", - "exagerrates", "exaggerates", - "exaggarated", "exaggerated", - "exaggareted", "exaggerate", - "exaggeratin", "exaggeration", - "exaggerrate", "exaggerate", - "exaggurated", "exaggerated", - "exarcebated", "exacerbated", - "excalmation", "exclamation", - "excepcional", "exceptional", - "exceptionel", "exceptional", - "excessivley", "excessively", - "exceutioner", "executioner", - "exchanching", "exchanging", - "exclamacion", "exclamation", - "exclamating", "exclamation", - "exclamativo", "exclamation", - "exclemation", "exclamation", - "exclimation", "exclamation", - "exclucivity", "exclusivity", - "exclusivety", "exclusivity", - "exclusivily", "exclusivity", - "exclusivley", "exclusively", - "excpetional", "exceptional", - "exculsively", "exclusively", - "exculsivity", "exclusivity", - "execitioner", "executioner", - "execptional", "exceptional", - "exectuables", "executable", - "exectuioner", "executioner", - "executionar", "executioner", - "executionor", "executioner", - "exerciseing", "exercising", - "exeuctioner", "executioner", - "existantial", "existential", - "existencial", "existential", - "existensial", "existential", - "existentiel", "existential", - "exlcamation", "exclamation", - "exlcusively", "exclusively", - "exlcusivity", "exclusivity", - "exoskelaton", "exoskeleton", - "expansiones", "expansions", - "expectantcy", "expectancy", - "expectating", "expectation", - "expectional", "exceptional", - "expendature", "expenditure", - "expendeture", "expenditure", - "expentiture", "expenditure", - "expereinced", "experienced", - "expereinces", "experiences", - "experements", "experiments", - "experianced", "experienced", - "experiances", "experiences", - "experiemnts", "experiments", - "experiening", "experiencing", - "experimetal", "experimental", - "experimeted", "experimented", - "experssions", "expressions", - "expiditions", "expeditions", - "expierenced", "experienced", - "expierences", "experiences", - "expirements", "experiments", - "explainging", "explaining", - "explaintory", "explanatory", - "explanaiton", "explanations", - "explanetary", "explanatory", - "explanetory", "explanatory", - "explanitary", "explanatory", - "explanotory", "explanatory", - "explenation", "explanation", - "explenatory", "explanatory", - "explicitely", "explicitly", - "explicitily", "explicitly", - "explination", "explanation", - "explinatory", "explanatory", - "exploitaion", "exploitation", - "exploitatie", "exploitative", - "explonation", "exploration", - "exploracion", "exploration", - "explorating", "exploration", - "explorerers", "explorers", - "explosiones", "explosions", - "explotacion", "exploration", - "expodential", "exponential", - "exponantial", "exponential", - "exponencial", "exponential", - "exponentiel", "exponential", - "expresscoin", "expression", - "expressivos", "expressions", - "expresssive", "expressive", - "expressview", "expressive", - "exprimental", "experimental", - "expropiated", "expropriated", - "extensiones", "extensions", - "extensivley", "extensively", - "extragavant", "extravagant", - "extrapalate", "extrapolate", - "extraploate", "extrapolate", - "extrapolant", "extrapolate", - "extrapolare", "extrapolate", - "extrapolite", "extrapolate", - "extrapulate", "extrapolate", - "extravagent", "extravagant", - "extravagina", "extravagant", - "extravegant", "extravagant", - "extravigant", "extravagant", - "extravogant", "extravagant", - "extremistas", "extremists", - "extremistes", "extremists", - "extropolate", "extrapolate", - "fabircation", "fabrication", - "fabricacion", "fabrication", - "fabrikation", "fabrication", - "facilitarte", "facilitate", - "facilitiate", "facilitate", - "facillitate", "facilitate", - "facisnation", "fascination", - "facsination", "fascination", - "factuallity", "factually", - "familairity", "familiarity", - "familairize", "familiarize", - "familiaries", "familiarize", - "familierize", "familiarize", - "fanatsizing", "fantasizing", - "fanficitons", "fanfiction", - "fantacising", "fantasizing", - "fantacizing", "fantasizing", - "fantasazing", "fantasizing", - "fantasiaing", "fantasizing", - "fantasyzing", "fantasizing", - "fantazising", "fantasizing", - "fascinacion", "fascination", - "fascinatinf", "fascination", - "fascisation", "fascination", - "fascization", "fascination", - "fashionalbe", "fashionable", - "fashoinable", "fashionable", - "fatalitites", "fatalities", - "favoritisme", "favorites", - "favoutrable", "favourable", - "felxibility", "flexibility", - "feministers", "feminists", - "feministisk", "feminists", - "fermentaion", "fermentation", - "fermenterad", "fermented", - "fertilizier", "fertilizer", - "fertizilers", "fertilizer", - "festivalens", "festivals", - "fignernails", "fingernails", - "fignerprint", "fingerprint", - "figurativly", "figuratively", - "finanically", "financially", - "finantially", "financially", - "fingerpints", "fingertips", - "fingerpoint", "fingerprint", - "fingertrips", "fingertips", - "firefighers", "firefighters", - "firefigther", "firefighters", - "firendzoned", "friendzoned", - "firghtening", "frightening", - "flatterende", "flattered", - "flawlessely", "flawlessly", - "flawlessley", "flawlessly", - "flexibiltiy", "flexibility", - "flourescent", "fluorescent", - "fluctuaties", "fluctuate", - "fluctuative", "fluctuate", - "flutteryshy", "fluttershy", - "forcefullly", "forcefully", - "foreseaable", "foreseeable", - "foresseable", "foreseeable", - "forgettting", "forgetting", - "forgiviness", "forgiveness", - "formallized", "formalized", - "formattting", "formatting", - "formidabble", "formidable", - "formidabelt", "formidable", - "formidabile", "formidable", - "fortitudine", "fortitude", - "fortuantely", "fortunately", - "fortunantly", "fortunately", - "fortunatley", "fortunately", - "fortunetely", "fortunately", - "franchieses", "franchises", - "frankensite", "frankenstein", - "frankensten", "frankenstein", - "fransiscans", "franciscans", - "freindships", "friendships", - "freindzoned", "friendzoned", - "frequenices", "frequencies", - "frequensies", "frequencies", - "frequenties", "frequencies", - "frequentily", "frequently", - "frequenzies", "frequencies", - "friendboned", "friendzoned", - "friendlines", "friendlies", - "friendzonie", "friendzoned", - "frientships", "friendships", - "frientzoned", "friendzoned", - "frightenend", "frightened", - "frightining", "frightening", - "frigthening", "frightening", - "frinedzoned", "friendzoned", - "frontlinies", "frontline", - "frontlinjen", "frontline", - "frustartion", "frustrations", - "frustracion", "frustration", - "frustraited", "frustrated", - "frustrantes", "frustrates", - "frustrasion", "frustrations", - "frustrasted", "frustrates", - "frustraties", "frustrates", - "fucntioning", "functioning", - "fulfillling", "fulfilling", - "fulfullment", "fulfillment", - "fullfilment", "fulfillment", - "fullscreeen", "fullscreen", - "funcitoning", "functioning", - "functionaly", "functionally", - "functionnal", "functional", - "fundamentas", "fundamentals", - "fundamently", "fundamental", - "fundametals", "fundamentals", - "fundamnetal", "fundamentals", - "fundemantal", "fundamental", - "fundemental", "fundamental", - "fundimental", "fundamental", - "furhtermore", "furthermore", - "furstration", "frustration", - "furthremore", "furthermore", - "furthurmore", "furthermore", - "futurisitic", "futuristic", - "gangsterest", "gangsters", - "gangsterous", "gangsters", - "gauntlettes", "gauntlets", - "geneologies", "genealogies", - "generalizng", "generalizing", - "generatting", "generating", - "genitaliban", "genitalia", - "gentlemanne", "gentlemen", - "girlfirends", "girlfriends", - "girlfreinds", "girlfriends", - "girlfrients", "girlfriends", - "glorifierad", "glorified", - "glorifindel", "glorified", - "goosebumbps", "goosebumps", - "govenrments", "governments", - "govermental", "governmental", - "governemnts", "governments", - "governmanet", "governmental", - "governmeant", "governmental", - "govormental", "governmental", - "gracefullly", "gracefully", - "grahpically", "graphically", - "grammarical", "grammatical", - "grammaticly", "grammatical", - "grammitical", "grammatical", - "graphcially", "graphically", - "grassrooots", "grassroots", - "gratuitious", "gratuitous", - "gratuituous", "gratuitous", - "gravitatiei", "gravitate", - "grilfriends", "girlfriends", - "grpahically", "graphically", - "guaranteeds", "guarantees", - "guerrillera", "guerrilla", - "gunslingner", "gunslinger", - "hamburgaren", "hamburger", - "hamburgeres", "hamburgers", - "hamburglers", "hamburgers", - "hamburguers", "hamburgers", - "handlebards", "handlebars", - "handrwiting", "handwriting", - "handycapped", "handicapped", - "hanidcapped", "handicapped", - "harassement", "harassment", - "harrasments", "harassments", - "harrassment", "harassment", - "harvestgain", "harvesting", - "headquartes", "headquarters", - "headquaters", "headquarters", - "hearhtstone", "hearthstone", - "heartborken", "heartbroken", - "heartbraker", "heartbreak", - "heartbrakes", "heartbreak", - "heartsthone", "hearthstone", - "heaviweight", "heavyweight", - "heavyweigth", "heavyweight", - "heavywieght", "heavyweight", - "helicoptors", "helicopters", - "helicotpers", "helicopters", - "helicpoters", "helicopters", - "helictopers", "helicopters", - "helikopters", "helicopters", - "hemipsheres", "hemisphere", - "hemishperes", "hemisphere", - "herathstone", "hearthstone", - "heterosexal", "heterosexual", - "hexidecimal", "hexadecimal", - "hierachical", "hierarchical", - "hierarcical", "hierarchical", - "highlighing", "highlighting", - "highschoool", "highschool", - "hipopotamus", "hippopotamus", - "historicaly", "historically", - "historicans", "historians", - "historietas", "histories", - "historinhas", "historians", - "homecomeing", "homecoming", - "homecomming", "homecoming", - "homelesness", "homelessness", - "homelessess", "homelessness", - "homeowneris", "homeowners", - "homoegenous", "homogeneous", - "homogeneize", "homogenize", - "homogenious", "homogeneous", - "homogenuous", "homogeneous", - "homophoboes", "homophobe", - "homosexuais", "homosexuals", - "homosexuels", "homosexuals", - "hopelessely", "hopelessly", - "hopelessley", "hopelessly", - "hopsitality", "hospitality", - "horizonatal", "horizontal", - "horizontaal", "horizontal", - "horizontaly", "horizontally", - "horrendeous", "horrendous", - "horrendious", "horrendous", - "horrenduous", "horrendous", - "hospitalzed", "hospitalized", - "hospotality", "hospitality", - "househoulds", "households", - "humanitarna", "humanitarian", - "humanitites", "humanities", - "humilitaing", "humiliating", - "humilitaion", "humiliation", - "humillating", "humiliating", - "humillation", "humiliation", - "hurricaines", "hurricanes", - "hurricances", "hurricanes", - "hurricanger", "hurricane", - "hyperbollic", "hyperbolic", - "hyperbrophy", "hypertrophy", - "hyperthropy", "hypertrophy", - "hypertorphy", "hypertrophy", - "hypertrohpy", "hypertrophy", - "hypocritcal", "hypocritical", - "hypocritial", "hypocritical", - "hypocrities", "hypocrite", - "hypothesees", "hypotheses", - "hypothesies", "hypothesis", - "hystericaly", "hysterically", - "hystericlly", "hysterically", - "iconclastic", "iconoclastic", - "idealisitic", "idealistic", - "identifible", "identifiable", - "identitites", "identities", - "identitties", "identities", - "ideologiers", "ideologies", - "ideologisen", "ideologies", - "ideologiset", "ideologies", - "ideologiske", "ideologies", - "illegallity", "illegally", - "illegitamte", "illegitimate", - "illegitmate", "illegitimate", - "illsutrator", "illustrator", - "illuminanti", "illuminati", - "illuminarti", "illuminati", - "illuminatti", "illuminati", - "illuminauti", "illuminati", - "illuminiati", "illuminati", - "illuminista", "illuminati", - "illumintati", "illuminati", - "illustarted", "illustrated", - "illustartor", "illustrator", - "illustraded", "illustrated", - "illustraion", "illustration", - "illustrater", "illustrator", - "illustratie", "illustrate", - "illustratin", "illustrations", - "illustraton", "illustration", - "imaganative", "imaginative", - "imaganitive", "imaginative", - "imaginacion", "imagination", - "imaginatiei", "imaginative", - "imaginating", "imagination", - "imaginativo", "imagination", - "imaginitave", "imaginative", - "imbalanaced", "imbalanced", - "imbalanaces", "imbalances", - "imbalancers", "imbalances", - "immatureity", "immaturity", - "immedeately", "immediately", - "immediantly", "immediately", - "immediatley", "immediately", - "immedietely", "immediately", - "immideately", "immediately", - "immidiately", "immediately", - "immigraiton", "immigration", - "immigrantes", "immigrants", - "immoratlity", "immortality", - "immortailty", "immortality", - "immortalisy", "immortals", - "impeccabile", "impeccable", - "imperailist", "imperialist", - "imperealist", "imperialist", - "imperialims", "imperialism", - "imperialsim", "imperialism", - "imperiarist", "imperialist", - "imperically", "empirically", - "imperislist", "imperialist", - "implausable", "implausible", - "implausbile", "implausible", - "implementas", "implements", - "implementes", "implements", - "implementig", "implementing", - "implementos", "implements", - "implicacion", "implication", - "implicatons", "implications", - "implicitely", "implicitly", - "implicitily", "implicitly", - "implikation", "implication", - "implimented", "implemented", - "importantce", "importance", - "importently", "importantly", - "imporvement", "improvement", - "impossibile", "impossible", - "impossibily", "impossibly", - "impossibley", "impossibly", - "impossiblly", "impossibly", - "impoverised", "impoverished", - "impracticle", "impractical", - "impressario", "impresario", - "impresssion", "impressions", - "imprisonent", "imprisonment", - "imprisonned", "imprisoned", - "improbabile", "improbable", - "improtantly", "importantly", - "improvemnts", "improvements", - "improvished", "improvised", - "improvision", "improvisation", - "improvments", "improvements", - "impulsivley", "impulsive", - "imrpovement", "improvement", - "inaccessble", "inaccessible", - "inaccuraces", "inaccuracies", - "inaccurrate", "inaccurate", - "inadvertant", "inadvertent", - "inaguration", "inauguration", - "inahbitants", "inhabitants", - "incarantion", "incarnation", - "incarcerato", "incarceration", - "incarnacion", "incarnation", - "incentivare", "incentive", - "incentivate", "incentive", - "incentivice", "incentive", - "incentivies", "incentives", - "incidencies", "incidence", - "incidentaly", "incidentally", - "incidential", "incidental", - "inclanation", "inclination", - "inclenation", "inclination", - "inclinacion", "inclination", - "inclinaison", "inclination", - "incognition", "incognito", - "incoherrent", "incoherent", - "incompatble", "incompatible", - "incompatent", "incompetent", - "incompetant", "incompetent", - "incompitent", "incompetent", - "incompotent", "incompetent", - "incomptable", "incompatible", - "inconsisent", "inconsistent", - "inconveniet", "inconvenient", - "incoroprate", "incorporate", - "incorparate", "incorporate", - "incorperate", "incorporate", - "incorporare", "incorporate", - "incorported", "incorporated", - "incorprates", "incorporates", - "incorproate", "incorporated", - "incramental", "incremental", - "increadible", "incredible", - "incrediable", "incredible", - "incrediably", "incredibly", - "incredibile", "incredible", - "incredibily", "incredibly", - "incredibley", "incredibly", - "incrememnts", "increments", - "incremenets", "increments", - "incrementas", "increments", - "incremently", "incremental", - "incrementos", "increments", - "incrimental", "incremental", - "inctroduced", "introduced", - "indefinetly", "indefinitely", - "indefininte", "indefinite", - "indefinitly", "indefinitely", - "indepdenent", "independents", - "indepedence", "independence", - "indepednent", "independents", - "independant", "independent", - "independece", "independence", - "independens", "independents", - "independetn", "independents", - "independets", "independents", - "independnet", "independents", - "indepentend", "independents", - "indepentent", "independent", - "indianapols", "indianapolis", - "indicateurs", "indicates", - "indicatiors", "indicators", - "indictement", "indictment", - "indifferant", "indifferent", - "indiffernce", "indifference", - "indigeneous", "indigenous", - "indigenious", "indigenous", - "indigenuous", "indigenous", - "indigineous", "indigenous", - "indipendent", "independent", - "indirectely", "indirectly", - "individiual", "individual", - "individuais", "individuals", - "individualy", "individually", - "individuati", "individuality", - "individuels", "individuals", - "indivuduals", "individuals", - "industriels", "industries", - "ineffecitve", "ineffective", - "ineffektive", "ineffective", - "inefficeint", "inefficient", - "inefficiant", "inefficient", - "ineffictive", "ineffective", - "ineffizient", "inefficient", - "inequallity", "inequality", - "inevitabile", "inevitable", - "inevitabily", "inevitably", - "inevitabley", "inevitably", - "inevitablly", "inevitably", - "inexpencive", "inexpensive", - "inexpenisve", "inexpensive", - "inexperiece", "inexperience", - "inexperince", "inexperience", - "inexplicaby", "inexplicably", - "infallibale", "infallible", - "infallibile", "infallible", - "infectation", "infestation", - "inferioirty", "inferiority", - "infestating", "infestation", - "infilitrate", "infiltrate", - "infiltartor", "infiltrator", - "infiltraron", "infiltrator", - "infiltrarte", "infiltrate", - "infiltrater", "infiltrator", - "infiltratie", "infiltrate", - "infiltrerat", "infiltrate", - "infinitelly", "infinitely", - "infintrator", "infiltrator", - "inflamation", "inflammation", - "inflatabale", "inflatable", - "inflitrator", "infiltrator", - "influancing", "influencing", - "influencial", "influential", - "influencian", "influencing", - "influenting", "influencing", - "influentual", "influential", - "influincing", "influencing", - "infograhpic", "infographic", - "infograpgic", "infographic", - "infogrpahic", "infographic", - "informacion", "information", - "informatice", "informative", - "informatief", "informative", - "informatiei", "informative", - "informatike", "informative", - "informativo", "information", - "informitive", "informative", - "infrigement", "infringement", - "infringeing", "infringing", - "infromation", "information", - "infromative", "informative", - "infulential", "influential", - "ingerdients", "ingredients", - "ingrediants", "ingredients", - "ingreidents", "ingredient", - "ingriedents", "ingredient", - "inhabitents", "inhabitants", - "inheirtance", "inheritance", - "inheratance", "inheritance", - "inheretance", "inheritance", - "inheritence", "inheritance", - "inhertiance", "inheritance", - "initaitives", "initiatives", - "initalisers", "initialisers", - "initalising", "initialising", - "initalizers", "initializers", - "initalizing", "initializing", - "initiaitive", "initiative", - "inititiaves", "initiatives", - "innocenters", "innocents", - "innocentius", "innocents", - "innoculated", "inoculated", - "inpsiration", "inspiration", - "inquisicion", "inquisition", - "inquisistor", "inquisitor", - "inquisiting", "inquisition", - "inquisitior", "inquisitor", - "inquisitivo", "inquisition", - "inquizition", "inquisition", - "insecurites", "insecurities", - "insensative", "insensitive", - "insensetive", "insensitive", - "insentitive", "insensitive", - "insepctions", "inspections", - "inseperable", "inseparable", - "insipration", "inspiration", - "insitutions", "institutions", - "insparation", "inspiration", - "inspecticon", "inspection", - "inspectoras", "inspectors", - "insperation", "inspiration", - "inspiracion", "inspiration", - "inspirating", "inspiration", - "inspriation", "inspiration", - "instalation", "installation", - "instalement", "installment", - "installatin", "installations", - "installeert", "installer", - "installemnt", "installment", - "installling", "installing", - "installmant", "installment", - "instanciate", "instantiate", - "instantaneu", "instantaneous", - "institucion", "institution", - "institutiei", "institute", - "instituttet", "institute", - "instraments", "instruments", - "instruccion", "instruction", - "instruciton", "instruction", - "instructers", "instructors", - "instructior", "instructor", - "instructios", "instructors", - "instructivo", "instruction", - "instructons", "instructors", - "instruktion", "instruction", - "instrumenal", "instrumental", - "instrumetal", "instrumental", - "insturction", "instruction", - "insturctors", "instructors", - "insturments", "instruments", - "instutition", "institution", - "instutution", "institution", - "insufficent", "insufficient", - "insuinating", "insinuating", - "insuniating", "insinuating", - "insurgencey", "insurgency", - "intangiable", "intangible", - "intangibile", "intangible", - "inteferring", "interfering", - "integracion", "integration", - "integratron", "integration", - "integrering", "interfering", - "intelectual", "intellectual", - "inteligence", "intelligence", - "intellectul", "intellectuals", - "intellectus", "intellectuals", - "intellecual", "intellectual", - "intellegent", "intelligent", - "intelligant", "intelligent", - "intencional", "intentional", - "intentionly", "intentional", - "interaccion", "interaction", - "interactice", "interactive", - "interacties", "interacts", - "interactifs", "interacts", - "interactins", "interacts", - "interactios", "interacts", - "interactivo", "interaction", - "interactons", "interacts", - "interaktion", "interaction", - "interaktive", "interactive", - "interasting", "interacting", - "intercation", "integration", - "interceptin", "interception", - "intercoarse", "intercourse", - "intercource", "intercourse", - "interecting", "interacting", - "interection", "interaction", - "interelated", "interrelated", - "interersted", "interpreted", - "interesring", "interfering", - "interessted", "interested", - "interferece", "interference", - "interferens", "interferes", - "interferire", "interfere", - "interfernce", "interference", - "interferred", "interfere", - "interferres", "interferes", - "intergation", "integration", - "intergrated", "integrated", - "intermedate", "intermediate", - "intermedite", "intermediate", - "intermitent", "intermittent", - "internation", "international", - "interneters", "internets", - "internetese", "internets", - "internetest", "internets", - "interneting", "interesting", - "internetors", "internets", - "internettes", "internets", - "interperted", "interpreted", - "interperter", "interpreter", - "interprered", "interpreter", - "interpretor", "interpreter", - "interratial", "interracial", - "interresing", "interfering", - "interrogato", "interrogation", - "interrputed", "interrupted", - "interruping", "interrupting", - "interruptes", "interrupts", - "interruptis", "interrupts", - "intersecton", "intersection", - "interstelar", "interstellar", - "intertained", "intertwined", - "intertvined", "intertwined", - "intertwyned", "intertwined", - "intervalles", "intervals", - "intervation", "integration", - "interveiwed", "interviewed", - "interveiwer", "interviewer", - "intervenion", "intervening", - "intervenire", "intervene", - "interventie", "intervene", - "intervewing", "intervening", - "interviened", "interviewed", - "interviewes", "interviews", - "interviewie", "interviewer", - "intervining", "intervening", - "interwebers", "interwebs", - "interwiever", "interviewer", - "intestinces", "intestines", - "inticracies", "intricacies", - "intimadated", "intimidated", - "intimidades", "intimidated", - "intimidante", "intimidate", - "intimidatie", "intimidated", - "intimidatin", "intimidation", - "intimidaton", "intimidation", - "intimidiate", "intimidate", - "intiminated", "intimidated", - "intimitaded", "intimidated", - "intimitated", "intimidated", - "intiutively", "intuitively", - "intoleranse", "intolerance", - "intolerante", "intolerance", - "intolerence", "intolerance", - "intolernace", "intolerance", - "intolorance", "intolerance", - "intolorence", "intolerance", - "intorducing", "introducing", - "intorverted", "introverted", - "intoxicatin", "intoxication", - "intoxicaton", "intoxication", - "intoxinated", "intoxicated", - "intoxocated", "intoxicated", - "intracacies", "intricacies", - "intracicies", "intricacies", - "intraverted", "introverted", - "intrecacies", "intricacies", - "intrepreted", "interpreted", - "intrepreter", "interpreter", - "intrerupted", "interrupted", - "intricasies", "intricacies", - "intricicies", "intricacies", - "intrigueing", "intriguing", - "intrinsisch", "intrinsic", - "introducion", "introduction", - "introducted", "introduced", - "introductie", "introduce", - "introvertie", "introverted", - "introvertis", "introverts", - "intruducing", "introducing", - "intrumental", "instrumental", - "intuatively", "intuitively", - "intuitevely", "intuitively", - "intuitivley", "intuitively", - "intuituvely", "intuitively", - "inutitively", "intuitively", - "invaldiates", "invalidates", - "invalidades", "invalidates", - "invalidante", "invalidate", - "invariabley", "invariably", - "invariablly", "invariably", - "inventiones", "inventions", - "invesitgate", "investigate", - "investagate", "investigate", - "investiagte", "investigate", - "investigare", "investigate", - "invincibile", "invincible", - "invincinble", "invincible", - "invisibiity", "invisibility", - "invisibiliy", "invisibility", - "involantary", "involuntary", - "involentary", "involuntary", - "involintary", "involuntary", - "involontary", "involuntary", - "involunatry", "involuntary", - "invulnerabe", "invulnerable", - "invulnerble", "invulnerable", - "iresistable", "irresistible", - "iresistably", "irresistibly", - "iresistible", "irresistible", - "iresistibly", "irresistibly", - "irrationaly", "irrationally", - "irrationnal", "irrational", - "islamisists", "islamists", - "islamisters", "islamists", - "islamistisk", "islamists", - "isntruments", "instruments", - "jacksonvile", "jacksonville", - "jailbroaken", "jailbroken", - "jailbrocken", "jailbroken", - "jounralists", "journalists", - "jouranlists", "journalists", - "journalisim", "journalism", - "journalistc", "journalistic", - "journolists", "journalists", - "judegmental", "judgemental", - "judgamental", "judgemental", - "judgementle", "judgemental", - "judgementsl", "judgemental", - "judgenental", "judgemental", - "jugdemental", "judgemental", - "juggernaugt", "juggernaut", - "juggernault", "juggernaut", - "juggernaunt", "juggernaut", - "justifyable", "justifiable", - "kidnappning", "kidnapping", - "kidnappping", "kidnapping", - "kilometeres", "kilometers", - "kindergaten", "kindergarten", - "knowledgabe", "knowledgable", - "knowledgble", "knowledgable", - "kryptoninte", "kryptonite", - "lacklusture", "lackluster", - "laughablely", "laughably", - "legalizaing", "legalizing", - "legalizaton", "legalization", - "legalizeing", "legalizing", - "legenadries", "legendaries", - "legendaires", "legendaries", - "legendarios", "legendaries", - "legendarisk", "legendaries", - "legendaryes", "legendaries", - "legenderies", "legendaries", - "legilsation", "legislation", - "legislacion", "legislation", - "legislativo", "legislation", - "legistation", "legislation", - "legistative", "legislative", - "legistators", "legislators", - "legitematly", "legitimately", - "legitimancy", "legitimacy", - "legitimatcy", "legitimacy", - "legitimatly", "legitimately", - "legitimetly", "legitimately", - "legnedaries", "legendaries", - "lengedaries", "legendaries", - "liberalisim", "liberalism", - "liberatrian", "libertarians", - "libertairan", "libertarians", - "libertarain", "libertarian", - "libertarias", "libertarians", - "libertarien", "libertarian", - "libertaryan", "libertarian", - "libertatian", "libertarian", - "liberterian", "libertarian", - "libguistics", "linguistics", - "libretarian", "libertarian", - "lieutennant", "lieutenant", - "lieutentant", "lieutenant", - "lightenning", "lightening", - "lightenting", "lightening", - "lightheared", "lighthearted", - "lightheated", "lighthearted", - "lightweigth", "lightweight", - "lightwieght", "lightweight", - "lightwright", "lightweight", - "ligthweight", "lightweight", - "limitaitons", "limitation", - "linguisitcs", "linguistics", - "linguisitic", "linguistic", - "lingusitics", "linguistics", - "lithuaninan", "lithuania", - "littlefiger", "littlefinger", - "littlefiner", "littlefinger", - "lockscreeen", "lockscreen", - "longevitity", "longevity", - "lotharingen", "lothringen", - "louisvillle", "louisville", - "maginficent", "magnificent", - "magneficent", "magnificent", - "magnicifent", "magnificent", - "magnifacent", "magnificent", - "magnifecent", "magnificent", - "magnificant", "magnificent", - "magnitudine", "magnitude", - "maintainted", "maintained", - "maintanance", "maintenance", - "maintanence", "maintenance", - "maintenence", "maintenance", - "maintianing", "maintaining", - "maintinaing", "maintaining", - "maintinance", "maintenance", - "maintinence", "maintenance", - "malfonction", "malfunction", - "malfucntion", "malfunction", - "malfunciton", "malfunction", - "malfuncting", "malfunction", - "malfunktion", "malfunction", - "malpractise", "malpractice", - "malpractive", "malpractice", - "maneouvring", "manoeuvring", - "manifestado", "manifesto", - "manifestano", "manifesto", - "manifestato", "manifesto", - "manifestion", "manifesto", - "manifestior", "manifesto", - "manifestons", "manifests", - "manifestors", "manifests", - "manipluated", "manipulated", - "manipualted", "manipulated", - "manipulatie", "manipulative", - "manipulatin", "manipulation", - "manipulaton", "manipulation", - "maniuplated", "manipulated", - "mannerisims", "mannerisms", - "manslaugher", "manslaughter", - "manslaugter", "manslaughter", - "manufacters", "manufactures", - "manufacteur", "manufactures", - "manufactued", "manufactured", - "manufactuer", "manufacture", - "manufacturs", "manufactures", - "manufacuter", "manufacture", - "manufacutre", "manufactures", - "manufatured", "manufactured", - "manupilated", "manipulated", - "marganilize", "marginalized", - "marhsmallow", "marshmallow", - "marijuannas", "marijuana", - "markerplace", "marketplace", - "marketpalce", "marketplace", - "marshamllow", "marshmallow", - "marshmalows", "marshmallows", - "masculanity", "masculinity", - "masculenity", "masculinity", - "masrhmallow", "marshmallow", - "mastermined", "mastermind", - "masterpeace", "masterpiece", - "masterpeice", "masterpiece", - "mastrubated", "masturbated", - "mastrubates", "masturbate", - "masturabted", "masturbated", - "masturbaing", "masturbating", - "masturbarte", "masturbate", - "masturbathe", "masturbated", - "masturbatie", "masturbated", - "masturbatin", "masturbation", - "masturbaton", "masturbation", - "masturbsted", "masturbated", - "masturpiece", "masterpiece", - "masuclinity", "masculinity", - "matchamking", "matchmaking", - "materalists", "materialist", - "materialsim", "materialism", - "mathamatics", "mathematics", - "mathcmaking", "matchmaking", - "mathemagics", "mathematics", - "mathemetics", "mathematics", - "mathimatics", "mathematics", - "matieralism", "materialism", - "maybelleine", "maybelline", - "maybelliene", "maybelline", - "maybellinne", "maybelline", - "maybellline", "maybelline", - "mdifielders", "midfielders", - "meatballers", "meatballs", - "mecernaries", "mercenaries", - "mechanicaly", "mechanically", - "mechanichal", "mechanical", - "mechaniclly", "mechanically", - "mechanicsms", "mechanisms", - "mechanisims", "mechanism", - "mechanismus", "mechanisms", - "medicaitons", "medications", - "medicineras", "medicines", - "meditatiing", "meditating", - "meditationg", "meditating", - "mentionning", "mentioning", - "mercanaries", "mercenaries", - "mercaneries", "mercenaries", - "mercenaires", "mercenaries", - "mercenarias", "mercenaries", - "mercenarios", "mercenaries", - "merceneries", "mercenaries", - "merchandice", "merchandise", - "merchandies", "merchandise", - "merchanidse", "merchandise", - "merchanters", "merchants", - "merchendise", "merchandise", - "merchindise", "merchandise", - "mercinaries", "mercenaries", - "mercineries", "mercenaries", - "metabolisim", "metabolism", - "metabolitic", "metabolic", - "metaphisics", "metaphysics", - "metaphorial", "metaphorical", - "metaphorics", "metaphors", - "metaphsyics", "metaphysics", - "metaphyiscs", "metaphysics", - "methodoligy", "methodology", - "metholodogy", "methodology", - "metropolian", "metropolitan", - "metropolies", "metropolis", - "metropollis", "metropolis", - "metropolois", "metropolis", - "micorcenter", "microcenter", - "micorphones", "microphones", - "microcender", "microcenter", - "microcentre", "microcenter", - "microcentro", "microcenter", - "microhpones", "microphones", - "microscrope", "microscope", - "microwavees", "microwaves", - "microwavers", "microwaves", - "midfeilders", "midfielders", - "midfiedlers", "midfielders", - "midfileders", "midfielders", - "midifelders", "midfielders", - "millienaire", "millionaire", - "millionairs", "millionaires", - "millionarie", "millionaire", - "millioniare", "millionaire", - "mindlessely", "mindlessly", - "mindlessley", "mindlessly", - "minimalstic", "minimalist", - "ministerens", "ministers", - "ministerios", "ministers", - "minneaoplis", "minneapolis", - "minneaplois", "minneapolis", - "minniapolis", "minneapolis", - "miraculaous", "miraculous", - "miraculosly", "miraculously", - "miraculousy", "miraculously", - "mircocenter", "microcenter", - "mircophones", "microphones", - "mircoscopic", "microscopic", - "miscairrage", "miscarriage", - "miscarraige", "miscarriage", - "miscarridge", "miscarriage", - "miscarriege", "miscarriage", - "mischeivous", "mischievous", - "mischevious", "mischievous", - "misdameanor", "misdemeanor", - "misdeamenor", "misdemeanor", - "misdemeaner", "misdemeanor", - "misdemenaor", "misdemeanor", - "misdemenors", "misdemeanors", - "misdimeanor", "misdemeanor", - "misdomeanor", "misdemeanor", - "miserablely", "miserably", - "misfortunte", "misfortune", - "misimformed", "misinformed", - "misinterept", "misinterpret", - "misinterpet", "misinterpret", - "misoginysts", "misogynist", - "misognyists", "misogynist", - "misogyinsts", "misogynist", - "misogynisic", "misogynistic", - "misogynistc", "misogynistic", - "misogynstic", "misogynist", - "missionaire", "missionaries", - "missionairy", "missionary", - "missionares", "missionaries", - "missionaris", "missionaries", - "missionarry", "missionary", - "missionnary", "missionary", - "mississipis", "mississippi", - "misspeeling", "misspelling", - "misspellled", "misspelled", - "mistakengly", "mistakenly", - "mistakently", "mistakenly", - "moderatedly", "moderately", - "moderateurs", "moderates", - "moderatorin", "moderation", - "modificaton", "modification", - "moisterizer", "moisturizer", - "moistruizer", "moisturizer", - "moisturizng", "moisturizing", - "moisturizor", "moisturizer", - "moistutizer", "moisturizer", - "moisutrizer", "moisturizer", - "moleculaire", "molecular", - "molestating", "molestation", - "moleststion", "molestation", - "momemtarily", "momentarily", - "momentairly", "momentarily", - "momentaraly", "momentarily", - "momentarely", "momentarily", - "momenterily", "momentarily", - "monestaries", "monasteries", - "monitoreada", "monitored", - "monitoreado", "monitored", - "monogameous", "monogamous", - "monolitihic", "monolithic", - "monopollies", "monopolies", - "monstorsity", "monstrosity", - "monstrasity", "monstrosity", - "monstrisity", "monstrosity", - "monstrocity", "monstrosity", - "monstrosoty", "monstrosity", - "monstrostiy", "monstrosity", - "monumentaal", "monumental", - "monumentais", "monuments", - "monumentals", "monuments", - "monumentous", "monuments", - "mositurizer", "moisturizer", - "mosntrosity", "monstrosity", - "motehrboard", "motherboard", - "mothebroard", "motherboards", - "motherbaord", "motherboard", - "motherboads", "motherboards", - "motherboars", "motherboards", - "motherborad", "motherboard", - "motherbords", "motherboards", - "motherobard", "motherboards", - "mothreboard", "motherboards", - "motivatinal", "motivational", - "motorcicles", "motorcycles", - "motorcylces", "motorcycles", - "mouthpeices", "mouthpiece", - "mulitplayer", "multiplayer", - "mulitplying", "multiplying", - "multipalyer", "multiplayer", - "multiplater", "multiplayer", - "multiplebgs", "multiples", - "multipleies", "multiples", - "multitaskng", "multitasking", - "multitudine", "multitude", - "multiverese", "multiverse", - "multyplayer", "multiplayer", - "multyplying", "multiplying", - "muncipality", "municipality", - "murdererous", "murderers", - "musicallity", "musically", - "mutliplayer", "multiplayer", - "mutliplying", "multiplying", - "mysterieuse", "mysteries", - "mysteriosly", "mysteriously", - "mysteriouly", "mysteriously", - "mysteriousy", "mysteriously", - "napoleonian", "napoleonic", - "narcisissim", "narcissism", - "narcisissts", "narcissist", - "narcisscism", "narcissism", - "narcisscist", "narcissist", - "narcissisim", "narcissism", - "narcississm", "narcissism", - "narcississt", "narcissist", - "narcissistc", "narcissistic", - "narcissitic", "narcissistic", - "narcisssism", "narcissism", - "narcisssist", "narcissist", - "narcissstic", "narcissist", - "natioanlist", "nationalist", - "nationailty", "nationality", - "nationalesl", "nationals", - "nationalisn", "nationals", - "nationalite", "nationalist", - "nationalits", "nationalist", - "nationalizm", "nationalism", - "nationalsim", "nationalism", - "neccesarily", "necessarily", - "necessairly", "necessarily", - "necessaties", "necessities", - "necesseraly", "necessarily", - "necesserily", "necessarily", - "necessiates", "necessities", - "necessitive", "necessities", - "neckbeardos", "neckbeards", - "neckbeardus", "neckbeards", - "necormancer", "necromancer", - "necromamcer", "necromancer", - "necromanser", "necromancer", - "necromencer", "necromancer", - "needlessley", "needlessly", - "negativeity", "negativity", - "negativelly", "negatively", - "negativitiy", "negativity", - "negiotating", "negotiating", - "negligiable", "negligible", - "negociating", "negotiating", - "negociation", "negotiation", - "negoitating", "negotiating", - "negoitation", "negotiation", - "negotiatied", "negotiate", - "negotiative", "negotiate", - "negotiatons", "negotiations", - "neigborhood", "neighborhood", - "neigbouring", "neighbouring", - "neighborhod", "neighborhood", - "neighbourgs", "neighbours", - "neighouring", "neighboring", - "nercomancer", "necromancer", - "nessasarily", "necessarily", - "neurologial", "neurological", - "neurosciene", "neuroscience", - "neutrallity", "neutrality", - "neverthelss", "nevertheless", - "neverthless", "nevertheless", - "newspapaers", "newspapers", - "newspappers", "newspapers", - "nieghboring", "neighboring", - "nightmarket", "nightmare", - "nonsencical", "nonsensical", - "nonsenscial", "nonsensical", - "nonsensicle", "nonsensical", - "normallized", "normalized", - "northwesten", "northwestern", - "nostalgisch", "nostalgic", - "noteworthly", "noteworthy", - "noticeabley", "noticeably", - "notificaton", "notification", - "notoriuosly", "notoriously", - "numericable", "numerical", - "nurtitional", "nutritional", - "nutricional", "nutritional", - "nutrutional", "nutritional", - "obamination", "abomination", - "obersvation", "observation", - "obilterated", "obliterated", - "objectivety", "objectivity", - "objectivify", "objectivity", - "objectivily", "objectivity", - "objectivley", "objectively", - "obliberated", "obliterated", - "obliderated", "obliterated", - "obligerated", "obliterated", - "oblitarated", "obliterated", - "obliteraded", "obliterated", - "obliterared", "obliterated", - "oblitirated", "obliterated", - "oblitorated", "obliterated", - "obliverated", "obliterated", - "observacion", "observation", - "observaiton", "observant", - "observasion", "observations", - "observating", "observation", - "observerats", "observers", - "obsessivley", "obsessive", - "obstruccion", "obstruction", - "obstruktion", "obstruction", - "obsturction", "obstruction", - "obversation", "observation", - "ocasionally", "occasionally", - "ocassionaly", "occasionally", - "occasionals", "occasions", - "occasionaly", "occasionally", - "occasionnal", "occasional", - "occassional", "occasional", - "occassioned", "occasioned", - "occurrances", "occurrences", - "offensivley", "offensively", - "offesnively", "offensively", - "officiallly", "officially", - "olbiterated", "obliterated", - "omniscienct", "omniscient", - "operacional", "operational", - "operasional", "operational", - "operationel", "operational", - "oppresssing", "oppressing", - "oppresssion", "oppression", - "opprotunity", "opportunity", - "optimisitic", "optimistic", - "optimizaton", "optimization", - "orchestraed", "orchestrated", - "orchestrial", "orchestra", - "oreintation", "orientation", - "organisaton", "organisation", - "organiserad", "organised", - "organistion", "organisation", - "organizarea", "organizer", - "organizarem", "organizer", - "organizarme", "organizer", - "organizarte", "organizer", - "organiztion", "organization", - "oridinarily", "ordinarily", - "orientacion", "orientation", - "originially", "originally", - "originnally", "originally", - "origniality", "originality", - "ostensiably", "ostensibly", - "ostensibily", "ostensibly", - "outclasssed", "outclassed", - "outnunbered", "outnumbered", - "outperfroms", "outperform", - "outpreforms", "outperform", - "outrageosly", "outrageously", - "outrageouly", "outrageously", - "outragerous", "outrageous", - "outskirters", "outskirts", - "outsorucing", "outsourcing", - "outsourcade", "outsourced", - "outsoursing", "outsourcing", - "overbraking", "overbearing", - "overcapping", "overlapping", - "overcharing", "overarching", - "overclcoked", "overclocked", - "overclicked", "overclocked", - "overcloaked", "overclocked", - "overclocing", "overclocking", - "overclockig", "overclocking", - "overclocled", "overclocked", - "overcomeing", "overcoming", - "overcomming", "overcoming", - "overeaching", "overarching", - "overfapping", "overlapping", - "overheading", "overheating", - "overhooking", "overlooking", - "overhwelmed", "overwhelmed", - "overkapping", "overlapping", - "overklocked", "overclocked", - "overlapsing", "overlapping", - "overlcocked", "overclocked", - "overlcoking", "overlooking", - "overlooming", "overlooking", - "overloooked", "overlooked", - "overlordess", "overlords", - "overmapping", "overlapping", - "overpooling", "overlooking", - "overpovered", "overpowered", - "overpoweing", "overpowering", - "overreacing", "overreacting", - "overreactin", "overreaction", - "overreacton", "overreaction", - "overshaddow", "overshadowed", - "overshadowd", "overshadowed", - "overtapping", "overlapping", - "overthining", "overthinking", - "overthinkig", "overthinking", - "overvlocked", "overclocked", - "overwealmed", "overwhelmed", - "overwelming", "overwhelming", - "overwhelemd", "overwhelmed", - "overwhelimg", "overwhelm", - "overwheling", "overwhelming", - "overwhemled", "overwhelmed", - "overwhlemed", "overwhelmed", - "overwritted", "overwrite", - "pakistanais", "pakistani", - "pakistanezi", "pakistani", - "palceholder", "placeholder", - "palesitnian", "palestinians", - "palestenian", "palestinian", - "palestinain", "palestinians", - "palestinans", "palestinians", - "palestinier", "palestine", - "palistinian", "palestinian", - "palythrough", "playthrough", - "papanicalou", "papanicolaou", - "parachutage", "parachute", - "paragraphes", "paragraphs", - "paramedicks", "paramedics", - "paramedicos", "paramedics", - "parameteres", "parameters", - "paranthesis", "parenthesis", - "parapharsed", "paraphrase", - "paraprhased", "paraphrase", - "parasitisme", "parasites", - "parenthasis", "parenthesis", - "parenthesys", "parentheses", - "parenthises", "parenthesis", - "parenthisis", "parenthesis", - "parliamenty", "parliamentary", - "parntership", "partnership", - "parrallelly", "parallelly", - "partecipant", "participant", - "partecipate", "participate", - "parternship", "partnership", - "partiarchal", "patriarchal", - "particapate", "participate", - "particiapte", "participate", - "participait", "participant", - "participans", "participants", - "participare", "participate", - "participatd", "participant", - "participati", "participant", - "participats", "participant", - "participent", "participant", - "particpiate", "participated", - "particually", "particularly", - "particulaly", "particularly", - "particulary", "particularly", - "partnetship", "partnership", - "partonizing", "patronizing", - "passionatly", "passionately", - "passionetly", "passionately", - "passionnate", "passionate", - "passporters", "passports", - "pathologial", "pathological", - "patriarchia", "patriarchal", - "patriarcial", "patriarchal", - "patriarical", "patriarchal", - "patriotisch", "patriotic", - "patriotisim", "patriotism", - "patriottism", "patriotism", - "patronozing", "patronizing", - "peacefullly", "peacefully", - "pedestirans", "pedestrians", - "pedestrains", "pedestrians", - "pedophilies", "pedophile", - "pedophilles", "pedophile", - "penetracion", "penetration", - "penetrading", "penetrating", - "penetrarion", "penetration", - "penninsular", "peninsular", - "pennsylvnia", "pennsylvania", - "pepperocini", "pepperoni", - "percantages", "percentages", - "percautions", "precautions", - "percentille", "percentile", - "percpetions", "perceptions", - "percusssion", "percussion", - "perdicament", "predicament", - "perdictable", "predictable", - "perdictions", "predictions", - "perephirals", "peripherals", - "pereptually", "perpetually", - "perferences", "preferences", - "perfomrance", "performances", - "perforamnce", "performances", - "performaces", "performances", - "performacne", "performances", - "performanes", "performances", - "performanse", "performances", - "performence", "performance", - "performnace", "performances", - "perfromance", "performance", - "perhiperals", "peripherals", - "perihperals", "peripherals", - "periodicaly", "periodically", - "periperhals", "peripherals", - "periphereal", "peripheral", - "peripherial", "peripheral", - "periphirals", "peripherals", - "periphreals", "peripherals", - "periphrials", "peripherals", - "perjorative", "pejorative", - "perliminary", "preliminary", - "permamently", "permanently", - "permanantly", "permanently", - "permaturely", "prematurely", - "permenantly", "permanently", - "permenently", "permanently", - "perminantly", "permanently", - "perminently", "permanently", - "permisisons", "permissions", - "permissable", "permissible", - "permisssion", "permissions", - "pernamently", "permanently", - "perosnality", "personality", - "perparation", "preparation", - "perpatrated", "perpetrated", - "perpatrator", "perpetrator", - "perpatuated", "perpetuated", - "perpatuates", "perpetuates", - "perpertated", "perpetuated", - "perpertator", "perpetrators", - "perpetraded", "perpetrated", - "perpetrador", "perpetrator", - "perpetraron", "perpetrator", - "perpetrater", "perpetrator", - "perpetuaded", "perpetuated", - "perpetutate", "perpetuate", - "perpetuties", "perpetuates", - "perpitrated", "perpetrated", - "perpitrator", "perpetrator", - "perpretated", "perpetrated", - "perpretator", "perpetrators", - "perpsective", "perspective", - "perputrator", "perpetrator", - "perputually", "perpetually", - "perputuated", "perpetuated", - "perputuates", "perpetuates", - "perrogative", "prerogative", - "persceptive", "perspectives", - "persectuion", "persecution", - "persecucion", "persecution", - "persecusion", "persecution", - "persecutted", "persecuted", - "persepctive", "perspective", - "persicution", "persecution", - "persistance", "persistence", - "persistante", "persistent", - "persistense", "persistence", - "persistente", "persistence", - "personhoood", "personhood", - "perspecitve", "perspective", - "perspectief", "perspective", - "perspektive", "perspective", - "persuassion", "persuasion", - "persuassive", "persuasive", - "persucution", "persecution", - "persumption", "presumption", - "pertubation", "perturbation", - "pessimestic", "pessimistic", - "pharamcists", "pharmacist", - "phenomenona", "phenomena", - "philadelpha", "philadelphia", - "philadelpia", "philadelphia", - "philiphines", "philippines", - "philippenes", "philippines", - "philippenis", "philippines", - "philippides", "philippines", - "philippinas", "philippines", - "philippinos", "philippines", - "philisopher", "philosopher", - "phillipines", "philippines", - "philosipher", "philosopher", - "philosopers", "philosophers", - "philosophae", "philosopher", - "philosophia", "philosophical", - "philosopies", "philosophies", - "philosphies", "philosophies", - "philospoher", "philosopher", - "photograhed", "photographed", - "photograher", "photographer", - "photograhic", "photographic", - "photograhpy", "photography", - "photograped", "photographed", - "photograper", "photographer", - "photograpgh", "photographs", - "photograpic", "photographic", - "photogrpahs", "photographs", - "photogrpahy", "photography", - "physcedelic", "psychedelic", - "physciatric", "psychiatric", - "physcopaths", "psychopaths", - "piankillers", "painkillers", - "pilgrimmage", "pilgrimage", - "pitchforcks", "pitchforks", - "pitchforkes", "pitchforks", - "plaestinian", "palestinian", - "plagiariasm", "plagiarism", - "planeswaker", "planeswalker", - "planeswaler", "planeswalker", - "planeswalkr", "planeswalker", - "platfromers", "platformer", - "playhtrough", "playthrough", - "playthorugh", "playthrough", - "playthourgh", "playthrough", - "playthroguh", "playthroughs", - "playthrougs", "playthroughs", - "playthrouhg", "playthroughs", - "playthtough", "playthrough", - "playtrhough", "playthrough", - "ploretariat", "proletariat", - "policitally", "politically", - "policitians", "politicians", - "politicains", "politicians", - "politicanti", "politician", - "politiciens", "politicians", - "politiicans", "politician", - "polititians", "politicians", - "polyphonyic", "polyphonic", - "pomegranite", "pomegranate", - "popluations", "populations", - "poportional", "proportional", - "popoulation", "population", - "porjectiles", "projectiles", - "porletariat", "proletariat", - "pornagraphy", "pornography", - "pornograghy", "pornography", - "pornograhpy", "pornography", - "pornograpgy", "pornography", - "pornogrophy", "pornography", - "pornogrpahy", "pornography", - "porportions", "proportions", - "portestants", "protestants", - "portuguease", "portuguese", - "portuguesse", "portuguese", - "positionial", "positional", - "positionnal", "positional", - "positionned", "positioned", - "positiveity", "positivity", - "positiviely", "positively", - "positivisme", "positives", - "positivisty", "positivity", - "positivitey", "positivity", - "positivitiy", "positivity", - "possesseurs", "possesses", - "possesssion", "possessions", - "possestions", "possessions", - "possiblilty", "possibility", - "potencially", "potentially", - "potentailly", "potentially", - "powerhourse", "powerhouse", - "powerlifing", "powerlifting", - "powerliftng", "powerlifting", - "pracitcally", "practically", - "practicarlo", "practical", - "practioners", "practitioners", - "practitions", "practitioners", - "pragmatisch", "pragmatic", - "precausions", "precautions", - "precedessor", "predecessor", - "precendence", "precedence", - "precentages", "percentages", - "preconceved", "preconceived", - "preconcieve", "preconceived", - "precuations", "precautions", - "predacessor", "predecessor", - "predecesser", "predecessor", - "predections", "predictions", - "predescesor", "predecessors", - "predesessor", "predecessors", - "predesposed", "predisposed", - "predessecor", "predecessor", - "predicatble", "predictable", - "predicement", "predicament", - "predicessor", "predecessor", - "prediciment", "predicament", - "predicitons", "predictions", - "predictible", "predictable", - "predictious", "predictions", - "predictment", "predicament", - "predisposte", "predisposed", - "predocessor", "predecessor", - "preferabbly", "preferably", - "preferabely", "preferable", - "preferabley", "preferably", - "preferablly", "preferably", - "preferances", "preferences", - "preferenser", "preferences", - "preferental", "preferential", - "preferentes", "preferences", - "preferrably", "preferably", - "preferrring", "preferring", - "preformance", "performance", - "pregnanices", "pregnancies", - "pregnencies", "pregnancies", - "pregorative", "prerogative", - "preipherals", "peripherals", - "prejudicies", "prejudice", - "preleminary", "preliminary", - "prelimanary", "preliminary", - "prelimenary", "preliminary", - "premanently", "permanently", - "prematuraly", "prematurely", - "prematurily", "prematurely", - "prematurley", "prematurely", - "premilinary", "preliminary", - "premissible", "permissible", - "premissions", "permissions", - "preorderded", "preordered", - "preorderers", "preorders", - "preparacion", "preparation", - "preperation", "preparation", - "prepetrated", "perpetrated", - "prepetrator", "perpetrator", - "prepetually", "perpetually", - "prepetuated", "perpetuated", - "prepetuates", "perpetuates", - "preporation", "preparation", - "preposterus", "preposterous", - "prerequesit", "prerequisite", - "prerequiste", "prerequisite", - "prerequites", "prerequisite", - "prerogitive", "prerogative", - "prerogotive", "prerogative", - "prescripton", "prescription", - "presecution", "persecution", - "presedintia", "presidential", - "presentaion", "presentation", - "presentatin", "presentations", - "preservaton", "preservation", - "preservered", "preserved", - "presidencey", "presidency", - "presidental", "presidential", - "presidentcy", "presidency", - "presistence", "persistence", - "presitgious", "prestigious", - "presitigous", "prestigious", - "presomption", "presumption", - "prespective", "perspective", - "pressureing", "pressuring", - "prestegious", "prestigious", - "prestigeous", "prestigious", - "prestigieus", "prestigious", - "prestigiosa", "prestigious", - "prestigiose", "prestigious", - "prestigiosi", "prestigious", - "prestigioso", "prestigious", - "prestiguous", "prestigious", - "presumabely", "presumably", - "presumabley", "presumably", - "presumptous", "presumptuous", - "presumptuos", "presumptuous", - "pretencious", "pretentious", - "pretendendo", "pretended", - "pretensious", "pretentious", - "pretentieus", "pretentious", - "prevailaing", "prevailing", - "prevailling", "prevailing", - "preventitve", "preventative", - "preventivno", "prevention", - "primatively", "primitively", - "princessses", "princesses", - "principales", "principles", - "principalis", "principals", - "principielt", "principle", - "privatizied", "privatized", - "priveledges", "privileges", - "privelleges", "privileges", - "privilegeds", "privileges", - "privilegied", "privileged", - "privilegien", "privilege", - "privilegier", "privilege", - "privilegies", "privilege", - "proactivley", "proactive", - "probabilaty", "probability", - "probabilite", "probabilities", - "probalibity", "probability", - "probelmatic", "problematic", - "problamatic", "problematic", - "problimatic", "problematic", - "problomatic", "problematic", - "proccedings", "proceedings", - "proccessing", "processing", - "proceddings", "proceedings", - "procedureal", "procedural", - "procedurial", "procedural", - "procedurile", "procedure", - "processesor", "processors", - "processeurs", "processes", - "processsors", "processors", - "procrastion", "procreation", - "procriation", "procreation", - "prodcutions", "productions", - "prodictions", "productions", - "producerats", "producers", - "producitons", "productions", - "productioin", "productions", - "productivos", "productions", - "productivty", "productivity", - "produktions", "productions", - "professinal", "professional", - "professionl", "professionals", - "professoras", "professors", - "professores", "professors", - "professorin", "profession", - "professsion", "professions", - "proficiancy", "proficiency", - "proficienct", "proficient", - "proficienty", "proficiency", - "proficinecy", "proficiency", - "profitabile", "profitable", - "progerssion", "progressions", - "progerssive", "progressives", - "programable", "programmable", - "programmare", "programmer", - "programmars", "programmers", - "programmate", "programme", - "programmets", "programmers", - "programmeur", "programmer", - "programmier", "programmer", - "programmmed", "programme", - "programmmer", "programme", - "progresison", "progressions", - "progressers", "progresses", - "progressief", "progressive", - "progressino", "progressions", - "progressivo", "progression", - "progressoin", "progressions", - "progressvie", "progressives", - "prohabition", "prohibition", - "prohibation", "prohibition", - "prohibicion", "prohibition", - "prohibiteds", "prohibits", - "prohibitied", "prohibited", - "prohibitifs", "prohibits", - "prohibitivo", "prohibition", - "prohibitons", "prohibits", - "prohibitted", "prohibited", - "projecticle", "projectile", - "projectives", "projectiles", - "projectlies", "projectiles", - "prolateriat", "proletariat", - "proletariet", "proletariat", - "proletariot", "proletariat", - "proletaryat", "proletariat", - "proleteriat", "proletariat", - "prolitariat", "proletariat", - "prologomena", "prolegomena", - "promenantly", "prominently", - "promenently", "prominently", - "prometheius", "prometheus", - "prometheous", "prometheus", - "promethesus", "prometheus", - "prometheyus", "prometheus", - "promimently", "prominently", - "prominantly", "prominently", - "prominately", "prominently", - "promiscious", "promiscuous", - "promocional", "promotional", - "promsicuous", "promiscuous", - "pronography", "pornography", - "pronoucning", "pronouncing", - "pronounched", "pronounced", - "pronunciato", "pronunciation", - "propaganada", "propaganda", - "properitary", "proprietary", - "propertiary", "proprietary", - "propertions", "proportions", - "prophechies", "prophecies", - "propiertary", "proprietary", - "propogation", "propagation", - "proponenets", "proponents", - "proponentes", "proponents", - "proporition", "proposition", - "proportians", "proportions", - "proportinal", "proportional", - "proposicion", "proposition", - "propositivo", "proposition", - "propostions", "proportions", - "propreitary", "proprietary", - "propriatary", "proprietary", - "propriatery", "proprietary", - "propriatory", "proprietary", - "proprietery", "proprietary", - "proprietory", "proprietary", - "propriotary", "proprietary", - "proprotions", "proportions", - "propsective", "prospective", - "propulstion", "propulsion", - "prosectuion", "prosecution", - "prosectuors", "prosecutors", - "prosecuters", "prosecutors", - "prosicution", "prosecution", - "prosocution", "prosecution", - "prosperious", "prosperous", - "prospertity", "prosperity", - "prospettive", "prospective", - "prostethics", "prosthetic", - "prosthethic", "prosthetic", - "prostitites", "prostitutes", - "prostitiute", "prostitute", - "prostituate", "prostitute", - "prostitudes", "prostitutes", - "prostituees", "prostitutes", - "prostituion", "prostitution", - "prostitures", "prostitutes", - "prostitutas", "prostitutes", - "prostitutie", "prostitute", - "prostitutin", "prostitution", - "prostitutke", "prostitutes", - "prostituton", "prostitution", - "prostitutos", "prostitutes", - "protability", "portability", - "protaganist", "protagonist", - "protaginist", "protagonist", - "protagnoist", "protagonist", - "protagoinst", "protagonists", - "protagonits", "protagonists", - "protagonsit", "protagonists", - "protectings", "protections", - "protectoras", "protectors", - "protectores", "protectors", - "protectrons", "protections", - "protelariat", "proletariat", - "protestents", "protestants", - "protistants", "protestants", - "protoganist", "protagonist", - "protogonist", "protagonist", - "protostants", "protestants", - "protototype", "prototype", - "provacative", "provocative", - "provacotive", "provocative", - "provicative", "provocative", - "providencie", "providence", - "provinciaal", "provincial", - "provinicial", "provincial", - "provisiones", "provisions", - "provoactive", "provocative", - "provocatief", "provocative", - "provocitive", "provocative", - "provocotive", "provocative", - "provokative", "provocative", - "pscyhedelic", "psychedelic", - "pscyhiatric", "psychiatric", - "pscyhopaths", "psychopaths", - "pshyciatric", "psychiatric", - "pshycopaths", "psychopaths", - "psychaitric", "psychiatric", - "psychedilic", "psychedelic", - "psychedleic", "psychedelics", - "psychiatist", "psychiatrist", - "psychidelic", "psychedelic", - "psychodelic", "psychedelic", - "psychopants", "psychopaths", - "psychopatch", "psychopath", - "psychopatic", "psychopathic", - "psychotisch", "psychotic", - "psychriatic", "psychiatric", - "publikation", "publication", - "punctiation", "punctuation", - "puncutation", "punctuation", - "punshiments", "punishments", - "punsihments", "punishments", - "purchaseing", "purchasing", - "purchashing", "purchasing", - "purposefuly", "purposefully", - "pyschedelic", "psychedelic", - "pyschiatric", "psychiatric", - "pyschopaths", "psychopaths", - "qaurterback", "quarterback", - "qualificato", "qualification", - "qualifieres", "qualifiers", - "quantitaive", "quantitative", - "quantitatve", "quantitative", - "quantitites", "quantities", - "quantitties", "quantities", - "quarantaine", "quarantine", - "quarantenni", "quarantine", - "quartercask", "quarterbacks", - "quesitoning", "questioning", - "questionned", "questioned", - "questonable", "questionable", - "radiaoctive", "radioactive", - "radioactice", "radioactive", - "radioactief", "radioactive", - "radioaktive", "radioactive", - "radiocative", "radioactive", - "raidoactive", "radioactive", - "reaccurring", "recurring", - "reactionair", "reactionary", - "realibility", "reliability", - "realistisch", "realistic", - "reaserchers", "researchers", - "reaserching", "researching", - "reasonabley", "reasonably", - "reasonablly", "reasonably", - "reassureing", "reassuring", - "reassurring", "reassuring", - "rebuildling", "rebuilding", - "rebuplicans", "republicans", - "reccomended", "recommended", - "receptionst", "receptionist", - "recgonition", "recognition", - "recgonizing", "recognizing", - "rechargable", "rechargeable", - "recipientes", "recipients", - "reciporcate", "reciprocate", - "recipricate", "reciprocate", - "reciprocant", "reciprocate", - "reciprocite", "reciprocate", - "recivership", "receivership", - "reclutantly", "reluctantly", - "recognicing", "recognizing", - "recognision", "recognition", - "recomending", "recommending", - "recommandes", "recommends", - "recommendes", "recommends", - "recommented", "recommended", - "reconcilled", "reconcile", - "recongition", "recognition", - "recongizing", "recognizing", - "reconsidder", "reconsider", - "recrational", "recreational", - "recrutiment", "recruitment", - "rectangluar", "rectangular", - "rectangualr", "rectangular", - "rectengular", "rectangular", - "recuritment", "recruitment", - "redundantcy", "redundancy", - "reevalulate", "reevaluate", - "reevalutate", "reevaluate", - "reevaulated", "reevaluate", - "refelctions", "reflections", - "referancing", "referencing", - "refereneced", "referenced", - "refereneces", "references", - "referincing", "referencing", - "referrences", "references", - "reflectivos", "reflections", - "refreshener", "refresher", - "refrubished", "refurbished", - "refubrished", "refurbished", - "refurbushed", "refurbished", - "regeneratin", "regeneration", - "regeneraton", "regeneration", - "registerdns", "registers", - "registeries", "registers", - "registerred", "registered", - "registraion", "registration", - "regocnition", "recognition", - "regresssion", "regression", - "regresssive", "regressive", - "regualtions", "regulations", - "regulationg", "regulating", - "regulatiors", "regulators", - "reinassance", "renaissance", - "reinforcemt", "reinforcement", - "reinfornced", "reinforced", - "reinitalise", "reinitialise", - "reinitalize", "reinitialize", - "reinstaling", "reinstalling", - "reinstallng", "reinstalling", - "reisntalled", "reinstalled", - "relaibility", "reliability", - "relatiation", "retaliation", - "relationshp", "relationships", - "relativiser", "relatives", - "relativisme", "relatives", - "relativitiy", "relativity", - "relativitly", "relativity", - "relcutantly", "reluctantly", - "relentlesly", "relentlessly", - "relentlessy", "relentlessly", - "relevations", "revelations", - "relfections", "reflections", - "religeously", "religiously", - "religionens", "religions", - "religioners", "religions", - "relpacement", "replacement", - "reluctently", "reluctantly", - "remarkabley", "remarkably", - "remarkablly", "remarkably", - "remasterred", "remastered", - "remembrence", "remembrance", - "reminescent", "reminiscent", - "reminicient", "reminiscent", - "reminiscant", "reminiscent", - "reminiscint", "reminiscent", - "reminscient", "reminiscent", - "reminsicent", "reminiscent", - "renaiisance", "renaissance", - "renaiscance", "renaissance", - "renaissanse", "renaissance", - "renaissence", "renaissance", - "renassaince", "renaissance", - "renassiance", "renaissance", - "reniassance", "renaissance", - "rennovating", "renovating", - "rennovation", "renovation", - "repalcement", "replacement", - "repbulicans", "republicans", - "repeateadly", "repeatedly", - "repectively", "respectively", - "repersented", "represented", - "replacemnet", "replacements", - "replacemnts", "replacements", - "repleacable", "replaceable", - "repositiory", "repository", - "representas", "represents", - "representes", "represents", - "represssion", "repression", - "reproducion", "reproduction", - "reproducive", "reproductive", - "repsectable", "respectable", - "repsonsible", "responsible", - "repsonsibly", "responsibly", - "republcians", "republicans", - "republician", "republican", - "republicons", "republicans", - "repuglicans", "republicans", - "requeriment", "requirement", - "requierment", "requirements", - "resemblence", "resemblance", - "resemblense", "resembles", - "reserachers", "researchers", - "reseraching", "researching", - "resgination", "resignation", - "residencial", "residential", - "residentail", "residential", - "residentual", "residential", - "resignacion", "resignation", - "resignating", "resignation", - "resignement", "resignment", - "resignition", "resignation", - "resintalled", "reinstalled", - "resistansen", "resistances", - "resistanses", "resistances", - "resistences", "resistances", - "resistnaces", "resistances", - "resoltuions", "resolutions", - "resotration", "restoration", - "resoultions", "resolutions", - "respecatble", "respectable", - "respectabil", "respectable", - "respectfuly", "respectfully", - "respectible", "respectable", - "respectivly", "respectively", - "respectuful", "respectful", - "respektable", "respectable", - "resperatory", "respiratory", - "resperitory", "respiratory", - "respiritory", "respiratory", - "respitatory", "respiratory", - "responcible", "responsible", - "responcibly", "responsibly", - "respondendo", "responded", - "responisble", "responsible", - "responisbly", "responsibly", - "responsable", "responsible", - "responsably", "responsibly", - "responsbile", "responsible", - "responsbily", "responsibly", - "responsibel", "responsibly", - "responsibil", "responsibly", - "responsivle", "responsive", - "resporatory", "respiratory", - "respository", "repository", - "respriatory", "respiratory", - "ressembling", "resembling", - "ressurected", "resurrected", - "restaraunts", "restaurants", - "restaruants", "restaurants", - "restauraunt", "restaurant", - "restaurents", "restaurants", - "resteraunts", "restaurants", - "restirction", "restriction", - "restorarion", "restoration", - "restorating", "restoration", - "restrainted", "restrained", - "restrective", "restrictive", - "restriccion", "restriction", - "restricitng", "restricting", - "restriciton", "restrictions", - "restricitve", "restrictive", - "restricteds", "restricts", - "restricters", "restricts", - "restrictied", "restrictive", - "restrictifs", "restricts", - "restrictins", "restricts", - "restrictios", "restricts", - "restrictivo", "restriction", - "restrictons", "restricts", - "restriktion", "restriction", - "restriktive", "restrictive", - "restrittive", "restrictive", - "restructing", "restricting", - "restruction", "restriction", - "restuarants", "restaurants", - "resturaunts", "restaurants", - "resurecting", "resurrecting", - "resurrecion", "resurrection", - "retailation", "retaliation", - "retalitated", "retaliated", - "retardathon", "retardation", - "retardating", "retardation", - "retardatron", "retardation", - "retartation", "retardation", - "retirbution", "retribution", - "retrebution", "retribution", - "retribucion", "retribution", - "retribuiton", "retribution", - "retributivo", "retribution", - "retribvtion", "retribution", - "retrobution", "retribution", - "retrubution", "retribution", - "revealtions", "revelations", - "revelaitons", "revelations", - "revolations", "revolutions", - "revoultions", "revolutions", - "ridiculious", "ridiculous", - "ridiculosly", "ridiculously", - "ridiculouly", "ridiculously", - "ridiculousy", "ridiculously", - "rightfullly", "rightfully", - "rolepalying", "roleplaying", - "romanticaly", "romantically", - "roundabaout", "roundabout", - "roundabount", "roundabout", - "rudimentery", "rudimentary", - "rudimentory", "rudimentary", - "ruidmentary", "rudimentary", - "sacrifacing", "sacrificing", - "sacrificare", "sacrifice", - "sacrificied", "sacrifice", - "sacrificies", "sacrifice", - "sacrifieced", "sacrificed", - "sacrifising", "sacrificing", - "sacrifizing", "sacrificing", - "salughtered", "slaughtered", - "sanctionned", "sanctioned", - "sarcastisch", "sarcastic", - "saskatchewn", "saskatchewan", - "saskatchwan", "saskatchewan", - "satisfacion", "satisfaction", - "satisfacory", "satisfactory", - "scandanavia", "scandinavia", - "scandanivia", "scandinavian", - "scandenavia", "scandinavia", - "scandianvia", "scandinavian", - "scandimania", "scandinavia", - "scandinaiva", "scandinavian", - "scandinavan", "scandinavian", - "scandivania", "scandinavian", - "scandonavia", "scandinavia", - "scarificing", "sacrificing", - "scheduleing", "scheduling", - "schedulling", "scheduling", - "schoalrship", "scholarships", - "scholarhips", "scholarship", - "scholarstic", "scholastic", - "scholership", "scholarship", - "scholorship", "scholarship", - "scientiests", "scientists", - "scnadinavia", "scandinavia", - "scrambleing", "scrambling", - "screenshoot", "screenshot", - "seamlessley", "seamlessly", - "sedentarity", "sedentary", - "seflishness", "selfishness", - "segergation", "segregation", - "segragation", "segregation", - "segregacion", "segregation", - "segretation", "segregation", - "segrigation", "segregation", - "selectivley", "selectively", - "selfeshness", "selfishness", - "senitmental", "sentimental", - "sensacional", "sensational", - "sensasional", "sensational", - "sensationel", "sensational", - "sensetional", "sensational", - "sensitivety", "sensitivity", - "sentamental", "sentimental", - "sentemental", "sentimental", - "sentenceing", "sentencing", - "sentimentos", "sentiments", - "sentimentul", "sentimental", - "separatedly", "separately", - "separatelly", "separately", - "separatisme", "separates", - "separatiste", "separates", - "sepculating", "speculating", - "serivceable", "serviceable", - "serviciable", "serviceable", - "settelement", "settlement", - "settelments", "settlements", - "settlemetns", "settlements", - "sexualizied", "sexualized", - "shakeapeare", "shakespeare", - "shakepseare", "shakespeare", - "shakesphere", "shakespeare", - "shanenigans", "shenanigans", - "shareholdes", "shareholders", - "sharpeneing", "sharpening", - "sharpenning", "sharpening", - "shatterling", "shattering", - "shatterring", "shattering", - "sheakspeare", "shakespeare", - "shenadigans", "shenanigans", - "shenanagans", "shenanigans", - "shenanagins", "shenanigans", - "shenanegans", "shenanigans", - "shenanegins", "shenanigans", - "shenangians", "shenanigans", - "shenanigens", "shenanigans", - "shenanigins", "shenanigans", - "shenenigans", "shenanigans", - "sheninigans", "shenanigans", - "shennaigans", "shenanigans", - "shortenning", "shortening", - "shortenting", "shortening", - "signficiant", "significant", - "signifantly", "significantly", - "significane", "significance", - "significato", "significant", - "signifigant", "significant", - "signifikant", "significant", - "signitories", "signatories", - "signularity", "singularity", - "similarites", "similarities", - "similarlity", "similarity", - "similiarity", "similarity", - "simluations", "simulations", - "simplefying", "simplifying", - "simplicitly", "simplicity", - "simplifiing", "simplifying", - "simplisitic", "simplistic", - "simplyifing", "simplifying", - "simualtions", "simulations", - "simulatious", "simulations", - "simultaneos", "simultaneous", - "simultaneus", "simultaneous", - "simultanous", "simultaneous", - "singluarity", "singularity", - "singualrity", "singularity", - "singulairty", "singularity", - "singularily", "singularity", - "sitautional", "situational", - "situacional", "situational", - "situationly", "situational", - "siutational", "situational", - "skatebaords", "skateboard", - "skateboader", "skateboard", - "skepticisim", "skepticism", - "skillshoots", "skillshots", - "skillshosts", "skillshots", - "slaugthered", "slaughtered", - "slefishness", "selfishness", - "sluaghtered", "slaughtered", - "smarthpones", "smartphones", - "snowboaring", "snowboarding", - "snowbolling", "snowballing", - "snowfalling", "snowballing", - "socailizing", "socializing", - "socialicing", "socializing", - "socialistes", "socialists", - "socialistos", "socialists", - "socializare", "socialize", - "sociapathic", "sociopathic", - "sociologial", "sociological", - "sociopathes", "sociopaths", - "sociopathis", "sociopaths", - "sociophatic", "sociopathic", - "solidariety", "solidarity", - "somethingis", "somethings", - "sorrounding", "surrounding", - "soundtrakcs", "soundtracks", - "southamtpon", "southampton", - "southanpton", "southampton", - "southapmton", "southampton", - "southernese", "southerners", - "southerness", "southerners", - "southernest", "southerners", - "southernors", "southerners", - "southmapton", "southampton", - "southtampon", "southampton", - "soveregnity", "sovereignty", - "sovereighty", "sovereignty", - "sovereingty", "sovereignty", - "sovereinity", "sovereignty", - "soveriegnty", "sovereignty", - "soveriengty", "sovereignty", - "soverignity", "sovereignty", - "specailists", "specialists", - "specailized", "specialized", - "specailizes", "specializes", - "specatcular", "spectacular", - "specialiced", "specialized", - "specialices", "specializes", - "specialites", "specializes", - "speciallist", "specialist", - "speciallity", "specially", - "speciallize", "specialize", - "specialzied", "specialized", - "specifcally", "specifically", - "specificaly", "specifically", - "specificato", "specification", - "specificies", "specifics", - "specifiying", "specifying", - "specilaized", "specialize", - "speciliazed", "specialize", - "spectatores", "spectators", - "spectatular", "spectacular", - "spectauclar", "spectacular", - "spectaulars", "spectaculars", - "spectecular", "spectacular", - "specualting", "speculating", - "specualtion", "speculation", - "specualtive", "speculative", - "specularite", "speculative", - "speculaties", "speculative", - "spiritualiy", "spiritually", - "spiritualty", "spirituality", - "spirituella", "spiritually", - "spirtiually", "spiritually", - "spirutually", "spiritually", - "spitirually", "spiritually", - "sponatenous", "spontaneous", - "sponatneous", "spontaneous", - "sponsership", "sponsorship", - "sponsorhips", "sponsorship", - "sponsorhsip", "sponsorship", - "sponsorshop", "sponsorship", - "spontaenous", "spontaneous", - "spontainous", "spontaneous", - "spontaneuos", "spontaneous", - "spontanious", "spontaneous", - "sponteanous", "spontaneous", - "sponteneous", "spontaneous", - "spreadhseet", "spreadsheet", - "spreadsheat", "spreadsheet", - "spreadshets", "spreadsheets", - "spreedsheet", "spreadsheet", - "springfeild", "springfield", - "springfiled", "springfield", - "sprinklered", "sprinkled", - "squirrelies", "squirrels", - "squirrelius", "squirrels", - "stabilizare", "stabilize", - "stabilizied", "stabilize", - "stabilizier", "stabilize", - "stabilizies", "stabilize", - "staggerring", "staggering", - "staggerwing", "staggering", - "stationairy", "stationary", - "stationerad", "stationed", - "stationnary", "stationary", - "statisitcal", "statistical", - "statisticly", "statistical", - "statistisch", "statistics", - "statsitical", "statistical", - "stereotpyes", "stereotypes", - "stereotying", "stereotyping", - "steriotypes", "stereotypes", - "steroetypes", "stereotypes", - "steryotypes", "stereotypes", - "stimluating", "stimulating", - "stimualting", "stimulating", - "stimualtion", "stimulation", - "stimulantes", "stimulants", - "stockpilled", "stockpile", - "stormfrount", "stormfront", - "storyteling", "storytelling", - "straightden", "straightened", - "straightend", "straightened", - "straightmen", "straighten", - "straightned", "straightened", - "straightner", "straighten", - "strangeshit", "strangest", - "strategisch", "strategic", - "strategiske", "strategies", - "strawberies", "strawberries", - "strawberrry", "strawberry", - "strawbrerry", "strawberry", - "strenghened", "strengthened", - "strenghtend", "strengthen", - "strenghtens", "strengthen", - "strengtened", "strengthened", - "structurels", "structures", - "strugglebus", "struggles", - "struggleing", "struggling", - "stubborness", "stubbornness", - "stutterring", "stuttering", - "subcatagory", "subcategory", - "subconscius", "subconscious", - "subconscous", "subconscious", - "subisdizing", "subsidizing", - "subjectivly", "subjectively", - "submergered", "submerged", - "submisisons", "submissions", - "subredddits", "subreddits", - "subscirbers", "subscribers", - "subscribbed", "subscribe", - "subscribber", "subscriber", - "subscriping", "subscribing", - "subscriptin", "subscriptions", - "subscripton", "subscription", - "subsequenty", "subsequently", - "subsidiezed", "subsidized", - "subsidizied", "subsidized", - "subsidizies", "subsidize", - "subsiziding", "subsidizing", - "subsquently", "subsequently", - "subsrcibers", "subscribers", - "substancial", "substantial", - "substansial", "substantial", - "substansive", "substantive", - "substantied", "substantive", - "substanties", "substantive", - "substential", "substantial", - "substitiute", "substitute", - "substituded", "substituted", - "substitudes", "substitutes", - "substituion", "substitution", - "substitures", "substitutes", - "substitutie", "substitutes", - "substitutos", "substitutes", - "substitutue", "substitutes", - "substracted", "subtracted", - "suburburban", "suburban", - "succesfully", "successfully", - "successeurs", "successes", - "successfull", "successful", - "successfuly", "successfully", - "successsion", "succession", - "successully", "successfully", - "succsesfull", "successfully", - "sucessfully", "successfully", - "sucseptible", "susceptible", - "sufficently", "sufficiently", - "suggestieve", "suggestive", - "sumbissions", "submissions", - "sunglassses", "sunglasses", - "superceeded", "superseded", - "superficiel", "superficial", - "superfulous", "superfluous", - "superhereos", "superhero", - "superifical", "superficial", - "superiorest", "superiors", - "supermacist", "supremacist", - "supermakert", "supermarkets", - "supermakret", "supermarkets", - "supermakter", "supermarkets", - "supermarkts", "supermarkets", - "supermaster", "supermarkets", - "supernatual", "supernatural", - "supersition", "supervision", - "superstiton", "superstition", - "supervisers", "supervisors", - "supervisior", "supervisor", - "suplimented", "supplemented", - "supplaments", "supplements", - "supplemetal", "supplemental", - "supporteurs", "supporters", - "supposedely", "supposedly", - "supposidely", "supposedly", - "supposingly", "supposedly", - "suppresions", "suppression", - "suppresssor", "suppressor", - "supramacist", "supremacist", - "supremacits", "supremacist", - "supremasist", "supremacist", - "supremicist", "supremacist", - "suprimacist", "supremacist", - "suprisingly", "surprisingly", - "suprizingly", "surprisingly", - "suroundings", "surroundings", - "surpemacist", "supremacist", - "surprisinly", "surprisingly", - "surreptious", "surreptitious", - "surroundign", "surroundings", - "surroundigs", "surrounds", - "surroundins", "surrounds", - "surroundngs", "surrounds", - "surveilence", "surveillance", - "survivabily", "survivability", - "susbtantial", "substantial", - "susbtantive", "substantive", - "suscepitble", "susceptible", - "susceptable", "susceptible", - "suscpetible", "susceptible", - "susecptible", "susceptible", - "suspectible", "susceptible", - "suspiciosly", "suspiciously", - "suspiciouly", "suspiciously", - "suspiciouns", "suspicion", - "suspicision", "suspicions", - "suspicisons", "suspicions", - "sustainible", "sustainable", - "switerzland", "switzerland", - "switserland", "switzerland", - "switzlerand", "switzerland", - "swizterland", "switzerland", - "swtizerland", "switzerland", - "symapthetic", "sympathetic", - "symmertical", "symmetrical", - "sympathatic", "sympathetic", - "sympathiers", "sympathizers", - "sympathsize", "sympathize", - "sympethetic", "sympathetic", - "symphatetic", "sympathetic", - "symphatized", "sympathize", - "symphatizer", "sympathizers", - "symphatizes", "sympathize", - "sympothetic", "sympathetic", - "synthesasia", "synthesis", - "synthesesia", "synthesis", - "sypmathetic", "sympathetic", - "tabelspoons", "tablespoons", - "tablepsoons", "tablespoons", - "tablespooon", "tablespoon", - "tablesppons", "tablespoons", - "tailgateing", "tailgating", - "tailgatting", "tailgating", - "tangentialy", "tangentially", - "techincally", "technically", - "techincians", "technicians", - "techiniques", "techniques", - "techncially", "technically", - "technicalty", "technicality", - "technichian", "technician", - "technicials", "technicians", - "techniciens", "technicians", - "technitians", "technicians", - "technnology", "technology", - "technologia", "technological", - "techticians", "technicians", - "teleportato", "teleportation", - "teleportion", "teleporting", - "teleproting", "teleporting", - "temeprature", "temperature", - "temparament", "temperament", - "temparature", "temperature", - "temparement", "temperament", - "tempearture", "temperatures", - "temperamant", "temperament", - "temperarily", "temporarily", - "temperatues", "temperatures", - "temperaturs", "temperatures", - "temperatuur", "temperature", - "temperement", "temperament", - "tempermeant", "temperament", - "tempertaure", "temperature", - "temporairly", "temporarily", - "temporaraly", "temporarily", - "temporarity", "temporarily", - "tempreature", "temperature", - "temproarily", "temporarily", - "tempurature", "temperature", - "tepmorarily", "temporarily", - "termanology", "terminology", - "terminacion", "termination", - "terminaison", "termination", - "terminalogy", "terminology", - "terminatior", "terminator", - "terminatorn", "termination", - "terminilogy", "terminology", - "terminoligy", "terminology", - "terratorial", "territorial", - "terratories", "territories", - "terretorial", "territorial", - "terretories", "territories", - "terrirorial", "territorial", - "terrirories", "territories", - "terriroties", "territories", - "terristrial", "territorial", - "territoires", "territories", - "territorist", "terrorist", - "territority", "territory", - "terroristas", "terrorists", - "terroristes", "terrorists", - "terrorities", "territories", - "terrotorial", "territorial", - "terrotories", "territories", - "testiclular", "testicular", - "thankfullly", "thankfully", - "thanksgivng", "thanksgiving", - "theoligical", "theological", - "theoratical", "theoretical", - "theoreticly", "theoretical", - "theoritical", "theoretical", - "therapautic", "therapeutic", - "therapeudic", "therapeutic", - "therapeutuc", "therapeutic", - "therapuetic", "therapeutic", - "theraupetic", "therapeutic", - "thereaputic", "therapeutic", - "thereotical", "theoretical", - "therepeutic", "therapeutic", - "thermometor", "thermometer", - "thermometre", "thermometer", - "thermomiter", "thermometer", - "thermomoter", "thermometer", - "thermoneter", "thermometer", - "thermostaat", "thermostat", - "theroetical", "theoretical", - "thoeretical", "theoretical", - "threataning", "threatening", - "threatended", "threatened", - "threatining", "threatening", - "throttleing", "throttling", - "throughoput", "throughput", - "throughtout", "throughout", - "throughtput", "throughput", - "thudnerbolt", "thunderbolt", - "thunberbolt", "thunderbolt", - "thunderblot", "thunderbolt", - "thunderboat", "thunderbolt", - "thunderbots", "thunderbolt", - "thunderbowl", "thunderbolt", - "thunderjolt", "thunderbolt", - "thundervolt", "thunderbolt", - "tightenting", "tightening", - "tocuhscreen", "touchscreen", - "torrentking", "torrenting", - "torrentting", "torrenting", - "torublesome", "troublesome", - "torunaments", "tournaments", - "totalitaran", "totalitarian", - "totalitarni", "totalitarian", - "touranments", "tournaments", - "tournamnets", "tournaments", - "tournemants", "tournaments", - "tournements", "tournaments", - "tournmanets", "tournaments", - "tradicional", "traditional", - "tradionally", "traditionally", - "tradisional", "traditional", - "traditionel", "traditional", - "traditition", "tradition", - "tragicallly", "tragically", - "tramautized", "traumatized", - "tramuatized", "traumatized", - "trancendent", "transcendent", - "trancending", "transcending", - "tranclucent", "translucent", - "trandgender", "transgender", - "tranditions", "transitions", - "tranistions", "transitions", - "tranlastion", "translations", - "tranlsating", "translating", - "tranlsation", "translation", - "tranluscent", "translucent", - "trannsexual", "transsexual", - "tranpshobic", "transphobic", - "transaccion", "transaction", - "transaciton", "transactions", - "transalting", "translating", - "transaltion", "translation", - "transations", "transitions", - "transcluent", "translucent", - "transcripto", "transcription", - "transctions", "transitions", - "transculent", "translucent", - "transending", "transcending", - "transfender", "transgender", - "transferers", "transfers", - "transfering", "transferring", - "transfersom", "transforms", - "transfomers", "transforms", - "transformas", "transforms", - "transformes", "transformers", - "transformis", "transforms", - "transformus", "transforms", - "transforums", "transforms", - "transfromed", "transformed", - "transfromer", "transformers", - "transgemder", "transgender", - "transgended", "transgendered", - "transgenger", "transgender", - "transgenres", "transgender", - "transhpobic", "transphobic", - "transisions", "transitions", - "transisitor", "transistor", - "transistion", "transition", - "transistior", "transistor", - "transitiond", "transitioned", - "transitiong", "transitioning", - "translatron", "translation", - "translusent", "translucent", - "transmatter", "transmitter", - "transmision", "transmission", - "transmissin", "transmissions", - "transmisson", "transmission", - "transmittor", "transmitter", - "transmorged", "transformed", - "transmutter", "transmitter", - "transofrmed", "transformed", - "transohobic", "transphobic", - "transparant", "transparent", - "transparecy", "transparency", - "transpareny", "transparency", - "transperant", "transparent", - "transperent", "transparent", - "transphonic", "transphobic", - "transphopic", "transphobic", - "transplanet", "transplant", - "transporder", "transporter", - "transporing", "transporting", - "transportar", "transporter", - "transportng", "transporting", - "transportor", "transporter", - "transseuxal", "transsexual", - "transsexaul", "transsexual", - "transsexuel", "transsexual", - "transulcent", "translucent", - "transylvnia", "transylvania", - "tranzformer", "transformer", - "tranzitions", "transitions", - "tranzporter", "transporter", - "trasncripts", "transcripts", - "trasnferred", "transferred", - "trasnformed", "transformed", - "trasnformer", "transformer", - "trasngender", "transgender", - "trasnmitted", "transmitted", - "trasnmitter", "transmitter", - "trasnparent", "transparent", - "trasnphobic", "transphobic", - "trasnported", "transported", - "trasnporter", "transporter", - "traumatisch", "traumatic", - "traumetized", "traumatized", - "traumitized", "traumatized", - "travellerhd", "travelled", - "travellodge", "travelled", - "tremendeous", "tremendous", - "tremendious", "tremendous", - "tremenduous", "tremendous", - "trespessing", "trespassing", - "tresspasing", "trespassing", - "triggereing", "triggering", - "triggerring", "triggering", - "troubelsome", "troublesome", - "truamatized", "traumatized", - "trushworthy", "trustworthy", - "trustowrthy", "trustworthy", - "trustwhorty", "trustworthy", - "trustworhty", "trustworthy", - "truthfullly", "truthfully", - "tupperwears", "tupperware", - "turstworthy", "trustworthy", - "ubiquitious", "ubiquitous", - "ubiquituous", "ubiquitous", - "ukraininans", "ukrainians", - "ultimatelly", "ultimately", - "unanimoulsy", "unanimous", - "unappeasing", "unappealing", - "unappeeling", "unappealing", - "unathorised", "unauthorised", - "unattendend", "unattended", - "unatteneded", "unattended", - "unattracive", "unattractive", - "unauthoried", "unauthorized", - "unavailible", "unavailable", - "unavaliable", "unavailable", - "unaviodable", "unavoidable", - "unbalanaced", "unbalanced", - "unbraikable", "unbreakable", - "unbrakeable", "unbreakable", - "unbreakabie", "unbreakable", - "unbreakabke", "unbreakable", - "unbreakbale", "unbreakable", - "unbreakeble", "unbreakable", - "unbrearable", "unbreakable", - "uncensorred", "uncensored", - "uncertaincy", "uncertainty", - "uncertanity", "uncertainty", - "uncertianty", "uncertainty", - "unchangable", "unchangeable", - "uncompetive", "uncompetitive", - "unconcsious", "unconscious", - "unconsicous", "unconscious", - "uncouncious", "unconscious", - "undeniabely", "undeniably", - "undeniabley", "undeniably", - "undeniablly", "undeniably", - "undenialbly", "undeniably", - "underestime", "underestimate", - "undergating", "undertaking", - "undergorund", "underground", - "underheight", "underweight", - "undermiming", "undermining", - "undermindes", "undermines", - "undernearth", "underneath", - "underneight", "underweight", - "underpining", "undermining", - "underpowerd", "underpowered", - "underpowred", "underpowered", - "underratted", "underrated", - "understannd", "understands", - "understsand", "understands", - "undertacker", "undertaker", - "underwarter", "underwater", - "underwieght", "underweight", - "underwright", "underweight", - "undesireble", "undesirable", - "undesriable", "undesirable", - "undetecable", "undetectable", - "undiserable", "undesirable", - "undoubedtly", "undoubtedly", - "undoubetdly", "undoubtedly", - "undoubtadly", "undoubtedly", - "undoubtebly", "undoubtedly", - "undoubtetly", "undoubtedly", - "undreground", "underground", - "unemployeed", "unemployed", - "unemployent", "unemployment", - "unemploymed", "unemployed", - "unexpectdly", "unexpectedly", - "unexpectely", "unexpectedly", - "unfamilliar", "unfamiliar", - "unfortuante", "unfortunate", - "ungreatfull", "ungrateful", - "unilateraly", "unilaterally", - "unilaterlly", "unilaterally", - "unimportent", "unimportant", - "uninspiried", "uninspired", - "uninstaling", "uninstalling", - "uninstallng", "uninstalling", - "uninteresed", "uninterested", - "uniquesness", "uniqueness", - "unisntalled", "uninstalled", - "universella", "universally", - "universites", "universities", - "univesities", "universities", - "unjustifyed", "unjustified", - "unknowinlgy", "unknowingly", - "unkowningly", "unknowingly", - "unnecassary", "unnecessary", - "unneccesary", "unnecessary", - "unnecessery", "unnecessary", - "unnecissary", "unnecessary", - "unnessecary", "unnecessary", - "unnistalled", "uninstalled", - "unoriginial", "unoriginal", - "unorigional", "unoriginal", - "unoticeable", "unnoticeable", - "unpleaseant", "unpleasant", - "unportected", "unprotected", - "unprepaired", "unprepared", - "unpreparred", "unprepared", - "unproducive", "unproductive", - "unprotexted", "unprotected", - "unqaulified", "unqualified", - "unrealisitc", "unrealistic", - "unrealsitic", "unrealistic", - "unreasonbly", "unreasonably", - "unregluated", "unregulated", - "unregualted", "unregulated", - "unregulared", "unregulated", - "unrepentent", "unrepentant", - "unresponive", "unresponsive", - "unrestriced", "unrestricted", - "unsettleing", "unsettling", - "unsintalled", "uninstalled", - "unsolicated", "unsolicited", - "unsoliticed", "unsolicited", - "unsolocited", "unsolicited", - "unsubscirbe", "unsubscribe", - "unsubscrbed", "unsubscribed", - "unsubscried", "unsubscribed", - "unsubscripe", "unsubscribe", - "unsubscrive", "unsubscribe", - "unsubscrube", "unsubscribe", - "unsubsrcibe", "unsubscribe", - "unsuccesful", "unsuccessful", - "unsuccessul", "unsuccessful", - "unsucesfuly", "unsuccessfully", - "unsucessful", "unsuccessful", - "unsunscribe", "unsubscribe", - "unsuprising", "unsurprising", - "unsuprizing", "unsurprising", - "unsurprized", "unsurprised", - "unsusbcribe", "unsubscribe", - "unviersally", "universally", - "unwarrented", "unwarranted", - "utiliatrian", "utilitarian", - "utilitatian", "utilitarian", - "utiliterian", "utilitarian", - "utilizacion", "utilization", - "utilizaiton", "utilization", - "utilizating", "utilization", - "utiltiarian", "utilitarian", - "vacciantion", "vaccination", - "vaccinaties", "vaccinate", - "vegaterians", "vegetarians", - "vegetariens", "vegetarians", - "vegetatians", "vegetarians", - "vegeterians", "vegetarians", - "vehementely", "vehemently", - "venezuelean", "venezuela", - "venezuelian", "venezuela", - "ventalation", "ventilation", - "ventelation", "ventilation", - "ventialtion", "ventilation", - "ventilacion", "ventilation", - "verastility", "versatility", - "verfication", "verification", - "versatality", "versatility", - "versitality", "versatility", - "versitilaty", "versatility", - "victorieuse", "victories", - "victoriuous", "victorious", - "vietnameese", "vietnamese", - "vietnamesse", "vietnamese", - "vietnamiese", "vietnamese", - "vietnamnese", "vietnamese", - "vigilanties", "vigilante", - "visibillity", "visibility", - "vocabularly", "vocabulary", - "volatillity", "volatility", - "volonteered", "volunteered", - "volounteers", "volunteers", - "volunatrily", "voluntarily", - "voluntairly", "voluntarily", - "volunteeers", "volunteers", - "volunteraly", "voluntarily", - "voluntereed", "volunteered", - "volunterily", "voluntarily", - "vulnerabile", "vulnerable", - "wallpapaers", "wallpapers", - "wallpappers", "wallpapers", - "washingtion", "washington", - "watermeleon", "watermelon", - "waterprooof", "waterproof", - "wavelegnths", "wavelength", - "wavelenghth", "wavelength", - "wavelenghts", "wavelength", - "weaknessses", "weaknesses", - "wellingston", "wellington", - "wellingtion", "wellington", - "westernerns", "westerners", - "westmisnter", "westminster", - "westmnister", "westminster", - "westmonster", "westminster", - "whisperered", "whispered", - "whitholding", "withholding", - "wikileakers", "wikileaks", - "willingless", "willingness", - "wincheseter", "winchester", - "windsheilds", "windshield", - "withdrawels", "withdrawals", - "withdrawles", "withdrawals", - "withhelding", "withholding", - "withrdawing", "withdrawing", - "witnesssing", "witnessing", - "woodowrking", "woodworking", - "woodworkign", "woodworking", - "worhsipping", "worshipping", - "workstaiton", "workstation", - "workststion", "workstation", - "worshopping", "worshipping", - "xenophoblic", "xenophobic", - "abandining", "abandoning", - "abandonned", "abandoned", - "abbreviato", "abbreviation", - "abnoramlly", "abnormally", - "abnormalty", "abnormally", - "abnornally", "abnormally", - "abominaton", "abomination", - "abondoning", "abandoning", - "aborginial", "aboriginal", - "aboriganal", "aboriginal", - "aborigenal", "aboriginal", - "aborignial", "aboriginal", - "aborigonal", "aboriginal", - "aboroginal", "aboriginal", - "aboslutely", "absolutely", - "abosrption", "absorption", - "abreviated", "abbreviated", - "absintence", "abstinence", - "absitnence", "abstinence", - "absolument", "absolute", - "absolutley", "absolutely", - "absoprtion", "absorption", - "absorbsion", "absorption", - "absorbtion", "absorption", - "absorpsion", "absorption", - "absoultely", "absolutely", - "abstanence", "abstinence", - "abstenance", "abstinence", - "abstenince", "abstinence", - "abstinense", "abstinence", - "abstinince", "abstinence", - "absurditiy", "absurdity", - "abundacies", "abundances", - "academicas", "academics", - "academicos", "academics", - "academicus", "academics", - "accdiently", "accidently", - "accelarate", "accelerate", - "accelerade", "accelerated", - "accelerare", "accelerate", - "accelerato", "acceleration", - "acceleread", "accelerated", - "accelertor", "accelerator", - "accelorate", "accelerate", - "acceptabel", "acceptable", - "acceptabil", "acceptable", - "acceptence", "acceptance", - "accepterad", "accepted", - "acceptible", "acceptable", - "accerelate", "accelerated", - "accesories", "accessories", - "accessable", "accessible", - "accessbile", "accessible", - "accessoire", "accessories", - "accessoirs", "accessories", - "accicently", "accidently", - "accidantly", "accidently", - "accidebtly", "accidently", - "accidenlty", "accidently", - "accidentes", "accidents", - "accidentky", "accidently", - "accidently", "accidentally", - "accidnetly", "accidently", - "accomadate", "accommodate", - "accomodate", "accommodate", - "accompined", "accompanied", - "accomplise", "accomplishes", - "accompliss", "accomplishes", - "accostumed", "accustomed", - "accountent", "accountant", - "accpetable", "acceptable", - "accpetance", "acceptance", - "accuastion", "accusation", - "acculumate", "accumulate", - "accumalate", "accumulate", - "accumelate", "accumulate", - "accumilate", "accumulate", - "accumulare", "accumulate", - "accumulato", "accumulation", - "accumulted", "accumulated", - "accuratley", "accurately", - "accusating", "accusation", - "accusition", "accusation", - "accustumed", "accustomed", - "acheivable", "achievable", - "acheivment", "achievement", - "acheviable", "achievable", - "achiavable", "achievable", - "achieveble", "achievable", - "achievemnt", "achievement", - "achievemts", "achieves", - "achievents", "achieves", - "achievment", "achievement", - "achilleous", "achilles", - "achiveable", "achievable", - "achivement", "achievement", - "acitvating", "activating", - "acitvision", "activision", - "acknowldge", "acknowledge", - "acknowlede", "acknowledge", - "acknowlege", "acknowledge", - "acommodate", "accommodate", - "acopalypse", "apocalypse", - "acordingly", "accordingly", - "acqauinted", "acquainted", - "acquanited", "acquainted", - "acquianted", "acquainted", - "acquinated", "acquainted", - "acquisiton", "acquisition", - "acticating", "activating", - "actication", "activation", - "activacion", "activation", - "activaters", "activates", - "activiates", "activist", - "activiites", "activist", - "activisiom", "activism", - "activisits", "activist", - "activistas", "activists", - "activistes", "activists", - "activiting", "activating", - "activizion", "activision", - "acustommed", "accustomed", - "adaptacion", "adaptation", - "adaptating", "adaptation", - "adaquetely", "adequately", - "addicitons", "addictions", - "addionally", "additionally", - "additivies", "additive", - "additivley", "additive", - "addittions", "addictions", - "addmission", "admission", - "addresable", "addressable", - "addressess", "addresses", - "adequatley", "adequately", - "adequetely", "adequately", - "adequitely", "adequately", - "adernaline", "adrenaline", - "adjectivos", "adjectives", - "adjustible", "adjustable", - "admendment", "amendment", - "administed", "administered", - "administor", "administer", - "administre", "administer", - "administro", "administer", - "adminsiter", "administer", - "admissable", "admissible", - "admittadly", "admittedly", - "admittetly", "admittedly", - "admittidly", "admittedly", - "adolencent", "adolescent", - "adolescant", "adolescent", - "adolescene", "adolescence", - "adoloscent", "adolescent", - "adolsecent", "adolescent", - "adpatation", "adaptation", - "adreanline", "adrenaline", - "adrelanine", "adrenaline", - "adreneline", "adrenaline", - "adreniline", "adrenaline", - "adressable", "addressable", - "advanteges", "advantages", - "advatanges", "advantages", - "adventrous", "adventurous", - "adventrues", "adventures", - "adventuers", "adventures", - "adventuous", "adventurous", - "adventuros", "adventurous", - "adventurus", "adventurous", - "adverticed", "advertised", - "aestethics", "aesthetics", - "aesthatics", "aesthetics", - "aesthestic", "aesthetics", - "affiliaton", "affiliation", - "affilliate", "affiliate", - "affirmitve", "affirmative", - "afflcition", "affliction", - "afflection", "affliction", - "affliation", "affliction", - "affliciton", "affliction", - "afforadble", "affordable", - "affordible", "affordable", - "affortable", "affordable", - "africaners", "africans", - "africaness", "africans", - "aftermaket", "aftermarket", - "afternooon", "afternoon", - "aggravanti", "aggravating", - "aggraveted", "aggravated", - "aggreement", "agreement", - "aggregious", "egregious", - "aggresions", "aggression", - "aggressivo", "aggression", - "aggrovated", "aggravated", - "agnosticim", "agnosticism", - "agnosticsm", "agnosticism", - "agnostisch", "agnostic", - "agnostiscm", "agnosticism", - "agnostisim", "agnosticism", - "agreeement", "agreement", - "agricultre", "agriculture", - "agricultue", "agriculture", - "agriculure", "agriculture", - "agricuture", "agriculture", - "ailenating", "alienating", - "ajdectives", "adjectives", - "alchoholic", "alcoholic", - "alchoolism", "alcoholism", - "alcohalics", "alcoholics", - "alcohalism", "alcoholism", - "alcoholsim", "alcoholism", - "aleinating", "alienating", - "algorhitms", "algorithms", - "algorithem", "algorithm", - "algorithim", "algorithm", - "algorithsm", "algorithms", - "algorithum", "algorithm", - "algorithym", "algorithm", - "algoritmes", "algorithms", - "algoritmos", "algorithms", - "algorthims", "algorithms", - "algortihms", "algorithms", - "algorythms", "algorithms", - "alievating", "alienating", - "alledgedly", "allegedly", - "allegeance", "allegiance", - "allegedely", "allegedly", - "allegedley", "allegedly", - "allegience", "allegiance", - "alleigance", "allegiance", - "allergisch", "allergic", - "alliegance", "allegiance", - "alligeance", "allegiance", - "alocholics", "alcoholics", - "alocholism", "alcoholism", - "alogrithms", "algorithms", - "alphabeast", "alphabet", - "alteracion", "alteration", - "alterarion", "alteration", - "alterating", "alteration", - "alternador", "alternator", - "alternater", "alternator", - "alternatie", "alternatives", - "alternatly", "alternately", - "alternatve", "alternate", - "alternetly", "alternately", - "altogehter", "altogether", - "altogheter", "altogether", - "altriustic", "altruistic", - "altruisitc", "altruistic", - "altrusitic", "altruistic", - "alturistic", "altruistic", - "aluminimum", "aluminum", - "amargeddon", "armageddon", - "amateurest", "amateurs", - "ambassabor", "ambassador", - "ambassader", "ambassador", - "ambassator", "ambassador", - "ambassedor", "ambassador", - "ambassidor", "ambassador", - "ambassodor", "ambassador", - "ambiguitiy", "ambiguity", - "amendmants", "amendments", - "amendmends", "amendments", - "americains", "americas", - "americanas", "americans", - "americanis", "americas", - "americanss", "americas", - "americants", "americas", - "americanus", "americans", - "americares", "americas", - "ammendment", "amendment", - "amrageddon", "armageddon", - "analitical", "analytical", - "analitycal", "analytical", - "analogeous", "analogous", - "analyitcal", "analytical", - "analyseles", "analyses", - "analyseras", "analyses", - "analyseres", "analyses", - "analysised", "analyses", - "analysises", "analyses", - "analysisto", "analysts", - "analystics", "analysts", - "anarchisim", "anarchism", - "anarchistm", "anarchism", - "anarchiszm", "anarchism", - "anarchsits", "anarchists", - "anayltical", "analytical", - "ancilliary", "ancillary", - "androiders", "androids", - "androidtvs", "androids", - "anecdotale", "anecdote", - "anecdotice", "anecdote", - "anestheisa", "anesthesia", - "anesthetia", "anesthesia", - "anesthisia", "anesthesia", - "anitbiotic", "antibiotic", - "anitquated", "antiquated", - "anitsocial", "antisocial", - "aniversary", "anniversary", - "annilihate", "annihilated", - "anniverary", "anniversary", - "anniversay", "anniversary", - "anniversry", "anniversary", - "annointing", "anointing", - "annonceurs", "announcers", - "annoucners", "announcers", - "annoucning", "announcing", - "announched", "announce", - "annyoingly", "annoyingly", - "anonymosly", "anonymously", - "anonymousy", "anonymously", - "antaganist", "antagonist", - "antagnoist", "antagonist", - "antarcitca", "antarctica", - "antarctida", "antarctica", - "anthropoly", "anthropology", - "antibiodic", "antibiotic", - "antibiotcs", "antibiotics", - "antibitoic", "antibiotic", - "antiboitic", "antibiotics", - "anticapate", "anticipate", - "anticiapte", "anticipate", - "anticipare", "anticipate", - "anticipato", "anticipation", - "anticuated", "antiquated", - "antiquited", "antiquated", - "antiqvated", "antiquated", - "antisipate", "anticipate", - "antisocail", "antisocial", - "antisosial", "antisocial", - "antoganist", "antagonist", - "antractica", "antarctica", - "apacolypse", "apocalypse", - "apartheied", "apartheid", - "aplication", "application", - "apocalipse", "apocalypse", - "apocalpyse", "apocalypse", - "apocalypes", "apocalypse", - "apocalypic", "apocalyptic", - "apocalyspe", "apocalypse", - "apocalytic", "apocalyptic", - "apocaplyse", "apocalypse", - "apocolapse", "apocalypse", - "apolagetic", "apologetic", - "apolagized", "apologized", - "apolegetic", "apologetic", - "apoligetic", "apologetic", - "apoligists", "apologists", - "apoligized", "apologized", - "apologisms", "apologists", - "apologiste", "apologise", - "apologitic", "apologetic", - "apostraphe", "apostrophe", - "apostrephe", "apostrophe", - "apostrohpe", "apostrophe", - "apostropes", "apostrophe", - "apparantly", "apparently", - "appareance", "appearance", - "apparenlty", "apparently", - "appartment", "apartment", - "appealling", "appealing", - "appearence", "appearance", - "appearnace", "appearances", - "apperances", "appearances", - "apperantly", "apparently", - "apperciate", "appreciate", - "appereance", "appearance", - "appetities", "appetite", - "appetitite", "appetite", - "appication", "application", - "applainces", "appliances", - "applicaple", "applicable", - "applicates", "applicants", - "applicaton", "application", - "applicible", "applicable", - "appliences", "appliances", - "appointmet", "appointments", - "appologies", "apologies", - "apporached", "approached", - "apporaches", "approaches", - "appraoched", "approached", - "appraoches", "approaches", - "apprecaite", "appreciate", - "appreciato", "appreciation", - "appreciste", "appreciates", - "apprecitae", "appreciates", - "apprecited", "appreciated", - "apprectice", "apprentice", - "appreicate", "appreciate", - "apprendice", "apprentice", - "apprentace", "apprentice", - "apprentise", "apprentice", - "appretiate", "appreciate", - "appretince", "apprentice", - "appriceate", "appreciates", - "appriciate", "appreciate", - "appriecate", "appreciates", - "approacing", "approaching", - "appropiate", "appropriate", - "approprate", "appropriate", - "apropriate", "appropriate", - "aproximate", "approximate", - "apsotrophe", "apostrophe", - "aptitudine", "aptitude", - "aqcuainted", "acquainted", - "aquisition", "acquisition", - "aramgeddon", "armageddon", - "arangement", "arrangement", - "arbitarily", "arbitrarily", - "arbitraily", "arbitrarily", - "arbitraion", "arbitration", - "arbitrairy", "arbitrarily", - "arbitrarly", "arbitrary", - "arbitraton", "arbitration", - "arcehtypes", "archetypes", - "archaelogy", "archaeology", - "archaeolgy", "archaeology", - "archaology", "archeology", - "archatypes", "archetypes", - "archetects", "architects", - "archetipes", "archetypes", - "archetpyes", "archetypes", - "archetypus", "archetypes", - "archeytpes", "archetypes", - "archictect", "architect", - "architechs", "architects", - "architecht", "architect", - "architecte", "architecture", - "architexts", "architects", - "architypes", "archetypes", - "archtiects", "architects", - "archytypes", "archetypes", - "argentinia", "argentina", - "arguements", "arguments", - "argumentas", "arguments", - "argumentos", "arguments", - "arithemtic", "arithmetic", - "arithmitic", "arithmetic", - "aritmethic", "arithmetic", - "armagaddon", "armageddon", - "armageddan", "armageddon", - "armagedden", "armageddon", - "armageddin", "armageddon", - "armagedeon", "armageddon", - "armageedon", "armageddon", - "armagideon", "armageddon", - "armegaddon", "armageddon", - "arrangerad", "arranged", - "arrangment", "arrangement", - "arthimetic", "arithmetic", - "articifial", "artificial", - "articluate", "articulate", - "articualte", "articulate", - "articulted", "articulated", - "artifactos", "artifacts", - "artificiel", "artificial", - "artihmetic", "arithmetic", - "artillerly", "artillery", - "asbestoast", "asbestos", - "asethetics", "aesthetics", - "asisstants", "assistants", - "aspiratons", "aspirations", - "assasinate", "assassinate", - "assassians", "assassin", - "assassinas", "assassins", - "assassines", "assassins", - "assassinos", "assassins", - "assemblare", "assemble", - "assempling", "assembling", - "assersions", "assertions", - "assesement", "assessment", - "assestment", "assessment", - "assignemnt", "assignment", - "assimalate", "assimilate", - "assimilant", "assimilate", - "assimilare", "assimilate", - "assimliate", "assimilate", - "assimulate", "assimilate", - "assingment", "assignment", - "assistanat", "assistants", - "assistanse", "assistants", - "assistante", "assistance", - "assistence", "assistance", - "assistendo", "assisted", - "assistents", "assistants", - "assmebling", "assembling", - "assocaited", "associated", - "assocaites", "associates", - "assocation", "association", - "associatie", "associated", - "associatin", "associations", - "associaton", "association", - "associsted", "associates", - "assoicated", "associated", - "assoicates", "associates", - "assosiated", "associated", - "assosiates", "associates", - "asssassans", "assassins", - "assupmtion", "assumptions", - "assymetric", "asymmetric", - "asteroides", "asteroids", - "asthetical", "aesthetical", - "astonising", "astonishing", - "astornauts", "astronauts", - "astranauts", "astronauts", - "astronatus", "astronauts", - "astronaunt", "astronaut", - "astronomia", "astronomical", - "astronouts", "astronauts", - "astronuats", "astronauts", - "asutralian", "australian", - "atatchment", "attachment", - "athleticos", "athletics", - "athleticsm", "athleticism", - "athletiscm", "athleticism", - "athletisim", "athleticism", - "atmopshere", "atmosphere", - "atmoshpere", "atmosphere", - "atomsphere", "atmosphere", - "atriculate", "articulate", - "atrocoties", "atrocities", - "atrosities", "atrocities", - "attachemnt", "attachment", - "attackeras", "attackers", - "attactment", "attachment", - "attemtping", "attempting", - "attendence", "attendance", - "attendents", "attendants", - "attirbutes", "attributes", - "attmepting", "attempting", - "attracters", "attracts", - "attractice", "attractive", - "attracties", "attracts", - "attractifs", "attracts", - "attraktion", "attraction", - "attraktive", "attractive", - "attribuito", "attribution", - "attritubes", "attributes", - "auctioners", "auctions", - "audioboook", "audiobook", - "audioboost", "audiobooks", - "auidobooks", "audiobooks", - "auotattack", "autoattack", - "austrailan", "australian", - "austrailia", "australia", - "australain", "australians", - "australien", "australian", - "australina", "australians", - "austrlaian", "australians", - "authenticy", "authenticity", - "autherized", "authorized", - "authoritay", "authority", - "authorites", "authorities", - "authorithy", "authority", - "authroized", "authorized", - "autistisch", "autistic", - "autoattaks", "autoattack", - "autocorect", "autocorrect", - "autocorrct", "autocorrect", - "autocorret", "autocorrect", - "autograpgh", "autograph", - "automatice", "automate", - "automatico", "automation", - "automatied", "automate", - "automatiek", "automate", - "automatron", "automation", - "automatted", "automate", - "automibile", "automobile", - "automitive", "automotive", - "automoblie", "automobile", - "automomous", "autonomous", - "automonous", "autonomous", - "automotice", "automotive", - "automotion", "automation", - "automotize", "automotive", - "automotove", "automotive", - "autonamous", "autonomous", - "autonation", "automation", - "autonimous", "autonomous", - "autonomity", "autonomy", - "autononous", "autonomous", - "auttoatack", "autoattack", - "auxilliary", "auxiliary", - "availabale", "available", - "availaible", "available", - "availiable", "available", - "averageadi", "averaged", - "averageifs", "averages", - "awesomeley", "awesomely", - "awesomelly", "awesomely", - "awesomenss", "awesomeness", - "awkwardess", "awkwardness", - "babysister", "babysitter", - "babysiting", "babysitting", - "babysittng", "babysitting", - "bachelores", "bachelors", - "backgorund", "background", - "backgroudn", "backgrounds", - "backgrouds", "backgrounds", - "backgrouns", "backgrounds", - "backgruond", "backgrounds", - "backpacing", "backpacking", - "backpackng", "backpacking", - "backrgound", "backgrounds", - "backrounds", "backgrounds", - "baksetball", "basketball", - "balanceada", "balanced", - "balanceado", "balanced", - "balckberry", "blackberry", - "balckhawks", "blackhawks", - "balcksmith", "blacksmith", - "bandwagoon", "bandwagon", - "bangaldesh", "bangladesh", - "bangladash", "bangladesh", - "bangledash", "bangladesh", - "bangledesh", "bangladesh", - "banglidesh", "bangladesh", - "bankrupcty", "bankruptcy", - "bankruptsy", "bankruptcy", - "bankrutpcy", "bankruptcy", - "barabrians", "barbarians", - "barbariens", "barbarians", - "barbarions", "barbarians", - "barbarisch", "barbaric", - "barberians", "barbarians", - "bargianing", "bargaining", - "bartendars", "bartenders", - "basektball", "basketball", - "baskteball", "basketball", - "bastardous", "bastards", - "battelship", "battleship", - "battelstar", "battlestar", - "battlearts", "battlestar", - "battlechip", "battleship", - "battlefied", "battlefield", - "battlefont", "battlefront", - "battlehips", "battleship", - "battlesaur", "battlestar", - "battlescar", "battlestar", - "battleshop", "battleship", - "battlestsr", "battlestar", - "beahviours", "behaviours", - "beautifuly", "beautifully", - "beautilful", "beautifully", - "beautyfull", "beautiful", - "becnhmarks", "benchmarks", - "beethoveen", "beethoven", - "begginings", "beginnings", - "begininngs", "beginnings", - "beginninng", "beginnings", - "behaivours", "behaviours", - "behaviorly", "behavioral", - "behavoiral", "behavioral", - "behavoiurs", "behaviours", - "behavorial", "behavioral", - "behavoural", "behavioral", - "behvaiours", "behaviours", - "beleagured", "beleaguered", - "beleivable", "believable", - "beliavable", "believable", - "beliebable", "believable", - "believeble", "believable", - "beliveable", "believable", - "benchamrks", "benchmarks", - "benchmakrs", "benchmarks", - "benckmarks", "benchmarks", - "benefecial", "beneficial", - "beneficary", "beneficiary", - "beneficiul", "beneficial", - "benefitial", "beneficial", - "beneifical", "beneficial", - "benelovent", "benevolent", - "benevalent", "benevolent", - "benevelant", "benevolent", - "benevelent", "benevolent", - "benevelont", "benevolent", - "benevloent", "benevolent", - "benevolant", "benevolent", - "benificial", "beneficial", - "benovelent", "benevolent", - "bernouilli", "bernoulli", - "besitality", "bestiality", - "bestaility", "bestiality", - "besteality", "bestiality", - "betrayeado", "betrayed", - "bilateraly", "bilaterally", - "billborads", "billboards", - "bioligical", "biological", - "biologiset", "biologist", - "biologiskt", "biologist", - "birghtness", "brightness", - "birmignham", "birmingham", - "birmimgham", "birmingham", - "bisexuella", "bisexual", - "bitterseet", "bittersweet", - "bitterswet", "bittersweet", - "blackahwks", "blackhawks", - "blackbarry", "blackberry", - "blackbeary", "blackberry", - "blackbeery", "blackberry", - "blackcawks", "blackhawks", - "blackhakws", "blackhawks", - "blackhwaks", "blackhawks", - "blackmsith", "blacksmith", - "blackshits", "blacksmith", - "blasphemey", "blasphemy", - "blitzkreig", "blitzkrieg", - "blochchain", "blockchain", - "blockcahin", "blockchain", - "blockchian", "blockchain", - "bloodboner", "bloodborne", - "bloodbonre", "bloodborne", - "bloodborbe", "bloodborne", - "bloodbrone", "bloodborne", - "bloodporne", "bloodborne", - "bloorborne", "bloodborne", - "blueberies", "blueberries", - "blueberris", "blueberries", - "blueberrry", "blueberry", - "bluebrints", "blueprints", - "boardcasts", "broadcasts", - "bodyheight", "bodyweight", - "bodyweigth", "bodyweight", - "bodywieght", "bodyweight", - "bombarment", "bombardment", - "bookmakred", "bookmarked", - "bootlaoder", "bootloader", - "bootleader", "bootloader", - "boradcasts", "broadcasts", - "borderlads", "borderlands", - "borderlans", "borderlands", - "bottelneck", "bottleneck", - "bottlebeck", "bottleneck", - "boundaires", "boundaries", - "bounderies", "boundaries", - "bourgeoius", "bourgeois", - "boycutting", "boycotting", - "boyfirends", "boyfriends", - "boyfreinds", "boyfriends", - "boyfrients", "boyfriends", - "braceletes", "bracelets", - "braceletts", "bracelets", - "brainwased", "brainwashed", - "brakedowns", "breakdowns", - "braodcasts", "broadcasts", - "brasillian", "brazilian", - "bratenders", "bartenders", - "brazilains", "brazilians", - "brazileans", "brazilians", - "braziliaan", "brazilians", - "brazilions", "brazilians", - "brazillans", "brazilians", - "brightoner", "brighten", - "brigthness", "brightness", - "brillaince", "brilliance", - "brilliante", "brilliance", - "brillianty", "brilliantly", - "brimestone", "brimstone", - "brimingham", "birmingham", - "broacasted", "broadcast", - "brotherhod", "brotherhood", - "brotherood", "brotherhood", - "brusselers", "brussels", - "brutallity", "brutally", - "buisnesses", "businesses", - "bulgariska", "bulgaria", - "bulletpoof", "bulletproof", - "bulletprof", "bulletproof", - "bureaucats", "bureaucrats", - "businesman", "businessman", - "businesmen", "businessmen", - "businessen", "businessmen", - "butterfies", "butterflies", - "cabinettas", "cabinets", - "caclulated", "calculated", - "caclulator", "calculator", - "cahracters", "characters", - "calcluator", "calculators", - "calcualted", "calculated", - "calcualtor", "calculator", - "calculador", "calculator", - "calcularon", "calculator", - "calculater", "calculator", - "calculatin", "calculations", - "calibratin", "calibration", - "calibraton", "calibration", - "califnoria", "californian", - "califonria", "californian", - "califorian", "californian", - "califorina", "california", - "californai", "californian", - "califronia", "california", - "caligraphy", "calligraphy", - "caliofrnia", "californian", - "calrifying", "clarifying", - "calssified", "classified", - "caluclated", "calculated", - "caluclator", "calculator", - "caluculate", "calculate", - "cambodican", "cambodia", - "camofluage", "camouflage", - "camoufalge", "camouflage", - "camouglage", "camouflage", - "campaiging", "campaigning", - "campaignes", "campaigns", - "cancellato", "cancellation", - "candidatas", "candidates", - "candidatxs", "candidates", - "candidiate", "candidate", - "canditates", "candidates", - "cannibalsm", "cannibalism", - "cannisters", "canisters", - "cannonical", "canonical", - "capabality", "capability", - "capabiltiy", "capability", - "capacators", "capacitors", - "capaciters", "capacitors", - "capactiors", "capacitors", - "capasitors", "capacitors", - "capatilism", "capitalism", - "capatilist", "capitalist", - "capatilize", "capitalize", - "capialized", "capitalized", - "capicators", "capacitors", - "capitalisn", "capitals", - "capitalits", "capitalists", - "capitalsim", "capitalism", - "capitalsit", "capitalists", - "capitarist", "capitalist", - "capitilism", "capitalism", - "capitilist", "capitalist", - "capitilize", "capitalize", - "capitlaism", "capitalism", - "capitlaist", "capitalist", - "capitlaize", "capitalized", - "capitolism", "capitalism", - "capitolist", "capitalist", - "capitolize", "capitalize", - "captainers", "captains", - "captialism", "capitalism", - "captialist", "capitalist", - "captialize", "capitalize", - "captivitiy", "captivity", - "caraciture", "caricature", - "carciature", "caricature", - "cardinales", "cardinals", - "cardinalis", "cardinals", - "carefullly", "carefully", - "cariacture", "caricature", - "caricatore", "caricature", - "cariciture", "caricature", - "caricuture", "caricature", - "carismatic", "charismatic", - "carribbean", "caribbean", - "cartdridge", "cartridge", - "cartdriges", "cartridges", - "carthagian", "carthaginian", - "cartilidge", "cartilage", - "cartirdges", "cartridges", - "cartrdiges", "cartridges", - "cartriages", "cartridges", - "cartrigdes", "cartridges", - "casaulties", "casualties", - "cassowarry", "cassowary", - "casualites", "casualties", - "casualries", "casualties", - "casulaties", "casualties", - "cataclysim", "cataclysm", - "cataclysym", "cataclysm", - "catagories", "categories", - "catapillar", "caterpillar", - "catapiller", "caterpillar", - "catastrope", "catastrophe", - "catastrphe", "catastrophe", - "categorice", "categorize", - "categoried", "categorized", - "categoriei", "categorize", - "cateogrize", "categorized", - "catepillar", "caterpillar", - "caterpilar", "caterpillar", - "catholicsm", "catholicism", - "catholicus", "catholics", - "catholisim", "catholicism", - "cativating", "activating", - "cattleship", "battleship", - "causalties", "casualties", - "cautionsly", "cautiously", - "celebratin", "celebration", - "celebrites", "celebrities", - "celebritiy", "celebrity", - "cellpading", "cellpadding", - "cellulaire", "cellular", - "cemetaries", "cemeteries", - "censorhsip", "censorship", - "censurship", "censorship", - "centipedle", "centipede", - "ceremonias", "ceremonies", - "ceremoniis", "ceremonies", - "ceremonije", "ceremonies", - "cerimonial", "ceremonial", - "cerimonies", "ceremonies", - "certainity", "certainty", - "certainlyt", "certainty", - "chairtable", "charitable", - "chalenging", "challenging", - "challanged", "challenged", - "challanges", "challenges", - "challegner", "challenger", - "challender", "challenger", - "challengue", "challenger", - "challengur", "challenger", - "challening", "challenging", - "challneger", "challenger", - "chanceller", "chancellor", - "chancillor", "chancellor", - "chansellor", "chancellor", - "charachter", "character", - "charactere", "characterize", - "characterz", "characterize", - "charactors", "characters", - "charakters", "characters", - "charatable", "charitable", - "charecters", "characters", - "charistics", "characteristics", - "charitible", "charitable", - "chartiable", "charitable", - "chechpoint", "checkpoint", - "checkpiont", "checkpoint", - "checkpoins", "checkpoints", - "checkponts", "checkpoints", - "cheesecase", "cheesecake", - "cheesecave", "cheesecake", - "cheeseface", "cheesecake", - "cheezecake", "cheesecake", - "chemcially", "chemically", - "chidlbirth", "childbirth", - "chihuahuha", "chihuahua", - "childbrith", "childbirth", - "childrends", "childrens", - "childrenis", "childrens", - "childrents", "childrens", - "chirstians", "christians", - "chocalates", "chocolates", - "chocloates", "chocolates", - "chocoaltes", "chocolates", - "chocolatie", "chocolates", - "chocolatos", "chocolates", - "chocolatte", "chocolates", - "chocolotes", "chocolates", - "cholestrol", "cholesterol", - "chormosome", "chromosome", - "chornicles", "chronicles", - "chrisitans", "christians", - "christains", "christians", - "christiaan", "christian", - "christimas", "christians", - "christinas", "christians", - "christines", "christians", - "christmans", "christians", - "chromasome", "chromosome", - "chromesome", "chromosome", - "chromisome", "chromosome", - "chromosmes", "chromosomes", - "chromosoms", "chromosomes", - "chromosone", "chromosome", - "chromosoom", "chromosome", - "chromozome", "chromosome", - "chronciles", "chronicles", - "chronicals", "chronicles", - "chronicels", "chronicles", - "chronocles", "chronicles", - "chronosome", "chromosome", - "chrsitians", "christians", - "cigarattes", "cigarettes", - "cigerattes", "cigarettes", - "cincinatti", "cincinnati", - "cinncinati", "cincinnati", - "circulaire", "circular", - "circulaton", "circulation", - "circumsice", "circumcised", - "circumsied", "circumcised", - "circumwent", "circumvent", - "circunvent", "circumvent", - "cirruculum", "curriculum", - "claculator", "calculator", - "clairfying", "clarifying", - "clasically", "classically", - "classicals", "classics", - "classrooom", "classroom", - "cleanliess", "cleanliness", - "cleareance", "clearance", - "cleverleys", "cleverly", - "cliffhager", "cliffhanger", - "climateers", "climates", - "climatiser", "climates", - "clincially", "clinically", - "clitoridis", "clitoris", - "clitorious", "clitoris", - "co-incided", "coincided", - "cockroachs", "cockroaches", - "cockroahes", "cockroaches", - "coefficent", "coefficient", - "cognatious", "contagious", - "cognitivie", "cognitive", - "coincidnce", "coincide", - "colelctive", "collective", - "colelctors", "collectors", - "collapsers", "collapses", - "collaquial", "colloquial", - "collasping", "collapsing", - "collataral", "collateral", - "collaterol", "collateral", - "collatoral", "collateral", - "collcetion", "collections", - "colleauges", "colleagues", - "colleciton", "collection", - "collectems", "collects", - "collectief", "collective", - "collecties", "collects", - "collectifs", "collects", - "collectivo", "collection", - "collectoin", "collections", - "collectons", "collections", - "collectros", "collects", - "collegaues", "colleagues", - "collequial", "colloquial", - "colleteral", "collateral", - "colliquial", "colloquial", - "collission", "collisions", - "collitions", "collisions", - "colloqiual", "colloquial", - "colloquail", "colloquial", - "colloqueal", "colloquial", - "collpasing", "collapsing", - "colonialsm", "colonialism", - "colorblend", "colorblind", - "coloublind", "colorblind", - "columbidae", "columbia", - "comapnions", "companions", - "comaprable", "comparable", - "comaprison", "comparison", - "comaptible", "compatible", - "combatabts", "combatants", - "combatents", "combatants", - "combinatin", "combinations", - "combinaton", "combination", - "comediants", "comedians", - "comepndium", "compendium", - "comferting", "comforting", - "comforming", "comforting", - "comfortbly", "comfortably", - "comisioned", "commissioned", - "comisioner", "commissioner", - "comissions", "commissions", - "commandbox", "commando", - "commandent", "commandment", - "commandeur", "commanders", - "commandore", "commanders", - "commandpod", "commando", - "commanists", "communists", - "commemters", "commenters", - "commencera", "commerce", - "commenciez", "commence", - "commentaar", "commentary", - "commentare", "commenter", - "commentars", "commenters", - "commentart", "commentator", - "commentery", "commentary", - "commentsry", "commenters", - "commercail", "commercials", - "commercent", "commence", - "commerical", "commercial", - "comminists", "communists", - "commisison", "commissions", - "commissons", "commissions", - "commiteted", "commited", - "commodites", "commodities", - "commtiment", "commitments", - "communicae", "communicated", - "communisim", "communism", - "communiste", "communities", - "communites", "communities", - "communters", "commenters", - "compadible", "compatible", - "compagnons", "companions", - "compainons", "companions", - "compairson", "comparison", - "compalined", "complained", - "compandium", "compendium", - "companians", "companions", - "companines", "companions", - "compansate", "compensate", - "comparabil", "comparable", - "comparason", "comparison", - "comparaste", "compares", - "comparatie", "comparative", - "compareble", "comparable", - "comparemos", "compares", - "comparions", "comparison", - "compariosn", "comparisons", - "comparisen", "compares", - "comparitve", "comparative", - "comparsion", "comparison", - "compartent", "compartment", - "compartmet", "compartment", - "compatibel", "compatible", - "compatibil", "compatible", - "compeating", "completing", - "compeditor", "competitor", - "compednium", "compendium", - "compeeting", "completing", - "compeltely", "completely", - "compelting", "completing", - "compeltion", "completion", - "compemdium", "compendium", - "compenduim", "compendium", - "compenents", "components", - "compenidum", "compendium", - "compensare", "compensate", - "comperable", "comparable", - "comperhend", "comprehend", - "compession", "compassion", - "competance", "competence", - "competator", "competitor", - "competenet", "competence", - "competense", "competence", - "competenze", "competence", - "competeted", "competed", - "competetor", "competitor", - "competidor", "competitor", - "competiors", "competitors", - "competitie", "competitive", - "competitin", "competitions", - "competitio", "competitor", - "competiton", "competition", - "competitve", "competitive", - "compilance", "compliance", - "compilaton", "compilation", - "compinsate", "compensate", - "compitable", "compatible", - "compitance", "compliance", - "complacant", "complacent", - "complaince", "compliance", - "complaines", "complaints", - "complainig", "complaining", - "complainte", "complained", - "complation", "completion", - "compleatly", "completely", - "complecate", "complicate", - "completeds", "completes", - "completent", "complement", - "completily", "complexity", - "completito", "completion", - "completley", "completely", - "complexers", "complexes", - "complexety", "complexity", - "complianed", "compliance", - "compliants", "complaints", - "complicaed", "complicate", - "complicare", "complicate", - "complicati", "complicit", - "complicato", "complication", - "complicite", "complicate", - "complicted", "complicated", - "complience", "compliance", - "complimate", "complicate", - "complition", "completion", - "complusion", "compulsion", - "complusive", "compulsive", - "complusory", "compulsory", - "compolsive", "compulsive", - "compolsory", "compulsory", - "compolsury", "compulsory", - "componants", "components", - "componenet", "components", - "componsate", "compensate", - "comporable", "comparable", - "compositae", "composite", - "compositie", "composite", - "compositon", "composition", - "compraison", "comparisons", - "compramise", "compromise", - "comprassem", "compress", - "comprehand", "comprehend", - "compresion", "compression", - "compresors", "compressor", - "compresser", "compressor", - "compressio", "compressor", - "compresson", "compression", - "comprihend", "comprehend", - "comprimise", "compromise", - "compromiss", "compromises", - "compromize", "compromise", - "compromsie", "compromises", - "comprossor", "compressor", - "compteting", "completing", - "comptetion", "completion", - "compulisve", "compulsive", - "compulosry", "compulsory", - "compulsary", "compulsory", - "compulsery", "compulsory", - "compulsing", "compulsion", - "compulsivo", "compulsion", - "compulsury", "compulsory", - "compuslion", "compulsion", - "compuslive", "compulsive", - "compuslory", "compulsory", - "compustion", "compulsion", - "computanti", "computation", - "conatiners", "containers", - "concedendo", "conceded", - "concedered", "conceded", - "conceitual", "conceptual", - "concentate", "concentrate", - "concenting", "connecting", - "conceptial", "conceptual", - "conceptuel", "conceptual", - "concersion", "concession", - "concesions", "concession", - "concidered", "considered", - "conciously", "consciously", - "concission", "concession", - "conclsuion", "concussion", - "conclusies", "conclusive", - "conclution", "conclusion", - "concorrent", "concurrent", - "concsience", "conscience", - "conculsion", "conclusion", - "conculsive", "conclusive", - "concurment", "concurrent", - "concurrant", "concurrent", - "concurrect", "concurrent", - "concusions", "concussion", - "concusison", "concussions", - "condamning", "condemning", - "condemming", "condemning", - "condencing", "condemning", - "condenming", "condemning", - "condensend", "condensed", - "condidtion", "condition", - "conditinal", "conditional", - "conditiner", "conditioner", - "conditiond", "conditioned", - "conditiong", "conditioning", - "condmening", "condemning", - "conduiting", "conducting", - "conencting", "connecting", - "conenction", "connection", - "conenctors", "connectors", - "conesencus", "consensus", - "confedarcy", "confederacy", - "confedence", "conference", - "confedercy", "confederacy", - "conferance", "conference", - "conferenze", "conference", - "conferming", "confirming", - "confernece", "conferences", - "confessino", "confessions", - "confidance", "confidence", - "confidenly", "confidently", - "confidense", "confidence", - "confidenty", "confidently", - "conflcting", "conflating", - "conflicing", "conflicting", - "conflictos", "conflicts", - "confliting", "conflating", - "confriming", "confirming", - "confussion", "confession", - "congratule", "congratulate", - "congresman", "congressman", - "congresmen", "congressmen", - "congressen", "congressmen", - "conjecutre", "conjecture", - "conjuction", "conjunction", - "conjuncion", "conjunction", - "conlcusion", "conclusion", - "conncetion", "connections", - "conneciton", "connection", - "connecties", "connects", - "connectins", "connects", - "connectivy", "connectivity", - "connectpro", "connector", - "conneticut", "connecticut", - "connotaion", "connotation", - "conpsiracy", "conspiracy", - "conqeuring", "conquering", - "conqouring", "conquering", - "conquerers", "conquerors", - "conquoring", "conquering", - "consciense", "conscience", - "consciouly", "consciously", - "consdiered", "considered", - "consending", "consenting", - "consensuel", "consensual", - "consenusal", "consensual", - "consequece", "consequence", - "consequnce", "consequence", - "conservare", "conserve", - "conservato", "conservation", - "conservice", "conserve", - "conservies", "conserve", - "conservite", "conserve", - "consicence", "conscience", - "consideras", "considers", - "consideret", "considerate", - "consipracy", "conspiracy", - "consistant", "consistent", - "consistens", "consists", - "consisteny", "consistency", - "consitency", "consistency", - "consituted", "constituted", - "conslutant", "consultant", - "consluting", "consulting", - "consolidad", "consolidated", - "consonents", "consonants", - "consorcium", "consortium", - "conspirace", "conspiracies", - "conspiricy", "conspiracy", - "conspriacy", "conspiracy", - "constaints", "constraints", - "constatnly", "constantly", - "constently", "constantly", - "constitude", "constitute", - "constitued", "constitute", - "constituem", "constitute", - "constituer", "constitute", - "constitues", "constitutes", - "constituie", "constitute", - "constituit", "constitute", - "constitutn", "constituents", - "constituye", "constitute", - "constnatly", "constantly", - "constracts", "constructs", - "constraits", "constraints", - "constransi", "constraints", - "constrants", "constraints", - "construced", "constructed", - "constructo", "construction", - "construint", "constraint", - "construits", "constructs", - "construted", "constructed", - "consueling", "consulting", - "consultata", "consultant", - "consultate", "consultant", - "consultati", "consultant", - "consultato", "consultation", - "consultent", "consultant", - "consumated", "consummated", - "consumbale", "consumables", - "consuments", "consumes", - "consumirem", "consumerism", - "consumires", "consumerism", - "consumirse", "consumerism", - "consumiste", "consumes", - "consumpion", "consumption", - "contaction", "contacting", - "contageous", "contagious", - "contagiosa", "contagious", - "contagioso", "contagious", - "contaigous", "contagious", - "containors", "containers", - "contaminen", "containment", - "contanting", "contacting", - "contection", "contention", - "contectual", "contextual", - "conteiners", "contenders", - "contempate", "contemplate", - "contemplat", "contempt", - "contempory", "contemporary", - "contenants", "continents", - "contencion", "contention", - "contendors", "contenders", - "contenents", "continents", - "conteneurs", "contenders", - "contengent", "contingent", - "contension", "contention", - "contentino", "contention", - "contentios", "contentious", - "contentous", "contentious", - "contestais", "contests", - "contestans", "contests", - "contestase", "contests", - "contestion", "contention", - "contestors", "contests", - "contextful", "contextual", - "contextuel", "contextual", - "contextura", "contextual", - "contianers", "containers", - "contianing", "containing", - "contibuted", "contributed", - "contibutes", "contributes", - "contigents", "continents", - "contigious", "contagious", - "contignent", "contingent", - "continants", "continents", - "continenal", "continental", - "continenet", "continents", - "contineous", "continuous", - "continetal", "continental", - "contingecy", "contingency", - "contingeny", "contingency", - "continient", "contingent", - "continious", "continuous", - "continiuty", "continuity", - "contintent", "contingent", - "continualy", "continually", - "continuare", "continue", - "continuati", "continuity", - "continuato", "continuation", - "continuent", "contingent", - "continuety", "continuity", - "continunes", "continents", - "continuons", "continuous", - "continutiy", "continuity", - "continuuum", "continuum", - "contitnent", "contingent", - "contiuning", "containing", - "contiunity", "continuity", - "contorller", "controllers", - "contracing", "contracting", - "contractar", "contractor", - "contracter", "contractor", - "contractin", "contraction", - "contractos", "contracts", - "contradice", "contradicted", - "contradics", "contradicts", - "contredict", "contradict", - "contribued", "contributed", - "contribuem", "contribute", - "contribuer", "contribute", - "contribues", "contributes", - "contribuie", "contribute", - "contribuit", "contribute", - "contributo", "contribution", - "contributs", "contributes", - "contribuye", "contribute", - "contricted", "contracted", - "contridict", "contradict", - "contriubte", "contributes", - "controlelr", "controllers", - "controlers", "controls", - "controling", "controlling", - "controlles", "controls", - "controvery", "controversy", - "controvesy", "controversy", - "contrubite", "contributes", - "contrubute", "contribute", - "contuining", "continuing", - "contuinity", "continuity", - "convaluted", "convoluted", - "convcition", "convictions", - "conveinent", "convenient", - "conveluted", "convoluted", - "convencion", "convention", - "conveniant", "convenient", - "conveniece", "convenience", - "convenince", "convenience", - "convential", "conventional", - "converesly", "conversely", - "convergens", "converse", - "converison", "conversions", - "converning", "converting", - "conversare", "converse", - "conversino", "conversions", - "conversley", "conversely", - "conversoin", "conversions", - "conversons", "conversions", - "convertion", "conversion", - "convertire", "converter", - "converying", "converting", - "conveyered", "conveyed", - "conviccion", "conviction", - "conviciton", "conviction", - "convienent", "convenient", - "conviluted", "convoluted", - "convincted", "convince", - "convinsing", "convincing", - "convinving", "convincing", - "convoluded", "convoluted", - "convoulted", "convoluted", - "convulated", "convoluted", - "convuluted", "convoluted", - "cooperatve", "cooperative", - "coordenate", "coordinate", - "coordiante", "coordinate", - "coordinare", "coordinate", - "coordinato", "coordination", - "coordinats", "coordinates", - "coordonate", "coordinate", - "cooridnate", "coordinate", - "copehnagen", "copenhagen", - "copenaghen", "copenhagen", - "copenahgen", "copenhagen", - "copengagen", "copenhagen", - "copengahen", "copenhagen", - "copenhagan", "copenhagen", - "copenhague", "copenhagen", - "copenhagun", "copenhagen", - "copenhaven", "copenhagen", - "copenhegan", "copenhagen", - "copyrighed", "copyrighted", - "copyrigted", "copyrighted", - "corinthans", "corinthians", - "corinthias", "corinthians", - "corinthins", "corinthians", - "cornmitted", "committed", - "corporatie", "corporate", - "corralated", "correlated", - "corralates", "correlates", - "correccion", "correction", - "correciton", "corrections", - "correcters", "correctors", - "correctess", "correctness", - "correctivo", "correction", - "correctons", "corrections", - "corregated", "correlated", - "correkting", "correcting", - "correlatas", "correlates", - "correlatie", "correlated", - "correlatos", "correlates", - "correspend", "correspond", - "corrilated", "correlated", - "corrilates", "correlates", - "corrispond", "correspond", - "corrolated", "correlated", - "corrolates", "correlates", - "corrospond", "correspond", - "corrpution", "corruption", - "corrulates", "correlates", - "corrupcion", "corruption", - "cosmeticas", "cosmetics", - "cosmeticos", "cosmetics", - "costumized", "customized", - "counceling", "counseling", - "councellor", "councillor", - "councelors", "counselors", - "councilers", "councils", - "counselers", "counselors", - "counsellng", "counselling", - "counsilers", "counselors", - "counsiling", "counseling", - "counsilors", "counselors", - "counsolers", "counselors", - "counsoling", "counseling", - "countepart", "counteract", - "counteratk", "counteract", - "counterbat", "counteract", - "countercat", "counteract", - "countercut", "counteract", - "counteries", "counters", - "countoring", "countering", - "countryies", "countryside", - "countrying", "countering", - "courcework", "coursework", - "coursefork", "coursework", - "courthosue", "courthouse", - "courtrooom", "courtroom", - "cousnelors", "counselors", - "coutneract", "counteract", - "coutnering", "countering", - "covenental", "covenant", - "cranberrry", "cranberry", - "creationis", "creations", - "creationsm", "creationism", - "creationst", "creationist", - "creativily", "creatively", - "creativley", "creatively", - "credibilty", "credibility", - "creeperest", "creepers", - "crimanally", "criminally", - "criminalty", "criminally", - "criminalul", "criminally", - "criticable", "critical", - "criticarlo", "critical", - "criticiing", "criticising", - "criticisim", "criticism", - "criticisme", "criticise", - "criticisng", "criticising", - "criticists", "critics", - "criticisze", "criticise", - "criticizms", "criticisms", - "criticizng", "criticizing", - "critisiced", "criticized", - "critisicms", "criticisms", - "critisicsm", "criticisms", - "critisiscm", "criticisms", - "critisisms", "criticisms", - "critisizes", "criticises", - "critisizms", "criticisms", - "critiziced", "criticized", - "critizised", "criticized", - "critizisms", "criticisms", - "critizized", "criticized", - "crocodille", "crocodile", - "crossfiter", "crossfire", - "crutchetts", "crutches", - "crystalens", "crystals", - "crystalisk", "crystals", - "crystallis", "crystals", - "cuatiously", "cautiously", - "culterally", "culturally", - "cultrually", "culturally", - "culumative", "cumulative", - "culutrally", "culturally", - "cumbersone", "cumbersome", - "cumbursome", "cumbersome", - "cumpolsory", "compulsory", - "cumulitive", "cumulative", - "currancies", "currencies", - "currenctly", "currency", - "currenices", "currencies", - "currentfps", "currents", - "currentlys", "currents", - "currentpos", "currents", - "currentusa", "currents", - "curriculem", "curriculum", - "curriculim", "curriculum", - "curriences", "currencies", - "curroption", "corruption", - "custimized", "customized", - "customzied", "customized", - "custumized", "customized", - "cutscences", "cutscene", - "cutscenses", "cutscene", - "dangerouly", "dangerously", - "dealerhsip", "dealerships", - "deathamtch", "deathmatch", - "deathmacth", "deathmatch", - "debateable", "debatable", - "decembeard", "december", - "decendants", "descendants", - "decendents", "descendants", - "decideable", "decidable", - "deciptions", "depictions", - "decisiones", "decisions", - "declarasen", "declares", - "declaraste", "declares", - "declaremos", "declares", - "decomposit", "decompose", - "decoracion", "decoration", - "decorativo", "decoration", - "decoritive", "decorative", - "decroative", "decorative", - "decsending", "descending", - "dedicacion", "dedication", - "dedikation", "dedication", - "deducatble", "deductible", - "deducitble", "deductible", - "defacation", "defamation", - "defamating", "defamation", - "defanitely", "definately", - "defelction", "deflection", - "defendeers", "defender", - "defendents", "defendants", - "defenderes", "defenders", - "defenesman", "defenseman", - "defenselss", "defenseless", - "defensivly", "defensively", - "defianetly", "definately", - "defiantely", "definately", - "defiantley", "definately", - "defibately", "definately", - "deficately", "definately", - "deficiancy", "deficiency", - "deficience", "deficiencies", - "deficienct", "deficient", - "deficienty", "deficiency", - "defiintely", "definately", - "definaetly", "definately", - "definaitly", "definately", - "definaltey", "definately", - "definataly", "definately", - "definateky", "definately", - "definately", "definitely", - "definatily", "definately", - "defination", "definition", - "definative", "definitive", - "definatlly", "definately", - "definatrly", "definately", - "definayely", "definately", - "defineatly", "definately", - "definetaly", "definately", - "definetely", "definitely", - "definetily", "definately", - "definetlly", "definetly", - "definettly", "definately", - "definicion", "definition", - "definietly", "definitely", - "definining", "defining", - "definitaly", "definately", - "definiteyl", "definitly", - "definitivo", "definition", - "definitley", "definitely", - "definitlly", "definitly", - "definitlry", "definitly", - "definitlty", "definitly", - "definjtely", "definately", - "definltely", "definately", - "definotely", "definately", - "definstely", "definately", - "defintaley", "definately", - "defintiely", "definitely", - "defintiion", "definitions", - "definutely", "definately", - "deflaction", "deflection", - "defleciton", "deflection", - "deflektion", "deflection", - "defniately", "definately", - "degenarate", "degenerate", - "degenerare", "degenerate", - "degenerite", "degenerate", - "degoratory", "derogatory", - "degraderad", "degraded", - "dehydraded", "dehydrated", - "dehyrdated", "dehydrated", - "deifnately", "definately", - "deisgnated", "designated", - "delaership", "dealership", - "delearship", "dealership", - "delegaties", "delegate", - "delegative", "delegate", - "delfection", "deflection", - "delibarate", "deliberate", - "deliberant", "deliberate", - "delibirate", "deliberate", - "deligthful", "delightful", - "deliverate", "deliberate", - "deliverees", "deliveries", - "deliviered", "delivered", - "deliviring", "delivering", - "delporable", "deplorable", - "delpoyment", "deployment", - "delutional", "delusional", - "dementieva", "dementia", - "deminsions", "dimensions", - "democracis", "democracies", - "democracts", "democrat", - "democratas", "democrats", - "democrates", "democrats", - "demograhic", "demographic", - "demographs", "demographics", - "demograpic", "demographic", - "demolation", "demolition", - "demolicion", "demolition", - "demolision", "demolition", - "demolitian", "demolition", - "demoliting", "demolition", - "demoloshed", "demolished", - "demolution", "demolition", - "demonished", "demolished", - "demonstate", "demonstrate", - "demonstras", "demonstrates", - "demorcracy", "democracy", - "denegerate", "degenerate", - "denominato", "denomination", - "denomintor", "denominator", - "deocrative", "decorative", - "deomcratic", "democratic", - "deparments", "departments", - "departmens", "departments", - "departmnet", "departments", - "depcitions", "depictions", - "depdending", "depending", - "depencency", "dependency", - "dependance", "dependence", - "dependancy", "dependency", - "dependandt", "dependant", - "dependends", "depended", - "dependened", "depended", - "dependenta", "dependant", - "dependente", "dependence", - "depicitons", "depictions", - "deplorabel", "deplorable", - "deplorabil", "deplorable", - "deplorible", "deplorable", - "deplyoment", "deployment", - "depolyment", "deployment", - "depositers", "deposits", - "depressief", "depressive", - "depressies", "depressive", - "deprivaton", "deprivation", - "deragotory", "derogatory", - "derivaties", "derivatives", - "deriviated", "derived", - "derivitave", "derivative", - "derivitive", "derivative", - "derogatary", "derogatory", - "derogatery", "derogatory", - "derogetory", "derogatory", - "derogitory", "derogatory", - "derogotary", "derogatory", - "derogotory", "derogatory", - "derviative", "derivative", - "descendats", "descendants", - "descendend", "descended", - "descenting", "descending", - "descerning", "descending", - "descipable", "despicable", - "descisions", "decisions", - "descriibes", "describes", - "descripton", "description", - "desginated", "designated", - "desigining", "designing", - "desireable", "desirable", - "desktopbsd", "desktops", - "despciable", "despicable", - "desperatly", "desperately", - "desperetly", "desperately", - "despicaple", "despicable", - "despicible", "despicable", - "dessicated", "desiccated", - "destinatin", "destinations", - "destinaton", "destination", - "destoryers", "destroyers", - "destorying", "destroying", - "destroyeds", "destroyers", - "destroyeer", "destroyers", - "destrucion", "destruction", - "destrucive", "destructive", - "destryoing", "destroying", - "detectarlo", "detector", - "detectaron", "detector", - "detectoare", "detector", - "determinas", "determines", - "determinig", "determining", - "determinsm", "determinism", - "deutschand", "deutschland", - "devastaded", "devastated", - "devastaing", "devastating", - "devastanti", "devastating", - "devasteted", "devastated", - "develepors", "developers", - "develoeprs", "developers", - "developmet", "developments", - "developors", "develops", - "developped", "developed", - "developres", "develops", - "develpment", "development", - "devestated", "devastated", - "devolvendo", "devolved", - "deyhdrated", "dehydrated", - "diagnosied", "diagnose", - "diagnosies", "diagnosis", - "diagnositc", "diagnostic", - "diagnossed", "diagnose", - "diagnosted", "diagnose", - "diagnotics", "diagnostic", - "diagonstic", "diagnostic", - "dichotomoy", "dichotomy", - "dicitonary", "dictionary", - "diconnects", "disconnects", - "dicovering", "discovering", - "dictateurs", "dictates", - "dictionare", "dictionaries", - "differance", "difference", - "differenly", "differently", - "differense", "differences", - "differente", "difference", - "differentl", "differential", - "differenty", "differently", - "differnece", "difference", - "difficulte", "difficulties", - "difficults", "difficulties", - "difficutly", "difficulty", - "diffuculty", "difficulty", - "diganostic", "diagnostic", - "dimensinal", "dimensional", - "dimentions", "dimensions", - "dimesnions", "dimensions", - "dimineshes", "diminishes", - "diminising", "diminishing", - "dimunitive", "diminutive", - "dinosaures", "dinosaurs", - "dinosaurus", "dinosaurs", - "dipections", "depictions", - "diplimatic", "diplomatic", - "diplomacia", "diplomatic", - "diplomancy", "diplomacy", - "dipolmatic", "diplomatic", - "directinla", "directional", - "directionl", "directional", - "directivos", "directions", - "directores", "directors", - "directorys", "directors", - "directsong", "directions", - "disaapoint", "disappoint", - "disagreeed", "disagreed", - "disapeared", "disappeared", - "disappeard", "disappeared", - "disappered", "disappeared", - "disappiont", "disappoint", - "disaproval", "disapproval", - "disastorus", "disastrous", - "disastrosa", "disastrous", - "disastrose", "disastrous", - "disastrosi", "disastrous", - "disastroso", "disastrous", - "disaterous", "disastrous", - "discalimer", "disclaimer", - "discapline", "discipline", - "discepline", "discipline", - "disception", "discretion", - "discharded", "discharged", - "disciplers", "disciples", - "disciplies", "disciplines", - "disciplins", "disciplines", - "disciprine", "discipline", - "disclamier", "disclaimer", - "discliamer", "disclaimer", - "disclipine", "discipline", - "disclousre", "disclosure", - "disclsoure", "disclosure", - "discograhy", "discography", - "discograpy", "discography", - "discolsure", "disclosure", - "disconenct", "disconnect", - "disconncet", "disconnects", - "disconnets", "disconnects", - "discontued", "discounted", - "discoruage", "discourages", - "discources", "discourse", - "discourgae", "discourages", - "discourges", "discourages", - "discoveres", "discovers", - "discoveryd", "discovered", - "discoverys", "discovers", - "discrecion", "discretion", - "discreddit", "discredited", - "discrepany", "discrepancy", - "discresion", "discretion", - "discreting", "discretion", - "discribing", "describing", - "discrimine", "discriminate", - "discrouage", "discourages", - "discrption", "discretion", - "discusison", "discussions", - "discusting", "discussing", - "disgracful", "disgraceful", - "disgrunted", "disgruntled", - "disgruntld", "disgruntled", - "disguisted", "disguise", - "disgustiny", "disgustingly", - "disgustosa", "disgusts", - "disgustose", "disgusts", - "disgustosi", "disgusts", - "disgustoso", "disgusts", - "dishcarged", "discharged", - "dishinored", "dishonored", - "disicpline", "discipline", - "disiplined", "disciplined", - "dislcaimer", "disclaimer", - "dismanteld", "dismantled", - "dismanting", "dismantling", - "dismentled", "dismantled", - "dispecable", "despicable", - "dispencary", "dispensary", - "dispencers", "dispenser", - "dispencing", "dispensing", - "dispensare", "dispenser", - "dispensory", "dispensary", - "dispesnary", "dispensary", - "dispicable", "despicable", - "displayfps", "displays", - "dispositon", "disposition", - "dispostion", "disposition", - "disputerad", "disputed", - "disrecpect", "disrespect", - "disrection", "discretion", - "disrepsect", "disrespect", - "disresepct", "disrespect", - "disrespekt", "disrespect", - "disription", "disruption", - "disrispect", "disrespect", - "disrputing", "disrupting", - "disruptivo", "disruption", - "disruptron", "disruption", - "dissapears", "disappears", - "dissappear", "disappear", - "disscusion", "discussion", - "dissmisive", "dismissive", - "dissodance", "dissonance", - "dissonante", "dissonance", - "dissonence", "dissonance", - "distastful", "distasteful", - "disticntly", "distinctly", - "distiction", "distinction", - "distincion", "distinction", - "distincive", "distinctive", - "distinclty", "distinctly", - "distinctie", "distinctive", - "distinctin", "distinctions", - "distingish", "distinguish", - "distingush", "distinguish", - "distintcly", "distinctly", - "distoriton", "distortion", - "distorsion", "distortion", - "distortian", "distortion", - "distortron", "distortion", - "distractes", "distracts", - "distractia", "district", - "distractin", "district", - "distractiv", "district", - "distration", "distortion", - "distribuem", "distribute", - "distribuer", "distribute", - "distribuie", "distribute", - "distribuit", "distribute", - "distributs", "distributors", - "distribuye", "distribute", - "distrotion", "distortion", - "distrubing", "disturbing", - "distrubtes", "distrust", - "distrubute", "distribute", - "distubring", "disturbing", - "disturbace", "disturbance", - "disturping", "disrupting", - "disucssing", "discussing", - "disucssion", "discussion", - "disurption", "disruption", - "ditributed", "distributed", - "diversifiy", "diversify", - "dividendes", "dividends", - "dividendos", "dividends", - "divideneds", "dividend", - "divinition", "divination", - "divinitory", "divinity", - "divisiones", "divisions", - "dobulelift", "doublelift", - "doccuments", "documents", - "documentry", "documentary", - "dogmatisch", "dogmatic", - "dolphinese", "dolphins", - "domianting", "dominating", - "domimation", "domination", - "dominacion", "domination", - "dominaters", "dominates", - "donwgraded", "downgraded", - "donwloaded", "downloaded", - "donwvoters", "downvoters", - "donwvoting", "downvoting", - "doomsdaily", "doomsday", - "doubellift", "doublelift", - "doubleiift", "doublelift", - "doubleleft", "doublelift", - "doublelfit", "doublelift", - "doublerift", "doublelift", - "doulbelift", "doublelift", - "downgarded", "downgraded", - "downgrated", "downgrade", - "downlaoded", "downloaded", - "downloadas", "downloads", - "downloades", "downloads", - "downovting", "downvoting", - "downroaded", "downgraded", - "downsiders", "downsides", - "downstaris", "downstairs", - "downstiars", "downstairs", - "downtokers", "downvoters", - "downtoking", "downvoting", - "downtraded", "downgraded", - "downviting", "downvoting", - "downvotear", "downvoters", - "downvoteas", "downvoters", - "downvoteds", "downvoters", - "downvotees", "downvoters", - "downvotesd", "downvoters", - "downvotess", "downvoters", - "downvotest", "downvoters", - "downvoteur", "downvoters", - "downvoties", "downvoters", - "downvotres", "downvoters", - "downvotted", "downvote", - "downvottes", "downvoters", - "downwoters", "downvoters", - "downwoting", "downvoting", - "drasticaly", "drastically", - "drasticlly", "drastically", - "draughtman", "draughtsman", - "dumbbellls", "dumbbells", - "dumbfouded", "dumbfounded", - "dumbfouned", "dumbfounded", - "dungeoness", "dungeons", - "dupilcates", "duplicates", - "duplicants", "duplicates", - "duplicatas", "duplicates", - "duplicitas", "duplicates", - "duplifaces", "duplicates", - "durabiltiy", "durability", - "dyamically", "dynamically", - "dynamicaly", "dynamically", - "dynamicdns", "dynamics", - "dynamiclly", "dynamically", - "dynamicpsf", "dynamics", - "dynamitage", "dynamite", - "dysfuncion", "dysfunction", - "earhtbound", "earthbound", - "earthqauke", "earthquake", - "earthquack", "earthquake", - "earthquaks", "earthquakes", - "earthquate", "earthquake", - "earthqukes", "earthquakes", - "easthetics", "aesthetics", - "ecoligical", "ecological", - "ecomonical", "economical", - "econimical", "economical", - "econimists", "economists", - "economicas", "economics", - "economicos", "economics", - "economicus", "economics", - "economisch", "economic", - "economisit", "economists", - "effeciency", "efficiency", - "effectivly", "effectively", - "efficeincy", "efficiency", - "efficently", "efficiently", - "efficiancy", "efficiency", - "efficienct", "efficient", - "efficienty", "efficiently", - "egotistcal", "egotistical", - "ehtnically", "ethnically", - "ejaculaion", "ejaculation", - "ejaculatie", "ejaculate", - "ejaculatin", "ejaculation", - "ejaculaton", "ejaculation", - "ejaculatte", "ejaculate", - "electircal", "electrical", - "electivite", "elective", - "electoraat", "electorate", - "electorale", "electorate", - "electorite", "electorate", - "electornic", "electronic", - "electrican", "electrician", - "electriciy", "electricity", - "electricty", "electricity", - "electrinic", "electrician", - "electroate", "electorate", - "electrodan", "electron", - "electroinc", "electron", - "electrolye", "electrolytes", - "electroman", "electron", - "electroncs", "electrons", - "electrones", "electrons", - "electronik", "election", - "electronis", "electronics", - "electronix", "election", - "elemantary", "elementary", - "elementery", "elementary", - "elementray", "elementary", - "eleminated", "eliminated", - "elephantes", "elephants", - "elephantis", "elephants", - "elephantos", "elephants", - "elephantus", "elephants", - "eletricity", "electricity", - "elimanates", "eliminates", - "elimenates", "eliminates", - "elimentary", "elementary", - "elimimates", "eliminates", - "eliminaste", "eliminates", - "eliminatin", "elimination", - "eliminaton", "elimination", - "eliminster", "eliminates", - "ellipitcal", "elliptical", - "ellipsical", "elliptical", - "ellipticle", "elliptical", - "ellitpical", "elliptical", - "ellpitical", "elliptical", - "eloquantly", "eloquently", - "eloquintly", "eloquently", - "emapthetic", "empathetic", - "embarassed", "embarrassed", - "embarassig", "embarassing", - "embarrased", "embarrassed", - "embarrases", "embarrassed", - "embezelled", "embezzled", - "emblamatic", "emblematic", - "embodyment", "embodiment", - "emergenies", "emergencies", - "emmigrated", "emigrated", - "emminently", "eminently", - "emmisaries", "emissaries", - "emobdiment", "embodiment", - "emotionaly", "emotionally", - "empahsized", "emphasized", - "empahsizes", "emphasizes", - "empathatic", "empathetic", - "emphacized", "emphasized", - "emphatetic", "empathetic", - "emphatised", "emphasized", - "emphatized", "emphasized", - "emphatizes", "emphasizes", - "emphazised", "emphasized", - "emphazises", "emphasizes", - "emphesized", "emphasized", - "emphesizes", "emphasizes", - "emphisized", "emphasized", - "emphisizes", "emphasizes", - "empiricaly", "empirically", - "employeers", "employees", - "employeurs", "employer", - "emprisoned", "imprisoned", - "encahnting", "enchanting", - "enchancing", "enchanting", - "enchanging", "enchanting", - "enchantent", "enchantment", - "enchantmet", "enchantments", - "encompases", "encompasses", - "encounterd", "encountered", - "encountred", "encountered", - "encouraing", "encouraging", - "encoutners", "encounters", - "encription", "encryption", - "encrpytion", "encryption", - "encyrption", "encryption", - "endlessley", "endlessly", - "endolithes", "endoliths", - "enforceing", "enforcing", - "engagemnet", "engagements", - "engagemnts", "engagements", - "engieneers", "engineers", - "enginereed", "engineered", - "enivitable", "inevitable", - "enlargment", "enlargement", - "enlighment", "enlighten", - "enlightend", "enlightened", - "enlightned", "enlightened", - "enrolement", "enrollment", - "enrollemnt", "enrollment", - "enterpirse", "enterprise", - "enterprice", "enterprise", - "enterpries", "enterprises", - "enterprize", "enterprise", - "enterprsie", "enterprises", - "enterrpise", "enterprises", - "entertaing", "entertaining", - "enthically", "ethnically", - "enthisiast", "enthusiast", - "enthuiasts", "enthusiast", - "enthuisast", "enthusiasts", - "enthusiams", "enthusiasm", - "enthusiant", "enthusiast", - "enthusiats", "enthusiast", - "enthusiest", "enthusiast", - "enthusists", "enthusiasts", - "envelopped", "envelope", - "enveloppen", "envelope", - "enveloppes", "envelope", - "enviorment", "environment", - "enviroment", "environment", - "environmet", "environments", - "equiavlent", "equivalents", - "equilavent", "equivalent", - "equilibium", "equilibrium", - "equilibrim", "equilibrium", - "equilibrum", "equilibrium", - "equippment", "equipment", - "equitorial", "equatorial", - "equivalant", "equivalent", - "equivalnce", "equivalence", - "equivalnet", "equivalents", - "equivelant", "equivalent", - "equivelent", "equivalent", - "equivilant", "equivalent", - "equivilent", "equivalent", - "equivlaent", "equivalents", - "equivolent", "equivalent", - "eratically", "erratically", - "escalative", "escalate", - "escavation", "escalation", - "esitmation", "estimation", - "esoterisch", "esoteric", - "especailly", "especially", - "espeically", "especially", - "espressino", "espresso", - "espression", "espresso", - "essencials", "essentials", - "essensials", "essentials", - "essentails", "essentials", - "essentialy", "essentially", - "essentiels", "essentials", - "essentuals", "essentials", - "estabishes", "establishes", - "estimacion", "estimation", - "estimativo", "estimation", - "estination", "estimation", - "ethicallly", "ethically", - "ethincally", "ethnically", - "ethnicites", "ethnicities", - "ethnicitiy", "ethnicity", - "euphorical", "euphoria", - "euphorisch", "euphoric", - "euthanaisa", "euthanasia", - "euthanazia", "euthanasia", - "euthanesia", "euthanasia", - "evaluacion", "evaluation", - "evalutaion", "evaluation", - "evaulating", "evaluating", - "evaulation", "evaluation", - "eventaully", "eventually", - "eventially", "eventually", - "everyoneis", "everyones", - "exacberate", "exacerbated", - "exagerated", "exaggerated", - "exagerates", "exaggerates", - "exagerrate", "exaggerate", - "exaggarate", "exaggerate", - "exaggurate", "exaggerate", - "exahusting", "exhausting", - "exahustion", "exhaustion", - "examinated", "examined", - "examinerad", "examined", - "exapansion", "expansion", - "exapnsions", "expansions", - "exauhsting", "exhausting", - "exauhstion", "exhaustion", - "excecuting", "executing", - "excecution", "execution", - "exceedigly", "exceedingly", - "exceedinly", "exceedingly", - "excellance", "excellence", - "excellenet", "excellence", - "excellenze", "excellence", - "excerising", "exercising", - "excessivly", "excessively", - "exchangees", "exchanges", - "excitiment", "excitement", - "exclsuives", "exclusives", - "exclusivas", "exclusives", - "exclusivly", "exclusively", - "exclusivos", "exclusives", - "exclusivty", "exclusivity", - "exclussive", "exclusives", - "exclusvies", "exclusives", - "excpetions", "exceptions", - "exculsives", "exclusives", - "exculsivly", "exclusively", - "execptions", "exceptions", - "exectuable", "executable", - "exectuions", "executions", - "exectuives", "executives", - "execusions", "executions", - "executabil", "executable", - "executible", "executable", - "executiner", "executioner", - "executings", "executions", - "executivas", "executives", - "exeedingly", "exceedingly", - "exepmtions", "exemptions", - "exeptional", "exceptional", - "exercicing", "exercising", - "exercizing", "exercising", - "exersicing", "exercising", - "exersising", "exercising", - "exersizing", "exercising", - "exerternal", "external", - "exeuctions", "executions", - "exhasuting", "exhausting", - "exhasution", "exhaustion", - "exhaustivo", "exhaustion", - "exhibicion", "exhibition", - "exhibitons", "exhibits", - "exhuasting", "exhausting", - "exhuastion", "exhaustion", - "exibitions", "exhibitions", - "exictement", "excitement", - "exipration", "expiration", - "existantes", "existent", - "existenial", "existential", - "existental", "existential", - "exlcusives", "exclusives", - "exorbatant", "exorbitant", - "exorbatent", "exorbitant", - "exorbidant", "exorbitant", - "exorbirant", "exorbitant", - "exorbitent", "exorbitant", - "expalining", "explaining", - "expanisons", "expansions", - "expansivos", "expansions", - "expanssion", "expansions", - "expantions", "expansions", - "expecially", "especially", - "expectaion", "expectation", - "expectansy", "expectancy", - "expectency", "expectancy", - "expections", "exceptions", - "expedetion", "expedition", - "expedicion", "expedition", - "expeditivo", "expedition", - "expeiments", "experiments", - "expemtions", "exemptions", - "expendeble", "expendable", - "expendible", "expendable", - "expensable", "expendable", - "expentancy", "expectancy", - "expereince", "experience", - "experement", "experiment", - "experiance", "experience", - "experieced", "experienced", - "experieces", "experiences", - "experiemnt", "experiment", - "experiened", "experienced", - "experiense", "experiences", - "expermient", "experiments", - "experssion", "expression", - "expextancy", "expectancy", - "expidetion", "expedition", - "expierence", "experience", - "expination", "expiration", - "expirement", "experiment", - "explanatin", "explanations", - "explicatia", "explicit", - "explicatie", "explicit", - "explicatif", "explicit", - "explicatii", "explicit", - "explicetly", "explicitly", - "explicilty", "explicitly", - "explioting", "exploiting", - "exploiding", "exploiting", - "exploition", "exploiting", - "explorarea", "explorer", - "exploreres", "explorers", - "explosivas", "explosives", - "explossion", "explosions", - "explossive", "explosives", - "explosvies", "explosives", - "explotions", "explosions", - "explusions", "explosions", - "expodition", "exposition", - "expoliting", "exploiting", - "expolsions", "explosions", - "expolsives", "explosives", - "exponental", "exponential", - "exposicion", "exposition", - "expositivo", "exposition", - "expotition", "exposition", - "exprensive", "expressive", - "expresions", "expression", - "expresison", "expressions", - "expressens", "expresses", - "expressief", "expressive", - "expressley", "expressly", - "expriation", "expiration", - "extensivly", "extensively", - "extentions", "extensions", - "exterioara", "exterior", - "exterioare", "exterior", - "extermally", "externally", - "extermists", "extremists", - "extraccion", "extraction", - "extractivo", "extraction", - "extractnow", "extraction", - "extradtion", "extraction", - "extremaste", "extremes", - "extremeley", "extremely", - "extremelly", "extremely", - "extrememly", "extremely", - "extremests", "extremists", - "extremised", "extremes", - "extremisim", "extremism", - "extremisme", "extremes", - "extremiste", "extremes", - "extrenally", "externally", - "extrimists", "extremists", - "eyeballers", "eyeballs", - "fabriacted", "fabricated", - "fabricatie", "fabricated", - "faciliated", "facilitated", - "facilitait", "facilitate", - "facilitant", "facilitate", - "facilitare", "facilitate", - "facisnated", "fascinated", - "facitilies", "facilities", - "facsinated", "fascinated", - "fahernheit", "fahrenheit", - "fahrenhiet", "fahrenheit", - "fallatious", "fallacious", - "fallicious", "fallacious", - "falshbacks", "flashbacks", - "familiarty", "familiarity", - "familiarze", "familiarize", - "fanaticals", "fanatics", - "fanfaction", "fanfiction", - "fanfcition", "fanfiction", - "fanficiton", "fanfiction", - "fanserivce", "fanservice", - "fanservise", "fanservice", - "fanservive", "fanservice", - "fantasiose", "fantasies", - "farehnheit", "fahrenheit", - "farhenheit", "fahrenheit", - "fascianted", "fascinated", - "fascinatie", "fascinated", - "fascinatin", "fascination", - "fascistisk", "fascists", - "fatalaties", "fatalities", - "favoruites", "favourites", - "favourates", "favourites", - "favouritsm", "favourites", - "favourties", "favourites", - "federacion", "federation", - "federativo", "federation", - "fellowhsip", "fellowship", - "fellowshop", "fellowship", - "feminimity", "femininity", - "feministas", "feminists", - "feminitity", "femininity", - "fermentato", "fermentation", - "fertalizer", "fertilizer", - "fertelizer", "fertilizer", - "fertilizar", "fertilizer", - "fertilzier", "fertilizer", - "fertiziler", "fertilizer", - "festivales", "festivals", - "fetishiste", "fetishes", - "ficticious", "fictitious", - "filessytem", "filesystem", - "filesytems", "filesystem", - "filmamkers", "filmmakers", - "filmmakare", "filmmakers", - "finallizes", "finalizes", - "financialy", "financially", - "fingernals", "fingernails", - "fingerpies", "fingertips", - "fingerpint", "fingerprint", - "fingertaps", "fingertips", - "fingertits", "fingertips", - "fingertops", "fingertips", - "fireballls", "fireballs", - "firefigher", "firefighter", - "firefigter", "firefighter", - "firendlies", "friendlies", - "firghtened", "frightened", - "fisionable", "fissionable", - "flashligth", "flashlight", - "flaskbacks", "flashbacks", - "flawleslly", "flawlessly", - "flexibiliy", "flexibility", - "flexibilty", "flexibility", - "flimmakers", "filmmakers", - "fluctuatie", "fluctuate", - "fluctuatin", "fluctuations", - "flutterhsy", "fluttershy", - "fluttersky", "fluttershy", - "flutterspy", "fluttershy", - "forcifully", "forcefully", - "forecfully", "forcefully", - "foreginers", "foreigners", - "foregorund", "foreground", - "foreignese", "foreigners", - "foreigness", "foreigners", - "foreignors", "foreigners", - "foreingers", "foreigners", - "forensisch", "forensic", - "foreseeble", "foreseeable", - "forgeiners", "foreigners", - "forgieners", "foreigners", - "forgivance", "forgiven", - "forgivenss", "forgiveness", - "forgotting", "forgetting", - "foriegners", "foreigners", - "formadible", "formidable", - "formalhaut", "fomalhaut", - "formallity", "formally", - "formallize", "formalize", - "formatiing", "formatting", - "formatings", "formations", - "formativos", "formations", - "formidabel", "formidable", - "formidabil", "formidable", - "formidible", "formidable", - "forminable", "formidable", - "formitable", "formidable", - "formuladas", "formulas", - "formulados", "formulas", - "forseeable", "foreseeable", - "fortelling", "foretelling", - "fortunatly", "fortunately", - "fortunetly", "fortunately", - "foundaiton", "foundations", - "foundaries", "foundries", - "foundatoin", "foundations", - "fractalers", "fractals", - "fractalius", "fractals", - "fractalpus", "fractals", - "fracturare", "fracture", - "fragmanted", "fragment", - "francaises", "franchises", - "franchices", "franchises", - "franchines", "franchises", - "franchizes", "franchises", - "franchsies", "franchises", - "fransiscan", "franciscan", - "franticaly", "frantically", - "franticlly", "frantically", - "fraternaty", "fraternity", - "fraternety", "fraternity", - "fraterntiy", "fraternity", - "fraturnity", "fraternity", - "fraudalent", "fraudulent", - "fraudelant", "fraudulent", - "fraudelent", "fraudulent", - "fraudolent", "fraudulent", - "fraudulant", "fraudulent", - "freedomers", "freedoms", - "freedomest", "freedoms", - "freindlies", "friendlies", - "freindship", "friendship", - "frequencey", "frequency", - "friednship", "friendships", - "friednzone", "friendzoned", - "friendhsip", "friendship", - "friendsies", "friendlies", - "friendzies", "friendlies", - "friendzond", "friendzoned", - "frientship", "friendship", - "frigthened", "frightened", - "fromatting", "formatting", - "fromidable", "formidable", - "frontlinie", "frontline", - "fruadulent", "fraudulent", - "frustraded", "frustrated", - "frustradet", "frustrates", - "frustraits", "frustrates", - "frustrants", "frustrates", - "frustratin", "frustration", - "frustrsted", "frustrates", - "fucntional", "functional", - "fulfulling", "fulfilling", - "fullfiling", "fulfilling", - "fullfilled", "fulfilled", - "fullscrean", "fullscreen", - "fulttershy", "fluttershy", - "funcitonal", "functional", - "fundametal", "fundamental", - "furstrated", "frustrated", - "furstrates", "frustrates", - "furutistic", "futuristic", - "futhermore", "furthermore", - "futurestic", "futuristic", - "futurisitc", "futuristic", - "futurustic", "futuristic", - "galvinized", "galvanized", - "garuanteed", "guaranteed", - "garuantees", "guarantees", - "gauntanamo", "guantanamo", - "gauntlents", "gauntlet", - "gauranteed", "guaranteed", - "gaurantees", "guarantees", - "gaurenteed", "guaranteed", - "gaurentees", "guarantees", - "generalice", "generalize", - "generalife", "generalize", - "generalnie", "generalize", - "generaters", "generates", - "generaties", "generate", - "generatios", "generators", - "generatons", "generators", - "generatore", "generate", - "generelize", "generalize", - "generocity", "generosity", - "generoisty", "generosity", - "generostiy", "generosity", - "geneticaly", "genetically", - "geneticlly", "genetically", - "genitalias", "genitals", - "genuinelly", "genuinely", - "geographia", "geographical", - "geogrpahic", "geographic", - "germanisch", "germanic", - "gigantisch", "gigantic", - "gimmickers", "gimmicks", - "girlfirend", "girlfriend", - "girlfreind", "girlfriend", - "girlfriens", "girlfriends", - "girlfrinds", "girlfriends", - "girlfrined", "girlfriends", - "goalkeaper", "goalkeeper", - "goalkeeprs", "goalkeeper", - "goalkepeer", "goalkeeper", - "goegraphic", "geographic", - "golakeeper", "goalkeeper", - "goldburger", "goldberg", - "goosebumbs", "goosebumps", - "goosegumps", "goosebumps", - "goosepumps", "goosebumps", - "gothenberg", "gothenburg", - "govenrment", "government", - "govermenet", "goverment", - "govermnent", "governments", - "governemnt", "government", - "governened", "governed", - "governered", "governed", - "governmant", "governmental", - "governmetn", "governments", - "governmnet", "government", - "govnerment", "government", - "govornment", "government", - "gradiating", "graduating", - "gradiation", "graduation", - "graduacion", "graduation", - "grapefriut", "grapefruit", - "grapefrukt", "grapefruit", - "graphicaly", "graphically", - "graphiclly", "graphically", - "gratituous", "gratuitous", - "gratiutous", "gratuitous", - "gratuidous", "gratuitous", - "gratuituos", "gratuitous", - "gratutious", "gratuitous", - "graudating", "graduating", - "graudation", "graduation", - "gravitatie", "gravitate", - "greatfully", "gratefully", - "greenhosue", "greenhouse", - "greviances", "grievances", - "grievences", "grievances", - "grilfriend", "girlfriend", - "guaduloupe", "guadalupe", - "guanatanmo", "guantanamo", - "guantamamo", "guantanamo", - "guantamano", "guantanamo", - "guantanano", "guantanamo", - "guantanemo", "guantanamo", - "guantanoma", "guantanamo", - "guantanomo", "guantanamo", - "guantonamo", "guantanamo", - "guarantess", "guarantees", - "guardiands", "guardians", - "guardianes", "guardians", - "guardianis", "guardians", - "guarenteed", "guaranteed", - "guarentees", "guarantees", - "guarnateed", "guaranteed", - "guarnatees", "guarantees", - "guarunteed", "guaranteed", - "guaruntees", "guarantees", - "guatamalan", "guatemalan", - "gunatanamo", "guantanamo", - "gunlsinger", "gunslinger", - "gunsiinger", "gunslinger", - "gunslanger", "gunslinger", - "gunsligner", "gunslinger", - "gunstinger", "gunslinger", - "gymanstics", "gymnastics", - "gymnasitcs", "gymnastics", - "gynmastics", "gymnastics", - "haemorrage", "haemorrhage", - "halloweeen", "halloween", - "hambergers", "hamburgers", - "hamburgare", "hamburger", - "hamburgesa", "hamburgers", - "hamburgles", "hamburgers", - "hamburgurs", "hamburgers", - "handcuffes", "handcuffs", - "handelbars", "handlebars", - "handicaped", "handicapped", - "handwritng", "handwriting", - "harasments", "harassments", - "hardlinked", "hardline", - "harmoniacs", "harmonic", - "harmonisch", "harmonic", - "harrasment", "harassment", - "harrassing", "harassing", - "harvasting", "harvesting", - "haversting", "harvesting", - "headhpones", "headphones", - "headphoens", "headphones", - "headquarer", "headquarter", - "headquater", "headquarter", - "headshoots", "headshot", - "healtchare", "healthcare", - "healtheast", "healthiest", - "healthyest", "healthiest", - "heapdhones", "headphones", - "heartbeart", "heartbeat", - "heartbeast", "heartbeat", - "heartborne", "heartbroken", - "heartbrake", "heartbreak", - "hearthsone", "hearthstone", - "heatlhcare", "healthcare", - "heavyweght", "heavyweight", - "heavyweigt", "heavyweight", - "hedgehodge", "hedgehog", - "heidelburg", "heidelberg", - "heigthened", "heightened", - "heistation", "hesitation", - "helathcare", "healthcare", - "helicopers", "helicopters", - "helicoptor", "helicopter", - "helicotper", "helicopters", - "helicpoter", "helicopter", - "helictoper", "helicopters", - "helikopter", "helicopter", - "hemingwary", "hemingway", - "hemingwavy", "hemingway", - "hemipshere", "hemisphere", - "hemishpere", "hemisphere", - "hemmorhage", "hemorrhage", - "hempishere", "hemisphere", - "herculeans", "hercules", - "herculeasy", "hercules", - "herculeees", "hercules", - "hesitstion", "hesitation", - "hestiation", "hesitation", - "hieghtened", "heightened", - "hierachies", "hierarchies", - "hieroglphs", "hieroglyphs", - "highalnder", "highlander", - "highlighed", "highlighted", - "highligted", "highlighted", - "highloader", "highlander", - "highpander", "highlander", - "highscholl", "highschool", - "highshcool", "highschool", - "hillarious", "hilarious", - "hinderance", "hindrance", - "hinderence", "hindrance", - "hipsterest", "hipsters", - "hispanicos", "hispanics", - "hispanicus", "hispanics", - "histarical", "historical", - "histerical", "historical", - "historiaan", "historians", - "historicas", "historians", - "historicly", "historical", - "historiens", "histories", - "historisch", "historic", - "hoemopathy", "homeopathy", - "hollywoood", "hollywood", - "homecuming", "homecoming", - "homeoapthy", "homeopathy", - "homeonwers", "homeowners", - "homeopahty", "homeopathy", - "homeophaty", "homeopathy", - "homeopothy", "homeopathy", - "homeothapy", "homeopathy", - "homepoathy", "homeopathy", - "homewoners", "homeowners", - "homoepathy", "homeopathy", - "homogeneos", "homogeneous", - "homogeneus", "homogeneous", - "homophibia", "homophobia", - "homophibic", "homophobic", - "homophobie", "homophobe", - "homophonia", "homophobia", - "homophopia", "homophobia", - "homophopic", "homophobic", - "homosexaul", "homosexual", - "homosexuel", "homosexual", - "honeymooon", "honeymoon", - "hopefullly", "hopefully", - "hopeleslly", "hopelessly", - "horisontal", "horizontal", - "horizantal", "horizontal", - "horizontes", "horizons", - "horiztonal", "horizontal", - "horrendeus", "horrendous", - "horriblely", "horribly", - "hospitales", "hospitals", - "hospitalty", "hospitality", - "hospitible", "hospitable", - "hsitorians", "historians", - "humanaties", "humanities", - "humanitary", "humanity", - "humiliatin", "humiliation", - "humiliaton", "humiliation", - "humilitied", "humiliated", - "humillated", "humiliated", - "hurricance", "hurricane", - "hurriganes", "hurricanes", - "hurrikanes", "hurricanes", - "hurrycanes", "hurricanes", - "hydropilic", "hydrophilic", - "hydropobic", "hydrophobic", - "hyperbolie", "hyperbole", - "hyperlobic", "hyperbolic", - "hyperlogic", "hyperbolic", - "hypertrohy", "hypertrophy", - "hypertropy", "hypertrophy", - "hyphotesis", "hypothesis", - "hypocrates", "hypocrites", - "hypocriscy", "hypocrisy", - "hypocrises", "hypocrites", - "hypocritus", "hypocrites", - "hypocrties", "hypocrites", - "hypocrytes", "hypocrites", - "hypokrites", "hypocrites", - "hypothecis", "hypothesis", - "hypotheiss", "hypotheses", - "hypothesus", "hypotheses", - "hypothises", "hypotheses", - "hypothisis", "hypothesis", - "hypothosis", "hypothesis", - "hyprocites", "hypocrites", - "hystarical", "hysterical", - "hystericly", "hysterical", - "hysteriska", "hysteria", - "ibuprofein", "ibuprofen", - "ibuprofine", "ibuprofen", - "icelandinc", "icelandic", - "idealisitc", "idealistic", - "idealogies", "ideologies", - "identicial", "identical", - "identifyed", "identified", - "identitets", "identities", - "ideolagies", "ideologies", - "ideoligies", "ideologies", - "ideologias", "ideologies", - "ideologice", "ideologies", - "ideologije", "ideologies", - "ideologins", "ideologies", - "ideologisk", "ideologies", - "ideolouges", "ideologies", - "illegalest", "illegals", - "illegallly", "illegally", - "illegimacy", "illegitimacy", - "illegitime", "illegitimate", - "illegitimt", "illegitimate", - "illimunati", "illuminati", - "illinoians", "illinois", - "illistrate", "illiterate", - "illitarate", "illiterate", - "illitirate", "illiterate", - "illumanati", "illuminati", - "illumaniti", "illuminati", - "illumianti", "illuminati", - "illumimati", "illuminati", - "illuminaci", "illuminati", - "illuminadi", "illuminati", - "illuminami", "illuminati", - "illuminazi", "illuminati", - "illuminite", "illuminati", - "illuminiti", "illuminati", - "illuminoti", "illuminati", - "illuminuti", "illuminati", - "illumniati", "illuminati", - "illumunati", "illuminati", - "illuninati", "illuminati", - "illusiones", "illusions", - "illustrant", "illustrate", - "illustrare", "illustrate", - "illustrato", "illustration", - "imablanced", "imbalanced", - "imablances", "imbalances", - "imaginatie", "imaginative", - "imaginaton", "imagination", - "imaginitve", "imaginative", - "imbalenced", "imbalanced", - "imbalences", "imbalances", - "imcomplete", "incomplete", - "imediately", "immediately", - "imigration", "emigration", - "immaturaty", "immaturity", - "immaturety", "immaturity", - "immedeatly", "immediately", - "immediatly", "immediately", - "immedietly", "immediately", - "immenseley", "immensely", - "immidately", "immediately", - "immigranti", "immigration", - "immigrents", "immigrants", - "immitating", "imitating", - "immobilien", "immobile", - "immobilier", "immobile", - "immobilzed", "immobile", - "immobilzer", "immobile", - "immobilzes", "immobile", - "immortales", "immortals", - "immortalis", "immortals", - "immortaliy", "immortality", - "immortalls", "immortals", - "immortalty", "immortality", - "impartirla", "impartial", - "impecabbly", "impeccably", - "impeccible", "impeccable", - "impeckable", "impeccable", - "impelments", "implements", - "imperetive", "imperative", - "imperialsm", "imperialism", - "imperialst", "imperialist", - "imperitave", "imperative", - "imperitive", "imperative", - "implaments", "implements", - "implantase", "implants", - "implausble", "implausible", - "implausibe", "implausible", - "implemenet", "implements", - "implicatia", "implicit", - "implicatie", "implicit", - "implicatii", "implicit", - "implicetly", "implicitly", - "impliciete", "implicit", - "implicilty", "implicitly", - "impliments", "implements", - "imporbable", "improbable", - "importanly", "importantly", - "importanty", "importantly", - "importence", "importance", - "importerad", "imported", - "imporvised", "improvised", - "impossable", "impossible", - "impossbily", "impossibly", - "impossibal", "impossibly", - "impossibel", "impossibly", - "impossibry", "impossibly", - "impossibul", "impossibly", - "impractial", "impractical", - "impreative", "imperative", - "impresison", "impressions", - "impressoin", "impressions", - "impressons", "impressions", - "improbabil", "improbable", - "improbible", "improbable", - "impropable", "improbable", - "improsined", "imprisoned", - "improsoned", "imprisoned", - "improvemnt", "improvement", - "improvents", "improves", - "improvized", "improvised", - "imprsioned", "imprisoned", - "impulsemos", "impulses", - "imrpovised", "improvised", - "inablility", "inability", - "inaccruate", "inaccurate", - "inadaquate", "inadequate", - "inadaquete", "inadequate", - "inadecuate", "inadequate", - "inadeguate", "inadequate", - "inadeqaute", "inadequate", - "inadequete", "inadequate", - "inadequite", "inadequate", - "inadiquate", "inadequate", - "inagurated", "inaugurated", - "inbalanced", "imbalanced", - "inbetweeen", "inbetween", - "incarnaton", "incarnation", - "incentivos", "incentives", - "inchoerent", "incoherent", - "incidentes", "incidents", - "incidently", "incidentally", - "incidentul", "incidental", - "inclreased", "increased", - "incognitio", "incognito", - "incoherant", "incoherent", - "incohorent", "incoherent", - "incorectly", "incorrectly", - "incorrecly", "incorrectly", - "incorrecty", "incorrectly", - "incorretly", "incorrectly", - "incraments", "increments", - "incredable", "incredible", - "incredably", "incredibly", - "incremetal", "incremental", - "incriments", "increments", - "inctroduce", "introduce", - "indefenite", "indefinite", - "indefinate", "indefinite", - "indefinete", "indefinite", - "indefinity", "indefinitely", - "indeginous", "indigenous", - "indentical", "identical", - "independet", "independent", - "indepenent", "independent", - "inderictly", "indirectly", - "indicaters", "indicates", - "indicativo", "indication", - "indicatore", "indicate", - "indicitave", "indicative", - "indicitive", "indicative", - "indiffernt", "indifferent", - "indigenius", "indigenous", - "indiginous", "indigenous", - "indigneous", "indigenous", - "indikation", "indication", - "indireclty", "indirectly", - "indirektly", "indirectly", - "individuel", "individual", - "indiviudal", "individuals", - "indivudual", "individual", - "indoensian", "indonesian", - "indonasian", "indonesian", - "indoneisan", "indonesian", - "indonesean", "indonesian", - "indonesien", "indonesian", - "indonesion", "indonesian", - "indonisian", "indonesian", - "indonistan", "indonesian", - "indpendent", "independent", - "industiral", "industrial", - "industires", "industries", - "industrail", "industrial", - "industrees", "industries", - "industrias", "industries", - "industriel", "industrial", - "industrija", "industrial", - "industrije", "industries", - "indviduals", "individuals", - "inefficent", "inefficient", - "ineqaulity", "inequality", - "inequailty", "inequality", - "inevatible", "inevitable", - "inevetable", "inevitable", - "inevetably", "inevitably", - "inevetible", "inevitable", - "inevidable", "inevitable", - "inevidably", "inevitably", - "inevitible", "inevitable", - "inevitibly", "inevitably", - "inevtiable", "inevitable", - "inevtiably", "inevitably", - "infallable", "infallible", - "infaltable", "inflatable", - "infeccious", "infectious", - "infecteous", "infectious", - "infectuous", "infectious", - "infedility", "infidelity", - "infektious", "infectious", - "inferioara", "inferior", - "inferioare", "inferior", - "inferiorty", "inferiority", - "inferrence", "inference", - "infestaion", "infestation", - "infestaton", "infestation", - "infestions", "infections", - "infideltiy", "infidelity", - "infidility", "infidelity", - "infiltrade", "infiltrate", - "infiltrait", "infiltrate", - "infiltrare", "infiltrate", - "infiltrase", "infiltrate", - "infinately", "infinitely", - "infinetely", "infinitely", - "infiniment", "infinite", - "infinitley", "infinitely", - "infintiely", "infinitely", - "inflamable", "inflatable", - "inflateble", "inflatable", - "inflatible", "inflatable", - "infleunced", "influenced", - "inflitrate", "infiltrate", - "influanced", "influenced", - "influances", "influences", - "influencie", "influences", - "influening", "influencing", - "influensed", "influences", - "influenser", "influences", - "influenses", "influences", - "influental", "influential", - "influented", "influenced", - "influentes", "influences", - "influneced", "influenced", - "infograhic", "infographic", - "infograpic", "infographic", - "infomation", "information", - "informable", "informal", - "informarla", "informal", - "informarle", "informal", - "informarlo", "informal", - "informatie", "informative", - "informella", "informal", - "informerad", "informed", - "informtion", "information", - "infridging", "infringing", - "infrigning", "infringing", - "infulenced", "influenced", - "infulences", "influences", - "ingenuitiy", "ingenuity", - "ingrediant", "ingredient", - "ingrediens", "ingredients", - "ingrediets", "ingredient", - "inhabitans", "inhabitants", - "inhabitats", "inhabitants", - "inherantly", "inherently", - "inherintly", "inherently", - "inheritage", "heritage", - "inhernetly", "inherently", - "inifnitely", "infinitely", - "initaition", "initiation", - "initalised", "initialised", - "initaliser", "initialiser", - "initalises", "initialises", - "initalisms", "initialisms", - "initalized", "initialized", - "initalizer", "initializer", - "initalizes", "initializes", - "initalling", "initialling", - "initalness", "initialness", - "initiaitve", "initiatives", - "initiaties", "initiatives", - "initiativs", "initiatives", - "initiatves", "initiatives", - "initiavite", "initiatives", - "inititaive", "initiatives", - "inititiave", "initiatives", - "initmately", "intimately", - "initmidate", "intimidate", - "inituition", "initiation", - "injustaces", "injustices", - "injusticas", "injustices", - "inmigrants", "immigrants", - "innoavtion", "innovations", - "innocentes", "innocents", - "innotation", "innovation", - "innovacion", "innovation", - "innovaiton", "innovations", - "innovatief", "innovate", - "innovaties", "innovate", - "innovativo", "innovation", - "innvoation", "innovation", - "inofficial", "unofficial", - "inpsection", "inspection", - "inquisator", "inquisitor", - "inquisidor", "inquisitor", - "inquisiter", "inquisitor", - "inquisitio", "inquisitor", - "inquisitir", "inquisitor", - "inquisiton", "inquisition", - "inquistior", "inquisitor", - "inquizitor", "inquisitor", - "inqusitior", "inquisitor", - "insensitve", "insensitive", - "insepction", "inspection", - "insistance", "insistence", - "insistente", "insistence", - "insistenze", "insistence", - "insistince", "insistence", - "insitution", "institution", - "inspeccion", "inspection", - "inspeciton", "inspections", - "inspectons", "inspections", - "inspectres", "inspectors", - "inspektion", "inspection", - "inspektors", "inspectors", - "inspiraste", "inspires", - "inspiraton", "inspiration", - "inspirerad", "inspired", - "inspireras", "inspires", - "insrugency", "insurgency", - "instabiliy", "instability", - "instabilty", "instability", - "installeer", "installer", - "installent", "installment", - "installesd", "installs", - "installion", "installing", - "instatance", "instance", - "instelling", "installing", - "instituded", "instituted", - "instituion", "institution", - "institutie", "institute", - "institutue", "instituted", - "instrament", "instrument", - "instrcutor", "instructors", - "instrucion", "instruction", - "instructer", "instructor", - "instructie", "instructed", - "instruktor", "instructor", - "instuction", "instruction", - "instuments", "instruments", - "insturcted", "instructed", - "insturctor", "instructor", - "insturment", "instrument", - "instutions", "intuitions", - "instututed", "instituted", - "insurgance", "insurgency", - "insurgancy", "insurgency", - "intangable", "intangible", - "intangeble", "intangible", - "intangibil", "intangible", - "intanjible", "intangible", - "integraded", "integrated", - "integrarla", "integral", - "integrarlo", "integral", - "integratie", "integrated", - "integreres", "interferes", - "integreted", "integrated", - "inteligent", "intelligent", - "intenseley", "intensely", - "intensitiy", "intensity", - "intentinal", "intentional", - "intentines", "intestines", - "interacive", "interactive", - "interactes", "interacts", - "interactie", "interactive", - "interactue", "interacted", - "interasted", "interacted", - "interbread", "interbreed", - "intercepto", "interception", - "intercorse", "intercourse", - "intercouse", "intercourse", - "intereacts", "interfaces", - "interected", "interacted", - "interefers", "interferes", - "interesant", "interest", - "interesing", "interesting", - "interestes", "interests", - "interfacce", "interfaces", - "interfears", "interferes", - "interfeers", "interferes", - "interferce", "interferes", - "interferre", "interfere", - "intergated", "integrated", - "interioara", "interior", - "interioare", "interior", - "intermedie", "intermediate", - "internetbs", "internets", - "internetes", "internets", - "internetis", "internets", - "internetts", "internets", - "internetus", "internets", - "interprate", "interpret", - "interrugum", "interregnum", - "interruped", "interrupted", - "interstela", "interstellar", - "intervalls", "intervals", - "intervalos", "intervals", - "interveign", "intervening", - "interveing", "intervening", - "interveiws", "interviews", - "intervento", "intervention", - "intervenue", "intervene", - "interveres", "interferes", - "intervieni", "interviewing", - "intervieuw", "interviews", - "interviewd", "interviewed", - "interviewr", "interviewer", - "intervines", "intervenes", - "interviwed", "interviewed", - "interviwer", "interviewer", - "interwebbs", "interwebs", - "intestents", "intestines", - "intestinas", "intestines", - "intestinos", "intestines", - "intestions", "intestines", - "intidimate", "intimidate", - "intimadate", "intimidate", - "intimatley", "intimately", - "intimiated", "intimidate", - "intimidade", "intimidated", - "intimidant", "intimidate", - "intimidare", "intimidate", - "intimitade", "intimidated", - "intimitaly", "intimately", - "intimitate", "intimidate", - "intimitely", "intimately", - "intolarant", "intolerant", - "intolerace", "intolerance", - "intolerate", "intolerant", - "intolerent", "intolerant", - "intolorant", "intolerant", - "intolorent", "intolerant", - "intorduced", "introduced", - "intorduces", "introduces", - "intorverts", "introverts", - "intoxicted", "intoxicated", - "intraverts", "introverts", - "intreguing", "intriguing", - "intricaces", "intricacies", - "intriguied", "intrigue", - "intrigured", "intrigue", - "intrinseci", "intrinsic", - "intrinsinc", "intrinsic", - "intriquing", "intriguing", - "intriuging", "intriguing", - "introdecks", "introduces", - "introdused", "introduces", - "introvents", "introverts", - "introvered", "introverted", - "introversa", "introverts", - "introverse", "introverts", - "introversi", "introverts", - "introverso", "introverts", - "introversy", "introverts", - "introveted", "introverted", - "intruduced", "introduced", - "intruduces", "introduces", - "intruiging", "intriguing", - "intruments", "instruments", - "intuitevly", "intuitively", - "intuitivly", "intuitively", - "intuitivno", "intuition", - "intutively", "intuitively", - "inumerable", "enumerable", - "inusrgency", "insurgency", - "invaderats", "invaders", - "invaildate", "invalidates", - "invairably", "invariably", - "invaldiate", "invalidates", - "invalidade", "invalidate", - "invalidare", "invalidate", - "invalubale", "invaluable", - "invalueble", "invaluable", - "invaraibly", "invariably", - "invariabil", "invariably", - "invaribaly", "invariably", - "invaulable", "invaluable", - "inveitable", "inevitable", - "inveitably", "inevitably", - "invensions", "inventions", - "inventario", "inventor", - "inventarlo", "inventor", - "inventaron", "inventor", - "inventings", "inventions", - "inventivos", "inventions", - "invertendo", "inverted", - "inverterad", "inverted", - "invertions", "inventions", - "investemnt", "investments", - "investiage", "investigate", - "investions", "inventions", - "investirat", "investigator", - "investmens", "investments", - "invicinble", "invincible", - "invididual", "individual", - "invincable", "invincible", - "invinceble", "invincible", - "invinicble", "invincible", - "invinsible", "invincible", - "invinvible", "invincible", - "invisibily", "invisibility", - "invitacion", "invitation", - "invitating", "invitation", - "involunary", "involuntary", - "involvment", "involvement", - "ironcially", "ironically", - "irracional", "irrational", - "irrationel", "irrational", - "irrelavant", "irrelevant", - "irrelavent", "irrelevant", - "irrelevent", "irrelevant", - "irrelivant", "irrelevant", - "irrelivent", "irrelevant", - "irrevelant", "irrelevant", - "irreverant", "irrelevant", - "irridation", "irritation", - "irriration", "irritation", - "irritacion", "irritation", - "irritaties", "irritate", - "islamisist", "islamist", - "islamistas", "islamists", - "isntalling", "installing", - "isntructed", "instructed", - "isntrument", "instrument", - "israeliens", "israelis", - "israelitas", "israelis", - "italianess", "italians", - "itnroduced", "introduced", - "jailborken", "jailbroken", - "jalibroken", "jailbroken", - "jamaicains", "jamaican", - "jamaicaman", "jamaican", - "jerusaleum", "jerusalem", - "jounralism", "journalism", - "jounralist", "journalist", - "jouranlism", "journalism", - "jouranlist", "journalist", - "journalims", "journals", - "journalits", "journals", - "journalizm", "journalism", - "journalsim", "journalism", - "journolist", "journalist", - "judegments", "judgements", - "judgemenal", "judgemental", - "judgemetal", "judgemental", - "jugdements", "judgements", - "juggarnaut", "juggernaut", - "juggeranut", "juggernaut", - "juggernath", "juggernaut", - "juggernout", "juggernaut", - "juggernuat", "juggernaut", - "juggetnaut", "juggernaut", - "jugglenaut", "juggernaut", - "juggurnaut", "juggernaut", - "justifible", "justifiable", - "juvenilles", "juvenile", - "kickstarer", "kickstarter", - "kickstartr", "kickstarter", - "kickstater", "kickstarter", - "kidnapning", "kidnapping", - "kidnappade", "kidnapped", - "killingest", "killings", - "kilometros", "kilometers", - "kilomiters", "kilometers", - "kilomoters", "kilometers", - "kilomteres", "kilometers", - "kindapping", "kidnapping", - "kingdomers", "kingdoms", - "krpytonite", "kryptonite", - "krypotnite", "kryptonite", - "krypronite", "kryptonite", - "kryptinite", "kryptonite", - "kryptolite", "kryptonite", - "kryptonyte", "kryptonite", - "krypyonite", "kryptonite", - "krytponite", "kryptonite", - "kyrptonite", "kryptonite", - "labarotory", "laboratory", - "laboratroy", "laboratory", - "laborerers", "laborers", - "laboritory", "laboratory", - "laborotory", "laboratory", - "lackbuster", "lackluster", - "lacklaster", "lackluster", - "landacapes", "landscapes", - "landingers", "landings", - "landshapes", "landscapes", - "landspaces", "landscapes", - "lannasters", "lannisters", - "lannesters", "lannisters", - "lannistars", "lannisters", - "lannsiters", "lannisters", - "lateration", "alteration", - "latitudine", "latitude", - "laughabley", "laughably", - "laughablly", "laughably", - "launchered", "launched", - "leaglizing", "legalizing", - "lectureres", "lectures", - "legalazing", "legalizing", - "legalizare", "legalize", - "legalizate", "legalize", - "legendaies", "legendaries", - "legendaris", "legendaries", - "legimitacy", "legitimacy", - "legimitate", "legitimate", - "legislatie", "legislative", - "legitamacy", "legitimacy", - "legitamate", "legitimate", - "legitamicy", "legitimacy", - "legitamite", "legitimate", - "legitemacy", "legitimacy", - "legitemate", "legitimate", - "legitimaly", "legitimacy", - "legitimicy", "legitimacy", - "legitimite", "legitimate", - "leiutenant", "lieutenant", - "lesbianese", "lesbians", - "lesbianest", "lesbians", - "leuitenant", "lieutenant", - "levetating", "levitating", - "liberacion", "liberation", - "liberalest", "liberate", - "liberalizm", "liberalism", - "liberalnim", "liberalism", - "liberalsim", "liberalism", - "liberarion", "liberation", - "liberaties", "liberate", - "liberatore", "liberate", - "libertania", "libertarians", - "libguistic", "linguistic", - "lietuenant", "lieutenant", - "lieutanant", "lieutenant", - "lieutanent", "lieutenant", - "lieutenent", "lieutenant", - "lifestiles", "lifestyles", - "lifestlyes", "lifestyles", - "lifesystem", "filesystem", - "lifesytles", "lifestyles", - "lifetimers", "lifetimes", - "lifetsyles", "lifestyles", - "lighhtning", "lightening", - "lightergas", "lighters", - "lighthning", "lightening", - "lighthorse", "lighthouse", - "lighthosue", "lighthouse", - "lighthours", "lighthouse", - "lightining", "lighting", - "lightneing", "lightening", - "lightnting", "lightening", - "lightrooom", "lightroom", - "lightweigt", "lightweight", - "ligitation", "litigation", - "ligthening", "lightening", - "ligthhouse", "lighthouse", - "likelyhood", "likelihood", - "limination", "limitation", - "limitacion", "limitation", - "limitaiton", "limitation", - "limitating", "limitation", - "limitativo", "limitation", - "linguisics", "linguistics", - "linguisitc", "linguistics", - "linguistcs", "linguistics", - "linguistis", "linguistics", - "linguitics", "linguistic", - "lingusitic", "linguistics", - "lingvistic", "linguistic", - "liousville", "louisville", - "listeneres", "listeners", - "literallly", "literally", - "literarely", "literary", - "literarlly", "literary", - "literatire", "literate", - "literative", "literate", - "literatute", "literate", - "lithuanina", "lithuania", - "litterally", "literally", - "liuetenant", "lieutenant", - "liveatream", "livestream", - "livelehood", "livelihood", - "liverpoool", "liverpool", - "livescream", "livestream", - "livestreem", "livestream", - "livestrems", "livestream", - "livilehood", "livelihood", - "livliehood", "livelihood", - "lobbyistes", "lobbyists", - "lockacreen", "lockscreen", - "logictical", "logistical", - "logisitcal", "logistical", - "logisticas", "logistics", - "logisticly", "logistical", - "loiusville", "louisville", - "lollipoopy", "lollipop", - "lonelyness", "loneliness", - "longevitiy", "longevity", - "lonileness", "loneliness", - "lonlieness", "loneliness", - "louieville", "louisville", - "louisiania", "louisiana", - "louisianna", "louisiana", - "louisivlle", "louisville", - "louisviile", "louisville", - "lousiville", "louisville", - "luietenant", "lieutenant", - "mabyelline", "maybelline", - "magnifient", "magnificent", - "mainpulate", "manipulate", - "mainstreem", "mainstream", - "maintaince", "maintained", - "maintaines", "maintains", - "maintainig", "maintaining", - "maintenace", "maintenance", - "maintianed", "maintained", - "maintioned", "mentioned", - "malfuncion", "malfunction", - "malpractce", "malpractice", - "managebale", "manageable", - "maneagable", "manageable", - "maneouvred", "manoeuvred", - "maneouvres", "manoeuvres", - "maneuveres", "maneuvers", - "maneuveurs", "maneuver", - "manifestas", "manifests", - "manifestes", "manifests", - "manifestus", "manifests", - "manipluate", "manipulate", - "manipualte", "manipulate", - "manipulant", "manipulate", - "manipulare", "manipulate", - "manipulted", "manipulated", - "maniuplate", "manipulate", - "mannarisms", "mannerisms", - "mannersims", "mannerisms", - "mannorisms", "mannerisms", - "manufacter", "manufacture", - "manufacure", "manufacture", - "manufature", "manufacture", - "maraudeurs", "marauder", - "margaritte", "margaret", - "margianlly", "marginally", - "marginaali", "marginal", - "marginable", "marginal", - "marignally", "marginally", - "marijuanna", "marijuana", - "marketting", "marketing", - "marshmalow", "marshmallow", - "masculinty", "masculinity", - "massacrare", "massacre", - "massivelly", "massively", - "masteriers", "masteries", - "masternind", "mastermind", - "masterpice", "masterpiece", - "mastrubate", "masturbate", - "mastubrate", "masturbated", - "masturabte", "masturbate", - "masturbait", "masturbate", - "masturbare", "masturbate", - "masturbeta", "masturbated", - "masturdate", "masturbate", - "materiales", "materials", - "materialsm", "materialism", - "maximazing", "maximizing", - "maximixing", "maximizing", - "mayballine", "maybelline", - "maybellene", "maybelline", - "maybellibe", "maybelline", - "maybilline", "maybelline", - "mccarthyst", "mccarthyist", - "mdifielder", "midfielder", - "meagthread", "megathread", - "meaningess", "meanings", - "meaningles", "meanings", - "meatballls", "meatballs", - "mecahnical", "mechanical", - "mecahnisms", "mechanisms", - "mechancial", "mechanical", - "mechandise", "merchandise", - "mechanichs", "mechanics", - "mechanicle", "mechanical", - "mechanicly", "mechanical", - "mechanicus", "mechanics", - "mechanincs", "mechanic", - "mechanisim", "mechanism", - "mechansims", "mechanisms", - "mechinical", "mechanical", - "mechinisms", "mechanisms", - "mediaction", "medications", - "medicacion", "medication", - "medicaiton", "medication", - "medicalert", "medicare", - "medicallly", "medically", - "medicatons", "medications", - "medicinens", "medicines", - "medicinske", "medicine", - "medicority", "mediocrity", - "medidating", "meditating", - "mediocirty", "mediocrity", - "mediocraty", "mediocrity", - "mediocrety", "mediocrity", - "mediocricy", "mediocrity", - "mediocrily", "mediocrity", - "mediocrisy", "mediocrity", - "meditacion", "medications", - "meditaiton", "meditation", - "melatonian", "melatonin", - "melatonion", "melatonin", - "mellinnium", "millennium", - "melodieuse", "melodies", - "membrances", "membrane", - "mentallity", "mentally", - "mentionnes", "mentions", - "mercenaire", "mercenaries", - "mercenares", "mercenaries", - "mercentile", "mercantile", - "merchanise", "merchandise", - "merchantos", "merchants", - "messagease", "messages", - "messagepad", "messaged", - "messenging", "messaging", - "metabalism", "metabolism", - "metabilism", "metabolism", - "metabloism", "metabolism", - "metablosim", "metabolism", - "metabolics", "metabolism", - "metabolizm", "metabolism", - "metabolsim", "metabolism", - "metalurgic", "metallurgic", - "metaphoras", "metaphors", - "metaphores", "metaphors", - "metaphyics", "metaphysics", - "meterology", "meteorology", - "methaphors", "metaphors", - "methodolgy", "methodology", - "methodoloy", "methodology", - "metrapolis", "metropolis", - "metrolopis", "metropolis", - "metropilis", "metropolis", - "metroplois", "metropolis", - "metropolin", "metropolitan", - "metropolos", "metropolis", - "metropolys", "metropolis", - "mexicanese", "mexicans", - "mexicaness", "mexicans", - "michelline", "michelle", - "micorwaves", "microwaves", - "microhpone", "microphone", - "microscoop", "microscope", - "microvaves", "microwaves", - "microvaxes", "microwaves", - "micrpohone", "microphones", - "midfeilder", "midfielder", - "midfiedler", "midfielder", - "midfieldes", "midfielders", - "midfielers", "midfielders", - "midfileder", "midfielder", - "midifelder", "midfielder", - "midnlessly", "mindlessly", - "migitation", "mitigation", - "migrainers", "migraines", - "miletsones", "milestones", - "milisecond", "millisecond", - "militiades", "militias", - "militiants", "militias", - "millinnium", "millennium", - "miminalist", "minimalist", - "minamilist", "minimalist", - "mindleslly", "mindlessly", - "minimazing", "minimizing", - "minimilast", "minimalist", - "minimilist", "minimalist", - "mininalist", "minimalist", - "ministeres", "ministers", - "ministerns", "ministers", - "minneaplis", "minneapolis", - "minneapols", "minneapolis", - "minnesotta", "minnesota", - "minoritets", "minorities", - "minoroties", "minorities", - "miracalous", "miraculous", - "miracluous", "miraculous", - "miracoulus", "miraculous", - "mircophone", "microphone", - "mircoscope", "microscope", - "mircowaves", "microwaves", - "misandrony", "misandry", - "miscarrage", "miscarriage", - "miscarrige", "miscarriage", - "misdemenor", "misdemeanor", - "miserabley", "miserably", - "miserablly", "miserably", - "misforture", "misfortune", - "misgoynist", "misogynist", - "misinfomed", "misinformed", - "misinterpt", "misinterpret", - "misisonary", "missionary", - "misoganist", "misogynist", - "misogenist", "misogynist", - "misoginist", "misogynist", - "misoginyst", "misogynist", - "misognyist", "misogynist", - "misogonist", "misogynist", - "misogonyst", "misogynist", - "misogyinst", "misogynist", - "misogynyst", "misogynist", - "misoygnist", "misogynist", - "mispelling", "misspelling", - "missionare", "missionaries", - "missionera", "missionary", - "missisippi", "mississippi", - "mississipi", "mississippi", - "mississppi", "mississippi", - "misspeling", "misspelling", - "misspellng", "misspelling", - "mistakedly", "mistakenly", - "mistakinly", "mistakenly", - "mistankely", "mistakenly", - "misterious", "mysterious", - "misteryous", "mysterious", - "mistreaded", "mistreated", - "misygonist", "misogynist", - "mitigaiton", "mitigation", - "moderacion", "moderation", - "moderaters", "moderates", - "moderatley", "moderately", - "moderatore", "moderate", - "moderatorn", "moderation", - "modificato", "modification", - "modifieras", "modifiers", - "modifieres", "modifiers", - "moisturier", "moisturizer", - "moleculair", "molecular", - "molestaion", "molestation", - "molestarle", "molester", - "molestarme", "molester", - "molestarse", "molester", - "molestarte", "molester", - "molestered", "molested", - "momentarly", "momentarily", - "monagomous", "monogamous", - "monetizare", "monetize", - "monitering", "monitoring", - "monogymous", "monogamous", - "monolistic", "monolithic", - "monolitich", "monolithic", - "monolopies", "monopolies", - "monolothic", "monolithic", - "monolythic", "monolithic", - "monopilies", "monopolies", - "monoploies", "monopolies", - "monopolets", "monopolies", - "monopolice", "monopolies", - "monopolios", "monopolies", - "monothilic", "monolithic", - "monsterous", "monsters", - "montioring", "monitoring", - "monumentos", "monuments", - "monumentul", "monumental", - "monumentus", "monuments", - "mormonisim", "mormonism", - "morphinate", "morphine", - "morrisette", "morissette", - "morrisound", "morrison", - "mosquitero", "mosquito", - "mosquiters", "mosquitoes", - "motherbard", "motherboard", - "motherboad", "motherboard", - "motherbord", "motherboard", - "motivaiton", "motivations", - "motiviated", "motivated", - "motorcicle", "motorcycle", - "motorcylce", "motorcycle", - "motorcyles", "motorcycles", - "motorollas", "motorola", - "mouthpeace", "mouthpiece", - "mouthpeice", "mouthpiece", - "movespeeed", "movespeed", - "mozzaralla", "mozzarella", - "mozzeralla", "mozzarella", - "mozzorella", "mozzarella", - "mulitation", "mutilation", - "mulitplied", "multiplied", - "mulitplier", "multiplier", - "mulitverse", "multiverse", - "multilpier", "multiplier", - "multiplaer", "multiplier", - "multiplaye", "multiply", - "multiplayr", "multiply", - "multiplays", "multiply", - "multipleye", "multiply", - "multipling", "multiplying", - "multiplyed", "multiplied", - "multiplyer", "multiple", - "multiplyng", "multiplying", - "murderered", "murdered", - "murdereres", "murderers", - "muscicians", "musicians", - "musculaire", "muscular", - "mushroooms", "mushroom", - "mutialtion", "mutilation", - "mutiliated", "mutilated", - "mutliation", "mutilation", - "mutliplied", "multiplied", - "mutliplier", "multiplier", - "mutliverse", "multiverse", - "mysogynist", "misogynist", - "mysterieus", "mysteries", - "nagivating", "navigating", - "nagivation", "navigation", - "narcassism", "narcissism", - "narcassist", "narcissist", - "narcessist", "narcissist", - "narciscism", "narcissism", - "narciscist", "narcissist", - "narcisissm", "narcissism", - "narcisisst", "narcissist", - "narcisists", "narcissist", - "narcissicm", "narcissism", - "narcissict", "narcissist", - "narcissitc", "narcissist", - "narcissits", "narcissist", - "narcoticos", "narcotics", - "narrativas", "narratives", - "narrativos", "narratives", - "narritives", "narratives", - "nashvillle", "nashville", - "nationales", "nationals", - "nationalis", "nationals", - "nationalit", "nationalist", - "nationaliy", "nationality", - "nationalty", "nationality", - "nationella", "national", - "naturually", "naturally", - "naviagting", "navigating", - "naviagtion", "navigation", - "navigatore", "navigate", - "neccessary", "necessary", - "necesarily", "necessarily", - "necessairy", "necessarily", - "necessarly", "necessary", - "necessarry", "necessary", - "necessiate", "necessitate", - "necessites", "necessities", - "neckbeared", "neckbeard", - "neckboards", "neckbeards", - "neckbreads", "neckbeards", - "neckneards", "neckbeards", - "necromacer", "necromancer", - "necromaner", "necromancer", - "needleslly", "needlessly", - "negativaty", "negativity", - "negativley", "negatively", - "negelcting", "neglecting", - "negilgence", "negligence", - "negiotated", "negotiated", - "neglacting", "neglecting", - "neglagence", "negligence", - "neglegance", "negligence", - "neglegible", "negligible", - "neglegting", "neglecting", - "neglibible", "negligible", - "neglicence", "negligence", - "neglicible", "negligible", - "neglicting", "neglecting", - "negligable", "negligible", - "negligance", "negligence", - "negligeble", "negligible", - "negligente", "negligence", - "negociated", "negotiated", - "negogiated", "negotiated", - "negoitated", "negotiated", - "negotaited", "negotiated", - "negotation", "negotiation", - "negotiaion", "negotiation", - "negotiatie", "negotiated", - "negotiatin", "negotiations", - "negotiaton", "negotiation", - "neigbhours", "neighbours", - "neighbhors", "neighbours", - "neighbords", "neighbours", - "neighbores", "neighbours", - "netowrking", "networking", - "netruality", "neutrality", - "neturality", "neutrality", - "netwroking", "networking", - "neurologia", "neurological", - "neutrailty", "neutrality", - "newletters", "newsletters", - "newlsetter", "newsletter", - "newsettler", "newsletter", - "newslatter", "newsletter", - "nieghbours", "neighbours", - "nightmates", "nightmares", - "nightmears", "nightmares", - "nightmeres", "nightmares", - "nigthmares", "nightmares", - "nipticking", "nitpicking", - "nitpciking", "nitpicking", - "nominacion", "nomination", - "nominatino", "nominations", - "nominativo", "nomination", - "nominatons", "nominations", - "nonsencial", "nonsensical", - "nontheless", "nonetheless", - "northerend", "northern", - "nostalgica", "nostalgia", - "nostalgija", "nostalgia", - "noteworhty", "noteworthy", - "nothingess", "nothingness", - "noticabely", "noticeably", - "noticabley", "noticeably", - "noticiably", "noticeably", - "notoriosly", "notoriously", - "novembeard", "november", - "nuetrality", "neutrality", - "nutricious", "nutritious", - "nutrientes", "nutrients", - "nutritents", "nutrients", - "nutritinal", "nutritional", - "nutritiuos", "nutritious", - "nutritivos", "nutritious", - "nutrituous", "nutritious", - "nutrutious", "nutritious", - "obatinable", "obtainable", - "obejctives", "objectives", - "obilgatory", "obligatory", - "objecitves", "objectives", - "objectivas", "objectives", - "objectivly", "objectively", - "objectivst", "objectives", - "objectivty", "objectivity", - "objektives", "objectives", - "obligitary", "obligatory", - "obligitory", "obligatory", - "observabil", "observable", - "observarse", "observers", - "observaton", "observation", - "observeras", "observers", - "observered", "observed", - "observeres", "observers", - "observible", "observable", - "obstancles", "obstacles", - "obstrucion", "obstruction", - "obstructin", "obstruction", - "obtainabie", "obtainable", - "obtaineble", "obtainable", - "obtainible", "obtainable", - "obtianable", "obtainable", - "ocasionaly", "occasionally", - "ocassional", "occasional", - "ocassioned", "occasioned", - "occaisonal", "occasional", - "occasionly", "occasional", - "occassions", "occasions", - "occational", "occasional", - "occulation", "occupation", - "occupaiton", "occupation", - "occurances", "occurrences", - "occurences", "occurrences", - "occurrance", "occurrence", - "octohedral", "octahedral", - "octohedron", "octahedron", - "offensivly", "offensively", - "offereings", "offerings", - "officailly", "officially", - "olbigatory", "obligatory", - "ominpotent", "omnipotent", - "ominscient", "omniscient", - "omnipetent", "omnipotent", - "omnipitent", "omnipotent", - "omnipotant", "omnipotent", - "omnisicent", "omniscient", - "omniverous", "omnivorous", - "omnsicient", "omniscient", - "onmipotent", "omnipotent", - "onmiscient", "omniscient", - "operatings", "operations", - "operativne", "operative", - "operativos", "operations", - "oportunity", "opportunity", - "opponenets", "opponent", - "oppononent", "opponent", - "oppressiun", "oppressing", - "optimisitc", "optimistic", - "optimizare", "optimize", - "optimizate", "optimize", - "optimizied", "optimize", - "organicaly", "organically", - "organiclly", "organically", - "organisate", "organise", - "organische", "organise", - "organisera", "organizers", - "organisere", "organizers", - "organisert", "organizers", - "organisier", "organise", - "organisims", "organism", - "organismed", "organise", - "organismen", "organise", - "organismer", "organise", - "organismes", "organisms", - "organismus", "organisms", - "organisten", "organise", - "organiszed", "organise", - "organizaed", "organize", - "organizare", "organizer", - "organizate", "organize", - "organizors", "organizers", - "organizuje", "organize", - "organziers", "organizers", - "orientaion", "orientation", - "orientarla", "oriental", - "orientarlo", "oriental", - "origianlly", "originally", - "originales", "originals", - "originalet", "originated", - "originalis", "originals", - "originalty", "originality", - "orignially", "originally", - "origniated", "originated", - "origonally", "originally", - "origonated", "originated", - "ostencibly", "ostensibly", - "ostenisbly", "ostensibly", - "ostensably", "ostensibly", - "ostentibly", "ostensibly", - "ostrasiced", "ostracized", - "ostrasized", "ostracized", - "ostraziced", "ostracized", - "ostrazised", "ostracized", - "ostrecized", "ostracized", - "ostricized", "ostracized", - "ostrocized", "ostracized", - "oustanding", "outstanding", - "outcalssed", "outclassed", - "outlcassed", "outclassed", - "outnumberd", "outnumbered", - "outnumbred", "outnumbered", - "outperfoms", "outperform", - "outperfrom", "outperform", - "outpreform", "outperform", - "outrageuos", "outrageous", - "outragious", "outrageous", - "outragoues", "outrageous", - "outreagous", "outrageous", - "outsourcad", "outsourced", - "outsouring", "outsourcing", - "outsoursed", "outsourced", - "outweighes", "outweighs", - "overarcing", "overarching", - "overclockd", "overclocked", - "overcloked", "overclocked", - "overcoding", "overcoming", - "overheards", "overhead", - "overheared", "overhead", - "overhooked", "overlooked", - "overlanded", "overloaded", - "overlaoded", "overloaded", - "overlaping", "overlapping", - "overlauded", "overloaded", - "overloards", "overload", - "overlorded", "overloaded", - "overlordes", "overlords", - "overnurfed", "overturned", - "overpirced", "overpriced", - "overpowerd", "overpowered", - "overpowred", "overpowered", - "overprised", "overpriced", - "overtunned", "overturned", - "overtunred", "overturned", - "overturing", "overturn", - "overweigth", "overweight", - "overwhemed", "overwhelmed", - "overwieght", "overweight", - "overwritte", "overwrite", - "pahtfinder", "pathfinder", - "painfullly", "painfully", - "painkilers", "painkillers", - "pairlament", "parliament", - "pakistanti", "pakistani", - "paladinlst", "paladins", - "palcements", "placements", - "paleolitic", "paleolithic", - "palestinan", "palestinian", - "paltformer", "platformer", - "palyerbase", "playerbase", - "parachutte", "parachute", - "parademics", "paramedics", - "paradiggum", "paradigm", - "paragraghs", "paragraphs", - "paragrahps", "paragraphs", - "paragrapgh", "paragraphs", - "paragrpahs", "paragraphs", - "parahprase", "paraphrase", - "paralleles", "parallels", - "parallells", "parallels", - "paramadics", "paramedics", - "paramaters", "parameters", - "paramecias", "paramedics", - "parametics", "paramedics", - "parametros", "parameters", - "paramiters", "parameters", - "paramormal", "paranormal", - "paranoicas", "paranoia", - "paranomral", "paranormal", - "paranornal", "paranormal", - "parapharse", "paraphrase", - "paraphraze", "paraphrase", - "paraprhase", "paraphrase", - "parasitter", "parasite", - "parilament", "parliament", - "parituclar", "particular", - "parlaiment", "parliament", - "parliamant", "parliament", - "parliamone", "parliament", - "parliement", "parliament", - "parrallell", "parallel", - "parrallely", "parallelly", - "partiarchy", "patriarchy", - "participas", "participants", - "participat", "participants", - "participte", "participate", - "particualr", "particular", - "partiotism", "patriotism", - "passionais", "passions", - "passionale", "passionately", - "passionant", "passionate", - "passionite", "passionate", - "passivedns", "passives", - "passivelly", "passively", - "patenterad", "patented", - "pathfidner", "pathfinder", - "pathfindir", "pathfinder", - "pathifnder", "pathfinder", - "patientens", "patients", - "patrairchy", "patriarchy", - "patriachry", "patriarchy", - "patriarcal", "patriarchal", - "patriarhal", "patriarchal", - "patriatchy", "patriarchy", - "patriatism", "patriotism", - "patrionism", "patriotism", - "patriotics", "patriotism", - "patriotisk", "patriots", - "patroitism", "patriotism", - "patryarchy", "patriarchy", - "pedantisch", "pedantic", - "pedestiran", "pedestrian", - "pedestrain", "pedestrian", - "pedictions", "depictions", - "pedohpiles", "pedophiles", - "pedohpilia", "pedophilia", - "pedophilac", "pedophilia", - "pedophilea", "pedophilia", - "pedophilie", "pedophile", - "pedophilla", "pedophilia", - "pedophille", "pedophile", - "pedopholia", "pedophilia", - "penetraion", "penetration", - "penetratin", "penetration", - "penetraton", "penetration", - "penguinese", "penguins", - "penguiness", "penguins", - "peninsulla", "peninsula", - "penninsula", "peninsula", - "peodphiles", "pedophiles", - "peodphilia", "pedophilia", - "pepperment", "peppermint", - "pepperonni", "pepperoni", - "percantage", "percentage", - "percantile", "percentile", - "percaution", "precaution", - "percenatge", "percentages", - "percential", "percentile", - "percentige", "percentile", - "perceptoin", "perceptions", - "percession", "percussion", - "percetange", "percentages", - "percetnage", "percentages", - "percintile", "percentile", - "percission", "percussion", - "percpetion", "perceptions", - "percusions", "percussion", - "perdicting", "predicting", - "perdiction", "prediction", - "perdictive", "predictive", - "perenially", "perennially", - "perfeccion", "perfection", - "perfecxion", "perfection", - "perfektion", "perfection", - "perferable", "preferable", - "perferably", "preferably", - "perference", "preference", - "perferring", "preferring", - "perfexcion", "perfection", - "perfomance", "performance", - "performace", "performance", - "performane", "performances", - "performans", "performances", - "performens", "performers", - "performous", "performs", - "perfromers", "performers", - "perhiperal", "peripheral", - "peridinkle", "periwinkle", - "perihperal", "peripheral", - "periodisch", "periodic", - "periperhal", "peripheral", - "peripheals", "peripherals", - "peripheria", "peripheral", - "periphiral", "peripheral", - "periphreal", "peripheral", - "periphrial", "peripheral", - "peritinkle", "periwinkle", - "periwankle", "periwinkle", - "periwinkel", "periwinkle", - "periwinkie", "periwinkle", - "periwinlke", "periwinkle", - "permanenty", "permanently", - "permanetly", "permanently", - "permisions", "permission", - "permisison", "permissions", - "permissble", "permissible", - "permissibe", "permissible", - "permissons", "permissions", - "perogative", "prerogative", - "perordered", "preordered", - "perpatuate", "perpetuate", - "perpetualy", "perpetually", - "perpetuare", "perpetuate", - "persausion", "persuasion", - "persausive", "persuasive", - "persective", "respective", - "persectued", "persecuted", - "persecutie", "persecuted", - "persecutin", "persecution", - "perserving", "preserving", - "persicuted", "persecuted", - "persistant", "persistent", - "persistens", "persists", - "persoanlly", "personally", - "persocuted", "persecuted", - "personalie", "personalized", - "personalis", "personas", - "personarse", "personas", - "personatus", "personas", - "personnell", "personnel", - "perspecive", "perspective", - "perspectie", "perspectives", - "persuasian", "persuasion", - "persuasing", "persuasion", - "persuasivo", "persuasion", - "persuation", "persuasion", - "persucuted", "persecuted", - "persumably", "presumably", - "persussion", "persuasion", - "persvasive", "persuasive", - "perswasion", "persuasion", - "pertinante", "pertinent", - "pervailing", "prevailing", - "pervalence", "prevalence", - "pervention", "prevention", - "perversley", "perverse", - "pesitcides", "pesticides", - "pessimistc", "pessimistic", - "pessimitic", "pessimistic", - "pestacides", "pesticides", - "pestecides", "pesticides", - "pesticedes", "pesticides", - "pesticidas", "pesticides", - "pestisides", "pesticides", - "pestizides", "pesticides", - "pharamcist", "pharmacist", - "pharmacias", "pharmacist", - "pharmacyst", "pharmacist", - "pharmasist", "pharmacist", - "pharmicist", "pharmacist", - "phemonenon", "phenomenon", - "phenemenon", "phenomenon", - "phenemonal", "phenomenal", - "phenomanal", "phenomenal", - "phenomanon", "phenomenon", - "phenomemon", "phenomenon", - "phenomenen", "phenomenon", - "phenomenol", "phenomenal", - "phenomenom", "phenomenon", - "phenominon", "phenomenon", - "phenomonal", "phenomenal", - "phenomonen", "phenomenon", - "phenomonon", "phenomenon", - "phenonemal", "phenomenal", - "phenonemon", "phenomenon", - "phenonmena", "phenomena", - "philipines", "philippines", - "philippins", "philippines", - "philisophy", "philosophy", - "phillipine", "philippine", - "phillipses", "phillies", - "philosiphy", "philosophy", - "philosohpy", "philosophy", - "philosoper", "philosopher", - "philospher", "philosopher", - "philospohy", "philosophy", - "photogragh", "photograph", - "photograhs", "photographs", - "photograhy", "photography", - "photograps", "photographs", - "photograpy", "photography", - "photogrpah", "photographs", - "photoshopd", "photoshopped", - "photoshope", "photoshopped", - "phramacist", "pharmacist", - "phsyically", "physically", - "phsyicians", "physicians", - "phsyicists", "physicists", - "phsyiology", "physiology", - "phycisians", "physicians", - "phycisists", "physicists", - "phyiscally", "physically", - "phyisology", "physiology", - "physcially", "physically", - "physcology", "psychology", - "physcopath", "psychopath", - "physicials", "physicians", - "physiciens", "physicians", - "physioligy", "physiology", - "picthforks", "pitchforks", - "pinoneered", "pioneered", - "pitchferks", "pitchforks", - "pitchfolks", "pitchforks", - "pitchfords", "pitchforks", - "pitchworks", "pitchforks", - "pitckforks", "pitchforks", - "pittaburgh", "pittsburgh", - "pittsbrugh", "pittsburgh", - "placehoder", "placeholder", - "placeholdr", "placeholder", - "placeholer", "placeholder", - "placemenet", "placements", - "plagairism", "plagiarism", - "plagarisim", "plagiarism", - "plagiariam", "plagiarism", - "plagiarios", "plagiarism", - "plagiarius", "plagiarism", - "plagiarizm", "plagiarism", - "plagierism", "plagiarism", - "plaguarism", "plagiarism", - "plaigarism", "plagiarism", - "plasticosa", "plastics", - "platfarmer", "platformer", - "platformar", "platformer", - "platformie", "platformer", - "platfotmer", "platformer", - "platfromer", "platformer", - "platofrmer", "platformer", - "playaround", "playground", - "playersare", "playerbase", - "playgorund", "playground", - "playthrogh", "playthrough", - "playthrouh", "playthrough", - "playwrites", "playwrights", - "plethorian", "plethora", - "policitian", "politician", - "polinators", "pollinators", - "polishuset", "polishes", - "politessen", "politeness", - "politicain", "politician", - "politicaly", "politically", - "politicien", "politician", - "politicing", "politician", - "politicion", "politician", - "politickin", "politician", - "politiikan", "politician", - "politiness", "politeness", - "polititian", "politician", - "popualtion", "populations", - "populairty", "popularity", - "populaiton", "populations", - "popularaty", "popularity", - "popularest", "populate", - "popularily", "popularity", - "populaties", "populate", - "populatiry", "popularity", - "populative", "populate", - "populatoin", "populations", - "popultaion", "populations", - "pormetheus", "prometheus", - "pornograhy", "pornography", - "pornograpy", "pornography", - "pornogrphy", "pornography", - "porportion", "proportion", - "portabilty", "portability", - "portarying", "portraying", - "portoguese", "portuguese", - "portraiing", "portraying", - "portrating", "portraying", - "portrayels", "portrays", - "portugeuse", "portuguese", - "portuguise", "portuguese", - "posessions", "possessions", - "posicional", "positional", - "positevely", "positively", - "positioing", "positioning", - "positionly", "positional", - "positionne", "positioned", - "positivley", "positively", - "possesives", "possessive", - "possessers", "possesses", - "possessess", "possesses", - "possibiliy", "possibility", - "possibilty", "possibility", - "possissive", "possessive", - "posthomous", "posthumous", - "potentialy", "potentially", - "poulations", "populations", - "powerhorse", "powerhouse", - "powerhosue", "powerhouse", - "powerhours", "powerhouse", - "powerhsell", "powershell", - "powerprint", "powerpoint", - "powersehll", "powershell", - "ppublisher", "publisher", - "practially", "practically", - "practicaly", "practically", - "practicess", "practise", - "practiclly", "practically", - "practioner", "practitioner", - "precaucion", "precaution", - "precausion", "precaution", - "precautios", "precautions", - "precedance", "precedence", - "precedense", "precedence", - "preceeding", "preceding", - "precendece", "precedence", - "precentage", "percentage", - "precentile", "percentile", - "preciselly", "precisely", - "precuation", "precautions", - "precussion", "percussion", - "predecated", "predicated", - "predecence", "precedence", - "predecesor", "predecessor", - "predection", "prediction", - "predective", "predictive", - "prediccion", "prediction", - "prediceted", "predicated", - "predicited", "predicated", - "predicitng", "predicting", - "prediciton", "prediction", - "predicitve", "predictive", - "predickted", "predicated", - "predictave", "predictive", - "predictivo", "prediction", - "predictons", "predictions", - "predjuiced", "prejudiced", - "predjuices", "prejudices", - "preduction", "prediction", - "preductive", "predictive", - "predujiced", "prejudiced", - "predujices", "prejudices", - "prefarable", "preferable", - "prefarably", "preferably", - "prefection", "perfection", - "preferance", "preference", - "prefereble", "preferable", - "preferente", "preference", - "preferenze", "preference", - "preferible", "preferable", - "preferibly", "preferably", - "prefernece", "preferences", - "preformers", "performers", - "pregancies", "pregnancies", - "pregnanies", "pregnancies", - "preipheral", "peripheral", - "preisdents", "presidents", - "preisthood", "priesthood", - "prejeduced", "prejudiced", - "prejeduces", "prejudices", - "prejiduced", "prejudiced", - "prejiduces", "prejudices", - "prejucided", "prejudiced", - "prejucides", "prejudices", - "prejuduced", "prejudiced", - "prejuduces", "prejudices", - "prelimiary", "preliminary", - "prematurly", "prematurely", - "preminence", "preeminence", - "premission", "permission", - "preorderes", "preorders", - "prepartion", "preparation", - "prepetuate", "perpetuate", - "preposters", "preposterous", - "prescients", "presidents", - "prescirbed", "prescribed", - "prescriped", "prescribed", - "presearing", "preserving", - "presecuted", "persecuted", - "presedency", "presidency", - "presedents", "presidents", - "presenning", "presenting", - "presentase", "presents", - "presentato", "presentation", - "presention", "presenting", - "presentors", "presents", - "preservare", "preserve", - "preservato", "preservation", - "preserverd", "preserved", - "presidancy", "presidency", - "presidante", "presidents", - "presidenta", "presidential", - "presidenty", "presidency", - "presidunce", "presidency", - "presistent", "persistent", - "presonally", "personally", - "presonhood", "personhood", - "pressuming", "pressuring", - "prestigios", "prestigious", - "prestigous", "prestigious", - "presuambly", "presumably", - "presuasion", "persuasion", - "presuasive", "persuasive", - "presumebly", "presumably", - "presumendo", "presumed", - "presumibly", "presumably", - "presumpton", "presumption", - "pretaining", "pertaining", - "pretection", "protection", - "pretendias", "pretends", - "pretensive", "pretense", - "pretentios", "pretentious", - "pretentous", "pretentious", - "prevalecen", "prevalence", - "prevalente", "prevalence", - "prevencion", "prevention", - "preventivo", "prevention", - "preventors", "prevents", - "previaling", "prevailing", - "previosuly", "previously", - "previoulsy", "previously", - "prevolence", "prevalence", - "pricinpals", "principals", - "primarilly", "primarily", - "primatives", "primitives", - "princepals", "principals", - "princesess", "princesses", - "princibles", "principles", - "principaly", "principality", - "principels", "principals", - "principial", "principal", - "principias", "principals", - "principlas", "principals", - "prinicipal", "principal", - "prinicpals", "principals", - "prinicples", "principles", - "printerest", "printers", - "prioratize", "prioritize", - "prioretize", "prioritize", - "prioritice", "prioritize", - "prioritied", "prioritize", - "prioroties", "priorities", - "priorotize", "prioritize", - "priotities", "priorities", - "priotitize", "prioritize", - "privaleged", "privileged", - "privaleges", "privileges", - "privaticed", "privatized", - "privelaged", "privileged", - "privelages", "privileges", - "priveldges", "privileges", - "priveleged", "privileged", - "priveleges", "privileges", - "privelidge", "privileged", - "priveliged", "privileged", - "priveliges", "privileges", - "privetized", "privatized", - "privilaged", "privileged", - "privilages", "privileges", - "priviledge", "privilege", - "privilegde", "privileges", - "privilegie", "privilege", - "priviliged", "privileged", - "priviliges", "privileges", - "privitazed", "privatized", - "privitized", "privatized", - "probabiliy", "probability", - "probabilty", "probability", - "probablies", "probable", - "probablybe", "probable", - "problemita", "problematic", - "procalimed", "proclaimed", - "procceding", "proceeding", - "procedding", "proceeding", - "procederal", "procedural", - "procedings", "proceedings", - "procedrual", "procedural", - "proceededs", "proceeds", - "proceedure", "procedure", - "proceesing", "proceeding", - "processsor", "processors", - "proclamied", "proclaimed", - "proclaming", "proclaiming", - "procliamed", "proclaimed", - "procreatin", "procreation", - "procudures", "procedures", - "prodcution", "production", - "prodecural", "procedural", - "prodecures", "procedures", - "produccion", "production", - "produceras", "produces", - "produceres", "produces", - "producirse", "producers", - "produciton", "production", - "producting", "production", - "productino", "productions", - "productivo", "production", - "productivy", "productivity", - "productoin", "productions", - "produktion", "production", - "produktive", "productive", - "produtcion", "productions", - "profesions", "profession", - "professers", "professors", - "professorn", "profession", - "professsor", "professors", - "proffesion", "profession", - "proficeint", "proficient", - "proficiant", "proficient", - "proficieny", "proficiency", - "proficincy", "proficiency", - "profitabel", "profitable", - "profitabil", "profitable", - "profitible", "profitable", - "proftiable", "profitable", - "programmar", "programmer", - "programmme", "programme", - "progresing", "progressing", - "progresion", "progression", - "progresive", "progressive", - "progressie", "progressives", - "progressin", "progression", - "progresson", "progression", - "progressos", "progresses", - "progressus", "progresses", - "prohibirte", "prohibit", - "prohibites", "prohibits", - "prohibitng", "prohibiting", - "prohibiton", "prohibition", - "prohibitus", "prohibits", - "prohibitve", "prohibited", - "prohobited", "prohibited", - "prohpecies", "prophecies", - "projecitle", "projectiles", - "projectiel", "projectiles", - "projecties", "projectiles", - "projectils", "projectiles", - "projectles", "projectiles", - "projectlie", "projectiles", - "projectyle", "projectile", - "projektile", "projectile", - "projektion", "projection", - "prometheas", "prometheus", - "promethese", "prometheus", - "promethius", "prometheus", - "promethous", "prometheus", - "promethues", "prometheus", - "prominance", "prominence", - "prominenty", "prominently", - "prominetly", "prominently", - "promiscous", "promiscuous", - "promiscuos", "promiscuous", - "promoteurs", "promotes", - "promotheus", "prometheus", - "promotinal", "promotional", - "pronoucned", "pronounced", - "pronouning", "pronouncing", - "propechies", "prophecies", - "propencity", "propensity", - "propenents", "proponents", - "properites", "properties", - "propersity", "propensity", - "propertion", "proportion", - "propertius", "properties", - "prophacies", "prophecies", - "prophocies", "prophecies", - "propietary", "proprietary", - "proplusion", "propulsion", - "propoganda", "propaganda", - "propogates", "propagates", - "propolsion", "propulsion", - "proponants", "proponents", - "proponenet", "proponent", - "proporcion", "proportion", - "proporties", "properties", - "proporting", "proportion", - "propositon", "proposition", - "propotions", "proportions", - "proprietry", "proprietary", - "proprotion", "proportion", - "propserity", "prosperity", - "propserous", "prosperous", - "propulaios", "propulsion", - "propulsing", "propulsion", - "propultion", "propulsion", - "propuslion", "propulsion", - "prosectued", "prosecuted", - "prosectuor", "prosecutor", - "prosecuter", "prosecutor", - "prosecutie", "prosecuted", - "prosicuted", "prosecuted", - "prosicutor", "prosecutor", - "prosocuted", "prosecuted", - "prosparity", "prosperity", - "prospectos", "prospects", - "prosperety", "prosperity", - "prospertiy", "prosperity", - "prosphetic", "prosthetic", - "prosporous", "prosperous", - "prostehtic", "prosthetic", - "prosterity", "prosperity", - "prostethic", "prosthetic", - "prostitite", "prostitute", - "prostitude", "prostitute", - "prostituee", "prostitute", - "prostituer", "prostitute", - "prostitues", "prostitutes", - "prostiture", "prostitute", - "prostituto", "prostitution", - "prostituye", "prostitute", - "protaginst", "protagonist", - "protastant", "protestant", - "proteccion", "protection", - "proteciton", "protections", - "protectice", "protective", - "protectiei", "protective", - "protectoin", "protections", - "protectons", "protectors", - "protectron", "protection", - "protestans", "protests", - "protestare", "protesters", - "protestato", "protestant", - "protestent", "protestant", - "protestina", "protestant", - "prothsetic", "prosthetic", - "protistant", "protestant", - "protocoles", "protocols", - "protocolls", "protocols", - "protocolos", "protocols", - "protohypes", "prototypes", - "protostant", "protestant", - "prototipes", "prototypes", - "prototpyes", "prototypes", - "protraying", "portraying", - "protuguese", "portuguese", - "provencial", "provincial", - "proveribal", "proverbial", - "provervial", "proverbial", - "providance", "providence", - "providince", "providence", - "provinciae", "province", - "provincies", "province", - "provincija", "provincial", - "provinence", "providence", - "provinical", "provincial", - "provintial", "provincial", - "provinvial", "provincial", - "provisiosn", "provision", - "provisonal", "provisional", - "provocatie", "provocative", - "pscyhology", "psychology", - "pscyhopath", "psychopath", - "pshycology", "psychology", - "pshycopath", "psychopath", - "psychedlic", "psychedelic", - "psychiatic", "psychiatric", - "psycholoog", "psychology", - "psychopaat", "psychopath", - "psychopats", "psychopaths", - "ptichforks", "pitchforks", - "publicitan", "publication", - "publisheed", "published", - "publisherr", "publisher", - "publishher", "publisher", - "publissher", "publisher", - "publlisher", "publisher", - "punihsment", "punishments", - "punishemnt", "punishments", - "punishible", "punishable", - "punishmnet", "punishments", - "punissable", "punishable", - "punsihable", "punishable", - "purchacing", "purchasing", - "purpolsion", "propulsion", - "purposedly", "purposely", - "purposelly", "purposely", - "purpotedly", "purportedly", - "pususading", "persuading", - "pyschology", "psychology", - "pyschopath", "psychopath", - "qaulifiers", "qualifiers", - "quailfiers", "qualifiers", - "qualfiiers", "qualifiers", - "qualifieds", "qualifies", - "qualifiies", "qualifiers", - "qualifiing", "qualifying", - "qualifires", "qualifiers", - "qualifyers", "qualifiers", - "qualitying", "qualifying", - "quanitites", "quantities", - "quantaties", "quantities", - "quantitize", "quantities", - "quarantena", "quarantine", - "quarantene", "quarantine", - "quarantied", "quarantine", - "quarintine", "quarantine", - "quaruntine", "quarantine", - "quesitoned", "questioned", - "questional", "questionable", - "questionne", "questioned", - "rabinnical", "rabbinical", - "radiactive", "radioactive", - "radioacive", "radioactive", - "rainbowers", "rainbows", - "randmoness", "randomness", - "randomzied", "randomized", - "randonmess", "randomness", - "randumness", "randomness", - "raspberrry", "raspberry", - "rationalle", "rationale", - "readmition", "readmission", - "realitvely", "relatively", - "realtively", "relatively", - "realtivity", "relativity", - "reaserched", "researched", - "reasercher", "researcher", - "rebiulding", "rebuilding", - "reboudning", "rebounding", - "rebouncing", "rebounding", - "rebuidling", "rebuilding", - "rebuliding", "rebuilding", - "rebuplican", "republican", - "reccommend", "recommend", - "recepients", "recipients", - "receptoras", "receptors", - "receptores", "receptors", - "recgonised", "recognised", - "recgonized", "recognized", - "recgonizes", "recognizes", - "reciepents", "recipients", - "recipeints", "recipients", - "recipiants", "recipients", - "recocnised", "recognised", - "recoginsed", "recognised", - "recoginzed", "recognized", - "recognices", "recognizes", - "recogniton", "recognition", - "recognzied", "recognised", - "recomended", "recommended", - "recommande", "recommend", - "recommands", "recommends", - "recommeded", "recommended", - "recommened", "recommend", - "recommennd", "recommends", - "recomments", "recommends", - "recompence", "recompense", - "reconcider", "reconsider", - "reconcille", "reconcile", - "recongised", "recognised", - "recongized", "recognized", - "recongizes", "recognizes", - "reconisder", "reconsider", - "reconsiled", "reconsider", - "recordarle", "recorder", - "recordarme", "recorder", - "recordarse", "recorder", - "recordarte", "recorder", - "recreacion", "recreation", - "recreatief", "recreate", - "recreativo", "recreation", - "recrutiers", "recruiters", - "rectanglar", "rectangular", - "rectangual", "rectangular", - "rectanguar", "rectangular", - "recuriters", "recruiters", - "recurrance", "recurrence", - "recursivly", "recursively", - "redefinied", "redefine", - "redefinine", "redefine", - "redemtpion", "redemption", - "redepmtion", "redemption", - "redesiging", "redesign", - "rediculous", "ridiculous", - "redmeption", "redemption", - "redneckers", "rednecks", - "redneckese", "rednecks", - "redneckest", "rednecks", - "reduncancy", "redundancy", - "redundency", "redundancy", - "redundnacy", "redundancy", - "redunduncy", "redundancy", - "reenforced", "reinforced", - "reevaulate", "reevaluate", - "refedendum", "referendum", - "refelcting", "reflecting", - "refelction", "reflection", - "refelctive", "reflective", - "referances", "references", - "referandum", "referendum", - "referemces", "references", - "referemdum", "referendum", - "referendim", "referendum", - "referendom", "referendum", - "referenece", "reference", - "referening", "referencing", - "referenses", "referees", - "referentes", "references", - "referneces", "references", - "referrence", "reference", - "referundum", "referendum", - "refference", "reference", - "refleciton", "reflections", - "reflecters", "reflects", - "reflektion", "reflection", - "reflextion", "reflection", - "reformerad", "reformed", - "refrigerar", "refrigerator", - "refurbised", "refurbished", - "regenarate", "regenerate", - "registeres", "registers", - "registrato", "registration", - "regresives", "regressive", - "regressivo", "regression", - "regualting", "regulating", - "regualtion", "regulations", - "regualtors", "regulators", - "regulacion", "regulation", - "regulament", "regulate", - "regulaotrs", "regulators", - "regularily", "regularly", - "regularing", "regulating", - "regularlas", "regulars", - "regularlos", "regulars", - "regulaters", "regulators", - "regulatios", "regulators", - "regulatons", "regulations", - "rehtorical", "rhetorical", - "reinstaled", "reinstalled", - "reitrement", "retirement", - "relagation", "relaxation", - "relatation", "relaxation", - "relativety", "relativity", - "relativily", "relativity", - "relativley", "relatively", - "relavation", "relaxation", - "relaxating", "relaxation", - "relazation", "relaxation", - "releagtion", "relegation", - "relegetion", "relegation", - "relentness", "relentless", - "reletnless", "relentless", - "relevation", "revelation", - "relexation", "relegation", - "relfecting", "reflecting", - "relfection", "reflection", - "relfective", "reflective", - "reliabilty", "reliability", - "reliablely", "reliably", - "religiones", "religions", - "religiosly", "religiously", - "religiousy", "religiously", - "religously", "religiously", - "relitavely", "relatively", - "reluctanct", "reluctant", - "reluctanly", "reluctantly", - "reluctanty", "reluctantly", - "remarcably", "remarkably", - "remarkibly", "remarkably", - "rememberes", "remembers", - "remenicent", "reminiscent", - "reminisent", "reminiscent", - "reminscent", "reminiscent", - "remmebered", "remembered", - "renaissace", "renaissance", - "renderered", "rendered", - "renegerate", "regenerate", - "renewabels", "renewables", - "renewebles", "renewables", - "rennovated", "renovated", - "renweables", "renewables", - "repatition", "repetition", - "repblicans", "republicans", - "repbulican", "republican", - "repeadedly", "repeatedly", - "repeadetly", "repeatedly", - "repearable", "repeatable", - "repearedly", "repealed", - "repeatadly", "repeatedly", - "repeatedlt", "repealed", - "repeatetly", "repeatedly", - "repeatible", "repeatable", - "repeatidly", "repeatedly", - "repectable", "repeatable", - "repentable", "repeatable", - "repentence", "repentance", - "repersents", "represents", - "repetation", "repetition", - "repeteadly", "repeatedly", - "repetetion", "repetition", - "repeticion", "repetition", - "repetitivo", "repetition", - "replacated", "replicated", - "replaceble", "replaceable", - "replacemet", "replacements", - "replacemnt", "replacement", - "replacemtn", "replacements", - "replecated", "replicated", - "repoistory", "repository", - "reponsible", "responsible", - "reportadly", "reportedly", - "reporteros", "reporters", - "reportidly", "reportedly", - "repositary", "repository", - "reposotory", "repository", - "repostiory", "repository", - "representn", "representing", - "repressent", "represents", - "repressivo", "repression", - "repsectful", "respectful", - "repsecting", "respecting", - "repsective", "respective", - "repsonding", "responding", - "repsonsive", "responsive", - "reptuation", "reputation", - "repubicans", "republicans", - "republcian", "republican", - "republians", "republicans", - "republicon", "republican", - "repuglican", "republican", - "repulicans", "republicans", - "reputacion", "reputation", - "requirment", "requirement", - "requrement", "requirement", - "resemblace", "resemble", - "reserached", "researched", - "reseracher", "researchers", - "reserverad", "reserved", - "reservered", "reserved", - "residental", "residential", - "resistable", "resistible", - "resistanes", "resistances", - "resistanse", "resistances", - "resistence", "resistance", - "resistendo", "resisted", - "resistered", "resisted", - "resistnace", "resistances", - "resitsance", "resistances", - "resoltuion", "resolutions", - "resolucion", "resolution", - "resolutino", "resolutions", - "resolutoin", "resolutions", - "resolutons", "resolutions", - "resolvemos", "resolves", - "resolvendo", "resolved", - "resolveres", "resolves", - "resolverse", "resolves", - "resolviste", "resolves", - "resonabelt", "resonate", - "resoultion", "resolution", - "respecitve", "respective", - "respectifs", "respects", - "respection", "respecting", - "respectons", "respects", - "respectuos", "respects", - "respektive", "respective", - "respiratoy", "respiratory", - "responcive", "responsive", - "responisve", "responsive", - "responsibe", "responsive", - "responsiby", "responsibly", - "responsile", "responsive", - "responsing", "responding", - "ressembled", "resembled", - "restarants", "restaurants", - "restaraunt", "restaurant", - "restaruant", "restaurant", - "restatting", "restarting", - "restaurent", "restaurant", - "restauring", "restarting", - "resteraunt", "restaurant", - "restircted", "restricted", - "restorting", "restarting", - "restrainig", "restraining", - "restrcited", "restricted", - "restrcting", "restarting", - "restricing", "restricting", - "restricion", "restriction", - "restricive", "restrictive", - "restrictes", "restricts", - "restrictie", "restrictive", - "restricton", "restriction", - "restructed", "restricted", - "restuarant", "restaurant", - "resturants", "restaurants", - "resturaunt", "restaurant", - "retaliaton", "retaliation", - "rethorical", "rhetorical", - "retierment", "retirement", - "retribuito", "retribution", - "retrosepct", "retrospect", - "retrospekt", "retrospect", - "revaluated", "reevaluated", - "revealtion", "revelations", - "revelaiton", "revelations", - "revelatons", "revelations", - "revelution", "revelation", - "reversable", "reversible", - "reversably", "reversal", - "reviewtrue", "reviewer", - "revisiones", "revisions", - "revisionis", "revisions", - "revoltuion", "revolution", - "revoluiton", "revolutions", - "revolutoin", "revolutions", - "revoultion", "revolution", - "rewarching", "rewatching", - "rewatchibg", "rewatching", - "rewatchign", "rewatching", - "rewatchimg", "rewatching", - "rhapsodomy", "rhapsody", - "rhetorisch", "rhetoric", - "ridicilous", "ridiculous", - "ridicoulus", "ridiculous", - "ridiculise", "ridicule", - "ridiculize", "ridicule", - "ridiculled", "ridicule", - "ridiculose", "ridicule", - "ridiculued", "ridicule", - "rienforced", "reinforced", - "rigthfully", "rightfully", - "roleplaing", "roleplaying", - "romanmania", "romanian", - "roundaboot", "roundabout", - "rucuperate", "recuperate", - "rudimentry", "rudimentary", - "sacarmento", "sacramento", - "sacntioned", "sanctioned", - "sacraficed", "sacrificed", - "sacrafices", "sacrifices", - "sacramenno", "sacramento", - "sacreficed", "sacrificed", - "sacrefices", "sacrifices", - "sacremento", "sacramento", - "sacrifaced", "sacrificed", - "sacrifaces", "sacrifices", - "sacrifical", "sacrificial", - "sacrificas", "sacrifices", - "sacrificie", "sacrificed", - "sacrificng", "sacrificing", - "sacrifises", "sacrifices", - "sacrifized", "sacrificed", - "sacrifizes", "sacrifices", - "sacromento", "sacramento", - "sadistisch", "sadistic", - "sanctionne", "sanctioned", - "sandiwches", "sandwiches", - "sandviches", "sandwiches", - "sandwishes", "sandwiches", - "sanitazion", "sanitation", - "santiation", "sanitation", - "sastifying", "satisfying", - "satellitte", "satellites", - "satifsying", "satisfying", - "satrically", "satirically", - "satsifying", "satisfying", - "sattelites", "satellites", - "saturacion", "saturation", - "scandalosa", "scandals", - "scandalose", "scandals", - "scandalosi", "scandals", - "scandaloso", "scandals", - "scandaniva", "scandinavia", - "scandinava", "scandinavian", - "scandinvia", "scandinavia", - "scaramento", "sacramento", - "scarificed", "sacrificed", - "scarifices", "sacrifices", - "scarmbling", "scrambling", - "scartching", "scratching", - "sceintific", "scientific", - "sceintists", "scientists", - "scenarioes", "scenarios", - "scenarions", "scenarios", - "scenarious", "scenarios", - "scheudling", "scheduling", - "scholarhip", "scholarship", - "scholarley", "scholarly", - "sciencists", "scientists", - "scientests", "scientists", - "scirptures", "scriptures", - "scooterers", "scooters", - "scorebaord", "scoreboard", - "scoreborad", "scoreboard", - "scorebored", "scoreboard", - "scorpiomon", "scorpion", - "scracthing", "scratching", - "scramblies", "scramble", - "screenshat", "screenshot", - "screenshit", "screenshot", - "scriptores", "scriptures", - "scripturae", "scriptures", - "scriputres", "scriptures", - "scritpures", "scriptures", - "scrutinity", "scrutiny", - "seahawkers", "seahawks", - "sebastiaan", "sebastian", - "segegrated", "segregated", - "segragated", "segregated", - "segregaded", "segregated", - "segregatie", "segregated", - "segretated", "segregated", - "segrigated", "segregated", - "selectiose", "selections", - "selectivly", "selectively", - "selectivos", "selections", - "selfishess", "selfishness", - "senitments", "sentiments", - "sensitiviy", "sensitivity", - "sensitivty", "sensitivity", - "sentaments", "sentiments", - "sentancing", "sentencing", - "sentements", "sentiments", - "sentencian", "sentencing", - "sentensing", "sentencing", - "sentimenal", "sentimental", - "sentimetal", "sentimental", - "sentincing", "sentencing", - "sentinents", "sentiments", - "separacion", "separation", - "separaters", "separates", - "separatley", "separately", - "separatron", "separation", - "separetely", "separately", - "seperately", "separately", - "seperating", "separating", - "seperation", "separation", - "seperatism", "separatism", - "seperatist", "separatist", - "seperatley", "seperate", - "sepulchure", "sepulchre", - "serenitary", "serenity", - "serviceble", "serviceable", - "settelment", "settlement", - "settlemens", "settlements", - "settlemets", "settlements", - "settlemnts", "settlements", - "seuxalized", "sexualized", - "seventeeen", "seventeen", - "sexaulized", "sexualized", - "sexualixed", "sexualized", - "sexuallity", "sexually", - "sexualzied", "sexualized", - "sexulaized", "sexualized", - "shakespare", "shakespeare", - "shakespeer", "shakespeare", - "shakespere", "shakespeare", - "shamelesly", "shamelessly", - "shamelessy", "shamelessly", - "shaprening", "sharpening", - "shareholds", "shareholders", - "sharkening", "sharpening", - "sharpining", "sharpening", - "shartening", "sharpening", - "shatnering", "shattering", - "shattening", "shattering", - "shepharded", "shepherd", - "shilouette", "silhouette", - "shitlasses", "shitless", - "shortenend", "shortened", - "shortining", "shortening", - "sidelinien", "sideline", - "sidelinjen", "sideline", - "sidelinked", "sideline", - "sigantures", "signatures", - "sightstine", "sightstone", - "signficant", "significant", - "signifiant", "significant", - "significat", "significant", - "signitures", "signatures", - "sigthstone", "sightstone", - "sihlouette", "silhouette", - "silohuette", "silhouette", - "silouhette", "silhouette", - "similairty", "similarity", - "similarily", "similarly", - "similarlly", "similarly", - "similiarly", "similarly", - "similiarty", "similarity", - "simliarity", "similarity", - "simluation", "simulation", - "simplictic", "simplistic", - "simplifing", "simplifying", - "simplifyed", "simplified", - "simplifyng", "simplifying", - "simplisitc", "simplistic", - "simplisity", "simplicity", - "simplistes", "simplest", - "simplivity", "simplicity", - "simplyfied", "simplified", - "simualtion", "simulation", - "simulacion", "simulation", - "simulaiton", "simulations", - "simulaties", "simulate", - "simulative", "simulate", - "simulatons", "simulations", - "simulatore", "simulate", - "sincereley", "sincerely", - "sincerelly", "sincerely", - "singatures", "signatures", - "singulaire", "singular", - "singulariy", "singularity", - "singularty", "singularity", - "singulator", "singular", - "sitautions", "situations", - "situatinal", "situational", - "skatebaord", "skateboard", - "skateborad", "skateboard", - "skatebored", "skateboard", - "skatebrand", "skateboard", - "skeletones", "skeletons", - "skeptecism", "skepticism", - "skepticals", "skeptics", - "skepticles", "skeptics", - "skepticons", "skeptics", - "skeptisicm", "skepticism", - "skeptisism", "skepticism", - "sketchysex", "sketches", - "sketpicism", "skepticism", - "skillhosts", "skillshots", - "skillshits", "skillshots", - "skillshoot", "skillshots", - "skillslots", "skillshots", - "skillsofts", "skillshots", - "skillsshot", "skillshots", - "skirmiches", "skirmish", - "skpeticism", "skepticism", - "slaughterd", "slaughtered", - "slipperies", "slippers", - "smarpthone", "smartphones", - "smarthpone", "smartphone", - "snadwiches", "sandwiches", - "snowbaling", "snowballing", - "snowballes", "snowballs", - "snowballls", "snowballs", - "socailists", "socialists", - "socailized", "socialized", - "socialisim", "socialism", - "socializng", "socializing", - "socialsits", "socialists", - "sociapaths", "sociopaths", - "socilaists", "socialists", - "socilaized", "socialized", - "sociologia", "sociological", - "sociopatas", "sociopaths", - "sociopatch", "sociopaths", - "sociopatic", "sociopathic", - "socratease", "socrates", - "socreboard", "scoreboard", - "soemthings", "somethings", - "soldiarity", "solidarity", - "solidairty", "solidarity", - "soliditary", "solidarity", - "solitudine", "solitude", - "somehtings", "somethings", - "someonelse", "someones", - "somethibng", "somethin", - "somethigng", "somethin", - "somethigns", "somethings", - "somethihng", "somethin", - "somethiing", "somethin", - "somethijng", "somethin", - "somethikng", "somethin", - "somethimng", "somethin", - "somethinbg", "somethings", - "somethines", "somethings", - "somethinfg", "somethings", - "somethinhg", "somethings", - "somethinig", "somethings", - "somethinkg", "somethings", - "somethinks", "somethings", - "somethinmg", "somethings", - "somethinng", "somethings", - "somethintg", "somethings", - "somethiong", "somethin", - "somethiung", "somethin", - "sophicated", "sophisticated", - "sotrmfront", "stormfront", - "sotrylines", "storylines", - "soudntrack", "soundtrack", - "soundrtack", "soundtracks", - "soundtracs", "soundtracks", - "soundtrakc", "soundtracks", - "soundtrakk", "soundtrack", - "soundtraks", "soundtracks", - "southampon", "southampton", - "southamton", "southampton", - "southerers", "southerners", - "southernes", "southerners", - "southerton", "southern", - "souveniers", "souvenirs", - "sovereigny", "sovereignty", - "sovereinty", "sovereignty", - "soverignty", "sovereignty", - "spartaniis", "spartans", - "spartanops", "spartans", - "specailist", "specialist", - "specailize", "specializes", - "specialice", "specialize", - "specialied", "specialized", - "specialies", "specializes", - "specialits", "specials", - "speciallly", "specially", - "speciallty", "specially", - "specialops", "specials", - "specialsts", "specialists", - "specialtys", "specials", - "specialzed", "specialized", - "specialzes", "specializes", - "specifices", "specifics", - "specifiing", "specifying", - "specifiyng", "specifying", - "speciliast", "specialists", - "specimines", "specimen", - "spectarors", "spectators", - "spectaters", "spectators", - "spectracal", "spectral", - "spectraply", "spectral", - "spectrolab", "spectral", - "speculatie", "speculative", - "speculatin", "speculation", - "speecheasy", "speeches", - "speicalist", "specialist", - "spiritualy", "spiritually", - "sponsorees", "sponsors", - "sponsorhip", "sponsorship", - "sponsorise", "sponsors", - "spontaneos", "spontaneous", - "spontaneus", "spontaneous", - "spontanous", "spontaneous", - "spoonfulls", "spoonfuls", - "spreadshet", "spreadsheet", - "springfeld", "springfield", - "springfied", "springfield", - "spriritual", "spiritual", - "squirrells", "squirrels", - "squirrelus", "squirrels", - "stabelized", "stabilized", - "stabilzied", "stabilized", - "stablility", "stability", - "stablizied", "stabilized", - "staggaring", "staggering", - "stakeboard", "skateboard", - "starighten", "straighten", - "starnation", "starvation", - "startegies", "strategies", - "startupbus", "startups", - "starwberry", "strawberry", - "statememts", "statements", - "statictics", "statistics", - "stationair", "stationary", - "statisitcs", "statistics", - "statistcal", "statistical", - "statistisk", "statistics", - "stauration", "saturation", - "stealthboy", "stealthy", - "stealthely", "stealthy", - "stealthify", "stealthy", - "stealthray", "stealthy", - "steeleries", "steelers", - "stereotipe", "stereotype", - "stereotpye", "stereotypes", - "steriotype", "stereotype", - "steroetype", "stereotype", - "sterotypes", "stereotypes", - "steryotype", "stereotype", - "stimilants", "stimulants", - "stimilated", "stimulated", - "stimualted", "stimulated", - "stimulatie", "stimulated", - "stimulatin", "stimulation", - "stimulaton", "stimulation", - "stimulents", "stimulants", - "stomrfront", "stormfront", - "storelines", "storylines", - "stormfornt", "stormfront", - "stormfromt", "stormfront", - "stornfront", "stormfront", - "stornghold", "stronghold", - "stradegies", "strategies", - "strageties", "strategies", - "straighted", "straightened", - "straightie", "straighten", - "straightin", "straighten", - "straigthen", "straighten", - "stranglove", "strangle", - "strangreal", "strangle", - "stratagies", "strategies", - "strategems", "strategies", - "strategice", "strategies", - "strategisk", "strategies", - "stravation", "starvation", - "strawbarry", "strawberry", - "strawbeary", "strawberry", - "strawbeery", "strawberry", - "strawbrary", "strawberry", - "strawburry", "strawberry", - "streaching", "stretching", - "streamtrue", "streamer", - "strechting", "stretching", - "strecthing", "stretching", - "stregnthen", "strengthen", - "streichung", "stretching", - "strenghten", "strengthen", - "strengsten", "strengthen", - "strengthes", "strengths", - "strengthin", "strengthen", - "stressende", "stressed", - "striaghten", "straighten", - "stromfront", "stormfront", - "stronkhold", "stronghold", - "stroylines", "storylines", - "structered", "structured", - "structrual", "structural", - "structurel", "structural", - "strucutral", "structural", - "strucutred", "structured", - "strucutres", "structures", - "strugglign", "struggling", - "strwaberry", "strawberry", - "sttutering", "stuttering", - "stupidfree", "stupider", - "stupiditiy", "stupidity", - "sturctural", "structural", - "sturctures", "structures", - "sturggling", "struggling", - "subarmines", "submarines", - "subcultuur", "subculture", - "subesquent", "subsequent", - "subisdized", "subsidized", - "subjectief", "subjective", - "subjectifs", "subjects", - "subjectivy", "subjectively", - "subjektive", "subjective", - "submariens", "submarines", - "submarinas", "submarines", - "submergerd", "submerged", - "submerines", "submarines", - "submisison", "submissions", - "submissies", "submissive", - "submissons", "submissions", - "submittion", "submitting", - "subsadized", "subsidized", - "subscirbed", "subscribed", - "subscirber", "subscribers", - "subscribar", "subscriber", - "subscribir", "subscriber", - "subscrible", "subscriber", - "subscriped", "subscribed", - "subscrubed", "subscribed", - "subscryber", "subscriber", - "subsedized", "subsidized", - "subsequant", "subsequent", - "subsidezed", "subsidized", - "subsidiced", "subsidized", - "subsidizng", "subsidizing", - "subsiduary", "subsidiary", - "subsiquent", "subsequent", - "subsittute", "substitutes", - "subsizided", "subsidized", - "subsrcibed", "subscribed", - "substanial", "substantial", - "substansen", "substances", - "substanser", "substances", - "substanses", "substances", - "substantie", "substantive", - "substatial", "substantial", - "substences", "substances", - "substitite", "substitute", - "substittue", "substitutes", - "substitude", "substitute", - "substitued", "substitute", - "substituer", "substitute", - "substitues", "substitutes", - "substiture", "substitute", - "substituto", "substitution", - "substituts", "substitutes", - "substracts", "subtracts", - "substutite", "substitutes", - "subsudized", "subsidized", - "subtitltes", "subtitle", - "succceeded", "succeeded", - "succcesses", "successes", - "succesfuly", "successfully", - "succesions", "succession", - "successing", "succession", - "successivo", "succession", - "sucesfully", "successfully", - "sucessfull", "successful", - "sucessfuly", "successfully", - "sudnerland", "sunderland", - "sufferered", "suffered", - "sufferring", "suffering", - "sufficiant", "sufficient", - "suggestied", "suggestive", - "suggestief", "suggestive", - "suggestons", "suggests", - "sumbarines", "submarines", - "sumbissive", "submissive", - "sumbitting", "submitting", - "summerized", "summarized", - "summorized", "summarized", - "summurized", "summarized", - "sunderlona", "sunderland", - "sunderlund", "sunderland", - "sungalsses", "sunglasses", - "sunglesses", "sunglasses", - "sunglinger", "gunslinger", - "sunscreeen", "sunscreen", - "superfical", "superficial", - "superfluos", "superfluous", - "superioara", "superior", - "superioare", "superior", - "superioris", "superiors", - "superivsor", "supervisors", - "supermaket", "supermarket", - "supermarkt", "supermarket", - "superouman", "superhuman", - "superposer", "superpowers", - "superviors", "supervisors", - "superviosr", "supervisors", - "supervisar", "supervisor", - "superviser", "supervisor", - "supervisin", "supervision", - "supervison", "supervision", - "supervsior", "supervisors", - "supperssor", "suppressor", - "supplament", "supplement", - "supplemant", "supplemental", - "supplemets", "supplements", - "supportare", "supporters", - "supporteur", "supporter", - "supportied", "supported", - "supportors", "supporters", - "supposdely", "supposedly", - "supposebly", "supposedly", - "supposidly", "supposedly", - "suppresion", "suppression", - "suppresors", "suppressor", - "suppressin", "suppression", - "suppressio", "suppressor", - "suppresson", "suppression", - "suprassing", "surpassing", - "supressing", "suppressing", - "supression", "suppression", - "supsension", "suspension", - "supsicions", "suspicions", - "supsicious", "suspicious", - "surounding", "surrounding", - "surplanted", "supplanted", - "surpressed", "suppressed", - "surprizing", "surprising", - "surrenderd", "surrendered", - "surrouding", "surrounding", - "surroundes", "surrounds", - "surroundig", "surroundings", - "survivours", "survivor", - "suseptable", "susceptible", - "suseptible", "susceptible", - "suspecions", "suspicions", - "suspecious", "suspicious", - "suspencion", "suspension", - "suspendeds", "suspense", - "suspention", "suspension", - "suspicians", "suspicions", - "suspiciois", "suspicions", - "suspicioso", "suspicions", - "suspicioun", "suspicion", - "suspicison", "suspicions", - "suspiciuos", "suspicions", - "suspicsion", "suspicions", - "suspisions", "suspicions", - "suspisious", "suspicious", - "suspitions", "suspicions", - "sustainble", "sustainable", - "swaetshirt", "sweatshirt", - "swearengin", "swearing", - "swearshirt", "sweatshirt", - "sweathsirt", "sweatshirt", - "sweatshits", "sweatshirt", - "sweatshort", "sweatshirt", - "sweatshrit", "sweatshirt", - "sweerheart", "sweetheart", - "sweetshart", "sweetheart", - "switcheasy", "switches", - "switzerand", "switzerland", - "symapthize", "sympathize", - "symbolisch", "symbolic", - "symbolisim", "symbolism", - "symetrical", "symmetrical", - "sympatheic", "sympathetic", - "sympathiek", "sympathize", - "sympathien", "sympathize", - "sympathtic", "sympathetic", - "sympathyze", "sympathize", - "sympethize", "sympathize", - "symphatize", "sympathize", - "symphonity", "symphony", - "sympothize", "sympathize", - "syncronous", "synchronous", - "synomymous", "synonymous", - "synomynous", "synonymous", - "synonamous", "synonymous", - "synonimous", "synonymous", - "synonmyous", "synonymous", - "synonomous", "synonymous", - "synonumous", "synonymous", - "synonynous", "synonymous", - "sypmathize", "sympathize", - "systamatic", "systematic", - "systemetic", "systematic", - "systemisch", "systemic", - "systimatic", "systematic", - "tabelspoon", "tablespoon", - "tablespons", "tablespoons", - "tablesppon", "tablespoon", - "tacitcally", "tactically", - "taiwanesse", "taiwanese", - "taligating", "tailgating", - "tantrumers", "tantrums", - "targetting", "targeting", - "teamfigths", "teamfights", - "teamifghts", "teamfights", - "teamspeack", "teamspeak", - "techicians", "technicians", - "techincian", "technician", - "techinican", "technician", - "techinques", "techniques", - "technicain", "technician", - "technicaly", "technically", - "technicans", "technicians", - "technichan", "technician", - "technicien", "technician", - "technicion", "technician", - "technitian", "technician", - "technqiues", "techniques", - "techtician", "technician", - "tehnically", "ethnically", - "telegrapgh", "telegraph", - "teleporing", "teleporting", - "televesion", "television", - "televisivo", "television", - "temafights", "teamfights", - "temerature", "temperature", - "temperatue", "temperature", - "temperment", "temperament", - "temperture", "temperature", - "templarios", "templars", - "templarius", "templars", - "temporaily", "temporarily", - "temporarly", "temporary", - "temptating", "temptation", - "temptetion", "temptation", - "tendancies", "tendencies", - "tendencias", "tendencies", - "tendencije", "tendencies", - "tendensies", "tendencies", - "tendincies", "tendencies", - "tensionors", "tensions", - "tentacreul", "tentacle", - "termanator", "terminator", - "termendous", "tremendous", - "termiantor", "terminator", - "termigator", "terminator", - "terminales", "terminals", - "terminalis", "terminals", - "terminarla", "terminal", - "terminarlo", "terminal", - "terminaron", "terminator", - "terminater", "terminator", - "terminolgy", "terminology", - "terorrists", "terrorists", - "terrerists", "terrorists", - "terrestial", "terrestrial", - "terriblely", "terribly", - "terriories", "territories", - "territoral", "territorial", - "territores", "territories", - "territoris", "territories", - "territorry", "territory", - "terrorisim", "terrorism", - "terrorsits", "terrorists", - "terrurists", "terrorists", - "testiclees", "testicles", - "testiclies", "testicle", - "testimoney", "testimony", - "thankyooou", "thankyou", - "themselfes", "themselves", - "themsevles", "themselves", - "themsleves", "themselves", - "theocracry", "theocracy", - "theologial", "theological", - "therapetic", "therapeutic", - "therepists", "therapists", - "theripists", "therapists", - "thermastat", "thermostat", - "thermistat", "thermostat", - "thermomter", "thermometer", - "theromstat", "thermostat", - "thorttling", "throttling", - "thorughout", "throughout", - "thouroghly", "thoroughly", - "threadened", "threaded", - "threatenes", "threatens", - "threatning", "threatening", - "threshhold", "threshold", - "throthling", "throttling", - "throtlling", "throttling", - "throughiut", "throughput", - "thubmnails", "thumbnails", - "thumbmails", "thumbnails", - "thunderbot", "thunderbolt", - "thunderolt", "thunderbolt", - "tighetning", "tightening", - "tightining", "tightening", - "tigthening", "tightening", - "tjpanishad", "upanishad", - "toothbruch", "toothbrush", - "toothbruth", "toothbrush", - "toothbursh", "toothbrush", - "toothrbush", "toothbrush", - "toppingest", "toppings", - "torchilght", "torchlight", - "torchlgiht", "torchlight", - "torchligth", "torchlight", - "torhclight", "torchlight", - "torrentbig", "torrenting", - "torrenters", "torrents", - "torrentors", "torrents", - "tortillera", "tortilla", - "tortillias", "tortilla", - "tortillita", "tortilla", - "tortilllas", "tortilla", - "torunament", "tournament", - "totalitara", "totalitarian", - "touchsceen", "touchscreen", - "touchscren", "touchscreen", - "touranment", "tournaments", - "tourmanent", "tournaments", - "tournamets", "tournaments", - "tournamnet", "tournament", - "tournemant", "tournament", - "tournement", "tournament", - "toxicitity", "toxicity", - "trafficing", "trafficking", - "trainwreak", "trainwreck", - "traitorise", "traitors", - "tramboline", "trampoline", - "tramploine", "trampoline", - "trampolene", "trampoline", - "tranformed", "transformed", - "tranistion", "transition", - "tranlsated", "translated", - "transalted", "translated", - "transaltes", "translates", - "transaltor", "translator", - "transation", "transition", - "transciprt", "transcripts", - "transcirpt", "transcripts", - "transcrips", "transcripts", - "transcrito", "transcript", - "transcrits", "transcripts", - "transcrpit", "transcript", - "transfered", "transferred", - "transferer", "transferred", - "transferes", "transfers", - "transferrs", "transfers", - "transferts", "transfers", - "transfomed", "transformed", - "transfored", "transformed", - "transforme", "transfer", - "transfroms", "transforms", - "transgeder", "transgender", - "transgener", "transgender", - "transicion", "transition", - "transision", "transition", - "transister", "transistor", - "transitons", "transitions", - "transitors", "transistor", - "transkript", "transcript", - "translater", "translator", - "translatin", "translations", - "translatio", "translator", - "translpant", "transplants", - "transluent", "translucent", - "transmited", "transmitted", - "transmiter", "transmitter", - "transmitor", "transistor", - "transmorgs", "transforms", - "transpalnt", "transplants", - "transphoic", "transphobic", - "transplain", "transplant", - "transplate", "transplant", - "transplats", "transplants", - "transpoder", "transported", - "transportr", "transporter", - "transsexal", "transsexual", - "transtator", "translator", - "tranzistor", "transistor", - "trasncript", "transcript", - "trasnforms", "transforms", - "trasnlated", "translated", - "trasnlator", "translator", - "trasnplant", "transplant", - "traveleres", "travelers", - "travelodge", "traveled", - "traverlers", "traverse", - "traversare", "traverse", - "traversier", "traverse", - "treasurery", "treasury", - "trememdous", "tremendous", - "tremondous", "tremendous", - "trespasing", "trespassing", - "trianwreck", "trainwreck", - "trochlight", "torchlight", - "trustworhy", "trustworthy", - "trustworty", "trustworthy", - "trustwothy", "trustworthy", - "tryannical", "tyrannical", - "tunraround", "turnaround", - "tupparware", "tupperware", - "turnapound", "turnaround", - "turthfully", "truthfully", - "tutoriales", "tutorials", - "tyrantical", "tyrannical", - "ubiqituous", "ubiquitous", - "ubiquotous", "ubiquitous", - "ubiqutious", "ubiquitous", - "ukrainains", "ukrainians", - "ukraineans", "ukrainians", - "ukrainiens", "ukrainians", - "ukraininas", "ukrainians", - "ukrianians", "ukrainians", - "ulitmately", "ultimately", - "ulterioara", "ulterior", - "ulterioare", "ulterior", - "ultimative", "ultimate", - "ultimatley", "ultimately", - "ultimatuum", "ultimatum", - "unanwsered", "unanswered", - "unasnwered", "unanswered", - "unattanded", "unattended", - "unattented", "unattended", - "unavailabe", "unavailable", - "unavailble", "unavailable", - "unavoidble", "unavoidable", - "unawnsered", "unanswered", - "unbalenced", "unbalanced", - "unballance", "unbalance", - "unbalnaced", "unbalanced", - "unbareable", "unbearable", - "unbeakable", "unbeatable", - "unbeareble", "unbearable", - "unbeatbale", "unbeatable", - "unbeateble", "unbeatable", - "unbeerable", "unbearable", - "unbeetable", "unbeatable", - "unbeknowst", "unbeknownst", - "unbreakble", "unbreakable", - "uncencored", "uncensored", - "uncensered", "uncensored", - "uncersored", "uncensored", - "uncertainy", "uncertainty", - "uncertanty", "uncertainty", - "uncesnored", "uncensored", - "uncomitted", "uncommitted", - "uncommited", "uncommitted", - "unconcious", "unconscious", - "unconscous", "unconscious", - "undebiably", "undeniably", - "undeinable", "undeniable", - "undeinably", "undeniably", - "undenaible", "undeniable", - "undenaibly", "undeniably", - "undenyable", "undeniable", - "undenyably", "undeniably", - "underbaker", "undertaker", - "undercling", "underlying", - "underfaker", "undertaker", - "undergated", "underrated", - "undergrand", "undergrad", - "undergroud", "underground", - "undergrund", "underground", - "undermimes", "undermines", - "underminde", "undermines", - "underminig", "undermining", - "underneeth", "underneath", - "underneith", "underneath", - "undernieth", "underneath", - "underpowed", "underpowered", - "underraged", "underrated", - "underraker", "undertaker", - "underrater", "undertaker", - "undersatnd", "understands", - "understadn", "understands", - "understans", "understands", - "understnad", "understands", - "understoon", "understood", - "understsnd", "understands", - "undertoker", "undertaker", - "undertsand", "understands", - "undertunes", "undertones", - "underwager", "underwater", - "underwares", "underwater", - "underwolrd", "underworld", - "underwoord", "underworld", - "underwrold", "underworld", - "underyling", "underlying", - "undesrtand", "understands", - "undoubtedy", "undoubtedly", - "undoubtely", "undoubtedly", - "undoubtley", "undoubtedly", - "uneccesary", "unnecessary", - "unecessary", "unnecessary", - "unedcuated", "uneducated", - "unedicated", "uneducated", - "unempolyed", "unemployed", - "unexplaind", "unexplained", - "unexplaned", "unexplained", - "unfamilair", "unfamiliar", - "unfamilier", "unfamiliar", - "unfinsihed", "unfinished", - "unfirendly", "unfriendly", - "unfortuate", "unfortunate", - "unfreindly", "unfriendly", - "unfriednly", "unfriendly", - "unfriently", "unfriendly", - "ungrapeful", "ungrateful", - "ungreatful", "ungrateful", - "unhealthly", "unhealthy", - "unicornios", "unicorns", - "unifnished", "unfinished", - "unihabited", "uninhabited", - "unilatreal", "unilateral", - "unimporant", "unimportant", - "unimpresed", "unimpressed", - "unimpressd", "unimpressed", - "uninsipred", "uninspired", - "uninspried", "uninspired", - "uninstaled", "uninstalled", - "uniquiness", "uniqueness", - "univercity", "university", - "univeristy", "university", - "universale", "universe", - "universaly", "universally", - "universels", "universes", - "universets", "universes", - "universite", "universities", - "universtiy", "university", - "unjustifed", "unjustified", - "unknowingy", "unknowingly", - "unknowinly", "unknowingly", - "unnecesary", "unnecessary", - "unofficail", "unofficial", - "unoffocial", "unofficial", - "unorginial", "unoriginal", - "unorignial", "unoriginal", - "unorigonal", "unoriginal", - "unplacable", "unplayable", - "unplaybale", "unplayable", - "unplayeble", "unplayable", - "unpleasent", "unpleasant", - "unpopulair", "unpopular", - "unproteced", "unprotected", - "unqiueness", "uniqueness", - "unqualifed", "unqualified", - "unrealesed", "unreleased", - "unrealible", "unreliable", - "unrealistc", "unrealistic", - "unrealitic", "unrealistic", - "unreasonal", "unreasonably", - "unrelaible", "unreliable", - "unreleated", "unreleased", - "unrelyable", "unreliable", - "unrepetant", "unrepentant", - "unrepetent", "unrepentant", - "unresponse", "unresponsive", - "unsencored", "uncensored", - "unsetlling", "unsettling", - "unsolicted", "unsolicited", - "unsubscibe", "unsubscribe", - "unsubscrbe", "unsubscribe", - "unsucesful", "unsuccessful", - "unsuprised", "unsurprised", - "unsuprized", "unsurprised", - "unviersity", "university", - "unwrittern", "unwritten", - "urkainians", "ukrainians", - "utlimately", "ultimately", - "utlrasound", "ultrasound", - "vaccinatie", "vaccinated", - "vaccineras", "vaccines", - "valentians", "valentines", - "valentiens", "valentines", - "valentimes", "valentines", - "valentinas", "valentines", - "valentinos", "valentines", - "valentones", "valentines", - "validitity", "validity", - "valnetines", "valentines", - "vandalisim", "vandalism", - "vasectomey", "vasectomy", - "vegatarian", "vegetarian", - "vegaterian", "vegetarian", - "vegeratian", "vegetarians", - "vegetairan", "vegetarians", - "vegetarain", "vegetarians", - "vegetarien", "vegetarian", - "vegetarion", "vegetarian", - "vegetatian", "vegetarian", - "vegeterian", "vegetarian", - "vegitables", "vegetables", - "vehemantly", "vehemently", - "vehemontly", "vehemently", - "veitnamese", "vietnamese", - "veiwership", "viewership", - "veiwpoints", "viewpoints", - "venezuella", "venezuela", - "verificato", "verification", - "verifyable", "verifiable", - "veritcally", "vertically", - "veritiable", "verifiable", - "vernecular", "vernacular", - "vernicular", "vernacular", - "versatiliy", "versatility", - "versatille", "versatile", - "versatilty", "versatility", - "versitlity", "versatility", - "vewiership", "viewership", - "vibratoare", "vibrator", - "vicitmized", "victimized", - "vicotrious", "victorious", - "victemized", "victimized", - "victomized", "victimized", - "victorinos", "victorious", - "victorinus", "victorious", - "victoriosa", "victorious", - "victorioso", "victorious", - "victoriuos", "victorious", - "victumized", "victimized", - "videogaems", "videogames", - "videojames", "videogames", - "vidoegames", "videogames", - "vientamese", "vietnamese", - "vietmanese", "vietnamese", - "vietnamees", "vietnamese", - "vietnamise", "vietnamese", - "viewpionts", "viewpoints", - "vigilantie", "vigilante", - "vigoruosly", "vigorously", - "vigourosly", "vigorously", - "villageois", "villages", - "vindicitve", "vindictive", - "vindictave", "vindictive", - "visibiltiy", "visibility", - "vitenamese", "vietnamese", - "vocabluary", "vocabulary", - "volatiltiy", "volatility", - "volativity", "volatility", - "volitality", "volatility", - "volleyboll", "volleyball", - "vollyeball", "volleyball", - "volonteers", "volunteers", - "volounteer", "volunteer", - "voluntairy", "voluntarily", - "voluntarly", "voluntary", - "voluntears", "volunteers", - "volunteeer", "volunteers", - "volunteerd", "volunteered", - "voluntered", "volunteered", - "vulernable", "vulnerable", - "vulnarable", "vulnerable", - "vulnerabil", "vulnerable", - "vulnurable", "vulnerable", - "vunlerable", "vulnerable", - "warrandyte", "warranty", - "warrantles", "warranties", - "warrenties", "warranties", - "washignton", "washington", - "waterlemon", "watermelon", - "watermalon", "watermelon", - "waterproff", "waterproof", - "wavelegnth", "wavelength", - "wavelenghs", "wavelength", - "wavelenght", "wavelength", - "weakensses", "weaknesses", - "weaknesess", "weaknesses", - "weathliest", "wealthiest", - "wedensdays", "wednesdays", - "wednesdsay", "wednesdays", - "wednessday", "wednesdays", - "wednsedays", "wednesdays", - "weightened", "weighted", - "welathiest", "wealthiest", - "wellignton", "wellington", - "wellingotn", "wellington", - "wendesdays", "wednesdays", - "wereabouts", "whereabouts", - "westbroook", "westbrook", - "westernese", "westerners", - "westerness", "westerners", - "westminser", "westminster", - "westminter", "westminster", - "whatosever", "whatsoever", - "whatseover", "whatsoever", - "whipsering", "whispering", - "whsipering", "whispering", - "widepsread", "widespread", - "wikileakes", "wikileaks", - "wilderniss", "wilderness", - "wildreness", "wilderness", - "willfullly", "willfully", - "winchestor", "winchester", - "windhsield", "windshield", - "windsheild", "windshield", - "windshiled", "windshield", - "wisconsion", "wisconsin", - "wishpering", "whispering", - "withdrawan", "withdrawn", - "withdrawel", "withdrawal", - "withdrawin", "withdrawn", - "withholdng", "withholding", - "withrdawal", "withdrawals", - "witnissing", "witnessing", - "wonderfull", "wonderful", - "wonderfuly", "wonderfully", - "wonderwand", "wonderland", - "worhsiping", "worshiping", - "workingest", "workings", - "workstaion", "workstation", - "workstaton", "workstation", - "worshippig", "worshipping", - "worshoping", "worshiping", - "wrestlewar", "wrestler", - "xenohpobic", "xenophobic", - "xenophibia", "xenophobia", - "xenophibic", "xenophobic", - "xenophonic", "xenophobic", - "xenophopia", "xenophobia", - "xenophopic", "xenophobic", - "xeonphobia", "xenophobia", - "xeonphobic", "xenophobic", - "yourselfes", "yourselves", - "yoursleves", "yourselves", - "zimbabwaen", "zimbabwe", - "zionistisk", "zionists", - "abandonig", "abandoning", - "abandonne", "abandonment", - "abanonded", "abandoned", - "abdomnial", "abdominal", - "abdonimal", "abdominal", - "aberation", "aberration", - "abnormaly", "abnormally", - "abodminal", "abdominal", - "abondoned", "abandoned", - "aborigene", "aborigine", - "aboslutes", "absolutes", - "abosrbing", "absorbing", - "abreviate", "abbreviate", - "abritrary", "arbitrary", - "abruptley", "abruptly", - "absailing", "abseiling", - "absloutes", "absolutes", - "absolutey", "absolutely", - "absolutly", "absolutely", - "absoultes", "absolutes", - "abstracto", "abstraction", - "absurdley", "absurdly", - "absuridty", "absurdity", - "abusrdity", "absurdity", - "academica", "academia", - "accademic", "academic", - "accalimed", "acclaimed", - "accelerar", "accelerator", - "accending", "ascending", - "accension", "accession", - "accidenty", "accidently", - "acclamied", "acclaimed", - "accliamed", "acclaimed", - "accomdate", "accommodate", - "accordeon", "accordion", - "accordian", "accordion", - "accoridng", "according", - "accountas", "accountants", - "accountat", "accountants", - "accoustic", "acoustic", - "accroding", "according", - "accuraccy", "accuracy", - "acftually", "factually", - "acheiving", "achieving", - "achieveds", "achieves", - "achillees", "achilles", - "achilleos", "achilles", - "achilleus", "achilles", - "achiveing", "achieving", - "acitvates", "activates", - "aclhemist", "alchemist", - "acomplish", "accomplish", - "acquisito", "acquisition", - "acronymes", "acronyms", - "acronymns", "acronyms", - "acsending", "ascending", - "acsension", "ascension", - "activaste", "activates", - "activatin", "activation", - "activelly", "actively", - "activisim", "activism", - "activisit", "activist", - "activites", "activities", - "actresess", "actresses", - "acusation", "causation", - "acutality", "actuality", - "adavanced", "advanced", - "adbominal", "abdominal", - "additonal", "additional", - "addoptive", "adoptive", - "addresing", "addressing", - "addtional", "additional", - "adhearing", "adhering", - "adherance", "adherence", - "adjectivs", "adjectives", - "adjustabe", "adjustable", - "administr", "administer", - "admitedly", "admittedly", - "adolecent", "adolescent", - "adovcated", "advocated", - "adovcates", "advocates", - "adquiring", "acquiring", - "adresable", "addressable", - "adressing", "addressing", - "aduiobook", "audiobook", - "advatange", "advantage", - "adventurs", "adventures", - "adveristy", "adversity", - "advertisy", "adversity", - "advisorys", "advisors", - "aeorspace", "aerospace", - "aeropsace", "aerospace", - "aerosapce", "aerospace", - "aersopace", "aerospace", - "aestethic", "aesthetic", - "aethistic", "atheistic", - "affiliato", "affiliation", - "affinitiy", "affinity", - "affirmate", "affirmative", - "affliated", "affiliated", - "africanas", "africans", - "africanos", "africans", - "aggegrate", "aggregate", - "aggresive", "aggressive", - "agnosticm", "agnosticism", - "agregates", "aggregates", - "agreggate", "aggregate", - "agrentina", "argentina", - "agression", "aggression", - "agressive", "aggressive", - "agressvie", "agressive", - "agruement", "arguement", - "agruments", "arguments", - "agurement", "arguement", - "ailenated", "alienated", - "airbourne", "airborne", - "aircrafts", "aircraft", - "airplance", "airplane", - "airrcraft", "aircraft", - "aksreddit", "askreddit", - "alcehmist", "alchemist", - "alchemsit", "alchemist", - "alchimest", "alchemist", - "alchmeist", "alchemist", - "alchoolic", "alcoholic", - "alcoholis", "alcoholics", - "alechmist", "alchemist", - "alegience", "allegiance", - "aleinated", "alienated", - "algoriths", "algorithms", - "algoritms", "algorithms", - "algorthim", "algorithm", - "algortihm", "algorithm", - "alignemnt", "alignment", - "alimunium", "aluminium", - "alingment", "alignment", - "allainces", "alliances", - "alledgely", "allegedly", - "allegence", "allegiance", - "alleivate", "alleviate", - "allievate", "alleviate", - "alliviate", "alleviate", - "allopones", "allophones", - "allthough", "although", - "almightly", "almighty", - "alocholic", "alcoholic", - "alogrithm", "algorithm", - "alphabeat", "alphabet", - "alrightey", "alrighty", - "alrightly", "alrighty", - "alrightty", "alrighty", - "alrington", "arlington", - "alrorythm", "algorithm", - "alterante", "alternate", - "alternatr", "alternator", - "althetics", "athletics", - "althought", "although", - "altruisim", "altruism", - "amateures", "amateurs", - "ambluance", "ambulance", - "ambuigity", "ambiguity", - "amendmant", "amendment", - "amercians", "americans", - "americain", "american", - "americams", "americas", - "americaps", "americas", - "americats", "americas", - "amibguity", "ambiguity", - "aminosity", "animosity", - "amrstrong", "armstrong", - "amublance", "ambulance", - "amunition", "ammunition", - "anachrist", "anarchist", - "analagous", "analogous", - "analitycs", "analytics", - "analtyics", "analytics", - "analyitcs", "analytics", - "analyseas", "analyses", - "analysees", "analyses", - "analysens", "analyses", - "analysise", "analyses", - "analystes", "analysts", - "analzying", "analyzing", - "anarchsim", "anarchism", - "anayltics", "analytics", - "anaylzing", "analyzing", - "ancedotal", "anecdotal", - "ancedotes", "anecdotes", - "ancestory", "ancestry", - "androgeny", "androgyny", - "androides", "androids", - "androidos", "androids", - "anecdotle", "anecdote", - "anecodtal", "anecdotal", - "anecodtes", "anecdotes", - "anectodal", "anecdotal", - "anectodes", "anecdotes", - "anedoctal", "anecdotal", - "anedoctes", "anecdotes", - "animostiy", "animosity", - "anitvirus", "antivirus", - "anlaytics", "analytics", - "anniversy", "anniversary", - "annointed", "anointed", - "annoucnes", "announces", - "annoyingy", "annoyingly", - "annoymous", "anonymous", - "annoynace", "annoyance", - "annyoance", "annoyance", - "anomisity", "animosity", - "anomolies", "anomalies", - "anomolous", "anomalous", - "anomynity", "anonymity", - "anomynous", "anonymous", - "anonimity", "anonymity", - "anonmyous", "anonymous", - "anonymoys", "anonymously", - "anorexiac", "anorexic", - "anorexica", "anorexia", - "anrachist", "anarchist", - "ansestors", "ancestors", - "antarctia", "antarctica", - "antennaes", "antennas", - "antiviurs", "antivirus", - "antivrius", "antivirus", - "antivuris", "antivirus", - "anwsering", "answering", - "anynomity", "anonymity", - "anynomous", "anonymous", - "aparthide", "apartheid", - "aparthied", "apartheid", - "apartmens", "apartments", - "apocalype", "apocalypse", - "apostrope", "apostrophe", - "apparenty", "apparently", - "appearane", "appearances", - "appenines", "apennines", - "apperance", "appearance", - "appetitie", "appetite", - "applaudes", "applause", - "applicato", "application", - "appreciae", "appreciates", - "apprentie", "apprentice", - "approachs", "approaches", - "apratheid", "apartheid", - "apsaragus", "asparagus", - "apsergers", "aspergers", - "aquainted", "acquainted", - "arbirtary", "arbitrary", - "arbritary", "arbitrary", - "arcehtype", "archetype", - "archetect", "architect", - "archetpye", "archetype", - "archetyps", "archetypes", - "architecs", "architects", - "archtypes", "archetypes", - "aregument", "arguement", - "areospace", "aerospace", - "argessive", "agressive", - "argeument", "arguement", - "arguabley", "arguably", - "arguablly", "arguably", - "arguement", "argument", - "arguemnet", "arguement", - "arguemnts", "arguments", - "argumeent", "arguement", - "arhtritis", "arthritis", - "aribtrary", "arbitrary", - "ariplanes", "airplanes", - "aristolte", "aristotle", - "aristotel", "aristotle", - "aritfacts", "artifacts", - "arlignton", "arlington", - "arlingotn", "arlington", - "armistace", "armistice", - "armstorng", "armstrong", - "arpatheid", "apartheid", - "arthirtis", "arthritis", - "artifcats", "artifacts", - "artifical", "artificial", - "artillary", "artillery", - "arugement", "arguement", - "arugments", "arguments", - "asapragus", "asparagus", - "asbestoes", "asbestos", - "asborbing", "absorbing", - "asburdity", "absurdity", - "ascendend", "ascended", - "ascneding", "ascending", - "ascnesion", "ascension", - "asethetic", "aesthetic", - "asnwering", "answering", - "asociated", "associated", - "assasined", "assassinated", - "assassian", "assassin", - "assassine", "assassinate", - "assasssin", "assassins", - "assaultes", "assaults", - "assembeld", "assembled", - "assembley", "assembly", - "assemblie", "assemble", - "assisnate", "assassinate", - "assistans", "assistants", - "assistsnt", "assistants", - "assmebled", "assembled", - "associato", "association", - "assoicate", "associate", - "asssasins", "assassins", - "assualted", "assaulted", - "assulated", "assaulted", - "asteorids", "asteroids", - "astericks", "asterisk", - "asteriods", "asteroids", - "astroanut", "astronaut", - "astronuat", "astronaut", - "astrounat", "astronaut", - "asuterity", "austerity", - "atempting", "attempting", - "atheltics", "athletics", - "atheneans", "athenians", - "athesitic", "atheistic", - "athetlics", "athletics", - "athiestic", "atheistic", - "athleticm", "athleticism", - "atmosphir", "atmospheric", - "atributed", "attributed", - "atributes", "attributes", - "atrifacts", "artifacts", - "atrillery", "artillery", - "atrittion", "attrition", - "attachmet", "attachments", - "attaindre", "attainder", - "attemting", "attempting", - "attemtped", "attempted", - "attendent", "attendant", - "attension", "attention", - "attirbute", "attribute", - "attirtion", "attrition", - "attmepted", "attempted", - "attractes", "attracts", - "attractin", "attraction", - "attributo", "attribution", - "attributs", "attributes", - "attritube", "attribute", - "auctionrs", "auctions", - "auidobook", "audiobook", - "auromated", "automated", - "australin", "australians", - "authroity", "authority", - "autoattak", "autoattack", - "autogrpah", "autograph", - "autonomos", "autonomous", - "auxillary", "auxiliary", - "avaialble", "available", - "availible", "available", - "avalaible", "available", - "avaliable", "available", - "averageed", "averaged", - "avialable", "available", - "awakenend", "awakened", - "awesomley", "awesomely", - "awkawrdly", "awkwardly", - "awnsering", "answering", - "bacehlors", "bachelors", - "bachelour", "bachelor", - "bachleors", "bachelors", - "bacholers", "bachelors", - "backdooor", "backdoor", - "backfeild", "backfield", - "backfiled", "backfield", - "backgroud", "background", - "backpakcs", "backpacks", - "badnwagon", "bandwagon", - "badnwidth", "bandwidth", - "balckjack", "blackjack", - "balcklist", "blacklist", - "balitmore", "baltimore", - "ballisitc", "ballistic", - "ballsitic", "ballistic", - "balsphemy", "blasphemy", - "bandiwdth", "bandwidth", - "bandwdith", "bandwidth", - "bandwidht", "bandwidth", - "bandwitdh", "bandwidth", - "bankrupcy", "bankruptcy", - "bankrupty", "bankruptcy", - "banruptcy", "bankruptcy", - "baordwalk", "boardwalk", - "barabrian", "barbarian", - "barbarain", "barbarian", - "barbarina", "barbarian", - "barcelets", "bracelets", - "barcleona", "barcelona", - "bareclona", "barcelona", - "barrackus", "barracks", - "bascially", "basically", - "bastardes", "bastards", - "bastardos", "bastards", - "bastardus", "bastards", - "bathrooom", "bathroom", - "batlimore", "baltimore", - "battailon", "battalion", - "battlaion", "battalion", - "beahviour", "behaviour", - "beauitful", "beautiful", - "beautifyl", "beautifully", - "becnhmark", "benchmark", - "becomeing", "becoming", - "becomming", "becoming", - "beehtoven", "beethoven", - "begginers", "beginners", - "beggining", "beginning", - "begininng", "beginning", - "beginnins", "beginnings", - "behaivors", "behaviors", - "behaivour", "behaviour", - "behavoirs", "behaviors", - "behavoiur", "behaviour", - "behvaiour", "behaviour", - "beleiving", "believing", - "beliveing", "believing", - "belssings", "blessings", - "bemusemnt", "bemusement", - "benchamrk", "benchmark", - "benchmars", "benchmarks", - "benedicat", "benedict", - "benedickt", "benedict", - "benghazhi", "benghazi", - "benghazzi", "benghazi", - "bergamont", "bergamot", - "berkelely", "berkeley", - "bersekrer", "berserker", - "berskerer", "berserker", - "beseiging", "besieging", - "bestialiy", "bestiality", - "beuatiful", "beautiful", - "biginning", "beginning", - "bigrading", "brigading", - "billbaord", "billboard", - "billboars", "billboards", - "binominal", "binomial", - "birgading", "brigading", - "birghtest", "brightest", - "birhtdays", "birthdays", - "bitcoints", "bitcoins", - "blackbery", "blackberry", - "blackhaws", "blackhawks", - "blackshit", "blacksmith", - "blanketts", "blankets", - "blapshemy", "blasphemy", - "blashpemy", "blasphemy", - "blaspehmy", "blasphemy", - "blasphmey", "blasphemy", - "blatanlty", "blatantly", - "blatimore", "baltimore", - "bleuberry", "blueberry", - "bleutooth", "bluetooth", - "blisteres", "blisters", - "blizzcoin", "blizzcon", - "blockchan", "blockchain", - "blockeras", "blockers", - "bloodbore", "bloodborne", - "boardband", "broadband", - "boardcast", "broadcast", - "bodyweigt", "bodyweight", - "bookamrks", "bookmarks", - "bookmakrs", "bookmarks", - "bookmarkd", "bookmarked", - "boradband", "broadband", - "boradcast", "broadcast", - "boradwalk", "boardwalk", - "bouregois", "bourgeois", - "bourgeios", "bourgeois", - "bourgoeis", "bourgeois", - "boyfirend", "boyfriend", - "boyfreind", "boyfriend", - "boyfriens", "boyfriends", - "brabarian", "barbarian", - "bracelona", "barcelona", - "braodband", "broadband", - "braodcast", "broadcast", - "brazilias", "brazilians", - "breakdows", "breakdowns", - "breserker", "berserker", - "bretheren", "brethren", - "bridaging", "brigading", - "brightern", "brighten", - "brigthest", "brightest", - "brilliany", "brilliantly", - "brithdays", "birthdays", - "broadwalk", "boardwalk", - "bruiseres", "bruisers", - "brunettte", "brunette", - "brusseles", "brussels", - "brussells", "brussels", - "brutailty", "brutality", - "brutallly", "brutally", - "buddhisim", "buddhism", - "buddihsts", "buddhists", - "buddishts", "buddhists", - "buhddists", "buddhists", - "buidlings", "buildings", - "bulidings", "buildings", - "burgunday", "burgundy", - "burgundry", "burgundy", - "burritoes", "burritos", - "burtality", "brutality", - "busineses", "business", - "businessa", "businessman", - "businesse", "businessmen", - "businesss", "businesses", - "bussiness", "business", - "buthcered", "butchered", - "butterlfy", "butterfly", - "cacausian", "caucasian", - "caclulate", "calculate", - "cacuasian", "caucasian", - "caculater", "calculator", - "cafeteira", "cafeteria", - "cafetiera", "cafeteria", - "caffeinne", "caffeine", - "calcualte", "calculate", - "californa", "california", - "caluclate", "calculate", - "calulated", "calculated", - "calulater", "calculator", - "cambirdge", "cambridge", - "cambrdige", "cambridge", - "cambrigde", "cambridge", - "camoflage", "camouflage", - "campagins", "campaigns", - "campaings", "campaigns", - "campiagns", "campaigns", - "campusers", "campuses", - "camrbidge", "cambridge", - "canadains", "canadians", - "candadate", "candidate", - "candidats", "candidates", - "cannister", "canister", - "cannoical", "canonical", - "canoncial", "canonical", - "capactior", "capacitor", - "capicator", "capacitor", - "capitalis", "capitals", - "caprenter", "carpenter", - "capsulers", "capsules", - "capsulets", "capsules", - "carachter", "character", - "cardbaord", "cardboard", - "cardborad", "cardboard", - "cardianls", "cardinals", - "cardnials", "cardinals", - "caridnals", "cardinals", - "carmalite", "carmelite", - "carnberry", "cranberry", - "carolinia", "carolina", - "carpetner", "carpenter", - "carptener", "carpenter", - "carribean", "caribbean", - "cartdrige", "cartridge", - "cartilege", "cartilage", - "cartirdge", "cartridge", - "cartrdige", "cartridge", - "cartrigde", "cartridge", - "casaulity", "causality", - "cashieres", "cashiers", - "cassawory", "cassowary", - "cassettte", "cassette", - "casuation", "causation", - "cataclsym", "cataclysm", - "cataclyms", "cataclysm", - "catacylsm", "cataclysm", - "catacyslm", "cataclysm", - "catalcysm", "cataclysm", - "catalgoue", "catalogue", - "cathderal", "cathedral", - "catherdal", "cathedral", - "cathloics", "catholics", - "cathredal", "cathedral", - "caucaisan", "caucasian", - "caucasain", "caucasian", - "causacian", "caucasian", - "causailty", "causality", - "celebirty", "celebrity", - "celebrato", "celebration", - "celebrite", "celebrities", - "celesital", "celestial", - "celestail", "celestial", - "cementary", "cemetery", - "cemetarey", "cemetery", - "cenitpede", "centipede", - "centepide", "centipede", - "centipeed", "centipede", - "centruies", "centuries", - "centuties", "centuries", - "cerebrawl", "cerebral", - "certanity", "certainty", - "certianty", "certainty", - "cesspoool", "cesspool", - "chairmain", "chairman", - "challange", "challenge", - "challengr", "challenger", - "challengs", "challenges", - "chameloen", "chameleon", - "champagen", "champagne", - "champange", "champagne", - "chandlure", "chandler", - "changable", "changeable", - "charactor", "character", - "chatedral", "cathedral", - "chatolics", "catholics", - "checkmeat", "checkmate", - "checkpoit", "checkpoints", - "chekcmate", "checkmate", - "chemestry", "chemistry", - "chemicaly", "chemically", - "chemsitry", "chemistry", - "chernboyl", "chernobyl", - "chernobly", "chernobyl", - "chernoybl", "chernobyl", - "chernyobl", "chernobyl", - "cheronbyl", "chernobyl", - "chidlfree", "childfree", - "chidlrens", "childrens", - "chihauhua", "chihuahua", - "chihuahau", "chihuahua", - "childbird", "childbirth", - "childerns", "childrens", - "childisch", "childish", - "childresn", "childrens", - "chirstian", "christian", - "chirstmas", "christmas", - "chiuhahua", "chihuahua", - "chlidfree", "childfree", - "chlidrens", "childrens", - "chocloate", "chocolate", - "chocoalte", "chocolate", - "chocolats", "chocolates", - "chocolste", "chocolates", - "cholocate", "chocolate", - "chrenobyl", "chernobyl", - "chrisitan", "christian", - "christain", "christian", - "christams", "christmas", - "chrsitian", "christian", - "chrsitmas", "christmas", - "churchers", "churches", - "cigaretts", "cigarettes", - "cigeratte", "cigarette", - "cilivians", "civilians", - "cilpboard", "clipboard", - "cilynders", "cylinders", - "circuitos", "circuits", - "ciriculum", "curriculum", - "cirticise", "criticise", - "civilains", "civilians", - "civillian", "civilian", - "classicos", "classics", - "classicus", "classics", - "classifiy", "classify", - "cleanisng", "cleansing", - "cleasning", "cleansing", - "clikcbait", "clickbait", - "clinicaly", "clinically", - "clipbaord", "clipboard", - "clitories", "clitoris", - "clitorios", "clitoris", - "clitorius", "clitoris", - "clucthing", "clutching", - "clutchign", "clutching", - "cluthcing", "clutching", - "coca cola", "coca-cola", - "cockatils", "cocktails", - "cocktials", "cocktails", - "cognizent", "cognizant", - "colateral", "collateral", - "collabore", "collaborate", - "collasped", "collapsed", - "collaspes", "collapses", - "colleauge", "colleague", - "collectes", "collects", - "collectie", "collective", - "collecton", "collection", - "collectos", "collectors", - "collegaue", "colleague", - "collegues", "colleagues", - "collisson", "collisions", - "collonade", "colonnade", - "collonies", "colonies", - "collpased", "collapsed", - "collpases", "collapses", - "colombina", "colombia", - "columbina", "columbia", - "comapnies", "companies", - "combatans", "combatants", - "combinato", "combination", - "combusion", "combustion", - "comestics", "cosmetics", - "comisions", "commissions", - "comission", "commission", - "comitting", "committing", - "commandes", "commands", - "commentar", "commentator", - "commentes", "commenters", - "commercie", "commerce", - "commision", "commission", - "commiteed", "commited", - "commiting", "committing", - "commitmet", "commitments", - "commongly", "commonly", - "communiss", "communists", - "communite", "communities", - "communits", "communist", - "communsim", "communism", - "compaines", "companies", - "compalins", "complains", - "compalint", "compliant", - "comparisn", "comparisons", - "compeltes", "completes", - "competant", "competent", - "competend", "competed", - "competion", "competition", - "competive", "competitive", - "compilant", "compliant", - "compilare", "compiler", - "compilato", "compilation", - "compitent", "competent", - "complaind", "complained", - "complaing", "complaining", - "completen", "complement", - "completey", "completely", - "completin", "completion", - "complians", "complains", - "componant", "component", - "comprable", "comparable", - "compresas", "compress", - "compreses", "compress", - "compteurs", "computers", - "comptuers", "computers", - "computato", "computation", - "comradets", "comrades", - "comsetics", "cosmetics", - "conanical", "canonical", - "conatiner", "container", - "concelaed", "concealed", - "concelaer", "concealer", - "concelear", "concealer", - "concensus", "consensus", - "conceptos", "concepts", - "conceptul", "conceptual", - "concernig", "concerning", - "concertas", "concerts", - "concevied", "conceived", - "conciders", "considers", - "concieted", "conceited", - "concieved", "conceived", - "conclusie", "conclusive", - "concsious", "conscious", - "concurret", "concurrent", - "condamned", "condemned", - "condemend", "condemned", - "condemmed", "condemned", - "condemnig", "condemning", - "condenmed", "condemned", - "condesend", "condensed", - "condesned", "condensed", - "condmened", "condemned", - "conection", "connection", - "conenctor", "connector", - "conferene", "conferences", - "confessin", "confession", - "confideny", "confidently", - "confilcts", "conflicts", - "confimred", "confirmed", - "confirmas", "confirms", - "conflcits", "conflicts", - "confrimed", "confirmed", - "congitive", "cognitive", - "conlcuded", "concluded", - "connectes", "connects", - "connectit", "connecticut", - "connectos", "connectors", - "conquerer", "conqueror", - "consdider", "consider", - "consensul", "consensual", - "conserned", "concerned", - "consicous", "conscious", - "considerd", "considered", - "considert", "considerate", - "consisent", "consistent", - "consistes", "consists", - "consolato", "consolation", - "consolide", "consolidate", - "consonent", "consonant", - "constanly", "constantly", - "constanst", "constants", - "constanty", "constantly", - "constasnt", "constants", - "constitue", "constitutes", - "constrait", "constraints", - "construcs", "constructs", - "construde", "construed", - "construst", "constructs", - "constured", "construed", - "consulant", "consultant", - "consultat", "consultant", - "consumate", "consummate", - "contactes", "contacts", - "contactos", "contacts", - "contagios", "contagious", - "containes", "contains", - "containig", "containing", - "containts", "contains", - "contemple", "contemplate", - "contendor", "contender", - "contentas", "contents", - "contentes", "contents", - "contentos", "contents", - "contestas", "contests", - "contestat", "contestants", - "contestes", "contests", - "contextes", "contexts", - "contextos", "contexts", - "contianer", "container", - "contibute", "contribute", - "contigent", "contingent", - "continant", "continental", - "continens", "continents", - "continous", "continuous", - "continuos", "continuous", - "continute", "continue", - "contiunal", "continual", - "contracto", "contraction", - "contribue", "contribute", - "contribuo", "contributor", - "controlas", "controls", - "controled", "controlled", - "controles", "controls", - "controlls", "controls", - "convenant", "covenant", - "convencen", "convenience", - "conveniet", "convenient", - "conversie", "converse", - "conversin", "conversions", - "convertie", "convertible", - "convertis", "converts", - "cooldwons", "cooldowns", - "coordinar", "coordinator", - "copenhagn", "copenhagen", - "coprorate", "corporate", - "copywrite", "copyright", - "corcodile", "crocodile", - "corparate", "corporate", - "corproate", "corporate", - "correclty", "correctly", - "correctin", "correction", - "correlato", "correlation", - "corridoor", "corridor", - "corruptin", "corruption", - "corssfire", "crossfire", - "corsshair", "crosshair", - "corsspost", "crosspost", - "coruching", "crouching", - "cosemtics", "cosmetics", - "costumise", "costumes", - "counciles", "councils", - "councills", "councils", - "councilos", "councils", - "countains", "contains", - "counteres", "counters", - "countires", "countries", - "courching", "crouching", - "courtesey", "courtesy", - "courtesty", "courtesy", - "coururier", "courier", - "coutnered", "countered", - "crapenter", "carpenter", - "creativey", "creatively", - "creedence", "credence", - "crhistmas", "christmas", - "cricketts", "crickets", - "criminaly", "criminally", - "critereon", "criterion", - "criterias", "criteria", - "criticaly", "critically", - "criticies", "criticise", - "criticisn", "criticising", - "critisice", "criticise", - "critisicm", "criticism", - "critising", "criticising", - "critisism", "criticism", - "critisize", "criticise", - "critizing", "criticizing", - "crosshiar", "crosshair", - "crossifre", "crossfire", - "crticised", "criticised", - "crusdaers", "crusaders", - "crutchers", "crutches", - "crystalls", "crystals", - "crystalus", "crystals", - "crystalys", "crystals", - "cuacasian", "caucasian", - "cuasality", "causality", - "culitvate", "cultivate", - "culturaly", "culturally", - "culturels", "cultures", - "curiostiy", "curiosity", - "curisoity", "curiosity", - "currenlty", "currently", - "curriculm", "curriculum", - "cursaders", "crusaders", - "custcenes", "cutscenes", - "cutsceens", "cutscenes", - "cutscence", "cutscene", - "cutsences", "cutscenes", - "cyclinder", "cylinder", - "cyclistes", "cyclists", - "cylindres", "cylinders", - "cynicisim", "cynicism", - "dahsboard", "dashboard", - "dalmation", "dalmatian", - "dangeroys", "dangerously", - "dashbaord", "dashboard", - "daugthers", "daughters", - "davantage", "advantage", - "deadlfits", "deadlifts", - "deadpoool", "deadpool", - "dealershp", "dealerships", - "deathmath", "deathmatch", - "decalring", "declaring", - "decendant", "descendant", - "decendent", "descendant", - "decipting", "depicting", - "deciption", "depiction", - "decisivie", "decisive", - "declarase", "declares", - "declarees", "declares", - "decoratie", "decorative", - "decoratin", "decorations", - "decpetion", "deception", - "decpetive", "deceptive", - "decribing", "describing", - "decsended", "descended", - "deductibe", "deductible", - "defaintly", "defiantly", - "defaltion", "deflation", - "defanitly", "defiantly", - "defeintly", "definetly", - "defendent", "defendant", - "defensese", "defenseless", - "defianlty", "defiantly", - "deficeint", "deficient", - "deficieny", "deficiency", - "deficites", "deficits", - "definance", "defiance", - "definatey", "definately", - "definatly", "definitely", - "definetly", "definitely", - "definetyl", "definetly", - "definilty", "definitly", - "definitie", "definitive", - "definitin", "definitions", - "definitly", "definitely", - "definiton", "definition", - "definitve", "definite", - "definityl", "definitly", - "definltey", "definetly", - "defintaly", "defiantly", - "defintily", "definitly", - "defintion", "definition", - "defintley", "definetly", - "defitenly", "definetly", - "defitinly", "definitly", - "defitnaly", "defiantly", - "defitnely", "definetly", - "deflectin", "deflection", - "defnietly", "definetly", - "degeneret", "degenerate", - "degradato", "degradation", - "degradead", "degraded", - "degrassie", "degrasse", - "degrassse", "degrasse", - "deifnetly", "definetly", - "deifnitly", "definitly", - "deisgners", "designers", - "delagates", "delegates", - "delcaring", "declaring", - "delcining", "declining", - "delegatie", "delegate", - "delerious", "delirious", - "delfation", "deflation", - "deliveres", "delivers", - "deliverys", "delivers", - "delpoying", "deploying", - "demcorats", "democrats", - "deminsion", "dimension", - "democarcy", "democracy", - "democract", "democrat", - "demonstre", "demonstrate", - "denominar", "denominator", - "dentistas", "dentists", - "dentistes", "dentists", - "deomcrats", "democrats", - "deopsited", "deposited", - "deparment", "department", - "departmet", "departments", - "depciting", "depicting", - "depcition", "depiction", - "depection", "deception", - "depedency", "dependency", - "depicitng", "depicting", - "depiciton", "depiction", - "deplyoing", "deploying", - "depoisted", "deposited", - "depolying", "deploying", - "depositas", "deposits", - "deposites", "deposits", - "depositis", "deposits", - "depositos", "deposits", - "depostied", "deposited", - "depressie", "depressive", - "depressin", "depression", - "depserate", "desperate", - "depsoited", "deposited", - "descirbes", "describes", - "descision", "decision", - "desginers", "designers", - "desgining", "designing", - "desicions", "decisions", - "designade", "designated", - "designato", "designation", - "desingage", "disengage", - "desingers", "designers", - "desinging", "designing", - "desktopos", "desktops", - "desparate", "desperate", - "desperato", "desperation", - "despoited", "deposited", - "desriable", "desirable", - "dessigned", "designed", - "destinato", "destination", - "destoryed", "destroyed", - "destoryer", "destroyer", - "destroyes", "destroys", - "destructo", "destruction", - "destryoed", "destroyed", - "destryoer", "destroyer", - "desuction", "seduction", - "detailled", "detailed", - "detatched", "detached", - "detectivs", "detectives", - "deteriate", "deteriorate", - "determing", "determining", - "determins", "determines", - "developrs", "develops", - "diabetees", "diabetes", - "diablical", "diabolical", - "diagonaal", "diagonal", - "diagonsed", "diagnosed", - "diagonsis", "diagnosis", - "diagramas", "diagrams", - "diagramms", "diagrams", - "dialectes", "dialects", - "dialectos", "dialects", - "diarrheoa", "diarrhea", - "diasbling", "disabling", - "dichomoty", "dichotomy", - "dicovered", "discovered", - "dictaters", "dictates", - "dictionay", "dictionary", - "difenitly", "definitly", - "diferrent", "different", - "differene", "differences", - "differens", "differences", - "differeny", "differently", - "difficuly", "difficulty", - "diffucult", "difficult", - "dificulty", "difficulty", - "diganosed", "diagnosed", - "diganosis", "diagnosis", - "dimenions", "dimensions", - "dimention", "dimension", - "dimesnion", "dimension", - "diminishs", "diminishes", - "dinasours", "dinosaurs", - "dinosuars", "dinosaurs", - "dinsoaurs", "dinosaurs", - "dionsaurs", "dinosaurs", - "diphtongs", "diphthongs", - "dipthongs", "diphthongs", - "direcotry", "directory", - "directoty", "directory", - "directroy", "directory", - "disaprity", "disparity", - "disastros", "disastrous", - "disatrous", "disastrous", - "disbaling", "disabling", - "disbeleif", "disbelief", - "disbelife", "disbelief", - "disciplen", "disciplines", - "disclamer", "disclaimer", - "disclosue", "disclosure", - "disconnet", "disconnect", - "discosure", "discourse", - "discoverd", "discovered", - "discovere", "discoveries", - "discredid", "discredited", - "discribed", "described", - "discribes", "describes", - "discussin", "discussion", - "diserable", "desirable", - "disgarees", "disagrees", - "disgiused", "disguised", - "disgusied", "disguised", - "disgustes", "disgusts", - "disgustos", "disgusts", - "disgustus", "disgusts", - "dishonesy", "dishonesty", - "dishonord", "dishonored", - "disicples", "disciples", - "dismantel", "dismantle", - "dismisals", "dismissal", - "disnegage", "disengage", - "dispairty", "disparity", - "dispalyed", "displayed", - "dispartiy", "disparity", - "dispenced", "dispensed", - "dispeners", "dispenser", - "displayes", "displays", - "disruptin", "disruption", - "dissapear", "disappear", - "dissarray", "disarray", - "dissmisal", "dismissal", - "disspiate", "dissipate", - "distincte", "distinctive", - "distrcits", "districts", - "distribue", "distributed", - "distrubed", "disturbed", - "distrupts", "distrust", - "disturben", "disturbance", - "diverisfy", "diversify", - "diveristy", "diversity", - "diverstiy", "diversity", - "dividened", "dividend", - "divinitiy", "divinity", - "doccument", "document", - "docrtines", "doctrines", - "docuhebag", "douchebag", - "dogdammit", "goddammit", - "dogfather", "godfather", - "dolphines", "dolphins", - "domecracy", "democracy", - "domecrats", "democrats", - "domiantes", "dominates", - "dominatin", "domination", - "dominaton", "domination", - "dominiant", "dominant", - "donwgrade", "downgrade", - "donwloads", "downloads", - "donwsides", "downsides", - "donwvoted", "downvoted", - "donwvotes", "downvotes", - "doublelit", "doublelift", - "doucehbag", "douchebag", - "downgarde", "downgrade", - "downlaods", "downloads", - "downloaad", "download", - "downovted", "downvoted", - "dravadian", "dravidian", - "drummless", "drumless", - "dsyphoria", "dysphoria", - "dsytopian", "dystopian", - "duaghters", "daughters", - "duplicats", "duplicates", - "durabiliy", "durability", - "dynamicus", "dynamics", - "dypshoria", "dysphoria", - "dyshporia", "dysphoria", - "dysoptian", "dystopian", - "dysphoira", "dysphoria", - "dysphroia", "dysphoria", - "dyspohria", "dysphoria", - "dyspotian", "dystopian", - "dystopain", "dystopian", - "dystpoian", "dystopian", - "eachohter", "eachother", - "eachotehr", "eachother", - "eachtoher", "eachother", - "earpluggs", "earplugs", - "earthboud", "earthbound", - "eastwoood", "eastwood", - "eastwoord", "eastwood", - "ecclectic", "eclectic", - "ecomonics", "economics", - "edficient", "deficient", - "effecient", "efficient", - "efficeint", "efficient", - "efficency", "efficiency", - "efficieny", "efficiency", - "effulence", "effluence", - "egalitara", "egalitarian", - "egpytians", "egyptians", - "egyptains", "egyptians", - "egytpians", "egyptians", - "ehtically", "ethically", - "ehtnicity", "ethnicity", - "eighteeen", "eighteen", - "eitquette", "etiquette", - "ejacualte", "ejaculate", - "electivre", "elective", - "electorns", "electrons", - "electrial", "electrical", - "electricy", "electricity", - "electroal", "electoral", - "elementay", "elementary", - "elepahnts", "elephants", - "eliminase", "eliminates", - "eliminato", "elimination", - "ellignton", "ellington", - "ellingotn", "ellington", - "eloquenty", "eloquently", - "elsehwere", "elsewhere", - "emapthize", "empathize", - "embarress", "embarrassed", - "emmisarry", "emissary", - "emmisions", "emissions", - "emmitting", "emitting", - "empahsize", "emphasize", - "emperical", "empirical", - "emphaised", "emphasised", - "emphatize", "empathize", - "emphazise", "emphasize", - "emphysyma", "emphysema", - "empitness", "emptiness", - "employeer", "employer", - "employeur", "employer", - "empolyees", "employees", - "emtpiness", "emptiness", - "emualtion", "emulation", - "enahncing", "enhancing", - "enchantig", "enchanting", - "enclousre", "enclosure", - "enclsoure", "enclosure", - "encolsure", "enclosure", - "encompase", "encompass", - "encounted", "encountered", - "encrpyted", "encrypted", - "encrytped", "encrypted", - "encyrpted", "encrypted", - "endangerd", "endangered", - "enevlopes", "envelopes", - "enforcees", "enforces", - "engagemet", "engagements", - "engagment", "engagement", - "engieneer", "engineer", - "engineeer", "engineer", - "engineerd", "engineered", - "enhacning", "enhancing", - "enhanceds", "enhances", - "enligthen", "enlighten", - "enourmous", "enormous", - "ensconsed", "ensconced", - "enthicity", "ethnicity", - "enthusiam", "enthusiasm", - "enthusiat", "enthusiast", - "entirelly", "entirely", - "entitlied", "entitled", - "enveloppe", "envelope", - "epidsodes", "episodes", - "epilepsey", "epilepsy", - "epiphanny", "epiphany", - "episonage", "espionage", - "epscially", "specially", - "epsionage", "espionage", - "eqautions", "equations", - "equialent", "equivalent", - "equivalet", "equivalents", - "ermington", "remington", - "erroenous", "erroneous", - "escalatie", "escalate", - "escalatin", "escalation", - "esitmated", "estimated", - "esitmates", "estimates", - "eslewhere", "elsewhere", - "especialy", "especially", - "espianoge", "espionage", - "espinoage", "espionage", - "espoinage", "espionage", - "esponiage", "espionage", - "espressso", "espresso", - "essencial", "essential", - "essentail", "essential", - "essentias", "essentials", - "essentual", "essential", - "essesital", "essential", - "estiamted", "estimated", - "estiamtes", "estimates", - "estimatin", "estimation", - "ethcially", "ethically", - "ethincity", "ethnicity", - "ethnicaly", "ethnically", - "ethniticy", "ethnicity", - "etmyology", "etymology", - "euclidian", "euclidean", - "euorpeans", "europeans", - "euphoriac", "euphoric", - "euphorica", "euphoria", - "europenas", "europeans", - "europians", "europeans", - "eurpoeans", "europeans", - "evangelia", "evangelical", - "evelation", "elevation", - "evenlopes", "envelopes", - "eventally", "eventually", - "eventualy", "eventually", - "everthing", "everything", - "evertyime", "everytime", - "everwhere", "everywhere", - "everyoens", "everyones", - "everyteim", "everytime", - "everytiem", "everytime", - "everyting", "everything", - "eveyrones", "everyones", - "evreyones", "everyones", - "evreytime", "everytime", - "exagerate", "exaggerate", - "exahusted", "exhausted", - "exapnsive", "expansive", - "exauhsted", "exhausted", - "excahnges", "exchanges", - "excecuted", "executed", - "excecutes", "executes", - "excellant", "excellent", - "excercise", "exercise", - "excerised", "exercised", - "excerises", "exercises", - "exceuting", "executing", - "exchnages", "exchanges", - "exclsuive", "exclusive", - "excludeds", "excludes", - "exclusivs", "exclusives", - "exclusivy", "exclusivity", - "excpetion", "exception", - "exculding", "excluding", - "exculsion", "exclusion", - "exculsive", "exclusive", - "execising", "exercising", - "execption", "exception", - "exectuing", "executing", - "exectuion", "execution", - "exectuive", "executive", - "executabe", "executable", - "exepmtion", "exemption", - "exerbated", "exacerbated", - "exercices", "exercise", - "exerciese", "exercises", - "exercizes", "exercise", - "exersices", "exercises", - "exhasuted", "exhausted", - "exhaustin", "exhaustion", - "exhibites", "exhibits", - "exhibitin", "exhibition", - "exhibtion", "exhibition", - "exhuasted", "exhausted", - "exibition", "exhibition", - "existance", "existence", - "existenta", "existential", - "existince", "existence", - "existnace", "existance", - "exlcuding", "excluding", - "exlcusion", "exclusion", - "exlcusive", "exclusive", - "exlpoding", "exploding", - "exlporers", "explorers", - "exlposion", "explosion", - "exonorate", "exonerate", - "expalined", "explained", - "expanisve", "expansive", - "expatriot", "expatriate", - "expectany", "expectancy", - "expection", "exception", - "expemtion", "exemption", - "experimet", "experiments", - "explaines", "explains", - "explainig", "explaining", - "explaning", "explaining", - "expliciet", "explicit", - "explicity", "explicitly", - "explictly", "explicitly", - "explioted", "exploited", - "explodeds", "explodes", - "exploites", "exploits", - "explorare", "explorer", - "explotied", "exploited", - "expolding", "exploding", - "expolited", "exploited", - "expolsion", "explosion", - "expolsive", "explosive", - "expressie", "expressive", - "expressin", "expression", - "exsitance", "existance", - "extention", "extension", - "exteriour", "exterior", - "extermely", "extremely", - "extermism", "extremism", - "extermist", "extremist", - "externaly", "externally", - "extractin", "extraction", - "extrapole", "extrapolate", - "extreemly", "extremely", - "extremers", "extremes", - "extremley", "extremely", - "extrotion", "extortion", - "eyeballls", "eyeballs", - "eyebrowes", "eyebrows", - "eyebrowns", "eyebrows", - "eyesahdow", "eyeshadow", - "eyeshdaow", "eyeshadow", - "eygptians", "egyptians", - "eytmology", "etymology", - "faceboook", "facebook", - "faciliate", "facilitate", - "facilites", "facilities", - "facilitiy", "facility", - "facinated", "fascinated", - "facutally", "factually", - "familiair", "familiar", - "familiare", "familiarize", - "familiary", "familiarity", - "familliar", "familiar", - "fanaticas", "fanatics", - "fanaticos", "fanatics", - "fanaticus", "fanatics", - "fanatsies", "fantasies", - "fanatsize", "fantasize", - "fandation", "foundation", - "fanservie", "fanservice", - "fantazise", "fantasize", - "farenheit", "fahrenheit", - "fascistes", "fascists", - "fashoined", "fashioned", - "favorties", "favorites", - "favoruite", "favourite", - "favourits", "favourites", - "favourtie", "favourite", - "fedreally", "federally", - "feminisim", "feminism", - "feminsits", "feminists", - "femminist", "feminist", - "fesitvals", "festivals", - "fetishers", "fetishes", - "fightings", "fighting", - "filetimes", "lifetimes", - "filiament", "filament", - "filmmakes", "filmmakers", - "fingernal", "fingernails", - "flashligt", "flashlight", - "flavorade", "flavored", - "flavoures", "flavours", - "flavourus", "flavours", - "flawlessy", "flawlessly", - "flexibily", "flexibility", - "fluctaute", "fluctuate", - "flucutate", "fluctuate", - "fluttersy", "fluttershy", - "follwoing", "following", - "foootball", "football", - "forcefuly", "forcefully", - "forcibley", "forcibly", - "forciblly", "forcibly", - "forearmes", "forearms", - "foreginer", "foreigner", - "foregroud", "foreground", - "foreinger", "foreigner", - "forgeiner", "foreigner", - "forgiener", "foreigner", - "forgivens", "forgiveness", - "foriegner", "foreigner", - "forigener", "foreigner", - "formerlly", "formerly", - "formualte", "formulate", - "formulaes", "formulas", - "formulars", "formulas", - "forntline", "frontline", - "forntpage", "frontpage", - "fortuante", "fortunate", - "forumlate", "formulate", - "foundatin", "foundations", - "fourteeen", "fourteen", - "fractales", "fractals", - "fractalis", "fractals", - "fractalus", "fractals", - "fragement", "fragment", - "fragmenot", "fragment", - "franchies", "franchise", - "francsico", "francisco", - "franscico", "francisco", - "frecklers", "freckles", - "freedomes", "freedoms", - "freestlye", "freestyle", - "freesytle", "freestyle", - "fremented", "fermented", - "freqeuncy", "frequency", - "frequence", "frequencies", - "friendlis", "friendlies", - "frightend", "frightened", - "fromation", "formation", - "frontapge", "frontpage", - "frontilne", "frontline", - "frustrato", "frustration", - "frustrats", "frustrates", - "fucntions", "functions", - "fullscren", "fullscreen", - "funcitons", "functions", - "functiong", "functioning", - "functtion", "function", - "furiosuly", "furiously", - "furiuosly", "furiously", - "futuristc", "futuristic", - "gagnsters", "gangsters", - "galations", "galatians", - "galdiator", "gladiator", - "gallaxies", "galaxies", - "garanteed", "guaranteed", - "garantees", "guarantees", - "garuantee", "guarantee", - "gatherins", "gatherings", - "gauntelts", "gauntlets", - "gauntlent", "gauntlet", - "gaurantee", "guarantee", - "gaurentee", "guarantee", - "genatilia", "genitalia", - "geneology", "genealogy", - "generalbs", "generals", - "generalis", "generals", - "generaste", "generates", - "generatie", "generate", - "generatin", "generations", - "generatos", "generators", - "genitaila", "genitalia", - "genitales", "genitals", - "genitalis", "genitals", - "geniunely", "genuinely", - "gentailia", "genitalia", - "gentelmen", "gentlemen", - "gentialia", "genitalia", - "genuienly", "genuinely", - "genuinley", "genuinely", - "geogrpahy", "geography", - "germaniac", "germanic", - "geurrilla", "guerrilla", - "gimmickey", "gimmicky", - "gimmickly", "gimmicky", - "girlfried", "girlfriend", - "goalkeepr", "goalkeeper", - "godafther", "godfather", - "godspeeed", "godspeed", - "goegraphy", "geography", - "goldfisch", "goldfish", - "goosebums", "goosebumps", - "gorvement", "goverment", - "govemrent", "goverment", - "govenment", "government", - "goverance", "governance", - "goveremnt", "goverment", - "goverment", "government", - "govermetn", "goverment", - "govermnet", "goverment", - "governmet", "governments", - "govorment", "government", - "govrement", "goverment", - "gracefull", "graceful", - "gracefuly", "gracefully", - "graduaste", "graduates", - "graduatin", "graduation", - "grahpical", "graphical", - "grativate", "gravitate", - "graudally", "gradually", - "graudates", "graduates", - "greenalnd", "greenland", - "grenaders", "grenades", - "grpahical", "graphical", - "guadulupe", "guadalupe", - "guaranted", "guaranteed", - "guarantes", "guarantees", - "guardains", "guardians", - "guarentee", "guarantee", - "guaridans", "guardians", - "guatamala", "guatemala", - "guerrilas", "guerrillas", - "guradians", "guardians", - "guranteed", "guaranteed", - "gurantees", "guarantees", - "gutiarist", "guitarist", - "habsbourg", "habsburg", - "hairstlye", "hairstyle", - "hairsytle", "hairstyle", - "halarious", "hilarious", - "hambruger", "hamburger", - "hamburges", "hamburgers", - "hamphsire", "hampshire", - "hamsphire", "hampshire", - "handboook", "handbook", - "handedley", "handedly", - "handedlly", "handedly", - "handicape", "handicapped", - "hapmshire", "hampshire", - "happended", "happened", - "happenend", "happened", - "happenned", "happened", - "harasment", "harassment", - "hardenend", "hardened", - "hardwoord", "hardwood", - "haristyle", "hairstyle", - "harrasing", "harassing", - "harrassed", "harassed", - "harrasses", "harassed", - "hdinsight", "hindsight", - "headahces", "headaches", - "headhpone", "headphone", - "headshoot", "headshot", - "healither", "healthier", - "healtheir", "healthier", - "healthiet", "healthiest", - "healthire", "healthier", - "heapdhone", "headphone", - "hedgehoog", "hedgehog", - "hedgehorg", "hedgehog", - "heightend", "heightened", - "heirarchy", "hierarchy", - "herculase", "hercules", - "herculeas", "hercules", - "herculees", "hercules", - "herculeus", "hercules", - "heriarchy", "hierarchy", - "hesistant", "hesitant", - "hesistate", "hesitate", - "hesitatin", "hesitation", - "hieroglph", "hieroglyph", - "highschol", "highschool", - "hindisght", "hindsight", - "hindrence", "hindrance", - "hinduisim", "hinduism", - "hinduisum", "hinduism", - "hipsanics", "hispanics", - "hirearchy", "hierarchy", - "hirsohima", "hiroshima", - "hispancis", "hispanics", - "hitboxers", "hitboxes", - "hoepfully", "hopefully", - "holocasut", "holocaust", - "holocuast", "holocaust", - "homeonwer", "homeowner", - "homeopaty", "homeopathy", - "homewolrd", "homeworld", - "homewoner", "homeowner", - "homewrold", "homeworld", - "homogenes", "homogeneous", - "homosexul", "homosexuals", - "hopelessy", "hopelessly", - "hopsitals", "hospitals", - "horishima", "hiroshima", - "horizones", "horizons", - "horizonts", "horizons", - "horrendos", "horrendous", - "horribley", "horribly", - "horriblly", "horribly", - "horrifing", "horrifying", - "hositlity", "hostility", - "hospitaly", "hospitality", - "hosptials", "hospitals", - "hourgalss", "hourglass", - "hourlgass", "hourglass", - "househols", "households", - "humanitis", "humanities", - "humanoind", "humanoid", - "humiditiy", "humidity", - "hunagrian", "hungarian", - "hurriance", "hurricane", - "hurricans", "hurricanes", - "husbandos", "husbands", - "hydraluic", "hydraulic", - "hydropile", "hydrophile", - "hydropobe", "hydrophobe", - "hydrualic", "hydraulic", - "hyopcrite", "hypocrite", - "hypcorite", "hypocrite", - "hyperoble", "hyperbole", - "hypocracy", "hypocrisy", - "hypocrasy", "hypocrisy", - "hypocricy", "hypocrisy", - "hypocriet", "hypocrite", - "hypocrits", "hypocrites", - "hyporcite", "hypocrite", - "hypothess", "hypotheses", - "hyprocisy", "hypocrisy", - "hyprocite", "hypocrite", - "hyrdation", "hydration", - "hyrdaulic", "hydraulic", - "hysterica", "hysteria", - "hysteriia", "hysteria", - "iburpofen", "ibuprofen", - "icleandic", "icelandic", - "icongnito", "incognito", - "idealisim", "idealism", - "idealistc", "idealistic", - "identifiy", "identify", - "ideologis", "ideologies", - "ignornace", "ignorance", - "illegales", "illegals", - "illegalis", "illegals", - "illegalls", "illegals", - "illnesess", "illnesses", - "illsuions", "illusions", - "illuminai", "illuminati", - "imagenary", "imaginary", - "imaginery", "imaginary", - "imaptient", "impatient", - "imigrated", "emigrated", - "immensley", "immensely", - "immerisve", "immersive", - "immesnely", "immensely", - "immidiate", "immediate", - "immigrato", "immigration", - "immitated", "imitated", - "immitator", "imitator", - "immobilie", "immobile", - "immobille", "immobile", - "immobilze", "immobile", - "immortaly", "immortality", - "immserive", "immersive", - "impaitent", "impatient", - "imparital", "impartial", - "impedence", "impedance", - "implantes", "implants", - "implicati", "implicit", - "impliciet", "implicit", - "implicity", "implicitly", - "impliment", "implement", - "implusive", "impulsive", - "importamt", "important", - "importend", "imported", - "imporving", "improving", - "impossibe", "impossible", - "imprefect", "imperfect", - "impressin", "impressions", - "imprioned", "imprisoned", - "improbabe", "improbable", - "impulisve", "impulsive", - "impuslive", "impulsive", - "imrpoving", "improving", - "inadequet", "inadequate", - "inadquate", "inadequate", - "inaugures", "inaugurates", - "inbalance", "imbalance", - "inbeetwen", "inbetween", - "inbetween", "between", - "inbewteen", "inbetween", - "incarnato", "incarnation", - "incgonito", "incognito", - "inclinato", "inclination", - "includeds", "includes", - "incoginto", "incognito", - "incongito", "incognito", - "incorpore", "incorporate", - "incpetion", "inception", - "incredibe", "incredible", - "incrediby", "incredibly", - "inculding", "including", - "incunabla", "incunabula", - "indicaste", "indicates", - "indicatie", "indicative", - "indicence", "incidence", - "indicents", "incidents", - "indigenos", "indigenous", - "indirecty", "indirectly", - "indisious", "insidious", - "individul", "individual", - "individus", "individuals", - "indoensia", "indonesia", - "indoneisa", "indonesia", - "indutrial", "industrial", - "inersting", "inserting", - "inexpense", "inexpensive", - "infallibe", "infallible", - "inferioir", "inferior", - "inferiour", "inferior", - "infestato", "infestation", - "infiltrar", "infiltrator", - "infinitey", "infinity", - "infinitie", "infinite", - "infinitiy", "infinity", - "infinitly", "infinity", - "inflatabe", "inflatable", - "influense", "influences", - "influenta", "influential", - "informate", "informative", - "infraread", "infrared", - "ingeniuty", "ingenuity", - "ingeunity", "ingenuity", - "ingocnito", "incognito", - "ingorance", "ignorance", - "inguenity", "ingenuity", - "inhabitat", "inhabitants", - "inheirted", "inherited", - "inhertied", "inherited", - "initailly", "initially", - "initalese", "initialese", - "initaling", "initialing", - "initalise", "initialise", - "initalism", "initialism", - "initalize", "initialize", - "initalled", "initialled", - "initation", "initiation", - "initiales", "initials", - "initiatie", "initiatives", - "initiatin", "initiation", - "initiatve", "initiate", - "injustics", "injustices", - "inlcuding", "including", - "inmigrant", "immigrant", - "innoucous", "innocuous", - "innovatin", "innovations", - "innovatve", "innovate", - "inpection", "inception", - "inpending", "impending", - "inproving", "improving", - "inpsector", "inspector", - "inpsiring", "inspiring", - "inquisito", "inquisition", - "inquisitr", "inquisitor", - "inresting", "inserting", - "insanelly", "insanely", - "insepctor", "inspector", - "insidiuos", "insidious", - "insipring", "inspiring", - "insluated", "insulated", - "inspectin", "inspection", - "instabilt", "instability", - "installes", "installs", - "installus", "installs", - "instering", "inserting", - "insticnts", "instincts", - "institude", "instituted", - "instituto", "institution", - "insualted", "insulated", - "insurence", "insurance", - "insurgeny", "insurgency", - "integirty", "integrity", - "integraal", "integral", - "integrade", "integrated", - "integrato", "integration", - "intenisty", "intensity", - "intensley", "intensely", - "interacte", "interactive", - "interents", "internets", - "interesat", "interest", - "interesst", "interests", - "interewbs", "interwebs", - "interfase", "interfaces", - "interfeer", "interfere", - "interfers", "interferes", - "intergate", "integrate", - "intergity", "integrity", - "interiour", "interior", - "internest", "internets", - "interpert", "interpret", - "interprut", "interrupt", - "interrups", "interrupts", - "interstae", "interstate", - "interveen", "intervene", - "intervied", "interviewed", - "intervier", "interviewer", - "intervies", "interviews", - "intesnely", "intensely", - "intesnity", "intensity", - "intestins", "intestines", - "inticrate", "intricate", - "intimidad", "intimidated", - "intircate", "intricate", - "intiution", "intuition", - "intiutive", "intuitive", - "intorduce", "introduce", - "intorvert", "introvert", - "intracite", "intricate", - "intrduced", "introduced", - "intregity", "integrity", - "intrenets", "internets", - "intrepret", "interpret", - "intrerupt", "interrupt", - "intrewebs", "interwebs", - "intrinisc", "intrinsic", - "intrisinc", "intrinsic", - "intrisnic", "intrinsic", - "intriuged", "intrigued", - "introdued", "introduced", - "introduse", "introduces", - "introvers", "introverts", - "intruiged", "intrigued", - "intrument", "instrument", - "inutition", "intuition", - "inutitive", "intuitive", - "invaderas", "invaders", - "invalidas", "invalidates", - "inventios", "inventions", - "investige", "investigate", - "investmet", "investments", - "invincibe", "invincible", - "invloving", "involving", - "invovling", "involving", - "ipubrofen", "ibuprofen", - "iranianos", "iranians", - "irelevent", "irrelevant", - "ironicaly", "ironically", - "irritatie", "irritate", - "irritatin", "irritation", - "isalmists", "islamists", - "isalnders", "islanders", - "islamiskt", "islamist", - "islamsits", "islamists", - "islmaists", "islamists", - "isntaller", "installer", - "isntances", "instances", - "isntantly", "instantly", - "israelies", "israelis", - "israelits", "israelis", - "italianas", "italians", - "italianos", "italians", - "jailbrake", "jailbreak", - "jalibreak", "jailbreak", - "jamaicain", "jamaican", - "jersualem", "jerusalem", - "jeruselam", "jerusalem", - "jeruslaem", "jerusalem", - "journalis", "journals", - "judegment", "judgement", - "judgemant", "judgemental", - "judisuary", "judiciary", - "jugdement", "judgement", - "juggernat", "juggernaut", - "juvenille", "juvenile", - "keneysian", "keynesian", - "kentuckey", "kentucky", - "kenyesian", "keynesian", - "keybaords", "keyboards", - "keyensian", "keynesian", - "keyesnian", "keynesian", - "keynseian", "keynesian", - "keysenian", "keynesian", - "kilometes", "kilometers", - "kindapped", "kidnapped", - "kncokback", "knockback", - "knoweldge", "knowledge", - "knowlegde", "knowledge", - "konckback", "knockback", - "kryptonie", "kryptonite", - "labirynth", "labyrinth", - "laboratoy", "laboratory", - "laboreres", "laborers", - "labratory", "laboratory", - "labriynth", "labyrinth", - "labryinth", "labyrinth", - "labyrnith", "labyrinth", - "landscaps", "landscapes", - "landscspe", "landscapes", - "langauges", "languages", - "languague", "language", - "lanuchers", "launchers", - "lanugages", "languages", - "larington", "arlington", - "latitudie", "latitude", - "lattitude", "latitude", - "laucnhers", "launchers", - "laucnhing", "launching", - "launchign", "launching", - "laybrinth", "labyrinth", - "lebanesse", "lebanese", - "leceister", "leicester", - "leciester", "leicester", - "legitmate", "legitimate", - "legnedary", "legendary", - "lesbianas", "lesbians", - "lesbianus", "lesbians", - "letivicus", "leviticus", - "leutenant", "lieutenant", - "levaithan", "leviathan", - "levellign", "levelling", - "levetated", "levitated", - "levetates", "levitates", - "levicitus", "leviticus", - "levleling", "levelling", - "lfiesteal", "lifesteal", - "liberales", "liberals", - "liberalim", "liberalism", - "liberalis", "liberals", - "liberatin", "liberation", - "libraires", "libraries", - "liecester", "leicester", - "lieuenant", "lieutenant", - "lieutenat", "lieutenant", - "lifespawn", "lifespan", - "lifestlye", "lifestyle", - "lighnting", "lightning", - "lightnign", "lightning", - "ligthning", "lightning", - "ligthroom", "lightroom", - "lingerine", "lingerie", - "lispticks", "lipsticks", - "listenend", "listened", - "literarly", "literary", - "literarry", "literary", - "literatre", "literate", - "literatue", "literate", - "literture", "literature", - "lithaunia", "lithuania", - "lithuaina", "lithuania", - "lithuiana", "lithuania", - "lithunaia", "lithuania", - "litigatin", "litigation", - "lituhania", "lithuania", - "liveprool", "liverpool", - "livestrem", "livestream", - "lobbysits", "lobbyists", - "lockscren", "lockscreen", - "logisitcs", "logistics", - "logsitics", "logistics", - "loiusiana", "louisiana", - "lollipoop", "lollipop", - "louisvile", "louisville", - "luanchers", "launchers", - "luanching", "launching", - "lubicrant", "lubricant", - "lubircant", "lubricant", - "ludcrious", "ludicrous", - "ludricous", "ludicrous", - "lunaticos", "lunatics", - "lunaticus", "lunatics", - "macaronni", "macaroni", - "maestries", "masteries", - "magainzes", "magazines", - "magensium", "magnesium", - "magincian", "magician", - "magintude", "magnitude", - "magneisum", "magnesium", - "magnesuim", "magnesium", - "magnifine", "magnificent", - "mainfesto", "manifesto", - "mainfests", "manifests", - "mainstrem", "mainstream", - "maintaing", "maintaining", - "maintance", "maintenance", - "maintians", "maintains", - "mairjuana", "marijuana", - "malasyian", "malaysian", - "malayisan", "malaysian", - "malaysain", "malaysian", - "maletonin", "melatonin", - "maltesian", "maltese", - "malyasian", "malaysian", - "managable", "manageable", - "managment", "management", - "mandarian", "mandarin", - "mandarijn", "mandarin", - "mandarion", "mandarin", - "maneouvre", "manoeuvre", - "maneuveur", "maneuver", - "maneveurs", "maneuvers", - "manfiesto", "manifesto", - "manfiests", "manifests", - "mangesium", "magnesium", - "mangitude", "magnitude", - "manouvers", "maneuvers", - "mantained", "maintained", - "manuevers", "maneuvers", - "maraudeur", "marauder", - "marevlous", "marvelous", - "margarent", "margaret", - "margarite", "margaret", - "marginaal", "marginal", - "marginaly", "marginally", - "marijauna", "marijuana", - "marineras", "mariners", - "marineris", "mariners", - "marineros", "mariners", - "marjiuana", "marijuana", - "marjority", "majority", - "marmelade", "marmalade", - "marrtyred", "martyred", - "massagens", "massages", - "massivley", "massively", - "masteires", "masteries", - "mastereis", "masteries", - "masterise", "masteries", - "mastermid", "mastermind", - "mastieres", "masteries", - "masturbae", "masturbated", - "materiaal", "material", - "matierals", "materials", - "mattreses", "mattress", - "mayalsian", "malaysian", - "maylasian", "malaysian", - "mccarthey", "mccarthy", - "mecahnics", "mechanics", - "mecernary", "mercenary", - "mechancis", "mechanics", - "mechanims", "mechanism", - "mechaninc", "mechanic", - "mechansim", "mechanism", - "medicince", "medicine", - "mediciney", "mediciny", - "meditatie", "meditate", - "meditatin", "meditation", - "megathred", "megathread", - "melanotin", "melatonin", - "melborune", "melbourne", - "melbounre", "melbourne", - "membrance", "membrane", - "menstraul", "menstrual", - "menstural", "menstrual", - "mensutral", "menstrual", - "mentiones", "mentions", - "mercanery", "mercenary", - "merhcants", "merchants", - "messagers", "messages", - "messanger", "messenger", - "metabloic", "metabolic", - "metalurgy", "metallurgy", - "methaphor", "metaphor", - "methapors", "metaphors", - "methodoly", "methodology", - "metropols", "metropolis", - "mexicanas", "mexicans", - "mexicants", "mexicans", - "mexicanus", "mexicans", - "michellle", "michelle", - "micorwave", "microwave", - "micoscopy", "microscopy", - "microphen", "microphone", - "migrantes", "migrants", - "migrianes", "migraines", - "milawukee", "milwaukee", - "milennium", "millennium", - "milestons", "milestones", - "militians", "militias", - "millenial", "millennial", - "millenian", "millennia", - "millenium", "millennium", - "millionar", "millionaire", - "millitary", "military", - "miluwakee", "milwaukee", - "milwakuee", "milwaukee", - "milwuakee", "milwaukee", - "mindcarck", "mindcrack", - "mindlessy", "mindlessly", - "minerales", "minerals", - "minisclue", "miniscule", - "miniscuel", "miniscule", - "ministery", "ministry", - "minisucle", "miniscule", - "minitaure", "miniature", - "minituare", "miniature", - "minneosta", "minnesota", - "minnestoa", "minnesota", - "minsicule", "miniscule", - "minsiters", "ministers", - "minstries", "ministries", - "miraculos", "miraculous", - "mircowave", "microwave", - "mirrorred", "mirrored", - "miserabel", "miserable", - "mispelled", "misspelled", - "misreable", "miserable", - "misreably", "miserably", - "missisipi", "mississippi", - "missonary", "missionary", - "missourri", "missouri", - "misspelld", "misspelled", - "mobilitiy", "mobility", - "moderatey", "moderately", - "moderatin", "moderation", - "modifires", "modifiers", - "moelcules", "molecules", - "moleclues", "molecules", - "molestare", "molester", - "molestato", "molestation", - "molesterd", "molested", - "monestary", "monastery", - "monitores", "monitors", - "monolgoue", "monologue", - "monolight", "moonlight", - "monolouge", "monologue", - "monopolis", "monopolies", - "monopolly", "monopoly", - "monopoloy", "monopoly", - "monserrat", "montserrat", - "monstorus", "monstrous", - "monstruos", "monstrous", - "montanous", "mountainous", - "monumnets", "monuments", - "moratlity", "mortality", - "morbidley", "morbidly", - "morgatges", "mortgages", - "morgtages", "mortgages", - "morisette", "morissette", - "mormonsim", "mormonism", - "morroccan", "moroccan", - "mortailty", "mortality", - "mosquitto", "mosquito", - "motivatie", "motivate", - "motivatin", "motivations", - "motorcyce", "motorcycles", - "motorolja", "motorola", - "motoroloa", "motorola", - "moustahce", "moustache", - "movepseed", "movespeed", - "mozzarela", "mozzarella", - "mucisians", "musicians", - "mulitated", "mutilated", - "mulitples", "multiples", - "multipled", "multiplied", - "multplies", "multiples", - "murdererd", "murdered", - "muscially", "musically", - "muscician", "musician", - "musculair", "muscular", - "mushrooom", "mushroom", - "musicains", "musicians", - "mutatiohn", "mutation", - "mutialted", "mutilated", - "mutilatin", "mutilation", - "mutliated", "mutilated", - "mutliples", "multiples", - "mutlitude", "multitude", - "mysterise", "mysteries", - "mysterous", "mysterious", - "nacrotics", "narcotics", - "naferious", "nefarious", - "nahsville", "nashville", - "narcissim", "narcissism", - "narcissit", "narcissist", - "narcissts", "narcissist", - "narctoics", "narcotics", - "nasvhille", "nashville", - "nationaal", "national", - "nationaly", "nationally", - "nativelly", "natively", - "natrually", "naturally", - "navigatie", "navigate", - "navigatin", "navigation", - "neccesary", "necessary", - "necessite", "necessities", - "neckbears", "neckbeards", - "neckbread", "neckbeard", - "nedlessly", "endlessly", - "needlessy", "needlessly", - "negiotate", "negotiate", - "negociate", "negotiate", - "negoitate", "negotiate", - "neigbhour", "neighbour", - "neigbours", "neighbours", - "neighboor", "neighbor", - "nessecary", "necessary", - "newcaslte", "newcastle", - "newcastel", "newcastle", - "nieghbour", "neighbour", - "nightfa;;", "nightfall", - "nightlcub", "nightclub", - "nigthclub", "nightclub", - "nigthlife", "nightlife", - "nigthmare", "nightmare", - "nihilisim", "nihilism", - "ninteenth", "nineteenth", - "nominatie", "nominate", - "nominatin", "nomination", - "noninital", "noninitial", - "norhteast", "northeast", - "norhtwest", "northwest", - "normanday", "normandy", - "northeren", "northern", - "norwegain", "norwegian", - "norwiegan", "norwegian", - "nostaglia", "nostalgia", - "nostaglic", "nostalgic", - "nostaliga", "nostalgia", - "nostaligc", "nostalgic", - "nostlagia", "nostalgia", - "nostlagic", "nostalgic", - "nostriles", "nostrils", - "nostrills", "nostrils", - "notacible", "noticable", - "notciable", "noticable", - "noteboook", "notebook", - "noteriety", "notoriety", - "noteworty", "noteworthy", - "noticable", "noticeable", - "noticably", "noticeably", - "noticalbe", "noticable", - "noticeing", "noticing", - "noticible", "noticeable", - "notoroius", "notorious", - "novermber", "november", - "nullabour", "nullarbor", - "numberous", "numerous", - "numercial", "numerical", - "numerious", "numerous", - "nuremburg", "nuremberg", - "nurtients", "nutrients", - "nutirents", "nutrients", - "nutreints", "nutrients", - "nutritent", "nutrient", - "nutritian", "nutritional", - "nutritios", "nutritious", - "obediance", "obedience", - "obeidence", "obedience", - "obersvant", "observant", - "obersvers", "observers", - "obesssion", "obsession", - "obiedence", "obedience", - "obivously", "obviously", - "objectivs", "objectives", - "objectivy", "objectivity", - "obscruity", "obscurity", - "obscuirty", "obscurity", - "observare", "observer", - "observerd", "observed", - "obssesion", "obsession", - "obssesive", "obsessive", - "obssessed", "obsessed", - "obstruced", "obstructed", - "obsucrity", "obscurity", - "obtainabe", "obtainable", - "obviosuly", "obviously", - "obvioulsy", "obviously", - "obvisouly", "obviously", - "obvoiusly", "obviously", - "ocasional", "occasional", - "ocasioned", "occasioned", - "ocassions", "occasions", - "occaisons", "occasions", - "occassion", "occasion", - "occurance", "occurrence", - "occurence", "occurrence", - "octohedra", "octahedra", - "ocuntries", "countries", - "ocurrance", "occurrence", - "ocurrence", "occurrence", - "offcially", "officially", - "offically", "officially", - "officialy", "officially", - "offpsring", "offspring", - "offspirng", "offspring", - "offsrping", "offspring", - "ogliarchy", "oligarchy", - "oilgarchy", "oligarchy", - "oligrachy", "oligarchy", - "ommitting", "omitting", - "onlsaught", "onslaught", - "onsalught", "onslaught", - "onslaugth", "onslaught", - "onsluaght", "onslaught", - "onwership", "ownership", - "opiniones", "opinions", - "oposition", "opposition", - "opponenet", "opponent", - "opposiste", "opposites", - "opposties", "opposites", - "oppressin", "oppression", - "opression", "oppression", - "opressive", "oppressive", - "opthalmic", "ophthalmic", - "optimisim", "optimism", - "optimistc", "optimistic", - "optinally", "optimally", - "oragnered", "orangered", - "oragnised", "organised", - "oragnizer", "organizer", - "orcehstra", "orchestra", - "ordinarly", "ordinary", - "orgainsed", "organised", - "orgainzer", "organizer", - "organered", "orangered", - "organices", "organise", - "organisim", "organism", - "organiske", "organise", - "organiste", "organise", - "organites", "organise", - "organizms", "organism", - "organsied", "organised", - "organsims", "organisms", - "organzier", "organizer", - "orginally", "originally", - "orgnaised", "organised", - "orhcestra", "orchestra", - "orientato", "orientation", - "origanaly", "originally", - "originall", "original", - "originalt", "originality", - "originaly", "originally", - "origintea", "originate", - "origional", "original", - "orignally", "originally", - "orignials", "originals", - "oublisher", "publisher", - "oursleves", "ourselves", - "oustiders", "outsiders", - "oustpoken", "outspoken", - "outisders", "outsiders", - "outnumbed", "outnumbered", - "outpalyed", "outplayed", - "outperfom", "outperform", - "outpsoken", "outspoken", - "outrageos", "outrageous", - "outskirst", "outskirts", - "outskrits", "outskirts", - "outwieghs", "outweighs", - "overbaord", "overboard", - "overclcok", "overclock", - "overdirve", "overdrive", - "overhpyed", "overhyped", - "overhwelm", "overwhelm", - "overlcock", "overclock", - "overloard", "overload", - "overpaied", "overpaid", - "overpowed", "overpowered", - "overriden", "overridden", - "overwhlem", "overwhelm", - "overwirte", "overwrite", - "overwtach", "overwatch", - "overyhped", "overhyped", - "owernship", "ownership", - "pacificts", "pacifist", - "packageid", "packaged", - "pactivity", "captivity", - "painkills", "painkillers", - "paitently", "patiently", - "paitience", "patience", - "pakistain", "pakistani", - "pakistian", "pakistani", - "pakistnai", "pakistani", - "paksitani", "pakistani", - "paladines", "paladins", - "paladinos", "paladins", - "palestein", "palestine", - "palestina", "palestinian", - "palistian", "palestinian", - "paltforms", "platforms", - "palystyle", "playstyle", - "pancakers", "pancakes", - "pantomine", "pantomime", - "paradimes", "paradise", - "paragraps", "paragraphs", - "paragrpah", "paragraph", - "paralells", "parallels", - "paralelly", "parallelly", - "paralisys", "paralysis", - "parallely", "parallelly", - "paralzyed", "paralyzed", - "paramedis", "paramedics", - "paramters", "parameters", - "paranoica", "paranoia", - "paranoida", "paranoia", - "parasties", "parasites", - "paraylsis", "paralysis", - "paraylzed", "paralyzed", - "parellels", "parallels", - "paricular", "particular", - "parisitic", "parasitic", - "paritally", "partially", - "parliment", "parliament", - "parmesaen", "parmesan", - "parntered", "partnered", - "parrallel", "parallel", - "partchett", "pratchett", - "parterned", "partnered", - "participe", "participate", - "partiotic", "patriotic", - "partisain", "partisan", - "pasengers", "passengers", - "passagens", "passages", - "passagers", "passages", - "passerbys", "passersby", - "passiones", "passions", - "passivley", "passively", - "passowrds", "passwords", - "pateintly", "patiently", - "paticular", "particular", - "patinetly", "patiently", - "patriarca", "patriarchal", - "patriarcy", "patriarchy", - "patriotas", "patriots", - "patriotes", "patriots", - "patroitic", "patriotic", - "pattented", "patented", - "pavillion", "pavilion", - "pbulisher", "publisher", - "peacefuly", "peacefully", - "pedohpile", "pedophile", - "pedophila", "pedophilia", - "pedophils", "pedophiles", - "peircings", "piercings", - "penalites", "penalties", - "penatlies", "penalties", - "penduluum", "pendulum", - "penerator", "penetrator", - "penguines", "penguins", - "penguings", "penguins", - "penguinos", "penguins", - "peninsual", "peninsula", - "peninusla", "peninsula", - "penisnula", "peninsula", - "penisular", "peninsular", - "pennisula", "peninsula", - "pensinula", "peninsula", - "pentagoon", "pentagon", - "peodphile", "pedophile", - "pepperino", "pepperoni", - "peppermit", "peppermint", - "percepted", "perceived", - "percevied", "perceived", - "percieved", "perceived", - "percisely", "precisely", - "percision", "precision", - "percursor", "precursor", - "perdators", "predators", - "peremiter", "perimeter", - "perfeclty", "perfectly", - "perfomers", "performers", - "performas", "performs", - "perfromer", "performer", - "pericings", "piercings", - "perimetre", "perimeter", - "peristent", "persistent", - "periwinke", "periwinkle", - "permanant", "permanent", - "permature", "premature", - "permenant", "permanent", - "permieter", "perimeter", - "permissie", "permissible", - "permissin", "permissions", - "permisson", "permission", - "pernament", "permanent", - "perorders", "preorders", - "perpetrar", "perpetrator", - "perpetuae", "perpetuate", - "perpetuas", "perpetuates", - "persauded", "persuaded", - "perscribe", "prescribe", - "perserved", "preserved", - "persistes", "persists", - "personaes", "personas", - "personaly", "personally", - "personell", "personnel", - "personhod", "personhood", - "persuated", "persuade", - "pertended", "pretended", - "pertoleum", "petroleum", - "perusaded", "persuaded", - "pervertes", "perverse", - "pesticids", "pesticides", - "petroluem", "petroleum", - "phemonena", "phenomena", - "phenemona", "phenomena", - "phenonema", "phenomena", - "phillipse", "phillies", - "philosopy", "philosophy", - "philosphy", "philosophy", - "phonecian", "phoenecian", - "phonemena", "phenomena", - "phongraph", "phonograph", - "photograh", "photograph", - "phsyician", "physician", - "phsyicist", "physicist", - "phycisian", "physician", - "phycisist", "physicist", - "physicaly", "physically", - "physicits", "physicist", - "physisict", "physicist", - "piblisher", "publisher", - "picthfork", "pitchfork", - "pinetrest", "pinterest", - "placeheld", "placeholder", - "placemens", "placements", - "plaestine", "palestine", - "plagarism", "plagiarism", - "planatery", "planetary", - "planation", "plantation", - "planteary", "planetary", - "plasticas", "plastics", - "plasticos", "plastics", - "plasticus", "plastics", - "platfroms", "platforms", - "platofrms", "platforms", - "plausable", "plausible", - "plausbile", "plausible", - "plausibel", "plausible", - "playgroud", "playground", - "playright", "playwright", - "playstlye", "playstyle", - "playwrite", "playwright", - "plebicite", "plebiscite", - "plethoria", "plethora", - "ploarized", "polarized", - "pointeres", "pointers", - "polinator", "pollinator", - "polishees", "polishes", - "politelly", "politely", - "politican", "politician", - "politicas", "politics", - "politicin", "politician", - "politicus", "politics", - "polygammy", "polygamy", - "populatin", "populations", - "poralized", "polarized", - "porcelian", "porcelain", - "porcelina", "porcelain", - "poreclain", "porcelain", - "porftolio", "portfolio", - "porgramme", "programme", - "portfoilo", "portfolio", - "portoflio", "portfolio", - "portraing", "portraying", - "portrayes", "portrays", - "portrayls", "portrays", - "portriats", "portraits", - "portugese", "portuguese", - "portugues", "portuguese", - "posessing", "possessing", - "posession", "possession", - "positiond", "positioned", - "positiong", "positioning", - "positionl", "positional", - "positiviy", "positivity", - "possesess", "possesses", - "possesing", "possessing", - "possesion", "possession", - "possessin", "possessions", - "possibile", "possible", - "possibily", "possibility", - "possibley", "possibly", - "possiblly", "possibly", - "possition", "position", - "powderade", "powdered", - "powerfull", "powerful", - "pracitcal", "practical", - "practhett", "pratchett", - "practicly", "practically", - "practives", "practise", - "pragamtic", "pragmatic", - "preadtors", "predators", - "precedeed", "preceded", - "preceeded", "preceded", - "preceived", "perceived", - "preciesly", "precisely", - "precisley", "precisely", - "precurors", "precursor", - "precurosr", "precursor", - "precurser", "precursor", - "predatobr", "predator", - "predictie", "predictive", - "predictin", "prediction", - "predjuice", "prejudice", - "predujice", "prejudice", - "prefectly", "perfectly", - "preferens", "preferences", - "prefering", "preferring", - "preformer", "performer", - "pregnance", "pregnancies", - "preimeter", "perimeter", - "prejiduce", "prejudice", - "prejucide", "prejudice", - "premanent", "permanent", - "premeired", "premiered", - "preorderd", "preordered", - "preparato", "preparation", - "prepatory", "preparatory", - "presentas", "presents", - "presentes", "presents", - "presicely", "precisely", - "presicion", "precision", - "presideny", "presidency", - "prestigiu", "prestigious", - "prestigue", "prestige", - "presuaded", "persuaded", - "pretendas", "pretends", - "pretensje", "pretense", - "pretinent", "pertinent", - "prevelant", "prevalent", - "preventin", "prevention", - "previvous", "previous", - "priesthod", "priesthood", - "priestood", "priesthood", - "primaires", "primaries", - "primairly", "primarily", - "primarliy", "primarily", - "primative", "primitive", - "primordal", "primordial", - "princesas", "princess", - "princeses", "princess", - "princesss", "princesses", - "principas", "principals", - "principly", "principally", - "prinicple", "principle", - "prioritie", "prioritize", - "prioritse", "priorities", - "privalege", "privilege", - "privelege", "privilege", - "privelige", "privilege", - "privilage", "privilege", - "privilegs", "privileges", - "privledge", "privilege", - "probabily", "probability", - "probablly", "probably", - "problemas", "problems", - "procative", "proactive", - "procedger", "procedure", - "proceding", "proceeding", - "proceedes", "proceeds", - "procelain", "porcelain", - "procesess", "processes", - "processer", "processor", - "processos", "processors", - "proclamed", "proclaimed", - "procotols", "protocols", - "prodecure", "procedure", - "productie", "productive", - "productin", "productions", - "productos", "products", - "profesion", "profusion", - "professer", "professor", - "professin", "professions", - "proffesed", "professed", - "proffesor", "professor", - "progessed", "progressed", - "programas", "programs", - "programem", "programme", - "programes", "programs", - "programms", "programs", - "progresso", "progression", - "progresss", "progresses", - "projectie", "projectile", - "projectin", "projection", - "prominant", "prominent", - "promiscus", "promiscuous", - "promotted", "promoted", - "pronomial", "pronominal", - "pronouced", "pronounced", - "pronounds", "pronouns", - "pronounes", "pronouns", - "propagana", "propaganda", - "properies", "properties", - "propertly", "property", - "propeties", "properties", - "prophesie", "prophecies", - "prophetes", "prophets", - "propogate", "propagate", - "proposels", "proposes", - "proposito", "proposition", - "propperly", "properly", - "propsects", "prospects", - "prosperos", "prosperous", - "prostitue", "prostitute", - "protectes", "protects", - "protectie", "protective", - "protectos", "protectors", - "proteinas", "proteins", - "proteines", "proteins", - "protestas", "protests", - "protestat", "protestant", - "protestes", "protests", - "protestos", "protests", - "protfolio", "portfolio", - "protocool", "protocol", - "prototpye", "prototype", - "prototyps", "prototypes", - "protraits", "portraits", - "protrayal", "portrayal", - "protrayed", "portrayed", - "provicial", "provincial", - "provincie", "province", - "provisios", "provisions", - "pruchased", "purchased", - "pruchases", "purchases", - "prugatory", "purgatory", - "pruposely", "purposely", - "pscyhotic", "psychotic", - "pseudonyn", "pseudonym", - "pshycosis", "psychosis", - "pshycotic", "psychotic", - "psycology", "psychology", - "psycothic", "psychotic", - "ptichfork", "pitchfork", - "pubilsher", "publisher", - "publiaher", "publisher", - "publicaly", "publicly", - "publicani", "publication", - "publicher", "publisher", - "publiclly", "publicly", - "publihser", "publisher", - "publisehr", "publisher", - "publisger", "publisher", - "publishor", "publisher", - "publishre", "publisher", - "publsiher", "publisher", - "publusher", "publisher", - "puchasing", "purchasing", - "punishmet", "punishments", - "puplisher", "publisher", - "puragtory", "purgatory", - "purcahsed", "purchased", - "purcahses", "purchases", - "purhcased", "purchased", - "purposley", "purposely", - "pursuaded", "persuaded", - "pursuades", "persuades", - "pyramidas", "pyramids", - "pyramides", "pyramids", - "pyschosis", "psychosis", - "pyschotic", "psychotic", - "qaulifies", "qualifies", - "quantifiy", "quantify", - "quantitiy", "quantity", - "quantitty", "quantity", - "quartlery", "quarterly", - "queations", "equations", - "queenland", "queensland", - "questiond", "questioned", - "questiong", "questioning", - "questionn", "questioning", - "radicalis", "radicals", - "rapsberry", "raspberry", - "rasbperry", "raspberry", - "rationaly", "rationally", - "reactiony", "reactionary", - "realisitc", "realistic", - "realoding", "reloading", - "realsitic", "realistic", - "realtable", "relatable", - "realtions", "relations", - "realtives", "relatives", - "reamining", "remaining", - "reaplying", "replaying", - "reasearch", "research", - "reaveling", "revealing", - "rebellios", "rebellious", - "rebllions", "rebellions", - "recations", "creations", - "reccomend", "recommend", - "reccuring", "recurring", - "receeding", "receding", - "recepient", "recipient", - "recgonise", "recognise", - "recgonize", "recognize", - "recidents", "residents", - "recievers", "receivers", - "recieving", "receiving", - "recipiant", "recipient", - "reciproce", "reciprocate", - "reclutant", "reluctant", - "recoginse", "recognise", - "recoginze", "recognize", - "recomends", "recommends", - "recommens", "recommends", - "reconenct", "reconnect", - "recongise", "recognise", - "recongize", "recognize", - "reconicle", "reconcile", - "reconized", "recognized", - "recordare", "recorder", - "recoveres", "recovers", - "recoverys", "recovers", - "recpetive", "receptive", - "recpetors", "receptors", - "recquired", "required", - "recreatie", "recreate", - "recruitcs", "recruits", - "recruites", "recruits", - "recrusion", "recursion", - "recrutied", "recruited", - "recrutier", "recruiter", - "rectangel", "rectangle", - "rectanlge", "rectangle", - "recuiting", "recruiting", - "recurison", "recursion", - "recurited", "recruited", - "recuriter", "recruiter", - "recusrion", "recursion", - "redeemeed", "redeemed", - "redundany", "redundancy", - "redundent", "redundant", - "reedeming", "redeeming", - "refelcted", "reflected", - "refereces", "references", - "refereees", "referees", - "refereers", "referees", - "referemce", "reference", - "referencs", "references", - "referense", "references", - "referiang", "referring", - "referinng", "refering", - "refernces", "references", - "refernece", "reference", - "refershed", "refreshed", - "refersher", "refresher", - "reffering", "referring", - "reflectie", "reflective", - "refrehser", "refresher", - "refrences", "references", - "refromist", "reformist", - "regionaal", "regional", - "registerd", "registered", - "registery", "registry", - "regualrly", "regularly", - "regualtor", "regulator", - "regulaion", "regulation", - "regulalry", "regularly", - "regulares", "regulars", - "regularis", "regulars", - "regulatin", "regulations", - "regurally", "regularly", - "reigining", "reigning", - "reinstale", "reinstalled", - "reisntall", "reinstall", - "reknowned", "renowned", - "relaoding", "reloading", - "relatiate", "retaliate", - "relativiy", "relativity", - "relativly", "relatively", - "relativno", "relation", - "relavence", "relevance", - "relcutant", "reluctant", - "relevence", "relevance", - "relfected", "reflected", - "reliabily", "reliability", - "reliabley", "reliably", - "religeous", "religious", - "remasterd", "remastered", - "rememberd", "remembered", - "rememebrs", "remembers", - "remianing", "remaining", - "remignton", "remington", - "remingotn", "remington", - "remmebers", "remembers", - "remotelly", "remotely", - "rendevous", "rendezvous", - "rendezous", "rendezvous", - "renedered", "rende", - "renegated", "renegade", - "rennovate", "renovate", - "repalying", "replaying", - "repblican", "republican", - "repeatedy", "repeatedly", - "repective", "receptive", - "repeition", "repetition", - "repentent", "repentant", - "rephrasse", "rephrase", - "replusive", "repulsive", - "reportedy", "reportedly", - "represend", "represented", - "repressin", "repression", - "reprtoire", "repertoire", - "repsonded", "responded", - "reptition", "repetition", - "reptuable", "reputable", - "repubican", "republican", - "republian", "republican", - "repulican", "republican", - "repulisve", "repulsive", - "repuslive", "repulsive", - "resaurant", "restaurant", - "researchs", "researchers", - "resembels", "resembles", - "reserverd", "reserved", - "resintall", "reinstall", - "resistane", "resistances", - "resistans", "resistances", - "resistend", "resisted", - "resistent", "resistant", - "resmebles", "resembles", - "resolutin", "resolutions", - "resoruces", "resources", - "respectes", "respects", - "respectos", "respects", - "responces", "response", - "respondas", "responds", - "respondis", "responds", - "respondus", "responds", - "respoting", "reposting", - "ressemble", "resemble", - "ressurect", "resurrect", - "restarant", "restaurant", - "resticted", "restricted", - "restircts", "restricts", - "restorani", "restoration", - "restraind", "restrained", - "restraing", "restraining", - "restraunt", "restraint", - "restriant", "restraint", - "restricte", "restrictive", - "resturant", "restaurant", - "retailate", "retaliate", - "retalaite", "retaliate", - "retaliers", "retailers", - "reteriver", "retriever", - "retirever", "retriever", - "retrevier", "retriever", - "reuptable", "reputable", - "reveiwers", "reviewers", - "revelaing", "revealing", - "revelance", "relevance", - "revolutin", "revolutions", - "rewachted", "rewatched", - "rewatchig", "rewatching", - "rferences", "references", - "ridiculos", "ridiculous", - "ridiculue", "ridicule", - "ridiculus", "ridiculous", - "righetous", "righteous", - "rightfuly", "rightfully", - "rightoues", "righteous", - "rigourous", "rigorous", - "rigtheous", "righteous", - "rilvaries", "rivalries", - "rininging", "ringing", - "rivarlies", "rivalries", - "rivlaries", "rivalries", - "roaylties", "royalties", - "roboticus", "robotics", - "roganisms", "organisms", - "royalites", "royalties", - "roylaties", "royalties", - "ruleboook", "rulebook", - "sacarstic", "sarcastic", - "sacntuary", "sanctuary", - "sacrafice", "sacrifice", - "sacrastic", "sarcastic", - "sacrifise", "sacrifices", - "salughter", "slaughter", - "samckdown", "smackdown", - "sanctiond", "sanctioned", - "sancturay", "sanctuary", - "sancutary", "sanctuary", - "sandstrom", "sandstorm", - "sandwhich", "sandwich", - "sanhedrim", "sanhedrin", - "santcuary", "sanctuary", - "santioned", "sanctioned", - "sapphirre", "sapphire", - "sastified", "satisfied", - "sastifies", "satisfies", - "satelites", "satellites", - "saterdays", "saturdays", - "satisifed", "satisfied", - "satisifes", "satisfies", - "satrudays", "saturdays", - "satsified", "satisfied", - "satsifies", "satisfies", - "sattelite", "satellite", - "saxaphone", "saxophone", - "scaepgoat", "scapegoat", - "scaleable", "scalable", - "scandales", "scandals", - "scandalos", "scandals", - "scantuary", "sanctuary", - "scaricity", "scarcity", - "scarifice", "sacrifice", - "scarmbled", "scrambled", - "scartched", "scratched", - "scartches", "scratches", - "scavanged", "scavenged", - "sceintist", "scientist", - "scholalry", "scholarly", - "sciencers", "sciences", - "scientfic", "scientific", - "scientifc", "scientific", - "scientits", "scientist", - "sclupture", "sculpture", - "scnearios", "scenarios", - "scoreboad", "scoreboard", - "scottisch", "scottish", - "scracthed", "scratched", - "scracthes", "scratches", - "scrambeld", "scrambled", - "scrathces", "scratches", - "scrollade", "scrolled", - "scrutiney", "scrutiny", - "scrutinty", "scrutiny", - "sculpteur", "sculpture", - "sculputre", "sculpture", - "scultpure", "sculpture", - "scuplture", "sculpture", - "scuptures", "sculptures", - "seamlessy", "seamlessly", - "searchign", "searching", - "sebasitan", "sebastian", - "sebastain", "sebastian", - "sebsatian", "sebastian", - "secceeded", "seceded", - "secertary", "secretary", - "secratary", "secretary", - "secratery", "secretary", - "secretery", "secretary", - "secretley", "secretly", - "sednetary", "sedentary", - "seduciton", "seduction", - "semanitcs", "semantics", - "semestres", "semesters", - "semnatics", "semantics", - "semseters", "semesters", - "senatores", "senators", - "sendetary", "sedentary", - "sensitivy", "sensitivity", - "sentimant", "sentimental", - "sepcially", "specially", - "seperated", "separated", - "seperates", "separates", - "seperator", "separator", - "septmeber", "september", - "seraching", "searching", - "seriosuly", "seriously", - "serioulsy", "seriously", - "seriuosly", "seriously", - "servantes", "servants", - "settlment", "settlement", - "sexualizd", "sexualized", - "sexuallly", "sexually", - "shadasloo", "shadaloo", - "shaprness", "sharpness", - "sharpenss", "sharpness", - "shawhsank", "shawshank", - "sheilding", "shielding", - "shephered", "shepherd", - "shileding", "shielding", - "shitstrom", "shitstorm", - "shletered", "sheltered", - "shoudlers", "shoulders", - "shouldnot", "shouldnt", - "shperical", "spherical", - "shwashank", "shawshank", - "sidebaord", "sideboard", - "siganture", "signature", - "signapore", "singapore", - "signitory", "signatory", - "silhouete", "silhouette", - "similiair", "similiar", - "simliarly", "similarly", - "simluated", "simulated", - "simluator", "simulator", - "simplifiy", "simplify", - "simualted", "simulated", - "simualtor", "simulator", - "simulatie", "simulate", - "simulatin", "simulation", - "sinagpore", "singapore", - "sincerley", "sincerely", - "singature", "signature", - "singpaore", "singapore", - "singulair", "singular", - "singulary", "singularity", - "skateboad", "skateboard", - "skeletaal", "skeletal", - "skepitcal", "skeptical", - "skepticim", "skepticism", - "sketpical", "skeptical", - "slaughted", "slaughtered", - "slaugther", "slaughter", - "slipperly", "slippery", - "sluaghter", "slaughter", - "smackdwon", "smackdown", - "smealting", "smelting", - "smeesters", "semesters", - "snadstorm", "sandstorm", - "snippetts", "snippets", - "snowfalke", "snowflake", - "snowflaek", "snowflake", - "snowlfake", "snowflake", - "snwoballs", "snowballs", - "snythesis", "synthesis", - "snythetic", "synthetic", - "socailism", "socialism", - "socailist", "socialist", - "socailize", "socialize", - "soceities", "societies", - "socialini", "socializing", - "socialiss", "socialists", - "socialsim", "socialism", - "socieites", "societies", - "socilaism", "socialism", - "socilaist", "socialist", - "sociopati", "sociopathic", - "sociopats", "sociopaths", - "socratees", "socrates", - "socrateks", "socrates", - "soemthing", "something", - "sohpomore", "sophomore", - "soliliquy", "soliloquy", - "somehting", "something", - "someoneis", "someones", - "somethign", "something", - "somethins", "somethings", - "sopohmore", "sophomore", - "sotryline", "storyline", - "soundtrak", "soundtrack", - "sountrack", "soundtrack", - "sourthern", "southern", - "souvenier", "souvenir", - "soveregin", "sovereign", - "sovereing", "sovereign", - "soveriegn", "sovereign", - "spacegoat", "scapegoat", - "spagehtti", "spaghetti", - "spahgetti", "spaghetti", - "sparlking", "sparkling", - "spartants", "spartans", - "specailly", "specially", - "specailty", "specialty", - "specality", "specialty", - "speciales", "specials", - "specialis", "specials", - "speciatly", "specialty", - "specifing", "specifying", - "specimine", "specimen", - "spectrail", "spectral", - "specualte", "speculate", - "speechers", "speeches", - "spehrical", "spherical", - "speically", "specially", - "spetember", "september", - "sphagetti", "spaghetti", - "splatooon", "splatoon", - "sponosred", "sponsored", - "sponsered", "sponsored", - "sponsores", "sponsors", - "spontanes", "spontaneous", - "sponzored", "sponsored", - "sprakling", "sparkling", - "sprinkeld", "sprinkled", - "squadroon", "squadron", - "squirrles", "squirrels", - "squirrtle", "squirrel", - "squrriels", "squirrels", - "srirachia", "sriracha", - "srirachra", "sriracha", - "stabliize", "stabilize", - "stainlees", "stainless", - "startegic", "strategic", - "startlxde", "startled", - "statisitc", "statistic", - "staurdays", "saturdays", - "steadilly", "steadily", - "stealthly", "stealthy", - "stichting", "stitching", - "sticthing", "stitching", - "stimulans", "stimulants", - "stockplie", "stockpile", - "stornegst", "strongest", - "stragetic", "strategic", - "straightn", "straighten", - "strangets", "strangest", - "strategis", "strategies", - "strawbery", "strawberry", - "streamade", "streamed", - "streamare", "streamer", - "streamear", "streamer", - "strechted", "stretched", - "strechtes", "stretches", - "strecthed", "stretched", - "strecthes", "stretches", - "stregnths", "strengths", - "strenghen", "strengthen", - "strengthn", "strengthen", - "strentghs", "strengths", - "stressade", "stressed", - "stressers", "stresses", - "strictist", "strictest", - "stringnet", "stringent", - "stroyline", "storyline", - "structual", "structural", - "structurs", "structures", - "strucutre", "structure", - "struggeld", "struggled", - "struggels", "struggles", - "stryofoam", "styrofoam", - "stuctured", "structured", - "stuggling", "struggling", - "stupitidy", "stupidity", - "sturcture", "structure", - "sturggled", "struggled", - "sturggles", "struggles", - "styrofaom", "styrofoam", - "subarmine", "submarine", - "subculter", "subculture", - "submachne", "submachine", - "subpecies", "subspecies", - "subscirbe", "subscribe", - "subsidary", "subsidiary", - "subsizide", "subsidize", - "subsquent", "subsequent", - "subsrcibe", "subscribe", - "substanse", "substances", - "substanta", "substantial", - "substante", "substantive", - "substarte", "substrate", - "substitue", "substitute", - "substract", "subtract", - "subtances", "substances", - "subtiltes", "subtitles", - "subtitels", "subtitles", - "subtletly", "subtlety", - "subtlties", "subtitles", - "succedded", "succeeded", - "succeedes", "succeeds", - "succesful", "successful", - "succesion", "succession", - "succesive", "successive", - "suceeding", "succeeding", - "sucesfuly", "successfully", - "sucessful", "successful", - "sucession", "succession", - "sucessive", "successive", - "sufferage", "suffrage", - "sufferred", "suffered", - "sufficent", "sufficient", - "suggestes", "suggests", - "suggestie", "suggestive", - "sumbarine", "submarine", - "sumberged", "submerged", - "summenors", "summoners", - "summoenrs", "summoners", - "sunderlad", "sunderland", - "sunglases", "sunglasses", - "superfluu", "superfluous", - "superiour", "superior", - "superisor", "superiors", - "supermare", "supermarket", - "superviso", "supervision", - "suposedly", "supposedly", - "supportes", "supports", - "suppreses", "suppress", - "supressed", "suppressed", - "supresses", "suppresses", - "suprising", "surprising", - "suprizing", "surprising", - "supsicion", "suspicion", - "surounded", "surrounded", - "surprized", "surprised", - "surronded", "surrounded", - "surrouded", "surrounded", - "surrouned", "surround", - "survivers", "survivors", - "survivied", "survived", - "survivour", "survivor", - "susbcribe", "subscribe", - "susbtrate", "substrate", - "susncreen", "sunscreen", - "suspectes", "suspects", - "suspendes", "suspense", - "suspensie", "suspense", - "swastikka", "swastika", - "sweatshit", "sweatshirt", - "sweetheat", "sweetheart", - "switchign", "switching", - "swithcing", "switching", - "swtiching", "switching", - "sydnicate", "syndicate", - "sykwalker", "skywalker", - "sylablles", "syllables", - "syllabels", "syllables", - "symbolsim", "symbolism", - "symettric", "symmetric", - "symmetral", "symmetric", - "symmetria", "symmetrical", - "symoblism", "symbolism", - "sympathie", "sympathize", - "symphoney", "symphony", - "symptomes", "symptoms", - "symptomps", "symptoms", - "synagouge", "synagogue", - "syndacite", "syndicate", - "syndiacte", "syndicate", - "synidcate", "syndicate", - "synonymes", "synonyms", - "synonymis", "synonyms", - "synonymns", "synonyms", - "synonymos", "synonymous", - "synonymus", "synonyms", - "synopsies", "synopsis", - "syntehsis", "synthesis", - "syntehtic", "synthetic", - "syntethic", "synthetic", - "syphyllis", "syphilis", - "syracusae", "syracuse", - "sytrofoam", "styrofoam", - "tablespon", "tablespoon", - "tacticaly", "tactically", - "tanenhill", "tannehill", - "tannheill", "tannehill", - "targetted", "targeted", - "tawainese", "taiwanese", - "tawianese", "taiwanese", - "taxanomic", "taxonomic", - "teamfighs", "teamfights", - "teamfigth", "teamfight", - "teamifght", "teamfight", - "teampseak", "teamspeak", - "teaspooon", "teaspoon", - "techician", "technician", - "techinque", "technique", - "technolgy", "technology", - "teeangers", "teenagers", - "tehtering", "tethering", - "telegrpah", "telegraph", - "televsion", "television", - "temafight", "teamfight", - "tempaltes", "templates", - "temparate", "temperate", - "templaras", "templars", - "templares", "templars", - "temporali", "temporarily", - "tenacitiy", "tenacity", - "tensiones", "tensions", - "tentacels", "tentacles", - "tentacuel", "tentacle", - "tentalces", "tentacles", - "termianls", "terminals", - "terminato", "termination", - "terorrism", "terrorism", - "terorrist", "terrorist", - "terrabyte", "terabyte", - "terribley", "terribly", - "terriblly", "terribly", - "terriroty", "territory", - "terrorits", "terrorist", - "terrorsim", "terrorism", - "tesitcles", "testicles", - "tesitmony", "testimony", - "testicels", "testicles", - "testomony", "testimony", - "texturers", "textures", - "thankfuly", "thankfully", - "thankyoou", "thankyou", - "themselfs", "themselves", - "themselvs", "themselves", - "themslves", "themselves", - "theologia", "theological", - "therafter", "thereafter", - "therefoer", "therefor", - "therefour", "therefor", - "theroists", "theorists", - "thetering", "tethering", - "thirlling", "thrilling", - "thirteeen", "thirteen", - "thoecracy", "theocracy", - "thoerists", "theorists", - "thoroughy", "thoroughly", - "thoughout", "throughout", - "threatend", "threatened", - "throrough", "thorough", - "throughly", "thoroughly", - "througout", "throughout", - "thrusdays", "thursdays", - "thurdsays", "thursdays", - "thursdsay", "thursdays", - "thursters", "thrusters", - "tiawanese", "taiwanese", - "timestmap", "timestamp", - "tirangles", "triangles", - "tocuhdown", "touchdown", - "toghether", "together", - "tolerence", "tolerance", - "tommorrow", "tomorrow", - "torandoes", "tornadoes", - "torchligt", "torchlight", - "torelable", "tolerable", - "toritllas", "tortillas", - "tornaodes", "tornadoes", - "torpeados", "torpedoes", - "torrentas", "torrents", - "torrentes", "torrents", - "tortialls", "tortillas", - "tortillia", "tortilla", - "tortillla", "tortilla", - "tottehnam", "tottenham", - "tottenahm", "tottenham", - "tottneham", "tottenham", - "toturials", "tutorials", - "touchdwon", "touchdown", - "touristas", "tourists", - "touristes", "tourists", - "touristey", "touristy", - "touristly", "touristy", - "touristsy", "touristy", - "tournamet", "tournament", - "toxicitiy", "toxicity", - "trafficed", "trafficked", - "tragicaly", "tragically", - "traileras", "trailers", - "traingles", "triangles", - "trainwrek", "trainwreck", - "traitoris", "traitors", - "traitorus", "traitors", - "tramautic", "traumatic", - "tranlsate", "translate", - "transalte", "translate", - "transcris", "transcripts", - "transcrit", "transcript", - "transferd", "transferred", - "transfere", "transferred", - "transfors", "transforms", - "transfrom", "transform", - "transiten", "transient", - "transitin", "transitions", - "transofrm", "transform", - "transplat", "transplant", - "trasnfers", "transfers", - "trasnform", "transform", - "trasnport", "transport", - "traversie", "traverse", - "travestry", "travesty", - "treasuers", "treasures", - "treasurey", "treasury", - "treatmens", "treatments", - "treausres", "treasures", - "tremendos", "tremendous", - "trhilling", "thrilling", - "trhusters", "thrusters", - "triangels", "triangles", - "trianlges", "triangles", - "tribunaal", "tribunal", - "triguered", "triggered", - "trinagles", "triangles", - "truamatic", "traumatic", - "truthfuly", "truthfully", - "tunrtable", "turntable", - "turnaroud", "turnaround", - "turntabel", "turntable", - "typcially", "typically", - "tyrranies", "tyrannies", - "ubiquitos", "ubiquitous", - "ugprading", "upgrading", - "ukrainain", "ukrainian", - "ukrainias", "ukrainians", - "ukrainina", "ukrainian", - "ukrainisn", "ukrainians", - "ukrianian", "ukrainian", - "ulitmatum", "ultimatum", - "ulteriour", "ulterior", - "umbrellla", "umbrella", - "unaminous", "unanimous", - "unanmious", "unanimous", - "unanswerd", "unanswered", - "unanymous", "unanimous", - "unbannend", "unbanned", - "uncensord", "uncensored", - "uncomited", "uncommitted", - "undercunt", "undercut", - "underdong", "underdog", - "undergard", "undergrad", - "underming", "undermining", - "understad", "understands", - "underwaer", "underwear", - "underware", "underwear", - "undescore", "underscore", - "unforseen", "unforeseen", - "unfortune", "unfortunate", - "unfriendy", "unfriendly", - "unhealhty", "unhealthy", - "unheathly", "unhealthy", - "unhelathy", "unhealthy", - "unicornis", "unicorns", - "unicornus", "unicorns", - "uniformes", "uniforms", - "uninamous", "unanimous", - "unintuive", "unintuitive", - "uniquelly", "uniquely", - "unisntall", "uninstall", - "univerity", "university", - "universse", "universes", - "univesity", "university", - "unnistall", "uninstall", - "unoffical", "unofficial", - "unopenend", "unopened", - "unplayabe", "unplayable", - "unplesant", "unpleasant", - "unpopluar", "unpopular", - "unrankend", "unranked", - "unreliabe", "unreliable", - "unrwitten", "unwritten", - "untrianed", "untrained", - "unusaully", "unusually", - "unuseable", "unusable", - "unusuable", "unusable", - "unvierses", "universes", - "unweildly", "unwieldy", - "unwieldly", "unwieldy", - "unwirtten", "unwritten", - "unworthly", "unworthy", - "upcomming", "upcoming", - "upgarding", "upgrading", - "upgradded", "upgraded", - "uplfiting", "uplifting", - "uplifitng", "uplifting", - "urkainian", "ukrainian", - "utlimatum", "ultimatum", - "vacciante", "vaccinate", - "vaccinato", "vaccination", - "vacciners", "vaccines", - "vacestomy", "vasectomy", - "vaguaries", "vagaries", - "vaibility", "viability", - "vaildated", "validated", - "vairables", "variables", - "valdiated", "validated", - "valentein", "valentine", - "valentien", "valentine", - "valentins", "valentines", - "validitiy", "validity", - "valueable", "valuable", - "vanadlism", "vandalism", - "vandalsim", "vandalism", - "varaibles", "variables", - "varations", "variations", - "variantes", "variants", - "vascetomy", "vasectomy", - "vastecomy", "vasectomy", - "veganisim", "veganism", - "vegetarin", "vegetarians", - "vegitable", "vegetable", - "vehementy", "vehemently", - "veiwpoint", "viewpoint", - "velantine", "valentine", - "vendettta", "vendetta", - "venegance", "vengeance", - "veneuzela", "venezuela", - "venezeula", "venezuela", - "venezulea", "venezuela", - "vengaence", "vengeance", - "vengenace", "vengeance", - "ventilato", "ventilation", - "verbatium", "verbatim", - "verfiying", "verifying", - "verifiyng", "verifying", - "verisions", "revisions", - "versalite", "versatile", - "versatily", "versatility", - "versiones", "versions", - "versitale", "versatile", - "verstaile", "versatile", - "verticaly", "vertically", - "veryifing", "verifying", - "vicotrian", "victorian", - "vicotries", "victories", - "victoires", "victories", - "victorain", "victorian", - "victorina", "victorian", - "victorios", "victorious", - "videogaem", "videogame", - "videogams", "videogames", - "vidoegame", "videogame", - "viewpiont", "viewpoint", - "vigilence", "vigilance", - "vigliante", "vigilante", - "vigourous", "vigorous", - "viligante", "vigilante", - "viloently", "violently", - "vincinity", "vicinity", - "vioalting", "violating", - "violentce", "violence", - "virbation", "vibration", - "virgintiy", "virginity", - "virignity", "virginity", - "virutally", "virtually", - "visibiliy", "visibility", - "vitaminas", "vitamins", - "vitamines", "vitamins", - "vitrually", "virtually", - "vociemail", "voicemail", - "voilating", "violating", - "voilation", "violation", - "voilently", "violently", - "volatiliy", "volatility", - "voleyball", "volleyball", - "volontary", "voluntary", - "volonteer", "volunteer", - "volunatry", "voluntary", - "volunteed", "volunteered", - "vriginity", "virginity", - "wallpapes", "wallpapers", - "warrantly", "warranty", - "warrriors", "warriors", - "wavelengh", "wavelength", - "weakenend", "weakened", - "weakneses", "weakness", - "weaknesss", "weaknesses", - "wealtheir", "wealthier", - "weaponary", "weaponry", - "wedensday", "wednesday", - "wednesdsy", "wednesdays", - "wednessay", "wednesdays", - "wednseday", "wednesday", - "welathier", "wealthier", - "wendesday", "wednesday", - "wesbtrook", "westbrook", - "westernes", "westerners", - "westrbook", "westbrook", - "whereever", "wherever", - "whietlist", "whitelist", - "whilrwind", "whirlwind", - "whilsting", "whistling", - "whipsered", "whispered", - "whislting", "whistling", - "whisperes", "whispers", - "whitelsit", "whitelist", - "whitleist", "whitelist", - "whitsling", "whistling", - "whrilwind", "whirlwind", - "whsipered", "whispered", - "whtielist", "whitelist", - "widespred", "widespread", - "widesread", "widespread", - "windshied", "windshield", - "wintesses", "witnesses", - "wisconisn", "wisconsin", - "wishlisht", "wishlist", - "wishpered", "whispered", - "withdrawl", "withdrawal", - "withelist", "whitelist", - "witnesess", "witnesses", - "wolrdview", "worldview", - "wolrdwide", "worldwide", - "wonderlad", "wonderland", - "wordlview", "worldview", - "wordlwide", "worldwide", - "worhtless", "worthless", - "workfroce", "workforce", - "worldivew", "worldview", - "worldveiw", "worldview", - "worstened", "worsened", - "worthelss", "worthless", - "xenbolade", "xenoblade", - "xenobalde", "xenoblade", - "xenophoby", "xenophobia", - "xeonblade", "xenoblade", - "yementite", "yemenite", - "yorkshrie", "yorkshire", - "yorskhire", "yorkshire", - "yosemitie", "yosemite", - "youngents", "youngest", - "yourselvs", "yourselves", - "zimbabwae", "zimbabwe", - "zionistas", "zionists", - "zionistes", "zionists", - "abandond", "abandoned", - "abdomine", "abdomen", - "abilitiy", "ability", - "abilties", "abilities", - "abondons", "abandons", - "aboslute", "absolute", - "abosrbed", "absorbed", - "abruplty", "abruptly", - "abrutply", "abruptly", - "abscence", "absence", - "absestos", "asbestos", - "absoluts", "absolutes", - "absolvte", "absolve", - "absorbes", "absorbs", - "absoulte", "absolute", - "abstante", "bastante", - "abudance", "abundance", - "abudcted", "abducted", - "abundunt", "abundant", - "aburptly", "abruptly", - "abuseres", "abusers", - "abusrdly", "absurdly", - "academis", "academics", - "accademy", "academy", - "acccused", "accused", - "acceptes", "accepts", - "accidens", "accidents", - "accideny", "accidently", - "accoring", "according", - "accountt", "accountant", - "accpeted", "accepted", - "accuarcy", "accuracy", - "accumule", "accumulate", - "accusato", "accusation", - "accussed", "accused", - "acedamia", "academia", - "acedemic", "academic", - "acheived", "achieved", - "acheives", "achieves", - "achieval", "achievable", - "acnedote", "anecdote", - "acording", "according", - "acornyms", "acronyms", - "acousitc", "acoustic", - "acoutsic", "acoustic", - "acovados", "avocados", - "acquifer", "acquire", - "acquited", "acquitted", - "acquried", "acquired", - "acronmys", "acronyms", - "acronysm", "acronyms", - "acroynms", "acronyms", - "acrynoms", "acronyms", - "acsended", "ascended", - "actaully", "actually", - "activite", "activities", - "activits", "activities", - "activley", "actively", - "actresss", "actresses", - "actualey", "actualy", - "actualiy", "actuality", - "actualky", "actualy", - "actualmy", "actualy", - "actualoy", "actualy", - "actualpy", "actualy", - "actualty", "actualy", - "acutally", "actually", - "acutions", "auctions", - "adaptare", "adapter", - "adbandon", "abandon", - "adbucted", "abducted", - "addictes", "addicts", - "addictin", "addictions", - "addictis", "addictions", - "addional", "additional", - "addopted", "adopted", - "addresed", "addressed", - "adealide", "adelaide", - "adecuate", "adequate", - "adeilade", "adelaide", - "adeladie", "adelaide", - "adeliade", "adelaide", - "adeqaute", "adequate", - "adheisve", "adhesive", - "adhevise", "adhesive", - "adivsors", "advisors", - "admiraal", "admiral", - "adolence", "adolescent", - "adorbale", "adorable", - "adovcacy", "advocacy", - "adpaters", "adapters", - "adquired", "acquired", - "adquires", "acquires", - "adresing", "addressing", - "adressed", "addressed", - "adroable", "adorable", - "adultrey", "adultery", - "adventue", "adventures", - "adventus", "adventures", - "advertis", "adverts", - "advesary", "adversary", - "adviseer", "adviser", - "adviseur", "adviser", - "advocade", "advocated", - "advocats", "advocates", - "advsiors", "advisors", - "aethists", "atheists", - "affaires", "affairs", - "affilate", "affiliate", - "affintiy", "affinity", - "affleunt", "affluent", - "affulent", "affluent", - "afircans", "africans", - "africain", "african", - "afternon", "afternoon", - "againnst", "against", - "agnositc", "agnostic", - "agonstic", "agnostic", - "agravate", "aggravate", - "agreemnt", "agreement", - "agregate", "aggregate", - "agressie", "agressive", - "agressor", "aggressor", - "agrieved", "aggrieved", - "agruable", "arguable", - "agruably", "arguably", - "agrument", "argument", - "ahtletes", "athletes", - "aincents", "ancients", - "airboner", "airborne", - "airbrone", "airborne", - "aircarft", "aircraft", - "airplans", "airplanes", - "airporta", "airports", - "airpsace", "airspace", - "airscape", "airspace", - "akransas", "arkansas", - "alchemey", "alchemy", - "alchohol", "alcohol", - "alcholic", "alcoholic", - "alcoholc", "alcoholics", - "aldutery", "adultery", - "aleniate", "alienate", - "algoritm", "algorithm", - "alimoney", "alimony", - "alirghty", "alrighty", - "allaince", "alliance", - "alledged", "alleged", - "alledges", "alleges", - "allegedy", "allegedly", - "allegely", "allegedly", - "allegric", "allergic", - "allergey", "allergy", - "allianse", "alliances", - "alligned", "aligned", - "allinace", "alliance", - "allopone", "allophone", - "allready", "already", - "almigthy", "almighty", - "alpahbet", "alphabet", - "alrigthy", "alrighty", - "altantic", "atlantic", - "alterato", "alteration", - "alternar", "alternator", - "althetes", "athletes", - "althetic", "athletic", - "altriusm", "altruism", - "altrusim", "altruism", - "alturism", "altruism", - "aluminim", "aluminium", - "alumnium", "aluminum", - "alunimum", "aluminum", - "amatersu", "amateurs", - "amaterus", "amateurs", - "amendmet", "amendments", - "amercian", "american", - "amercias", "americas", - "amernian", "armenian", - "amethsyt", "amethyst", - "ameythst", "amethyst", - "ammended", "amended", - "amnestry", "amnesty", - "amoungst", "amongst", - "amplifiy", "amplify", - "amplifly", "amplify", - "amrchair", "armchair", - "amrenian", "armenian", - "amtheyst", "amethyst", - "analgoue", "analogue", - "analisys", "analysis", - "analitic", "analytic", - "analouge", "analogue", - "analysie", "analyse", - "analysit", "analyst", - "analyste", "analyse", - "analysze", "analyse", - "analzyed", "analyzed", - "anaolgue", "analogue", - "anarchim", "anarchism", - "anaylses", "analyses", - "anaylsis", "analysis", - "anaylsts", "analysts", - "anaylzed", "analyzed", - "ancedote", "anecdote", - "anceints", "ancients", - "ancinets", "ancients", - "andoirds", "androids", - "andorids", "androids", - "andriods", "androids", - "anecdots", "anecdotes", - "anectode", "anecdote", - "anedocte", "anecdote", - "aneroxia", "anorexia", - "aneroxic", "anorexic", - "angostic", "agnostic", - "angrilly", "angrily", - "anicents", "ancients", - "animatie", "animate", - "animatte", "animate", - "anlayses", "analyses", - "annoints", "anoints", - "annouced", "announced", - "annoucne", "announce", - "anntenas", "antennas", - "anoerxia", "anorexia", - "anoerxic", "anorexic", - "anonymos", "anonymous", - "anoreixa", "anorexia", - "anounced", "announced", - "anoxeria", "anorexia", - "anoxeric", "anorexic", - "answeres", "answers", - "antartic", "antarctic", - "antennea", "antenna", - "antennna", "antenna", - "anticipe", "anticipate", - "antiquae", "antique", - "antivirs", "antivirus", - "anwsered", "answered", - "anyhting", "anything", - "anyhwere", "anywhere", - "anyoneis", "anyones", - "anythign", "anything", - "anytying", "anything", - "aparment", "apartment", - "apartmet", "apartments", - "apenines", "apennines", - "aperutre", "aperture", - "aplhabet", "alphabet", - "apologes", "apologise", - "aposltes", "apostles", - "apostels", "apostles", - "appaluse", "applause", - "apparant", "apparent", - "appareal", "apparel", - "appareil", "apparel", - "apperead", "appeared", - "applaued", "applaud", - "appluase", "applause", - "appology", "apology", - "apporach", "approach", - "appraoch", "approach", - "apreture", "aperture", - "apsotles", "apostles", - "aqaurium", "aquarium", - "aqcuired", "acquired", - "aquaduct", "aqueduct", - "aquairum", "aquarium", - "aquaruim", "aquarium", - "aquiring", "acquiring", - "aquitted", "acquitted", - "arbitary", "arbitrary", - "arbitray", "arbitrary", - "arbiture", "arbiter", - "architet", "architect", - "archtype", "archetype", - "aremnian", "armenian", - "argentia", "argentina", - "argubaly", "arguably", - "arguemet", "arguement", - "arguemtn", "arguement", - "ariborne", "airborne", - "aricraft", "aircraft", - "ariplane", "airplane", - "ariports", "airports", - "arispace", "airspace", - "aristote", "aristotle", - "aritfact", "artifact", - "arizonia", "arizona", - "arkasnas", "arkansas", - "arlighty", "alrighty", - "armamant", "armament", - "armenain", "armenian", - "armenina", "armenian", - "armpitts", "armpits", - "armstrog", "armstrong", - "arpanoid", "paranoid", - "arpeture", "aperture", - "arragned", "arranged", - "arrestes", "arrests", - "arrestos", "arrests", - "arsenaal", "arsenal", - "artemios", "artemis", - "artemius", "artemis", - "arthrits", "arthritis", - "articule", "articulate", - "artifacs", "artifacts", - "artifcat", "artifact", - "artilley", "artillery", - "artisitc", "artistic", - "artistas", "artists", - "arugable", "arguable", - "arugably", "arguably", - "arugment", "argument", - "asborbed", "absorbed", - "asburdly", "absurdly", - "ascneded", "ascended", - "asissted", "assisted", - "askreddt", "askreddit", - "asnwered", "answered", - "aspectos", "aspects", - "asperges", "aspergers", - "assasins", "assassins", - "assemple", "assemble", - "assertin", "assertions", - "asshates", "asshats", - "asshatts", "asshats", - "assimile", "assimilate", - "assistat", "assistants", - "assitant", "assistant", - "assmeble", "assemble", - "assmebly", "assembly", - "asssasin", "assassin", - "assualts", "assaults", - "asteorid", "asteroid", - "asteriks", "asterisk", - "asteriod", "asteroid", - "asterois", "asteroids", - "astersik", "asterisk", - "asthetic", "aesthetic", - "astronat", "astronaut", - "asutrian", "austrian", - "atheisim", "atheism", - "atheistc", "atheistic", - "atheltes", "athletes", - "atheltic", "athletic", - "athenean", "athenian", - "athesits", "atheists", - "athetlic", "athletic", - "athients", "athiest", - "atittude", "attitude", - "atlantia", "atlanta", - "atmoizer", "atomizer", - "atomzier", "atomizer", - "atribute", "attribute", - "atrifact", "artifact", - "attackes", "attackers", - "attemped", "attempted", - "attemted", "attempted", - "attemtps", "attempts", - "attidute", "attitude", - "attitide", "attitude", - "attribue", "attribute", - "aucitons", "auctions", - "audactiy", "audacity", - "audcaity", "audacity", - "audeince", "audience", - "audiobok", "audiobook", - "austeriy", "austerity", - "austiran", "austrian", - "austitic", "autistic", - "austrain", "austrian", - "australa", "australian", - "austrija", "austria", - "austrila", "austria", - "autisitc", "autistic", - "autoattk", "autoattack", - "autograh", "autograph", - "automato", "automation", - "automony", "autonomy", - "autority", "authority", - "autsitic", "autistic", - "auxilary", "auxiliary", - "avacodos", "avocados", - "avaiable", "available", - "availabe", "available", - "availble", "available", - "avaition", "aviation", - "avalable", "available", - "avalance", "avalanche", - "avataras", "avatars", - "avatards", "avatars", - "avatares", "avatars", - "averadge", "averaged", - "avergaed", "averaged", - "avergaes", "averages", - "aviaiton", "aviation", - "avilable", "available", - "avnegers", "avengers", - "avodacos", "avocados", - "awekened", "weakened", - "awesomey", "awesomely", - "awfullly", "awfully", - "awkwardy", "awkwardly", - "awnsered", "answered", - "babysite", "babysitter", - "baceause", "because", - "bacehlor", "bachelor", - "bachleor", "bachelor", - "bacholer", "bachelor", - "backeast", "backseat", - "backerds", "backers", - "backfied", "backfield", - "backpacs", "backpacks", - "balcanes", "balances", - "balconey", "balcony", - "balconny", "balcony", - "ballistc", "ballistic", - "balnaced", "balanced", - "banannas", "bananas", - "banditas", "bandits", - "bandwith", "bandwidth", - "bangkock", "bangkok", - "baptisim", "baptism", - "barabric", "barbaric", - "barbarin", "barbarian", - "barbaris", "barbarians", - "bardford", "bradford", - "bargaing", "bargaining", - "baristia", "barista", - "barrakcs", "barracks", - "barrells", "barrels", - "basicaly", "basically", - "basiclay", "basicly", - "basicley", "basicly", - "basicliy", "basicly", - "batistia", "batista", - "battalin", "battalion", - "bayonent", "bayonet", - "beachead", "beachhead", - "beacuoup", "beaucoup", - "beardude", "bearded", - "beastley", "beastly", - "beatiful", "beautiful", - "beccause", "because", - "becuasse", "becuase", - "befirend", "befriend", - "befreind", "befriend", - "begginer", "beginner", - "begginig", "begging", - "begginng", "begging", - "begining", "beginning", - "beginnig", "beginning", - "behaivor", "behavior", - "behavios", "behaviours", - "behavoir", "behavior", - "behavour", "behavior", - "behngazi", "benghazi", - "behtesda", "bethesda", - "beleived", "believed", - "beleiver", "believer", - "beleives", "believes", - "beliefes", "beliefs", - "benefica", "beneficial", - "bengahzi", "benghazi", - "bengalas", "bengals", - "bengalos", "bengals", - "bengazhi", "benghazi", - "benghzai", "benghazi", - "bengzhai", "benghazi", - "benhgazi", "benghazi", - "benidect", "benedict", - "benifits", "benefits", - "berekley", "berkeley", - "berserkr", "berserker", - "beseiged", "besieged", - "betehsda", "bethesda", - "beteshda", "bethesda", - "bethdesa", "bethesda", - "bethedsa", "bethesda", - "bethseda", "bethesda", - "beyoncye", "beyonce", - "bibilcal", "biblical", - "bicylces", "bicycles", - "bigfooot", "bigfoot", - "bigining", "beginning", - "bilbical", "biblical", - "billboad", "billboard", - "bilsters", "blisters", - "bilzzard", "blizzard", - "bilzzcon", "blizzcon", - "biologia", "biological", - "birhtday", "birthday", - "birsbane", "brisbane", - "birthdsy", "birthdays", - "biseuxal", "bisexual", - "bisexaul", "bisexual", - "bitcions", "bitcoins", - "bitocins", "bitcoins", - "blackade", "blacked", - "blackend", "blacked", - "blackjak", "blackjack", - "blacklit", "blacklist", - "blatanty", "blatantly", - "blessins", "blessings", - "blessure", "blessing", - "bloggare", "blogger", - "bloggeur", "blogger", - "bluebery", "blueberry", - "bluetooh", "bluetooth", - "blugaria", "bulgaria", - "boardway", "broadway", - "bollcoks", "bollocks", - "bomberos", "bombers", - "bookmars", "bookmarks", - "boradway", "broadway", - "boredoom", "boredom", - "bouldore", "boulder", - "bounites", "bounties", - "boutnies", "bounties", - "boutqiue", "boutique", - "bouyancy", "buoyancy", - "boyfried", "boyfriend", - "bradcast", "broadcast", - "bradfrod", "bradford", - "brakeout", "breakout", - "braodway", "broadway", - "braverly", "bravery", - "breathis", "breaths", - "breathos", "breaths", - "brekaout", "breakout", - "brendamn", "brendan", - "breweres", "brewers", - "brewerey", "brewery", - "brewerks", "brewers", - "brewerys", "brewers", - "brigaged", "brigade", - "brigated", "brigade", - "brigthen", "brighten", - "briliant", "brilliant", - "brillant", "brilliant", - "bristool", "bristol", - "brithday", "birthday", - "brittish", "british", - "briusers", "bruisers", - "broadbad", "broadband", - "broadcat", "broadcasts", - "broadley", "broadly", - "brocolli", "broccoli", - "brodaway", "broadway", - "broncoes", "broncos", - "broswing", "browsing", - "browines", "brownies", - "browisng", "browsing", - "brtually", "brutally", - "brugundy", "burgundy", - "bruisend", "bruised", - "brussles", "brussels", - "brusting", "bursting", - "bubblews", "bubbles", - "buddhits", "buddhist", - "buddhsim", "buddhism", - "buddishm", "buddhism", - "buddisht", "buddhist", - "buglaria", "bulgaria", - "buhddism", "buddhism", - "buhddist", "buddhist", - "buidlers", "builders", - "buidling", "building", - "buildins", "buildings", - "buisness", "business", - "bulagria", "bulgaria", - "bulgaira", "bulgaria", - "buliders", "builders", - "buliding", "building", - "bulletts", "bullets", - "burisers", "bruisers", - "burriots", "burritos", - "burritio", "burrito", - "burritto", "burrito", - "burrtios", "burritos", - "burssels", "brussels", - "burtally", "brutally", - "burtsing", "bursting", - "busrting", "bursting", - "butcherd", "butchered", - "butterey", "buttery", - "butterfy", "butterfly", - "butterry", "buttery", - "butthoel", "butthole", - "bycicles", "bicycles", - "cabbagge", "cabbage", - "cabients", "cabinets", - "cabinate", "cabinet", - "cabinent", "cabinet", - "cabniets", "cabinets", - "caclulus", "calculus", - "cafetera", "cafeteria", - "caffinee", "caffeine", - "cahsiers", "cashiers", - "cainster", "canister", - "calander", "calendar", - "calcular", "calculator", - "calgarry", "calgary", - "calibler", "calibre", - "caloires", "calories", - "calrkson", "clarkson", - "calroies", "calories", - "calssify", "classify", - "calulate", "calculate", - "calymore", "claymore", - "camapign", "campaign", - "cambodai", "cambodia", - "camboida", "cambodia", - "cambpell", "campbell", - "cambride", "cambridge", - "cambrige", "cambridge", - "camoufle", "camouflage", - "campagin", "campaign", - "campaing", "campaign", - "campains", "campaigns", - "camperas", "campers", - "camperos", "campers", - "canadias", "canadians", - "cananbis", "cannabis", - "cancelas", "cancels", - "canceles", "cancels", - "cancells", "cancels", - "canceres", "cancers", - "cancerns", "cancers", - "cancerus", "cancers", - "candiate", "candidate", - "candiens", "candies", - "canistre", "canister", - "cannabil", "cannibal", - "cannbial", "cannibal", - "cannibas", "cannabis", - "cansiter", "canister", - "capitans", "captains", - "capitola", "capital", - "capitulo", "capitol", - "capmbell", "campbell", - "capsuels", "capsules", - "capsulse", "capsules", - "capsumel", "capsule", - "capteurs", "captures", - "captials", "capitals", - "captians", "captains", - "capusles", "capsules", - "caputres", "captures", - "cardboad", "cardboard", - "cardianl", "cardinal", - "cardnial", "cardinal", - "careflly", "carefully", - "carefull", "careful", - "carefuly", "carefully", - "caricate", "caricature", - "caridgan", "cardigan", - "caridnal", "cardinal", - "carinval", "carnival", - "carloina", "carolina", - "carnagie", "carnegie", - "carnigie", "carnegie", - "carnvial", "carnival", - "carrotts", "carrots", - "carrotus", "carrots", - "cartells", "cartels", - "cartmaan", "cartman", - "cartride", "cartridge", - "cartrige", "cartridge", - "carvinal", "carnival", - "casaulty", "casualty", - "casheirs", "cashiers", - "cashieer", "cashier", - "cashires", "cashiers", - "castleos", "castles", - "castlers", "castles", - "casulaty", "casualty", - "cataclym", "cataclysm", - "catagory", "category", - "cataline", "catiline", - "cataloge", "catalogue", - "catalsyt", "catalyst", - "cataylst", "catalyst", - "cathloic", "catholic", - "catlayst", "catalyst", - "caucasin", "caucasian", - "causalty", "casualty", - "cellural", "cellular", - "celullar", "cellular", - "celverly", "cleverly", - "cemetary", "cemetery", - "centeres", "centers", - "centerns", "centers", - "centrase", "centres", - "centrers", "centres", - "ceratine", "creatine", - "cerberal", "cerebral", - "cerbreus", "cerberus", - "cerbures", "cerberus", - "ceremone", "ceremonies", - "cerimony", "ceremony", - "ceromony", "ceremony", - "certainy", "certainty", - "challege", "challenge", - "chambear", "chamber", - "chambres", "chambers", - "champage", "champagne", - "chanisaw", "chainsaw", - "chanlder", "chandler", - "charcaol", "charcoal", - "chargehr", "charger", - "chargeur", "charger", - "chariman", "chairman", - "charimsa", "charisma", - "charmisa", "charisma", - "charocal", "charcoal", - "charsima", "charisma", - "chasiers", "cashiers", - "chassids", "chassis", - "chassies", "chassis", - "chatolic", "catholic", - "chcukles", "chuckles", - "checkare", "checker", - "checkear", "checker", - "cheesees", "cheeses", - "cheeseus", "cheeses", - "cheetoos", "cheetos", - "chemcial", "chemical", - "chemisty", "chemistry", - "chernobl", "chernobyl", - "chiansaw", "chainsaw", - "chidlish", "childish", - "chihuaha", "chihuahua", - "childres", "childrens", - "chillade", "chilled", - "chillead", "chilled", - "chillend", "chilled", - "chilvary", "chivalry", - "chinesse", "chinese", - "chivarly", "chivalry", - "chivlary", "chivalry", - "chlidish", "childish", - "chlroine", "chlorine", - "chmabers", "chambers", - "chocolae", "chocolates", - "chocolet", "chocolates", - "choesive", "cohesive", - "choicers", "choices", - "cholrine", "chlorine", - "chorline", "chlorine", - "chracter", "character", - "christin", "christian", - "chroline", "chlorine", - "chromose", "chromosome", - "chronice", "chronicles", - "chruches", "churches", - "chuckels", "chuckles", - "cielings", "ceilings", - "cigarete", "cigarettes", - "cigarets", "cigarettes", - "cilmbers", "climbers", - "cilnatro", "cilantro", - "ciltoris", "clitoris", - "circiuts", "circuits", - "circkets", "crickets", - "circlebs", "circles", - "circluar", "circular", - "ciricuit", "circuit", - "cirlcing", "circling", - "ciruclar", "circular", - "clannand", "clannad", - "clarifiy", "clarify", - "clarskon", "clarkson", - "clasical", "classical", - "classrom", "classroom", - "classsic", "classics", - "clausens", "clauses", - "cleanies", "cleanse", - "cleasner", "cleanser", - "clenaser", "cleanser", - "clevelry", "cleverly", - "clhorine", "chlorine", - "cliamtes", "climates", - "cliantro", "cilantro", - "clickare", "clicker", - "clickbat", "clickbait", - "clickear", "clicker", - "clientes", "clients", - "clincial", "clinical", - "clinicas", "clinics", - "clinicos", "clinics", - "clipboad", "clipboard", - "clitiros", "clitoris", - "closeing", "closing", - "closeley", "closely", - "clyamore", "claymore", - "clyinder", "cylinder", - "cmoputer", "computer", - "coindice", "coincide", - "collapes", "collapse", - "collares", "collars", - "collaris", "collars", - "collaros", "collars", - "collaspe", "collapse", - "colleage", "colleagues", - "collecte", "collective", - "collegue", "colleague", - "collisin", "collisions", - "collosal", "colossal", - "collpase", "collapse", - "coloardo", "colorado", - "colordao", "colorado", - "colubmia", "columbia", - "columnas", "columns", - "comadres", "comrades", - "comander", "commander", - "comandos", "commandos", - "comapany", "company", - "comapres", "compares", - "combiens", "combines", - "combinig", "combining", - "comediac", "comedic", - "comedias", "comedians", - "comestic", "cosmetic", - "comision", "commission", - "comiting", "committing", - "comitted", "committed", - "comittee", "committee", - "commandd", "commanded", - "commecen", "commence", - "commedic", "comedic", - "commense", "commenters", - "commenty", "commentary", - "commiest", "commits", - "commited", "committed", - "commitee", "committee", - "commites", "commits", - "committe", "committee", - "committs", "commits", - "commitus", "commits", - "commmand", "command", - "communit", "communist", - "companis", "companions", - "comparse", "compares", - "comparte", "compare", - "compasso", "compassion", - "compelte", "complete", - "compense", "compensate", - "complais", "complains", - "complane", "complacent", - "complate", "complacent", - "compleet", "complete", - "completi", "complexity", - "complets", "completes", - "complety", "completely", - "complexs", "complexes", - "complext", "complexity", - "complexy", "complexity", - "complict", "complicit", - "complier", "compiler", - "compones", "compose", - "componet", "components", - "componts", "compost", - "composet", "compost", - "composit", "compost", - "composte", "compose", - "comprese", "compressed", - "compreso", "compressor", - "compsers", "compress", - "comptown", "compton", - "compunet", "compute", - "computre", "compute", - "comradre", "comrade", - "comsetic", "cosmetic", - "conatins", "contains", - "conceald", "concealed", - "conceide", "conceived", - "conceled", "concede", - "concened", "concede", - "concepta", "conceptual", - "concered", "concede", - "concernt", "concert", - "concerte", "concrete", - "concesso", "concession", - "conceted", "concede", - "conceved", "concede", - "concibes", "concise", - "concider", "consider", - "concides", "concise", - "concious", "conscious", - "conclued", "conclude", - "concluse", "conclusive", - "concluso", "conclusion", - "concreet", "concrete", - "concrets", "concerts", - "condemnd", "condemned", - "conditon", "condition", - "condomes", "condoms", - "condomns", "condoms", - "conduict", "conduit", - "conected", "connected", - "conencts", "connects", - "confeses", "confess", - "confesos", "confess", - "confesso", "confession", - "configue", "configure", - "confilct", "conflict", - "confirmd", "confirmed", - "conflcit", "conflict", - "conflics", "conflicts", - "confrims", "confirms", - "conicide", "coincide", - "conlcude", "conclude", - "conqueor", "conquer", - "conquerd", "conquered", - "conqured", "conquered", - "conscent", "consent", - "consious", "conscious", - "constans", "constants", - "constast", "constants", - "constatn", "constant", - "constrat", "constraint", - "construt", "constructs", - "containd", "contained", - "containg", "containing", - "contaire", "containers", - "contanti", "contacting", - "contense", "contenders", - "contenst", "contents", - "contexta", "contextual", - "contextl", "contextual", - "contians", "contains", - "contined", "continued", - "contines", "continents", - "continum", "continuum", - "continus", "continues", - "continut", "continuity", - "continuu", "continuous", - "contracr", "contractor", - "contracs", "contracts", - "controll", "control", - "convenit", "convenient", - "convento", "convention", - "converst", "converts", - "convertr", "converter", - "conviced", "convinced", - "convicto", "conviction", - "convingi", "convincing", - "convinse", "convinces", - "cooldows", "cooldowns", - "coordine", "coordinate", - "coralina", "carolina", - "corollla", "corolla", - "corolloa", "corolla", - "corosion", "corrosion", - "corpsers", "corpses", - "corrdior", "corridor", - "correcty", "correctly", - "correnti", "correcting", - "corretly", "correctly", - "corrupto", "corruption", - "cosemtic", "cosmetic", - "cosutmes", "costumes", - "couldnot", "couldnt", - "coulored", "coloured", - "counries", "countries", - "counseil", "counsel", - "counsole", "counsel", - "counterd", "countered", - "countert", "counteract", - "countres", "counters", - "courtrom", "courtroom", - "courtsey", "courtesy", - "cousines", "cousins", - "cousings", "cousins", - "coutners", "counters", - "covanent", "covenant", - "coverted", "converted", - "coyotees", "coyotes", - "cpatains", "captains", - "cranbery", "cranberry", - "crayones", "crayons", - "creaeted", "created", - "createin", "creatine", - "createur", "creature", - "creatien", "creatine", - "creepgin", "creeping", - "cricling", "circling", - "cringely", "cringey", - "cringery", "cringey", - "criticas", "critics", - "critices", "critics", - "criticie", "criticise", - "criticim", "criticisms", - "criticis", "critics", - "criticms", "critics", - "criticos", "critics", - "criticts", "critics", - "criticus", "critics", - "critiera", "criteria", - "critized", "criticized", - "croatioa", "croatia", - "crossfie", "crossfire", - "crosshar", "crosshair", - "crosspot", "crosspost", - "crowbahr", "crowbar", - "cruasder", "crusader", - "cruciaal", "crucial", - "crucibel", "crucible", - "cruicble", "crucible", - "crusdaer", "crusader", - "crusiers", "cruisers", - "crusiing", "cruising", - "cruthces", "crutches", - "cthulhlu", "cthulhu", - "cthulluh", "cthulhu", - "cubpoard", "cupboard", - "cuddleys", "cuddles", - "culprint", "culprit", - "cultrual", "cultural", - "culutral", "cultural", - "cupbaord", "cupboard", - "cupborad", "cupboard", - "curcible", "crucible", - "curisers", "cruisers", - "curising", "cruising", - "currecny", "currency", - "currence", "currencies", - "currenly", "currently", - "currenty", "currently", - "cursader", "crusader", - "custcene", "cutscene", - "cutsceen", "cutscene", - "cutscens", "cutscenes", - "cutsence", "cutscene", - "cylcists", "cyclists", - "cylidner", "cylinder", - "cylindre", "cylinder", - "cynisicm", "cynicism", - "cyrstals", "crystals", - "dacquiri", "daiquiri", - "daimonds", "diamonds", - "dangeros", "dangers", - "dangerus", "dangers", - "darkenss", "darkness", - "darnkess", "darkness", - "dashboad", "dashboard", - "daugther", "daughter", - "deadlfit", "deadlift", - "deadlifs", "deadlifts", - "deafeted", "defeated", - "deafults", "defaults", - "dealying", "delaying", - "deamenor", "demeanor", - "deathcat", "deathmatch", - "debuffes", "debuffs", - "debufffs", "debuffs", - "decalred", "declared", - "decalres", "declares", - "decembre", "december", - "decidely", "decidedly", - "decieved", "deceived", - "decifits", "deficits", - "decipted", "depicted", - "declears", "declares", - "declinig", "declining", - "decmeber", "december", - "decribed", "described", - "decribes", "describes", - "dedicato", "dedication", - "deductie", "deductible", - "defautls", "defaults", - "defectos", "defects", - "defectus", "defects", - "defendas", "defends", - "defendes", "defenders", - "defendis", "defends", - "defendre", "defender", - "defendrs", "defends", - "defensea", "defenseman", - "defensen", "defenseman", - "defensie", "defensive", - "defetead", "defeated", - "deffined", "defined", - "deficiet", "deficient", - "definate", "definite", - "definaty", "definately", - "definety", "definetly", - "definito", "definition", - "definitv", "definitive", - "deflatin", "deflation", - "deflecto", "deflection", - "defualts", "defaults", - "degarded", "degraded", - "degenere", "degenerate", - "degraged", "degrade", - "degrated", "degrade", - "deisgned", "designed", - "deisgner", "designer", - "dekstops", "desktops", - "delcared", "declared", - "delcares", "declares", - "delepted", "depleted", - "delivere", "deliveries", - "delpeted", "depleted", - "delpoyed", "deployed", - "delyaing", "delaying", - "demandas", "demands", - "demandes", "demands", - "demenaor", "demeanor", - "democray", "democracy", - "demolito", "demolition", - "denseley", "densely", - "densitiy", "density", - "deomcrat", "democrat", - "deovtion", "devotion", - "departer", "departure", - "departue", "departure", - "depcited", "depicted", - "depelted", "depleted", - "dependat", "dependant", - "depictes", "depicts", - "depictin", "depictions", - "depolyed", "deployed", - "depositd", "deposited", - "depostis", "deposits", - "depresse", "depressive", - "depresso", "depression", - "derivate", "derivative", - "descened", "descend", - "descibed", "described", - "descirbe", "describe", - "descrise", "describes", - "desgined", "designed", - "desginer", "designer", - "desicive", "decisive", - "designad", "designated", - "designes", "designs", - "designet", "designated", - "desinged", "designed", - "desinger", "designer", - "desitned", "destined", - "desktiop", "desktop", - "desorder", "disorder", - "despides", "despised", - "despiste", "despise", - "destiney", "destiny", - "destinty", "destiny", - "destkops", "desktops", - "destorys", "destroys", - "destrose", "destroyers", - "destroyd", "destroyed", - "destroyr", "destroyers", - "detalied", "detailed", - "detectas", "detects", - "detectes", "detects", - "detectie", "detectives", - "determen", "determines", - "devasted", "devastated", - "develope", "develop", - "devialet", "deviate", - "deviatie", "deviate", - "devilers", "delivers", - "devloved", "devolved", - "devovled", "devolved", - "diaganol", "diagonal", - "diagnoal", "diagonal", - "diagnoes", "diagnose", - "diagnosi", "diagnostic", - "diagonse", "diagnose", - "diahrrea", "diarrhea", - "dialetcs", "dialects", - "dialgoue", "dialogue", - "dialouge", "dialogue", - "diarreah", "diarrhea", - "diarreha", "diarrhea", - "dichtomy", "dichotomy", - "dickisch", "dickish", - "dicovers", "discovers", - "dicovery", "discovery", - "dicussed", "discussed", - "diferent", "different", - "differnt", "different", - "difficut", "difficulty", - "diffrent", "different", - "diganose", "diagnose", - "dignitiy", "dignity", - "dimaonds", "diamonds", - "dinasour", "dinosaur", - "dinosaus", "dinosaurs", - "dinosuar", "dinosaur", - "dinsoaur", "dinosaur", - "dionsaur", "dinosaur", - "diphtong", "diphthong", - "diplomma", "diploma", - "dipthong", "diphthong", - "direclty", "directly", - "directin", "directions", - "directix", "directx", - "directos", "directors", - "directoy", "directory", - "directrx", "directx", - "dirfting", "drifting", - "disabeld", "disabled", - "disabels", "disables", - "disagred", "disagreed", - "disagres", "disagrees", - "disbaled", "disabled", - "disbales", "disables", - "disbelif", "disbelief", - "dischard", "discharged", - "dischare", "discharged", - "discound", "discounted", - "discoure", "discourse", - "discoved", "discovered", - "discreto", "discretion", - "discribe", "describe", - "disentry", "dysentery", - "disgiuse", "disguise", - "dishoner", "dishonored", - "dishonet", "dishonesty", - "dislikse", "dislikes", - "dismante", "dismantle", - "dismisse", "dismissive", - "disolved", "dissolved", - "dispacth", "dispatch", - "dispalys", "displays", - "dispence", "dispense", - "dispersa", "dispensary", - "displayd", "displayed", - "disposle", "dispose", - "disposte", "dispose", - "dispoves", "dispose", - "disptach", "dispatch", - "disricts", "districts", - "dissovle", "dissolve", - "distates", "distaste", - "distatse", "distaste", - "disticnt", "distinct", - "distorto", "distortion", - "distrcit", "district", - "districs", "districts", - "disturbd", "disturbed", - "disupted", "disputed", - "disuptes", "disputes", - "diversed", "diverse", - "diversiy", "diversify", - "dividens", "dividends", - "divintiy", "divinity", - "divisons", "divisions", - "doapmine", "dopamine", - "docrines", "doctrines", - "docrtine", "doctrine", - "doctines", "doctrines", - "doctirne", "doctrine", - "doctrins", "doctrines", - "dogamtic", "dogmatic", - "dolhpins", "dolphins", - "domapine", "dopamine", - "domecrat", "democrat", - "domiante", "dominate", - "dominato", "domination", - "dominats", "dominates", - "dominent", "dominant", - "dominoin", "dominion", - "donwload", "download", - "donwvote", "downvote", - "doomdsay", "doomsday", - "doosmday", "doomsday", - "doplhins", "dolphins", - "dopmaine", "dopamine", - "dormtund", "dortmund", - "dortumnd", "dortmund", - "dotrmund", "dortmund", - "douchely", "douchey", - "doucheus", "douches", - "dowloads", "downloads", - "downlaod", "download", - "downloas", "downloads", - "downstar", "downstairs", - "downvore", "downvoters", - "downvotr", "downvoters", - "downvots", "downvotes", - "draculea", "dracula", - "draculla", "dracula", - "dragones", "dragons", - "dragonus", "dragons", - "drfiting", "drifting", - "driectly", "directly", - "drifitng", "drifting", - "driveris", "drivers", - "drotmund", "dortmund", - "duaghter", "daughter", - "dumbbels", "dumbbells", - "dumptser", "dumpster", - "dumspter", "dumpster", - "dunegons", "dungeons", - "dungeoun", "dungeon", - "dungoens", "dungeons", - "dupicate", "duplicate", - "duplicas", "duplicates", - "dwarvens", "dwarves", - "dyanmics", "dynamics", - "dyanmite", "dynamite", - "dymanics", "dynamics", - "dymanite", "dynamite", - "dynastry", "dynasty", - "dysentry", "dysentery", - "dysphora", "dysphoria", - "earilest", "earliest", - "eatswood", "eastwood", - "eceonomy", "economy", - "ecidious", "deciduous", - "ecologia", "ecological", - "ecomonic", "economic", - "ecstacys", "ecstasy", - "ecstascy", "ecstasy", - "ecstasty", "ecstasy", - "ectastic", "ecstatic", - "editoras", "editors", - "editores", "editors", - "efficent", "efficient", - "egpytian", "egyptian", - "egyptain", "egyptian", - "egytpian", "egyptian", - "ehtereal", "ethereal", - "ehternet", "ethernet", - "eigtheen", "eighteen", - "electhor", "electro", - "electorn", "electron", - "elementy", "elementary", - "elephans", "elephants", - "elevatin", "elevation", - "elicided", "elicited", - "eligable", "eligible", - "elimiate", "eliminate", - "eliminas", "eliminates", - "elitisim", "elitism", - "elitistm", "elitism", - "ellected", "elected", - "embarass", "embarrass", - "embargos", "embargoes", - "embarras", "embarrass", - "embassay", "embassy", - "embassey", "embassy", - "embasssy", "embassy", - "emergend", "emerged", - "emergerd", "emerged", - "eminated", "emanated", - "emminent", "eminent", - "emmisary", "emissary", - "emmision", "emission", - "emmiting", "emitting", - "emmitted", "emitted", - "empathie", "empathize", - "empirial", "empirical", - "emulatin", "emulation", - "enahnces", "enhances", - "enchanct", "enchant", - "encolsed", "enclosed", - "endanged", "endangered", - "endevors", "endeavors", - "endevour", "endeavour", - "endlessy", "endlessly", - "endorces", "endorse", - "engeneer", "engineer", - "engeries", "energies", - "engineed", "engineered", - "engrames", "engrams", - "engramms", "engrams", - "enigneer", "engineer", - "enitrely", "entirely", - "enlcosed", "enclosed", - "enlsaved", "enslaved", - "ensalved", "enslaved", - "enterity", "entirety", - "entierly", "entirely", - "entierty", "entirety", - "entilted", "entitled", - "entirley", "entirely", - "entiteld", "entitled", - "entitity", "entity", - "entropay", "entropy", - "entrophy", "entropy", - "ephipany", "epiphany", - "epihpany", "epiphany", - "epilespy", "epilepsy", - "epilgoue", "epilogue", - "episdoes", "episodes", - "epitomie", "epitome", - "epliepsy", "epilepsy", - "epliogue", "epilogue", - "epsiodes", "episodes", - "epsresso", "espresso", - "eqaulity", "equality", - "eqaution", "equation", - "equailty", "equality", - "eraticly", "erratically", - "erroneos", "erroneous", - "errupted", "erupted", - "escalato", "escalation", - "esctatic", "ecstatic", - "esential", "essential", - "esitmate", "estimate", - "esperate", "seperate", - "esportes", "esports", - "estiamte", "estimate", - "estoeric", "esoteric", - "estonija", "estonia", - "estoniya", "estonia", - "etherael", "ethereal", - "etherent", "ethernet", - "ethicaly", "ethically", - "etiquete", "etiquette", - "etrailer", "retailer", - "eugencis", "eugenics", - "eugneics", "eugenics", - "euhporia", "euphoria", - "euhporic", "euphoric", - "euorpean", "european", - "euphoira", "euphoria", - "euphroia", "euphoria", - "euphroic", "euphoric", - "europian", "european", - "eurpoean", "european", - "evangers", "avengers", - "everyons", "everyones", - "evidencd", "evidenced", - "evidende", "evidenced", - "evloving", "evolving", - "evolveds", "evolves", - "evolveos", "evolves", - "evovling", "evolving", - "excecute", "execute", - "excedded", "exceeded", - "excelent", "excellent", - "exceptin", "exceptions", - "excerise", "exercise", - "excisted", "existed", - "exclusie", "exclusives", - "exculded", "excluded", - "exculdes", "excludes", - "exection", "execution", - "exectued", "executed", - "executie", "executive", - "executin", "execution", - "exellent", "excellent", - "exerbate", "exacerbate", - "exercide", "exercised", - "exercies", "exercise", - "exersice", "exercise", - "exersize", "exercise", - "exhalted", "exalted", - "exhaustn", "exhaustion", - "exhausto", "exhaustion", - "exicting", "exciting", - "exisitng", "existing", - "existane", "existance", - "existant", "existent", - "existend", "existed", - "exlcuded", "excluded", - "exlcudes", "excludes", - "exlporer", "explorer", - "exoticas", "exotics", - "exoticos", "exotics", - "expalins", "explains", - "expandas", "expands", - "expandes", "expands", - "expansie", "expansive", - "expectes", "expects", - "expectus", "expects", - "expedito", "expedition", - "expences", "expense", - "expensie", "expense", - "expensve", "expense", - "expertas", "experts", - "expertis", "experts", - "expertos", "experts", - "expireds", "expires", - "explaind", "explained", - "explaing", "explaining", - "expliots", "exploits", - "explodie", "explode", - "exploint", "exploit", - "explosie", "explosive", - "explosin", "explosions", - "exploted", "explode", - "expoldes", "explodes", - "expolits", "exploits", - "exportas", "exports", - "exportes", "exports", - "exportfs", "exports", - "exposees", "exposes", - "exposito", "exposition", - "expresse", "expressive", - "expresss", "expresses", - "expressy", "expressly", - "exressed", "expressed", - "exsitent", "existent", - "exsiting", "existing", - "extactly", "exactly", - "extemely", "extremely", - "extendes", "extends", - "extendos", "extends", - "extenion", "extension", - "extensie", "extensive", - "extensis", "extensions", - "extortin", "extortion", - "extracto", "extraction", - "extreems", "extremes", - "extremly", "extremely", - "eygptian", "egyptian", - "faboulus", "fabulous", - "fabricas", "fabrics", - "fabrices", "fabrics", - "fabricus", "fabrics", - "faceplam", "facepalm", - "facilisi", "facilities", - "faciltiy", "facility", - "facsists", "fascists", - "factores", "factors", - "factorys", "factors", - "factualy", "factually", - "faggotts", "faggots", - "faggotus", "faggots", - "falcones", "falcons", - "falgship", "flagship", - "faliures", "failures", - "falseley", "falsely", - "falshing", "flashing", - "falvored", "flavored", - "falvours", "flavours", - "familair", "familiar", - "famoulsy", "famously", - "fanatism", "fanaticism", - "fanatsic", "fanatics", - "fanserve", "fanservice", - "fantasty", "fantasy", - "farcking", "fracking", - "fascisim", "fascism", - "fashiond", "fashioned", - "fasicsts", "fascists", - "fatigure", "fatigue", - "favorits", "favorites", - "favourie", "favourites", - "feasable", "feasible", - "feasbile", "feasible", - "febraury", "february", - "februray", "february", - "feburary", "february", - "fedility", "fidelity", - "fedorahs", "fedoras", - "fedorans", "fedoras", - "feilding", "fielding", - "feisable", "feasible", - "feitshes", "fetishes", - "feltcher", "fletcher", - "felxible", "flexible", - "feminint", "femininity", - "feminsim", "feminism", - "feromone", "pheromone", - "fesiable", "feasible", - "festivas", "festivals", - "festivle", "festive", - "fictious", "fictitious", - "fideling", "fielding", - "fideltiy", "fidelity", - "fiedling", "fielding", - "fiedlity", "fidelity", - "fighitng", "fighting", - "figthing", "fighting", - "fileding", "fielding", - "fimilies", "families", - "finacial", "financial", - "fineshes", "finesse", - "fingersi", "fingertips", - "finnisch", "finnish", - "finsihes", "finishes", - "firebals", "fireballs", - "firendly", "friendly", - "firmwear", "firmware", - "firwmare", "firmware", - "flaghsip", "flagship", - "flamable", "flammable", - "flasghip", "flagship", - "flatterd", "flattered", - "flatteur", "flatter", - "flattire", "flatter", - "flavores", "flavors", - "flechter", "fletcher", - "flecther", "fletcher", - "flemmish", "flemish", - "flethcer", "fletcher", - "flexbile", "flexible", - "flexibel", "flexible", - "flippade", "flipped", - "flitered", "filtered", - "florecen", "florence", - "floridia", "florida", - "floruide", "fluoride", - "floruish", "flourish", - "flourine", "fluorine", - "floursih", "flourish", - "fluorish", "flourish", - "fluroide", "fluoride", - "folowing", "following", - "fontrier", "fontier", - "forasken", "forsaken", - "forbiden", "forbidden", - "foreamrs", "forearms", - "foreksin", "foreskin", - "forenics", "forensic", - "forenisc", "forensic", - "foresnic", "forensic", - "foreward", "foreword", - "foricbly", "forcibly", - "forigven", "forgiven", - "formatin", "formation", - "formelly", "formerly", - "formuals", "formulas", - "fornesic", "forensic", - "forresst", "forrest", - "forsekan", "forsaken", - "forsekin", "foreskin", - "forsenic", "forensic", - "forskaen", "forsaken", - "forsting", "frosting", - "fortitue", "fortitude", - "fortunae", "fortune", - "fortunte", "fortune", - "forumlas", "formulas", - "forunner", "forerunner", - "fossiles", "fossils", - "fossilis", "fossils", - "foundary", "foundry", - "fountian", "fountain", - "fourties", "forties", - "fowrards", "forwards", - "frackign", "fracking", - "framgent", "fragment", - "franches", "franchise", - "franchie", "franchises", - "franciso", "francisco", - "frankiln", "franklin", - "franlkin", "franklin", - "freckels", "freckles", - "freindly", "friendly", - "frequeny", "frequency", - "friendle", "friendlies", - "friendsi", "friendlies", - "frimware", "firmware", - "frogiven", "forgiven", - "frointer", "frontier", - "fromerly", "formerly", - "froniter", "frontier", - "fronteir", "frontier", - "frosaken", "forsaken", - "frutcose", "fructose", - "fucntion", "function", - "fufilled", "fulfilled", - "fulfiled", "fulfilled", - "fullfill", "fulfill", - "funciton", "function", - "fundirse", "fundies", - "funniliy", "funnily", - "funnilly", "funnily", - "furctose", "fructose", - "furition", "fruition", - "furuther", "further", - "futurers", "futures", - "futureus", "futures", - "gamemdoe", "gamemode", - "gamepaly", "gameplay", - "gamergat", "gamertag", - "gammeode", "gamemode", - "ganerate", "generate", - "garantee", "guarantee", - "gardient", "gradient", - "garfeild", "garfield", - "garfiled", "garfield", - "garflied", "garfield", - "garnison", "garrison", - "garrions", "garrison", - "garriosn", "garrison", - "garrsion", "garrison", - "gatherig", "gatherings", - "gauarana", "guaraná", - "gauntelt", "gauntlet", - "gauntles", "gauntlets", - "gaurdian", "guardian", - "gaurding", "guarding", - "gautnlet", "gauntlet", - "gemoetry", "geometry", - "generaly", "generally", - "generase", "generates", - "generats", "generates", - "genialia", "genitalia", - "genisues", "geniuses", - "genitala", "genitalia", - "genrates", "generates", - "gentials", "genitals", - "gentlemn", "gentlemen", - "genuises", "geniuses", - "geograpy", "geography", - "geomerty", "geometry", - "geomtery", "geometry", - "germanos", "germans", - "germanus", "germans", - "gernades", "grenades", - "giagbyte", "gigabyte", - "gigabtye", "gigabyte", - "gigaybte", "gigabyte", - "gigbayte", "gigabyte", - "gignatic", "gigantic", - "giltched", "glitched", - "giltches", "glitches", - "girafffe", "giraffe", - "girefing", "griefing", - "girlling", "grilling", - "gladiatr", "gladiator", - "glichted", "glitched", - "glichtes", "glitches", - "glicthed", "glitched", - "glicthes", "glitches", - "glitchey", "glitchy", - "glitchly", "glitchy", - "glitchty", "glitchy", - "glithced", "glitched", - "glithces", "glitches", - "gloablly", "globally", - "glodberg", "goldberg", - "glodfish", "goldfish", - "gloriuos", "glorious", - "gltiched", "glitched", - "gltiches", "glitches", - "gmaertag", "gamertag", - "goblings", "goblins", - "goddammn", "goddamn", - "goddammt", "goddammit", - "godesses", "goddesses", - "godlberg", "goldberg", - "godlfish", "goldfish", - "godounov", "godunov", - "godpseed", "godspeed", - "godspede", "godspeed", - "goldifsh", "goldfish", - "gonewidl", "gonewild", - "goodlcuk", "goodluck", - "goregous", "gorgeous", - "gorgoeus", "gorgeous", - "gorillia", "gorilla", - "gorillla", "gorilla", - "gospells", "gospels", - "gottleib", "gottlieb", - "gourmelt", "gourmet", - "gourment", "gourmet", - "gouvener", "governor", - "govement", "government", - "goverend", "governed", - "govermet", "goverment", - "governer", "governor", - "gradualy", "gradually", - "grafield", "garfield", - "grafitti", "graffiti", - "grahpics", "graphics", - "grahpite", "graphite", - "graident", "gradient", - "granolla", "granola", - "graphcis", "graphics", - "grapichs", "graphics", - "grappnel", "grapple", - "greandes", "grenades", - "greatful", "grateful", - "greeneer", "greener", - "greenhoe", "greenhouse", - "greenlad", "greenland", - "greenore", "greener", - "greusome", "gruesome", - "grieifng", "griefing", - "grifeing", "griefing", - "grizzlay", "grizzly", - "grizzley", "grizzly", - "grpahics", "graphics", - "grpahite", "graphite", - "gruseome", "gruesome", - "guantano", "guantanamo", - "guardain", "guardian", - "guardias", "guardians", - "guaridan", "guardian", - "guerrila", "guerrilla", - "guidence", "guidance", - "guiseppe", "giuseppe", - "guitards", "guitars", - "guitares", "guitars", - "guitarit", "guitarist", - "gullbile", "gullible", - "gunanine", "guanine", - "guniness", "guinness", - "gunniess", "guinness", - "guradian", "guardian", - "gurading", "guarding", - "gurantee", "guarantee", - "guresome", "gruesome", - "guttaral", "guttural", - "gutteral", "guttural", - "hacthing", "hatching", - "hafltime", "halftime", - "haircuit", "haircut", - "halfitme", "halftime", - "hallowen", "halloween", - "hamburgr", "hamburgers", - "hamitlon", "hamilton", - "hamliton", "hamilton", - "handcufs", "handcuffs", - "handeldy", "handedly", - "handlade", "handled", - "handlare", "handler", - "handledy", "handedly", - "hannbial", "hannibal", - "haording", "hoarding", - "hapening", "happening", - "happends", "happens", - "happenes", "happens", - "happilly", "happily", - "harldine", "hardline", - "harrased", "harassed", - "harrases", "harasses", - "hatchign", "hatching", - "hatesink", "heatsink", - "hathcing", "hatching", - "headachs", "headaches", - "headests", "headsets", - "headhsot", "headshot", - "headseat", "headset", - "healthit", "healthiest", - "heastink", "heatsink", - "heathern", "heathen", - "heatskin", "heatsink", - "heaviliy", "heavily", - "heavilly", "heavily", - "heavnely", "heavenly", - "hedeghog", "hedgehog", - "hegdehog", "hedgehog", - "heighest", "heights", - "heighted", "heightened", - "heirachy", "hierarchy", - "heistant", "hesitant", - "heistate", "hesitate", - "hellifre", "hellfire", - "helluvva", "helluva", - "helpfull", "helpful", - "heratige", "heritage", - "herclues", "hercules", - "heridity", "heredity", - "heroicas", "heroics", - "heroices", "heroics", - "heroicos", "heroics", - "heroicus", "heroics", - "hertiage", "heritage", - "herucles", "hercules", - "hestiant", "hesitant", - "hestiate", "hesitate", - "heveanly", "heavenly", - "hierachy", "hierarchy", - "hierarcy", "hierarchy", - "highlane", "highlander", - "hindiusm", "hinduism", - "hindusim", "hinduism", - "hinudism", "hinduism", - "hiptsers", "hipsters", - "hispanis", "hispanics", - "hispters", "hipsters", - "histroic", "historic", - "hodlings", "holdings", - "hoenstly", "honestly", - "hoildays", "holidays", - "holdiays", "holidays", - "hollywod", "hollywood", - "homeword", "homeworld", - "homineim", "hominem", - "homineum", "hominem", - "honeslty", "honestly", - "honeymon", "honeymoon", - "honsetly", "honestly", - "hopefuly", "hopefully", - "hopkings", "hopkins", - "hopsital", "hospital", - "horading", "hoarding", - "horzions", "horizons", - "hosptial", "hospital", - "hosteles", "hostels", - "hostiliy", "hostility", - "hotshoot", "hotshot", - "hotsport", "hotspot", - "hsyteria", "hysteria", - "htaching", "hatching", - "htiboxes", "hitboxes", - "huanting", "haunting", - "humaniod", "humanoid", - "humanite", "humanities", - "humantiy", "humanity", - "humerous", "humorous", - "huminoid", "humanoid", - "humitidy", "humidity", - "humoural", "humoral", - "humouros", "humorous", - "humurous", "humorous", - "hunderds", "hundreds", - "hundread", "hundred", - "hungarin", "hungarian", - "huntmsan", "huntsman", - "hutnsman", "huntsman", - "hybrides", "hybrids", - "hybridus", "hybrids", - "hydorgen", "hydrogen", - "hydratin", "hydration", - "hydregon", "hydrogen", - "hygience", "hygiene", - "hygienne", "hygiene", - "hyperbel", "hyperbole", - "hypocrit", "hypocrite", - "hyponsis", "hypnosis", - "hyrdogen", "hydrogen", - "icefrong", "icefrog", - "icelings", "ceilings", - "idaeidae", "idea", - "idealogy", "ideology", - "idealsim", "idealism", - "idenfity", "identify", - "idenitfy", "identify", - "identite", "identities", - "ideologe", "ideologies", - "illiegal", "illegal", - "illinios", "illinois", - "illionis", "illinois", - "illnesss", "illnesses", - "illumini", "illuminati", - "illustre", "illustrate", - "illution", "illusion", - "ilogical", "illogical", - "ilterate", "literate", - "imapired", "impaired", - "imgrants", "migrants", - "imigrant", "emigrant", - "immboile", "immobile", - "immenint", "imminent", - "immersie", "immerse", - "immersve", "immerse", - "immitate", "imitate", - "immoblie", "immobile", - "immortas", "immortals", - "impactes", "impacts", - "impactos", "impacts", - "imparied", "impaired", - "imperavi", "imperative", - "imperfet", "imperfect", - "implemet", "implements", - "implosed", "implode", - "impluses", "impulses", - "imporper", "improper", - "importas", "imports", - "importen", "importance", - "importes", "imports", - "imporved", "improved", - "imporves", "improves", - "impropre", "improper", - "improted", "imported", - "improvie", "improvised", - "impusles", "impulses", - "imrpoved", "improved", - "imrpoves", "improves", - "inbetwen", "inbetween", - "inclince", "incline", - "inclinde", "incline", - "includng", "including", - "incorect", "incorrect", - "incuding", "including", - "inculded", "included", - "indianas", "indians", - "indiands", "indians", - "indiania", "indiana", - "indianna", "indiana", - "indianos", "indians", - "indicato", "indication", - "indicats", "indicators", - "indonesa", "indonesia", - "indulgue", "indulge", - "infantis", "infants", - "infantus", "infants", - "infarred", "infrared", - "infectin", "infections", - "infermon", "inferno", - "infiltre", "infiltrate", - "infintie", "infinite", - "infintiy", "infinity", - "inflatie", "inflate", - "influens", "influences", - "informas", "informs", - "informis", "informs", - "infromal", "informal", - "infromed", "informed", - "ingenius", "ingenious", - "ingition", "ignition", - "ingorant", "ignorant", - "inheriet", "inherit", - "inherint", "inherit", - "inhumaan", "inhuman", - "inhumain", "inhuman", - "inifnite", "infinite", - "inifnity", "infinity", - "inisghts", "insights", - "initails", "initials", - "initaite", "initiate", - "initaled", "initialed", - "initally", "initially", - "initialy", "initially", - "initmacy", "intimacy", - "initmate", "intimate", - "injustie", "injustices", - "inlcuded", "included", - "inlcudes", "includes", - "innocens", "innocents", - "innocuos", "innocuous", - "innvoate", "innovate", - "inocence", "innocence", - "inpolite", "impolite", - "inpsired", "inspired", - "inquirey", "inquiry", - "inquirie", "inquire", - "inquiriy", "inquiry", - "inrested", "inserted", - "insanley", "insanely", - "insectes", "insects", - "insectos", "insects", - "insertas", "inserts", - "insertes", "inserts", - "insertos", "inserts", - "insidios", "insidious", - "insigths", "insights", - "insipred", "inspired", - "insipres", "inspires", - "insistas", "insists", - "insistes", "insists", - "insistis", "insists", - "insmonia", "insomnia", - "insomina", "insomnia", - "insonmia", "insomnia", - "inspried", "inspired", - "inspries", "inspires", - "instanse", "instances", - "instanty", "instantly", - "instered", "inserted", - "insticnt", "instinct", - "instincs", "instincts", - "institue", "institute", - "insultas", "insults", - "insultes", "insults", - "insultos", "insults", - "intamicy", "intimacy", - "intamite", "intimate", - "intendes", "intends", - "intendos", "intends", - "intentas", "intents", - "intented", "intended", - "interace", "interacted", - "interacs", "interacts", - "interect", "interacted", - "interent", "internet", - "interese", "interested", - "interfce", "interface", - "intergal", "integral", - "internts", "interns", - "internus", "interns", - "interpet", "interpret", - "interrim", "interim", - "interste", "interstate", - "interupt", "interrupt", - "intevene", "intervene", - "intially", "initially", - "intiials", "initials", - "intimaty", "intimately", - "intimide", "intimidate", - "intregal", "integral", - "intriuge", "intrigue", - "introdue", "introduces", - "introdus", "introduces", - "introvet", "introvert", - "intruige", "intrigue", - "intutive", "intuitive", - "inudstry", "industry", - "inventer", "inventor", - "invertes", "inverse", - "invincil", "invincible", - "invitato", "invitation", - "invloved", "involved", - "invloves", "involves", - "invovled", "involved", - "invovles", "involves", - "iranains", "iranians", - "iraninas", "iranians", - "iritable", "irritable", - "iritated", "irritated", - "ironicly", "ironically", - "irritato", "irritation", - "isalmist", "islamist", - "isarelis", "israelis", - "islamits", "islamist", - "islamsit", "islamist", - "islandes", "islanders", - "ismalist", "islamist", - "isntalls", "installs", - "isolatie", "isolate", - "israelli", "israeli", - "israleis", "israelis", - "isralies", "israelis", - "isrealis", "israelis", - "issueing", "issuing", - "italains", "italians", - "jaguards", "jaguars", - "jaguares", "jaguars", - "jailbrek", "jailbreak", - "jaimacan", "jamaican", - "jamacain", "jamaican", - "jamaicia", "jamaica", - "jamiacan", "jamaican", - "januaray", "january", - "janurary", "january", - "jeapardy", "jeopardy", - "jefferry", "jeffery", - "jefferty", "jeffery", - "jennigns", "jennings", - "jeoprady", "jeopardy", - "jepoardy", "jeopardy", - "jerusalm", "jerusalem", - "jewelrey", "jewelry", - "jewllery", "jewellery", - "joanthan", "jonathan", - "joepardy", "jeopardy", - "johanine", "johannine", - "jonatahn", "jonathan", - "journaal", "journal", - "journied", "journeyed", - "journies", "journeys", - "joysitck", "joystick", - "juadaism", "judaism", - "judaisim", "judaism", - "judgemet", "judgements", - "juducial", "judicial", - "jugnling", "jungling", - "junglign", "jungling", - "junlging", "jungling", - "justifiy", "justify", - "juveline", "juvenile", - "juvenlie", "juvenile", - "katemine", "ketamine", - "kennedey", "kennedy", - "ketmaine", "ketamine", - "keybaord", "keyboard", - "keyboars", "keyboards", - "keyborad", "keyboard", - "keychian", "keychain", - "kicthens", "kitchens", - "kindgoms", "kingdoms", - "kittiens", "kitties", - "knockbak", "knockback", - "knowlege", "knowledge", - "knuckels", "knuckles", - "koreanos", "koreans", - "kunckles", "knuckles", - "kurdisch", "kurdish", - "labatory", "lavatory", - "labenese", "lebanese", - "laboraty", "laboratory", - "laguages", "languages", - "landscae", "landscapes", - "langauge", "language", - "lanucher", "launcher", - "lanuches", "launches", - "laodouts", "loadouts", - "larwence", "lawrence", - "lasagnea", "lasagna", - "lasagnia", "lasagna", - "laucnhed", "launched", - "laucnher", "launcher", - "laucnhes", "launches", - "laundrey", "laundry", - "lawernce", "lawrence", - "lazyness", "laziness", - "leaglize", "legalize", - "lecteurs", "lectures", - "lecutres", "lectures", - "lefitsts", "leftists", - "leftsits", "leftists", - "legenday", "legendary", - "legionis", "legions", - "legitimt", "legitimate", - "lengthes", "lengths", - "lengthly", "lengthy", - "lentiles", "lentils", - "lentills", "lentils", - "lesbains", "lesbians", - "lesibans", "lesbians", - "levander", "lavender", - "levelign", "leveling", - "levetate", "levitate", - "leviathn", "leviathan", - "levleing", "leveling", - "liberato", "liberation", - "libertae", "liberate", - "libertea", "liberate", - "librarse", "libraries", - "licencie", "licence", - "licencse", "licence", - "liebrals", "liberals", - "liekable", "likeable", - "lifepsan", "lifespan", - "lifestel", "lifesteal", - "lifestye", "lifestyle", - "lighitng", "lighting", - "lightnig", "lightning", - "lightres", "lighters", - "lightrom", "lightroom", - "ligthers", "lighters", - "ligthing", "lighting", - "likebale", "likeable", - "limitant", "militant", - "limitato", "limitation", - "lincolin", "lincoln", - "lincolon", "lincoln", - "lineupes", "lineups", - "lingeire", "lingerie", - "lingiere", "lingerie", - "linnaena", "linnaean", - "lipstics", "lipsticks", - "liquidas", "liquids", - "liquides", "liquids", - "liquidos", "liquids", - "liscense", "license", - "lisenced", "silenced", - "listenes", "listens", - "listents", "listens", - "listners", "listeners", - "litature", "literature", - "litecion", "litecoin", - "liteicon", "litecoin", - "literaly", "literally", - "lithuana", "lithuania", - "litigato", "litigation", - "liverpol", "liverpool", - "logtiech", "logitech", - "longitme", "longtime", - "longtiem", "longtime", - "looseley", "loosely", - "loreplay", "roleplay", - "luanched", "launched", - "luancher", "launcher", - "luanches", "launches", - "lubricat", "lubricant", - "lucifear", "lucifer", - "luckilly", "luckily", - "macarino", "macaroni", - "machiens", "machines", - "mackeral", "mackerel", - "macthups", "matchups", - "magasine", "magazine", - "magazins", "magazines", - "magentic", "magnetic", - "magicain", "magician", - "magisine", "magazine", - "magizine", "magazine", - "magnetis", "magnets", - "magnited", "magnitude", - "magnitue", "magnitude", - "mainfest", "manifest", - "maintian", "maintain", - "majoroty", "majority", - "makrsman", "marksman", - "malariya", "malaria", - "malasiya", "malaysia", - "malasyia", "malaysia", - "malayisa", "malaysia", - "malyasia", "malaysia", - "mamalian", "mammalian", - "manadrin", "mandarin", - "manaully", "manually", - "mandaste", "mandates", - "mandrain", "mandarin", - "mandrian", "mandarin", - "maneveur", "maneuver", - "manevuer", "maneuver", - "manfiest", "manifest", - "mangetic", "magnetic", - "manglade", "mangled", - "manifeso", "manifesto", - "manipule", "manipulate", - "manouver", "maneuver", - "manuales", "manuals", - "manuever", "maneuver", - "maraconi", "macaroni", - "maradeur", "marauder", - "maraduer", "marauder", - "maragret", "margaret", - "marbleds", "marbles", - "margerat", "margaret", - "margines", "margins", - "margings", "margins", - "marginis", "margins", - "marignal", "marginal", - "marilyin", "marilyn", - "marinens", "marines", - "markedet", "marketed", - "markeras", "markers", - "markerts", "markers", - "marniers", "mariners", - "marraige", "marriage", - "marryied", "married", - "marskman", "marksman", - "maruader", "marauder", - "marvelos", "marvelous", - "marxisim", "marxism", - "mascarra", "mascara", - "massacer", "massacre", - "massarce", "massacre", - "massasge", "massages", - "masscare", "massacre", - "masteris", "masteries", - "masturbe", "masturbate", - "materias", "materials", - "mathcups", "matchups", - "mathewes", "mathews", - "matieral", "material", - "matterss", "mattress", - "mauarder", "marauder", - "maximini", "maximizing", - "mayalsia", "malaysia", - "maybelle", "maybelline", - "maylasia", "malaysia", - "mccarhty", "mccarthy", - "mcgergor", "mcgregor", - "mchanics", "mechanics", - "mclarean", "mclaren", - "mcreggor", "mcgregor", - "meagtron", "megatron", - "meancing", "menacing", - "meaninng", "meaning", - "meatbals", "meatballs", - "mecahnic", "mechanic", - "mechanim", "mechanism", - "mechanis", "mechanics", - "medacine", "medicine", - "medatite", "meditate", - "medeival", "medieval", - "medevial", "medieval", - "mediavel", "medieval", - "medicaly", "medically", - "mediciad", "medicaid", - "medicins", "medicines", - "medicore", "mediocre", - "medievel", "medieval", - "mediocer", "mediocre", - "mediocry", "mediocrity", - "mediorce", "mediocre", - "meditato", "meditation", - "mediveal", "medieval", - "medoicre", "mediocre", - "meerkrat", "meerkat", - "megatorn", "megatron", - "meidcare", "medicare", - "meixcans", "mexicans", - "melboure", "melbourne", - "meltodwn", "meltdown", - "memoriez", "memorize", - "mencaing", "menacing", - "menstrul", "menstrual", - "mentiong", "mentioning", - "meoldies", "melodies", - "merchans", "merchants", - "mercurcy", "mercury", - "mercurey", "mercury", - "merficul", "merciful", - "merhcant", "merchant", - "mericful", "merciful", - "messgaed", "messaged", - "messiach", "messiah", - "metagaem", "metagame", - "metahpor", "metaphor", - "metamage", "metagame", - "methapor", "metaphor", - "metldown", "meltdown", - "metricas", "metrics", - "metrices", "metrics", - "metropos", "metropolis", - "mexcians", "mexicans", - "mexicain", "mexican", - "mhytical", "mythical", - "michagan", "michigan", - "michgian", "michigan", - "microtax", "microatx", - "microwae", "microwaves", - "midfeild", "midfield", - "midfiled", "midfield", - "midifeld", "midfield", - "migrains", "migraines", - "migriane", "migraine", - "milennia", "millennia", - "miligram", "milligram", - "miliitas", "militias", - "miliraty", "military", - "militais", "militias", - "millenia", "millennia", - "millenna", "millennia", - "miltiant", "militant", - "minature", "miniature", - "mindcrak", "mindcrack", - "minerial", "mineral", - "mingiame", "minigame", - "minimage", "minigame", - "minimals", "minimalist", - "minimalt", "minimalist", - "minimini", "minimizing", - "minimium", "minimum", - "miniscue", "miniscule", - "minsiter", "minister", - "minsitry", "ministry", - "miraculu", "miraculous", - "miralces", "miracles", - "mircales", "miracles", - "mircoatx", "microatx", - "mirgaine", "migraine", - "mirorred", "mirrored", - "misnadry", "misandry", - "misogynt", "misogynist", - "missigno", "mission", - "missiony", "missionary", - "misslies", "missiles", - "missorui", "missouri", - "misspeld", "misspelled", - "mistakey", "mistakenly", - "mistread", "mistreated", - "mobiltiy", "mobility", - "moderats", "moderates", - "modulair", "modular", - "moleculs", "molecules", - "momentos", "moments", - "momentus", "moments", - "monagomy", "monogamy", - "mongoles", "mongols", - "mongolos", "mongols", - "monitord", "monitored", - "monogmay", "monogamy", - "monolite", "monolithic", - "monologe", "monologue", - "monolopy", "monopoly", - "monoploy", "monopoly", - "monopols", "monopolies", - "monrachy", "monarchy", - "monstros", "monstrous", - "montaban", "montana", - "montains", "mountains", - "montanha", "montana", - "montania", "montana", - "montanna", "montana", - "montanta", "montana", - "montanya", "montana", - "montaran", "montana", - "monteize", "monetize", - "monteral", "montreal", - "montiors", "monitors", - "montnana", "montana", - "montypic", "monotypic", - "monumnet", "monument", - "moonligt", "moonlight", - "moprhine", "morphine", - "morbildy", "morbidly", - "mordibly", "morbidly", - "morevoer", "moreover", - "morhpine", "morphine", - "moribdly", "morbidly", - "mormones", "mormons", - "mormonts", "mormons", - "moroever", "moreover", - "morotola", "motorola", - "morphein", "morphine", - "morriosn", "morrison", - "morrocco", "morocco", - "morrsion", "morrison", - "mortards", "mortars", - "mortarts", "mortars", - "moruning", "mourning", - "mosnters", "monsters", - "mosqueto", "mosquitoes", - "mosquite", "mosquitoes", - "mosqutio", "mosquito", - "motoroal", "motorola", - "mounment", "monument", - "mounring", "mourning", - "mountian", "mountain", - "moustace", "moustache", - "movesped", "movespeed", - "mozillia", "mozilla", - "mozillla", "mozilla", - "msytical", "mystical", - "mucnhies", "munchies", - "mudering", "murdering", - "muffings", "muffins", - "muffinus", "muffins", - "mulitple", "multiple", - "mulitply", "multiply", - "multiplr", "multiplier", - "multipls", "multiples", - "mundance", "mundane", - "mundande", "mundane", - "muniches", "munchies", - "murderes", "murders", - "murderus", "murders", - "muscluar", "muscular", - "muscualr", "muscular", - "musicaly", "musically", - "musuclar", "muscular", - "mutliple", "multiple", - "mutliply", "multiply", - "myhtical", "mythical", - "mysitcal", "mystical", - "mysogyny", "misogyny", - "mysteris", "mysteries", - "mythraic", "mithraic", - "nagivate", "navigate", - "naopleon", "napoleon", - "napcakes", "pancakes", - "naploeon", "napoleon", - "napoelon", "napoleon", - "napolean", "napoleon", - "napoloen", "napoleon", - "narcissm", "narcissism", - "narcisst", "narcissist", - "narcotis", "narcotics", - "narwharl", "narwhal", - "naseuous", "nauseous", - "nashvile", "nashville", - "nasueous", "nauseous", - "natievly", "natively", - "nationas", "nationals", - "nationsl", "nationals", - "nativley", "natively", - "natuilus", "nautilus", - "naturaly", "naturally", - "naturels", "natures", - "naturely", "naturally", - "naturens", "natures", - "naturual", "natural", - "nauesous", "nauseous", - "naughtly", "naughty", - "nauitlus", "nautilus", - "nauseuos", "nauseous", - "nautiuls", "nautilus", - "nautlius", "nautilus", - "nautulis", "nautilus", - "naviagte", "navigate", - "navigato", "navigation", - "nazereth", "nazareth", - "necesary", "necessary", - "neckbead", "neckbeard", - "needlees", "needles", - "nefarios", "nefarious", - "negativy", "negativity", - "neglectn", "neglecting", - "neglible", "negligible", - "neigbour", "neighbour", - "neolitic", "neolithic", - "netboook", "netbook", - "neuronas", "neurons", - "neutraal", "neutral", - "neutralt", "neutrality", - "neutraly", "neutrality", - "newcaste", "newcastle", - "nickanme", "nickname", - "nickmane", "nickname", - "nieghbor", "neighbor", - "nightime", "nighttime", - "nightley", "nightly", - "nightlie", "nightlife", - "nihilsim", "nihilism", - "nilihism", "nihilism", - "nirtogen", "nitrogen", - "nirvanna", "nirvana", - "nitorgen", "nitrogen", - "niusance", "nuisance", - "noctrune", "nocturne", - "noctunre", "nocturne", - "nocturen", "nocturne", - "nominato", "nomination", - "nonsence", "nonsense", - "nonsesne", "nonsense", - "noramlly", "normally", - "norhtern", "northern", - "normalis", "normals", - "normalls", "normals", - "normalos", "normals", - "northeat", "northeast", - "northren", "northern", - "northwet", "northwest", - "norwegin", "norwegian", - "nostalga", "nostalgia", - "nostirls", "nostrils", - "notabley", "notably", - "notablly", "notably", - "noteable", "notable", - "noteably", "notably", - "noticabe", "noticable", - "notorios", "notorious", - "novmeber", "november", - "nromandy", "normandy", - "nuatilus", "nautilus", - "nuculear", "nuclear", - "nuetered", "neutered", - "nuisanse", "nuisance", - "nullifiy", "nullify", - "nurtient", "nutrient", - "nusaince", "nuisance", - "nusiance", "nuisance", - "nutirent", "nutrient", - "nutriens", "nutrients", - "nuturing", "nurturing", - "obdisian", "obsidian", - "obediant", "obedient", - "obession", "obsession", - "obilvion", "oblivion", - "obisdian", "obsidian", - "obsessie", "obsessive", - "obsessin", "obsession", - "obsidain", "obsidian", - "obstacal", "obstacle", - "obvilion", "oblivion", - "ocasions", "occasions", - "ocassion", "occasion", - "occaison", "occasion", - "occupato", "occupation", - "occuring", "occurring", - "octobear", "october", - "octopuns", "octopus", - "ofcoruse", "ofcourse", - "ofcoures", "ofcourse", - "ofcousre", "ofcourse", - "ofcrouse", "ofcourse", - "officals", "officials", - "officaly", "officially", - "offsited", "offside", - "ofocurse", "ofcourse", - "oligarcy", "oligarchy", - "olmypics", "olympics", - "olymipcs", "olympics", - "olypmics", "olympics", - "ommision", "omission", - "ommiting", "omitting", - "ommitted", "omitted", - "ongewild", "gonewild", - "onslaugt", "onslaught", - "operatie", "operative", - "opinoins", "opinions", - "oppinion", "opinion", - "opponant", "opponent", - "opposits", "opposites", - "oppossed", "opposed", - "oppresso", "oppression", - "optimaal", "optimal", - "optomism", "optimism", - "oragnise", "organise", - "orangerd", "orangered", - "orangers", "oranges", - "orangism", "organism", - "orchesta", "orchestra", - "ordianry", "ordinary", - "oreintal", "oriental", - "orgainse", "organise", - "orgainze", "organize", - "organims", "organism", - "organsie", "organise", - "organsim", "organism", - "organzie", "organize", - "orgasmes", "orgasms", - "orgasmos", "orgasms", - "orgasmus", "orgasms", - "orginize", "organise", - "orhtodox", "orthodox", - "oridnary", "ordinary", - "originas", "origins", - "origines", "origins", - "originsl", "originals", - "orphanes", "orphans", - "osbidian", "obsidian", - "othrodox", "orthodox", - "ourselvs", "ourselves", - "oustider", "outsider", - "outfeild", "outfield", - "outfidel", "outfield", - "outfiled", "outfield", - "outisder", "outsider", - "outplayd", "outplayed", - "outputed", "outputted", - "outsoure", "outsourced", - "overboad", "overboard", - "overclok", "overclock", - "overdrev", "overdrive", - "overhual", "overhaul", - "overlaod", "overload", - "overpiad", "overpaid", - "overules", "overuse", - "overwath", "overwatch", - "overwhem", "overwhelm", - "oximoron", "oxymoron", - "oylmpics", "olympics", - "pacakged", "packaged", - "packadge", "packaged", - "paficist", "pacifist", - "painfuly", "painfully", - "paitence", "patience", - "paitents", "patients", - "palidans", "paladins", - "palstics", "plastics", - "paltform", "platform", - "paltinum", "platinum", - "palyable", "playable", - "palyoffs", "playoffs", - "pancaeks", "pancakes", - "panckaes", "pancakes", - "pandoria", "pandora", - "pandorra", "pandora", - "panedmic", "pandemic", - "panethon", "pantheon", - "pankaces", "pancakes", - "panmedic", "pandemic", - "pantehon", "pantheon", - "panthoen", "pantheon", - "paradies", "paradise", - "paradyse", "parades", - "paragrah", "paragraph", - "paraiste", "parasite", - "paralell", "parallel", - "paralely", "parallelly", - "paralles", "parallels", - "parameds", "paramedics", - "paramter", "parameter", - "paranioa", "paranoia", - "paraniod", "paranoid", - "paraside", "paradise", - "parasits", "parasites", - "parastie", "parasite", - "parctise", "practise", - "paremsan", "parmesan", - "paristan", "partisan", - "parmasen", "parmesan", - "parmenas", "parmesan", - "parmsean", "parmesan", - "parnters", "partners", - "parralel", "parallel", - "parterns", "partners", - "partialy", "partially", - "partians", "partisan", - "partical", "particular", - "particel", "particle", - "partiets", "parties", - "partiots", "patriots", - "partnerd", "partnered", - "partsian", "partisan", - "passabel", "passable", - "passione", "passionate", - "passisve", "passives", - "passpost", "passports", - "passvies", "passives", - "passwors", "passwords", - "pasttime", "pastime", - "pastural", "pastoral", - "pateince", "patience", - "pateints", "patients", - "patethic", "pathetic", - "patheitc", "pathetic", - "patienty", "patiently", - "patirots", "patriots", - "patriarh", "patriarchy", - "patroits", "patriots", - "patrolls", "patrols", - "patronas", "patrons", - "patrones", "patrons", - "patronis", "patrons", - "patronos", "patrons", - "pattened", "patented", - "patterno", "patterson", - "pattersn", "patterson", - "pblisher", "publisher", - "peageant", "pageant", - "pebbleos", "pebbles", - "pebblers", "pebbles", - "pebblets", "pebbles", - "peciluar", "peculiar", - "pecuilar", "peculiar", - "peculair", "peculiar", - "peculure", "peculiar", - "peformed", "performed", - "peircing", "piercing", - "penaltis", "penalties", - "penatgon", "pentagon", - "penciles", "pencils", - "pendatic", "pedantic", - "pengiuns", "penguins", - "penisula", "peninsula", - "pensioen", "pension", - "pepperin", "pepperoni", - "perceded", "preceded", - "percente", "percentile", - "percieve", "perceive", - "percious", "precious", - "perclude", "preclude", - "perfecty", "perfectly", - "perfroms", "performs", - "perheaps", "perhaps", - "pericing", "piercing", - "peridoic", "periodic", - "perimetr", "perimeter", - "periodes", "periods", - "periodos", "periods", - "permanet", "permanent", - "permiere", "premiere", - "permises", "premises", - "permitas", "permits", - "permites", "permits", - "permitis", "permits", - "permitts", "permits", - "permiums", "premiums", - "peroidic", "periodic", - "perosnas", "personas", - "perpetue", "perpetuate", - "persaude", "persuade", - "perserve", "preserve", - "persisit", "persist", - "personel", "personnel", - "persones", "persons", - "personis", "persons", - "personsa", "personas", - "perstige", "prestige", - "persuaso", "persuasion", - "persuded", "persuaded", - "persuing", "pursuing", - "persuits", "pursuits", - "persumed", "presumed", - "pertaing", "pertaining", - "pertians", "pertains", - "pertinet", "pertinent", - "pervents", "prevents", - "perverst", "pervert", - "perviews", "previews", - "pervious", "previous", - "perxoide", "peroxide", - "pessiary", "pessary", - "petetion", "petition", - "petrolem", "petroleum", - "phantoom", "phantom", - "pharamcy", "pharmacy", - "pharmacs", "pharmacist", - "pharmsci", "pharmacist", - "phenomon", "phenomenon", - "phramacy", "pharmacy", - "phsyical", "physical", - "phsyique", "physique", - "phyiscal", "physical", - "phyisque", "physique", - "physcial", "physical", - "physicis", "physicians", - "physicks", "physics", - "physicts", "physicist", - "physqiue", "physique", - "picthers", "pitchers", - "pillards", "pillars", - "pillaris", "pillars", - "pinancle", "pinnacle", - "pinapple", "pineapple", - "pinnalce", "pinnacle", - "pinnaple", "pineapple", - "pinncale", "pinnacle", - "pinpiont", "pinpoint", - "pinteret", "pinterest", - "piolting", "piloting", - "pioneeer", "pioneer", - "pithcers", "pitchers", - "placebro", "placebo", - "placemet", "placements", - "planetas", "planets", - "planetos", "planets", - "plantiff", "plaintiff", - "plantium", "platinum", - "plasitcs", "plastics", - "platfrom", "platform", - "platimun", "platinum", - "platnium", "platinum", - "platnuim", "platinum", - "plausibe", "plausible", - "playbody", "playboy", - "playstye", "playstyle", - "pleasent", "pleasant", - "plehtora", "plethora", - "pleothra", "plethora", - "plethroa", "plethora", - "ploygamy", "polygamy", - "pnatheon", "pantheon", - "poeoples", "peoples", - "poingant", "poignant", - "pointeur", "pointer", - "pointure", "pointer", - "poisones", "poisons", - "poisonis", "poisons", - "poisonos", "poisons", - "poisonus", "poisons", - "polgyamy", "polygamy", - "polietly", "politely", - "politing", "piloting", - "politley", "politely", - "poltical", "political", - "poluting", "polluting", - "polution", "pollution", - "polygoon", "polygon", - "polymore", "polymer", - "pomotion", "promotion", - "popoulus", "populous", - "populair", "popular", - "populare", "popular", - "populary", "popularity", - "porcelan", "porcelain", - "porposes", "proposes", - "portabel", "portable", - "portalis", "portals", - "portalus", "portals", - "portayed", "portrayed", - "portgual", "portugal", - "portrais", "portraits", - "portrary", "portray", - "portrayl", "portrayal", - "portriat", "portrait", - "posessed", "possessed", - "posesses", "possesses", - "posioned", "poisoned", - "positivs", "positives", - "positivy", "positivity", - "possable", "possible", - "possably", "possibly", - "possbily", "possibly", - "posseses", "possesses", - "possesse", "possessive", - "possesss", "possesses", - "potrayed", "portrayed", - "poverful", "powerful", - "powerded", "powdered", - "powerpot", "powerpoint", - "pracitse", "practise", - "practial", "practical", - "practies", "practise", - "pratcise", "practise", - "praticle", "particle", - "prceeded", "preceded", - "preadtor", "predator", - "preample", "preamble", - "preceeds", "precedes", - "precisie", "precise", - "precisly", "precisely", - "precisou", "precious", - "preculde", "preclude", - "predicat", "predict", - "predicte", "predictive", - "preferas", "prefers", - "prefered", "preferred", - "preferes", "prefers", - "preferis", "prefers", - "preferrs", "prefers", - "preimere", "premiere", - "preimums", "premiums", - "preiodic", "periodic", - "preivews", "previews", - "prejudis", "prejudices", - "prelayed", "replayed", - "premeire", "premiere", - "premesis", "premises", - "premiare", "premier", - "premines", "premise", - "premuims", "premiums", - "preorded", "preordered", - "preordes", "preorders", - "preoxide", "peroxide", - "prepaird", "prepaid", - "preqeuls", "prequels", - "prequles", "prequels", - "prescrie", "prescribed", - "presense", "presence", - "presenst", "presets", - "presidet", "presidents", - "presists", "persists", - "presitge", "prestige", - "presonas", "personas", - "presuade", "persuade", - "pretador", "predator", - "pretains", "pertains", - "preveiws", "previews", - "preverse", "perverse", - "previwes", "previews", - "pricipal", "principal", - "priciple", "principle", - "priemere", "premiere", - "priestes", "priests", - "primaris", "primaries", - "primarly", "primarily", - "princila", "principals", - "principl", "principals", - "prisitne", "pristine", - "probelms", "problems", - "probleem", "problem", - "procalim", "proclaim", - "proccess", "process", - "proceded", "proceeded", - "proceder", "procedure", - "procedes", "proceeds", - "procedue", "procedure", - "proceeed", "proceed", - "procesed", "proceeds", - "processs", "processes", - "proclami", "proclaim", - "procliam", "proclaim", - "procotol", "protocol", - "prodcuts", "products", - "producto", "production", - "profesor", "professor", - "proficit", "proficient", - "profilic", "prolific", - "progroms", "pogroms", - "prohibis", "prohibits", - "prohpecy", "prophecy", - "prohpets", "prophets", - "projecte", "projectile", - "projecto", "projection", - "prolouge", "prologue", - "promplty", "promptly", - "promptes", "prompts", - "promptus", "prompts", - "promtply", "promptly", - "pronoune", "pronounced", - "propechy", "prophecy", - "propehcy", "prophecy", - "propehts", "prophets", - "prophacy", "prophecy", - "propmted", "prompted", - "propmtly", "promptly", - "proponet", "proponents", - "proposse", "proposes", - "proposte", "propose", - "proprety", "property", - "propsect", "prospect", - "prosepct", "prospect", - "prostite", "prostitute", - "protable", "portable", - "protecte", "protective", - "protiens", "proteins", - "protines", "proteins", - "protocal", "protocol", - "prototye", "prototype", - "protrait", "portrait", - "protrays", "portrays", - "protugal", "portugal", - "proverai", "proverbial", - "providee", "providence", - "proximty", "proximity", - "pruchase", "purchase", - "pryamids", "pyramids", - "ptichers", "pitchers", - "pubisher", "publisher", - "publiser", "publisher", - "puinsher", "punisher", - "pulisher", "publisher", - "pumkpins", "pumpkins", - "pumpinks", "pumpkins", - "pumpknis", "pumpkins", - "punshier", "punisher", - "punsiher", "punisher", - "punsihes", "punishes", - "purcahse", "purchase", - "pyramind", "pyramid", - "pyrimads", "pyramids", - "pyrmaids", "pyramids", - "qauntity", "quantity", - "qualifiy", "qualify", - "quanitfy", "quantify", - "quantaty", "quantity", - "quantite", "quantities", - "quantuum", "quantum", - "quarante", "quarantine", - "quartery", "quarterly", - "qucikest", "quickest", - "queation", "equation", - "quention", "quentin", - "quickets", "quickest", - "quicklyu", "quickly", - "rabbitos", "rabbits", - "rabbitts", "rabbits", - "racistas", "racists", - "racistes", "racists", - "radaince", "radiance", - "rahpsody", "rhapsody", - "raidance", "radiance", - "railraod", "railroad", - "randomes", "randoms", - "randomez", "randomized", - "randomns", "randoms", - "randomrs", "randoms", - "randomus", "randoms", - "raosting", "roasting", - "raphsody", "rhapsody", - "raptores", "raptors", - "raspbery", "raspberry", - "rationel", "rationale", - "realible", "reliable", - "realibly", "reliably", - "realiest", "earliest", - "realisim", "realism", - "realisme", "realise", - "realistc", "realistic", - "realiste", "realise", - "realoded", "reloaded", - "realsied", "realised", - "realtion", "relation", - "realtive", "relative", - "reamined", "remained", - "reapired", "repaired", - "reaplugs", "earplugs", - "reaserch", "research", - "reasonal", "reasonably", - "reatiler", "retailer", - "reaveled", "revealed", - "rebellis", "rebellious", - "reboudns", "rebounds", - "rebounce", "rebound", - "rebuildt", "rebuilt", - "rebuplic", "republic", - "receeded", "receded", - "recepits", "receipts", - "receptie", "receptive", - "receptos", "receptors", - "receving", "receiving", - "recident", "resident", - "reciding", "residing", - "recieved", "received", - "reciever", "receiver", - "recieves", "receives", - "recipees", "recipes", - "recipets", "recipes", - "recogise", "recognise", - "recogize", "recognize", - "recognie", "recognizes", - "recomend", "recommend", - "recommed", "recommend", - "reconnet", "reconnect", - "rectange", "rectangle", - "rectifiy", "rectify", - "recuring", "recurring", - "recurits", "recruits", - "redeisgn", "redesign", - "redemeed", "redeemed", - "redesgin", "redesign", - "redesing", "redesign", - "reedemed", "redeemed", - "refeeres", "referees", - "refelcts", "reflects", - "refelxes", "reflexes", - "referede", "referee", - "referene", "referee", - "referens", "references", - "referere", "referee", - "referign", "refering", - "refering", "referring", - "refernce", "references", - "reffered", "referred", - "refilles", "refills", - "refillls", "refills", - "reflecte", "reflective", - "reflecto", "reflection", - "reformes", "reforms", - "refreing", "refering", - "refrence", "reference", - "refreshd", "refreshed", - "refreshr", "refresher", - "refromed", "reformed", - "regardes", "regards", - "regenade", "renegade", - "regenere", "regenerate", - "regiones", "regions", - "regisrty", "registry", - "registed", "registered", - "regresas", "regress", - "regreses", "regress", - "regresos", "regress", - "regresse", "regressive", - "regresso", "regression", - "regrests", "regress", - "regretts", "regrets", - "regsitry", "registry", - "regualrs", "regulars", - "regualte", "regulate", - "reguarly", "regularly", - "regulary", "regularly", - "regulatr", "regulator", - "regulats", "regulators", - "rehersal", "rehearsal", - "rehtoric", "rhetoric", - "reiceved", "recieved", - "reigment", "regiment", - "reigonal", "regional", - "rekenton", "renekton", - "relaible", "reliable", - "relaibly", "reliably", - "relaised", "realised", - "relaoded", "reloaded", - "relasped", "relapsed", - "relatabe", "relatable", - "relateds", "relates", - "relativy", "relativity", - "relavent", "relevant", - "relected", "reelected", - "relegato", "relegation", - "releived", "relieved", - "releiver", "reliever", - "relevent", "relevant", - "relfects", "reflects", - "relfexes", "reflexes", - "reliased", "realised", - "religous", "religious", - "relpased", "relapsed", - "remainds", "remains", - "remainig", "remaining", - "remannts", "remnants", - "remarkes", "remarks", - "remembed", "remembered", - "remembee", "remembered", - "rememebr", "remember", - "remenant", "remnant", - "reminent", "remnant", - "remmeber", "remember", - "remotley", "remotely", - "renderes", "renders", - "reneagde", "renegade", - "renetkon", "renekton", - "renewabe", "renewables", - "renketon", "renekton", - "renmants", "remnants", - "renoylds", "reynolds", - "renteris", "renters", - "renyolds", "reynolds", - "reowrked", "reworked", - "repaires", "repairs", - "repalces", "replaces", - "reparied", "repaired", - "repblics", "republics", - "repbulic", "republic", - "repeatae", "repeatable", - "repeates", "repeats", - "repetion", "repetition", - "repharse", "rephrase", - "repitles", "reptiles", - "replased", "relapsed", - "replayes", "replays", - "replicae", "replicated", - "replubic", "republic", - "reportes", "reporters", - "reposity", "repository", - "repostas", "reposts", - "repostes", "reposts", - "repostig", "reposting", - "repostus", "reposts", - "represet", "represents", - "represso", "repression", - "reprhase", "rephrase", - "repsects", "respects", - "repsonds", "responds", - "repsonse", "response", - "repsoted", "reposted", - "repubics", "republics", - "republis", "republics", - "repulics", "republics", - "repulsie", "repulsive", - "requiers", "requires", - "requieum", "requiem", - "requilme", "requiem", - "requried", "required", - "requries", "requires", - "rescuecd", "rescued", - "researce", "researcher", - "resembes", "resembles", - "reserach", "research", - "resevoir", "reservoir", - "resgined", "resigned", - "residude", "residue", - "residule", "residue", - "resinged", "resigned", - "resistas", "resists", - "resisten", "resistance", - "resistes", "resists", - "resloved", "resolved", - "resloves", "resolves", - "resmeble", "resemble", - "resotred", "restored", - "resourse", "resources", - "resovled", "resolved", - "resovles", "resolves", - "respecte", "respective", - "respesct", "respects", - "responce", "response", - "responed", "respond", - "respones", "response", - "responsd", "responds", - "respoted", "reposted", - "restanti", "restarting", - "restrait", "restraint", - "restrics", "restricts", - "resuable", "reusable", - "retailes", "retailers", - "retalier", "retailer", - "rethoric", "rhetoric", - "retirase", "retires", - "retireds", "retires", - "retireus", "retires", - "retireve", "retrieve", - "retreive", "retrieve", - "retrived", "retrieved", - "retunred", "returned", - "reuasble", "reusable", - "reveales", "reveals", - "reveiwed", "reviewed", - "reveiwer", "reviewer", - "revelaed", "revealed", - "revelant", "relevant", - "revelead", "revealed", - "reverals", "reversal", - "reviewes", "reviewers", - "revlover", "revolver", - "revloves", "revolves", - "revovler", "revolver", - "revovles", "revolves", - "rewatchd", "rewatched", - "rewitten", "rewritten", - "rewritte", "rewrite", - "rewtched", "wretched", - "reynlods", "reynolds", - "reyonlds", "reynolds", - "rhaposdy", "rhapsody", - "rhaspody", "rhapsody", - "rheotric", "rhetoric", - "righteos", "righteous", - "rigntone", "ringtone", - "ringotne", "ringtone", - "ritalian", "ritalin", - "rivalrly", "rivalry", - "roachers", "roaches", - "robberts", "robbers", - "robberys", "robbers", - "robocoop", "robocop", - "robocorp", "robocop", - "robocoup", "robocop", - "roelplay", "roleplay", - "roganism", "organism", - "rolepaly", "roleplay", - "romaanin", "romanian", - "romainan", "romanian", - "romanain", "romanian", - "romanica", "romania", - "rosettta", "rosetta", - "rostaing", "roasting", - "routeros", "routers", - "rutgerus", "rutgers", - "ryenolds", "reynolds", - "sacrifie", "sacrifice", - "saddends", "saddens", - "saddenes", "saddens", - "sadisitc", "sadistic", - "salaires", "salaries", - "sandales", "sandals", - "sandalls", "sandals", - "sandstom", "sandstorm", - "sanotrum", "santorum", - "santourm", "santorum", - "santroum", "santorum", - "santurom", "santorum", - "sapcebar", "spacebar", - "sapphrie", "sapphire", - "sarcasam", "sarcasm", - "sarcasim", "sarcasm", - "sarcastc", "sarcastic", - "sargeant", "sergeant", - "sasauges", "sausages", - "sasuages", "sausages", - "satelite", "satellite", - "satellie", "satellites", - "saterday", "saturday", - "satifies", "satisfies", - "satisfiy", "satisfy", - "satrical", "satirical", - "satruday", "saturday", - "saturdsy", "saturdays", - "sawstika", "swastika", - "scandlas", "scandals", - "scannign", "scanning", - "scarmble", "scramble", - "scepture", "scepter", - "schedual", "schedule", - "schoalrs", "scholars", - "scholary", "scholarly", - "schoodle", "schooled", - "scientic", "scientific", - "scientis", "scientist", - "scoprion", "scorpion", - "scorates", "socrates", - "scoripon", "scorpion", - "scorpoin", "scorpion", - "scostman", "scotsman", - "scratchs", "scratches", - "scriptue", "scriptures", - "scriptus", "scripts", - "scritped", "scripted", - "scroates", "socrates", - "scropion", "scorpion", - "scrpited", "scripted", - "scruitny", "scrutiny", - "scrunity", "scrutiny", - "sctosman", "scotsman", - "sculpter", "sculpture", - "scurtiny", "scrutiny", - "seahakws", "seahawks", - "seahwaks", "seahawks", - "seantors", "senators", - "sebastin", "sebastian", - "seceeded", "succeeded", - "secertly", "secretly", - "secrelty", "secretly", - "secretas", "secrets", - "secretos", "secrets", - "secruity", "security", - "secuirty", "security", - "sedereal", "sidereal", - "seldomly", "seldom", - "selectie", "selective", - "selfiers", "selfies", - "semestre", "semester", - "semseter", "semester", - "senarios", "scenarios", - "senerity", "serenity", - "seniores", "seniors", - "senisble", "sensible", - "sensibel", "sensible", - "sensores", "sensors", - "senstive", "sensitive", - "sentaors", "senators", - "sentiers", "sentries", - "sentinet", "sentient", - "sentinte", "sentient", - "sentires", "sentries", - "sentreis", "sentries", - "separato", "separation", - "separete", "seperate", - "sepearte", "seperate", - "seperate", "separate", - "seplling", "spelling", - "sepreate", "seperate", - "sepulcre", "sepulchre", - "serached", "searched", - "seraches", "searches", - "serentiy", "serenity", - "sergaent", "sergeant", - "settigns", "settings", - "seventen", "seventeen", - "severeal", "several", - "severeid", "severed", - "severide", "severed", - "severley", "severely", - "sexaully", "sexually", - "seziures", "seizures", - "sezuires", "seizures", - "shadoloo", "shadaloo", - "shangahi", "shanghai", - "shanghia", "shanghai", - "sharplay", "sharply", - "sharpley", "sharply", - "shawshak", "shawshank", - "shcolars", "scholars", - "shcooled", "schooled", - "sheilded", "shielded", - "shelterd", "sheltered", - "shelvers", "shelves", - "shelveys", "shelves", - "sherlcok", "sherlock", - "shetlers", "shelters", - "shfiting", "shifting", - "shifitng", "shifting", - "shifteer", "shifter", - "shileded", "shielded", - "shineing", "shining", - "shitstom", "shitstorm", - "shittoon", "shitton", - "shittown", "shitton", - "shleters", "shelters", - "shnaghai", "shanghai", - "shortend", "shortened", - "shotuout", "shoutout", - "shoudlnt", "shouldnt", - "shouldes", "shoulders", - "shoulndt", "shouldnt", - "shrapenl", "shrapnel", - "shrelock", "sherlock", - "shrinked", "shrunk", - "shrpanel", "shrapnel", - "shtiless", "shitless", - "shuoldnt", "shouldnt", - "sideboad", "sideboard", - "sidleine", "sideline", - "siezable", "sizeable", - "siezures", "seizures", - "signatue", "signatures", - "signfies", "signifies", - "signifiy", "signify", - "signigns", "signings", - "signular", "singular", - "silbings", "siblings", - "silicoln", "silicon", - "silicoon", "silicon", - "silimiar", "similiar", - "simialir", "similiar", - "simiilar", "similiar", - "similair", "similar", - "similari", "similiar", - "similart", "similarity", - "similary", "similarly", - "similiar", "similar", - "simliiar", "similiar", - "simluate", "simulate", - "simmilar", "similar", - "simpelst", "simplest", - "simplets", "simplest", - "simplicy", "simplicity", - "simplier", "simpler", - "simulato", "simulation", - "singlers", "singles", - "singluar", "singular", - "sinistre", "sinister", - "sinsiter", "sinister", - "sitckers", "stickers", - "sitrring", "stirring", - "sizebale", "sizeable", - "skateing", "skating", - "skecthes", "sketches", - "skelatel", "skeletal", - "skeletos", "skeletons", - "sketchey", "sketchy", - "sketpics", "skeptics", - "skillsto", "skillshots", - "skimrish", "skirmish", - "skpetics", "skeptics", - "skrimish", "skirmish", - "skteches", "sketches", - "skywalkr", "skywalker", - "slaptoon", "splatoon", - "slaverly", "slavery", - "slienced", "silenced", - "sliently", "silently", - "slighlty", "slightly", - "sligthly", "slightly", - "smartare", "smarter", - "snetries", "sentries", - "snippent", "snippet", - "snippert", "snippet", - "snowbals", "snowballs", - "snugglie", "snuggle", - "snydrome", "syndrome", - "snyopsis", "synopsis", - "soberity", "sobriety", - "sobreity", "sobriety", - "socailly", "socially", - "socalism", "socialism", - "socartes", "socrates", - "socialim", "socialism", - "socities", "societies", - "socttish", "scottish", - "soemthin", "somethin", - "soilders", "soldiers", - "solatary", "solitary", - "soldeirs", "soldiers", - "soliders", "soldiers", - "soluable", "soluble", - "solutide", "solitude", - "somalija", "somalia", - "somehtin", "somethin", - "someoens", "someones", - "somethis", "somethings", - "sometihn", "somethin", - "sometinh", "somethin", - "somoenes", "someones", - "somtimes", "sometimes", - "somwhere", "somewhere", - "soparnos", "sopranos", - "sophmore", "sophomore", - "sorcercy", "sorcery", - "sorcerey", "sorcery", - "sorceror", "sorcerer", - "sorcerry", "sorcery", - "sorpanos", "sopranos", - "southren", "southern", - "soverein", "sovereign", - "soverign", "sovereign", - "sovietes", "soviets", - "spagheti", "spaghetti", - "spainish", "spanish", - "spaltoon", "splatoon", - "spammade", "spammed", - "spammare", "spammer", - "spammear", "spammer", - "spammend", "spammed", - "spammeur", "spammer", - "spanisch", "spanish", - "sparklie", "sparkle", - "spawnign", "spawning", - "specemin", "specimen", - "speciaal", "special", - "specialt", "specialist", - "specialy", "specially", - "specialz", "specialize", - "specifed", "specified", - "specifiy", "specify", - "speciman", "specimen", - "specrtal", "spectral", - "speicals", "specials", - "spellign", "spelling", - "spendour", "splendour", - "sphereos", "spheres", - "spilnter", "splinter", - "spiltter", "splitter", - "spindrel", "spindle", - "spirites", "spirits", - "spiritis", "spirits", - "spiritus", "spirits", - "spirtied", "spirited", - "spleling", "spelling", - "splitner", "splinter", - "spoilerd", "spoiled", - "spoliers", "spoilers", - "sponsord", "sponsored", - "sporanos", "sopranos", - "spotifiy", "spotify", - "spotifty", "spotify", - "sppeches", "speeches", - "sprayade", "sprayed", - "spreaded", "spread", - "springst", "sprints", - "sprinkel", "sprinkle", - "sprintas", "sprints", - "spritual", "spiritual", - "sproutes", "sprouts", - "spwaning", "spawning", - "sqaudron", "squadron", - "sqaurely", "squarely", - "sqiurtle", "squirtle", - "squardon", "squadron", - "squareds", "squares", - "squarley", "squarely", - "squeakey", "squeaky", - "squeakly", "squeaky", - "squirlte", "squirtle", - "squirrle", "squirrel", - "squirtel", "squirtle", - "squishey", "squishy", - "squishly", "squishy", - "squritle", "squirtle", - "squrriel", "squirrel", - "squrtile", "squirtle", - "sriarcha", "sriracha", - "srriacha", "sriracha", - "sryacuse", "syracuse", - "staduims", "stadiums", - "staidums", "stadiums", - "staklers", "stalkers", - "stalekrs", "stalkers", - "stalkear", "stalker", - "staminia", "stamina", - "stampade", "stamped", - "stampeed", "stamped", - "stancels", "stances", - "stancers", "stances", - "standars", "standards", - "standbay", "standby", - "standbuy", "standby", - "stangant", "stagnant", - "staright", "straight", - "starined", "strained", - "starlted", "startled", - "startegy", "strategy", - "starteld", "startled", - "startsup", "startups", - "stateman", "statesman", - "staticts", "statist", - "stationd", "stationed", - "stationy", "stationary", - "statiskt", "statist", - "statistc", "statistic", - "statment", "statement", - "stattues", "statutes", - "statuets", "statutes", - "statuser", "stature", - "staurday", "saturday", - "steadliy", "steadily", - "stealhty", "stealthy", - "steathly", "stealthy", - "stelathy", "stealthy", - "sterilze", "sterile", - "steriods", "steroids", - "stichted", "stitched", - "sticthed", "stitched", - "sticthes", "stitches", - "stimulai", "stimuli", - "stimulas", "stimulants", - "stimulat", "stimulants", - "stimulli", "stimuli", - "stingent", "stringent", - "stirkers", "strikers", - "stlakers", "stalkers", - "stomache", "stomach", - "stormade", "stormed", - "stormend", "stormed", - "stradegy", "strategy", - "stragety", "strategy", - "straignt", "straighten", - "straigth", "straight", - "straings", "strains", - "strangel", "strangle", - "stranget", "strangest", - "stratgey", "strategy", - "stratled", "startled", - "streames", "streams", - "streamos", "streams", - "streamus", "streams", - "streamys", "streams", - "stregnth", "strength", - "stremear", "streamer", - "strenght", "strength", - "strengts", "strengths", - "strenous", "strenuous", - "strentgh", "strength", - "stretchs", "stretches", - "striaght", "straight", - "striclty", "strictly", - "striekrs", "strikers", - "strikely", "strikingly", - "stringet", "stringent", - "stubbron", "stubborn", - "stubmled", "stumbled", - "stucture", "structure", - "studioes", "studios", - "stuipder", "stupider", - "stumbeld", "stumbled", - "stupdily", "stupidly", - "stupidiy", "stupidity", - "stylisch", "stylish", - "styrofom", "styrofoam", - "suasages", "sausages", - "subltety", "subtlety", - "submarie", "submarines", - "subruban", "suburban", - "subscrie", "subscriber", - "subsidie", "subsidized", - "subsidiy", "subsidy", - "substace", "substance", - "substans", "substances", - "substite", "substitute", - "subtelty", "subtlety", - "subtetly", "subtlety", - "subtilte", "subtitle", - "subtitel", "subtitle", - "subtitls", "subtitles", - "subtltey", "subtlety", - "succeded", "succeeded", - "succedes", "succeeds", - "succeeed", "succeed", - "succesed", "succeeds", - "successs", "successes", - "succsess", "success", - "suceeded", "succeeded", - "sucesful", "successful", - "sucesion", "succession", - "sucesses", "successes", - "sucessor", "successor", - "sucessot", "successor", - "sucidial", "suicidal", - "suddnely", "suddenly", - "sufficit", "sufficient", - "suggesst", "suggests", - "suggeste", "suggestive", - "summenor", "summoner", - "summones", "summoners", - "sunfiber", "sunfire", - "sunscren", "sunscreen", - "superham", "superhuman", - "superheo", "superhero", - "superios", "superiors", - "supirsed", "suprised", - "suposing", "supposing", - "supporre", "supporters", - "suprised", "surprised", - "suprized", "surprised", - "suprsied", "suprised", - "supsects", "suspects", - "supsense", "suspense", - "surbuban", "suburban", - "surounds", "surrounds", - "surpases", "surpass", - "surpress", "suppress", - "surprize", "surprise", - "surrouns", "surrounds", - "surveill", "surveil", - "surveyer", "surveyor", - "surviver", "survivor", - "suspened", "suspend", - "suspenso", "suspension", - "swaering", "swearing", - "swansoon", "swanson", - "swasitka", "swastika", - "swaskita", "swastika", - "swatiska", "swastika", - "swatsika", "swastika", - "swedisch", "swedish", - "swiftley", "swiftly", - "swithced", "switched", - "swithces", "switches", - "swtiched", "switched", - "swtiches", "switches", - "syarcuse", "syracuse", - "sydnrome", "syndrome", - "sylablle", "syllable", - "syllabel", "syllable", - "symapthy", "sympathy", - "symboles", "symbols", - "symhpony", "symphony", - "symmerty", "symmetry", - "symmtery", "symmetry", - "symoblic", "symbolic", - "symphaty", "sympathy", - "symptoom", "symptom", - "symtpoms", "symptoms", - "synomyns", "synonyms", - "synonmys", "synonyms", - "synonomy", "synonym", - "synoynms", "synonyms", - "synphony", "symphony", - "synposis", "synopsis", - "sypmathy", "sympathy", - "sypmtoms", "symptoms", - "sypnosis", "synopsis", - "syraucse", "syracuse", - "syrcause", "syracuse", - "syringae", "syringe", - "syringue", "syringe", - "sysamdin", "sysadmin", - "sysdamin", "sysadmin", - "tacticas", "tactics", - "tacticts", "tactics", - "tacticus", "tactics", - "tagliate", "tailgate", - "tahnkyou", "thankyou", - "tailsman", "talisman", - "taiwanee", "taiwanese", - "taligate", "tailgate", - "taliored", "tailored", - "tallents", "tallest", - "talsiman", "talisman", - "tanturms", "tantrums", - "tapitude", "aptitude", - "tasliman", "talisman", - "tattooes", "tattoos", - "tattooos", "tattoos", - "taxanomy", "taxonomy", - "teamfigt", "teamfight", - "teamspek", "teamspeak", - "teancity", "tenacity", - "teapsoon", "teaspoon", - "techniqe", "technique", - "teenages", "teenagers", - "telegrah", "telegraph", - "telphony", "telephony", - "tempalrs", "templars", - "tempalte", "template", - "templats", "templates", - "templeos", "temples", - "templers", "temples", - "temporay", "temporary", - "temprary", "temporary", - "tenacles", "tentacles", - "tenactiy", "tenacity", - "tencaity", "tenacity", - "tendancy", "tendency", - "tendence", "tendencies", - "tentacel", "tentacle", - "tentacls", "tentacles", - "tentalce", "tentacle", - "tequilia", "tequila", - "terriory", "territory", - "territoy", "territory", - "terroist", "terrorist", - "tesitcle", "testicle", - "testicel", "testicle", - "testifiy", "testify", - "teusdays", "tuesdays", - "texutres", "textures", - "thaliand", "thailand", - "theather", "theater", - "theathre", "theater", - "theature", "theater", - "theisitc", "theistic", - "themslef", "themself", - "theorits", "theorist", - "theraphy", "therapy", - "thereian", "therein", - "theroies", "theories", - "theroist", "theorist", - "thesitic", "theistic", - "thialand", "thailand", - "thiestic", "theistic", - "thikning", "thinking", - "thirites", "thirties", - "thirstay", "thirsty", - "thnakyou", "thankyou", - "thoeries", "theories", - "thoerist", "theorist", - "thomspon", "thompson", - "thopmson", "thompson", - "thougths", "thoughts", - "thourogh", "thorough", - "threates", "threatens", - "threefor", "therefor", - "thriteen", "thirteen", - "thrities", "thirties", - "throaths", "throats", - "throners", "thrones", - "throough", "thorough", - "throught", "thought", - "thrusday", "thursday", - "thumbnal", "thumbnails", - "thurdsay", "thursday", - "thursdsy", "thursdays", - "tightare", "tighter", - "timestap", "timestamp", - "tirangle", "triangle", - "tirbunal", "tribunal", - "titainum", "titanium", - "titanuim", "titanium", - "tocuhpad", "touchpad", - "togehter", "together", - "togheter", "together", - "toiletts", "toilets", - "tolerabe", "tolerable", - "tommorow", "tomorrow", - "tonguers", "tongues", - "toriodal", "toroidal", - "toritlla", "tortilla", - "tornadoe", "tornado", - "torotise", "tortoise", - "torpedeo", "torpedo", - "torphies", "trophies", - "tortiose", "tortoise", - "toruisty", "touristy", - "toruneys", "tourneys", - "touchapd", "touchpad", - "tounreys", "tourneys", - "tourisim", "tourism", - "touritsy", "touristy", - "tournyes", "tourneys", - "toursits", "tourists", - "toursity", "touristy", - "toxiticy", "toxicity", - "trabajao", "trabajo", - "trabajdo", "trabajo", - "trackres", "trackers", - "trageted", "targeted", - "traingle", "triangle", - "traitour", "traitor", - "trakcers", "trackers", - "traliers", "trailers", - "tranform", "transform", - "transeat", "translates", - "transfom", "transform", - "transfos", "transforms", - "transiet", "transient", - "transito", "transition", - "transpot", "transport", - "trasnfer", "transfer", - "tratiors", "traitors", - "traveles", "travels", - "traveres", "traverse", - "treasurs", "treasures", - "treatmet", "treatments", - "treatsie", "treaties", - "treausre", "treasure", - "tredning", "trending", - "tremelos", "tremolos", - "tresuary", "treasury", - "trialers", "trailers", - "trianers", "trainers", - "triangel", "triangle", - "triangls", "triangles", - "trianing", "training", - "trianlge", "triangle", - "triators", "traitors", - "tribuanl", "tribunal", - "trickyer", "trickery", - "triggern", "triggering", - "trilogoy", "trilogy", - "trinagle", "triangle", - "trinekts", "trinkets", - "tringale", "triangle", - "trinitiy", "trinity", - "triology", "trilogy", - "triumpth", "triumph", - "trohpies", "trophies", - "trollade", "trolled", - "tropcial", "tropical", - "trotilla", "tortilla", - "trpoical", "tropical", - "trubinal", "tribunal", - "trubines", "turbines", - "tsunamai", "tsunami", - "tuesdsay", "tuesdays", - "tunnells", "tunnels", - "turkisch", "turkish", - "turntabe", "turntable", - "turretts", "turrets", - "tusedays", "tuesdays", - "tutorual", "tutorial", - "twilgiht", "twilight", - "tylenool", "tylenol", - "typicaly", "typically", - "tyranies", "tyrannies", - "tyrannia", "tyrannical", - "ublisher", "publisher", - "udnercut", "undercut", - "udnerdog", "underdog", - "ugpraded", "upgraded", - "ugprades", "upgrades", - "ukrainie", "ukraine", - "ukrainin", "ukrainian", - "ukranian", "ukrainian", - "ulitmate", "ultimate", - "ultamite", "ultimate", - "ultiamte", "ultimate", - "ultimely", "ultimately", - "ultrason", "ultrasound", - "umberlla", "umbrella", - "unabnned", "unbanned", - "unbanend", "unbanned", - "uncanney", "uncanny", - "uncannny", "uncanny", - "underbog", "undergo", - "underglo", "undergo", - "undersog", "undergo", - "undertoe", "undertones", - "underwar", "underwater", - "unfailry", "unfairly", - "unfarily", "unfairly", - "ungodley", "ungodly", - "unhapppy", "unhappy", - "unhealty", "unhealthy", - "unicrons", "unicorns", - "unifroms", "uniforms", - "uniquley", "uniquely", - "univeral", "universal", - "unlikley", "unlikely", - "unlockes", "unlocks", - "unluckly", "unlucky", - "unpoened", "unopened", - "unqiuely", "uniquely", - "unrakned", "unranked", - "unrnaked", "unranked", - "unrpoven", "unproven", - "unsuable", "unusable", - "untraind", "untrained", - "unusualy", "unusually", - "unvierse", "universe", - "unworhty", "unworthy", - "upgarded", "upgraded", - "upgardes", "upgrades", - "uploades", "uploads", - "upstaris", "upstairs", - "upstiars", "upstairs", - "urethrea", "urethra", - "uruguary", "uruguay", - "ususally", "usually", - "utilitiy", "utility", - "utlimate", "ultimate", - "vaccinae", "vaccinated", - "vaccinet", "vaccinated", - "vacinity", "vicinity", - "vaguelly", "vaguely", - "vaiation", "aviation", - "vaieties", "varieties", - "vailidty", "validity", - "vairable", "variable", - "vaklyrie", "valkyrie", - "valenica", "valencia", - "valentie", "valentines", - "valentis", "valentines", - "validade", "validated", - "valkirye", "valkyrie", - "valkiyre", "valkyrie", - "valkriye", "valkyrie", - "valkryie", "valkyrie", - "valkyire", "valkyrie", - "valnecia", "valencia", - "valubale", "valuable", - "valykrie", "valkyrie", - "vamipres", "vampires", - "vampiers", "vampires", - "vampries", "vampires", - "vangurad", "vanguard", - "vanillia", "vanilla", - "vanillla", "vanilla", - "vanugard", "vanguard", - "varaible", "variable", - "varaints", "variants", - "variabel", "variable", - "varibale", "variable", - "varities", "varieties", - "vassales", "vassals", - "vassalls", "vassals", - "vassalos", "vassals", - "vaticaan", "vatican", - "vaticina", "vatican", - "vaulable", "valuable", - "vaylkrie", "valkyrie", - "vechiles", "vehicles", - "vectores", "vectors", - "vegansim", "veganism", - "vegtable", "vegetable", - "vehciles", "vehicles", - "vehicels", "vehicles", - "vehicule", "vehicle", - "veichles", "vehicles", - "venelope", "envelope", - "venemous", "venomous", - "vengance", "vengeance", - "vengence", "vengeance", - "verablly", "verbally", - "verbaitm", "verbatim", - "verisons", "versions", - "versatel", "versatile", - "vertabim", "verbatim", - "vertigro", "vertigo", - "vesseles", "vessels", - "vessells", "vessels", - "viabiliy", "viability", - "viatmins", "vitamins", - "vibratie", "vibrate", - "vibratin", "vibration", - "vicintiy", "vicinity", - "vicseral", "visceral", - "victimas", "victims", - "victimes", "victims", - "victorin", "victorian", - "victoris", "victories", - "vieweres", "viewers", - "viewpoit", "viewpoints", - "vigilane", "vigilante", - "vigliant", "vigilant", - "vikingos", "vikings", - "viligant", "vigilant", - "villegas", "villages", - "vindicte", "vindictive", - "vinicity", "vicinity", - "violatin", "violation", - "violenty", "violently", - "violetas", "violates", - "virament", "vraiment", - "virbator", "vibrator", - "virginas", "virgins", - "virgines", "virgins", - "virgings", "virgins", - "virginis", "virgins", - "virginus", "virgins", - "virtualy", "virtually", - "virtuels", "virtues", - "virtuose", "virtues", - "viscreal", "visceral", - "visercal", "visceral", - "visibily", "visibility", - "visibley", "visibly", - "visiblly", "visibly", - "vitailty", "vitality", - "vitimans", "vitamins", - "vitmains", "vitamins", - "vitories", "victories", - "voicemal", "voicemail", - "voilates", "violates", - "volatily", "volatility", - "volcando", "volcano", - "volcanoe", "volcano", - "volcaron", "volcano", - "vriament", "vraiment", - "wahtever", "whatever", - "wallpapr", "wallpapers", - "warantee", "warranty", - "warcarft", "warcraft", - "warrante", "warranties", - "warriros", "warriors", - "watchemn", "watchmen", - "watchign", "watching", - "wathcing", "watching", - "wathcmen", "watchmen", - "wathever", "whatever", - "watkings", "watkins", - "wealthly", "wealthy", - "webistes", "websites", - "websties", "websites", - "wednesdy", "wednesdays", - "weigthed", "weighted", - "weridest", "weirdest", - "werstler", "wrestler", - "wesbites", "websites", - "westbrok", "westbrook", - "westerse", "westerners", - "wherease", "whereas", - "whipsers", "whispers", - "whislist", "wishlist", - "whisltes", "whistles", - "whisperd", "whispered", - "whistels", "whistles", - "whitsles", "whistles", - "whsipers", "whispers", - "widgetas", "widgets", - "wieghted", "weighted", - "willaims", "williams", - "willfuly", "willfully", - "willimas", "williams", - "windsoar", "windsor", - "wininpeg", "winnipeg", - "winnigns", "winnings", - "winnpieg", "winnipeg", - "wiredest", "weirdest", - "wishlsit", "wishlist", - "wishpers", "whispers", - "withdral", "withdrawal", - "witnesss", "witnesses", - "wonderes", "wonders", - "wonderus", "wonders", - "workfore", "workforce", - "wouldnot", "wouldnt", - "wranlger", "wrangler", - "wreckign", "wrecking", - "wrecthed", "wretched", - "wrekcing", "wrecking", - "wreslter", "wrestler", - "wresters", "wrestlers", - "writting", "writing", - "wrnagler", "wrangler", - "wrteched", "wretched", - "yeilding", "yielding", - "yoesmite", "yosemite", - "yorksher", "yorkshire", - "yorkshie", "yorkshire", - "yosemeti", "yosemite", - "yosimete", "yosemite", - "zealotes", "zealots", - "zealoths", "zealots", - "zealotus", "zealots", - "zealouts", "zealous", - "zepplein", "zeppelin", - "zepplien", "zeppelin", - "zimbabew", "zimbabwe", - "zimbawbe", "zimbabwe", - "zinoists", "zionists", - "zionisim", "zionism", - "zionistm", "zionism", - "zionsits", "zionists", - "zoinists", "zionists", - "abiltiy", "ability", - "abodmen", "abdomen", - "abondon", "abandon", - "aboslve", "absolve", - "abosrbs", "absorbs", - "abriter", "arbiter", - "abrupty", "abruptly", - "absense", "absence", - "absolue", "absolute", - "absovle", "absolve", - "absrobs", "absorbs", - "absuers", "abusers", - "absurdy", "absurdly", - "absymal", "abysmal", - "abymsal", "abysmal", - "acadamy", "academy", - "acadmic", "academic", - "accesss", "access", - "accpets", "accepts", - "accross", "across", - "accuray", "accuracy", - "acheive", "achieve", - "achived", "achieved", - "acident", "accident", - "ackward", "awkward", - "acrlyic", "acrylic", - "actauly", "actualy", - "activit", "activist", - "activly", "actively", - "actualy", "actually", - "actulay", "actualy", - "acuracy", "accuracy", - "acusing", "causing", - "acustom", "accustom", - "acutaly", "actualy", - "acyrlic", "acrylic", - "adaptes", "adapters", - "adatper", "adapter", - "adbomen", "abdomen", - "addcits", "addicts", - "adderss", "address", - "addtion", "addition", - "adequet", "adequate", - "adequit", "adequate", - "adivser", "adviser", - "adivsor", "advisor", - "admited", "admitted", - "admrial", "admiral", - "adpater", "adapter", - "adquire", "acquire", - "adultey", "adultery", - "adverst", "adverts", - "adviced", "advised", - "advocay", "advocacy", - "advsior", "advisor", - "aeriels", "aerials", - "affaris", "affairs", - "affiars", "affairs", - "afircan", "african", - "africas", "africans", - "afwully", "awfully", - "againts", "against", - "agaisnt", "against", - "aganist", "against", - "aggreed", "agreed", - "agianst", "against", - "agreing", "agreeing", - "agruing", "arguing", - "ahtiest", "athiest", - "aicraft", "aircraft", - "ailmony", "alimony", - "airbore", "airborne", - "aircaft", "aircraft", - "airlfow", "airflow", - "airosft", "airsoft", - "airpost", "airports", - "airsfot", "airsoft", - "airzona", "arizona", - "alchmey", "alchemy", - "alchool", "alcohol", - "alcohal", "alcohol", - "aledged", "alleged", - "aledges", "alleges", - "alegbra", "algebra", - "algerba", "algebra", - "alienet", "alienate", - "alledge", "allege", - "allegry", "allergy", - "alltime", "all-time", - "almighy", "almighty", - "alochol", "alcohol", - "alotted", "allotted", - "alowing", "allowing", - "alphabt", "alphabet", - "alreayd", "already", - "alrighy", "alrighty", - "altanta", "atlanta", - "alteast", "atleast", - "altough", "although", - "alusion", "allusion", - "amateus", "amateurs", - "amatuer", "amateur", - "amature", "armature", - "amensia", "amnesia", - "amensty", "amnesty", - "amercia", "america", - "americs", "americas", - "ammount", "amount", - "ammused", "amused", - "amneisa", "amnesia", - "amnsety", "amnesty", - "amognst", "amongst", - "amongts", "amongst", - "amonsgt", "amongst", - "ampilfy", "amplify", - "amrpits", "armpits", - "analoge", "analogue", - "analsyt", "analyst", - "analyes", "analyse", - "analyts", "analyst", - "analzye", "analyze", - "anaylse", "analyse", - "anaylst", "analyst", - "anaylze", "analyze", - "anceint", "ancient", - "andorid", "android", - "andriod", "android", - "androis", "androids", - "angirly", "angrily", - "angluar", "angular", - "angualr", "angular", - "anicent", "ancient", - "anitque", "antique", - "anixety", "anxiety", - "anmesia", "amnesia", - "anmesty", "amnesty", - "annoint", "anoint", - "annualy", "annually", - "annuled", "annulled", - "anohter", "another", - "anomoly", "anomaly", - "answerd", "answered", - "anuglar", "angular", - "anulled", "annulled", - "anwsers", "answers", - "anwyays", "anyways", - "anxeity", "anxiety", - "anyoens", "anyones", - "anyonse", "anyones", - "anywyas", "anyways", - "aparent", "apparent", - "appeard", "appeared", - "appluad", "applaud", - "aproval", "approval", - "apsects", "aspects", - "apshalt", "asphalt", - "apsirin", "aspirin", - "aqcuire", "acquire", - "aquarim", "aquarium", - "aquired", "acquired", - "aranged", "arranged", - "arbitre", "arbiter", - "arcahic", "archaic", - "archiac", "archaic", - "arcylic", "acrylic", - "aresnal", "arsenal", - "aretmis", "artemis", - "argubly", "arguably", - "aribter", "arbiter", - "ariflow", "airflow", - "arisoft", "airsoft", - "aritsts", "artists", - "armchar", "armchair", - "arogant", "arrogant", - "arogent", "arrogant", - "arresst", "arrests", - "arround", "around", - "arsneal", "arsenal", - "artcile", "article", - "artical", "article", - "articel", "article", - "artistc", "artistic", - "artmeis", "artemis", - "artsits", "artists", - "aruging", "arguing", - "aseuxal", "asexual", - "asexaul", "asexual", - "ashpalt", "asphalt", - "asiprin", "aspirin", - "asissts", "assists", - "asnwers", "answers", - "asorbed", "absorbed", - "aspahlt", "asphalt", - "asphlat", "asphalt", - "aspriin", "aspirin", - "assagne", "assange", - "assasin", "assassin", - "assembe", "assemble", - "assemby", "assembly", - "assisst", "assists", - "assnage", "assange", - "asssits", "assists", - "assualt", "assault", - "asterik", "asterisk", - "asutria", "austria", - "atcualy", "actualy", - "atelast", "atleast", - "athesim", "atheism", - "athiesm", "atheism", - "athiest", "atheist", - "athiets", "athiest", - "athlets", "athletes", - "atlantc", "atlantic", - "atleats", "atleast", - "atlesat", "atleast", - "atorney", "attorney", - "atremis", "artemis", - "attemps", "attempts", - "attemts", "attempts", - "attened", "attended", - "attracs", "attracts", - "audbile", "audible", - "audibel", "audible", - "austira", "austria", - "austrai", "austria", - "autistc", "autistic", - "avation", "aviation", - "avtaars", "avatars", - "awakend", "awakened", - "bablyon", "babylon", - "backdor", "backdoor", - "backsta", "backseat", - "baclony", "balcony", - "badnits", "bandits", - "baiscly", "basicly", - "bakcers", "backers", - "balanse", "balances", - "balcked", "blacked", - "banhsee", "banshee", - "bankgok", "bangkok", - "baoynet", "bayonet", - "baptims", "baptism", - "baptsim", "baptism", - "baragin", "bargain", - "bargani", "bargain", - "bargian", "bargain", - "bariner", "brainer", - "barlkey", "barkley", - "barracs", "barracks", - "barrles", "barrels", - "barsita", "barista", - "barvery", "bravery", - "bascily", "basicly", - "basicly", "basically", - "basilcy", "basicly", - "basiton", "bastion", - "basnhee", "banshee", - "bastane", "bastante", - "bastars", "bastards", - "bastino", "bastion", - "bathrom", "bathroom", - "batitsa", "batista", - "batsita", "batista", - "bayblon", "babylon", - "baynoet", "bayonet", - "bayoent", "bayonet", - "bceuase", "becuase", - "beacuse", "because", - "bealtes", "beatles", - "beaslty", "beastly", - "beatels", "beatles", - "beaucop", "beaucoup", - "becamae", "became", - "becames", "becomes", - "becasue", "because", - "becouse", "because", - "becuaes", "becuase", - "becuase", "because", - "becusae", "becuase", - "befried", "befriend", - "beggins", "begins", - "beglian", "belgian", - "beglium", "belgium", - "begnals", "bengals", - "bejiing", "beijing", - "beleifs", "beliefs", - "beleive", "believe", - "belgain", "belgian", - "belguim", "belgium", - "believr", "believer", - "believs", "believes", - "belifes", "beliefs", - "beligan", "belgian", - "beligum", "belgium", - "belived", "believed", - "belives", "believes", - "benagls", "bengals", - "benedit", "benedict", - "benghai", "benghazi", - "benglas", "bengals", - "benifit", "benefit", - "beoynce", "beyonce", - "beraded", "bearded", - "bersekr", "berserk", - "beseige", "besiege", - "betales", "beatles", - "bethesa", "bethesda", - "betrayd", "betrayed", - "beucase", "becuase", - "bewteen", "between", - "bicthes", "bitches", - "bidrman", "birdman", - "biejing", "beijing", - "bifgoot", "bigfoot", - "bigorty", "bigotry", - "bigtoed", "bigoted", - "bigtory", "bigotry", - "biogted", "bigoted", - "biogtry", "bigotry", - "bioplar", "bipolar", - "biploar", "bipolar", - "birdamn", "birdman", - "birdges", "bridges", - "birgade", "brigade", - "bitcion", "bitcoin", - "bithced", "bitched", - "bithces", "bitches", - "bitocin", "bitcoin", - "bizzare", "bizarre", - "blacony", "balcony", - "blaimed", "blamed", - "blankes", "blankets", - "blegian", "belgian", - "blegium", "belgium", - "blizzad", "blizzard", - "blockes", "blockers", - "bloster", "bolster", - "blulets", "bullets", - "bobmers", "bombers", - "bollocs", "bollocks", - "bondary", "boundary", - "bonnano", "bonanno", - "bonsues", "bonuses", - "boraden", "broaden", - "borader", "broader", - "boradly", "broadly", - "bordeom", "boredom", - "boslter", "bolster", - "boudler", "boulder", - "boundry", "boundary", - "bounses", "bonuses", - "boutiqe", "boutique", - "bouyant", "buoyant", - "braevry", "bravery", - "braista", "barista", - "brakley", "barkley", - "branier", "brainer", - "braoden", "broaden", - "braoder", "broader", - "braodly", "broadly", - "brednan", "brendan", - "breifly", "briefly", - "breserk", "berserk", - "brethen", "brethren", - "brewrey", "brewery", - "briagde", "brigade", - "brianer", "brainer", - "bridman", "birdman", - "brielfy", "briefly", - "brigdes", "bridges", - "brightn", "brighten", - "brisben", "brisbane", - "britian", "britain", - "britsol", "bristol", - "briused", "bruised", - "briuser", "bruiser", - "briuses", "bruises", - "brocoli", "broccoli", - "bronocs", "broncos", - "browine", "brownie", - "brownei", "brownie", - "brownis", "brownies", - "bruglar", "burglar", - "brunete", "brunette", - "bruning", "burning", - "brusied", "bruised", - "brusies", "bruises", - "brusses", "brussels", - "brutaly", "brutally", - "btiched", "bitched", - "btiches", "bitches", - "bubbels", "bubbles", - "buddhim", "buddhism", - "buddhit", "buddhist", - "buddist", "buddhist", - "budgest", "budgets", - "bugdets", "budgets", - "buildes", "builders", - "bulgara", "bulgaria", - "bullest", "bullets", - "buoancy", "buoyancy", - "burguny", "burgundy", - "buriser", "bruiser", - "burlgar", "burglar", - "burnign", "burning", - "burried", "buried", - "burrtio", "burrito", - "busines", "business", - "busness", "business", - "butthoe", "butthole", - "buttrey", "buttery", - "cababge", "cabbage", - "cabines", "cabinets", - "cabniet", "cabinet", - "caclium", "calcium", - "cacuses", "caucuses", - "caffeen", "caffeine", - "cahched", "cached", - "cahotic", "chaotic", - "cahsier", "cashier", - "cailbre", "calibre", - "calaber", "caliber", - "calagry", "calgary", - "calback", "callback", - "calbire", "calibre", - "calcuim", "calcium", - "calculs", "calculus", - "calicum", "calcium", - "calrify", "clarify", - "calrity", "clarity", - "caluses", "clauses", - "camboda", "cambodia", - "campain", "campaign", - "campuss", "campuses", - "cancles", "cancels", - "cancres", "cancers", - "cancuks", "canucks", - "canides", "candies", - "cannnot", "cannot", - "canrage", "carnage", - "capible", "capable", - "capitas", "capitals", - "capsuls", "capsules", - "captais", "captains", - "captial", "capital", - "captiol", "capitol", - "captued", "captured", - "capturd", "captured", - "capusle", "capsule", - "carange", "carnage", - "carbien", "carbine", - "cardaic", "cardiac", - "cardina", "cardigan", - "careing", "caring", - "caridac", "cardiac", - "carmtan", "cartman", - "carnege", "carnage", - "carnige", "carnage", - "carolan", "carolina", - "carreer", "career", - "carrers", "careers", - "cartles", "cartels", - "caryons", "crayons", - "casette", "cassette", - "casheir", "cashier", - "cashies", "cashiers", - "cashire", "cashier", - "casltes", "castles", - "caspule", "capsule", - "cassete", "cassette", - "castels", "castles", - "casuing", "causing", - "cathlic", "catholic", - "cauncks", "canucks", - "cavarly", "cavalry", - "cavlary", "cavalry", - "celcius", "celsius", - "celisus", "celsius", - "celitcs", "celtics", - "celsuis", "celsius", - "centruy", "century", - "centuty", "century", - "ceratin", "certain", - "cermaic", "ceramic", - "certian", "certain", - "cervial", "cervical", - "cesspol", "cesspool", - "cetlics", "celtics", - "chambre", "chamber", - "charcol", "charcoal", - "charisa", "charisma", - "chasiss", "chassis", - "chatoic", "chaotic", - "cheeots", "cheetos", - "cheesse", "cheeses", - "chekcer", "checker", - "chelsae", "chelsea", - "cheslea", "chelsea", - "chiense", "chinese", - "childen", "children", - "chimeny", "chimney", - "chinees", "chinese", - "chinmey", "chimney", - "chipest", "chipset", - "chispet", "chipset", - "chivaly", "chivalry", - "chlesea", "chelsea", - "choatic", "chaotic", - "chocies", "choices", - "choosen", "chosen", - "chtulhu", "cthulhu", - "churchs", "churches", - "cilanto", "cilantro", - "cilents", "clients", - "circels", "circles", - "circuis", "circuits", - "cirlces", "circles", - "clacium", "calcium", - "claerer", "clearer", - "claerly", "clearly", - "clagary", "calgary", - "claibre", "calibre", - "claimes", "claims", - "clairfy", "clarify", - "clairty", "clarity", - "clanand", "clannad", - "clarfiy", "clarify", - "classis", "classics", - "clasues", "clauses", - "claymer", "claymore", - "claymoe", "claymore", - "cleanes", "cleanse", - "cleasne", "cleanse", - "cleints", "clients", - "clenase", "cleanse", - "clesius", "celsius", - "cletics", "celtics", - "clevery", "cleverly", - "climats", "climates", - "climbes", "climbers", - "clincis", "clinics", - "clitors", "clitoris", - "cloesly", "closely", - "closley", "closely", - "cluases", "clauses", - "cluprit", "culprit", - "coalese", "coalesce", - "coctail", "cocktail", - "cohesie", "cohesive", - "colgone", "cologne", - "collape", "collapse", - "collest", "collects", - "collony", "colony", - "collumn", "column", - "cologen", "cologne", - "colomba", "colombia", - "colonge", "cologne", - "colorao", "colorado", - "colourd", "coloured", - "columsn", "columns", - "comando", "commando", - "comapny", "company", - "comapre", "compare", - "comarde", "comrade", - "comback", "comeback", - "combins", "combines", - "comdeic", "comedic", - "comited", "committed", - "commano", "commando", - "commans", "commands", - "commere", "commerce", - "comming", "coming", - "commitd", "commited", - "compase", "compares", - "compede", "competed", - "compilr", "compiler", - "compnay", "company", - "compots", "compost", - "comrads", "comrades", - "comtpon", "compton", - "conceed", "concede", - "conceps", "concepts", - "conclue", "conclude", - "concret", "concert", - "condenm", "condemn", - "condiut", "conduit", - "condmen", "condemn", - "confids", "confides", - "confins", "confines", - "confise", "confines", - "conflit", "conflict", - "conived", "connived", - "connecs", "connects", - "conqeur", "conquer", - "conqure", "conquer", - "consept", "concept", - "consern", "concern", - "consums", "consumes", - "contacs", "contacts", - "contais", "contains", - "contast", "contacts", - "contemt", "contempt", - "contens", "contents", - "contess", "contests", - "contian", "contain", - "contine", "continue", - "convers", "converts", - "conveyd", "conveyed", - "convine", "convince", - "coprses", "corpses", - "coputer", "computer", - "corasir", "corsair", - "coratia", "croatia", - "coridal", "cordial", - "corsari", "corsair", - "corsiar", "corsair", - "corspes", "corpses", - "corwbar", "crowbar", - "costums", "costumes", - "coudlnt", "couldnt", - "coulmns", "columns", - "coulndt", "couldnt", - "counsle", "counsel", - "countes", "counters", - "courtey", "courtesy", - "covenat", "covenant", - "coytoes", "coyotes", - "crabine", "carbine", - "cralwed", "crawled", - "craotia", "croatia", - "craweld", "crawled", - "creamic", "ceramic", - "createn", "creatine", - "creater", "creature", - "creatie", "creatine", - "creatue", "creature", - "creepes", "creepers", - "creepig", "creeping", - "creulty", "cruelty", - "cricles", "circles", - "critera", "criteria", - "cropses", "corpses", - "crosair", "corsair", - "crpytic", "cryptic", - "crsytal", "crystal", - "crtical", "critical", - "crucibe", "crucible", - "cruetly", "cruelty", - "cruical", "crucial", - "crulety", "cruelty", - "crusdae", "crusade", - "crusier", "cruiser", - "crusies", "cruises", - "crusive", "cursive", - "crutchs", "crutches", - "crypitc", "cryptic", - "crystas", "crystals", - "crystsl", "crystals", - "crytpic", "cryptic", - "crytsal", "crystal", - "cthluhu", "cthulhu", - "cthuhlu", "cthulhu", - "cthuluh", "cthulhu", - "ctuhlhu", "cthulhu", - "cuasing", "causing", - "cubcile", "cubicle", - "cubilce", "cubicle", - "cuddels", "cuddles", - "culrpit", "culprit", - "culturs", "cultures", - "cupboad", "cupboard", - "cuplrit", "culprit", - "curatin", "curtain", - "curcial", "crucial", - "curcuit", "circuit", - "curelty", "cruelty", - "curiser", "cruiser", - "curisve", "cursive", - "currate", "curate", - "currens", "currents", - "curreny", "currency", - "currest", "currents", - "cursade", "crusade", - "curtian", "curtain", - "cyandie", "cyanide", - "cyclits", "cyclist", - "cycloen", "cyclone", - "cycolps", "cyclops", - "cylcist", "cyclist", - "cylcone", "cyclone", - "cylcops", "cyclops", - "cynaide", "cyanide", - "cyrptic", "cryptic", - "cyrstal", "crystal", - "dagners", "dangers", - "daimond", "diamond", - "damenor", "demeanor", - "dammage", "damage", - "darcula", "dracula", - "dargons", "dragons", - "darkets", "darkest", - "datbase", "database", - "daulity", "duality", - "dawrves", "dwarves", - "ddogers", "dodgers", - "ddoging", "dodging", - "deadlit", "deadlift", - "deadpol", "deadpool", - "deafult", "default", - "deahtly", "deathly", - "deatils", "details", - "deatlhy", "deathly", - "decalre", "declare", - "decison", "decision", - "declars", "declares", - "declase", "declares", - "decress", "decrees", - "decribe", "describe", - "decsend", "descend", - "dectect", "detect", - "defaint", "defiant", - "defauls", "defaults", - "defelct", "deflect", - "defensd", "defends", - "deffine", "define", - "definat", "defiant", - "definet", "definite", - "definie", "definite", - "definig", "defining", - "definit", "definite", - "defualt", "default", - "degarde", "degrade", - "degrase", "degrasse", - "degrate", "degrade", - "deiners", "deniers", - "deisgns", "designs", - "deivant", "deviant", - "dekstop", "desktop", - "delcare", "declare", - "delfect", "deflect", - "demenor", "demeanor", - "dementa", "dementia", - "demsond", "desmond", - "deneirs", "deniers", - "denisty", "density", - "densley", "densely", - "depcits", "depicts", - "dependd", "depended", - "depitcs", "depicts", - "deployd", "deployed", - "depsise", "despise", - "descrie", "describe", - "descuss", "discuss", - "desgins", "designs", - "desings", "designs", - "desitny", "destiny", - "desnely", "densely", - "desnity", "density", - "desomnd", "desmond", - "despict", "depict", - "despide", "despised", - "despies", "despise", - "destkop", "desktop", - "destory", "destroy", - "destros", "destroys", - "detaild", "detailed", - "detials", "details", - "detorit", "detroit", - "detriot", "detroit", - "deuling", "dueling", - "devaint", "deviant", - "devaite", "deviate", - "devided", "divided", - "devlove", "devolve", - "devotin", "devotion", - "devovle", "devolve", - "diabets", "diabetes", - "dialecs", "dialects", - "dialoge", "dialogue", - "diamons", "diamonds", - "diasble", "disable", - "dicksih", "dickish", - "dicover", "discover", - "dictats", "dictates", - "dieties", "deities", - "dilpoma", "diploma", - "dimaond", "diamond", - "dingity", "dignity", - "dinosar", "dinosaur", - "diosese", "diocese", - "dipolma", "diploma", - "dirbble", "dribble", - "directy", "directly", - "diretcx", "directx", - "dirived", "derived", - "dirvers", "drivers", - "disbale", "disable", - "disguss", "disgusts", - "disliks", "dislikes", - "disover", "discover", - "dispair", "despair", - "dispath", "dispatch", - "dispite", "despite", - "dispuse", "disputes", - "disputs", "disputes", - "dissole", "dissolve", - "distase", "distaste", - "distint", "distinct", - "divison", "division", - "docuhes", "douches", - "docuhey", "douchey", - "dogders", "dodgers", - "dogding", "dodging", - "dolhpin", "dolphin", - "dolphis", "dolphins", - "dominae", "dominate", - "dominno", "dominion", - "doplhin", "dolphin", - "dortmud", "dortmund", - "draclua", "dracula", - "dracual", "dracula", - "drakest", "darkest", - "dramtic", "dramatic", - "dribbel", "dribble", - "driectx", "directx", - "driftig", "drifting", - "drinkes", "drinkers", - "druming", "drumming", - "duailty", "duality", - "dualtiy", "duality", - "dubsetp", "dubstep", - "dulaity", "duality", - "duleing", "dueling", - "dunegon", "dungeon", - "dungeos", "dungeons", - "dungoen", "dungeon", - "durring", "during", - "dusbtep", "dubstep", - "dyansty", "dynasty", - "dynamis", "dynamics", - "dynsaty", "dynasty", - "earlies", "earliest", - "earliet", "earliest", - "earplus", "earplugs", - "eastwod", "eastwood", - "ebcuase", "becuase", - "ecilpse", "eclipse", - "eclipes", "eclipse", - "eclispe", "eclipse", - "eclpise", "eclipse", - "ectsasy", "ecstasy", - "edbiles", "edibles", - "edibels", "edibles", - "effords", "efforts", - "ehtanol", "ethanol", - "eifnach", "einfach", - "eighten", "eighteen", - "einfahc", "einfach", - "elasped", "elapsed", - "elcipse", "eclipse", - "elction", "election", - "elecrto", "electro", - "electic", "electric", - "electon", "election", - "ellitot", "elliott", - "elloitt", "elliott", - "elphant", "elephant", - "emabrgo", "embargo", - "emabssy", "embassy", - "emapthy", "empathy", - "embeded", "embedded", - "embrago", "embargo", - "eminate", "emanate", - "emipres", "empires", - "emision", "emission", - "emiting", "emitting", - "emition", "emission", - "emmited", "emitted", - "empahty", "empathy", - "emphsis", "emphasis", - "empiers", "empires", - "empited", "emptied", - "emplore", "employer", - "emporer", "emperor", - "empries", "empires", - "emtpied", "emptied", - "enameld", "enameled", - "encahnt", "enchant", - "encalve", "enclave", - "encrpyt", "encrypt", - "encyrpt", "encrypt", - "endores", "endorse", - "endrose", "endorse", - "energis", "energies", - "enforse", "enforces", - "enginer", "engineer", - "englsih", "english", - "enhanse", "enhances", - "enlcave", "enclave", - "enlgish", "english", - "enlsave", "enslave", - "ensalve", "enslave", - "entbook", "netbook", - "entirey", "entirety", - "entorpy", "entropy", - "epiloge", "epilogue", - "episdoe", "episode", - "epsiode", "episode", - "epsorts", "esports", - "eptiome", "epitome", - "equiped", "equipped", - "erested", "arrested", - "escapse", "escapes", - "escpaes", "escapes", - "esctasy", "ecstasy", - "esporst", "esports", - "espreso", "espresso", - "esprots", "esports", - "essense", "essence", - "etherel", "ethereal", - "ethnaol", "ethanol", - "euphora", "euphoria", - "europen", "european", - "eurpean", "european", - "everets", "everest", - "everset", "everest", - "evloved", "evolved", - "evloves", "evolves", - "evovled", "evolved", - "evovles", "evolves", - "exaclty", "exactly", - "exahust", "exhaust", - "examind", "examined", - "exapnds", "expands", - "exatled", "exalted", - "excange", "exchange", - "excatly", "exactly", - "excells", "excels", - "exceprt", "excerpt", - "excluse", "excludes", - "excrept", "excerpt", - "exculde", "exclude", - "exelent", "excellent", - "exemple", "example", - "exerpts", "excerpts", - "exhasut", "exhaust", - "exhuast", "exhaust", - "exising", "existing", - "existet", "existent", - "exlated", "exalted", - "exlcude", "exclude", - "exliled", "exiled", - "exludes", "excludes", - "exmaple", "example", - "exoitcs", "exotics", - "expalin", "explain", - "expeced", "expected", - "expells", "expels", - "expiers", "expires", - "explict", "explicit", - "expliot", "exploit", - "explods", "explodes", - "explose", "explodes", - "expolde", "explode", - "expolit", "exploit", - "exposse", "exposes", - "expries", "expires", - "exsited", "existed", - "extered", "exerted", - "exterme", "extreme", - "extoics", "exotics", - "extreem", "extreme", - "extrems", "extremes", - "eyebals", "eyeballs", - "eyebros", "eyebrows", - "fabulos", "fabulous", - "facebok", "facebook", - "facepam", "facepalm", - "faclons", "falcons", - "facsism", "fascism", - "facsist", "fascist", - "failurs", "failures", - "faincee", "fiancee", - "falesly", "falsely", - "falired", "flaired", - "falshed", "flashed", - "falshes", "flashes", - "falsley", "falsely", - "falvors", "flavors", - "familes", "families", - "famoust", "famous", - "famousy", "famously", - "fanatsy", "fantasy", - "fantaic", "fanatic", - "faoming", "foaming", - "fascits", "fascist", - "fasicsm", "fascism", - "fasicst", "fascist", - "faslely", "falsely", - "fatiuge", "fatigue", - "febuary", "february", - "fecthed", "fetched", - "fecthes", "fetches", - "feminen", "feminine", - "feminie", "feminine", - "feminim", "feminism", - "feodras", "fedoras", - "fertily", "fertility", - "fesitve", "festive", - "fethced", "fetched", - "fethces", "fetches", - "fetishs", "fetishes", - "fianite", "finite", - "fianlly", "finally", - "fiercly", "fiercely", - "filcker", "flicker", - "filpped", "flipped", - "filterd", "filtered", - "finacee", "fiancee", - "fineses", "finesse", - "fininsh", "finnish", - "finishs", "finishes", - "finisse", "finishes", - "finnsih", "finnish", - "firends", "friends", - "firggin", "friggin", - "firsbee", "frisbee", - "firslty", "firstly", - "firtsly", "firstly", - "fitlers", "filters", - "flacons", "falcons", - "flahsed", "flashed", - "flahses", "flashes", - "flaried", "flaired", - "flasely", "falsely", - "flashig", "flashing", - "flavord", "flavored", - "flavous", "flavours", - "flawess", "flawless", - "flciker", "flicker", - "fliters", "filters", - "flordia", "florida", - "florene", "florence", - "fnaatic", "fanatic", - "fomaing", "foaming", - "fonetic", "phonetic", - "forefit", "forfeit", - "foregin", "foreign", - "foreing", "foreign", - "forfiet", "forfeit", - "forhead", "forehead", - "foriegn", "foreign", - "formaly", "formally", - "formery", "formerly", - "formost", "foremost", - "formual", "formula", - "formuls", "formulas", - "forrset", "forrest", - "forsakn", "forsaken", - "forsane", "forsaken", - "forumla", "formula", - "fountan", "fountain", - "fourten", "fourteen", - "fracter", "fracture", - "fragmet", "fragment", - "freedos", "freedoms", - "freinds", "friends", - "frigign", "friggin", - "fristly", "firstly", - "frostig", "frosting", - "frsibee", "frisbee", - "fruitin", "fruition", - "fullets", "fullest", - "fullset", "fullest", - "funides", "fundies", - "funtion", "function", - "furance", "furnace", - "furncae", "furnace", - "futhroc", "futhark", - "gadgest", "gadgets", - "gagdets", "gadgets", - "galatic", "galactic", - "galcier", "glacier", - "galsgow", "glasgow", - "gameply", "gameplay", - "gamerga", "gamertag", - "gankign", "ganking", - "ganster", "gangster", - "garabge", "garbage", - "garfied", "garfield", - "garnola", "granola", - "generas", "generals", - "genersl", "generals", - "geniuss", "geniuses", - "geogria", "georgia", - "geomety", "geometry", - "georiga", "georgia", - "gernade", "grenade", - "gerogia", "georgia", - "gigabye", "gigabyte", - "giltchy", "glitchy", - "gimmics", "gimmicks", - "gimmicy", "gimmicky", - "girzzly", "grizzly", - "glagsow", "glasgow", - "glaicer", "glacier", - "glicthy", "glitchy", - "glimpes", "glimpse", - "glimspe", "glimpse", - "glipmse", "glimpse", - "glitchd", "glitched", - "glitchs", "glitches", - "glithcy", "glitchy", - "globaly", "globally", - "gloiath", "goliath", - "glorios", "glorious", - "gltichy", "glitchy", - "gnaking", "ganking", - "gnawwed", "gnawed", - "goddanm", "goddamn", - "goddman", "goddamn", - "godliek", "godlike", - "godlman", "goldman", - "godsped", "godspeed", - "goergia", "georgia", - "goilath", "goliath", - "golaith", "goliath", - "golbins", "goblins", - "goldamn", "goldman", - "goldbeg", "goldberg", - "goldike", "godlike", - "golitah", "goliath", - "goodluk", "goodluck", - "gorumet", "gourmet", - "gosepls", "gospels", - "gosples", "gospels", - "gpysies", "gypsies", - "grabage", "garbage", - "grahpic", "graphic", - "grainte", "granite", - "grammer", "grammar", - "graniet", "granite", - "grantie", "granite", - "graphie", "graphite", - "graphis", "graphics", - "grappel", "grapple", - "greande", "grenade", - "grenads", "grenades", - "greneer", "greener", - "griaffe", "giraffe", - "gridles", "griddles", - "grillig", "grilling", - "grpahic", "graphic", - "guardin", "guardian", - "guiness", "guinness", - "gullibe", "gullible", - "gutiars", "guitars", - "gypises", "gypsies", - "gyspies", "gypsies", - "habaeus", "habeas", - "haethen", "heathen", - "hailfax", "halifax", - "halfiax", "halifax", - "handbok", "handbook", - "handedy", "handedly", - "handeld", "handled", - "hanlder", "handler", - "hannibl", "hannibal", - "hanuted", "haunted", - "haorder", "hoarder", - "hapened", "happened", - "happend", "happened", - "happliy", "happily", - "harased", "harassed", - "harases", "harasses", - "hardend", "hardened", - "hardwod", "hardwood", - "haricut", "haircut", - "hatchig", "hatching", - "hauntig", "haunting", - "haviest", "heaviest", - "headest", "headset", - "headses", "headsets", - "heaveny", "heavenly", - "heigher", "higher", - "heigths", "heights", - "helemts", "helmets", - "hellfie", "hellfire", - "hellvua", "helluva", - "helment", "helmet", - "helpped", "helped", - "hemlets", "helmets", - "henious", "heinous", - "heorics", "heroics", - "heorine", "heroine", - "heriocs", "heroics", - "herione", "heroine", - "herocis", "heroics", - "heronie", "heroine", - "hesiman", "heisman", - "hieghts", "heights", - "hienous", "heinous", - "hiesman", "heisman", - "himselv", "himself", - "hiptser", "hipster", - "hismelf", "himself", - "hispter", "hipster", - "hitboxs", "hitboxes", - "hoilday", "holiday", - "hokpins", "hopkins", - "holdiay", "holiday", - "holdins", "holdings", - "homniem", "hominem", - "horader", "hoarder", - "hosited", "hoisted", - "hosthot", "hotshot", - "hostles", "hostels", - "hostpot", "hotspot", - "hothsot", "hotshot", - "hotpsot", "hotspot", - "hotsopt", "hotspot", - "hounour", "honour", - "hseldon", "sheldon", - "huanted", "haunted", - "humanit", "humanist", - "humants", "humanist", - "humidiy", "humidity", - "humoros", "humorous", - "hunagry", "hungary", - "hunderd", "hundred", - "hundres", "hundreds", - "hungray", "hungary", - "hurdels", "hurdles", - "hurldes", "hurdles", - "husbans", "husbands", - "hweaton", "wheaton", - "hybirds", "hybrids", - "hydogen", "hydrogen", - "hygeine", "hygiene", - "hypnoss", "hypnosis", - "hyrbids", "hybrids", - "hystera", "hysteria", - "iceforg", "icefrog", - "ierland", "ireland", - "ignitin", "ignition", - "ignorat", "ignorant", - "illegas", "illegals", - "illegsl", "illegals", - "illinos", "illinois", - "imanent", "eminent", - "imapcts", "impacts", - "iminent", "eminent", - "imminet", "imminent", - "implict", "implicit", - "imploed", "implode", - "imploys", "employs", - "impluse", "impulse", - "impolde", "implode", - "importd", "imported", - "imporve", "improve", - "impules", "impulse", - "impusle", "impulse", - "imrpove", "improve", - "incldue", "include", - "incluse", "includes", - "indains", "indians", - "indiaan", "indiana", - "indluge", "indulge", - "indugle", "indulge", - "infalte", "inflate", - "infenro", "inferno", - "infered", "inferred", - "inferir", "inferior", - "infinet", "infinite", - "infinie", "infinite", - "infinit", "infinite", - "infornt", "infront", - "infroms", "informs", - "infrotn", "infront", - "inheirt", "inherit", - "inidans", "indians", - "initals", "initials", - "initisl", "initials", - "inlcine", "incline", - "inovker", "invoker", - "inpeach", "impeach", - "inpsect", "inspect", - "inpsire", "inspire", - "inquier", "inquire", - "inquriy", "inquiry", - "insaney", "insanely", - "inscets", "insects", - "insepct", "inspect", - "insipre", "inspire", - "insluts", "insults", - "instade", "instead", - "instint", "instinct", - "intenst", "intents", - "intered", "interred", - "interet", "interest", - "internt", "internet", - "interro", "interior", - "intrest", "interest", - "intrige", "intrigue", - "invlove", "involve", - "invoekr", "invoker", - "invovle", "involve", - "iornman", "ironman", - "iranain", "iranian", - "iranias", "iranians", - "iranina", "iranian", - "irleand", "ireland", - "ironamn", "ironman", - "isalmic", "islamic", - "isareli", "israeli", - "islamit", "islamist", - "islmaic", "islamic", - "isloate", "isolate", - "isralei", "israeli", - "isreali", "israeli", - "italias", "italians", - "jagaurs", "jaguars", - "jaguras", "jaguars", - "jamacia", "jamaica", - "jamaina", "jamaican", - "jamiaca", "jamaica", - "jamsine", "jasmine", - "janaury", "january", - "januray", "january", - "japanes", "japanese", - "jasmien", "jasmine", - "jaugars", "jaguars", - "jaunary", "january", - "jeircho", "jericho", - "jennins", "jennings", - "jeopary", "jeopardy", - "jeresys", "jerseys", - "jericoh", "jericho", - "jersyes", "jerseys", - "jewerly", "jewelry", - "jorunal", "journal", - "jounral", "journal", - "joystik", "joystick", - "juadism", "judaism", - "judasim", "judaism", - "judical", "judicial", - "juipter", "jupiter", - "junglig", "jungling", - "juptier", "jupiter", - "jusitfy", "justify", - "justfiy", "justify", - "karakoe", "karaoke", - "karoake", "karaoke", - "kenendy", "kennedy", - "kenndey", "kennedy", - "kentucy", "kentucky", - "keyboad", "keyboard", - "keychan", "keychain", - "keynode", "keynote", - "kicthen", "kitchen", - "killins", "killings", - "kineitc", "kinetic", - "kinghts", "knights", - "kinteic", "kinetic", - "kitches", "kitchens", - "kitites", "kitties", - "knietic", "kinetic", - "knigths", "knights", - "knuckel", "knuckle", - "kroeans", "koreans", - "krudish", "kurdish", - "ktichen", "kitchen", - "kubirck", "kubrick", - "kunckle", "knuckle", - "kurbick", "kubrick", - "kuridsh", "kurdish", - "laguage", "language", - "landins", "landings", - "lantren", "lantern", - "laready", "already", - "laregly", "largely", - "largley", "largely", - "lasanga", "lasagna", - "lasgana", "lasagna", - "latitue", "latitude", - "latnern", "lantern", - "launhed", "launched", - "lavendr", "lavender", - "leathal", "lethal", - "lefitst", "leftist", - "leftits", "leftist", - "legnths", "lengths", - "legnthy", "lengthy", - "legoins", "legions", - "leigons", "legions", - "lenghts", "lengths", - "lenoard", "leonard", - "lepoard", "leopard", - "lesbain", "lesbian", - "lesiban", "lesbian", - "lesiure", "leisure", - "liasion", "liaison", - "liasons", "liaisons", - "liberae", "liberate", - "liberas", "liberals", - "lienups", "lineups", - "liesure", "leisure", - "liftime", "lifetime", - "lighlty", "lightly", - "lightes", "lighters", - "ligthly", "lightly", - "linclon", "lincoln", - "linueps", "lineups", - "liqiuds", "liquids", - "lisence", "license", - "lisense", "license", - "listend", "listened", - "litecon", "litecoin", - "literae", "literate", - "lithuim", "lithium", - "litihum", "lithium", - "loadous", "loadouts", - "loenard", "leonard", - "loepard", "leopard", - "logiteh", "logitech", - "loosley", "loosely", - "luandry", "laundry", - "luckliy", "luckily", - "luicfer", "lucifer", - "lunatis", "lunatics", - "maching", "machine", - "machins", "machines", - "maclolm", "malcolm", - "macthup", "matchup", - "madsion", "madison", - "magents", "magnets", - "magicin", "magician", - "magolia", "magnolia", - "maidson", "madison", - "maintan", "maintain", - "mairlyn", "marilyn", - "malaira", "malaria", - "malaysa", "malaysia", - "malclom", "malcolm", - "manauls", "manuals", - "mandase", "mandates", - "mandats", "mandates", - "mangeld", "mangled", - "mangets", "magnets", - "manualy", "manually", - "manuver", "maneuver", - "marbels", "marbles", - "margart", "margaret", - "mariage", "marriage", - "mariens", "marines", - "maritan", "martian", - "marixsm", "marxism", - "mariyln", "marilyn", - "markede", "marketed", - "marlbes", "marbles", - "marliyn", "marilyn", - "marnies", "marines", - "marrage", "marriage", - "martail", "martial", - "martain", "martian", - "masacra", "mascara", - "massace", "massacre", - "mathcup", "matchup", - "mathwes", "mathews", - "matrial", "martial", - "maunals", "manuals", - "mcalren", "mclaren", - "meanins", "meanings", - "medicad", "medicaid", - "medicae", "medicare", - "medioce", "mediocre", - "meixcan", "mexican", - "meldoic", "melodic", - "melieux", "milieux", - "melodis", "melodies", - "memeber", "member", - "memoery", "memory", - "memorie", "memory", - "menally", "mentally", - "mentaly", "mentally", - "meoldic", "melodic", - "meranda", "veranda", - "merchat", "merchant", - "merucry", "mercury", - "messagd", "messaged", - "messaih", "messiah", - "metagem", "metagame", - "metalic", "metallic", - "mexcian", "mexican", - "michina", "michigan", - "midfied", "midfield", - "midotwn", "midtown", - "midtwon", "midtown", - "migrans", "migrants", - "militat", "militant", - "militis", "militias", - "miltary", "military", - "mimimum", "minimum", - "mineras", "minerals", - "mininos", "minions", - "ministr", "minister", - "ministy", "ministry", - "minoins", "minions", - "minstry", "ministry", - "minumum", "minimum", - "mirrord", "mirrored", - "misandy", "misandry", - "misison", "mission", - "misouri", "missouri", - "mispell", "misspell", - "missils", "missiles", - "mistery", "mystery", - "mobiliy", "mobility", - "modualr", "modular", - "momento", "memento", - "momment", "moment", - "monarcy", "monarchy", - "monatge", "montage", - "monglos", "mongols", - "monitos", "monitors", - "monstre", "monster", - "montaeg", "montage", - "montrel", "montreal", - "monumet", "monument", - "morbidy", "morbidly", - "morgage", "mortgage", - "morphen", "morphine", - "morphie", "morphine", - "morroco", "morocco", - "mortage", "mortgage", - "mosnter", "monster", - "mosture", "moisture", - "motivet", "motivate", - "motnage", "montage", - "motoral", "motorola", - "mountan", "mountain", - "movment", "movement", - "mucuous", "mucous", - "muesums", "museums", - "muliple", "multiple", - "mulsims", "muslims", - "multipe", "multiple", - "multipy", "multiply", - "munbers", "numbers", - "munchis", "munchies", - "murderd", "murdered", - "muscial", "musical", - "mushrom", "mushroom", - "musilms", "muslims", - "muslces", "muscles", - "musuems", "museums", - "mutatin", "mutation", - "mypsace", "myspace", - "mysapce", "myspace", - "napolen", "napoleon", - "narhwal", "narwhal", - "natique", "antique", - "nativey", "natively", - "natrual", "natural", - "naugthy", "naughty", - "nauseos", "nauseous", - "nautils", "nautilus", - "nautral", "natural", - "nautres", "natures", - "nectode", "netcode", - "needels", "needles", - "neruons", "neurons", - "neslave", "enslave", - "netocde", "netcode", - "netowrk", "network", - "netural", "neutral", - "neturon", "neutron", - "netwrok", "network", - "neurton", "neutron", - "neuterd", "neutered", - "nighlty", "nightly", - "nigthly", "nightly", - "nihilim", "nihilism", - "ninties", "1990s", - "niverse", "inverse", - "nocture", "nocturne", - "nominae", "nominate", - "nominet", "nominate", - "nonsene", "nonsense", - "noramls", "normals", - "norhern", "northern", - "normaly", "normally", - "normany", "normandy", - "northen", "northern", - "nostris", "nostrils", - "notario", "ontario", - "notebok", "notebook", - "nothern", "northern", - "nowdays", "nowadays", - "nrivana", "nirvana", - "nuaghty", "naughty", - "nubmers", "numbers", - "nucelar", "nuclear", - "nucelus", "nucleus", - "nuclean", "unclean", - "nuclues", "nucleus", - "nucular", "nuclear", - "nuerons", "neurons", - "nuetral", "neutral", - "nuetron", "neutron", - "nulcear", "nuclear", - "nullfiy", "nullify", - "nusance", "nuisance", - "nutriet", "nutrient", - "oarcles", "oracles", - "obivous", "obvious", - "obvoius", "obvious", - "ocarnia", "ocarina", - "ocasion", "occasion", - "occured", "occurred", - "ocotber", "october", - "ocotpus", "octopus", - "ocraina", "ocarina", - "ocuntry", "country", - "ocurred", "occurred", - "ofcoure", "ofcourse", - "offcers", "officers", - "offical", "official", - "offisde", "offside", - "oftenly", "often", - "ogrilla", "gorilla", - "olmypic", "olympic", - "olreans", "orleans", - "olympis", "olympics", - "olypmic", "olympic", - "omision", "omission", - "omiting", "omitting", - "omlette", "omelette", - "ommited", "omitted", - "onatrio", "ontario", - "onbaord", "onboard", - "onborad", "onboard", - "ontairo", "ontario", - "ontraio", "ontario", - "opartor", "operator", - "openess", "openness", - "opitcal", "optical", - "opitmal", "optimal", - "oponent", "opponent", - "oposite", "opposite", - "oppenly", "openly", - "opponet", "opponent", - "oprhans", "orphans", - "optimim", "optimism", - "oracels", "oracles", - "oragnes", "oranges", - "oragsms", "orgasms", - "oralces", "oracles", - "orbtial", "orbital", - "orcales", "oracles", - "orelans", "orleans", - "organes", "organise", - "organie", "organise", - "organim", "organism", - "orginal", "original", - "orhpans", "orphans", - "oribtal", "orbital", - "orlenas", "orleans", - "orpahns", "orphans", - "orthodx", "orthodox", - "outfied", "outfield", - "outsidr", "outsider", - "overhal", "overhaul", - "overpad", "overpaid", - "oversue", "overuse", - "overtun", "overturn", - "ownders", "wonders", - "owuldve", "wouldve", - "oylmpic", "olympic", - "pacakge", "package", - "pacifit", "pacifist", - "packade", "packaged", - "pacthes", "patches", - "pahntom", "phantom", - "paitent", "patient", - "palcebo", "placebo", - "pallete", "palette", - "palster", "plaster", - "palyboy", "playboy", - "pamflet", "pamphlet", - "pamplet", "pamphlet", - "pancaks", "pancakes", - "pandroa", "pandora", - "panthen", "pantheon", - "paradim", "paradigm", - "paradse", "parades", - "paralel", "parallel", - "paranoa", "paranoia", - "parises", "praises", - "parites", "parties", - "partice", "particle", - "partick", "patrick", - "partiel", "particle", - "partiot", "patriot", - "partols", "patrols", - "passabe", "passable", - "passivs", "passives", - "pasuing", "pausing", - "pateint", "patient", - "pathces", "patches", - "patiens", "patients", - "patirot", "patriot", - "patrcik", "patrick", - "patrios", "patriots", - "patroit", "patriot", - "peaples", "peoples", - "pebbels", "pebbles", - "peirced", "pierced", - "penatly", "penalty", - "pendulm", "pendulum", - "penguis", "penguins", - "penicls", "pencils", - "penison", "pension", - "penisse", "penises", - "penitum", "pentium", - "pensies", "penises", - "pensino", "pension", - "pentuim", "pentium", - "peopels", "peoples", - "percise", "precise", - "perdict", "predict", - "perfers", "prefers", - "perhasp", "perhaps", - "perhpas", "perhaps", - "perisan", "persian", - "perjery", "perjury", - "permade", "premade", - "permier", "premier", - "permise", "premise", - "permium", "premium", - "peroids", "periods", - "peronal", "personal", - "perpaid", "prepaid", - "perphas", "perhaps", - "persain", "persian", - "persets", "presets", - "persits", "persist", - "persued", "pursued", - "persuit", "pursuit", - "pervail", "prevail", - "perview", "preview", - "pharoah", "pharaoh", - "phatnom", "phantom", - "phsyics", "physics", - "phyiscs", "physics", - "physcis", "physics", - "physiqe", "physique", - "picthed", "pitched", - "picther", "pitcher", - "picthes", "pitches", - "piegons", "pigeons", - "piglrim", "pilgrim", - "pigoens", "pigeons", - "pilgirm", "pilgrim", - "pilrgim", "pilgrim", - "pinoeer", "pioneer", - "pinpoit", "pinpoint", - "pionere", "pioneer", - "pireced", "pierced", - "pithces", "pitches", - "plantes", "planets", - "plastis", "plastics", - "plastre", "plaster", - "plataeu", "plateau", - "plateua", "plateau", - "playabe", "playable", - "playofs", "playoffs", - "plesant", "pleasant", - "pligrim", "pilgrim", - "ploygon", "polygon", - "ploymer", "polymer", - "podemso", "podemos", - "podmeos", "podemos", - "poeples", "peoples", - "poignat", "poignant", - "poineer", "pioneer", - "pointes", "pointers", - "poisond", "poisoned", - "polgyon", "polygon", - "polical", "political", - "polishs", "polishes", - "polisse", "polishes", - "politey", "politely", - "poluted", "polluted", - "polutes", "pollutes", - "popluar", "popular", - "populer", "popular", - "populos", "populous", - "porpose", "propose", - "porshan", "portion", - "porshon", "portion", - "portait", "portrait", - "portary", "portray", - "portras", "portrays", - "portrat", "portrait", - "posions", "poisons", - "positon", "position", - "positve", "positive", - "possiby", "possibly", - "postdam", "potsdam", - "postion", "position", - "postive", "positive", - "potatos", "potatoes", - "potical", "optical", - "potrait", "portrait", - "powderd", "powdered", - "poweful", "powerful", - "poylgon", "polygon", - "poylmer", "polymer", - "practie", "practise", - "praisse", "praises", - "praries", "prairies", - "prasied", "praised", - "prasies", "praises", - "pratice", "practice", - "preamde", "premade", - "preceed", "precede", - "precice", "precise", - "preests", "presets", - "prehaps", "perhaps", - "preimer", "premier", - "preimum", "premium", - "preists", "priests", - "preivew", "preview", - "premeir", "premier", - "premiee", "premiere", - "premire", "premier", - "premits", "permits", - "premius", "premiums", - "premuim", "premium", - "prepair", "prepare", - "preriod", "period", - "presens", "presents", - "presest", "presets", - "presist", "persist", - "prestes", "presets", - "presude", "presumed", - "pretene", "pretense", - "pretens", "pretends", - "preveiw", "preview", - "prevert", "pervert", - "previal", "prevail", - "previes", "previews", - "previos", "previous", - "priased", "praised", - "priases", "praises", - "printes", "printers", - "pristen", "pristine", - "probabe", "probable", - "probaly", "probably", - "probelm", "problem", - "procede", "proceed", - "procees", "proceeds", - "procesd", "proceeds", - "proclam", "proclaim", - "produly", "proudly", - "produse", "produces", - "progidy", "prodigy", - "progrom", "pogrom", - "prohibt", "prohibit", - "prohpet", "prophet", - "prologe", "prologue", - "promose", "promotes", - "promots", "promotes", - "prompty", "promptly", - "promtps", "prompts", - "pronous", "pronouns", - "prooved", "proved", - "propeht", "prophet", - "prophey", "prophecy", - "propper", "proper", - "protals", "portals", - "protecs", "protects", - "protess", "protests", - "protocl", "protocol", - "protray", "portray", - "prouldy", "proudly", - "provded", "provided", - "provine", "province", - "prusuit", "pursuit", - "pryamid", "pyramid", - "pscyhed", "psyched", - "ptiched", "pitched", - "pticher", "pitcher", - "puasing", "pausing", - "publicy", "publicly", - "publsih", "publish", - "puhsups", "pushups", - "punishs", "punishes", - "punisse", "punishes", - "pursiut", "pursuit", - "pursude", "pursued", - "purused", "pursued", - "pushpus", "pushups", - "pyarmid", "pyramid", - "pyramis", "pyramids", - "pyrmaid", "pyramid", - "pysched", "psyched", - "qaulify", "qualify", - "qaulity", "quality", - "qauntum", "quantum", - "quailfy", "qualify", - "quailty", "quality", - "queires", "queries", - "queitly", "quietly", - "quereis", "queries", - "quicket", "quickest", - "quielty", "quietly", - "quitely", "quietly", - "qunatum", "quantum", - "qunetin", "quentin", - "racisst", "racists", - "racthet", "ratchet", - "radaint", "radiant", - "radiane", "radiance", - "radicas", "radicals", - "radiers", "raiders", - "raelism", "realism", - "raidant", "radiant", - "railrod", "railroad", - "rainbos", "rainbows", - "raoches", "roaches", - "raoming", "roaming", - "raptros", "raptors", - "raputre", "rapture", - "rathcet", "ratchet", - "ratpure", "rapture", - "reacing", "reaching", - "reagrds", "regards", - "realies", "realise", - "realsie", "realise", - "realsim", "realism", - "realtes", "relates", - "reamins", "remains", - "reapirs", "repairs", - "rebouns", "rebounds", - "rebulit", "rebuilt", - "recalim", "reclaim", - "receips", "receipts", - "recided", "resided", - "reciept", "receipt", - "recievd", "recieved", - "recieve", "receive", - "recitfy", "rectify", - "recived", "received", - "reclami", "reclaim", - "recliam", "reclaim", - "recorre", "recorder", - "recoves", "recovers", - "recpies", "recipes", - "redeemd", "redeemed", - "redners", "renders", - "refelct", "reflect", - "referal", "referral", - "refered", "referred", - "referig", "refering", - "referrs", "refers", - "reflexs", "reflexes", - "refrers", "refers", - "refroms", "reforms", - "refusla", "refusal", - "regerts", "regrets", - "regiems", "regimes", - "regimet", "regiment", - "registy", "registry", - "regluar", "regular", - "regrest", "regrets", - "regulae", "regulate", - "regulas", "regulars", - "regulsr", "regulars", - "reigmes", "regimes", - "reigons", "regions", - "reitres", "retires", - "reivews", "reviews", - "reknown", "renown", - "relaise", "realise", - "relapes", "relapse", - "relaspe", "relapse", - "relatie", "relative", - "relatin", "relation", - "relcaim", "reclaim", - "releive", "relieve", - "releses", "releases", - "relfect", "reflect", - "reliabe", "reliable", - "relient", "reliant", - "relized", "realised", - "relpase", "relapse", - "remaind", "remained", - "remaing", "remaining", - "remakrs", "remarks", - "remannt", "remnant", - "remeber", "remember", - "remians", "remains", - "remnans", "remnants", - "renderd", "rendered", - "renegae", "renegade", - "renmant", "remnant", - "rentors", "renters", - "rentres", "renters", - "renuion", "reunion", - "repaird", "repaired", - "repalys", "replays", - "repblic", "republic", - "repeast", "repeats", - "repitle", "reptile", - "replase", "replaces", - "replayd", "replayed", - "reponse", "response", - "repostd", "reposted", - "repsawn", "respawn", - "repsond", "respond", - "repsots", "reposts", - "reptiel", "reptile", - "reptils", "reptiles", - "repubic", "republic", - "republi", "republic", - "repulic", "republic", - "reqiuem", "requiem", - "requeim", "requiem", - "requime", "requiem", - "requred", "required", - "resapwn", "respawn", - "rescuse", "rescues", - "resembe", "resemble", - "reslove", "resolve", - "resolvs", "resolves", - "resonet", "resonate", - "resovle", "resolve", - "respest", "respects", - "respone", "response", - "respwan", "respawn", - "ressits", "resists", - "restord", "restored", - "resuced", "rescued", - "resuces", "rescues", - "returnd", "returned", - "reuinon", "reunion", - "reveald", "revealed", - "reveiws", "reviews", - "revelas", "reveals", - "reveral", "reversal", - "reviere", "reviewer", - "reviewd", "reviewed", - "reviewr", "reviewer", - "revolvr", "revolver", - "revolvs", "revolves", - "rewirte", "rewrite", - "reworkd", "reworked", - "rewriet", "rewrite", - "reynols", "reynolds", - "rhapsoy", "rhapsody", - "rhythem", "rhythm", - "rhythim", "rhythm", - "rhytmic", "rhythmic", - "riaders", "raiders", - "ritlain", "ritalin", - "ritoers", "rioters", - "rivarly", "rivalry", - "rivlary", "rivalry", - "roahces", "roaches", - "robotis", "robotics", - "rococco", "rococo", - "roestta", "rosetta", - "roiters", "rioters", - "roleply", "roleplay", - "romaina", "romania", - "romaing", "roaming", - "romanin", "romanian", - "romanna", "romanian", - "roomate", "roommate", - "rotuers", "routers", - "rugters", "rutgers", - "rulebok", "rulebook", - "rumorus", "rumours", - "rumuors", "rumours", - "runnung", "running", - "ruslted", "rustled", - "russina", "russian", - "russion", "russian", - "rusteld", "rustled", - "rythmic", "rhythmic", - "rythyms", "rhythms", - "sacrasm", "sarcasm", - "saddnes", "saddens", - "sadistc", "sadistic", - "sadning", "sanding", - "salaris", "salaries", - "salavge", "salvage", - "salvery", "slavery", - "salying", "slaying", - "sampels", "samples", - "samruai", "samurai", - "samuari", "samurai", - "samuria", "samurai", - "sandlas", "sandals", - "sandnig", "sanding", - "sanlder", "sandler", - "santorm", "santorum", - "sapphie", "sapphire", - "sarcams", "sarcasm", - "sargant", "sergeant", - "sasuage", "sausage", - "satifsy", "satisfy", - "satsify", "satisfy", - "satsohi", "satoshi", - "savanha", "savannah", - "savannh", "savannah", - "saveing", "saving", - "sawnsea", "swansea", - "sawnson", "swanson", - "scandas", "scandals", - "scannig", "scanning", - "scartch", "scratch", - "scheems", "schemes", - "schoold", "schooled", - "sciense", "sciences", - "scinece", "science", - "scootes", "scooters", - "scorpin", "scorpion", - "scpeter", "scepter", - "scracth", "scratch", - "scrambe", "scramble", - "scritps", "scripts", - "scrolld", "scrolled", - "scrpits", "scripts", - "scyhter", "scyther", - "seached", "searched", - "seaches", "searches", - "seahaws", "seahawks", - "seantor", "senator", - "searchd", "searched", - "searchs", "searches", - "sebrian", "serbian", - "secerts", "secrets", - "secpter", "scepter", - "secrest", "secrets", - "secrety", "secretly", - "seflies", "selfies", - "seguoys", "segues", - "seinors", "seniors", - "selifes", "selfies", - "senoirs", "seniors", - "sensure", "censure", - "sentaor", "senator", - "sentris", "sentries", - "serbain", "serbian", - "sergeat", "sergeant", - "sergent", "sergeant", - "seriban", "serbian", - "servans", "servants", - "sesnors", "sensors", - "settins", "settings", - "severly", "severely", - "sexualy", "sexually", - "seziure", "seizure", - "shaddow", "shadow", - "shanghi", "shanghai", - "shaprie", "sharpie", - "shaprly", "sharply", - "sharipe", "sharpie", - "shcemes", "schemes", - "sheelpe", "sheeple", - "sheepel", "sheeple", - "shephed", "shepherd", - "sherlok", "sherlock", - "shetler", "shelter", - "shevles", "shelves", - "shfiter", "shifter", - "shieldd", "shielded", - "shiping", "shipping", - "shirely", "shirley", - "shitfer", "shifter", - "shledon", "sheldon", - "shleter", "shelter", - "shoudln", "should", - "shouldt", "shouldnt", - "shoutot", "shoutout", - "showede", "showered", - "showerd", "showered", - "shperes", "spheres", - "shriley", "shirley", - "siblins", "siblings", - "sidelen", "sideline", - "sideral", "sidereal", - "siezing", "seizing", - "siezure", "seizure", - "signfiy", "signify", - "signins", "signings", - "signles", "singles", - "silders", "sliders", - "silenty", "silently", - "similir", "similiar", - "simliar", "similar", - "simplet", "simplest", - "simpley", "simply", - "simplfy", "simplify", - "simpliy", "simplify", - "simposn", "simpson", - "simspon", "simpson", - "singals", "signals", - "singels", "singles", - "singify", "signify", - "singsog", "singsong", - "sitmuli", "stimuli", - "skecthy", "sketchy", - "skeletl", "skeletal", - "skeptis", "skeptics", - "sketchs", "sketches", - "sketpic", "skeptic", - "skpetic", "skeptic", - "sktechy", "sketchy", - "skwyard", "skyward", - "slavage", "salvage", - "slayign", "slaying", - "sldiers", "sliders", - "slefies", "selfies", - "slighly", "slightly", - "slighty", "slightly", - "slippes", "slippers", - "slippey", "slippery", - "smaples", "samples", - "smartre", "smarter", - "smaurai", "samurai", - "snadler", "sandler", - "snigles", "singles", - "snippes", "snippets", - "snodwen", "snowden", - "snwoden", "snowden", - "snycing", "syncing", - "snyergy", "synergy", - "socialy", "socially", - "sofware", "software", - "soildly", "solidly", - "soldies", "soldiers", - "soldily", "solidly", - "somaila", "somalia", - "someons", "someones", - "somethn", "somethin", - "southen", "southern", - "soveits", "soviets", - "spacebr", "spacebar", - "spainsh", "spanish", - "spansih", "spanish", - "spanwed", "spawned", - "sparkel", "sparkle", - "spartas", "spartans", - "spartsn", "spartans", - "sparyed", "sprayed", - "spawend", "spawned", - "spawnig", "spawning", - "specail", "special", - "specfic", "specific", - "specias", "specials", - "specisl", "specials", - "spectum", "spectrum", - "speechs", "speeches", - "spehres", "spheres", - "speical", "special", - "speices", "species", - "spellig", "spelling", - "spindel", "spindle", - "spiritd", "spirited", - "splaton", "splatoon", - "splittr", "splitter", - "spoiles", "spoilers", - "spoitfy", "spotify", - "spolied", "spoiled", - "sponser", "sponsor", - "sporles", "sproles", - "sporuts", "sprouts", - "spotfiy", "spotify", - "sprinke", "sprinkle", - "sproels", "sproles", - "spwaned", "spawned", - "sqaures", "squares", - "sqeuaky", "squeaky", - "sqiushy", "squishy", - "squarey", "squarely", - "squirel", "squirtle", - "squirle", "squirrel", - "squirrl", "squirrel", - "squirte", "squirtle", - "squsihy", "squishy", - "sriraca", "sriracha", - "srpouts", "sprouts", - "sryians", "syrians", - "sryinge", "syringe", - "stadius", "stadiums", - "staduim", "stadium", - "stagnat", "stagnant", - "staidum", "stadium", - "stakler", "stalker", - "stalkes", "stalkers", - "stamnia", "stamina", - "staoshi", "satoshi", - "starins", "strains", - "startde", "startled", - "startus", "startups", - "statits", "statist", - "statsit", "statist", - "statuer", "stature", - "statuse", "statutes", - "statuts", "statutes", - "stautes", "statues", - "stealty", "stealthy", - "steeles", "steelers", - "steorid", "steroid", - "steriel", "sterile", - "sterlie", "sterile", - "stickes", "stickers", - "stiring", "stirring", - "stirker", "striker", - "stirrig", "stirring", - "stitchs", "stitches", - "stlaker", "stalker", - "stlyish", "stylish", - "storeis", "stories", - "storise", "stories", - "stormde", "stormed", - "straigt", "straight", - "straind", "strained", - "streamd", "streamed", - "stregth", "strength", - "strengh", "strength", - "streoid", "steroid", - "stresss", "stresses", - "strians", "strains", - "stricty", "strictly", - "striekr", "striker", - "stromed", "stormed", - "stubbon", "stubborn", - "studing", "studying", - "stuidos", "studios", - "stunami", "tsunami", - "stupidr", "stupider", - "stupidy", "stupidly", - "stupire", "stupider", - "suasage", "sausage", - "subisdy", "subsidy", - "subjest", "subjects", - "subtiel", "subtitle", - "succede", "succeed", - "succeds", "succeeds", - "succees", "succeeds", - "succesd", "succeeds", - "suceeds", "succeeds", - "suddeny", "suddenly", - "suefull", "usefull", - "sufferd", "suffered", - "summonr", "summoner", - "summore", "summoner", - "sunggle", "snuggle", - "sunifre", "sunfire", - "superme", "supreme", - "suposed", "supposed", - "suposes", "supposes", - "suppoed", "supposed", - "suppost", "supports", - "suprass", "surpass", - "supress", "suppress", - "suprisd", "suprised", - "suprise", "surprise", - "suprize", "surprise", - "supsend", "suspend", - "suround", "surround", - "surpeme", "supreme", - "surroud", "surround", - "sweidsh", "swedish", - "swiflty", "swiftly", - "swiming", "swimming", - "switchs", "switches", - "switfly", "swiftly", - "swnasea", "swansea", - "sycning", "syncing", - "sycther", "scyther", - "syirans", "syrians", - "sykward", "skyward", - "syllabe", "syllable", - "symetry", "symmetry", - "symmety", "symmetry", - "symobls", "symbols", - "sympaty", "sympathy", - "symtpom", "symptom", - "synegry", "synergy", - "synoynm", "synonym", - "sypmtom", "symptom", - "syracue", "syracuse", - "syrains", "syrians", - "sysadmn", "sysadmin", - "systemc", "systemic", - "sytlish", "stylish", - "tabacco", "tobacco", - "tailban", "taliban", - "tailord", "tailored", - "talbian", "taliban", - "tallets", "tallest", - "tangeld", "tangled", - "tanlged", "tangled", - "targetd", "targeted", - "taryvon", "trayvon", - "teached", "taught", - "teaspon", "teaspoon", - "techeis", "techies", - "tehcies", "techies", - "temepst", "tempest", - "tempels", "temples", - "tempets", "tempest", - "templas", "templars", - "tempset", "tempest", - "tenacle", "tentacle", - "tendacy", "tendency", - "tequlia", "tequila", - "tesitfy", "testify", - "testice", "testicle", - "teusday", "tuesday", - "thankyu", "thankyou", - "thearpy", "therapy", - "theistc", "theistic", - "theives", "thieves", - "themsef", "themself", - "therefo", "thereof", - "therien", "therein", - "theroem", "theorem", - "thesits", "theists", - "thiests", "theists", - "thirldy", "thirdly", - "thirten", "thirteen", - "thirtsy", "thirsty", - "thoerem", "theorem", - "thorats", "throats", - "thornes", "thrones", - "thoruim", "thorium", - "thoughs", "thoughts", - "threadd", "threaded", - "threeof", "thereof", - "thridly", "thirdly", - "thristy", "thirsty", - "throast", "throats", - "throium", "thorium", - "thryoid", "thyroid", - "thyorid", "thyroid", - "thyriod", "thyroid", - "tigther", "tighter", - "tiolets", "toilets", - "tirdent", "trident", - "titanim", "titanium", - "tlaking", "talking", - "tobbaco", "tobacco", - "toliets", "toilets", - "tolkein", "tolkien", - "tomatos", "tomatoes", - "tongiht", "tonight", - "tonuges", "tongues", - "toppins", "toppings", - "torando", "tornado", - "torndao", "tornado", - "torpdeo", "torpedo", - "torrest", "torrents", - "tortila", "tortilla", - "toruney", "tourney", - "toubles", "troubles", - "touchda", "touchpad", - "tounrey", "tourney", - "tourisy", "touristy", - "tourits", "tourist", - "tournes", "tourneys", - "toursim", "tourism", - "toursit", "tourist", - "towords", "towards", - "trackes", "trackers", - "trailes", "trailers", - "traines", "trainers", - "trainig", "training", - "tralier", "trailer", - "tratior", "traitor", - "traveld", "traveled", - "travere", "traverse", - "travesy", "travesty", - "travles", "travels", - "treasue", "treasure", - "treatis", "treaties", - "tremelo", "tremolo", - "trendig", "trending", - "trialer", "trailer", - "triange", "triangle", - "triator", "traitor", - "trickey", "trickery", - "tridnet", "trident", - "trimuph", "triumph", - "trinkes", "trinkets", - "trinkst", "trinkets", - "trintiy", "trinity", - "triolgy", "trilogy", - "troleld", "trolled", - "troling", "trolling", - "tronado", "tornado", - "tropedo", "torpedo", - "trudnle", "trundle", - "truimph", "triumph", - "trukish", "turkish", - "trundel", "trundle", - "trunlde", "trundle", - "tryahrd", "tryhard", - "tryavon", "trayvon", - "tsamina", "stamina", - "tsnuami", "tsunami", - "tsuanmi", "tsunami", - "tsunmai", "tsunami", - "tuesdsy", "tuesdays", - "tunnles", "tunnels", - "turbins", "turbines", - "turksih", "turkish", - "turltes", "turtles", - "turrest", "turrets", - "turtels", "turtles", - "tuseday", "tuesday", - "tusnami", "tsunami", - "tutrles", "turtles", - "twiligt", "twilight", - "tyelnol", "tylenol", - "typcial", "typical", - "tyrhard", "tryhard", - "tyrrany", "tyranny", - "udpated", "updated", - "uesfull", "usefull", - "ugprade", "upgrade", - "ukarine", "ukraine", - "ukranie", "ukraine", - "ukriane", "ukraine", - "ultimae", "ultimate", - "umbrela", "umbrella", - "unahppy", "unhappy", - "unbannd", "unbanned", - "underog", "undergo", - "unfairy", "unfairly", - "ungoldy", "ungodly", - "unicors", "unicorns", - "uniquey", "uniquely", - "unknwon", "unknown", - "unkonwn", "unknown", - "unlcean", "unclean", - "unlcoks", "unlocks", - "unlcuky", "unlucky", - "unlikey", "unlikely", - "unopend", "unopened", - "unprone", "unproven", - "unusabe", "unusable", - "unworty", "unworthy", - "upgarde", "upgrade", - "upgrads", "upgrades", - "uplaods", "uploads", - "upsteam", "upstream", - "urainum", "uranium", - "uranuim", "uranium", - "uretrha", "urethra", - "urkaine", "ukraine", - "urnaium", "uranium", - "urugauy", "uruguay", - "usefull", "useful", - "usefuly", "usefully", - "utiltiy", "utility", - "utopain", "utopian", - "utpoian", "utopian", - "vaccins", "vaccines", - "vaccume", "vacuum", - "vageuly", "vaguely", - "vaguley", "vaguely", - "vairant", "variant", - "valenca", "valencia", - "valetta", "valletta", - "valkyre", "valkyrie", - "valuabe", "valuable", - "valuble", "valuable", - "vampirs", "vampires", - "vanguad", "vanguard", - "varaint", "variant", - "vareity", "variety", - "varians", "variants", - "varient", "variant", - "varisty", "varsity", - "varitey", "variety", - "varstiy", "varsity", - "vasalls", "vassals", - "vasslas", "vassals", - "vaugely", "vaguely", - "vecotrs", "vectors", - "vectros", "vectors", - "veitnam", "vietnam", - "veiwers", "viewers", - "vendeta", "vendetta", - "verbaly", "verbally", - "verical", "vertical", - "verious", "various", - "verison", "version", - "veritgo", "vertigo", - "versoin", "version", - "vertgio", "vertigo", - "vessles", "vessels", - "vetween", "between", - "viatmin", "vitamin", - "vibratr", "vibrator", - "vicitms", "victims", - "vientam", "vietnam", - "vigrins", "virgins", - "vikigns", "vikings", - "villian", "villain", - "villify", "vilify", - "virbate", "vibrate", - "virigns", "virgins", - "virtiol", "vitriol", - "virutal", "virtual", - "virutes", "virtues", - "visable", "visible", - "visably", "visibly", - "visbily", "visibly", - "visting", "visiting", - "vistors", "visitors", - "vitaliy", "vitality", - "vitamis", "vitamins", - "vitenam", "vietnam", - "vitirol", "vitriol", - "vitmain", "vitamin", - "vitroil", "vitriol", - "vitrual", "virtual", - "vitrues", "virtues", - "volatge", "voltage", - "volumne", "volume", - "votlage", "voltage", - "vrigins", "virgins", - "waclott", "walcott", - "wacther", "watcher", - "waitres", "waiters", - "waktins", "watkins", - "warcrat", "warcraft", - "wardobe", "wardrobe", - "wariwck", "warwick", - "warrany", "warranty", - "warrent", "warrant", - "warrios", "warriors", - "warwcik", "warwick", - "wathcer", "watcher", - "watiers", "waiters", - "waviers", "waivers", - "wawrick", "warwick", - "wayword", "wayward", - "webapge", "webpage", - "webiste", "website", - "webstie", "website", - "weigths", "weights", - "weilded", "wielded", - "weirldy", "weirdly", - "weirods", "weirdos", - "welathy", "wealthy", - "wendsay", "wednesday", - "wensday", "wednesday", - "wepbage", "webpage", - "weridly", "weirdly", - "weridos", "weirdos", - "werstle", "wrestle", - "wesbite", "website", - "whaeton", "wheaton", - "whipser", "whisper", - "whislte", "whistle", - "whistel", "whistle", - "whitsle", "whistle", - "whsiper", "whisper", - "wiaters", "waiters", - "wiavers", "waivers", - "widgest", "widgets", - "wieghts", "weights", - "wigdets", "widgets", - "windosr", "windsor", - "winnins", "winnings", - "winsdor", "windsor", - "wintson", "winston", - "wirting", "writing", - "wisnton", "winston", - "withces", "witches", - "witheld", "withheld", - "withing", "within", - "withold", "withhold", - "wlacott", "walcott", - "wokring", "working", - "workins", "workings", - "woudlnt", "wouldnt", - "woudlve", "wouldve", - "woulndt", "wouldnt", - "wreslte", "wrestle", - "wroking", "working", - "wtiches", "witches", - "wupport", "support", - "yaching", "yachting", - "younget", "youngest", - "youseff", "yousef", - "youself", "yourself", - "zaelots", "zealots", - "zealtos", "zealots", - "zelaots", "zealots", - "zelaous", "zealous", - "zimbabe", "zimbabwe", - "zionsim", "zionism", - "zionsit", "zionist", - "zoinism", "zionism", - "zoinist", "zionist", - "abbout", "about", - "abilty", "ability", - "absail", "abseil", - "abutts", "abuts", - "achive", "achieve", - "acused", "accused", - "addopt", "adopt", - "addres", "address", - "adress", "address", - "aeriel", "aerial", - "affort", "afford", - "agains", "against", - "aginst", "against", - "ahppen", "happen", - "aiport", "airport", - "aisian", "asian", - "albiet", "albeit", - "alchol", "alcohol", - "aledge", "allege", - "aleged", "alleged", - "allign", "align", - "almsot", "almost", - "alomst", "almost", - "alowed", "allowed", - "alwasy", "always", - "alwyas", "always", - "amking", "making", - "ammend", "amend", - "amoung", "among", - "aplied", "applied", - "appart", "apart", - "aquire", "acquire", - "aready", "already", - "arised", "arose", - "arival", "arrival", - "arrary", "array", - "artice", "article", - "asetic", "ascetic", - "asside", "aside", - "attemp", "attempt", - "attemt", "attempt", - "auther", "author", - "awared", "awarded", - "bedore", "before", - "beeing", "being", - "befoer", "before", - "beggin", "begin", - "beleif", "belief", - "belive", "believe", - "beteen", "between", - "betwen", "between", - "beween", "between", - "bianry", "binary", - "boyant", "buoyant", - "broady", "broadly", - "buddah", "buddha", - "buring", "burying", - "carcas", "carcass", - "casion", "caisson", - "casued", "caused", - "casues", "causes", - "ceasar", "caesar", - "cencus", "census", - "censur", "censor", - "cheifs", "chiefs", - "circut", "circuit", - "clasic", "classic", - "coform", "conform", - "comany", "company", - "coucil", "council", - "densly", "densely", - "deside", "decide", - "devels", "delves", - "devide", "divide", - "dieing", "dying", - "divice", "device", - "doulbe", "double", - "dreasm", "dreams", - "duting", "during", - "ealier", "earlier", - "eearly", "early", - "efford", "effort", - "emited", "emitted", - "emnity", "enmity", - "enduce", "induce", - "enlish", "english", - "erally", "orally", - "eratic", "erratic", - "ethose", "those", - "exampt", "exempt", - "excact", "exact", - "excell", "excel", - "exerpt", "excerpt", - "exinct", "extinct", - "expell", "expel", - "expoch", "epoch", - "extint", "extinct", - "facist", "fascist", - "faught", "fought", - "finaly", "finally", - "forsaw", "foresaw", - "fougth", "fought", - "fourty", "forty", - "foward", "forward", - "freind", "friend", - "fromed", "formed", - "fufill", "fulfill", - "futher", "further", - "gardai", "gardaí", - "ghandi", "gandhi", - "glight", "flight", - "gloabl", "global", - "godess", "goddess", - "guilia", "giulia", - "guilio", "giulio", - "habeus", "habeas", - "harras", "harass", - "hatian", "haitian", - "heared", "heard", - "hertzs", "hertz", - "hieght", "height", - "higest", "highest", - "higway", "highway", - "honory", "honorary", - "howver", "however", - "hstory", "history", - "hunman", "human", - "husban", "husband", - "hvaing", "having", - "illess", "illness", - "ilness", "illness", - "imagin", "imagine", - "imense", "immense", - "includ", "include", - "inital", "initial", - "interm", "interim", - "intial", "initial", - "iunior", "junior", - "jaques", "jacques", - "jospeh", "joseph", - "jouney", "journey", - "klenex", "kleenex", - "labled", "labelled", - "largst", "largest", - "larrry", "larry", - "lefted", "left", - "lenght", "length", - "lerans", "learns", - "liason", "liaison", - "libary", "library", - "lieing", "lying", - "lieved", "lived", - "littel", "little", - "livley", "lively", - "lonley", "lonely", - "mailny", "mainly", - "markes", "marks", - "mileau", "milieu", - "milion", "million", - "millon", "million", - "misile", "missile", - "missen", "mizzen", - "missle", "missile", - "mkaing", "making", - "moderm", "modem", - "moreso", "more", - "mounth", "month", - "myraid", "myriad", - "naieve", "naive", - "nestin", "nesting", - "nineth", "ninth", - "noveau", "nouveau", - "occour", "occur", - "occurr", "occur", - "offred", "offered", - "omited", "omitted", - "ouevre", "oeuvre", - "oxigen", "oxygen", - "p0enis", "penis", - "packge", "package", - "peaple", "people", - "pensle", "pencil", - "peopel", "people", - "peotry", "poetry", - "perade", "parade", - "persan", "person", - "persue", "pursue", - "plateu", "plateau", - "poenis", "penis", - "poisin", "poison", - "polute", "pollute", - "posess", "possess", - "posion", "poison", - "prairy", "prairie", - "prarie", "prairie", - "preiod", "period", - "privte", "private", - "proces", "process", - "proove", "prove", - "psuedo", "pseudo", - "psyhic", "psychic", - "pucini", "puccini", - "pumkin", "pumpkin", - "puting", "putting", - "pyscic", "psychic", - "quizes", "quizzes", - "quuery", "query", - "racaus", "raucous", - "radify", "ratify", - "raelly", "really", - "reacll", "recall", - "realyl", "really", - "reched", "reached", - "recide", "reside", - "recrod", "record", - "refect", "reflect", - "relaly", "really", - "renewl", "renewal", - "retuns", "returns", - "reveiw", "review", - "rhymme", "rhyme", - "rigeur", "rigueur", - "rocord", "record", - "rougly", "roughly", - "runing", "running", - "rythem", "rhythm", - "rythim", "rhythm", - "saftey", "safety", - "salery", "salary", - "satisy", "satisfy", - "satric", "satiric", - "saught", "sought", - "scince", "science", - "scirpt", "script", - "seceed", "succeed", - "seinor", "senior", - "sepina", "subpoena", - "sevice", "service", - "shamen", "shaman", - "sheild", "shield", - "shiped", "shipped", - "shorly", "shortly", - "shoudl", "should", - "shreak", "shriek", - "siezed", "seized", - "sixtin", "sistine", - "sneeks", "sneaks", - "somene", "someone", - "soudns", "sounds", - "sourth", "south", - "speach", "speech", - "spects", "aspects", - "spoace", "space", - "sqaure", "square", - "staion", "station", - "stange", "strange", - "stilus", "stylus", - "stirrs", "stirs", - "stopry", "story", - "strnad", "strand", - "studdy", "study", - "suceed", "succeed", - "sucess", "success", - "sucide", "suicide", - "sumary", "summary", - "suport", "support", - "supose", "suppose", - "surfce", "surface", - "surley", "surly", - "swaers", "swears", - "swepth", "swept", - "talekd", "talked", - "theese", "these", - "therby", "thereby", - "thigns", "things", - "thigsn", "things", - "thikns", "thinks", - "thiunk", "think", - "thnigs", "things", - "threee", "three", - "tkaing", "taking", - "tounge", "tongue", - "tourch", "torch", - "towrad", "toward", - "trafic", "traffic", - "troups", "troupes", - "truely", "truly", - "twelth", "twelfth", - "tyrany", "tyranny", - "unabel", "unable", - "unkown", "unknown", - "untill", "until", - "usally", "usually", - "useage", "usage", - "useing", "using", - "usualy", "usually", - "vaccum", "vacuum", - "variey", "variety", - "varing", "varying", - "varity", "variety", - "vasall", "vassal", - "vigeur", "vigueur", - "villin", "villain", - "vreity", "variety", - "vriety", "variety", - "whants", "wants", - "wheras", "whereas", - "wheter", "whether", - "wholey", "wholly", - "whther", "whether", - "wnated", "wanted", - "writen", "written", - "yaerly", "yearly", - "yotube", "youtube", - "zeebra", "zebra", - "abotu", "about", - "adres", "address", - "afair", "affair", - "agian", "again", - "agina", "again", - "agred", "agreed", - "alege", "allege", - "alsot", "also", - "altho", "although", - "amung", "among", - "anual", "annual", - "aroud", "around", - "arund", "around", - "asign", "assign", - "assit", "assist", - "asume", "assume", - "atain", "attain", - "autor", "author", - "baout", "about", - "blaim", "blame", - "boaut", "bout", - "boook", "book", - "borke", "broke", - "breif", "brief", - "caost", "coast", - "casue", "cause", - "chasr", "chaser", - "cheif", "chief", - "chuch", "church", - "claer", "clear", - "clera", "clear", - "coudl", "could", - "crowm", "crown", - "deram", "dram", - "diety", "deity", - "doens", "does", - "doign", "doing", - "donig", "doing", - "drnik", "drink", - "durig", "during", - "earnt", "earned", - "eigth", "eighth", - "eiter", "either", - "emtpy", "empty", - "endig", "ending", - "eveyr", "every", - "exept", "except", - "eyars", "years", - "eyasr", "years", - "fiels", "fields", - "firts", "flirts", - "fleed", "fled", - "fomed", "formed", - "foucs", "focus", - "foudn", "found", - "fouth", "fourth", - "frome", "from", - "ganes", "games", - "gaurd", "guard", - "gerat", "great", - "gogin", "going", - "goign", "going", - "gonig", "going", - "graet", "great", - "greif", "grief", - "gropu", "group", - "guage", "gauge", - "hapen", "happen", - "herad", "heard", - "heroe", "hero", - "higer", "higher", - "housr", "hours", - "htere", "there", - "htikn", "think", - "hting", "thing", - "htink", "think", - "hwihc", "which", - "hwile", "while", - "hwole", "whole", - "idaes", "ideas", - "idesa", "ideas", - "ihaca", "ithaca", - "knwos", "knows", - "konws", "knows", - "lastr", "last", - "lavae", "larvae", - "layed", "laid", - "leage", "league", - "leanr", "lean", - "leran", "learn", - "levle", "level", - "lible", "libel", - "liekd", "liked", - "liuke", "like", - "lmits", "limits", - "lonly", "lonely", - "lukid", "likud", - "lybia", "libya", - "maked", "marked", - "makse", "makes", - "mamal", "mammal", - "mileu", "milieu", - "mkaes", "makes", - "modle", "model", - "moent", "moment", - "moeny", "money", - "monts", "months", - "movei", "movie", - "muder", "murder", - "mysef", "myself", - "neice", "niece", - "ninty", "ninety", - "ocurr", "occur", - "oging", "going", - "opose", "oppose", - "orded", "ordered", - "orgin", "origin", - "otehr", "other", - "ouput", "output", - "owudl", "would", - "paide", "paid", - "palce", "place", - "pased", "passed", - "payed", "paid", - "peice", "piece", - "peoms", "poems", - "poety", "poetry", - "pwoer", "power", - "qtuie", "quite", - "qutie", "quite", - "realy", "really", - "repid", "rapid", - "rised", "raised", - "rulle", "rule", - "rwite", "write", - "rythm", "rhythm", - "safty", "safety", - "scoll", "scroll", - "seach", "search", - "seige", "siege", - "seing", "seeing", - "sence", "sense", - "sicne", "since", - "sieze", "seize", - "sinse", "sines", - "slowy", "slowly", - "snese", "sneeze", - "soley", "solely", - "sotry", "story", - "sotyr", "satyr", - "soudn", "sound", - "sould", "could", - "spred", "spread", - "stlye", "style", - "stong", "strong", - "stoyr", "story", - "strat", "start", - "stroy", "story", - "suppy", "supply", - "swaer", "swear", - "syrap", "syrup", - "sytem", "system", - "sytle", "style", - "tatoo", "tattoo", - "thast", "that", - "theif", "thief", - "theri", "their", - "thgat", "that", - "thier", "their", - "thign", "thing", - "thikn", "think", - "thnig", "thing", - "thrid", "third", - "thsoe", "those", - "thyat", "that", - "tihkn", "think", - "timne", "time", - "tiome", "time", - "tkaes", "takes", - "todya", "today", - "tyhat", "that", - "unsed", "used", - "weild", "wield", - "whant", "want", - "whcih", "which", - "whihc", "which", - "whith", "with", - "whlch", "which", - "wholy", "wholly", - "wierd", "weird", - "wille", "will", - "willk", "will", - "withh", "with", - "witht", "with", - "wiull", "will", - "wnats", "wants", - "wohle", "whole", - "worls", "world", - "woudl", "would", - "wriet", "write", - "wroet", "wrote", - "yaers", "years", - "yatch", "yacht", - "yearm", "year", - "yeasr", "years", - "yeild", "yield", - "yeras", "years", - "yersa", "years", - "agin", "again", - "agre", "agree", - "ahev", "have", - "ahve", "have", - "alse", "else", - "amke", "make", - "anbd", "and", - "andd", "and", - "apon", "upon", - "aslo", "also", - "awya", "away", - "bakc", "back", - "bcak", "back", - "clas", "class", - "cpoy", "coy", - "cxan", "cyan", - "daed", "dead", - "dael", "deal", - "diea", "idea", - "doub", "doubt", - "dyas", "dryas", - "eahc", "each", - "efel", "evil", - "eles", "eels", - "ened", "need", - "enxt", "next", - "esle", "else", - "eyar", "year", - "fatc", "fact", - "fidn", "find", - "fomr", "from", - "grwo", "grow", - "haev", "have", - "halp", "help", - "holf", "hold", - "hten", "then", - "htey", "they", - "htis", "this", - "hvae", "have", - "hvea", "have", - "inot", "into", - "iwll", "will", - "iwth", "with", - "jstu", "just", - "jsut", "just", - "knwo", "know", - "konw", "know", - "kwno", "know", - "liek", "like", - "loev", "love", - "lveo", "love", - "lvoe", "love", - "mkae", "make", - "mkea", "make", - "mroe", "more", - "nkow", "know", - "nkwo", "know", - "nmae", "name", - "noth", "north", - "nowe", "now", - "omre", "more", - "onot", "note", - "onyl", "only", - "owrk", "work", - "peom", "poem", - "pich", "pitch", - "rela", "real", - "sasy", "says", - "smae", "same", - "smoe", "some", - "soem", "some", - "sohw", "show", - "stpo", "stop", - "suop", "soup", - "syas", "says", - "tahn", "than", - "taht", "that", - "tast", "taste", - "tath", "that", - "tehy", "they", - "tghe", "the", - "ther", "there", - "thge", "the", - "thna", "than", - "thne", "then", - "thsi", "this", - "thta", "that", - "tiem", "time", - "tihs", "this", - "tjhe", "the", - "tkae", "take", - "tood", "todo", - "tust", "trust", - "twon", "town", - "twpo", "two", - "tyhe", "they", - "uise", "use", - "vell", "well", - "veyr", "very", - "vrey", "very", - "vyer", "very", - "vyre", "very", - "waht", "what", - "wass", "was", - "watn", "want", - "weas", "was", - "wehn", "when", - "whic", "which", - "whta", "what", - "wich", "which", - "wief", "wife", - "wiew", "view", - "wiht", "with", - "witn", "with", - "wnat", "want", - "wokr", "work", - "wrok", "work", - "wtih", "with", - "yaer", "year", - "yera", "year", - "yrea", "year", - "ytou", "you", - "adn", "and", - "ect", "etc", - "nto", "not", - "teh", "the", - "thn", "then", - "tje", "the", - "whn", "when", - "wih", "with", - "yuo", "you", -} - -// DictAmerican converts UK spellings to US spellings -var DictAmerican = []string{ - "institutionalisation", "institutionalization", - "internationalisation", "internationalization", - "professionalisation", "professionalization", - "compartmentalising", "compartmentalizing", - "institutionalising", "institutionalizing", - "internationalising", "internationalizing", - "compartmentalised", "compartmentalized", - "compartmentalises", "compartmentalizes", - "decriminalisation", "decriminalization", - "denationalisation", "denationalization", - "fictionalisations", "fictionalizations", - "institutionalised", "institutionalized", - "institutionalises", "institutionalizes", - "intellectualising", "intellectualizing", - "internationalised", "internationalized", - "internationalises", "internationalizes", - "pedestrianisation", "pedestrianization", - "professionalising", "professionalizing", - "archaeologically", "archeologically", - "compartmentalise", "compartmentalize", - "decentralisation", "decentralization", - "demilitarisation", "demilitarization", - "externalisations", "externalizations", - "fictionalisation", "fictionalization", - "institutionalise", "institutionalize", - "intellectualised", "intellectualized", - "intellectualises", "intellectualizes", - "internationalise", "internationalize", - "nationalisations", "nationalizations", - "palaeontologists", "paleontologists", - "professionalised", "professionalized", - "professionalises", "professionalizes", - "rationalisations", "rationalizations", - "sensationalising", "sensationalizing", - "sentimentalising", "sentimentalizing", - "acclimatisation", "acclimatization", - "bougainvillaeas", "bougainvilleas", - "commercialising", "commercializing", - "conceptualising", "conceptualizing", - "contextualising", "contextualizing", - "crystallisation", "crystallization", - "decriminalising", "decriminalizing", - "democratisation", "democratization", - "denationalising", "denationalizing", - "depersonalising", "depersonalizing", - "desensitisation", "desensitization", - "destabilisation", "destabilization", - "disorganisation", "disorganization", - "extemporisation", "extemporization", - "externalisation", "externalization", - "familiarisation", "familiarization", - "generalisations", "generalizations", - "hospitalisation", "hospitalization", - "individualising", "individualizing", - "industrialising", "industrializing", - "intellectualise", "intellectualize", - "internalisation", "internalization", - "manoeuvrability", "maneuverability", - "marginalisation", "marginalization", - "materialisation", "materialization", - "miniaturisation", "miniaturization", - "nationalisation", "nationalization", - "neighbourliness", "neighborliness", - "overemphasising", "overemphasizing", - "palaeontologist", "paleontologist", - "particularising", "particularizing", - "pedestrianising", "pedestrianizing", - "professionalise", "professionalize", - "psychoanalysing", "psychoanalyzing", - "rationalisation", "rationalization", - "reorganisations", "reorganizations", - "revolutionising", "revolutionizing", - "sensationalised", "sensationalized", - "sensationalises", "sensationalizes", - "sentimentalised", "sentimentalized", - "sentimentalises", "sentimentalizes", - "specialisations", "specializations", - "standardisation", "standardization", - "synchronisation", "synchronization", - "systematisation", "systematization", - "aggrandisement", "aggrandizement", - "anaesthetising", "anesthetizing", - "archaeological", "archeological", - "archaeologists", "archeologists", - "bougainvillaea", "bougainvillea", - "characterising", "characterizing", - "collectivising", "collectivizing", - "commercialised", "commercialized", - "commercialises", "commercializes", - "conceptualised", "conceptualized", - "conceptualises", "conceptualizes", - "contextualised", "contextualized", - "contextualises", "contextualizes", - "decentralising", "decentralizing", - "decriminalised", "decriminalized", - "decriminalises", "decriminalizes", - "dehumanisation", "dehumanization", - "demilitarising", "demilitarizing", - "demobilisation", "demobilization", - "demoralisation", "demoralization", - "denationalised", "denationalized", - "denationalises", "denationalizes", - "depersonalised", "depersonalized", - "depersonalises", "depersonalizes", - "disembowelling", "disemboweling", - "dramatisations", "dramatizations", - "editorialising", "editorializing", - "encyclopaedias", "encyclopedias", - "fictionalising", "fictionalizing", - "fraternisation", "fraternization", - "generalisation", "generalization", - "gynaecological", "gynecological", - "gynaecologists", "gynecologists", - "haematological", "hematological", - "haematologists", "hematologists", - "immobilisation", "immobilization", - "individualised", "individualized", - "individualises", "individualizes", - "industrialised", "industrialized", - "industrialises", "industrializes", - "liberalisation", "liberalization", - "monopolisation", "monopolization", - "naturalisation", "naturalization", - "neighbourhoods", "neighborhoods", - "neutralisation", "neutralization", - "organisational", "organizational", - "outmanoeuvring", "outmaneuvering", - "overemphasised", "overemphasized", - "overemphasises", "overemphasizes", - "paediatricians", "pediatricians", - "particularised", "particularized", - "particularises", "particularizes", - "pasteurisation", "pasteurization", - "pedestrianised", "pedestrianized", - "pedestrianises", "pedestrianizes", - "philosophising", "philosophizing", - "politicisation", "politicization", - "popularisation", "popularization", - "pressurisation", "pressurization", - "prioritisation", "prioritization", - "privatisations", "privatizations", - "propagandising", "propagandizing", - "psychoanalysed", "psychoanalyzed", - "psychoanalyses", "psychoanalyzes", - "regularisation", "regularization", - "reorganisation", "reorganization", - "revolutionised", "revolutionized", - "revolutionises", "revolutionizes", - "secularisation", "secularization", - "sensationalise", "sensationalize", - "sentimentalise", "sentimentalize", - "serialisations", "serializations", - "specialisation", "specialization", - "sterilisations", "sterilizations", - "stigmatisation", "stigmatization", - "transistorised", "transistorized", - "unrecognisable", "unrecognizable", - "visualisations", "visualizations", - "westernisation", "westernization", - "accessorising", "accessorizing", - "acclimatising", "acclimatizing", - "amortisations", "amortizations", - "amphitheatres", "amphitheaters", - "anaesthetised", "anesthetized", - "anaesthetises", "anesthetizes", - "anaesthetists", "anesthetists", - "archaeologist", "archeologist", - "backpedalling", "backpedaling", - "behaviourists", "behaviorists", - "breathalysers", "breathalyzers", - "breathalysing", "breathalyzing", - "callisthenics", "calisthenics", - "cannibalising", "cannibalizing", - "characterised", "characterized", - "characterises", "characterizes", - "circularising", "circularizing", - "clarinettists", "clarinetists", - "collectivised", "collectivized", - "collectivises", "collectivizes", - "commercialise", "commercialize", - "computerising", "computerizing", - "conceptualise", "conceptualize", - "contextualise", "contextualize", - "criminalising", "criminalizing", - "crystallising", "crystallizing", - "decentralised", "decentralized", - "decentralises", "decentralizes", - "decriminalise", "decriminalize", - "demilitarised", "demilitarized", - "demilitarises", "demilitarizes", - "democratising", "democratizing", - "denationalise", "denationalize", - "depersonalise", "depersonalize", - "desensitising", "desensitizing", - "destabilising", "destabilizing", - "disembowelled", "disemboweled", - "dishonourable", "dishonorable", - "dishonourably", "dishonorably", - "dramatisation", "dramatization", - "editorialised", "editorialized", - "editorialises", "editorializes", - "encyclopaedia", "encyclopedia", - "encyclopaedic", "encyclopedic", - "extemporising", "extemporizing", - "externalising", "externalizing", - "familiarising", "familiarizing", - "fertilisation", "fertilization", - "fictionalised", "fictionalized", - "fictionalises", "fictionalizes", - "formalisation", "formalization", - "fossilisation", "fossilization", - "globalisation", "globalization", - "gynaecologist", "gynecologist", - "haematologist", "hematologist", - "haemophiliacs", "hemophiliacs", - "haemorrhaging", "hemorrhaging", - "harmonisation", "harmonization", - "hospitalising", "hospitalizing", - "hypothesising", "hypothesizing", - "immortalising", "immortalizing", - "individualise", "individualize", - "industrialise", "industrialize", - "internalising", "internalizing", - "marginalising", "marginalizing", - "materialising", "materializing", - "mechanisation", "mechanization", - "memorialising", "memorializing", - "miniaturising", "miniaturizing", - "miscatalogued", "miscataloged", - "misdemeanours", "misdemeanors", - "multicoloured", "multicolored", - "nationalising", "nationalizing", - "neighbourhood", "neighborhood", - "normalisation", "normalization", - "organisations", "organizations", - "outmanoeuvred", "outmaneuvered", - "outmanoeuvres", "outmaneuvers", - "overemphasise", "overemphasize", - "paediatrician", "pediatrician", - "palaeontology", "paleontology", - "particularise", "particularize", - "passivisation", "passivization", - "patronisingly", "patronizingly", - "pedestrianise", "pedestrianize", - "personalising", "personalizing", - "philosophised", "philosophized", - "philosophises", "philosophizes", - "privatisation", "privatization", - "propagandised", "propagandized", - "propagandises", "propagandizes", - "proselytisers", "proselytizers", - "proselytising", "proselytizing", - "psychoanalyse", "psychoanalyze", - "pulverisation", "pulverization", - "rationalising", "rationalizing", - "reconnoitring", "reconnoitering", - "revolutionise", "revolutionize", - "romanticising", "romanticizing", - "serialisation", "serialization", - "socialisation", "socialization", - "stabilisation", "stabilization", - "standardising", "standardizing", - "sterilisation", "sterilization", - "subsidisation", "subsidization", - "synchronising", "synchronizing", - "systematising", "systematizing", - "tantalisingly", "tantalizingly", - "underutilised", "underutilized", - "victimisation", "victimization", - "visualisation", "visualization", - "vocalisations", "vocalizations", - "vulgarisation", "vulgarization", - "accessorised", "accessorized", - "accessorises", "accessorizes", - "acclimatised", "acclimatized", - "acclimatises", "acclimatizes", - "amortisation", "amortization", - "amphitheatre", "amphitheater", - "anaesthetics", "anesthetics", - "anaesthetise", "anesthetize", - "anaesthetist", "anesthetist", - "antagonising", "antagonizing", - "appetisingly", "appetizingly", - "backpedalled", "backpedaled", - "bastardising", "bastardizing", - "behaviourism", "behaviorism", - "behaviourist", "behaviorist", - "bowdlerising", "bowdlerizing", - "breathalysed", "breathalyzed", - "breathalyser", "breathalyzer", - "breathalyses", "breathalyzes", - "cannibalised", "cannibalized", - "cannibalises", "cannibalizes", - "capitalising", "capitalizing", - "caramelising", "caramelizing", - "categorising", "categorizing", - "centigrammes", "centigrams", - "centralising", "centralizing", - "centrepieces", "centerpieces", - "characterise", "characterize", - "circularised", "circularized", - "circularises", "circularizes", - "clarinettist", "clarinetist", - "collectivise", "collectivize", - "colonisation", "colonization", - "computerised", "computerized", - "computerises", "computerizes", - "criminalised", "criminalized", - "criminalises", "criminalizes", - "crystallised", "crystallized", - "crystallises", "crystallizes", - "decentralise", "decentralize", - "dehumanising", "dehumanizing", - "demilitarise", "demilitarize", - "demobilising", "demobilizing", - "democratised", "democratized", - "democratises", "democratizes", - "demoralising", "demoralizing", - "desensitised", "desensitized", - "desensitises", "desensitizes", - "destabilised", "destabilized", - "destabilises", "destabilizes", - "discolouring", "discoloring", - "dishonouring", "dishonoring", - "disorganised", "disorganized", - "editorialise", "editorialize", - "endeavouring", "endeavoring", - "equalisation", "equalization", - "evangelising", "evangelizing", - "extemporised", "extemporized", - "extemporises", "extemporizes", - "externalised", "externalized", - "externalises", "externalizes", - "familiarised", "familiarized", - "familiarises", "familiarizes", - "fictionalise", "fictionalize", - "finalisation", "finalization", - "fraternising", "fraternizing", - "generalising", "generalizing", - "haemophiliac", "hemophiliac", - "haemorrhaged", "hemorrhaged", - "haemorrhages", "hemorrhages", - "haemorrhoids", "hemorrhoids", - "homoeopathic", "homeopathic", - "homogenising", "homogenizing", - "hospitalised", "hospitalized", - "hospitalises", "hospitalizes", - "hypothesised", "hypothesized", - "hypothesises", "hypothesizes", - "idealisation", "idealization", - "immobilisers", "immobilizers", - "immobilising", "immobilizing", - "immortalised", "immortalized", - "immortalises", "immortalizes", - "immunisation", "immunization", - "initialising", "initializing", - "internalised", "internalized", - "internalises", "internalizes", - "jeopardising", "jeopardizing", - "legalisation", "legalization", - "legitimising", "legitimizing", - "liberalising", "liberalizing", - "manoeuvrable", "maneuverable", - "manoeuvrings", "maneuverings", - "marginalised", "marginalized", - "marginalises", "marginalizes", - "marvellously", "marvelously", - "materialised", "materialized", - "materialises", "materializes", - "maximisation", "maximization", - "memorialised", "memorialized", - "memorialises", "memorializes", - "metabolising", "metabolizing", - "militarising", "militarizing", - "milligrammes", "milligrams", - "miniaturised", "miniaturized", - "miniaturises", "miniaturizes", - "misbehaviour", "misbehavior", - "misdemeanour", "misdemeanor", - "mobilisation", "mobilization", - "moisturisers", "moisturizers", - "moisturising", "moisturizing", - "monopolising", "monopolizing", - "moustachioed", "mustachioed", - "nationalised", "nationalized", - "nationalises", "nationalizes", - "naturalising", "naturalizing", - "neighbouring", "neighboring", - "neutralising", "neutralizing", - "oesophaguses", "esophaguses", - "organisation", "organization", - "orthopaedics", "orthopedics", - "outmanoeuvre", "outmaneuver", - "palaeolithic", "paleolithic", - "pasteurising", "pasteurizing", - "personalised", "personalized", - "personalises", "personalizes", - "philosophise", "philosophize", - "plagiarising", "plagiarizing", - "ploughshares", "plowshares", - "polarisation", "polarization", - "politicising", "politicizing", - "popularising", "popularizing", - "pressurising", "pressurizing", - "prioritising", "prioritizing", - "propagandise", "propagandize", - "proselytised", "proselytized", - "proselytiser", "proselytizer", - "proselytises", "proselytizes", - "radicalising", "radicalizing", - "rationalised", "rationalized", - "rationalises", "rationalizes", - "realisations", "realizations", - "recognisable", "recognizable", - "recognisably", "recognizably", - "recognisance", "recognizance", - "reconnoitred", "reconnoitered", - "reconnoitres", "reconnoiters", - "regularising", "regularizing", - "reorganising", "reorganizing", - "revitalising", "revitalizing", - "rhapsodising", "rhapsodizing", - "romanticised", "romanticized", - "romanticises", "romanticizes", - "scandalising", "scandalizing", - "scrutinising", "scrutinizing", - "secularising", "secularizing", - "specialising", "specializing", - "squirrelling", "squirreling", - "standardised", "standardized", - "standardises", "standardizes", - "stigmatising", "stigmatizing", - "sympathisers", "sympathizers", - "sympathising", "sympathizing", - "synchronised", "synchronized", - "synchronises", "synchronizes", - "synthesisers", "synthesizers", - "synthesising", "synthesizing", - "systematised", "systematized", - "systematises", "systematizes", - "technicolour", "technicolor", - "theatregoers", "theatergoers", - "traumatising", "traumatizing", - "trivialising", "trivializing", - "unauthorised", "unauthorized", - "uncatalogued", "uncataloged", - "unfavourable", "unfavorable", - "unfavourably", "unfavorably", - "unionisation", "unionization", - "unrecognised", "unrecognized", - "untrammelled", "untrammeled", - "urbanisation", "urbanization", - "vaporisation", "vaporization", - "vocalisation", "vocalization", - "watercolours", "watercolors", - "westernising", "westernizing", - "accessorise", "accessorize", - "acclimatise", "acclimatize", - "agonisingly", "agonizingly", - "amortisable", "amortizable", - "anaesthesia", "anesthesia", - "anaesthetic", "anesthetic", - "anglicising", "anglicizing", - "antagonised", "antagonized", - "antagonises", "antagonizes", - "apologising", "apologizing", - "archaeology", "archeology", - "authorising", "authorizing", - "bastardised", "bastardized", - "bastardises", "bastardizes", - "bedevilling", "bedeviling", - "behavioural", "behavioral", - "belabouring", "belaboring", - "bowdlerised", "bowdlerized", - "bowdlerises", "bowdlerizes", - "breathalyse", "breathalyze", - "brutalising", "brutalizing", - "cannibalise", "cannibalize", - "capitalised", "capitalized", - "capitalises", "capitalizes", - "caramelised", "caramelized", - "caramelises", "caramelizes", - "carbonising", "carbonizing", - "cataloguing", "cataloging", - "categorised", "categorized", - "categorises", "categorizes", - "cauterising", "cauterizing", - "centigramme", "centigram", - "centilitres", "centiliters", - "centimetres", "centimeters", - "centralised", "centralized", - "centralises", "centralizes", - "centrefolds", "centerfolds", - "centrepiece", "centerpiece", - "channelling", "channeling", - "chequebooks", "checkbooks", - "circularise", "circularize", - "colourfully", "colorfully", - "colourizing", "colorizing", - "computerise", "computerize", - "councillors", "councilors", - "counselling", "counseling", - "counsellors", "counselors", - "criminalise", "criminalize", - "criticising", "criticizing", - "crystallise", "crystallize", - "customising", "customizing", - "defenceless", "defenseless", - "dehumanised", "dehumanized", - "dehumanises", "dehumanizes", - "demobilised", "demobilized", - "demobilises", "demobilizes", - "democratise", "democratize", - "demoralised", "demoralized", - "demoralises", "demoralizes", - "deodorising", "deodorizing", - "desensitise", "desensitize", - "destabilise", "destabilize", - "discoloured", "discolored", - "dishevelled", "disheveled", - "dishonoured", "dishonored", - "dramatising", "dramatizing", - "economising", "economizing", - "empathising", "empathizing", - "emphasising", "emphasizing", - "endeavoured", "endeavored", - "epitomising", "epitomizing", - "evangelised", "evangelized", - "evangelises", "evangelizes", - "extemporise", "extemporize", - "externalise", "externalize", - "factorising", "factorizing", - "familiarise", "familiarize", - "fantasising", "fantasizing", - "favouritism", "favoritism", - "fertilisers", "fertilizers", - "fertilising", "fertilizing", - "flavourings", "flavorings", - "flavourless", "flavorless", - "flavoursome", "flavorsome", - "formalising", "formalizing", - "fossilising", "fossilizing", - "fraternised", "fraternized", - "fraternises", "fraternizes", - "galvanising", "galvanizing", - "generalised", "generalized", - "generalises", "generalizes", - "ghettoising", "ghettoizing", - "globalising", "globalizing", - "gruellingly", "gruelingly", - "gynaecology", "gynecology", - "haematology", "hematology", - "haemoglobin", "hemoglobin", - "haemophilia", "hemophilia", - "haemorrhage", "hemorrhage", - "harmonising", "harmonizing", - "homoeopaths", "homeopaths", - "homoeopathy", "homeopathy", - "homogenised", "homogenized", - "homogenises", "homogenizes", - "hospitalise", "hospitalize", - "hybridising", "hybridizing", - "hypnotising", "hypnotizing", - "hypothesise", "hypothesize", - "immobilised", "immobilized", - "immobiliser", "immobilizer", - "immobilises", "immobilizes", - "immortalise", "immortalize", - "impanelling", "impaneling", - "imperilling", "imperiling", - "initialised", "initialized", - "initialises", "initializes", - "initialling", "initialing", - "instalments", "installments", - "internalise", "internalize", - "italicising", "italicizing", - "jeopardised", "jeopardized", - "jeopardises", "jeopardizes", - "kilogrammes", "kilograms", - "legitimised", "legitimized", - "legitimises", "legitimizes", - "liberalised", "liberalized", - "liberalises", "liberalizes", - "lionisation", "lionization", - "liquidisers", "liquidizers", - "liquidising", "liquidizing", - "magnetising", "magnetizing", - "manoeuvring", "maneuvering", - "marginalise", "marginalize", - "marshalling", "marshaling", - "materialise", "materialize", - "mechanising", "mechanizing", - "memorialise", "memorialize", - "mesmerising", "mesmerizing", - "metabolised", "metabolized", - "metabolises", "metabolizes", - "micrometres", "micrometers", - "militarised", "militarized", - "militarises", "militarizes", - "milligramme", "milligram", - "millilitres", "milliliters", - "millimetres", "millimeters", - "miniaturise", "miniaturize", - "modernising", "modernizing", - "moisturised", "moisturized", - "moisturiser", "moisturizer", - "moisturises", "moisturizes", - "monopolised", "monopolized", - "monopolises", "monopolizes", - "nationalise", "nationalize", - "naturalised", "naturalized", - "naturalises", "naturalizes", - "neighbourly", "neighborly", - "neutralised", "neutralized", - "neutralises", "neutralizes", - "normalising", "normalizing", - "orthopaedic", "orthopedic", - "ostracising", "ostracizing", - "oxidisation", "oxidization", - "paediatrics", "pediatrics", - "paedophiles", "pedophiles", - "paedophilia", "pedophilia", - "passivising", "passivizing", - "pasteurised", "pasteurized", - "pasteurises", "pasteurizes", - "patronising", "patronizing", - "personalise", "personalize", - "plagiarised", "plagiarized", - "plagiarises", "plagiarizes", - "ploughshare", "plowshare", - "politicised", "politicized", - "politicises", "politicizes", - "popularised", "popularized", - "popularises", "popularizes", - "praesidiums", "presidiums", - "pressurised", "pressurized", - "pressurises", "pressurizes", - "prioritised", "prioritized", - "prioritises", "prioritizes", - "privatising", "privatizing", - "proselytise", "proselytize", - "publicising", "publicizing", - "pulverising", "pulverizing", - "quarrelling", "quarreling", - "radicalised", "radicalized", - "radicalises", "radicalizes", - "randomising", "randomizing", - "rationalise", "rationalize", - "realisation", "realization", - "recognising", "recognizing", - "reconnoitre", "reconnoiter", - "regularised", "regularized", - "regularises", "regularizes", - "remodelling", "remodeling", - "reorganised", "reorganized", - "reorganises", "reorganizes", - "revitalised", "revitalized", - "revitalises", "revitalizes", - "rhapsodised", "rhapsodized", - "rhapsodises", "rhapsodizes", - "romanticise", "romanticize", - "scandalised", "scandalized", - "scandalises", "scandalizes", - "sceptically", "skeptically", - "scrutinised", "scrutinized", - "scrutinises", "scrutinizes", - "secularised", "secularized", - "secularises", "secularizes", - "sensitising", "sensitizing", - "serialising", "serializing", - "sermonising", "sermonizing", - "shrivelling", "shriveling", - "signalising", "signalizing", - "snorkelling", "snorkeling", - "snowploughs", "snowplow", - "socialising", "socializing", - "solemnising", "solemnizing", - "specialised", "specialized", - "specialises", "specializes", - "squirrelled", "squirreled", - "stabilisers", "stabilizers", - "stabilising", "stabilizing", - "standardise", "standardize", - "stencilling", "stenciling", - "sterilisers", "sterilizers", - "sterilising", "sterilizing", - "stigmatised", "stigmatized", - "stigmatises", "stigmatizes", - "subsidisers", "subsidizers", - "subsidising", "subsidizing", - "summarising", "summarizing", - "symbolising", "symbolizing", - "sympathised", "sympathized", - "sympathiser", "sympathizer", - "sympathises", "sympathizes", - "synchronise", "synchronize", - "synthesised", "synthesized", - "synthesiser", "synthesizer", - "synthesises", "synthesizes", - "systematise", "systematize", - "tantalising", "tantalizing", - "temporising", "temporizing", - "tenderising", "tenderizing", - "terrorising", "terrorizing", - "theatregoer", "theatergoer", - "traumatised", "traumatized", - "traumatises", "traumatizes", - "trivialised", "trivialized", - "trivialises", "trivializes", - "tyrannising", "tyrannizing", - "uncivilised", "uncivilized", - "unorganised", "unorganized", - "unravelling", "unraveling", - "utilisation", "utilization", - "vandalising", "vandalizing", - "verbalising", "verbalizing", - "victimising", "victimizing", - "visualising", "visualizing", - "vulgarising", "vulgarizing", - "watercolour", "watercolor", - "westernised", "westernized", - "westernises", "westernizes", - "worshipping", "worshiping", - "aeroplanes", "airplanes", - "amortising", "amortizing", - "anglicised", "anglicized", - "anglicises", "anglicizes", - "annualised", "annualized", - "antagonise", "antagonize", - "apologised", "apologized", - "apologises", "apologizes", - "appetisers", "appetizers", - "appetising", "appetizing", - "authorised", "authorized", - "authorises", "authorizes", - "bannisters", "banisters", - "bastardise", "bastardize", - "bedevilled", "bedeviled", - "behaviours", "behaviors", - "bejewelled", "bejeweled", - "belaboured", "belabored", - "bowdlerise", "bowdlerize", - "brutalised", "brutalized", - "brutalises", "brutalizes", - "canalising", "canalizing", - "cancelling", "canceling", - "canonising", "canonizing", - "capitalise", "capitalize", - "caramelise", "caramelize", - "carbonised", "carbonized", - "carbonises", "carbonizes", - "catalogued", "cataloged", - "catalogues", "catalogs", - "catalysing", "catalyzing", - "categorise", "categorize", - "cauterised", "cauterized", - "cauterises", "cauterizes", - "centilitre", "centiliter", - "centimetre", "centimeter", - "centralise", "centralize", - "centrefold", "centerfold", - "channelled", "channeled", - "chequebook", "checkbook", - "chiselling", "chiseling", - "civilising", "civilizing", - "clamouring", "clamoring", - "colonisers", "colonizers", - "colonising", "colonizing", - "colourants", "colorants", - "colourized", "colorized", - "colourizes", "colorizes", - "colourless", "colorless", - "connexions", "connections", - "councillor", "councilor", - "counselled", "counseled", - "counsellor", "counselor", - "criticised", "criticized", - "criticises", "criticizes", - "cudgelling", "cudgeling", - "customised", "customized", - "customises", "customizes", - "dehumanise", "dehumanize", - "demobilise", "demobilize", - "demonising", "demonizing", - "demoralise", "demoralize", - "deodorised", "deodorized", - "deodorises", "deodorizes", - "deputising", "deputizing", - "digitising", "digitizing", - "discolours", "discolors", - "dishonours", "dishonors", - "dramatised", "dramatized", - "dramatises", "dramatizes", - "drivelling", "driveling", - "economised", "economized", - "economises", "economizes", - "empathised", "empathized", - "empathises", "empathizes", - "emphasised", "emphasized", - "emphasises", "emphasizes", - "enamelling", "enameling", - "endeavours", "endeavors", - "energising", "energizing", - "epaulettes", "epaulets", - "epicentres", "epicenters", - "epitomised", "epitomized", - "epitomises", "epitomizes", - "equalisers", "equalizers", - "equalising", "equalizing", - "eulogising", "eulogizing", - "evangelise", "evangelize", - "factorised", "factorized", - "factorises", "factorizes", - "fantasised", "fantasized", - "fantasises", "fantasizes", - "favourable", "favorable", - "favourably", "favorably", - "favourites", "favorites", - "feminising", "feminizing", - "fertilised", "fertilized", - "fertiliser", "fertilizer", - "fertilises", "fertilizes", - "fibreglass", "fiberglass", - "finalising", "finalizing", - "flavouring", "flavoring", - "formalised", "formalized", - "formalises", "formalizes", - "fossilised", "fossilized", - "fossilises", "fossilizes", - "fraternise", "fraternize", - "fulfilment", "fulfillment", - "funnelling", "funneling", - "galvanised", "galvanized", - "galvanises", "galvanizes", - "gambolling", "gamboling", - "gaolbreaks", "jailbreaks", - "generalise", "generalize", - "ghettoised", "ghettoized", - "ghettoises", "ghettoizes", - "globalised", "globalized", - "globalises", "globalizes", - "gonorrhoea", "gonorrhea", - "grovelling", "groveling", - "harbouring", "harboring", - "harmonised", "harmonized", - "harmonises", "harmonizes", - "homoeopath", "homeopath", - "homogenise", "homogenize", - "honourable", "honorable", - "honourably", "honorably", - "humanising", "humanizing", - "humourless", "humorless", - "hybridised", "hybridized", - "hybridises", "hybridizes", - "hypnotised", "hypnotized", - "hypnotises", "hypnotizes", - "idealising", "idealizing", - "immobilise", "immobilize", - "immunising", "immunizing", - "impanelled", "impaneled", - "imperilled", "imperiled", - "inflexions", "inflections", - "initialise", "initialize", - "initialled", "initialed", - "instalment", "installment", - "ionisation", "ionization", - "italicised", "italicized", - "italicises", "italicizes", - "jeopardise", "jeopardize", - "kilogramme", "kilogram", - "kilometres", "kilometers", - "lacklustre", "lackluster", - "legalising", "legalizing", - "legitimise", "legitimize", - "liberalise", "liberalize", - "liquidised", "liquidized", - "liquidiser", "liquidizer", - "liquidises", "liquidizes", - "localising", "localizing", - "magnetised", "magnetized", - "magnetises", "magnetizes", - "manoeuvred", "maneuvered", - "manoeuvres", "maneuvers", - "marshalled", "marshaled", - "marvelling", "marveling", - "marvellous", "marvelous", - "maximising", "maximizing", - "mechanised", "mechanized", - "mechanises", "mechanizes", - "memorising", "memorizing", - "mesmerised", "mesmerized", - "mesmerises", "mesmerizes", - "metabolise", "metabolize", - "micrometre", "micrometer", - "militarise", "militarize", - "millilitre", "milliliter", - "millimetre", "millimeter", - "minimising", "minimizing", - "mobilising", "mobilizing", - "modernised", "modernized", - "modernises", "modernizes", - "moisturise", "moisturize", - "monopolise", "monopolize", - "moralising", "moralizing", - "mouldering", "moldering", - "moustached", "mustached", - "moustaches", "mustaches", - "naturalise", "naturalize", - "neighbours", "neighbors", - "neutralise", "neutralize", - "normalised", "normalized", - "normalises", "normalizes", - "oesophagus", "esophagus", - "optimising", "optimizing", - "organisers", "organizers", - "organising", "organizing", - "ostracised", "ostracized", - "ostracises", "ostracizes", - "paederasts", "pederasts", - "paediatric", "pediatric", - "paedophile", "pedophile", - "panellists", "panelists", - "paralysing", "paralyzing", - "parcelling", "parceling", - "passivised", "passivized", - "passivises", "passivizes", - "pasteurise", "pasteurize", - "patronised", "patronized", - "patronises", "patronizes", - "penalising", "penalizing", - "pencilling", "penciling", - "plagiarise", "plagiarize", - "polarising", "polarizing", - "politicise", "politicize", - "popularise", "popularize", - "practising", "practicing", - "praesidium", "presidium", - "pressurise", "pressurize", - "prioritise", "prioritize", - "privatised", "privatized", - "privatises", "privatizes", - "programmes", "programs", - "publicised", "publicized", - "publicises", "publicizes", - "pulverised", "pulverized", - "pulverises", "pulverizes", - "pummelling", "pummeled", - "quarrelled", "quarreled", - "radicalise", "radicalize", - "randomised", "randomized", - "randomises", "randomizes", - "realisable", "realizable", - "recognised", "recognized", - "recognises", "recognizes", - "refuelling", "refueling", - "regularise", "regularize", - "remodelled", "remodeled", - "remoulding", "remolding", - "reorganise", "reorganize", - "revitalise", "revitalize", - "rhapsodise", "rhapsodize", - "ritualised", "ritualized", - "sanitising", "sanitizing", - "satirising", "satirizing", - "scandalise", "scandalize", - "scepticism", "skepticism", - "scrutinise", "scrutinize", - "secularise", "secularize", - "sensitised", "sensitized", - "sensitises", "sensitizes", - "sepulchres", "sepulchers", - "serialised", "serialized", - "serialises", "serializes", - "sermonised", "sermonized", - "sermonises", "sermonizes", - "shovelling", "shoveling", - "shrivelled", "shriveled", - "signalised", "signalized", - "signalises", "signalizes", - "signalling", "signaling", - "snivelling", "sniveling", - "snorkelled", "snorkeled", - "snowplough", "snowplow", - "socialised", "socialized", - "socialises", "socializes", - "sodomising", "sodomizing", - "solemnised", "solemnized", - "solemnises", "solemnizes", - "specialise", "specialize", - "spiralling", "spiraling", - "splendours", "splendors", - "stabilised", "stabilized", - "stabiliser", "stabilizer", - "stabilises", "stabilizes", - "stencilled", "stenciled", - "sterilised", "sterilized", - "steriliser", "sterilizer", - "sterilises", "sterilizes", - "stigmatise", "stigmatize", - "subsidised", "subsidized", - "subsidiser", "subsidizer", - "subsidises", "subsidizes", - "succouring", "succoring", - "sulphurous", "sulfurous", - "summarised", "summarized", - "summarises", "summarizes", - "swivelling", "swiveling", - "symbolised", "symbolized", - "symbolises", "symbolizes", - "sympathise", "sympathize", - "synthesise", "synthesize", - "tantalised", "tantalized", - "tantalises", "tantalizes", - "temporised", "temporized", - "temporises", "temporizes", - "tenderised", "tenderized", - "tenderises", "tenderizes", - "terrorised", "terrorized", - "terrorises", "terrorizes", - "theorising", "theorizing", - "traumatise", "traumatize", - "travellers", "travelers", - "travelling", "traveling", - "tricolours", "tricolors", - "trivialise", "trivialize", - "tunnelling", "tunneling", - "tyrannised", "tyrannized", - "tyrannises", "tyrannizes", - "unequalled", "unequaled", - "unionising", "unionizing", - "unravelled", "unraveled", - "unrivalled", "unrivaled", - "urbanising", "urbanizing", - "utilisable", "utilizable", - "vandalised", "vandalized", - "vandalises", "vandalizes", - "vaporising", "vaporizing", - "verbalised", "verbalized", - "verbalises", "verbalizes", - "victimised", "victimized", - "victimises", "victimizes", - "visualised", "visualized", - "visualises", "visualizes", - "vocalising", "vocalizing", - "vulcanised", "vulcanized", - "vulgarised", "vulgarized", - "vulgarises", "vulgarizes", - "weaselling", "weaseling", - "westernise", "westernize", - "womanisers", "womanizers", - "womanising", "womanizing", - "worshipped", "worshiped", - "worshipper", "worshiper", - "aeroplane", "airplane", - "aetiology", "etiology", - "agonising", "agonizing", - "almanacks", "almanacs", - "aluminium", "aluminum", - "amortised", "amortized", - "amortises", "amortizes", - "analogues", "analogs", - "analysing", "analyzing", - "anglicise", "anglicize", - "apologise", "apologize", - "appetiser", "appetizer", - "armourers", "armorers", - "armouries", "armories", - "artefacts", "artifacts", - "authorise", "authorize", - "baptising", "baptizing", - "behaviour", "behavior", - "belabours", "belabors", - "brutalise", "brutalize", - "callipers", "calipers", - "canalised", "canalized", - "canalises", "canalizes", - "cancelled", "canceled", - "canonised", "canonized", - "canonises", "canonizes", - "carbonise", "carbonize", - "carolling", "caroling", - "catalogue", "catalog", - "catalysed", "catalyzed", - "catalyses", "catalyzes", - "cauterise", "cauterize", - "cavilling", "caviling", - "chequered", "checkered", - "chiselled", "chiseled", - "civilised", "civilized", - "civilises", "civilizes", - "clamoured", "clamored", - "colonised", "colonized", - "coloniser", "colonizer", - "colonises", "colonizes", - "colourant", "colorant", - "coloureds", "coloreds", - "colourful", "colorful", - "colouring", "coloring", - "colourize", "colorize", - "connexion", "connection", - "criticise", "criticize", - "cruellest", "cruelest", - "cudgelled", "cudgeled", - "customise", "customize", - "demeanour", "demeanor", - "demonised", "demonized", - "demonises", "demonizes", - "deodorise", "deodorize", - "deputised", "deputized", - "deputises", "deputizes", - "dialogues", "dialogs", - "diarrhoea", "diarrhea", - "digitised", "digitized", - "digitises", "digitizes", - "discolour", "discolor", - "disfavour", "disfavor", - "dishonour", "dishonor", - "dramatise", "dramatize", - "drivelled", "driveled", - "economise", "economize", - "empathise", "empathize", - "emphasise", "emphasize", - "enamelled", "enameled", - "enamoured", "enamored", - "endeavour", "endeavor", - "energised", "energized", - "energises", "energizes", - "epaulette", "epaulet", - "epicentre", "epicenter", - "epitomise", "epitomize", - "equalised", "equalized", - "equaliser", "equalizer", - "equalises", "equalizes", - "eulogised", "eulogized", - "eulogises", "eulogizes", - "factorise", "factorize", - "fantasise", "fantasize", - "favouring", "favoring", - "favourite", "favorite", - "feminised", "feminized", - "feminises", "feminizes", - "fertilise", "fertilize", - "finalised", "finalized", - "finalises", "finalizes", - "flautists", "flutists", - "flavoured", "flavored", - "formalise", "formalize", - "fossilise", "fossilize", - "funnelled", "funneled", - "galvanise", "galvanize", - "gambolled", "gamboled", - "gaolbirds", "jailbirds", - "gaolbreak", "jailbreak", - "ghettoise", "ghettoize", - "globalise", "globalize", - "gravelled", "graveled", - "grovelled", "groveled", - "gruelling", "grueling", - "harboured", "harbored", - "harmonise", "harmonize", - "honouring", "honoring", - "humanised", "humanized", - "humanises", "humanizes", - "humouring", "humoring", - "hybridise", "hybridize", - "hypnotise", "hypnotize", - "idealised", "idealized", - "idealises", "idealizes", - "idolising", "idolizing", - "immunised", "immunized", - "immunises", "immunizes", - "inflexion", "inflection", - "italicise", "italicize", - "itemising", "itemizing", - "jewellers", "jewelers", - "jewellery", "jewelry", - "kilometre", "kilometer", - "labelling", "labeling", - "labourers", "laborers", - "labouring", "laboring", - "legalised", "legalized", - "legalises", "legalizes", - "leukaemia", "leukemia", - "levellers", "levelers", - "levelling", "leveling", - "libelling", "libeling", - "libellous", "libelous", - "licencing", "licensing", - "lionising", "lionizing", - "liquidise", "liquidize", - "localised", "localized", - "localises", "localizes", - "magnetise", "magnetize", - "manoeuvre", "maneuver", - "marvelled", "marveled", - "maximised", "maximized", - "maximises", "maximizes", - "mechanise", "mechanize", - "mediaeval", "medieval", - "memorised", "memorized", - "memorises", "memorizes", - "mesmerise", "mesmerize", - "minimised", "minimized", - "minimises", "minimizes", - "mobilised", "mobilized", - "mobilises", "mobilizes", - "modellers", "modelers", - "modelling", "modeling", - "modernise", "modernize", - "moralised", "moralized", - "moralises", "moralizes", - "motorised", "motorized", - "mouldered", "moldered", - "mouldiest", "moldiest", - "mouldings", "moldings", - "moustache", "mustache", - "neighbour", "neighbor", - "normalise", "normalize", - "odourless", "odorless", - "oestrogen", "estrogen", - "optimised", "optimized", - "optimises", "optimizes", - "organised", "organized", - "organiser", "organizer", - "organises", "organizes", - "ostracise", "ostracize", - "oxidising", "oxidizing", - "paederast", "pederast", - "panelling", "paneling", - "panellist", "panelist", - "paralysed", "paralyzed", - "paralyses", "paralyzes", - "parcelled", "parceled", - "passivise", "passivize", - "patronise", "patronize", - "pedalling", "pedaling", - "penalised", "penalized", - "penalises", "penalizes", - "pencilled", "penciled", - "ploughing", "plowing", - "ploughman", "plowman", - "ploughmen", "plowmen", - "polarised", "polarized", - "polarises", "polarizes", - "practised", "practiced", - "practises", "practices", - "pretences", "pretenses", - "primaeval", "primeval", - "privatise", "privatize", - "programme", "program", - "publicise", "publicize", - "pulverise", "pulverize", - "pummelled", "pummel", - "randomise", "randomize", - "ravelling", "raveling", - "realising", "realizing", - "recognise", "recognize", - "refuelled", "refueled", - "remoulded", "remolded", - "revellers", "revelers", - "revelling", "reveling", - "rivalling", "rivaling", - "saltpetre", "saltpeter", - "sanitised", "sanitized", - "sanitises", "sanitizes", - "satirised", "satirized", - "satirises", "satirizes", - "savouries", "savories", - "savouring", "savoring", - "sceptical", "skeptical", - "sensitise", "sensitize", - "sepulchre", "sepulcher", - "serialise", "serialize", - "sermonise", "sermonize", - "shovelled", "shoveled", - "signalise", "signalize", - "signalled", "signaled", - "snivelled", "sniveled", - "socialise", "socialize", - "sodomised", "sodomized", - "sodomises", "sodomizes", - "solemnise", "solemnize", - "spiralled", "spiraled", - "splendour", "splendor", - "stabilise", "stabilize", - "sterilise", "sterilize", - "subsidise", "subsidize", - "succoured", "succored", - "sulphates", "sulfates", - "sulphides", "sulfides", - "summarise", "summarize", - "swivelled", "swiveled", - "symbolise", "symbolize", - "syphoning", "siphoning", - "tantalise", "tantalize", - "tasselled", "tasseled", - "temporise", "temporize", - "tenderise", "tenderize", - "terrorise", "terrorize", - "theorised", "theorized", - "theorises", "theorizes", - "towelling", "toweling", - "travelled", "traveled", - "traveller", "traveler", - "trialling", "trialing", - "tricolour", "tricolor", - "tunnelled", "tunneled", - "tyrannise", "tyrannize", - "unionised", "unionized", - "unionises", "unionizes", - "unsavoury", "unsavory", - "urbanised", "urbanized", - "urbanises", "urbanizes", - "utilising", "utilizing", - "vandalise", "vandalize", - "vaporised", "vaporized", - "vaporises", "vaporizes", - "verbalise", "verbalize", - "victimise", "victimize", - "visualise", "visualize", - "vocalised", "vocalized", - "vocalises", "vocalizes", - "vulgarise", "vulgarize", - "weaselled", "weaseled", - "womanised", "womanized", - "womaniser", "womanizer", - "womanises", "womanizes", - "yodelling", "yodeling", - "yoghourts", "yogurts", - "agonised", "agonized", - "agonises", "agonizes", - "almanack", "almanac", - "amortise", "amortize", - "analogue", "analog", - "analysed", "analyzed", - "analyses", "analyzes", - "armoured", "armored", - "armourer", "armorer", - "artefact", "artifact", - "baptised", "baptized", - "baptises", "baptizes", - "baulking", "balking", - "belabour", "belabor", - "bevelled", "beveled", - "calibres", "calibers", - "calliper", "caliper", - "canalise", "canalize", - "canonise", "canonize", - "carolled", "caroled", - "catalyse", "catalyze", - "cavilled", "caviled", - "civilise", "civilize", - "clamours", "clamors", - "clangour", "clangor", - "colonise", "colonize", - "coloured", "colored", - "cosiness", "coziness", - "crueller", "crueler", - "defences", "defenses", - "demonise", "demonize", - "deputise", "deputize", - "dialling", "dialing", - "dialogue", "dialog", - "digitise", "digitize", - "draughty", "drafty", - "duelling", "dueling", - "energise", "energize", - "enthrals", "enthralls", - "equalise", "equalize", - "eulogise", "eulogize", - "favoured", "favored", - "feminise", "feminize", - "finalise", "finalize", - "flautist", "flutist", - "flavours", "flavors", - "foetuses", "fetuses", - "fuelling", "fueling", - "gaolbird", "jailbird", - "gryphons", "griffins", - "harbours", "harbors", - "honoured", "honored", - "humanise", "humanize", - "humoured", "humored", - "idealise", "idealize", - "idolised", "idolized", - "idolises", "idolizes", - "immunise", "immunize", - "ionisers", "ionizers", - "ionising", "ionizing", - "itemised", "itemized", - "itemises", "itemizes", - "jewelled", "jeweled", - "jeweller", "jeweler", - "labelled", "labeled", - "laboured", "labored", - "labourer", "laborer", - "legalise", "legalize", - "levelled", "leveled", - "leveller", "leveler", - "libelled", "libeled", - "licenced", "licensed", - "licences", "licenses", - "lionised", "lionized", - "lionises", "lionizes", - "localise", "localize", - "maximise", "maximize", - "memorise", "memorize", - "minimise", "minimize", - "misspelt", "misspelled", - "mobilise", "mobilize", - "modelled", "modeled", - "modeller", "modeler", - "moralise", "moralize", - "moulders", "molders", - "mouldier", "moldier", - "moulding", "molding", - "moulting", "molting", - "offences", "offenses", - "optimise", "optimize", - "organise", "organize", - "oxidised", "oxidized", - "oxidises", "oxidizes", - "panelled", "paneled", - "paralyse", "paralyze", - "parlours", "parlors", - "pedalled", "pedaled", - "penalise", "penalize", - "philtres", "filters", - "ploughed", "plowed", - "polarise", "polarize", - "practise", "practice", - "pretence", "pretense", - "ravelled", "raveled", - "realised", "realized", - "realises", "realizes", - "remoulds", "remolds", - "revelled", "reveled", - "reveller", "reveler", - "rivalled", "rivaled", - "rumoured", "rumored", - "sanitise", "sanitize", - "satirise", "satirize", - "saviours", "saviors", - "savoured", "savored", - "sceptics", "skeptics", - "sceptres", "scepters", - "sodomise", "sodomize", - "spectres", "specters", - "succours", "succors", - "sulphate", "sulfate", - "sulphide", "sulfide", - "syphoned", "siphoned", - "theatres", "theaters", - "theorise", "theorize", - "towelled", "toweled", - "toxaemia", "toxemia", - "trialled", "trialed", - "unionise", "unionize", - "urbanise", "urbanize", - "utilised", "utilized", - "utilises", "utilizes", - "vaporise", "vaporize", - "vocalise", "vocalize", - "womanise", "womanize", - "yodelled", "yodeled", - "yoghourt", "yogurt", - "yoghurts", "yogurts", - "agonise", "agonize", - "anaemia", "anemia", - "anaemic", "anemic", - "analyse", "analyze", - "arbours", "arbors", - "armoury", "armory", - "baptise", "baptize", - "baulked", "balked", - "behoved", "behooved", - "behoves", "behooves", - "calibre", "caliber", - "candour", "candor", - "centred", "centered", - "centres", "centers", - "cheques", "checks", - "clamour", "clamor", - "colours", "colors", - "cosiest", "coziest", - "defence", "defense", - "dialled", "dialed", - "distils", "distills", - "duelled", "dueled", - "enthral", "enthrall", - "favours", "favors", - "fervour", "fervor", - "flavour", "flavor", - "fuelled", "fueled", - "fulfils", "fulfills", - "gaolers", "jailers", - "gaoling", "jailing", - "gipsies", "gypsies", - "glueing", "gluing", - "goitres", "goiters", - "grammes", "grams", - "groynes", "groins", - "gryphon", "griffin", - "harbour", "harbor", - "honours", "honors", - "humours", "humors", - "idolise", "idolize", - "instals", "installs", - "instils", "instills", - "ionised", "ionized", - "ioniser", "ionizer", - "ionises", "ionizes", - "itemise", "itemize", - "labours", "labors", - "licence", "license", - "lionise", "lionize", - "louvred", "louvered", - "louvres", "louvers", - "moulded", "molded", - "moulder", "molder", - "moulted", "molted", - "offence", "offense", - "oxidise", "oxidize", - "parlour", "parlor", - "philtre", "filter", - "ploughs", "plows", - "pyjamas", "pajamas", - "rancour", "rancor", - "realise", "realize", - "remould", "remold", - "rigours", "rigors", - "rumours", "rumors", - "saviour", "savior", - "savours", "savors", - "savoury", "savory", - "sceptic", "skeptic", - "sceptre", "scepter", - "spectre", "specter", - "storeys", "stories", - "succour", "succor", - "sulphur", "sulfur", - "syphons", "siphons", - "theatre", "theater", - "tumours", "tumors", - "utilise", "utilize", - "vapours", "vapors", - "waggons", "wagons", - "yoghurt", "yogurt", - "ageing", "aging", - "appals", "appalls", - "arbour", "arbor", - "ardour", "ardor", - "baulks", "balks", - "behove", "behoove", - "centre", "center", - "cheque", "check", - "chilli", "chili", - "colour", "color", - "cosier", "cozier", - "cosies", "cozies", - "cosily", "cozily", - "distil", "distill", - "edoema", "edema", - "enrols", "enrolls", - "faecal", "fecal", - "faeces", "feces", - "favour", "favor", - "fibres", "fibers", - "foetal", "fetal", - "foetid", "fetid", - "foetus", "fetus", - "fulfil", "fulfill", - "gaoled", "jailed", - "gaoler", "jailer", - "goitre", "goiter", - "gramme", "gram", - "groyne", "groin", - "honour", "honor", - "humour", "humor", - "instal", "install", - "instil", "instill", - "ionise", "ionize", - "labour", "labor", - "litres", "liters", - "lustre", "luster", - "meagre", "meager", - "metres", "meters", - "mitres", "miters", - "moulds", "molds", - "mouldy", "moldy", - "moults", "molts", - "odours", "odors", - "plough", "plow", - "pyjama", "pajama", - "rigour", "rigor", - "rumour", "rumor", - "savour", "savor", - "storey", "story", - "syphon", "siphon", - "tumour", "tumor", - "valour", "valor", - "vapour", "vapor", - "vigour", "vigor", - "waggon", "wagon", - "appal", "appall", - "baulk", "balk", - "enrol", "enroll", - "fibre", "fiber", - "gaols", "jails", - "litre", "liter", - "metre", "meter", - "mitre", "miter", - "mould", "mold", - "moult", "molt", - "odour", "odor", - "tyres", "tires", - "cosy", "cozy", - "gaol", "jail", - "tyre", "tire", -} - -// DictBritish converts US spellings to UK spellings -var DictBritish = []string{ - "institutionalization", "institutionalisation", - "internationalization", "internationalisation", - "professionalization", "professionalisation", - "compartmentalizing", "compartmentalising", - "institutionalizing", "institutionalising", - "internationalizing", "internationalising", - "compartmentalized", "compartmentalised", - "compartmentalizes", "compartmentalises", - "decriminalization", "decriminalisation", - "denationalization", "denationalisation", - "fictionalizations", "fictionalisations", - "institutionalized", "institutionalised", - "institutionalizes", "institutionalises", - "intellectualizing", "intellectualising", - "internationalized", "internationalised", - "internationalizes", "internationalises", - "pedestrianization", "pedestrianisation", - "professionalizing", "professionalising", - "compartmentalize", "compartmentalise", - "decentralization", "decentralisation", - "demilitarization", "demilitarisation", - "externalizations", "externalisations", - "fictionalization", "fictionalisation", - "institutionalize", "institutionalise", - "intellectualized", "intellectualised", - "intellectualizes", "intellectualises", - "internationalize", "internationalise", - "nationalizations", "nationalisations", - "professionalized", "professionalised", - "professionalizes", "professionalises", - "rationalizations", "rationalisations", - "sensationalizing", "sensationalising", - "sentimentalizing", "sentimentalising", - "acclimatization", "acclimatisation", - "commercializing", "commercialising", - "conceptualizing", "conceptualising", - "contextualizing", "contextualising", - "crystallization", "crystallisation", - "decriminalizing", "decriminalising", - "democratization", "democratisation", - "denationalizing", "denationalising", - "depersonalizing", "depersonalising", - "desensitization", "desensitisation", - "disorganization", "disorganisation", - "extemporization", "extemporisation", - "externalization", "externalisation", - "familiarization", "familiarisation", - "generalizations", "generalisations", - "hospitalization", "hospitalisation", - "individualizing", "individualising", - "industrializing", "industrialising", - "intellectualize", "intellectualise", - "internalization", "internalisation", - "maneuverability", "manoeuvrability", - "materialization", "materialisation", - "miniaturization", "miniaturisation", - "nationalization", "nationalisation", - "overemphasizing", "overemphasising", - "paleontologists", "palaeontologists", - "particularizing", "particularising", - "pedestrianizing", "pedestrianising", - "professionalize", "professionalise", - "psychoanalyzing", "psychoanalysing", - "rationalization", "rationalisation", - "reorganizations", "reorganisations", - "revolutionizing", "revolutionising", - "sensationalized", "sensationalised", - "sensationalizes", "sensationalises", - "sentimentalized", "sentimentalised", - "sentimentalizes", "sentimentalises", - "specializations", "specialisations", - "standardization", "standardisation", - "synchronization", "synchronisation", - "systematization", "systematisation", - "aggrandizement", "aggrandisement", - "characterizing", "characterising", - "collectivizing", "collectivising", - "commercialized", "commercialised", - "commercializes", "commercialises", - "conceptualized", "conceptualised", - "conceptualizes", "conceptualises", - "contextualized", "contextualised", - "contextualizes", "contextualises", - "decentralizing", "decentralising", - "decriminalized", "decriminalised", - "decriminalizes", "decriminalises", - "dehumanization", "dehumanisation", - "demilitarizing", "demilitarising", - "demobilization", "demobilisation", - "demoralization", "demoralisation", - "denationalized", "denationalised", - "denationalizes", "denationalises", - "depersonalized", "depersonalised", - "depersonalizes", "depersonalises", - "dramatizations", "dramatisations", - "editorializing", "editorialising", - "fictionalizing", "fictionalising", - "fraternization", "fraternisation", - "generalization", "generalisation", - "immobilization", "immobilisation", - "individualized", "individualised", - "individualizes", "individualises", - "industrialized", "industrialised", - "industrializes", "industrialises", - "liberalization", "liberalisation", - "monopolization", "monopolisation", - "naturalization", "naturalisation", - "neighborliness", "neighbourliness", - "neutralization", "neutralisation", - "organizational", "organisational", - "outmaneuvering", "outmanoeuvring", - "overemphasized", "overemphasised", - "overemphasizes", "overemphasises", - "paleontologist", "palaeontologist", - "particularized", "particularised", - "particularizes", "particularises", - "pasteurization", "pasteurisation", - "pedestrianized", "pedestrianised", - "pedestrianizes", "pedestrianises", - "philosophizing", "philosophising", - "politicization", "politicisation", - "popularization", "popularisation", - "pressurization", "pressurisation", - "prioritization", "prioritisation", - "privatizations", "privatisations", - "propagandizing", "propagandising", - "psychoanalyzed", "psychoanalysed", - "psychoanalyzes", "psychoanalyses", - "reconnoitering", "reconnoitring", - "regularization", "regularisation", - "reorganization", "reorganisation", - "revolutionized", "revolutionised", - "revolutionizes", "revolutionises", - "secularization", "secularisation", - "sensationalize", "sensationalise", - "sentimentalize", "sentimentalise", - "serializations", "serialisations", - "specialization", "specialisation", - "sterilizations", "sterilisations", - "stigmatization", "stigmatisation", - "transistorized", "transistorised", - "unrecognizable", "unrecognisable", - "visualizations", "visualisations", - "westernization", "westernisation", - "accessorizing", "accessorising", - "acclimatizing", "acclimatising", - "amortizations", "amortisations", - "amphitheaters", "amphitheatres", - "anesthetizing", "anaesthetising", - "archeologists", "archaeologists", - "breathalyzers", "breathalysers", - "breathalyzing", "breathalysing", - "cannibalizing", "cannibalising", - "characterized", "characterised", - "characterizes", "characterises", - "circularizing", "circularising", - "collectivized", "collectivised", - "collectivizes", "collectivises", - "commercialize", "commercialise", - "computerizing", "computerising", - "conceptualize", "conceptualise", - "contextualize", "contextualise", - "criminalizing", "criminalising", - "crystallizing", "crystallising", - "decentralized", "decentralised", - "decentralizes", "decentralises", - "decriminalize", "decriminalise", - "demilitarized", "demilitarised", - "demilitarizes", "demilitarises", - "democratizing", "democratising", - "denationalize", "denationalise", - "depersonalize", "depersonalise", - "desensitizing", "desensitising", - "destabilizing", "destabilising", - "disemboweling", "disembowelling", - "dramatization", "dramatisation", - "editorialized", "editorialised", - "editorializes", "editorialises", - "extemporizing", "extemporising", - "externalizing", "externalising", - "familiarizing", "familiarising", - "fertilization", "fertilisation", - "fictionalized", "fictionalised", - "fictionalizes", "fictionalises", - "formalization", "formalisation", - "fossilization", "fossilisation", - "globalization", "globalisation", - "gynecological", "gynaecological", - "gynecologists", "gynaecologists", - "harmonization", "harmonisation", - "hematological", "haematological", - "hematologists", "haematologists", - "hospitalizing", "hospitalising", - "hypothesizing", "hypothesising", - "immortalizing", "immortalising", - "individualize", "individualise", - "industrialize", "industrialise", - "internalizing", "internalising", - "marginalizing", "marginalising", - "materializing", "materialising", - "mechanization", "mechanisation", - "memorializing", "memorialising", - "miniaturizing", "miniaturising", - "nationalizing", "nationalising", - "neighborhoods", "neighbourhoods", - "normalization", "normalisation", - "organizations", "organisations", - "outmaneuvered", "outmanoeuvred", - "overemphasize", "overemphasise", - "particularize", "particularise", - "passivization", "passivisation", - "patronizingly", "patronisingly", - "pedestrianize", "pedestrianise", - "pediatricians", "paediatricians", - "personalizing", "personalising", - "philosophized", "philosophised", - "philosophizes", "philosophises", - "privatization", "privatisation", - "propagandized", "propagandised", - "propagandizes", "propagandises", - "proselytizers", "proselytisers", - "proselytizing", "proselytising", - "psychoanalyze", "psychoanalyse", - "pulverization", "pulverisation", - "rationalizing", "rationalising", - "reconnoitered", "reconnoitred", - "revolutionize", "revolutionise", - "romanticizing", "romanticising", - "serialization", "serialisation", - "socialization", "socialisation", - "standardizing", "standardising", - "sterilization", "sterilisation", - "subsidization", "subsidisation", - "synchronizing", "synchronising", - "systematizing", "systematising", - "tantalizingly", "tantalisingly", - "underutilized", "underutilised", - "victimization", "victimisation", - "visualization", "visualisation", - "vocalizations", "vocalisations", - "vulgarization", "vulgarisation", - "accessorized", "accessorised", - "accessorizes", "accessorises", - "acclimatized", "acclimatised", - "acclimatizes", "acclimatises", - "amortization", "amortisation", - "amphitheater", "amphitheatre", - "anesthetists", "anaesthetists", - "anesthetized", "anaesthetised", - "anesthetizes", "anaesthetises", - "antagonizing", "antagonising", - "appetizingly", "appetisingly", - "archeologist", "archaeologist", - "backpedaling", "backpedalling", - "bastardizing", "bastardising", - "behaviorists", "behaviourists", - "bowdlerizing", "bowdlerising", - "breathalyzed", "breathalysed", - "breathalyzes", "breathalyses", - "cannibalized", "cannibalised", - "cannibalizes", "cannibalises", - "capitalizing", "capitalising", - "caramelizing", "caramelising", - "categorizing", "categorising", - "centerpieces", "centrepieces", - "centralizing", "centralising", - "characterize", "characterise", - "circularized", "circularised", - "circularizes", "circularises", - "clarinetists", "clarinettists", - "collectivize", "collectivise", - "colonization", "colonisation", - "computerized", "computerised", - "computerizes", "computerises", - "criminalized", "criminalised", - "criminalizes", "criminalises", - "crystallized", "crystallised", - "crystallizes", "crystallises", - "decentralize", "decentralise", - "dehumanizing", "dehumanising", - "demilitarize", "demilitarise", - "demobilizing", "demobilising", - "democratized", "democratised", - "democratizes", "democratises", - "demoralizing", "demoralising", - "desensitized", "desensitised", - "desensitizes", "desensitises", - "destabilized", "destabilised", - "destabilizes", "destabilises", - "disemboweled", "disembowelled", - "dishonorable", "dishonourable", - "dishonorably", "dishonourably", - "disorganized", "disorganised", - "editorialize", "editorialise", - "equalization", "equalisation", - "evangelizing", "evangelising", - "extemporized", "extemporised", - "extemporizes", "extemporises", - "externalized", "externalised", - "externalizes", "externalises", - "familiarized", "familiarised", - "familiarizes", "familiarises", - "fictionalize", "fictionalise", - "finalization", "finalisation", - "fraternizing", "fraternising", - "generalizing", "generalising", - "gynecologist", "gynaecologist", - "hematologist", "haematologist", - "hemophiliacs", "haemophiliacs", - "hemorrhaging", "haemorrhaging", - "homogenizing", "homogenising", - "hospitalized", "hospitalised", - "hospitalizes", "hospitalises", - "hypothesized", "hypothesised", - "hypothesizes", "hypothesises", - "idealization", "idealisation", - "immobilizers", "immobilisers", - "immobilizing", "immobilising", - "immortalized", "immortalised", - "immortalizes", "immortalises", - "immunization", "immunisation", - "initializing", "initialising", - "installments", "instalments", - "internalized", "internalised", - "internalizes", "internalises", - "jeopardizing", "jeopardising", - "legalization", "legalisation", - "legitimizing", "legitimising", - "liberalizing", "liberalising", - "maneuverable", "manoeuvrable", - "maneuverings", "manoeuvrings", - "marginalized", "marginalised", - "marginalizes", "marginalises", - "materialized", "materialised", - "materializes", "materialises", - "maximization", "maximisation", - "memorialized", "memorialised", - "memorializes", "memorialises", - "metabolizing", "metabolising", - "militarizing", "militarising", - "miniaturized", "miniaturised", - "miniaturizes", "miniaturises", - "miscataloged", "miscatalogued", - "misdemeanors", "misdemeanours", - "mobilization", "mobilisation", - "moisturizers", "moisturisers", - "moisturizing", "moisturising", - "monopolizing", "monopolising", - "multicolored", "multicoloured", - "nationalized", "nationalised", - "nationalizes", "nationalises", - "naturalizing", "naturalising", - "neighborhood", "neighbourhood", - "neutralizing", "neutralising", - "organization", "organisation", - "outmaneuvers", "outmanoeuvres", - "paleontology", "palaeontology", - "pasteurizing", "pasteurising", - "pediatrician", "paediatrician", - "personalized", "personalised", - "personalizes", "personalises", - "philosophize", "philosophise", - "plagiarizing", "plagiarising", - "polarization", "polarisation", - "politicizing", "politicising", - "popularizing", "popularising", - "pressurizing", "pressurising", - "prioritizing", "prioritising", - "propagandize", "propagandise", - "proselytized", "proselytised", - "proselytizer", "proselytiser", - "proselytizes", "proselytises", - "radicalizing", "radicalising", - "rationalized", "rationalised", - "rationalizes", "rationalises", - "realizations", "realisations", - "recognizable", "recognisable", - "recognizably", "recognisably", - "recognizance", "recognisance", - "reconnoiters", "reconnoitres", - "regularizing", "regularising", - "reorganizing", "reorganising", - "revitalizing", "revitalising", - "rhapsodizing", "rhapsodising", - "romanticized", "romanticised", - "romanticizes", "romanticises", - "scandalizing", "scandalising", - "scrutinizing", "scrutinising", - "secularizing", "secularising", - "standardized", "standardised", - "standardizes", "standardises", - "stigmatizing", "stigmatising", - "sympathizers", "sympathisers", - "sympathizing", "sympathising", - "synchronized", "synchronised", - "synchronizes", "synchronises", - "synthesizing", "synthesising", - "systematized", "systematised", - "systematizes", "systematises", - "theatergoers", "theatregoers", - "traumatizing", "traumatising", - "trivializing", "trivialising", - "unauthorized", "unauthorised", - "unionization", "unionisation", - "unrecognized", "unrecognised", - "urbanization", "urbanisation", - "vaporization", "vaporisation", - "vocalization", "vocalisation", - "westernizing", "westernising", - "accessorize", "accessorise", - "acclimatize", "acclimatise", - "agonizingly", "agonisingly", - "amortizable", "amortisable", - "anesthetics", "anaesthetics", - "anesthetist", "anaesthetist", - "anesthetize", "anaesthetise", - "anglicizing", "anglicising", - "antagonized", "antagonised", - "antagonizes", "antagonises", - "apologizing", "apologising", - "backpedaled", "backpedalled", - "bastardized", "bastardised", - "bastardizes", "bastardises", - "behaviorism", "behaviourism", - "behaviorist", "behaviourist", - "bowdlerized", "bowdlerised", - "bowdlerizes", "bowdlerises", - "brutalizing", "brutalising", - "cannibalize", "cannibalise", - "capitalized", "capitalised", - "capitalizes", "capitalises", - "caramelized", "caramelised", - "caramelizes", "caramelises", - "carbonizing", "carbonising", - "categorized", "categorised", - "categorizes", "categorises", - "cauterizing", "cauterising", - "centerfolds", "centrefolds", - "centerpiece", "centrepiece", - "centiliters", "centilitres", - "centimeters", "centimetres", - "centralized", "centralised", - "centralizes", "centralises", - "circularize", "circularise", - "clarinetist", "clarinettist", - "computerize", "computerise", - "criminalize", "criminalise", - "criticizing", "criticising", - "crystallize", "crystallise", - "customizing", "customising", - "defenseless", "defenceless", - "dehumanized", "dehumanised", - "dehumanizes", "dehumanises", - "demobilized", "demobilised", - "demobilizes", "demobilises", - "democratize", "democratise", - "demoralized", "demoralised", - "demoralizes", "demoralises", - "deodorizing", "deodorising", - "desensitize", "desensitise", - "destabilize", "destabilise", - "discoloring", "discolouring", - "dishonoring", "dishonouring", - "dramatizing", "dramatising", - "economizing", "economising", - "empathizing", "empathising", - "emphasizing", "emphasising", - "endeavoring", "endeavouring", - "epitomizing", "epitomising", - "esophaguses", "oesophaguses", - "evangelized", "evangelised", - "evangelizes", "evangelises", - "extemporize", "extemporise", - "externalize", "externalise", - "factorizing", "factorising", - "familiarize", "familiarise", - "fantasizing", "fantasising", - "fertilizers", "fertilisers", - "fertilizing", "fertilising", - "formalizing", "formalising", - "fossilizing", "fossilising", - "fraternized", "fraternised", - "fraternizes", "fraternises", - "fulfillment", "fulfilment", - "galvanizing", "galvanising", - "generalized", "generalised", - "generalizes", "generalises", - "ghettoizing", "ghettoising", - "globalizing", "globalising", - "harmonizing", "harmonising", - "hemophiliac", "haemophiliac", - "hemorrhaged", "haemorrhaged", - "hemorrhages", "haemorrhages", - "hemorrhoids", "haemorrhoids", - "homogenized", "homogenised", - "homogenizes", "homogenises", - "hospitalize", "hospitalise", - "hybridizing", "hybridising", - "hypnotizing", "hypnotising", - "hypothesize", "hypothesise", - "immobilized", "immobilised", - "immobilizer", "immobiliser", - "immobilizes", "immobilises", - "immortalize", "immortalise", - "initialized", "initialised", - "initializes", "initialises", - "installment", "instalment", - "internalize", "internalise", - "italicizing", "italicising", - "jeopardized", "jeopardised", - "jeopardizes", "jeopardises", - "legitimized", "legitimised", - "legitimizes", "legitimises", - "liberalized", "liberalised", - "liberalizes", "liberalises", - "lionization", "lionisation", - "liquidizers", "liquidisers", - "liquidizing", "liquidising", - "magnetizing", "magnetising", - "maneuvering", "manoeuvring", - "marginalize", "marginalise", - "marvelously", "marvellously", - "materialize", "materialise", - "mechanizing", "mechanising", - "memorialize", "memorialise", - "mesmerizing", "mesmerising", - "metabolized", "metabolised", - "metabolizes", "metabolises", - "militarized", "militarised", - "militarizes", "militarises", - "milliliters", "millilitres", - "millimeters", "millimetres", - "miniaturize", "miniaturise", - "misbehavior", "misbehaviour", - "misdemeanor", "misdemeanour", - "modernizing", "modernising", - "moisturized", "moisturised", - "moisturizer", "moisturiser", - "moisturizes", "moisturises", - "monopolized", "monopolised", - "monopolizes", "monopolises", - "nationalize", "nationalise", - "naturalized", "naturalised", - "naturalizes", "naturalises", - "neighboring", "neighbouring", - "neutralized", "neutralised", - "neutralizes", "neutralises", - "normalizing", "normalising", - "orthopedics", "orthopaedics", - "ostracizing", "ostracising", - "outmaneuver", "outmanoeuvre", - "oxidization", "oxidisation", - "pasteurized", "pasteurised", - "pasteurizes", "pasteurises", - "patronizing", "patronising", - "personalize", "personalise", - "plagiarized", "plagiarised", - "plagiarizes", "plagiarises", - "politicized", "politicised", - "politicizes", "politicises", - "popularized", "popularised", - "popularizes", "popularises", - "pressurized", "pressurised", - "pressurizes", "pressurises", - "prioritized", "prioritised", - "prioritizes", "prioritises", - "privatizing", "privatising", - "proselytize", "proselytise", - "publicizing", "publicising", - "pulverizing", "pulverising", - "radicalized", "radicalised", - "radicalizes", "radicalises", - "randomizing", "randomising", - "rationalize", "rationalise", - "realization", "realisation", - "recognizing", "recognising", - "reconnoiter", "reconnoitre", - "regularized", "regularised", - "regularizes", "regularises", - "reorganized", "reorganised", - "reorganizes", "reorganises", - "revitalized", "revitalised", - "revitalizes", "revitalises", - "rhapsodized", "rhapsodised", - "rhapsodizes", "rhapsodises", - "romanticize", "romanticise", - "scandalized", "scandalised", - "scandalizes", "scandalises", - "scrutinized", "scrutinised", - "scrutinizes", "scrutinises", - "secularized", "secularised", - "secularizes", "secularises", - "sensitizing", "sensitising", - "serializing", "serialising", - "sermonizing", "sermonising", - "signalizing", "signalising", - "skeptically", "sceptically", - "socializing", "socialising", - "solemnizing", "solemnising", - "specialized", "specialised", - "specializes", "specialises", - "squirreling", "squirrelling", - "stabilizers", "stabilisers", - "stabilizing", "stabilising", - "standardize", "standardise", - "sterilizers", "sterilisers", - "sterilizing", "sterilising", - "stigmatized", "stigmatised", - "stigmatizes", "stigmatises", - "subsidizers", "subsidisers", - "subsidizing", "subsidising", - "summarizing", "summarising", - "symbolizing", "symbolising", - "sympathized", "sympathised", - "sympathizer", "sympathiser", - "sympathizes", "sympathises", - "synchronize", "synchronise", - "synthesized", "synthesised", - "synthesizes", "synthesises", - "systematize", "systematise", - "tantalizing", "tantalising", - "temporizing", "temporising", - "tenderizing", "tenderising", - "terrorizing", "terrorising", - "theatergoer", "theatregoer", - "traumatized", "traumatised", - "traumatizes", "traumatises", - "trivialized", "trivialised", - "trivializes", "trivialises", - "tyrannizing", "tyrannising", - "uncataloged", "uncatalogued", - "uncivilized", "uncivilised", - "unfavorable", "unfavourable", - "unfavorably", "unfavourably", - "unorganized", "unorganised", - "untrammeled", "untrammelled", - "utilization", "utilisation", - "vandalizing", "vandalising", - "verbalizing", "verbalising", - "victimizing", "victimising", - "visualizing", "visualising", - "vulgarizing", "vulgarising", - "watercolors", "watercolours", - "westernized", "westernised", - "westernizes", "westernises", - "amortizing", "amortising", - "anesthesia", "anaesthesia", - "anesthetic", "anaesthetic", - "anglicized", "anglicised", - "anglicizes", "anglicises", - "annualized", "annualised", - "antagonize", "antagonise", - "apologized", "apologised", - "apologizes", "apologises", - "appetizers", "appetisers", - "appetizing", "appetising", - "archeology", "archaeology", - "authorizes", "authorises", - "bastardize", "bastardise", - "bedeviling", "bedevilling", - "behavioral", "behavioural", - "belaboring", "belabouring", - "bowdlerize", "bowdlerise", - "brutalized", "brutalised", - "brutalizes", "brutalises", - "canalizing", "canalising", - "canonizing", "canonising", - "capitalize", "capitalise", - "caramelize", "caramelise", - "carbonized", "carbonised", - "carbonizes", "carbonises", - "cataloging", "cataloguing", - "catalyzing", "catalysing", - "categorize", "categorise", - "cauterized", "cauterised", - "cauterizes", "cauterises", - "centerfold", "centrefold", - "centiliter", "centilitre", - "centimeter", "centimetre", - "centralize", "centralise", - "channeling", "channelling", - "checkbooks", "chequebooks", - "civilizing", "civilising", - "colonizers", "colonisers", - "colonizing", "colonising", - "colorfully", "colourfully", - "colorizing", "colourizing", - "councilors", "councillors", - "counselors", "counsellors", - "criticized", "criticised", - "criticizes", "criticises", - "customized", "customised", - "customizes", "customises", - "dehumanize", "dehumanise", - "demobilize", "demobilise", - "demonizing", "demonising", - "demoralize", "demoralise", - "deodorized", "deodorised", - "deodorizes", "deodorises", - "deputizing", "deputising", - "digitizing", "digitising", - "discolored", "discoloured", - "disheveled", "dishevelled", - "dishonored", "dishonoured", - "dramatized", "dramatised", - "dramatizes", "dramatises", - "economized", "economised", - "economizes", "economises", - "empathized", "empathised", - "empathizes", "empathises", - "emphasized", "emphasised", - "emphasizes", "emphasises", - "endeavored", "endeavoured", - "energizing", "energising", - "epicenters", "epicentres", - "epitomized", "epitomised", - "epitomizes", "epitomises", - "equalizers", "equalisers", - "equalizing", "equalising", - "eulogizing", "eulogising", - "evangelize", "evangelise", - "factorized", "factorised", - "factorizes", "factorises", - "fantasized", "fantasised", - "fantasizes", "fantasises", - "favoritism", "favouritism", - "feminizing", "feminising", - "fertilized", "fertilised", - "fertilizer", "fertiliser", - "fertilizes", "fertilises", - "fiberglass", "fibreglass", - "finalizing", "finalising", - "flavorings", "flavourings", - "flavorless", "flavourless", - "flavorsome", "flavoursome", - "formalized", "formalised", - "formalizes", "formalises", - "fossilized", "fossilised", - "fossilizes", "fossilises", - "fraternize", "fraternise", - "galvanized", "galvanised", - "galvanizes", "galvanises", - "generalize", "generalise", - "ghettoized", "ghettoised", - "ghettoizes", "ghettoises", - "globalized", "globalised", - "globalizes", "globalises", - "gruelingly", "gruellingly", - "gynecology", "gynaecology", - "harmonized", "harmonised", - "harmonizes", "harmonises", - "hematology", "haematology", - "hemoglobin", "haemoglobin", - "hemophilia", "haemophilia", - "hemorrhage", "haemorrhage", - "homogenize", "homogenise", - "humanizing", "humanising", - "hybridized", "hybridised", - "hybridizes", "hybridises", - "hypnotized", "hypnotised", - "hypnotizes", "hypnotises", - "idealizing", "idealising", - "immobilize", "immobilise", - "immunizing", "immunising", - "impaneling", "impanelling", - "imperiling", "imperilling", - "initialing", "initialling", - "initialize", "initialise", - "ionization", "ionisation", - "italicized", "italicised", - "italicizes", "italicises", - "jeopardize", "jeopardise", - "kilometers", "kilometres", - "lackluster", "lacklustre", - "legalizing", "legalising", - "legitimize", "legitimise", - "liberalize", "liberalise", - "liquidized", "liquidised", - "liquidizer", "liquidiser", - "liquidizes", "liquidises", - "localizing", "localising", - "magnetized", "magnetised", - "magnetizes", "magnetises", - "maneuvered", "manoeuvred", - "marshaling", "marshalling", - "maximizing", "maximising", - "mechanized", "mechanised", - "mechanizes", "mechanises", - "memorizing", "memorising", - "mesmerized", "mesmerised", - "mesmerizes", "mesmerises", - "metabolize", "metabolise", - "militarize", "militarise", - "milliliter", "millilitre", - "millimeter", "millimetre", - "minimizing", "minimising", - "mobilizing", "mobilising", - "modernized", "modernised", - "modernizes", "modernises", - "moisturize", "moisturise", - "monopolize", "monopolise", - "moralizing", "moralising", - "naturalize", "naturalise", - "neighborly", "neighbourly", - "neutralize", "neutralise", - "normalized", "normalised", - "normalizes", "normalises", - "optimizing", "optimising", - "organizers", "organisers", - "organizing", "organising", - "orthopedic", "orthopaedic", - "ostracized", "ostracised", - "ostracizes", "ostracises", - "paralyzing", "paralysing", - "pasteurize", "pasteurise", - "patronized", "patronised", - "patronizes", "patronises", - "pedophiles", "paedophiles", - "pedophilia", "paedophilia", - "penalizing", "penalising", - "plagiarize", "plagiarise", - "plowshares", "ploughshares", - "polarizing", "polarising", - "politicize", "politicise", - "popularize", "popularise", - "prioritize", "prioritise", - "privatized", "privatised", - "privatizes", "privatises", - "publicized", "publicised", - "publicizes", "publicises", - "pulverized", "pulverised", - "pulverizes", "pulverises", - "quarreling", "quarrelling", - "radicalize", "radicalise", - "randomized", "randomised", - "randomizes", "randomises", - "realizable", "realisable", - "recognized", "recognised", - "recognizes", "recognises", - "regularize", "regularise", - "remodeling", "remodelling", - "reorganize", "reorganise", - "revitalize", "revitalise", - "rhapsodize", "rhapsodise", - "ritualized", "ritualised", - "sanitizing", "sanitising", - "satirizing", "satirising", - "scandalize", "scandalise", - "scrutinize", "scrutinise", - "secularize", "secularise", - "sensitized", "sensitised", - "sensitizes", "sensitises", - "sepulchers", "sepulchres", - "serialized", "serialised", - "serializes", "serialises", - "sermonized", "sermonised", - "sermonizes", "sermonises", - "shriveling", "shrivelling", - "signalized", "signalised", - "signalizes", "signalises", - "skepticism", "scepticism", - "socialized", "socialised", - "socializes", "socialises", - "sodomizing", "sodomising", - "solemnized", "solemnised", - "solemnizes", "solemnises", - "specialize", "specialise", - "squirreled", "squirrelled", - "stabilized", "stabilised", - "stabilizer", "stabiliser", - "stabilizes", "stabilises", - "stenciling", "stencilling", - "sterilized", "sterilised", - "sterilizer", "steriliser", - "sterilizes", "sterilises", - "stigmatize", "stigmatise", - "subsidized", "subsidised", - "subsidizer", "subsidiser", - "subsidizes", "subsidises", - "summarized", "summarised", - "summarizes", "summarises", - "symbolized", "symbolised", - "symbolizes", "symbolises", - "sympathize", "sympathise", - "tantalized", "tantalised", - "tantalizes", "tantalises", - "temporized", "temporised", - "temporizes", "temporises", - "tenderized", "tenderised", - "tenderizes", "tenderises", - "terrorized", "terrorised", - "terrorizes", "terrorises", - "theorizing", "theorising", - "traumatize", "traumatise", - "trivialize", "trivialise", - "tyrannized", "tyrannised", - "tyrannizes", "tyrannises", - "unionizing", "unionising", - "unraveling", "unravelling", - "urbanizing", "urbanising", - "utilizable", "utilisable", - "vandalized", "vandalised", - "vandalizes", "vandalises", - "vaporizing", "vaporising", - "verbalized", "verbalised", - "verbalizes", "verbalises", - "victimized", "victimised", - "victimizes", "victimises", - "visualized", "visualised", - "visualizes", "visualises", - "vocalizing", "vocalising", - "vulcanized", "vulcanised", - "vulgarized", "vulgarised", - "vulgarizes", "vulgarises", - "watercolor", "watercolour", - "westernize", "westernise", - "womanizers", "womanisers", - "womanizing", "womanising", - "worshiping", "worshipping", - "agonizing", "agonising", - "airplanes", "aeroplanes", - "amortized", "amortised", - "amortizes", "amortises", - "analyzing", "analysing", - "apologize", "apologise", - "appetizer", "appetiser", - "artifacts", "artefacts", - "baptizing", "baptising", - "bedeviled", "bedevilled", - "behaviors", "behaviours", - "bejeweled", "bejewelled", - "belabored", "belaboured", - "brutalize", "brutalise", - "canalized", "canalised", - "canalizes", "canalises", - "canonized", "canonised", - "canonizes", "canonises", - "carbonize", "carbonise", - "cataloged", "catalogued", - "catalyzed", "catalysed", - "catalyzes", "catalyses", - "cauterize", "cauterise", - "channeled", "channelled", - "checkbook", "chequebook", - "checkered", "chequered", - "chiseling", "chiselling", - "civilized", "civilised", - "civilizes", "civilises", - "clamoring", "clamouring", - "colonized", "colonised", - "colonizer", "coloniser", - "colonizes", "colonises", - "colorants", "colourants", - "colorized", "colourized", - "colorizes", "colourizes", - "colorless", "colourless", - "councilor", "councillor", - "counseled", "counselled", - "counselor", "counsellor", - "criticize", "criticise", - "cudgeling", "cudgelling", - "customize", "customise", - "demonized", "demonised", - "demonizes", "demonises", - "deodorize", "deodorise", - "deputized", "deputised", - "deputizes", "deputises", - "digitized", "digitised", - "digitizes", "digitises", - "discolors", "discolours", - "dishonors", "dishonours", - "dramatize", "dramatise", - "driveling", "drivelling", - "economize", "economise", - "empathize", "empathise", - "emphasize", "emphasise", - "enameling", "enamelling", - "endeavors", "endeavours", - "energized", "energised", - "energizes", "energises", - "enthralls", "enthrals", - "epicenter", "epicentre", - "epitomize", "epitomise", - "equalized", "equalised", - "equalizer", "equaliser", - "equalizes", "equalises", - "eulogized", "eulogised", - "eulogizes", "eulogises", - "factorize", "factorise", - "fantasize", "fantasise", - "favorable", "favourable", - "favorably", "favourably", - "favorites", "favourites", - "feminized", "feminised", - "feminizes", "feminises", - "fertilize", "fertilise", - "finalized", "finalised", - "finalizes", "finalises", - "flavoring", "flavouring", - "formalize", "formalise", - "fossilize", "fossilise", - "funneling", "funnelling", - "galvanize", "galvanise", - "gamboling", "gambolling", - "ghettoize", "ghettoise", - "globalize", "globalise", - "gonorrhea", "gonorrhoea", - "groveling", "grovelling", - "harboring", "harbouring", - "harmonize", "harmonise", - "honorably", "honourably", - "humanized", "humanised", - "humanizes", "humanises", - "hybridize", "hybridise", - "hypnotize", "hypnotise", - "idealized", "idealised", - "idealizes", "idealises", - "idolizing", "idolising", - "immunized", "immunised", - "immunizes", "immunises", - "impaneled", "impanelled", - "imperiled", "imperilled", - "initialed", "initialled", - "italicize", "italicise", - "itemizing", "itemising", - "kilometer", "kilometre", - "legalized", "legalised", - "legalizes", "legalises", - "lionizing", "lionising", - "liquidize", "liquidise", - "localized", "localised", - "localizes", "localises", - "magnetize", "magnetise", - "maneuvers", "manoeuvres", - "marshaled", "marshalled", - "marveling", "marvelling", - "marvelous", "marvellous", - "maximized", "maximised", - "maximizes", "maximises", - "mechanize", "mechanise", - "memorized", "memorised", - "memorizes", "memorises", - "mesmerize", "mesmerise", - "minimized", "minimised", - "minimizes", "minimises", - "mobilized", "mobilised", - "mobilizes", "mobilises", - "modernize", "modernise", - "moldering", "mouldering", - "moralized", "moralised", - "moralizes", "moralises", - "motorized", "motorised", - "mustached", "moustached", - "mustaches", "moustaches", - "neighbors", "neighbours", - "normalize", "normalise", - "optimized", "optimised", - "optimizes", "optimises", - "organized", "organised", - "organizer", "organiser", - "organizes", "organises", - "ostracize", "ostracise", - "oxidizing", "oxidising", - "panelists", "panellists", - "paralyzed", "paralysed", - "paralyzes", "paralyses", - "parceling", "parcelling", - "patronize", "patronise", - "pedophile", "paedophile", - "penalized", "penalised", - "penalizes", "penalises", - "penciling", "pencilling", - "plowshare", "ploughshare", - "polarized", "polarised", - "polarizes", "polarises", - "practiced", "practised", - "pretenses", "pretences", - "privatize", "privatise", - "publicize", "publicise", - "pulverize", "pulverise", - "quarreled", "quarrelled", - "randomize", "randomise", - "realizing", "realising", - "recognize", "recognise", - "refueling", "refuelling", - "remodeled", "remodelled", - "remolding", "remoulding", - "saltpeter", "saltpetre", - "sanitized", "sanitised", - "sanitizes", "sanitises", - "satirized", "satirised", - "satirizes", "satirises", - "sensitize", "sensitise", - "sepulcher", "sepulchre", - "serialize", "serialise", - "sermonize", "sermonise", - "shoveling", "shovelling", - "shriveled", "shrivelled", - "signaling", "signalling", - "signalize", "signalise", - "skeptical", "sceptical", - "sniveling", "snivelling", - "snorkeled", "snorkelled", - "socialize", "socialise", - "sodomized", "sodomised", - "sodomizes", "sodomises", - "solemnize", "solemnise", - "spiraling", "spiralling", - "splendors", "splendours", - "stabilize", "stabilise", - "stenciled", "stencilled", - "sterilize", "sterilise", - "subsidize", "subsidise", - "succoring", "succouring", - "sulfurous", "sulphurous", - "summarize", "summarise", - "swiveling", "swivelling", - "symbolize", "symbolise", - "tantalize", "tantalise", - "temporize", "temporise", - "tenderize", "tenderise", - "terrorize", "terrorise", - "theorized", "theorised", - "theorizes", "theorises", - "travelers", "travellers", - "traveling", "travelling", - "tricolors", "tricolours", - "tunneling", "tunnelling", - "tyrannize", "tyrannise", - "unequaled", "unequalled", - "unionized", "unionised", - "unionizes", "unionises", - "unraveled", "unravelled", - "unrivaled", "unrivalled", - "urbanized", "urbanised", - "urbanizes", "urbanises", - "utilizing", "utilising", - "vandalize", "vandalise", - "vaporized", "vaporised", - "vaporizes", "vaporises", - "verbalize", "verbalise", - "victimize", "victimise", - "visualize", "visualise", - "vocalized", "vocalised", - "vocalizes", "vocalises", - "vulgarize", "vulgarise", - "weaseling", "weaselling", - "womanized", "womanised", - "womanizer", "womaniser", - "womanizes", "womanises", - "worshiped", "worshipped", - "worshiper", "worshipper", - "agonized", "agonised", - "agonizes", "agonises", - "airplane", "aeroplane", - "aluminum", "aluminium", - "amortize", "amortise", - "analyzed", "analysed", - "analyzes", "analyses", - "armorers", "armourers", - "armories", "armouries", - "artifact", "artefact", - "baptized", "baptised", - "baptizes", "baptises", - "behavior", "behaviour", - "behooved", "behoved", - "behooves", "behoves", - "belabors", "belabours", - "calibers", "calibres", - "canalize", "canalise", - "canonize", "canonise", - "catalogs", "catalogues", - "catalyze", "catalyse", - "caviling", "cavilling", - "centered", "centred", - "chiseled", "chiselled", - "civilize", "civilise", - "clamored", "clamoured", - "colonize", "colonise", - "colorant", "colourant", - "coloreds", "coloureds", - "colorful", "colourful", - "coloring", "colouring", - "colorize", "colourize", - "coziness", "cosiness", - "cruelest", "cruellest", - "cudgeled", "cudgelled", - "defenses", "defences", - "demeanor", "demeanour", - "demonize", "demonise", - "deputize", "deputise", - "diarrhea", "diarrhoea", - "digitize", "digitise", - "disfavor", "disfavour", - "dishonor", "dishonour", - "distills", "distils", - "driveled", "drivelled", - "enameled", "enamelled", - "enamored", "enamoured", - "endeavor", "endeavour", - "energize", "energise", - "epaulets", "epaulettes", - "equalize", "equalise", - "estrogen", "oestrogen", - "etiology", "aetiology", - "eulogize", "eulogise", - "favoring", "favouring", - "favorite", "favourite", - "feminize", "feminise", - "finalize", "finalise", - "flavored", "flavoured", - "flutists", "flautists", - "fulfills", "fulfils", - "funneled", "funnelled", - "gamboled", "gambolled", - "graveled", "gravelled", - "groveled", "grovelled", - "grueling", "gruelling", - "harbored", "harboured", - "honoring", "honouring", - "humanize", "humanise", - "humoring", "humouring", - "idealize", "idealise", - "idolized", "idolised", - "idolizes", "idolises", - "immunize", "immunise", - "ionizing", "ionising", - "itemized", "itemised", - "itemizes", "itemises", - "jewelers", "jewellers", - "labeling", "labelling", - "laborers", "labourers", - "laboring", "labouring", - "legalize", "legalise", - "leukemia", "leukaemia", - "levelers", "levellers", - "leveling", "levelling", - "libeling", "libelling", - "libelous", "libellous", - "lionized", "lionised", - "lionizes", "lionises", - "localize", "localise", - "louvered", "louvred", - "maneuver", "manoeuvre", - "marveled", "marvelled", - "maximize", "maximise", - "memorize", "memorise", - "minimize", "minimise", - "mobilize", "mobilise", - "modelers", "modellers", - "modeling", "modelling", - "moldered", "mouldered", - "moldiest", "mouldiest", - "moldings", "mouldings", - "moralize", "moralise", - "mustache", "moustache", - "neighbor", "neighbour", - "odorless", "odourless", - "offenses", "offences", - "optimize", "optimise", - "organize", "organise", - "oxidized", "oxidised", - "oxidizes", "oxidises", - "paneling", "panelling", - "panelist", "panellist", - "paralyze", "paralyse", - "parceled", "parcelled", - "pedaling", "pedalling", - "penalize", "penalise", - "penciled", "pencilled", - "polarize", "polarise", - "pretense", "pretence", - "pummeled", "pummelling", - "raveling", "ravelling", - "realized", "realised", - "realizes", "realises", - "refueled", "refuelled", - "remolded", "remoulded", - "revelers", "revellers", - "reveling", "revelling", - "rivaling", "rivalling", - "sanitize", "sanitise", - "satirize", "satirise", - "savories", "savouries", - "savoring", "savouring", - "scepters", "sceptres", - "shoveled", "shovelled", - "signaled", "signalled", - "skeptics", "sceptics", - "sniveled", "snivelled", - "sodomize", "sodomise", - "specters", "spectres", - "spiraled", "spiralled", - "splendor", "splendour", - "succored", "succoured", - "sulfates", "sulphates", - "sulfides", "sulphides", - "swiveled", "swivelled", - "tasseled", "tasselled", - "theaters", "theatres", - "theorize", "theorise", - "toweling", "towelling", - "traveler", "traveller", - "trialing", "trialling", - "tricolor", "tricolour", - "tunneled", "tunnelled", - "unionize", "unionise", - "unsavory", "unsavoury", - "urbanize", "urbanise", - "utilized", "utilised", - "utilizes", "utilises", - "vaporize", "vaporise", - "vocalize", "vocalise", - "weaseled", "weaselled", - "womanize", "womanise", - "yodeling", "yodelling", - "agonize", "agonise", - "analyze", "analyse", - "appalls", "appals", - "armored", "armoured", - "armorer", "armourer", - "baptize", "baptise", - "behoove", "behove", - "belabor", "belabour", - "beveled", "bevelled", - "caliber", "calibre", - "caroled", "carolled", - "caviled", "cavilled", - "centers", "centres", - "clamors", "clamours", - "clangor", "clangour", - "colored", "coloured", - "coziest", "cosiest", - "crueler", "crueller", - "defense", "defence", - "dialing", "dialling", - "dialogs", "dialogues", - "distill", "distil", - "dueling", "duelling", - "enrolls", "enrols", - "epaulet", "epaulette", - "favored", "favoured", - "flavors", "flavours", - "flutist", "flautist", - "fueling", "fuelling", - "fulfill", "fulfil", - "goiters", "goitres", - "harbors", "harbours", - "honored", "honoured", - "humored", "humoured", - "idolize", "idolise", - "ionized", "ionised", - "ionizes", "ionises", - "itemize", "itemise", - "jeweled", "jewelled", - "jeweler", "jeweller", - "jewelry", "jewellery", - "labeled", "labelled", - "labored", "laboured", - "laborer", "labourer", - "leveled", "levelled", - "leveler", "leveller", - "libeled", "libelled", - "lionize", "lionise", - "louvers", "louvres", - "modeled", "modelled", - "modeler", "modeller", - "molders", "moulders", - "moldier", "mouldier", - "molding", "moulding", - "molting", "moulting", - "offense", "offence", - "oxidize", "oxidise", - "pajamas", "pyjamas", - "paneled", "panelled", - "parlors", "parlours", - "pedaled", "pedalled", - "plowing", "ploughing", - "plowman", "ploughman", - "plowmen", "ploughmen", - "realize", "realise", - "remolds", "remoulds", - "reveled", "revelled", - "reveler", "reveller", - "rivaled", "rivalled", - "rumored", "rumoured", - "saviors", "saviours", - "savored", "savoured", - "scepter", "sceptre", - "skeptic", "sceptic", - "specter", "spectre", - "succors", "succours", - "sulfate", "sulphate", - "sulfide", "sulphide", - "theater", "theatre", - "toweled", "towelled", - "toxemia", "toxaemia", - "trialed", "trialled", - "utilize", "utilise", - "yodeled", "yodelled", - "anemia", "anaemia", - "anemic", "anaemic", - "appall", "appal", - "arbors", "arbours", - "armory", "armoury", - "candor", "candour", - "center", "centre", - "clamor", "clamour", - "colors", "colours", - "cozier", "cosier", - "cozies", "cosies", - "cozily", "cosily", - "dialed", "dialled", - "drafty", "draughty", - "dueled", "duelled", - "favors", "favours", - "fervor", "fervour", - "fibers", "fibres", - "flavor", "flavour", - "fueled", "fuelled", - "goiter", "goitre", - "harbor", "harbour", - "honors", "honours", - "humors", "humours", - "labors", "labours", - "liters", "litres", - "louver", "louvre", - "luster", "lustre", - "meager", "meagre", - "miters", "mitres", - "molded", "moulded", - "molder", "moulder", - "molted", "moulted", - "pajama", "pyjama", - "parlor", "parlour", - "plowed", "ploughed", - "rancor", "rancour", - "remold", "remould", - "rigors", "rigours", - "rumors", "rumours", - "savors", "savours", - "savory", "savoury", - "succor", "succour", - "tumors", "tumours", - "vapors", "vapours", - "aging", "ageing", - "arbor", "arbour", - "ardor", "ardour", - "armor", "armour", - "chili", "chilli", - "color", "colour", - "edema", "edoema", - "favor", "favour", - "fecal", "faecal", - "feces", "faeces", - "fiber", "fibre", - "honor", "honour", - "humor", "humour", - "labor", "labour", - "liter", "litre", - "miter", "mitre", - "molds", "moulds", - "moldy", "mouldy", - "molts", "moults", - "odors", "odours", - "plows", "ploughs", - "rigor", "rigour", - "rumor", "rumour", - "savor", "savour", - "valor", "valour", - "vapor", "vapour", - "vigor", "vigour", - "cozy", "cosy", - "mold", "mould", - "molt", "moult", - "odor", "odour", - "plow", "plough", -} diff --git a/vendor/gopkg.in/yaml.v3/.travis.yml b/vendor/gopkg.in/yaml.v3/.travis.yml deleted file mode 100644 index fc88f9bb..00000000 --- a/vendor/gopkg.in/yaml.v3/.travis.yml +++ /dev/null @@ -1,15 +0,0 @@ -language: go - -go: - - "1.4" - - "1.5" - - "1.6" - - "1.7" - - "1.8" - - "1.9" - - "1.10" - - "1.11" - - "1.12" - - tip - -go_import_path: gopkg.in/yaml.v2 diff --git a/vendor/gopkg.in/yaml.v3/LICENSE b/vendor/gopkg.in/yaml.v3/LICENSE deleted file mode 100644 index 2683e4bb..00000000 --- a/vendor/gopkg.in/yaml.v3/LICENSE +++ /dev/null @@ -1,50 +0,0 @@ - -This project is covered by two different licenses: MIT and Apache. - -#### MIT License #### - -The following files were ported to Go from C files of libyaml, and thus -are still covered by their original MIT license, with the additional -copyright staring in 2011 when the project was ported over: - - apic.go emitterc.go parserc.go readerc.go scannerc.go - writerc.go yamlh.go yamlprivateh.go - -Copyright (c) 2006-2010 Kirill Simonov -Copyright (c) 2006-2011 Kirill Simonov - -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. - -### Apache License ### - -All the remaining project files are covered by the Apache license: - -Copyright (c) 2011-2019 Canonical Ltd - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. diff --git a/vendor/gopkg.in/yaml.v3/NOTICE b/vendor/gopkg.in/yaml.v3/NOTICE deleted file mode 100644 index 866d74a7..00000000 --- a/vendor/gopkg.in/yaml.v3/NOTICE +++ /dev/null @@ -1,13 +0,0 @@ -Copyright 2011-2016 Canonical Ltd. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. diff --git a/vendor/gopkg.in/yaml.v3/README.md b/vendor/gopkg.in/yaml.v3/README.md deleted file mode 100644 index 08eb1bab..00000000 --- a/vendor/gopkg.in/yaml.v3/README.md +++ /dev/null @@ -1,150 +0,0 @@ -# YAML support for the Go language - -Introduction ------------- - -The yaml package enables Go programs to comfortably encode and decode YAML -values. It was developed within [Canonical](https://www.canonical.com) as -part of the [juju](https://juju.ubuntu.com) project, and is based on a -pure Go port of the well-known [libyaml](http://pyyaml.org/wiki/LibYAML) -C library to parse and generate YAML data quickly and reliably. - -Compatibility -------------- - -The yaml package supports most of YAML 1.2, but preserves some behavior -from 1.1 for backwards compatibility. - -Specifically, as of v3 of the yaml package: - - - YAML 1.1 bools (_yes/no, on/off_) are supported as long as they are being - decoded into a typed bool value. Otherwise they behave as a string. Booleans - in YAML 1.2 are _true/false_ only. - - Octals encode and decode as _0777_ per YAML 1.1, rather than _0o777_ - as specified in YAML 1.2, because most parsers still use the old format. - Octals in the _0o777_ format are supported though, so new files work. - - Does not support base-60 floats. These are gone from YAML 1.2, and were - actually never supported by this package as it's clearly a poor choice. - -and offers backwards -compatibility with YAML 1.1 in some cases. -1.2, including support for -anchors, tags, map merging, etc. Multi-document unmarshalling is not yet -implemented, and base-60 floats from YAML 1.1 are purposefully not -supported since they're a poor design and are gone in YAML 1.2. - -Installation and usage ----------------------- - -The import path for the package is *gopkg.in/yaml.v3*. - -To install it, run: - - go get gopkg.in/yaml.v3 - -API documentation ------------------ - -If opened in a browser, the import path itself leads to the API documentation: - - - [https://gopkg.in/yaml.v3](https://gopkg.in/yaml.v3) - -API stability -------------- - -The package API for yaml v3 will remain stable as described in [gopkg.in](https://gopkg.in). - - -License -------- - -The yaml package is licensed under the MIT and Apache License 2.0 licenses. -Please see the LICENSE file for details. - - -Example -------- - -```Go -package main - -import ( - "fmt" - "log" - - "gopkg.in/yaml.v3" -) - -var data = ` -a: Easy! -b: - c: 2 - d: [3, 4] -` - -// Note: struct fields must be public in order for unmarshal to -// correctly populate the data. -type T struct { - A string - B struct { - RenamedC int `yaml:"c"` - D []int `yaml:",flow"` - } -} - -func main() { - t := T{} - - err := yaml.Unmarshal([]byte(data), &t) - if err != nil { - log.Fatalf("error: %v", err) - } - fmt.Printf("--- t:\n%v\n\n", t) - - d, err := yaml.Marshal(&t) - if err != nil { - log.Fatalf("error: %v", err) - } - fmt.Printf("--- t dump:\n%s\n\n", string(d)) - - m := make(map[interface{}]interface{}) - - err = yaml.Unmarshal([]byte(data), &m) - if err != nil { - log.Fatalf("error: %v", err) - } - fmt.Printf("--- m:\n%v\n\n", m) - - d, err = yaml.Marshal(&m) - if err != nil { - log.Fatalf("error: %v", err) - } - fmt.Printf("--- m dump:\n%s\n\n", string(d)) -} -``` - -This example will generate the following output: - -``` ---- t: -{Easy! {2 [3 4]}} - ---- t dump: -a: Easy! -b: - c: 2 - d: [3, 4] - - ---- m: -map[a:Easy! b:map[c:2 d:[3 4]]] - ---- m dump: -a: Easy! -b: - c: 2 - d: - - 3 - - 4 -``` - diff --git a/vendor/gopkg.in/yaml.v3/apic.go b/vendor/gopkg.in/yaml.v3/apic.go deleted file mode 100644 index 65846e67..00000000 --- a/vendor/gopkg.in/yaml.v3/apic.go +++ /dev/null @@ -1,746 +0,0 @@ -// -// Copyright (c) 2011-2019 Canonical Ltd -// Copyright (c) 2006-2010 Kirill Simonov -// -// 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. - -package yaml - -import ( - "io" -) - -func yaml_insert_token(parser *yaml_parser_t, pos int, token *yaml_token_t) { - //fmt.Println("yaml_insert_token", "pos:", pos, "typ:", token.typ, "head:", parser.tokens_head, "len:", len(parser.tokens)) - - // Check if we can move the queue at the beginning of the buffer. - if parser.tokens_head > 0 && len(parser.tokens) == cap(parser.tokens) { - if parser.tokens_head != len(parser.tokens) { - copy(parser.tokens, parser.tokens[parser.tokens_head:]) - } - parser.tokens = parser.tokens[:len(parser.tokens)-parser.tokens_head] - parser.tokens_head = 0 - } - parser.tokens = append(parser.tokens, *token) - if pos < 0 { - return - } - copy(parser.tokens[parser.tokens_head+pos+1:], parser.tokens[parser.tokens_head+pos:]) - parser.tokens[parser.tokens_head+pos] = *token -} - -// Create a new parser object. -func yaml_parser_initialize(parser *yaml_parser_t) bool { - *parser = yaml_parser_t{ - raw_buffer: make([]byte, 0, input_raw_buffer_size), - buffer: make([]byte, 0, input_buffer_size), - } - return true -} - -// Destroy a parser object. -func yaml_parser_delete(parser *yaml_parser_t) { - *parser = yaml_parser_t{} -} - -// String read handler. -func yaml_string_read_handler(parser *yaml_parser_t, buffer []byte) (n int, err error) { - if parser.input_pos == len(parser.input) { - return 0, io.EOF - } - n = copy(buffer, parser.input[parser.input_pos:]) - parser.input_pos += n - return n, nil -} - -// Reader read handler. -func yaml_reader_read_handler(parser *yaml_parser_t, buffer []byte) (n int, err error) { - return parser.input_reader.Read(buffer) -} - -// Set a string input. -func yaml_parser_set_input_string(parser *yaml_parser_t, input []byte) { - if parser.read_handler != nil { - panic("must set the input source only once") - } - parser.read_handler = yaml_string_read_handler - parser.input = input - parser.input_pos = 0 -} - -// Set a file input. -func yaml_parser_set_input_reader(parser *yaml_parser_t, r io.Reader) { - if parser.read_handler != nil { - panic("must set the input source only once") - } - parser.read_handler = yaml_reader_read_handler - parser.input_reader = r -} - -// Set the source encoding. -func yaml_parser_set_encoding(parser *yaml_parser_t, encoding yaml_encoding_t) { - if parser.encoding != yaml_ANY_ENCODING { - panic("must set the encoding only once") - } - parser.encoding = encoding -} - -// Create a new emitter object. -func yaml_emitter_initialize(emitter *yaml_emitter_t) { - *emitter = yaml_emitter_t{ - buffer: make([]byte, output_buffer_size), - raw_buffer: make([]byte, 0, output_raw_buffer_size), - states: make([]yaml_emitter_state_t, 0, initial_stack_size), - events: make([]yaml_event_t, 0, initial_queue_size), - } -} - -// Destroy an emitter object. -func yaml_emitter_delete(emitter *yaml_emitter_t) { - *emitter = yaml_emitter_t{} -} - -// String write handler. -func yaml_string_write_handler(emitter *yaml_emitter_t, buffer []byte) error { - *emitter.output_buffer = append(*emitter.output_buffer, buffer...) - return nil -} - -// yaml_writer_write_handler uses emitter.output_writer to write the -// emitted text. -func yaml_writer_write_handler(emitter *yaml_emitter_t, buffer []byte) error { - _, err := emitter.output_writer.Write(buffer) - return err -} - -// Set a string output. -func yaml_emitter_set_output_string(emitter *yaml_emitter_t, output_buffer *[]byte) { - if emitter.write_handler != nil { - panic("must set the output target only once") - } - emitter.write_handler = yaml_string_write_handler - emitter.output_buffer = output_buffer -} - -// Set a file output. -func yaml_emitter_set_output_writer(emitter *yaml_emitter_t, w io.Writer) { - if emitter.write_handler != nil { - panic("must set the output target only once") - } - emitter.write_handler = yaml_writer_write_handler - emitter.output_writer = w -} - -// Set the output encoding. -func yaml_emitter_set_encoding(emitter *yaml_emitter_t, encoding yaml_encoding_t) { - if emitter.encoding != yaml_ANY_ENCODING { - panic("must set the output encoding only once") - } - emitter.encoding = encoding -} - -// Set the canonical output style. -func yaml_emitter_set_canonical(emitter *yaml_emitter_t, canonical bool) { - emitter.canonical = canonical -} - -// Set the indentation increment. -func yaml_emitter_set_indent(emitter *yaml_emitter_t, indent int) { - if indent < 2 || indent > 9 { - indent = 2 - } - emitter.best_indent = indent -} - -// Set the preferred line width. -func yaml_emitter_set_width(emitter *yaml_emitter_t, width int) { - if width < 0 { - width = -1 - } - emitter.best_width = width -} - -// Set if unescaped non-ASCII characters are allowed. -func yaml_emitter_set_unicode(emitter *yaml_emitter_t, unicode bool) { - emitter.unicode = unicode -} - -// Set the preferred line break character. -func yaml_emitter_set_break(emitter *yaml_emitter_t, line_break yaml_break_t) { - emitter.line_break = line_break -} - -///* -// * Destroy a token object. -// */ -// -//YAML_DECLARE(void) -//yaml_token_delete(yaml_token_t *token) -//{ -// assert(token); // Non-NULL token object expected. -// -// switch (token.type) -// { -// case YAML_TAG_DIRECTIVE_TOKEN: -// yaml_free(token.data.tag_directive.handle); -// yaml_free(token.data.tag_directive.prefix); -// break; -// -// case YAML_ALIAS_TOKEN: -// yaml_free(token.data.alias.value); -// break; -// -// case YAML_ANCHOR_TOKEN: -// yaml_free(token.data.anchor.value); -// break; -// -// case YAML_TAG_TOKEN: -// yaml_free(token.data.tag.handle); -// yaml_free(token.data.tag.suffix); -// break; -// -// case YAML_SCALAR_TOKEN: -// yaml_free(token.data.scalar.value); -// break; -// -// default: -// break; -// } -// -// memset(token, 0, sizeof(yaml_token_t)); -//} -// -///* -// * Check if a string is a valid UTF-8 sequence. -// * -// * Check 'reader.c' for more details on UTF-8 encoding. -// */ -// -//static int -//yaml_check_utf8(yaml_char_t *start, size_t length) -//{ -// yaml_char_t *end = start+length; -// yaml_char_t *pointer = start; -// -// while (pointer < end) { -// unsigned char octet; -// unsigned int width; -// unsigned int value; -// size_t k; -// -// octet = pointer[0]; -// width = (octet & 0x80) == 0x00 ? 1 : -// (octet & 0xE0) == 0xC0 ? 2 : -// (octet & 0xF0) == 0xE0 ? 3 : -// (octet & 0xF8) == 0xF0 ? 4 : 0; -// value = (octet & 0x80) == 0x00 ? octet & 0x7F : -// (octet & 0xE0) == 0xC0 ? octet & 0x1F : -// (octet & 0xF0) == 0xE0 ? octet & 0x0F : -// (octet & 0xF8) == 0xF0 ? octet & 0x07 : 0; -// if (!width) return 0; -// if (pointer+width > end) return 0; -// for (k = 1; k < width; k ++) { -// octet = pointer[k]; -// if ((octet & 0xC0) != 0x80) return 0; -// value = (value << 6) + (octet & 0x3F); -// } -// if (!((width == 1) || -// (width == 2 && value >= 0x80) || -// (width == 3 && value >= 0x800) || -// (width == 4 && value >= 0x10000))) return 0; -// -// pointer += width; -// } -// -// return 1; -//} -// - -// Create STREAM-START. -func yaml_stream_start_event_initialize(event *yaml_event_t, encoding yaml_encoding_t) { - *event = yaml_event_t{ - typ: yaml_STREAM_START_EVENT, - encoding: encoding, - } -} - -// Create STREAM-END. -func yaml_stream_end_event_initialize(event *yaml_event_t) { - *event = yaml_event_t{ - typ: yaml_STREAM_END_EVENT, - } -} - -// Create DOCUMENT-START. -func yaml_document_start_event_initialize( - event *yaml_event_t, - version_directive *yaml_version_directive_t, - tag_directives []yaml_tag_directive_t, - implicit bool, -) { - *event = yaml_event_t{ - typ: yaml_DOCUMENT_START_EVENT, - version_directive: version_directive, - tag_directives: tag_directives, - implicit: implicit, - } -} - -// Create DOCUMENT-END. -func yaml_document_end_event_initialize(event *yaml_event_t, implicit bool) { - *event = yaml_event_t{ - typ: yaml_DOCUMENT_END_EVENT, - implicit: implicit, - } -} - -// Create ALIAS. -func yaml_alias_event_initialize(event *yaml_event_t, anchor []byte) bool { - *event = yaml_event_t{ - typ: yaml_ALIAS_EVENT, - anchor: anchor, - } - return true -} - -// Create SCALAR. -func yaml_scalar_event_initialize(event *yaml_event_t, anchor, tag, value []byte, plain_implicit, quoted_implicit bool, style yaml_scalar_style_t) bool { - *event = yaml_event_t{ - typ: yaml_SCALAR_EVENT, - anchor: anchor, - tag: tag, - value: value, - implicit: plain_implicit, - quoted_implicit: quoted_implicit, - style: yaml_style_t(style), - } - return true -} - -// Create SEQUENCE-START. -func yaml_sequence_start_event_initialize(event *yaml_event_t, anchor, tag []byte, implicit bool, style yaml_sequence_style_t) bool { - *event = yaml_event_t{ - typ: yaml_SEQUENCE_START_EVENT, - anchor: anchor, - tag: tag, - implicit: implicit, - style: yaml_style_t(style), - } - return true -} - -// Create SEQUENCE-END. -func yaml_sequence_end_event_initialize(event *yaml_event_t) bool { - *event = yaml_event_t{ - typ: yaml_SEQUENCE_END_EVENT, - } - return true -} - -// Create MAPPING-START. -func yaml_mapping_start_event_initialize(event *yaml_event_t, anchor, tag []byte, implicit bool, style yaml_mapping_style_t) { - *event = yaml_event_t{ - typ: yaml_MAPPING_START_EVENT, - anchor: anchor, - tag: tag, - implicit: implicit, - style: yaml_style_t(style), - } -} - -// Create MAPPING-END. -func yaml_mapping_end_event_initialize(event *yaml_event_t) { - *event = yaml_event_t{ - typ: yaml_MAPPING_END_EVENT, - } -} - -// Destroy an event object. -func yaml_event_delete(event *yaml_event_t) { - *event = yaml_event_t{} -} - -///* -// * Create a document object. -// */ -// -//YAML_DECLARE(int) -//yaml_document_initialize(document *yaml_document_t, -// version_directive *yaml_version_directive_t, -// tag_directives_start *yaml_tag_directive_t, -// tag_directives_end *yaml_tag_directive_t, -// start_implicit int, end_implicit int) -//{ -// struct { -// error yaml_error_type_t -// } context -// struct { -// start *yaml_node_t -// end *yaml_node_t -// top *yaml_node_t -// } nodes = { NULL, NULL, NULL } -// version_directive_copy *yaml_version_directive_t = NULL -// struct { -// start *yaml_tag_directive_t -// end *yaml_tag_directive_t -// top *yaml_tag_directive_t -// } tag_directives_copy = { NULL, NULL, NULL } -// value yaml_tag_directive_t = { NULL, NULL } -// mark yaml_mark_t = { 0, 0, 0 } -// -// assert(document) // Non-NULL document object is expected. -// assert((tag_directives_start && tag_directives_end) || -// (tag_directives_start == tag_directives_end)) -// // Valid tag directives are expected. -// -// if (!STACK_INIT(&context, nodes, INITIAL_STACK_SIZE)) goto error -// -// if (version_directive) { -// version_directive_copy = yaml_malloc(sizeof(yaml_version_directive_t)) -// if (!version_directive_copy) goto error -// version_directive_copy.major = version_directive.major -// version_directive_copy.minor = version_directive.minor -// } -// -// if (tag_directives_start != tag_directives_end) { -// tag_directive *yaml_tag_directive_t -// if (!STACK_INIT(&context, tag_directives_copy, INITIAL_STACK_SIZE)) -// goto error -// for (tag_directive = tag_directives_start -// tag_directive != tag_directives_end; tag_directive ++) { -// assert(tag_directive.handle) -// assert(tag_directive.prefix) -// if (!yaml_check_utf8(tag_directive.handle, -// strlen((char *)tag_directive.handle))) -// goto error -// if (!yaml_check_utf8(tag_directive.prefix, -// strlen((char *)tag_directive.prefix))) -// goto error -// value.handle = yaml_strdup(tag_directive.handle) -// value.prefix = yaml_strdup(tag_directive.prefix) -// if (!value.handle || !value.prefix) goto error -// if (!PUSH(&context, tag_directives_copy, value)) -// goto error -// value.handle = NULL -// value.prefix = NULL -// } -// } -// -// DOCUMENT_INIT(*document, nodes.start, nodes.end, version_directive_copy, -// tag_directives_copy.start, tag_directives_copy.top, -// start_implicit, end_implicit, mark, mark) -// -// return 1 -// -//error: -// STACK_DEL(&context, nodes) -// yaml_free(version_directive_copy) -// while (!STACK_EMPTY(&context, tag_directives_copy)) { -// value yaml_tag_directive_t = POP(&context, tag_directives_copy) -// yaml_free(value.handle) -// yaml_free(value.prefix) -// } -// STACK_DEL(&context, tag_directives_copy) -// yaml_free(value.handle) -// yaml_free(value.prefix) -// -// return 0 -//} -// -///* -// * Destroy a document object. -// */ -// -//YAML_DECLARE(void) -//yaml_document_delete(document *yaml_document_t) -//{ -// struct { -// error yaml_error_type_t -// } context -// tag_directive *yaml_tag_directive_t -// -// context.error = YAML_NO_ERROR // Eliminate a compiler warning. -// -// assert(document) // Non-NULL document object is expected. -// -// while (!STACK_EMPTY(&context, document.nodes)) { -// node yaml_node_t = POP(&context, document.nodes) -// yaml_free(node.tag) -// switch (node.type) { -// case YAML_SCALAR_NODE: -// yaml_free(node.data.scalar.value) -// break -// case YAML_SEQUENCE_NODE: -// STACK_DEL(&context, node.data.sequence.items) -// break -// case YAML_MAPPING_NODE: -// STACK_DEL(&context, node.data.mapping.pairs) -// break -// default: -// assert(0) // Should not happen. -// } -// } -// STACK_DEL(&context, document.nodes) -// -// yaml_free(document.version_directive) -// for (tag_directive = document.tag_directives.start -// tag_directive != document.tag_directives.end -// tag_directive++) { -// yaml_free(tag_directive.handle) -// yaml_free(tag_directive.prefix) -// } -// yaml_free(document.tag_directives.start) -// -// memset(document, 0, sizeof(yaml_document_t)) -//} -// -///** -// * Get a document node. -// */ -// -//YAML_DECLARE(yaml_node_t *) -//yaml_document_get_node(document *yaml_document_t, index int) -//{ -// assert(document) // Non-NULL document object is expected. -// -// if (index > 0 && document.nodes.start + index <= document.nodes.top) { -// return document.nodes.start + index - 1 -// } -// return NULL -//} -// -///** -// * Get the root object. -// */ -// -//YAML_DECLARE(yaml_node_t *) -//yaml_document_get_root_node(document *yaml_document_t) -//{ -// assert(document) // Non-NULL document object is expected. -// -// if (document.nodes.top != document.nodes.start) { -// return document.nodes.start -// } -// return NULL -//} -// -///* -// * Add a scalar node to a document. -// */ -// -//YAML_DECLARE(int) -//yaml_document_add_scalar(document *yaml_document_t, -// tag *yaml_char_t, value *yaml_char_t, length int, -// style yaml_scalar_style_t) -//{ -// struct { -// error yaml_error_type_t -// } context -// mark yaml_mark_t = { 0, 0, 0 } -// tag_copy *yaml_char_t = NULL -// value_copy *yaml_char_t = NULL -// node yaml_node_t -// -// assert(document) // Non-NULL document object is expected. -// assert(value) // Non-NULL value is expected. -// -// if (!tag) { -// tag = (yaml_char_t *)YAML_DEFAULT_SCALAR_TAG -// } -// -// if (!yaml_check_utf8(tag, strlen((char *)tag))) goto error -// tag_copy = yaml_strdup(tag) -// if (!tag_copy) goto error -// -// if (length < 0) { -// length = strlen((char *)value) -// } -// -// if (!yaml_check_utf8(value, length)) goto error -// value_copy = yaml_malloc(length+1) -// if (!value_copy) goto error -// memcpy(value_copy, value, length) -// value_copy[length] = '\0' -// -// SCALAR_NODE_INIT(node, tag_copy, value_copy, length, style, mark, mark) -// if (!PUSH(&context, document.nodes, node)) goto error -// -// return document.nodes.top - document.nodes.start -// -//error: -// yaml_free(tag_copy) -// yaml_free(value_copy) -// -// return 0 -//} -// -///* -// * Add a sequence node to a document. -// */ -// -//YAML_DECLARE(int) -//yaml_document_add_sequence(document *yaml_document_t, -// tag *yaml_char_t, style yaml_sequence_style_t) -//{ -// struct { -// error yaml_error_type_t -// } context -// mark yaml_mark_t = { 0, 0, 0 } -// tag_copy *yaml_char_t = NULL -// struct { -// start *yaml_node_item_t -// end *yaml_node_item_t -// top *yaml_node_item_t -// } items = { NULL, NULL, NULL } -// node yaml_node_t -// -// assert(document) // Non-NULL document object is expected. -// -// if (!tag) { -// tag = (yaml_char_t *)YAML_DEFAULT_SEQUENCE_TAG -// } -// -// if (!yaml_check_utf8(tag, strlen((char *)tag))) goto error -// tag_copy = yaml_strdup(tag) -// if (!tag_copy) goto error -// -// if (!STACK_INIT(&context, items, INITIAL_STACK_SIZE)) goto error -// -// SEQUENCE_NODE_INIT(node, tag_copy, items.start, items.end, -// style, mark, mark) -// if (!PUSH(&context, document.nodes, node)) goto error -// -// return document.nodes.top - document.nodes.start -// -//error: -// STACK_DEL(&context, items) -// yaml_free(tag_copy) -// -// return 0 -//} -// -///* -// * Add a mapping node to a document. -// */ -// -//YAML_DECLARE(int) -//yaml_document_add_mapping(document *yaml_document_t, -// tag *yaml_char_t, style yaml_mapping_style_t) -//{ -// struct { -// error yaml_error_type_t -// } context -// mark yaml_mark_t = { 0, 0, 0 } -// tag_copy *yaml_char_t = NULL -// struct { -// start *yaml_node_pair_t -// end *yaml_node_pair_t -// top *yaml_node_pair_t -// } pairs = { NULL, NULL, NULL } -// node yaml_node_t -// -// assert(document) // Non-NULL document object is expected. -// -// if (!tag) { -// tag = (yaml_char_t *)YAML_DEFAULT_MAPPING_TAG -// } -// -// if (!yaml_check_utf8(tag, strlen((char *)tag))) goto error -// tag_copy = yaml_strdup(tag) -// if (!tag_copy) goto error -// -// if (!STACK_INIT(&context, pairs, INITIAL_STACK_SIZE)) goto error -// -// MAPPING_NODE_INIT(node, tag_copy, pairs.start, pairs.end, -// style, mark, mark) -// if (!PUSH(&context, document.nodes, node)) goto error -// -// return document.nodes.top - document.nodes.start -// -//error: -// STACK_DEL(&context, pairs) -// yaml_free(tag_copy) -// -// return 0 -//} -// -///* -// * Append an item to a sequence node. -// */ -// -//YAML_DECLARE(int) -//yaml_document_append_sequence_item(document *yaml_document_t, -// sequence int, item int) -//{ -// struct { -// error yaml_error_type_t -// } context -// -// assert(document) // Non-NULL document is required. -// assert(sequence > 0 -// && document.nodes.start + sequence <= document.nodes.top) -// // Valid sequence id is required. -// assert(document.nodes.start[sequence-1].type == YAML_SEQUENCE_NODE) -// // A sequence node is required. -// assert(item > 0 && document.nodes.start + item <= document.nodes.top) -// // Valid item id is required. -// -// if (!PUSH(&context, -// document.nodes.start[sequence-1].data.sequence.items, item)) -// return 0 -// -// return 1 -//} -// -///* -// * Append a pair of a key and a value to a mapping node. -// */ -// -//YAML_DECLARE(int) -//yaml_document_append_mapping_pair(document *yaml_document_t, -// mapping int, key int, value int) -//{ -// struct { -// error yaml_error_type_t -// } context -// -// pair yaml_node_pair_t -// -// assert(document) // Non-NULL document is required. -// assert(mapping > 0 -// && document.nodes.start + mapping <= document.nodes.top) -// // Valid mapping id is required. -// assert(document.nodes.start[mapping-1].type == YAML_MAPPING_NODE) -// // A mapping node is required. -// assert(key > 0 && document.nodes.start + key <= document.nodes.top) -// // Valid key id is required. -// assert(value > 0 && document.nodes.start + value <= document.nodes.top) -// // Valid value id is required. -// -// pair.key = key -// pair.value = value -// -// if (!PUSH(&context, -// document.nodes.start[mapping-1].data.mapping.pairs, pair)) -// return 0 -// -// return 1 -//} -// -// diff --git a/vendor/gopkg.in/yaml.v3/decode.go b/vendor/gopkg.in/yaml.v3/decode.go deleted file mode 100644 index f8641366..00000000 --- a/vendor/gopkg.in/yaml.v3/decode.go +++ /dev/null @@ -1,864 +0,0 @@ -// -// Copyright (c) 2011-2019 Canonical Ltd -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package yaml - -import ( - "encoding" - "encoding/base64" - "fmt" - "io" - "math" - "reflect" - "strconv" - "time" -) - -// ---------------------------------------------------------------------------- -// Parser, produces a node tree out of a libyaml event stream. - -type parser struct { - parser yaml_parser_t - event yaml_event_t - doc *Node - anchors map[string]*Node - doneInit bool -} - -func newParser(b []byte) *parser { - p := parser{} - if !yaml_parser_initialize(&p.parser) { - panic("failed to initialize YAML emitter") - } - if len(b) == 0 { - b = []byte{'\n'} - } - yaml_parser_set_input_string(&p.parser, b) - return &p -} - -func newParserFromReader(r io.Reader) *parser { - p := parser{} - if !yaml_parser_initialize(&p.parser) { - panic("failed to initialize YAML emitter") - } - yaml_parser_set_input_reader(&p.parser, r) - return &p -} - -func (p *parser) init() { - if p.doneInit { - return - } - p.anchors = make(map[string]*Node) - p.expect(yaml_STREAM_START_EVENT) - p.doneInit = true -} - -func (p *parser) destroy() { - if p.event.typ != yaml_NO_EVENT { - yaml_event_delete(&p.event) - } - yaml_parser_delete(&p.parser) -} - -// expect consumes an event from the event stream and -// checks that it's of the expected type. -func (p *parser) expect(e yaml_event_type_t) { - if p.event.typ == yaml_NO_EVENT { - if !yaml_parser_parse(&p.parser, &p.event) { - p.fail() - } - } - if p.event.typ == yaml_STREAM_END_EVENT { - failf("attempted to go past the end of stream; corrupted value?") - } - if p.event.typ != e { - p.parser.problem = fmt.Sprintf("expected %s event but got %s", e, p.event.typ) - p.fail() - } - yaml_event_delete(&p.event) - p.event.typ = yaml_NO_EVENT -} - -// peek peeks at the next event in the event stream, -// puts the results into p.event and returns the event type. -func (p *parser) peek() yaml_event_type_t { - if p.event.typ != yaml_NO_EVENT { - return p.event.typ - } - if !yaml_parser_parse(&p.parser, &p.event) { - p.fail() - } - return p.event.typ -} - -func (p *parser) fail() { - var where string - var line int - if p.parser.problem_mark.line != 0 { - line = p.parser.problem_mark.line - // Scanner errors don't iterate line before returning error - if p.parser.error == yaml_SCANNER_ERROR { - line++ - } - } else if p.parser.context_mark.line != 0 { - line = p.parser.context_mark.line - } - if line != 0 { - where = "line " + strconv.Itoa(line) + ": " - } - var msg string - if len(p.parser.problem) > 0 { - msg = p.parser.problem - } else { - msg = "unknown problem parsing YAML content" - } - failf("%s%s", where, msg) -} - -func (p *parser) anchor(n *Node, anchor []byte) { - if anchor != nil { - n.Anchor = string(anchor) - p.anchors[n.Anchor] = n - } -} - -func (p *parser) parse() *Node { - p.init() - switch p.peek() { - case yaml_SCALAR_EVENT: - return p.scalar() - case yaml_ALIAS_EVENT: - return p.alias() - case yaml_MAPPING_START_EVENT: - return p.mapping() - case yaml_SEQUENCE_START_EVENT: - return p.sequence() - case yaml_DOCUMENT_START_EVENT: - return p.document() - case yaml_STREAM_END_EVENT: - // Happens when attempting to decode an empty buffer. - return nil - default: - panic("attempted to parse unknown event: " + p.event.typ.String()) - } -} - -func (p *parser) node(kind Kind, defaultTag, tag, value string) *Node { - var style Style - if tag != "" && tag != "!" { - tag = shortTag(tag) - style = TaggedStyle - } else if defaultTag != "" { - tag = defaultTag - } else if kind == ScalarNode { - tag, _ = resolve("", value) - } - return &Node{ - Kind: kind, - Tag: tag, - Value: value, - Style: style, - Line: p.event.start_mark.line + 1, - Column: p.event.start_mark.column + 1, - HeadComment: string(p.event.head_comment), - LineComment: string(p.event.line_comment), - FootComment: string(p.event.foot_comment), - } -} - -func (p *parser) parseChild(parent *Node) *Node { - child := p.parse() - parent.Content = append(parent.Content, child) - return child -} - -func (p *parser) document() *Node { - n := p.node(DocumentNode, "", "", "") - p.doc = n - p.expect(yaml_DOCUMENT_START_EVENT) - p.parseChild(n) - if p.peek() == yaml_DOCUMENT_END_EVENT { - n.FootComment = string(p.event.foot_comment) - } - p.expect(yaml_DOCUMENT_END_EVENT) - return n -} - -func (p *parser) alias() *Node { - n := p.node(AliasNode, "", "", string(p.event.anchor)) - n.Alias = p.anchors[n.Value] - if n.Alias == nil { - failf("unknown anchor '%s' referenced", n.Value) - } - p.expect(yaml_ALIAS_EVENT) - return n -} - -func (p *parser) scalar() *Node { - var parsedStyle = p.event.scalar_style() - var nodeStyle Style - switch { - case parsedStyle&yaml_DOUBLE_QUOTED_SCALAR_STYLE != 0: - nodeStyle = DoubleQuotedStyle - case parsedStyle&yaml_SINGLE_QUOTED_SCALAR_STYLE != 0: - nodeStyle = SingleQuotedStyle - case parsedStyle&yaml_LITERAL_SCALAR_STYLE != 0: - nodeStyle = LiteralStyle - case parsedStyle&yaml_FOLDED_SCALAR_STYLE != 0: - nodeStyle = FoldedStyle - } - var nodeValue = string(p.event.value) - var nodeTag = string(p.event.tag) - var defaultTag string - if nodeStyle == 0 { - if nodeValue == "<<" { - defaultTag = mergeTag - } - } else { - defaultTag = strTag - } - n := p.node(ScalarNode, defaultTag, nodeTag, nodeValue) - n.Style |= nodeStyle - p.anchor(n, p.event.anchor) - p.expect(yaml_SCALAR_EVENT) - return n -} - -func (p *parser) sequence() *Node { - n := p.node(SequenceNode, seqTag, string(p.event.tag), "") - if p.event.sequence_style()&yaml_FLOW_SEQUENCE_STYLE != 0 { - n.Style |= FlowStyle - } - p.anchor(n, p.event.anchor) - p.expect(yaml_SEQUENCE_START_EVENT) - for p.peek() != yaml_SEQUENCE_END_EVENT { - p.parseChild(n) - } - n.LineComment = string(p.event.line_comment) - n.FootComment = string(p.event.foot_comment) - p.expect(yaml_SEQUENCE_END_EVENT) - return n -} - -func (p *parser) mapping() *Node { - n := p.node(MappingNode, mapTag, string(p.event.tag), "") - if p.event.mapping_style()&yaml_FLOW_MAPPING_STYLE != 0 { - n.Style |= FlowStyle - } - p.anchor(n, p.event.anchor) - p.expect(yaml_MAPPING_START_EVENT) - for p.peek() != yaml_MAPPING_END_EVENT { - k := p.parseChild(n) - v := p.parseChild(n) - if v.FootComment != "" { - k.FootComment = v.FootComment - v.FootComment = "" - } - } - n.LineComment = string(p.event.line_comment) - n.FootComment = string(p.event.foot_comment) - p.expect(yaml_MAPPING_END_EVENT) - return n -} - -// ---------------------------------------------------------------------------- -// Decoder, unmarshals a node into a provided value. - -type decoder struct { - doc *Node - aliases map[*Node]bool - terrors []string - - stringMapType reflect.Type - generalMapType reflect.Type - - knownFields bool - uniqueKeys bool -} - -var ( - nodeType = reflect.TypeOf(Node{}) - durationType = reflect.TypeOf(time.Duration(0)) - stringMapType = reflect.TypeOf(map[string]interface{}{}) - generalMapType = reflect.TypeOf(map[interface{}]interface{}{}) - ifaceType = generalMapType.Elem() - timeType = reflect.TypeOf(time.Time{}) - ptrTimeType = reflect.TypeOf(&time.Time{}) -) - -func newDecoder() *decoder { - d := &decoder{ - stringMapType: stringMapType, - generalMapType: generalMapType, - uniqueKeys: true, - } - d.aliases = make(map[*Node]bool) - return d -} - -func (d *decoder) terror(n *Node, tag string, out reflect.Value) { - if n.Tag != "" { - tag = n.Tag - } - value := n.Value - if tag != seqTag && tag != mapTag { - if len(value) > 10 { - value = " `" + value[:7] + "...`" - } else { - value = " `" + value + "`" - } - } - d.terrors = append(d.terrors, fmt.Sprintf("line %d: cannot unmarshal %s%s into %s", n.Line, shortTag(tag), value, out.Type())) -} - -func (d *decoder) callUnmarshaler(n *Node, u Unmarshaler) (good bool) { - if err := u.UnmarshalYAML(n); err != nil { - fail(err) - } - return true -} - -func (d *decoder) callObsoleteUnmarshaler(n *Node, u obsoleteUnmarshaler) (good bool) { - terrlen := len(d.terrors) - err := u.UnmarshalYAML(func(v interface{}) (err error) { - defer handleErr(&err) - d.unmarshal(n, reflect.ValueOf(v)) - if len(d.terrors) > terrlen { - issues := d.terrors[terrlen:] - d.terrors = d.terrors[:terrlen] - return &TypeError{issues} - } - return nil - }) - if e, ok := err.(*TypeError); ok { - d.terrors = append(d.terrors, e.Errors...) - return false - } - if err != nil { - fail(err) - } - return true -} - -// d.prepare initializes and dereferences pointers and calls UnmarshalYAML -// if a value is found to implement it. -// It returns the initialized and dereferenced out value, whether -// unmarshalling was already done by UnmarshalYAML, and if so whether -// its types unmarshalled appropriately. -// -// If n holds a null value, prepare returns before doing anything. -func (d *decoder) prepare(n *Node, out reflect.Value) (newout reflect.Value, unmarshaled, good bool) { - if n.ShortTag() == nullTag { - return out, false, false - } - again := true - for again { - again = false - if out.Kind() == reflect.Ptr { - if out.IsNil() { - out.Set(reflect.New(out.Type().Elem())) - } - out = out.Elem() - again = true - } - if out.CanAddr() { - outi := out.Addr().Interface() - if u, ok := outi.(Unmarshaler); ok { - good = d.callUnmarshaler(n, u) - return out, true, good - } - if u, ok := outi.(obsoleteUnmarshaler); ok { - good = d.callObsoleteUnmarshaler(n, u) - return out, true, good - } - } - } - return out, false, false -} - -func (d *decoder) fieldByIndex(n *Node, v reflect.Value, index []int) (field reflect.Value) { - if n.ShortTag() == nullTag { - return reflect.Value{} - } - for _, num := range index { - for { - if v.Kind() == reflect.Ptr { - if v.IsNil() { - v.Set(reflect.New(v.Type().Elem())) - } - v = v.Elem() - continue - } - break - } - v = v.Field(num) - } - return v -} - -func (d *decoder) unmarshal(n *Node, out reflect.Value) (good bool) { - if out.Type() == nodeType { - out.Set(reflect.ValueOf(n).Elem()) - return true - } - switch n.Kind { - case DocumentNode: - return d.document(n, out) - case AliasNode: - return d.alias(n, out) - } - out, unmarshaled, good := d.prepare(n, out) - if unmarshaled { - return good - } - switch n.Kind { - case ScalarNode: - good = d.scalar(n, out) - case MappingNode: - good = d.mapping(n, out) - case SequenceNode: - good = d.sequence(n, out) - default: - panic("internal error: unknown node kind: " + strconv.Itoa(int(n.Kind))) - } - return good -} - -func (d *decoder) document(n *Node, out reflect.Value) (good bool) { - if len(n.Content) == 1 { - d.doc = n - d.unmarshal(n.Content[0], out) - return true - } - return false -} - -func (d *decoder) alias(n *Node, out reflect.Value) (good bool) { - if d.aliases[n] { - // TODO this could actually be allowed in some circumstances. - failf("anchor '%s' value contains itself", n.Value) - } - d.aliases[n] = true - good = d.unmarshal(n.Alias, out) - delete(d.aliases, n) - return good -} - -var zeroValue reflect.Value - -func resetMap(out reflect.Value) { - for _, k := range out.MapKeys() { - out.SetMapIndex(k, zeroValue) - } -} - -func (d *decoder) scalar(n *Node, out reflect.Value) bool { - var tag string - var resolved interface{} - if n.indicatedString() { - tag = strTag - resolved = n.Value - } else { - tag, resolved = resolve(n.Tag, n.Value) - if tag == binaryTag { - data, err := base64.StdEncoding.DecodeString(resolved.(string)) - if err != nil { - failf("!!binary value contains invalid base64 data") - } - resolved = string(data) - } - } - if resolved == nil { - if out.CanAddr() { - switch out.Kind() { - case reflect.Interface, reflect.Ptr, reflect.Map, reflect.Slice: - out.Set(reflect.Zero(out.Type())) - return true - } - } - return false - } - if resolvedv := reflect.ValueOf(resolved); out.Type() == resolvedv.Type() { - // We've resolved to exactly the type we want, so use that. - out.Set(resolvedv) - return true - } - // Perhaps we can use the value as a TextUnmarshaler to - // set its value. - if out.CanAddr() { - u, ok := out.Addr().Interface().(encoding.TextUnmarshaler) - if ok { - var text []byte - if tag == binaryTag { - text = []byte(resolved.(string)) - } else { - // We let any value be unmarshaled into TextUnmarshaler. - // That might be more lax than we'd like, but the - // TextUnmarshaler itself should bowl out any dubious values. - text = []byte(n.Value) - } - err := u.UnmarshalText(text) - if err != nil { - fail(err) - } - return true - } - } - switch out.Kind() { - case reflect.String: - if tag == binaryTag { - out.SetString(resolved.(string)) - return true - } - out.SetString(n.Value) - return true - case reflect.Interface: - out.Set(reflect.ValueOf(resolved)) - return true - case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: - // This used to work in v2, but it's very unfriendly. - isDuration := out.Type() == durationType - - switch resolved := resolved.(type) { - case int: - if !isDuration && !out.OverflowInt(int64(resolved)) { - out.SetInt(int64(resolved)) - return true - } - case int64: - if !isDuration && !out.OverflowInt(resolved) { - out.SetInt(resolved) - return true - } - case uint64: - if !isDuration && resolved <= math.MaxInt64 && !out.OverflowInt(int64(resolved)) { - out.SetInt(int64(resolved)) - return true - } - case float64: - if !isDuration && resolved <= math.MaxInt64 && !out.OverflowInt(int64(resolved)) { - out.SetInt(int64(resolved)) - return true - } - case string: - if out.Type() == durationType { - d, err := time.ParseDuration(resolved) - if err == nil { - out.SetInt(int64(d)) - return true - } - } - } - case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr: - switch resolved := resolved.(type) { - case int: - if resolved >= 0 && !out.OverflowUint(uint64(resolved)) { - out.SetUint(uint64(resolved)) - return true - } - case int64: - if resolved >= 0 && !out.OverflowUint(uint64(resolved)) { - out.SetUint(uint64(resolved)) - return true - } - case uint64: - if !out.OverflowUint(uint64(resolved)) { - out.SetUint(uint64(resolved)) - return true - } - case float64: - if resolved <= math.MaxUint64 && !out.OverflowUint(uint64(resolved)) { - out.SetUint(uint64(resolved)) - return true - } - } - case reflect.Bool: - switch resolved := resolved.(type) { - case bool: - out.SetBool(resolved) - return true - case string: - // This offers some compatibility with the 1.1 spec (https://yaml.org/type/bool.html). - // It only works if explicitly attempting to unmarshal into a typed bool value. - switch resolved { - case "y", "Y", "yes", "Yes", "YES", "on", "On", "ON": - out.SetBool(true) - return true - case "n", "N", "no", "No", "NO", "off", "Off", "OFF": - out.SetBool(false) - return true - } - } - case reflect.Float32, reflect.Float64: - switch resolved := resolved.(type) { - case int: - out.SetFloat(float64(resolved)) - return true - case int64: - out.SetFloat(float64(resolved)) - return true - case uint64: - out.SetFloat(float64(resolved)) - return true - case float64: - out.SetFloat(resolved) - return true - } - case reflect.Struct: - if resolvedv := reflect.ValueOf(resolved); out.Type() == resolvedv.Type() { - out.Set(resolvedv) - return true - } - case reflect.Ptr: - panic("yaml internal error: please report the issue") - } - d.terror(n, tag, out) - return false -} - -func settableValueOf(i interface{}) reflect.Value { - v := reflect.ValueOf(i) - sv := reflect.New(v.Type()).Elem() - sv.Set(v) - return sv -} - -func (d *decoder) sequence(n *Node, out reflect.Value) (good bool) { - l := len(n.Content) - - var iface reflect.Value - switch out.Kind() { - case reflect.Slice: - out.Set(reflect.MakeSlice(out.Type(), l, l)) - case reflect.Array: - if l != out.Len() { - failf("invalid array: want %d elements but got %d", out.Len(), l) - } - case reflect.Interface: - // No type hints. Will have to use a generic sequence. - iface = out - out = settableValueOf(make([]interface{}, l)) - default: - d.terror(n, seqTag, out) - return false - } - et := out.Type().Elem() - - j := 0 - for i := 0; i < l; i++ { - e := reflect.New(et).Elem() - if ok := d.unmarshal(n.Content[i], e); ok { - out.Index(j).Set(e) - j++ - } - } - if out.Kind() != reflect.Array { - out.Set(out.Slice(0, j)) - } - if iface.IsValid() { - iface.Set(out) - } - return true -} - -func (d *decoder) mapping(n *Node, out reflect.Value) (good bool) { - l := len(n.Content) - if d.uniqueKeys { - nerrs := len(d.terrors) - for i := 0; i < l; i += 2 { - ni := n.Content[i] - for j := i + 2; j < l; j += 2 { - nj := n.Content[j] - if ni.Kind == nj.Kind && ni.Value == nj.Value { - d.terrors = append(d.terrors, fmt.Sprintf("line %d: mapping key %#v already defined at line %d", nj.Line, nj.Value, ni.Line)) - } - } - } - if len(d.terrors) > nerrs { - return false - } - } - switch out.Kind() { - case reflect.Struct: - return d.mappingStruct(n, out) - case reflect.Map: - // okay - case reflect.Interface: - iface := out - if isStringMap(n) { - out = reflect.MakeMap(d.stringMapType) - } else { - out = reflect.MakeMap(d.generalMapType) - } - iface.Set(out) - default: - d.terror(n, mapTag, out) - return false - } - - outt := out.Type() - kt := outt.Key() - et := outt.Elem() - - stringMapType := d.stringMapType - generalMapType := d.generalMapType - if outt.Elem() == ifaceType { - if outt.Key().Kind() == reflect.String { - d.stringMapType = outt - } else if outt.Key() == ifaceType { - d.generalMapType = outt - } - } - - if out.IsNil() { - out.Set(reflect.MakeMap(outt)) - } - for i := 0; i < l; i += 2 { - if isMerge(n.Content[i]) { - d.merge(n.Content[i+1], out) - continue - } - k := reflect.New(kt).Elem() - if d.unmarshal(n.Content[i], k) { - kkind := k.Kind() - if kkind == reflect.Interface { - kkind = k.Elem().Kind() - } - if kkind == reflect.Map || kkind == reflect.Slice { - failf("invalid map key: %#v", k.Interface()) - } - e := reflect.New(et).Elem() - if d.unmarshal(n.Content[i+1], e) { - out.SetMapIndex(k, e) - } - } - } - d.stringMapType = stringMapType - d.generalMapType = generalMapType - return true -} - -func isStringMap(n *Node) bool { - if n.Kind != MappingNode { - return false - } - l := len(n.Content) - for i := 0; i < l; i++ { - if n.Content[i].ShortTag() != strTag { - return false - } - } - return true -} - -func (d *decoder) mappingStruct(n *Node, out reflect.Value) (good bool) { - sinfo, err := getStructInfo(out.Type()) - if err != nil { - panic(err) - } - - var inlineMap reflect.Value - var elemType reflect.Type - if sinfo.InlineMap != -1 { - inlineMap = out.Field(sinfo.InlineMap) - inlineMap.Set(reflect.New(inlineMap.Type()).Elem()) - elemType = inlineMap.Type().Elem() - } - - for _, index := range sinfo.InlineUnmarshalers { - field := d.fieldByIndex(n, out, index) - d.prepare(n, field) - } - - var doneFields []bool - if d.uniqueKeys { - doneFields = make([]bool, len(sinfo.FieldsList)) - } - name := settableValueOf("") - l := len(n.Content) - for i := 0; i < l; i += 2 { - ni := n.Content[i] - if isMerge(ni) { - d.merge(n.Content[i+1], out) - continue - } - if !d.unmarshal(ni, name) { - continue - } - if info, ok := sinfo.FieldsMap[name.String()]; ok { - if d.uniqueKeys { - if doneFields[info.Id] { - d.terrors = append(d.terrors, fmt.Sprintf("line %d: field %s already set in type %s", ni.Line, name.String(), out.Type())) - continue - } - doneFields[info.Id] = true - } - var field reflect.Value - if info.Inline == nil { - field = out.Field(info.Num) - } else { - field = d.fieldByIndex(n, out, info.Inline) - } - d.unmarshal(n.Content[i+1], field) - } else if sinfo.InlineMap != -1 { - if inlineMap.IsNil() { - inlineMap.Set(reflect.MakeMap(inlineMap.Type())) - } - value := reflect.New(elemType).Elem() - d.unmarshal(n.Content[i+1], value) - inlineMap.SetMapIndex(name, value) - } else if d.knownFields { - d.terrors = append(d.terrors, fmt.Sprintf("line %d: field %s not found in type %s", ni.Line, name.String(), out.Type())) - } - } - return true -} - -func failWantMap() { - failf("map merge requires map or sequence of maps as the value") -} - -func (d *decoder) merge(n *Node, out reflect.Value) { - switch n.Kind { - case MappingNode: - d.unmarshal(n, out) - case AliasNode: - if n.Alias != nil && n.Alias.Kind != MappingNode { - failWantMap() - } - d.unmarshal(n, out) - case SequenceNode: - // Step backwards as earlier nodes take precedence. - for i := len(n.Content) - 1; i >= 0; i-- { - ni := n.Content[i] - if ni.Kind == AliasNode { - if ni.Alias != nil && ni.Alias.Kind != MappingNode { - failWantMap() - } - } else if ni.Kind != MappingNode { - failWantMap() - } - d.unmarshal(ni, out) - } - default: - failWantMap() - } -} - -func isMerge(n *Node) bool { - return n.Kind == ScalarNode && n.Value == "<<" && (n.Tag == "" || n.Tag == "!" || shortTag(n.Tag) == mergeTag) -} diff --git a/vendor/gopkg.in/yaml.v3/emitterc.go b/vendor/gopkg.in/yaml.v3/emitterc.go deleted file mode 100644 index a02af554..00000000 --- a/vendor/gopkg.in/yaml.v3/emitterc.go +++ /dev/null @@ -1,1957 +0,0 @@ -// -// Copyright (c) 2011-2019 Canonical Ltd -// Copyright (c) 2006-2010 Kirill Simonov -// -// 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. - -package yaml - -import ( - "bytes" - "fmt" -) - -// Flush the buffer if needed. -func flush(emitter *yaml_emitter_t) bool { - if emitter.buffer_pos+5 >= len(emitter.buffer) { - return yaml_emitter_flush(emitter) - } - return true -} - -// Put a character to the output buffer. -func put(emitter *yaml_emitter_t, value byte) bool { - if emitter.buffer_pos+5 >= len(emitter.buffer) && !yaml_emitter_flush(emitter) { - return false - } - emitter.buffer[emitter.buffer_pos] = value - emitter.buffer_pos++ - emitter.column++ - return true -} - -// Put a line break to the output buffer. -func put_break(emitter *yaml_emitter_t) bool { - if emitter.buffer_pos+5 >= len(emitter.buffer) && !yaml_emitter_flush(emitter) { - return false - } - switch emitter.line_break { - case yaml_CR_BREAK: - emitter.buffer[emitter.buffer_pos] = '\r' - emitter.buffer_pos += 1 - case yaml_LN_BREAK: - emitter.buffer[emitter.buffer_pos] = '\n' - emitter.buffer_pos += 1 - case yaml_CRLN_BREAK: - emitter.buffer[emitter.buffer_pos+0] = '\r' - emitter.buffer[emitter.buffer_pos+1] = '\n' - emitter.buffer_pos += 2 - default: - panic("unknown line break setting") - } - if emitter.column == 0 { - emitter.space_above = true - } - emitter.column = 0 - emitter.line++ - // [Go] Do this here and below and drop from everywhere else (see commented lines). - emitter.indention = true - return true -} - -// Copy a character from a string into buffer. -func write(emitter *yaml_emitter_t, s []byte, i *int) bool { - if emitter.buffer_pos+5 >= len(emitter.buffer) && !yaml_emitter_flush(emitter) { - return false - } - p := emitter.buffer_pos - w := width(s[*i]) - switch w { - case 4: - emitter.buffer[p+3] = s[*i+3] - fallthrough - case 3: - emitter.buffer[p+2] = s[*i+2] - fallthrough - case 2: - emitter.buffer[p+1] = s[*i+1] - fallthrough - case 1: - emitter.buffer[p+0] = s[*i+0] - default: - panic("unknown character width") - } - emitter.column++ - emitter.buffer_pos += w - *i += w - return true -} - -// Write a whole string into buffer. -func write_all(emitter *yaml_emitter_t, s []byte) bool { - for i := 0; i < len(s); { - if !write(emitter, s, &i) { - return false - } - } - return true -} - -// Copy a line break character from a string into buffer. -func write_break(emitter *yaml_emitter_t, s []byte, i *int) bool { - if s[*i] == '\n' { - if !put_break(emitter) { - return false - } - *i++ - } else { - if !write(emitter, s, i) { - return false - } - if emitter.column == 0 { - emitter.space_above = true - } - emitter.column = 0 - emitter.line++ - // [Go] Do this here and above and drop from everywhere else (see commented lines). - emitter.indention = true - } - return true -} - -// Set an emitter error and return false. -func yaml_emitter_set_emitter_error(emitter *yaml_emitter_t, problem string) bool { - emitter.error = yaml_EMITTER_ERROR - emitter.problem = problem - return false -} - -// Emit an event. -func yaml_emitter_emit(emitter *yaml_emitter_t, event *yaml_event_t) bool { - emitter.events = append(emitter.events, *event) - for !yaml_emitter_need_more_events(emitter) { - event := &emitter.events[emitter.events_head] - if !yaml_emitter_analyze_event(emitter, event) { - return false - } - if !yaml_emitter_state_machine(emitter, event) { - return false - } - yaml_event_delete(event) - emitter.events_head++ - } - return true -} - -// Check if we need to accumulate more events before emitting. -// -// We accumulate extra -// - 1 event for DOCUMENT-START -// - 2 events for SEQUENCE-START -// - 3 events for MAPPING-START -// -func yaml_emitter_need_more_events(emitter *yaml_emitter_t) bool { - if emitter.events_head == len(emitter.events) { - return true - } - var accumulate int - switch emitter.events[emitter.events_head].typ { - case yaml_DOCUMENT_START_EVENT: - accumulate = 1 - break - case yaml_SEQUENCE_START_EVENT: - accumulate = 2 - break - case yaml_MAPPING_START_EVENT: - accumulate = 3 - break - default: - return false - } - if len(emitter.events)-emitter.events_head > accumulate { - return false - } - var level int - for i := emitter.events_head; i < len(emitter.events); i++ { - switch emitter.events[i].typ { - case yaml_STREAM_START_EVENT, yaml_DOCUMENT_START_EVENT, yaml_SEQUENCE_START_EVENT, yaml_MAPPING_START_EVENT: - level++ - case yaml_STREAM_END_EVENT, yaml_DOCUMENT_END_EVENT, yaml_SEQUENCE_END_EVENT, yaml_MAPPING_END_EVENT: - level-- - } - if level == 0 { - return false - } - } - return true -} - -// Append a directive to the directives stack. -func yaml_emitter_append_tag_directive(emitter *yaml_emitter_t, value *yaml_tag_directive_t, allow_duplicates bool) bool { - for i := 0; i < len(emitter.tag_directives); i++ { - if bytes.Equal(value.handle, emitter.tag_directives[i].handle) { - if allow_duplicates { - return true - } - return yaml_emitter_set_emitter_error(emitter, "duplicate %TAG directive") - } - } - - // [Go] Do we actually need to copy this given garbage collection - // and the lack of deallocating destructors? - tag_copy := yaml_tag_directive_t{ - handle: make([]byte, len(value.handle)), - prefix: make([]byte, len(value.prefix)), - } - copy(tag_copy.handle, value.handle) - copy(tag_copy.prefix, value.prefix) - emitter.tag_directives = append(emitter.tag_directives, tag_copy) - return true -} - -// Increase the indentation level. -func yaml_emitter_increase_indent(emitter *yaml_emitter_t, flow, indentless bool) bool { - emitter.indents = append(emitter.indents, emitter.indent) - if emitter.indent < 0 { - if flow { - emitter.indent = emitter.best_indent - } else { - emitter.indent = 0 - } - } else if !indentless { - emitter.indent += emitter.best_indent - } - return true -} - -// State dispatcher. -func yaml_emitter_state_machine(emitter *yaml_emitter_t, event *yaml_event_t) bool { - switch emitter.state { - default: - case yaml_EMIT_STREAM_START_STATE: - return yaml_emitter_emit_stream_start(emitter, event) - - case yaml_EMIT_FIRST_DOCUMENT_START_STATE: - return yaml_emitter_emit_document_start(emitter, event, true) - - case yaml_EMIT_DOCUMENT_START_STATE: - return yaml_emitter_emit_document_start(emitter, event, false) - - case yaml_EMIT_DOCUMENT_CONTENT_STATE: - return yaml_emitter_emit_document_content(emitter, event) - - case yaml_EMIT_DOCUMENT_END_STATE: - return yaml_emitter_emit_document_end(emitter, event) - - case yaml_EMIT_FLOW_SEQUENCE_FIRST_ITEM_STATE: - return yaml_emitter_emit_flow_sequence_item(emitter, event, true, false) - - case yaml_EMIT_FLOW_SEQUENCE_TRAIL_ITEM_STATE: - return yaml_emitter_emit_flow_sequence_item(emitter, event, false, true) - - case yaml_EMIT_FLOW_SEQUENCE_ITEM_STATE: - return yaml_emitter_emit_flow_sequence_item(emitter, event, false, false) - - case yaml_EMIT_FLOW_MAPPING_FIRST_KEY_STATE: - return yaml_emitter_emit_flow_mapping_key(emitter, event, true, false) - - case yaml_EMIT_FLOW_MAPPING_TRAIL_KEY_STATE: - return yaml_emitter_emit_flow_mapping_key(emitter, event, false, true) - - case yaml_EMIT_FLOW_MAPPING_KEY_STATE: - return yaml_emitter_emit_flow_mapping_key(emitter, event, false, false) - - case yaml_EMIT_FLOW_MAPPING_SIMPLE_VALUE_STATE: - return yaml_emitter_emit_flow_mapping_value(emitter, event, true) - - case yaml_EMIT_FLOW_MAPPING_VALUE_STATE: - return yaml_emitter_emit_flow_mapping_value(emitter, event, false) - - case yaml_EMIT_BLOCK_SEQUENCE_FIRST_ITEM_STATE: - return yaml_emitter_emit_block_sequence_item(emitter, event, true) - - case yaml_EMIT_BLOCK_SEQUENCE_ITEM_STATE: - return yaml_emitter_emit_block_sequence_item(emitter, event, false) - - case yaml_EMIT_BLOCK_MAPPING_FIRST_KEY_STATE: - return yaml_emitter_emit_block_mapping_key(emitter, event, true) - - case yaml_EMIT_BLOCK_MAPPING_KEY_STATE: - return yaml_emitter_emit_block_mapping_key(emitter, event, false) - - case yaml_EMIT_BLOCK_MAPPING_SIMPLE_VALUE_STATE: - return yaml_emitter_emit_block_mapping_value(emitter, event, true) - - case yaml_EMIT_BLOCK_MAPPING_VALUE_STATE: - return yaml_emitter_emit_block_mapping_value(emitter, event, false) - - case yaml_EMIT_END_STATE: - return yaml_emitter_set_emitter_error(emitter, "expected nothing after STREAM-END") - } - panic("invalid emitter state") -} - -// Expect STREAM-START. -func yaml_emitter_emit_stream_start(emitter *yaml_emitter_t, event *yaml_event_t) bool { - if event.typ != yaml_STREAM_START_EVENT { - return yaml_emitter_set_emitter_error(emitter, "expected STREAM-START") - } - if emitter.encoding == yaml_ANY_ENCODING { - emitter.encoding = event.encoding - if emitter.encoding == yaml_ANY_ENCODING { - emitter.encoding = yaml_UTF8_ENCODING - } - } - if emitter.best_indent < 2 || emitter.best_indent > 9 { - emitter.best_indent = 2 - } - if emitter.best_width >= 0 && emitter.best_width <= emitter.best_indent*2 { - emitter.best_width = 80 - } - if emitter.best_width < 0 { - emitter.best_width = 1<<31 - 1 - } - if emitter.line_break == yaml_ANY_BREAK { - emitter.line_break = yaml_LN_BREAK - } - - emitter.indent = -1 - emitter.line = 0 - emitter.column = 0 - emitter.whitespace = true - emitter.indention = true - emitter.space_above = true - - if emitter.encoding != yaml_UTF8_ENCODING { - if !yaml_emitter_write_bom(emitter) { - return false - } - } - emitter.state = yaml_EMIT_FIRST_DOCUMENT_START_STATE - return true -} - -// Expect DOCUMENT-START or STREAM-END. -func yaml_emitter_emit_document_start(emitter *yaml_emitter_t, event *yaml_event_t, first bool) bool { - - if event.typ == yaml_DOCUMENT_START_EVENT { - - if event.version_directive != nil { - if !yaml_emitter_analyze_version_directive(emitter, event.version_directive) { - return false - } - } - - for i := 0; i < len(event.tag_directives); i++ { - tag_directive := &event.tag_directives[i] - if !yaml_emitter_analyze_tag_directive(emitter, tag_directive) { - return false - } - if !yaml_emitter_append_tag_directive(emitter, tag_directive, false) { - return false - } - } - - for i := 0; i < len(default_tag_directives); i++ { - tag_directive := &default_tag_directives[i] - if !yaml_emitter_append_tag_directive(emitter, tag_directive, true) { - return false - } - } - - implicit := event.implicit - if !first || emitter.canonical { - implicit = false - } - - if emitter.open_ended && (event.version_directive != nil || len(event.tag_directives) > 0) { - if !yaml_emitter_write_indicator(emitter, []byte("..."), true, false, false) { - return false - } - if !yaml_emitter_write_indent(emitter) { - return false - } - } - - if event.version_directive != nil { - implicit = false - if !yaml_emitter_write_indicator(emitter, []byte("%YAML"), true, false, false) { - return false - } - if !yaml_emitter_write_indicator(emitter, []byte("1.1"), true, false, false) { - return false - } - if !yaml_emitter_write_indent(emitter) { - return false - } - } - - if len(event.tag_directives) > 0 { - implicit = false - for i := 0; i < len(event.tag_directives); i++ { - tag_directive := &event.tag_directives[i] - if !yaml_emitter_write_indicator(emitter, []byte("%TAG"), true, false, false) { - return false - } - if !yaml_emitter_write_tag_handle(emitter, tag_directive.handle) { - return false - } - if !yaml_emitter_write_tag_content(emitter, tag_directive.prefix, true) { - return false - } - if !yaml_emitter_write_indent(emitter) { - return false - } - } - } - - if yaml_emitter_check_empty_document(emitter) { - implicit = false - } - if !implicit { - if !yaml_emitter_write_indent(emitter) { - return false - } - if !yaml_emitter_write_indicator(emitter, []byte("---"), true, false, false) { - return false - } - if emitter.canonical || true { - if !yaml_emitter_write_indent(emitter) { - return false - } - } - } - - if len(emitter.head_comment) > 0 { - if !yaml_emitter_process_head_comment(emitter) { - return false - } - if !put_break(emitter) { - return false - } - } - - emitter.state = yaml_EMIT_DOCUMENT_CONTENT_STATE - return true - } - - if event.typ == yaml_STREAM_END_EVENT { - if emitter.open_ended { - if !yaml_emitter_write_indicator(emitter, []byte("..."), true, false, false) { - return false - } - if !yaml_emitter_write_indent(emitter) { - return false - } - } - if !yaml_emitter_flush(emitter) { - return false - } - emitter.state = yaml_EMIT_END_STATE - return true - } - - return yaml_emitter_set_emitter_error(emitter, "expected DOCUMENT-START or STREAM-END") -} - -// Expect the root node. -func yaml_emitter_emit_document_content(emitter *yaml_emitter_t, event *yaml_event_t) bool { - emitter.states = append(emitter.states, yaml_EMIT_DOCUMENT_END_STATE) - - if !yaml_emitter_process_head_comment(emitter) { - return false - } - if !yaml_emitter_emit_node(emitter, event, true, false, false, false) { - return false - } - if !yaml_emitter_process_line_comment(emitter) { - return false - } - if !yaml_emitter_process_foot_comment(emitter) { - return false - } - return true -} - -// Expect DOCUMENT-END. -func yaml_emitter_emit_document_end(emitter *yaml_emitter_t, event *yaml_event_t) bool { - if event.typ != yaml_DOCUMENT_END_EVENT { - return yaml_emitter_set_emitter_error(emitter, "expected DOCUMENT-END") - } - if !yaml_emitter_write_indent(emitter) { - return false - } - if len(emitter.foot_comment) > 0 { - if !put_break(emitter) { - return false - } - if !yaml_emitter_process_foot_comment(emitter) { - return false - } - } - if !event.implicit { - // [Go] Allocate the slice elsewhere. - if !yaml_emitter_write_indicator(emitter, []byte("..."), true, false, false) { - return false - } - if !yaml_emitter_write_indent(emitter) { - return false - } - } - if !yaml_emitter_flush(emitter) { - return false - } - emitter.state = yaml_EMIT_DOCUMENT_START_STATE - emitter.tag_directives = emitter.tag_directives[:0] - return true -} - -// Expect a flow item node. -func yaml_emitter_emit_flow_sequence_item(emitter *yaml_emitter_t, event *yaml_event_t, first, trail bool) bool { - if first { - if !yaml_emitter_write_indicator(emitter, []byte{'['}, true, true, false) { - return false - } - if !yaml_emitter_increase_indent(emitter, true, false) { - return false - } - emitter.flow_level++ - } - - if event.typ == yaml_SEQUENCE_END_EVENT { - emitter.flow_level-- - emitter.indent = emitter.indents[len(emitter.indents)-1] - emitter.indents = emitter.indents[:len(emitter.indents)-1] - if emitter.canonical && !first { - if !yaml_emitter_write_indicator(emitter, []byte{','}, false, false, false) { - return false - } - if !yaml_emitter_write_indent(emitter) { - return false - } - } - if !yaml_emitter_write_indicator(emitter, []byte{']'}, false, false, false) { - return false - } - if !yaml_emitter_process_line_comment(emitter) { - return false - } - if !yaml_emitter_process_foot_comment(emitter) { - return false - } - emitter.state = emitter.states[len(emitter.states)-1] - emitter.states = emitter.states[:len(emitter.states)-1] - - return true - } - - if !first && !trail { - if !yaml_emitter_write_indicator(emitter, []byte{','}, false, false, false) { - return false - } - } - - if !yaml_emitter_process_head_comment(emitter) { - return false - } - if emitter.column == 0 { - if !yaml_emitter_write_indent(emitter) { - return false - } - } - - if emitter.canonical || emitter.column > emitter.best_width { - if !yaml_emitter_write_indent(emitter) { - return false - } - } - if len(emitter.line_comment) > 0 || len(emitter.foot_comment) > 0 { - emitter.states = append(emitter.states, yaml_EMIT_FLOW_SEQUENCE_TRAIL_ITEM_STATE) - } else { - emitter.states = append(emitter.states, yaml_EMIT_FLOW_SEQUENCE_ITEM_STATE) - } - if !yaml_emitter_emit_node(emitter, event, false, true, false, false) { - return false - } - if len(emitter.line_comment) > 0 || len(emitter.foot_comment) > 0 { - if !yaml_emitter_write_indicator(emitter, []byte{','}, false, false, false) { - return false - } - } - if !yaml_emitter_process_line_comment(emitter) { - return false - } - if !yaml_emitter_process_foot_comment(emitter) { - return false - } - return true -} - -// Expect a flow key node. -func yaml_emitter_emit_flow_mapping_key(emitter *yaml_emitter_t, event *yaml_event_t, first, trail bool) bool { - if first { - if !yaml_emitter_write_indicator(emitter, []byte{'{'}, true, true, false) { - return false - } - if !yaml_emitter_increase_indent(emitter, true, false) { - return false - } - emitter.flow_level++ - } - - if event.typ == yaml_MAPPING_END_EVENT { - emitter.flow_level-- - emitter.indent = emitter.indents[len(emitter.indents)-1] - emitter.indents = emitter.indents[:len(emitter.indents)-1] - if emitter.canonical && !first { - if !yaml_emitter_write_indicator(emitter, []byte{','}, false, false, false) { - return false - } - if !yaml_emitter_write_indent(emitter) { - return false - } - } - if !yaml_emitter_write_indicator(emitter, []byte{'}'}, false, false, false) { - return false - } - if !yaml_emitter_process_line_comment(emitter) { - return false - } - if !yaml_emitter_process_foot_comment(emitter) { - return false - } - emitter.state = emitter.states[len(emitter.states)-1] - emitter.states = emitter.states[:len(emitter.states)-1] - return true - } - - if !first && !trail { - if !yaml_emitter_write_indicator(emitter, []byte{','}, false, false, false) { - return false - } - } - - if !yaml_emitter_process_head_comment(emitter) { - return false - } - if emitter.column == 0 { - if !yaml_emitter_write_indent(emitter) { - return false - } - } - - if emitter.canonical || emitter.column > emitter.best_width { - if !yaml_emitter_write_indent(emitter) { - return false - } - } - - if !emitter.canonical && yaml_emitter_check_simple_key(emitter) { - emitter.states = append(emitter.states, yaml_EMIT_FLOW_MAPPING_SIMPLE_VALUE_STATE) - return yaml_emitter_emit_node(emitter, event, false, false, true, true) - } - if !yaml_emitter_write_indicator(emitter, []byte{'?'}, true, false, false) { - return false - } - emitter.states = append(emitter.states, yaml_EMIT_FLOW_MAPPING_VALUE_STATE) - return yaml_emitter_emit_node(emitter, event, false, false, true, false) -} - -// Expect a flow value node. -func yaml_emitter_emit_flow_mapping_value(emitter *yaml_emitter_t, event *yaml_event_t, simple bool) bool { - if simple { - if !yaml_emitter_write_indicator(emitter, []byte{':'}, false, false, false) { - return false - } - } else { - if emitter.canonical || emitter.column > emitter.best_width { - if !yaml_emitter_write_indent(emitter) { - return false - } - } - if !yaml_emitter_write_indicator(emitter, []byte{':'}, true, false, false) { - return false - } - } - if len(emitter.line_comment) > 0 || len(emitter.foot_comment) > 0 { - emitter.states = append(emitter.states, yaml_EMIT_FLOW_MAPPING_TRAIL_KEY_STATE) - } else { - emitter.states = append(emitter.states, yaml_EMIT_FLOW_MAPPING_KEY_STATE) - } - if !yaml_emitter_emit_node(emitter, event, false, false, true, false) { - return false - } - if len(emitter.line_comment) > 0 || len(emitter.foot_comment) > 0 { - if !yaml_emitter_write_indicator(emitter, []byte{','}, false, false, false) { - return false - } - } - if !yaml_emitter_process_line_comment(emitter) { - return false - } - if !yaml_emitter_process_foot_comment(emitter) { - return false - } - return true -} - -// Expect a block item node. -func yaml_emitter_emit_block_sequence_item(emitter *yaml_emitter_t, event *yaml_event_t, first bool) bool { - if first { - if !yaml_emitter_increase_indent(emitter, false, emitter.mapping_context && !emitter.indention) { - return false - } - } - if event.typ == yaml_SEQUENCE_END_EVENT { - emitter.indent = emitter.indents[len(emitter.indents)-1] - emitter.indents = emitter.indents[:len(emitter.indents)-1] - emitter.state = emitter.states[len(emitter.states)-1] - emitter.states = emitter.states[:len(emitter.states)-1] - return true - } - if !yaml_emitter_process_head_comment(emitter) { - return false - } - if !yaml_emitter_write_indent(emitter) { - return false - } - if !yaml_emitter_write_indicator(emitter, []byte{'-'}, true, false, true) { - return false - } - emitter.states = append(emitter.states, yaml_EMIT_BLOCK_SEQUENCE_ITEM_STATE) - if !yaml_emitter_emit_node(emitter, event, false, true, false, false) { - return false - } - if !yaml_emitter_process_line_comment(emitter) { - return false - } - if !yaml_emitter_process_foot_comment(emitter) { - return false - } - return true -} - -// Expect a block key node. -func yaml_emitter_emit_block_mapping_key(emitter *yaml_emitter_t, event *yaml_event_t, first bool) bool { - if first { - if !yaml_emitter_increase_indent(emitter, false, false) { - return false - } - } - if event.typ == yaml_MAPPING_END_EVENT { - emitter.indent = emitter.indents[len(emitter.indents)-1] - emitter.indents = emitter.indents[:len(emitter.indents)-1] - emitter.state = emitter.states[len(emitter.states)-1] - emitter.states = emitter.states[:len(emitter.states)-1] - return true - } - if !yaml_emitter_process_head_comment(emitter) { - return false - } - if !first || emitter.states[len(emitter.states)-1] != yaml_EMIT_BLOCK_SEQUENCE_ITEM_STATE { - if !yaml_emitter_write_indent(emitter) { - return false - } - } - if yaml_emitter_check_simple_key(emitter) { - emitter.states = append(emitter.states, yaml_EMIT_BLOCK_MAPPING_SIMPLE_VALUE_STATE) - return yaml_emitter_emit_node(emitter, event, false, false, true, true) - } - if !yaml_emitter_write_indicator(emitter, []byte{'?'}, true, false, true) { - return false - } - emitter.states = append(emitter.states, yaml_EMIT_BLOCK_MAPPING_VALUE_STATE) - return yaml_emitter_emit_node(emitter, event, false, false, true, false) -} - -// Expect a block value node. -func yaml_emitter_emit_block_mapping_value(emitter *yaml_emitter_t, event *yaml_event_t, simple bool) bool { - if simple { - if !yaml_emitter_write_indicator(emitter, []byte{':'}, false, false, false) { - return false - } - } else { - if !yaml_emitter_write_indent(emitter) { - return false - } - if !yaml_emitter_write_indicator(emitter, []byte{':'}, true, false, true) { - return false - } - } - emitter.states = append(emitter.states, yaml_EMIT_BLOCK_MAPPING_KEY_STATE) - if !yaml_emitter_emit_node(emitter, event, false, false, true, false) { - return false - } - if !yaml_emitter_process_line_comment(emitter) { - return false - } - if !yaml_emitter_process_foot_comment(emitter) { - return false - } - return true -} - -// Expect a node. -func yaml_emitter_emit_node(emitter *yaml_emitter_t, event *yaml_event_t, - root bool, sequence bool, mapping bool, simple_key bool) bool { - - emitter.root_context = root - emitter.sequence_context = sequence - emitter.mapping_context = mapping - emitter.simple_key_context = simple_key - - switch event.typ { - case yaml_ALIAS_EVENT: - return yaml_emitter_emit_alias(emitter, event) - case yaml_SCALAR_EVENT: - return yaml_emitter_emit_scalar(emitter, event) - case yaml_SEQUENCE_START_EVENT: - return yaml_emitter_emit_sequence_start(emitter, event) - case yaml_MAPPING_START_EVENT: - return yaml_emitter_emit_mapping_start(emitter, event) - default: - return yaml_emitter_set_emitter_error(emitter, - fmt.Sprintf("expected SCALAR, SEQUENCE-START, MAPPING-START, or ALIAS, but got %v", event.typ)) - } -} - -// Expect ALIAS. -func yaml_emitter_emit_alias(emitter *yaml_emitter_t, event *yaml_event_t) bool { - if !yaml_emitter_process_anchor(emitter) { - return false - } - emitter.state = emitter.states[len(emitter.states)-1] - emitter.states = emitter.states[:len(emitter.states)-1] - return true -} - -// Expect SCALAR. -func yaml_emitter_emit_scalar(emitter *yaml_emitter_t, event *yaml_event_t) bool { - if !yaml_emitter_select_scalar_style(emitter, event) { - return false - } - if !yaml_emitter_process_anchor(emitter) { - return false - } - if !yaml_emitter_process_tag(emitter) { - return false - } - if !yaml_emitter_increase_indent(emitter, true, false) { - return false - } - if !yaml_emitter_process_scalar(emitter) { - return false - } - emitter.indent = emitter.indents[len(emitter.indents)-1] - emitter.indents = emitter.indents[:len(emitter.indents)-1] - emitter.state = emitter.states[len(emitter.states)-1] - emitter.states = emitter.states[:len(emitter.states)-1] - return true -} - -// Expect SEQUENCE-START. -func yaml_emitter_emit_sequence_start(emitter *yaml_emitter_t, event *yaml_event_t) bool { - if !yaml_emitter_process_anchor(emitter) { - return false - } - if !yaml_emitter_process_tag(emitter) { - return false - } - if emitter.flow_level > 0 || emitter.canonical || event.sequence_style() == yaml_FLOW_SEQUENCE_STYLE || - yaml_emitter_check_empty_sequence(emitter) { - emitter.state = yaml_EMIT_FLOW_SEQUENCE_FIRST_ITEM_STATE - } else { - emitter.state = yaml_EMIT_BLOCK_SEQUENCE_FIRST_ITEM_STATE - } - return true -} - -// Expect MAPPING-START. -func yaml_emitter_emit_mapping_start(emitter *yaml_emitter_t, event *yaml_event_t) bool { - if !yaml_emitter_process_anchor(emitter) { - return false - } - if !yaml_emitter_process_tag(emitter) { - return false - } - if emitter.flow_level > 0 || emitter.canonical || event.mapping_style() == yaml_FLOW_MAPPING_STYLE || - yaml_emitter_check_empty_mapping(emitter) { - emitter.state = yaml_EMIT_FLOW_MAPPING_FIRST_KEY_STATE - } else { - emitter.state = yaml_EMIT_BLOCK_MAPPING_FIRST_KEY_STATE - } - return true -} - -// Check if the document content is an empty scalar. -func yaml_emitter_check_empty_document(emitter *yaml_emitter_t) bool { - return false // [Go] Huh? -} - -// Check if the next events represent an empty sequence. -func yaml_emitter_check_empty_sequence(emitter *yaml_emitter_t) bool { - if len(emitter.events)-emitter.events_head < 2 { - return false - } - return emitter.events[emitter.events_head].typ == yaml_SEQUENCE_START_EVENT && - emitter.events[emitter.events_head+1].typ == yaml_SEQUENCE_END_EVENT -} - -// Check if the next events represent an empty mapping. -func yaml_emitter_check_empty_mapping(emitter *yaml_emitter_t) bool { - if len(emitter.events)-emitter.events_head < 2 { - return false - } - return emitter.events[emitter.events_head].typ == yaml_MAPPING_START_EVENT && - emitter.events[emitter.events_head+1].typ == yaml_MAPPING_END_EVENT -} - -// Check if the next node can be expressed as a simple key. -func yaml_emitter_check_simple_key(emitter *yaml_emitter_t) bool { - length := 0 - switch emitter.events[emitter.events_head].typ { - case yaml_ALIAS_EVENT: - length += len(emitter.anchor_data.anchor) - case yaml_SCALAR_EVENT: - if emitter.scalar_data.multiline { - return false - } - length += len(emitter.anchor_data.anchor) + - len(emitter.tag_data.handle) + - len(emitter.tag_data.suffix) + - len(emitter.scalar_data.value) - case yaml_SEQUENCE_START_EVENT: - if !yaml_emitter_check_empty_sequence(emitter) { - return false - } - length += len(emitter.anchor_data.anchor) + - len(emitter.tag_data.handle) + - len(emitter.tag_data.suffix) - case yaml_MAPPING_START_EVENT: - if !yaml_emitter_check_empty_mapping(emitter) { - return false - } - length += len(emitter.anchor_data.anchor) + - len(emitter.tag_data.handle) + - len(emitter.tag_data.suffix) - default: - return false - } - return length <= 128 -} - -// Determine an acceptable scalar style. -func yaml_emitter_select_scalar_style(emitter *yaml_emitter_t, event *yaml_event_t) bool { - - no_tag := len(emitter.tag_data.handle) == 0 && len(emitter.tag_data.suffix) == 0 - if no_tag && !event.implicit && !event.quoted_implicit { - return yaml_emitter_set_emitter_error(emitter, "neither tag nor implicit flags are specified") - } - - style := event.scalar_style() - if style == yaml_ANY_SCALAR_STYLE { - style = yaml_PLAIN_SCALAR_STYLE - } - if emitter.canonical { - style = yaml_DOUBLE_QUOTED_SCALAR_STYLE - } - if emitter.simple_key_context && emitter.scalar_data.multiline { - style = yaml_DOUBLE_QUOTED_SCALAR_STYLE - } - - if style == yaml_PLAIN_SCALAR_STYLE { - if emitter.flow_level > 0 && !emitter.scalar_data.flow_plain_allowed || - emitter.flow_level == 0 && !emitter.scalar_data.block_plain_allowed { - style = yaml_SINGLE_QUOTED_SCALAR_STYLE - } - if len(emitter.scalar_data.value) == 0 && (emitter.flow_level > 0 || emitter.simple_key_context) { - style = yaml_SINGLE_QUOTED_SCALAR_STYLE - } - if no_tag && !event.implicit { - style = yaml_SINGLE_QUOTED_SCALAR_STYLE - } - } - if style == yaml_SINGLE_QUOTED_SCALAR_STYLE { - if !emitter.scalar_data.single_quoted_allowed { - style = yaml_DOUBLE_QUOTED_SCALAR_STYLE - } - } - if style == yaml_LITERAL_SCALAR_STYLE || style == yaml_FOLDED_SCALAR_STYLE { - if !emitter.scalar_data.block_allowed || emitter.flow_level > 0 || emitter.simple_key_context { - style = yaml_DOUBLE_QUOTED_SCALAR_STYLE - } - } - - if no_tag && !event.quoted_implicit && style != yaml_PLAIN_SCALAR_STYLE { - emitter.tag_data.handle = []byte{'!'} - } - emitter.scalar_data.style = style - return true -} - -// Write an anchor. -func yaml_emitter_process_anchor(emitter *yaml_emitter_t) bool { - if emitter.anchor_data.anchor == nil { - return true - } - c := []byte{'&'} - if emitter.anchor_data.alias { - c[0] = '*' - } - if !yaml_emitter_write_indicator(emitter, c, true, false, false) { - return false - } - return yaml_emitter_write_anchor(emitter, emitter.anchor_data.anchor) -} - -// Write a tag. -func yaml_emitter_process_tag(emitter *yaml_emitter_t) bool { - if len(emitter.tag_data.handle) == 0 && len(emitter.tag_data.suffix) == 0 { - return true - } - if len(emitter.tag_data.handle) > 0 { - if !yaml_emitter_write_tag_handle(emitter, emitter.tag_data.handle) { - return false - } - if len(emitter.tag_data.suffix) > 0 { - if !yaml_emitter_write_tag_content(emitter, emitter.tag_data.suffix, false) { - return false - } - } - } else { - // [Go] Allocate these slices elsewhere. - if !yaml_emitter_write_indicator(emitter, []byte("!<"), true, false, false) { - return false - } - if !yaml_emitter_write_tag_content(emitter, emitter.tag_data.suffix, false) { - return false - } - if !yaml_emitter_write_indicator(emitter, []byte{'>'}, false, false, false) { - return false - } - } - return true -} - -// Write a scalar. -func yaml_emitter_process_scalar(emitter *yaml_emitter_t) bool { - switch emitter.scalar_data.style { - case yaml_PLAIN_SCALAR_STYLE: - return yaml_emitter_write_plain_scalar(emitter, emitter.scalar_data.value, !emitter.simple_key_context) - - case yaml_SINGLE_QUOTED_SCALAR_STYLE: - return yaml_emitter_write_single_quoted_scalar(emitter, emitter.scalar_data.value, !emitter.simple_key_context) - - case yaml_DOUBLE_QUOTED_SCALAR_STYLE: - return yaml_emitter_write_double_quoted_scalar(emitter, emitter.scalar_data.value, !emitter.simple_key_context) - - case yaml_LITERAL_SCALAR_STYLE: - return yaml_emitter_write_literal_scalar(emitter, emitter.scalar_data.value) - - case yaml_FOLDED_SCALAR_STYLE: - return yaml_emitter_write_folded_scalar(emitter, emitter.scalar_data.value) - } - panic("unknown scalar style") -} - -// Write a head comment. -func yaml_emitter_process_head_comment(emitter *yaml_emitter_t) bool { - if len(emitter.head_comment) == 0 { - return true - } - space_above := emitter.space_above - if !emitter.indention { - if !put_break(emitter) { - return false - } - } - if !space_above && - emitter.state != yaml_EMIT_FLOW_SEQUENCE_FIRST_ITEM_STATE && - emitter.state != yaml_EMIT_FLOW_MAPPING_FIRST_KEY_STATE && - emitter.state != yaml_EMIT_BLOCK_MAPPING_FIRST_KEY_STATE && - emitter.state != yaml_EMIT_BLOCK_SEQUENCE_FIRST_ITEM_STATE { - if !put_break(emitter) { - return false - } - } - if !yaml_emitter_write_indent(emitter) { - return false - } - if !yaml_emitter_write_comment(emitter, emitter.head_comment) { - return false - } - emitter.head_comment = emitter.head_comment[:0] - return true -} - -// Write an line comment. -func yaml_emitter_process_line_comment(emitter *yaml_emitter_t) bool { - if len(emitter.line_comment) == 0 { - return true - } - if !emitter.whitespace { - if !put(emitter, ' ') { - return false - } - } - if !yaml_emitter_write_comment(emitter, emitter.line_comment) { - return false - } - emitter.line_comment = emitter.line_comment[:0] - return true -} - -// Write a foot comment. -func yaml_emitter_process_foot_comment(emitter *yaml_emitter_t) bool { - if len(emitter.foot_comment) == 0 { - return true - } - if !yaml_emitter_write_indent(emitter) { - return false - } - if !yaml_emitter_write_comment(emitter, emitter.foot_comment) { - return false - } - emitter.foot_comment = emitter.foot_comment[:0] - return true -} - -// Check if a %YAML directive is valid. -func yaml_emitter_analyze_version_directive(emitter *yaml_emitter_t, version_directive *yaml_version_directive_t) bool { - if version_directive.major != 1 || version_directive.minor != 1 { - return yaml_emitter_set_emitter_error(emitter, "incompatible %YAML directive") - } - return true -} - -// Check if a %TAG directive is valid. -func yaml_emitter_analyze_tag_directive(emitter *yaml_emitter_t, tag_directive *yaml_tag_directive_t) bool { - handle := tag_directive.handle - prefix := tag_directive.prefix - if len(handle) == 0 { - return yaml_emitter_set_emitter_error(emitter, "tag handle must not be empty") - } - if handle[0] != '!' { - return yaml_emitter_set_emitter_error(emitter, "tag handle must start with '!'") - } - if handle[len(handle)-1] != '!' { - return yaml_emitter_set_emitter_error(emitter, "tag handle must end with '!'") - } - for i := 1; i < len(handle)-1; i += width(handle[i]) { - if !is_alpha(handle, i) { - return yaml_emitter_set_emitter_error(emitter, "tag handle must contain alphanumerical characters only") - } - } - if len(prefix) == 0 { - return yaml_emitter_set_emitter_error(emitter, "tag prefix must not be empty") - } - return true -} - -// Check if an anchor is valid. -func yaml_emitter_analyze_anchor(emitter *yaml_emitter_t, anchor []byte, alias bool) bool { - if len(anchor) == 0 { - problem := "anchor value must not be empty" - if alias { - problem = "alias value must not be empty" - } - return yaml_emitter_set_emitter_error(emitter, problem) - } - for i := 0; i < len(anchor); i += width(anchor[i]) { - if !is_alpha(anchor, i) { - problem := "anchor value must contain alphanumerical characters only" - if alias { - problem = "alias value must contain alphanumerical characters only" - } - return yaml_emitter_set_emitter_error(emitter, problem) - } - } - emitter.anchor_data.anchor = anchor - emitter.anchor_data.alias = alias - return true -} - -// Check if a tag is valid. -func yaml_emitter_analyze_tag(emitter *yaml_emitter_t, tag []byte) bool { - if len(tag) == 0 { - return yaml_emitter_set_emitter_error(emitter, "tag value must not be empty") - } - for i := 0; i < len(emitter.tag_directives); i++ { - tag_directive := &emitter.tag_directives[i] - if bytes.HasPrefix(tag, tag_directive.prefix) { - emitter.tag_data.handle = tag_directive.handle - emitter.tag_data.suffix = tag[len(tag_directive.prefix):] - return true - } - } - emitter.tag_data.suffix = tag - return true -} - -// Check if a scalar is valid. -func yaml_emitter_analyze_scalar(emitter *yaml_emitter_t, value []byte) bool { - var ( - block_indicators = false - flow_indicators = false - line_breaks = false - special_characters = false - - leading_space = false - leading_break = false - trailing_space = false - trailing_break = false - break_space = false - space_break = false - - preceded_by_whitespace = false - followed_by_whitespace = false - previous_space = false - previous_break = false - ) - - emitter.scalar_data.value = value - - if len(value) == 0 { - emitter.scalar_data.multiline = false - emitter.scalar_data.flow_plain_allowed = false - emitter.scalar_data.block_plain_allowed = true - emitter.scalar_data.single_quoted_allowed = true - emitter.scalar_data.block_allowed = false - return true - } - - if len(value) >= 3 && ((value[0] == '-' && value[1] == '-' && value[2] == '-') || (value[0] == '.' && value[1] == '.' && value[2] == '.')) { - block_indicators = true - flow_indicators = true - } - - preceded_by_whitespace = true - for i, w := 0, 0; i < len(value); i += w { - w = width(value[i]) - followed_by_whitespace = i+w >= len(value) || is_blank(value, i+w) - - if i == 0 { - switch value[i] { - case '#', ',', '[', ']', '{', '}', '&', '*', '!', '|', '>', '\'', '"', '%', '@', '`': - flow_indicators = true - block_indicators = true - case '?', ':': - flow_indicators = true - if followed_by_whitespace { - block_indicators = true - } - case '-': - if followed_by_whitespace { - flow_indicators = true - block_indicators = true - } - } - } else { - switch value[i] { - case ',', '?', '[', ']', '{', '}': - flow_indicators = true - case ':': - flow_indicators = true - if followed_by_whitespace { - block_indicators = true - } - case '#': - if preceded_by_whitespace { - flow_indicators = true - block_indicators = true - } - } - } - - if !is_printable(value, i) || !is_ascii(value, i) && !emitter.unicode { - special_characters = true - } - if is_space(value, i) { - if i == 0 { - leading_space = true - } - if i+width(value[i]) == len(value) { - trailing_space = true - } - if previous_break { - break_space = true - } - previous_space = true - previous_break = false - } else if is_break(value, i) { - line_breaks = true - if i == 0 { - leading_break = true - } - if i+width(value[i]) == len(value) { - trailing_break = true - } - if previous_space { - space_break = true - } - previous_space = false - previous_break = true - } else { - previous_space = false - previous_break = false - } - - // [Go]: Why 'z'? Couldn't be the end of the string as that's the loop condition. - preceded_by_whitespace = is_blankz(value, i) - } - - emitter.scalar_data.multiline = line_breaks - emitter.scalar_data.flow_plain_allowed = true - emitter.scalar_data.block_plain_allowed = true - emitter.scalar_data.single_quoted_allowed = true - emitter.scalar_data.block_allowed = true - - if leading_space || leading_break || trailing_space || trailing_break { - emitter.scalar_data.flow_plain_allowed = false - emitter.scalar_data.block_plain_allowed = false - } - if trailing_space { - emitter.scalar_data.block_allowed = false - } - if break_space { - emitter.scalar_data.flow_plain_allowed = false - emitter.scalar_data.block_plain_allowed = false - emitter.scalar_data.single_quoted_allowed = false - } - if space_break || special_characters { - emitter.scalar_data.flow_plain_allowed = false - emitter.scalar_data.block_plain_allowed = false - emitter.scalar_data.single_quoted_allowed = false - emitter.scalar_data.block_allowed = false - } - if line_breaks { - emitter.scalar_data.flow_plain_allowed = false - emitter.scalar_data.block_plain_allowed = false - } - if flow_indicators { - emitter.scalar_data.flow_plain_allowed = false - } - if block_indicators { - emitter.scalar_data.block_plain_allowed = false - } - return true -} - -// Check if the event data is valid. -func yaml_emitter_analyze_event(emitter *yaml_emitter_t, event *yaml_event_t) bool { - - emitter.anchor_data.anchor = nil - emitter.tag_data.handle = nil - emitter.tag_data.suffix = nil - emitter.scalar_data.value = nil - - if len(event.head_comment) > 0 { - emitter.head_comment = event.head_comment - } - if len(event.line_comment) > 0 { - emitter.line_comment = event.line_comment - } - if len(event.foot_comment) > 0 { - emitter.foot_comment = event.foot_comment - } - - switch event.typ { - case yaml_ALIAS_EVENT: - if !yaml_emitter_analyze_anchor(emitter, event.anchor, true) { - return false - } - - case yaml_SCALAR_EVENT: - if len(event.anchor) > 0 { - if !yaml_emitter_analyze_anchor(emitter, event.anchor, false) { - return false - } - } - if len(event.tag) > 0 && (emitter.canonical || (!event.implicit && !event.quoted_implicit)) { - if !yaml_emitter_analyze_tag(emitter, event.tag) { - return false - } - } - if !yaml_emitter_analyze_scalar(emitter, event.value) { - return false - } - - case yaml_SEQUENCE_START_EVENT: - if len(event.anchor) > 0 { - if !yaml_emitter_analyze_anchor(emitter, event.anchor, false) { - return false - } - } - if len(event.tag) > 0 && (emitter.canonical || !event.implicit) { - if !yaml_emitter_analyze_tag(emitter, event.tag) { - return false - } - } - - case yaml_MAPPING_START_EVENT: - if len(event.anchor) > 0 { - if !yaml_emitter_analyze_anchor(emitter, event.anchor, false) { - return false - } - } - if len(event.tag) > 0 && (emitter.canonical || !event.implicit) { - if !yaml_emitter_analyze_tag(emitter, event.tag) { - return false - } - } - } - return true -} - -// Write the BOM character. -func yaml_emitter_write_bom(emitter *yaml_emitter_t) bool { - if !flush(emitter) { - return false - } - pos := emitter.buffer_pos - emitter.buffer[pos+0] = '\xEF' - emitter.buffer[pos+1] = '\xBB' - emitter.buffer[pos+2] = '\xBF' - emitter.buffer_pos += 3 - return true -} - -func yaml_emitter_write_indent(emitter *yaml_emitter_t) bool { - indent := emitter.indent - if indent < 0 { - indent = 0 - } - if !emitter.indention || emitter.column > indent || (emitter.column == indent && !emitter.whitespace) { - if !put_break(emitter) { - return false - } - } - for emitter.column < indent { - if !put(emitter, ' ') { - return false - } - } - emitter.whitespace = true - //emitter.indention = true - emitter.space_above = false - return true -} - -func yaml_emitter_write_indicator(emitter *yaml_emitter_t, indicator []byte, need_whitespace, is_whitespace, is_indention bool) bool { - if need_whitespace && !emitter.whitespace { - if !put(emitter, ' ') { - return false - } - } - if !write_all(emitter, indicator) { - return false - } - emitter.whitespace = is_whitespace - emitter.indention = (emitter.indention && is_indention) - emitter.open_ended = false - return true -} - -func yaml_emitter_write_anchor(emitter *yaml_emitter_t, value []byte) bool { - if !write_all(emitter, value) { - return false - } - emitter.whitespace = false - emitter.indention = false - return true -} - -func yaml_emitter_write_tag_handle(emitter *yaml_emitter_t, value []byte) bool { - if !emitter.whitespace { - if !put(emitter, ' ') { - return false - } - } - if !write_all(emitter, value) { - return false - } - emitter.whitespace = false - emitter.indention = false - return true -} - -func yaml_emitter_write_tag_content(emitter *yaml_emitter_t, value []byte, need_whitespace bool) bool { - if need_whitespace && !emitter.whitespace { - if !put(emitter, ' ') { - return false - } - } - for i := 0; i < len(value); { - var must_write bool - switch value[i] { - case ';', '/', '?', ':', '@', '&', '=', '+', '$', ',', '_', '.', '~', '*', '\'', '(', ')', '[', ']': - must_write = true - default: - must_write = is_alpha(value, i) - } - if must_write { - if !write(emitter, value, &i) { - return false - } - } else { - w := width(value[i]) - for k := 0; k < w; k++ { - octet := value[i] - i++ - if !put(emitter, '%') { - return false - } - - c := octet >> 4 - if c < 10 { - c += '0' - } else { - c += 'A' - 10 - } - if !put(emitter, c) { - return false - } - - c = octet & 0x0f - if c < 10 { - c += '0' - } else { - c += 'A' - 10 - } - if !put(emitter, c) { - return false - } - } - } - } - emitter.whitespace = false - emitter.indention = false - return true -} - -func yaml_emitter_write_plain_scalar(emitter *yaml_emitter_t, value []byte, allow_breaks bool) bool { - if !emitter.whitespace { - if !put(emitter, ' ') { - return false - } - } - - spaces := false - breaks := false - for i := 0; i < len(value); { - if is_space(value, i) { - if allow_breaks && !spaces && emitter.column > emitter.best_width && !is_space(value, i+1) { - if !yaml_emitter_write_indent(emitter) { - return false - } - i += width(value[i]) - } else { - if !write(emitter, value, &i) { - return false - } - } - spaces = true - } else if is_break(value, i) { - if !breaks && value[i] == '\n' { - if !put_break(emitter) { - return false - } - } - if !write_break(emitter, value, &i) { - return false - } - //emitter.indention = true - breaks = true - } else { - if breaks { - if !yaml_emitter_write_indent(emitter) { - return false - } - } - if !write(emitter, value, &i) { - return false - } - emitter.indention = false - spaces = false - breaks = false - } - } - - emitter.whitespace = false - emitter.indention = false - if emitter.root_context { - emitter.open_ended = true - } - - return true -} - -func yaml_emitter_write_single_quoted_scalar(emitter *yaml_emitter_t, value []byte, allow_breaks bool) bool { - - if !yaml_emitter_write_indicator(emitter, []byte{'\''}, true, false, false) { - return false - } - - spaces := false - breaks := false - for i := 0; i < len(value); { - if is_space(value, i) { - if allow_breaks && !spaces && emitter.column > emitter.best_width && i > 0 && i < len(value)-1 && !is_space(value, i+1) { - if !yaml_emitter_write_indent(emitter) { - return false - } - i += width(value[i]) - } else { - if !write(emitter, value, &i) { - return false - } - } - spaces = true - } else if is_break(value, i) { - if !breaks && value[i] == '\n' { - if !put_break(emitter) { - return false - } - } - if !write_break(emitter, value, &i) { - return false - } - //emitter.indention = true - breaks = true - } else { - if breaks { - if !yaml_emitter_write_indent(emitter) { - return false - } - } - if value[i] == '\'' { - if !put(emitter, '\'') { - return false - } - } - if !write(emitter, value, &i) { - return false - } - emitter.indention = false - spaces = false - breaks = false - } - } - if !yaml_emitter_write_indicator(emitter, []byte{'\''}, false, false, false) { - return false - } - emitter.whitespace = false - emitter.indention = false - return true -} - -func yaml_emitter_write_double_quoted_scalar(emitter *yaml_emitter_t, value []byte, allow_breaks bool) bool { - spaces := false - if !yaml_emitter_write_indicator(emitter, []byte{'"'}, true, false, false) { - return false - } - - for i := 0; i < len(value); { - if !is_printable(value, i) || (!emitter.unicode && !is_ascii(value, i)) || - is_bom(value, i) || is_break(value, i) || - value[i] == '"' || value[i] == '\\' { - - octet := value[i] - - var w int - var v rune - switch { - case octet&0x80 == 0x00: - w, v = 1, rune(octet&0x7F) - case octet&0xE0 == 0xC0: - w, v = 2, rune(octet&0x1F) - case octet&0xF0 == 0xE0: - w, v = 3, rune(octet&0x0F) - case octet&0xF8 == 0xF0: - w, v = 4, rune(octet&0x07) - } - for k := 1; k < w; k++ { - octet = value[i+k] - v = (v << 6) + (rune(octet) & 0x3F) - } - i += w - - if !put(emitter, '\\') { - return false - } - - var ok bool - switch v { - case 0x00: - ok = put(emitter, '0') - case 0x07: - ok = put(emitter, 'a') - case 0x08: - ok = put(emitter, 'b') - case 0x09: - ok = put(emitter, 't') - case 0x0A: - ok = put(emitter, 'n') - case 0x0b: - ok = put(emitter, 'v') - case 0x0c: - ok = put(emitter, 'f') - case 0x0d: - ok = put(emitter, 'r') - case 0x1b: - ok = put(emitter, 'e') - case 0x22: - ok = put(emitter, '"') - case 0x5c: - ok = put(emitter, '\\') - case 0x85: - ok = put(emitter, 'N') - case 0xA0: - ok = put(emitter, '_') - case 0x2028: - ok = put(emitter, 'L') - case 0x2029: - ok = put(emitter, 'P') - default: - if v <= 0xFF { - ok = put(emitter, 'x') - w = 2 - } else if v <= 0xFFFF { - ok = put(emitter, 'u') - w = 4 - } else { - ok = put(emitter, 'U') - w = 8 - } - for k := (w - 1) * 4; ok && k >= 0; k -= 4 { - digit := byte((v >> uint(k)) & 0x0F) - if digit < 10 { - ok = put(emitter, digit+'0') - } else { - ok = put(emitter, digit+'A'-10) - } - } - } - if !ok { - return false - } - spaces = false - } else if is_space(value, i) { - if allow_breaks && !spaces && emitter.column > emitter.best_width && i > 0 && i < len(value)-1 { - if !yaml_emitter_write_indent(emitter) { - return false - } - if is_space(value, i+1) { - if !put(emitter, '\\') { - return false - } - } - i += width(value[i]) - } else if !write(emitter, value, &i) { - return false - } - spaces = true - } else { - if !write(emitter, value, &i) { - return false - } - spaces = false - } - } - if !yaml_emitter_write_indicator(emitter, []byte{'"'}, false, false, false) { - return false - } - emitter.whitespace = false - emitter.indention = false - return true -} - -func yaml_emitter_write_block_scalar_hints(emitter *yaml_emitter_t, value []byte) bool { - if is_space(value, 0) || is_break(value, 0) { - indent_hint := []byte{'0' + byte(emitter.best_indent)} - if !yaml_emitter_write_indicator(emitter, indent_hint, false, false, false) { - return false - } - } - - emitter.open_ended = false - - var chomp_hint [1]byte - if len(value) == 0 { - chomp_hint[0] = '-' - } else { - i := len(value) - 1 - for value[i]&0xC0 == 0x80 { - i-- - } - if !is_break(value, i) { - chomp_hint[0] = '-' - } else if i == 0 { - chomp_hint[0] = '+' - emitter.open_ended = true - } else { - i-- - for value[i]&0xC0 == 0x80 { - i-- - } - if is_break(value, i) { - chomp_hint[0] = '+' - emitter.open_ended = true - } - } - } - if chomp_hint[0] != 0 { - if !yaml_emitter_write_indicator(emitter, chomp_hint[:], false, false, false) { - return false - } - } - return true -} - -func yaml_emitter_write_literal_scalar(emitter *yaml_emitter_t, value []byte) bool { - if !yaml_emitter_write_indicator(emitter, []byte{'|'}, true, false, false) { - return false - } - if !yaml_emitter_write_block_scalar_hints(emitter, value) { - return false - } - if !put_break(emitter) { - return false - } - //emitter.indention = true - emitter.whitespace = true - breaks := true - for i := 0; i < len(value); { - if is_break(value, i) { - if !write_break(emitter, value, &i) { - return false - } - //emitter.indention = true - breaks = true - } else { - if breaks { - if !yaml_emitter_write_indent(emitter) { - return false - } - } - if !write(emitter, value, &i) { - return false - } - emitter.indention = false - breaks = false - } - } - - return true -} - -func yaml_emitter_write_folded_scalar(emitter *yaml_emitter_t, value []byte) bool { - if !yaml_emitter_write_indicator(emitter, []byte{'>'}, true, false, false) { - return false - } - if !yaml_emitter_write_block_scalar_hints(emitter, value) { - return false - } - - if !put_break(emitter) { - return false - } - //emitter.indention = true - emitter.whitespace = true - - breaks := true - leading_spaces := true - for i := 0; i < len(value); { - if is_break(value, i) { - if !breaks && !leading_spaces && value[i] == '\n' { - k := 0 - for is_break(value, k) { - k += width(value[k]) - } - if !is_blankz(value, k) { - if !put_break(emitter) { - return false - } - } - } - if !write_break(emitter, value, &i) { - return false - } - //emitter.indention = true - breaks = true - } else { - if breaks { - if !yaml_emitter_write_indent(emitter) { - return false - } - leading_spaces = is_blank(value, i) - } - if !breaks && is_space(value, i) && !is_space(value, i+1) && emitter.column > emitter.best_width { - if !yaml_emitter_write_indent(emitter) { - return false - } - i += width(value[i]) - } else { - if !write(emitter, value, &i) { - return false - } - } - emitter.indention = false - breaks = false - } - } - return true -} - -func yaml_emitter_write_comment(emitter *yaml_emitter_t, comment []byte) bool { - breaks := false - pound := false - for i := 0; i < len(comment); { - if is_break(comment, i) { - if !write_break(emitter, comment, &i) { - return false - } - //emitter.indention = true - breaks = true - pound = false - } else { - if breaks && !yaml_emitter_write_indent(emitter) { - return false - } - if !pound { - if comment[i] != '#' && (!put(emitter, '#') || !put(emitter, ' ')) { - return false - } - pound = true - } - if !write(emitter, comment, &i) { - return false - } - emitter.indention = false - breaks = false - } - } - if !breaks && !put_break(emitter) { - return false - } - - emitter.whitespace = true - //emitter.indention = true - return true -} diff --git a/vendor/gopkg.in/yaml.v3/encode.go b/vendor/gopkg.in/yaml.v3/encode.go deleted file mode 100644 index 95d9ad71..00000000 --- a/vendor/gopkg.in/yaml.v3/encode.go +++ /dev/null @@ -1,524 +0,0 @@ -// -// Copyright (c) 2011-2019 Canonical Ltd -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package yaml - -import ( - "encoding" - "fmt" - "io" - "reflect" - "regexp" - "sort" - "strconv" - "strings" - "time" - "unicode/utf8" -) - -type encoder struct { - emitter yaml_emitter_t - event yaml_event_t - out []byte - flow bool - indent int - doneInit bool -} - -func newEncoder() *encoder { - e := &encoder{} - yaml_emitter_initialize(&e.emitter) - yaml_emitter_set_output_string(&e.emitter, &e.out) - yaml_emitter_set_unicode(&e.emitter, true) - return e -} - -func newEncoderWithWriter(w io.Writer) *encoder { - e := &encoder{} - yaml_emitter_initialize(&e.emitter) - yaml_emitter_set_output_writer(&e.emitter, w) - yaml_emitter_set_unicode(&e.emitter, true) - return e -} - -func (e *encoder) init() { - if e.doneInit { - return - } - if e.indent == 0 { - e.indent = 4 - } - e.emitter.best_indent = e.indent - yaml_stream_start_event_initialize(&e.event, yaml_UTF8_ENCODING) - e.emit() - e.doneInit = true -} - -func (e *encoder) finish() { - e.emitter.open_ended = false - yaml_stream_end_event_initialize(&e.event) - e.emit() -} - -func (e *encoder) destroy() { - yaml_emitter_delete(&e.emitter) -} - -func (e *encoder) emit() { - // This will internally delete the e.event value. - e.must(yaml_emitter_emit(&e.emitter, &e.event)) -} - -func (e *encoder) must(ok bool) { - if !ok { - msg := e.emitter.problem - if msg == "" { - msg = "unknown problem generating YAML content" - } - failf("%s", msg) - } -} - -func (e *encoder) marshalDoc(tag string, in reflect.Value) { - e.init() - var node *Node - if in.IsValid() { - node, _ = in.Interface().(*Node) - } - if node != nil && node.Kind == DocumentNode { - e.nodev(in) - } else { - yaml_document_start_event_initialize(&e.event, nil, nil, true) - e.emit() - e.marshal(tag, in) - yaml_document_end_event_initialize(&e.event, true) - e.emit() - } -} - -func (e *encoder) marshal(tag string, in reflect.Value) { - tag = shortTag(tag) - if !in.IsValid() || in.Kind() == reflect.Ptr && in.IsNil() { - e.nilv() - return - } - iface := in.Interface() - switch value := iface.(type) { - case *Node: - e.nodev(in) - return - case time.Time: - e.timev(tag, in) - return - case *time.Time: - e.timev(tag, in.Elem()) - return - case time.Duration: - e.stringv(tag, reflect.ValueOf(value.String())) - return - case Marshaler: - v, err := value.MarshalYAML() - if err != nil { - fail(err) - } - if v == nil { - e.nilv() - return - } - e.marshal(tag, reflect.ValueOf(v)) - return - case encoding.TextMarshaler: - text, err := value.MarshalText() - if err != nil { - fail(err) - } - in = reflect.ValueOf(string(text)) - case nil: - e.nilv() - return - } - switch in.Kind() { - case reflect.Interface: - e.marshal(tag, in.Elem()) - case reflect.Map: - e.mapv(tag, in) - case reflect.Ptr: - e.marshal(tag, in.Elem()) - case reflect.Struct: - e.structv(tag, in) - case reflect.Slice, reflect.Array: - e.slicev(tag, in) - case reflect.String: - e.stringv(tag, in) - case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: - e.intv(tag, in) - case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr: - e.uintv(tag, in) - case reflect.Float32, reflect.Float64: - e.floatv(tag, in) - case reflect.Bool: - e.boolv(tag, in) - default: - panic("cannot marshal type: " + in.Type().String()) - } -} - -func (e *encoder) mapv(tag string, in reflect.Value) { - e.mappingv(tag, func() { - keys := keyList(in.MapKeys()) - sort.Sort(keys) - for _, k := range keys { - e.marshal("", k) - e.marshal("", in.MapIndex(k)) - } - }) -} - -func (e *encoder) fieldByIndex(v reflect.Value, index []int) (field reflect.Value) { - for _, num := range index { - for { - if v.Kind() == reflect.Ptr { - if v.IsNil() { - return reflect.Value{} - } - v = v.Elem() - continue - } - break - } - v = v.Field(num) - } - return v -} - -func (e *encoder) structv(tag string, in reflect.Value) { - sinfo, err := getStructInfo(in.Type()) - if err != nil { - panic(err) - } - e.mappingv(tag, func() { - for _, info := range sinfo.FieldsList { - var value reflect.Value - if info.Inline == nil { - value = in.Field(info.Num) - } else { - value = e.fieldByIndex(in, info.Inline) - if !value.IsValid() { - continue - } - } - if info.OmitEmpty && isZero(value) { - continue - } - e.marshal("", reflect.ValueOf(info.Key)) - e.flow = info.Flow - e.marshal("", value) - } - if sinfo.InlineMap >= 0 { - m := in.Field(sinfo.InlineMap) - if m.Len() > 0 { - e.flow = false - keys := keyList(m.MapKeys()) - sort.Sort(keys) - for _, k := range keys { - if _, found := sinfo.FieldsMap[k.String()]; found { - panic(fmt.Sprintf("cannot have key %q in inlined map: conflicts with struct field", k.String())) - } - e.marshal("", k) - e.flow = false - e.marshal("", m.MapIndex(k)) - } - } - } - }) -} - -func (e *encoder) mappingv(tag string, f func()) { - implicit := tag == "" - style := yaml_BLOCK_MAPPING_STYLE - if e.flow { - e.flow = false - style = yaml_FLOW_MAPPING_STYLE - } - yaml_mapping_start_event_initialize(&e.event, nil, []byte(tag), implicit, style) - e.emit() - f() - yaml_mapping_end_event_initialize(&e.event) - e.emit() -} - -func (e *encoder) slicev(tag string, in reflect.Value) { - implicit := tag == "" - style := yaml_BLOCK_SEQUENCE_STYLE - if e.flow { - e.flow = false - style = yaml_FLOW_SEQUENCE_STYLE - } - e.must(yaml_sequence_start_event_initialize(&e.event, nil, []byte(tag), implicit, style)) - e.emit() - n := in.Len() - for i := 0; i < n; i++ { - e.marshal("", in.Index(i)) - } - e.must(yaml_sequence_end_event_initialize(&e.event)) - e.emit() -} - -// isBase60 returns whether s is in base 60 notation as defined in YAML 1.1. -// -// The base 60 float notation in YAML 1.1 is a terrible idea and is unsupported -// in YAML 1.2 and by this package, but these should be marshalled quoted for -// the time being for compatibility with other parsers. -func isBase60Float(s string) (result bool) { - // Fast path. - if s == "" { - return false - } - c := s[0] - if !(c == '+' || c == '-' || c >= '0' && c <= '9') || strings.IndexByte(s, ':') < 0 { - return false - } - // Do the full match. - return base60float.MatchString(s) -} - -// From http://yaml.org/type/float.html, except the regular expression there -// is bogus. In practice parsers do not enforce the "\.[0-9_]*" suffix. -var base60float = regexp.MustCompile(`^[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+(?:\.[0-9_]*)?$`) - -func (e *encoder) stringv(tag string, in reflect.Value) { - var style yaml_scalar_style_t - s := in.String() - canUsePlain := true - switch { - case !utf8.ValidString(s): - if tag == binaryTag { - failf("explicitly tagged !!binary data must be base64-encoded") - } - if tag != "" { - failf("cannot marshal invalid UTF-8 data as %s", shortTag(tag)) - } - // It can't be encoded directly as YAML so use a binary tag - // and encode it as base64. - tag = binaryTag - s = encodeBase64(s) - case tag == "": - // Check to see if it would resolve to a specific - // tag when encoded unquoted. If it doesn't, - // there's no need to quote it. - rtag, _ := resolve("", s) - canUsePlain = rtag == strTag && !isBase60Float(s) - } - // Note: it's possible for user code to emit invalid YAML - // if they explicitly specify a tag and a string containing - // text that's incompatible with that tag. - switch { - case strings.Contains(s, "\n"): - style = yaml_LITERAL_SCALAR_STYLE - case canUsePlain: - style = yaml_PLAIN_SCALAR_STYLE - default: - style = yaml_DOUBLE_QUOTED_SCALAR_STYLE - } - e.emitScalar(s, "", tag, style, nil, nil, nil) -} - -func (e *encoder) boolv(tag string, in reflect.Value) { - var s string - if in.Bool() { - s = "true" - } else { - s = "false" - } - e.emitScalar(s, "", tag, yaml_PLAIN_SCALAR_STYLE, nil, nil, nil) -} - -func (e *encoder) intv(tag string, in reflect.Value) { - s := strconv.FormatInt(in.Int(), 10) - e.emitScalar(s, "", tag, yaml_PLAIN_SCALAR_STYLE, nil, nil, nil) -} - -func (e *encoder) uintv(tag string, in reflect.Value) { - s := strconv.FormatUint(in.Uint(), 10) - e.emitScalar(s, "", tag, yaml_PLAIN_SCALAR_STYLE, nil, nil, nil) -} - -func (e *encoder) timev(tag string, in reflect.Value) { - t := in.Interface().(time.Time) - s := t.Format(time.RFC3339Nano) - e.emitScalar(s, "", tag, yaml_PLAIN_SCALAR_STYLE, nil, nil, nil) -} - -func (e *encoder) floatv(tag string, in reflect.Value) { - // Issue #352: When formatting, use the precision of the underlying value - precision := 64 - if in.Kind() == reflect.Float32 { - precision = 32 - } - - s := strconv.FormatFloat(in.Float(), 'g', -1, precision) - switch s { - case "+Inf": - s = ".inf" - case "-Inf": - s = "-.inf" - case "NaN": - s = ".nan" - } - e.emitScalar(s, "", tag, yaml_PLAIN_SCALAR_STYLE, nil, nil, nil) -} - -func (e *encoder) nilv() { - e.emitScalar("null", "", "", yaml_PLAIN_SCALAR_STYLE, nil, nil, nil) -} - -func (e *encoder) emitScalar(value, anchor, tag string, style yaml_scalar_style_t, head, line, foot []byte) { - // TODO Kill this function. Replace all initialize calls by their underlining Go literals. - implicit := tag == "" - if !implicit { - tag = longTag(tag) - } - e.must(yaml_scalar_event_initialize(&e.event, []byte(anchor), []byte(tag), []byte(value), implicit, implicit, style)) - e.event.head_comment = head - e.event.line_comment = line - e.event.foot_comment = foot - e.emit() -} - -func (e *encoder) nodev(in reflect.Value) { - e.node(in.Interface().(*Node)) -} - -func (e *encoder) node(node *Node) { - // If the tag was not explicitly requested, and dropping it won't change the - // implicit tag of the value, don't include it in the presentation. - var tag = node.Tag - var stag = shortTag(tag) - var rtag string - var forceQuoting bool - if tag != "" && node.Style&TaggedStyle == 0 { - if node.Kind == ScalarNode { - if stag == strTag && node.Style&(SingleQuotedStyle|DoubleQuotedStyle|LiteralStyle|FoldedStyle) != 0 { - tag = "" - } else { - rtag, _ = resolve("", node.Value) - if rtag == stag { - tag = "" - } else if stag == strTag { - tag = "" - forceQuoting = true - } - } - } else { - switch node.Kind { - case MappingNode: - rtag = mapTag - case SequenceNode: - rtag = seqTag - } - if rtag == stag { - tag = "" - } - } - } - - switch node.Kind { - case DocumentNode: - yaml_document_start_event_initialize(&e.event, nil, nil, true) - e.event.head_comment = []byte(node.HeadComment) - e.emit() - for _, node := range node.Content { - e.node(node) - } - yaml_document_end_event_initialize(&e.event, true) - e.event.foot_comment = []byte(node.FootComment) - e.emit() - - case SequenceNode: - style := yaml_BLOCK_SEQUENCE_STYLE - if node.Style&FlowStyle != 0 { - style = yaml_FLOW_SEQUENCE_STYLE - } - e.must(yaml_sequence_start_event_initialize(&e.event, []byte(node.Anchor), []byte(tag), tag == "", style)) - e.event.head_comment = []byte(node.HeadComment) - e.emit() - for _, node := range node.Content { - e.node(node) - } - e.must(yaml_sequence_end_event_initialize(&e.event)) - e.event.line_comment = []byte(node.LineComment) - e.event.foot_comment = []byte(node.FootComment) - e.emit() - - case MappingNode: - style := yaml_BLOCK_MAPPING_STYLE - if node.Style&FlowStyle != 0 { - style = yaml_FLOW_MAPPING_STYLE - } - yaml_mapping_start_event_initialize(&e.event, []byte(node.Anchor), []byte(tag), tag == "", style) - e.event.head_comment = []byte(node.HeadComment) - e.emit() - - for i := 0; i+1 < len(node.Content); i += 2 { - e.node(node.Content[i]) - e.node(node.Content[i+1]) - } - - yaml_mapping_end_event_initialize(&e.event) - e.event.line_comment = []byte(node.LineComment) - e.event.foot_comment = []byte(node.FootComment) - e.emit() - - case AliasNode: - yaml_alias_event_initialize(&e.event, []byte(node.Value)) - e.event.head_comment = []byte(node.HeadComment) - e.event.line_comment = []byte(node.LineComment) - e.event.foot_comment = []byte(node.FootComment) - e.emit() - - case ScalarNode: - value := node.Value - if !utf8.ValidString(value) { - if tag == binaryTag { - failf("explicitly tagged !!binary data must be base64-encoded") - } - if tag != "" { - failf("cannot marshal invalid UTF-8 data as %s", shortTag(tag)) - } - // It can't be encoded directly as YAML so use a binary tag - // and encode it as base64. - tag = binaryTag - value = encodeBase64(value) - } - - style := yaml_PLAIN_SCALAR_STYLE - switch { - case node.Style&DoubleQuotedStyle != 0: - style = yaml_DOUBLE_QUOTED_SCALAR_STYLE - case node.Style&SingleQuotedStyle != 0: - style = yaml_SINGLE_QUOTED_SCALAR_STYLE - case node.Style&LiteralStyle != 0: - style = yaml_LITERAL_SCALAR_STYLE - case node.Style&FoldedStyle != 0: - style = yaml_FOLDED_SCALAR_STYLE - case strings.Contains(value, "\n"): - style = yaml_LITERAL_SCALAR_STYLE - case forceQuoting: - style = yaml_DOUBLE_QUOTED_SCALAR_STYLE - } - - e.emitScalar(value, node.Anchor, tag, style, []byte(node.HeadComment), []byte(node.LineComment), []byte(node.FootComment)) - } -} diff --git a/vendor/gopkg.in/yaml.v3/go.mod b/vendor/gopkg.in/yaml.v3/go.mod deleted file mode 100644 index f407ea32..00000000 --- a/vendor/gopkg.in/yaml.v3/go.mod +++ /dev/null @@ -1,5 +0,0 @@ -module "gopkg.in/yaml.v3" - -require ( - "gopkg.in/check.v1" v0.0.0-20161208181325-20d25e280405 -) diff --git a/vendor/gopkg.in/yaml.v3/parserc.go b/vendor/gopkg.in/yaml.v3/parserc.go deleted file mode 100644 index 0f7bb1ca..00000000 --- a/vendor/gopkg.in/yaml.v3/parserc.go +++ /dev/null @@ -1,1188 +0,0 @@ -// -// Copyright (c) 2011-2019 Canonical Ltd -// Copyright (c) 2006-2010 Kirill Simonov -// -// 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. - -package yaml - -import ( - "bytes" -) - -// The parser implements the following grammar: -// -// stream ::= STREAM-START implicit_document? explicit_document* STREAM-END -// implicit_document ::= block_node DOCUMENT-END* -// explicit_document ::= DIRECTIVE* DOCUMENT-START block_node? DOCUMENT-END* -// block_node_or_indentless_sequence ::= -// ALIAS -// | properties (block_content | indentless_block_sequence)? -// | block_content -// | indentless_block_sequence -// block_node ::= ALIAS -// | properties block_content? -// | block_content -// flow_node ::= ALIAS -// | properties flow_content? -// | flow_content -// properties ::= TAG ANCHOR? | ANCHOR TAG? -// block_content ::= block_collection | flow_collection | SCALAR -// flow_content ::= flow_collection | SCALAR -// block_collection ::= block_sequence | block_mapping -// flow_collection ::= flow_sequence | flow_mapping -// block_sequence ::= BLOCK-SEQUENCE-START (BLOCK-ENTRY block_node?)* BLOCK-END -// indentless_sequence ::= (BLOCK-ENTRY block_node?)+ -// block_mapping ::= BLOCK-MAPPING_START -// ((KEY block_node_or_indentless_sequence?)? -// (VALUE block_node_or_indentless_sequence?)?)* -// BLOCK-END -// flow_sequence ::= FLOW-SEQUENCE-START -// (flow_sequence_entry FLOW-ENTRY)* -// flow_sequence_entry? -// FLOW-SEQUENCE-END -// flow_sequence_entry ::= flow_node | KEY flow_node? (VALUE flow_node?)? -// flow_mapping ::= FLOW-MAPPING-START -// (flow_mapping_entry FLOW-ENTRY)* -// flow_mapping_entry? -// FLOW-MAPPING-END -// flow_mapping_entry ::= flow_node | KEY flow_node? (VALUE flow_node?)? - -// Peek the next token in the token queue. -func peek_token(parser *yaml_parser_t) *yaml_token_t { - if parser.token_available || yaml_parser_fetch_more_tokens(parser) { - token := &parser.tokens[parser.tokens_head] - yaml_parser_unfold_comments(parser, token) - return token - } - return nil -} - -// yaml_parser_unfold_comments walks through the comments queue and joins all -// comments behind the position of the provided token into the respective -// top-level comment slices in the parser. -func yaml_parser_unfold_comments(parser *yaml_parser_t, token *yaml_token_t) { - for parser.comments_head < len(parser.comments) && token.start_mark.index >= parser.comments[parser.comments_head].after.index { - comment := &parser.comments[parser.comments_head] - if len(comment.head) > 0 { - if len(parser.head_comment) > 0 { - parser.head_comment = append(parser.head_comment, '\n') - } - parser.head_comment = append(parser.head_comment, comment.head...) - } - if len(comment.foot) > 0 { - if len(parser.foot_comment) > 0 { - parser.foot_comment = append(parser.foot_comment, '\n') - } - parser.foot_comment = append(parser.foot_comment, comment.foot...) - } - if len(comment.line) > 0 { - if len(parser.line_comment) > 0 { - parser.line_comment = append(parser.line_comment, '\n') - } - parser.line_comment = append(parser.line_comment, comment.line...) - } - *comment = yaml_comment_t{} - parser.comments_head++ - } -} - -// Remove the next token from the queue (must be called after peek_token). -func skip_token(parser *yaml_parser_t) { - parser.token_available = false - parser.tokens_parsed++ - parser.stream_end_produced = parser.tokens[parser.tokens_head].typ == yaml_STREAM_END_TOKEN - parser.tokens_head++ -} - -// Get the next event. -func yaml_parser_parse(parser *yaml_parser_t, event *yaml_event_t) bool { - // Erase the event object. - *event = yaml_event_t{} - - // No events after the end of the stream or error. - if parser.stream_end_produced || parser.error != yaml_NO_ERROR || parser.state == yaml_PARSE_END_STATE { - return true - } - - // Generate the next event. - return yaml_parser_state_machine(parser, event) -} - -// Set parser error. -func yaml_parser_set_parser_error(parser *yaml_parser_t, problem string, problem_mark yaml_mark_t) bool { - parser.error = yaml_PARSER_ERROR - parser.problem = problem - parser.problem_mark = problem_mark - return false -} - -func yaml_parser_set_parser_error_context(parser *yaml_parser_t, context string, context_mark yaml_mark_t, problem string, problem_mark yaml_mark_t) bool { - parser.error = yaml_PARSER_ERROR - parser.context = context - parser.context_mark = context_mark - parser.problem = problem - parser.problem_mark = problem_mark - return false -} - -// State dispatcher. -func yaml_parser_state_machine(parser *yaml_parser_t, event *yaml_event_t) bool { - //trace("yaml_parser_state_machine", "state:", parser.state.String()) - - switch parser.state { - case yaml_PARSE_STREAM_START_STATE: - return yaml_parser_parse_stream_start(parser, event) - - case yaml_PARSE_IMPLICIT_DOCUMENT_START_STATE: - return yaml_parser_parse_document_start(parser, event, true) - - case yaml_PARSE_DOCUMENT_START_STATE: - return yaml_parser_parse_document_start(parser, event, false) - - case yaml_PARSE_DOCUMENT_CONTENT_STATE: - return yaml_parser_parse_document_content(parser, event) - - case yaml_PARSE_DOCUMENT_END_STATE: - return yaml_parser_parse_document_end(parser, event) - - case yaml_PARSE_BLOCK_NODE_STATE: - return yaml_parser_parse_node(parser, event, true, false) - - case yaml_PARSE_BLOCK_NODE_OR_INDENTLESS_SEQUENCE_STATE: - return yaml_parser_parse_node(parser, event, true, true) - - case yaml_PARSE_FLOW_NODE_STATE: - return yaml_parser_parse_node(parser, event, false, false) - - case yaml_PARSE_BLOCK_SEQUENCE_FIRST_ENTRY_STATE: - return yaml_parser_parse_block_sequence_entry(parser, event, true) - - case yaml_PARSE_BLOCK_SEQUENCE_ENTRY_STATE: - return yaml_parser_parse_block_sequence_entry(parser, event, false) - - case yaml_PARSE_INDENTLESS_SEQUENCE_ENTRY_STATE: - return yaml_parser_parse_indentless_sequence_entry(parser, event) - - case yaml_PARSE_BLOCK_MAPPING_FIRST_KEY_STATE: - return yaml_parser_parse_block_mapping_key(parser, event, true) - - case yaml_PARSE_BLOCK_MAPPING_KEY_STATE: - return yaml_parser_parse_block_mapping_key(parser, event, false) - - case yaml_PARSE_BLOCK_MAPPING_VALUE_STATE: - return yaml_parser_parse_block_mapping_value(parser, event) - - case yaml_PARSE_FLOW_SEQUENCE_FIRST_ENTRY_STATE: - return yaml_parser_parse_flow_sequence_entry(parser, event, true) - - case yaml_PARSE_FLOW_SEQUENCE_ENTRY_STATE: - return yaml_parser_parse_flow_sequence_entry(parser, event, false) - - case yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_KEY_STATE: - return yaml_parser_parse_flow_sequence_entry_mapping_key(parser, event) - - case yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_VALUE_STATE: - return yaml_parser_parse_flow_sequence_entry_mapping_value(parser, event) - - case yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_END_STATE: - return yaml_parser_parse_flow_sequence_entry_mapping_end(parser, event) - - case yaml_PARSE_FLOW_MAPPING_FIRST_KEY_STATE: - return yaml_parser_parse_flow_mapping_key(parser, event, true) - - case yaml_PARSE_FLOW_MAPPING_KEY_STATE: - return yaml_parser_parse_flow_mapping_key(parser, event, false) - - case yaml_PARSE_FLOW_MAPPING_VALUE_STATE: - return yaml_parser_parse_flow_mapping_value(parser, event, false) - - case yaml_PARSE_FLOW_MAPPING_EMPTY_VALUE_STATE: - return yaml_parser_parse_flow_mapping_value(parser, event, true) - - default: - panic("invalid parser state") - } -} - -// Parse the production: -// stream ::= STREAM-START implicit_document? explicit_document* STREAM-END -// ************ -func yaml_parser_parse_stream_start(parser *yaml_parser_t, event *yaml_event_t) bool { - token := peek_token(parser) - if token == nil { - return false - } - if token.typ != yaml_STREAM_START_TOKEN { - return yaml_parser_set_parser_error(parser, "did not find expected <stream-start>", token.start_mark) - } - parser.state = yaml_PARSE_IMPLICIT_DOCUMENT_START_STATE - *event = yaml_event_t{ - typ: yaml_STREAM_START_EVENT, - start_mark: token.start_mark, - end_mark: token.end_mark, - encoding: token.encoding, - } - skip_token(parser) - return true -} - -// Parse the productions: -// implicit_document ::= block_node DOCUMENT-END* -// * -// explicit_document ::= DIRECTIVE* DOCUMENT-START block_node? DOCUMENT-END* -// ************************* -func yaml_parser_parse_document_start(parser *yaml_parser_t, event *yaml_event_t, implicit bool) bool { - - token := peek_token(parser) - if token == nil { - return false - } - - // Parse extra document end indicators. - if !implicit { - for token.typ == yaml_DOCUMENT_END_TOKEN { - skip_token(parser) - token = peek_token(parser) - if token == nil { - return false - } - } - } - - if implicit && token.typ != yaml_VERSION_DIRECTIVE_TOKEN && - token.typ != yaml_TAG_DIRECTIVE_TOKEN && - token.typ != yaml_DOCUMENT_START_TOKEN && - token.typ != yaml_STREAM_END_TOKEN { - // Parse an implicit document. - if !yaml_parser_process_directives(parser, nil, nil) { - return false - } - parser.states = append(parser.states, yaml_PARSE_DOCUMENT_END_STATE) - parser.state = yaml_PARSE_BLOCK_NODE_STATE - - var head_comment []byte - if len(parser.head_comment) > 0 { - // [Go] Scan the header comment backwards, and if an empty line is found, break - // the header so the part before the last empty line goes into the - // document header, while the bottom of it goes into a follow up event. - for i := len(parser.head_comment) - 1; i > 0; i-- { - if parser.head_comment[i] == '\n' { - if i == len(parser.head_comment)-1 { - head_comment = parser.head_comment[:i] - parser.head_comment = parser.head_comment[i+1:] - break - } else if parser.head_comment[i-1] == '\n' { - head_comment = parser.head_comment[:i-1] - parser.head_comment = parser.head_comment[i+1:] - break - } - } - } - } - - *event = yaml_event_t{ - typ: yaml_DOCUMENT_START_EVENT, - start_mark: token.start_mark, - end_mark: token.end_mark, - - head_comment: head_comment, - } - - } else if token.typ != yaml_STREAM_END_TOKEN { - // Parse an explicit document. - var version_directive *yaml_version_directive_t - var tag_directives []yaml_tag_directive_t - start_mark := token.start_mark - if !yaml_parser_process_directives(parser, &version_directive, &tag_directives) { - return false - } - token = peek_token(parser) - if token == nil { - return false - } - if token.typ != yaml_DOCUMENT_START_TOKEN { - yaml_parser_set_parser_error(parser, - "did not find expected <document start>", token.start_mark) - return false - } - parser.states = append(parser.states, yaml_PARSE_DOCUMENT_END_STATE) - parser.state = yaml_PARSE_DOCUMENT_CONTENT_STATE - end_mark := token.end_mark - - *event = yaml_event_t{ - typ: yaml_DOCUMENT_START_EVENT, - start_mark: start_mark, - end_mark: end_mark, - version_directive: version_directive, - tag_directives: tag_directives, - implicit: false, - } - skip_token(parser) - - } else { - // Parse the stream end. - parser.state = yaml_PARSE_END_STATE - *event = yaml_event_t{ - typ: yaml_STREAM_END_EVENT, - start_mark: token.start_mark, - end_mark: token.end_mark, - } - skip_token(parser) - } - - return true -} - -// Parse the productions: -// explicit_document ::= DIRECTIVE* DOCUMENT-START block_node? DOCUMENT-END* -// *********** -// -func yaml_parser_parse_document_content(parser *yaml_parser_t, event *yaml_event_t) bool { - token := peek_token(parser) - if token == nil { - return false - } - if token.typ == yaml_VERSION_DIRECTIVE_TOKEN || - token.typ == yaml_TAG_DIRECTIVE_TOKEN || - token.typ == yaml_DOCUMENT_START_TOKEN || - token.typ == yaml_DOCUMENT_END_TOKEN || - token.typ == yaml_STREAM_END_TOKEN { - parser.state = parser.states[len(parser.states)-1] - parser.states = parser.states[:len(parser.states)-1] - return yaml_parser_process_empty_scalar(parser, event, - token.start_mark) - } - return yaml_parser_parse_node(parser, event, true, false) -} - -// Parse the productions: -// implicit_document ::= block_node DOCUMENT-END* -// ************* -// explicit_document ::= DIRECTIVE* DOCUMENT-START block_node? DOCUMENT-END* -// -func yaml_parser_parse_document_end(parser *yaml_parser_t, event *yaml_event_t) bool { - token := peek_token(parser) - if token == nil { - return false - } - - start_mark := token.start_mark - end_mark := token.start_mark - - implicit := true - if token.typ == yaml_DOCUMENT_END_TOKEN { - end_mark = token.end_mark - skip_token(parser) - implicit = false - } - - parser.tag_directives = parser.tag_directives[:0] - - parser.state = yaml_PARSE_DOCUMENT_START_STATE - *event = yaml_event_t{ - typ: yaml_DOCUMENT_END_EVENT, - start_mark: start_mark, - end_mark: end_mark, - implicit: implicit, - - foot_comment: parser.head_comment, - } - parser.head_comment = nil - return true -} - -func yaml_parser_set_event_comments(parser *yaml_parser_t, event *yaml_event_t) { - event.head_comment = parser.head_comment - event.line_comment = parser.line_comment - event.foot_comment = parser.foot_comment - parser.head_comment = nil - parser.line_comment = nil - parser.foot_comment = nil -} - -// Parse the productions: -// block_node_or_indentless_sequence ::= -// ALIAS -// ***** -// | properties (block_content | indentless_block_sequence)? -// ********** * -// | block_content | indentless_block_sequence -// * -// block_node ::= ALIAS -// ***** -// | properties block_content? -// ********** * -// | block_content -// * -// flow_node ::= ALIAS -// ***** -// | properties flow_content? -// ********** * -// | flow_content -// * -// properties ::= TAG ANCHOR? | ANCHOR TAG? -// ************************* -// block_content ::= block_collection | flow_collection | SCALAR -// ****** -// flow_content ::= flow_collection | SCALAR -// ****** -func yaml_parser_parse_node(parser *yaml_parser_t, event *yaml_event_t, block, indentless_sequence bool) bool { - //defer trace("yaml_parser_parse_node", "block:", block, "indentless_sequence:", indentless_sequence)() - - token := peek_token(parser) - if token == nil { - return false - } - - if token.typ == yaml_ALIAS_TOKEN { - parser.state = parser.states[len(parser.states)-1] - parser.states = parser.states[:len(parser.states)-1] - *event = yaml_event_t{ - typ: yaml_ALIAS_EVENT, - start_mark: token.start_mark, - end_mark: token.end_mark, - anchor: token.value, - } - yaml_parser_set_event_comments(parser, event) - skip_token(parser) - return true - } - - start_mark := token.start_mark - end_mark := token.start_mark - - var tag_token bool - var tag_handle, tag_suffix, anchor []byte - var tag_mark yaml_mark_t - if token.typ == yaml_ANCHOR_TOKEN { - anchor = token.value - start_mark = token.start_mark - end_mark = token.end_mark - skip_token(parser) - token = peek_token(parser) - if token == nil { - return false - } - if token.typ == yaml_TAG_TOKEN { - tag_token = true - tag_handle = token.value - tag_suffix = token.suffix - tag_mark = token.start_mark - end_mark = token.end_mark - skip_token(parser) - token = peek_token(parser) - if token == nil { - return false - } - } - } else if token.typ == yaml_TAG_TOKEN { - tag_token = true - tag_handle = token.value - tag_suffix = token.suffix - start_mark = token.start_mark - tag_mark = token.start_mark - end_mark = token.end_mark - skip_token(parser) - token = peek_token(parser) - if token == nil { - return false - } - if token.typ == yaml_ANCHOR_TOKEN { - anchor = token.value - end_mark = token.end_mark - skip_token(parser) - token = peek_token(parser) - if token == nil { - return false - } - } - } - - var tag []byte - if tag_token { - if len(tag_handle) == 0 { - tag = tag_suffix - tag_suffix = nil - } else { - for i := range parser.tag_directives { - if bytes.Equal(parser.tag_directives[i].handle, tag_handle) { - tag = append([]byte(nil), parser.tag_directives[i].prefix...) - tag = append(tag, tag_suffix...) - break - } - } - if len(tag) == 0 { - yaml_parser_set_parser_error_context(parser, - "while parsing a node", start_mark, - "found undefined tag handle", tag_mark) - return false - } - } - } - - implicit := len(tag) == 0 - if indentless_sequence && token.typ == yaml_BLOCK_ENTRY_TOKEN { - end_mark = token.end_mark - parser.state = yaml_PARSE_INDENTLESS_SEQUENCE_ENTRY_STATE - *event = yaml_event_t{ - typ: yaml_SEQUENCE_START_EVENT, - start_mark: start_mark, - end_mark: end_mark, - anchor: anchor, - tag: tag, - implicit: implicit, - style: yaml_style_t(yaml_BLOCK_SEQUENCE_STYLE), - } - return true - } - if token.typ == yaml_SCALAR_TOKEN { - var plain_implicit, quoted_implicit bool - end_mark = token.end_mark - if (len(tag) == 0 && token.style == yaml_PLAIN_SCALAR_STYLE) || (len(tag) == 1 && tag[0] == '!') { - plain_implicit = true - } else if len(tag) == 0 { - quoted_implicit = true - } - parser.state = parser.states[len(parser.states)-1] - parser.states = parser.states[:len(parser.states)-1] - - *event = yaml_event_t{ - typ: yaml_SCALAR_EVENT, - start_mark: start_mark, - end_mark: end_mark, - anchor: anchor, - tag: tag, - value: token.value, - implicit: plain_implicit, - quoted_implicit: quoted_implicit, - style: yaml_style_t(token.style), - } - yaml_parser_set_event_comments(parser, event) - skip_token(parser) - return true - } - if token.typ == yaml_FLOW_SEQUENCE_START_TOKEN { - // [Go] Some of the events below can be merged as they differ only on style. - end_mark = token.end_mark - parser.state = yaml_PARSE_FLOW_SEQUENCE_FIRST_ENTRY_STATE - *event = yaml_event_t{ - typ: yaml_SEQUENCE_START_EVENT, - start_mark: start_mark, - end_mark: end_mark, - anchor: anchor, - tag: tag, - implicit: implicit, - style: yaml_style_t(yaml_FLOW_SEQUENCE_STYLE), - } - yaml_parser_set_event_comments(parser, event) - return true - } - if token.typ == yaml_FLOW_MAPPING_START_TOKEN { - end_mark = token.end_mark - parser.state = yaml_PARSE_FLOW_MAPPING_FIRST_KEY_STATE - *event = yaml_event_t{ - typ: yaml_MAPPING_START_EVENT, - start_mark: start_mark, - end_mark: end_mark, - anchor: anchor, - tag: tag, - implicit: implicit, - style: yaml_style_t(yaml_FLOW_MAPPING_STYLE), - } - yaml_parser_set_event_comments(parser, event) - return true - } - if block && token.typ == yaml_BLOCK_SEQUENCE_START_TOKEN { - end_mark = token.end_mark - parser.state = yaml_PARSE_BLOCK_SEQUENCE_FIRST_ENTRY_STATE - *event = yaml_event_t{ - typ: yaml_SEQUENCE_START_EVENT, - start_mark: start_mark, - end_mark: end_mark, - anchor: anchor, - tag: tag, - implicit: implicit, - style: yaml_style_t(yaml_BLOCK_SEQUENCE_STYLE), - } - return true - } - if block && token.typ == yaml_BLOCK_MAPPING_START_TOKEN { - end_mark = token.end_mark - parser.state = yaml_PARSE_BLOCK_MAPPING_FIRST_KEY_STATE - *event = yaml_event_t{ - typ: yaml_MAPPING_START_EVENT, - start_mark: start_mark, - end_mark: end_mark, - anchor: anchor, - tag: tag, - implicit: implicit, - style: yaml_style_t(yaml_BLOCK_MAPPING_STYLE), - } - return true - } - if len(anchor) > 0 || len(tag) > 0 { - parser.state = parser.states[len(parser.states)-1] - parser.states = parser.states[:len(parser.states)-1] - - *event = yaml_event_t{ - typ: yaml_SCALAR_EVENT, - start_mark: start_mark, - end_mark: end_mark, - anchor: anchor, - tag: tag, - implicit: implicit, - quoted_implicit: false, - style: yaml_style_t(yaml_PLAIN_SCALAR_STYLE), - } - return true - } - - context := "while parsing a flow node" - if block { - context = "while parsing a block node" - } - yaml_parser_set_parser_error_context(parser, context, start_mark, - "did not find expected node content", token.start_mark) - return false -} - -// Parse the productions: -// block_sequence ::= BLOCK-SEQUENCE-START (BLOCK-ENTRY block_node?)* BLOCK-END -// ******************** *********** * ********* -// -func yaml_parser_parse_block_sequence_entry(parser *yaml_parser_t, event *yaml_event_t, first bool) bool { - if first { - token := peek_token(parser) - parser.marks = append(parser.marks, token.start_mark) - skip_token(parser) - } - - token := peek_token(parser) - if token == nil { - return false - } - - if token.typ == yaml_BLOCK_ENTRY_TOKEN { - mark := token.end_mark - skip_token(parser) - token = peek_token(parser) - if token == nil { - return false - } - if token.typ != yaml_BLOCK_ENTRY_TOKEN && token.typ != yaml_BLOCK_END_TOKEN { - parser.states = append(parser.states, yaml_PARSE_BLOCK_SEQUENCE_ENTRY_STATE) - return yaml_parser_parse_node(parser, event, true, false) - } else { - parser.state = yaml_PARSE_BLOCK_SEQUENCE_ENTRY_STATE - return yaml_parser_process_empty_scalar(parser, event, mark) - } - } - if token.typ == yaml_BLOCK_END_TOKEN { - parser.state = parser.states[len(parser.states)-1] - parser.states = parser.states[:len(parser.states)-1] - parser.marks = parser.marks[:len(parser.marks)-1] - - *event = yaml_event_t{ - typ: yaml_SEQUENCE_END_EVENT, - start_mark: token.start_mark, - end_mark: token.end_mark, - } - - skip_token(parser) - return true - } - - context_mark := parser.marks[len(parser.marks)-1] - parser.marks = parser.marks[:len(parser.marks)-1] - return yaml_parser_set_parser_error_context(parser, - "while parsing a block collection", context_mark, - "did not find expected '-' indicator", token.start_mark) -} - -// Parse the productions: -// indentless_sequence ::= (BLOCK-ENTRY block_node?)+ -// *********** * -func yaml_parser_parse_indentless_sequence_entry(parser *yaml_parser_t, event *yaml_event_t) bool { - token := peek_token(parser) - if token == nil { - return false - } - - if token.typ == yaml_BLOCK_ENTRY_TOKEN { - mark := token.end_mark - skip_token(parser) - token = peek_token(parser) - if token == nil { - return false - } - if token.typ != yaml_BLOCK_ENTRY_TOKEN && - token.typ != yaml_KEY_TOKEN && - token.typ != yaml_VALUE_TOKEN && - token.typ != yaml_BLOCK_END_TOKEN { - parser.states = append(parser.states, yaml_PARSE_INDENTLESS_SEQUENCE_ENTRY_STATE) - return yaml_parser_parse_node(parser, event, true, false) - } - parser.state = yaml_PARSE_INDENTLESS_SEQUENCE_ENTRY_STATE - return yaml_parser_process_empty_scalar(parser, event, mark) - } - parser.state = parser.states[len(parser.states)-1] - parser.states = parser.states[:len(parser.states)-1] - - *event = yaml_event_t{ - typ: yaml_SEQUENCE_END_EVENT, - start_mark: token.start_mark, - end_mark: token.start_mark, // [Go] Shouldn't this be token.end_mark? - } - return true -} - -// Parse the productions: -// block_mapping ::= BLOCK-MAPPING_START -// ******************* -// ((KEY block_node_or_indentless_sequence?)? -// *** * -// (VALUE block_node_or_indentless_sequence?)?)* -// -// BLOCK-END -// ********* -// -func yaml_parser_parse_block_mapping_key(parser *yaml_parser_t, event *yaml_event_t, first bool) bool { - if first { - token := peek_token(parser) - parser.marks = append(parser.marks, token.start_mark) - skip_token(parser) - } - - token := peek_token(parser) - if token == nil { - return false - } - - if token.typ == yaml_KEY_TOKEN { - mark := token.end_mark - skip_token(parser) - token = peek_token(parser) - if token == nil { - return false - } - if token.typ != yaml_KEY_TOKEN && - token.typ != yaml_VALUE_TOKEN && - token.typ != yaml_BLOCK_END_TOKEN { - parser.states = append(parser.states, yaml_PARSE_BLOCK_MAPPING_VALUE_STATE) - return yaml_parser_parse_node(parser, event, true, true) - } else { - parser.state = yaml_PARSE_BLOCK_MAPPING_VALUE_STATE - return yaml_parser_process_empty_scalar(parser, event, mark) - } - } else if token.typ == yaml_BLOCK_END_TOKEN { - parser.state = parser.states[len(parser.states)-1] - parser.states = parser.states[:len(parser.states)-1] - parser.marks = parser.marks[:len(parser.marks)-1] - *event = yaml_event_t{ - typ: yaml_MAPPING_END_EVENT, - start_mark: token.start_mark, - end_mark: token.end_mark, - } - skip_token(parser) - return true - } - - context_mark := parser.marks[len(parser.marks)-1] - parser.marks = parser.marks[:len(parser.marks)-1] - return yaml_parser_set_parser_error_context(parser, - "while parsing a block mapping", context_mark, - "did not find expected key", token.start_mark) -} - -// Parse the productions: -// block_mapping ::= BLOCK-MAPPING_START -// -// ((KEY block_node_or_indentless_sequence?)? -// -// (VALUE block_node_or_indentless_sequence?)?)* -// ***** * -// BLOCK-END -// -// -func yaml_parser_parse_block_mapping_value(parser *yaml_parser_t, event *yaml_event_t) bool { - token := peek_token(parser) - if token == nil { - return false - } - if token.typ == yaml_VALUE_TOKEN { - mark := token.end_mark - skip_token(parser) - token = peek_token(parser) - if token == nil { - return false - } - if token.typ != yaml_KEY_TOKEN && - token.typ != yaml_VALUE_TOKEN && - token.typ != yaml_BLOCK_END_TOKEN { - parser.states = append(parser.states, yaml_PARSE_BLOCK_MAPPING_KEY_STATE) - return yaml_parser_parse_node(parser, event, true, true) - } - parser.state = yaml_PARSE_BLOCK_MAPPING_KEY_STATE - return yaml_parser_process_empty_scalar(parser, event, mark) - } - parser.state = yaml_PARSE_BLOCK_MAPPING_KEY_STATE - return yaml_parser_process_empty_scalar(parser, event, token.start_mark) -} - -// Parse the productions: -// flow_sequence ::= FLOW-SEQUENCE-START -// ******************* -// (flow_sequence_entry FLOW-ENTRY)* -// * ********** -// flow_sequence_entry? -// * -// FLOW-SEQUENCE-END -// ***************** -// flow_sequence_entry ::= flow_node | KEY flow_node? (VALUE flow_node?)? -// * -// -func yaml_parser_parse_flow_sequence_entry(parser *yaml_parser_t, event *yaml_event_t, first bool) bool { - if first { - token := peek_token(parser) - parser.marks = append(parser.marks, token.start_mark) - skip_token(parser) - } - token := peek_token(parser) - if token == nil { - return false - } - if token.typ != yaml_FLOW_SEQUENCE_END_TOKEN { - if !first { - if token.typ == yaml_FLOW_ENTRY_TOKEN { - skip_token(parser) - token = peek_token(parser) - if token == nil { - return false - } - } else { - context_mark := parser.marks[len(parser.marks)-1] - parser.marks = parser.marks[:len(parser.marks)-1] - return yaml_parser_set_parser_error_context(parser, - "while parsing a flow sequence", context_mark, - "did not find expected ',' or ']'", token.start_mark) - } - } - - if token.typ == yaml_KEY_TOKEN { - parser.state = yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_KEY_STATE - *event = yaml_event_t{ - typ: yaml_MAPPING_START_EVENT, - start_mark: token.start_mark, - end_mark: token.end_mark, - implicit: true, - style: yaml_style_t(yaml_FLOW_MAPPING_STYLE), - } - skip_token(parser) - return true - } else if token.typ != yaml_FLOW_SEQUENCE_END_TOKEN { - parser.states = append(parser.states, yaml_PARSE_FLOW_SEQUENCE_ENTRY_STATE) - return yaml_parser_parse_node(parser, event, false, false) - } - } - - parser.state = parser.states[len(parser.states)-1] - parser.states = parser.states[:len(parser.states)-1] - parser.marks = parser.marks[:len(parser.marks)-1] - - *event = yaml_event_t{ - typ: yaml_SEQUENCE_END_EVENT, - start_mark: token.start_mark, - end_mark: token.end_mark, - } - yaml_parser_set_event_comments(parser, event) - - skip_token(parser) - return true -} - -// -// Parse the productions: -// flow_sequence_entry ::= flow_node | KEY flow_node? (VALUE flow_node?)? -// *** * -// -func yaml_parser_parse_flow_sequence_entry_mapping_key(parser *yaml_parser_t, event *yaml_event_t) bool { - token := peek_token(parser) - if token == nil { - return false - } - if token.typ != yaml_VALUE_TOKEN && - token.typ != yaml_FLOW_ENTRY_TOKEN && - token.typ != yaml_FLOW_SEQUENCE_END_TOKEN { - parser.states = append(parser.states, yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_VALUE_STATE) - return yaml_parser_parse_node(parser, event, false, false) - } - mark := token.end_mark - skip_token(parser) - parser.state = yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_VALUE_STATE - return yaml_parser_process_empty_scalar(parser, event, mark) -} - -// Parse the productions: -// flow_sequence_entry ::= flow_node | KEY flow_node? (VALUE flow_node?)? -// ***** * -// -func yaml_parser_parse_flow_sequence_entry_mapping_value(parser *yaml_parser_t, event *yaml_event_t) bool { - token := peek_token(parser) - if token == nil { - return false - } - if token.typ == yaml_VALUE_TOKEN { - skip_token(parser) - token := peek_token(parser) - if token == nil { - return false - } - if token.typ != yaml_FLOW_ENTRY_TOKEN && token.typ != yaml_FLOW_SEQUENCE_END_TOKEN { - parser.states = append(parser.states, yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_END_STATE) - return yaml_parser_parse_node(parser, event, false, false) - } - } - parser.state = yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_END_STATE - return yaml_parser_process_empty_scalar(parser, event, token.start_mark) -} - -// Parse the productions: -// flow_sequence_entry ::= flow_node | KEY flow_node? (VALUE flow_node?)? -// * -// -func yaml_parser_parse_flow_sequence_entry_mapping_end(parser *yaml_parser_t, event *yaml_event_t) bool { - token := peek_token(parser) - if token == nil { - return false - } - parser.state = yaml_PARSE_FLOW_SEQUENCE_ENTRY_STATE - *event = yaml_event_t{ - typ: yaml_MAPPING_END_EVENT, - start_mark: token.start_mark, - end_mark: token.start_mark, // [Go] Shouldn't this be end_mark? - } - return true -} - -// Parse the productions: -// flow_mapping ::= FLOW-MAPPING-START -// ****************** -// (flow_mapping_entry FLOW-ENTRY)* -// * ********** -// flow_mapping_entry? -// ****************** -// FLOW-MAPPING-END -// **************** -// flow_mapping_entry ::= flow_node | KEY flow_node? (VALUE flow_node?)? -// * *** * -// -func yaml_parser_parse_flow_mapping_key(parser *yaml_parser_t, event *yaml_event_t, first bool) bool { - if first { - token := peek_token(parser) - parser.marks = append(parser.marks, token.start_mark) - skip_token(parser) - } - - token := peek_token(parser) - if token == nil { - return false - } - - if token.typ != yaml_FLOW_MAPPING_END_TOKEN { - if !first { - if token.typ == yaml_FLOW_ENTRY_TOKEN { - skip_token(parser) - token = peek_token(parser) - if token == nil { - return false - } - } else { - context_mark := parser.marks[len(parser.marks)-1] - parser.marks = parser.marks[:len(parser.marks)-1] - return yaml_parser_set_parser_error_context(parser, - "while parsing a flow mapping", context_mark, - "did not find expected ',' or '}'", token.start_mark) - } - } - - if token.typ == yaml_KEY_TOKEN { - skip_token(parser) - token = peek_token(parser) - if token == nil { - return false - } - if token.typ != yaml_VALUE_TOKEN && - token.typ != yaml_FLOW_ENTRY_TOKEN && - token.typ != yaml_FLOW_MAPPING_END_TOKEN { - parser.states = append(parser.states, yaml_PARSE_FLOW_MAPPING_VALUE_STATE) - return yaml_parser_parse_node(parser, event, false, false) - } else { - parser.state = yaml_PARSE_FLOW_MAPPING_VALUE_STATE - return yaml_parser_process_empty_scalar(parser, event, token.start_mark) - } - } else if token.typ != yaml_FLOW_MAPPING_END_TOKEN { - parser.states = append(parser.states, yaml_PARSE_FLOW_MAPPING_EMPTY_VALUE_STATE) - return yaml_parser_parse_node(parser, event, false, false) - } - } - - parser.state = parser.states[len(parser.states)-1] - parser.states = parser.states[:len(parser.states)-1] - parser.marks = parser.marks[:len(parser.marks)-1] - *event = yaml_event_t{ - typ: yaml_MAPPING_END_EVENT, - start_mark: token.start_mark, - end_mark: token.end_mark, - } - yaml_parser_set_event_comments(parser, event) - skip_token(parser) - return true -} - -// Parse the productions: -// flow_mapping_entry ::= flow_node | KEY flow_node? (VALUE flow_node?)? -// * ***** * -// -func yaml_parser_parse_flow_mapping_value(parser *yaml_parser_t, event *yaml_event_t, empty bool) bool { - token := peek_token(parser) - if token == nil { - return false - } - if empty { - parser.state = yaml_PARSE_FLOW_MAPPING_KEY_STATE - return yaml_parser_process_empty_scalar(parser, event, token.start_mark) - } - if token.typ == yaml_VALUE_TOKEN { - skip_token(parser) - token = peek_token(parser) - if token == nil { - return false - } - if token.typ != yaml_FLOW_ENTRY_TOKEN && token.typ != yaml_FLOW_MAPPING_END_TOKEN { - parser.states = append(parser.states, yaml_PARSE_FLOW_MAPPING_KEY_STATE) - return yaml_parser_parse_node(parser, event, false, false) - } - } - parser.state = yaml_PARSE_FLOW_MAPPING_KEY_STATE - return yaml_parser_process_empty_scalar(parser, event, token.start_mark) -} - -// Generate an empty scalar event. -func yaml_parser_process_empty_scalar(parser *yaml_parser_t, event *yaml_event_t, mark yaml_mark_t) bool { - *event = yaml_event_t{ - typ: yaml_SCALAR_EVENT, - start_mark: mark, - end_mark: mark, - value: nil, // Empty - implicit: true, - style: yaml_style_t(yaml_PLAIN_SCALAR_STYLE), - } - return true -} - -var default_tag_directives = []yaml_tag_directive_t{ - {[]byte("!"), []byte("!")}, - {[]byte("!!"), []byte("tag:yaml.org,2002:")}, -} - -// Parse directives. -func yaml_parser_process_directives(parser *yaml_parser_t, - version_directive_ref **yaml_version_directive_t, - tag_directives_ref *[]yaml_tag_directive_t) bool { - - var version_directive *yaml_version_directive_t - var tag_directives []yaml_tag_directive_t - - token := peek_token(parser) - if token == nil { - return false - } - - for token.typ == yaml_VERSION_DIRECTIVE_TOKEN || token.typ == yaml_TAG_DIRECTIVE_TOKEN { - if token.typ == yaml_VERSION_DIRECTIVE_TOKEN { - if version_directive != nil { - yaml_parser_set_parser_error(parser, - "found duplicate %YAML directive", token.start_mark) - return false - } - if token.major != 1 || token.minor != 1 { - yaml_parser_set_parser_error(parser, - "found incompatible YAML document", token.start_mark) - return false - } - version_directive = &yaml_version_directive_t{ - major: token.major, - minor: token.minor, - } - } else if token.typ == yaml_TAG_DIRECTIVE_TOKEN { - value := yaml_tag_directive_t{ - handle: token.value, - prefix: token.prefix, - } - if !yaml_parser_append_tag_directive(parser, value, false, token.start_mark) { - return false - } - tag_directives = append(tag_directives, value) - } - - skip_token(parser) - token = peek_token(parser) - if token == nil { - return false - } - } - - for i := range default_tag_directives { - if !yaml_parser_append_tag_directive(parser, default_tag_directives[i], true, token.start_mark) { - return false - } - } - - if version_directive_ref != nil { - *version_directive_ref = version_directive - } - if tag_directives_ref != nil { - *tag_directives_ref = tag_directives - } - return true -} - -// Append a tag directive to the directives stack. -func yaml_parser_append_tag_directive(parser *yaml_parser_t, value yaml_tag_directive_t, allow_duplicates bool, mark yaml_mark_t) bool { - for i := range parser.tag_directives { - if bytes.Equal(value.handle, parser.tag_directives[i].handle) { - if allow_duplicates { - return true - } - return yaml_parser_set_parser_error(parser, "found duplicate %TAG directive", mark) - } - } - - // [Go] I suspect the copy is unnecessary. This was likely done - // because there was no way to track ownership of the data. - value_copy := yaml_tag_directive_t{ - handle: make([]byte, len(value.handle)), - prefix: make([]byte, len(value.prefix)), - } - copy(value_copy.handle, value.handle) - copy(value_copy.prefix, value.prefix) - parser.tag_directives = append(parser.tag_directives, value_copy) - return true -} diff --git a/vendor/gopkg.in/yaml.v3/readerc.go b/vendor/gopkg.in/yaml.v3/readerc.go deleted file mode 100644 index b7de0a89..00000000 --- a/vendor/gopkg.in/yaml.v3/readerc.go +++ /dev/null @@ -1,434 +0,0 @@ -// -// Copyright (c) 2011-2019 Canonical Ltd -// Copyright (c) 2006-2010 Kirill Simonov -// -// 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. - -package yaml - -import ( - "io" -) - -// Set the reader error and return 0. -func yaml_parser_set_reader_error(parser *yaml_parser_t, problem string, offset int, value int) bool { - parser.error = yaml_READER_ERROR - parser.problem = problem - parser.problem_offset = offset - parser.problem_value = value - return false -} - -// Byte order marks. -const ( - bom_UTF8 = "\xef\xbb\xbf" - bom_UTF16LE = "\xff\xfe" - bom_UTF16BE = "\xfe\xff" -) - -// Determine the input stream encoding by checking the BOM symbol. If no BOM is -// found, the UTF-8 encoding is assumed. Return 1 on success, 0 on failure. -func yaml_parser_determine_encoding(parser *yaml_parser_t) bool { - // Ensure that we had enough bytes in the raw buffer. - for !parser.eof && len(parser.raw_buffer)-parser.raw_buffer_pos < 3 { - if !yaml_parser_update_raw_buffer(parser) { - return false - } - } - - // Determine the encoding. - buf := parser.raw_buffer - pos := parser.raw_buffer_pos - avail := len(buf) - pos - if avail >= 2 && buf[pos] == bom_UTF16LE[0] && buf[pos+1] == bom_UTF16LE[1] { - parser.encoding = yaml_UTF16LE_ENCODING - parser.raw_buffer_pos += 2 - parser.offset += 2 - } else if avail >= 2 && buf[pos] == bom_UTF16BE[0] && buf[pos+1] == bom_UTF16BE[1] { - parser.encoding = yaml_UTF16BE_ENCODING - parser.raw_buffer_pos += 2 - parser.offset += 2 - } else if avail >= 3 && buf[pos] == bom_UTF8[0] && buf[pos+1] == bom_UTF8[1] && buf[pos+2] == bom_UTF8[2] { - parser.encoding = yaml_UTF8_ENCODING - parser.raw_buffer_pos += 3 - parser.offset += 3 - } else { - parser.encoding = yaml_UTF8_ENCODING - } - return true -} - -// Update the raw buffer. -func yaml_parser_update_raw_buffer(parser *yaml_parser_t) bool { - size_read := 0 - - // Return if the raw buffer is full. - if parser.raw_buffer_pos == 0 && len(parser.raw_buffer) == cap(parser.raw_buffer) { - return true - } - - // Return on EOF. - if parser.eof { - return true - } - - // Move the remaining bytes in the raw buffer to the beginning. - if parser.raw_buffer_pos > 0 && parser.raw_buffer_pos < len(parser.raw_buffer) { - copy(parser.raw_buffer, parser.raw_buffer[parser.raw_buffer_pos:]) - } - parser.raw_buffer = parser.raw_buffer[:len(parser.raw_buffer)-parser.raw_buffer_pos] - parser.raw_buffer_pos = 0 - - // Call the read handler to fill the buffer. - size_read, err := parser.read_handler(parser, parser.raw_buffer[len(parser.raw_buffer):cap(parser.raw_buffer)]) - parser.raw_buffer = parser.raw_buffer[:len(parser.raw_buffer)+size_read] - if err == io.EOF { - parser.eof = true - } else if err != nil { - return yaml_parser_set_reader_error(parser, "input error: "+err.Error(), parser.offset, -1) - } - return true -} - -// Ensure that the buffer contains at least `length` characters. -// Return true on success, false on failure. -// -// The length is supposed to be significantly less that the buffer size. -func yaml_parser_update_buffer(parser *yaml_parser_t, length int) bool { - if parser.read_handler == nil { - panic("read handler must be set") - } - - // [Go] This function was changed to guarantee the requested length size at EOF. - // The fact we need to do this is pretty awful, but the description above implies - // for that to be the case, and there are tests - - // If the EOF flag is set and the raw buffer is empty, do nothing. - if parser.eof && parser.raw_buffer_pos == len(parser.raw_buffer) { - // [Go] ACTUALLY! Read the documentation of this function above. - // This is just broken. To return true, we need to have the - // given length in the buffer. Not doing that means every single - // check that calls this function to make sure the buffer has a - // given length is Go) panicking; or C) accessing invalid memory. - //return true - } - - // Return if the buffer contains enough characters. - if parser.unread >= length { - return true - } - - // Determine the input encoding if it is not known yet. - if parser.encoding == yaml_ANY_ENCODING { - if !yaml_parser_determine_encoding(parser) { - return false - } - } - - // Move the unread characters to the beginning of the buffer. - buffer_len := len(parser.buffer) - if parser.buffer_pos > 0 && parser.buffer_pos < buffer_len { - copy(parser.buffer, parser.buffer[parser.buffer_pos:]) - buffer_len -= parser.buffer_pos - parser.buffer_pos = 0 - } else if parser.buffer_pos == buffer_len { - buffer_len = 0 - parser.buffer_pos = 0 - } - - // Open the whole buffer for writing, and cut it before returning. - parser.buffer = parser.buffer[:cap(parser.buffer)] - - // Fill the buffer until it has enough characters. - first := true - for parser.unread < length { - - // Fill the raw buffer if necessary. - if !first || parser.raw_buffer_pos == len(parser.raw_buffer) { - if !yaml_parser_update_raw_buffer(parser) { - parser.buffer = parser.buffer[:buffer_len] - return false - } - } - first = false - - // Decode the raw buffer. - inner: - for parser.raw_buffer_pos != len(parser.raw_buffer) { - var value rune - var width int - - raw_unread := len(parser.raw_buffer) - parser.raw_buffer_pos - - // Decode the next character. - switch parser.encoding { - case yaml_UTF8_ENCODING: - // Decode a UTF-8 character. Check RFC 3629 - // (http://www.ietf.org/rfc/rfc3629.txt) for more details. - // - // The following table (taken from the RFC) is used for - // decoding. - // - // Char. number range | UTF-8 octet sequence - // (hexadecimal) | (binary) - // --------------------+------------------------------------ - // 0000 0000-0000 007F | 0xxxxxxx - // 0000 0080-0000 07FF | 110xxxxx 10xxxxxx - // 0000 0800-0000 FFFF | 1110xxxx 10xxxxxx 10xxxxxx - // 0001 0000-0010 FFFF | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx - // - // Additionally, the characters in the range 0xD800-0xDFFF - // are prohibited as they are reserved for use with UTF-16 - // surrogate pairs. - - // Determine the length of the UTF-8 sequence. - octet := parser.raw_buffer[parser.raw_buffer_pos] - switch { - case octet&0x80 == 0x00: - width = 1 - case octet&0xE0 == 0xC0: - width = 2 - case octet&0xF0 == 0xE0: - width = 3 - case octet&0xF8 == 0xF0: - width = 4 - default: - // The leading octet is invalid. - return yaml_parser_set_reader_error(parser, - "invalid leading UTF-8 octet", - parser.offset, int(octet)) - } - - // Check if the raw buffer contains an incomplete character. - if width > raw_unread { - if parser.eof { - return yaml_parser_set_reader_error(parser, - "incomplete UTF-8 octet sequence", - parser.offset, -1) - } - break inner - } - - // Decode the leading octet. - switch { - case octet&0x80 == 0x00: - value = rune(octet & 0x7F) - case octet&0xE0 == 0xC0: - value = rune(octet & 0x1F) - case octet&0xF0 == 0xE0: - value = rune(octet & 0x0F) - case octet&0xF8 == 0xF0: - value = rune(octet & 0x07) - default: - value = 0 - } - - // Check and decode the trailing octets. - for k := 1; k < width; k++ { - octet = parser.raw_buffer[parser.raw_buffer_pos+k] - - // Check if the octet is valid. - if (octet & 0xC0) != 0x80 { - return yaml_parser_set_reader_error(parser, - "invalid trailing UTF-8 octet", - parser.offset+k, int(octet)) - } - - // Decode the octet. - value = (value << 6) + rune(octet&0x3F) - } - - // Check the length of the sequence against the value. - switch { - case width == 1: - case width == 2 && value >= 0x80: - case width == 3 && value >= 0x800: - case width == 4 && value >= 0x10000: - default: - return yaml_parser_set_reader_error(parser, - "invalid length of a UTF-8 sequence", - parser.offset, -1) - } - - // Check the range of the value. - if value >= 0xD800 && value <= 0xDFFF || value > 0x10FFFF { - return yaml_parser_set_reader_error(parser, - "invalid Unicode character", - parser.offset, int(value)) - } - - case yaml_UTF16LE_ENCODING, yaml_UTF16BE_ENCODING: - var low, high int - if parser.encoding == yaml_UTF16LE_ENCODING { - low, high = 0, 1 - } else { - low, high = 1, 0 - } - - // The UTF-16 encoding is not as simple as one might - // naively think. Check RFC 2781 - // (http://www.ietf.org/rfc/rfc2781.txt). - // - // Normally, two subsequent bytes describe a Unicode - // character. However a special technique (called a - // surrogate pair) is used for specifying character - // values larger than 0xFFFF. - // - // A surrogate pair consists of two pseudo-characters: - // high surrogate area (0xD800-0xDBFF) - // low surrogate area (0xDC00-0xDFFF) - // - // The following formulas are used for decoding - // and encoding characters using surrogate pairs: - // - // U = U' + 0x10000 (0x01 00 00 <= U <= 0x10 FF FF) - // U' = yyyyyyyyyyxxxxxxxxxx (0 <= U' <= 0x0F FF FF) - // W1 = 110110yyyyyyyyyy - // W2 = 110111xxxxxxxxxx - // - // where U is the character value, W1 is the high surrogate - // area, W2 is the low surrogate area. - - // Check for incomplete UTF-16 character. - if raw_unread < 2 { - if parser.eof { - return yaml_parser_set_reader_error(parser, - "incomplete UTF-16 character", - parser.offset, -1) - } - break inner - } - - // Get the character. - value = rune(parser.raw_buffer[parser.raw_buffer_pos+low]) + - (rune(parser.raw_buffer[parser.raw_buffer_pos+high]) << 8) - - // Check for unexpected low surrogate area. - if value&0xFC00 == 0xDC00 { - return yaml_parser_set_reader_error(parser, - "unexpected low surrogate area", - parser.offset, int(value)) - } - - // Check for a high surrogate area. - if value&0xFC00 == 0xD800 { - width = 4 - - // Check for incomplete surrogate pair. - if raw_unread < 4 { - if parser.eof { - return yaml_parser_set_reader_error(parser, - "incomplete UTF-16 surrogate pair", - parser.offset, -1) - } - break inner - } - - // Get the next character. - value2 := rune(parser.raw_buffer[parser.raw_buffer_pos+low+2]) + - (rune(parser.raw_buffer[parser.raw_buffer_pos+high+2]) << 8) - - // Check for a low surrogate area. - if value2&0xFC00 != 0xDC00 { - return yaml_parser_set_reader_error(parser, - "expected low surrogate area", - parser.offset+2, int(value2)) - } - - // Generate the value of the surrogate pair. - value = 0x10000 + ((value & 0x3FF) << 10) + (value2 & 0x3FF) - } else { - width = 2 - } - - default: - panic("impossible") - } - - // Check if the character is in the allowed range: - // #x9 | #xA | #xD | [#x20-#x7E] (8 bit) - // | #x85 | [#xA0-#xD7FF] | [#xE000-#xFFFD] (16 bit) - // | [#x10000-#x10FFFF] (32 bit) - switch { - case value == 0x09: - case value == 0x0A: - case value == 0x0D: - case value >= 0x20 && value <= 0x7E: - case value == 0x85: - case value >= 0xA0 && value <= 0xD7FF: - case value >= 0xE000 && value <= 0xFFFD: - case value >= 0x10000 && value <= 0x10FFFF: - default: - return yaml_parser_set_reader_error(parser, - "control characters are not allowed", - parser.offset, int(value)) - } - - // Move the raw pointers. - parser.raw_buffer_pos += width - parser.offset += width - - // Finally put the character into the buffer. - if value <= 0x7F { - // 0000 0000-0000 007F . 0xxxxxxx - parser.buffer[buffer_len+0] = byte(value) - buffer_len += 1 - } else if value <= 0x7FF { - // 0000 0080-0000 07FF . 110xxxxx 10xxxxxx - parser.buffer[buffer_len+0] = byte(0xC0 + (value >> 6)) - parser.buffer[buffer_len+1] = byte(0x80 + (value & 0x3F)) - buffer_len += 2 - } else if value <= 0xFFFF { - // 0000 0800-0000 FFFF . 1110xxxx 10xxxxxx 10xxxxxx - parser.buffer[buffer_len+0] = byte(0xE0 + (value >> 12)) - parser.buffer[buffer_len+1] = byte(0x80 + ((value >> 6) & 0x3F)) - parser.buffer[buffer_len+2] = byte(0x80 + (value & 0x3F)) - buffer_len += 3 - } else { - // 0001 0000-0010 FFFF . 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx - parser.buffer[buffer_len+0] = byte(0xF0 + (value >> 18)) - parser.buffer[buffer_len+1] = byte(0x80 + ((value >> 12) & 0x3F)) - parser.buffer[buffer_len+2] = byte(0x80 + ((value >> 6) & 0x3F)) - parser.buffer[buffer_len+3] = byte(0x80 + (value & 0x3F)) - buffer_len += 4 - } - - parser.unread++ - } - - // On EOF, put NUL into the buffer and return. - if parser.eof { - parser.buffer[buffer_len] = 0 - buffer_len++ - parser.unread++ - break - } - } - // [Go] Read the documentation of this function above. To return true, - // we need to have the given length in the buffer. Not doing that means - // every single check that calls this function to make sure the buffer - // has a given length is Go) panicking; or C) accessing invalid memory. - // This happens here due to the EOF above breaking early. - for buffer_len < length { - parser.buffer[buffer_len] = 0 - buffer_len++ - } - parser.buffer = parser.buffer[:buffer_len] - return true -} diff --git a/vendor/gopkg.in/yaml.v3/resolve.go b/vendor/gopkg.in/yaml.v3/resolve.go deleted file mode 100644 index 64ae8880..00000000 --- a/vendor/gopkg.in/yaml.v3/resolve.go +++ /dev/null @@ -1,326 +0,0 @@ -// -// Copyright (c) 2011-2019 Canonical Ltd -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package yaml - -import ( - "encoding/base64" - "math" - "regexp" - "strconv" - "strings" - "time" -) - -type resolveMapItem struct { - value interface{} - tag string -} - -var resolveTable = make([]byte, 256) -var resolveMap = make(map[string]resolveMapItem) - -func init() { - t := resolveTable - t[int('+')] = 'S' // Sign - t[int('-')] = 'S' - for _, c := range "0123456789" { - t[int(c)] = 'D' // Digit - } - for _, c := range "yYnNtTfFoO~" { - t[int(c)] = 'M' // In map - } - t[int('.')] = '.' // Float (potentially in map) - - var resolveMapList = []struct { - v interface{} - tag string - l []string - }{ - {true, boolTag, []string{"true", "True", "TRUE"}}, - {false, boolTag, []string{"false", "False", "FALSE"}}, - {nil, nullTag, []string{"", "~", "null", "Null", "NULL"}}, - {math.NaN(), floatTag, []string{".nan", ".NaN", ".NAN"}}, - {math.Inf(+1), floatTag, []string{".inf", ".Inf", ".INF"}}, - {math.Inf(+1), floatTag, []string{"+.inf", "+.Inf", "+.INF"}}, - {math.Inf(-1), floatTag, []string{"-.inf", "-.Inf", "-.INF"}}, - {"<<", mergeTag, []string{"<<"}}, - } - - m := resolveMap - for _, item := range resolveMapList { - for _, s := range item.l { - m[s] = resolveMapItem{item.v, item.tag} - } - } -} - -const ( - nullTag = "!!null" - boolTag = "!!bool" - strTag = "!!str" - intTag = "!!int" - floatTag = "!!float" - timestampTag = "!!timestamp" - seqTag = "!!seq" - mapTag = "!!map" - binaryTag = "!!binary" - mergeTag = "!!merge" -) - -var longTags = make(map[string]string) -var shortTags = make(map[string]string) - -func init() { - for _, stag := range []string{nullTag, boolTag, strTag, intTag, floatTag, timestampTag, seqTag, mapTag, binaryTag, mergeTag} { - ltag := longTag(stag) - longTags[stag] = ltag - shortTags[ltag] = stag - } -} - -const longTagPrefix = "tag:yaml.org,2002:" - -func shortTag(tag string) string { - if strings.HasPrefix(tag, longTagPrefix) { - if stag, ok := shortTags[tag]; ok { - return stag - } - return "!!" + tag[len(longTagPrefix):] - } - return tag -} - -func longTag(tag string) string { - if strings.HasPrefix(tag, "!!") { - if ltag, ok := longTags[tag]; ok { - return ltag - } - return longTagPrefix + tag[2:] - } - return tag -} - -func resolvableTag(tag string) bool { - switch tag { - case "", strTag, boolTag, intTag, floatTag, nullTag, timestampTag: - return true - } - return false -} - -var yamlStyleFloat = regexp.MustCompile(`^[-+]?(\.[0-9]+|[0-9]+(\.[0-9]*)?)([eE][-+]?[0-9]+)?$`) - -func resolve(tag string, in string) (rtag string, out interface{}) { - tag = shortTag(tag) - if !resolvableTag(tag) { - return tag, in - } - - defer func() { - switch tag { - case "", rtag, strTag, binaryTag: - return - case floatTag: - if rtag == intTag { - switch v := out.(type) { - case int64: - rtag = floatTag - out = float64(v) - return - case int: - rtag = floatTag - out = float64(v) - return - } - } - } - failf("cannot decode %s `%s` as a %s", shortTag(rtag), in, shortTag(tag)) - }() - - // Any data is accepted as a !!str or !!binary. - // Otherwise, the prefix is enough of a hint about what it might be. - hint := byte('N') - if in != "" { - hint = resolveTable[in[0]] - } - if hint != 0 && tag != strTag && tag != binaryTag { - // Handle things we can lookup in a map. - if item, ok := resolveMap[in]; ok { - return item.tag, item.value - } - - // Base 60 floats are a bad idea, were dropped in YAML 1.2, and - // are purposefully unsupported here. They're still quoted on - // the way out for compatibility with other parser, though. - - switch hint { - case 'M': - // We've already checked the map above. - - case '.': - // Not in the map, so maybe a normal float. - floatv, err := strconv.ParseFloat(in, 64) - if err == nil { - return floatTag, floatv - } - - case 'D', 'S': - // Int, float, or timestamp. - // Only try values as a timestamp if the value is unquoted or there's an explicit - // !!timestamp tag. - if tag == "" || tag == timestampTag { - t, ok := parseTimestamp(in) - if ok { - return timestampTag, t - } - } - - plain := strings.Replace(in, "_", "", -1) - intv, err := strconv.ParseInt(plain, 0, 64) - if err == nil { - if intv == int64(int(intv)) { - return intTag, int(intv) - } else { - return intTag, intv - } - } - uintv, err := strconv.ParseUint(plain, 0, 64) - if err == nil { - return intTag, uintv - } - if yamlStyleFloat.MatchString(plain) { - floatv, err := strconv.ParseFloat(plain, 64) - if err == nil { - return floatTag, floatv - } - } - if strings.HasPrefix(plain, "0b") { - intv, err := strconv.ParseInt(plain[2:], 2, 64) - if err == nil { - if intv == int64(int(intv)) { - return intTag, int(intv) - } else { - return intTag, intv - } - } - uintv, err := strconv.ParseUint(plain[2:], 2, 64) - if err == nil { - return intTag, uintv - } - } else if strings.HasPrefix(plain, "-0b") { - intv, err := strconv.ParseInt("-"+plain[3:], 2, 64) - if err == nil { - if true || intv == int64(int(intv)) { - return intTag, int(intv) - } else { - return intTag, intv - } - } - } - // Octals as introduced in version 1.2 of the spec. - // Octals from the 1.1 spec, spelled as 0777, are still - // decoded by default in v3 as well for compatibility. - // May be dropped in v4 depending on how usage evolves. - if strings.HasPrefix(plain, "0o") { - intv, err := strconv.ParseInt(plain[2:], 8, 64) - if err == nil { - if intv == int64(int(intv)) { - return intTag, int(intv) - } else { - return intTag, intv - } - } - uintv, err := strconv.ParseUint(plain[2:], 8, 64) - if err == nil { - return intTag, uintv - } - } else if strings.HasPrefix(plain, "-0o") { - intv, err := strconv.ParseInt("-"+plain[3:], 8, 64) - if err == nil { - if true || intv == int64(int(intv)) { - return intTag, int(intv) - } else { - return intTag, intv - } - } - } - default: - panic("internal error: missing handler for resolver table: " + string(rune(hint)) + " (with " + in + ")") - } - } - return strTag, in -} - -// encodeBase64 encodes s as base64 that is broken up into multiple lines -// as appropriate for the resulting length. -func encodeBase64(s string) string { - const lineLen = 70 - encLen := base64.StdEncoding.EncodedLen(len(s)) - lines := encLen/lineLen + 1 - buf := make([]byte, encLen*2+lines) - in := buf[0:encLen] - out := buf[encLen:] - base64.StdEncoding.Encode(in, []byte(s)) - k := 0 - for i := 0; i < len(in); i += lineLen { - j := i + lineLen - if j > len(in) { - j = len(in) - } - k += copy(out[k:], in[i:j]) - if lines > 1 { - out[k] = '\n' - k++ - } - } - return string(out[:k]) -} - -// This is a subset of the formats allowed by the regular expression -// defined at http://yaml.org/type/timestamp.html. -var allowedTimestampFormats = []string{ - "2006-1-2T15:4:5.999999999Z07:00", // RCF3339Nano with short date fields. - "2006-1-2t15:4:5.999999999Z07:00", // RFC3339Nano with short date fields and lower-case "t". - "2006-1-2 15:4:5.999999999", // space separated with no time zone - "2006-1-2", // date only - // Notable exception: time.Parse cannot handle: "2001-12-14 21:59:43.10 -5" - // from the set of examples. -} - -// parseTimestamp parses s as a timestamp string and -// returns the timestamp and reports whether it succeeded. -// Timestamp formats are defined at http://yaml.org/type/timestamp.html -func parseTimestamp(s string) (time.Time, bool) { - // TODO write code to check all the formats supported by - // http://yaml.org/type/timestamp.html instead of using time.Parse. - - // Quick check: all date formats start with YYYY-. - i := 0 - for ; i < len(s); i++ { - if c := s[i]; c < '0' || c > '9' { - break - } - } - if i != 4 || i == len(s) || s[i] != '-' { - return time.Time{}, false - } - for _, format := range allowedTimestampFormats { - if t, err := time.Parse(format, s); err == nil { - return t, true - } - } - return time.Time{}, false -} diff --git a/vendor/gopkg.in/yaml.v3/scannerc.go b/vendor/gopkg.in/yaml.v3/scannerc.go deleted file mode 100644 index d28969b4..00000000 --- a/vendor/gopkg.in/yaml.v3/scannerc.go +++ /dev/null @@ -1,2895 +0,0 @@ -// -// Copyright (c) 2011-2019 Canonical Ltd -// Copyright (c) 2006-2010 Kirill Simonov -// -// 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. - -package yaml - -import ( - "bytes" - "fmt" -) - -// Introduction -// ************ -// -// The following notes assume that you are familiar with the YAML specification -// (http://yaml.org/spec/1.2/spec.html). We mostly follow it, although in -// some cases we are less restrictive that it requires. -// -// The process of transforming a YAML stream into a sequence of events is -// divided on two steps: Scanning and Parsing. -// -// The Scanner transforms the input stream into a sequence of tokens, while the -// parser transform the sequence of tokens produced by the Scanner into a -// sequence of parsing events. -// -// The Scanner is rather clever and complicated. The Parser, on the contrary, -// is a straightforward implementation of a recursive-descendant parser (or, -// LL(1) parser, as it is usually called). -// -// Actually there are two issues of Scanning that might be called "clever", the -// rest is quite straightforward. The issues are "block collection start" and -// "simple keys". Both issues are explained below in details. -// -// Here the Scanning step is explained and implemented. We start with the list -// of all the tokens produced by the Scanner together with short descriptions. -// -// Now, tokens: -// -// STREAM-START(encoding) # The stream start. -// STREAM-END # The stream end. -// VERSION-DIRECTIVE(major,minor) # The '%YAML' directive. -// TAG-DIRECTIVE(handle,prefix) # The '%TAG' directive. -// DOCUMENT-START # '---' -// DOCUMENT-END # '...' -// BLOCK-SEQUENCE-START # Indentation increase denoting a block -// BLOCK-MAPPING-START # sequence or a block mapping. -// BLOCK-END # Indentation decrease. -// FLOW-SEQUENCE-START # '[' -// FLOW-SEQUENCE-END # ']' -// BLOCK-SEQUENCE-START # '{' -// BLOCK-SEQUENCE-END # '}' -// BLOCK-ENTRY # '-' -// FLOW-ENTRY # ',' -// KEY # '?' or nothing (simple keys). -// VALUE # ':' -// ALIAS(anchor) # '*anchor' -// ANCHOR(anchor) # '&anchor' -// TAG(handle,suffix) # '!handle!suffix' -// SCALAR(value,style) # A scalar. -// -// The following two tokens are "virtual" tokens denoting the beginning and the -// end of the stream: -// -// STREAM-START(encoding) -// STREAM-END -// -// We pass the information about the input stream encoding with the -// STREAM-START token. -// -// The next two tokens are responsible for tags: -// -// VERSION-DIRECTIVE(major,minor) -// TAG-DIRECTIVE(handle,prefix) -// -// Example: -// -// %YAML 1.1 -// %TAG ! !foo -// %TAG !yaml! tag:yaml.org,2002: -// --- -// -// The correspoding sequence of tokens: -// -// STREAM-START(utf-8) -// VERSION-DIRECTIVE(1,1) -// TAG-DIRECTIVE("!","!foo") -// TAG-DIRECTIVE("!yaml","tag:yaml.org,2002:") -// DOCUMENT-START -// STREAM-END -// -// Note that the VERSION-DIRECTIVE and TAG-DIRECTIVE tokens occupy a whole -// line. -// -// The document start and end indicators are represented by: -// -// DOCUMENT-START -// DOCUMENT-END -// -// Note that if a YAML stream contains an implicit document (without '---' -// and '...' indicators), no DOCUMENT-START and DOCUMENT-END tokens will be -// produced. -// -// In the following examples, we present whole documents together with the -// produced tokens. -// -// 1. An implicit document: -// -// 'a scalar' -// -// Tokens: -// -// STREAM-START(utf-8) -// SCALAR("a scalar",single-quoted) -// STREAM-END -// -// 2. An explicit document: -// -// --- -// 'a scalar' -// ... -// -// Tokens: -// -// STREAM-START(utf-8) -// DOCUMENT-START -// SCALAR("a scalar",single-quoted) -// DOCUMENT-END -// STREAM-END -// -// 3. Several documents in a stream: -// -// 'a scalar' -// --- -// 'another scalar' -// --- -// 'yet another scalar' -// -// Tokens: -// -// STREAM-START(utf-8) -// SCALAR("a scalar",single-quoted) -// DOCUMENT-START -// SCALAR("another scalar",single-quoted) -// DOCUMENT-START -// SCALAR("yet another scalar",single-quoted) -// STREAM-END -// -// We have already introduced the SCALAR token above. The following tokens are -// used to describe aliases, anchors, tag, and scalars: -// -// ALIAS(anchor) -// ANCHOR(anchor) -// TAG(handle,suffix) -// SCALAR(value,style) -// -// The following series of examples illustrate the usage of these tokens: -// -// 1. A recursive sequence: -// -// &A [ *A ] -// -// Tokens: -// -// STREAM-START(utf-8) -// ANCHOR("A") -// FLOW-SEQUENCE-START -// ALIAS("A") -// FLOW-SEQUENCE-END -// STREAM-END -// -// 2. A tagged scalar: -// -// !!float "3.14" # A good approximation. -// -// Tokens: -// -// STREAM-START(utf-8) -// TAG("!!","float") -// SCALAR("3.14",double-quoted) -// STREAM-END -// -// 3. Various scalar styles: -// -// --- # Implicit empty plain scalars do not produce tokens. -// --- a plain scalar -// --- 'a single-quoted scalar' -// --- "a double-quoted scalar" -// --- |- -// a literal scalar -// --- >- -// a folded -// scalar -// -// Tokens: -// -// STREAM-START(utf-8) -// DOCUMENT-START -// DOCUMENT-START -// SCALAR("a plain scalar",plain) -// DOCUMENT-START -// SCALAR("a single-quoted scalar",single-quoted) -// DOCUMENT-START -// SCALAR("a double-quoted scalar",double-quoted) -// DOCUMENT-START -// SCALAR("a literal scalar",literal) -// DOCUMENT-START -// SCALAR("a folded scalar",folded) -// STREAM-END -// -// Now it's time to review collection-related tokens. We will start with -// flow collections: -// -// FLOW-SEQUENCE-START -// FLOW-SEQUENCE-END -// FLOW-MAPPING-START -// FLOW-MAPPING-END -// FLOW-ENTRY -// KEY -// VALUE -// -// The tokens FLOW-SEQUENCE-START, FLOW-SEQUENCE-END, FLOW-MAPPING-START, and -// FLOW-MAPPING-END represent the indicators '[', ']', '{', and '}' -// correspondingly. FLOW-ENTRY represent the ',' indicator. Finally the -// indicators '?' and ':', which are used for denoting mapping keys and values, -// are represented by the KEY and VALUE tokens. -// -// The following examples show flow collections: -// -// 1. A flow sequence: -// -// [item 1, item 2, item 3] -// -// Tokens: -// -// STREAM-START(utf-8) -// FLOW-SEQUENCE-START -// SCALAR("item 1",plain) -// FLOW-ENTRY -// SCALAR("item 2",plain) -// FLOW-ENTRY -// SCALAR("item 3",plain) -// FLOW-SEQUENCE-END -// STREAM-END -// -// 2. A flow mapping: -// -// { -// a simple key: a value, # Note that the KEY token is produced. -// ? a complex key: another value, -// } -// -// Tokens: -// -// STREAM-START(utf-8) -// FLOW-MAPPING-START -// KEY -// SCALAR("a simple key",plain) -// VALUE -// SCALAR("a value",plain) -// FLOW-ENTRY -// KEY -// SCALAR("a complex key",plain) -// VALUE -// SCALAR("another value",plain) -// FLOW-ENTRY -// FLOW-MAPPING-END -// STREAM-END -// -// A simple key is a key which is not denoted by the '?' indicator. Note that -// the Scanner still produce the KEY token whenever it encounters a simple key. -// -// For scanning block collections, the following tokens are used (note that we -// repeat KEY and VALUE here): -// -// BLOCK-SEQUENCE-START -// BLOCK-MAPPING-START -// BLOCK-END -// BLOCK-ENTRY -// KEY -// VALUE -// -// The tokens BLOCK-SEQUENCE-START and BLOCK-MAPPING-START denote indentation -// increase that precedes a block collection (cf. the INDENT token in Python). -// The token BLOCK-END denote indentation decrease that ends a block collection -// (cf. the DEDENT token in Python). However YAML has some syntax pecularities -// that makes detections of these tokens more complex. -// -// The tokens BLOCK-ENTRY, KEY, and VALUE are used to represent the indicators -// '-', '?', and ':' correspondingly. -// -// The following examples show how the tokens BLOCK-SEQUENCE-START, -// BLOCK-MAPPING-START, and BLOCK-END are emitted by the Scanner: -// -// 1. Block sequences: -// -// - item 1 -// - item 2 -// - -// - item 3.1 -// - item 3.2 -// - -// key 1: value 1 -// key 2: value 2 -// -// Tokens: -// -// STREAM-START(utf-8) -// BLOCK-SEQUENCE-START -// BLOCK-ENTRY -// SCALAR("item 1",plain) -// BLOCK-ENTRY -// SCALAR("item 2",plain) -// BLOCK-ENTRY -// BLOCK-SEQUENCE-START -// BLOCK-ENTRY -// SCALAR("item 3.1",plain) -// BLOCK-ENTRY -// SCALAR("item 3.2",plain) -// BLOCK-END -// BLOCK-ENTRY -// BLOCK-MAPPING-START -// KEY -// SCALAR("key 1",plain) -// VALUE -// SCALAR("value 1",plain) -// KEY -// SCALAR("key 2",plain) -// VALUE -// SCALAR("value 2",plain) -// BLOCK-END -// BLOCK-END -// STREAM-END -// -// 2. Block mappings: -// -// a simple key: a value # The KEY token is produced here. -// ? a complex key -// : another value -// a mapping: -// key 1: value 1 -// key 2: value 2 -// a sequence: -// - item 1 -// - item 2 -// -// Tokens: -// -// STREAM-START(utf-8) -// BLOCK-MAPPING-START -// KEY -// SCALAR("a simple key",plain) -// VALUE -// SCALAR("a value",plain) -// KEY -// SCALAR("a complex key",plain) -// VALUE -// SCALAR("another value",plain) -// KEY -// SCALAR("a mapping",plain) -// BLOCK-MAPPING-START -// KEY -// SCALAR("key 1",plain) -// VALUE -// SCALAR("value 1",plain) -// KEY -// SCALAR("key 2",plain) -// VALUE -// SCALAR("value 2",plain) -// BLOCK-END -// KEY -// SCALAR("a sequence",plain) -// VALUE -// BLOCK-SEQUENCE-START -// BLOCK-ENTRY -// SCALAR("item 1",plain) -// BLOCK-ENTRY -// SCALAR("item 2",plain) -// BLOCK-END -// BLOCK-END -// STREAM-END -// -// YAML does not always require to start a new block collection from a new -// line. If the current line contains only '-', '?', and ':' indicators, a new -// block collection may start at the current line. The following examples -// illustrate this case: -// -// 1. Collections in a sequence: -// -// - - item 1 -// - item 2 -// - key 1: value 1 -// key 2: value 2 -// - ? complex key -// : complex value -// -// Tokens: -// -// STREAM-START(utf-8) -// BLOCK-SEQUENCE-START -// BLOCK-ENTRY -// BLOCK-SEQUENCE-START -// BLOCK-ENTRY -// SCALAR("item 1",plain) -// BLOCK-ENTRY -// SCALAR("item 2",plain) -// BLOCK-END -// BLOCK-ENTRY -// BLOCK-MAPPING-START -// KEY -// SCALAR("key 1",plain) -// VALUE -// SCALAR("value 1",plain) -// KEY -// SCALAR("key 2",plain) -// VALUE -// SCALAR("value 2",plain) -// BLOCK-END -// BLOCK-ENTRY -// BLOCK-MAPPING-START -// KEY -// SCALAR("complex key") -// VALUE -// SCALAR("complex value") -// BLOCK-END -// BLOCK-END -// STREAM-END -// -// 2. Collections in a mapping: -// -// ? a sequence -// : - item 1 -// - item 2 -// ? a mapping -// : key 1: value 1 -// key 2: value 2 -// -// Tokens: -// -// STREAM-START(utf-8) -// BLOCK-MAPPING-START -// KEY -// SCALAR("a sequence",plain) -// VALUE -// BLOCK-SEQUENCE-START -// BLOCK-ENTRY -// SCALAR("item 1",plain) -// BLOCK-ENTRY -// SCALAR("item 2",plain) -// BLOCK-END -// KEY -// SCALAR("a mapping",plain) -// VALUE -// BLOCK-MAPPING-START -// KEY -// SCALAR("key 1",plain) -// VALUE -// SCALAR("value 1",plain) -// KEY -// SCALAR("key 2",plain) -// VALUE -// SCALAR("value 2",plain) -// BLOCK-END -// BLOCK-END -// STREAM-END -// -// YAML also permits non-indented sequences if they are included into a block -// mapping. In this case, the token BLOCK-SEQUENCE-START is not produced: -// -// key: -// - item 1 # BLOCK-SEQUENCE-START is NOT produced here. -// - item 2 -// -// Tokens: -// -// STREAM-START(utf-8) -// BLOCK-MAPPING-START -// KEY -// SCALAR("key",plain) -// VALUE -// BLOCK-ENTRY -// SCALAR("item 1",plain) -// BLOCK-ENTRY -// SCALAR("item 2",plain) -// BLOCK-END -// - -// Ensure that the buffer contains the required number of characters. -// Return true on success, false on failure (reader error or memory error). -func cache(parser *yaml_parser_t, length int) bool { - // [Go] This was inlined: !cache(A, B) -> unread < B && !update(A, B) - return parser.unread >= length || yaml_parser_update_buffer(parser, length) -} - -// Advance the buffer pointer. -func skip(parser *yaml_parser_t) { - parser.mark.index++ - parser.mark.column++ - parser.unread-- - parser.buffer_pos += width(parser.buffer[parser.buffer_pos]) -} - -func skip_line(parser *yaml_parser_t) { - if is_crlf(parser.buffer, parser.buffer_pos) { - parser.mark.index += 2 - parser.mark.column = 0 - parser.mark.line++ - parser.unread -= 2 - parser.buffer_pos += 2 - } else if is_break(parser.buffer, parser.buffer_pos) { - parser.mark.index++ - parser.mark.column = 0 - parser.mark.line++ - parser.unread-- - parser.buffer_pos += width(parser.buffer[parser.buffer_pos]) - } -} - -// Copy a character to a string buffer and advance pointers. -func read(parser *yaml_parser_t, s []byte) []byte { - w := width(parser.buffer[parser.buffer_pos]) - if w == 0 { - panic("invalid character sequence") - } - if len(s) == 0 { - s = make([]byte, 0, 32) - } - if w == 1 && len(s)+w <= cap(s) { - s = s[:len(s)+1] - s[len(s)-1] = parser.buffer[parser.buffer_pos] - parser.buffer_pos++ - } else { - s = append(s, parser.buffer[parser.buffer_pos:parser.buffer_pos+w]...) - parser.buffer_pos += w - } - parser.mark.index++ - parser.mark.column++ - parser.unread-- - return s -} - -// Copy a line break character to a string buffer and advance pointers. -func read_line(parser *yaml_parser_t, s []byte) []byte { - buf := parser.buffer - pos := parser.buffer_pos - switch { - case buf[pos] == '\r' && buf[pos+1] == '\n': - // CR LF . LF - s = append(s, '\n') - parser.buffer_pos += 2 - parser.mark.index++ - parser.unread-- - case buf[pos] == '\r' || buf[pos] == '\n': - // CR|LF . LF - s = append(s, '\n') - parser.buffer_pos += 1 - case buf[pos] == '\xC2' && buf[pos+1] == '\x85': - // NEL . LF - s = append(s, '\n') - parser.buffer_pos += 2 - case buf[pos] == '\xE2' && buf[pos+1] == '\x80' && (buf[pos+2] == '\xA8' || buf[pos+2] == '\xA9'): - // LS|PS . LS|PS - s = append(s, buf[parser.buffer_pos:pos+3]...) - parser.buffer_pos += 3 - default: - return s - } - parser.mark.index++ - parser.mark.column = 0 - parser.mark.line++ - parser.unread-- - return s -} - -// Get the next token. -func yaml_parser_scan(parser *yaml_parser_t, token *yaml_token_t) bool { - // Erase the token object. - *token = yaml_token_t{} // [Go] Is this necessary? - - // No tokens after STREAM-END or error. - if parser.stream_end_produced || parser.error != yaml_NO_ERROR { - return true - } - - // Ensure that the tokens queue contains enough tokens. - if !parser.token_available { - if !yaml_parser_fetch_more_tokens(parser) { - return false - } - } - - // Fetch the next token from the queue. - *token = parser.tokens[parser.tokens_head] - parser.tokens_head++ - parser.tokens_parsed++ - parser.token_available = false - - if token.typ == yaml_STREAM_END_TOKEN { - parser.stream_end_produced = true - } - return true -} - -// Set the scanner error and return false. -func yaml_parser_set_scanner_error(parser *yaml_parser_t, context string, context_mark yaml_mark_t, problem string) bool { - parser.error = yaml_SCANNER_ERROR - parser.context = context - parser.context_mark = context_mark - parser.problem = problem - parser.problem_mark = parser.mark - return false -} - -func yaml_parser_set_scanner_tag_error(parser *yaml_parser_t, directive bool, context_mark yaml_mark_t, problem string) bool { - context := "while parsing a tag" - if directive { - context = "while parsing a %TAG directive" - } - return yaml_parser_set_scanner_error(parser, context, context_mark, problem) -} - -func trace(args ...interface{}) func() { - pargs := append([]interface{}{"+++"}, args...) - fmt.Println(pargs...) - pargs = append([]interface{}{"---"}, args...) - return func() { fmt.Println(pargs...) } -} - -// Ensure that the tokens queue contains at least one token which can be -// returned to the Parser. -func yaml_parser_fetch_more_tokens(parser *yaml_parser_t) bool { - // While we need more tokens to fetch, do it. - for { - // Check if we really need to fetch more tokens. - need_more_tokens := false - - // [Go] When parsing flow items, force the queue to have at least - // two items so that comments after commas may be associated - // with the value being parsed before them. - if parser.tokens_head == len(parser.tokens) || parser.flow_level > 0 && parser.tokens_head >= len(parser.tokens)-1 { - // Queue is empty or has just one element inside a flow context. - need_more_tokens = true - } else { - // Check if any potential simple key may occupy the head position. - if !yaml_parser_stale_simple_keys(parser) { - return false - } - - for i := range parser.simple_keys { - simple_key := &parser.simple_keys[i] - if simple_key.possible && simple_key.token_number == parser.tokens_parsed { - need_more_tokens = true - break - } - } - } - - // We are finished. - if !need_more_tokens { - break - } - // Fetch the next token. - if !yaml_parser_fetch_next_token(parser) { - return false - } - } - - parser.token_available = true - return true -} - -// The dispatcher for token fetchers. -func yaml_parser_fetch_next_token(parser *yaml_parser_t) (ok bool) { - // Ensure that the buffer is initialized. - if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { - return false - } - - // Check if we just started scanning. Fetch STREAM-START then. - if !parser.stream_start_produced { - return yaml_parser_fetch_stream_start(parser) - } - - // Eat whitespaces and comments until we reach the next token. - if !yaml_parser_scan_to_next_token(parser) { - return false - } - - // Remove obsolete potential simple keys. - if !yaml_parser_stale_simple_keys(parser) { - return false - } - - // Check the indentation level against the current column. - if !yaml_parser_unroll_indent(parser, parser.mark.column) { - return false - } - - // Ensure that the buffer contains at least 4 characters. 4 is the length - // of the longest indicators ('--- ' and '... '). - if parser.unread < 4 && !yaml_parser_update_buffer(parser, 4) { - return false - } - - // Is it the end of the stream? - if is_z(parser.buffer, parser.buffer_pos) { - return yaml_parser_fetch_stream_end(parser) - } - - // Is it a directive? - if parser.mark.column == 0 && parser.buffer[parser.buffer_pos] == '%' { - return yaml_parser_fetch_directive(parser) - } - - buf := parser.buffer - pos := parser.buffer_pos - - // Is it the document start indicator? - if parser.mark.column == 0 && buf[pos] == '-' && buf[pos+1] == '-' && buf[pos+2] == '-' && is_blankz(buf, pos+3) { - return yaml_parser_fetch_document_indicator(parser, yaml_DOCUMENT_START_TOKEN) - } - - // Is it the document end indicator? - if parser.mark.column == 0 && buf[pos] == '.' && buf[pos+1] == '.' && buf[pos+2] == '.' && is_blankz(buf, pos+3) { - return yaml_parser_fetch_document_indicator(parser, yaml_DOCUMENT_END_TOKEN) - } - - comment_mark := parser.mark - if parser.flow_level > 0 && buf[pos] == ',' && len(parser.tokens) > 0 { - // Associate any following comments with the prior token. - comment_mark = parser.tokens[len(parser.tokens)-1].start_mark - } - defer func() { - if !ok { - return - } - if !yaml_parser_scan_line_comment(parser, comment_mark) { - ok = false - return - } - if !yaml_parser_scan_foot_comment(parser, comment_mark) { - ok = false - return - } - }() - - // Is it the flow sequence start indicator? - if buf[pos] == '[' { - return yaml_parser_fetch_flow_collection_start(parser, yaml_FLOW_SEQUENCE_START_TOKEN) - } - - // Is it the flow mapping start indicator? - if parser.buffer[parser.buffer_pos] == '{' { - return yaml_parser_fetch_flow_collection_start(parser, yaml_FLOW_MAPPING_START_TOKEN) - } - - // Is it the flow sequence end indicator? - if parser.buffer[parser.buffer_pos] == ']' { - return yaml_parser_fetch_flow_collection_end(parser, - yaml_FLOW_SEQUENCE_END_TOKEN) - } - - // Is it the flow mapping end indicator? - if parser.buffer[parser.buffer_pos] == '}' { - return yaml_parser_fetch_flow_collection_end(parser, - yaml_FLOW_MAPPING_END_TOKEN) - } - - // Is it the flow entry indicator? - if parser.buffer[parser.buffer_pos] == ',' { - return yaml_parser_fetch_flow_entry(parser) - } - - // Is it the block entry indicator? - if parser.buffer[parser.buffer_pos] == '-' && is_blankz(parser.buffer, parser.buffer_pos+1) { - return yaml_parser_fetch_block_entry(parser) - } - - // Is it the key indicator? - if parser.buffer[parser.buffer_pos] == '?' && (parser.flow_level > 0 || is_blankz(parser.buffer, parser.buffer_pos+1)) { - return yaml_parser_fetch_key(parser) - } - - // Is it the value indicator? - if parser.buffer[parser.buffer_pos] == ':' && (parser.flow_level > 0 || is_blankz(parser.buffer, parser.buffer_pos+1)) { - return yaml_parser_fetch_value(parser) - } - - // Is it an alias? - if parser.buffer[parser.buffer_pos] == '*' { - return yaml_parser_fetch_anchor(parser, yaml_ALIAS_TOKEN) - } - - // Is it an anchor? - if parser.buffer[parser.buffer_pos] == '&' { - return yaml_parser_fetch_anchor(parser, yaml_ANCHOR_TOKEN) - } - - // Is it a tag? - if parser.buffer[parser.buffer_pos] == '!' { - return yaml_parser_fetch_tag(parser) - } - - // Is it a literal scalar? - if parser.buffer[parser.buffer_pos] == '|' && parser.flow_level == 0 { - return yaml_parser_fetch_block_scalar(parser, true) - } - - // Is it a folded scalar? - if parser.buffer[parser.buffer_pos] == '>' && parser.flow_level == 0 { - return yaml_parser_fetch_block_scalar(parser, false) - } - - // Is it a single-quoted scalar? - if parser.buffer[parser.buffer_pos] == '\'' { - return yaml_parser_fetch_flow_scalar(parser, true) - } - - // Is it a double-quoted scalar? - if parser.buffer[parser.buffer_pos] == '"' { - return yaml_parser_fetch_flow_scalar(parser, false) - } - - // Is it a plain scalar? - // - // A plain scalar may start with any non-blank characters except - // - // '-', '?', ':', ',', '[', ']', '{', '}', - // '#', '&', '*', '!', '|', '>', '\'', '\"', - // '%', '@', '`'. - // - // In the block context (and, for the '-' indicator, in the flow context - // too), it may also start with the characters - // - // '-', '?', ':' - // - // if it is followed by a non-space character. - // - // The last rule is more restrictive than the specification requires. - // [Go] TODO Make this logic more reasonable. - //switch parser.buffer[parser.buffer_pos] { - //case '-', '?', ':', ',', '?', '-', ',', ':', ']', '[', '}', '{', '&', '#', '!', '*', '>', '|', '"', '\'', '@', '%', '-', '`': - //} - if !(is_blankz(parser.buffer, parser.buffer_pos) || parser.buffer[parser.buffer_pos] == '-' || - parser.buffer[parser.buffer_pos] == '?' || parser.buffer[parser.buffer_pos] == ':' || - parser.buffer[parser.buffer_pos] == ',' || parser.buffer[parser.buffer_pos] == '[' || - parser.buffer[parser.buffer_pos] == ']' || parser.buffer[parser.buffer_pos] == '{' || - parser.buffer[parser.buffer_pos] == '}' || parser.buffer[parser.buffer_pos] == '#' || - parser.buffer[parser.buffer_pos] == '&' || parser.buffer[parser.buffer_pos] == '*' || - parser.buffer[parser.buffer_pos] == '!' || parser.buffer[parser.buffer_pos] == '|' || - parser.buffer[parser.buffer_pos] == '>' || parser.buffer[parser.buffer_pos] == '\'' || - parser.buffer[parser.buffer_pos] == '"' || parser.buffer[parser.buffer_pos] == '%' || - parser.buffer[parser.buffer_pos] == '@' || parser.buffer[parser.buffer_pos] == '`') || - (parser.buffer[parser.buffer_pos] == '-' && !is_blank(parser.buffer, parser.buffer_pos+1)) || - (parser.flow_level == 0 && - (parser.buffer[parser.buffer_pos] == '?' || parser.buffer[parser.buffer_pos] == ':') && - !is_blankz(parser.buffer, parser.buffer_pos+1)) { - return yaml_parser_fetch_plain_scalar(parser) - } - - // If we don't determine the token type so far, it is an error. - return yaml_parser_set_scanner_error(parser, - "while scanning for the next token", parser.mark, - "found character that cannot start any token") -} - -// Check the list of potential simple keys and remove the positions that -// cannot contain simple keys anymore. -func yaml_parser_stale_simple_keys(parser *yaml_parser_t) bool { - // Check for a potential simple key for each flow level. - for i := range parser.simple_keys { - simple_key := &parser.simple_keys[i] - - // The specification requires that a simple key - // - // - is limited to a single line, - // - is shorter than 1024 characters. - if simple_key.possible && (simple_key.mark.line < parser.mark.line || simple_key.mark.index+1024 < parser.mark.index) { - - // Check if the potential simple key to be removed is required. - if simple_key.required { - return yaml_parser_set_scanner_error(parser, - "while scanning a simple key", simple_key.mark, - "could not find expected ':'") - } - simple_key.possible = false - } - } - return true -} - -// Check if a simple key may start at the current position and add it if -// needed. -func yaml_parser_save_simple_key(parser *yaml_parser_t) bool { - // A simple key is required at the current position if the scanner is in - // the block context and the current column coincides with the indentation - // level. - - required := parser.flow_level == 0 && parser.indent == parser.mark.column - - // - // If the current position may start a simple key, save it. - // - if parser.simple_key_allowed { - simple_key := yaml_simple_key_t{ - possible: true, - required: required, - token_number: parser.tokens_parsed + (len(parser.tokens) - parser.tokens_head), - } - simple_key.mark = parser.mark - - if !yaml_parser_remove_simple_key(parser) { - return false - } - parser.simple_keys[len(parser.simple_keys)-1] = simple_key - } - return true -} - -// Remove a potential simple key at the current flow level. -func yaml_parser_remove_simple_key(parser *yaml_parser_t) bool { - i := len(parser.simple_keys) - 1 - if parser.simple_keys[i].possible { - // If the key is required, it is an error. - if parser.simple_keys[i].required { - return yaml_parser_set_scanner_error(parser, - "while scanning a simple key", parser.simple_keys[i].mark, - "could not find expected ':'") - } - } - // Remove the key from the stack. - parser.simple_keys[i].possible = false - return true -} - -// Increase the flow level and resize the simple key list if needed. -func yaml_parser_increase_flow_level(parser *yaml_parser_t) bool { - // Reset the simple key on the next level. - parser.simple_keys = append(parser.simple_keys, yaml_simple_key_t{}) - - // Increase the flow level. - parser.flow_level++ - return true -} - -// Decrease the flow level. -func yaml_parser_decrease_flow_level(parser *yaml_parser_t) bool { - if parser.flow_level > 0 { - parser.flow_level-- - parser.simple_keys = parser.simple_keys[:len(parser.simple_keys)-1] - } - return true -} - -// Push the current indentation level to the stack and set the new level -// the current column is greater than the indentation level. In this case, -// append or insert the specified token into the token queue. -func yaml_parser_roll_indent(parser *yaml_parser_t, column, number int, typ yaml_token_type_t, mark yaml_mark_t) bool { - // In the flow context, do nothing. - if parser.flow_level > 0 { - return true - } - - if parser.indent < column { - // Push the current indentation level to the stack and set the new - // indentation level. - parser.indents = append(parser.indents, parser.indent) - parser.indent = column - - // Create a token and insert it into the queue. - token := yaml_token_t{ - typ: typ, - start_mark: mark, - end_mark: mark, - } - if number > -1 { - number -= parser.tokens_parsed - } - yaml_insert_token(parser, number, &token) - } - return true -} - -// Pop indentation levels from the indents stack until the current level -// becomes less or equal to the column. For each indentation level, append -// the BLOCK-END token. -func yaml_parser_unroll_indent(parser *yaml_parser_t, column int) bool { - // In the flow context, do nothing. - if parser.flow_level > 0 { - return true - } - - // Loop through the indentation levels in the stack. - for parser.indent > column { - // Create a token and append it to the queue. - token := yaml_token_t{ - typ: yaml_BLOCK_END_TOKEN, - start_mark: parser.mark, - end_mark: parser.mark, - } - yaml_insert_token(parser, -1, &token) - - // Pop the indentation level. - parser.indent = parser.indents[len(parser.indents)-1] - parser.indents = parser.indents[:len(parser.indents)-1] - } - return true -} - -// Initialize the scanner and produce the STREAM-START token. -func yaml_parser_fetch_stream_start(parser *yaml_parser_t) bool { - - // Set the initial indentation. - parser.indent = -1 - - // Initialize the simple key stack. - parser.simple_keys = append(parser.simple_keys, yaml_simple_key_t{}) - - // A simple key is allowed at the beginning of the stream. - parser.simple_key_allowed = true - - // We have started. - parser.stream_start_produced = true - - // Create the STREAM-START token and append it to the queue. - token := yaml_token_t{ - typ: yaml_STREAM_START_TOKEN, - start_mark: parser.mark, - end_mark: parser.mark, - encoding: parser.encoding, - } - yaml_insert_token(parser, -1, &token) - return true -} - -// Produce the STREAM-END token and shut down the scanner. -func yaml_parser_fetch_stream_end(parser *yaml_parser_t) bool { - - // Force new line. - if parser.mark.column != 0 { - parser.mark.column = 0 - parser.mark.line++ - } - - // Reset the indentation level. - if !yaml_parser_unroll_indent(parser, -1) { - return false - } - - // Reset simple keys. - if !yaml_parser_remove_simple_key(parser) { - return false - } - - parser.simple_key_allowed = false - - // Create the STREAM-END token and append it to the queue. - token := yaml_token_t{ - typ: yaml_STREAM_END_TOKEN, - start_mark: parser.mark, - end_mark: parser.mark, - } - yaml_insert_token(parser, -1, &token) - return true -} - -// Produce a VERSION-DIRECTIVE or TAG-DIRECTIVE token. -func yaml_parser_fetch_directive(parser *yaml_parser_t) bool { - // Reset the indentation level. - if !yaml_parser_unroll_indent(parser, -1) { - return false - } - - // Reset simple keys. - if !yaml_parser_remove_simple_key(parser) { - return false - } - - parser.simple_key_allowed = false - - // Create the YAML-DIRECTIVE or TAG-DIRECTIVE token. - token := yaml_token_t{} - if !yaml_parser_scan_directive(parser, &token) { - return false - } - // Append the token to the queue. - yaml_insert_token(parser, -1, &token) - return true -} - -// Produce the DOCUMENT-START or DOCUMENT-END token. -func yaml_parser_fetch_document_indicator(parser *yaml_parser_t, typ yaml_token_type_t) bool { - // Reset the indentation level. - if !yaml_parser_unroll_indent(parser, -1) { - return false - } - - // Reset simple keys. - if !yaml_parser_remove_simple_key(parser) { - return false - } - - parser.simple_key_allowed = false - - // Consume the token. - start_mark := parser.mark - - skip(parser) - skip(parser) - skip(parser) - - end_mark := parser.mark - - // Create the DOCUMENT-START or DOCUMENT-END token. - token := yaml_token_t{ - typ: typ, - start_mark: start_mark, - end_mark: end_mark, - } - // Append the token to the queue. - yaml_insert_token(parser, -1, &token) - return true -} - -// Produce the FLOW-SEQUENCE-START or FLOW-MAPPING-START token. -func yaml_parser_fetch_flow_collection_start(parser *yaml_parser_t, typ yaml_token_type_t) bool { - - // The indicators '[' and '{' may start a simple key. - if !yaml_parser_save_simple_key(parser) { - return false - } - - // Increase the flow level. - if !yaml_parser_increase_flow_level(parser) { - return false - } - - // A simple key may follow the indicators '[' and '{'. - parser.simple_key_allowed = true - - // Consume the token. - start_mark := parser.mark - skip(parser) - end_mark := parser.mark - - // Create the FLOW-SEQUENCE-START of FLOW-MAPPING-START token. - token := yaml_token_t{ - typ: typ, - start_mark: start_mark, - end_mark: end_mark, - } - // Append the token to the queue. - yaml_insert_token(parser, -1, &token) - return true -} - -// Produce the FLOW-SEQUENCE-END or FLOW-MAPPING-END token. -func yaml_parser_fetch_flow_collection_end(parser *yaml_parser_t, typ yaml_token_type_t) bool { - // Reset any potential simple key on the current flow level. - if !yaml_parser_remove_simple_key(parser) { - return false - } - - // Decrease the flow level. - if !yaml_parser_decrease_flow_level(parser) { - return false - } - - // No simple keys after the indicators ']' and '}'. - parser.simple_key_allowed = false - - // Consume the token. - - start_mark := parser.mark - skip(parser) - end_mark := parser.mark - - // Create the FLOW-SEQUENCE-END of FLOW-MAPPING-END token. - token := yaml_token_t{ - typ: typ, - start_mark: start_mark, - end_mark: end_mark, - } - // Append the token to the queue. - yaml_insert_token(parser, -1, &token) - return true -} - -// Produce the FLOW-ENTRY token. -func yaml_parser_fetch_flow_entry(parser *yaml_parser_t) bool { - // Reset any potential simple keys on the current flow level. - if !yaml_parser_remove_simple_key(parser) { - return false - } - - // Simple keys are allowed after ','. - parser.simple_key_allowed = true - - // Consume the token. - start_mark := parser.mark - skip(parser) - end_mark := parser.mark - - // Create the FLOW-ENTRY token and append it to the queue. - token := yaml_token_t{ - typ: yaml_FLOW_ENTRY_TOKEN, - start_mark: start_mark, - end_mark: end_mark, - } - yaml_insert_token(parser, -1, &token) - return true -} - -// Produce the BLOCK-ENTRY token. -func yaml_parser_fetch_block_entry(parser *yaml_parser_t) bool { - // Check if the scanner is in the block context. - if parser.flow_level == 0 { - // Check if we are allowed to start a new entry. - if !parser.simple_key_allowed { - return yaml_parser_set_scanner_error(parser, "", parser.mark, - "block sequence entries are not allowed in this context") - } - // Add the BLOCK-SEQUENCE-START token if needed. - if !yaml_parser_roll_indent(parser, parser.mark.column, -1, yaml_BLOCK_SEQUENCE_START_TOKEN, parser.mark) { - return false - } - } else { - // It is an error for the '-' indicator to occur in the flow context, - // but we let the Parser detect and report about it because the Parser - // is able to point to the context. - } - - // Reset any potential simple keys on the current flow level. - if !yaml_parser_remove_simple_key(parser) { - return false - } - - // Simple keys are allowed after '-'. - parser.simple_key_allowed = true - - // Consume the token. - start_mark := parser.mark - skip(parser) - end_mark := parser.mark - - // Create the BLOCK-ENTRY token and append it to the queue. - token := yaml_token_t{ - typ: yaml_BLOCK_ENTRY_TOKEN, - start_mark: start_mark, - end_mark: end_mark, - } - yaml_insert_token(parser, -1, &token) - return true -} - -// Produce the KEY token. -func yaml_parser_fetch_key(parser *yaml_parser_t) bool { - - // In the block context, additional checks are required. - if parser.flow_level == 0 { - // Check if we are allowed to start a new key (not nessesary simple). - if !parser.simple_key_allowed { - return yaml_parser_set_scanner_error(parser, "", parser.mark, - "mapping keys are not allowed in this context") - } - // Add the BLOCK-MAPPING-START token if needed. - if !yaml_parser_roll_indent(parser, parser.mark.column, -1, yaml_BLOCK_MAPPING_START_TOKEN, parser.mark) { - return false - } - } - - // Reset any potential simple keys on the current flow level. - if !yaml_parser_remove_simple_key(parser) { - return false - } - - // Simple keys are allowed after '?' in the block context. - parser.simple_key_allowed = parser.flow_level == 0 - - // Consume the token. - start_mark := parser.mark - skip(parser) - end_mark := parser.mark - - // Create the KEY token and append it to the queue. - token := yaml_token_t{ - typ: yaml_KEY_TOKEN, - start_mark: start_mark, - end_mark: end_mark, - } - yaml_insert_token(parser, -1, &token) - return true -} - -// Produce the VALUE token. -func yaml_parser_fetch_value(parser *yaml_parser_t) bool { - - simple_key := &parser.simple_keys[len(parser.simple_keys)-1] - - // Have we found a simple key? - if simple_key.possible { - // Create the KEY token and insert it into the queue. - token := yaml_token_t{ - typ: yaml_KEY_TOKEN, - start_mark: simple_key.mark, - end_mark: simple_key.mark, - } - yaml_insert_token(parser, simple_key.token_number-parser.tokens_parsed, &token) - - // In the block context, we may need to add the BLOCK-MAPPING-START token. - if !yaml_parser_roll_indent(parser, simple_key.mark.column, - simple_key.token_number, - yaml_BLOCK_MAPPING_START_TOKEN, simple_key.mark) { - return false - } - - // Remove the simple key. - simple_key.possible = false - - // A simple key cannot follow another simple key. - parser.simple_key_allowed = false - - } else { - // The ':' indicator follows a complex key. - - // In the block context, extra checks are required. - if parser.flow_level == 0 { - - // Check if we are allowed to start a complex value. - if !parser.simple_key_allowed { - return yaml_parser_set_scanner_error(parser, "", parser.mark, - "mapping values are not allowed in this context") - } - - // Add the BLOCK-MAPPING-START token if needed. - if !yaml_parser_roll_indent(parser, parser.mark.column, -1, yaml_BLOCK_MAPPING_START_TOKEN, parser.mark) { - return false - } - } - - // Simple keys after ':' are allowed in the block context. - parser.simple_key_allowed = parser.flow_level == 0 - } - - // Consume the token. - start_mark := parser.mark - skip(parser) - end_mark := parser.mark - - // Create the VALUE token and append it to the queue. - token := yaml_token_t{ - typ: yaml_VALUE_TOKEN, - start_mark: start_mark, - end_mark: end_mark, - } - yaml_insert_token(parser, -1, &token) - return true -} - -// Produce the ALIAS or ANCHOR token. -func yaml_parser_fetch_anchor(parser *yaml_parser_t, typ yaml_token_type_t) bool { - // An anchor or an alias could be a simple key. - if !yaml_parser_save_simple_key(parser) { - return false - } - - // A simple key cannot follow an anchor or an alias. - parser.simple_key_allowed = false - - // Create the ALIAS or ANCHOR token and append it to the queue. - var token yaml_token_t - if !yaml_parser_scan_anchor(parser, &token, typ) { - return false - } - yaml_insert_token(parser, -1, &token) - return true -} - -// Produce the TAG token. -func yaml_parser_fetch_tag(parser *yaml_parser_t) bool { - // A tag could be a simple key. - if !yaml_parser_save_simple_key(parser) { - return false - } - - // A simple key cannot follow a tag. - parser.simple_key_allowed = false - - // Create the TAG token and append it to the queue. - var token yaml_token_t - if !yaml_parser_scan_tag(parser, &token) { - return false - } - yaml_insert_token(parser, -1, &token) - return true -} - -// Produce the SCALAR(...,literal) or SCALAR(...,folded) tokens. -func yaml_parser_fetch_block_scalar(parser *yaml_parser_t, literal bool) bool { - // Remove any potential simple keys. - if !yaml_parser_remove_simple_key(parser) { - return false - } - - // A simple key may follow a block scalar. - parser.simple_key_allowed = true - - // Create the SCALAR token and append it to the queue. - var token yaml_token_t - if !yaml_parser_scan_block_scalar(parser, &token, literal) { - return false - } - yaml_insert_token(parser, -1, &token) - return true -} - -// Produce the SCALAR(...,single-quoted) or SCALAR(...,double-quoted) tokens. -func yaml_parser_fetch_flow_scalar(parser *yaml_parser_t, single bool) bool { - // A plain scalar could be a simple key. - if !yaml_parser_save_simple_key(parser) { - return false - } - - // A simple key cannot follow a flow scalar. - parser.simple_key_allowed = false - - // Create the SCALAR token and append it to the queue. - var token yaml_token_t - if !yaml_parser_scan_flow_scalar(parser, &token, single) { - return false - } - yaml_insert_token(parser, -1, &token) - return true -} - -// Produce the SCALAR(...,plain) token. -func yaml_parser_fetch_plain_scalar(parser *yaml_parser_t) bool { - // A plain scalar could be a simple key. - if !yaml_parser_save_simple_key(parser) { - return false - } - - // A simple key cannot follow a flow scalar. - parser.simple_key_allowed = false - - // Create the SCALAR token and append it to the queue. - var token yaml_token_t - if !yaml_parser_scan_plain_scalar(parser, &token) { - return false - } - yaml_insert_token(parser, -1, &token) - return true -} - -// Eat whitespaces and comments until the next token is found. -func yaml_parser_scan_to_next_token(parser *yaml_parser_t) bool { - - // Until the next token is not found. - for { - // Allow the BOM mark to start a line. - if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { - return false - } - if parser.mark.column == 0 && is_bom(parser.buffer, parser.buffer_pos) { - skip(parser) - } - - // Eat whitespaces. - // Tabs are allowed: - // - in the flow context - // - in the block context, but not at the beginning of the line or - // after '-', '?', or ':' (complex value). - if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { - return false - } - - for parser.buffer[parser.buffer_pos] == ' ' || ((parser.flow_level > 0 || !parser.simple_key_allowed) && parser.buffer[parser.buffer_pos] == '\t') { - skip(parser) - if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { - return false - } - } - - // Eat a comment until a line break. - if parser.buffer[parser.buffer_pos] == '#' { - if !yaml_parser_scan_head_comment(parser, parser.mark) { - return false - } - } - - // If it is a line break, eat it. - if is_break(parser.buffer, parser.buffer_pos) { - if parser.unread < 2 && !yaml_parser_update_buffer(parser, 2) { - return false - } - skip_line(parser) - - // In the block context, a new line may start a simple key. - if parser.flow_level == 0 { - parser.simple_key_allowed = true - } - } else { - break // We have found a token. - } - } - - return true -} - -// Scan a YAML-DIRECTIVE or TAG-DIRECTIVE token. -// -// Scope: -// %YAML 1.1 # a comment \n -// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -// %TAG !yaml! tag:yaml.org,2002: \n -// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -// -func yaml_parser_scan_directive(parser *yaml_parser_t, token *yaml_token_t) bool { - // Eat '%'. - start_mark := parser.mark - skip(parser) - - // Scan the directive name. - var name []byte - if !yaml_parser_scan_directive_name(parser, start_mark, &name) { - return false - } - - // Is it a YAML directive? - if bytes.Equal(name, []byte("YAML")) { - // Scan the VERSION directive value. - var major, minor int8 - if !yaml_parser_scan_version_directive_value(parser, start_mark, &major, &minor) { - return false - } - end_mark := parser.mark - - // Create a VERSION-DIRECTIVE token. - *token = yaml_token_t{ - typ: yaml_VERSION_DIRECTIVE_TOKEN, - start_mark: start_mark, - end_mark: end_mark, - major: major, - minor: minor, - } - - // Is it a TAG directive? - } else if bytes.Equal(name, []byte("TAG")) { - // Scan the TAG directive value. - var handle, prefix []byte - if !yaml_parser_scan_tag_directive_value(parser, start_mark, &handle, &prefix) { - return false - } - end_mark := parser.mark - - // Create a TAG-DIRECTIVE token. - *token = yaml_token_t{ - typ: yaml_TAG_DIRECTIVE_TOKEN, - start_mark: start_mark, - end_mark: end_mark, - value: handle, - prefix: prefix, - } - - // Unknown directive. - } else { - yaml_parser_set_scanner_error(parser, "while scanning a directive", - start_mark, "found unknown directive name") - return false - } - - // Eat the rest of the line including any comments. - if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { - return false - } - - for is_blank(parser.buffer, parser.buffer_pos) { - skip(parser) - if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { - return false - } - } - - if parser.buffer[parser.buffer_pos] == '#' { - // [Go] Discard this inline comment for the time being. - //if !yaml_parser_scan_line_comment(parser, start_mark) { - // return false - //} - for !is_breakz(parser.buffer, parser.buffer_pos) { - skip(parser) - if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { - return false - } - } - } - - // Check if we are at the end of the line. - if !is_breakz(parser.buffer, parser.buffer_pos) { - yaml_parser_set_scanner_error(parser, "while scanning a directive", - start_mark, "did not find expected comment or line break") - return false - } - - // Eat a line break. - if is_break(parser.buffer, parser.buffer_pos) { - if parser.unread < 2 && !yaml_parser_update_buffer(parser, 2) { - return false - } - skip_line(parser) - } - - return true -} - -// Scan the directive name. -// -// Scope: -// %YAML 1.1 # a comment \n -// ^^^^ -// %TAG !yaml! tag:yaml.org,2002: \n -// ^^^ -// -func yaml_parser_scan_directive_name(parser *yaml_parser_t, start_mark yaml_mark_t, name *[]byte) bool { - // Consume the directive name. - if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { - return false - } - - var s []byte - for is_alpha(parser.buffer, parser.buffer_pos) { - s = read(parser, s) - if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { - return false - } - } - - // Check if the name is empty. - if len(s) == 0 { - yaml_parser_set_scanner_error(parser, "while scanning a directive", - start_mark, "could not find expected directive name") - return false - } - - // Check for an blank character after the name. - if !is_blankz(parser.buffer, parser.buffer_pos) { - yaml_parser_set_scanner_error(parser, "while scanning a directive", - start_mark, "found unexpected non-alphabetical character") - return false - } - *name = s - return true -} - -// Scan the value of VERSION-DIRECTIVE. -// -// Scope: -// %YAML 1.1 # a comment \n -// ^^^^^^ -func yaml_parser_scan_version_directive_value(parser *yaml_parser_t, start_mark yaml_mark_t, major, minor *int8) bool { - // Eat whitespaces. - if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { - return false - } - for is_blank(parser.buffer, parser.buffer_pos) { - skip(parser) - if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { - return false - } - } - - // Consume the major version number. - if !yaml_parser_scan_version_directive_number(parser, start_mark, major) { - return false - } - - // Eat '.'. - if parser.buffer[parser.buffer_pos] != '.' { - return yaml_parser_set_scanner_error(parser, "while scanning a %YAML directive", - start_mark, "did not find expected digit or '.' character") - } - - skip(parser) - - // Consume the minor version number. - if !yaml_parser_scan_version_directive_number(parser, start_mark, minor) { - return false - } - return true -} - -const max_number_length = 2 - -// Scan the version number of VERSION-DIRECTIVE. -// -// Scope: -// %YAML 1.1 # a comment \n -// ^ -// %YAML 1.1 # a comment \n -// ^ -func yaml_parser_scan_version_directive_number(parser *yaml_parser_t, start_mark yaml_mark_t, number *int8) bool { - - // Repeat while the next character is digit. - if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { - return false - } - var value, length int8 - for is_digit(parser.buffer, parser.buffer_pos) { - // Check if the number is too long. - length++ - if length > max_number_length { - return yaml_parser_set_scanner_error(parser, "while scanning a %YAML directive", - start_mark, "found extremely long version number") - } - value = value*10 + int8(as_digit(parser.buffer, parser.buffer_pos)) - skip(parser) - if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { - return false - } - } - - // Check if the number was present. - if length == 0 { - return yaml_parser_set_scanner_error(parser, "while scanning a %YAML directive", - start_mark, "did not find expected version number") - } - *number = value - return true -} - -// Scan the value of a TAG-DIRECTIVE token. -// -// Scope: -// %TAG !yaml! tag:yaml.org,2002: \n -// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -// -func yaml_parser_scan_tag_directive_value(parser *yaml_parser_t, start_mark yaml_mark_t, handle, prefix *[]byte) bool { - var handle_value, prefix_value []byte - - // Eat whitespaces. - if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { - return false - } - - for is_blank(parser.buffer, parser.buffer_pos) { - skip(parser) - if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { - return false - } - } - - // Scan a handle. - if !yaml_parser_scan_tag_handle(parser, true, start_mark, &handle_value) { - return false - } - - // Expect a whitespace. - if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { - return false - } - if !is_blank(parser.buffer, parser.buffer_pos) { - yaml_parser_set_scanner_error(parser, "while scanning a %TAG directive", - start_mark, "did not find expected whitespace") - return false - } - - // Eat whitespaces. - for is_blank(parser.buffer, parser.buffer_pos) { - skip(parser) - if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { - return false - } - } - - // Scan a prefix. - if !yaml_parser_scan_tag_uri(parser, true, nil, start_mark, &prefix_value) { - return false - } - - // Expect a whitespace or line break. - if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { - return false - } - if !is_blankz(parser.buffer, parser.buffer_pos) { - yaml_parser_set_scanner_error(parser, "while scanning a %TAG directive", - start_mark, "did not find expected whitespace or line break") - return false - } - - *handle = handle_value - *prefix = prefix_value - return true -} - -func yaml_parser_scan_anchor(parser *yaml_parser_t, token *yaml_token_t, typ yaml_token_type_t) bool { - var s []byte - - // Eat the indicator character. - start_mark := parser.mark - skip(parser) - - // Consume the value. - if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { - return false - } - - for is_alpha(parser.buffer, parser.buffer_pos) { - s = read(parser, s) - if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { - return false - } - } - - end_mark := parser.mark - - /* - * Check if length of the anchor is greater than 0 and it is followed by - * a whitespace character or one of the indicators: - * - * '?', ':', ',', ']', '}', '%', '@', '`'. - */ - - if len(s) == 0 || - !(is_blankz(parser.buffer, parser.buffer_pos) || parser.buffer[parser.buffer_pos] == '?' || - parser.buffer[parser.buffer_pos] == ':' || parser.buffer[parser.buffer_pos] == ',' || - parser.buffer[parser.buffer_pos] == ']' || parser.buffer[parser.buffer_pos] == '}' || - parser.buffer[parser.buffer_pos] == '%' || parser.buffer[parser.buffer_pos] == '@' || - parser.buffer[parser.buffer_pos] == '`') { - context := "while scanning an alias" - if typ == yaml_ANCHOR_TOKEN { - context = "while scanning an anchor" - } - yaml_parser_set_scanner_error(parser, context, start_mark, - "did not find expected alphabetic or numeric character") - return false - } - - // Create a token. - *token = yaml_token_t{ - typ: typ, - start_mark: start_mark, - end_mark: end_mark, - value: s, - } - - return true -} - -/* - * Scan a TAG token. - */ - -func yaml_parser_scan_tag(parser *yaml_parser_t, token *yaml_token_t) bool { - var handle, suffix []byte - - start_mark := parser.mark - - // Check if the tag is in the canonical form. - if parser.unread < 2 && !yaml_parser_update_buffer(parser, 2) { - return false - } - - if parser.buffer[parser.buffer_pos+1] == '<' { - // Keep the handle as '' - - // Eat '!<' - skip(parser) - skip(parser) - - // Consume the tag value. - if !yaml_parser_scan_tag_uri(parser, false, nil, start_mark, &suffix) { - return false - } - - // Check for '>' and eat it. - if parser.buffer[parser.buffer_pos] != '>' { - yaml_parser_set_scanner_error(parser, "while scanning a tag", - start_mark, "did not find the expected '>'") - return false - } - - skip(parser) - } else { - // The tag has either the '!suffix' or the '!handle!suffix' form. - - // First, try to scan a handle. - if !yaml_parser_scan_tag_handle(parser, false, start_mark, &handle) { - return false - } - - // Check if it is, indeed, handle. - if handle[0] == '!' && len(handle) > 1 && handle[len(handle)-1] == '!' { - // Scan the suffix now. - if !yaml_parser_scan_tag_uri(parser, false, nil, start_mark, &suffix) { - return false - } - } else { - // It wasn't a handle after all. Scan the rest of the tag. - if !yaml_parser_scan_tag_uri(parser, false, handle, start_mark, &suffix) { - return false - } - - // Set the handle to '!'. - handle = []byte{'!'} - - // A special case: the '!' tag. Set the handle to '' and the - // suffix to '!'. - if len(suffix) == 0 { - handle, suffix = suffix, handle - } - } - } - - // Check the character which ends the tag. - if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { - return false - } - if !is_blankz(parser.buffer, parser.buffer_pos) { - yaml_parser_set_scanner_error(parser, "while scanning a tag", - start_mark, "did not find expected whitespace or line break") - return false - } - - end_mark := parser.mark - - // Create a token. - *token = yaml_token_t{ - typ: yaml_TAG_TOKEN, - start_mark: start_mark, - end_mark: end_mark, - value: handle, - suffix: suffix, - } - return true -} - -// Scan a tag handle. -func yaml_parser_scan_tag_handle(parser *yaml_parser_t, directive bool, start_mark yaml_mark_t, handle *[]byte) bool { - // Check the initial '!' character. - if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { - return false - } - if parser.buffer[parser.buffer_pos] != '!' { - yaml_parser_set_scanner_tag_error(parser, directive, - start_mark, "did not find expected '!'") - return false - } - - var s []byte - - // Copy the '!' character. - s = read(parser, s) - - // Copy all subsequent alphabetical and numerical characters. - if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { - return false - } - for is_alpha(parser.buffer, parser.buffer_pos) { - s = read(parser, s) - if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { - return false - } - } - - // Check if the trailing character is '!' and copy it. - if parser.buffer[parser.buffer_pos] == '!' { - s = read(parser, s) - } else { - // It's either the '!' tag or not really a tag handle. If it's a %TAG - // directive, it's an error. If it's a tag token, it must be a part of URI. - if directive && string(s) != "!" { - yaml_parser_set_scanner_tag_error(parser, directive, - start_mark, "did not find expected '!'") - return false - } - } - - *handle = s - return true -} - -// Scan a tag. -func yaml_parser_scan_tag_uri(parser *yaml_parser_t, directive bool, head []byte, start_mark yaml_mark_t, uri *[]byte) bool { - //size_t length = head ? strlen((char *)head) : 0 - var s []byte - hasTag := len(head) > 0 - - // Copy the head if needed. - // - // Note that we don't copy the leading '!' character. - if len(head) > 1 { - s = append(s, head[1:]...) - } - - // Scan the tag. - if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { - return false - } - - // The set of characters that may appear in URI is as follows: - // - // '0'-'9', 'A'-'Z', 'a'-'z', '_', '-', ';', '/', '?', ':', '@', '&', - // '=', '+', '$', ',', '.', '!', '~', '*', '\'', '(', ')', '[', ']', - // '%'. - // [Go] TODO Convert this into more reasonable logic. - for is_alpha(parser.buffer, parser.buffer_pos) || parser.buffer[parser.buffer_pos] == ';' || - parser.buffer[parser.buffer_pos] == '/' || parser.buffer[parser.buffer_pos] == '?' || - parser.buffer[parser.buffer_pos] == ':' || parser.buffer[parser.buffer_pos] == '@' || - parser.buffer[parser.buffer_pos] == '&' || parser.buffer[parser.buffer_pos] == '=' || - parser.buffer[parser.buffer_pos] == '+' || parser.buffer[parser.buffer_pos] == '$' || - parser.buffer[parser.buffer_pos] == ',' || parser.buffer[parser.buffer_pos] == '.' || - parser.buffer[parser.buffer_pos] == '!' || parser.buffer[parser.buffer_pos] == '~' || - parser.buffer[parser.buffer_pos] == '*' || parser.buffer[parser.buffer_pos] == '\'' || - parser.buffer[parser.buffer_pos] == '(' || parser.buffer[parser.buffer_pos] == ')' || - parser.buffer[parser.buffer_pos] == '[' || parser.buffer[parser.buffer_pos] == ']' || - parser.buffer[parser.buffer_pos] == '%' { - // Check if it is a URI-escape sequence. - if parser.buffer[parser.buffer_pos] == '%' { - if !yaml_parser_scan_uri_escapes(parser, directive, start_mark, &s) { - return false - } - } else { - s = read(parser, s) - } - if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { - return false - } - hasTag = true - } - - if !hasTag { - yaml_parser_set_scanner_tag_error(parser, directive, - start_mark, "did not find expected tag URI") - return false - } - *uri = s - return true -} - -// Decode an URI-escape sequence corresponding to a single UTF-8 character. -func yaml_parser_scan_uri_escapes(parser *yaml_parser_t, directive bool, start_mark yaml_mark_t, s *[]byte) bool { - - // Decode the required number of characters. - w := 1024 - for w > 0 { - // Check for a URI-escaped octet. - if parser.unread < 3 && !yaml_parser_update_buffer(parser, 3) { - return false - } - - if !(parser.buffer[parser.buffer_pos] == '%' && - is_hex(parser.buffer, parser.buffer_pos+1) && - is_hex(parser.buffer, parser.buffer_pos+2)) { - return yaml_parser_set_scanner_tag_error(parser, directive, - start_mark, "did not find URI escaped octet") - } - - // Get the octet. - octet := byte((as_hex(parser.buffer, parser.buffer_pos+1) << 4) + as_hex(parser.buffer, parser.buffer_pos+2)) - - // If it is the leading octet, determine the length of the UTF-8 sequence. - if w == 1024 { - w = width(octet) - if w == 0 { - return yaml_parser_set_scanner_tag_error(parser, directive, - start_mark, "found an incorrect leading UTF-8 octet") - } - } else { - // Check if the trailing octet is correct. - if octet&0xC0 != 0x80 { - return yaml_parser_set_scanner_tag_error(parser, directive, - start_mark, "found an incorrect trailing UTF-8 octet") - } - } - - // Copy the octet and move the pointers. - *s = append(*s, octet) - skip(parser) - skip(parser) - skip(parser) - w-- - } - return true -} - -// Scan a block scalar. -func yaml_parser_scan_block_scalar(parser *yaml_parser_t, token *yaml_token_t, literal bool) bool { - // Eat the indicator '|' or '>'. - start_mark := parser.mark - skip(parser) - - // Scan the additional block scalar indicators. - if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { - return false - } - - // Check for a chomping indicator. - var chomping, increment int - if parser.buffer[parser.buffer_pos] == '+' || parser.buffer[parser.buffer_pos] == '-' { - // Set the chomping method and eat the indicator. - if parser.buffer[parser.buffer_pos] == '+' { - chomping = +1 - } else { - chomping = -1 - } - skip(parser) - - // Check for an indentation indicator. - if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { - return false - } - if is_digit(parser.buffer, parser.buffer_pos) { - // Check that the indentation is greater than 0. - if parser.buffer[parser.buffer_pos] == '0' { - yaml_parser_set_scanner_error(parser, "while scanning a block scalar", - start_mark, "found an indentation indicator equal to 0") - return false - } - - // Get the indentation level and eat the indicator. - increment = as_digit(parser.buffer, parser.buffer_pos) - skip(parser) - } - - } else if is_digit(parser.buffer, parser.buffer_pos) { - // Do the same as above, but in the opposite order. - - if parser.buffer[parser.buffer_pos] == '0' { - yaml_parser_set_scanner_error(parser, "while scanning a block scalar", - start_mark, "found an indentation indicator equal to 0") - return false - } - increment = as_digit(parser.buffer, parser.buffer_pos) - skip(parser) - - if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { - return false - } - if parser.buffer[parser.buffer_pos] == '+' || parser.buffer[parser.buffer_pos] == '-' { - if parser.buffer[parser.buffer_pos] == '+' { - chomping = +1 - } else { - chomping = -1 - } - skip(parser) - } - } - - // Eat whitespaces and comments to the end of the line. - if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { - return false - } - for is_blank(parser.buffer, parser.buffer_pos) { - skip(parser) - if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { - return false - } - } - if parser.buffer[parser.buffer_pos] == '#' { - if !yaml_parser_scan_line_comment(parser, start_mark) { - return false - } - } - - // Check if we are at the end of the line. - if !is_breakz(parser.buffer, parser.buffer_pos) { - yaml_parser_set_scanner_error(parser, "while scanning a block scalar", - start_mark, "did not find expected comment or line break") - return false - } - - // Eat a line break. - if is_break(parser.buffer, parser.buffer_pos) { - if parser.unread < 2 && !yaml_parser_update_buffer(parser, 2) { - return false - } - skip_line(parser) - } - - end_mark := parser.mark - - // Set the indentation level if it was specified. - var indent int - if increment > 0 { - if parser.indent >= 0 { - indent = parser.indent + increment - } else { - indent = increment - } - } - - // Scan the leading line breaks and determine the indentation level if needed. - var s, leading_break, trailing_breaks []byte - if !yaml_parser_scan_block_scalar_breaks(parser, &indent, &trailing_breaks, start_mark, &end_mark) { - return false - } - - // Scan the block scalar content. - if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { - return false - } - var leading_blank, trailing_blank bool - for parser.mark.column == indent && !is_z(parser.buffer, parser.buffer_pos) { - // We are at the beginning of a non-empty line. - - // Is it a trailing whitespace? - trailing_blank = is_blank(parser.buffer, parser.buffer_pos) - - // Check if we need to fold the leading line break. - if !literal && !leading_blank && !trailing_blank && len(leading_break) > 0 && leading_break[0] == '\n' { - // Do we need to join the lines by space? - if len(trailing_breaks) == 0 { - s = append(s, ' ') - } - } else { - s = append(s, leading_break...) - } - leading_break = leading_break[:0] - - // Append the remaining line breaks. - s = append(s, trailing_breaks...) - trailing_breaks = trailing_breaks[:0] - - // Is it a leading whitespace? - leading_blank = is_blank(parser.buffer, parser.buffer_pos) - - // Consume the current line. - for !is_breakz(parser.buffer, parser.buffer_pos) { - s = read(parser, s) - if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { - return false - } - } - - // Consume the line break. - if parser.unread < 2 && !yaml_parser_update_buffer(parser, 2) { - return false - } - - leading_break = read_line(parser, leading_break) - - // Eat the following indentation spaces and line breaks. - if !yaml_parser_scan_block_scalar_breaks(parser, &indent, &trailing_breaks, start_mark, &end_mark) { - return false - } - } - - // Chomp the tail. - if chomping != -1 { - s = append(s, leading_break...) - } - if chomping == 1 { - s = append(s, trailing_breaks...) - } - - // Create a token. - *token = yaml_token_t{ - typ: yaml_SCALAR_TOKEN, - start_mark: start_mark, - end_mark: end_mark, - value: s, - style: yaml_LITERAL_SCALAR_STYLE, - } - if !literal { - token.style = yaml_FOLDED_SCALAR_STYLE - } - return true -} - -// Scan indentation spaces and line breaks for a block scalar. Determine the -// indentation level if needed. -func yaml_parser_scan_block_scalar_breaks(parser *yaml_parser_t, indent *int, breaks *[]byte, start_mark yaml_mark_t, end_mark *yaml_mark_t) bool { - *end_mark = parser.mark - - // Eat the indentation spaces and line breaks. - max_indent := 0 - for { - // Eat the indentation spaces. - if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { - return false - } - for (*indent == 0 || parser.mark.column < *indent) && is_space(parser.buffer, parser.buffer_pos) { - skip(parser) - if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { - return false - } - } - if parser.mark.column > max_indent { - max_indent = parser.mark.column - } - - // Check for a tab character messing the indentation. - if (*indent == 0 || parser.mark.column < *indent) && is_tab(parser.buffer, parser.buffer_pos) { - return yaml_parser_set_scanner_error(parser, "while scanning a block scalar", - start_mark, "found a tab character where an indentation space is expected") - } - - // Have we found a non-empty line? - if !is_break(parser.buffer, parser.buffer_pos) { - break - } - - // Consume the line break. - if parser.unread < 2 && !yaml_parser_update_buffer(parser, 2) { - return false - } - // [Go] Should really be returning breaks instead. - *breaks = read_line(parser, *breaks) - *end_mark = parser.mark - } - - // Determine the indentation level if needed. - if *indent == 0 { - *indent = max_indent - if *indent < parser.indent+1 { - *indent = parser.indent + 1 - } - if *indent < 1 { - *indent = 1 - } - } - return true -} - -// Scan a quoted scalar. -func yaml_parser_scan_flow_scalar(parser *yaml_parser_t, token *yaml_token_t, single bool) bool { - // Eat the left quote. - start_mark := parser.mark - skip(parser) - - // Consume the content of the quoted scalar. - var s, leading_break, trailing_breaks, whitespaces []byte - for { - // Check that there are no document indicators at the beginning of the line. - if parser.unread < 4 && !yaml_parser_update_buffer(parser, 4) { - return false - } - - if parser.mark.column == 0 && - ((parser.buffer[parser.buffer_pos+0] == '-' && - parser.buffer[parser.buffer_pos+1] == '-' && - parser.buffer[parser.buffer_pos+2] == '-') || - (parser.buffer[parser.buffer_pos+0] == '.' && - parser.buffer[parser.buffer_pos+1] == '.' && - parser.buffer[parser.buffer_pos+2] == '.')) && - is_blankz(parser.buffer, parser.buffer_pos+3) { - yaml_parser_set_scanner_error(parser, "while scanning a quoted scalar", - start_mark, "found unexpected document indicator") - return false - } - - // Check for EOF. - if is_z(parser.buffer, parser.buffer_pos) { - yaml_parser_set_scanner_error(parser, "while scanning a quoted scalar", - start_mark, "found unexpected end of stream") - return false - } - - // Consume non-blank characters. - leading_blanks := false - for !is_blankz(parser.buffer, parser.buffer_pos) { - if single && parser.buffer[parser.buffer_pos] == '\'' && parser.buffer[parser.buffer_pos+1] == '\'' { - // Is is an escaped single quote. - s = append(s, '\'') - skip(parser) - skip(parser) - - } else if single && parser.buffer[parser.buffer_pos] == '\'' { - // It is a right single quote. - break - } else if !single && parser.buffer[parser.buffer_pos] == '"' { - // It is a right double quote. - break - - } else if !single && parser.buffer[parser.buffer_pos] == '\\' && is_break(parser.buffer, parser.buffer_pos+1) { - // It is an escaped line break. - if parser.unread < 3 && !yaml_parser_update_buffer(parser, 3) { - return false - } - skip(parser) - skip_line(parser) - leading_blanks = true - break - - } else if !single && parser.buffer[parser.buffer_pos] == '\\' { - // It is an escape sequence. - code_length := 0 - - // Check the escape character. - switch parser.buffer[parser.buffer_pos+1] { - case '0': - s = append(s, 0) - case 'a': - s = append(s, '\x07') - case 'b': - s = append(s, '\x08') - case 't', '\t': - s = append(s, '\x09') - case 'n': - s = append(s, '\x0A') - case 'v': - s = append(s, '\x0B') - case 'f': - s = append(s, '\x0C') - case 'r': - s = append(s, '\x0D') - case 'e': - s = append(s, '\x1B') - case ' ': - s = append(s, '\x20') - case '"': - s = append(s, '"') - case '\'': - s = append(s, '\'') - case '\\': - s = append(s, '\\') - case 'N': // NEL (#x85) - s = append(s, '\xC2') - s = append(s, '\x85') - case '_': // #xA0 - s = append(s, '\xC2') - s = append(s, '\xA0') - case 'L': // LS (#x2028) - s = append(s, '\xE2') - s = append(s, '\x80') - s = append(s, '\xA8') - case 'P': // PS (#x2029) - s = append(s, '\xE2') - s = append(s, '\x80') - s = append(s, '\xA9') - case 'x': - code_length = 2 - case 'u': - code_length = 4 - case 'U': - code_length = 8 - default: - yaml_parser_set_scanner_error(parser, "while parsing a quoted scalar", - start_mark, "found unknown escape character") - return false - } - - skip(parser) - skip(parser) - - // Consume an arbitrary escape code. - if code_length > 0 { - var value int - - // Scan the character value. - if parser.unread < code_length && !yaml_parser_update_buffer(parser, code_length) { - return false - } - for k := 0; k < code_length; k++ { - if !is_hex(parser.buffer, parser.buffer_pos+k) { - yaml_parser_set_scanner_error(parser, "while parsing a quoted scalar", - start_mark, "did not find expected hexdecimal number") - return false - } - value = (value << 4) + as_hex(parser.buffer, parser.buffer_pos+k) - } - - // Check the value and write the character. - if (value >= 0xD800 && value <= 0xDFFF) || value > 0x10FFFF { - yaml_parser_set_scanner_error(parser, "while parsing a quoted scalar", - start_mark, "found invalid Unicode character escape code") - return false - } - if value <= 0x7F { - s = append(s, byte(value)) - } else if value <= 0x7FF { - s = append(s, byte(0xC0+(value>>6))) - s = append(s, byte(0x80+(value&0x3F))) - } else if value <= 0xFFFF { - s = append(s, byte(0xE0+(value>>12))) - s = append(s, byte(0x80+((value>>6)&0x3F))) - s = append(s, byte(0x80+(value&0x3F))) - } else { - s = append(s, byte(0xF0+(value>>18))) - s = append(s, byte(0x80+((value>>12)&0x3F))) - s = append(s, byte(0x80+((value>>6)&0x3F))) - s = append(s, byte(0x80+(value&0x3F))) - } - - // Advance the pointer. - for k := 0; k < code_length; k++ { - skip(parser) - } - } - } else { - // It is a non-escaped non-blank character. - s = read(parser, s) - } - if parser.unread < 2 && !yaml_parser_update_buffer(parser, 2) { - return false - } - } - - if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { - return false - } - - // Check if we are at the end of the scalar. - if single { - if parser.buffer[parser.buffer_pos] == '\'' { - break - } - } else { - if parser.buffer[parser.buffer_pos] == '"' { - break - } - } - - // Consume blank characters. - for is_blank(parser.buffer, parser.buffer_pos) || is_break(parser.buffer, parser.buffer_pos) { - if is_blank(parser.buffer, parser.buffer_pos) { - // Consume a space or a tab character. - if !leading_blanks { - whitespaces = read(parser, whitespaces) - } else { - skip(parser) - } - } else { - if parser.unread < 2 && !yaml_parser_update_buffer(parser, 2) { - return false - } - - // Check if it is a first line break. - if !leading_blanks { - whitespaces = whitespaces[:0] - leading_break = read_line(parser, leading_break) - leading_blanks = true - } else { - trailing_breaks = read_line(parser, trailing_breaks) - } - } - if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { - return false - } - } - - // Join the whitespaces or fold line breaks. - if leading_blanks { - // Do we need to fold line breaks? - if len(leading_break) > 0 && leading_break[0] == '\n' { - if len(trailing_breaks) == 0 { - s = append(s, ' ') - } else { - s = append(s, trailing_breaks...) - } - } else { - s = append(s, leading_break...) - s = append(s, trailing_breaks...) - } - trailing_breaks = trailing_breaks[:0] - leading_break = leading_break[:0] - } else { - s = append(s, whitespaces...) - whitespaces = whitespaces[:0] - } - } - - // Eat the right quote. - skip(parser) - end_mark := parser.mark - - // Create a token. - *token = yaml_token_t{ - typ: yaml_SCALAR_TOKEN, - start_mark: start_mark, - end_mark: end_mark, - value: s, - style: yaml_SINGLE_QUOTED_SCALAR_STYLE, - } - if !single { - token.style = yaml_DOUBLE_QUOTED_SCALAR_STYLE - } - return true -} - -// Scan a plain scalar. -func yaml_parser_scan_plain_scalar(parser *yaml_parser_t, token *yaml_token_t) bool { - - var s, leading_break, trailing_breaks, whitespaces []byte - var leading_blanks bool - var indent = parser.indent + 1 - - start_mark := parser.mark - end_mark := parser.mark - - // Consume the content of the plain scalar. - for { - // Check for a document indicator. - if parser.unread < 4 && !yaml_parser_update_buffer(parser, 4) { - return false - } - if parser.mark.column == 0 && - ((parser.buffer[parser.buffer_pos+0] == '-' && - parser.buffer[parser.buffer_pos+1] == '-' && - parser.buffer[parser.buffer_pos+2] == '-') || - (parser.buffer[parser.buffer_pos+0] == '.' && - parser.buffer[parser.buffer_pos+1] == '.' && - parser.buffer[parser.buffer_pos+2] == '.')) && - is_blankz(parser.buffer, parser.buffer_pos+3) { - break - } - - // Check for a comment. - if parser.buffer[parser.buffer_pos] == '#' { - break - } - - // Consume non-blank characters. - for !is_blankz(parser.buffer, parser.buffer_pos) { - - // Check for indicators that may end a plain scalar. - if (parser.buffer[parser.buffer_pos] == ':' && is_blankz(parser.buffer, parser.buffer_pos+1)) || - (parser.flow_level > 0 && - (parser.buffer[parser.buffer_pos] == ',' || - parser.buffer[parser.buffer_pos] == '?' || parser.buffer[parser.buffer_pos] == '[' || - parser.buffer[parser.buffer_pos] == ']' || parser.buffer[parser.buffer_pos] == '{' || - parser.buffer[parser.buffer_pos] == '}')) { - break - } - - // Check if we need to join whitespaces and breaks. - if leading_blanks || len(whitespaces) > 0 { - if leading_blanks { - // Do we need to fold line breaks? - if leading_break[0] == '\n' { - if len(trailing_breaks) == 0 { - s = append(s, ' ') - } else { - s = append(s, trailing_breaks...) - } - } else { - s = append(s, leading_break...) - s = append(s, trailing_breaks...) - } - trailing_breaks = trailing_breaks[:0] - leading_break = leading_break[:0] - leading_blanks = false - } else { - s = append(s, whitespaces...) - whitespaces = whitespaces[:0] - } - } - - // Copy the character. - s = read(parser, s) - - end_mark = parser.mark - if parser.unread < 2 && !yaml_parser_update_buffer(parser, 2) { - return false - } - } - - // Is it the end? - if !(is_blank(parser.buffer, parser.buffer_pos) || is_break(parser.buffer, parser.buffer_pos)) { - break - } - - // Consume blank characters. - if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { - return false - } - - for is_blank(parser.buffer, parser.buffer_pos) || is_break(parser.buffer, parser.buffer_pos) { - if is_blank(parser.buffer, parser.buffer_pos) { - - // Check for tab characters that abuse indentation. - if leading_blanks && parser.mark.column < indent && is_tab(parser.buffer, parser.buffer_pos) { - yaml_parser_set_scanner_error(parser, "while scanning a plain scalar", - start_mark, "found a tab character that violates indentation") - return false - } - - // Consume a space or a tab character. - if !leading_blanks { - whitespaces = read(parser, whitespaces) - } else { - skip(parser) - } - } else { - if parser.unread < 2 && !yaml_parser_update_buffer(parser, 2) { - return false - } - - // Check if it is a first line break. - if !leading_blanks { - whitespaces = whitespaces[:0] - leading_break = read_line(parser, leading_break) - leading_blanks = true - } else { - trailing_breaks = read_line(parser, trailing_breaks) - } - } - if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { - return false - } - } - - // Check indentation level. - if parser.flow_level == 0 && parser.mark.column < indent { - break - } - } - - // Create a token. - *token = yaml_token_t{ - typ: yaml_SCALAR_TOKEN, - start_mark: start_mark, - end_mark: end_mark, - value: s, - style: yaml_PLAIN_SCALAR_STYLE, - } - - // Note that we change the 'simple_key_allowed' flag. - if leading_blanks { - parser.simple_key_allowed = true - } - return true -} - -func yaml_parser_scan_line_comment(parser *yaml_parser_t, after yaml_mark_t) bool { - if parser.mark.column == 0 { - return true - } - - parser.comments = append(parser.comments, yaml_comment_t{after: after}) - comment := &parser.comments[len(parser.comments)-1].line - - for peek := 0; peek < 512; peek++ { - if parser.unread < peek+1 && !yaml_parser_update_buffer(parser, peek+1) { - break - } - if is_blank(parser.buffer, parser.buffer_pos+peek) { - continue - } - if parser.buffer[parser.buffer_pos+peek] == '#' { - if len(*comment) > 0 { - *comment = append(*comment, '\n') - } - for !is_breakz(parser.buffer, parser.buffer_pos+peek) { - *comment = append(*comment, parser.buffer[parser.buffer_pos+peek]) - peek++ - if parser.unread < peek+1 && !yaml_parser_update_buffer(parser, peek+1) { - return false - } - } - - // Skip until after the consumed comment line. - until := parser.buffer_pos + peek - for parser.buffer_pos < until { - if is_break(parser.buffer, parser.buffer_pos) { - //break // Leave the break in the buffer so calling this function twice is safe. - if parser.unread < 2 && !yaml_parser_update_buffer(parser, 2) { - return false - } - skip_line(parser) - } else { - skip(parser) - } - } - } - break - } - return true -} - -func yaml_parser_scan_head_comment(parser *yaml_parser_t, after yaml_mark_t) bool { - parser.comments = append(parser.comments, yaml_comment_t{after: after}) - comment := &parser.comments[len(parser.comments)-1].head - breaks := false - for peek := 0; peek < 512; peek++ { - if parser.unread < peek+1 && !yaml_parser_update_buffer(parser, peek+1) { - break - } - if parser.buffer[parser.buffer_pos+peek] == 0 { - break - } - if is_blank(parser.buffer, parser.buffer_pos+peek) { - continue - } - if is_break(parser.buffer, parser.buffer_pos+peek) { - if !breaks { - *comment = append(*comment, '\n') - } - breaks = true - } else if parser.buffer[parser.buffer_pos+peek] == '#' { - if len(*comment) > 0 { - *comment = append(*comment, '\n') - } - breaks = false - for !is_breakz(parser.buffer, parser.buffer_pos+peek) { - *comment = append(*comment, parser.buffer[parser.buffer_pos+peek]) - peek++ - if parser.unread < peek+1 && !yaml_parser_update_buffer(parser, peek+1) { - return false - } - } - - // Skip until after the consumed comment line. - until := parser.buffer_pos + peek - for parser.buffer_pos < until { - if is_break(parser.buffer, parser.buffer_pos) { - if parser.unread < 2 && !yaml_parser_update_buffer(parser, 2) { - return false - } - skip_line(parser) - } else { - skip(parser) - } - } - peek = 0 - } else { - break - } - } - return true -} - -func yaml_parser_scan_foot_comment(parser *yaml_parser_t, after yaml_mark_t) bool { - parser.comments = append(parser.comments, yaml_comment_t{after: after}) - comment := &parser.comments[len(parser.comments)-1].foot - original := *comment - breaks := false - peek := 0 - for ; peek < 32768; peek++ { - if parser.unread < peek+1 && !yaml_parser_update_buffer(parser, peek+1) { - break - } - c := parser.buffer[parser.buffer_pos+peek] - if c == 0 { - break - } - if is_blank(parser.buffer, parser.buffer_pos+peek) { - continue - } - if is_break(parser.buffer, parser.buffer_pos+peek) { - if breaks { - break - } - breaks = true - } else if c == '#' { - if len(*comment) > 0 { - *comment = append(*comment, '\n') - } - for !is_breakz(parser.buffer, parser.buffer_pos+peek) { - *comment = append(*comment, parser.buffer[parser.buffer_pos+peek]) - peek++ - if parser.unread < peek+1 && !yaml_parser_update_buffer(parser, peek+1) { - return false - } - } - breaks = true - } else if c == ']' || c == '}' { - break - } else { - // Abort and allow that next line to have the comment as its header. - *comment = original - return true - } - } - - // Skip until after the consumed comment lines. - until := parser.buffer_pos + peek - for parser.buffer_pos < until { - if is_break(parser.buffer, parser.buffer_pos) { - if parser.unread < 2 && !yaml_parser_update_buffer(parser, 2) { - return false - } - skip_line(parser) - } else { - skip(parser) - } - } - return true -} diff --git a/vendor/gopkg.in/yaml.v3/sorter.go b/vendor/gopkg.in/yaml.v3/sorter.go deleted file mode 100644 index 9210ece7..00000000 --- a/vendor/gopkg.in/yaml.v3/sorter.go +++ /dev/null @@ -1,134 +0,0 @@ -// -// Copyright (c) 2011-2019 Canonical Ltd -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package yaml - -import ( - "reflect" - "unicode" -) - -type keyList []reflect.Value - -func (l keyList) Len() int { return len(l) } -func (l keyList) Swap(i, j int) { l[i], l[j] = l[j], l[i] } -func (l keyList) Less(i, j int) bool { - a := l[i] - b := l[j] - ak := a.Kind() - bk := b.Kind() - for (ak == reflect.Interface || ak == reflect.Ptr) && !a.IsNil() { - a = a.Elem() - ak = a.Kind() - } - for (bk == reflect.Interface || bk == reflect.Ptr) && !b.IsNil() { - b = b.Elem() - bk = b.Kind() - } - af, aok := keyFloat(a) - bf, bok := keyFloat(b) - if aok && bok { - if af != bf { - return af < bf - } - if ak != bk { - return ak < bk - } - return numLess(a, b) - } - if ak != reflect.String || bk != reflect.String { - return ak < bk - } - ar, br := []rune(a.String()), []rune(b.String()) - digits := false - for i := 0; i < len(ar) && i < len(br); i++ { - if ar[i] == br[i] { - digits = unicode.IsDigit(ar[i]) - continue - } - al := unicode.IsLetter(ar[i]) - bl := unicode.IsLetter(br[i]) - if al && bl { - return ar[i] < br[i] - } - if al || bl { - if digits { - return al - } else { - return bl - } - } - var ai, bi int - var an, bn int64 - if ar[i] == '0' || br[i] == '0' { - for j := i - 1; j >= 0 && unicode.IsDigit(ar[j]); j-- { - if ar[j] != '0' { - an = 1 - bn = 1 - break - } - } - } - for ai = i; ai < len(ar) && unicode.IsDigit(ar[ai]); ai++ { - an = an*10 + int64(ar[ai]-'0') - } - for bi = i; bi < len(br) && unicode.IsDigit(br[bi]); bi++ { - bn = bn*10 + int64(br[bi]-'0') - } - if an != bn { - return an < bn - } - if ai != bi { - return ai < bi - } - return ar[i] < br[i] - } - return len(ar) < len(br) -} - -// keyFloat returns a float value for v if it is a number/bool -// and whether it is a number/bool or not. -func keyFloat(v reflect.Value) (f float64, ok bool) { - switch v.Kind() { - case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: - return float64(v.Int()), true - case reflect.Float32, reflect.Float64: - return v.Float(), true - case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr: - return float64(v.Uint()), true - case reflect.Bool: - if v.Bool() { - return 1, true - } - return 0, true - } - return 0, false -} - -// numLess returns whether a < b. -// a and b must necessarily have the same kind. -func numLess(a, b reflect.Value) bool { - switch a.Kind() { - case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: - return a.Int() < b.Int() - case reflect.Float32, reflect.Float64: - return a.Float() < b.Float() - case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr: - return a.Uint() < b.Uint() - case reflect.Bool: - return !a.Bool() && b.Bool() - } - panic("not a number") -} diff --git a/vendor/gopkg.in/yaml.v3/writerc.go b/vendor/gopkg.in/yaml.v3/writerc.go deleted file mode 100644 index b8a116bf..00000000 --- a/vendor/gopkg.in/yaml.v3/writerc.go +++ /dev/null @@ -1,48 +0,0 @@ -// -// Copyright (c) 2011-2019 Canonical Ltd -// Copyright (c) 2006-2010 Kirill Simonov -// -// 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. - -package yaml - -// Set the writer error and return false. -func yaml_emitter_set_writer_error(emitter *yaml_emitter_t, problem string) bool { - emitter.error = yaml_WRITER_ERROR - emitter.problem = problem - return false -} - -// Flush the output buffer. -func yaml_emitter_flush(emitter *yaml_emitter_t) bool { - if emitter.write_handler == nil { - panic("write handler not set") - } - - // Check if the buffer is empty. - if emitter.buffer_pos == 0 { - return true - } - - if err := emitter.write_handler(emitter, emitter.buffer[:emitter.buffer_pos]); err != nil { - return yaml_emitter_set_writer_error(emitter, "write error: "+err.Error()) - } - emitter.buffer_pos = 0 - return true -} diff --git a/vendor/gopkg.in/yaml.v3/yaml.go b/vendor/gopkg.in/yaml.v3/yaml.go deleted file mode 100644 index b5d35a50..00000000 --- a/vendor/gopkg.in/yaml.v3/yaml.go +++ /dev/null @@ -1,662 +0,0 @@ -// -// Copyright (c) 2011-2019 Canonical Ltd -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -// Package yaml implements YAML support for the Go language. -// -// Source code and other details for the project are available at GitHub: -// -// https://github.com/go-yaml/yaml -// -package yaml - -import ( - "errors" - "fmt" - "io" - "reflect" - "strings" - "sync" - "unicode/utf8" -) - -// The Unmarshaler interface may be implemented by types to customize their -// behavior when being unmarshaled from a YAML document. -type Unmarshaler interface { - UnmarshalYAML(value *Node) error -} - -type obsoleteUnmarshaler interface { - UnmarshalYAML(unmarshal func(interface{}) error) error -} - -// The Marshaler interface may be implemented by types to customize their -// behavior when being marshaled into a YAML document. The returned value -// is marshaled in place of the original value implementing Marshaler. -// -// If an error is returned by MarshalYAML, the marshaling procedure stops -// and returns with the provided error. -type Marshaler interface { - MarshalYAML() (interface{}, error) -} - -// Unmarshal decodes the first document found within the in byte slice -// and assigns decoded values into the out value. -// -// Maps and pointers (to a struct, string, int, etc) are accepted as out -// values. If an internal pointer within a struct is not initialized, -// the yaml package will initialize it if necessary for unmarshalling -// the provided data. The out parameter must not be nil. -// -// The type of the decoded values should be compatible with the respective -// values in out. If one or more values cannot be decoded due to a type -// mismatches, decoding continues partially until the end of the YAML -// content, and a *yaml.TypeError is returned with details for all -// missed values. -// -// Struct fields are only unmarshalled if they are exported (have an -// upper case first letter), and are unmarshalled using the field name -// lowercased as the default key. Custom keys may be defined via the -// "yaml" name in the field tag: the content preceding the first comma -// is used as the key, and the following comma-separated options are -// used to tweak the marshalling process (see Marshal). -// Conflicting names result in a runtime error. -// -// For example: -// -// type T struct { -// F int `yaml:"a,omitempty"` -// B int -// } -// var t T -// yaml.Unmarshal([]byte("a: 1\nb: 2"), &t) -// -// See the documentation of Marshal for the format of tags and a list of -// supported tag options. -// -func Unmarshal(in []byte, out interface{}) (err error) { - return unmarshal(in, out, false) -} - -// A Decorder reads and decodes YAML values from an input stream. -type Decoder struct { - parser *parser - knownFields bool -} - -// NewDecoder returns a new decoder that reads from r. -// -// The decoder introduces its own buffering and may read -// data from r beyond the YAML values requested. -func NewDecoder(r io.Reader) *Decoder { - return &Decoder{ - parser: newParserFromReader(r), - } -} - -// KnownFields ensures that the keys in decoded mappings to -// exist as fields in the struct being decoded into. -func (dec *Decoder) KnownFields(enable bool) { - dec.knownFields = enable -} - -// Decode reads the next YAML-encoded value from its input -// and stores it in the value pointed to by v. -// -// See the documentation for Unmarshal for details about the -// conversion of YAML into a Go value. -func (dec *Decoder) Decode(v interface{}) (err error) { - d := newDecoder() - d.knownFields = dec.knownFields - defer handleErr(&err) - node := dec.parser.parse() - if node == nil { - return io.EOF - } - out := reflect.ValueOf(v) - if out.Kind() == reflect.Ptr && !out.IsNil() { - out = out.Elem() - } - d.unmarshal(node, out) - if len(d.terrors) > 0 { - return &TypeError{d.terrors} - } - return nil -} - -// Decode decodes the node and stores its data into the value pointed to by v. -// -// See the documentation for Unmarshal for details about the -// conversion of YAML into a Go value. -func (n *Node) Decode(v interface{}) (err error) { - d := newDecoder() - defer handleErr(&err) - out := reflect.ValueOf(v) - if out.Kind() == reflect.Ptr && !out.IsNil() { - out = out.Elem() - } - d.unmarshal(n, out) - if len(d.terrors) > 0 { - return &TypeError{d.terrors} - } - return nil -} - -func unmarshal(in []byte, out interface{}, strict bool) (err error) { - defer handleErr(&err) - d := newDecoder() - p := newParser(in) - defer p.destroy() - node := p.parse() - if node != nil { - v := reflect.ValueOf(out) - if v.Kind() == reflect.Ptr && !v.IsNil() { - v = v.Elem() - } - d.unmarshal(node, v) - } - if len(d.terrors) > 0 { - return &TypeError{d.terrors} - } - return nil -} - -// Marshal serializes the value provided into a YAML document. The structure -// of the generated document will reflect the structure of the value itself. -// Maps and pointers (to struct, string, int, etc) are accepted as the in value. -// -// Struct fields are only marshalled if they are exported (have an upper case -// first letter), and are marshalled using the field name lowercased as the -// default key. Custom keys may be defined via the "yaml" name in the field -// tag: the content preceding the first comma is used as the key, and the -// following comma-separated options are used to tweak the marshalling process. -// Conflicting names result in a runtime error. -// -// The field tag format accepted is: -// -// `(...) yaml:"[<key>][,<flag1>[,<flag2>]]" (...)` -// -// The following flags are currently supported: -// -// omitempty Only include the field if it's not set to the zero -// value for the type or to empty slices or maps. -// Zero valued structs will be omitted if all their public -// fields are zero, unless they implement an IsZero -// method (see the IsZeroer interface type), in which -// case the field will be included if that method returns true. -// -// flow Marshal using a flow style (useful for structs, -// sequences and maps). -// -// inline Inline the field, which must be a struct or a map, -// causing all of its fields or keys to be processed as if -// they were part of the outer struct. For maps, keys must -// not conflict with the yaml keys of other struct fields. -// -// In addition, if the key is "-", the field is ignored. -// -// For example: -// -// type T struct { -// F int `yaml:"a,omitempty"` -// B int -// } -// yaml.Marshal(&T{B: 2}) // Returns "b: 2\n" -// yaml.Marshal(&T{F: 1}} // Returns "a: 1\nb: 0\n" -// -func Marshal(in interface{}) (out []byte, err error) { - defer handleErr(&err) - e := newEncoder() - defer e.destroy() - e.marshalDoc("", reflect.ValueOf(in)) - e.finish() - out = e.out - return -} - -// An Encoder writes YAML values to an output stream. -type Encoder struct { - encoder *encoder -} - -// NewEncoder returns a new encoder that writes to w. -// The Encoder should be closed after use to flush all data -// to w. -func NewEncoder(w io.Writer) *Encoder { - return &Encoder{ - encoder: newEncoderWithWriter(w), - } -} - -// Encode writes the YAML encoding of v to the stream. -// If multiple items are encoded to the stream, the -// second and subsequent document will be preceded -// with a "---" document separator, but the first will not. -// -// See the documentation for Marshal for details about the conversion of Go -// values to YAML. -func (e *Encoder) Encode(v interface{}) (err error) { - defer handleErr(&err) - e.encoder.marshalDoc("", reflect.ValueOf(v)) - return nil -} - -// SetIndent changes the used indentation used when encoding. -func (e *Encoder) SetIndent(spaces int) { - if spaces < 0 { - panic("yaml: cannot indent to a negative number of spaces") - } - e.encoder.indent = spaces -} - -// Close closes the encoder by writing any remaining data. -// It does not write a stream terminating string "...". -func (e *Encoder) Close() (err error) { - defer handleErr(&err) - e.encoder.finish() - return nil -} - -func handleErr(err *error) { - if v := recover(); v != nil { - if e, ok := v.(yamlError); ok { - *err = e.err - } else { - panic(v) - } - } -} - -type yamlError struct { - err error -} - -func fail(err error) { - panic(yamlError{err}) -} - -func failf(format string, args ...interface{}) { - panic(yamlError{fmt.Errorf("yaml: "+format, args...)}) -} - -// A TypeError is returned by Unmarshal when one or more fields in -// the YAML document cannot be properly decoded into the requested -// types. When this error is returned, the value is still -// unmarshaled partially. -type TypeError struct { - Errors []string -} - -func (e *TypeError) Error() string { - return fmt.Sprintf("yaml: unmarshal errors:\n %s", strings.Join(e.Errors, "\n ")) -} - -type Kind uint32 - -const ( - DocumentNode Kind = 1 << iota - SequenceNode - MappingNode - ScalarNode - AliasNode -) - -type Style uint32 - -const ( - TaggedStyle Style = 1 << iota - DoubleQuotedStyle - SingleQuotedStyle - LiteralStyle - FoldedStyle - FlowStyle -) - -// Node represents an element in the YAML document hierarchy. While documents -// are typically encoded and decoded into higher level types, such as structs -// and maps, Node is an intermediate representation that allows detailed -// control over the content being decoded or encoded. -// -// Values that make use of the Node type interact with the yaml package in the -// same way any other type would do, by encoding and decoding yaml data -// directly or indirectly into them. -// -// For example: -// -// var person struct { -// Name string -// Address yaml.Node -// } -// err := yaml.Unmarshal(data, &person) -// -// Or by itself: -// -// var person Node -// err := yaml.Unmarshal(data, &person) -// -type Node struct { - // Kind defines whether the node is a document, a mapping, a sequence, - // a scalar value, or an alias to another node. The specific data type of - // scalar nodes may be obtained via the ShortTag and LongTag methods. - Kind Kind - - // Style allows customizing the apperance of the node in the tree. - Style Style - - // Tag holds the YAML tag defining the data type for the value. - // When decoding, this field will always be set to the resolved tag, - // even when it wasn't explicitly provided in the YAML content. - // When encoding, if this field is unset the value type will be - // implied from the node properties, and if it is set, it will only - // be serialized into the representation if TaggedStyle is used or - // the implicit tag diverges from the provided one. - Tag string - - // Value holds the unescaped and unquoted represenation of the value. - Value string - - // Anchor holds the anchor name for this node, which allows aliases to point to it. - Anchor string - - // Alias holds the node that this alias points to. Only valid when Kind is AliasNode. - Alias *Node - - // Content holds contained nodes for documents, mappings, and sequences. - Content []*Node - - // HeadComment holds any comments in the lines preceding the node and - // not separated by an empty line. - HeadComment string - - // LineComment holds any comments at the end of the line where the node is in. - LineComment string - - // FootComment holds any comments following the node and before empty lines. - FootComment string - - // Line and Column hold the node position in the decoded YAML text. - // These fields are not respected when encoding the node. - Line int - Column int -} - -// LongTag returns the long form of the tag that indicates the data type for -// the node. If the Tag field isn't explicitly defined, one will be computed -// based on the node properties. -func (n *Node) LongTag() string { - return longTag(n.ShortTag()) -} - -// ShortTag returns the short form of the YAML tag that indicates data type for -// the node. If the Tag field isn't explicitly defined, one will be computed -// based on the node properties. -func (n *Node) ShortTag() string { - if n.indicatedString() { - return strTag - } - if n.Tag == "" || n.Tag == "!" { - switch n.Kind { - case MappingNode: - return mapTag - case SequenceNode: - return seqTag - case AliasNode: - if n.Alias != nil { - return n.Alias.ShortTag() - } - case ScalarNode: - tag, _ := resolve("", n.Value) - return tag - } - return "" - } - return shortTag(n.Tag) -} - -func (n *Node) indicatedString() bool { - return n.Kind == ScalarNode && - (shortTag(n.Tag) == strTag || - (n.Tag == "" || n.Tag == "!") && n.Style&(SingleQuotedStyle|DoubleQuotedStyle|LiteralStyle|FoldedStyle) != 0) -} - -// SetString is a convenience function that sets the node to a string value -// and defines its style in a pleasant way depending on its content. -func (n *Node) SetString(s string) { - n.Kind = ScalarNode - if utf8.ValidString(s) { - n.Value = s - n.Tag = strTag - } else { - n.Value = encodeBase64(s) - n.Tag = binaryTag - } - if strings.Contains(n.Value, "\n") { - n.Style = LiteralStyle - } -} - -// -------------------------------------------------------------------------- -// Maintain a mapping of keys to structure field indexes - -// The code in this section was copied from mgo/bson. - -// structInfo holds details for the serialization of fields of -// a given struct. -type structInfo struct { - FieldsMap map[string]fieldInfo - FieldsList []fieldInfo - - // InlineMap is the number of the field in the struct that - // contains an ,inline map, or -1 if there's none. - InlineMap int - - // InlineUnmarshalers holds indexes to inlined fields that - // contain unmarshaler values. - InlineUnmarshalers [][]int -} - -type fieldInfo struct { - Key string - Num int - OmitEmpty bool - Flow bool - // Id holds the unique field identifier, so we can cheaply - // check for field duplicates without maintaining an extra map. - Id int - - // Inline holds the field index if the field is part of an inlined struct. - Inline []int -} - -var structMap = make(map[reflect.Type]*structInfo) -var fieldMapMutex sync.RWMutex -var unmarshalerType reflect.Type - -func init() { - var v Unmarshaler - unmarshalerType = reflect.ValueOf(&v).Elem().Type() -} - -func getStructInfo(st reflect.Type) (*structInfo, error) { - fieldMapMutex.RLock() - sinfo, found := structMap[st] - fieldMapMutex.RUnlock() - if found { - return sinfo, nil - } - - n := st.NumField() - fieldsMap := make(map[string]fieldInfo) - fieldsList := make([]fieldInfo, 0, n) - inlineMap := -1 - inlineUnmarshalers := [][]int(nil) - for i := 0; i != n; i++ { - field := st.Field(i) - if field.PkgPath != "" && !field.Anonymous { - continue // Private field - } - - info := fieldInfo{Num: i} - - tag := field.Tag.Get("yaml") - if tag == "" && strings.Index(string(field.Tag), ":") < 0 { - tag = string(field.Tag) - } - if tag == "-" { - continue - } - - inline := false - fields := strings.Split(tag, ",") - if len(fields) > 1 { - for _, flag := range fields[1:] { - switch flag { - case "omitempty": - info.OmitEmpty = true - case "flow": - info.Flow = true - case "inline": - inline = true - default: - return nil, errors.New(fmt.Sprintf("unsupported flag %q in tag %q of type %s", flag, tag, st)) - } - } - tag = fields[0] - } - - if inline { - switch field.Type.Kind() { - case reflect.Map: - if inlineMap >= 0 { - return nil, errors.New("multiple ,inline maps in struct " + st.String()) - } - if field.Type.Key() != reflect.TypeOf("") { - return nil, errors.New("option ,inline needs a map with string keys in struct " + st.String()) - } - inlineMap = info.Num - case reflect.Struct, reflect.Ptr: - ftype := field.Type - for ftype.Kind() == reflect.Ptr { - ftype = ftype.Elem() - } - if ftype.Kind() != reflect.Struct { - return nil, errors.New("option ,inline may only be used on a struct or map field") - } - if reflect.PtrTo(ftype).Implements(unmarshalerType) { - inlineUnmarshalers = append(inlineUnmarshalers, []int{i}) - } else { - sinfo, err := getStructInfo(ftype) - if err != nil { - return nil, err - } - for _, index := range sinfo.InlineUnmarshalers { - inlineUnmarshalers = append(inlineUnmarshalers, append([]int{i}, index...)) - } - for _, finfo := range sinfo.FieldsList { - if _, found := fieldsMap[finfo.Key]; found { - msg := "duplicated key '" + finfo.Key + "' in struct " + st.String() - return nil, errors.New(msg) - } - if finfo.Inline == nil { - finfo.Inline = []int{i, finfo.Num} - } else { - finfo.Inline = append([]int{i}, finfo.Inline...) - } - finfo.Id = len(fieldsList) - fieldsMap[finfo.Key] = finfo - fieldsList = append(fieldsList, finfo) - } - } - default: - return nil, errors.New("option ,inline may only be used on a struct or map field") - } - continue - } - - if tag != "" { - info.Key = tag - } else { - info.Key = strings.ToLower(field.Name) - } - - if _, found = fieldsMap[info.Key]; found { - msg := "duplicated key '" + info.Key + "' in struct " + st.String() - return nil, errors.New(msg) - } - - info.Id = len(fieldsList) - fieldsList = append(fieldsList, info) - fieldsMap[info.Key] = info - } - - sinfo = &structInfo{ - FieldsMap: fieldsMap, - FieldsList: fieldsList, - InlineMap: inlineMap, - InlineUnmarshalers: inlineUnmarshalers, - } - - fieldMapMutex.Lock() - structMap[st] = sinfo - fieldMapMutex.Unlock() - return sinfo, nil -} - -// IsZeroer is used to check whether an object is zero to -// determine whether it should be omitted when marshaling -// with the omitempty flag. One notable implementation -// is time.Time. -type IsZeroer interface { - IsZero() bool -} - -func isZero(v reflect.Value) bool { - kind := v.Kind() - if z, ok := v.Interface().(IsZeroer); ok { - if (kind == reflect.Ptr || kind == reflect.Interface) && v.IsNil() { - return true - } - return z.IsZero() - } - switch kind { - case reflect.String: - return len(v.String()) == 0 - case reflect.Interface, reflect.Ptr: - return v.IsNil() - case reflect.Slice: - return v.Len() == 0 - case reflect.Map: - return v.Len() == 0 - case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: - return v.Int() == 0 - case reflect.Float32, reflect.Float64: - return v.Float() == 0 - case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr: - return v.Uint() == 0 - case reflect.Bool: - return !v.Bool() - case reflect.Struct: - vt := v.Type() - for i := v.NumField() - 1; i >= 0; i-- { - if vt.Field(i).PkgPath != "" { - continue // Private field - } - if !isZero(v.Field(i)) { - return false - } - } - return true - } - return false -} diff --git a/vendor/gopkg.in/yaml.v3/yamlh.go b/vendor/gopkg.in/yaml.v3/yamlh.go deleted file mode 100644 index edba38f1..00000000 --- a/vendor/gopkg.in/yaml.v3/yamlh.go +++ /dev/null @@ -1,790 +0,0 @@ -// -// Copyright (c) 2011-2019 Canonical Ltd -// Copyright (c) 2006-2010 Kirill Simonov -// -// 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. - -package yaml - -import ( - "fmt" - "io" -) - -// The version directive data. -type yaml_version_directive_t struct { - major int8 // The major version number. - minor int8 // The minor version number. -} - -// The tag directive data. -type yaml_tag_directive_t struct { - handle []byte // The tag handle. - prefix []byte // The tag prefix. -} - -type yaml_encoding_t int - -// The stream encoding. -const ( - // Let the parser choose the encoding. - yaml_ANY_ENCODING yaml_encoding_t = iota - - yaml_UTF8_ENCODING // The default UTF-8 encoding. - yaml_UTF16LE_ENCODING // The UTF-16-LE encoding with BOM. - yaml_UTF16BE_ENCODING // The UTF-16-BE encoding with BOM. -) - -type yaml_break_t int - -// Line break types. -const ( - // Let the parser choose the break type. - yaml_ANY_BREAK yaml_break_t = iota - - yaml_CR_BREAK // Use CR for line breaks (Mac style). - yaml_LN_BREAK // Use LN for line breaks (Unix style). - yaml_CRLN_BREAK // Use CR LN for line breaks (DOS style). -) - -type yaml_error_type_t int - -// Many bad things could happen with the parser and emitter. -const ( - // No error is produced. - yaml_NO_ERROR yaml_error_type_t = iota - - yaml_MEMORY_ERROR // Cannot allocate or reallocate a block of memory. - yaml_READER_ERROR // Cannot read or decode the input stream. - yaml_SCANNER_ERROR // Cannot scan the input stream. - yaml_PARSER_ERROR // Cannot parse the input stream. - yaml_COMPOSER_ERROR // Cannot compose a YAML document. - yaml_WRITER_ERROR // Cannot write to the output stream. - yaml_EMITTER_ERROR // Cannot emit a YAML stream. -) - -// The pointer position. -type yaml_mark_t struct { - index int // The position index. - line int // The position line. - column int // The position column. -} - -// Node Styles - -type yaml_style_t int8 - -type yaml_scalar_style_t yaml_style_t - -// Scalar styles. -const ( - // Let the emitter choose the style. - yaml_ANY_SCALAR_STYLE yaml_scalar_style_t = 0 - - yaml_PLAIN_SCALAR_STYLE yaml_scalar_style_t = 1 << iota // The plain scalar style. - yaml_SINGLE_QUOTED_SCALAR_STYLE // The single-quoted scalar style. - yaml_DOUBLE_QUOTED_SCALAR_STYLE // The double-quoted scalar style. - yaml_LITERAL_SCALAR_STYLE // The literal scalar style. - yaml_FOLDED_SCALAR_STYLE // The folded scalar style. -) - -type yaml_sequence_style_t yaml_style_t - -// Sequence styles. -const ( - // Let the emitter choose the style. - yaml_ANY_SEQUENCE_STYLE yaml_sequence_style_t = iota - - yaml_BLOCK_SEQUENCE_STYLE // The block sequence style. - yaml_FLOW_SEQUENCE_STYLE // The flow sequence style. -) - -type yaml_mapping_style_t yaml_style_t - -// Mapping styles. -const ( - // Let the emitter choose the style. - yaml_ANY_MAPPING_STYLE yaml_mapping_style_t = iota - - yaml_BLOCK_MAPPING_STYLE // The block mapping style. - yaml_FLOW_MAPPING_STYLE // The flow mapping style. -) - -// Tokens - -type yaml_token_type_t int - -// Token types. -const ( - // An empty token. - yaml_NO_TOKEN yaml_token_type_t = iota - - yaml_STREAM_START_TOKEN // A STREAM-START token. - yaml_STREAM_END_TOKEN // A STREAM-END token. - - yaml_VERSION_DIRECTIVE_TOKEN // A VERSION-DIRECTIVE token. - yaml_TAG_DIRECTIVE_TOKEN // A TAG-DIRECTIVE token. - yaml_DOCUMENT_START_TOKEN // A DOCUMENT-START token. - yaml_DOCUMENT_END_TOKEN // A DOCUMENT-END token. - - yaml_BLOCK_SEQUENCE_START_TOKEN // A BLOCK-SEQUENCE-START token. - yaml_BLOCK_MAPPING_START_TOKEN // A BLOCK-SEQUENCE-END token. - yaml_BLOCK_END_TOKEN // A BLOCK-END token. - - yaml_FLOW_SEQUENCE_START_TOKEN // A FLOW-SEQUENCE-START token. - yaml_FLOW_SEQUENCE_END_TOKEN // A FLOW-SEQUENCE-END token. - yaml_FLOW_MAPPING_START_TOKEN // A FLOW-MAPPING-START token. - yaml_FLOW_MAPPING_END_TOKEN // A FLOW-MAPPING-END token. - - yaml_BLOCK_ENTRY_TOKEN // A BLOCK-ENTRY token. - yaml_FLOW_ENTRY_TOKEN // A FLOW-ENTRY token. - yaml_KEY_TOKEN // A KEY token. - yaml_VALUE_TOKEN // A VALUE token. - - yaml_ALIAS_TOKEN // An ALIAS token. - yaml_ANCHOR_TOKEN // An ANCHOR token. - yaml_TAG_TOKEN // A TAG token. - yaml_SCALAR_TOKEN // A SCALAR token. -) - -func (tt yaml_token_type_t) String() string { - switch tt { - case yaml_NO_TOKEN: - return "yaml_NO_TOKEN" - case yaml_STREAM_START_TOKEN: - return "yaml_STREAM_START_TOKEN" - case yaml_STREAM_END_TOKEN: - return "yaml_STREAM_END_TOKEN" - case yaml_VERSION_DIRECTIVE_TOKEN: - return "yaml_VERSION_DIRECTIVE_TOKEN" - case yaml_TAG_DIRECTIVE_TOKEN: - return "yaml_TAG_DIRECTIVE_TOKEN" - case yaml_DOCUMENT_START_TOKEN: - return "yaml_DOCUMENT_START_TOKEN" - case yaml_DOCUMENT_END_TOKEN: - return "yaml_DOCUMENT_END_TOKEN" - case yaml_BLOCK_SEQUENCE_START_TOKEN: - return "yaml_BLOCK_SEQUENCE_START_TOKEN" - case yaml_BLOCK_MAPPING_START_TOKEN: - return "yaml_BLOCK_MAPPING_START_TOKEN" - case yaml_BLOCK_END_TOKEN: - return "yaml_BLOCK_END_TOKEN" - case yaml_FLOW_SEQUENCE_START_TOKEN: - return "yaml_FLOW_SEQUENCE_START_TOKEN" - case yaml_FLOW_SEQUENCE_END_TOKEN: - return "yaml_FLOW_SEQUENCE_END_TOKEN" - case yaml_FLOW_MAPPING_START_TOKEN: - return "yaml_FLOW_MAPPING_START_TOKEN" - case yaml_FLOW_MAPPING_END_TOKEN: - return "yaml_FLOW_MAPPING_END_TOKEN" - case yaml_BLOCK_ENTRY_TOKEN: - return "yaml_BLOCK_ENTRY_TOKEN" - case yaml_FLOW_ENTRY_TOKEN: - return "yaml_FLOW_ENTRY_TOKEN" - case yaml_KEY_TOKEN: - return "yaml_KEY_TOKEN" - case yaml_VALUE_TOKEN: - return "yaml_VALUE_TOKEN" - case yaml_ALIAS_TOKEN: - return "yaml_ALIAS_TOKEN" - case yaml_ANCHOR_TOKEN: - return "yaml_ANCHOR_TOKEN" - case yaml_TAG_TOKEN: - return "yaml_TAG_TOKEN" - case yaml_SCALAR_TOKEN: - return "yaml_SCALAR_TOKEN" - } - return "<unknown token>" -} - -// The token structure. -type yaml_token_t struct { - // The token type. - typ yaml_token_type_t - - // The start/end of the token. - start_mark, end_mark yaml_mark_t - - // The stream encoding (for yaml_STREAM_START_TOKEN). - encoding yaml_encoding_t - - // The alias/anchor/scalar value or tag/tag directive handle - // (for yaml_ALIAS_TOKEN, yaml_ANCHOR_TOKEN, yaml_SCALAR_TOKEN, yaml_TAG_TOKEN, yaml_TAG_DIRECTIVE_TOKEN). - value []byte - - // The tag suffix (for yaml_TAG_TOKEN). - suffix []byte - - // The tag directive prefix (for yaml_TAG_DIRECTIVE_TOKEN). - prefix []byte - - // The scalar style (for yaml_SCALAR_TOKEN). - style yaml_scalar_style_t - - // The version directive major/minor (for yaml_VERSION_DIRECTIVE_TOKEN). - major, minor int8 -} - -// Events - -type yaml_event_type_t int8 - -// Event types. -const ( - // An empty event. - yaml_NO_EVENT yaml_event_type_t = iota - - yaml_STREAM_START_EVENT // A STREAM-START event. - yaml_STREAM_END_EVENT // A STREAM-END event. - yaml_DOCUMENT_START_EVENT // A DOCUMENT-START event. - yaml_DOCUMENT_END_EVENT // A DOCUMENT-END event. - yaml_ALIAS_EVENT // An ALIAS event. - yaml_SCALAR_EVENT // A SCALAR event. - yaml_SEQUENCE_START_EVENT // A SEQUENCE-START event. - yaml_SEQUENCE_END_EVENT // A SEQUENCE-END event. - yaml_MAPPING_START_EVENT // A MAPPING-START event. - yaml_MAPPING_END_EVENT // A MAPPING-END event. -) - -var eventStrings = []string{ - yaml_NO_EVENT: "none", - yaml_STREAM_START_EVENT: "stream start", - yaml_STREAM_END_EVENT: "stream end", - yaml_DOCUMENT_START_EVENT: "document start", - yaml_DOCUMENT_END_EVENT: "document end", - yaml_ALIAS_EVENT: "alias", - yaml_SCALAR_EVENT: "scalar", - yaml_SEQUENCE_START_EVENT: "sequence start", - yaml_SEQUENCE_END_EVENT: "sequence end", - yaml_MAPPING_START_EVENT: "mapping start", - yaml_MAPPING_END_EVENT: "mapping end", -} - -func (e yaml_event_type_t) String() string { - if e < 0 || int(e) >= len(eventStrings) { - return fmt.Sprintf("unknown event %d", e) - } - return eventStrings[e] -} - -// The event structure. -type yaml_event_t struct { - - // The event type. - typ yaml_event_type_t - - // The start and end of the event. - start_mark, end_mark yaml_mark_t - - // The document encoding (for yaml_STREAM_START_EVENT). - encoding yaml_encoding_t - - // The version directive (for yaml_DOCUMENT_START_EVENT). - version_directive *yaml_version_directive_t - - // The list of tag directives (for yaml_DOCUMENT_START_EVENT). - tag_directives []yaml_tag_directive_t - - // The comments - head_comment []byte - line_comment []byte - foot_comment []byte - - // The anchor (for yaml_SCALAR_EVENT, yaml_SEQUENCE_START_EVENT, yaml_MAPPING_START_EVENT, yaml_ALIAS_EVENT). - anchor []byte - - // The tag (for yaml_SCALAR_EVENT, yaml_SEQUENCE_START_EVENT, yaml_MAPPING_START_EVENT). - tag []byte - - // The scalar value (for yaml_SCALAR_EVENT). - value []byte - - // Is the document start/end indicator implicit, or the tag optional? - // (for yaml_DOCUMENT_START_EVENT, yaml_DOCUMENT_END_EVENT, yaml_SEQUENCE_START_EVENT, yaml_MAPPING_START_EVENT, yaml_SCALAR_EVENT). - implicit bool - - // Is the tag optional for any non-plain style? (for yaml_SCALAR_EVENT). - quoted_implicit bool - - // The style (for yaml_SCALAR_EVENT, yaml_SEQUENCE_START_EVENT, yaml_MAPPING_START_EVENT). - style yaml_style_t -} - -func (e *yaml_event_t) scalar_style() yaml_scalar_style_t { return yaml_scalar_style_t(e.style) } -func (e *yaml_event_t) sequence_style() yaml_sequence_style_t { return yaml_sequence_style_t(e.style) } -func (e *yaml_event_t) mapping_style() yaml_mapping_style_t { return yaml_mapping_style_t(e.style) } - -// Nodes - -const ( - yaml_NULL_TAG = "tag:yaml.org,2002:null" // The tag !!null with the only possible value: null. - yaml_BOOL_TAG = "tag:yaml.org,2002:bool" // The tag !!bool with the values: true and false. - yaml_STR_TAG = "tag:yaml.org,2002:str" // The tag !!str for string values. - yaml_INT_TAG = "tag:yaml.org,2002:int" // The tag !!int for integer values. - yaml_FLOAT_TAG = "tag:yaml.org,2002:float" // The tag !!float for float values. - yaml_TIMESTAMP_TAG = "tag:yaml.org,2002:timestamp" // The tag !!timestamp for date and time values. - - yaml_SEQ_TAG = "tag:yaml.org,2002:seq" // The tag !!seq is used to denote sequences. - yaml_MAP_TAG = "tag:yaml.org,2002:map" // The tag !!map is used to denote mapping. - - // Not in original libyaml. - yaml_BINARY_TAG = "tag:yaml.org,2002:binary" - yaml_MERGE_TAG = "tag:yaml.org,2002:merge" - - yaml_DEFAULT_SCALAR_TAG = yaml_STR_TAG // The default scalar tag is !!str. - yaml_DEFAULT_SEQUENCE_TAG = yaml_SEQ_TAG // The default sequence tag is !!seq. - yaml_DEFAULT_MAPPING_TAG = yaml_MAP_TAG // The default mapping tag is !!map. -) - -type yaml_node_type_t int - -// Node types. -const ( - // An empty node. - yaml_NO_NODE yaml_node_type_t = iota - - yaml_SCALAR_NODE // A scalar node. - yaml_SEQUENCE_NODE // A sequence node. - yaml_MAPPING_NODE // A mapping node. -) - -// An element of a sequence node. -type yaml_node_item_t int - -// An element of a mapping node. -type yaml_node_pair_t struct { - key int // The key of the element. - value int // The value of the element. -} - -// The node structure. -type yaml_node_t struct { - typ yaml_node_type_t // The node type. - tag []byte // The node tag. - - // The node data. - - // The scalar parameters (for yaml_SCALAR_NODE). - scalar struct { - value []byte // The scalar value. - length int // The length of the scalar value. - style yaml_scalar_style_t // The scalar style. - } - - // The sequence parameters (for YAML_SEQUENCE_NODE). - sequence struct { - items_data []yaml_node_item_t // The stack of sequence items. - style yaml_sequence_style_t // The sequence style. - } - - // The mapping parameters (for yaml_MAPPING_NODE). - mapping struct { - pairs_data []yaml_node_pair_t // The stack of mapping pairs (key, value). - pairs_start *yaml_node_pair_t // The beginning of the stack. - pairs_end *yaml_node_pair_t // The end of the stack. - pairs_top *yaml_node_pair_t // The top of the stack. - style yaml_mapping_style_t // The mapping style. - } - - start_mark yaml_mark_t // The beginning of the node. - end_mark yaml_mark_t // The end of the node. - -} - -// The document structure. -type yaml_document_t struct { - - // The document nodes. - nodes []yaml_node_t - - // The version directive. - version_directive *yaml_version_directive_t - - // The list of tag directives. - tag_directives_data []yaml_tag_directive_t - tag_directives_start int // The beginning of the tag directives list. - tag_directives_end int // The end of the tag directives list. - - start_implicit int // Is the document start indicator implicit? - end_implicit int // Is the document end indicator implicit? - - // The start/end of the document. - start_mark, end_mark yaml_mark_t -} - -// The prototype of a read handler. -// -// The read handler is called when the parser needs to read more bytes from the -// source. The handler should write not more than size bytes to the buffer. -// The number of written bytes should be set to the size_read variable. -// -// [in,out] data A pointer to an application data specified by -// yaml_parser_set_input(). -// [out] buffer The buffer to write the data from the source. -// [in] size The size of the buffer. -// [out] size_read The actual number of bytes read from the source. -// -// On success, the handler should return 1. If the handler failed, -// the returned value should be 0. On EOF, the handler should set the -// size_read to 0 and return 1. -type yaml_read_handler_t func(parser *yaml_parser_t, buffer []byte) (n int, err error) - -// This structure holds information about a potential simple key. -type yaml_simple_key_t struct { - possible bool // Is a simple key possible? - required bool // Is a simple key required? - token_number int // The number of the token. - mark yaml_mark_t // The position mark. -} - -// The states of the parser. -type yaml_parser_state_t int - -const ( - yaml_PARSE_STREAM_START_STATE yaml_parser_state_t = iota - - yaml_PARSE_IMPLICIT_DOCUMENT_START_STATE // Expect the beginning of an implicit document. - yaml_PARSE_DOCUMENT_START_STATE // Expect DOCUMENT-START. - yaml_PARSE_DOCUMENT_CONTENT_STATE // Expect the content of a document. - yaml_PARSE_DOCUMENT_END_STATE // Expect DOCUMENT-END. - yaml_PARSE_BLOCK_NODE_STATE // Expect a block node. - yaml_PARSE_BLOCK_NODE_OR_INDENTLESS_SEQUENCE_STATE // Expect a block node or indentless sequence. - yaml_PARSE_FLOW_NODE_STATE // Expect a flow node. - yaml_PARSE_BLOCK_SEQUENCE_FIRST_ENTRY_STATE // Expect the first entry of a block sequence. - yaml_PARSE_BLOCK_SEQUENCE_ENTRY_STATE // Expect an entry of a block sequence. - yaml_PARSE_INDENTLESS_SEQUENCE_ENTRY_STATE // Expect an entry of an indentless sequence. - yaml_PARSE_BLOCK_MAPPING_FIRST_KEY_STATE // Expect the first key of a block mapping. - yaml_PARSE_BLOCK_MAPPING_KEY_STATE // Expect a block mapping key. - yaml_PARSE_BLOCK_MAPPING_VALUE_STATE // Expect a block mapping value. - yaml_PARSE_FLOW_SEQUENCE_FIRST_ENTRY_STATE // Expect the first entry of a flow sequence. - yaml_PARSE_FLOW_SEQUENCE_ENTRY_STATE // Expect an entry of a flow sequence. - yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_KEY_STATE // Expect a key of an ordered mapping. - yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_VALUE_STATE // Expect a value of an ordered mapping. - yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_END_STATE // Expect the and of an ordered mapping entry. - yaml_PARSE_FLOW_MAPPING_FIRST_KEY_STATE // Expect the first key of a flow mapping. - yaml_PARSE_FLOW_MAPPING_KEY_STATE // Expect a key of a flow mapping. - yaml_PARSE_FLOW_MAPPING_VALUE_STATE // Expect a value of a flow mapping. - yaml_PARSE_FLOW_MAPPING_EMPTY_VALUE_STATE // Expect an empty value of a flow mapping. - yaml_PARSE_END_STATE // Expect nothing. -) - -func (ps yaml_parser_state_t) String() string { - switch ps { - case yaml_PARSE_STREAM_START_STATE: - return "yaml_PARSE_STREAM_START_STATE" - case yaml_PARSE_IMPLICIT_DOCUMENT_START_STATE: - return "yaml_PARSE_IMPLICIT_DOCUMENT_START_STATE" - case yaml_PARSE_DOCUMENT_START_STATE: - return "yaml_PARSE_DOCUMENT_START_STATE" - case yaml_PARSE_DOCUMENT_CONTENT_STATE: - return "yaml_PARSE_DOCUMENT_CONTENT_STATE" - case yaml_PARSE_DOCUMENT_END_STATE: - return "yaml_PARSE_DOCUMENT_END_STATE" - case yaml_PARSE_BLOCK_NODE_STATE: - return "yaml_PARSE_BLOCK_NODE_STATE" - case yaml_PARSE_BLOCK_NODE_OR_INDENTLESS_SEQUENCE_STATE: - return "yaml_PARSE_BLOCK_NODE_OR_INDENTLESS_SEQUENCE_STATE" - case yaml_PARSE_FLOW_NODE_STATE: - return "yaml_PARSE_FLOW_NODE_STATE" - case yaml_PARSE_BLOCK_SEQUENCE_FIRST_ENTRY_STATE: - return "yaml_PARSE_BLOCK_SEQUENCE_FIRST_ENTRY_STATE" - case yaml_PARSE_BLOCK_SEQUENCE_ENTRY_STATE: - return "yaml_PARSE_BLOCK_SEQUENCE_ENTRY_STATE" - case yaml_PARSE_INDENTLESS_SEQUENCE_ENTRY_STATE: - return "yaml_PARSE_INDENTLESS_SEQUENCE_ENTRY_STATE" - case yaml_PARSE_BLOCK_MAPPING_FIRST_KEY_STATE: - return "yaml_PARSE_BLOCK_MAPPING_FIRST_KEY_STATE" - case yaml_PARSE_BLOCK_MAPPING_KEY_STATE: - return "yaml_PARSE_BLOCK_MAPPING_KEY_STATE" - case yaml_PARSE_BLOCK_MAPPING_VALUE_STATE: - return "yaml_PARSE_BLOCK_MAPPING_VALUE_STATE" - case yaml_PARSE_FLOW_SEQUENCE_FIRST_ENTRY_STATE: - return "yaml_PARSE_FLOW_SEQUENCE_FIRST_ENTRY_STATE" - case yaml_PARSE_FLOW_SEQUENCE_ENTRY_STATE: - return "yaml_PARSE_FLOW_SEQUENCE_ENTRY_STATE" - case yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_KEY_STATE: - return "yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_KEY_STATE" - case yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_VALUE_STATE: - return "yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_VALUE_STATE" - case yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_END_STATE: - return "yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_END_STATE" - case yaml_PARSE_FLOW_MAPPING_FIRST_KEY_STATE: - return "yaml_PARSE_FLOW_MAPPING_FIRST_KEY_STATE" - case yaml_PARSE_FLOW_MAPPING_KEY_STATE: - return "yaml_PARSE_FLOW_MAPPING_KEY_STATE" - case yaml_PARSE_FLOW_MAPPING_VALUE_STATE: - return "yaml_PARSE_FLOW_MAPPING_VALUE_STATE" - case yaml_PARSE_FLOW_MAPPING_EMPTY_VALUE_STATE: - return "yaml_PARSE_FLOW_MAPPING_EMPTY_VALUE_STATE" - case yaml_PARSE_END_STATE: - return "yaml_PARSE_END_STATE" - } - return "<unknown parser state>" -} - -// This structure holds aliases data. -type yaml_alias_data_t struct { - anchor []byte // The anchor. - index int // The node id. - mark yaml_mark_t // The anchor mark. -} - -// The parser structure. -// -// All members are internal. Manage the structure using the -// yaml_parser_ family of functions. -type yaml_parser_t struct { - - // Error handling - - error yaml_error_type_t // Error type. - - problem string // Error description. - - // The byte about which the problem occurred. - problem_offset int - problem_value int - problem_mark yaml_mark_t - - // The error context. - context string - context_mark yaml_mark_t - - // Reader stuff - - read_handler yaml_read_handler_t // Read handler. - - input_reader io.Reader // File input data. - input []byte // String input data. - input_pos int - - eof bool // EOF flag - - buffer []byte // The working buffer. - buffer_pos int // The current position of the buffer. - - unread int // The number of unread characters in the buffer. - - raw_buffer []byte // The raw buffer. - raw_buffer_pos int // The current position of the buffer. - - encoding yaml_encoding_t // The input encoding. - - offset int // The offset of the current position (in bytes). - mark yaml_mark_t // The mark of the current position. - - // Comments - - head_comment []byte // The current head comments - line_comment []byte // The current line comments - foot_comment []byte // The current foot comments - - comments []yaml_comment_t // The folded comments for all parsed tokens - comments_head int - - // Scanner stuff - - stream_start_produced bool // Have we started to scan the input stream? - stream_end_produced bool // Have we reached the end of the input stream? - - flow_level int // The number of unclosed '[' and '{' indicators. - - tokens []yaml_token_t // The tokens queue. - tokens_head int // The head of the tokens queue. - tokens_parsed int // The number of tokens fetched from the queue. - token_available bool // Does the tokens queue contain a token ready for dequeueing. - - indent int // The current indentation level. - indents []int // The indentation levels stack. - - simple_key_allowed bool // May a simple key occur at the current position? - simple_keys []yaml_simple_key_t // The stack of simple keys. - - // Parser stuff - - state yaml_parser_state_t // The current parser state. - states []yaml_parser_state_t // The parser states stack. - marks []yaml_mark_t // The stack of marks. - tag_directives []yaml_tag_directive_t // The list of TAG directives. - - // Dumper stuff - - aliases []yaml_alias_data_t // The alias data. - - document *yaml_document_t // The currently parsed document. -} - -type yaml_comment_t struct { - after yaml_mark_t - head []byte - line []byte - foot []byte -} - -// Emitter Definitions - -// The prototype of a write handler. -// -// The write handler is called when the emitter needs to flush the accumulated -// characters to the output. The handler should write @a size bytes of the -// @a buffer to the output. -// -// @param[in,out] data A pointer to an application data specified by -// yaml_emitter_set_output(). -// @param[in] buffer The buffer with bytes to be written. -// @param[in] size The size of the buffer. -// -// @returns On success, the handler should return @c 1. If the handler failed, -// the returned value should be @c 0. -// -type yaml_write_handler_t func(emitter *yaml_emitter_t, buffer []byte) error - -type yaml_emitter_state_t int - -// The emitter states. -const ( - // Expect STREAM-START. - yaml_EMIT_STREAM_START_STATE yaml_emitter_state_t = iota - - yaml_EMIT_FIRST_DOCUMENT_START_STATE // Expect the first DOCUMENT-START or STREAM-END. - yaml_EMIT_DOCUMENT_START_STATE // Expect DOCUMENT-START or STREAM-END. - yaml_EMIT_DOCUMENT_CONTENT_STATE // Expect the content of a document. - yaml_EMIT_DOCUMENT_END_STATE // Expect DOCUMENT-END. - yaml_EMIT_FLOW_SEQUENCE_FIRST_ITEM_STATE // Expect the first item of a flow sequence. - yaml_EMIT_FLOW_SEQUENCE_TRAIL_ITEM_STATE // Expect the next item of a flow sequence, with the comma already written out - yaml_EMIT_FLOW_SEQUENCE_ITEM_STATE // Expect an item of a flow sequence. - yaml_EMIT_FLOW_MAPPING_FIRST_KEY_STATE // Expect the first key of a flow mapping. - yaml_EMIT_FLOW_MAPPING_TRAIL_KEY_STATE // Expect the next key of a flow mapping, with the comma already written out - yaml_EMIT_FLOW_MAPPING_KEY_STATE // Expect a key of a flow mapping. - yaml_EMIT_FLOW_MAPPING_SIMPLE_VALUE_STATE // Expect a value for a simple key of a flow mapping. - yaml_EMIT_FLOW_MAPPING_VALUE_STATE // Expect a value of a flow mapping. - yaml_EMIT_BLOCK_SEQUENCE_FIRST_ITEM_STATE // Expect the first item of a block sequence. - yaml_EMIT_BLOCK_SEQUENCE_ITEM_STATE // Expect an item of a block sequence. - yaml_EMIT_BLOCK_MAPPING_FIRST_KEY_STATE // Expect the first key of a block mapping. - yaml_EMIT_BLOCK_MAPPING_KEY_STATE // Expect the key of a block mapping. - yaml_EMIT_BLOCK_MAPPING_SIMPLE_VALUE_STATE // Expect a value for a simple key of a block mapping. - yaml_EMIT_BLOCK_MAPPING_VALUE_STATE // Expect a value of a block mapping. - yaml_EMIT_END_STATE // Expect nothing. -) - -// The emitter structure. -// -// All members are internal. Manage the structure using the @c yaml_emitter_ -// family of functions. -type yaml_emitter_t struct { - - // Error handling - - error yaml_error_type_t // Error type. - problem string // Error description. - - // Writer stuff - - write_handler yaml_write_handler_t // Write handler. - - output_buffer *[]byte // String output data. - output_writer io.Writer // File output data. - - buffer []byte // The working buffer. - buffer_pos int // The current position of the buffer. - - raw_buffer []byte // The raw buffer. - raw_buffer_pos int // The current position of the buffer. - - encoding yaml_encoding_t // The stream encoding. - - // Emitter stuff - - canonical bool // If the output is in the canonical style? - best_indent int // The number of indentation spaces. - best_width int // The preferred width of the output lines. - unicode bool // Allow unescaped non-ASCII characters? - line_break yaml_break_t // The preferred line break. - - state yaml_emitter_state_t // The current emitter state. - states []yaml_emitter_state_t // The stack of states. - - events []yaml_event_t // The event queue. - events_head int // The head of the event queue. - - indents []int // The stack of indentation levels. - - tag_directives []yaml_tag_directive_t // The list of tag directives. - - indent int // The current indentation level. - - flow_level int // The current flow level. - - root_context bool // Is it the document root context? - sequence_context bool // Is it a sequence context? - mapping_context bool // Is it a mapping context? - simple_key_context bool // Is it a simple mapping key context? - - line int // The current line. - column int // The current column. - whitespace bool // If the last character was a whitespace? - indention bool // If the last character was an indentation character (' ', '-', '?', ':')? - open_ended bool // If an explicit document end is required? - - space_above bool // If there's an empty line right above? - - // Anchor analysis. - anchor_data struct { - anchor []byte // The anchor value. - alias bool // Is it an alias? - } - - // Tag analysis. - tag_data struct { - handle []byte // The tag handle. - suffix []byte // The tag suffix. - } - - // Scalar analysis. - scalar_data struct { - value []byte // The scalar value. - multiline bool // Does the scalar contain line breaks? - flow_plain_allowed bool // Can the scalar be expessed in the flow plain style? - block_plain_allowed bool // Can the scalar be expressed in the block plain style? - single_quoted_allowed bool // Can the scalar be expressed in the single quoted style? - block_allowed bool // Can the scalar be expressed in the literal or folded styles? - style yaml_scalar_style_t // The output style. - } - - // Comments - head_comment []byte - line_comment []byte - foot_comment []byte - - // Dumper stuff - - opened bool // If the stream was already opened? - closed bool // If the stream was already closed? - - // The information associated with the document nodes. - anchors *struct { - references int // The number of references. - anchor int // The anchor id. - serialized bool // If the node has been emitted? - } - - last_anchor_id int // The last assigned anchor id. - - document *yaml_document_t // The currently emitted document. -} diff --git a/vendor/gopkg.in/yaml.v3/yamlprivateh.go b/vendor/gopkg.in/yaml.v3/yamlprivateh.go deleted file mode 100644 index 02428c2e..00000000 --- a/vendor/gopkg.in/yaml.v3/yamlprivateh.go +++ /dev/null @@ -1,195 +0,0 @@ -// -// Copyright (c) 2011-2019 Canonical Ltd -// Copyright (c) 2006-2010 Kirill Simonov -// -// 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. - -package yaml - -const ( - // The size of the input raw buffer. - input_raw_buffer_size = 512 - - // The size of the input buffer. - // It should be possible to decode the whole raw buffer. - input_buffer_size = input_raw_buffer_size * 3 - - // The size of the output buffer. - output_buffer_size = 128 - - // The size of the output raw buffer. - // It should be possible to encode the whole output buffer. - output_raw_buffer_size = (output_buffer_size*2 + 2) - - // The size of other stacks and queues. - initial_stack_size = 16 - initial_queue_size = 16 - initial_string_size = 16 -) - -// Check if the character at the specified position is an alphabetical -// character, a digit, '_', or '-'. -func is_alpha(b []byte, i int) bool { - return b[i] >= '0' && b[i] <= '9' || b[i] >= 'A' && b[i] <= 'Z' || b[i] >= 'a' && b[i] <= 'z' || b[i] == '_' || b[i] == '-' -} - -// Check if the character at the specified position is a digit. -func is_digit(b []byte, i int) bool { - return b[i] >= '0' && b[i] <= '9' -} - -// Get the value of a digit. -func as_digit(b []byte, i int) int { - return int(b[i]) - '0' -} - -// Check if the character at the specified position is a hex-digit. -func is_hex(b []byte, i int) bool { - return b[i] >= '0' && b[i] <= '9' || b[i] >= 'A' && b[i] <= 'F' || b[i] >= 'a' && b[i] <= 'f' -} - -// Get the value of a hex-digit. -func as_hex(b []byte, i int) int { - bi := b[i] - if bi >= 'A' && bi <= 'F' { - return int(bi) - 'A' + 10 - } - if bi >= 'a' && bi <= 'f' { - return int(bi) - 'a' + 10 - } - return int(bi) - '0' -} - -// Check if the character is ASCII. -func is_ascii(b []byte, i int) bool { - return b[i] <= 0x7F -} - -// Check if the character at the start of the buffer can be printed unescaped. -func is_printable(b []byte, i int) bool { - return ((b[i] == 0x0A) || // . == #x0A - (b[i] >= 0x20 && b[i] <= 0x7E) || // #x20 <= . <= #x7E - (b[i] == 0xC2 && b[i+1] >= 0xA0) || // #0xA0 <= . <= #xD7FF - (b[i] > 0xC2 && b[i] < 0xED) || - (b[i] == 0xED && b[i+1] < 0xA0) || - (b[i] == 0xEE) || - (b[i] == 0xEF && // #xE000 <= . <= #xFFFD - !(b[i+1] == 0xBB && b[i+2] == 0xBF) && // && . != #xFEFF - !(b[i+1] == 0xBF && (b[i+2] == 0xBE || b[i+2] == 0xBF)))) -} - -// Check if the character at the specified position is NUL. -func is_z(b []byte, i int) bool { - return b[i] == 0x00 -} - -// Check if the beginning of the buffer is a BOM. -func is_bom(b []byte, i int) bool { - return b[0] == 0xEF && b[1] == 0xBB && b[2] == 0xBF -} - -// Check if the character at the specified position is space. -func is_space(b []byte, i int) bool { - return b[i] == ' ' -} - -// Check if the character at the specified position is tab. -func is_tab(b []byte, i int) bool { - return b[i] == '\t' -} - -// Check if the character at the specified position is blank (space or tab). -func is_blank(b []byte, i int) bool { - //return is_space(b, i) || is_tab(b, i) - return b[i] == ' ' || b[i] == '\t' -} - -// Check if the character at the specified position is a line break. -func is_break(b []byte, i int) bool { - return (b[i] == '\r' || // CR (#xD) - b[i] == '\n' || // LF (#xA) - b[i] == 0xC2 && b[i+1] == 0x85 || // NEL (#x85) - b[i] == 0xE2 && b[i+1] == 0x80 && b[i+2] == 0xA8 || // LS (#x2028) - b[i] == 0xE2 && b[i+1] == 0x80 && b[i+2] == 0xA9) // PS (#x2029) -} - -func is_crlf(b []byte, i int) bool { - return b[i] == '\r' && b[i+1] == '\n' -} - -// Check if the character is a line break or NUL. -func is_breakz(b []byte, i int) bool { - //return is_break(b, i) || is_z(b, i) - return ( // is_break: - b[i] == '\r' || // CR (#xD) - b[i] == '\n' || // LF (#xA) - b[i] == 0xC2 && b[i+1] == 0x85 || // NEL (#x85) - b[i] == 0xE2 && b[i+1] == 0x80 && b[i+2] == 0xA8 || // LS (#x2028) - b[i] == 0xE2 && b[i+1] == 0x80 && b[i+2] == 0xA9 || // PS (#x2029) - // is_z: - b[i] == 0) -} - -// Check if the character is a line break, space, or NUL. -func is_spacez(b []byte, i int) bool { - //return is_space(b, i) || is_breakz(b, i) - return ( // is_space: - b[i] == ' ' || - // is_breakz: - b[i] == '\r' || // CR (#xD) - b[i] == '\n' || // LF (#xA) - b[i] == 0xC2 && b[i+1] == 0x85 || // NEL (#x85) - b[i] == 0xE2 && b[i+1] == 0x80 && b[i+2] == 0xA8 || // LS (#x2028) - b[i] == 0xE2 && b[i+1] == 0x80 && b[i+2] == 0xA9 || // PS (#x2029) - b[i] == 0) -} - -// Check if the character is a line break, space, tab, or NUL. -func is_blankz(b []byte, i int) bool { - //return is_blank(b, i) || is_breakz(b, i) - return ( // is_blank: - b[i] == ' ' || b[i] == '\t' || - // is_breakz: - b[i] == '\r' || // CR (#xD) - b[i] == '\n' || // LF (#xA) - b[i] == 0xC2 && b[i+1] == 0x85 || // NEL (#x85) - b[i] == 0xE2 && b[i+1] == 0x80 && b[i+2] == 0xA8 || // LS (#x2028) - b[i] == 0xE2 && b[i+1] == 0x80 && b[i+2] == 0xA9 || // PS (#x2029) - b[i] == 0) -} - -// Determine the width of the character. -func width(b byte) int { - // Don't replace these by a switch without first - // confirming that it is being inlined. - if b&0x80 == 0x00 { - return 1 - } - if b&0xE0 == 0xC0 { - return 2 - } - if b&0xF0 == 0xE0 { - return 3 - } - if b&0xF8 == 0xF0 { - return 4 - } - return 0 - -} diff --git a/vendor/modules.txt b/vendor/modules.txt deleted file mode 100644 index b999577c..00000000 --- a/vendor/modules.txt +++ /dev/null @@ -1,5 +0,0 @@ -# github.com/client9/misspell v0.3.4 -github.com/client9/misspell/cmd/misspell -github.com/client9/misspell -# gopkg.in/yaml.v3 v3.0.0-20190409140830-cdc409dda467 -gopkg.in/yaml.v3 diff --git a/wg-apply/README.md b/wg-apply/README.md index 1b1e6be2..e159dea3 100644 --- a/wg-apply/README.md +++ b/wg-apply/README.md @@ -23,10 +23,9 @@ Resources can be found in [this Google drive folder](https://drive.google.com/dr * Daniel Smith (**[@lavalamp](https://github.com/lavalamp)**), Google ## Contact -* [Slack](https://kubernetes.slack.com/messages/wg-apply) -* [Mailing list](https://groups.google.com/forum/#!forum/kubernetes-wg-apply) -* [Open Community Issues/PRs](https://github.com/kubernetes/community/labels/wg%2Fapply) - +- Slack: [#wg-apply](https://kubernetes.slack.com/messages/wg-apply) +- [Mailing list](https://groups.google.com/forum/#!forum/kubernetes-wg-apply) +- [Open Community Issues/PRs](https://github.com/kubernetes/community/labels/wg%2Fapply) <!-- BEGIN CUSTOM CONTENT --> <!-- END CUSTOM CONTENT --> diff --git a/wg-component-standard/README.md b/wg-component-standard/README.md index 0946952a..6552d463 100644 --- a/wg-component-standard/README.md +++ b/wg-component-standard/README.md @@ -8,7 +8,7 @@ To understand how this file is generated, see https://git.k8s.io/community/gener ---> # Component Standard Working Group -Develop a standard foundation (philosophy and libraries) for core Kubernetes components to build on top of. Areas to standardize include configuration (flags, ComponentConfig APIs, ...), status endpoints (healthz, configz, ...), integration points (delegated authn/z, ...), and logging. Details are outlined in KEP 0032: https://github.com/kubernetes/enhancements/blob/master/keps/sig-cluster-lifecycle/0032-create-a-k8s-io-component-repo.md. +Develop a standard foundation (philosophy and libraries) for core Kubernetes components to build on top of. Areas to standardize include configuration (flags, ComponentConfig APIs, ...), status endpoints (healthz, configz, ...), integration points (delegated authn/z, ...), and logging. Details are outlined in KEP 0032: https://github.com/kubernetes/enhancements/blob/master/keps/sig-cluster-lifecycle/wgs/0032-create-a-k8s-io-component-repo.md. ## Stakeholder SIGs * SIG API Machinery @@ -16,29 +16,21 @@ Develop a standard foundation (philosophy and libraries) for core Kubernetes com * SIG Cluster Lifecycle ## Meetings -* Regular WG Meeting: [Tuesdays at 08:30 PT (Pacific Time)](https://zoom.us/j/705540322) (weekly). [Convert to your timezone](http://www.thetimezoneconverter.com/?t=08:30&tz=PT%20%28Pacific%20Time%29). +* Regular WG Meeting (please join kubernetes-dev@googlegroups.com or kubernetes-wg-component-standard@googlegroups.com to access the notes): [Tuesdays at 08:30 PT (Pacific Time)](https://zoom.us/j/705540322) (weekly). [Convert to your timezone](http://www.thetimezoneconverter.com/?t=08:30&tz=PT%20%28Pacific%20Time%29). * [Meeting notes and Agenda](https://docs.google.com/document/d/18TsodX0fqQgViQ7HHUTAhiAwkf6bNhPXH4vNVTI7GwI). ## Organizers -* Lucas Käldström (**[@luxas](https://github.com/luxas)**), Luxas Labs (occasionally contracting for Weaveworks) * Michael Taufen (**[@mtaufen](https://github.com/mtaufen)**), Google +* Leigh Capili (**[@stealthybox](https://github.com/stealthybox)**), Weaveworks * Dr. Stefan Schimanski (**[@sttts](https://github.com/sttts)**), Red Hat ## Contact -* [Slack](https://kubernetes.slack.com/messages/wg-component-standard) -* [Mailing list](https://groups.google.com/forum/#!forum/kubernetes-wg-component-standard) -* [Open Community Issues/PRs](https://github.com/kubernetes/community/labels/wg%2Fcomponent-standard) - -## GitHub Teams - -The below teams can be mentioned on issues and PRs in order to get attention from the right people. -Note that the links to display team membership will only work if you are a member of the org. - -| Team Name | Details | Description | -| --------- |:-------:| ----------- | -| @kubernetes/wg-component-standard | [link](https://github.com/orgs/kubernetes/teams/wg-component-standard) | Component Standard Discussion | - +- Slack: [#wg-component-standard](https://kubernetes.slack.com/messages/wg-component-standard) +- [Mailing list](https://groups.google.com/forum/#!forum/kubernetes-wg-component-standard) +- [Open Community Issues/PRs](https://github.com/kubernetes/community/labels/wg%2Fcomponent-standard) +- GitHub Teams: + - [@kubernetes/wg-component-standard](https://github.com/orgs/kubernetes/teams/wg-component-standard) - Component Standard Discussion <!-- BEGIN CUSTOM CONTENT --> <!-- END CUSTOM CONTENT --> diff --git a/wg-iot-edge/README.md b/wg-iot-edge/README.md index b801f521..cb803b01 100644 --- a/wg-iot-edge/README.md +++ b/wg-iot-edge/README.md @@ -23,15 +23,14 @@ A Working Group dedicated to discussing, designing and documenting using Kuberne ## Organizers * Steve Wong (**[@cantbewong](https://github.com/cantbewong)**), VMware -* Cindy Xing (**[@cindyxing](https://github.com/cindyxing)**), Huawei +* Cindy Xing (**[@cindyxing](https://github.com/cindyxing)**), Microsoft * Dejan Bosanac (**[@dejanb](https://github.com/dejanb)**), Red Hat * Preston Holmes (**[@ptone](https://github.com/ptone)**), Google ## Contact -* [Slack](https://kubernetes.slack.com/messages/wg-iot-edge) -* [Mailing list](https://groups.google.com/forum/#!forum/kubernetes-wg-iot-edge) -* [Open Community Issues/PRs](https://github.com/kubernetes/community/labels/wg%2Fiot-edge) - +- Slack: [#wg-iot-edge](https://kubernetes.slack.com/messages/wg-iot-edge) +- [Mailing list](https://groups.google.com/forum/#!forum/kubernetes-wg-iot-edge) +- [Open Community Issues/PRs](https://github.com/kubernetes/community/labels/wg%2Fiot-edge) <!-- BEGIN CUSTOM CONTENT --> This working group is a cross-SIG effort currently sponsored by _sig-networking_ and _sig-multicluster_ with a focus on improving Kubernetes IoT and Edge deployments. Community members are encouraged to share their ideas in this working group to reach broad consensus across the SIGs. Once consensus is reached, the enhancements @@ -48,4 +47,7 @@ are then managed by the appropriate SIGs based on impacted areas of code. It is an open and active working group, and we always welcome new additions! +## Publications +* [Edge Security Challenges](whitepapers/edge-securuity-challenges/) + <!-- END CUSTOM CONTENT --> diff --git a/wg-iot-edge/whitepapers/edge-securuity-challenges/README.md b/wg-iot-edge/whitepapers/edge-securuity-challenges/README.md new file mode 100644 index 00000000..8f31fc54 --- /dev/null +++ b/wg-iot-edge/whitepapers/edge-securuity-challenges/README.md @@ -0,0 +1,250 @@ +# **Edge Security Challenges** + + +__By Kilton Hopkins, Jono Bergquist, Bernhard Ortner, Moritz Kröger, Steve Wong__ + +__Status:__ +* __3/27/2019 - Initial draft__ +* __5/7/2019 - First integration of contributions__ +* __6/10/2019 - Second integration of contributions__ +* __7/26/2019 - First published version 1.0__ + + +## 1 Scope of this document + +The purpose of this document is to describe a set of edge security challenges and concerns that the Kubernetes community feels is mostly complete. Using this format, we will avoid trying to both expose and solve security issues in the same document, which is likely to result in long timeframes for paper completion. + + +### 1.1 Goals + + + +* Identify the set of security challenges at the edge that are universal (cover roughly 80% of the total security concerns for all use cases) +* Describe each security challenge in a manner that allows all professionals with a moderate level of technical skill to understand the issue + + +### 1.2 Non-goals + + + +* Limit the scope of any security discussions outside of this paper +* Recommend any particular course of action regarding edge security +* Attempt to definitively solve the security challenges listed herein + + +## 2 Trusting hardware + +All edge computing rests upon the edge hardware. There is a trend toward increasing computing power coupled with lower energy consumption, which is enabling a rise in the count and ability of edge devices. And although security is a popular topic, there does not appear to be as strong of a trend toward enhancing hardware security. + +Even when hardware security features are present, the incorporation of that security into the software layers of systems is frequently missing. Being able to trust edge hardware is the very underpinning of secure edge computing but it only has value if integrated fully. + + +### 2.1 Hardware root of trust is a starting point + +Various methods exist for providing a hardware-based root of trust that can be relied upon for building a trusted edge computing node (e.g. [TPM](https://en.wikipedia.org/wiki/Trusted_Platform_Module), [HSM](https://en.wikipedia.org/wiki/Hardware_security_module), [RIoT security architecture](https://www.microsoft.com/en-us/research/wp-content/uploads/2016/06/RIoT20Paper-1.1-1.pdf)). Ideally the mechanism for hardware root of trust will serve as a foundational building block upon which software security layers can rely. While there is great value in end-to-end hardware verification solutions on their own, if the root of trust cannot be extended into the software infrastructure directly at the edge then a completely secure system may not be possible because of the gap. An example of this scenario would be a cloud-based hardware verification portal wherein the hardware identities are provisioned and controlled directly with no opportunity to verify the hardware in tandem with other security mechanisms. + +When properly available for integration, the hardware root of trust becomes the starting identity on top of which the other software-based components can be built. It may be possible to use the hardware identity as a portion of an integrated edge node signature, but it also may just be sufficient to validate the hardware identity in the edge software and take actions upon failure. No matter how the integration is achieved, it is a starting point for the whole system, as deploying secure edge microservices to untrusted hardware defeats much of the purpose. + + +### 2.2 Condition of hardware + +A challenge of edge hardware is to guarantee integrity of a reliable source of information about the condition of the device. Using insecure hardware condition information may lead to an increase in vulnerabilities. + + + +To identify insecure devices, information about the amount of RAM, CPU, and storage available on an edge node can be stored and serve as valuable data source for purposes or orchestration and administration. Furthermore, it is also valuable for identifying potential security violations for example, unexpected increases in CPU consumption may indicate that an unauthorized process is being executed. + + + +Other hardware attributes such as battery level or location (GPS coordinates) can play a role, as well. For example the battery level can be used to avoid a break in secure data streams by reallocating processing or a change of the device’s GPS coordinate changes can be used to force a shutdown of that particular software due to the fact that the device may be compromised. + + +### 2.3 Physical Component Access + +For IoT/edge deployments, physical security can no longer make the same guarantees that data center deployments are able to. Devices live in the field and anyone with the proper motivation will find a way to access the hardware. With this in mind, it’s important to consider low-level components on a mainboard that become viable targets. SPI flash ROM, EEPROM and other non-volatile flash storage that typically hold the mainboard firmware require specialized tools to access and re-program but should still be considered vulnerable in edge scenarios with reduced physical security guarantees. Even debugging interfaces like JTAG are open to manipulation or leaking of sensitive hardware data. This validates the idea of using hardware security devices like a TPM to form the initial root of trust and validate that these mainboard components haven’t been compromised. + +While TPMs provide a potential solution for mainboard components that can be accessed, there is still the concern of ports like USB, SATA, and other common buses that are not included in the original hardware design being accessed by a motivated attacker. Protecting against unauthorized (and likely unexpected) external devices accessing edge nodes via these peripheral interfaces is more important at the edge than in physically secure data centers. + + +### 2.4 Indication of compromise + +Some edge hardware designs include intrusion detection mechanisms, often related to the opening of casing. In some cases the intrusion simply results in the edge computer refusing to boot. In other cases the intrusion results in a notification to the owner of the hardware. For a completely secure edge computing system, any indication of hardware compromise should probably result in immediate software actions being taken, as well. The challenge is to remove important information (data, software, etc.) upon detecting compromise and before it can be accessed by an unauthorized person. + + +### 2.5 Authenticity of hardware + +Even when edge hardware contains a root of trust technology implementation, and even if that root of trust is integrated with software layers above it, there may still be a foundational breach of security if the authenticity of the hardware cannot be assured. A mainboard that masks espionage functionality as a trusted device will appear to be non-compromised but it was, in fact, designed to be untrustworthy from the start. + +While these threats are typically only reserved for nation-state threat actors that have the sovereignty, influence and resources to launch an attack of this sophistication and addressing this security challenge goes far beyond the scope of technology or architecture and reaches into the areas of business operations and supply chain management, it is noted here for good reasonThe cost of replacing edge hardware, once deployed, can be much higher than replacing hardware in a centralized location. Additionally, the opportunity to discover covert edge hardware functionality may be much lower than if the hardware were present in a controlled physical location. The owner may simply never be physically near enough to the edge device during production operation in order to detect unexpected behavior. + + +## 3 Trusting connected devices + +Edge compute nodes are frequently intended for processing data closer to the source. For many edge and IoT use cases, the source of data is not physically integrated with the edge compute hardware. Devices such as wireless sensors and IP video cameras report their data on a network shared with the edge compute node. Being able to trust the entire set of connected devices is important for mission-critical systems and should be strongly considered for almost every edge situation. Unfortunately it is not simple and many of the challenges related to this topic require different vendors working together in concert to produce scalable solutions. + + +### 3.1 Verifying devices and detecting corruption + +It is difficult to verify the identity of a sensor or other device connected to an IoT gateway or wireless base station, yet this is necessary for creating a trusted edge data source. One problem is that device identities must be presented in a way that can be verified automatically. This problem can be addressed by introducing a digital signature. The signatures from edge compute nodes (and even sensor devices) are an effective way to verify the identity of the node. They build upon a key that is related to the hardware of the device and must be accessible to the software or firmware that produces the signature. Because this key is only intended to be used by the trusted edge compute node, activities performed with that identity are usually trusted fully. + +Currently most off-the-shelf devices are not designed with a unique identity in the field. For devices that do present an identity, one must also consider the possibility of spoofing or appropriation of that identity for malicious purposes. In some cases the edge hardware is easily physically accessible, possibly even within the reach of the general public. If the trusted identity is copied by an attacker, an attacker can impersonate the edge compute node. The challenge is to ensure that the identity being trusted can be guaranteed to have integrity. + +One approach to increase the integrity of a device, is to restrict the modification of data to certain formats, lengths, or volumes. This reduces the likelihood of that configuration-channels become an attack surface for various attack scenarios, but it still does not solve the issue of adversarial data that appears in the appropriate format. An example is a system configuration is overwritten and adjusts coolant device automatically in response to temperature increases of a motor. As a result, an attacker can starve the motor of coolant and possibly engender a machine failure. This issue can be addressed by adding a verification and validation step before accepting altered data. + + +### 3.2 Protecting data and commands + +Once data enters an edge compute node, it may be stored, copied, forwarded, and used in any number of analyses. Outside of the software that receives the original data, it is difficult to guarantee the integrity as it travels onward. The same challenge exists for commands flowing to edge devices. Some commands, such as door latch actuators, should be carefully protected because spoofing or intercepting the command could result in tangible damages or losses. Mission-critical communications such as a “stop” or “kill” signal in manufacturing will likely need to be delivered with minimal delay, yet security layers used to verify the signal can introduce latency. Methods of protecting data and commands will likely involve encryption, but establishing an encrypted communication channel with a verified device identity remains an issue. + + +### 3.3 Device management + +The concept of device management includes a very large set of activities and functionality. Everything from provisioning devices for use in a solution to monitoring battery life and updating firmware can be placed under this topic. Many device management systems accept information about the state of a device without question. In some cases, the point of ingestion for device status information is an open API available at a public IP address. For production systems, this poses a significant security threat because + + false device status information may result in physical actions. Losses in the form of time, wages, materials, and fuel are possible. But additionally the system may be distributing commands or other information to false devices which are indistinguishable from legitimate devices. + + +## 4 Operating system + +It may be more appropriate to place some of these items into different categories but for now I have placed them in with operating system concerns. Solutions for secure operating systems exist but much like hardware root of trust implementations, they are often not integrated with greater software infrastructure and almost certainly not with microservices infrastructure at the edge. + + +### 4.1 BIOS and secure boot + +During secure boot, the early stage drivers and boot loader are hashed by the BIOS and can be verified against an expected hash value stored in a hardware root of trust module like TPM. This is a great start and can be especially effective if a signed report of the hash comparison is sent off the machine as attestation. + +Any later stage drivers and user space software will be the subject of security technologies that apply after secure boot, of course. The secure boot process accomplishes only what its name describes. But unfortunately secure boot also relies on BIOS software that executes all of the steps. Protecting the integrity of the BIOS is therefore a key part of getting an edge computing node from powering on through the part where software on top of the operating system can take over. In many cases, off-the-shelf mainboards allow a BIOS update through a set of actions that the user can take with a keyboard attached to a USB port. Single board computers and hardware designed for the edge is usually more protected, fortunately. In any case, the challenge is to protect the BIOS as thoroughly as possible because it can link the hardware root of trust and operating system into a secure chain but can be a very difficult attack point to detect otherwise. + + +### 4.2 Running processes and binary attestation + +Once the later stage operating system drivers are loading and user space software is beginning to activate, most edge compute nodes are expected to be somewhat flexible in terms of running binaries. After all, there is little need for edge computing infrastructure if the processing taking place at the edge can be permanently planned in advance and will not change. + +Because edge software is dynamic, we can monitor the binaries that get loaded at the close of the standard secure boot process and afterward but we cannot simply block non-whitelist software. An attestation method may be most appropriate here, but regardless of the technique some form of remote awareness and control of running processes is needed. The security challenge does not end with this, however, because it is likely that rogue software would falsify or cancel reporting of process monitoring as an immediate step once invoked. The challenge in this situation includes finding a way to take action immediately at the edge for the detection of unauthorized software running directly on the operating system. + + +### 4.4 Component Firmware Vulnerabilities + +This is sometimes grouped into the same challenge as BIOS/Secure Boot concerns but the reality is this is a separate and somewhat unsolvable challenge. Many of the features that may be deployed when designing a secure system built from hardware and software components tied together by cryptography have also been implemented by the suppliers of the most fundamental components of a device’s hardware. At first blush this is fantastic that suppliers of CPUs like Intel and AMD have designed components that are secure but the reality is that their [security systems are a black box](https://boingboing.net/2016/06/15/intel-x86-processors-ship-with.html) as are any additional features designed into these systems or vulnerabilities that may exist. It doesn’t matter how secure of a system that you built on top of these core components, if they are exploitable, none of the security layers you carefully constructed on top will matter. This was a big enough concern that the NSA specifically asked those manufacturers to give the agency a way to completely [disable the systems](https://www.csoonline.com/article/3220476/researchers-say-now-you-too-can-disable-intel-me-backdoor-thanks-to-the-nsa.html). + + +### 4.5 Security Updates of the Operating System + +Once a system is started, the necessity for a security update increases. For a secure delivery of updates to the operating system, the update mirror has to be trust and verified. This configuration will not change often, and therefore can usually be embedded into the edge OS. + +To help secure the delivery channel for the updates, https can be used instead of http. This helps avoid any alterations during the download of the software package. However, once the package is available on the system, it still must be verified, e.g. by checking the signature, before replacing the binary of the system. \ + + + +### 4.6 Audit Trail and Log Files + +The operating system has to log all occurred events with the intention of facilitating an audit. These log files have to be protected in the same manner as regular data. A single event includes the following information but is not limited to: + + + +* Timestamp of the event +* Process identifier +* Access to the data/binaries +* Configuration or source of origin +* Event itself +* Broad categorization of the event (if desired) + + +## 5 Network concerns + +This section is by no means considered complete and will hopefully grow to include all known security issues related to networking at the edge. Some of the issues here have arisen simply due to the fact that edge networks are not protected in the same way as data center LANs. Some of the issues have emerged because distributed systems architectures add complexity. + + +### 5.1 Open ports + +One method of allowing peer-to-peer connections between edge nodes is to open network ports so edge software can expose APIs. On a LAN in a factory, this should not be a problem because the network is closed and therefore standard network security measures can be relied upon. But if the edge node is in a retail store and connected by WiFi, attackers may be able to gain access to the edge node using the open ports or may launch a local denial-of-service attack. It is important to limit port-based addressing to within a hardware device at minimum and/or even down to a logical unit such as a Kubernetes Pod. + + +### 5.2 Fixed VPNs + +To avoid exposing network ports to the public, it is common to use VPNs to interconnect sites or provide mobile edge compute nodes, such as vehicles, with a connection to backend resources. Just like fixed private keys, fixed VPNs can be a very serious security threat because a stolen VPN connection may provide direct access to private networks. + + +### 5.3 Network access control + +Controlling the network access is a crucial aspect of protecting the connected devices, services and data against its unintentional usage. To avoid such requests, a restriction of + +these resources for example via an access control list of trusted and secured identities is a viable approach. A secure identity is a trusted person or process that facilitates + +a secure communication between multiple parties. + +Once this precondition is ensured, the device or service has to properly handle the requests of the ACLs other non-trusted requests are dropped. To avoid a theft of an identity a periodic re-evaluation or change is recommended. + +In addition, the connection to the network can be secured via access credentials. + +They are used to prevent non-authorized connections from various services or databases but those credentials are not tied to any particular network identity in most cases. Possessing the credentials is equivalent to becoming that identity. Even without access credentials, being on the network allows an attacker to occupy the software with invalid requests in a denial-of-service attack. + + +### 5.4 Identity verification of control plane + +It is just as important for an edge compute node to verify the identity of its control plane contacts as it is for the control plane to verify the identity of the edge nodes. A successfully impersonated control plane server has full control over the edge nodes, so steps should be taken to prevent such identity attacks. + +Most systems are designed with devices and gateways deployed at the edge but continue to keep the control plane centralized. There are some scenarios where deploying the control plane at the edge is ideal but comes with significantly more risks. Control planes are made up of device databases, secret stores, and system logic that can manipulate the entire network. Running this system at the edge is an important step forward to realizing a universal compute platform but designing a system that can be secure from physical hardware access, attackers inserting themselves into the network and impersonated or compromised nodes on the network requires significantly more thought than deploying a compute platform in a secure data center. + + +### 5.5 Attacks of transport layer + +When working with communication protocols like Zigbee, Wifi or Bluetooth it is possible to disturb or attack the communication transport layer. By using for example white noise generators the communication between edge-devices and master nodes can be complete blocked and would look similar to something like a denial of service attack. By introducing noise into a network layer some systems will automatically increase the SNR ratio which would lead to an increase in power consumption. + + +### 5.6 Denial-of-thing attacks + +Sensors and actuators at the edge may be an attack vector but they may also be the end target of an attack, as well. By taking advantage of the less complex nature of many sensor devices, even an encrypted connection with a verified identity can be compromised. As a side note, it'd also may be more suitable to label this description as “denial-of-device attacks”. + +Many wireless sensor modules use Bluetooth Low Energy, Zigbee, ZWave, or another form of low-power wireless communication. For example, let’s consider that we have a Bluetooth Low Energy (BLE) fluid level meter that signals when a given reservoir has reached capacity. BLE devices act as servers, waiting for an external device to request a connection. For this example we will assume that this particular BLE device forms a secure connection with devices that can prove authorization to connect by using an access token and a signing identity. This secure functionality is rarely seen in the field but in our thought experiment it provides us with a rather secure wireless sensor. + +If the sensor is powered by a battery we may be able to bring the sensor offline by bombarding it with a series of requests to connect that fail security checks. Our goal as the attacker is not to be granted a data connection but rather to cause the device to use its wireless radio so frequently that it goes offline ahead of any maintenance schedule. Additionally, even if the device is powered by a reliable source such as a wall outlet, we may be able to occupy its limited processing capacity with the same type of bombardment and deny it the ability to form a meaningful connection with the rest of the system. + +Preventing denial-of-thing attacks will probably require changes to the firmware in simple devices. Most edge use cases make use of devices from multiple vendors. To date there has been no unified approach to solving this problem. + + +## 6 Edge microservices + +The goal of all edge infrastructure is to enable dynamic software to operate in a secure and reliable environment. Once that is achieved, the dynamic software (edge microservices) must be secured, as well. + + +### 6.1 Purity of images + +Integrity of the edge microservice images must be verified before they are allowed to run. The microservice has to be optimized and secured in a way, that environmental footprint is locked and kept to a minimum to avoid any unintentional usage of its resources. Otherwise an edge compute node is an open platform for running arbitrary code. + + +### 6.2 Secure delivery of secrets + +Many edge microservices need configuration, API keys, database credentials, and other information that has to be kept secret. If the microservices are built with that information embedded, then the microservice image itself is a security threat. Preferably, edge microservices will receive their sensitive information at runtime through a secure channel and only after their integrity and identity has been verified. In addition, the critical configuration information has to be exchangeable, even during the execution of the microservice to facilitate updates or renewal secure information. + + +### 6.3 Unauthorized microservices + +Any unauthorized edge microservices should be detected and eliminated. The best approach is to prevent any microservice that is not whitelisted from ever starting, of course. Attempts to launch unauthorized microservices should be reported even if prevented successfully. + +A further hurdle for access violations is, to run the microservice with the least required privileges. + + +### 6.4 Controlled access to resources + +Attached devices, such as serial ports and wireless radios, should only be accessible to edge microservices if specifically allowed. As more and more third party software will be operated at the edge, the opportunities for attackers to scan edge compute nodes and find vulnerabilities will increase. Volume mapping for edge microservices provides some good control over access to disk. Similar access control mechanisms need to be in place for other resources to avoid that multiple resources compete against host resources. Furthermore, the authors encourage that the consumed resources are proactively monitored to detect unusual patterns or resource bottlenecks. + + +### 6.5 Guaranteed remote shutdown + +Starting edge microservices remotely from a control plane is excellent but guarantees about the cessation of those microservices and the treatment of their logs and data is important for security. The deletion solution has to take care of a proper management and storage of the files or a proper closing of the log transmission to its log server. Some microservices may only be scheduled to run for short time periods because they possess sensitive information or contain precious intellectual property. Having assurance that the schedule is enforced would be a great benefit. + + +### 6.6 Matching microservices to edge hardware + +Running a sensitive edge microservice on the wrong edge node can be a serious security threat. Most compute resources in cloud and data center environments are interchangeable because they operate on a network and precise physical location is therefore not important. Edge compute nodes, however, may not be interchangeable. They are often physically connected to specific sensors or actuators, such as a door lock, and therefore need some guarantee that the intended edge microservice is running on the designated edge node at the correct time. + + +### 6.7 Unauthorized outbound + +Edge microservices may be authorized to run on a particular edge compute node but still do bad things once running. Attempts to protect edge data fall apart if edge microservices access the data in an authorized way but then transmit that data outside of the expected boundaries. Monitoring and preventing unwanted outbound connections is of critical importance to ensure that the edge infrastructure does not become the perfect opportunity for an attacker to move data out a side channel. + + +### 6.8 Distributed Container Images + +Edge environments benefit greatly from having container images available nearby. Securely distributing container images to the edge requires several layers of security issues to be solved simultaneously, however. The replication of container images from the source of updates to the edge repositories may be a viable channel for an attacker to interrupt, intercept, or perform a replacement. Verifying container images at the edge means having trust in the verification process. That process most likely cannot require a connection back to cloud and data center in order to serve the edge environment properly, but that increases the importance of protecting the edge infrastructure, which may all be physically co-located and therefore easier to compromise. diff --git a/wg-k8s-infra/README.md b/wg-k8s-infra/README.md index 4530361a..04b996c6 100644 --- a/wg-k8s-infra/README.md +++ b/wg-k8s-infra/README.md @@ -25,14 +25,13 @@ The [charter](charter.md) defines the scope and governance of the K8s Infra Work ## Organizers -* Davanum Srinivas (**[@dims](https://github.com/dims)**), Huawei +* Davanum Srinivas (**[@dims](https://github.com/dims)**), VMware * Aaron Crickenberger (**[@spiffxp](https://github.com/spiffxp)**), Google ## Contact -* [Slack](https://kubernetes.slack.com/messages/wg-k8s-infra) -* [Mailing list](https://groups.google.com/forum/#!forum/kubernetes-wg-k8s-infra) -* [Open Community Issues/PRs](https://github.com/kubernetes/community/labels/wg%2Fk8s-infra) - +- Slack: [#wg-k8s-infra](https://kubernetes.slack.com/messages/wg-k8s-infra) +- [Mailing list](https://groups.google.com/forum/#!forum/kubernetes-wg-k8s-infra) +- [Open Community Issues/PRs](https://github.com/kubernetes/community/labels/wg%2Fk8s-infra) <!-- BEGIN CUSTOM CONTENT --> <!-- END CUSTOM CONTENT --> diff --git a/wg-lts/README.md b/wg-lts/README.md index 59ee934c..9302e2f9 100644 --- a/wg-lts/README.md +++ b/wg-lts/README.md @@ -27,13 +27,12 @@ The [charter](charter.md) defines the scope and governance of the LTS Working Gr * Dhawal Yogesh Bhanusali (**[@imkin](https://github.com/imkin)**), VMware * Quinton Hoole (**[@quinton-hoole](https://github.com/quinton-hoole)**), Huawei * Tim Pepper (**[@tpepper](https://github.com/tpepper)**), VMware -* Nick Young (**[@youngnick](https://github.com/youngnick)**), Atlassian +* Nick Young (**[@youngnick](https://github.com/youngnick)**), VMWare ## Contact -* [Slack](https://kubernetes.slack.com/messages/wg-lts) -* [Mailing list](https://groups.google.com/forum/#!forum/kubernetes-wg-lts) -* [Open Community Issues/PRs](https://github.com/kubernetes/community/labels/wg%2Flts) - +- Slack: [#wg-lts](https://kubernetes.slack.com/messages/wg-lts) +- [Mailing list](https://groups.google.com/forum/#!forum/kubernetes-wg-lts) +- [Open Community Issues/PRs](https://github.com/kubernetes/community/labels/wg%2Flts) <!-- BEGIN CUSTOM CONTENT --> ## Goals diff --git a/wg-machine-learning/README.md b/wg-machine-learning/README.md index b1ec8ce4..976c12e3 100755 --- a/wg-machine-learning/README.md +++ b/wg-machine-learning/README.md @@ -26,10 +26,9 @@ Identify and fix gaps in Kubernetes to better support Machine Learning applicati * Vishnu Kannan (**[@vishh](https://github.com/vishh)**), Google ## Contact -* [Slack](https://kubernetes.slack.com/messages/wg-machine-learning) -* [Mailing list](https://groups.google.com/forum/#!forum/kubernetes-wg-machine-learning) -* [Open Community Issues/PRs](https://github.com/kubernetes/community/labels/wg%2Fmachine-learning) - +- Slack: [#wg-machine-learning](https://kubernetes.slack.com/messages/wg-machine-learning) +- [Mailing list](https://groups.google.com/forum/#!forum/kubernetes-wg-machine-learning) +- [Open Community Issues/PRs](https://github.com/kubernetes/community/labels/wg%2Fmachine-learning) <!-- BEGIN CUSTOM CONTENT --> A working group dedicated towards making Kubernetes work best for Machine Learning workloads. diff --git a/wg-multitenancy/README.md b/wg-multitenancy/README.md index 4e3108b4..f676a8f6 100644 --- a/wg-multitenancy/README.md +++ b/wg-multitenancy/README.md @@ -25,14 +25,17 @@ Define the models of multitenancy that Kubernetes will support. Discuss and exec ## Organizers -* David Oppenheimer (**[@davidopp](https://github.com/davidopp)**), Google +* Sanjeev Rampal (**[@srampal](https://github.com/srampal)**), Cisco * Tasha Drew (**[@tashimi](https://github.com/tashimi)**), VMware -## Contact -* [Slack](https://kubernetes.slack.com/messages/wg-multitenancy) -* [Mailing list](https://groups.google.com/forum/#!forum/kubernetes-wg-multitenancy) -* [Open Community Issues/PRs](https://github.com/kubernetes/community/labels/wg%2Fmultitenancy) +## Emeritus Organizers +* David Oppenheimer (**[@davidopp](https://github.com/davidopp)**), Google + +## Contact +- Slack: [#wg-multitenancy](https://kubernetes.slack.com/messages/wg-multitenancy) +- [Mailing list](https://groups.google.com/forum/#!forum/kubernetes-wg-multitenancy) +- [Open Community Issues/PRs](https://github.com/kubernetes/community/labels/wg%2Fmultitenancy) <!-- BEGIN CUSTOM CONTENT --> <!-- END CUSTOM CONTENT --> diff --git a/wg-policy/README.md b/wg-policy/README.md index 0486e2cf..68cb5657 100644 --- a/wg-policy/README.md +++ b/wg-policy/README.md @@ -32,10 +32,9 @@ Provide an overall architecture that describes both the current policy related i * Torin Sandall (**[@tsandall](https://github.com/tsandall)**), Styra ## Contact -* [Slack](https://kubernetes.slack.com/messages/wg-policy) -* [Mailing list](https://groups.google.com/forum/#!forum/kubernetes-wg-policy) -* [Open Community Issues/PRs](https://github.com/kubernetes/community/labels/wg%2Fpolicy) - +- Slack: [#wg-policy](https://kubernetes.slack.com/messages/wg-policy) +- [Mailing list](https://groups.google.com/forum/#!forum/kubernetes-wg-policy) +- [Open Community Issues/PRs](https://github.com/kubernetes/community/labels/wg%2Fpolicy) <!-- BEGIN CUSTOM CONTENT --> <!-- END CUSTOM CONTENT --> diff --git a/wg-resource-management/README.md b/wg-resource-management/README.md index 4e6f0971..76e387ab 100644 --- a/wg-resource-management/README.md +++ b/wg-resource-management/README.md @@ -29,10 +29,9 @@ Designing and shepherding cross-cutting features around compute resource isolati * Vishnu Kannan (**[@vishh](https://github.com/vishh)**), Google ## Contact -* [Slack](https://kubernetes.slack.com/messages/wg-resource-mgmt) -* [Mailing list](https://groups.google.com/forum/#!forum/kubernetes-wg-resource-management) -* [Open Community Issues/PRs](https://github.com/kubernetes/community/labels/wg%2Fresource-management) - +- Slack: [#wg-resource-mgmt](https://kubernetes.slack.com/messages/wg-resource-mgmt) +- [Mailing list](https://groups.google.com/forum/#!forum/kubernetes-wg-resource-management) +- [Open Community Issues/PRs](https://github.com/kubernetes/community/labels/wg%2Fresource-management) <!-- BEGIN CUSTOM CONTENT --> A working group that is a cross-SIG effort currently sponsored by sig-node and sig-scheduling with a focus on improving Kubernetes Compute Resource Management. diff --git a/wg-security-audit/README.md b/wg-security-audit/README.md index 5c9d1749..1b67d4fe 100644 --- a/wg-security-audit/README.md +++ b/wg-security-audit/README.md @@ -10,6 +10,9 @@ To understand how this file is generated, see https://git.k8s.io/community/gener Perform a security audit on k8s with a vendor and produce as artifacts a threat model and whitepaper outlining everything found during the audit. +## Stakeholder SIGs +* SIG Auth + ## Meetings * Regular WG Meeting: [Mondays at 13:00 PT (Pacific Time)](https://docs.google.com/document/d/1RbC4SBZBlKth7IjYv_NaEpnmLGwMJ0ElpUOmsG-bdRA/edit) (weekly). [Convert to your timezone](http://www.thetimezoneconverter.com/?t=13:00&tz=PT%20%28Pacific%20Time%29). @@ -21,23 +24,39 @@ Perform a security audit on k8s with a vendor and produce as artifacts a threat * Joel Smith (**[@joelsmith](https://github.com/joelsmith)**), Red Hat ## Contact -* [Slack](https://kubernetes.slack.com/messages/wg-security-audit) -* [Mailing list](https://groups.google.com/forum/#!forum/kubernetes-wg-security-audit) -* [Open Community Issues/PRs](https://github.com/kubernetes/community/labels/wg%2Fsecurity-audit) - +- Slack: [#wg-security-audit](https://kubernetes.slack.com/messages/wg-security-audit) +- [Mailing list](https://groups.google.com/forum/#!forum/kubernetes-wg-security-audit) +- [Open Community Issues/PRs](https://github.com/kubernetes/community/labels/wg%2Fsecurity-audit) <!-- BEGIN CUSTOM CONTENT --> -## Request For Proposals - -The RFP will be open between 2018/10/29 and 2018/11/30 and has been published [here](https://github.com/kubernetes/community/blob/master/wg-security-audit/RFP.md). +## Published Documents -## Vendor Selection +Trail of Bits and Atredis Partners, in collaboration with the Security Audit Working Group, have released the following documents which +detail their assessment of Kubernetes security posture and their findings. -The [RFP](https://github.com/kubernetes/community/blob/master/wg-security-audit/RFP.md) is now closed. The working group selected Trail of Atredis, a collaboration between [Trail of Bits](https://www.trailofbits.com/) and [Atredis Partners](https://www.atredis.com/) to perform the audit. +### Findings -You can read more about the vendor selection [here](RFP_Decision.md). +* [Kubernetes Security Review](findings/Kubernetes%20Final%20Report.pdf) +* [Attacking and Defending Kubernetes Installations](findings/AtredisPartners_Attacking_Kubernetes-v1.0.pdf) +* [Whitepaper](findings/Kubernetes%20White%20Paper.pdf) +* [Threat Model](findings/Kubernetes%20Threat%20Model.pdf) + +### Ancillary Data + +* [Rapid Risk Assessments](ancillary-data/rapid-risk-assessments) +* [Dataflow](ancillary-data/dataflow) ## Mailing Lists * Sensitive communications regarding the audit should be sent to the [private variant of the mailing list](https://groups.google.com/forum/#!forum/kubernetes-wg-security-audit-private). +## Request For Proposals + +The RFP was open between 2018/10/29 and 2018/11/30 and has been published [here](https://github.com/kubernetes/community/blob/master/wg-security-audit/RFP.md). + +## Vendor Selection + +The [RFP](https://github.com/kubernetes/community/blob/master/wg-security-audit/RFP.md) is now closed. The working group selected Trail of Atredis, a collaboration between [Trail of Bits](https://www.trailofbits.com/) and [Atredis Partners](https://www.atredis.com/) to perform the audit. + +You can read more about the vendor selection [here](RFP_Decision.md). + <!-- END CUSTOM CONTENT --> diff --git a/wg-security-audit/ancillary-data/dataflow/original dataflow.dot b/wg-security-audit/ancillary-data/dataflow/original dataflow.dot new file mode 100644 index 00000000..02d2f830 --- /dev/null +++ b/wg-security-audit/ancillary-data/dataflow/original dataflow.dot @@ -0,0 +1,47 @@ +digraph K8S { + subgraph cluster_apiserverinternal { + node [style=filled]; + color=green; + etcd[label="etcd"]; + label = "API Server Data Layer"; + } + + subgraph cluster_apiserver { + node [style=filled]; + color=blue; + kubeapiserver[label="kube-apiserver"]; + kubeapiserver->etcd[label="HTTPS"] + label = "API Server"; + } + + subgraph cluster_mastercomponents { + node [style=filled]; + label = "Master Control Plane Components"; + scheduler[label="Scheduler"]; + controllers[label="Controllers"] + scheduler->kubeapiserver[label="Callback/HTTPS"]; + controllers->kubeapiserver[label="Callback/HTTPS"]; + color=black; + } + + subgraph cluster_worker { + label="Worker" + color="blue" + kubelet->kubeapiserver[label="authenticated HTTPS"] + kubeproxy[label="kube-proxy"] + iptables->kubeproxy->iptables + pods[label="pods with various containers"] + pods->kubeproxy->pods + } + + subgraph cluster_internet { + label="Internet" + authuser[label="Authorized User via kubebctl"] + generaluser[label="General User"] + authuser->kubeapiserver[label="Authenticated HTTPS"] + generaluser->pods[label="application-specific connection protocol"] + } + kubeapiserver->kubelet[label="HTTPS"] + kubeapiserver->pods[label="HTTP",color=red] +} + diff --git a/wg-security-audit/ancillary-data/dataflow/original dataflow.png b/wg-security-audit/ancillary-data/dataflow/original dataflow.png Binary files differnew file mode 100644 index 00000000..62c6680e --- /dev/null +++ b/wg-security-audit/ancillary-data/dataflow/original dataflow.png diff --git a/wg-security-audit/ancillary-data/dataflow/process.sh b/wg-security-audit/ancillary-data/dataflow/process.sh new file mode 100644 index 00000000..0a446eb3 --- /dev/null +++ b/wg-security-audit/ancillary-data/dataflow/process.sh @@ -0,0 +1,3 @@ +python3 tm.py --dfd > updated-dataflow.dot +dot -Tpng < updated-dataflow.dot > updated-dataflow.png +open updated-dataflow.png diff --git a/wg-security-audit/ancillary-data/dataflow/requirements.txt b/wg-security-audit/ancillary-data/dataflow/requirements.txt new file mode 100644 index 00000000..f65609d4 --- /dev/null +++ b/wg-security-audit/ancillary-data/dataflow/requirements.txt @@ -0,0 +1 @@ +pytm==0.4 diff --git a/wg-security-audit/ancillary-data/dataflow/tm.py b/wg-security-audit/ancillary-data/dataflow/tm.py new file mode 100644 index 00000000..245501ff --- /dev/null +++ b/wg-security-audit/ancillary-data/dataflow/tm.py @@ -0,0 +1,106 @@ +# !/usr/bin/env python3 + +from pytm.pytm import TM, Server, Datastore, Dataflow, Boundary, Actor, Lambda, Process + +tm = TM("Kubernetes Threat Model") +tm.description = "a deep-dive threat model of Kubernetes" + +# Boundaries + +inet = Boundary("Internet") +mcdata = Boundary("Master Control Data") +apisrv = Boundary("API Server") +mcomps = Boundary("Master Control Components") +worker = Boundary("Worker") +contain = Boundary("Container") + +# Actors + +miu = Actor("Malicious Internal User") +ia = Actor("Internal Attacker") +ea = Actor("External Actor") +admin = Actor("Administrator") +dev = Actor("Developer") +eu = Actor("End User") + +# Server & OS Components + +etcd = Datastore("N-ary etcd servers") +apiserver = Server("kube-apiserver") +kubelet = Server("kubelet") +kubeproxy = Server("kube-proxy") +scheduler = Server("kube-scheduler") +controllers = Server("CCM/KCM") +pods = Server("Pods") +iptables = Process("iptables") + +# Component <> Boundary Relations +etcd.inBoundary = mcdata +mcdata.inBoundary = apisrv +apiserver.inBoundary = apisrv +kubelet.inBoundary = worker +kubeproxy.inBoundary = worker +pods.inBoundary = contain +scheduler.inBoundary = mcomps +controllers.inBoundary = mcomps +pods.inBoundary = contain +iptables.inBoundary = worker +miu.inBoundary = apisrv +ia.inBoundary = contain +ea.inBoundary = inet +admin.inBoundary = apisrv +dev.inBoundary = inet +eu.inBoundary = inet + +# Dataflows + +apiserver2etcd = Dataflow(apiserver, etcd, "All kube-apiserver data") +apiserver2etcd.isEncrypted = True +apiserver2etcd.protocol = "HTTPS" + +apiserver2kubelet = Dataflow(apiserver, kubelet, "kubelet Health, Status, &c.") +apiserver2kubelet.isEncrypted = False +apiserver2kubelet.protocol = "HTTP" + +apiserver2kubeproxy = Dataflow(apiserver, kubeproxy, "kube-proxy Health, Status, &c.") +apiserver2kubeproxy.isEncrypted = False +apiserver2kubeproxy.protocol = "HTTP" + +apiserver2scheduler = Dataflow(apiserver, scheduler, "kube-scheduler Health, Status, &c.") +apiserver2scheduler.isEncrypted = False +apiserver2scheduler.protocol = "HTTP" + +apiserver2controllers = Dataflow(apiserver, controllers, "{kube, cloud}-controller-manager Health, Status, &c.") +apiserver2controllers.isEncrypted = False +apiserver2controllers.protocol = "HTTP" + +kubelet2apiserver = Dataflow(kubelet, apiserver, "HTTP watch for resources on kube-apiserver") +kubelet2apiserver.isEncrypted = True +kubelet2apiserver.protocol = "HTTPS" + +kubeproxy2apiserver = Dataflow(kubeproxy, apiserver, "HTTP watch for resources on kube-apiserver") +kubeproxy2apiserver.isEncrypted = True +kubeproxy2apiserver.protocol = "HTTPS" + +controllers2apiserver = Dataflow(controllers, apiserver, "HTTP watch for resources on kube-apiserver") +controllers2apiserver.isEncrypted = True +controllers2apiserver.protocol = "HTTPS" + +scheduler2apiserver = Dataflow(scheduler, apiserver, "HTTP watch for resources on kube-apiserver") +scheduler2apiserver.isEncrypted = True +scheduler2apiserver.protocol = "HTTPS" + +kubelet2iptables = Dataflow(kubelet, iptables, "kubenet update of iptables (... ipvs, &c) to setup Host-level ports") +kubelet2iptables.protocol = "IPC" + +kubeproxy2iptables = Dataflow(kubeproxy, iptables, "kube-prxy update of iptables (... ipvs, &c) to setup all pod networking") +kubeproxy2iptables.protocol = "IPC" + +kubelet2pods = Dataflow(kubelet, pods, "kubelet to pod/CRI runtime, to spin up pods within a host") +kubelet2pods.protocol = "IPC" + +eu2pods = Dataflow(eu, pods, "End-user access of Kubernetes-hosted applications") +ea2pods = Dataflow(ea, pods, "External Attacker attempting to compromise a trust boundary") +ia2cnts = Dataflow(ia, pods, "Internal Attacker with access to a compromised or malicious pod") + +tm.process() diff --git a/wg-security-audit/ancillary-data/dataflow/updated-dataflow.dot b/wg-security-audit/ancillary-data/dataflow/updated-dataflow.dot new file mode 100644 index 00000000..671e2dde --- /dev/null +++ b/wg-security-audit/ancillary-data/dataflow/updated-dataflow.dot @@ -0,0 +1,217 @@ +digraph tm { + graph [ + fontname = Arial; + fontsize = 14; + ] + node [ + fontname = Arial; + fontsize = 14; + rankdir = lr; + ] + edge [ + shape = none; + fontname = Arial; + fontsize = 12; + ] + labelloc = "t"; + fontsize = 20; + nodesep = 1; + +subgraph cluster_bfaefefcfbeeafeefac { + graph [ + fontsize = 10; + fontcolor = firebrick2; + style = dashed; + color = firebrick2; + label = <<i>Internet</i>>; + ] + +bfbeacdafaceebdccfdffcdfcedfec [ + shape = square; + label = <<table border="0" cellborder="0" cellpadding="2"><tr><td><b>External Actor</b></td></tr></table>>; +] +abaadcacbbafdffbcffffbeedef [ + shape = square; + label = <<table border="0" cellborder="0" cellpadding="2"><tr><td><b>Developer</b></td></tr></table>>; +] +adafdaeaedeedcafe [ + shape = square; + label = <<table border="0" cellborder="0" cellpadding="2"><tr><td><b>End User</b></td></tr></table>>; +] + +} + +subgraph cluster_bbfdadaacbdaedcebfec { + graph [ + fontsize = 10; + fontcolor = firebrick2; + style = dashed; + color = firebrick2; + label = <<i>Master Control Data</i>>; + ] + +bfffcaeeeeedccabfaaeff [ + shape = none; + color = black; + label = <<table sides="TB" cellborder="0" cellpadding="2"><tr><td><font color="black"><b>N-ary etcd servers</b></font></td></tr></table>>; +] + +} + +subgraph cluster_afeffbbfdbeeefcabddacdba { + graph [ + fontsize = 10; + fontcolor = firebrick2; + style = dashed; + color = firebrick2; + label = <<i>API Server</i>>; + ] + +bdfbefabdbefeacdfcabaac [ + shape = square; + label = <<table border="0" cellborder="0" cellpadding="2"><tr><td><b>Malicious Internal User</b></td></tr></table>>; +] +fabeebdadbcdffdcdec [ + shape = square; + label = <<table border="0" cellborder="0" cellpadding="2"><tr><td><b>Administrator</b></td></tr></table>>; +] +eadddadcfbabebaed [ + shape = circle + color = black + label = <<table border="0" cellborder="0" cellpadding="2"><tr><td><b>kube-apiserver</b></td></tr></table>>; +] + +} + +subgraph cluster_cebcbebffccbfedcaffbb { + graph [ + fontsize = 10; + fontcolor = firebrick2; + style = dashed; + color = firebrick2; + label = <<i>Master Control Components</i>>; + ] + +ffceacecdbcacdddddffbfa [ + shape = circle + color = black + label = <<table border="0" cellborder="0" cellpadding="2"><tr><td><b>kube-scheduler</b></td></tr></table>>; +] +adffdceecfcfbcfdaefca [ + shape = circle + color = black + label = <<table border="0" cellborder="0" cellpadding="2"><tr><td><b>CCM/KCM</b></td></tr></table>>; +] + +} + +subgraph cluster_baaffdafbdceebaaafaefeea { + graph [ + fontsize = 10; + fontcolor = firebrick2; + style = dashed; + color = firebrick2; + label = <<i>Worker</i>>; + ] + +dbddcfaeaacebaecba [ + shape = circle + color = black + label = <<table border="0" cellborder="0" cellpadding="2"><tr><td><b>kubelet</b></td></tr></table>>; +] +ddcaffdfdebdaeff [ + shape = circle + color = black + label = <<table border="0" cellborder="0" cellpadding="2"><tr><td><b>kube-proxy</b></td></tr></table>>; +] +bcdcebabbdaadffeaeddcce [ + shape = circle; + color = black; + + label = <<table border="0" cellborder="0" cellpadding="2"><tr><td><font color="black"><b>iptables</b></font></td></tr></table>>; +] + +} + +subgraph cluster_fdcecbcfbeadaccab { + graph [ + fontsize = 10; + fontcolor = firebrick2; + style = dashed; + color = firebrick2; + label = <<i>Container</i>>; + ] + +bdfadfbeeaedceab [ + shape = square; + label = <<table border="0" cellborder="0" cellpadding="2"><tr><td><b>Internal Attacker</b></td></tr></table>>; +] +eefbffbeaaeecaceaaabe [ + shape = circle + color = black + label = <<table border="0" cellborder="0" cellpadding="2"><tr><td><b>Pods</b></td></tr></table>>; +] + +} + + eadddadcfbabebaed -> bfffcaeeeeedccabfaaeff [ + color = black; + label = <<table border="0" cellborder="0" cellpadding="2"><tr><td><font color ="black"><b>All kube-apiserver data</b></font></td></tr></table>>; + ] + eadddadcfbabebaed -> dbddcfaeaacebaecba [ + color = black; + label = <<table border="0" cellborder="0" cellpadding="2"><tr><td><font color ="black"><b>kubelet Health, Status, &c.</b></font></td></tr></table>>; + ] + eadddadcfbabebaed -> ddcaffdfdebdaeff [ + color = black; + label = <<table border="0" cellborder="0" cellpadding="2"><tr><td><font color ="black"><b>kube-proxy Health, Status, &c.</b></font></td></tr></table>>; + ] + eadddadcfbabebaed -> ffceacecdbcacdddddffbfa [ + color = black; + label = <<table border="0" cellborder="0" cellpadding="2"><tr><td><font color ="black"><b>kube-scheduler Health, Status, &c.</b></font></td></tr></table>>; + ] + eadddadcfbabebaed -> adffdceecfcfbcfdaefca [ + color = black; + label = <<table border="0" cellborder="0" cellpadding="2"><tr><td><font color ="black"><b>{kube, cloud}-controller-manager Health, Status, &c.</b></font></td></tr></table>>; + ] + dbddcfaeaacebaecba -> eadddadcfbabebaed [ + color = black; + label = <<table border="0" cellborder="0" cellpadding="2"><tr><td><font color ="black"><b>HTTP watch for resources on kube-apiserver</b></font></td></tr></table>>; + ] + ddcaffdfdebdaeff -> eadddadcfbabebaed [ + color = black; + label = <<table border="0" cellborder="0" cellpadding="2"><tr><td><font color ="black"><b>HTTP watch for resources on kube-apiserver</b></font></td></tr></table>>; + ] + adffdceecfcfbcfdaefca -> eadddadcfbabebaed [ + color = black; + label = <<table border="0" cellborder="0" cellpadding="2"><tr><td><font color ="black"><b>HTTP watch for resources on kube-apiserver</b></font></td></tr></table>>; + ] + ffceacecdbcacdddddffbfa -> eadddadcfbabebaed [ + color = black; + label = <<table border="0" cellborder="0" cellpadding="2"><tr><td><font color ="black"><b>HTTP watch for resources on kube-apiserver</b></font></td></tr></table>>; + ] + dbddcfaeaacebaecba -> bcdcebabbdaadffeaeddcce [ + color = black; + label = <<table border="0" cellborder="0" cellpadding="2"><tr><td><font color ="black"><b>kubenet update of iptables (... ipvs, &c) to setup Host-level ports</b></font></td></tr></table>>; + ] + ddcaffdfdebdaeff -> bcdcebabbdaadffeaeddcce [ + color = black; + label = <<table border="0" cellborder="0" cellpadding="2"><tr><td><font color ="black"><b>kube-prxy update of iptables (... ipvs, &c) to setup all pod networking</b></font></td></tr></table>>; + ] + dbddcfaeaacebaecba -> eefbffbeaaeecaceaaabe [ + color = black; + label = <<table border="0" cellborder="0" cellpadding="2"><tr><td><font color ="black"><b>kubelet to pod/CRI runtime, to spin up pods within a host</b></font></td></tr></table>>; + ] + adafdaeaedeedcafe -> eefbffbeaaeecaceaaabe [ + color = black; + label = <<table border="0" cellborder="0" cellpadding="2"><tr><td><font color ="black"><b>End-user access of Kubernetes-hosted applications</b></font></td></tr></table>>; + ] + bfbeacdafaceebdccfdffcdfcedfec -> eefbffbeaaeecaceaaabe [ + color = black; + label = <<table border="0" cellborder="0" cellpadding="2"><tr><td><font color ="black"><b>External Attacker attempting to compromise a trust boundary</b></font></td></tr></table>>; + ] + bdfadfbeeaedceab -> eefbffbeaaeecaceaaabe [ + color = black; + label = <<table border="0" cellborder="0" cellpadding="2"><tr><td><font color ="black"><b>Internal Attacker with access to a compromised or malicious pod</b></font></td></tr></table>>; + ] +} diff --git a/wg-security-audit/ancillary-data/dataflow/updated-dataflow.png b/wg-security-audit/ancillary-data/dataflow/updated-dataflow.png Binary files differnew file mode 100644 index 00000000..c86cd09e --- /dev/null +++ b/wg-security-audit/ancillary-data/dataflow/updated-dataflow.png diff --git a/wg-security-audit/ancillary-data/rapid-risk-assessments/container-runtime.md b/wg-security-audit/ancillary-data/rapid-risk-assessments/container-runtime.md new file mode 100644 index 00000000..98130bf1 --- /dev/null +++ b/wg-security-audit/ancillary-data/rapid-risk-assessments/container-runtime.md @@ -0,0 +1,141 @@ +# Overview + +- Component: Container Runtime +- Owner(s): [sig-node](https://github.com/kubernetes/community/blob/master/sig-node/README.md) +- SIG/WG(s) at meeting: +- Service Data Classification: High +- Highest Risk Impact: + +# Service Notes + +The portion should walk through the component and discuss connections, their relevant controls, and generally lay out how the component serves its relevant function. For example +a component that accepts an HTTP connection may have relevant questions about channel security (TLS and Cryptography), authentication, authorization, non-repudiation/auditing, +and logging. The questions aren't the *only* drivers as to what may be spoken about, the questions are meant to drive what we discuss and keep things on task for the duration +of a meeting/call. + +## How does the service work? + +- Container Runtimes expose an IPC endpoint such as a file system socket +- kubelet retrieves pods to be executed from the kube-apiserver +- The Container Runtime Interface then executes the necessary commands/requests from the actual container system (e.g. docker) to run the pod + +## Are there any subcomponents or shared boundaries? + +Yes + +- The Container Runtime technically interfaces with kublet, and runs on the same host +- However, the Container Runtime is logically a separate Trust Zone within the node + +## What communications protocols does it use? + +Various, depends on the IPC mechanism required by the Container Runtime + +## Where does it store data? + +Most data should be provided by kubelet or the CRI in running the container + +## What is the most sensitive data it stores? + +N/A + +## How is that data stored? + +N/A + +# Meeting Notes + + +# Data Dictionary + +| Name | Classification/Sensitivity | Comments | +| :--: | :--: | :--: | +| Data | Goes | Here | + +# Control Families + +These are the areas of controls that we're interested in based on what the audit working group selected. + +When we say "controls," we mean a logical section of an application or system that handles a security requirement. Per CNSSI: + +> The management, operational, and technical controls (i.e., safeguards or countermeasures) prescribed for an information system to protect the confidentiality, integrity, and availability of the system and its information. + +For example, an system may have authorization requirements that say: + +- users must be registered with a central authority +- all requests must be verified to be owned by the requesting user +- each account must have attributes associated with it to uniquely identify the user + +and so on. + +For this assessment, we're looking at six basic control families: + +- Networking +- Cryptography +- Secrets Management +- Authentication +- Authorization (Access Control) +- Multi-tenancy Isolation + +Obviously we can skip control families as "not applicable" in the event that the component does not require it. For example, +something with the sole purpose of interacting with the local file system may have no meaningful Networking component; this +isn't a weakness, it's simply "not applicable." + +For each control family we want to ask: + +- What does the component do for this control? +- What sorts of data passes through that control? + - for example, a component may have sensitive data (Secrets Management), but that data never leaves the component's storage via Networking +- What can attacker do with access to this component? +- What's the simplest attack against it? +- Are there mitigations that we recommend (i.e. "Always use an interstitial firewall")? +- What happens if the component stops working (via DoS or other means)? +- Have there been similar vulnerabilities in the past? What were the mitigations? + +# Threat Scenarios + +- An External Attacker without access to the client application +- An External Attacker with valid access to the client application +- An Internal Attacker with access to cluster +- A Malicious Internal User + +## Networking + +- CRI Runs an HTTP server + - port forwarding, exec, attach +- !FINDING TLS bye default, but not mutual TLS, and self-signed + - kubelet -> exec request to CRI over gRPC + - Returns URL with single use Token + - gRPC is Unix Domain by default +- Kubelet proxies or responds w/ redirect to API server (locally hosted CRI only) +- !FINDING(same HTTP finding for pull as kubectl) CRI actually pulls images, no egress filtering + - image tag is SHA256, CRI checks that +- Not sure how CNI, it might be exec +- only responds to connections +- CRI uses Standard Go HTTP + +## Cryptography + +- Nothing beyond TLS + +## Secrets Management + +- !FINDING auth'd container repos, passed in via podspec, fetched by kubelet, are passed via CLI + - so anyone with access to the host running the container can see those secrets + +## Authentication + +- Unix Domain Socket for gRPC, so Linux authN/authZ +- !FINDING 8 character random single use token with 1 minute lifetype (response to line 109) + +## Authorization + +- no authZ + +## Multi-tenancy Isolation + +- knows nothing about tenants or namespaces +- low-level component, kubelet/api-server is the arbiter + +## Summary + +# Recommendations diff --git a/wg-security-audit/ancillary-data/rapid-risk-assessments/etcd.md b/wg-security-audit/ancillary-data/rapid-risk-assessments/etcd.md new file mode 100644 index 00000000..bbba4fff --- /dev/null +++ b/wg-security-audit/ancillary-data/rapid-risk-assessments/etcd.md @@ -0,0 +1,162 @@ +# Overview + +- Component: etcd +- Owner(s): Technically external to Kubernetes itself, but managed by [sig-api-machinery](https://github.com/kubernetes/community/tree/master/sig-api-machinery) +- SIG/WG(s) at meeting: +- Service Data Classification: Critical (on a cluster with an API server, access to etcd is root access to the cluster) +- Highest Risk Impact: + +# Service Notes + +The portion should walk through the component and discuss connections, their relevant controls, and generally lay out how the component serves its relevant function. For example +a component that accepts an HTTP connection may have relevant questions about channel security (TLS and Cryptography), authentication, authorization, non-repudiation/auditing, +and logging. The questions aren't the *only* drivers as to what may be spoken about, the questions are meant to drive what we discuss and keep things on task for the duration +of a meeting/call. + +## How does the service work? + +- Distributed key-value store +- uses RAFT for consensus + - always need to deploy (N x M) + 1 members to avoid leader election issues + - five is recommended for production usage +- listens for requests from clients +- clients are simple REST clients that interact via JSON or other mechanisms +- in Kubernetes' case, data is stored under `/registry` + +## Are there any subcomponents or shared boundaries? + +There shouldn't be; documentation specifically states: + +- should be in own cluster +- limited to access by the API server(s) only +- should use some sort of authentication (hopefully certificate auth) + +## What communications protocols does it use? + +- HTTPS (with optional client-side or two-way TLS) + - can also use basic auth +- there's technically gRPC as well + +## Where does it store data? + +- typical database-style: + - data directory + - snapshot directory + - write-ahead log (WAL) directory +- all three may be the same, depends on command line options +- Consensus is then achieved across nodes via RAFT (leader election + log replication via distributed state machine) + +## What is the most sensitive data it stores? + +- literally holds the keys to the kingdom: + - pod specs + - secrets + - roles/attributes for {R, A}BAC + - literally any data stored in Kubernetes via the kube-apiserver +- [Access to etcd is equivalent to root permission in the cluster](https://kubernetes.io/docs/tasks/administer-cluster/configure-upgrade-etcd/#securing-etcd-clusters) + +## How is that data stored? + +- Outside the scope of this assessment per se, but not encrypted at rest +- Kubernetes supports this itself with Encryption providers +- the typical process of a WAL + data + snapshot is used +- this is then replicated across the cluster with Raft + +# Meeting Notes + +- No authorization (from k8s perspective) +- AUthentication by local port access in current k8s + - working towards mTLS for all connections +- Raft consensus port, listener port +- backups in etcd (system-level) not encrypted +- metrics aren't encrypted at all either +- multi-tenant: no multi-tenant controls at all + - the kube-apiserver is the arbiter namespaces + - could add namespaces to the registry, but that is a large amount of work + - no migration plan or test + - watches (like kubelet watching for pod spec changes) would break + - multi-single tenant is best route +- RAFT port may be open by default, even in single etcd configuraitons +- runs in a container within static Master kubelet, but is run as root +- [CONTROL WEAKNESS] CA is passed on command line +- Types of files: WAL, Snapshot, Data file (and maybe backup) + - [FINDING] no checksums on WAL/Snapshot/Data + - [RECOMMENDATION] checksum individual WAL entries, checksum the entire snapshot file + - do this because it's fast enough for individual entries, and then the snapshot should never change +- Crypto, really only TLS (std go) and checksums for backups (but not other files, as noted above) +- No auditing, but that's less useful + - kube-apiserver is the arbiter of what things are + - kube-apiserver uses a single connection credential to etcd w/o impersonation, so harder to tell who did what + - major events end up in the app log + - debug mode allows you to see all events when they happen + +# Data Dictionary + +| Name | Classification/Sensitivity | Comments | +| :--: | :--: | :--: | +| Data | Goes | Here | + +# Control Families + +These are the areas of controls that we're interested in based on what the audit working group selected. + +When we say "controls," we mean a logical section of an application or system that handles a security requirement. Per CNSSI: + +> The management, operational, and technical controls (i.e., safeguards or countermeasures) prescribed for an information system to protect the confidentiality, integrity, and availability of the system and its information. + +For example, an system may have authorization requirements that say: + +- users must be registered with a central authority +- all requests must be verified to be owned by the requesting user +- each account must have attributes associated with it to uniquely identify the user + +and so on. + +For this assessment, we're looking at six basic control families: + +- Networking +- Cryptography +- Secrets Management +- Authentication +- Authorization (Access Control) +- Multi-tenancy Isolation + +Obviously we can skip control families as "not applicable" in the event that the component does not require it. For example, +something with the sole purpose of interacting with the local file system may have no meaningful Networking component; this +isn't a weakness, it's simply "not applicable." + +For each control family we want to ask: + +- What does the component do for this control? +- What sorts of data passes through that control? + - for example, a component may have sensitive data (Secrets Management), but that data never leaves the component's storage via Networking +- What can attacker do with access to this component? +- What's the simplest attack against it? +- Are there mitigations that we recommend (i.e. "Always use an interstitial firewall")? +- What happens if the component stops working (via DoS or other means)? +- Have there been similar vulnerabilities in the past? What were the mitigations? + +# Threat Scenarios + +- An External Attacker without access to the client application +- An External Attacker with valid access to the client application +- An Internal Attacker with access to cluster +- A Malicious Internal User + +## Networking + +## Cryptography + +## Secrets Management + +## Authentication + +- by default Kubernetes doesn't use two-way TLS to the etcd cluster, which would be the most secure (combined with IP restrictions so that stolen creds can't be reused on new infrastructure) + +## Authorization + +## Multi-tenancy Isolation + +## Summary + +# Recommendations diff --git a/wg-security-audit/ancillary-data/rapid-risk-assessments/kcm-ccm-notes.md b/wg-security-audit/ancillary-data/rapid-risk-assessments/kcm-ccm-notes.md new file mode 100644 index 00000000..b6bfbb64 --- /dev/null +++ b/wg-security-audit/ancillary-data/rapid-risk-assessments/kcm-ccm-notes.md @@ -0,0 +1,18 @@ +# Meeting notes + +- CCM per cloud provider +- same host as kube-apiserver +- caches live in memory +- refresh cache, but can be forced to by request +- Controller manager attempts to use PoLA, but the service account controller has permission to write to it's own policies +- Cloud controller (routes, IPAM, &c.) can talk to external resources +- CCM/KCM have no notion of multi-tenant, and there are implications going forward +- Deployments across namespace +- cloud controller has access to cloud credentials (passed in by various means, as we saw in the code) +- CCM is a reference implementation, meant to separate out other company's code + - So Amazon doesn't need to have Red Hat's code running, &c. +- shared acache across all controllers +- [FINDING] separate out high privileged controllers from lower privileged ones, so there's no confused deputy + - single binary for controller + - if you can trick the service account controller into granting access to things you shouldn't (for example) that would be problematic + - make a "privileged controller manager" which bundles high and low-privileged controllers, and adds another trust boundary diff --git a/wg-security-audit/ancillary-data/rapid-risk-assessments/kube-apiserver.md b/wg-security-audit/ancillary-data/rapid-risk-assessments/kube-apiserver.md new file mode 100644 index 00000000..0fb851d8 --- /dev/null +++ b/wg-security-audit/ancillary-data/rapid-risk-assessments/kube-apiserver.md @@ -0,0 +1,187 @@ +# Overview + +- Component: kube-apiserver +- Owner(s): [sig-api-machinery](https://github.com/kubernetes/community/tree/master/sig-api-machinery) +- SIG/WG(s) at meeting: +- Service Data Classification: Critical (technically, it isn't needed, but most clusters will use it extensively) +- Highest Risk Impact: + +# Service Notes + +The portion should walk through the component and discuss connections, their relevant controls, and generally lay out how the component serves its relevant function. For example +a component that accepts an HTTP connection may have relevant questions about channel security (TLS and Cryptography), authentication, authorization, non-repudiation/auditing, +and logging. The questions aren't the *only* drivers as to what may be spoken about, the questions are meant to drive what we discuss and keep things on task for the duration +of a meeting/call. + +## How does the service work? + +- RESTful API server +- made up of multiple subcomponents: + - authenticators + - authorizers + - admission controllers + - resource validators +- users issue a request, which is authenticated via one (or more) plugins +- the requests is then authorized by one or more authorizers +- it is then potentially modified and validated by an admission controller +- resource validation that validates the object, stores it in etcd, and responds +- clients issue HTTP requests (via TLS ala HTTPS) to "watch" resources and poll for changes from the server; for example: + 1. a client updates a pod definition via `kubectl` and a `POST` request + 1. the scheduler is "watching" for pod updates via an HTTP watch request to retrieve new pods + 1. the scheduler then update the pod list via a `POST` to the kube-apiserver + 1. a node's `kubelet` retrieves a list of pods assigned to it via an HTTP watch request + 1. the node's `kubelet` then update the running pod list on the kube-apiserver + +## Are there any subcomponents or shared boundaries? + +Yes + +- Controllers technically run on the kube-apiserver +- the various subcomponents (authenticators, authorizers, and so on) run on the kube-apiserver + +additionally, depending on the configuration there may be any number of other Master Control Pane components running on the same phyical/logical host + +## What communications protocols does it use? + +- Communcations to the kube-apiserver use HTTPS and various authentication mechanisms +- Communications from the kube-apiserver to etcd use HTTPS, with optional client-side (two-way) TLS +- Communications from the kube-apiserver to kubelets can use HTTP or HTTPS, the latter is without validation by default (find this again in the docs) + +## Where does it store data? + +- Most data is stored in etcd, mainly under `/registry` +- Some data is obviously stored on the local host, to bootstrap the connection to etcd + +## What is the most sensitive data it stores? + +- Not much sensitive is directly stored on kube-apiserver +- However, all sensitive data within the system (save for in MCP-less setups) is processed and transacted via the kube-apiserver + +## How is that data stored? + +- On etcd, with the level of protection requested by the user +- looks like encryption [is a command line flag](https://kubernetes.io/docs/tasks/administer-cluster/encrypt-data/#configuration-and-determining-whether-encryption-at-rest-is-already-enabled) + +# Meeting notes + +- web hooks: kube-apiserver can call eternal resources + - authorization webhook (for when you wish to auth a request without setting up a new authorizer) + - images, other resources + - [FINDING] supports HTTP +- Aggregate API server // Aggregator + - for adding externisbility resources + - a type of CRD, basically +- component status -> reaches out to every component on the cluster +- Network proxy: restrict outbound connections from kube-apiserver (currently no restriction) + - honestly a weakness: no egress filtering +- Business logic in controllers, but kube-apiserver is info +- cloud prociders, auth, &c +- sharding by group version kind, put all KVKs into the same etcd +- listeners: insecure and secure + - check if insecure is configured by default + - would be a finding if so +- Not comfortable doing true multi-tenant on k8s +- multi-single tenants (as in, if Pepsi wants to have marketing & accounting that's fine, but not Coke & Pepsi on the same cluster) +- Best way to restrict access to kube-apiserver + - and working on a proxy as noted above +- kube-apiserver is the root CA for *at least two* PKIs: + - two CAs, but not on by default w/o flags (check what happens w/o two CAs...) + - that would be a finding, if you can cross CAs really +- TLS (multiple domains): + - etcd -> kube-apiserver + - the other is webhooks/kublet/components... +- check secrets: can you tell k8s to encrypt a secret but not provide the flag? what does it do? +- Alt route for secrets: volumes, write to a volume, then mount + - Can't really do much about that, since it's opaque to the kube-apiserver +- ConfigMap: people can stuff secrets into ConfigMaps + - untyped data blob + - cannot encrypt + - recommend moving away from ConfigMaps +- Logging to var log + - resource names in logs (namespace, secret name, &c). Can be sensitive + - [FINDING] no logs by default who did what + - need to turn on auditing for that + - look at metrics as well, similar to CRDs +- Data Validation + - can have admission controller, webhooks, &c. + - everything goes through validation +- Session + - upgrade to HTTP/2, channel, or SPDY + - JWT is long lived (we know) + - Certain requests like proxy and logs require upgrade to channels + - look at k8s enhancement ... kube-apiserver dot md + +# Data Dictionary + +| Name | Classification/Sensitivity | Comments | +| :--: | :--: | :--: | +| Data | Goes | Here | + +# Control Families + +These are the areas of controls that we're interested in based on what the audit working group selected. + +When we say "controls," we mean a logical section of an application or system that handles a security requirement. Per CNSSI: + +> The management, operational, and technical controls (i.e., safeguards or countermeasures) prescribed for an information system to protect the confidentiality, integrity, and availability of the system and its information. + +For example, an system may have authorization requirements that say: + +- users must be registered with a central authority +- all requests must be verified to be owned by the requesting user +- each account must have attributes associated with it to uniquely identify the user + +and so on. + +For this assessment, we're looking at six basic control families: + +- Networking +- Cryptography +- Secrets Management +- Authentication +- Authorization (Access Control) +- Multi-tenancy Isolation + +Obviously we can skip control families as "not applicable" in the event that the component does not require it. For example, +something with the sole purpose of interacting with the local file system may have no meaningful Networking component; this +isn't a weakness, it's simply "not applicable." + +For each control family we want to ask: + +- What does the component do for this control? +- What sorts of data passes through that control? + - for example, a component may have sensitive data (Secrets Management), but that data never leaves the component's storage via Networking +- What can attacker do with access to this component? +- What's the simplest attack against it? +- Are there mitigations that we recommend (i.e. "Always use an interstitial firewall")? +- What happens if the component stops working (via DoS or other means)? +- Have there been similar vulnerabilities in the past? What were the mitigations? + +# Threat Scenarios + +- An External Attacker without access to the client application +- An External Attacker with valid access to the client application +- An Internal Attacker with access to cluster +- A Malicious Internal User + +## Networking + +- in the version of k8s we are testing, no outbound limits on external connections + +## Cryptography + +- Not encrypting secrets in etcd by default +- requiring [a command line flag](https://kubernetes.io/docs/tasks/administer-cluster/encrypt-data/#configuration-and-determining-whether-encryption-at-rest-is-already-enabled) +- SUpports HTTP for Webhooks and comopnent status + +## Secrets Management + +## Authentication + +## Authorization + +## Multi-tenancy Isolation + +## Summary + +# Recommendations diff --git a/wg-security-audit/ancillary-data/rapid-risk-assessments/kube-proxy.md b/wg-security-audit/ancillary-data/rapid-risk-assessments/kube-proxy.md new file mode 100644 index 00000000..521d0e83 --- /dev/null +++ b/wg-security-audit/ancillary-data/rapid-risk-assessments/kube-proxy.md @@ -0,0 +1,227 @@ +# Overview + +- Component: kube-proxy +- Owner(s): [sig-network](https://github.com/kubernetes/community/tree/master/sig-network) +- SIG/WG(s) at meeting: +- Service Data Classification: Medium +- Highest Risk Impact: + +# Service Notes + +The portion should walk through the component and discuss connections, their relevant controls, and generally lay out how the component serves its relevant function. For example +a component that accepts an HTTP connection may have relevant questions about channel security (TLS and Cryptography), authentication, authorization, non-repudiation/auditing, +and logging. The questions aren't the *only* drivers as to what may be spoken about, the questions are meant to drive what we discuss and keep things on task for the duration +of a meeting/call. + +## How does the service work? + +- kubeproxy has several main modes of operation: + - as a literal network proxy, handling networking between nodes + - as a bridge between Container Network Interface (CNI) which handles the actual networking and the host operating system + - `iptables` mode + - `ipvs` mode + - two Microsoft Windows-specific modes (not covered by the RRA) +- in any of these modes, kubeproxy interfaces with the host's routing table so as to achieve a seamless, flat network across the kubernetes cluster + +## Are there any subcomponents or shared boundaries? + +Yes. + +- Similar to kubelet, kube-proxy run's on the node, with an implicit trust boundary between Worker components and Container components (i.e. pods) + +## What communications protocols does it use? + +- Direct IPC to `iptables` or `ipvs` +- HTTPS to the kube-apiserver +- HTTP Healthz port (which is a literal counter plus a `200 Ok` response) + +## Where does it store data? + +Minimal data should be stored by kube-proxy itself, this should mainly be handled by kubelet and some file system configuration + +## What is the most sensitive data it stores? + +N/A + +## How is that data stored? + +N/A + +# Data Dictionary + +| Name | Classification/Sensitivity | Comments | +| :--: | :--: | :--: | +| Data | Goes | Here | + +# Control Families + +These are the areas of controls that we're interested in based on what the audit working group selected. + +When we say "controls," we mean a logical section of an application or system that handles a security requirement. Per CNSSI: + +> The management, operational, and technical controls (i.e., safeguards or countermeasures) prescribed for an information system to protect the confidentiality, integrity, and availability of the system and its information. + +For example, an system may have authorization requirements that say: + +- users must be registered with a central authority +- all requests must be verified to be owned by the requesting user +- each account must have attributes associated with it to uniquely identify the user + +and so on. + +For this assessment, we're looking at six basic control families: + +- Networking +- Cryptography +- Secrets Management +- Authentication +- Authorization (Access Control) +- Multi-tenancy Isolation + +Obviously we can skip control families as "not applicable" in the event that the component does not require it. For example, +something with the sole purpose of interacting with the local file system may have no meaningful Networking component; this +isn't a weakness, it's simply "not applicable." + +For each control family we want to ask: + +- What does the component do for this control? +- What sorts of data passes through that control? + - for example, a component may have sensitive data (Secrets Management), but that data never leaves the component's storage via Networking +- What can attacker do with access to this component? +- What's the simplest attack against it? +- Are there mitigations that we recommend (i.e. "Always use an interstitial firewall")? +- What happens if the component stops working (via DoS or other means)? +- Have there been similar vulnerabilities in the past? What were the mitigations? + +# Threat Scenarios + +- An External Attacker without access to the client application +- An External Attacker with valid access to the client application +- An Internal Attacker with access to cluster +- A Malicious Internal User + +## Networking + +- kube-proxy is actually five programs +- proxy: mostly deprecated, but a literal proxy, in that it intercepts requests and proxies them to backend services +- IPVS/iptables: very similar modes, handle connecting virtual IPs (VIPs) and the like via low-level routing (the preferred mode) +- two Windows-specific modes (out of scope for this discussion, but if there are details we can certainly add them) + +Node ports: + +- captures traffic from Host IP +- shuffles to backend (used for building load balancers) + +- kube-proxy shells out to `iptables` or `ipvs` +- Also uses a netlink socket for IPVS (netlink are similar to Unix Domain Sockets) +- *Also* shells out to `ipset` under certain circumstances for IPVS (building sets of IPs and such) + + +### User space proxy + +Setup: + +1. Connect to the kube-apiserver +1. Watch the API server for services/endpoints/&c +1. Build in-memory caching map: for services, for every port a service maps, open a port, write iptables rule for VIP & Virt Port +1. Watch for updates of services/endpoints/&c + +when a consumer connects to the port: + +1. Service is running VIP:VPort +1. Root NS -> iptable -> kube-proxy port +1. look at the src/dst port, check the map, pick a service on that port at random (if that fails, try another until either success or a retry count has exceeded) +1. Shuffle bytes back and forth between backend service and client until termination or failure + +### iptables + +1. Same initial setup (sans opening a port directly) +1. iptables restore command set +1. giant string of services +1. User VIP -> Random Backend -> Rewrite packets (at the kernel level, so kube-proxy never sees the data) +1. At the end of the sync loop, write (write in batches to avoid iptables contentions) +1. no more routing table touches until service updates (from watching kube-apiserver or a time out, expanded below) + +**NOTE**: rate limited (bounded frequency) updates: +- no later than 10 minutes by default +- no sooner than 15s by default (if there are no service map updates) + +this point came out of the following question: is having access to kube-proxy *worse* than having root access to the host machine? + +### ipvs + +1. Same setup as iptables & proxy mode +1. `ipvsadm` and `ipset` commands instead of `iptables` +1. This does have some strange changes: + - ip address needs a dummy adapter + - !NOTE Any service bound to 0.0.0.0 are also bound to _all_ adapters + - somewhat expected because 0.0.0.0, but can still lead to interesting behavior + +### concern points within networking + +- !NOTE: ARP table attacks (such as if someone has `CAP_NET_RAW` in a container or host access) can impact kube-proxy +- Endpoint selection is namespace & pod-based, so injection could overwrite (I don't think this is worth a finding/note because kube-apiserver is the arbiter of truth) +- !FINDING (but low...): POD IP Reuse: (factor of 2 x max) cause a machine to churn thru IPS, you could cause a kube-proxy to forward ports to your pod if you win the race condition. + - this would be limited to the window of routing updates + - however, established connections would remain + - kube-apiserver could be the arbiter of routing, but that may require more watch and connection to the central component + - [editor] I think just noting this potential issue and maybe warning on it in kube-proxy logs would be enough + +### with root access? + +Access to kube-proxy is mostly the same as root access + +- set syscalls, route local, &c could gobble memory +- Node/VIP level +- Recommend `CAP_NET_BIND` (bind to low ports, don't need root for certain users) for containers/pods, alleviate concerns there +- Can map low ports to high ports in kube-proxy as well, but mucks with anything that pretends to be a VIP + - LB forwards packets to service without new connection (based on srcport) + - 2-hop LB, can't do direct LB + +## Cryptography + +- kube-proxy itself does not handle cryptography other than the TLS connection to kube-apiserver + +## Secrets Management + +- kube-proxy itself does not handle secrets, but rather only consumes credentials from the command line (like all other k8s components) + +## Authentication + +- kube-proxy does not handle any authentication other than credentials to the kube-apiserver + +## Authorization + +- kube-proxy does not handle any authorization; the arbiters of authorization are kubelet and kube-proxy + +## Multi-tenancy Isolation + +- kube-proxy does not currently segment clients from one another, as clients on the same pod/host must use the same iptables/ipvs configuration +- kube-proxy does have conception of namespaces, but currently avoids enforcing much at that level + - routes still must be added to iptables or the like + - iptables contention could be problematic + - much better to handle at higher-level components, namely kube-apiserver and kube-proxy + +## Logging + +- stderr directed to a file +- same as with kubelet +- !FINDING (but same as all other components) logs namespaces, service names (same as every other service) + +# Additional Notes + +## kubelet to iptables + +- per pod network management +- pods can request a host port, docker style +- kubenet and CNI plugins +- kubenet uses CNI +- setup kubenet iptable to map ports to a single pod +- overly broad, should be appended to iptables list +- all local IPs to the host + +!FINDING: don't use host ports, they can cause problems with services and such; we may recommend deprecating them + +## Summary + +# Recommendations diff --git a/wg-security-audit/ancillary-data/rapid-risk-assessments/kube-scheduler.md b/wg-security-audit/ancillary-data/rapid-risk-assessments/kube-scheduler.md new file mode 100644 index 00000000..5628f8d1 --- /dev/null +++ b/wg-security-audit/ancillary-data/rapid-risk-assessments/kube-scheduler.md @@ -0,0 +1,162 @@ +# Overview + +- Component: kube-scheduler +- Owner(s): [sig-scheduling](https://github.com/kubernetes/community/tree/master/sig-scheduling) +- SIG/WG(s) at meeting: +- Service Data Classifjcation: Moderate (the scheduler adds pods to nodes, but will not remove pods, for the most part) +- Highest Risk Impact: + +# Service Notes + +The portion should walk through the component and discuss connections, their relevant controls, and generally lay out how the component serves its relevant function. For example +a component that accepts an HTTP connection may have relevant questions about channel security (TLS and Cryptography), authentication, authorization, non-repudiation/auditing, +and logging. The questions aren't the *only* drivers as to what may be spoken about, the questions are meant to drive what we discuss and keep things on task for the duration +of a meeting/call. + +## How does the service work? + +- Similar to most other components: + 1. Watches for unscheduled/new pods + 1. Watches nodes with and their resource constraints + 1. Chooses a node, via various mechanisms, to allocate based on best fit of resource requirements + 1. Updates the pod spec on the kube-apiserver + 1. that update is then retrieved by the node, which is also Watching components via the kube-apiserver +- there may be multiple schedulers with various names, and parameters (such as pod-specific schedulers) + +- !NOTE schedulers are coöperative +- !NOTE schedulers are *supposed* to honor the name, but need not + - Interesting note, makes the huge list of schedulers DoS interesting + - !NOTE idea there was to add a *huge* number of pods to be scheduled that are associated with an poorly named scheduler + - !NOTE peopoe shouldn't request specific schedulers in podspec, rather, there should be some webhook to process that + - !NOTE team wasn't sure what would happen with large number of pods to be scheduled + +## Are there any subcomponents or shared boundaries? + +Yes + +- there may be multiple schedulers on the same MCP host +- schedulers may run on the same host as the API server + +## What communications protocols does it use? + +- standard HTTPS + auth (chosen by the cluster) + +## Where does it store data? + +- most should be stored in etcd (via kube-apiserver) +- some data will be stored on command line (configuration options) or on the file system (certificate paths for authentication) + +## What is the most sensitive data it stores? + +- No direct storage + +## How is that data stored? + +- N/A + +# Data Dictionary + +| Name | Classification/Sensitivity | Comments | +| :--: | :--: | :--: | +| Data | Goes | Here | + +# Control Families + +These are the areas of controls that we're interested in based on what the audit working group selected. + +When we say "controls," we mean a logical section of an application or system that handles a security requirement. Per CNSSI: + +> The management, operational, and technical controls (i.e., safeguards or countermeasures) prescribed for an information system to protect the confidentiality, integrity, and availability of the system and its information. + +For example, an system may have authorization requirements that say: + +- users must be registered with a central authority +- all requests must be verified to be owned by the requesting user +- each account must have attributes associated with it to uniquely identify the user + +and so on. + +For this assessment, we're looking at six basic control families: + +- Networking +- Cryptography +- Secrets Management +- Authentication +- Authorization (Access Control) +- Multi-tenancy Isolation + +Obviously we can skip control families as "not applicable" in the event that the component does not require it. For example, +something with the sole purpose of interacting with the local file system may have no meaningful Networking component; this +isn't a weakness, it's simply "not applicable." + +For each control family we want to ask: + +- What does the component do for this control? +- What sorts of data passes through that control? + - for example, a component may have sensitive data (Secrets Management), but that data never leaves the component's storage via Networking +- What can attacker do with access to this component? +- What's the simplest attack against it? +- Are there mitigations that we recommend (i.e. "Always use an interstitial firewall")? +- What happens if the component stops working (via DoS or other means)? +- Have there been similar vulnerabilities in the past? What were the mitigations? + +# Threat Scenarios + +- An External Attacker without access to the client application +- An External Attacker with valid access to the client application +- An Internal Attacker with access to cluster +- A Malicious Internal User + +## Networking + +- only talks to kube-apiserver +- colocated on the same host generally as kube-apiserver, but needn't be +- has a web server (HTTP) + - !FINDING: same HTTP server finding as all other components + - metrics endpoint: qps, scheduling latency, &c + - healthz endpoint, which is just a 200 Ok response + - by default doesn't verify cert (maybe) + +## Cryptography + +- None + +## Secrets Management + +- Logs is the only persistence mechanism +- !FINDING (to be added to all the other "you expose secrets in env and CLI" finding locations) auth token/cred passed in via CLI + +## Authentication + +- no authN really +- pods, nodes, related objects; doesn't deal in authN +- unaware of any service/user accounts + +## Authorization + +- schedluinc concepts protected by authZ + - quotas + - priority classes + - &c +- this authZ is not enforced by scheduler, however, enforced by kube-apiserver + +## Multi-tenancy Isolation + +- tenant: different users of workloads that don't want to trust one another +- namespaces are usually the boundaries +- affinity/anti-affinity for namespace +- scheduler doesn't have data plan access +- can have noisy neighbory problem + - is that the scheduler's issue? + - not sure + - namspace agnostic + - can use priority classes which can be RBAC'd to a specific namespace, like kube-system + - does not handle tenant fairness, handles priorty class fairness + - no visibility into network boundary or usage information + - no cgroup for network counts + - !FINDING anti-affinity can be abused: only I can have this one host, no one else, applicable from `kubectl` + - !NOTE no backoff process for scheduler to reschedule a rejected pod by the kublet; the replicaset controller can create a tightloop (RSC -> Scheduler -> Kubelet -> Reject -> RSC...) + +## Summary + +# Recommendations diff --git a/wg-security-audit/ancillary-data/rapid-risk-assessments/kubelet.md b/wg-security-audit/ancillary-data/rapid-risk-assessments/kubelet.md new file mode 100644 index 00000000..ec972ded --- /dev/null +++ b/wg-security-audit/ancillary-data/rapid-risk-assessments/kubelet.md @@ -0,0 +1,180 @@ +# Overview + +- Component: kubelet +- Owner(s): [sig-node](https://github.com/kubernetes/community/tree/master/sig-node) +- SIG/WG(s) at meeting: +- Service Data Classification: High +- Highest Risk Impact: + +# Service Notes + +The portion should walk through the component and discuss connections, their relevant controls, and generally lay out how the component serves its relevant function. For example +a component that accepts an HTTP connection may have relevant questions about channel security (TLS and Cryptography), authentication, authorization, non-repudiation/auditing, +and logging. The questions aren't the *only* drivers as to what may be spoken about, the questions are meant to drive what we discuss and keep things on task for the duration +of a meeting/call. + +## How does the service work? + +- `kubelet` isses a watch request on the `kube-apiserver` +- `kubelet` watches for pod allocations assigned to the node the kubelet is currently running on +- when a new pod has been allocated for the kubelet's host, it retrieve the pod spec, and interacts with the Container Runtime via local Interprocess Communication to run the container +- Kubelet also handles: + - answering log requests from the kube-apiserver + - monitoring pod health for failures + - working with the Container Runtime to deschedule pods when the pod has been deleted + - updating the kube-apiserver with host status (for use by the scheduler) + +## Are there any subcomponents or shared boundaries? + +Yes. + +- Technically, kubelet runs on the same host as the Container Runtime and kubeproxy +- There is a Trust Zone boundary between the Container Runtime and the kubelet + +## What communications protocols does it use? + +- HTTPS with certificate validation and some authentication mechanism for communication with the kube-apiserver as a client +- HTTPS without certificate validation by default + +## Where does it store data? + +- kubelet itself should not store much data +- kubelet can be run in an "apiserver-less mode" that loads pod manifests from the file system +- most data should be retrieved from the kube-apiserver via etcd +- authentication credentials for the kube-apiserver may be stored on the file system or in memory (both in CLI parameter as well as actual program memory) for the duration of execution + +## What is the most sensitive data it stores? + +- authentication credentials are stored in memory or are out of scope + +## How is that data stored? + +N/A + +# Data Dictionary + +| Name | Classification/Sensitivity | Comments | +| :--: | :--: | :--: | +| Data | Goes | Here | + +# Control Families + +These are the areas of controls that we're interested in based on what the audit working group selected. + +When we say "controls," we mean a logical section of an application or system that handles a security requirement. Per CNSSI: + +> The management, operational, and technical controls (i.e., safeguards or countermeasures) prescribed for an information system to protect the confidentiality, integrity, and availability of the system and its information. + +For example, an system may have authorization requirements that say: + +- users must be registered with a central authority +- all requests must be verified to be owned by the requesting user +- each account must have attributes associated with it to uniquely identify the user + +and so on. + +For this assessment, we're looking at six basic control families: + +- Networking +- Cryptography +- Secrets Management +- Authentication +- Authorization (Access Control) +- Multi-tenancy Isolation + +Obviously we can skip control families as "not applicable" in the event that the component does not require it. For example, +something with the sole purpose of interacting with the local file system may have no meaningful Networking component; this +isn't a weakness, it's simply "not applicable." + +For each control family we want to ask: + +- What does the component do for this control? +- What sorts of data passes through that control? + - for example, a component may have sensitive data (Secrets Management), but that data never leaves the component's storage via Networking +- What can attacker do with access to this component? +- What's the simplest attack against it? +- Are there mitigations that we recommend (i.e. "Always use an interstitial firewall")? +- What happens if the component stops working (via DoS or other means)? +- Have there been similar vulnerabilities in the past? What were the mitigations? + +# Threat Scenarios + +- An External Attacker without access to the client application +- An External Attacker with valid access to the client application +- An Internal Attacker with access to cluster +- A Malicious Internal User + +## Networking + +- Post 10250: read/write, authenticated +- Port 10255: read-only, unauthenticated + - cadvisor uses this, going to be deprecated +- 10248: healthz, unauth'd +- static pod manifest directory +- Static pod fetch via HTTP(S) + +### Routes: + +- Auth filter on API, for 10250 + - delegated to apiserver, subject access review, HTTPS request +- `/pods` podspec on node -> leaks data +- `/healthz` +- `/spec` +- `/stats-{cpu, mem, &c}` +- on 10250 only: + - `/exec` + - `/attach` + - `portforward` + - `/kube-auth` + - `/debug-flags` + - `/cri/{exec, attach, portforward}` + +### Findings: + +- !FINDING: 10255 is unauthenticated and leaks secrets +- !FINDING: 10255/10248 +- !FINDING: 10250 is self-signed TLS + +## Cryptography + +- None + +## Secrets Management + +- returned from kube-apiserver unencrypted +- in memory cache +- if pod mounts disk, written to tmpfs +- !FINDING (already captured) ENV vars can expose secrets +- configmaps are treated like secrets by kubelet +- !FINDING keynames and secret names may be logged +- maintains its own certs, secrets, bootstrap credential + - bootstrap: initial cert used to issue CSR to kube-apiserver + - !NOTE certs are written to disk unencrypted + - !FINDING bootstrap cert may be long lived, w/o a TTL + +## Authentication + +- delegated to kube-apiserver, via HTTPS request, with subject access review +- two-way TLS by default (we believe) +- token auth + - bearer token + - passed to request to API server + - "token review" + - kube-apiserver responds w/ ident + - response is boolean (yes/no is this a user) and username/uid/groups/arbitrary data as a tuple +- no auditing on kublet, but logged on kube-apiserver + +## Authorization + +- delegated to kube-apiserver + +## Multi-tenancy Isolation + +- kube-apiserver is the arbiter +- kubelet doesn't know namespaces really +- every pod is a separate tenant +- pods are security boundaries + +## Summary + +# Recommendations diff --git a/wg-security-audit/ancillary-data/rapid-risk-assessments/template.md b/wg-security-audit/ancillary-data/rapid-risk-assessments/template.md new file mode 100644 index 00000000..b3808395 --- /dev/null +++ b/wg-security-audit/ancillary-data/rapid-risk-assessments/template.md @@ -0,0 +1,95 @@ +# Overview + +- Component: +- Owner(s): +- SIG/WG(s) at meeting: +- Service Data Classification: +- Highest Risk Impact: + +# Service Notes + +The portion should walk through the component and discuss connections, their relevant controls, and generally lay out how the component serves its relevant function. For example +a component that accepts an HTTP connection may have relevant questions about channel security (TLS and Cryptography), authentication, authorization, non-repudiation/auditing, +and logging. The questions aren't the *only* drivers as to what may be spoken about, the questions are meant to drive what we discuss and keep things on task for the duration +of a meeting/call. + +## How does the service work? + +## Are there any subcomponents or shared boundaries? + +## What communications protocols does it use? + +## Where does it store data? + +## What is the most sensitive data it stores? + +## How is that data stored? + +# Data Dictionary + +| Name | Classification/Sensitivity | Comments | +| :--: | :--: | :--: | +| Data | Goes | Here | + +# Control Families + +These are the areas of controls that we're interested in based on what the audit working group selected. + +When we say "controls," we mean a logical section of an application or system that handles a security requirement. Per CNSSI: + +> The management, operational, and technical controls (i.e., safeguards or countermeasures) prescribed for an information system to protect the confidentiality, integrity, and availability of the system and its information. + +For example, an system may have authorization requirements that say: + +- users must be registered with a central authority +- all requests must be verified to be owned by the requesting user +- each account must have attributes associated with it to uniquely identify the user + +and so on. + +For this assessment, we're looking at six basic control families: + +- Networking +- Cryptography +- Secrets Management +- Authentication +- Authorization (Access Control) +- Multi-tenancy Isolation + +Obviously we can skip control families as "not applicable" in the event that the component does not require it. For example, +something with the sole purpose of interacting with the local file system may have no meaningful Networking component; this +isn't a weakness, it's simply "not applicable." + +For each control family we want to ask: + +- What does the component do for this control? +- What sorts of data passes through that control? + - for example, a component may have sensitive data (Secrets Management), but that data never leaves the component's storage via Networking +- What can attacker do with access to this component? +- What's the simplest attack against it? +- Are there mitigations that we recommend (i.e. "Always use an interstitial firewall")? +- What happens if the component stops working (via DoS or other means)? +- Have there been similar vulnerabilities in the past? What were the mitigations? + +# Threat Scenarios + +- An External Attacker without access to the client application +- An External Attacker with valid access to the client application +- An Internal Attacker with access to cluster +- A Malicious Internal User + +## Networking + +## Cryptography + +## Secrets Management + +## Authentication + +## Authorization + +## Multi-tenancy Isolation + +## Summary + +# Recommendations diff --git a/wg-security-audit/findings/AtredisPartners_Attacking_Kubernetes-v1.0.pdf b/wg-security-audit/findings/AtredisPartners_Attacking_Kubernetes-v1.0.pdf Binary files differnew file mode 100644 index 00000000..65ab1e66 --- /dev/null +++ b/wg-security-audit/findings/AtredisPartners_Attacking_Kubernetes-v1.0.pdf diff --git a/wg-security-audit/findings/Kubernetes Final Report.pdf b/wg-security-audit/findings/Kubernetes Final Report.pdf Binary files differnew file mode 100644 index 00000000..fea307e6 --- /dev/null +++ b/wg-security-audit/findings/Kubernetes Final Report.pdf diff --git a/wg-security-audit/findings/Kubernetes Threat Model.pdf b/wg-security-audit/findings/Kubernetes Threat Model.pdf Binary files differnew file mode 100644 index 00000000..9f7be3ea --- /dev/null +++ b/wg-security-audit/findings/Kubernetes Threat Model.pdf diff --git a/wg-security-audit/findings/Kubernetes White Paper.pdf b/wg-security-audit/findings/Kubernetes White Paper.pdf Binary files differnew file mode 100644 index 00000000..867bb48e --- /dev/null +++ b/wg-security-audit/findings/Kubernetes White Paper.pdf |
