text:
The Bone Clocks – David Mitchell
by Nathan Weatherford
[Random House; 2014]
I meet Holly Sykes on the first page of David Mitchell's The Bone Clocks and immediately can't stand her. It doesn't help that the first sentence consists of rote teenage-girl-fawning over a boy: ". . . I'm already thinking of Vinny's chocolatey eyes, shampoo down Vinny's back, beads of sweat on Vinny's shoulders, and Vinny's sly laugh, and by now my heart's going mental . . ." It's 1984 in Gravesend, England, and knowing Mitchell's penchant for referencing disparate characters across his books, the only intriguing possibility I see on the horizon is the potential for Jason Taylor, the 80s Worcestershirean protagonist from Mitchell's Black Swan Green to show up at some point. I figure I can stick it out at least that far, since I loved Jason's character so much.
Turns out I was right about Jason making his way into the book (albeit extremely briefly), but couldn't have been more wrong about Holly. This initially stereotypical boy-crazy teenager is woven into and around every single section of the novel, which ends up spanning sixty years and several countries, so thankfully Holly is far and away the most interesting character in it. While we only see her through her own eyes as a teenager and as an elderly woman, Mitchell fleshes out her intervening years from several different perspectives: lover, husband, fellow author. The final effect is that of an intricate mosaic, all the pieces fusing into an entire lifetime, a framework that offers Mitchell ample opportunity to play with the past, present, and future of Holly's (and our) world.
He's not the only one playing with time, as you've probably surmised from the novel's title. The plot centers on a clash between the Horologists (souls that are continually reborn into new bodies, year after year, century after century) and the Anchorites (those who use murderous means to extend their own particular body's life). The titular "bone clocks" is a derisive term used by the Anchorites to describe normal humans, condemned to a single lifetime before their souls enter the Dusk and make their way to the Last Sea, never to be seen in this world again. While a couple members of the Horologists have existed for millennia and have no idea why they were chosen to experience their recurring reincarnations, the Anchorites were created by a member of a heretical Christian sect mere hundreds of years ago. He discovered that by "decanting" even a small amount of "psychosoteric" essence from a human and consuming it, he could extend his own life at the cost of another's, and thus the Anchorites were born. The Horologists have been conducting a hidden war against them ever since, in order to save those human souls from murder.
Still with me? It's to Mitchell's credit that all this hidden-society, crypto-historical terminology is never overwhelming or distracting from the characters themselves. The Bone Clocks ends up resembling The Da Vinci Code only in the way that Twin Peaks resembles Dallas. It's startling when Holly experiences her first vision of this hidden world as a teenager, mainly because everything she has been thinking about up until that point (boys, music, rebellion) had been so quotidian. But to suddenly dive into imagery like this after what had been a largely bucolic affair early on was simultaneously horrific and enlivening:
The old saint's mouth's opened, full of shark's teeth, and metal screams and stone groans. Figures and shadows appear like a shadow-puppet show in the mind of someone going mad. One older man springs onto the table. He has piranha-fish eyes, curly black locks, a busted nose, a black suit, and there's a strange indigo light coming off him, like he's radioactive . . . Black flames and a roaring loud as jet engines fill the place, and I can't run and I can't fight, and I can't even see anymore so all I can do is stand there and listen to voices, like voices shouting as a building collapses on their owners . . .
What I had thought was going to be a fairly standard teenage narrative was obviously going somewhere else entirely. And while Holly is the stand-in for the reader as she discovers this world, and is the through line that ties all the disparate sections and decades together throughout the novel, Mitchell uses his other characters' sections to provide some welcome outside perspectives on the world around her. We see the ski resort bar where Holly works in the early 90s through Hugo Lamb's eyes, on winter break from college and unexpectedly infatuated with her after a chance encounter. Ten years later, Holly's husband is a reporter working out of war-torn Iraq who's back home for a family wedding and is himself torn between family and work abroad.
Next up is an author whose first book won all sorts of critical acclaim, but who has struggled to rise to those same heights with subsequent novels, and who initially thinks that Holly's newly-published nonfiction phenomenon is less than deserving, to put it nicely. This section in particular provides Mitchell with wonderful opportunities to slip in casual meta-digs at his own authorial career: "What surer sign is there that the creative aquifers are dry than a writer creating a writer-character?" And just before Holly's final section, we at long last get some first-person narration from a Horologist herself (or himself — I forgot to mention that Horologists switch sexes each time they are reborn, and I imagine they would make excellent relationship counselors). Each section proves more interesting than the last, as blanks are filled in and histories are revealed, all swirling around Holly as the years pass.
The only false note struck in the whole book is unfortunately found in its last few pages, told once more from Holly's perspective in the year 2043. It reads largely as a polemic against the destruction humans have done to the planet over the course of Holly's lifetime — a sentiment I admire and agree with, and one that is felt on a visceral level thanks to Mitchell's deft use of language and imagination, but one that isn't fitting with the rest of the book's tone. It's a given that the denouement of any story is necessarily less exciting than the climax, but the post-apocalyptic plot and imagery here feel grafted on and jarring.
It doesn't help that the only connection to be found to the overarching plot in the rest of the novel (aside from Holly's few fading memories) consists of what amounts to a deus ex machina invoked in the last few pages, which feels like a blatant attempt to shoehorn this section into the rest of the book. Still, it was only a slightly disheartening end to a novel that for most of its run felt like it would never run out of ideas, and whose plot kept me intrigued and guessing for the bulk of it. As always, Mitchell wields his genre influences adeptly, and The Bone Clocks feels like a compendium of the best qualities of his previous novels and short stories, blending sci-fi, fantasy, and historical fiction into what should rightfully be a blockbuster of a book. Life is short for us bone clocks, but this is definitely worth a read before it ends.
Nathan Weatherford is a freelance writer disguised as an IT specialist at Powell's Books in Portland, OR. He has been known to tweet from time to time.


text:
China: AIDS Spreads As Authorities Sharpen Their Struggle
By Breffni O'Rourke
(RFE/RL) PRAGUE, October 18, 2006 (RFE/RL) -- A senior Chinese health official says China is becoming "like Africa" in that HIV/AIDS is beginning to spread through the community. The official, deputy head Hao Yang of the bureau of diseases prevention at the Ministry of Health, says that there are 190 new cases of AIDS every day in China, and that now it must be considered a "generalized epidemic."
Hao says HIV/AIDS is no longer centered only on high-risk groups like prostitutes, homosexuals, and intravenous drug users.
Instead, it is spreading through the broader community by means of heterosexual sex. Hao told Reuters that half of new AIDS cases now occur in the general community, and almost 1 percent of pregnant women in high-prevalence areas are infected -- a statistic he characterized as "very high."
The government in Beijing, recognizing the difficulty of overcoming AIDS, is aiming to at least contain the total number of infections by 2010 to roughly double the current total.
Hao's comparison of China with Africa was a reference to the way AIDS has long been transmitted through the whole of society in many African countries, producing the highest rates of infection in the world.
Ole Hanson, an adviser to the United Nations UNAIDS office in China, told RFE/RL that the Chinese health system needs an overhaul to allow it to cope with AIDS and a number of other infectious diseases -- such as tuberculosis, bird flu, Malaria, and hepatitis.
"It is well recognized, both by the Chinese authorities and other stakeholders, that the health sector is in dire need of reform -- there are problems with financing, [and] there are some problems with poor people's access to health care, especially in rural areas," Hanson said.
The Chinese authorities initially underestimated the importance of AIDS. But they have committed increasing effort and resources to the fight in the last few years. Hanson says the task is daunting.
"In a huge country like China, with a lot of economic problems, it's very difficult to control an epidemic like AIDS," Hanson said.
Reporting Gap
Official figures put the number of people infected by HIV/AIDS in China as 650,000, a comparatively small figure given China's population of 1.3 billion people. But there is thought to be underreporting of new cases -- particularly from rural areas, where some officials are reluctant to admit a problem, and where sufferers seek to avoid stigma.
"Where the problems might arise is on a local level, where local counties and provinces -- although some provinces are very progressive and active in the fight against AIDS, and I can mention here Yunan, Sichuan, Guangxi, and Guandong -- they have a lot of progressive intervention programs. But some other provinces are not quite on the same page, and are less eager to engage and to allocate funds in the fight against AIDS," Hanson said.
The government in Beijing, recognizing the difficulty of overcoming AIDS, is aiming is to at least contain the total number of infections by 2010 to roughly 1.5 million, about double the present total.
Low Awareness
One problem has been the lack of information and public awareness about the disease. A recent survey showed that one in five Chinese had never heard of AIDS.
Authorities are not always sympathetic to efforts to increase public awareness. Police in Harbin were angered by a public lecture staged by the local branch of the Center for Disease Control, at which dozens of prostitutes were given free condoms. According to the "Beijing News" newspaper, the police found the lecture inappropriate.
AIDS is one of the newer diseases that have reached global proportions in just a few decades. But a senior research fellow at the Center for Disease Control, Wang Ruotao, told a medical conference in Beijing on October 13 that China is unusual in that it suffers both the modern "lifestyle" ailments and ancient afflictions.
Wang said the rapid industrialization of the past two decades has produced illnesses of the advanced urban world -- like heart disease, high blood pressure, diabetes and cancer -- while in the countryside the traditional diseases remain as they were for thousands of years.

redpajama_set_name: RedPajamaCommonCrawl


What are Compulsions and Compulsive Behaviours?
You would normally hear or read about compulsive behaviours and disorders being linked with Obsessive Compulsive Disorder (OCD), which is a diagnosis widely used within the mental health profession.
Compulsive behaviours can range from simple everyday behaviours such as shopping to more reckless behaviours such as self-harming.
One of the issues with compulsive behaviours is that most of them undertaken to excess can have very damaging impacts on people's lives: the compulsive shopper may find themselves heavily in debt or even bankrupt, while the compulsive self-harmer may place their life in jeopardy on a regular basis.
Please do not be put off if your particular issue has not been identified in the list above: compulsive behaviours and disorders are so varied and often specific to the individual that it would be impossible to list them all here.
What is important to realise is that it is the underlying reasons for the behaviour that is significant and it is this that is treated with hypnotherapy, rather than the precise behaviours themselves.
Many people who have compulsive disorders and behaviours find themselves feeling a little out of control or driven by factors they can not understand.


text:
News Broadcasting Agency
Aakash Educational Services Limited felicitates JEE MAINS 2020 meritorious students
valliappan 12 months ago 2 min read
Aakash Educational Services Limited (AESL), the national leader in test preparation services, today felicitated meritorious students of JEE MAINS 2020 from the various branches of Aakash Institute in Chennai. A total of 15 students were felicitated by AESL Chairman and Managing Director, Mr J.C. Chaudhry, at a ceremony held at the Adyar branch of AESL.
Noticeably among the meritorious students isSooraj Srinivasan, hailing from Chennai, who has done the City and the Institute proud by securing 99.99 percentile at the prestigious JEE Mains 2020 examination.
Also 14 other students have got 98 percentile and above for JEE Mains 2020 from Chennai, an impressive feat that speaks volumes of the Institute's curriculum, training and faculty.
Out of the 14 students, four students secured 99 percentile and above, while the remaining secured 98 percentile and above. The students who secured 99 percentile and above are Ishaan Agarwal (99.80 percentile), Sharon A (99.55 percentile), Shivam Ruhil (99.23 percentile), and Sonesh Kumar (99.02 percentile).
Congratulating the students and commenting on the impressive results, Mr J.C. Chaudhry, Chairman and Managing Director, Aakash Educational Services Limited (AESL) said: "We are proud that Sooraj Srinivasan secured a percentile of 99.99 and many others qualified JEE Mains 2020 with 98 percentile and above. It is the result of the hard work by the students and our highly focussed study material, talented faculty, quality test assessments that has enabled them to achieve this feat. Congratulations to all our students who have performed well in the JEE Mains 2020 examination. I wish them all the best for their future endeavours."
The students credited the outstanding performance to burning the midnight oil and the excellent teaching and study material help provided by Aakash experts.
JEE (Main) Examination for B.E./B.Tech. was conducted by NTA between 7th and 9th January 2020 in two shifts per day across 233 cities in the country and abroad. A total number of 9,21,261 candidates were registered for B.E. /B. Tech. in the exam.
Aakash Institute aims to help students in their quest to achieve academic success. It has a centralized in-house process for curriculum and content development and faculty training and monitoring, led by its National Academic Team. Over the years, students from AESL have shown proven selection track record in various Medical & Engineering entrance exams and competitive exams such as NTSE, KVPY, and Olympiads.
About Aakash Educational Services Limited (AESL)
Aakash Educational Services Limited (AESL) provides comprehensive test preparatory services for students preparing for Medical and Engineering Entrance Examinations, School/Board Exams and Competitive Exams such as NTSE, KVPY, and Olympiads. AESL believes that the "Aakash" brand is associated with quality coaching and a proven student selection track record in various Medical and Engineering Entrance Examinations.
With over 32 years of operational experience in the test preparatory industry, the company has a large number of selections in Medical & Engineering Entrance Exams, a pan India network of 200+ Aakash Centres (including franchisee), and a student count of more than 250,000.
Previous YWCA Community College felicitated Princess Francoise Sturdza from Switzerland at Women empowerment programme for the underprivileged girls
Next Meenakshi Mission Hospital & Research Center, Madurai was awarded the Excellence in Quality Awards for Best Cancer Care Hospital and Best Orthopedic Care Hospital
மதுரை-போடிநாயக்கனூர் அகலரயில் பாதை 2021 மார்ச்-ல் பயன்பாட்டிற்கு வரும் ஓ.பி.ரவிந்திரநாத் குமார் எம்பி உறுதி
5 months ago valliappan
கொரோனா பாதிப்பு – பிரதமர் மற்றும் முதல்வர் பொது நிவாரண நிதிக்கு ரூ. 50 லட்சம் வழங்கியது சத்தியபாமா நிகர்நிலை பல்கலைக்கழகம்
10 months ago valliappan
Meenakshi Mission Hospital & Research Center, Madurai was awarded the Excellence in Quality Awards for Best Cancer Care Hospital and Best Orthopedic Care Hospital
தமிழகத்தில் சாதி வாரி மக்கள் தொகைக் கணக்கெடுப்பை நடத்தக்கோரி, வேளச்சேரி வட்டாட்சியர் அலுவலரிடம் பாட்டாளி மக்கள் கட்சியின் மாநில துணைத்தலைவர் முனைவர் சாம் பால் மனு அளித்தார்
3 weeks ago valliappan
The first 10 All New Nissan Magnite cars in Chennai rolled out from Autorelli Nissan!
Ajinomoto (MSG) is a quality product prepared with natural ingredients
GILLI CHAI LAUNCHES ITS FLEET OF WOMEN POWERED MOBILE CHAI OUTLETS BUILT ON ELECTRIC AUTO RICKSHAWS on 29th DECEMBER


The Welsh Government have announced that they have found the money in their draft budget for this year and have committed to finding the money in the next financial year to ensure that pay parity with school teachers can be maintained. Your determination to protect your pay and conditions is paying off, stay strong and we will win the benefits to your terms and conditions.
What does that mean for your pay?
A meeting has been arranged with representatives of the principals next Wednesday 28 November at which we are expecting to receive a revised offer from them on pay. We don't know whether that offer will reflect precisely the offer made to school teachers in Wales: the unqualified and main grades received 3.5%; the upper pay scales received 2% and school leaders received 1.5%. We understand that support staff in schools received 2%, unless their wage was below the national living wage in which case they had a higher award.
The joint trade unions are meeting on Friday 30 November and we will notify you of the outcome of that meeting. There will be a further special further education sector committee (FESC) on Saturday 8 December to discuss the offer from your employer and take decisions - so please make sure you let your branch officers know what you think about the offer. It will be circulated in time to allow you to read it and ask questions and feedback before the special FESC. FESC has already agreed that if the offer matches the offer made to school teachers then a ballot of members will take place, date to be agreed.
Are we taking strike action on Tuesday 4 December to pursue the workload negotiations?
The purpose of the lobby of the Assembly on the first day of strike was to influence the budget discussions to ensure that money was found address our pay claim. That is no longer necessary, as the money has been found by the Welsh Government to meet pay parity with school teachers.
Your negotiators and officers of the FESC have discussed the need to start strike action on Tuesday 4 December. ColegauCymru (CC) made it clear that they would not discuss workload until after the pay dispute was resolved. We hope that they will offer dates on Wednesday 28 November and if they do, we believe it would be appropriate to suspend action, to allow for those meetings to take place. However, if we are wrong and they do not offer appropriate dates on 28 November, then the strike on 4 December, over their failure to negotiate with us on the national workload agreement, will go ahead.


text:
MLUB Denies Application Of Easy Fitness With Jeannie
After two meetings that lasted for a combined time of over six and a half hours, the Municipal Land Use Board (MLUB) denied the application for Easy Fitness With Jeannie located at 293 West Clay Avenue at the end of the April 21st MLUB meeting and was memorialized as a resolution May 19th.
The first meeting, which had noticeable errors in protocol and procedure that included not only the unprecedented practice of having residents swear in during the public hearing that was not explicitly determined to be testimony, simply a 'public comment portion', but also having only some members of the public sworn in while others were not. Also, the Board held a hearing for a parking variance which was not legally allowed to be heard due to the wording "any and all" not being included in the public notice provided by the applicant's attorney; that omission only allowed for a variance hearing on whether or not the business could be allowed to function in the designated business zone. Additionally, the MLUB's own bylaws were violated when the legal meeting went past 10 p.m., the time set by the board's regulations and possible vacant Board seats were not appointed in time for either hearing.
This last issue was brought up during the second April meeting when Ralph Ortiz, a MLUB member who had recused himself from the application due to a personal conflict of interest (he started a petition against the business) stated publicly that he had resigned from the Board over a month previous. If his resignation had been accepted, a replacement could have been appointed who could have sat and heard the application, as Glenn Costello did (who was not present during the first meeting). Mr. Costello had to sit and listen in on the audio of the first meeting and certify to having done so. Board Alternate Scott Nicol, who has not sat in on all but one meeting since being appointed, did not attend this meeting.
This left the applicant needing a unanimous vote since only five (5) members were available to hear each part of the application. Three (3) MLUB members had to recuse themselves from the hearing due to being within the proximity to the application being heard and Carl Pluchino could not hear it either, being the municipality's Code Construction Officer and involved in summonses issued to the business last year.
The final decision of the Board was 4-1 in April against the variance to allow the business to operate in a B-1 zone, having voted down an interpretation that the business was not a gym but a wellness center at the previous meeting.
Victor Vinegra from Harbor Consultants, stated, "It's difficult doing an interpretation. It's an old ordinance . . . When this ordinance was drafted, these uses didn't exist."
During the first meeting in February, the MLUB held an interpretation phase of the application to determine if the wording of the ordinance could be interpreted to include one aspect of Easy Fitness With Jeannie – the exercise equipment. During that meeting, the municipal planner, Victor Vinegra from Harbor Consultants, stated, "It's difficult doing an interpretation. It's an old ordinance . . . When this ordinance was drafted, these uses didn't exist."
Mr. Vinegra was referring to the time period that the ordinance, which does not mention a comprehensive view to overall health which would, today, include exercise as well as diet and physical therapy – the last two things being allowed uses in a B-1 zone.
This was later re-iterated when he stated, "This ordinance is very old and doesn't include a lot to things. There's a lot of things missing that is permitted."
"It's a tough call," Mr. Vinegra said, "I agree with a lot of their testimony, what they're saying, except for one. they do [have] exercise equipment . . . The wellness, we felt that was included. The retail sales were definitely included. In-house consul we felt was included. Homeopathic [care], sure, we felt that was included. But the exercise portion we felt that this use would not be in a B-1 zone."
The Borough Planner continued with his findings, commenting that under the B-1 allowed businesses, institutional and public uses had provisions that listed something very similar to the exercise equipment portion of Easy Fitness With Jeannie, but that it was related to sports clubs. He remarked, "If a soccer club wanted to have clubhouse, they could do that there [in that location]. It's kind of odd, they could have a club house there."
"It's splitting hairs," Mr. Vinegra added regarding the interpretation, "But that's what zoning officers do. They're being maybe a little overly safe . . . The majority of the uses they're listing are permitted but the exercise equipment."
Ms. Kurz responded,"There's a reason the codes say what they say. Hopefully, they're going to be followed by what it says there is."
During the public comment/testimony portion of the meeting, both opposers and supporters of the application; notably among them were former Roselle Park Mayor Joseph DeIorio who not only owns a property at 305 East Clay Avenue but is also the son of Gilda DeIorio, the owner of Iorio Deli and Casa di Martino's, one of the next door neighbors of Easy Fitness With Jeannie who have had reports dealing with disputes between the applicant and, before then, George D'Agostino – the property owner of 293 East Clay Avenue. The owners of the business on the other side of Easy Fitness with Jeannie, Paragon Ballroom, did not attend the hearings.
Those against the application spoke of parking becoming a problem but none could state with any certainty that the issue was from Easy Fitness With Jeannie since there is a banquet hall and dance studio on either side of the applicant's business. Under questioning from the applicant's attorney, people admitted that parking issues existed during the hours and days that Easy Fitness With Jeannie was not in operation. Others claimed safety was an issue and that numerous calls had been made to the police since Easy Fitness With Jeannie had been in operation. An OPRA request by Roselle Park News during that time period showed that out of the only dozen or so calls made regarding parking and noise, six (6) of those calls were called in by Chris Tucci. Mr. Tucci is a former Roselle Park Police officer who is, by several accounts, an employee of Iorio Deli. It was discovered that during that same time period, three (3) burglary alarm calls were dispatched to 301 West Clay Avenue for Iorio Deli.
There was even one complaint filed by the owner of 293 West Clay Avenue requesting that the police move an unauthorized vehicle from its property.
After testimony, comments, and discussion by Board members, the Board brought the matter up for a vote. Even though the applicant provided testimony that her business was not a gym – where anyone could walk in at any time and start using weights or aerobic equipment – and based on a schedule in line with a health/dietary program which included use of gym equipment, the MLUB voted unanimously that the interpretation did not allow for Easy Fitness With Jeannie to operate under the B-1 zone. The second potion of the hearing proceeded with listening in on a variance to allow her business to remain in the B-1 district.
After testimony was provided for the variance and, again residents and clients gave their comments, the Board realized that a portion of the variance, for additional parking, was not part of the application. Diane Kurz, who was the Chair of both hearings due to the aforementioned conflict that prevented both the Chair and Vice-Chair from hearing the matter, was the only Board member who pushed to have a vote during the February meeting. This after the applicant, Ms. Mendes-Doman, stated she would be willing to comply and/or work with outside parties as well as residents to find a compromise to address their concerns and parking. Ms. Kurz, a former Chair of the Roselle Park Republican Committee who took over in that position for then Roselle Park Mayor Joseph DeIorio, was out-voted 4-1 to have the hearing adjourned for another month, and was the only Board member who did not want to afford Ms. Mendes-Doman the opportunity to address parking and concerns of the opposers. The use variance and parking variance were to be heard at a second meeting.
A misprint in the public notice from the applicant's attorney delayed the hearing from March until April.
Ms. Mendes-Domain stated, "Ideally, I think for both myself and my neighbor, if we shared the parking lot… that would be the ideal situation. I've asked the neighbor if we had the option of doing this and it was not entertained."
During the second meeting, Ms. Mendes-Doman stated that she looked at alternatives for off-site parking, going to local business such as DJ's Limousine, Children's Specialized Hospital, Well Done Building Products, and even organizations like the Church of the Assumption to propose to rent out parking spaces but none were available. Ms. Mendes-Doman even stated she tried to approach Mrs. DeIorio to find an arrangement to share the parking lot between the businesses since the hours for each business, for the most part, do not conflict, but was not accepted by Iorio Deli/Casa di Martino. Ms. Mendes-Domain stated, "Ideally, I think for both myself and my neighbor, if we shared the parking lot, drew out spaces within both our parking areas because our businesses don't operate around the same time, that would be the ideal situation. I've asked the neighbor if we had the option of doing this and it was not entertained."
When asked why, she added, "Because of some dislike between the neighbor and my landlord. So, because of that friction between the two landlords there was nothing I could do to make anything work with them."
To support her position that parking is a problem regardless of her business, Ms. Mendes-Doman provided photographs showing parking violations made not by her clients but others, when there was ample parking on the streets. Photographs included that of a water delivery truck, a van parked on the yellow curb which was not a client of "Easy Fitness With Jeanie, and someone using her business' lot who were not her customers. The applicant noted that Iorio Deli/Casa di Martino has a parking variance for their business that allows for only seven (7) parking spaces but that she noticed on quite a few occasions that there were a lot more than the allotted amount in the parking lot.
Between January and the publication of this article, Roselle Park News took and obtained photographs showing parking violations at 301 West Clay Avenue and provides a small sample below:
Mrs. Mendes-Doman went on to state that she has explicitly notified her clients to be mindful of where they park and that they should not block the driveway, "I have expressed to my customers, members, clients, how important it is that they follow the parking laws."
She even had her clients leave their keys at the front in case anyone comes in asking to have a car moved.
Ms. Kurz did note that the Board had requested that the applicant have engineer provide testimony as to parking but that the applicant did not do so.
The public comment portion again had supporters and opposers to the application come forward to speak. One resident even brought out that an ordinance regarding angled-parking, was outdated and needed to be revised and updated to be removed from the borough code. Once more though, when those who came forward were directly asked if Easy Fitness With Jeannie was solely responsible for issues with parking, no one could state that was the case. This was re-iterated when Ms. Mendes-Doman concluded her closing statements by stating, "I find it hard to believe that the issue of parking is solely on the shoulders of my business."
The Board then discussed the variance before voting.
Mr. Al Nitche, who did not mention whether he visited the business personally stated, "Parking is an issue. It remains an issue."
Mr. Paul Baiamonte, commented, "I find this very very difficult for both sides. I went up and down all times of day and night including 15 minutes before this meeting [and] drove past. There were no cars in the right of way."
He stated that the times he went when Easy Fitness With Jeannie was operating he did not find it difficult to park and that there had been a lot of spots open. Additionally, Mr. Baiamonte commented that he drove by one day when Easy Fitness With Jeannie was not operating where the parking lot at 301 East Clay Avenue was full and street parking was also full. He concluded, "So I kind of feel it may just not be her business that's causing this . . . I don't know how to fault one person for the problem."
Mrs. Kurz commented, "I kept coming up with negatives."
Ms. Kurz provided a statement, which she read for the record. In her statement Mrs. Kurz stated, "I want business in Roselle Park. I want them to be successful and I think that your presentation was excellent and that the business that you offer is a business that's necessary and wonderful for our town and so when I was doing my research and thinking and trying to decide of what I thought of everything last month. I needed help and I went to certain places to get help for myself and I'm going to review with you what I looked at for me to come up with how I feel about how I'm going to vote. I am not going to make you wait for it, I am going to vote 'no' on this. I want you to know that but I want to put on the record so you understand why I'm going to do that. Some of it may sound, well, it doesn't matter, it's what I came up with as the board member trying to do my due diligence and the best that I could do as a board member."
Ms. Kurz stated she had wanted an engineer to testify, and that she analyzed five (5) categories in reaching her decision: positive criteria, negative criteria, how the application affects the municipal master plan, how the application affects the general public, and how the application affects surrounding properties. In reviewing her criteria, Mrs. Kurz commented, "I kept coming up with negatives."
In concluding, the Board Chair remarked, "This part is a little difficult to for me to say because I do not want to disparage you in any way. I have the utmost respect for you but I felt like that, this is my personal opinion, I felt like that you started with the town with, and unclean hands is probably the wrong term to use but I couldn't think of another one, I know that in Union your studio was an aerobics studio and here now it's a nutritional wellness center thing and I had… I know that your landlord helped with the initial application and having you come into the town so I can't help but think that you were duped in a way so that set up a wrong to begin with."
After all testimony, comments, and discussion, the vote was taken and with only Mr. Paul Baimonte voting 'yes' and the four remaining Board members voting in the negative, the application was denied.
An appeal was filed by Jeannie Mendes-Doman in May to have the application heard before a New Jersey Superior Court.
Posted on June 1, 2014 June 16, 2014 Author Saul QersdynCategories GovernmentTags Easy Fitness With Jeannie
Previous Previous post: Mayoral Appointments Made In May
Next Next post: Boy Scouts Honor Kevin Murphy


text:
Review by paulthegrub
The Outsiders 1983 ★★½
Watched Oct 25, 2020
paulthegrub's review published on Letterboxd:
I couldn't decide if this was bad or just mediocre, but for now, it is just mediocre. There isn't much to say about The Outsiders. The cinematography and score are serviceable. The acting isn't anything amazing and the line delivery was sometimes weird, but for the most part, it was also serviceable. My main issue with the film is that it feels like it's trying to win a race. A lot of the scenes feel super rushed and this makes the film ending up to be really corny. The way characters shift emotion so quickly comes off pretty silly. Little did I know though, there is apparently a longer cut. I've never known of this till now, so maybe that'll fix the pacing issues. The score also was changed in this cut, so that might also be better. For now, this is a pretty mediocre film, but maybe I need to see the original cut instead of the theatrical cut.
paulthegrub liked this review
Reviewed by Wesley Stenzel ★★½
paulthegrub is using Letterboxd to share film reviews and lists with friends. Join here.
paulthegrub's films


text:
/* ssl/s3_pkt.c */
/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
 * All rights reserved.
 *
 * This package is an SSL implementation written
 * by Eric Young (eay@cryptsoft.com).
 * The implementation was written so as to conform with Netscapes SSL.
 *
 * This library is free for commercial and non-commercial use as long as
 * the following conditions are aheared to.  The following conditions
 * apply to all code found in this distribution, be it the RC4, RSA,
 * lhash, DES, etc., code; not just the SSL code.  The SSL documentation
 * included with this distribution is covered by the same copyright terms
 * except that the holder is Tim Hudson (tjh@cryptsoft.com).
 *
 * Copyright remains Eric Young's, and as such any Copyright notices in
 * the code are not to be removed.
 * If this package is used in a product, Eric Young should be given attribution
 * as the author of the parts of the library used.
 * This can be in the form of a textual message at program startup or
 * in documentation (online or textual) provided with the package.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 * 1. Redistributions of source code must retain the copyright
 *    notice, this list of conditions and the following disclaimer.
 * 2. 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.
 * 3. All advertising materials mentioning features or use of this software
 *    must display the following acknowledgement:
 *    "This product includes cryptographic software written by
 *     Eric Young (eay@cryptsoft.com)"
 *    The word 'cryptographic' can be left out if the rouines from the library
 *    being used are not cryptographic related :-).
 * 4. If you include any Windows specific code (or a derivative thereof) from
 *    the apps directory (application code) you must include an acknowledgement:
 *    "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
 *
 * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``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 AUTHOR 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.
 *
 * The licence and distribution terms for any publically available version or
 * derivative of this code cannot be changed.  i.e. this code cannot simply be
 * copied and put under another distribution licence
 * [including the GNU Public Licence.]
 */
/* ====================================================================
 * Copyright (c) 1998-2002 The OpenSSL Project.  All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 *
 * 1. Redistributions of source code must retain the above copyright
 *    notice, this list of conditions and the following disclaimer.
 *
 * 2. 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.
 *
 * 3. All advertising materials mentioning features or use of this
 *    software must display the following acknowledgment:
 *    "This product includes software developed by the OpenSSL Project
 *    for use in the OpenSSL Toolkit. (http://www.openssl.org/)"
 *
 * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
 *    endorse or promote products derived from this software without
 *    prior written permission. For written permission, please contact
 *    openssl-core@openssl.org.
 *
 * 5. Products derived from this software may not be called "OpenSSL"
 *    nor may "OpenSSL" appear in their names without prior written
 *    permission of the OpenSSL Project.
 *
 * 6. Redistributions of any form whatsoever must retain the following
 *    acknowledgment:
 *    "This product includes software developed by the OpenSSL Project
 *    for use in the OpenSSL Toolkit (http://www.openssl.org/)"
 *
 * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
 * EXPRESSED 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 OpenSSL PROJECT OR
 * ITS 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.
 * ====================================================================
 *
 * This product includes cryptographic software written by Eric Young
 * (eay@cryptsoft.com).  This product includes software written by Tim
 * Hudson (tjh@cryptsoft.com).
 *
 */

#include <stdio.h>
#include <errno.h>
#define USE_SOCKETS
#include "ssl_locl.h"
#include <openssl/evp.h>
#include <openssl/buffer.h>

static int do_ssl3_write(SSL *s, int type, const unsigned char *buf,
			 unsigned int len, int create_empty_fragment);
static int ssl3_get_record(SSL *s);

int ssl3_read_n(SSL *s, int n, int max, int extend)
	{
	/* If extend == 0, obtain new n-byte packet; if extend == 1, increase
	 * packet by another n bytes.
	 * The packet will be in the sub-array of s->s3->rbuf.buf specified
	 * by s->packet and s->packet_length.
	 * (If s->read_ahead is set, 'max' bytes may be stored in rbuf
	 * [plus s->packet_length bytes if extend == 1].)
	 */
	int i,off,newb;

	if (!extend)
		{
		/* start with empty packet ... */
		if (s->s3->rbuf.left == 0)
			s->s3->rbuf.offset = 0;
		s->packet = s->s3->rbuf.buf + s->s3->rbuf.offset;
		s->packet_length = 0;
		/* ... now we can act as if 'extend' was set */
		}

	/* For DTLS/UDP reads should not span multiple packets
	 * because the read operation returns the whole packet
	 * at once (as long as it fits into the buffer). */
	if (SSL_version(s) == DTLS1_VERSION)
		{
		if ( s->s3->rbuf.left > 0 && n > s->s3->rbuf.left)
			n = s->s3->rbuf.left;
		}

	/* if there is enough in the buffer from a previous read, take some */
	if (s->s3->rbuf.left >= (int)n)
		{
		s->packet_length+=n;
		s->s3->rbuf.left-=n;
		s->s3->rbuf.offset+=n;
		return(n);
		}

	/* else we need to read more data */
	if (!s->read_ahead)
		max=n;

	{
		/* avoid buffer overflow */
		int max_max = s->s3->rbuf.len - s->packet_length;
		if (max > max_max)
			max = max_max;
	}
	if (n > max) /* does not happen */
		{
		SSLerr(SSL_F_SSL3_READ_N,ERR_R_INTERNAL_ERROR);
		return -1;
		}

	off = s->packet_length;
	newb = s->s3->rbuf.left;
	/* Move any available bytes to front of buffer:
	 * 'off' bytes already pointed to by 'packet',
	 * 'newb' extra ones at the end */
	if (s->packet != s->s3->rbuf.buf)
		{
		/*  off > 0 */
		memmove(s->s3->rbuf.buf, s->packet, off+newb);
		s->packet = s->s3->rbuf.buf;
		}

	while (newb < n)
		{
		/* Now we have off+newb bytes at the front of s->s3->rbuf.buf and need
		 * to read in more until we have off+n (up to off+max if possible) */

		clear_sys_error();
		if (s->rbio != NULL)
			{
			s->rwstate=SSL_READING;
			i=BIO_read(s->rbio,	&(s->s3->rbuf.buf[off+newb]), max-newb);
			}
		else
			{
			SSLerr(SSL_F_SSL3_READ_N,SSL_R_READ_BIO_NOT_SET);
			i = -1;
			}

		if (i <= 0)
			{
			s->s3->rbuf.left = newb;
			return(i);
			}
		newb+=i;
		/* reads should *never* span multiple packets for DTLS because
		 * the underlying transport protocol is message oriented as opposed
		 * to byte oriented as in the TLS case. */
		if (SSL_version(s) == DTLS1_VERSION)
			{
			if (n > newb)
				n = newb; /* makes the while condition false */
			}
		}

	/* done reading, now the book-keeping */
	s->s3->rbuf.offset = off + n;
	s->s3->rbuf.left = newb - n;
	s->packet_length += n;
	s->rwstate=SSL_NOTHING;
	return(n);
	}

/* Call this to get a new input record.
 * It will return <= 0 if more data is needed, normally due to an error
 * or non-blocking IO.
 * When it finishes, one packet has been decoded and can be found in
 * ssl->s3->rrec.type    - is the type of record
 * ssl->s3->rrec.data, 	 - data
 * ssl->s3->rrec.length, - number of bytes
 */
/* used only by ssl3_read_bytes */
static int ssl3_get_record(SSL *s)
	{
	int ssl_major,ssl_minor,al;
	int enc_err,n,i,ret= -1;
	SSL3_RECORD *rr;
	SSL_SESSION *sess;
	unsigned char *p;
	unsigned char md[EVP_MAX_MD_SIZE];
	short version;
	unsigned int mac_size;
	int clear=0;
	size_t extra;
	int decryption_failed_or_bad_record_mac = 0;
	unsigned char *mac = NULL;

	rr= &(s->s3->rrec);
	sess=s->session;

	if (s->options & SSL_OP_MICROSOFT_BIG_SSLV3_BUFFER)
		extra=SSL3_RT_MAX_EXTRA;
	else
		extra=0;
	if (!(SSL_get_mode(s) & SSL_MODE_SMALL_BUFFERS) &&
		extra != s->s3->rbuf.len - SSL3_RT_MAX_PACKET_SIZE)
		{
		/* actually likely an application error: SLS_OP_MICROSOFT_BIG_SSLV3_BUFFER
		 * set after ssl3_setup_buffers() was done */
		SSLerr(SSL_F_SSL3_GET_RECORD, ERR_R_INTERNAL_ERROR);
		return -1;
		}

again:
	/* check if we have the header */
	if (	(s->rstate != SSL_ST_READ_BODY) ||
		(s->packet_length < SSL3_RT_HEADER_LENGTH))
		{
		n=ssl3_read_n(s, SSL3_RT_HEADER_LENGTH, s->s3->rbuf.len, 0);
		if (n <= 0) return(n); /* error or non-blocking */
		s->rstate=SSL_ST_READ_BODY;

		p=s->packet;

		/* Pull apart the header into the SSL3_RECORD */
		rr->type= *(p++);
		ssl_major= *(p++);
		ssl_minor= *(p++);
		version=(ssl_major<<8)|ssl_minor;
		n2s(p,rr->length);

		/* Lets check version */
		if (!s->first_packet)
			{
			if (version != s->version)
				{
				SSLerr(SSL_F_SSL3_GET_RECORD,SSL_R_WRONG_VERSION_NUMBER);
				/* If the major versions match then we'll send
				 * the error back using the peer's version. */
				if ((s->version & 0xFF00) == (version & 0xFF00))
					s->version = version;
				al=SSL_AD_PROTOCOL_VERSION;
				goto f_err;
				}
			}

		if ((version>>8) != SSL3_VERSION_MAJOR)
			{
			SSLerr(SSL_F_SSL3_GET_RECORD,SSL_R_WRONG_VERSION_NUMBER);
			goto err;
			}

		if (rr->length > SSL3_RT_MAX_ENCRYPTED_LENGTH+extra)
			{
			al=SSL_AD_RECORD_OVERFLOW;
			SSLerr(SSL_F_SSL3_GET_RECORD,SSL_R_PACKET_LENGTH_TOO_LONG);
			goto f_err;
			}

		/* If we receive a valid record larger than the current buffer size,
		 * allocate some memory for it.
		 */
		if (rr->length > s->s3->rbuf.len - SSL3_RT_HEADER_LENGTH)
			{
			if ((p=OPENSSL_realloc(s->s3->rbuf.buf, rr->length + SSL3_RT_HEADER_LENGTH))==NULL)
				{
				SSLerr(SSL_F_SSL3_GET_RECORD,ERR_R_MALLOC_FAILURE);
				goto err;
				}
			s->s3->rbuf.buf=p;
			s->s3->rbuf.len=rr->length + SSL3_RT_HEADER_LENGTH;
			s->packet= &(s->s3->rbuf.buf[0]);
			}

		/* now s->rstate == SSL_ST_READ_BODY */
		}

	/* s->rstate == SSL_ST_READ_BODY, get and decode the data */

	if (rr->length > s->packet_length-SSL3_RT_HEADER_LENGTH)
		{
		/* now s->packet_length == SSL3_RT_HEADER_LENGTH */
		i=rr->length;
		n=ssl3_read_n(s,i,i,1);
		if (n <= 0) return(n); /* error or non-blocking io */
		/* now n == rr->length,
		 * and s->packet_length == SSL3_RT_HEADER_LENGTH + rr->length */
		}

	s->rstate=SSL_ST_READ_HEADER; /* set state for later operations */

	/* At this point, s->packet_length == SSL3_RT_HEADER_LNGTH + rr->length,
	 * and we have that many bytes in s->packet
	 */
	rr->input= &(s->packet[SSL3_RT_HEADER_LENGTH]);

	/* ok, we can now read from 's->packet' data into 'rr'
	 * rr->input points at rr->length bytes, which
	 * need to be copied into rr->data by either
	 * the decryption or by the decompression
	 * When the data is 'copied' into the rr->data buffer,
	 * rr->input will be pointed at the new buffer */

	/* We now have - encrypted [ MAC [ compressed [ plain ] ] ]
	 * rr->length bytes of encrypted compressed stuff. */

	/* check is not needed I believe */
	if (rr->length > SSL3_RT_MAX_ENCRYPTED_LENGTH+extra)
		{
		al=SSL_AD_RECORD_OVERFLOW;
		SSLerr(SSL_F_SSL3_GET_RECORD,SSL_R_ENCRYPTED_LENGTH_TOO_LONG);
		goto f_err;
		}

	/* decrypt in place in 'rr->input' */
	rr->data=rr->input;

	enc_err = s->method->ssl3_enc->enc(s,0);
	if (enc_err <= 0)
		{
		if (enc_err == 0)
			/* SSLerr() and ssl3_send_alert() have been called */
			goto err;

		/* Otherwise enc_err == -1, which indicates bad padding
		 * (rec->length has not been changed in this case).
		 * To minimize information leaked via timing, we will perform
		 * the MAC computation anyway. */
		decryption_failed_or_bad_record_mac = 1;
		}

#ifdef TLS_DEBUG
printf("dec %d\n",rr->length);
{ unsigned int z; for (z=0; z<rr->length; z++) printf("%02X%c",rr->data[z],((z+1)%16)?' ':'\n'); }
printf("\n");
#endif

	/* r->length is now the compressed data plus mac */
	if (	(sess == NULL) ||
		(s->enc_read_ctx == NULL) ||
		(s->read_hash == NULL))
		clear=1;

	if (!clear)
		{
		mac_size=EVP_MD_size(s->read_hash);

		if (rr->length > SSL3_RT_MAX_COMPRESSED_LENGTH+extra+mac_size)
			{
#if 0 /* OK only for stream ciphers (then rr->length is visible from ciphertext anyway) */
			al=SSL_AD_RECORD_OVERFLOW;
			SSLerr(SSL_F_SSL3_GET_RECORD,SSL_R_PRE_MAC_LENGTH_TOO_LONG);
			goto f_err;
#else
			decryption_failed_or_bad_record_mac = 1;
#endif
			}
		/* check the MAC for rr->input (it's in mac_size bytes at the tail) */
		if (rr->length >= mac_size)
			{
			rr->length -= mac_size;
			mac = &rr->data[rr->length];
			}
		else
			{
			/* record (minus padding) is too short to contain a MAC */
#if 0 /* OK only for stream ciphers */
			al=SSL_AD_DECODE_ERROR;
			SSLerr(SSL_F_SSL3_GET_RECORD,SSL_R_LENGTH_TOO_SHORT);
			goto f_err;
#else
			decryption_failed_or_bad_record_mac = 1;
			rr->length = 0;
#endif
			}
		i=s->method->ssl3_enc->mac(s,md,0);
		if (mac == NULL || memcmp(md, mac, mac_size) != 0)
			{
			decryption_failed_or_bad_record_mac = 1;
			}
		}

	if (decryption_failed_or_bad_record_mac)
		{
		/* A separate 'decryption_failed' alert was introduced with TLS 1.0,
		 * SSL 3.0 only has 'bad_record_mac'.  But unless a decryption
		 * failure is directly visible from the ciphertext anyway,
		 * we should not reveal which kind of error occured -- this
		 * might become visible to an attacker (e.g. via a logfile) */
		al=SSL_AD_BAD_RECORD_MAC;
		SSLerr(SSL_F_SSL3_GET_RECORD,SSL_R_DECRYPTION_FAILED_OR_BAD_RECORD_MAC);
		goto f_err;
		}

	/* r->length is now just compressed */
	if (s->expand != NULL)
		{
		if (rr->length > SSL3_RT_MAX_COMPRESSED_LENGTH+extra)
			{
			al=SSL_AD_RECORD_OVERFLOW;
			SSLerr(SSL_F_SSL3_GET_RECORD,SSL_R_COMPRESSED_LENGTH_TOO_LONG);
			goto f_err;
			}
		if (!ssl3_do_uncompress(s))
			{
			al=SSL_AD_DECOMPRESSION_FAILURE;
			SSLerr(SSL_F_SSL3_GET_RECORD,SSL_R_BAD_DECOMPRESSION);
			goto f_err;
			}
		}

	if (rr->length > SSL3_RT_MAX_PLAIN_LENGTH+extra)
		{
		al=SSL_AD_RECORD_OVERFLOW;
		SSLerr(SSL_F_SSL3_GET_RECORD,SSL_R_DATA_LENGTH_TOO_LONG);
		goto f_err;
		}

	rr->off=0;
	/* So at this point the following is true
	 * ssl->s3->rrec.type 	is the type of record
	 * ssl->s3->rrec.length	== number of bytes in record
	 * ssl->s3->rrec.off	== offset to first valid byte
	 * ssl->s3->rrec.data	== where to take bytes from, increment
	 *			   after use :-).
	 */

	/* we have pulled in a full packet so zero things */
	s->packet_length=0;

	/* just read a 0 length packet */
	if (rr->length == 0) goto again;

	return(1);

f_err:
	ssl3_send_alert(s,SSL3_AL_FATAL,al);
err:
	return(ret);
	}

int ssl3_do_uncompress(SSL *ssl)
	{
#ifndef OPENSSL_NO_COMP
	int i;
	SSL3_RECORD *rr;

	rr= &(ssl->s3->rrec);
	i=COMP_expand_block(ssl->expand,rr->comp,
		SSL3_RT_MAX_PLAIN_LENGTH,rr->data,(int)rr->length);
	if (i < 0)
		return(0);
	else
		rr->length=i;
	rr->data=rr->comp;
#endif
	return(1);
	}

int ssl3_do_compress(SSL *ssl)
	{
#ifndef OPENSSL_NO_COMP
	int i;
	SSL3_RECORD *wr;

	wr= &(ssl->s3->wrec);
	i=COMP_compress_block(ssl->compress,wr->data,
		SSL3_RT_MAX_COMPRESSED_LENGTH,
		wr->input,(int)wr->length);
	if (i < 0)
		return(0);
	else
		wr->length=i;

	wr->input=wr->data;
#endif
	return(1);
	}

/* Call this to write data in records of type 'type'
 * It will return <= 0 if not all data has been sent or non-blocking IO.
 */
int ssl3_write_bytes(SSL *s, int type, const void *buf_, int len)
	{
	const unsigned char *buf=buf_;
	unsigned int tot,n,nw;
	int i;
    unsigned int max_plain_length;

	s->rwstate=SSL_NOTHING;
	tot=s->s3->wnum;
	s->s3->wnum=0;

	if (SSL_in_init(s) && !s->in_handshake)
		{
		i=s->handshake_func(s);
		if (i < 0) return(i);
		if (i == 0)
			{
			SSLerr(SSL_F_SSL3_WRITE_BYTES,SSL_R_SSL_HANDSHAKE_FAILURE);
			return -1;
			}
		}

	n=(len-tot);
	for (;;)
		{
		if (type == SSL3_RT_APPLICATION_DATA && (SSL_get_mode(s) & SSL_MODE_SMALL_BUFFERS))
			max_plain_length = SSL3_RT_DEFAULT_PLAIN_LENGTH;
		else
			max_plain_length = SSL3_RT_MAX_PLAIN_LENGTH;

		if (n > max_plain_length)
			nw = max_plain_length;
		else
			nw=n;

		i=do_ssl3_write(s, type, &(buf[tot]), nw, 0);
		if (i <= 0)
			{
			s->s3->wnum=tot;
			return i;
			}

		if ((i == (int)n) ||
			(type == SSL3_RT_APPLICATION_DATA &&
			 (s->mode & SSL_MODE_ENABLE_PARTIAL_WRITE)))
			{
			/* next chunk of data should get another prepended empty fragment
			 * in ciphersuites with known-IV weakness: */
			s->s3->empty_fragment_done = 0;

			return tot+i;
			}

		n-=i;
		tot+=i;
		}
	}

static int do_ssl3_write(SSL *s, int type, const unsigned char *buf,
			 unsigned int len, int create_empty_fragment)
	{
	unsigned char *p,*plen;
	int i,mac_size,clear=0;
	int prefix_len = 0;
	SSL3_RECORD *wr;
	SSL3_BUFFER *wb;
	SSL_SESSION *sess;

	/* first check if there is a SSL3_BUFFER still being written
	 * out.  This will happen with non blocking IO */
	if (s->s3->wbuf.left != 0)
		return(ssl3_write_pending(s,type,buf,len));

	/* If we have an alert to send, lets send it */
	if (s->s3->alert_dispatch)
		{
		i=s->method->ssl_dispatch_alert(s);
		if (i <= 0)
			return(i);
		/* if it went, fall through and send more stuff */
		}

	if (len == 0 && !create_empty_fragment)
		return 0;

	wr= &(s->s3->wrec);
	wb= &(s->s3->wbuf);
	sess=s->session;

	if (	(sess == NULL) ||
		(s->enc_write_ctx == NULL) ||
		(s->write_hash == NULL))
		clear=1;

	if (clear)
		mac_size=0;
	else
		mac_size=EVP_MD_size(s->write_hash);

	/* 'create_empty_fragment' is true only when this function calls itself */
	if (!clear && !create_empty_fragment && !s->s3->empty_fragment_done)
		{
		/* countermeasure against known-IV weakness in CBC ciphersuites
		 * (see http://www.openssl.org/~bodo/tls-cbc.txt) */

		if (s->s3->need_empty_fragments && type == SSL3_RT_APPLICATION_DATA)
			{
			/* recursive function call with 'create_empty_fragment' set;
			 * this prepares and buffers the data for an empty fragment
			 * (these 'prefix_len' bytes are sent out later
			 * together with the actual payload) */
			prefix_len = do_ssl3_write(s, type, buf, 0, 1);
			if (prefix_len <= 0)
				goto err;

			if (s->s3->wbuf.len < (size_t)prefix_len +
				((SSL_get_mode(s) & SSL_MODE_SMALL_BUFFERS) ? SSL3_RT_DEFAULT_PACKET_SIZE :
					SSL3_RT_MAX_PACKET_SIZE))
				{
				/* insufficient space */
				SSLerr(SSL_F_DO_SSL3_WRITE, ERR_R_INTERNAL_ERROR);
				goto err;
				}
			}

		s->s3->empty_fragment_done = 1;
		}

	/* resize if necessary to hold the data. */
	if (len + SSL3_RT_DEFAULT_WRITE_OVERHEAD > wb->len)
		{
		if ((p=OPENSSL_realloc(wb->buf, len + SSL3_RT_DEFAULT_WRITE_OVERHEAD))==NULL)
			{
			SSLerr(SSL_F_DO_SSL3_WRITE,ERR_R_MALLOC_FAILURE);
			goto err;
			}
		wb->buf = p;
		wb->len = len + SSL3_RT_DEFAULT_WRITE_OVERHEAD;
		}

	p = wb->buf + prefix_len;

	/* write the header */

	*(p++)=type&0xff;
	wr->type=type;

	*(p++)=(s->version>>8);
	*(p++)=s->version&0xff;

	/* field where we are to write out packet length */
	plen=p;
	p+=2;

	/* lets setup the record stuff. */
	wr->data=p;
	wr->length=(int)len;
	wr->input=(unsigned char *)buf;

	/* we now 'read' from wr->input, wr->length bytes into
	 * wr->data */

	/* first we compress */
	if (s->compress != NULL)
		{
		if (!ssl3_do_compress(s))
			{
			SSLerr(SSL_F_DO_SSL3_WRITE,SSL_R_COMPRESSION_FAILURE);
			goto err;
			}
		}
	else
		{
		memcpy(wr->data,wr->input,wr->length);
		wr->input=wr->data;
		}

	/* we should still have the output to wr->data and the input
	 * from wr->input.  Length should be wr->length.
	 * wr->data still points in the wb->buf */

	if (mac_size != 0)
		{
		s->method->ssl3_enc->mac(s,&(p[wr->length]),1);
		wr->length+=mac_size;
		wr->input=p;
		wr->data=p;
		}

	/* ssl3_enc can only have an error on read */
	s->method->ssl3_enc->enc(s,1);

	/* record length after mac and block padding */
	s2n(wr->length,plen);

	/* we should now have
	 * wr->data pointing to the encrypted data, which is
	 * wr->length long */
	wr->type=type; /* not needed but helps for debugging */
	wr->length+=SSL3_RT_HEADER_LENGTH;

	if (create_empty_fragment)
		{
		/* we are in a recursive call;
		 * just return the length, don't write out anything here
		 */
		return wr->length;
		}

	/* now let's set up wb */
	wb->left = prefix_len + wr->length;
	wb->offset = 0;

	/* memorize arguments so that ssl3_write_pending can detect bad write retries later */
	s->s3->wpend_tot=len;
	s->s3->wpend_buf=buf;
	s->s3->wpend_type=type;
	s->s3->wpend_ret=len;

	/* we now just need to write the buffer */
	return ssl3_write_pending(s,type,buf,len);
err:
	return -1;
	}

/* if s->s3->wbuf.left != 0, we need to call this */
int ssl3_write_pending(SSL *s, int type, const unsigned char *buf,
	unsigned int len)
	{
	int i;

/* XXXX */
	if ((s->s3->wpend_tot > (int)len)
		|| ((s->s3->wpend_buf != buf) &&
			!(s->mode & SSL_MODE_ACCEPT_MOVING_WRITE_BUFFER))
		|| (s->s3->wpend_type != type))
		{
		SSLerr(SSL_F_SSL3_WRITE_PENDING,SSL_R_BAD_WRITE_RETRY);
		return(-1);
		}

	for (;;)
		{
		clear_sys_error();
		if (s->wbio != NULL)
			{
			s->rwstate=SSL_WRITING;
			i=BIO_write(s->wbio,
				(char *)&(s->s3->wbuf.buf[s->s3->wbuf.offset]),
				(unsigned int)s->s3->wbuf.left);
			}
		else
			{
			SSLerr(SSL_F_SSL3_WRITE_PENDING,SSL_R_BIO_NOT_SET);
			i= -1;
			}
		if (i == s->s3->wbuf.left)
			{
			s->s3->wbuf.left=0;
			s->rwstate=SSL_NOTHING;
			return(s->s3->wpend_ret);
			}
		else if (i <= 0) {
			if (s->version == DTLS1_VERSION ||
			    s->version == DTLS1_BAD_VER) {
				/* For DTLS, just drop it. That's kind of the whole
				   point in using a datagram service */
				s->s3->wbuf.left = 0;
			}
			return(i);
		}
		s->s3->wbuf.offset+=i;
		s->s3->wbuf.left-=i;
		}
	}

/* Return up to 'len' payload bytes received in 'type' records.
 * 'type' is one of the following:
 *
 *   -  SSL3_RT_HANDSHAKE (when ssl3_get_message calls us)
 *   -  SSL3_RT_APPLICATION_DATA (when ssl3_read calls us)
 *   -  0 (during a shutdown, no data has to be returned)
 *
 * If we don't have stored data to work from, read a SSL/TLS record first
 * (possibly multiple records if we still don't have anything to return).
 *
 * This function must handle any surprises the peer may have for us, such as
 * Alert records (e.g. close_notify), ChangeCipherSpec records (not really
 * a surprise, but handled as if it were), or renegotiation requests.
 * Also if record payloads contain fragments too small to process, we store
 * them until there is enough for the respective protocol (the record protocol
 * may use arbitrary fragmentation and even interleaving):
 *     Change cipher spec protocol
 *             just 1 byte needed, no need for keeping anything stored
 *     Alert protocol
 *             2 bytes needed (AlertLevel, AlertDescription)
 *     Handshake protocol
 *             4 bytes needed (HandshakeType, uint24 length) -- we just have
 *             to detect unexpected Client Hello and Hello Request messages
 *             here, anything else is handled by higher layers
 *     Application data protocol
 *             none of our business
 */
int ssl3_read_bytes(SSL *s, int type, unsigned char *buf, int len, int peek)
	{
	int al,i,j,ret;
	unsigned int n;
	SSL3_RECORD *rr;
	void (*cb)(const SSL *ssl,int type2,int val)=NULL;

	if (s->s3->rbuf.buf == NULL) /* Not initialized yet */
		if (!ssl3_setup_buffers(s))
			return(-1);

	if ((type && (type != SSL3_RT_APPLICATION_DATA) && (type != SSL3_RT_HANDSHAKE) && type) ||
	    (peek && (type != SSL3_RT_APPLICATION_DATA)))
		{
		SSLerr(SSL_F_SSL3_READ_BYTES, ERR_R_INTERNAL_ERROR);
		return -1;
		}

	if ((type == SSL3_RT_HANDSHAKE) && (s->s3->handshake_fragment_len > 0))
		/* (partially) satisfy request from storage */
		{
		unsigned char *src = s->s3->handshake_fragment;
		unsigned char *dst = buf;
		unsigned int k;

		/* peek == 0 */
		n = 0;
		while ((len > 0) && (s->s3->handshake_fragment_len > 0))
			{
			*dst++ = *src++;
			len--; s->s3->handshake_fragment_len--;
			n++;
			}
		/* move any remaining fragment bytes: */
		for (k = 0; k < s->s3->handshake_fragment_len; k++)
			s->s3->handshake_fragment[k] = *src++;
		return n;
	}

	/* Now s->s3->handshake_fragment_len == 0 if type == SSL3_RT_HANDSHAKE. */

	if (!s->in_handshake && SSL_in_init(s))
		{
		/* type == SSL3_RT_APPLICATION_DATA */
		i=s->handshake_func(s);
		if (i < 0) return(i);
		if (i == 0)
			{
			SSLerr(SSL_F_SSL3_READ_BYTES,SSL_R_SSL_HANDSHAKE_FAILURE);
			return(-1);
			}
		}
start:
	s->rwstate=SSL_NOTHING;

	/* s->s3->rrec.type	    - is the type of record
	 * s->s3->rrec.data,    - data
	 * s->s3->rrec.off,     - offset into 'data' for next read
	 * s->s3->rrec.length,  - number of bytes. */
	rr = &(s->s3->rrec);

	/* get new packet if necessary */
	if ((rr->length == 0) || (s->rstate == SSL_ST_READ_BODY))
		{
		ret=ssl3_get_record(s);
		if (ret <= 0) return(ret);
		}

	/* we now have a packet which can be read and processed */

	if (s->s3->change_cipher_spec /* set when we receive ChangeCipherSpec,
	                               * reset by ssl3_get_finished */
		&& (rr->type != SSL3_RT_HANDSHAKE))
		{
		al=SSL_AD_UNEXPECTED_MESSAGE;
		SSLerr(SSL_F_SSL3_READ_BYTES,SSL_R_DATA_BETWEEN_CCS_AND_FINISHED);
		goto f_err;
		}

	/* If the other end has shut down, throw anything we read away
	 * (even in 'peek' mode) */
	if (s->shutdown & SSL_RECEIVED_SHUTDOWN)
		{
		rr->length=0;
		s->rwstate=SSL_NOTHING;
		return(0);
		}

	if (type == rr->type) /* SSL3_RT_APPLICATION_DATA or SSL3_RT_HANDSHAKE */
		{
		/* make sure that we are not getting application data when we
		 * are doing a handshake for the first time */
		if (SSL_in_init(s) && (type == SSL3_RT_APPLICATION_DATA) &&
			(s->enc_read_ctx == NULL))
			{
			al=SSL_AD_UNEXPECTED_MESSAGE;
			SSLerr(SSL_F_SSL3_READ_BYTES,SSL_R_APP_DATA_IN_HANDSHAKE);
			goto f_err;
			}

		if (len <= 0) return(len);

		if ((unsigned int)len > rr->length)
			n = rr->length;
		else
			n = (unsigned int)len;

		memcpy(buf,&(rr->data[rr->off]),n);
		if (!peek)
			{
			rr->length-=n;
			rr->off+=n;
			if (rr->length == 0)
				{
				s->rstate=SSL_ST_READ_HEADER;
				rr->off=0;
				}
			}
		return(n);
		}

	/* If we get here, then type != rr->type; if we have a handshake
	 * message, then it was unexpected (Hello Request or Client Hello). */

	/* In case of record types for which we have 'fragment' storage,
	 * fill that so that we can process the data at a fixed place.
	 */
		{
		unsigned int dest_maxlen = 0;
		unsigned char *dest = NULL;
		unsigned int *dest_len = NULL;

		if (rr->type == SSL3_RT_HANDSHAKE)
			{
			dest_maxlen = sizeof s->s3->handshake_fragment;
			dest = s->s3->handshake_fragment;
			dest_len = &s->s3->handshake_fragment_len;
			}
		else if (rr->type == SSL3_RT_ALERT)
			{
			dest_maxlen = sizeof s->s3->alert_fragment;
			dest = s->s3->alert_fragment;
			dest_len = &s->s3->alert_fragment_len;
			}

		if (dest_maxlen > 0)
			{
			n = dest_maxlen - *dest_len; /* available space in 'dest' */
			if (rr->length < n)
				n = rr->length; /* available bytes */

			/* now move 'n' bytes: */
			while (n-- > 0)
				{
				dest[(*dest_len)++] = rr->data[rr->off++];
				rr->length--;
				}

			if (*dest_len < dest_maxlen)
				goto start; /* fragment was too small */
			}
		}

	/* s->s3->handshake_fragment_len == 4  iff  rr->type == SSL3_RT_HANDSHAKE;
	 * s->s3->alert_fragment_len == 2      iff  rr->type == SSL3_RT_ALERT.
	 * (Possibly rr is 'empty' now, i.e. rr->length may be 0.) */

	/* If we are a client, check for an incoming 'Hello Request': */
	if ((!s->server) &&
		(s->s3->handshake_fragment_len >= 4) &&
		(s->s3->handshake_fragment[0] == SSL3_MT_HELLO_REQUEST) &&
		(s->session != NULL) && (s->session->cipher != NULL))
		{
		s->s3->handshake_fragment_len = 0;

		if ((s->s3->handshake_fragment[1] != 0) ||
			(s->s3->handshake_fragment[2] != 0) ||
			(s->s3->handshake_fragment[3] != 0))
			{
			al=SSL_AD_DECODE_ERROR;
			SSLerr(SSL_F_SSL3_READ_BYTES,SSL_R_BAD_HELLO_REQUEST);
			goto f_err;
			}

		if (s->msg_callback)
			s->msg_callback(0, s->version, SSL3_RT_HANDSHAKE, s->s3->handshake_fragment, 4, s, s->msg_callback_arg);

		if (SSL_is_init_finished(s) &&
			!(s->s3->flags & SSL3_FLAGS_NO_RENEGOTIATE_CIPHERS) &&
			!s->s3->renegotiate)
			{
			ssl3_renegotiate(s);
			if (ssl3_renegotiate_check(s))
				{
				i=s->handshake_func(s);
				if (i < 0) return(i);
				if (i == 0)
					{
					SSLerr(SSL_F_SSL3_READ_BYTES,SSL_R_SSL_HANDSHAKE_FAILURE);
					return(-1);
					}

				if (!(s->mode & SSL_MODE_AUTO_RETRY))
					{
					if (s->s3->rbuf.left == 0) /* no read-ahead left? */
						{
						BIO *bio;
						/* In the case where we try to read application data,
						 * but we trigger an SSL handshake, we return -1 with
						 * the retry option set.  Otherwise renegotiation may
						 * cause nasty problems in the blocking world */
						s->rwstate=SSL_READING;
						bio=SSL_get_rbio(s);
						BIO_clear_retry_flags(bio);
						BIO_set_retry_read(bio);
						return(-1);
						}
					}
				}
			}
		/* we either finished a handshake or ignored the request,
		 * now try again to obtain the (application) data we were asked for */
		goto start;
		}
	/* If we are a server and get a client hello when renegotiation isn't
	 * allowed send back a no renegotiation alert and carry on.
	 * WARNING: experimental code, needs reviewing (steve)
	 */
	if (s->server &&
		SSL_is_init_finished(s) &&
    		!s->s3->send_connection_binding &&
		(s->version > SSL3_VERSION) &&
		(s->s3->handshake_fragment_len >= 4) &&
		(s->s3->handshake_fragment[0] == SSL3_MT_CLIENT_HELLO) &&
		(s->session != NULL) && (s->session->cipher != NULL) &&
		!(s->ctx->options & SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION))

		{
		/*s->s3->handshake_fragment_len = 0;*/
		rr->length = 0;
		ssl3_send_alert(s,SSL3_AL_WARNING, SSL_AD_NO_RENEGOTIATION);
		goto start;
		}
	if (s->s3->alert_fragment_len >= 2)
		{
		int alert_level = s->s3->alert_fragment[0];
		int alert_descr = s->s3->alert_fragment[1];

		s->s3->alert_fragment_len = 0;

		if (s->msg_callback)
			s->msg_callback(0, s->version, SSL3_RT_ALERT, s->s3->alert_fragment, 2, s, s->msg_callback_arg);

		if (s->info_callback != NULL)
			cb=s->info_callback;
		else if (s->ctx->info_callback != NULL)
			cb=s->ctx->info_callback;

		if (cb != NULL)
			{
			j = (alert_level << 8) | alert_descr;
			cb(s, SSL_CB_READ_ALERT, j);
			}

		if (alert_level == 1) /* warning */
			{
			s->s3->warn_alert = alert_descr;
			if (alert_descr == SSL_AD_CLOSE_NOTIFY)
				{
				s->shutdown |= SSL_RECEIVED_SHUTDOWN;
				return(0);
				}
			/* This is a warning but we receive it if we requested
			 * renegotiation and the peer denied it. Terminate with
			 * a fatal alert because if application tried to
			 * renegotiatie it presumably had a good reason and
			 * expects it to succeed.
			 *
			 * In future we might have a renegotiation where we
			 * don't care if the peer refused it where we carry on.
			 */
			else if (alert_descr == SSL_AD_NO_RENEGOTIATION)
				{
				al = SSL_AD_HANDSHAKE_FAILURE;
				SSLerr(SSL_F_SSL3_READ_BYTES,SSL_R_NO_RENEGOTIATION);
				goto f_err;
				}
			}
		else if (alert_level == 2) /* fatal */
			{
			char tmp[16];

			s->rwstate=SSL_NOTHING;
			s->s3->fatal_alert = alert_descr;
			SSLerr(SSL_F_SSL3_READ_BYTES, SSL_AD_REASON_OFFSET + alert_descr);
			BIO_snprintf(tmp,sizeof tmp,"%d",alert_descr);
			ERR_add_error_data(2,"SSL alert number ",tmp);
			s->shutdown|=SSL_RECEIVED_SHUTDOWN;
			SSL_CTX_remove_session(s->ctx,s->session);
			return(0);
			}
		else
			{
			al=SSL_AD_ILLEGAL_PARAMETER;
			SSLerr(SSL_F_SSL3_READ_BYTES,SSL_R_UNKNOWN_ALERT_TYPE);
			goto f_err;
			}

		goto start;
		}

	if (s->shutdown & SSL_SENT_SHUTDOWN) /* but we have not received a shutdown */
		{
		s->rwstate=SSL_NOTHING;
		rr->length=0;
		return(0);
		}

	if (rr->type == SSL3_RT_CHANGE_CIPHER_SPEC)
		{
		/* 'Change Cipher Spec' is just a single byte, so we know
		 * exactly what the record payload has to look like */
		if (	(rr->length != 1) || (rr->off != 0) ||
			(rr->data[0] != SSL3_MT_CCS))
			{
			al=SSL_AD_ILLEGAL_PARAMETER;
			SSLerr(SSL_F_SSL3_READ_BYTES,SSL_R_BAD_CHANGE_CIPHER_SPEC);
			goto f_err;
			}

		/* Check we have a cipher to change to */
		if (s->s3->tmp.new_cipher == NULL)
			{
			al=SSL_AD_UNEXPECTED_MESSAGE;
			SSLerr(SSL_F_SSL3_READ_BYTES,SSL_R_CCS_RECEIVED_EARLY);
			goto f_err;
			}

		rr->length=0;

		if (s->msg_callback)
			s->msg_callback(0, s->version, SSL3_RT_CHANGE_CIPHER_SPEC, rr->data, 1, s, s->msg_callback_arg);

		s->s3->change_cipher_spec=1;
		if (!ssl3_do_change_cipher_spec(s))
			goto err;
		else
			goto start;
		}

	/* Unexpected handshake message (Client Hello, or protocol violation) */
	if ((s->s3->handshake_fragment_len >= 4) &&	!s->in_handshake)
		{
		if (((s->state&SSL_ST_MASK) == SSL_ST_OK) &&
			!(s->s3->flags & SSL3_FLAGS_NO_RENEGOTIATE_CIPHERS))
			{
#if 0 /* worked only because C operator preferences are not as expected (and
       * because this is not really needed for clients except for detecting
       * protocol violations): */
			s->state=SSL_ST_BEFORE|(s->server)
				?SSL_ST_ACCEPT
				:SSL_ST_CONNECT;
#else
			s->state = s->server ? SSL_ST_ACCEPT : SSL_ST_CONNECT;
#endif
			s->new_session=1;
			}
		i=s->handshake_func(s);
		if (i < 0) return(i);
		if (i == 0)
			{
			SSLerr(SSL_F_SSL3_READ_BYTES,SSL_R_SSL_HANDSHAKE_FAILURE);
			return(-1);
			}

		if (!(s->mode & SSL_MODE_AUTO_RETRY))
			{
			if (s->s3->rbuf.left == 0) /* no read-ahead left? */
				{
				BIO *bio;
				/* In the case where we try to read application data,
				 * but we trigger an SSL handshake, we return -1 with
				 * the retry option set.  Otherwise renegotiation may
				 * cause nasty problems in the blocking world */
				s->rwstate=SSL_READING;
				bio=SSL_get_rbio(s);
				BIO_clear_retry_flags(bio);
				BIO_set_retry_read(bio);
				return(-1);
				}
			}
		goto start;
		}

	switch (rr->type)
		{
	default:
#ifndef OPENSSL_NO_TLS
		/* TLS just ignores unknown message types */
		if (s->version == TLS1_VERSION)
			{
			rr->length = 0;
			goto start;
			}
#endif
		al=SSL_AD_UNEXPECTED_MESSAGE;
		SSLerr(SSL_F_SSL3_READ_BYTES,SSL_R_UNEXPECTED_RECORD);
		goto f_err;
	case SSL3_RT_CHANGE_CIPHER_SPEC:
	case SSL3_RT_ALERT:
	case SSL3_RT_HANDSHAKE:
		/* we already handled all of these, with the possible exception
		 * of SSL3_RT_HANDSHAKE when s->in_handshake is set, but that
		 * should not happen when type != rr->type */
		al=SSL_AD_UNEXPECTED_MESSAGE;
		SSLerr(SSL_F_SSL3_READ_BYTES,ERR_R_INTERNAL_ERROR);
		goto f_err;
	case SSL3_RT_APPLICATION_DATA:
		/* At this point, we were expecting handshake data,
		 * but have application data.  If the library was
		 * running inside ssl3_read() (i.e. in_read_app_data
		 * is set) and it makes sense to read application data
		 * at this point (session renegotiation not yet started),
		 * we will indulge it.
		 */
		if (s->s3->in_read_app_data &&
			(s->s3->total_renegotiations != 0) &&
			((
				(s->state & SSL_ST_CONNECT) &&
				(s->state >= SSL3_ST_CW_CLNT_HELLO_A) &&
				(s->state <= SSL3_ST_CR_SRVR_HELLO_A)
				) || (
					(s->state & SSL_ST_ACCEPT) &&
					(s->state <= SSL3_ST_SW_HELLO_REQ_A) &&
					(s->state >= SSL3_ST_SR_CLNT_HELLO_A)
					)
				))
			{
			s->s3->in_read_app_data=2;
			return(-1);
			}
		else
			{
			al=SSL_AD_UNEXPECTED_MESSAGE;
			SSLerr(SSL_F_SSL3_READ_BYTES,SSL_R_UNEXPECTED_RECORD);
			goto f_err;
			}
		}
	/* not reached */

f_err:
	ssl3_send_alert(s,SSL3_AL_FATAL,al);
err:
	return(-1);
	}

int ssl3_do_change_cipher_spec(SSL *s)
	{
	int i;
	const char *sender;
	int slen;

	if (s->state & SSL_ST_ACCEPT)
		i=SSL3_CHANGE_CIPHER_SERVER_READ;
	else
		i=SSL3_CHANGE_CIPHER_CLIENT_READ;

	if (s->s3->tmp.key_block == NULL)
		{
		if (s->session == NULL)
			{
			/* might happen if dtls1_read_bytes() calls this */
			SSLerr(SSL_F_SSL3_DO_CHANGE_CIPHER_SPEC,SSL_R_CCS_RECEIVED_EARLY);
			return (0);
			}

		s->session->cipher=s->s3->tmp.new_cipher;
		if (!s->method->ssl3_enc->setup_key_block(s)) return(0);
		}

	if (!s->method->ssl3_enc->change_cipher_state(s,i))
		return(0);

	/* we have to record the message digest at
	 * this point so we can get it before we read
	 * the finished message */
	if (s->state & SSL_ST_CONNECT)
		{
		sender=s->method->ssl3_enc->server_finished_label;
		slen=s->method->ssl3_enc->server_finished_label_len;
		}
	else
		{
		sender=s->method->ssl3_enc->client_finished_label;
		slen=s->method->ssl3_enc->client_finished_label_len;
		}

	s->s3->tmp.peer_finish_md_len = s->method->ssl3_enc->final_finish_mac(s,
		&(s->s3->finish_dgst1),
		&(s->s3->finish_dgst2),
		sender,slen,s->s3->tmp.peer_finish_md);

	return(1);
	}

int ssl3_send_alert(SSL *s, int level, int desc)
	{
	/* Map tls/ssl alert value to correct one */
	desc=s->method->ssl3_enc->alert_value(desc);
	if (s->version == SSL3_VERSION && desc == SSL_AD_PROTOCOL_VERSION)
		desc = SSL_AD_HANDSHAKE_FAILURE; /* SSL 3.0 does not have protocol_version alerts */
	if (desc < 0) return -1;
	/* If a fatal one, remove from cache */
	if ((level == 2) && (s->session != NULL))
		SSL_CTX_remove_session(s->ctx,s->session);

	s->s3->alert_dispatch=1;
	s->s3->send_alert[0]=level;
	s->s3->send_alert[1]=desc;
	if (s->s3->wbuf.left == 0) /* data still being written out? */
		return s->method->ssl_dispatch_alert(s);
	/* else data is still being written out, we will get written
	 * some time in the future */
	return -1;
	}

int ssl3_dispatch_alert(SSL *s)
	{
	int i,j;
	void (*cb)(const SSL *ssl,int type,int val)=NULL;

	s->s3->alert_dispatch=0;
	i = do_ssl3_write(s, SSL3_RT_ALERT, &s->s3->send_alert[0], 2, 0);
	if (i <= 0)
		{
		s->s3->alert_dispatch=1;
		}
	else
		{
		/* Alert sent to BIO.  If it is important, flush it now.
		 * If the message does not get sent due to non-blocking IO,
		 * we will not worry too much. */
		if (s->s3->send_alert[0] == SSL3_AL_FATAL)
			(void)BIO_flush(s->wbio);

		if (s->msg_callback)
			s->msg_callback(1, s->version, SSL3_RT_ALERT, s->s3->send_alert, 2, s, s->msg_callback_arg);

		if (s->info_callback != NULL)
			cb=s->info_callback;
		else if (s->ctx->info_callback != NULL)
			cb=s->ctx->info_callback;

		if (cb != NULL)
			{
			j=(s->s3->send_alert[0]<<8)|s->s3->send_alert[1];
			cb(s,SSL_CB_WRITE_ALERT,j);
			}
		}
	return(i);
	}

redpajama_set_name: RedPajamaGithub


I love this site. As a full-time player on the ATP Tour I constantly need to check my schedule, goals, and notes on opponents. MyTrainingDiary lets me do this so easily.
MyTrainingDiary is a tremendous resource for players of all ages and abilities who are looking to organize their game both on and off the court.
MyTrainingDiary is an exciting and innovative website for forward thinking coaches and competitive players.
MyTrainingDiary is an exciting new concept that I believe is a valuable tool for players' on-going development in the game.
When I played I used a black book to keep my tennis life in order, training schedule, results, what my coach said, my goals, areas I was working on, etc. MyTrainingDiary is easier and much more fun!
MyTrainingDiary encourages responsibility, strategic thinking and self-reflection - three crucial skills needed to succeed at tennis. I highly recommend this website to all aspiring players.
This is by far the best tool I have seen that helps players, coaches and parents enjoy the tennis journey by focusing on positive and specific goals.
We find MyTrainingDiary to be a great tool to use with our players. It offers us a unique opportunity to oversee their progress as well as help us to offer an even higher level of service.
Players – subscribe with or without a coach and enjoy access anywhere anytime!


Abstract: We describe a first step for identifying foreign markets that may be candidates for export expansion. The method compares export data to the amount of exports predicted by the gravity equation. We estimate four sets of gravity equation coefficients and use both in-sample and outof- sample predictions. To illustrate our method, we use data from Washington agricultural industrial groups. We find many markets, particularly those in Europe, that are currently underserved by Washington agricultural exports, often by large amounts. We also identify overserved markets that can be further studied to provide lessons on what works for increasing exports.


text:
Shanghai Coop. Film Festival to start in Mumbai Jan 27
By NewsonRadar Bureau Last updated Jan 26, 2023 23 0
New Delhi: The Ministry of Information and Broadcasting would organise the Shanghai Cooperation Organization Film Festival (SCO) from January 27th-31st, in Mumbai, through the National Film Development Corporation.
The SCO Film Festival is being organized to mark India's Presidency at SCO.
Briefing the media-persons on the festival, Additional Secretary, Neerja Sekhar said that the Festival aims to build cinematic partnerships and act as a bridge between the cultures of various countries in the SCO.
"It will also create synergies in the film fraternity of SCO Members by way of collective cinematic experience. She also added that the films being showcased in the SCO Film Festival, all brought by the SCO states, will allow spectators to experience different cultures and the films will be a window for people from the SCO countries to know each other better," Ms Sekhar said.
Ms Sekhar informed that the festival will showcase films of the SCO countries in the Competition and Non-Competition screenings. In addition to the film screenings, the festival will have master-classes, in-conversations sessions, country and state pavilions, photo and poster exhibitions, handicrafts stalls, and many more other events.
The festival will open with a world premiere of an Indian film as the SCO Film Festival is being organized during the Presidency of India at the SCO. The Opening Ceremony will be held at Jamshed Bhabha Theatre, NCPA, Mumbai on January 27.
The Competition section is for the SCO Member States only and comprises of various prestigious awards like Best Feature Film, Best Actor (Male), Best Actor (Female), Best Director (Feature Film), Special Jury Award.
The Non-competition section is for all SCO countries, viz Member States and also Observer States and Dialogue Partners States in the following categories-
Total 57 Films will be showcased at the SCO Film Festival from SCO countries. In Competition Section, 14 feature films are competing and will be screened and the Non-Competition section will showcase 43 Films. A total of 14 films have been nominated for the competition section.
The Marathi film 'Godavari' directed by Nikhil Mahajan and Gujarati Film 'The Last Film Show' directed by Pan Nalin are nominated from member state of India.
The Russian films 'Mom, I'm Alive!' directed by A Zairov, M Mamyrbekov and Paralympian directed by Bairakimov Aldiyar are nominated from member state of Kazakhstan.
The Kyrgyz films Akyrky Koch (The Road to Eden) directed by Bakyt Mukul, Dastan Zhapar Uulu and Uy satylat (Home for Sale) directed by Taalaibek Kulmendeev are nominated from member state of Kyrgyzstan.
The Italian and Chinese films 'B for Busy' by Yihui Shao and Chinese films 'Home Coming' directed by Xiaozhi Rao are nominated from member state of China.
The Russian films 'Don't Bury Me Without Ivan' directed by Liubov Borisova Sakha and Podelniki (The Riot) directed by Evgeny Grigorev are nominated by the member state of Russia.
The Uzbek films Ael kismati (The fate of a woman) directed by D Masaidov and Meros (Legacy) directed by Hilol Nasimov are nominated from member state of Uzbekistan. Tajik films Dov (Fortune) directed by Muhyiddin Muzaffar, and Okhirin Saydi Sayod (Hunter's Final Prey) directed by Mahmadrabi Ismoilov are nominated from member state of Tajikstan
Indian Films at SCO Film Festival.
Most acclaimed Marathi Film 'Godavari' directed by Nikhil Mahajan and India's official entry to the Oscars in the Best Foreign Language category, 'Chhello Show', a Gujarati film also known as 'Last Film Show' will be screened in competion section.
Along with it, Shoojit Sircar's 'Sardar Udham', SS Rajamouli's period film 'RRR' in SCO country focus. Sanjay Leela Bhansali's 'Gangubai Kathiawadi' in Director Focus, Mridul Toolsidas's 'Toolsidas Junior' in Children Focus and short film Jugalbandi by Chetan Bhakuni will be showcased.
Moreover Five Restored Classics will also be showcased in the festival viz. Shatranj ke khiladi; (1977, Hindi), Subarnrekha (1965, Bengali), Chandralekha (1948, Tamil), Iru Kodgul (1969, Tamil) & Chidambaram (1985, Malayalam).
The official language of the SCO ie, Russian and Chinese will also be the official language of the Film Festival. English will also be included as the functional language of the festival as it is being hosted in India. The films to be screened will be required to be dubbed or subtitled in English for the benefit of the jury and local audience.
'Masterclasses' and 'In Conversation' sessions have been curated with eminent filmmakers and actors of the SCO countries attending the festival along with Indian film personalities.
The jury for the SCO Film Festival 2023 comprises of the following— Rahul Rawail (India), Ning Ying (China), Dimash Kudaibergen (Kazakhstan), Gulbara Tolomushova (Kyrgyzstan), Ivan Kudryavtsev (Russia), Mehmedsaid Shohiyon (Tajikistan), and Matyakub Sadullayevich Matchanov (Uzbekistan). (UNI)
G-20 PresidencySCO
PM to Prez Putin: Dialogue only way forward for Ukraine conflict
G20 should promote Gandhian approach in conflict resolution: Moily
Expand India-SCO trade: EAM Jaishankar in CHG Meet
Varanasi endorsed as first ever SCO tourist and cultural capital
SCO Summit is set to begin in Samarkand today
Modi, Jinping, Putin to attend SCO Summit


text:
«Земля до начала времён» () — американская серия коротких мультфильмов, основанная на одноимённых полнометражных мультфильмах кинокомпании Universal Pictures. Была разработана для показа на Cartoon Network. Премьера состоялась 5 марта 2007 года в США.

По времени действия сюжет происходит между тринадцатым и четырнадцатым полнометражным фильмом. В отдельных сериях возвращаются персонажи, ранее встречавшиеся в полнометражных мультфильмах.

Персонажи

Главные персонажи
 Литтлфут (в русском дубляже Крошки-Ножки) () — детёныш апатозавра (в мультфильме часто употребляется «длинношей»). Один из главных героев мультсериала.
 Сэра () — детёныш трицератопса (в мультфильме часто употребляется «Трёхрог»).
 Даки () — детёныш зауролофа. Очень добра и оптимистична. Считает себя очень маленькой и иногда беспокоится по этому поводу.
 Питри () — детёныш птеранодона (в мультфильме часто употребляется «Летун»). Боится всего на свете.
 Спайк () — детёныш стегозавра. Очень прожорлив, постоянно ест.
 Зубастик () — детёныш тираннозавра. В отличие от остальных сородичей, которых называют Острозубы, он безобидный и дружелюбный. Пришёл в Великую Долину, чтобы увидеть своих друзей и узнать, как спасти Загадочную Даль от Красного когтя.
 Руби () — детёныш овираптора. Пришла в Великую Долину вместе с Зубастиком, чтобы спастись от Красного когтя.

Отрицательные
 Красный коготь () — Тираннозавр. Главный антагонист сериала. Один из самых страшных в Загадочной Дали. Своё прозвище получил из-за длинного шрама, тянущегося от глаза до указательного когтя.
 Быстрые кусаки (Гремун и Скрипун) () — два дейнониха. Являются «помощниками» Красного когтя.

Песни в мультсериале
Многие серии содержат 2 песни продолжительностью примерно в 1 минуту или же 1, той же продолжительности.  В сериях часто используется музыка одной песни, но с разным текстом.

В некоторых сериях звучит музыка из песен, которые звучат в полнометражных мультфильмах. Сама музыка при этом звучит в сокращенном виде и в ней изменен текст. Например, музыка из песни «Adventuring» из Земля до начала времён-10 встречается в некоторых сериях. Также встречается музыка песен из Земля до начала времён-5, Земля до начала времён-6.

Список серий

Примечания

Ссылки
 Официальный сайт мультфильма

Мультсериалы США, запущенные в 2007 году
Мультсериалы США, завершённые в 2008 году
Мультсериал
Мультсериалы о динозаврах
Мультсериалы о говорящих животных
Телесериалы Amblin Entertainment

redpajama_set_name: RedPajamaWikipedia


Can someone please point me in a direction?
Everything is brand new and when I hit the HL switch for the first time, it all worked perfectly. Opened as they should and then closed as they should when commanded.
Next day, I hit it again and the doors opened but kept "cycling" at the "open" limit switch on BOTH sides. Turn it off and they close as they should, no issue.
Tried with key off, HLs on, the doors do this "cycling". Turn HL switch off (w/ key off) and cycling stops, doors stay open as they should until I turn key on (with HLs off) and then doors close as they should.
So its just on the open command.
I found lots of great wiring pics & info in here when I installed everything but I must be searching poorly as I cannot find anything pertaining to this scenario. Any help would be greatly appreciated.
While I only have Vac power headlight cars, I have a photo copy of a nice troubleshooting guide I can scan (Tonight) & send to you.
Check the double bounce in the retro electric trouble shooting part. Another cause could be both doors not making full contact with the open limit switch. Some shimming of the switches may be required.
As suggested use the GM trouble shooting guide. It works, and tells you what order to check things in.
I have the assembly manual and two small instructional booklets, one is for 1967 Camaro wiring and the other is specifically for RS HL wiring and it has a trouble shooting guide but regarding this, simply says a switch is bad. But I'd be happy to read anything pertaining to this type of issue so please forward or tell me where to find.
It worked, and then stopped and its both sides on the same motion. Heck of a coincidence.
I physically engaged the limits switches and it did not stop the "cycling".
"Double bounce is usually caused by slop in the door bushings or slop in the drive washers. This will not damage the Retro Electro motors." Everything is brand new, bushings, bolts, etc ... the doors are nice and snug and have no extra play. The actuating arms also have no play. I moved everything manually during set up to ensure everything was aligned properly and all four switches were engaging, and it worked perfectly ... once.
It has been too long ago for me to help. Now you know why you see so many with the doors open all the time.
David so you had initial success. I am electrically challenged so this was a big project. Mine were all there but unhooked and the switches in the glove box the relays all unplugged and all the wires tucked away so you couldn't see them. A daunting task. I had a wiring diagram in the paperwork I received that was from two previous owners ago. Yeah pretty alien to me. So I started searching and found Team Camaro and GRG. Through different threads I found bits an pieces of info. Finally figuring out where everything went. I documented and took pics as I put mine together. My first assumption was that I would get them back together and they wouldn't work. But lo and behold both doors opened but kept running. (familiar) The most common problem with the doors are bad grounds and the doors not fully activating the switches. Everything to do with your headlights right to the high beam switch can cause the doors to malfunction. Even a burnt out high beam can cause problems. That being said check all the grounds, switches, headlights. hope you used the star washers as they bite into the metal. Next is switch contacts. (this was my problem) With someone else on the headlight switch turn them on. When opened and still running push the door firmly against the open switch. If it stops then the switch or switches need some adjustment. Mine have been trouble free for 6 years so that is as far as I ever had to go.
Oh it took about 14 hours to fine tune them over two days.
Grounds always seem to be the "go to" on this thing. they have bit me before and are possibly biting again. I'll check it out for sure.
I had the same problem with the doors "bouncing" against the radiator support limit when light switch was turned on. Just needed to tighten up the nut on the friction washer (the passenger side was the problem for me) so that the door stayed pressed against the limit switch. Not sure if that's your issue, but it seemed to solve my problem.


Click here for audio of Episode 1385.
Today, a new look at a Colonial technology. The University of Houston's College of Engineering presents this series about the machines that make our civilization run, and the people whose ingenuity created them.
Historian Alex Roland suggests that colonial inventiveness was not exactly as we often represent it. He begins by directing our attention to Bushnell's invention of the submarine. Bushnell was one of our most famous Colonial inventors. In 1776 he built a one-man, hand-crank-powered submarine called the Turtle.
Bushnell enlisted a soldier to take the Turtle under the British ship Eagle and plant a charge. Once there, the man couldn't anchor the charge to the copper-clad hull. It exploded harmlessly in open water. But the potential of the new weapon was clear enough.
But said the earth had quaked.
Ran through the streets half-naked.
Bushnell has ever since been hailed as the father of the submarine and as a great American technological genius. But Roland points out that the Colonies were well-informed about European technology. Bushnell worked on the Turtle at Yale University, and in the Yale Library was the English Gentleman's Magazine. That was a kind of 18th-century Scientific American.
I've looked at the 1747 volume of the Gentleman's Magazine, and, sure enough, there's a short article with sketches of European ideas as to how a submarine might be built. It shows all the essential features of Bushnell's Turtle .
It becomes easy to embroider this theme. American successes with the steamboat, the electric light, the telephone and the telegraph -- they all followed European inventions of those technologies. Roland argues, and most historians agree, that the United States didn't actually originate significant major new technologies until the twentieth century.
Yet Americans put flesh and blood on those skeletal ideas. Bushnell was first to put a man under water in combat. The confident go-and-do-it mentality of Colonial and 19th-century America was infused with a different kind of inventiveness. It carried its own component of genius.
Lately we've seen this drama replayed. Just after WW-II, we sneered at Japan for making second-rate copies of our technologies. By the 1980s we were asking how on earth they developed Western inventions so rapidly and so well. Now original new ideas are coming out of Japan. I hope we've caught on to the need for regaining that raw, driving, adaptive Colonial mind in our modern technologies. We must, of course, if we don't want to see the twilight of American technical greatness.
Abbot, H. L., Beginning of Modern Submarine Warfare. (facsimile of an 1881 pamphlet, Frank Anderson, ed.) Hamden, CT: Archon Books, 1966.
Roland, A., Bushnell's Submarine: American Original or European Import?, Technology and Culture, Vol. 18, No. 2, April 1977, pp. 157-174.
taken from a sketch by Denis Papin based on a design by the Dutch/English scientist Cornelius Drebbel.
Note added August 7, 2017: Wikipedia now has an excellent article about Busnell's Turtle which includes this scale model of the machine.