text:
Program Groups + Initiatives
City Design and Development
Environmental Policy and Planning
Housing, Community + Economic Development
Urban Science
Individual and Community Support Resources
Resources, Policies, and Procedures
Economics Driving Migration in the Americas
https://news.mit.edu/2021/central-america-migration-economics-1123
Charting a New Regional Course of Action
A new report about migration, co-authored by MIT scholars, shows that economic distress is the main factor pushing migrants from Central America to the U.S. — and highlights the personal costs borne by people as they seek to move abroad.
"The core issue is economics, at the end of the day, and this is where policymakers need to be focusing their energy," says Sarah Williams, an MIT professor who helped produce the report. "At the heart of what's causing migration is that people don't have enough money to provide for their basic needs."
The study, based on a unique survey of over 5,000 people in El Salvador, Guatemala, and Honduras, finds a sharp increase in the number of people considering migrating after nearly two years of the Covid-19 pandemic. About 43 percent of people surveyed in 2021 were considering migrating, compared to 8 percent in 2019. That change comes as food insecurity in the region soars: The UN's World Food Program (WFP) estimates that 6.4 million people in the three countries were suffering from food insecurity in 2021, up from 2.2 million in 2019.
Survey respondents cited low wages, unemployment, and minimal income levels as factors increasing their desire to emigrate — ahead of reasons such as violence or natural disasters. In contrast to the 43 percent of people who were considering migrating, only 3 percent of people in the survey said they had made concrete plans to migrate. But 23 percent of those experiencing food insecurity had made concrete plans to leave.
One likely reason more people do not migrate is cost: An estimated 1.8 million Central Americans have attempted to migrate in the past five years, costing them collectively about $2.2 billion per year, which is equal to about one-tenth of Honduras' annual GDP.
"That is an extreme amount of money," says Williams, an associate professor of technology and urban planning in MIT's Department of Urban Studies and Planning, and director of MIT's Leventhal Center for Advanced Urbanism. "That $2.2 billion is all paid for by the migrants themselves, so the risks, both in terms of debt and personal risk, is borne by the migrant."
MIT's Civic Data Design Lab, which Williams also directs, helped analyze study data, produce the report, and create data visualizations to illustrate the economics of regional migration from central America.
Providing services to two countries
The report, "Charting a New Regional Course of Action: The Complex Motivations and Costs of Central American Migration," is the product of a collaboration between the WFP; the Migration Policy Institute (MPI), a nonpartisan think tank; and MIT's Civic Data Design Lab. Additional funding support was provided by the Inter-American Development Bank (IDB) and the Organization of American States (OAS). The project grew in part of a food insecurity study by the WFP, who also conducted the immigration survey.
The findings are being discussed at an online forum today featuring WFP Executive Director David Beasley, OAS Secretary General Luis Almagro, and IDB President Mauricio Claver-Carone; Williams and the report authors; and the foreign ministers of El Salvador, Guatemala, and Honduras.
The report found that 89 percent of people considering migrating were looking at the U.S. as their first choice. In households where someone had tried migrating in the last five years, about 57 percent of migrants had successfully reached their destination country and stayed, while 33 percent had returned home.
About 55 percent of migrants had tried using an illegal smuggler to help them, at a cost of about $7,500 per attempt, compared to a cost of about $4,500 for those using legal means.
"Illegal pathways to migration are much more expensive than legal pathways," Williams observes.
Whatever means migrants use, Williams also notes, the migrants themselves are bearing the cost of providing services to two countries. Migrants are a source of inexpensive labor in the U.S.; foreign-born workers made up 73 percent of all U.S.-hired crop labor workers in 2016, for instance.
But Central American countries also benefit from the labor of emigrants: Around 29 percent of households receive remittances — cash payments from immigrants living abroad, which constitute a nontrivial source of income in places like El Salvador, Guatemala, and Honduras.
"We must create incentives and opportunities for diasporas to invest in the development of local communities and become agents of change," Williams says.
The policy possibilities
With many Central American residents at least considering immigration, the new report suggests a series of policy measures that could help their local and national economies. While the U.S. is involved in aid programs in Central America, the report's policy suggestions emphasize economic investment tailored to local conditions, tied with increased social programs. For instance, investment in local agriculture can be linked to better support for school-food programs that use local produce.
"Targeted investment would do a lot more than just providing aid to the country," Williams says.
The report also recommends expanding legal pathways to immigration that could simplify the entire process, and help the regional flow of labor meet demand. This includes, as the report notes, "coordinated efforts to increase access to temporary employment visas," among other things.
Williams says the Civic Data Design Lab, which focuses on urgent social policy matters, plans to continue to examine immigration issues and related matters. This is because the root causes are complex and data can help clarify the issues for policymakers and the public. Her lab has developed a visualization website making the survey and the report more accessible to the public.
"We're bringing the skills of MIT to an important issue, and that's what has been so rewarding," Williams says. "We hope this collaboration continues and are looking forward to working with the World Food Program again in the future."
MIT Massachusetts Institute of Technology


text:
The Collection Nicaragua
The Collection Panama
Costa Rican Trails
• Feel the adrenaline of the rafts of the Pacuare River
• Visit the center of the most remote yet extreme biologically diverse place on earth, the Osa Peninsula
• Have the opportunity to interact with an Indigenous tribe while hiking in the mountains
• Tucked away, deep in the heart of the rainforest, Pacuare Lodge combines the privacy of an eco-retreat with earthy luxury and an array of outdoor adventures
• Guests have the opportunity to experience an unforgettable meal in the Nest: a platform 60 feet above the jungle floor in the branches of century-old Kapok tree - considered a sacred tree by the ancient Mayans
• Arenal Nayara's exceptional architecture and evergreen atmospheres evokes an oasis of tranquility and sophistication in perfect balance with nature.
Day 01: Arrival: welcome to paradise
Arrival SAN JOSE International Airport. A representative from Costa Rican Trails will meet you at the airport and provide a private land transfer to Alajuela
2 nights Hotel Xandari. Ultra Plus Villa Breakfast included
Day 02: Private Poas Volcano & Espiritu Santo Coffee Tour
You will be picked up at your hotel by one of our representatives for a Full day Tour to visit Poas Volcano & Espiritu Santo Coffee Tour.
Poás Volcano National Park is considered by most to be one of the most breathtaking sites in the entire country, the Poas Volcano sits high above 14,000 acres (5,666 ha) of various habitats and life zones . Rising up to 8,885 ft. (2,708 m), Poas remains one of Costa Rica's largest and most active volcanoes. Walking just 15 minutes from the visitor's center, the main crater supplies guests with a spectacular view. At almost a mile in diameter (1.6 km), the crater's rain-fed sulfuric pool still bubbles and emits smoke into the air, reminding you of its imposing activity. Although the last major eruption was in 1910, visitors can still see geysers explode into the air up to 820 ft. (250 m) high.
Around the huge main-crater is the beautifully blue-green colored Botos Lake (Laguna Botos) and on the opposite side, the von Frantzius cone. After visiting the Poas Volcano, we will continue to Naranjo, a small town sheltering some of Costa Rica best coffee plantations. Over two hundred years of coffee cultivation, have marked Naranjo as a mecca in the production of some of the finest coffees of the world, achieving several world awards for its quality. We will stop at the Espiritu Santo Coffee Tour. During hour and a half we will learn all the secrets of why this famous drink has taken the world over. We will be able to learn about all phases of the coffee, from the seed to the cup. The visit takes place in farm own by the local cooperative of coffee growers, where a coffee landscaping of rolling hills make a unique scenery. Lunch is included.
Day 03: Pacuare Lodge Helicopter Ride: Canopy Adventure
Early morning breakfast. Pick up at your hotel to board a helicopter flight to Pacuare Lodge.
The Pacuare Lodge is nestled in a rainforest overlooking the Pacuare River, which National Geographic has listed as one of the world's top ten scenic rivers. The luxuriant rainforest that surrounds the Pacuare Lodge is a private reserve that forms part of the largest network of protected areas in Central America, covering more than 1.2 million acres of tropical wilderness.
This afternoon, the action begins with a Canopy adventure tour.
This is an experience as no other! You will face the exotic beauty of the rainforest head on, feeling the adrenaline of dramatic views, rappelling down towering trees and sliding along cables from tree to tree as you descend the jungle cloaked mountain toward the Pacuare Lodge for a final thrilling rappel that leaves you just steps away from our main lodge! You will experience this excitement secure in the knowledge that you are safely anchored with a safety harness, providing a unique experience that no other tour of this type offers. Two hours of unforgettable adventure in the tree tops! You will end your adventure at The Nest - : a platform 20 meters (60 feet) high in a treetop, where guests can enjoy a snack and beverages in a uniquely splendid setting. The culinary adventure begins as you glide down a 130-meter cable to the platform high in the branches of a Ceiba: a tree that was sacred to the ancient Mayans.
2 nights at Pacuare Lodge Linda Vista Suite. Full board included
Day 04: Pacuare: Ancient Trail & Hidden Waterfall Hike
This is the most challenging of our hikes, making it a good option for people who enjoy hiking into remote and wild areas. Departing from the Pacuare Lodge, it begins with a steep hike through the jungle to reach the legendary sendero de las mulas (mule trails), which is one of the main routes used by the Cabécar Indians to travel longer distances and has been used for generations. After the first climb, we'll take the jabas trail, which includes a series of switchbacks, to the 'path of puma.' This will take us to the ancient mule trail, which we'll follow deep into the Nairi Awari Indigenous Reserve to reach the highpoint of this excursion: the hidden waterfall. We'll enjoy a picnic lunch at this scenic spot before hiking back along the trail to a Cabécar indigenous community. After exploring that traditional village, we'll continue down another rainforest trial back to the Pacuare Lodge.
Day 05: Pacuare: Private White-Water Rafting /Arenal
Depart Pacuare Lodge and experience the white water magic as you discover the excitement of thrilling rapids coursing through rugged canyons and verdant tropical rainforests on one of the most exotic and scenic rivers in the world. Located in Costa Rica's Atlantic region, the wild and scenic Pacuare River offers some of the finest rapids in Latin America. Rafting the second portion of the river is even more thrilling as you experience a mixture of class III and class IV rapids, all the while surrounded by spectacular scenery.
You may stop to explore side streams that lead to striking waterfalls and pools with a natural waterslide that tempts you to jump right in.
Later on, a tasty midday meal of sandwiches, fruits and dessert will be served on an overturned raft along the water's edge. At the river take-out, you can change into dry clothes at our private facilities before heading towards Arenal.
3 nights Hotel Arenal Nayara. 1 dbl Spring Villa Breakfast included
Day 06: Arenal: Hike Around The Mountain Of Fire & Tabacon Hot Springs
Morning at leisure.
This afternoon visit the Arenal Volcano Nat Park. Before the active period of 1968, a lavish canopy of vegetation covered the Arenal Volcano. People that climbed Arenal' s summit related that inside the crater there were big trees and at night, they slept in places where there was some heat due to small steam outlets.
Enjoy the most extraordinary view of the Arenal Volcano on a hike along the base and flanks of this giant on the Arenal 1968 park. For this tour we have choose one of the park's most extraordinary trails to the 1968 lava flows: the remaining memory of the 20th century first eruption and some other areas now in the process of regeneration. We are going to be on this trail for about 2 ½ hours.
The "Colada 68" trail will give you the best of the best hiking over lava flows in all the Arenal Volcano area, walk on rocky areas, feel the power and serenity of nature, enjoy amazing views of the Arenal Lake and the Monteverde mountains, plus an insight contact with the local flora and fauna and a great chance for some birdwatching and animal encounters.
Then visit the volcanic thermal mineral pools at the Tabacon Hot Springs, where you can enjoy a healthy and relaxing soak and enjoy of a delicious dinner
Overnight at Hotel Arenal Nayara
Spring Villa. Breakfast included.
Day 07: Arenal: Private Sky Tram/Trek/Walk
Sky Walk – Nature Inspiring Tree Top Walk
Sky Walk uses trails and a series of suspension bridges for a more relaxing introduction of the flora and fauna of the forest canopy. It allows a vision of the forest from a different perspective which starts with a hike on the ground and then taking you to explore the treetops, a hardly discovered habitat called the "canopy" with a naturalist guide.
In Costa Rica, Sky Adventures was the pioneer in building hanging bridges, with the introduction of Sky Walk, to admire the forest from unique viewpoints. Sky Walk's bridges span across canyons and bring visitors face to face with the upper level of the forest canopy.
Sky Trek – Ultimate Zip Lines
Sky Trek is a thrilling zip line circuit that's located in both of our parks, Monteverde and La Fortuna. Your tour will start riding an open-air gondola from the ground to the heights where you'll be dropped off at an observation area for fantastic views. From this area, you will start riding down on a zip line track stretching across canyons and in between treetops, the exhilarating adventure of zip lining down the mountainside begins; ultimately returning you to the starting point at the main building. This is the most thrilling zip line in the country.
Day 08: Arenal/Osa Peninsula
Today you will be transferred to Arenal airstrip for your charter flight to Puerto Jimenez.
Surrounded by some of the most unspoiled and diverse rainforest in the world, Playa Cativo is a Costa Rica Eco Lodge located on the calm waters of the Golfo Dulce, the inner side of the Osa Peninsula in southern Costa Rica.
Unique in its native beauty, seclusion and natural treasures where everything is pitch perfect, Playa Cativo (Cativo Beach) offers an unparalleled experience for those eager to be immersed in nature and away from it all.
It is a strikingly beautiful setting and the ultimate in peace and serenity! Walk along the secluded beach, feeling the fresh forest breeze, touching the calm clean ocean, and away from smoke and noises of cars and diesel generators.
4 nights Playa Cativo 1 Premium room
Full board services included in their room rate:
• Meet and greet at local airport (Golfito or Puerto Jimenez) and transfers to/from dock.
• One round-trip scenic boat transfer from town of arrival (Golfito or Puerto Jimenez).
• Lodging, featuring spectacular vistas of the ocean and surrounding tropical rain-forest.
• Three à la carte, multi-course meals per day (in-room dining also available), drinks are not included.
• Freshly brewed specialty coffees and teas.
• Use of kayaks, standup paddle boards and snorkeling gear inside Cativo Bay.
• The Introduction to the Tropical Rain-forest Guided Tour.
• Access to self-guided hiking trails around our private tropical rain-forest reserve.
• A "surprise and delight" in-room amenity.
• Concierge services and Wi-Fi in all rooms and social areas.
Day 09: Playa Cativo Introduction to the Tropical Wildlife:
This tour will take you to a nearby valley where different birds and animals are often seen. Our naturalist guide will walk you through some interesting facts about natural history and the interaction of the tropical rainforest
Day 10: Piedras Blancas Nature Hike
With the beauty and convenience of the surrounding National Park, Playa Cativo guests
don't have to go far to see nature at its best. Networks of trails in nearly every direction from the lodge are waiting for your discovery. Parts of Playa Cativo are rugged and steep due to its characteristic topography, so trails are rated for different excursion levels, from touring to challenging. The flora of Piedras Blancas National Park is among the richest on the planet, with several thousand different species of plants and hundreds of trees, - some very rare and in danger of extinction. It is very similar to the nearby Corcovado National Park but less travelled. Piedras Blancas has even more tree species than Corcovado. The fauna is composed of approximately 140 species of mammals, 350 species of birds, over 100 amphibians and reptiles and several thousand insects. Get ready to hike through the virgin rainforest. An experience of a lifetime awaits you at our 1,000-acre private reserve!
Day 11: Rio Esquinas Mangrove-Ocean Kayaking
Blessed with one of the largest and most pristine river systems in Costa Rica just a few short beaches away. The river mouth mangroves lead to picturesque views of the forest and remote farms. The diverse terrain allows for some of the best bird watching in the area especially at sunrise and sunset. Our boat tows your kayak to the mouth of the river where you will embark on a peaceful excursion and experience the magic of nature while cruising down the river
Land transfer back to local airstrip to take a charter flight to the SAN JOSE, arrival and transfer to International Airport to catch your flight back home
Costa Rica Luxury & Unique: Hotels • Packages • Tours • Transfers •
Toll Free From USA : 1-888-803-3344 & Canada: 1-866-865-7013 • Phone: • (506) 2527-6700 • Fax:(506) 2527-6799 • info@costaricantrails.com •

redpajama_set_name: RedPajamaCommonCrawl


text:
Ptyelus nebulus är en insektsart som först beskrevs av Turton 1802.  Ptyelus nebulus ingår i släktet Ptyelus och familjen spottstritar. Inga underarter finns listade i Catalogue of Life.

Källor

Spottstritar
nebulus

redpajama_set_name: RedPajamaWikipedia


In this musical show, presented at Avignon Festival (2010 official programme), actor Pierre Baux and cellist Vincent Courtois give life to 70s rock'n'roll New York through dialogues, memories, dreams and digressions collected by Legs McNeil and Gillian McCain in Please Kill Me. This uncensored oral history of punk played on stage is haunted by Jim Morrison, Patti Smith, Allen Ginsberg, Iggy Pop, Philippe Marcadé.
Baux and Courtois have been successfully working together on very different repertoires – Grimm, Borges, Andersen, Kafka – but they really rock here when celebrating the birth of a new, crazy, revolting, fascinating music!


text:
July 22, 2011 8:15PM ET
Ex-Nirvana Drummer Chad Channing Recording New LP
'I would definitely entertain the idea of working with Krist Novoselic again'
Greg Prato
Greg Prato's Most Recent Stories
Former Stooges Guitarist James Williamson Details New Album
Soundgarden's Kim Thayil on Reissues, Rarities and What's Next
A Perfect Circle Co-Founder: Hits Album a 'Semi-Tearjerking Exercise'
Chad Channing of Nirvana in 1989.
JJ Gonson/Redferns
Chad Channing – the drummer who appeared on such Nirvana releases as Bleach, Incesticide and With the Lights Out – is just about finished writing his second album for his band Before Cars. Handling vocals, rhythm guitar, and drums, Channing will be joined again by guitarist Paul Burback, violinist Justine Jeanotte, and bassist/percussionist/keyboardist Andy Miller.
"I'm hoping to get into the studio by late summer or early fall," Channing tells Rolling Stone. "It's going to be a lot different than the first one [2008's Walk Back] I did, which was kind of like a personal anthology – it had songs I had written before Nirvana, during Nirvana, after Nirvana, and up until the record was done. This is just all new stuff. It's got a lot influence from Seventies singer-songwriter type of stuff. It's kind of like a mix between David Bowie meets Gordon Lightfoot."
Photos: The Rise of Nirvana, Smashing Pumpkins, Pearl Jam and More
Although the album does not have a confirmed title, it will include such songs as "Trip to Mars," "Jerk Water," "How We Run" and "The Last Times." Channing is looking at a late 2011/early 2012 release for the album (to be produced by Duffy Williams), but is unsure as to how to release it. "I might put it out myself, but I think I'm probably going to float a copy to Jonathan [Poneman] from Sub Pop and see. He did like the first record that I did."
With Channing's former Nirvana bandmate Krist Novoselic having recently appeared on a recording by another Nirvana drummer-turned-frontman [the song "I Should Have Known" off the Foo Fighters' Wasting Light], is there any chance of a Channing-Novoselic reunion? "I don't talk to Krist very often, but we have spoken a couple of times within the past year," he says. "I would definitely entertain the idea of working with him if the opportunity should arise. Definitely."
And lastly, what is Channing's favorite Nirvana song that he played on? "One of my favorites has always been 'Swap Meet.' One of the reasons why I like that is it's a song that's in a drop-d tuning, and of course, also being a guitar player, it's one of the songs that I really like the riff on it. I just sat, turned my guitar down to d, figured the song out, and was like, 'That's a really fun song to play!' That got me more into it, and the lyrics are sort of campy – I like them too."
In This Article: Before Cars,	Chad Channing,	Krist Novoselic,	Rock and Roll Encyclopedia,	Swap Meet
Jeremy Irons Says Snyder Cut 'Couldn't Have Been Worse' Than 'Dreadful' 'Justice League'


products manufacturing,HERBEAUTY LASHES has become one of the most professional lashes supplier for global partners.
of HERBEAUTY LASHES are best imported Korea PBT material and Cruelty-Free Siberian Mink Hair,luxry and soft!
Canada,UK,France,Germany,Korea,Japan and other high class markets.
products based on customer's samples, or even customer's ideas for his local market.


Looking for High Speed Internet in Las Vegas, Nevada? High speed Internet provided by LV.Net is without a doubt the way to go! Our coverage continues to grow on a daily basis, and our staff and capabilities continue to do the same.
Our technical and customer support team has the resources to provide customers around the clock customer support. Our staffs' knowledge and techniques give us the ability for our network to function on a level that our competition cannot keep up with. At LV.Net, our emphasis is on flexibility and redundancy which assures that our customers can access the Internet in all sorts of conditions where other companies statistically have failed.
LV.Net's Residential and Business High Speed Internet and Wi-Fi service in Las Vegas, Nevada 89115provides businesses and residents with fast, reliable, and secure internet connection. With speed packages available to satisfy everyone in your home and business, LV.Net is the most sought after internet service provider in Las Vegas, Nevada. Whether you use the internet to simply surf the web, stream movies, a kid at heart and just game, or a or a simpleton who just streams to views content, LV.Net will customize its service packages to fit your internet needs. Not to mention, we are the only locally-owned Internet Service Provider that does not cap your internet usage – IMAGINE, NO DATA CAPS! When you sign up for any one of our residential high-speed internet packages, you can surf the internet whenever you want however long you want without worrying of going over your designated plan.
If you need high speed Internet or Wi-Fi for your home or business in the Las Vegas area, Give LV.Net a call day or night at 702-900-0000 for a quote. We are ready and able to serve any and all needs for high speed wireless microwave Internet or Wi-Fi.


A delivery driver has been caught on camera throwing boxes containing £450 worth of antiques down a 15 ft flight of concrete steps.
CCTV footage shows two boxes containing fragile porcelain and china items being carelessly tossed out of the van and tumbling down stairs last week.
But when the Yodel courier is caught out by the indignant buyer Patrick Duffy he starts cautiously piling the packages at the top of the steps before carrying them down.
The driver's employer Yodel says it has apologised to Patrick and has taken 'appropriate action' following the incident.
Patrick, from Bradford in West Yorkshire, said: 'I'd spent about £450 on antiques from eBay.
'It was absolutely disgusting. I watched as he took the boxes out of the back and threw them down the flight of 12 stairs without any care.
'They were china and porcelain ornaments and they are very fragile.
'I'm a live-in caretaker for a block of flats and was working on a garden nearby when I saw the van pull up and the man start throwing the packages.
'I shouted at him and ran over to check the boxes at the bottom of the steps. I was worried that the antiques I'd bought were going to be all smashed.
'I got the impression he knew straight away what he'd done when I shouted him to stop. The only reason he stopped throwing them was because he saw me.
The parcels contained precious items, like silver salt dishes and pepper pots, Beswick China horse figures, Chinese bronze urns and a Royal Doulton water jug.
One of the items, an antique coal shuttle that Patrick had paid £15 for and planned to refurbish, was shattered across the top.
Patrick now fears some of the more expensive, irreplaceable items he orders could be damaged in the future.
Patrick said: 'A friend of mine has opened an antique shop and I'd decided to rent a cabinet from him to make some money.
'One thing was damaged but fortunately it wasn't one of the more expensive items I'd bought, it could have been worse.
'The driver admitted he knew he shouldn't have been doing it and it could have caused much more damage.
A Yodel spokesperson said: 'We have contacted Mr Duffy to apologise and offered a gift voucher as a gesture of goodwill.
'The safe delivery of parcels is our absolute priority and we are disappointed to see this driver breaking our strict protocols.


That is the fundamental error made by the BA in these appeals In an August 2015 Valuation Tribunal cases – Holdsworth, Cassidy & Phillips v City of Bradford (tribunal appeal reference 4705M141113/254C ) – the Valuation Tribunal President considered what would should happen where a Council Tax demand notice was issued due to the Valuation Office Agency retrospectively lowering the property band.This meant a new demand notice, which couldn't have been issued any earlier, was sent out (similar situations will occur where a property has never been banded previously).The local authority disputed that any backdating of refunds should occur beyond 6 years as otherwise it fell past the 6 year period given in the Limitation Act.The Valuation Tribunal President, Professor Zellick, determined that an amount can only be property calculated once a demand notice has been issued (this principle is in line with other Council Tax cases). As the claimants had all applied for the backdating within 6 years of the revised demand notice being issued then they were entitled to the full amount.Professor Zellick stated that Although this case was in respect of claiming refunds for an adjusted Council Tax band the same key principals could be argued in respect of any adjustment which retrospectively creates a new Council Tax charge and requires a backdated claim for discount or exemption.Not really, where the Local Authority are backdating a Council Tax charge then there is also no time limit in itself as to how far back the change can be made to ensure the records are correct.A reduction can be granted provided one of the following conditions apply and that it is essential or of major importance for the well-being of the disabled person who lives in the household: You do not have to have made any adaptations yourself to the property.
Please note all staff carry and provide identification.
You must to notify us in writing within 21 days if there is no longer an entitlement to the reduction either because the qualifying individual has left the property or there is a change in circumstances.
The disabled reduction can only be backdated to the beginning of the financial year.
Many people are not aware that Council Tax legislation does not include any specific limits on backdating of discounts or exemptions.
In recent years Tribunal decisions have generally agreed that the Statue of Limitations should apply with regard to backdating however they have found that the Statue of Limitations in itself isn't a limit on how far back backdating can be applied. The Statue of Limitations, from the Limitation Act 1980, is intended to prevent an open-ended liability to the legal action that can be taken against someone.
A reduction may not necessarily apply just because the disabled person is registered as disabled.


This morning before I left for work, I checked on my deer only to find them covered in dew. I figured that would definitely mean I would have to redo them and I was prepared to come home and tell you that there would be no deer reveal.
I decided to angle the books rather than put them flush against the wall. They just looked better that way.
Since I was standing in front of a mirror and I promised to try to include more pictures of myself, I couldn't resist.


text:
package safe.safelang
package parser

import scala.collection.mutable.{Set => MutableSet}

import safe.safelog.{
  Constant, Variable, Encoding, MutableCache, StrLit,
  Assertion, Retraction, Query, QueryAll, Term, Structure, Statement,
  termType, ParserException, Index, Validity, UnSafeException
}
import model.{
  UnsignedCredential, UnsignedUnBoundCredential, SignedCredential,
  SignedCredentialHolder, Status, SubjectStmt, SpeakerStmt, Subject
}

trait ParserImpl
  extends safe.safelog.parser.ParserImpl
  with scala.util.parsing.combinator.JavaTokenParsers
  with scala.util.parsing.combinator.PackratParsers
  with com.typesafe.scalalogging.LazyLogging {
  slangParser: ParserService =>

  lazy val reservedFunctions: Set[StrLit] = Set(StrLit("definit"), StrLit("defenv"), StrLit("defcon"), StrLit("defun"), StrLit("defetch"), StrLit("defpost"), StrLit("defguard"))

  /*
  override lazy val endOfSource =

  """([^"\\]*(?:\\.[^"\\]*)*)""".r     // double quotes
  """([^'\\]*(?:\\.[^'\\]*)*)""".r     // single quotes
  """[^}\\]*(?:\\.[^}\\]*)*""".r       // set term
  """[^`\\]*(?:\\.[^`\\]*)*""".r       // fun term
  """(.*)([.?~!]|end)\s*(//.*)?$""".r  // standard eos
  */

  def word(str: String): Parser[String] = regex(s"\\b$str\\b".r)

  override lazy val statement: PackratParser[(Index, MutableSet[Statement])] = (query | assertion | retraction) ^^ {
    case s @ Assertion(terms) => terms.head match {
      case Structure(StrLit("import"), trs +: Nil, _, _, _) =>
        val res = addStatement(StrLit("import"), s)
        (StrLit("import"), res)
      case c @ Constant(name, _, _, _) if reservedFunctions.contains(name) => // def* case
        buildIndexForDef(c.primaryIndex, s.terms.tail.head.primaryIndex, s.terms.tail)
      case x                  =>
        val res = addStatement(s.primaryIndex, s)
        (s.primaryIndex, res)
    }
    case s @ Retraction(x)    =>
      val res = addStatement(StrLit("_retraction"), s)
      (StrLit("_retraction"), res)
    case s @ Query(x)         =>
      val qIndex = s.terms.head.primaryIndex
      if(qIndex == StrLit("definit0")) {
        buildIndexForDef(qIndex, s.terms.tail.head.primaryIndex, s.terms.tail)
      } else {
        val res = addStatement(StrLit("_query"), s)
        (StrLit("_query"), res)
      }
    case s @ QueryAll(x)      =>
      val qIndex = s.terms.head.primaryIndex
      if(qIndex == StrLit("definit0")) {
        buildIndexForDef(qIndex, s.terms.tail.head.primaryIndex, s.terms.tail)
      } else {
        val res = addStatement(StrLit("_query"), s)
        (StrLit("_query"), res)          // this is on purpose; for indexing we only care whether the statement is a query
      }
    case other                => throw UnSafeException(s"Statement type not detected: $other")
  }

  private def buildIndexForDef(defIndex: StrLit, stmtIndex: StrLit, terms: Seq[Term]): Tuple2[Index, MutableSet[Statement]] = {
    val stmts = Assertion(terms)
    val resForDef = addStatement(defIndex, stmts)
    val res = addStatement(stmtIndex, stmts)
    (stmtIndex, res)
  }

  // Note: not("def.*".r) is to avoid the case definit ?Var := fun()
  /*
  override lazy val queryAll: PackratParser[QueryAll] =
    (("queryAll" ~ not("def.*".r) ~> qliterals <~ "end") | (opt(logicalIf) ~ not("def.*".r) ~> qliterals <~ "??")) ^^ {case q => QueryAll(q)}

  override lazy val queryOne: PackratParser[Query] =
    (("query" ~ not("def.*".r) ~> qliterals <~ "end") | (opt(logicalIf) ~ not("def.*".r) ~> qliterals <~ "?")) ^^ {case q => Query(q)}
  */
  override lazy val queryAll: PackratParser[QueryAll] =
    (("queryAll" ~ not("defenv") ~> qliterals <~ "end") | (opt(logicalIf) ~ not("defenv") ~> qliterals <~ "??")) ^^ {case q => QueryAll(q)}

  override lazy val queryOne: PackratParser[Query] =
    (("query" ~ not("defenv") ~> qliterals <~ "end") | (opt(logicalIf) ~ not("defenv") ~> qliterals <~ "?")) ^^ {case q => Query(q)}

  lazy val qliterals: PackratParser[Seq[Term]] = initFunction | literals

    // Not need for range detection check
  override lazy val rule: PackratParser[Seq[Term]] = headLiteral ~ logicalIf ~ literals ^^ { // head :- body1; body2.
    case head ~ lIf ~ body => head +: body
  }
  override  lazy val multiRuleAssertion: PackratParser[Seq[Statement]] =
    ((word("assert") ~> headLiteral ~ logicalIf ~ repsep(literals, ";") <~ opt(",") ~ word("end")) | (headLiteral ~ logicalIf ~ repsep(literals, ";") <~ logicalEnd)) ^^ {
    case head ~ lIf ~ clauses => clauses.map{clause => Assertion(head +: clause) }
  }
  // Not need for range detection check
  override lazy val groundFact: PackratParser[Seq[Term]] = headLiteral ^^ {
    case head => Seq(head)
  }

  override lazy val clause: PackratParser[Seq[Term]]  = (function | rule | groundFact)
  override lazy val headLiteral: PackratParser[Term] = (infixTerm | structureTerm | funTerm | setTerm | atom)
  override lazy val literal: PackratParser[Term] = (headLiteral | nilAtom)

  override lazy val atom: PackratParser[Term] = // Note: opt(typeDelimiter) is a hack to make #type -> value work
    opt((singleQuotedString | symbol | "?" | "_") <~ typeDelimiter) ~ opt(opt(typeDelimiter) ~ (symbol | singleQuotedString) ~ (attrMapIndexDelimiter | attrMapDelimiter)) ~ (sequence | structureTerm | variable | constant) ^^ {

    case None ~ None                           ~ Constant(x, cattrName, ctpe, ckey)            =>
      val (cctpe: StrLit, indexAndEncode: Encoding) = typeWithEncoding(ctpe, ckey, Encoding.Attr)
      Constant(x, cattrName, cctpe, indexAndEncode)

    case None ~ None                           ~ Variable(x, cattrName, ctpe, ckey)            =>
      val (cctpe: StrLit, indexAndEncode: Encoding) = typeWithEncoding(ctpe, ckey, Encoding.Attr)
      Variable(x, cattrName, cctpe, indexAndEncode)

    case None ~ None                           ~ Structure(x, xterms, cattrName, ctpe, ckey)   => // interpolation case
      val (cctpe: StrLit, indexAndEncode: Encoding) = typeWithEncoding(ctpe, ckey, Encoding.Attr)
      Structure(x, xterms, cattrName, cctpe, indexAndEncode)

    case None ~ Some(None ~ attrName ~ keyAttr)     ~ Constant(x, cattrName, ctpe, ckey)       =>
      val (cctpe: StrLit, indexAndEncode: Encoding) =
        if (keyAttr == "as") typeWithEncoding(ctpe, ckey, Encoding.Attr)
        else typeWithEncoding(ctpe, ckey, Encoding.IndexAttr)
      Constant(x, StrLit(attrName.toString), cctpe, indexAndEncode)

    case None ~ Some(None ~ attrName ~ keyAttr)     ~ Variable(x, cattrName, ctpe, ckey)       =>
      val (cctpe: StrLit, indexAndEncode: Encoding) =
        if (keyAttr == "as") typeWithEncoding(ctpe, ckey, Encoding.Attr)
        else typeWithEncoding(ctpe, ckey, Encoding.IndexAttr)
      Variable(x, StrLit(attrName.toString), cctpe, indexAndEncode)

    case None ~ Some(dlm ~ tpe ~ keyAttr)      ~ Constant(x, cattrName, ctpe, ckey)            =>
      val (cctpe: StrLit, indexAndEncode: Encoding) =
        if (keyAttr == "as") typeWithEncoding(ctpe, ckey, Encoding.Attr)
        else typeWithEncoding(ctpe, ckey, Encoding.IndexAttr)
      Constant(x, cattrName, StrLit(tpe.toString), indexAndEncode)

    case None ~ Some(dlm ~ tpe ~ keyAttr)      ~ Variable(x, cattrName, ctpe, ckey)            =>
      val (cctpe: StrLit, indexAndEncode: Encoding) =
        if (keyAttr == "as") typeWithEncoding(ctpe, ckey, Encoding.Attr)
        else typeWithEncoding(ctpe, ckey, Encoding.IndexAttr)
      Variable(x, cattrName, StrLit(tpe.toString), indexAndEncode)

    case Some(attrName) ~ None                      ~ Constant(x, cattrName, ctpe, ckey)       =>
      val (cctpe: StrLit, indexAndEncode: Encoding) = typeWithEncoding(ctpe, ckey, Encoding.Attr)
      Constant(x, StrLit(attrName.toString), cctpe, indexAndEncode)

    case Some(attrName) ~ None                      ~ Variable(x, cattrName, ctpe, ckey)       =>
      val (cctpe: StrLit, indexAndEncode: Encoding) = typeWithEncoding(ctpe, ckey, Encoding.Attr)
      Variable(x, StrLit(attrName.toString), cctpe, indexAndEncode)

    case Some(attrName) ~ Some(dlm ~ tpe ~ keyAttr) ~ Constant(x, cattrName, ctpe, ckey)       =>
      val (cctpe: StrLit, indexAndEncode: Encoding) =
        if (keyAttr == "as") typeWithEncoding(ctpe, ckey, Encoding.Attr)
        else typeWithEncoding(ctpe, ckey, Encoding.IndexAttr)
      Constant(x, StrLit(attrName.toString), StrLit(tpe.toString), indexAndEncode)

    case Some(attrName) ~ Some(dlm ~ tpe ~ keyAttr) ~ Variable(x, cattrName, ctpe, ckey)       =>
      val (cctpe: StrLit, indexAndEncode: Encoding) =
        if (keyAttr == "as") typeWithEncoding(ctpe, ckey, Encoding.Attr)
        else typeWithEncoding(ctpe, ckey, Encoding.IndexAttr)
      Variable(x, StrLit(attrName.toString), StrLit(tpe.toString), indexAndEncode)
  }

  override lazy val operatorTerm: PackratParser[Term] = functor ~ "(" ~ atoms <~ ")" ^^ {
    case funct ~ lParen ~ trs => Structure(funct, trs)
  }

  override lazy val symbolTerm: PackratParser[Term] = (constantString | singleQuotedString) ~ "(" ~ atoms <~ ")" ^^ {
    case funct ~ lParen ~ trs => Structure(funct.id, trs)
  }

  lazy val dnTerm: PackratParser[Term] =
    (word("dn") ~ "|") ~> repsep(numeric | singleQuotedString | constantString, ".") ~ opt(".") ^^ {
    case cTerms ~ Some(root) => Structure(StrLit("_seq"), Constant(".") +: cTerms.reverse, StrLit("nil"), StrLit("Dn"))
    case cTerms ~ None       => Structure(StrLit("_seq"), Constant(".") +: cTerms.reverse, StrLit("nil"), StrLit("Dn"))
  }

  override lazy val structureTerm: PackratParser[Term] = opt((singleQuotedString | symbol | "?" | "_") <~ typeDelimiter) ~ opt(opt(typeDelimiter) ~ (symbol | singleQuotedString) <~ (attrMapIndexDelimiter | attrMapDelimiter)) ~ (operatorTerm | symbolTerm) ^^ {
    // For Structure, attrMapIndexDelimiter does not matter since all predicates are indexed by default
    case None ~ None ~ Structure(funct, trs, _, _, _)                      =>
      Structure(funct, trs, StrLit("nil"), termType)
    case None ~ Some(None ~ attrName) ~ Structure(funct, trs, _, _, _)     =>
      Structure(funct, trs, StrLit(attrName.toString), termType)
    case None ~ Some(dlm ~ tpe) ~ Structure(funct, trs, _, _, _)           =>
      Structure(funct, trs, StrLit("nil"), StrLit(tpe.toString))
    case Some(attrName) ~ None ~ Structure(funct, trs, _, _, _)            =>
      Structure(funct, trs, StrLit(attrName.toString), termType)
    case Some(attrName) ~ Some(dlm ~ tpe) ~ Structure(funct, trs, _, _, _) =>
      Structure(funct, trs, StrLit(attrName.toString), StrLit(tpe.toString))
  }

  override lazy val expr: PackratParser[Term] = (sequence | structureTerm | variable | constant)

  /* Forms of list:
   * (1) [a, b, c, d] = [a | [b, c, d]] = [a, b | [c, d]] = [a, b, c | [d]] = [a, b, c, d | []].
   * (2) [a | [b]] = [a, b].
   * (3) [a, b, c, d] = [a | [b | X]] = [a, b|X].
   *     X = [c, d]
   * (4) [a, b, c, d] = [A, B|C] = [A | [B|C]].
   *     A = a,
   *     B = b,
   *     C = [c, d].
   * (5) [a, b, c, d] = [A|[B|C]].
   *     A = a,
   *     B = b,
   *     C = [c, d].
   */

  lazy val sequence: PackratParser[Term] = "[" ~> opt(literals) ~ opt("|" ~ (variable | sequence)) <~ "]" ^^ {
    case Some(head) ~ None              =>
          if(head == Seq()) Structure(StrLit("_seq"), Nil) // TODO: why does the literals return empty seq? check nilAtom
      else head.foldRight(Structure(StrLit("_seq"), Nil)) { (x,y) => Structure(StrLit("_seq"), Seq(x) ++: Seq(y)) }

    case Some(head) ~ Some(cons ~ body) =>  head.foldRight(body) { (x,y) => Structure(StrLit("_seq"), Seq(x) ++: Seq(y)) }
    case None       ~ None              =>  Structure(StrLit("_seq"), Nil)
    case None       ~ Some(x)           =>  throw ParserException(s"Invalid sequence format")
  }

  //============== Functional forms ================================//
  lazy val function: PackratParser[Seq[Term]] = (setFunction | jvmFunction | guardFunction | postFunction | fetchFunction | envFunction | initFunction)

  def conAndGuardTerm(funType: StrLit, head: Term, body: Seq[Term]): Seq[Term] = body.last match {
    case t @ SetTerm(id: StrLit, argRefs, args, certificate, _, _, _) =>
      Constant(funType) +: head +: body.init :+ Structure(funType, head +: t +: Nil)
    case _ => throw ParserException(s"$funType rule should end with a set term")
  }
  /*
  lazy val guardFunction: PackratParser[Seq[Term]] = "defguard" ~ structureTerm ~ logicalIf ~ literals ^^ {
    case predef ~ head ~ logicalIf ~ body => body.last match {
      case t @ SetTerm(id: StrLit, argRefs, args, certificate, _, _, _) =>
        Constant(StrLit("defguard")) +: head +: body.init :+ Structure(StrLit("defguard"), head +: t +: Nil)
      case Constant(StrLit("true"), _, _, _)     => conAndGuardTerm(StrLit("defguard"), head, body.init)
      case Structure(StrLit("spec"), _, _, _, _) => conAndGuardTerm(StrLit("defguard"), head, body.init)
      case other @ _ => throw ParserException(s"defguard rule should end with a set term but $other found")
    }
  }
  */

  //====defguard is relaxed to support any method after query====//
  lazy val guardFunction: PackratParser[Seq[Term]] = "defguard" ~ structureTerm ~ logicalIf ~ literals ^^ {
    case predef ~ head ~ logicalIf ~ body => Constant(StrLit("defguard")) +: head +: body.map {
      case t @ SetTerm(id: StrLit, argRefs, args, certificate, _, _, _) =>
        Structure(StrLit("defguard"), head +: t +: Nil)
      case other: Term => other
    }
  }

  def fetchAndPostTerm(funType: StrLit, head: Term, body: Seq[Term]): Seq[Term] = body.last match {
    case t @ Structure(StrLit("_seq"), terms, _, _, _) =>
      Constant(funType) +: head +: body.init :+ Structure(funType, head +: t +: Nil)
    case other @ _ => throw ParserException(s"$funType rule should end with a sequence but $other found")
  }
  lazy val postFunction: PackratParser[Seq[Term]] = "defpost" ~ structureTerm ~ logicalIf ~ literals ^^ {
    case predef ~ head ~ logicalIf ~ body => body.last match {
      case t @ Structure(StrLit("_seq"), terms, _, _, _) =>
        Constant(StrLit("defpost")) +: head +: body.init :+ Structure(StrLit("defpost"), head +: t +: Nil)
      case Constant(StrLit("true"), _, _, _)     => fetchAndPostTerm(StrLit("defpost"), head, body.init)
      case Structure(StrLit("spec"), _, _, _, _) => fetchAndPostTerm(StrLit("defpost"), head, body.init)
      case other @ _ => throw ParserException(s"defpost rule should end with a sequence but $other found")
    }
  }
  lazy val fetchFunction: PackratParser[Seq[Term]] = "defetch" ~ structureTerm ~ logicalIf ~ literals ^^ {
    case predef ~ head ~ logicalIf ~ body => body.last match {
      case t @ Structure(StrLit("_seq"), terms, _, _, _) =>
        Constant(StrLit("defetch")) +: head +: body.init :+ Structure(StrLit("defetch"), head +: t +: Nil)
      case Constant(StrLit("true"), _, _, _)     => fetchAndPostTerm(StrLit("defetch"), head, body.init)
      case Structure(StrLit("spec"), _, _, _, _) => fetchAndPostTerm(StrLit("defetch"), head, body.init)
      case other @ _ => throw ParserException(s"defetch rule should end with a sequence but $other found")
    }
  }
  lazy val setFunction: PackratParser[Seq[Term]] = "defcon" ~ structureTerm ~ logicalIf ~ literals ^^ {
    case predef ~ head ~ logicalIf ~ body => body.last match {
      case t @ SetTerm(id: StrLit, argRefs, args, certificate, _, _, _) =>
        Constant(StrLit("defcon")) +: head +: body.init :+ Structure(StrLit("defcon"), head +: t +: Nil)
      case Constant(StrLit("true"), _, _, _)     => conAndGuardTerm(StrLit("defcon"), head, body.init)
      case Structure(StrLit("spec"), _, _, _, _) => conAndGuardTerm(StrLit("defcon"), head, body.init)
      case other @ _ => throw ParserException(s"defcon rule should end with a set term but $other found")
    }
  }

  def defunTerm(head: Term, body: Seq[Term]): Seq[Term] = body.last match {
    case t @ FunTerm(id: StrLit, code: String, terms: Seq[Term], compileRef: Class[_], _, _, _) =>
      Constant(StrLit("defun")) +: head +: body.init :+ Structure(StrLit("defun"), head +: t +: Nil)
    case other @ _ => throw ParserException(s"defun rule should end with a set term but $other found")
  }
  lazy val jvmFunction: PackratParser[Seq[Term]] = "defun" ~ structureTerm ~ logicalIf ~ literals ^^ {
    case predef ~ head ~ logicalIf ~ body => body.last match {
      case t @ FunTerm(id: StrLit, code: String, terms: Seq[Term], compileRef: Class[_], _, _, _) =>
        Constant(StrLit("defun")) +: head +: body.init :+ Structure(StrLit("defun"), head +: t +: Nil)
      case Constant(StrLit("true"), _, _, _)     => defunTerm(head, body.init)
      case Structure(StrLit("spec"), _, _, _, _) => defunTerm(head, body.init)
      case other @ _ => throw ParserException(s"defun rule should end with a functional term but $other found")
    }
  }
  lazy val initFunction: PackratParser[Seq[Term]] = "definit" ~ literals ^^ {
    case predef ~ body => Constant(StrLit("definit")) +: Constant(StrLit("query(_*)")) +: body // query(_*) can be anything and acts as a rule head
  }
  lazy val envFunction: PackratParser[Seq[Term]] = "defenv" ~ opt("?") ~> symbol ~ opt("(" ~ ")") ~ logicalIf ~ literals ^^ {
    case head ~ paren ~ logicalIf ~ body => body.last match {
      case Constant(StrLit("true"), _, _, _)     =>
        Constant(StrLit("defenv")) +: Variable(head) +: body.init.init :+ Structure(StrLit("defenv"), Variable(head) +: body.init.last +: Nil)
      case Structure(StrLit("spec"), _, _, _, _) =>
        Constant(StrLit("defenv")) +: Variable(head) +: body.init.init :+ Structure(StrLit("defenv"), Variable(head) +: body.init.last +: Nil)
      case _                            =>
        Constant(StrLit("defenv")) +: Variable(head) +: body.init :+ Structure(StrLit("defenv"), Variable(head) +: body.last +: Nil)
    }
  }

  //lazy val funTerm: PackratParser[Term] = opt("java" | "scala") ~ "`" ~ """[^`\\]*(?:\\.[^`\\]*)*""".r <~ "`" ^^ {
  lazy val funTerm: PackratParser[Term] = opt(symbolConstant) ~ "`" ~ """[^`\\]*(?:\\.[^`\\]*)*""".r <~ "`" ^^ {
    case None ~ lParen ~ body                 => funTermHelper(body)
    case Some(jvmInterpreter) ~ lParen ~ body if((jvmInterpreter == "java") | (jvmInterpreter == "scala")) =>
      funTermHelper(body, s"${jvmInterpreter}")
    case Some(jvmInterpreter) ~ lParen ~ body => throw ParserException(s"Unsupported JVM interpreter language: $jvmInterpreter")
  }

  import java.util.regex.Pattern.quote
  def stripMultiComments(str: String, s: String = "/*", e: String = "*/") = str.replaceAll("(?s)" + quote(s)+".*?" + quote(e), "")
  def stripSingleComments(str: String, markers: String = "//") = str.takeWhile(!markers.contains(_)).trim

  @inline
  def funTermHelper(bodyWithComments: String, lang: String = "scala"): FunTerm = {
    // remove duplicates
    // group(1) matches with the Variable without dollar
    val body = stripMultiComments(stripMultiComments(bodyWithComments), "//", "\n")
    val args: Seq[String] = globalVariablePattern.findAllIn(body).matchData.collect {
      case m if !m.group(1).isEmpty => m.group(1) // to handle cases where println(s"$$Self") inside ``.
    }.toSeq.distinct
    val argsWithDollar = args.map(arg => "$" + arg).toArray
    val argsWithQ      = args.map(arg => Variable("?" + arg))
    //val argsWithDollar = args.map(_.toString).toArray
    val compiledRef = jvmContext(lang).compile(body, argsWithDollar)
    FunTerm(StrLit(s"_${lang}"), body, argsWithQ, compiledRef)(jvmContext(lang))
  }

  //============== Set form ================================//
  lazy val setTerm: PackratParser[Term] = immutableSetTerm | mutableSetTerm

  lazy val immutableSetTerm: PackratParser[Term] = "{" ~> "{" ~ opt("""[^}\\]*(?:\\.[^}\\]*)*""".r) ~ "}" <~ "}" ^^ {
    case lparen2 ~ None ~ rparen1                   =>
      Constant(StrLit("nil"))
    case lparen2 ~ Some(slogSource) ~ rparen1       =>
      setTermHelper(slogSource, None, immutable = true)
  }

  lazy val mutableSetTerm: PackratParser[Term] = opt(symbolConstant | variable) ~ "{" ~ opt("""[^}\\]*(?:\\.[^}\\]*)*""".r) <~ "}" ^^ {
    case None ~ lparen ~ None                    =>
      Constant(StrLit("nil"))
    case None ~ lparen ~ Some(slogSource)        =>
      setTermHelper(slogSource, None)
    case Some(name) ~ lparen ~ None             =>
      Constant(StrLit("nil"))        // TODO: is this okay? Under what conditions, we do need to post an empty set?
    case Some(name) ~ lparen ~ Some(slogSource) =>
      setTermHelper(slogSource, Some(name))
  }

  private def setTermHelper(slogSourceWithComments: String, name: Option[Term], immutable: Boolean = false): SetTerm = {
    //val slogSource = stripMultiComments(stripMultiComments(slogSourceWithComments), "//", "\n")
    val slogSource = slogSourceWithComments

    val nameMayBe: Option[Term] = if(immutable) Some(Variable("%ImmutableHash")) else name
    // group(1) matches the variable without dollar
    val args: Seq[String] = {globalVariablePattern.findAllIn(slogSource).matchData.collect {
      case m if !m.group(1).isEmpty => m.group(1)   // to handle cases where println(s"$$Self") inside ``.
    }.toSeq :+ "Self" :+ "SelfKey"}.distinct

    val argsWithQ: Seq[Term] = args.map{x => Variable("?" + x)}
    val argsMap: Map[StrLit, Term] = argsWithQ.map {term => (term.id, term)}.toMap

    val unsignedUnBoundCredential: UnsignedUnBoundCredential = {
      SafelogParserContext("Self").parseUnsignedCredential(slogSource, argsMap, nameMayBe, immutable)
    }

    // setName is a hash of its contents -- helping for testing
    val setName = safe.safelang.model.Identity.base64EncodeURLSafe(
      safe.safelang.model.Identity.hash(slogSourceWithComments.getBytes("UTF-8"), "MD5")
    )
    SetTerm(setName, args.map(x => StrLit(x)), argsWithQ, unsignedUnBoundCredential)(safelogContext)
  }

  /*
  lazy val payload: PackratParser[Term] = encryptedTerms | signedData

  lazy val encryptedTerms: PackratParser[Term] = repsep(encryptedTerm, logicalAnd) ^^ {
    case terms => Structure(StrLit("encrypted"), terms)
  }

  lazy val encryptedTerm: PackratParser[Term] = "recipientId" ~> "(" ~ symbolConstant ~ ")" ~ logicalAnd ~ "encryptedData" ~ "(" ~ (variable | symbolConstant) <~ ")" ^^ {
    case lParen ~ recipientIdValue ~ rParen ~ lAnd ~ eData ~ lParen2 ~ encryptedDataValue =>
      Structure(StrLit("recipientId"), recipientIdValue +: encryptedDataValue +: Nil)
  }

  lazy val signedData: PackratParser[Term] =
    "signedData" ~ "(" ~ repsep(setTerm | structureTerm | variable | constant, logicalAnd) ~ ")" ~ logicalAnd ~ "signature" ~ "(" ~ (variable | symbolConstant) <~ ")" ^^ {

    case funct ~ lParen ~ terms ~ rParen ~ lAnd ~ sig ~ lParen2 ~ sigValue =>
      Structure(StrLit("signedData"), terms +: Structure(StrLit("signature"), sigValue +: Nil) +: Nil)
  }
  */

  lazy val symbolConstant: PackratParser[Term] = singleQuotedString | constantString | doubleQuotedString

  lazy val certificate: PackratParser[SetTerm] = opt((singleQuotedString | symbol | "?" | "_") <~ typeDelimiter) ~ opt(opt(typeDelimiter) ~ (symbol | singleQuotedString) <~ attrMapDelimiter) ~ (signedCertificateTerm) ^^ {
    case None ~ None ~ SetTerm(id, argRefs, args, signedCred, _, _, _)                 =>
      SetTerm(id, argRefs, args, signedCred, StrLit("nil"), termType)(safelogContext)
    case None ~ Some(None ~ attrName) ~ SetTerm(id, argRefs, args, signedCred, _, _, _)     =>
      SetTerm(id, argRefs, args, signedCred, StrLit(attrName.toString), termType)(safelogContext)
    case None ~ Some(dlm ~ tpe) ~ SetTerm(id, argRefs, args, signedCred, _, _, _)      =>
      SetTerm(id, argRefs, args, signedCred, StrLit("nil"), StrLit(tpe.toString))(safelogContext)
    case Some(attrName) ~ None ~ SetTerm(id, argRefs, args, signedCred, _, _, _)            =>
      SetTerm(id, argRefs, args, signedCred, StrLit(attrName.toString), termType)(safelogContext)
    case Some(attrName) ~ Some(dlm ~ tpe) ~ SetTerm(id, argRefs, args, signedCred, _, _, _) =>
      SetTerm(id, argRefs, args, signedCred, StrLit(attrName.toString), StrLit(tpe.toString))(safelogContext)
  }

  lazy val signedCertificateTerm: PackratParser[SetTerm] = symbolConstant ~ "(" ~ "signedData" ~ "(" ~ version ~ logicalAnd ~ speakerStmt ~ logicalAnd ~ subjectStmt ~ logicalAnd ~ validity ~ logicalAnd ~ credential ~ logicalAnd ~ signatureAlgorithm ~ ")" ~ logicalAnd ~ signature ~ ")" ~ "." ^^ {

    case id ~ lParen1 ~ signedDat ~ lParen2 ~ version_ ~ and01 ~ speakerStmt_ ~ and3 ~ subjectStmt_ ~ and4 ~ validity_ ~ and6 ~ signedSetTerm_ ~ and7 ~ sigAlg ~ rParen1 ~ and8 ~ signature_ ~ rParen2 ~ dot =>

     val setTerm = if(signedSetTerm_._3 == "?Encrypted") { // if name matches the built-in name
         /*
         val (name: String, setTermStr: String, immutable: Boolean) = decryptSetTerm(
             subjectStmt_._1
           , subjectStmt_._3
           , signedSetTerm_._4
           , subjectStmt_._4
         )
         parseSignedCredential(s"${speakerStmt_._1}", name, setTermStr)
         */

         throw new UnSafeException(s"Not yet implemented")
       } else {
         // TODO: XXX Note -- ignoring the slog type for now
         val name: String = (signedSetTerm_._1, signedSetTerm_._2, signedSetTerm_._3) match {
           case ("nil", "nil", "nil")            => ""
           case ("nil", "nil", x)                => x
           case ("nil", tpe, x) if !x.isEmpty    => s"#${tpe} -> '$x'"
           case (idToken, tpe, x) if !x.isEmpty  => s"${idToken} #${tpe} -> '$x'"
           case ("nil", tpe, x)                  => s"#${tpe} -> "
           case (idToken, tpe, x)                => s"${idToken} #${tpe} -> "
         }
         //parseSignedCredential(s"'${speakerStmt_._1}'", name, signedSetTerm_._4)
         //parseSignedCredential(s"${speakerStmt_._1}", name, signedSetTerm_._4)
         safe.safelang.Parser.parseSignedCredential(s"${subjectStmt_._1}", name, signedSetTerm_._4)
       }

      val principalSubject = setTerm.principal match {
        case None     => None
        case Some(p)  => Some(Subject(p))
      }

      val signedCredential = SignedCredential(
          id.id.name
        , version_
        , SpeakerStmt(speakerStmt_._1, speakerStmt_._2, speakerStmt_._3)
        , SubjectStmt(subjectStmt_._1, subjectStmt_._2)
        , Validity(validity_._1, validity_._2)
        , setTerm.name
        , setTerm.assertions
        , sigAlg
        , signature_
        , setTerm.queries
        , setTerm.links
        , principalSubject
        , setTerm.speaksFor
        , setTerm.speaksForOn
        , setTerm.setData
        , signedSetTerm_._5
      )

      SetTerm(id.toString, signedCredential)(safelogContext)
  }

  lazy val version: PackratParser[String] = "version" ~ "(" ~ symbolConstant ~ ")" ^^ {
    case enc ~ lParen ~ value ~ rParen => value.id.name
  }
  lazy val speakerStmt: PackratParser[Tuple3[String, String, String]] = "speaker" ~ "(" ~ symbolConstant ~ logicalAnd ~ symbolConstant ~ logicalAnd ~ symbolConstant ~ ")" ^^ {
    case enc ~ lParen ~ speaker ~ land ~ principal ~ land2 ~ speaksForRef ~ rParen =>
      (speaker.id.name, principal.id.name, speaksForRef.id.name)
  }
  lazy val subjectStmt: PackratParser[Tuple2[String, String]] = "subject" ~ "(" ~ symbolConstant ~ logicalAnd ~ symbolConstant ~ ")" ^^ {
    case enc ~ lParen ~ subject ~ land2 ~ principal ~ rParen =>
      (subject.id.name, principal.id.name)
  }
  lazy val recipientStmt: PackratParser[Tuple4[String, String, String, String]] = "recipient" ~ "(" ~ symbolConstant ~ logicalAnd ~ symbolConstant ~ logicalAnd ~ symbolConstant ~ logicalAnd ~ symbolConstant ~ ")" ^^ {
    case enc ~ lParen ~ subject ~ land2 ~ principal ~ land3 ~ sharedEncryptedKey ~ land4 ~ encryptionAlgorithm ~ rParen =>
      (subject.id.name, principal.id.name, sharedEncryptedKey.id.name, encryptionAlgorithm.id.name)
  }
  lazy val validity: PackratParser[Tuple3[String, String, String]] = "validity" ~ "(" ~ symbolConstant ~ logicalAnd ~ symbolConstant ~ logicalAnd ~ symbolConstant ~ ")" ^^ {
    case enc ~ lParen ~ notBefore ~ land ~ notAfter ~ rand ~ refresh ~ rParen => (notBefore.id.name, notAfter.id.name, refresh.id.name)
  }
  lazy val signatureAlgorithm: PackratParser[String] = "signatureAlgorithm" ~ "(" ~ symbolConstant ~ ")" ^^ {
    case enc ~ lParen ~ value ~ rParen => value.id.name
  }
  lazy val signature: PackratParser[String] = "signature" ~ "(" ~ symbolConstant ~ ")" ^^ {
    case enc ~ lParen ~ value ~ rParen => value.id.name
  }

  lazy val credential: Parser[(String, String, String, String, Boolean)] =
    opt((singleQuotedString | symbol | "?" | "_") <~ typeDelimiter) ~ opt(opt(typeDelimiter) ~ (symbol | singleQuotedString) <~ attrMapDelimiter) ~ (credentialTerm) ^^ {

    case None ~ None ~ setContents                   =>
      ("nil", termType.toString, setContents._1, setContents._2, setContents._3)
    case None ~ Some(None ~ attrName) ~ setContents       =>
      (attrName.toString, termType.toString, setContents._1, setContents._2, setContents._3)
    case None ~ Some(dlm ~ tpe) ~ setContents        =>
      ("nil", tpe.toString, setContents._1, setContents._2, setContents._3)
    case Some(attrName) ~ None ~ setContents              =>
      (attrName.toString, termType.toString, setContents._1, setContents._2, setContents._3)
    case Some(attrName) ~ Some(dlm ~ tpe) ~ setContents   =>
      (attrName.toString, tpe.toString, setContents._1, setContents._2, setContents._3)
  }

  lazy val credentialTerm: Parser[(String, String, Boolean)] = signedSetTerm | encryptedSetTerm

  lazy val signedSetTerm: Parser[(String, String, Boolean)] = signedImmutableSetTerm | signedMutableSetTerm

  lazy val signedImmutableSetTerm: PackratParser[(String, String, Boolean)] =
    opt(symbolConstant) ~ "{" ~ "{" ~ opt("""[^}\\]*(?:\\.[^}\\]*)*""".r) ~ "}" <~ "}" ^^ {

    case Some(setName) ~ lparen1 ~ lparen2 ~ None        ~ rparen1 => (setName.id.name, "", true)
    case Some(setName) ~ lparen1 ~ lparen2 ~ Some(stmts) ~ rparen1 => (setName.id.name, stmts, true)
    case None          ~ lparen1 ~ lparen2 ~ Some(stmts) ~ rparen1 => ("", stmts, true)
    case None          ~ lparen1 ~ lparen2 ~ None        ~ rparen1 => throw ParserException(s"set cannot be empty")
  }

  lazy val signedMutableSetTerm: PackratParser[(String, String, Boolean)] =
    opt(symbolConstant) ~ "{" ~ opt("""[^}\\]*(?:\\.[^}\\]*)*""".r) <~ "}" ^^ {

    case Some(setName) ~ lparen ~ None        => (setName.id.name, "", false)
    case Some(setName) ~ lparen ~ Some(stmts) => (setName.id.name, stmts, false)
    case None          ~ lparen ~ Some(stmts) => ("", stmts, false)
    case None          ~ lparen ~ None        => throw ParserException(s"set cannot be empty")
  }

  lazy val encryptedSetTerm: Parser[(String, String, Boolean)] = (symbolConstant) ^^ {
    case encStr => ("?Encrypted", encStr.id.name, false)
  }

  def decryptSetTerm(
      recipientId: String
    , encryptedSharedKey: String
    , encryptedSetTerm: String
    , encryptionAlgorithm: String
  ): Tuple3[String, String, Boolean] = {

    /** envContext passed for Parser?
    val principal: model.Principal = safe.safelang.InferenceService.envContext.get(StrLit("Selfie")) match {
      case Some(p: model.Principal) => p
      case _                        => throw ParserException(s"cannot sign since principal (Selfie) is undefined")
    }
    */

    //=============== TODO: TEMP ================//
    val principal: model.Principal = if(encryptionAlgorithm != "true") {
      throw ParserException(s"Not implemented; envContext import issue needs to be resolved first")
    } else throw ParserException(s"Not implemented; envContext import issue needs to be resolved first")
    //=============== TEMP ================//

    val signedData: String = SafelogParserContext(principal.subject.toString).parseEncryptedSignedCredential(
        principal
      , recipientId
      , encryptedSharedKey
      , encryptedSetTerm
      , encryptionAlgorithm
    )
    logger.debug(s"SignedData: $signedData")
    parseSignedSetTerm(signedData)
  }

  /*
  def parseSignedCredential(speaker: String, name: String, stmts: String): SignedCredentialHolder = (name, stmts) match {
    case ("", "") => throw ParserException(s"identity set cannot be empty")
    case ("", _) => SafelogParserContext(speaker).parseSignedCredential(speaker, "", stmts)
    case (_, "") => SignedCredentialHolder(name, "", Map.empty[Index, Set[Statement]], Nil, Nil, None, Nil, Nil)
    case _       => SafelogParserContext(speaker).parseSignedCredential(speaker, name, stmts)
  }
  */

  //=========== Parsing certificate from safesets =====//
  private[this] def parseSignedSetTerm(source: String): Tuple3[String, String, Boolean] = {
    val res = parseAll(signedSetTerm, source) match {
      case Success(result, _) =>  // result: Term
        result
      case failure: NoSuccess => throw ParserException(s"${failure.msg}")
    }
    res
  }

  private[safe] def parseCertificate(source: String): SetTerm = {
    val res = parseAll(certificate, source) match {
      case Success(result, _) =>  // result: Term
        result
      case failure: NoSuccess => throw ParserException(s"${failure.msg}")
    }
    res
  }

  private[safe] def parseCertificate(source: java.io.Reader): SetTerm = {
    val res = parseAll(certificate, source) match {
      case Success(result, _) =>  // result: Term
        result
      case failure: NoSuccess => throw ParserException(s"${failure.msg}")
    }
    res
  }

  private[safe] def parseFileAsCertificate(fileName: String): SetTerm = {
    val source = new java.io.BufferedReader(new java.io.FileReader(fileName))
    val res = parseCertificate(source)
    source.close()
    res
  }

  private def parseAsSegmentsHelper(
    result: ParseResult[MutableCache[Index, MutableSet[Statement]]]
  ): Tuple4[Map[Index, Set[Statement]], Seq[Statement], Seq[Statement], Seq[Statement]] = result match {
    case Success(_result, _) =>
      val importSeq      = _result.get(StrLit("_import")).getOrElse(Nil).toSeq
      _result           -= StrLit("_import")
      val querySeq       = _result.get(StrLit("_query")).getOrElse(Nil).toSeq
      _result           -= StrLit("_query")
      val envSeq         = _result.get(StrLit("defenv0")).getOrElse(Nil).toSeq
      _result           -= StrLit("defenv0")
      val initSeq        = _result.get(StrLit("definit0")).getOrElse(Nil).toSeq
      _result           -= StrLit("definit0")
      val retractionSeq  = _result.get(StrLit("_retraction")).getOrElse(Nil).toSeq
      _result           -= StrLit("_retraction")
      val allQueries     = envSeq.map {stmt => Query(stmt.terms.tail)} ++ initSeq.map {stmt => Query(stmt.terms.tail)} ++ querySeq
      Tuple4(_result.map {kv => (kv._1, kv._2.toSet)}.toMap, allQueries, importSeq, retractionSeq)
    case failure: NoSuccess => throw ParserException(s"${failure.msg}")
  }

  override def parseAsSegments(
    source: String
  ): Tuple4[Map[Index, Set[Statement]], Seq[Statement], Seq[Statement], Seq[Statement]] = {
    parseAsSegmentsHelper(parseAll(program, source))
  }

  override def parseAsSegments(
    source: java.io.Reader
  ): Tuple4[Map[Index, Set[Statement]], Seq[Statement], Seq[Statement], Seq[Statement]] = {
    parseAsSegmentsHelper(parseAll(program, source))
  }

  override def parseFileAsSegments(
    fileName: String
  ): Tuple4[Map[Index, Set[Statement]], Seq[Statement], Seq[Statement], Seq[Statement]] = {
    val source = new java.io.BufferedReader(new java.io.FileReader(fileName))
    val res = parseAsSegments(source)
    source.close()
    res
  }
}

redpajama_set_name: RedPajamaGithub


Part II of II on how CRO is now a major player in the digital marketing mix.
If you've already read Part I, you'll know all about companies increasing their CRO budgets, the importance of optimised websites and the impact of good design – and if you haven't, it's ok. We won't judge you. Catch up here.
There has been a significant drop year-on-year in the effective measurement of Return on Investment, falling from 53% in 2013 to just 44% this time around.
This is compounded for SEO (again highlighting the issue of 'not provided'), with the effective measurement of ROI falling to 31% compared to 45% last year.
A clear barrier to this is that the vast majority (64%) of companies have no definitive tracking solution. This stands in the way of effectively measuring conversions across the different digital channels and as such, the actual value of each channel remains shrouded in mystery.
With 54% of companies surveyed operating with the flexibility to shift budgets between channels, accurate measurement is key to allow for Path to Conversion analysis and Attribution Modelling. Without this type of analysis, finding the most effective marketing mix becomes little more than trial and error or, worse yet, guesswork.
There are a growing number of solutions on the market offering this much sought after definitive view of the marketing effort. These aim to draw together all sources (even including offline) together, without the need for massive investment in bespoke, in-house business intelligence systems.
Perhaps there is a lack of awareness of the massive benefit found in using marketing attribution tools like Adometry (though Google's recent acquisition of this service might throw some curveballs) and VisualIQ for this, though this could also be a reflection of a lack of investment in analytics.
Analytics has to rate as another no-brainer – if you're not tracking things properly, how can you know what is and isn't working? Without that, you lose the ability to make the informed decisions needed to drive the marketing strategy.
The sad truth is that, in spite of the difficulties tracking ROI, investment in analytics is not currently keeping pace with the investment in the other channels. Only 39% of companies plan to increase their investment in analytics, which is below the level for the other channels.
It's vitally important that people don't lose sight of the importance of accurate analytics. The ROI of a properly implemented (and ideally definitive) tracking solution is practically limitless – without it, you can't see the ROI of anything else you do, or make the decisions that need to be made!
Harking back a couple of paragraphs to the fact that less than a third of businesses employ a definitive tracking solution, it's possibly no surprise to see that there isn't the same level of investment as given to other channels.
Looking further into the factors impacting on the ROI of the various channels, poor conversion rate was also a common issue.
The recognition of this is likely behind the growing budgets in CRO, and is certainly a positive step.
The fact that the vast majority of site optimisation will improve performance across all channels, and hence the benefits are compounded, should serve as a further reason to adopt this approach to improve the overall returns from your SEM efforts.
Other than the slight blip in the analytics budgets (and hey, there's still almost 2 in 5 increasing their budgets, so it's not all bad), this is immensely positive for anyone in the field.
Hopefully all of above should help to highlight the importance of CRO and analytics and how much sense it makes for these to continue to grow as an integral part of digital marketing.
These sorts of findings are not a massive surprise if you've been watching closely, things have been moving this way for some time, but it's particularly good to see that CRO has firmly taken root in the minds of SEM managers… And long may it continue.
The fact that budgets are moving in the right direction should mean that we can start to do bigger, better things and work to optimise more and more exciting websites.


Thornthwaite, C.W.; Stewart Sharpe, C.F.; Dosch, E.F.
Accelerated stream trenching or arroyo cutting in the Southwest during the last half century has caused widespread damage to agricultural and range lands. Under natural conditions in the Polacca Wash and in most of the Southwest, the plant cover protected the soil and retarded the flow of water off the lands, but as a result of irritations of various forms, erosion was accelerated, and short discontinuous gullies became numerous. These lengthened and became joined to form continuous trenches. This gully cutting has been most conspicuous and destructive, but sheet erosion and wind erosion are also reducing the value of the lands. Various workers have attributed the current erosion damage to climatic change, but careful analysis of the climate shows that there has been no significant climatic change in the Southwest in the last 2000 yrs. The accelerated erosion that is damaging the lands of the Southwest appears to have been caused by man, and by proper methods man can check it and reclaim the land for his use.


When Nicolas and Cheryl Went To i4C 2016 - Good Food RevolutionGood Food Revolution | Wine is food.
Winemakers Nicolas Potel and Cheryl Francis preparing for their trip to Niagara for this year's i4C.
There's nothing like accosting unexpecting visiting Winemakers on the street and asking them a series of unsolicited questions… and that's exactly what we did with Nicolas Potel (Domaine de Bellene, Burgundy, France) and Cheryl Francis (Rex Hill/ A to Z, Oregon, USA) this afternoon.
The two were just about to head off to this year's i4C conference, and so we wanted to find out just why they had chosen to be involved.
Both Nicolas and Cheryl's wines are available through Nicholas Pearce Wines.
Nicholas Pearce Wines are a Good Food Fighter.
Edinburgh-born/Toronto-based Sommelier, consultant, writer, judge, and educator Jamie Drummond is the Director of Programs/Editor of Good Food Revolution… And those were so bloody delicious rosati.


Intense and brilliant ruby red. This wine proves its richness through the slow movement of the wine rotating in the glass. Fine, complex, full of hints of ripe red fruits, and spices that come from the barrel ageing period. Of great structure, full, harmonious, and long lasting.Serve with noble meats (such as the fiorentina steak) and aged cheeses. Well matched also with Indian and Chinese spicy and tasty dishes.


15 primary schools have been awarded Changemaker status in Ireland over the past three years.
We have launched a new Changemaker Schools newsletter to focus on highlighting our current schools as well as some key updates in the education sector across the globe.
The latest editions of the news letter will be posted below.
Sign up to receive an email when we publish the next Changemaker Schools newsletter.
Click through to our global map below to meet the Changemaker Schools!


text:
LegalReader.com · Legal News, Analysis, & Commentary
Lawsuits & Litigation
Sacklers Want Everyone to Believe Addicts are the Real Problem
Sara E. Teller — April 26, 2019
Photo by Kal Visuals on Unsplash
Tweet this Story
Another Sackler email proves the family wants to deflect attention away from its involvement in the opioid crisis.
"We have to hammer on abusers in every way possible. They are the culprits and the problem. They are reckless criminals," Richard Sackler, part of the family that runs Purdue Pharma, said in an email about people who become addicted to the opioid his company manufactured, OxyContin. It's just one of many uncovered by investigators working on a lawsuit filed against Purdue Pharma for its role in the opioid epidemic, which proves the Sacklers wanted everyone to believe those who used its drug were the problem.
In 2007, Purdue pleaded guilty to misleading medical professionals and the public about the addictive side effects of its drug, and this new lawsuit, brought by New York and Massachusetts, brings forward allegations that, the company not only "continued to aggressively distribute opioids, but also set their sights on addiction treatment, attempting to profit from a life-threatening disease they helped spread."
Trauma and opioid addiction are closely linked, with some estimates indicate as many as two out of three people with PTSD may also have a substance use disorder. It is difficult to stomach the fact that Richard Sackler includes this population in the "reckless criminals" category. Addiction itself is a recognized medical condition that requires treatment.
Photo by Ron Dyar on Unsplash
"We don't treat someone with a life-threatening, chronic relapsing illness as a criminal; we treat them with compassion and respect and get them the best care possible as quickly as possible," said Justine Waldman, the medical director of the REACH Project, headquartered in Ithaca, New York. "Any derogatory term to describe someone with opioid use disorder is not only unhelpful, it's stigmatizing and hurtful and contributes to increased loss of life."
Purdue and other large pharmaceutical manufacturers are currently facing numerous lawsuits. Those filed by New York and Massachusetts appear especially capable of holding Purdue accountable for its actions.
Massachusetts' Attorney General Maura Healey clearly wants to hold the wealthy family responsible. "Their push to boost sales," the state's lawsuit said, "came even after staff showed family members on Purdue's board a map correlating suspected illegal prescribers and reports of opioid poisonings in 2011." The filing further states that Richard Sackler, as Purdue's president, in a 2001 email argued the company needed to shift responsibility away from Purdue and "hammer on the abusers in every way possible."
In an email included in the state's complaint, he said, it "implies a danger of untoward reactions and hazards that simply aren't there" and he pushed for a "less threatening" way to describe Purdue's opioids, which wouldn't cause such a problem.
Leo Beletsky, an associate professor of law and health sciences at Northeastern University and the faculty director of the Health in Justice Action Lab, explains, "That's the fundamental model of the US pharmaceutical industry: They oftentimes treat the disease and then treat the side effects of their own medication."
This certainly seems to be the case with the Sacklers. The family and Purdue Pharma recently agreed to a $270 million settlement with the state of Oklahoma in its lawsuit claiming OxyContin contributed to an opioid epidemic. This marked the first settlement in a number of civil suits accusing Purdue Pharma of deceptive marketing in its promotion of the highly addictive opioid.
Addiction is a disease. But an opioid executive wants you to think it's a crime.
Massachusetts Says the Sackler Family at Fault for the Epidemic
Purdue and Sacklers Settle Oklahoma Opioid Case for $270 Million
Behind the Story of Ghostbed vs. Purple Mattress Lawsuit
How Green Are Those New Cassava Bags?
Amputee's Third Attempt at Holding Medical Personnel Responsible Pays Off
2018 Top Product Liability Cases
Dioxane Plume Spreading in Ann Arbor, MI
About Sara E. Teller
Sara is a credited freelance writer, editor, contributor, and essayist, as well as a novelist and poet with over sixteen years of experience. A seasoned publishing professional, she's worked for newspapers, magazines and book publishers in content digitization, editorial, acquisitions and intellectual property. Sara has been an invited speaker at a Careers in Publishing & Authorship event at Michigan State University and a Reading and Writing Instructor at Sylvan Learning Center. She has an MBA degree with a concentration in Marketing and is currently pursuing an MA in Clinical Mental Health Counseling, concentrating in Substance Abuse and Addictions. Sara is also certified in children's book writing, HTML coding and social media marketing. Her fourth book, Narcissistic Abuse: A Survival Guide was released in December 2017 and is now available on Amazon. For more information, please visit sarateller.com.
Read more articles by Sara E. Teller
Confidential Settlement Reached in Case Involving Death of 11-Year-Old BoyDriver Plants Bomb After His Girlfriend is Honked At
addictaddictionaddictiveAGattorney generalcrisisdrug makerdrug manufacturerepidemicissuelawlawsuitMassachusettsNew YorkOklahomaopioid crisisopioid epidemicOxyContinproblemproblemsPurdue Pharmasuittreattreatment
Legal News, Analysis, & Commentary
About Legal Reader
Legal Reader is devoted to protecting consumers. We take pride in exposing the hypocrisy of corporations, other organizations, and individuals whose actions put innocent people in harm's way. We are unapologetic in our dedication to informing the public and unafraid to call out those who are more focused on profits than people's safety.
© 2000-2020 LegalReader.com


Our favorite TV shows of the season have ended and now we are trying to figure out what else to watch. American Idol, Lost, Greys Anatomy, Desperate Housewives have either begun their summer re-runs or on hiatus until the fall. The networks are working a series of reality shows such as "Last Comic Standing" and "Big Brother."
Cable TV has come up with a summer line-up. These shows include TNT's "The Closer," FX's "Rescue Me," USA's "The Dead Zone" and HBO's "Entourage" and "Deadwood." ABC has also offered free downloads of last seasons TV shows on their website.
There are other new and returning shows planned for this summer. CBS is presenting "Game Show Marathon" which airs at Thursday only beginning June 15. Host Ricki Late will gather a B-list of celebrities playing classic TV game shows such as "The Match Game" and "The Price Is Right."
ABC will offer "How to Get the Guy" which will air 9 p.m. Mondays. This show follows four single women in San Francisco looking for Mr. Right. "Master of Champions" will also air on ABC at 7 p.m. Thursdays. This is a variety show which spans the globe to feature such unusual contest categories as Interpretive Pizza Tossing and an Extreme Unicycle Obstacle Course.
The drama series "Windfall" will appear on NBC this summer. This starts Luke Perry and Jason Gedrick who follow the lives of 20 lottery winners. This is the only new drama series offered by the networks. NBC will also offer a reality show called the "Treasure Hunters" which puts together teams that travel the world competing in variety of physical and mental challenges such as puzzle solving and clue gathering in a "Da Vinci Code"-styled quest. This show will air 8 p.m. Mondays. Simon Cowell has produced the "America's Got Talent" show for NBC which will 8 air p.m. Wednesdays. It will be hosted by Regis Philbin and David Hasselhoff will be one of the judges.
The USA Network will be offering "Psych" at 9 p.m. on Fridays. This is a one hour drama series staring James Roday as a phony psychic who uses his well-honed powers of observation as a private investigator. The 4400 will also be returning this summer to USA at 8 p.m. Sundays.
Bravo will be offering a reality TV show called "Work Out". This show follows the personal and professional lives of some Beverly Hills fitness trainers. It will air Tuesdays at 9 p.m. The SciFi channel is also offering a reality show called "So You Want to Be a Superhero?" This show challenges the wannabes to live like their heroes and compete in challenges. Marvel Comics guru Stan Lee will judge. So far, there is no time announced for this show.
NBC will be bringing back some shows including "Fear Factor" and "Last Comic Standing". FX is bringing back "Rescue Me" staring Denis Leary as a New York firefighter. Bravo will be bringing back "Celebrity Poker Showdown". The celebrities include Jason Alexander, Bryan Cranston, Jennifer Tilly, Macy Gray, Glencoe native Fred Savage and Palos native Robin Tunney. The Bravo shows "Queer Eye for the Straight Guy" and "My Life on the D List" are also coming back.
HBO is bringing back "Deadwood" and "Entourage". Deadwood, which airs 8 p.m. Sundays, is centered on a wild-west town and its lawlessness. Entourage will appear on Sundays at 9:30 p.m.


Holi is a religious festival celebrated by Hindus all over the world. It is considered as a second biggest festival on the Hindu calendar after Diwali. It is also known as the Festival of Colors. Indian Holi Festival is a once-a-year event renowned for fun and ubiquitous color powder. It is one of the best occasions to experience India at its happiest. A Good Collection Of Happy Holi Wishes and quotes.
Holi for the year 2019 is celebrated/ observed on sundown of Wednesday, March 20th ending at sundown on Thursday, March 21st.
Holi falls in the months of February and March each year. It is a two day Spring festival with the first day called Chhoti or Holika Dahan and the second day called Dhuleti or Rangwali Holi. The festival celebrates sharing and love as well as colors.
The festival of colors, Holi, is the most vibrant of all Hindu festivals. It marks the end of winter in India and welcomes the spring season. On this festive day, people play with colors, meet and greet one another and create new beginnings. But do you know the real reason why Holi is celebrated? Here's all you need to know about this colorful festival and what you can look forward to during the upcoming Holi in India.
. The date of this festival varies as per the Hindu calendar every year. Earlier, this festival was only celebrated in India and Nepal. In recent times, it is celebrated all over Europe and North America where there is a huge Indian population.
The most Indian state has their own way of celebrating Holi. The celebration begins with Holika bonfire on the night before Holi. People gather, sing and dance around the bonfire and pray for the safety of their loved ones. The process of the bonfire is the same all over.
The next day of Holi begins early morning where people are free to play with colors. Participants play, chase and color each other with dry powder and colored water, with some carrying water guns and colored water-filled balloons for their water fight. This celebration is accompanied by songs and dance in a colorful and joyful atmosphere.
Legend has it that once, there was a powerful king named Hiranyakashipu. He was a devil and was hated for his cruelty. He considered himself to be God and wanted everybody in his kingdom to worship him like one.
However, his own son, Prahlada, was a devotee of Lord Vishnu and refused to worship his father. Angry with the disobedience of his son, Hiranyakashipu tried killing his son a number of times, but nothing worked. He then asked his evil sister, Holika, for help.
Holika possessed a special power of being immune to fire. So, to kill Prahlada, she tricked him into sitting with her on a pyre. But due to her evil intentions, her power became ineffective and she was burned to ashes.
On the other hand, Prahlada gained this immunity and was saved. This is why the first day of Holi is celebrated as Holika Dahan and symbolizes the victory of good over evil.
In the region of Braj (where Lord Krishna grew up) in Uttar Pradesh, Holi is celebrated until the day of Rangpanchmi as a huge festival, in memory of the devotional love of Krishna and Radha.
A local legend is associated with this as well. When Krishna was a baby, he acquired a distinctive blue skin color after drinking the poisoned breast milk of the she-demon, Putana.
Later, when he became young, he would often feel sad about whether the fair-colored Radha or other girls in the village would ever like him because of his dark colour.
Giving in to his desperation, Krishna's mother asked him to go and colour Radha's face with any colour he wanted to. So when Krishna applied colour to Radha, they both became a couple, and since then, people have started playing with colours on Holi.
The second day of Holi is called Rangwali Holi, Dhulandi, Dhulandi, Phagwah or Badi Holi. This is the day when people apply colours to one another, party and enjoy.
Children and youngsters play in groups with dry colours called abir or gulal, pichkaris (water guns), water balloons filled with coloured solutions and other creative things.
You might even find groups of people with drums and other musical instruments on the streets, dancing and singing their way from one place to another.
Gujiya is a special sweet, which is made in every household in India during Holi. It is a dumpling filled with khoya (a dairy product) and dried fruits. The customary drink of Holi is thandai, which generally contains bhang (marijuana). Other mouth-watering delicacies enjoyed are gol gappe, papri chaat, dal kachori, kanji vada, dahi bhalle, chole bhature, and variety of namkeen.
To best experience the festival of Holi in India, you must go to Uttar Pradesh, and more specifically, to those areas that are closely associated with Lord Krishna like Braj, Mathura, Vrindavan, Barsana, and Nandgaon.
All of these places become quite touristic during the celebrations. The town of Barsana celebrates Lath Mar Holi, where women playfully beat men with sticks while men run around with shields to protect themselves. This becomes even more fun and interesting when people together indulge in singing and dancing.
Happy Holi Messages 2019 – Another method for making your Holi 2019 incredible with these Famous Happy Holi Quotes 2019 and Sayings. In fact, Holi Sayings 2019 enable individuals to express their adoration and warmth to somebody whom they give it a second thought.
Holi is considered as a new beginning by numerous individuals and the vast majority invest quality energy with their cherished. It is the ideal time to acknowledge what your friends and family need and satisfy their necessities. It is the additionally an opportunity to raise a toast as an indication of observing Holi terrifically into lives.
Celebrate the happy festival of Holi with your beloved sister, friends, Boss and wife with the lovely Holi wishes 2019 messages. We have got Joyful Holika Dahan wishes 2019 that you can share on the occasion for giving a true treat to the eyes of everyone.
Mousam achha Ho, Kaliyan kacchi ho, hamari dosti Sachi Ho, Bhagwan se Dua Hai Kya Aap ka holi ka tyohat lae Rango ki bahar.
Holi Ne dia Satrangi Rango ki bauchar, dher sari khushiyon se Bhara Hua Ka Jeevan Ka Har Saal, Yahi Dua Hai Hamari karbar ki Saat rangon Mein Samaye aapka Ghar Sansar.
jis trah jungle ka raja Kabhi Chupke Se Shikar nahi karte, darpok Khule Aam vaar nahi karte, Hum Woh shaksiyat Hai Mere Dost Jo aap ko Badhai dene ke liye Holi ka Intezar nahi karte.
Es holi pe phir unhe rangne jaana hain…….!!!
Laal rang ke gulal se tere gaalon ko nikhar du.
Teri chahat me sanam khud ko es kadar sawar du.
Udd rahe hai jo raang un gulalon ki fuhar du.
Aa mere pass tujhe apne hathon se sawar du.!!
Pyar ke rang se bharo pichkari, sneh ke rang do duniya sari, ye rang na jane koi jaat na koi boli, aapko mubarak ho aapno ki holi.
Puranmashi ke din Chand Se Boli Chandni ki Bhar Do Sabki , Chand Ne Bhi Chandni ki Mannat Karishma ka aur aagaya Holi Sundar aur Pawan Tohar. Happy Holi.
May the colours of Holi take away all your worries and sorrows and replace them with joy and happiness. Happy Holi!
Peace from white, Power from red, Knowledge from yellow, Development from green, Love from pink. May this Holi add all colors in your life.
Holi the best time when you can come back in touch with close relationships andrevive them again by expressing best of affection and colouring one another with happy colours of Holi. It's time to say that you are all about studying colours of love and affection.
If I had the control upon Holi to help you to smile better, I would have sent the most brightest colours for wishing you Happy Holi.
Express The Affection With Colors On This Brilliant Celebration.
All The Colors That Are On You Are Of Adoration.
Just like a red rose that fills the world with beauty & fragrance… You have made my life so beautiful by being in it.
On Holi, the festival of colors & joy I wanna say thank you for all the love & smiles you've brought to my life. Happy Holi.
A true and caring relation doesn't have to speak loud, a soft sms is just enough to express the heartiest feelings. Enjoy the festival of Holi with a lot of fun.
A true and caring relation doesn't have to speak loud, a soft message is just enough to express the heartiest feelings. Enjoy the festival of Holi with a lot of fun.
Holi is a time to reach out with the colors of joy. It is the time to love and forgive. It is the time expresses the happiness of being loved and to be loved through colors.
Holi without Rangoli is incomplete just like my life without you is empty. Dil Ke darwaje ek baar Mere Liye khol mein Lekar Aaya Hoon Tere Liye Happy Holi ka Sandesha.
Just like the beautiful red rose to fill up the entire world with their unparalleled beauty and fragrance, in the same way my friend that the festival of Holi make your life explain me Beautiful by colouring it in different ways.
I pray that God give you joy and most prosperous Holi forfilling your life with all the happiness and sweet moments.
Lucky are the ones who can admirethe goodness in others. Never envy somewhat others Have instead keep yourself in peace and joy irrespective of the circumstance. May you have plenty of peace and prosperity on this only.
Different culture, different nation, different people and lots of celebration on a common festival called Holi.
HOLI IS NOT ONLY ABOUT COLORS AND SWEETS. IT REMINDS OF THE DIVINE AND ETERNAL LOVE OF KRISHNA AND RADHA. HAPPY HOLI!
ALL HOLY WISHES ON HOLI GET SOON FULL!
The spring season, during which the weather changes, is believed to cause viral fever and cold. The playful throwing of natural coloured powders, called gulal has a medicinal significance: the colours are traditionally made of Neem, Kumkum, Haldi, Bilva, and other medicinal herbs prescribed by Āyurvedic doctors.
The flowers of palash or tesu tree, also called the flame of the forest, are typical source of bright red and deep orange colours. Powdered fragrant red sandal wood, dried hibiscus flowers, madder tree, radish, and pomegranate are alternate sources and shades of red. Mixing lime with turmeric powder creates an alternate source of orange powder, as does boiling saffron (kesar) in water.
Mehendi and dried leaves of gulmohur tree offer a source of green colour. In some areas, the leaves of spring crops and herbs have been used as a source of green pigment.
Haldi (turmeric) powder is the typical source of yellow colour. Sometimes this is mixed with chickpeas, gram or other flour to get the right shade. Bael fruit, amaltas, species of chrysanthemums, and species of marigold are alternate sources of yellow.
Indigo plant, Indian berries, species of grapes, blue hibiscus and jacaranda flowers are traditional sources of blue colour for Holi.
Beetroot is the traditional source of magenta and purple colour. Often these are directly boiled in water to prepare coloured water.
Dried tea leaves offer a source of brown coloured water. Certain clays are alternate source of brown.
Species of grapes, fruits of amla (gooseberry) and vegetable carbon (charcoal) offer gray to black colours.
Thandai is embedded with the tradition of Holi. A refreshing and healthful drink thandai is savoured in the midst of the play of colours when people become a little exhausted throwing each other in the pool of coloured waters. A glass of Thandai offers instant energy and sets the mood for playing with color. Besides, when laced with the intoxicating bhang it can make one sing, dance and go wild. Infact, bhang thandai is used as a mood setter for the festival of Holi.
The tradition of thandai is particularly prevalent in North India. Banaras (now Varanasi) is called the hub for thandai. This is so as Banarasis are said to have a passion for milk-based drinks and of all the drinks thandai is said to be their specialty.
Thandai is a cooling drink usually made of purified water, sugar, seeds of watermelon and muskmelon, almonds, lotus stem seeds, cashew nut, cardamom, saunf, rose-flower, white pepper, saffron, and the very intoxicating bhang.
A spoon of bhang in the thandai makes a world of a difference. Bhang is mixed with milk, ice and cream and added to the thandai to produce a kick. While some become deliriously happy others turn as depressed as hell. Caution is needed when taking a bhang thandai as overdose might not prove to be good.
Drinking thandai in Holi also gels with the weather as in North temperature runs high at that time and thandai is a coolant. Although home-made thandais always tastes better, in Banaras and elsewhere in India, it is now possible to buy commercial concentrates and make instant thandais.
As we already discussed above, Holi is a common festival of colors that is celebrated in India during the season of spring. 'Rangwali Holi' is most famous in India. Since some of the villages in that state have peaceful and colorful lives of the people. It is more expected to see the wonderful architectural monuments in the world. Most often, it is situated in the northwestern part of India and share the holi wishes 2019. Colored powders in the faces are smear. The kids spray the water with colored to passes by the other.
Holi Puja is the most important of the special day is performed by the Rangwali Holi'. Most of the puja items care use to Holika Pujan. These puja items used in Puja'- a bowl full of water, Roli' 'Akshat' Dhoop, Agarbatti', turmeric powder or pieces, raw cotton thread, 'gulal' powder, beads prepared from cow dung, unbraked 'moong' lentil, 'batasha' and coconut. Moreover, these puja items taken into pure and cultivated crops like gram and wheat.
After performing the Holika Puja is people pray for the prosperous year. This festival is celebrated in the nation together, not only celebrated by Hindus and also Sikhs, Jains, and Christians as well. holi wishes 2019, The unique of this festival is treats any kind of the peoples as equal However, the state welcomes with some useful travel agents to guide to travel along with safe.
The festival of Good" over "Bad and celebrate this victory people play with colors. This puja is a very special charity will helps you. The festival colors and happiness is amazing as well as bring your small donations god will give the many happiness to you. Holi festivals are celebrated with the Indian people. all the people sharing the holi wishes 2019 from the loved one.