text:
Quiz: Baseball Hall of Fame: Can You Match the Player to the Team?: HowStuffWorks
Baseball Hall of Fame: Can You Match the Player to the Team?
By: Becky Stigall
According to the Baseball Hall of Fame, inductees wear caps "based on where that player makes his most indelible mark." But these caps don't always match the team the player spent the most years playing for. Do you know what cap each of these players wears?
Reggie Jackson wears what team's cap on his Baseball Hall of Fame plaque?
Jackson was a member of five World Series champion teams. He was inducted into the Hall of Fame in 1993.
Ty Cobb was welcomed into the Baseball Hall of Fame in 1936. What team's cap does he wear?
Cobb played center field for the Tigers for the majority of his career. He spent his last two seasons with the Philadelphia Athletics.
1937 Hall of Fame inductee, Cy Young, wears what cap?
Cleveland Spiders
Before the Indians, Cleveland had the Spiders. Young pitched for the team. His legal name was Denton True Young.
Babe Ruth was a 1936 HoF inductee. What team's cap does he wear?
Ruth is thought to have done his best work with the Yankees. He played for the team for the majority of his career.
1946 Hall of Fame inductee Johnny Evers wears what team's cap?
Evers played second base for the Cubs for most of his career. He finished out his career with the Boston Braves.
Honus Wagner, 1936 Hall of Fame inductee, wears what cap?
Wagner joined Pittsburgh after three seasons with the Louisville Colonels. He played shortstop, right field and first base.
Lou Gehrig was inducted into the Hall of Fame wearing what team's cap?
Gehrig was inducted into the Baseball Hall of Fame in 1939. He played first base for the Yankees his entire career.
Eddie Plank, a 1946 inductee, wears what team's cap?
Philadelphia Athletics
Plank played all but the last three years of his career with the Athletics, finishing with the St. Louis Terriers and the St. Louis Browns. He was a pitcher.
1956 inductee Hank Greenberg sports what team's cap on his HoF plaque?
Greenberg was a first baseman for the Tigers. He also played left field.
Walter Johnson pitched his way to the Hall of Fame wearing what team's cap?
Johnson played his entire career with the Senators. He retired after the 1927 season.
Baseball great Jackie Robinson wears what team's cap?
Robinson played with the Kansas City Monarchs in 1945, then spent the rest of his career with the Dodgers. He played second base, first base and shortstop.
Lefty Gomez was welcomed into the Baseball Hall of Fame in 1972. What team's cap does he wear?
Gomez played all but his last season with the Yankees. He retired after his 1943 season with the Washington Senators.
1937 HoF inductee Tris Speaker wears what team's cap?
Speaker spent 11 seasons with the Indians. He played center field.
1937 HoF inductee Nap Lajoie wears what team's cap?
Cleveland Naps
Yup, Nap played for the Naps - later to be the Indians - for 13 seasons. He played first and second base during his career.
Willie Mays was welcomed into the Hall of Fame in 1979. He wears what team's cap?
Mays played the majority of his career with the Giants, both in New York as the Gothams, then the Giants, and in San Francisco. He played center field.
1977 inductee Ernie Banks wears what cap on his HoF plaque?
Banks played shortstop and first base for the Cubs. His career spanned 19 years.
Ed Walsh entered the Hall of Fame in 1946. What team's cap does he wear?
Walsh pitched for the White Sox. He played his last season with the Boston Braves.
1947 inductee Carl Hubbell wears what team's cap?
Hubbell pitched for the Giants his entire career. He was a lefty.
1962 inductee Bob Feller wears what team's cap?
Houston A's
Feller pitched for the Indians his entire career. He took off several seasons to serve in the military.
Yogi Berra was welcomed into the Hall of Fame in 1972. What team's cap does he wear?
Berra played for the Yankees his entire career. He was a catcher and an outflelder.
1972 inductee Sandy Koufax wears what team's cap?
Koufax played for the Dodgers his entire career, from Brooklyn to Los Angeles. He was a left-handed pitcher.
1951 HoF inductee Mel Ott sports the cap of what team?
Ott played for the Giants his entire career. He played right field and third base.
Joe DiMaggio was welcomed into the HoF in 1955. What team's cap does he wear?
DiMaggio played for the Yankees his entire career. He played center field.
1968 inductee Goose Goslin wears what team's cap?
Goslin played for the Senators for most of his career. He played left field.
1974 Hall of Fame inductee Mickey Mantle sports what team's cap?
Mantle spent his entire career in New York. He played center field and first base.
Hank Aaron was inducted into the Hall of Fame in 1982. What team's cap does he wear?
Aaron played for the Milwaukee Braves, Atlanta Braves and Milwaukee Brewers. He played right field and first base.
Pitcher Whitey Ford wears what team's cap on his Hall of Fame plaque?
Ford was inducted into the Baseball Hall of Fame in 1974. He pitched for the Yankees his entire career.
Hall of Famer Catfish Hunter sports what team's cap?
Hunter was inducted into the Hall of Fame in 1987. He played most of his career with the Athletics, spending the last few years with the New York Yankees.
Hall of Fame centerfielder Kirby Puckett wears what team's cap?
Puckett spent his entire career with the Twins. He was inducted into the Hall of Fame in 2001.
HoF inductee Ozzie Smith wears what team's cap?
Smith began his career with the San Diego Padres, before moving on to the Cardinals. He was inducted into the Hall of Fame in 2002.
Baseman George Brett sports what team's cap on his Hall of Fame plaque?
Brett played his entire career with the Royals. He was inducted into the Hall of Fame in 1999.
Gaylord Perry wears what team's cap?
Perry pitched for the Giants for 10 seasons before moving on to Cleveland and other teams. He was inducted into the Hall of Fame in 1991.
Hall of Famer Johnny Bench wears what team's cap?
Cincinnatti Reds
Bench played for the Reds his entire career. He played catcher, third base, and first base.
Hall of Famer Ken Griffey wears what team's cap?
Griffey began and ended his s career with the Mariners. He was inducted into the Hall of Fame in 2016.
2007 HoF inductee Cal Ripken sports the cap of what team?
Ripkin spent his entire career with the Orioles. He played shortstop and third base.
Can You Recognize These MLB Legends From Their Hall of Fame Plaques?
Can You Match the Current NFL Star to His Team?
Can You Name These Members of the Baseball Hall of Fame?
Can You Identify One Player on Each NBA Team?
Can You Identify the NHL Team If We Give You Three of Its Franchise Legends?
Can You Identify the NFL Team If We Give You a QB, a RB and a WR?
Build Your NHL Dream Team, and We'll Guess How Old You Are
Can You Identify the NBA Team If We Give You Three Hints?
What Baseball Team Were You Born to Play For?
Pass This NFL Hall of Fame Coaches Challenge and Stay Out of the Red Zone!


ATHENS, Ala. -- The old Pilgrim's Pride chicken plant in Athens will finally be getting a makeover. After sitting empty for 10 years, demolition of the plant is almost completed. Now the city council will look at plans on what to develop that area into.
The site on Pryor Street was a chicken plant dating back to the 1950s. It closed about a decade ago.
"We have a horrible eyesore, 30 acres of land that's sitting here that is just run down. It's got a lot of varmints in it. It just needed to be cleaned up," said Athens Mayor, Ronnie Marks.
The city council purchased the land and started a total demolition.
"The demo is about almost to the ground. Then it's an exciting time where we have an opportunity in our community to build maybe a central park," said the Mayor.
The Athens City Council will hear from two architects at their next meeting, to come up with a vision for the park.
"Some retail development, some outdoor area, and maybe even upstairs loft apartments," said Mayor Marks.
He said a main factor in the design will be walkability.
"It backs up to what will soon, in the next year or so, be a 140 lot subdivision. Then that backs up into our $55 million new high school. And you'll have walkability from going to the high school to the park, all the way to downtown to the arts center."
The mayor said the project will increase property values. They have also created a tax incentive program there so money from developments can be invested back into the project. He said demolition will be completed in the next few months.
The city council will look at the plans of two different architects at their next meeting on Monday, January 28th.


Divides a list into the given number of collated lists. 'For example, converts a list: [1,1,1,2,2,2,3,3,3,4,4,4] and a given number: 3 to [1,2,3,4],[1,2,3,4],[1,2,3,4].
Removes the duplicates in a list.
Replaces instance(s) of a list with a new item.
Randomly shuffles the input list.
A text object is placed next to the node displaying the data flowing into it.
An input node that returns the string name of the chosen class.
Returns the RGB value of the fill color of the node.
An input node that returns the handle of the chosen layer.
Generates a popup dialog from a list of inputs.
Averages the values in a list.
Returns the Greatest Common Divisor of a list of numbers.
Returns the cube root of a value.
Returns the Fibonacci sequence up to the ith value.
Returns the center point of three input points.
Returns the centroid of a poly object.
Returns whether an object is on the screen plane or the layer plane.
Returns the Z coordinate of an object at the input X, Y position.
Toggles the plane of the object between screen plane and layer plane.
Creates a rectangle based on two 2D points.
Creates a rectangular extrude object.
Creates a rectangular extrude based on two 3D points.
Aligns objects to an anchor object at a user chosen 2D bounding box location.
Runs the Compose menu command on a set of input lines/polys.
Moves an object to a new absolute or relative location as chosen in the OIP.
Selects input items on the drawing area.
Returns a point representing the offset from the original point.
Returns true if the input string ends with the input character(s).
Returns true if all characters in the input string are alphanumeric.
Returns true if all characters in the input string are lowercase, UPPERCASE, or Title Case.
Returns true if all characters in the input string are numeric.
Compares two input strings and returns if they are the same with the option of being case sensitive.
Returns true if the input string begins with the input character(s).
Converts all characters of an input string to lowercase, uppercase, or title case.
Concatenates a list of strings.
Returns the location of a substring within the input string.
Return a list of words in the string using a delimiter string. If a maxsplit value is given at most maxsplit splits will be done.
Strips the input character(s) from the beginning, end, or both ends of the input string.
Swaps the case of the input characters.


In the run up to the release for Extinction, ARK : Survival Evolved has released a lot of teasers, both textual and visual, with the team clarifying a lot of doubts from the survivors.
The new trailer reveals a creature called the Gasbags, which abounds on the surface of Earth. Gasbags looks like a creature true to its name, fuelling itself with the power of gas, allowing it to move in air, propelled by gas ejected from pores on its torso. The gas packs a powerful defense against the corrupted creatures on Earth, having the ability to knock them back.
Tame the Gasbags, and so many more creatures in ARK's latest DLC, Extinction, scheduled to release on November 6. Go back to Earth to discover the origin of the ARKs – and decide the future of the planet!


Film and Video Department instructor Manny Kirchheimer will be screening his latest film, TALL: The American Skyscraper and Louis Sullivan, at the newly reopened Museum of Modern Art (MoMA) in Manhattan. Kirchheimer is an award-winning independent filmmaker whose films include We Were So Beloved and Claw.
MoMA will show the 80-minute documentary feature on Friday, November 26, at 5pm and Sunday, November 28, at 2:30pm at 11 West 53rd Street. Admission for film screenings at MoMA is $10, $8 for seniors and $6 for students; film admission does not include museum gallery admission.


What is the preferred language standard required for 2014 Edition Electronic Health Records (EHR) certification and is it possible for additional languages to be included in EHR technology that are not part of the standard?
For EHR technology certification purposes, EHR technology can be modified to include additional language codes beyond those identified in the adopted standard. We view the standard adopted for preferred language as the minimum amount of language codes that need to be supported by EHR technology for the purposes of certification. Thus, it is possible for EHR technology to include the full set of ISO-639-2 codes even though it will only be tested to a subset of those codes. For instance, we are aware that "sign language" and Hmong are not part of the constrained preferred language standard we adopted for EHR technology certification.
The Library of Congress' Frequently Asked Question #24 on ISO-639-2 explains that the standard was "intended for written languages primarily." For instance, "Chinese" is represented by its official language, Mandarin, in the code list. This would not account for the commonly spoken Cantonese language/dialect or other spoken Chinese languages/dialects. As a result, EHR technology developers may find that particular spoken languages are not in all cases sufficiently supported by the constrained standard we adopted.
We encourage interested stakeholders to review the related CMS FAQ 9208 on meaningful use objective and measure that includes preferred language.


Does Urbanization Drive Southeast Asia's Development?
How the creative class is affecting economic growth in Cambodia, Indonesia, Malaysia, the Philippines, Singapore, Thailand, and Vietnam.
For those of us who live in the United States or in the advanced nations of Europe or Asia, urbanization has gone hand in hand with greater economic development, and the growth of the middle class. But elsewhere that once-positive connection between urbanization and rising living standards seems to be breaking down over the past decade or so. The world may be entering into a troubling new phase of urbanization without growth, where urbanization no longer goes hand in hand with great economic output, rising living standards, or a large middle class.
Southeast Asia—the region of the world that spans Cambodia, Indonesia, Malaysia, the Philippines, Singapore, Thailand, and Vietnam—is going through rapid urbanization today. By 2030, its urban population will grow by another 100 million people, rising from 280 million people today to 373 million people.
A new study, released today by my Martin Prosperity Institute (MPI) team, takes a close look at urbanization across these six major Southeast Asian nations and the cities of Phnom Penh, Cambodia; Jakarta, Indonesia; Kuala Lumpur, Malaysia; Manila, Philippines; Bangkok, Thailand; Ho Chi Minh City, Vietnam; and the city-state of Singapore.
Two of those cities, Manila and Jakarta, are megacities with over 10 million people. Bangkok, Ho Chi Minh City, Kuala Lumpur, and Singapore have populations between five and 10 million people. By 2030, Bangkok and Ho Chi Minh City are projected to have populations over ten million. Kuala Lumpur will have close to 10 million people, while Singapore will be approaching seven million. The region provides an intriguing lens from which to better understand the opportunities and challenges of urbanization today.
Our analysis highlights the highly uneven process of urbanization across this region, as its cities and nations divide across four broad tiers of development.
Singapore occupies the top tier. With economic output of $66,864 per person, it is one of the most prosperous and advanced cities on the planet, ranking just below New York City and ahead of Tokyo, Toronto, Seoul and Hong Kong. It ranks as the fourth-most-advanced global city in the world, behind only New York, London, and Tokyo. The creative class makes up nearly half of its workforce (47.3 percent)—considerably larger than that of the United States (32.6 percent).
Kuala Lumpur occupies a second tier, with economic output of $28,076 per person, more than Shanghai ($24,065) or Beijing ($23,390). This is nearly three times bigger than Malaysia as a whole ($9,748). With $172 million in total economic output—more than Stuttgart ($158 million) or Stockholm ($143 million), it generates more than half (50.8 percent) of Malaysia's GDP. According to our "urban productivity ratio," which compares a city's productivity to that of its nation, Kuala Lumpur is three times as productive as Malaysia. It ranks 39th on my Global City ranking, not too far behind Beijing.
Bangkok and Manila fall into the third tier, with economic output per person of $19,705 and $14,222 respectively—considerably greater than for Thailand ($5,158) or the Philippines ($2,360) as a whole. Bangkok's economic output is $307 billion—more than Miami ($263 billion) or Frankfurt ($230 billion), and accounts for more than three quarters of Thailand's total GDP. Manila generates $183 billion in economic output—more than Stockholm ($143 billion), which makes up nearly two-thirds of the Philippine's GDP. Bangkok is nearly four times more productive than Thailand as a whole; and Manila is six times more productive that the Philippines on our urban productivity ratio.
Jakarta and Ho Chi Minh City occupy the fourth tier with economic output per person of $9,984 and $8,660—which while lower than the other Southeast Asian cities is still considerably larger than for Indonesia ($3,323) or Vietnam ($1,544). With total economic output of $321 billion, Jakarta is a bigger economy than Toronto ($276 billion), while Ho Chi Minh City with $71 billion in output is just slightly smaller than Turin ($78 billion) or Oslo ($74 billion). Both account for more than 35 percent of their respective national economies. Productivity in Jakarta is three times higher than for Indonesia as a whole, while it is 5.6 times higher in Ho Chi Minh City than for the Vietnamese economy.
So is urbanization helping to propel economic growth in Southeast Asia or not? The answer from our research is a qualified yes.
The graph above charts the relationship between the level of urbanization and economic development (measured as economic output per person). The slope of the line is upward and to the right, highlighting the generally positive relationship between the two. But what is important for our purposes is that the Southeast Asian nations lie either exactly on the line or slightly above it—in other words their level of urbanization is roughly in line with their level of economic development.
Singapore leads the region in urbanization and economic development—with levels that put it among the world's leaders such as the U.S., Japan, Canada, and Australia. Malaysia is next in line with an urbanization level of nearly 75 percent, which is closing in on South Korea. Indonesia and Thailand are more than 50 percent urbanized, while the Philippines has urbanization rate of almost 45 percent. All three have levels of urbanization that are not far behind that of China. Vietnam's level of urbanization is 33.6 percent, putting it slightly ahead of India, while Cambodia's is just 20.7 percent—still both have levels of urbanization that are roughly in line with their levels of economic development.
Ultimately, the level of economic development across the region and its cities is highly uneven, mirroring the broader pattern of uneven development between the advanced nations and cities of the Global North and the struggling nations and cities of the Global South. The region spans Singapore—one of the most affluent and urbanized places on the planet—and also Cambodia, where economic output of just $869 per person leaves it 116th of the 139 nations we examined.
While some areas of Southeast Asia are urbanized and developed, others have yet to make this transformation. The question is whether urbanization can continue to propel economic development in the region's less developed cities and nations, or whether some will fall victim to urbanization without growth.


text:
Old Lady Owns Slut-Shaming Man On The London Tube, And May We All Be Her When We Grow Up — PHOTO
By Emma Lord
Marianna Massey/Getty Images Sport/Getty Images
If you're reading this, I'm guessing (hoping) that you are also way over women getting policed over how they choose to present their bodies. But consider this: You haven't been dealing with it nearly as long as this old woman, who yelled at slut-shaming man on the London tube. Like, you're #done, but this lady is 100 million percent DONE, and bless her soul, because she just dragged this man. DRAGGED HIM. The whole exchange was recounted in a Facebook post by Scott Sparrow, a passenger on the tube who watched it all go down.
A bit of context: The London Underground has been experiencing some mad chaos lately because of tube strikes in London, so tensions are already pretty high. Well, those tensions burst on Monday, when a man leaned over to a woman on the tube and allegedly said, "Have some self-respect when you dress yourself." Apparently, he thought her dress was too revealing, and instead of remembering that 1. It's none of his damn business how anyone else dresses, 2. He has very different notions of what qualifies as "self-respect" than other people do, and no right to project his on somebody else, and 3. Women are allowed to wear whatever we want and are not here for your judgment, he decided to open his big mouth.
But you know what? I'm glad he did. Because at that moment, a heroine was born.
Here's the full text of Scott Sparrow's post:
I am having such a wonderful day on the tubes I can't not share this story. Let me build the scene:Central Line between Oxford Circus and Chancery Lane, possibly St Pauls.To my right is sat a lady, 25-30, wearing a revealing dress. To my left is an old lady, almost dead is how old she is. Standing in front of us is a man, 50's, suit and tie, eyeing revealing dress. Suit leans over to the revealing dress lady and says "Have some self respect when you dress yourself"Revealing dress lady blushes to the colour of her almost not there dress.Old soon to be dead lady is having none of this and in a south london accent shouts out "She can wear or not wear whatever the fuck she likes, even if she was naked with a sign pointing to her fanny (she said fanny on the central line by St Pauls) and the sign pointed to her fanny which said ...PARTY CITY ALL INVITED...then that would still be none of your bloody business now fuck off back to your bored wife!"Red dress then hugs the walking dead and old suit walks off.
That old lady will be my hero for the rest of her life, even if the rest of her life is like only another week. She was so old.
So basically, in the fan fiction I've created in my head, these two team up to become Slut Shaming Superheroines. They run around London and catcall back at catcallers, empowering ladies to wear whatever the hell they feel like, and spilling their sass like tea all over ignorant jerks like this guy. GO TEAM.
Images: Getty Images; Giphy

redpajama_set_name: RedPajamaCommonCrawl


Happy with our product? Had a great service visit from one of our certified technicians? Let us know about it! We like knowing our customers are happy and want to share that feeling.
Send us your testimonial to sales@ohdoor.com or fill out our form and let us know about your Overhead Door experience.
"Thank you for dealing so professionally and promptly when we visited your show room. The overhead door has been installed for about a week. It looks terrific and operates very smoothly, with no air leakage. The crew did an excellent job installing the door. Thank you very much for your excellent service."
"Office staff at OHD made my purchase simple, showing me pictures, options and prices for my new garage door. I was very impressed with the installer he was professional and an expert in his trade! Work was completed on time and exceeded my expectations. Love my new door!"
"Overhead Door has been a Preferred Vendor of Quality Property Management for many years. We find them to be reliable and appreciate their integrity. They provide our required checklists."
My parent's garage door fell off its hinges and came crashing down. It was time for a new door but they didn't have time to deal with it the day it finally broke. Within 3hrs of calling Overhead Door, there was a new one installed and the old door had been taken away. Quickest service for a big job that I'd ever seen.


If you are at moderate or high risk of developing breast cancer, your specialist will talk to you about having breast screening (such as regular mammograms) and/or risk-reducing treatment (such as drug treatment or surgery) to manage your risk. You can find more information below on the options that might be available.
This information is also for gene carriers (people who have been confirmed as having inherited an altered gene), and people who have had breast cancer and are at increased risk of developing another breast cancer.
If you have been assessed as being moderate or high risk of breast cancer, you will be offered regular scans and/or mammograms to check for breast cancer. This is known as screening. The aim of screening is to pick up breast cancer before there are any obvious signs or symptoms.
The sooner breast cancer is diagnosed, the more effective treatment is likely to be. However, going for breast screening will not prevent a breast cancer from developing. Find out more about the possible benefits and risks of screening.
If you're at high risk, the type of screening will also depend on your individual likelihood of being a gene carrier. If you are told that you have more than a 30% chance of being a gene carrier, your screening will start earlier and go on for longer.
Screening may include a mammogram (a breast x-ray) or an MRI (magnetic resonance imaging) scan (uses magnetic fields and radio waves to produce a series of images of the inside of the breast).
Younger women won't usually be offered mammograms as they are more likely to have dense breast tissue, making the mammogram images less clear.
Your breast screening recommendations will be based on national guidelines. Find out more about the national guidelines for England and Wales, Scotland and Northern Ireland.
Once your increased screening stops, you'll usually be transferred onto a national (sometimes called population) breast screening programme.
Men are not offered screening, even if they are gene carriers. This is because even though a man's risk for developing breast cancer increases, the increased risk is still less than women in the general population.
If you've had breast cancer you will have increased screening for five years as part of your follow-up care.
Once your follow-up period ends, if you are at moderate risk you will have the same screening recommendations as women at moderate risk who have not had breast cancer (as above).
yearly mammograms if you're 50–69.
If you're over 70 (or 73) and your follow-up period has ended, you can still ask for a mammogram every three years as part of a national breast screening programme.
If you have an altered TP53 gene, you will not be offered mammograms but you may be offered yearly MRI scans between the ages of 20-69.
If you're at moderate or high risk, your healthcare professional should talk to you about the possibility of treatment to reduce your risk.
You should be told about all the possible risks and benefits of these treatments, and by how much they may reduce your risk of developing breast cancer.
Men are not offered risk-reducing treatment, even if they are at increased risk or are gene carriers. This is because even though their risk is increased it is still less than women in the general population.
Research has shown that taking drugs called tamoxifen, anastrozole or raloxifene for five years can help reduce the risk of developing breast cancer in women at moderate or high risk. However, the evidence for gene carriers is limited. Current evidence suggests while drug treatment may be useful in BRCA2 gene carriers, the benefit for BRCA1 gene carriers is less certain.
Who might be offered drug treatment?
For pre-menopausal women (women who haven't yet been through the menopause) at high risk, your genetics team may recommend tamoxifen for five years. This may also be considered if you are pre-menopausal and at moderate risk.
For post-menopausal women at high risk of breast cancer, your genetics team may recommend tamoxifen, anastrozole or raloxifene for five years. This may also be considered if you are post-menopausal and at moderate risk.
NICE (National Institute for Health and Care Excellence) have produced several decision aids to help women at moderate or high risk decide whether to have drug treatment. You can find them on their website under 'Tailored education support'.
Evidence has shown that taking the oral contraceptive pill (OCP) can protect women from developing ovarian cancer, and the longer you take it the greater the benefit. However, it can also slightly increase the risk of developing breast cancer, but when you stop taking it this increased risk starts to decrease and goes back to that of the general population after 10 years.
Taking the OCP may slightly increase and decrease your risk of some other cancers too. There aren't any guidelines that recommend taking the OCP to reduce the risk of ovarian cancer and your genetics team can discuss this with you.
Risk-reducing surgery is an option for gene carriers and for some women at high risk, whether they have or haven't had breast cancer. It will not be offered to women at moderate risk.
If you are at high risk of developing breast cancer, or are a BRCA1/2 or TP53 gene carrier, your healthcare professional should discuss the possibility of surgery to reduce your breast cancer risk.
Risk-reducing surgery involves removing the breast tissue from both breasts. This type of surgery is called a bilateral mastectomy.
A bilateral mastectomy can significantly reduce the risk of developing breast cancer by 90–95%, but it cannot completely remove the risk.
Risk-reducing mastectomy (to both breasts or to the remaining breast) is also an option for women who have had breast cancer and are at high risk of another breast cancer developing.
You'll usually be offered breast reconstruction at the same time as a bilateral mastectomy.
Your healthcare professional should discuss with you all the possible risks and benefits of having risk-reducing surgery. You may also find it helpful to read Macmillan Cancer Support's Understanding risk-reducing breast surgery booklet.
You can also talk to someone who has been in the same situation through our Someone Like Me service or through the Genes and breast cancer section of our online Forum.
Women who carry an altered BRCA1 or BRCA2 gene are also at higher risk of developing ovarian cancer. Ovarian cancer risk starts to increase significantly from the age of 40 for BRCA1 gene carriers and from the age of 50 for BRCA2 gene carriers.
For pre-menopausal women who are gene carriers, having surgery to remove the ovaries and fallopian tubes has been shown to reduce the risk of ovarian cancer by up to 90–95%. This type of surgery is known as a bilateral salpingo-oophorectomy (BSO). For pre-menopausal women who carry the altered BRCA2 gene, it may also reduce the risk of breast cancer.
Your specialist team will be able to advise you on when you may want to have risk-reducing surgery to the ovaries and fallopian tubes. Factors to consider will include your age, if you want to have children or add to an existing family and whether you are a BRCA1 or BRCA2 gene carrier.
If you have any other benign (not cancer) womb conditions, your specialist may also discuss removing the womb at the same time as your ovaries and fallopian tubes (a total hysterectomy).
Deciding whether, or when, to have a risk-reducing BSO is a very personal decision. You may also wish to find more information from OvDex (The Oophorectomy Decision Explorer), a computer program designed to help you make decisions developed by Cardiff University (ovdex.co.uk).
If you are pre-menopausal, having a BSO will cause an early menopause. For some women, menopausal symptoms can be severe and have a negative effect on everyday life and intimate relationships.
If you're under 50 and haven't had breast cancer, your specialist will discuss the option of taking hormone replacement therapy (HRT) up until the age of a natural menopause (usually around the age of 50) to help with any menopausal symptoms as a result of your surgery. There is good evidence that taking HRT will not affect the reduction in breast cancer risk reduction gained from having the surgery.
If you have had breast cancer, taking HRT after risk-reducing BSO is not usually recommended. However, if your breast cancer was oestrogen receptor negative and your symptoms are affecting your everyday activities your specialist can discuss with you the risks and benefits of taking HRT.
Going through an early menopause can affect your bones, which can increase your risk of developing osteoporosis in the future. If your specialist team is concerned about your risk of developing osteoporosis, they may suggest a DEXA scan at the time of surgery to check your bone health. Follow-up DEXA scans may also be recommended in the future. You can find more information about bone health and osteoporosis on the National Osteoporosis Society website. If you've had breast cancer and would like to know more, see our information on breast cancer and bone health.
There are clinical trials to find out more about genes and breast cancer. It's possible that you'll be offered the chance to take part in one of these trials.
There is more information on clinical trials on our website, on the Cancer Research UK website or through the UK Clinical Trials Gateway. BRCA PROTECT is a research clinic set up by University College London to look at new ways of reducing risk in BRCA gene carriers.
Some risk-reducing treatments may affect your fertility, for example surgery to remove the ovaries and fallopian tubes will affect fertility permanently. You will also be advised not to get pregnant while taking tamoxifen, and you should stop taking it for at least eight weeks before trying to conceive.
Your specialist will discuss any effects on fertility with you when considering risk-reducing treatment options.
If you have been diagnosed with breast cancer, some treatments for breast cancer can also affect fertility.


Outgoing mail servers are now up and running again. If you continue to experience any issues with outgoing emails, please do not hesitate to contact our Support team.
We are currently experiencing issues with our mail servers, affecting outgoing emails.
Our Engineering team is doing all they can to get this situation back to normal as soon as possible.
As soon as we have any news, we will update the status accordingly.
Subscribe to updates for Issues with Outgoing emails via email and/or text message. Whenever an update is posted, you'll receive a notification.


The aim of JGC is to provide an opportunity for as many children as possible to participate in gymnastic in a safe and fun environment. Our classes range from recreational sessions for children starting from the age of 4 to our performance squads for boys and girls aiming to take part in competitive gymnastics.
All our coaches are CRB checked and are qualified to teach by 'British Gymnastics' the UK National Governing Body for the sport of Gymnastics.
IF YOU WOULD LIKE TO REGISTER FOR A CLASS PLEASE SEE OUR CLASSES PAGE.


text:
/**
 * \file
 * \brief System calls implementation.
 */

/*
 * Copyright (c) 2007, 2008, 2009, 2010, 2011, 2012, ETH Zurich.
 * All rights reserved.
 *
 * This file is distributed under the terms in the attached LICENSE file.
 * If you do not find this file, copies can be found by writing to:
 * ETH Zurich D-INFK, Haldeneggsteig 4, CH-8092 Zurich. Attn: Systems Group.
 */

#include <kernel.h>
#include <syscall.h>
#include <barrelfish_kpi/syscalls.h>
#include <capabilities.h>
#include <mdb/mdb.h>
#include <dispatch.h>
#include <paging_kernel_arch.h>
#include <exec.h>
#include <arch/x86/apic.h>
#include <arch/x86/perfmon_intel.h>
#include <arch/x86/global.h>
#include <barrelfish_kpi/sys_debug.h>
#include <barrelfish_kpi/lmp.h>
#include <barrelfish_kpi/dispatcher_shared_target.h>
#include <barrelfish_kpi/syscall_overflows_arch.h>
#include <trace/trace.h>
#include <arch/x86/debugregs.h>
#include <arch/x86/syscall.h>
#include <arch/x86/timing.h>
#include <fpu.h>
#include <mdb/mdb_tree.h>
#include <useraccess.h>
#ifdef __scc__
#       include <rck.h>
#else
#       include <arch/x86/perfmon_amd.h>
#       include <arch/x86/ipi_notify.h>
#endif

/* FIXME: lots of missing argument checks in this function */
static struct sysret handle_dispatcher_setup(struct capability *to,
                                             int cmd, uintptr_t *args)
{
    capaddr_t odptr = args[0];
    capaddr_t cptr = args[1];
    uintptr_t rundepth = args[2];
    int depth = rundepth & 0xff;
    bool run = rundepth >> 8;
    capaddr_t vptr = args[3];
    capaddr_t dptr = args[4];

    return sys_dispatcher_setup(to, cptr, depth, vptr, dptr, run, odptr);

}

static struct sysret handle_dispatcher_properties(struct capability *to,
                                                  int cmd, uintptr_t *args)
{
    enum task_type type = args[0] >> 16;
    unsigned short weight = args[0] & 0xffff;
    unsigned long deadline = args[1];
    unsigned long wcet = args[2];
    unsigned long period = args[3];
    unsigned long release = args[4];

    return sys_dispatcher_properties(to, type, deadline, wcet, period,
                                     release, weight);
}

// XXX: FIXME: cleanup and handle errors!
static struct sysret handle_dispatcher_perfmon(struct capability *to,
                                               int cmd, uintptr_t *args)
{
#if 1
    return SYSRET(SYS_ERR_PERFMON_NOT_AVAILABLE);

#else
    perfmon_counter_t idx = (perfmon_counter_t)(args[0]);

    // Currently only AMD perfmon is supported
    if(!perfmon_amd_supported()) {
        return SYSRET(SYS_ERR_PERFMON_NOT_AVAILABLE);
    }

    uint64_t operation = args[1];
    switch(operation) {
    case 0: {
        perfmon_event_t event = args[2];
        perfmon_mask_t umask = args[3];
        bool os = args[4];
        perfmon_amd_measure_start(event, umask, os ? true : false, idx);
        break;
    }

    case 1: {
        uint64_t val = args[2];
        perfmon_amd_measure_write(val, idx);
        break;
    }

    default:
        panic("Unknown performance monitoring function!");
    }

    return SYSRET(SYS_ERR_OK);
#endif
}

static struct sysret handle_retype_common(struct capability *root,
                                          uintptr_t *args,
                                          bool from_monitor)
{
    // Source capability cptr
    capaddr_t source_cptr      = args[0];
    // Type to retype to
    enum objtype type        = args[1] >> 16;
    // Object bits for variable-sized types
    uint8_t objbits          = (args[1] >> 8) & 0xff;
    // Destination cnode cptr
    capaddr_t  dest_cnode_cptr = args[2];
    // Destination slot number
    capaddr_t dest_slot        = args[3];
    // Valid bits in destination cnode cptr
    uint64_t dest_vbits      = args[1] & 0xff;

    return sys_retype(root, source_cptr, type, objbits, dest_cnode_cptr,
                      dest_slot, dest_vbits, from_monitor);
}

static struct sysret handle_retype(struct capability *root, int cmd, uintptr_t *args)
{
    return handle_retype_common(root, args, false);
}

static struct sysret handle_create(struct capability *root, int cmd,
                                   uintptr_t *args)
{
    /* Retrieve arguments */
    enum objtype type         = args[0] >> 16;
    uint8_t objbits           = (args[0] >> 8) & 0xff;
    capaddr_t dest_cnode_cptr = args[1];
    capaddr_t dest_slot       = args[2];
    uint8_t dest_vbits        = args[0] & 0xff;

    return sys_create(root, type, objbits, dest_cnode_cptr, dest_slot,
                      dest_vbits);
}

/**
 * Common code for copying and minting except the mint flag and param passing
 */
static struct sysret copy_or_mint(struct capability *root,
                                  uintptr_t *args, bool mint)
{
    /* Retrive arguments */
    capaddr_t  destcn_cptr   = args[0];
    capaddr_t  source_cptr   = args[1];
    capaddr_t dest_slot      = args[2] >> 16;
    int      destcn_vbits  = (args[2] >> 8) & 0xff;
    int      source_vbits  = args[2] & 0xff;
    uintptr_t param1, param2;
    // params only sent if mint operation
    if (mint) {
        param1 = args[3];
        param2 = args[4];
    } else {
        param1 = param2 = 0;
    }

    return sys_copy_or_mint(root, destcn_cptr, dest_slot, source_cptr,
                            destcn_vbits, source_vbits, param1, param2, mint);
}

static struct sysret handle_mint(struct capability *root, int cmd, uintptr_t *args)
{
    return copy_or_mint(root, args, true);
}

static struct sysret handle_copy(struct capability *root,
                                 int cmd, uintptr_t *args)
{
    return copy_or_mint(root, args, false);
}

static struct sysret handle_delete(struct capability *root, int cmd, uintptr_t *args)
{
    capaddr_t cptr = args[0];
    int bits     = args[1];
    return  sys_delete(root, cptr, bits);
}

static struct sysret handle_revoke(struct capability *root,
                                   int cmd, uintptr_t *args)
{
    capaddr_t cptr = args[0];
    int bits     = args[1];
    return  sys_revoke(root, cptr, bits);
}

static struct sysret handle_get_state(struct capability *root,
                                      int cmd, uintptr_t *args)
{
    capaddr_t cptr = args[0];
    int bits = args[1];
    return sys_get_state(root, cptr, bits);
}

static struct sysret handle_map(struct capability *pgtable,
                                int cmd, uintptr_t *args)
{
    /* Retrive arguments */
    capaddr_t  source_cptr   = args[0];
    capaddr_t dest_slot      = args[1] >> 16;
    int      source_vbits  = args[1] & 0xff;
    uintptr_t flags, offset,pte_count;
    flags = args[2];
    offset = args[3];
    pte_count = args[4];

    return sys_map(pgtable, dest_slot, source_cptr, source_vbits,
                   flags, offset, pte_count);
}

static struct sysret handle_unmap(struct capability *pgtable,
                                  int cmd, uintptr_t *args)
{
    size_t mapping_caddr = args[0];
    size_t entry = args[1] & 0x3ff;
    size_t pte_count = (args[1]>>10) & 0x3ff;
    pte_count += 1;
    int mapping_bits = (args[1]>>20) & 0xff;

    errval_t err;
    struct cte *mapping = NULL;
    err = caps_lookup_slot(&dcb_current->cspace.cap, mapping_caddr, mapping_bits,
                           &mapping, CAPRIGHTS_READ_WRITE);
    if (err_is_fail(err)) {
        return SYSRET(err_push(err, SYS_ERR_CAP_NOT_FOUND));
    }

    err = page_mappings_unmap(pgtable, mapping, entry, pte_count);
    return SYSRET(err);
}

/// Different handler for cap operations performed by the monitor
static struct sysret monitor_handle_retype(struct capability *kernel_cap,
                                           int cmd, uintptr_t *args)
{
    errval_t err;

    struct remote_retype_syscall_overflow *rootcap = (void*)args[0];

    struct capability *root;
    err = caps_lookup_cap(&dcb_current->cspace.cap, rootcap->rootcap_addr,
            rootcap->rootcap_vbits, &root, CAPRIGHTS_READ);
    if (err_is_fail(err)) {
        return SYSRET(err_push(err, SYS_ERR_ROOT_CAP_LOOKUP));
    }

    /* XXX: this hides the first argument which retype_common doesn't know
     * about */
    return handle_retype_common(root, &args[1], true);
}

static struct sysret monitor_handle_has_descendants(struct capability *kernel_cap,
                                                    int cmd, uintptr_t *args)
{
    // check access to user pointer
    if (!access_ok(ACCESS_READ, args[0], sizeof(struct capability))) {
        return SYSRET(SYS_ERR_INVALID_USER_BUFFER);
    }

    struct capability *src = (struct capability *)args[0];

    struct cte *next = mdb_find_greater(src, false);

    return (struct sysret) {
        .error = SYS_ERR_OK,
        .value = (next && is_ancestor(&next->cap, src)),
    };
}

static struct sysret monitor_handle_delete_last(struct capability *kernel_cap,
                                                int cmd, uintptr_t *args)
{
    capaddr_t root_caddr = args[0];
    capaddr_t target_caddr = args[1];
    capaddr_t retcn_caddr = args[2];
    cslot_t retcn_slot = args[3];
    uint8_t target_vbits = (args[4]>>16)&0xff;
    uint8_t root_vbits = (args[4]>>8)&0xff;
    uint8_t retcn_vbits = args[4]&0xff;

    return sys_monitor_delete_last(root_caddr, root_vbits, target_caddr,
                                   target_vbits, retcn_caddr, retcn_vbits, retcn_slot);
}

static struct sysret monitor_handle_delete_foreigns(struct capability *kernel_cap,
                                                    int cmd, uintptr_t *args)
{
    capaddr_t caddr = args[0];
    uint8_t bits = args[1];
    return sys_monitor_delete_foreigns(caddr, bits);
}

static struct sysret monitor_handle_revoke_mark_tgt(struct capability *kernel_cap,
                                                    int cmd, uintptr_t *args)
{
    capaddr_t root_caddr = args[0];
    uint8_t root_vbits = args[1];
    capaddr_t target_caddr = args[2];
    uint8_t target_vbits = args[3];

    return sys_monitor_revoke_mark_tgt(root_caddr, root_vbits,
                                       target_caddr, target_vbits);
}

static struct sysret monitor_handle_revoke_mark_rels(struct capability *kernel_cap,
                                                     int cmd, uintptr_t *args)
{
    // user pointer to src cap, check access
    if (!access_ok(ACCESS_READ, args[0], sizeof(struct capability))) {
        return SYSRET(SYS_ERR_INVALID_USER_BUFFER);
    }
    struct capability *base = (struct capability*)args[0];

    return sys_monitor_revoke_mark_rels(base);
}

static struct sysret monitor_handle_delete_step(struct capability *kernel_cap,
                                                int cmd, uintptr_t *args)
{
    capaddr_t ret_cn_addr = args[0];
    capaddr_t ret_cn_bits = args[1];
    capaddr_t ret_slot = args[2];
    return sys_monitor_delete_step(ret_cn_addr, ret_cn_bits, ret_slot);
}

static struct sysret monitor_handle_clear_step(struct capability *kernel_cap,
                                               int cmd, uintptr_t *args)
{
    capaddr_t ret_cn_addr = args[0];
    capaddr_t ret_cn_bits = args[1];
    capaddr_t ret_slot = args[2];
    return sys_monitor_clear_step(ret_cn_addr, ret_cn_bits, ret_slot);
}

static struct sysret monitor_handle_register(struct capability *kernel_cap,
                                             int cmd, uintptr_t *args)
{
    capaddr_t ep_caddr = args[0];
    return sys_monitor_register(ep_caddr);
}

#ifdef __scc__
static struct sysret monitor_spawn_scc_core(struct capability *kernel_cap,
                                            int cmd, uintptr_t *args)
{
    uint8_t id                  = args[1] >> 24;
    genpaddr_t urpcframe_base   = args[0];
    uint8_t urpcframe_bits      = (args[1] >> 16) & 0xff;
    int chanid                  = args[1] & 0xffff;

    int r = rck_start_core(id, urpcframe_base, urpcframe_bits, chanid);

    if (r != 0) {
        return SYSRET(SYS_ERR_CORE_NOT_FOUND);
    }

    return SYSRET(SYS_ERR_OK);
}
#endif

static struct sysret monitor_get_core_id(struct capability *kernel_cap,
                                         int cmd, uintptr_t *args)
{
    return (struct sysret) {
        .error = SYS_ERR_OK,
        .value = my_core_id
    };
}

static struct sysret monitor_get_arch_id(struct capability *kernel_cap,
                                         int cmd, uintptr_t *args)
{
    return (struct sysret) {
        .error = SYS_ERR_OK,
        .value = apic_id
    };
}

static struct sysret monitor_identify_cap_common(struct capability *kernel_cap,
                                                 struct capability *root,
                                                 uintptr_t *args)
{
    capaddr_t cptr = args[0];
    int bits = args[1];
    struct capability *retbuf = (void *)args[2];

    return sys_monitor_identify_cap(root, cptr, bits, retbuf);
}

static struct sysret monitor_identify_cap(struct capability *kernel_cap,
                                          int cmd, uintptr_t *args)
{
    return monitor_identify_cap_common(kernel_cap, &dcb_current->cspace.cap, args);
}

static struct sysret monitor_identify_domains_cap(struct capability *kernel_cap,
                                                  int cmd, uintptr_t *args)
{
    errval_t err;

    capaddr_t root_caddr = args[0];
    capaddr_t root_vbits = args[1];

    struct capability *root;
    err = caps_lookup_cap(&dcb_current->cspace.cap, root_caddr, root_vbits,
                          &root, CAPRIGHTS_READ);
    if (err_is_fail(err)) {
        return SYSRET(err_push(err, SYS_ERR_ROOT_CAP_LOOKUP));
    }

    /* XXX: conceal first two words of arguments */
    return monitor_identify_cap_common(kernel_cap, root, &args[2]);
}

static struct sysret monitor_cap_has_relations(struct capability *kernel_cap,
                                               int cmd, uintptr_t *args)
{
    capaddr_t caddr = args[0];
    uint8_t vbits = args[1];
    uint8_t mask = args[2];

    return sys_cap_has_relations(caddr, vbits, mask);
}

static struct sysret monitor_remote_relations(struct capability *kernel_cap,
                                              int cmd, uintptr_t *args)
{
    capaddr_t root_addr = args[0];
    int root_bits = args[1];
    capaddr_t cptr = args[2];
    int bits = args[3];
    uint8_t relations = args[4] & 0xFF;
    uint8_t mask = (args[4] >> 8) & 0xFF;

    return sys_monitor_remote_relations(root_addr, root_bits, cptr, bits,
                                        relations, mask);
}

static struct sysret monitor_create_cap(struct capability *kernel_cap,
                                        int cmd, uintptr_t *args)
{
    /* Create the cap in the destination */
    capaddr_t cnode_cptr = args[0];
    int cnode_vbits      = args[1];
    size_t slot          = args[2];
    coreid_t owner       = args[3];
    struct capability *src =
        (struct capability*)args[4];

    /* Cannot create null caps */
    if (src->type == ObjType_Null) {
        return SYSRET(SYS_ERR_ILLEGAL_DEST_TYPE);
    }

    /* For certain types, only foreign copies can be created here */
    if ((src->type == ObjType_EndPoint || src->type == ObjType_Dispatcher
         || src->type == ObjType_Kernel || src->type == ObjType_IRQTable)
        && owner == my_core_id)
    {
        return SYSRET(SYS_ERR_ILLEGAL_DEST_TYPE);
    }

    return SYSRET(caps_create_from_existing(&dcb_current->cspace.cap,
                                            cnode_cptr, cnode_vbits,
                                            slot, owner, src));
}

static struct sysret monitor_copy_existing(struct capability *kernel_cap,
                                        int cmd, uintptr_t *args)
{
    capaddr_t cnode_cptr = args[0];
    int cnode_vbits    = args[1];
    size_t slot        = args[2];

    // user pointer to src cap, check access
    if (!access_ok(ACCESS_READ, args[3], sizeof(struct capability))) {
        return SYSRET(SYS_ERR_INVALID_USER_BUFFER);
    }
    /* Get the raw metadata of the capability to create from user pointer */
    struct capability *src = (struct capability *)args[3];

    return sys_monitor_copy_existing(src, cnode_cptr, cnode_vbits, slot);
}

static struct sysret monitor_nullify_cap(struct capability *kernel_cap,
                                         int cmd, uintptr_t *args)
{
    capaddr_t cptr = args[0];
    int bits = args[1];

    return sys_monitor_nullify_cap(cptr, bits);
}

static struct sysret monitor_handle_sync_timer(struct capability *kern_cap,
                                               int cmd, uintptr_t *args)
{
    uint64_t synctime = (uint64_t)args[0] << 32;
    synctime |= (uint64_t)args[1];
    return sys_monitor_handle_sync_timer(synctime);
}

static struct sysret handle_frame_identify(struct capability *to,
                                           int cmd, uintptr_t *args)
{
    // Return with physical base address of frame
    // XXX: pack size into bottom bits of base address
    assert(to->type == ObjType_Frame || to->type == ObjType_DevFrame);
    assert((to->u.frame.base & BASE_PAGE_MASK) == 0);
    assert(to->u.frame.bits < BASE_PAGE_SIZE);
    return (struct sysret) {
        .error = SYS_ERR_OK,
        .value = to->u.frame.base | to->u.frame.bits,
    };
}

static struct sysret handle_frame_modify_flags(struct capability *to,
                                               int cmd, uintptr_t *args)
{
    // Modify flags of (part of) mapped region of frame
    assert(to->type == ObjType_Frame || to->type == ObjType_DevFrame);

    // unpack arguments
    size_t offset = args[0]; // in pages; of first page to modify from first
                             // page in mapped region
    size_t pages  = args[1]; // #pages to modify
    size_t flags  = args[2]; // new flags

    page_mappings_modify_flags(to, offset, pages, flags);

    return (struct sysret) {
        .error = SYS_ERR_OK,
        .value = 0,
    };
}

#ifdef __scc__
static struct sysret handle_frame_scc_identify(struct capability *to,
                                               int cmd, uintptr_t *args)
{
    // Return with physical base address of frame
    // XXX: pack size into bottom bits of base address
    assert(to->type == ObjType_Frame || to->type == ObjType_DevFrame);
    assert((to->u.frame.base & BASE_PAGE_MASK) == 0);
    assert(to->u.frame.bits < BASE_PAGE_SIZE);

    uint8_t route, subdest;
    uint16_t addrbits;

    errval_t err = rck_get_route(to->u.frame.base, 1 << to->u.frame.bits,
                                 &route, &subdest, &addrbits);
    if(err_is_fail(err)) {
        return SYSRET(err);
    }

    return (struct sysret) {
        .error = SYS_ERR_OK,
        .value = (addrbits << 16) | (subdest << 8) | route,
    };
}
#endif

static struct sysret handle_io(struct capability *to, int cmd, uintptr_t *args)
{
    uint32_t    port = args[0];
    uint32_t    data = args[1];

    return sys_io(to, cmd, port, data);
}

static struct sysret monitor_handle_domain_id(struct capability *monitor_cap,
                                              int cmd, uintptr_t *args)
{
    capaddr_t cptr = args[0];
    domainid_t domain_id = args[1];

    return sys_monitor_domain_id(cptr, domain_id);
}

static struct sysret monitor_get_cap_owner(struct capability *monitor_cap,
                                           int cmd, uintptr_t *args)
{
    capaddr_t root_addr = args[0];
    uint8_t root_bits = args[1];
    capaddr_t cptr = args[2];
    uint8_t bits = args[3];

    return sys_get_cap_owner(root_addr, root_bits, cptr, bits);
}

static struct sysret monitor_set_cap_owner(struct capability *monitor_cap,
                                           int cmd, uintptr_t *args)
{
    capaddr_t root_addr = args[0];
    uint8_t root_bits = args[1];
    capaddr_t cptr = args[2];
    uint8_t bits = args[3];
    coreid_t owner = args[4];

    return sys_set_cap_owner(root_addr, root_bits, cptr, bits, owner);
}

static struct sysret monitor_lock_cap(struct capability *monitor_cap,
                                      int cmd, uintptr_t *args)
{
    capaddr_t root_addr = args[0];
    uint8_t root_bits = args[1];
    capaddr_t cptr = args[2];
    uint8_t bits = args[3];

    return sys_lock_cap(root_addr, root_bits, cptr, bits);
}

static struct sysret monitor_unlock_cap(struct capability *monitor_cap,
                                        int cmd, uintptr_t *args)
{
    capaddr_t root_addr = args[0];
    uint8_t root_bits = args[1];
    capaddr_t cptr = args[2];
    uint8_t bits = args[3];

    return sys_unlock_cap(root_addr, root_bits, cptr, bits);
}

/**
 * \brief Set up tracing in the kernel
 */
static struct sysret handle_trace_setup(struct capability *cap,
                                        int cmd, uintptr_t *args)
{
    struct capability *frame;
    errval_t err;

    /* lookup passed cap */
    capaddr_t cptr = args[0];
    err = caps_lookup_cap(&dcb_current->cspace.cap, cptr, CPTR_BITS, &frame,
                          CAPRIGHTS_READ_WRITE);
    if (err_is_fail(err)) {
        return SYSRET(err);
    }

    lpaddr_t lpaddr = gen_phys_to_local_phys(frame->u.frame.base);
    kernel_trace_buf = local_phys_to_mem(lpaddr);
    //printf("kernel.%u: handle_trace_setup at %lx\n", apic_id, kernel_trace_buf);

    // Copy boot applications.
	trace_copy_boot_applications();

    return SYSRET(SYS_ERR_OK);
}

static struct sysret handle_irq_table_alloc(struct capability *to, int cmd,
                                            uintptr_t *args)
{
    struct sysret ret;
    int outvec;
    ret.error = irq_table_alloc(&outvec);
    ret.value = outvec;
    return ret;
}

static struct sysret handle_irq_table_set(struct capability *to, int cmd, uintptr_t *args)
{
    return SYSRET(irq_table_set(args[0], args[1]));
}

static struct sysret handle_irq_table_delete(struct capability *to, int cmd, uintptr_t *args)
{
    return SYSRET(irq_table_delete(args[0]));
}

/**
 * \brief Return system-wide unique ID of this ID cap.
 */
static struct sysret handle_idcap_identify(struct capability *cap, int cmd,
                                           uintptr_t *args)
{
    idcap_id_t *idp = (idcap_id_t *) args[0];

    // Check validity of user space pointer
    if (!access_ok(ACCESS_WRITE, (lvaddr_t) idp, sizeof(*idp)))  {
        return SYSRET(SYS_ERR_INVALID_USER_BUFFER);
    }

    return sys_idcap_identify(cap, idp);
}

static struct sysret kernel_send_init_ipi(struct capability *cap, int cmd,
                                          uintptr_t *args)
{
    coreid_t destination = args[0];
    apic_send_init_assert(destination, xapic_none);
    apic_send_init_deassert();

    return SYSRET(SYS_ERR_OK);
}

static struct sysret kernel_send_start_ipi(struct capability *cap,
                                           int cmd,
                                           uintptr_t *args)
{
    coreid_t destination = args[0];
    genvaddr_t start_vector = X86_32_REAL_MODE_SEGMENT_TO_REAL_MODE_PAGE(X86_32_REAL_MODE_SEGMENT);
    apic_send_start_up(destination, xapic_none, start_vector);

    return SYSRET(SYS_ERR_OK);
}

static struct sysret kernel_get_global_phys(struct capability *cap,
                                           int cmd,
                                           uintptr_t *args)
{

    struct sysret sysret;
    sysret.value = mem_to_local_phys((lvaddr_t)global);
    sysret.error = SYS_ERR_OK;

    return sysret;
}

#ifdef __scc__
static struct sysret kernel_rck_register(struct capability *cap,
                                         int cmd, uintptr_t *args)
{
    capaddr_t ep = args[0];
    int chanid = args[1];
    return SYSRET(rck_register_notification(ep, chanid));
}

static struct sysret kernel_rck_delete(struct capability *cap,
                                       int cmd, uintptr_t *args)
{
    int chanid = args[0];
    return SYSRET(rck_delete_notification(chanid));
}

static struct sysret handle_rck_notify_send(struct capability *cap,
                                            int cmd, uintptr_t *args)
{
    assert(cap->type == ObjType_Notify_RCK);
    rck_send_notification(cap->u.notify_rck.coreid, cap->u.notify_rck.chanid);
    return SYSRET(SYS_ERR_OK);
}

#else

static struct sysret kernel_ipi_register(struct capability *cap,
                                         int cmd, uintptr_t *args)
{
    assert(cap->type == ObjType_Kernel);
    capaddr_t ep = args[0];
    int chanid = args[1];
    return SYSRET(ipi_register_notification(ep, chanid));
}

static struct sysret kernel_ipi_delete(struct capability *cap,
                                       int cmd, uintptr_t *args)
{
    assert(cap->type == ObjType_Kernel);
    assert(!"NYI");
    return SYSRET(SYS_ERR_OK);
}

static struct sysret handle_ipi_notify_send(struct capability *cap,
                                            int cmd, uintptr_t *args)
{
    assert(cap->type == ObjType_Notify_IPI);
    return ipi_raise_notify(cap->u.notify_ipi.coreid, cap->u.notify_ipi.chanid);
}
#endif

static struct sysret dispatcher_dump_ptables(struct capability *cap,
                                             int cmd, uintptr_t *args)
{
    assert(cap->type == ObjType_Dispatcher);

    printf("kernel_dump_ptables\n");

    struct dcb *dispatcher = cap->u.dispatcher.dcb;

    paging_dump_tables(dispatcher);

    return SYSRET(SYS_ERR_OK);
}

static struct sysret kernel_add_kcb(struct capability *kern_cap,
                                    int cmd, uintptr_t *args)
{
    uintptr_t kcb_addr = args[0];
    struct kcb *new_kcb = (struct kcb *)kcb_addr;

    return sys_kernel_add_kcb(new_kcb);
}

static struct sysret kernel_remove_kcb(struct capability *kern_cap,
                                       int cmd, uintptr_t *args)
{
    printk(LOG_NOTE, "in kernel_remove_kcb invocation!\n");
    uintptr_t kcb_addr = args[0];
    struct kcb *to_remove = (struct kcb *)kcb_addr;

    return sys_kernel_remove_kcb(to_remove);
}

static struct sysret kernel_suspend_kcb_sched(struct capability *kern_cap,
                                              int cmd, uintptr_t *args)
{
    printk(LOG_NOTE, "in kernel_suspend_kcb_sched invocation!\n");
    return sys_kernel_suspend_kcb_sched((bool)args[0]);
}

static struct sysret handle_kcb_identify(struct capability *to,
                                         int cmd, uintptr_t *args)
{
    return sys_handle_kcb_identify(to);
}

typedef struct sysret (*invocation_handler_t)(struct capability *to,
                                              int cmd, uintptr_t *args);

static invocation_handler_t invocations[ObjType_Num][CAP_MAX_CMD] = {
    [ObjType_Dispatcher] = {
        [DispatcherCmd_Setup]        = handle_dispatcher_setup,
        [DispatcherCmd_Properties]   = handle_dispatcher_properties,
        [DispatcherCmd_PerfMon]      = handle_dispatcher_perfmon,
        [DispatcherCmd_DumpPTables]  = dispatcher_dump_ptables,
    },
    [ObjType_KernelControlBlock] = {
        [FrameCmd_Identify] = handle_kcb_identify,
    },
    [ObjType_Frame] = {
        [FrameCmd_Identify] = handle_frame_identify,
        [FrameCmd_ModifyFlags] = handle_frame_modify_flags,
#ifdef __scc__
        [FrameCmd_SCC_Identify] = handle_frame_scc_identify
#endif
    },
    [ObjType_DevFrame] = {
        [FrameCmd_Identify] = handle_frame_identify,
        [FrameCmd_ModifyFlags] = handle_frame_modify_flags,
#ifdef __scc__
        [FrameCmd_SCC_Identify] = handle_frame_scc_identify
#endif
    },
    [ObjType_CNode] = {
        [CNodeCmd_Copy]   = handle_copy,
        [CNodeCmd_Mint]   = handle_mint,
        [CNodeCmd_Retype] = handle_retype,
        [CNodeCmd_Create] = handle_create,
        [CNodeCmd_Delete] = handle_delete,
        [CNodeCmd_Revoke] = handle_revoke,
        [CNodeCmd_GetState] = handle_get_state,
    },
    [ObjType_VNode_x86_32_pdpt] = {
        [VNodeCmd_Map]   = handle_map,
        [VNodeCmd_Unmap] = handle_unmap,
    },
    [ObjType_VNode_x86_32_pdir] = {
        [VNodeCmd_Map]   = handle_map,
        [VNodeCmd_Unmap] = handle_unmap,
    },
    [ObjType_VNode_x86_32_ptable] = {
        [VNodeCmd_Map]   = handle_map,
        [VNodeCmd_Unmap] = handle_unmap,
    },
    [ObjType_Kernel] = {
        [KernelCmd_Get_core_id]  = monitor_get_core_id,
        [KernelCmd_Get_arch_id]  = monitor_get_arch_id,
        [KernelCmd_Identify_cap] = monitor_identify_cap,
        [KernelCmd_Identify_domains_cap] = monitor_identify_domains_cap,
        [KernelCmd_Remote_relations] = monitor_remote_relations,
        [KernelCmd_Cap_has_relations] = monitor_cap_has_relations,
        [KernelCmd_Create_cap]   = monitor_create_cap,
        [KernelCmd_Copy_existing] = monitor_copy_existing,
        [KernelCmd_Nullify_cap]  = monitor_nullify_cap,
        [KernelCmd_Setup_trace]  = handle_trace_setup,
        [KernelCmd_Register]     = monitor_handle_register,
        [KernelCmd_Domain_Id]    = monitor_handle_domain_id,
        [KernelCmd_Get_cap_owner] = monitor_get_cap_owner,
        [KernelCmd_Set_cap_owner] = monitor_set_cap_owner,
        [KernelCmd_Lock_cap]     = monitor_lock_cap,
        [KernelCmd_Unlock_cap]   = monitor_unlock_cap,
        [KernelCmd_Retype]       = monitor_handle_retype,
        [KernelCmd_Has_descendants] = monitor_handle_has_descendants,
        [KernelCmd_Delete_last]  = monitor_handle_delete_last,
        [KernelCmd_Delete_foreigns] = monitor_handle_delete_foreigns,
        [KernelCmd_Revoke_mark_target] = monitor_handle_revoke_mark_tgt,
        [KernelCmd_Revoke_mark_relations] = monitor_handle_revoke_mark_rels,
        [KernelCmd_Delete_step] = monitor_handle_delete_step,
        [KernelCmd_Clear_step] = monitor_handle_clear_step,
        [KernelCmd_Sync_timer]   = monitor_handle_sync_timer,
#ifdef __scc__
        [KernelCmd_Spawn_SCC_Core]   = monitor_spawn_scc_core,
        [KernelCmd_IPI_Register] = kernel_rck_register,
        [KernelCmd_IPI_Delete]   = kernel_rck_delete,
#else
        [KernelCmd_IPI_Register] = kernel_ipi_register,
        [KernelCmd_IPI_Delete]   = kernel_ipi_delete,
#endif
        [KernelCmd_GetGlobalPhys] = kernel_get_global_phys,
        [KernelCmd_Add_kcb]      = kernel_add_kcb,
        [KernelCmd_Remove_kcb]   = kernel_remove_kcb,
        [KernelCmd_Suspend_kcb_sched]   = kernel_suspend_kcb_sched
    },
    [ObjType_IPI] = {
        [IPICmd_Send_Start] = kernel_send_start_ipi,
        [IPICmd_Send_Init] = kernel_send_init_ipi,
    },
    [ObjType_IRQTable] = {
        [IRQTableCmd_Alloc] = handle_irq_table_alloc,
        [IRQTableCmd_Set] = handle_irq_table_set,
        [IRQTableCmd_Delete] = handle_irq_table_delete
    },
    [ObjType_IO] = {
        [IOCmd_Outb] = handle_io,
        [IOCmd_Outw] = handle_io,
        [IOCmd_Outd] = handle_io,
        [IOCmd_Inb] = handle_io,
        [IOCmd_Inw] = handle_io,
        [IOCmd_Ind] = handle_io
    },
    [ObjType_ID] = {
        [IDCmd_Identify] = handle_idcap_identify
    },
#ifdef __scc__
    [ObjType_Notify_RCK] = {
        [NotifyCmd_Send] = handle_rck_notify_send
    }
#else
    [ObjType_Notify_IPI] = {
        [NotifyCmd_Send] = handle_ipi_notify_send
    }
#endif
};

/* syscall C entry point; called only from entry.S so no prototype in header */
struct sysret sys_syscall(uintptr_t arg0, uintptr_t arg1, uintptr_t *args,
                          uintptr_t *cpu_save_frame);
struct sysret sys_syscall(uintptr_t arg0, uintptr_t arg1, uintptr_t *args,
                          uintptr_t *cpu_save_frame)
{
    struct sysret retval = { .error = SYS_ERR_OK, .value = 0 };
    uint8_t syscall = arg0 & 0xff;

    switch(syscall) {
    case SYSCALL_INVOKE: ; /* Handle capability invocation */
        uint8_t flags = (arg0 >> 24) & 0xf;
        uint8_t invoke_bits = (arg0 >> 16) & 0xff;
        capaddr_t invoke_cptr = arg1;

        debug(SUBSYS_SYSCALL, "sys_invoke(0x%"PRIxCADDR"(%d))\n",
              invoke_cptr, invoke_bits);

        // Capability to invoke
        struct capability *to = NULL;
        retval.error = caps_lookup_cap(&dcb_current->cspace.cap, invoke_cptr,
                                       invoke_bits, &to, CAPRIGHTS_READ);
        if (err_is_fail(retval.error)) {
            break;
        }
        assert(to != NULL);
        assert(to->type < ObjType_Num);

        // Endpoint cap, do LMP
        if (to->type == ObjType_EndPoint) {
            struct dcb *listener = to->u.endpoint.listener;
            assert(listener != NULL);

            if (listener->disp == 0) {
                retval.error = SYS_ERR_LMP_NO_TARGET;
                break;
            }

            uint8_t length_words = (arg0 >> 28) & 0xf;
            uint8_t send_bits = (arg0 >> 8) & 0xff;
            capaddr_t send_cptr = args[0];

            /* limit length of message from buggy/malicious sender */
            length_words = min(length_words, LMP_MSG_LENGTH);

            // does the sender want to yield their timeslice on success?
            bool sync = flags & LMP_FLAG_SYNC;
            // does the sender want to yield to the target if undeliverable?
            bool yield = flags & LMP_FLAG_YIELD;
            // is the cap (if present) to be deleted on send?
            bool give_away = flags & LMP_FLAG_GIVEAWAY;

            // try to deliver message
            retval.error = lmp_deliver(to, dcb_current, &args[1], length_words,
                                       send_cptr, send_bits, give_away);

            /* Switch to reciever upon successful delivery with sync flag,
             * or (some cases of) unsuccessful delivery with yield flag */
            enum err_code err_code = err_no(retval.error);
            if ((sync && err_is_ok(retval.error)) ||
                (yield && (err_code == SYS_ERR_LMP_BUF_OVERFLOW
                           || err_code == SYS_ERR_LMP_CAPTRANSFER_DST_CNODE_LOOKUP
                           || err_code == SYS_ERR_LMP_CAPTRANSFER_DST_CNODE_INVALID
                           || err_code == SYS_ERR_LMP_CAPTRANSFER_DST_SLOT_OCCUPIED))
                    ) {
                if (err_is_fail(retval.error)) {
                    struct dispatcher_shared_generic *current_disp =
                        get_dispatcher_shared_generic(dcb_current->disp);
                    struct dispatcher_shared_generic *listener_disp =
                        get_dispatcher_shared_generic(listener->disp);
                    debug(SUBSYS_DISPATCH, "LMP failed; %.*s yields to %.*s: %u\n",
                          DISP_NAME_LEN, current_disp->name,
                          DISP_NAME_LEN, listener_disp->name, err_code);
                }

                // special-case context switch: ensure correct state in current DCB
                dispatcher_handle_t handle = dcb_current->disp;
                struct dispatcher_shared_x86_32 *disp =
                    get_dispatcher_shared_x86_32(handle);
                dcb_current->disabled = dispatcher_is_disabled_ip(handle, cpu_save_frame[0]);
                struct registers_x86_32 *save_area;
                if (dcb_current->disabled) {
                    save_area = &disp->disabled_save_area;
                } else {
                    save_area = &disp->enabled_save_area;
                }

                // save calling dispatcher's registers, so that when the dispatcher
                // next runs, it has a valid state in the relevant save area.
                // Save EIP, EFLAGS, ESP and set EAX (return value) for later resume
                save_area->eax = retval.error; // x86 1st return register
                // save frame contains: eip, cs, eflags, esp, ss
                save_area->eip = cpu_save_frame[0];
                save_area->cs = cpu_save_frame[1];
                save_area->eflags = cpu_save_frame[2];
                save_area->esp = cpu_save_frame[3];
                save_area->ss = cpu_save_frame[4];

                /* save FS/GS selectors (they're unmodified by the syscall path) */
                __asm ("mov     %%fs, %[fs]     \n\t"
                       "mov     %%gs, %[gs]     \n\t"
                       : /* No output */
                       :
                       [fs] "m" (save_area->fs),
                       [gs] "m" (save_area->gs)
                       );

                dispatch(to->u.endpoint.listener);
                panic("dispatch returned");
            }
        } else { // not endpoint cap, call kernel handler through dispatch table
            uint8_t cmd = arg0 >> 8;
            if (cmd >= CAP_MAX_CMD) {
                retval.error = SYS_ERR_ILLEGAL_INVOCATION;
                break;
            }

            // Call the invocation
            invocation_handler_t invocation = invocations[to->type][cmd];
            if(invocation == NULL) {
                printf("No invocation handler for type = %d, cmd = %d\n", to->type, cmd);
                retval.error = SYS_ERR_ILLEGAL_INVOCATION;
                break;
            } else {
                retval = invocation(to, cmd, args);
            }
        }
        break;

        // Yield the CPU to the next dispatcher
    case SYSCALL_YIELD:
        retval = sys_yield((capaddr_t)arg1);
        break;

        // NOP system call for benchmarking purposes
    case SYSCALL_NOP:
        break;

        // Debug print system call
    case SYSCALL_PRINT:
        retval.error = sys_print((char *)arg1, args[0]);
        break;

        // Reboot!
        // FIXME: this should be a kernel cap invocation or similarly restricted
    case SYSCALL_REBOOT:
        reboot();
        break;

    case SYSCALL_X86_FPU_TRAP_ON:
        fpu_trap_on();
        break;

    case SYSCALL_DEBUG:
        switch(arg1) {
        case DEBUG_CONTEXT_COUNTER_RESET:
            dispatch_csc_reset();
            break;

        case DEBUG_CONTEXT_COUNTER_READ:
            retval.value = dispatch_get_csc();
            break;

        case DEBUG_TIMESLICE_COUNTER_READ:
            retval.value = kernel_now;
            break;

        case DEBUG_FLUSH_CACHE:
            wbinvd();
            break;

        case DEBUG_SEND_IPI:
            apic_send_std_ipi(args[0], args[1], args[2]);
            break;

        case DEBUG_SET_BREAKPOINT:
            debugregs_set_breakpoint(args[0], args[1], args[2]);
            break;

        case DEBUG_GET_TSC_PER_MS:
            retval.value = timing_get_tsc_per_ms();
            break;

        case DEBUG_FEIGN_FRAME_CAP:
            {
                uint8_t bits = args[2] & 0xff;
                uint8_t cap_bits = (args[2] >> 8) & 0xff;
                uint8_t recv_slot = (args[2] >> 16) & 0xff;
                struct cte *slot;
                struct capability *recv_cnode_cap;

/*                printf("arg1 = %" PRIx64 ", arg2 = %" PRIx64 "\n",
                        (uint64_t)args[1], (uint64_t)args[2]);
*/
                errval_t err = caps_lookup_cap(&dcb_current->cspace.cap,
                      args[0], cap_bits, &recv_cnode_cap, CAPRIGHTS_READ_WRITE);
                if(err_is_fail(err)) {
                    retval.error = err;
                    break;
                }

                // Check for cnode type
                if (recv_cnode_cap->type != ObjType_CNode) {
                    retval.error = SYS_ERR_LMP_CAPTRANSFER_DST_CNODE_INVALID;
                    break;
                }
                // The slot within the cnode
                slot = caps_locate_slot(recv_cnode_cap->u.cnode.cnode,
                                        recv_slot);

                retval.error = caps_create_new(ObjType_DevFrame, args[1], bits,
                        bits, my_core_id, slot);
            }
            break;

        default:
            printk(LOG_ERR, "invalid sys_debug msg type\n");
        }
        break;

    default:
        printk(LOG_ERR, "sys_syscall: Illegal system call! "
               "(0x%x, 0x%"PRIxPTR")\n", syscall, arg1);
        retval.error = SYS_ERR_ILLEGAL_SYSCALL;
        break;
    }

    // If dcb_current got removed, dispatch someone else
    if (dcb_current == NULL) {
        assert(err_is_ok(retval.error));
        dispatch(schedule());
    }

    if (syscall == SYSCALL_INVOKE) {
        debug(SUBSYS_SYSCALL, "invoke returning 0x%"PRIxERRV" 0x%"PRIxPTR"\n",
              retval.error, retval.value);
    }

    return retval;
}

redpajama_set_name: RedPajamaGithub


text:
<?xml version="1.0" encoding="UTF-8"?>
<EntitiesDescriptor xmlns="urn:oasis:names:tc:SAML:2.0:metadata" Name="example.org">

   <Extensions>

      <shibmd:KeyAuthority xmlns:shibmd="urn:mace:shibboleth:metadata:1.0" VerifyDepth="5">
         <ds:KeyInfo xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
         </ds:KeyInfo>
      </shibmd:KeyAuthority>

   </Extensions>

   <EntityDescriptor entityID="http://foo.example.org/shibboleth">
      <!-- Protocol BLUE -->
      <IDPSSODescriptor protocolSupportEnumeration="PROTOCOL_BLUE">
         <KeyDescriptor use="signing">
            <ds:KeyInfo xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
               <ds:KeyName>foo.example.org</ds:KeyName>
            </ds:KeyInfo>
         </KeyDescriptor>
         <SingleSignOnService Binding="urn:mace:shibboleth:1.0:profiles:AuthnRequest" Location="https://foo.example.org/shibboleth/SSO_FOO"/>
      </IDPSSODescriptor>>

      <!-- Protocol GREEN -->
      <IDPSSODescriptor protocolSupportEnumeration="PROTOCOL_GREEN">
         <!-- Note no 'use' specified. -->
         <KeyDescriptor>
            <ds:KeyInfo xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
               <ds:KeyName>CN=foo.example.org,O=Internet2</ds:KeyName>
            </ds:KeyInfo>
         </KeyDescriptor>
         <SingleSignOnService Binding="urn:mace:shibboleth:1.0:profiles:AuthnRequest" Location="https://foo.example.org/shibboleth/SSO_BAR"/>
      </IDPSSODescriptor>

      <AttributeAuthorityDescriptor protocolSupportEnumeration="urn:oasis:names:tc:SAML:1.1:protocol">
         <KeyDescriptor use="signing">
            <ds:KeyInfo xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
               <ds:KeyName>foo.example.org</ds:KeyName>
            </ds:KeyInfo>> </KeyDescriptor>
         <AttributeService Binding="urn:oasis:names:tc:SAML:1.0:bindings:SOAP-binding" Location="https://idp.example.org:8443/shibboleth/AA"/>
      </AttributeAuthorityDescriptor>

   </EntityDescriptor>

   <EntityDescriptor entityID="http://bar.example.org/shibboleth">

      <SPSSODescriptor protocolSupportEnumeration="PROTOCOL_BLUE PROTOCOL_GREEN">
         <KeyDescriptor use="signing">
            <ds:KeyInfo xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
               <ds:KeyName>bar.example.org</ds:KeyName>
            </ds:KeyInfo>
         </KeyDescriptor>
         <AssertionConsumerService Binding="urn:oasis:names:tc:SAML:1.0:profiles:browser-post" Location="https://bar.example.org/Shibboleth.sso/POST" index="0"/>
      </SPSSODescriptor>

   </EntityDescriptor>

</EntitiesDescriptor>


Rare! Restored authentic village house with private swimming pool, at the edge of a small village and Parc National des Causses de Quercy. The area is located in the Lot, but it's near the Dordogne river, which means that Domme, Cenac, Vitrac and the castles by the river can be reached within half an hour. The house is located on a small square and features a beautiful, unobstructed view of the rolling hills, meadows and forests from the side of the swimming pool. It's been restored with lots of love; you can see this in the small details, for example the idyllic balcony on the first floor. The house features 4 bedrooms and 2 bathrooms, a very large modern kitchen diner and a pleasant living room and separate TV room. The furnishings are playful, varied and contemporary. Around the swimming pool, you'll find several seating area and in the garden there's a pergola with dining area. A wonderful spot to spend many pleasant hours! You'll certainly enjoy yourself here and be able to fully unwind. Within 15 minutes you can reach the large town of Gourdon, where you can get your groceries and where you'll find many festivities and flea markets during the summer. Canoeing is possible in Cenac; don't forget to visit Sarlat, with its old, medieval centre, and Gramat.


During the Vietnam War, Martin Luther King called our government "the greatest purveyor of violence in the world today." True then—and even more so today.
There are children being orphaned, maimed or killed every day, in our name, with our tax dollars; there are soldiers and civilians dying or being maimed for life, in order to generate profits for the most odious imperialistic corporate war machine ever, again in our name. How long are we going to let this go on? Until it is too late, until this destructive machine destroys all of us and the planet to boot?
Wikileaks has revealed the documented horror of U.S. war-making, beyond what any of us imagined. It's time veterans and others express our resistance directly and powerfully by putting ourselves on the line, once again—honestly, courageously and without one drop of apology for doing so. It is not we who are the murderers, torturers or pillagers of the earth.
Profit and power-hungry warmongers are destroying everything we hold dear and sacred.
In the early thirties, WW1 vets descended on Washington, D.C., to demand their promised bonuses, it being the depths of the Depression. General Douglas MacArthur and his sidekick Dwight Eisenhower disregarded President Herbert Hoover's order and burned their encampment down and drove the vets out of town at bayonet point.
We are today's bonus marchers, and we've coming to claim our bonus–PEACE.
Join activist veterans marching in solidarity to the White House, refusing to move, demanding the end of U.S. wars, which includes U.S. support—financial and tactical—for the Israeli war machine as well.
If we can gather enough courageous souls, nonviolently refusing to leave the White House, willing to be dragged away and arrested if necessary, we will send a message that will be seen worldwide. "End these wars – now!" We will carry forward a flame of resistance to the war machine that will not diminish as we effectively begin to place ourselves, as Mario Savio said, "upon the gears and upon the wheels, upon the levers, upon all the apparatus." and we will make it stop.
We believe that the power of courageous, committed people is greater than that of corporate warmongers. But we will only see our power when we use it collectively, when we stand together.
With courage, persistence, boldness and numbers, we can eventually make this monstrous war machine grind to a halt, so that our children and all children everywhere can grow up in a peaceful world.
Join us at the White House on December 16th!