Looking for 19 Best $500-$1000 Cash Advances within Rapidly Period. Effortless Credit report checks. Quickly Quick Endorsement. Straightforward Mortgage Now.
The website put together by professional web-site makers as well as many of us put them jobs to optimize stability regarding data. Along with the details from application form certainly not propagates as well as redistributes towards 3 rd folks. Could be that our services will certainly make your circumstances within the hard moment. and so we all may seek to increase companies with the aid of completely new characteristics to suit your needs. Actually understand what have funds, you'll be able to depend on people. Most of us give you personal loan till salaryday in funds. Your mortgage support can be SIMPLE in addition to QUICK!!!
19 Best , $500-$1000 Pay day loans throughout Quickly Occasion. Simply no Fax needed Straightforward Credit assessment. Effortless approval Five minutes. Take action now.
From 19 Best , you can get a lot of benefits.
Why 19 Best ? That's easy.
Start to GET STARTED NOW. 19 Best Payday Loan completely online!
19 Best – Get out of bed in order to $1000 within Quickly Period. Zero Fax needed Easy Credit Check. Very quickly Endorsement. Start now.


text:
Carrow Road braced for the hot shots
Jonathan Redhead
Published: 11:12 AM February 16, 2010 Updated: 10:54 PM October 10, 2020
Jonathan Redhead Norwich City will come face-to-face with a holy trinity of Saints on Saturday - and will be out to prove they are the top League One hotshots. Southampton's front three of Rickie Lambert, new signing Lee Barnard and Adam Lallana have bagged an impressive 56 goals between them in all competitions this season, with Lambert finding the net again at the weekend in the 4-1 home defeat to Portsmouth in the FA Cup.
Norwich City will come face-to-face with a holy trinity of Saints on Saturday - and will be out to prove they are the top League One hotshots.
Southampton's front three of Rickie Lambert, new signing Lee Barnard and Adam Lallana have bagged an impressive 56 goals between them in all competitions this season, with Lambert finding the net again at the weekend in the 4-1 home defeat to Portsmouth in the FA Cup.
That strike took his total for the campaign to 25, with Barnard on 17, all for previous club Southend, and Lallana on 14.
Remarkably, it is the same number of goals the Canaries' own attacking triumvirate of Grant Holt, Chris Martin and Wes Hoolahan have amassed, with Holt taking his total to 24 for the season, one behind Lambert, with his left-foot thunderbolt at Brighton on Saturday. Martin is on 19, with Hoolahan on 13.
And all six hitmen look set to square up to each other at Carrow Road as City look to extend their lead at the top of the division, while the Wembley-bound Saints will aim to cling on to their outside chance of claiming a place in the play-offs, despite a 10-point deduction for entering administration last year.
There should be goals on the cards as the sides have shared eight in their two games to date this season - with each encounter packing a sting in the tail.
City midfielder Stephen Hughes bagged a point for his side with a late equaliser in a 2-2 draw St Mary's back in November, but a month later the boot was on the other foot as Papa Waigo netted a last-gasp goal for the Saints to earn another 2-2 draw in the Johnstone's Paint Trophy semi-final at the same ground before the home team went onto to win on penalties.
The Saints went on to book their place in the Wembley final against Carlisle United on March 28 with victory over MK Dons last week.
However, after their FA Cup fifth round disappointment against their south coast rivals, Lallana said the Saints' focus now is all on the league and their efforts to reach the top six.
"We're out of the cup so we've got our heads back on the league for the game at Norwich," he said.
"We've got to come into training with our heads focused on that game.
"We're still on a push for the play-offs. There are 18 games to go and we've got to push to win as many games as we can and hopefully we'll sneak in there."
But Holt has warned the Saints that the Canaries are a better side at home as they look to embark on another unbeaten run following the win at the Withdean Stadium.
"Southampton will be tough - they have got a good side.
"But we are a different animal at Carrow Road, and I'm sure they'll be in for a tough fight."

redpajama_set_name: RedPajamaCommonCrawl


Many companies use this type of reconciliation in their cash flows statements.
This type of reconciliation is occasionally found in published cash flows statements.
Many companies use this type of reconciliation in their published cash flows statements.
95, Statement of Cash Flows), a company that provides a set of financial statements that reports both financial position and results of operations should also provide a cash flows statement for each period for which results of operations are provided.


Hope you all had a great day and are settling in for a relaxing Thursday night.
Justin & I headed out after work today to Lynfred Winery in Wheeling, IL to pick up a bunch of wine.
No, we are not throwing a party.
This visit was actually due to my procrastinating.
You see, I joined Lynfred's "wine club," which is super cool, but, of course, not as cool as my OTHER wine club.
In Lynfred's wine club, you give them your credit card/debit card information, and they charge you ahead of time for a bottle of the "wine of the month." I believe you can specify what "types" of wine you like, or go for the variety and be surprised.
Technically, I'm supposed to go in each month to pick up my bottle of wine, but in case you haven't noticed, I've been just a little bit busy lately.
Anyway, Justin & I picked up 4 bottles (I apparently haven't been in since June?!?) and enjoyed a tasting.
I have never seen a double rainbow, so I was pretty excited.
We joked about how great the pot of gold at the end of THAT must be.
The funny thing is, I distinctly remember believing that there really was a pot of gold at the end of a rainbow when I was a kid, and I'm pretty sure my friends and I looked for it once.
Now, to get to the actual point of this post, I wanted to share the most amazing story with you all tonight, because it is just to darn cute to resist!
Today, my friend & sorority sister, Becca, was proposed to by her very sweet (now) fiance, Matt.
But, this was no average proposal, let me just tell you.
Start here: The Love Story.
And then go here: Proposal.
I am so so SO happy for Becca & Matt.
Becca is one of the sweetest people I know, and absolutely every nice thing that Matt said about her is 100% true.
Justin & I also had the pleasure of meeting Matt and spending lots of time with him over our friends' (Ashley & Tyler) recent wedding weekend, and we felt like we instantly connected with him too.
**Something to talk about: What's the sweetest/coolest/most "out of the box" proposal story you have seen/heard of??


text:
The Center for Women's Global Leadership (CWGL) is the Global Coordinator
About the Feminist Alliance for Rights (FAR)
Post-2015 Women's Coalition Assessment
Gender-Based Violence & Sexual and Reproductive Health Rights (SRHR)
UN 2030 Agenda
Post-2015 Women's Coalition Archive
The Feminist Alliance for Rights (FAR) is a global alliance working to advance gender equality by strengthening national and regional accountability for women's human rights.
FAR's mission is to amplify women's voices and enhance their leadership from the Global South and from marginalized communities in the Global North. It facilitates feminist organizing and collective action to influence global norms and processes and improves the implementation of human rights at all levels.
The Center for Women's Global Leadership (CWGL) is the Global Coordinator of FAR.
Feminist Tactics For Social Change & LGBTQI Feminists in Nigeria: An Interview With Buky Williams
FAR joins amicus in the case of Manuela v. El Salvador
#SaveSabWaiVillagers: An Interview with Emilie Pradichit from Manushya
FAR Member leads the effort to ratify the ILO Violence and Harassment Convention No. 190 in Nepal
Intersectional feminist strategies to counter the pushback on women's rights
Tweets by FARFeminists
Contact | Sitemap
A project of the Center for Women's Global Leadership (CWGL)
160 Ryders Lane, New Brunswick, NJ 08901 • Ph: 848-932-8333 • feministallianceforrights@gmail.com
© 2017 Feminist Alliance for Rights • Site design by Reimagine!


Brooksville Country Club is located at the center of the Golf Zoo Nature Coast Golf Trail and offers a golf experience unmatched in Florida. Tumbling fairways weave through ancient live oak trees, while a unique group of dramatic holes were designed along, around and in between the sheer rock walls of an abandoned limestone mine. The more traditional front nine features rolling terrain, tree-lined fairways and a few doglogs that will challenge players of all skill levels. Anticipation builds, however, as you make the turn to the back nine.
The first quarry hole - number 12 - is a breathtaking par-4 with an upper left fairway and lower right fairway separated by a quarry wall. A tee shot to the wide lower fairway will leave a blind second shot into the green. Find the shorter distance narrow upper fairway for a short, downhill approach for a legitimate birdie opportunity. The par-4 13th is the most intimidating quarry hole. High up on a limestone point, the tee box overlooks a fairway framed by high quarry walls covered in natural vegetation. The landing area is generous, however, so bomb away. Take plenty of club for the uphill approach shot or risk the ball rolling back to your feet! Hole 14 is a stunning, 177 yard, par-3, bordered by steep quarry walls on the left from tee to green. Play the downhill tee shot to the right side of the green for safety.
After two rather conventional holes, #17 is the final quarry challenge. The downhill tee shot on the short par-3 must clear a pond fronting a wide, shallow green. Quarry walls surrounding the putting surface require a precise short iron.
Beautiful, challenging and enjoyable, this course will be an experience you will remember!


Published on Friday, April 28, 2017.
A heap of lovely handmade paper from Mary Hark's studio.
On April 12, guests at the ACC Library Salon Series were inspired by the work and projects of papermaker Mary Hark. A longtime resident of St. Paul, Minnesota, Hark is chair of textiles and fashion design in the School of Human Ecology at the University of Wisconsin – Madison, and founder and proprietor of HARK! Handmade Paper Studio. During her talk, Hark reflected on her personal practice and background as a papermaker, but mainly focused on what is nearest and dearest to her: community projects. From making placemats for a neighborhood dinner feeding more than 2,000 people to establishing a papermaking operation in Ghana using untapped Mulberry plant resources, Hark's mission is to make a difference – one beautifully made sheet of paper at a time.
In this video, Hark shares how she ended up in papermaking, who her inspirations are, and a little bit about some of those wonderful communities she has been (and continues) to be involved with.
Library Salon Series: Mary Hark will discuss her work and her community projects.


text:
Blues, Brews & BBQ Featuring North Mississippi Allstars
Sun Sep 1 2019
Join us on the lawn at Earl's Lodge on Sunday, September 1 for our Blues, Brews & BBQ Concert Series with Jordan Matthew Young, Elektric Voodoo, and North Mississippi Allstars! Relax on the lawn with a blanket, have a beverage, and listen to some incredible FREE live music! Delicious BBQ lunch and other offerings are available in Earl's Lodge are available as well as several local brews on tap. There are great family-friendly activities and games for the kids including a bungee jump, climbing wall, adventure course, playground and newest activity - The Wildflower Mini Golf Course.
12:15 pm: Jordan Matthew Young
2:15 pm: Elektric Voodoo
4:15 pm: North Mississippi Allstars
Share your photos using #snowbasinsummer!
***No outside food or beverage allowed in the music venue or the lodge. Utah State Law prohibits the possession and consumption of outside alcohol including beer & wine on premise. Bags may be subject to search at the music venue gate and any alcohol or outside food may be confiscated.
Dogs are allowed in the music venue, but they must be on a leash at all times, and they must stay on the grassy areas. Dogs are never allowed in the lodges or on the patio, with the exception of service dogs. Umbrellas, shade tents, and chairs are allowed, but please be courteous of other guests.
If you have a tent or umbrella, please set it up near the back of the venue and do not block other's views. Low chairs welcome towards the front (cannot fit a basketball underneath) but if you have higher chairs, please move towards the back.
About the Bands:
North Mississippi Allstars are back with PRAYER FOR PEACE and couldn't we all use one of those right about now? Founded in 1996 by brothers Luther (guitar and vocals) and Cody Dickinson (drums, piano, synth bass, programming and vocals), the now venerable band are entering their third decade with perhaps the most vital album of their career. Recorded in studios across America during North Mississippi Allstars' 2016 tour, PRAYER FOR PEACE sees the Dickinsons weaving their bred-to-the-bone musical sensibility with unstoppable energy, rhythmic reinvention, and a potent message of positivity, family, and hope. As ever, songs like R.L. Burnside's "Long Haired Doney" and the impassioned title track pay homage to the country blues legacy while simultaneously pushing it into contemporary relevance with fatback funk, electronic innovation, slippery soul, and pure unadulterated rock 'n' roll. "This is a very exciting time for North Mississippi Allstars," Cody says. "There's been this explosion of creativity lately and it's encouraging that for a band who has been around for twenty years now, our music is as vital and fresh as ever. It's like the opposite of burnout – I can't explain why but it feels totally brand new again." "The blues is not children's music," Luther says. "We get better at it, the older we get. We're so fortunate to be able to do it." I think it's our responsibility to the community that brought us up to protect the repertoire," Luther says. "To keep the repertoire alive and vibrant. That's what folk music is about. It's an oral history of America. My dad and his friends, they learned from Furry Lewis and Gus Cannon and Will Shade and then taught those songs to us. It's important for us to write songs and experiment and do other things, but playing our community's music in a modern way is what Cody and I do best. I think it's what we were meant to do." True as always to the blues tradition, North Mississippi Allstars use the basic structures taught to them as the starting point for improvisation and contemporary interpretation, an approach that inextricably links them to a long line of American visionary artists like the Grateful Dead. http://www.nmallstars.com/home
Elektric Voodoo
Elektric Voodoo is a nationally touring band based in San Diego, CA. The band blends classic afrobeat, Latin, rock & roll, psych, jazz, blues and many other influences into its own unique genre that tastefully straddles the line between modern and vintage.
https://elektricvoodoo.com
Jordan Matthew Young
Jordan Matthew Young has shared the stage with the likes of ZZ Top, Shooter Jennings, Lukas Nelson, James Harman, Samantha Fish, Tinsley Ellis, John Németh, Indigenous, Kyle Gass Band, Shook Twins, Walter Parks, Eric McFadden, Jared James Nichols and is the proud winner of Album of the Year and Best Rock Band and was runner-up for Band of the Year and Best Blues Band in the 2016 Best of Utah Music Awards. Those looking to satisfy a vintage rock sweet tooth need look no further than power trio Candy's River House. This group leaves little to be desired at their all out, high energy live shows. Jordan Young at the helm with guitar/vox, Joey Davis on drums and Nathan Simpson on bass, the group has played everything from theaters to festivals to pool halls all over the country. The dusty throated Young peels through heavy layers of blazing guitar and a groovy, 4 on the floor rhythm section. Bluesy, soulful rock driven anthems and performances built for massive outdoor show or local night-club. -The Pulse
https://www.jordanmatthewyoung.com/video


On March 29, Russian prime minister Dmitry Medvedev took part in a live interview on the social media platform VKontakte as part of the network's #VKLive program. While Medvedev spoke positively of social media as a platform for two-way communication with the public, his own openness about current events was limited.
On the case against American investment manager Michael Calvey: I don't have any precise information about the case. The truth will be established in court.
On the case against former Presidential Envoy Viktor Ishaev: It's difficult for me to comment. Law enforcement agencies, investigators, and the courts will figure it out.
On the case against former minister Mikhail Abyzov: I know nothing about Abyzov's commercial activity. The only way to solve the conflict now is through a formal investigation.


South Africa's president Cyril Ramaphosa has enacted a law on financing political parties before the May legislative elections, according to the presidency.
The law prohibits the acceptance of donations from foreign governments, foreigners and public organizations as well as donations from criminal activity.
An NGO, ''My Vote Counts'' has welcomed the move saying it '' will significantly enhance transparency'' in a country beset with corruption.
Spokesperson for ''My Vote Count's, Sheilan Clarke told AFP that parties will now be required to disclose the names and organizations that donate more than 100, 000 South African rand or 6,300 euros.
She said it takes about six months between the promulgation of the law and its implementation by the electoral commission.
The NGO regretted that South African electorates will once again go to the polls without access to crucial information on party funding.
South Africans will elect their deputies and members of provincial assembles, who will then elect the head of state within the party.
The ruling African National Congress (ANC) has been in power since the end of apartheid in 1994.


A girl will lust over Chanel pearls and a guy might drool over an orange Lamborghini. Not trying to be materialistic but it seems like human always want the better class in things. You might not need it, but the inner thoughts might still bother you.
Lurking on social media what Burberry just show off on their Autumn/Winter 19 or go to an elite area where people are driving Red Ferraris. Let's see… if we all have the money, what would you desire to buy most? Here some deets on what brands that suit your zodiac best!
Arians are playful, young , confident and enthusiastic. You are also a trendsetter and your own boss. Your strong behavior makes you are just the girl to wear Chanel, with it's empowered woman background matches you perfectly. And Male Aries will want to drive a flashy and sporty car such as a Corvette Stingray. It's sleek and has lots of color option is just perfect.
You are known for being dependent and reliable. You enjoy stability in life as much as giving stability to people around you. Yes, you do love luxury as much as stability that's why Burberry is for you. Their iconic brown tone give a sense of calm and long-lasting which means stability and you would love that. Why Subaru? Subaru is known for their reliability too. They are built to last and designed with safety in mind.
Gemini are one of the most affectionate and gentle people. But you are also have a high sense of curiosity and constantly evolving. Just like Prada. A brand with classic pieces who can constantly mixed with other unique pieces. Audi a5 is a car that is light, up to date with plenty of extra features which keeps you excited all the time.
Oh Cancer, you are usually very emotional and wear your emotions on your sleeve. You are also sympathetic though. As you are emotional, you like to keep things simple, just like Ralph Lauren with it's simple silhouette and embellishments. You also love a safe , stable, spacious and comfortable interior in a car, which can be found in a Chevy Equinox no doubt.
There is no such thing as too much attention. More is more. You love all eyes on you, so does Versace. Wearing a Versace will surely make others jaw drop and cant take their eyes off of you! Mustang has been known for their strong and fierce build. They also have eye-catching color and whoever drives it show class and taste, it's just like you Leo.
Workaholic Virgo doesn't like vacation, their work ethics is truly off the charts. This sometimes also means you don't really put much attention towards clothing, you don't want to be noticed "that way". Classic things is the way to go and Hermès is just the kind of brand. Like their famous Birkin bag, it is chic, simple yet very much functional. As you are also critical, and very detail-oriented, Mercedez can offer you just that. With attention to details that's been put in the car, will makes you drive at ease.


text:
Q: Using 'small' values in progressBar with 9 patch looks bad I'm using libGDX ProgressBar. I create it with the next code:
style = new ProgressBar.ProgressBarStyle();
style.background = new SpriteDrawable(backgroundImage);
NinePatch fillImage = new NinePatch(new TextureRegion(img2, 1, 1, img2.getWidth(), img2.getHeight()), 25, 26, 30, 30);
style.knobBefore = new NinePatchDrawable(fillImage);
style.knobBefore.setMinWidth(0);
style.knobBefore.setRightWidth(0);
style.knobBefore.setLeftWidth(0);

progress = new ProgressBar(0, 30, 0.1f, false, style);

When I set a value to a big number, for example 15 this is how it looks:[1]
but when I set a small value 1/30 (smaller the the basic 9 patch image) it looks bad:
Any ideas how to handle this problem?

A: You are setting your NinePatch width to be less than the minimum. The left and right do not change, so the minimum width your NinePatch can be  is 25 + 26 = 51px. Any less than this you will get erroneous results. I believe the reason it looks like that is because your sides are actually pushing through each other, creating a negative width for the centre, which is still completely acceptable to draw with. (You can see in your image that the right is at the very far left, the left is most likely at the very far right but behind the reversed middle) The simplest solution would just be to limit the progress bar width to the proper minimum with something like this (if progress value is between 0 and 1);
//convert min width to a ratio
float minProgress = style.knobBefore.getMinWidth() / progressBarLength;

float progress = Math.max(progress, minProgress);

getMinWidth() would probably tell you it is 51/52px. You also shouldn't force setMinWidth(), setLeftWidht(), setRightWidth().

redpajama_set_name: RedPajamaStackExchange


WHEN in the course of human Events, it becomes necessary….
Be Afraid. Be Very Afraid.
ghostsniper on Starbucks: Now with open restrooms and those spiffy new used needle boxes. Yumm!
Snakepit Kansas on Starbucks: Now with open restrooms and those spiffy new used needle boxes. Yumm!
Tom Hyland on Starbucks: Now with open restrooms and those spiffy new used needle boxes. Yumm!
Starbucks: Now with open restrooms and those spiffy new used needle boxes. Yumm!
Again, in spite of that, we call this Friday good.


text:
Home	NewsEntertainment	'Daredevil' and 'Jessica Jones' at NYCC: Fans Get First On Screen Look at Elektra, The Punisher and Luke Cage
EntertainmentTV and Movies
'Daredevil' and 'Jessica Jones' at NYCC: Fans Get First On Screen Look at Elektra, The Punisher and Luke Cage
by Tom Herles October 13, 2015
written by Tom Herles October 13, 2015
The impressive spectacle that is New York Comic Con hit its apex late Saturday afternoon when the main stage was conquered by Marvel and Netflix. The casts of both the hugely successful Daredevil and the upcoming Jessica Jones series greeted the packed theater to deafening cheers. I'll admit that even this fairly reserved writer screeched like a One Direction fan when Jon Berenthal, who plays Frank Castle/ The Punisher on season two of Daredevil, sauntered in during the exclusive trailer that led off the panel. But this wasn't the only home run hit by the television branch of Marvel Comics, who made sure their presence was felt at their hometown con. This panel had all the buzz and two huge lines of fans early on Saturday morning attempting to get a wristband that would guarantee them a seat in the theater.
Marvel's head of television, Jeph Loeb took the stage for the second straight afternoon at NYCC Saturday. But this time his focus turned from the SHIELD agents on ABC to The Defenders, who are slowly building their presence on Netflix. Before the casts were introduced and the panel kicked off, Loeb called out three of his stars. Charlie Cox, Krysten Ritter, and Mike Colter came out to a standing ovation. The three, who play Daredevil, Jessica Jones, and Luke Cage respectively, make up 3/4ths of the eventual street level super team, The Defenders. Iron Fist has not been cast yet. He will be the last piece of that puzzle.
The Daredevil portion of the event came first. A highlight reel from season one and a short teaser for season two was shown. That clip has since been released online. The highlights came with the quick glimpses of new cast members Elodie Yung (Elektra Natchios) and Bernthal. To be clear, the glimpse of Bernthal is the back of his head and a barely audible utterance of "bang." It wasn't much, but it was like an early Christmas gift for the 3,000 fans in attendance. The crowd was so loud that it was actually impossible to hear the dialogue.
The panel discussion had Cox joined by Deborah Ann Woll (Karen Page), Elden Henson (Foggy Nelson), Bernthal, Yung, showrunners Doug Petrie and Marco Ramirez along with Marvel Chief Creative Officer Joe Quesada. A question and answer session with the audience revealed some interesting perspectives. Yung mentioned that she is skilled in multiple martial arts including holding a black belt in karate. So basically she's a perfect choice for Elektra. Bernthal appeared to get slightly emotional when talking about how important his character is to fans, law enforcement and members of the military in particular. Castle is a military veteran in the comics having served in the United States Marine Corps. He also said he has been frequently approached by fans with the helpful message of, "You better not mess this up, man." An alumnus of The Walking Dead, Bernthal knows a thing or two about adapting comic book characters to television.
In addition to some talking in circles to avoid spoilers, another highlight had Henson give a smile when a group of fans began to "quack" at the actor who starred in the three Mighty Ducks films. Also, Cox spoke about his training with a coach to prepare for the role as the blind hero and the impact of the character within the blind community. But possibly my favorite moment of the night came when Loeb consented to replaying the season two trailer to wrap up the time with Daredevil. The cast stood up to get a better view and remained on stage to see the clip. There was just something exciting about seeing these TV stars watch the clip in anticipation along with the fans. According to Loeb, they had not seen it before. This is where the crowd was able to decipher that line that rang through Comic-Con. "Bang." That one word sums up the trailer pretty well. Season two will air on Netflix in 2016.
'Daredevil' and 'Jessica Jones' casts at NYCC 2015
Jessica Jones, Luke Cage and Doctor Who?
The cast was then switched out for the stars of Jessica Jones. At this point not much was known about the show because of the Marvel shroud of secrecy. But among the large cast was Ritter, Colter, Rachel Taylor (Trish Walker), Eka Darville (Malcolm), Erin Moriarty (Hope), Wil Traval (Will Simpson) and showrunner Melissa Rosenberg. It was revealed that Carrie Ann Moss, also in attendance, would be playing Jeryn Hogarth, a character that is male in the comics.
This half of the panel avoided fan questions, which makes sense since almost every detail is currently a spoiler. During Loeb's questions to the cast, Colter revealed that he is currently in production on Luke Cage and that Jessica Jones has a different feel than the show that shares a name with his character. Loeb mislead the crowd a bit when he explained that there was an empty seat on stage for former Doctor Who star David Tennant, who plays the show's antagonist, Kilgrave. But just as the "Whovians" in attendance were thinking he was going to emerge from backstage, Loeb burst their bubble. But there was a funny video greeting from Tennant, who excitedly told the crowd they would be seeing a world premiere clip.
That clip was actually the full first episode of Jessica Jones, which won't hit Netflix until November 20th. I won't spoil any details for you, but the episode felt different than Daredevil while still being connected in how the setting of New York is woven in as a character of sorts. (Wow, that was so vague it sounds like I work for Marvel.) There was definitely less street fighting than Daredevil. But when the violence hits, it is intense. I actually found it to be quite jarring and creepy. There was also a sex scene unlike anything seen in the Marvel Cinematic Universe to this point. Like Daredevil, this is definitely not suitable for all ages.
These characters who will make up The Defenders sure seem to be well separated from The Avengers, who reside up in their Manhattan high rise. That's okay though. These folks seem more like public servants than action figures. So it only makes sense that they were among the people of New York on Saturday. That seems to be where they belong.
DaredevilelektraJeph LoebJessica JonesLuke Cagemarvelmarvel cinematic universenetflixnew york comic connew york comic con 2015NYCCpunisherThe Defenders
Tom Herles
Tom is a media lecturer, writer, and film buff. When he isn't writing for Geek Insider or his film blog, whatsupmovement.com, Tom can be found at the movies or spending time outside with his wife
Top 6 Crazy Expensive Video Game Purchases
How the Internet of Things Will Change the Farming Industry
New Shows and Old Favorites Coming in 2022
Fantastic Beasts: The Secrets of Dumbledore' Trailer Returns...
The Top Five Best Shows on Apple TV
Everything Coming to Netflix in December
Are You Ready to Re-enter the Matrix?
9 Best Classic Films To Stream On Netflix...
'What We Do in the Shadows' Is Bringing...
Key Recommendations for Roku Channel Development
How Lexington Law Helped Me Improve My Credit...
The Book of Boba Fett Trailer is Here


text:
Camera IconTreasurer Cameron Dick is mulling a call for Queensland finances to be released before election day.
Qld says financial reporting 'a challenge'
Marty SilkAAP
The Queensland government says it will be a challenge to publicly release its financial statements before polling day during election years.
Queensland Auditor-General Brendan Worrall has told the government to do so after it waited until after last year's October 31 election to open the books.
Treasurer Cameron Dick is mulling the recommendation in the auditor-general's report, released on Thursday, but he hasn't committed to it yet.
"The recommendation poses some challenges on reporting timeframes, particularly in an election year, but the government is committed to working to determine whether those timeframes can be met," his spokesman told AAP.
Under state laws, the government only has to file financial statements within six months of the end of the financial year.
Mr Worrall said on Thursday that that rule was unsuited to election years when polling day is October 31.
"Information in the financial statements becomes less relevant to readers the further away it is from the end of the financial year," Mr Worrall wrote.
"In 2020, it also meant information on the Queensland government's financial performance and position was not publicly available prior to the state election."
Opposition treasury spokesman David Janetzki said while 2020 was an extraordinary year, that was no excuse for failing to release the financial statements before the end of October like other states had.
He said given the precarious state of the budget and the "paper thin" economy, voters deserved transparency.
"It's a question of integrity - Queenslanders should not be blindfolded when they go to the ballot box," Mr Janetzki said.
"They deserve to know the true picture of the state's finances."
The auditor-general also recommended the government change rules to require financial statements be prepared for each fund created under its Queensland Future Fund laws.
Mr Worrall suggested the government use NSW laws as a guide and include information on underlying investments in each fund.
Mr Dick's office said the Queensland Future Fund will be audited as part of Treasury's financial statements, and asset allocation will be reported in the Treasury's annual report.
MORE INFOThe South32 Rottnest Channel Swim is back for 2022!


Afghan Special Immigrants Are Now Eligible for Eight Months of ORR Benefits and Services from Date of Entry to U.S.
Both Afghan Special Immigrants admitted to the U.S. under Section 602, Division F, Pub. L. No. 111-08, and tunder Section 1059 of the NDAAare eligible for 8 months of ORR benefits and services from date of entry or date of adjustment if applying domestically.


Good morning, everyone, and Happy St. Patrick's Day! The NCAA tournament kicks off today, with Duke taking on UNC-Wilmington, and UNC squaring off with Florida Gulf Coast University in Raleigh this evening. Will the Triangle teams have the luck o' the Irish on their sides? Don't forget to fill out your brackets. Don't forget to wear green!
Here are your headlines for Thursday.
1. Now that the state primary is over, it's on between Governor Pat McCrory and Roy Cooper. It's been said that this will be the most expensive governor's race in the country, and the Republican Governors Association announced yesterday that it's dropping six figures on a digital ad buy. Oh my!
The ad hammers at Cooper's 30 years in public office. It poses the question, what has Cooper done while in office, and answers by saying he supported the federal healthcare law and higher taxes.
Sounds like Cooper's unfazed at the moment, but he's got so much to go after McCrory for, we're sure it's just a matter of time before he hits back with a ludicrously expensive digital ad buy of his own.
College students all over the state were turned away at the polls yesterday. In Watauga County, home to Appalachian State University, Democracy NC executive director Bob Hall said that voter disenfranchisement seemed to be happening on purpose. "Watauga is a poster child for bad practices," he said. And at a precinct in Chapel Hill - Chapel of the Cross on Franklin St. - he said that the precinct suffered from inadequate preparation and poor management. "They misinterpreted the rules," he said.
Native Americans were disproportionately affected as well. Although Native Americans represent less than 1% of the vote in North Carolina, they made up 5.6% of the provisional ballots cast as of Sunday, many from Robeson County in the southern part of the state. Hall said that this was partially due to a misunderstanding of the information needed on a tribal enrollment card in order for it to be considered an acceptable form of ID.
"The word may have gotten out that [any tribal ID] was acceptable, but it turns out that it needed a photograph and an expiration date. Some that were issued some years ago don't have one or both features," Hall said.
Hall said that some of the longest lines in the state were in Durham County, with some precincts closing at 9 or 9:30, two hours after they were supposed to. One voter in Durham County who contacted the hotline had voted at the same polling place for 30 straight years, but was missing from the voter rolls and had to go to the Board of Elections to cast a non-provisional ballot, where she waited for 45 minutes. "The preparation, staffing, equipment, and training were not up to the task," Hall said.
If yesterday's primary caused a lot of problems, it's likely that the general election could be even worse. "It's very worrisome," Hall said. "It's not like there was a super big turnout, but it was enough to stress the system out in certain places."
"The election administrators need to do a much better job preparing for a bigger group of voters, some of whom aren't educated about the process."
While there were long lines in Wake County just like in Durham and Orange, Wake board of elections director Gary Sims said everyone in line got their chance to vote, even if it was late into the evening, and even if that meant ballots were still being counted after midnight.
And precinct officials were instructed to allow everyone who showed up to fill out a provisional ballot, including those without ID, and people who weren't registered in Wake County. Now that's service! Sims said all the ballots will be reviewed, and the official election results posted, by next Tuesday.
3. Still speaking of the primary, the N&O reports that 500,000 voters skipped some of those down-the-ballot races, especially Council of State ones.
Down-ballot drop-off is common in most elections because some voters only want a say on the most high-profile races. It's less common in general elections because North Carolina voters have had the option to vote a straight partisan ticket.
In the Republican primary, only 72 percent of voters in the presidential primary picked one of the three candidates for insurance commissioner – meaning that more than one in four voters left that part of their ballot blank.
The insurance commissioner race lacked a prominent candidate. The participation numbers were higher in the GOP gubernatorial primary – 93 percent made a choice – and in the party's U.S. Senate primary, where 89 percent voted.
Down-ballot participation was higher in the Democratic primary, where labor commissioner appeared to get the fewest votes of the Council of State races. About 82 percent of voters in the presidential primary made a selection for labor commissioner, while 86 percent voted for U.S. Senate and 91 percent made a choice for governor.
We've still got a whole 'nother primary left to go, y'all. Let's do better next time, elections boards (get prepared!) and voters (get informed!) alike.
4. In Raleigh news, former longtime city manager Russell Allen never left the city, and he is now a real estate developer. He and his twin brother formed Allen Ventures and, in partnership with Raleigh-based Five Horizons Development, they have big plans to build two five-unit condominium buildings along New Bern Avenue, between East and Swain Streets, just east of downtown.
Allen said the 3-story condos will each have 2 bedrooms and 2.5 bathrooms, with a single-car garage on the first floor. Pricing for the units has not been decided, but Allen said they would likely be under $400,000.
Both buildings will feature modern-style architecture.
"We think it's going to be very modern and creative but not so much that only a handful of people would want to buy it," Allen said.
This is the second downtown project for Allen Ventures. The company earlier bought and renovated a house in East Raleigh on Freeman Street, which it sold in January. The company hopes to begin construction of the New Bern condos this summer.
Allen said he's purposely tried to keep a low profile in his new role given his previous role.
"I've tried not to be the principal out-front partner," he said.
5. In other Raleigh news, the cherry blossoms are a-blooming, and the blue heron are a-nesting. It must be spring! Go see the blue heron this weekend on the Neuse River Greenway in North Raleigh. In the meantime, enjoy these pictures from Raleigh City Councilman David Cox.
May the luck of the Irish enfold you. May the blessings of Saint Patrick behold you. Thursday is Little Friday!


John Howard Yoder. 1994. The Politics of Jesus. Grand Rapids: Eerdmans.
The myth of an apolitical Jesus is alive and well for several reasons, starting with the observation that political candidates have traditionally chided at being labeled anti-Christian. Jesus' own admonishments to turn the other cheek (Matt 5:39) and to "render to Caesar the things that are Caesar's, and to God the things that are God's"(Matt 22:21 ESV) also give credence to this view. In spite of the widespread acceptance of this apolitical interpretation of Jesus' ministry, it is hard to point to anyone who has seriously studied first century politics in Israel. Consequently, when I ran across a reference to John Yoder's The Politics of Jesus, I quickly ordered a copy.
"that Jesus is, according to the biblical witness, a model of radical political action' which is 'now generally visible throughout the New Testament [NT] studies, even though he biblical scholars have not stated it in such a way that the ethicists have had to notice it. This 'stating it' is all the present study tried to do"(2).
Yoder goes about this task of "stating it"that proves difficult because as an academic writer he must chase down many misconceptions about Jesus' ethics. Chief among these is the church's traditional focus on the spiritual content of the NT and a de-emphasis on political elements. So Yoder asks whether NT authors, principally Luke, Paul, and the author of Revelation, understood and embraced the thrust of Jesus' social ethic.
In other words, Yoder sets out to understand what Jesus said and did focusing on his social ethic (author interpretation) in the context of scripture (canonical interpretation) and, then, to apply it in our postmodern environment (reader interpretation).
These chapters are preceded by prefaces to the first and second editions, and a list of abbreviations and followed by indices of the names and scriptural references.
What Does Political Mean for Jesus?
In making the case that Jesus is a political animal, not just another rabbi, Yoder looks closely at Jesus' introduction in the Gospel of Luke. Luke is an interesting choice here, because Luke is a gentile writer and presumably writes for a gentile audience. Yoder looks particularly at Mary's Magnificat (1:51-53), Jesus' temptation in the wilderness (4:1-13), and Jesus' call sermon in Nazareth (4:16-30). Yoder goes further, but I will limit myself to these three passages.
Magnificat or Call to Arms?
How would a Roman audience hear these words? Consider the words—strength, scattered, brought down, sent away—these words suggest power today, not in the by and by. Yoder observes that in citing these words Mary sounds like a Maccabean—a Jewish revolutionary movement active from 167-160 BC, not someone auditioning to front a praise band.
Satan tries Jesus with three temptations—turn stones into bread, worship me, throw yourself off the temple. The first temptation suggests economic power; the second would make Jesus a king, albeit a vassal king under Satan; and the third would make him an instant celebrity, a kind of first century Evel Knievel—a stunt artist. In his book on these temptations, Henri Nouwen (2002) describes them as challenges typically faced by Christian leaders. Leadership is, of course, inherently political.
.Jesus' Call Sermon in Nazareth.
The Jubilee year is the occasion when all lands are returned to their original owners, irrespective of unpaid debts. Can you imagine that all the owners foreclosed on during the Great Recession suddenly being given their homes back? Or all unpaid student loans being forgiven?
Yoder makes the case that Jesus is reminding the Jews of their obligation to practice the Jubilee, which would immediately make him the target of every lender in Israel, but also account for his instant popularity among the people—a highly political act.
In part one of this review I have given an overview of Yoder's arguments. In part two I will look at his core argument.
John Yoder's The Politics of Jesus is an intensely interesting read for an academic work. Social activists in the church will likely find this book required reading, but even evangelicals will want to be aware of the arguments being put forth.


DURING HER FIRST 26 years, Cheryl Strayed had little control of her life. Her parents split up. Her mother died from lung cancer at 45. While struggling to make sense of her misfortunes, Strayed got lost in drugs and promiscuity. When her marriage ended, she could have simply disappeared or died.
she did—in the craziest, most impractical manner she could think of.
Strayed decided to hike alone for 1,100 miles on the Paci;c Crest Trail (PCT), a rugged course for even the most experienced long-distance backpacker.
2012 memoir, Wild, but she also came to understand herself and take charge of her destiny.


text:
Jesia () – stacja kolejowa w pobliżu Kowna, w rejonie kowieńskim, na Litwie. Znajduje się na linii kolejowej Kowno – Kibarty.

Położony jest na południe od głównego dworca w Kownie. Zaczyna tu się kolejowa obwodnica Kowna.

Linie kolejowe
 Kowno – Kibarty

Bibliografia

Stacje i przystanki kolejowe w okręgu kowieńskim

redpajama_set_name: RedPajamaWikipedia


text:
Russian Suicide Bus Bombing Sparks Terrorism Fears for Sochi Olympics
By Simon Shuster Oct. 22, 2013
Russian Emergencies Ministry / Reuters
Members of Russia's emergency services work near a damaged bus after a suicide bombing in Volgograd on Oct. 21, 2013
Naida Asiyalova, the suicide bomber who blew herself up on Monday on a crowded bus in the Russian city of Volgograd, killing six people and wounding dozens more, was born in the town of Buynaksk, a huddle of mosques and squat apartment blocks in the foothills of the Russian Caucasus. For at least a year, the town has been under a so-called KTO regime (the Russian initials for counterterrorism operation), which allows security forces to conduct random searches, impose curfews and detain any foreigners who do not carry a special visitor's permit, as happened to me this spring. At the checkpoint leading into town, the troops who stopped me could not say exactly how long the counterterrorism operation had been going on. "A long time," one of them said with a sigh. "Probably a couple of years. You should have known about it." And when would it be over? "Not soon. Not with the Olympics coming up."
The Olympic Games, which will be held about a day's drive from Buynaksk in the Russian city of Sochi in February, were roughly nine months away at the time. But President Vladimir Putin's campaign to stamp out the local Islamist insurgency had already been pushing ahead for at least that much time. Thousands of Interior Ministry troops had been sent to the region of Dagestan, where Buynaksk is one of the largest towns, to reinforce the local police against jihadi fighters, and KTO regimes were cropping up like brush fires in a heat wave. Some of them lasted only about a week, during which troops would seal off a town or village and bombard the hideouts of suspected insurgents until they were killed, captured or escaped. Others, like in Buynaksk, dragged on indefinitely, imposing on the local population a form of martial law, which in Russia usually amounts to police impunity.
(MORE: A Dead Militant in Dagestan)
Although Asiyalova's motives remain unclear and the details of her biography sketchy, she seems to fit the profile of other Muslims from the Caucasus who have turned to terrorism as a form of revenge against Russia, taking out their anger on the nation they see as an occupying force. "The organizers of these terrorist attacks prey on people's frustrations," says Yulia Yuzik, a leading expert in Russia on female suicide bombers from the Caucasus. "They play on pride, on people's desire to defend their religion, their nation and their dignity."
The self-proclaimed leader of the insurgency in southern Russia is Doku Umarov, a warlord from the region of Chechnya, whose stated goal is to turn the Caucasus, including Sochi, into an Islamic caliphate governed by Shari'a. This summer, he released a video message calling on his followers to use "maximum force" to disrupt the Sochi Olympics, which he called "Satanic games to be held on the bones of our ancestors." Monday's attack was the first suicide bombing to strike the Russian heartland since Umarov issued this directive. "My main worry is that it may be the first one in a series," says Pavel Baev, an expert on the Caucasus at the Oslo-based Peace Research Institute. "Every rebel mastermind knows how vulnerable Putin's pet Olympic project is."
As the attack on Monday clearly showed, the militants who operate in Dagestan are perfectly capable of staging attacks far outside their home turf. According to Russian media reports, the bomber's husband, a Russian convert to Islam named Dmitri Sokolov, was an active member of the insurgency in Dagestan and a self-trained explosives expert. Investigators claim he built the suicide vest for his wife and that the bombing was planned by a terrorist cell in Dagestan, one of dozens thought to be active in the region.
(MORE: In the Footsteps of the Boston Bombers)
Amid the crackdown leading up to the Olympics, there has been little sign that these groups have been weakened or even contained. Between the start of July and the end of September, 133 people were killed in the conflict between militants and government forces in the North Caucasus; the majority of them — 86 people — were killed in Dagestan, including 32 police offices, according to Kavkaz Uzel, an independent news services that keeps a tally of the violence based on media reports. That is up from a death toll of 118 across the North Caucasus in the previous three months.
Anne Speckhard, who surveyed the motives of suicide bombers for her recently published book, Talking to Terrorists, says the brutal raids against insurgents in the Caucasus may actually be swelling their numbers in the lead-up to the Olympics. For the militant leaders, "the most important thing is consolidating recruitment and membership. And they are very cynically willing to manipulate traumatic bereavement for those ends," says Speckhard. So when a counterinsurgency strike levels an entire building and kills its inhabitants — as is not uncommon in Dagestan — the grieving relatives and friends of the deceased turn into potential recruits. "They are angry, they want revenge, and they can be very quickly activated in a new terrorist operation."
(PHOTOS: Scenes of Life in Dagestan)
Breaking this cycle would require a level of finesse that seems to lie outside the skill set of Putin's counterterrorism forces. Mia Bloom, a terrorism expert and professor of security studies at the University of Massachusetts Lowell, says fostering a dialogue within the communities, and even within the families, of devoted militants is the only effective way to bring them back into civilian life. "If you bring in an imam to explain why suicide attacks are forbidden under Islam, it can strike a chord," she says. "They may start to listen."
But last year, the security forces in Dagestan dismantled the only government program that sought to persuade militants to put down their arms in exchange for amnesties. Shamil Mutaev, a former prosecutor who helped lead that initiative, says it was closed down for being too soft. "There is the opinion that only force can work," he told me earlier this year. "That opinion has won out." The results can be found at the checkpoints and KTO regimes that scar the lush mountains of the Russian Caucasus. But as the soldiers manning them will often admit in private, they are not sure whether they're doing more good than harm.


Your MacBook includes Mac OS X Tiger and the iLife '06 suite of applications, making it perfectly tuned to serve as the centre of your digital life. Create photo albums, watch or make a movie, manage your email, and much more - right out of the box.
This laptop is compatible with Mac OS Lion.
Grade B - Good condition, is likely to have some scratches or others marks.


10 Year-End Money Moves to Save you $1,000s!
Home » Savings Advice » 10 Year-End Money Moves to Save you $1,000s!
Nearing the end of the year most people are focused on the holidays, but by taking your eye off your finances you could be leaving thousands of dollars on the table. Shopping, wrapping and visiting with family and friends are all top of the list, but now is the best time to take a few key steps to ensure you end 2013 on a financial high note. Below you'll find a checklist of 10 must-do end of year money moves to save or reduce your tax bill.
1. Max Out Retirement Plans: You can often contribute into 2014 for 2013′s tax return (confusing, I know) it's a good time to max out or add additional funds to your retirement plan. If you don't have retirement accounts such as an IRA or self-employed 401K set up, do it now. In some cases you need to set up the account before December 31, but you can still contribute until tax day in 2014.
People who are under the age of 50 as of December 31 can contribute up to $17,500 of their own money this year (not counting employer matches, that is) and those who are 50 or older by that date may contribute up to $23,000.
2. Save That Bonus: Many companies hand out holiday bonuses at the end of the year. While it's tempting to spend your bonus on the holidays or something fun, consider setting aside a minimum of 50% of any bonus you receive.
3. Donate Stuff Now: Don't wait until the New Year to clear out the clutter. Donate goods now for a tax deduction in 2013. If you don't have time to head to your local donation center, look for a charity who will pick up donations at your door.
4. Make Cash Donations: Planning to make a cash donation soon? Send in your check before December 31 so you can write off your donation. Make sure you're donating to a non-profit for a tax deduction.
5. Book Capital Losses: Sell investments that you're carrying at a loss before December 31. If you want to hold on to those investments long-term you can buy them back in 2014 (you have to wait one month between selling and buying).
6. Spend To Get Last Minute Deductions: If you're a business owner, it's time to buy. Purchasing equipment and supplies that you will need in the coming months can be a huge help to your bottom line when it comes time for taxes. You can choose to deduct the expense all at once instead of using depreciation (where you take a percentage across several tax years). Homeowners should spend on improvements that will net them a nice tax deduction. For instance, buying Energy Star appliances that are deeply discounted at the end of year and could net you a tax rebate.
7. Use Your Coupons Before They Expire: Many coupons expire on the last day of the year, so make sure to use them now before they expire!
8. Give The Gift Of Money: Planning to send money to a family member? Do it before December 31. You can send up to $14,000 per person without tax concerns.
9. Use Up Your Healthcare & Dependent Care FSAs: In many cases you lose what you don't use by December 31 (check your plan for details).
10. Get Your Free Credit Reports: If you haven't already, get your free credit report now.
Bonus Move: Review 2013 finances and prep for 2014 with printable budget planners, debt trackers and more.
What end of year financial moves do you make?
Guest blogger Kelly Whalen is a Savings.com DealPro and founder of The Centsible Life, a blog designed to help you live the life of your dreams on a budget.
I really need help concerning any money matters.
Get These Organic Holiday Baking Coupons!


text:
#include "apxwin.h"
#include "private.h"

static LPCWSTR REGSERVICE_ROOT  = L"SYSTEM\\CurrentControlSet\\Services\\";
static LPCWSTR REGSOFTWARE_ROOT = L"SOFTWARE\\";
static LPCWSTR REGSERVICE_START = L"Start";
static LPCWSTR REGSERVICE_USER  = L"ObjectName";
static LPCWSTR REGPARAMS        = L"Parameters";
static LPCWSTR REGDESCRIPTION   = L"Description";
static LPCWSTR REGSEPARATOR     = L"\\";
static LPCWSTR REGAPACHE_ROOT   = L"Apache Software Foundation";
/* Predefined Java keys
 * The code below assumes the JRE and JDK arrays are the same length
 */
static LPCWSTR JRE_REGKEYS[] = {
    L"SOFTWARE\\JavaSoft\\JRE\\",                       /* Oracle Java 9 (and hopefully later) */
    L"SOFTWARE\\JavaSoft\\Java Runtime Environment\\",  /* Oracle Java 8 (and older) */
    L"SOFTWARE\\IBM\\Java2 Runtime Environment\\",      /* IBM */
    NULL
};
static LPCWSTR JDK_REGKEYS[] = {
    L"SOFTWARE\\JavaSoft\\JDK\\",                       /* Oracle Java 9 and (and hopefully later) */
    L"SOFTWARE\\JavaSoft\\Java Development Kit\\",      /* Oracle Java 8 (and older) */
    L"SOFTWARE\\IBM\\Java2 Development Kit\\",          /* IBM */
    NULL
};
static LPCWSTR JAVA_CURRENT     = L"CurrentVersion";
static LPCWSTR JAVA_RUNTIME     = L"RuntimeLib";
static LPCWSTR JAVA_HOME        = L"JAVA_HOME";
static LPCWSTR JAVAHOME         = L"JavaHome";
static LPCWSTR CONTROL_REGKEY   = L"SYSTEM\\CurrentControlSet\\Control";
static LPCWSTR REGTIMEOUT       = L"WaitToKillServiceTimeout";

#define REG_CAN_CREATE(r)   \
    ((r)->samOptions & KEY_CREATE_SUB_KEY)

#define REG_CAN_WRITE(r)   \
    ((r)->samOptions & KEY_SET_VALUE)

#define REG_GET_KEY(r, w, k)    \
    APXMACRO_BEGIN              \
    switch(w) {                                                     \
        case APXREG_SOFTWARE:       k = (r)->hRootKey;      break;  \
        case APXREG_PARAMSOFTWARE:  k = (r)->hRparamKey;    break;  \
        case APXREG_SERVICE:        k = (r)->hServKey;      break;  \
        case APXREG_PARAMSERVICE:   k = (r)->hSparamKey;    break;  \
        case APXREG_USER:           k = (r)->hUserKey;      break;  \
        case APXREG_PARAMUSER:      k = (r)->hUparamKey;    break;  \
        default: k = NULL; break;                                   \
    } APXMACRO_END

typedef struct APXREGISTRY  APXREGISTRY;
typedef APXREGISTRY*        LPAPXREGISTRY;
typedef struct APXREGSUBKEY APXREGSUBKEY;

struct APXREGSUBKEY {
    APXHANDLE   hRegistry;
    HKEY        hKey;
    LPCTSTR     syKeyName;
    TAILQ_ENTRY(APXREGSUBKEY);
};

struct APXREGISTRY {
    HKEY    hRootKey;   /* root key */
    HKEY    hServKey;   /* service key */
    HKEY    hUserKey;   /* user key */
    HKEY    hCurrKey;   /* Current opened key */
    LPVOID  pCurrVal;   /* Current value, overwritten on a next call */
    HKEY    hRparamKey; /* root\\Parameters */
    HKEY    hSparamKey; /* service\\Parameters */
    HKEY    hUparamKey; /* service\\Parameters */
    REGSAM  samOptions;
    /** list entry for opened subkeys  */
    TAILQ_HEAD(_lSubkeys, APXREGSUBKEY) lSubkeys;

};

#define SAFE_CLOSE_KEY(k) \
    if ((k) != NULL && (k) != INVALID_HANDLE_VALUE) {   \
        RegCloseKey((k));                               \
        (k) = NULL;                                     \
    }

static BOOL __apxRegistryCallback(APXHANDLE hObject, UINT uMsg,
                                 WPARAM wParam, LPARAM lParam)
{
    LPAPXREGISTRY lpReg;

    lpReg = APXHANDLE_DATA(hObject);
    switch (uMsg) {
        case WM_CLOSE:
        SAFE_CLOSE_KEY(lpReg->hCurrKey);
        SAFE_CLOSE_KEY(lpReg->hRparamKey);
        SAFE_CLOSE_KEY(lpReg->hSparamKey);
        SAFE_CLOSE_KEY(lpReg->hUparamKey);
        SAFE_CLOSE_KEY(lpReg->hRootKey);
        SAFE_CLOSE_KEY(lpReg->hServKey);
        SAFE_CLOSE_KEY(lpReg->hUserKey);
        break;
        default:
        break;
    }
    return TRUE;
	UNREFERENCED_PARAMETER(wParam);
	UNREFERENCED_PARAMETER(lParam);
}

LPSTR __apxGetRegistrySzA(APXHANDLE hPool, HKEY hKey, LPCSTR szValueName)
{
    LPSTR  szRet;
    DWORD  rc;
    DWORD  dwType;
    DWORD  dwSize;

    rc = RegQueryValueExA(hKey, szValueName, NULL, &dwType, NULL, &dwSize);
    if (rc != ERROR_SUCCESS || dwType != REG_SZ) {
        return NULL;
    }
    if (!(szRet = apxPoolAlloc(hPool, dwSize)))
        return NULL;
    RegQueryValueExA(hKey, szValueName, NULL, &dwType, (LPBYTE)szRet, &dwSize);

    return szRet;
}

LPWSTR __apxGetRegistrySzW(APXHANDLE hPool, HKEY hKey, LPCWSTR wsValueName)
{
    LPWSTR wsRet;
    DWORD  rc;
    DWORD  dwType;
    DWORD  dwSize;

    rc = RegQueryValueExW(hKey, wsValueName, NULL, &dwType, NULL, &dwSize);
    if (rc != ERROR_SUCCESS || dwType != REG_SZ) {
        return NULL;
    }
    if (!(wsRet = apxPoolAlloc(hPool, dwSize * sizeof(WCHAR))))
        return NULL;
    RegQueryValueExW(hKey, wsValueName, NULL, &dwType, (LPBYTE)wsRet, &dwSize);

    return wsRet;
}

BOOL __apxGetRegistryStrW(HKEY hKey, LPCWSTR wsValueName,
                          LPWSTR lpRetval, DWORD dwMaxLen)
{
    DWORD  rc;
    DWORD  dwType;
    DWORD  dwSize = dwMaxLen;

    rc = RegQueryValueExW(hKey, wsValueName, NULL, &dwType, (LPBYTE)lpRetval, &dwSize);
    if (rc != ERROR_SUCCESS || dwType != REG_SZ) {
        lpRetval = L'\0';
        return FALSE;
    }
    else
        return TRUE;
}

LPBYTE __apxGetRegistryBinaryA(APXHANDLE hPool, HKEY hKey, LPCSTR szValueName,
                               LPDWORD lpdwLength)
{
    LPBYTE lpRet;
    DWORD  rc;
    DWORD  dwType;
    DWORD  dwSize;

    rc = RegQueryValueExA(hKey, szValueName, NULL, &dwType, NULL, &dwSize);
    if (rc != ERROR_SUCCESS || dwSize == 0) {
        return NULL;
    }
    if (!(lpRet = apxPoolAlloc(hPool, dwSize)))
        return NULL;
    RegQueryValueExA(hKey, szValueName, NULL, &dwType, lpRet, &dwSize);
    if (lpdwLength)
        *lpdwLength = dwSize;
    return lpRet;
}

LPBYTE __apxGetRegistryBinaryW(APXHANDLE hPool, HKEY hKey, LPCWSTR wsValueName,
                               LPDWORD lpdwLength)
{
    LPBYTE lpRet;
    DWORD  rc;
    DWORD  dwType;
    DWORD  dwSize;

    rc = RegQueryValueExW(hKey, wsValueName, NULL, &dwType, NULL, &dwSize);
    if (rc != ERROR_SUCCESS || dwSize == 0) {
        return NULL;
    }
    if (!(lpRet = apxPoolAlloc(hPool, dwSize)))
        return NULL;
    RegQueryValueExW(hKey, wsValueName, NULL, &dwType, lpRet, &dwSize);
    if (lpdwLength)
        *lpdwLength = dwSize;

    return lpRet;
}

DWORD __apxGetRegistryDwordW(HKEY hKey, LPCWSTR wsValueName)
{
    DWORD  dwRet;
    DWORD  rc;
    DWORD  dwType;
    DWORD  dwSize = sizeof(DWORD);

    rc = RegQueryValueExW(hKey, wsValueName, NULL, &dwType, (LPBYTE)&dwRet, &dwSize);
    if (rc != ERROR_SUCCESS || dwType != REG_DWORD) {
        return 0xFFFFFFFF;
    }

    return dwRet;
}

APXHANDLE
apxCreateRegistryW(APXHANDLE hPool, REGSAM samDesired,
                   LPCWSTR szRoot,
                   LPCWSTR szKeyName,
                   DWORD dwOptions)
{
    APXHANDLE hRegistry;
    LPAPXREGISTRY lpReg;
     /* maximum key length is 512 characters. */
    WCHAR     buff[SIZ_BUFLEN];
    LONG      rc = ERROR_SUCCESS;
    HKEY      hRootKey   = NULL;
    HKEY      hUserKey   = NULL;
    HKEY      hServKey   = NULL;
    HKEY      hRparamKey = NULL;
    HKEY      hSparamKey = NULL;
    HKEY      hUparamKey = NULL;

    if (!szKeyName || lstrlenW(szKeyName) > SIZ_RESMAX) {
        SetLastError(ERROR_INVALID_PARAMETER);
        return NULL;
    }
    if (szRoot && lstrlenW(szRoot) > SIZ_RESMAX) {
        SetLastError(ERROR_INVALID_PARAMETER);
        return NULL;
    }

    /* make the HKLM\\SOFTWARE key */
    lstrcpyW(buff, REGSOFTWARE_ROOT);
    if (szRoot)
        lstrcatW(buff, szRoot);
    else
        lstrcatW(buff, REGAPACHE_ROOT);
    lstrcatW(buff, REGSEPARATOR);
    lstrcatW(buff, szKeyName);
    /* Open or create the root key */
    if (dwOptions & APXREG_SOFTWARE) {
        if (samDesired & KEY_CREATE_SUB_KEY)
            rc = RegCreateKeyExW(HKEY_LOCAL_MACHINE, buff, 0, NULL, 0,
                                 samDesired, NULL,
                                 &hRootKey, NULL);
        else
            rc = RegOpenKeyExW(HKEY_LOCAL_MACHINE, buff, 0,
                               samDesired, &hRootKey);
        if (rc != ERROR_SUCCESS) {
            hRootKey = NULL;
            goto cleanup;
        }
        /* Open or create the root parameters key */
        if (samDesired & KEY_CREATE_SUB_KEY)
            rc = RegCreateKeyExW(hRootKey, REGPARAMS, 0, NULL, 0,
                                 samDesired, NULL,
                                 &hRparamKey, NULL);
        else
            rc = RegOpenKeyExW(hRootKey, REGPARAMS, 0,
                               samDesired, &hRparamKey);
        if (rc != ERROR_SUCCESS) {
            hRparamKey = NULL;
            goto cleanup;
        }
    }

    if (dwOptions & APXREG_USER) {
        /* Open or create the users root key */
        if (samDesired & KEY_CREATE_SUB_KEY)
            rc = RegCreateKeyExW(HKEY_CURRENT_USER, buff, 0, NULL, 0,
                                 samDesired, NULL,
                                 &hUserKey, NULL);
        else
            rc = RegOpenKeyExW(HKEY_CURRENT_USER, buff, 0,
                               samDesired, &hUserKey);
        if (rc != ERROR_SUCCESS) {
            hUserKey = NULL;
            goto cleanup;
        }
        /* Open or create the users parameters key */
        if (samDesired & KEY_CREATE_SUB_KEY)
            rc = RegCreateKeyExW(hUserKey, REGPARAMS, 0, NULL, 0,
                                 samDesired, NULL,
                             &hUparamKey, NULL);
        else
            rc = RegOpenKeyExW(hUserKey, REGPARAMS, 0,
                               samDesired, &hUparamKey);
        if (rc != ERROR_SUCCESS) {
            hUparamKey = NULL;
            goto cleanup;
        }
    }
    /* Check if we need a service key */
    if (dwOptions & APXREG_SERVICE) {
        lstrcpyW(buff, REGSERVICE_ROOT);
        lstrcatW(buff, szKeyName);
        /* Service has to be created allready */
        rc = RegOpenKeyExW(HKEY_LOCAL_MACHINE, buff, 0,
                           samDesired, &hServKey);
        if (rc != ERROR_SUCCESS) {
            hServKey = NULL;
            goto cleanup;
        }
        /* Open or create the root parameters key */
        if (samDesired & KEY_CREATE_SUB_KEY)
            rc = RegCreateKeyExW(hServKey, REGPARAMS, 0, NULL, 0,
                                 samDesired, NULL,
                                 &hSparamKey, NULL);
        else
            rc = RegOpenKeyExW(hServKey, REGPARAMS, 0,
                               samDesired, &hSparamKey);
        if (rc != ERROR_SUCCESS) {
            hSparamKey = NULL;
            goto cleanup;
        }
    }
    hRegistry = apxHandleCreate(hPool, 0,
                                NULL, sizeof(APXREGISTRY),
                                __apxRegistryCallback);
    if (IS_INVALID_HANDLE(hRegistry))
        return NULL;
    hRegistry->dwType = APXHANDLE_TYPE_REGISTRY;
    lpReg = APXHANDLE_DATA(hRegistry);
    lpReg->samOptions = samDesired;
    lpReg->hRootKey   = hRootKey;
    lpReg->hUserKey   = hUserKey;
    lpReg->hServKey   = hServKey;
    lpReg->hRparamKey = hRparamKey;
    lpReg->hUparamKey = hUparamKey;
    lpReg->hSparamKey = hSparamKey;
    TAILQ_INIT(&lpReg->lSubkeys);

    SetLastError(rc);
    return hRegistry;

cleanup:
    SAFE_CLOSE_KEY(hRparamKey);
    SAFE_CLOSE_KEY(hSparamKey);
    SAFE_CLOSE_KEY(hUparamKey);
    SAFE_CLOSE_KEY(hRootKey);
    SAFE_CLOSE_KEY(hServKey);
    SAFE_CLOSE_KEY(hUserKey);

    SetLastError(rc);
    return NULL;
}

LPWSTR
apxRegistryGetStringW(APXHANDLE hRegistry, DWORD dwFrom,
                      LPCWSTR szSubkey, LPCWSTR szValueName)
{
    LPAPXREGISTRY lpReg;
    HKEY          hKey, hSub = NULL;
    if (IS_INVALID_HANDLE(hRegistry) ||
        hRegistry->dwType != APXHANDLE_TYPE_REGISTRY)
        return NULL;
    lpReg = APXHANDLE_DATA(hRegistry);

    REG_GET_KEY(lpReg, dwFrom, hKey);
    if (!hKey)
        return NULL;
    if (szSubkey) {
        SAFE_CLOSE_KEY(lpReg->hCurrKey);
        if (RegOpenKeyExW(hKey, szSubkey, 0,
                         lpReg->samOptions, &hSub) != ERROR_SUCCESS)
            return NULL;
        lpReg->hCurrKey = hSub;
        hKey = hSub;
    }
    lpReg->pCurrVal = __apxGetRegistrySzW(hRegistry->hPool, hKey, szValueName);

    return lpReg->pCurrVal;
}

DWORD
apxRegistryGetNumberW(APXHANDLE hRegistry, DWORD dwFrom,
                      LPCWSTR szSubkey, LPCWSTR szValueName)
{
    LPAPXREGISTRY lpReg;
    HKEY          hKey, hSub = NULL;
    DWORD         dwRval, rl;
    DWORD rc, dwType = REG_DWORD;

    if (IS_INVALID_HANDLE(hRegistry) ||
        hRegistry->dwType != APXHANDLE_TYPE_REGISTRY)
        return 0;
    lpReg = APXHANDLE_DATA(hRegistry);

    REG_GET_KEY(lpReg, dwFrom, hKey);
    if (!hKey)
        return 0;
    if (szSubkey) {
        SAFE_CLOSE_KEY(lpReg->hCurrKey);
        if (RegOpenKeyExW(hKey, szSubkey, 0,
                          lpReg->samOptions, &hSub) != ERROR_SUCCESS)
            return 0;
        lpReg->hCurrKey = hSub;
        hKey = hSub;
    }
    rl = sizeof(DWORD);
    rc = RegQueryValueExW(hKey, szValueName, NULL, &dwType, (LPBYTE)&dwRval, &rl);
    if (rc != ERROR_SUCCESS || dwType != REG_DWORD)
        return 0;
    else
        return dwRval;
}

LPWSTR
apxRegistryGetMzStrW(APXHANDLE hRegistry, DWORD dwFrom,
                     LPCWSTR szSubkey, LPCWSTR szValueName,
                     LPWSTR lpData, LPDWORD lpdwLength)
{
    LPAPXREGISTRY lpReg;
    HKEY          hKey, hSub = NULL;
    if (IS_INVALID_HANDLE(hRegistry) ||
        hRegistry->dwType != APXHANDLE_TYPE_REGISTRY)
        return NULL;
    lpReg = APXHANDLE_DATA(hRegistry);

    REG_GET_KEY(lpReg, dwFrom, hKey);
    if (!hKey)
        return NULL;
    if (szSubkey) {
        SAFE_CLOSE_KEY(lpReg->hCurrKey);
        if (RegOpenKeyExW(hKey, szSubkey, 0,
                          lpReg->samOptions, &hSub) != ERROR_SUCCESS)
            return NULL;
        lpReg->hCurrKey = hSub;
        hKey = hSub;
    }
    if (lpData && lpdwLength && *lpdwLength) {
        DWORD rc, dwType = REG_MULTI_SZ;
        rc = RegQueryValueExW(hKey, szValueName, NULL, &dwType, (BYTE *)lpData, lpdwLength);
        if (rc != ERROR_SUCCESS || dwType != REG_MULTI_SZ) {
            return NULL;
        }
        lpReg->pCurrVal = lpData;
    }
    else {
        lpReg->pCurrVal = __apxGetRegistryBinaryW(hRegistry->hPool, hKey, szValueName, lpdwLength);
        if (lpReg->pCurrVal && lpdwLength)
            *lpdwLength = *lpdwLength * sizeof(WCHAR);
    }
    return lpReg->pCurrVal;
}

BOOL
apxRegistrySetBinaryA(APXHANDLE hRegistry, DWORD dwFrom,
                      LPCSTR szSubkey, LPCSTR szValueName,
                      const LPBYTE lpData, DWORD dwLength)
{
    LPAPXREGISTRY lpReg;
    HKEY          hKey, hSub = NULL;
    DWORD         dwType = REG_BINARY;
    if (IS_INVALID_HANDLE(hRegistry) ||
        hRegistry->dwType != APXHANDLE_TYPE_REGISTRY)
        return FALSE;
    lpReg = APXHANDLE_DATA(hRegistry);

    REG_GET_KEY(lpReg, dwFrom, hKey);
    if (!hKey)
        return FALSE;

    if (szSubkey) {
        SAFE_CLOSE_KEY(lpReg->hCurrKey);
        if (RegCreateKeyExA(hKey, szSubkey, 0,
                            NULL, 0, lpReg->samOptions,
                            NULL, &hSub, NULL) != ERROR_SUCCESS)
            return FALSE;
        lpReg->hCurrKey = hSub;
        hKey = hSub;
    }
    if (RegSetValueExA(hKey, szValueName, 0, dwType,
                      lpData, dwLength) != ERROR_SUCCESS)
        return FALSE;

    return TRUE;
}

BOOL
apxRegistrySetBinaryW(APXHANDLE hRegistry, DWORD dwFrom,
                      LPCWSTR szSubkey, LPCWSTR szValueName,
                      const LPBYTE lpData, DWORD dwLength)
{
    LPAPXREGISTRY lpReg;
    HKEY          hKey, hSub = NULL;
    DWORD         dwType = REG_BINARY;
    if (IS_INVALID_HANDLE(hRegistry) ||
        hRegistry->dwType != APXHANDLE_TYPE_REGISTRY)
        return FALSE;
    lpReg = APXHANDLE_DATA(hRegistry);

    REG_GET_KEY(lpReg, dwFrom, hKey);
    if (!hKey)
        return FALSE;

    if (szSubkey) {
        SAFE_CLOSE_KEY(lpReg->hCurrKey);
        if (RegCreateKeyExW(hKey, szSubkey, 0,
                            NULL, 0, lpReg->samOptions,
                            NULL, &hSub, NULL) != ERROR_SUCCESS)
            return FALSE;
        lpReg->hCurrKey = hSub;
        hKey = hSub;
    }
    if (RegSetValueExW(hKey, szValueName, 0, dwType,
                      lpData, dwLength) != ERROR_SUCCESS)
        return FALSE;

    return TRUE;
}

BOOL
apxRegistrySetMzStrW(APXHANDLE hRegistry, DWORD dwFrom,
                     LPCWSTR szSubkey, LPCWSTR szValueName,
                     LPCWSTR lpData, DWORD dwLength)
{
    LPAPXREGISTRY lpReg;
    HKEY          hKey, hSub = NULL;
    DWORD         dwType = REG_MULTI_SZ;
    if (IS_INVALID_HANDLE(hRegistry) ||
        hRegistry->dwType != APXHANDLE_TYPE_REGISTRY)
        return FALSE;
    lpReg = APXHANDLE_DATA(hRegistry);

    REG_GET_KEY(lpReg, dwFrom, hKey);
    if (!hKey)
        return FALSE;

    if (szSubkey) {
        SAFE_CLOSE_KEY(lpReg->hCurrKey);
        if (RegCreateKeyExW(hKey, szSubkey, 0,
                            NULL, 0, lpReg->samOptions,
                            NULL, &hSub, NULL) != ERROR_SUCCESS)
            return FALSE;
        lpReg->hCurrKey = hSub;
        hKey = hSub;
    }
    if (RegSetValueExW(hKey, szValueName, 0, dwType,
                       (const BYTE *)lpData, dwLength) != ERROR_SUCCESS)
        return FALSE;

    return TRUE;
}

BOOL
apxRegistrySetStrW(APXHANDLE hRegistry, DWORD dwFrom,
                   LPCWSTR szSubkey, LPCWSTR szValueName,
                   LPCWSTR szValue)
{
    LPAPXREGISTRY lpReg;
    HKEY          hKey, hSub = NULL;
    DWORD         dwType = REG_SZ;
    if (IS_INVALID_HANDLE(hRegistry) ||
        hRegistry->dwType != APXHANDLE_TYPE_REGISTRY)
        return FALSE;
    lpReg = APXHANDLE_DATA(hRegistry);

    REG_GET_KEY(lpReg, dwFrom, hKey);
    if (!hKey)
        return FALSE;

    if (szSubkey) {
        SAFE_CLOSE_KEY(lpReg->hCurrKey);
        if (RegCreateKeyExW(hKey, szSubkey, 0,
                            NULL, 0, lpReg->samOptions,
                            NULL, &hSub, NULL) != ERROR_SUCCESS)
            return FALSE;
        lpReg->hCurrKey = hSub;
        hKey = hSub;
    }
    if (!szValue || !lstrlenW(szValue)) {
        if (RegDeleteValueW(hKey, szValueName) != ERROR_SUCCESS)
            return FALSE;
    }
    else if (RegSetValueExW(hKey, szValueName, 0, dwType,
                       (LPBYTE)szValue,
                       (lstrlenW(szValue) + 1) * sizeof(WCHAR)) != ERROR_SUCCESS)
        return FALSE;

    return TRUE;
}

BOOL
apxRegistrySetNumW(APXHANDLE hRegistry, DWORD dwFrom,
                   LPCWSTR szSubkey, LPCWSTR szValueName,
                   DWORD dwValue)
{
    LPAPXREGISTRY lpReg;
    HKEY          hKey, hSub = NULL;
    DWORD         dwType = REG_DWORD;
    if (IS_INVALID_HANDLE(hRegistry) ||
        hRegistry->dwType != APXHANDLE_TYPE_REGISTRY)
        return FALSE;
    lpReg = APXHANDLE_DATA(hRegistry);

    REG_GET_KEY(lpReg, dwFrom, hKey);
    if (!hKey)
        return FALSE;

    if (szSubkey) {
        SAFE_CLOSE_KEY(lpReg->hCurrKey);
        if (RegCreateKeyExW(hKey, szSubkey, 0,
                            NULL, 0, lpReg->samOptions,
                            NULL, &hSub, NULL) != ERROR_SUCCESS)
            return FALSE;
        lpReg->hCurrKey = hSub;
        hKey = hSub;
    }
    if (RegSetValueExW(hKey, szValueName, 0, dwType,
                       (LPBYTE)&dwValue,
                       sizeof(DWORD)) != ERROR_SUCCESS)
        return FALSE;

    return TRUE;
}

BOOL
apxRegistryDeleteW(APXHANDLE hRegistry, DWORD dwFrom,
                   LPCWSTR szSubkey, LPCWSTR szValueName)
{
    LPAPXREGISTRY lpReg;
    HKEY          hKey, hSub = NULL;
    if (IS_INVALID_HANDLE(hRegistry) ||
        hRegistry->dwType != APXHANDLE_TYPE_REGISTRY)
        return FALSE;
    lpReg = APXHANDLE_DATA(hRegistry);

    REG_GET_KEY(lpReg, dwFrom, hKey);
    if (!hKey)
        return FALSE;

    if (szSubkey) {
        SAFE_CLOSE_KEY(lpReg->hCurrKey);
        if (RegOpenKeyExW(hKey, szSubkey, 0,
                          lpReg->samOptions, &hSub) != ERROR_SUCCESS)
            return FALSE;
        lpReg->hCurrKey = hSub;
        hKey = hSub;
    }
    if (RegDeleteValueW(hKey, szValueName) != ERROR_SUCCESS)
        return FALSE;

    return TRUE;
}

LONG apxDeleteRegistryRecursive(HKEY hKeyRoot, LPCWSTR szSubKey) {
    LONG rc = ERROR_SUCCESS;
    DWORD dwSize = 0;
    WCHAR szName[SIZ_BUFLEN];
    HKEY hKey = NULL;

    if (ERROR_SUCCESS == RegDeleteKeyW(hKeyRoot, szSubKey)) {
        return ERROR_SUCCESS;
    }

    rc = RegOpenKeyExW(hKeyRoot, szSubKey, 0, KEY_ENUMERATE_SUB_KEYS | DELETE, &hKey);
    if (rc != ERROR_SUCCESS) {
        if (rc == ERROR_FILE_NOT_FOUND) {
            return ERROR_SUCCESS;
        } else {
            return rc;
        }
    }
    while (rc == ERROR_SUCCESS) {
        dwSize = SIZ_BUFLEN;
        rc = RegEnumKeyExW(hKey, 0, szName, &dwSize, NULL, NULL, NULL, NULL );

        if (rc == ERROR_NO_MORE_ITEMS) {
            rc = RegDeleteKeyW(hKeyRoot, szSubKey);
            break;
        } else {
            rc = apxDeleteRegistryRecursive(hKey, szName);
            if (rc != ERROR_SUCCESS) {
                break;   // abort when we start failing
            }
        }
    }
    RegCloseKey(hKey);
    return rc;
}

BOOL
apxDeleteRegistryW(LPCWSTR szRoot,
                   LPCWSTR szKeyName,
                   REGSAM samDesired,
                   BOOL bDeleteEmptyRoot)
{
    WCHAR     buff[SIZ_BUFLEN];
    LONG      rc = ERROR_SUCCESS;
    HKEY      hKey = NULL;
    BOOL      rv = TRUE;
    HKEY      hives[] = {HKEY_LOCAL_MACHINE, HKEY_CURRENT_USER, NULL}, *hive = NULL;

    if (!szKeyName || lstrlenW(szKeyName) > SIZ_RESMAX)
        return FALSE;
    if (szRoot && lstrlenW(szRoot) > SIZ_RESMAX)
        return FALSE;

    if (szRoot)
        lstrcpyW(buff, szRoot);
    else
        lstrcpyW(buff, REGAPACHE_ROOT);
    lstrcatW(buff, REGSEPARATOR);

    for (hive = &hives[0]; *hive; hive++) {
        HKEY hkeySoftware = NULL;

        rc = RegOpenKeyExW(*hive, REGSOFTWARE_ROOT, 0, KEY_READ | samDesired, &hkeySoftware);
        if (rc != ERROR_SUCCESS) {
            rv = FALSE;
        } else {
            rc = RegOpenKeyExW(hkeySoftware, buff, 0, samDesired | KEY_ENUMERATE_SUB_KEYS | DELETE, &hKey);
            if (rc == ERROR_SUCCESS) {
                rc = apxDeleteRegistryRecursive(hKey, szKeyName);
                RegCloseKey(hKey);
                hKey = NULL;
                rv |= (rc == ERROR_SUCCESS);
            }
            if (bDeleteEmptyRoot) {
                // will fail if there are subkeys, just like we want
                RegDeleteKeyW(hkeySoftware, buff);
            }
            RegCloseKey(hkeySoftware);
        }
    }
    return rv;
}

LPWSTR apxGetJavaSoftHome(APXHANDLE hPool, BOOL bPreferJre)
{
    LPWSTR  wsJhome, off;
    DWORD   err, dwLen, dwRegKey = 0;
    HKEY    hKey;
    WCHAR   wsBuf[SIZ_BUFLEN];
    WCHAR   wsKey[SIZ_RESLEN];

#if 1 /* XXX: Add that customizable using function call arg */
    if (!bPreferJre && (wsJhome = __apxGetEnvironmentVariableW(hPool, JAVA_HOME)))
        return wsJhome;
#endif

    while (JRE_REGKEYS[dwRegKey]) {
        lstrcpyW(wsKey, JAVA_CURRENT);
        if (bPreferJre)
            lstrcpyW(wsBuf, JRE_REGKEYS[dwRegKey]);
        else
            lstrcpyW(wsBuf, JDK_REGKEYS[dwRegKey]);
        dwRegKey++;
        dwLen = lstrlenW(wsBuf);
        off = &wsBuf[dwLen];
        dwLen = SIZ_RESMAX;
        if ((err = RegOpenKeyExW(HKEY_LOCAL_MACHINE, wsBuf,
                                 0, KEY_READ, &hKey)) != ERROR_SUCCESS) {
            continue;
        }
        if ((err = RegQueryValueExW(hKey, JAVA_CURRENT, NULL, NULL,
                                    (LPBYTE)off,
                                    &dwLen)) != ERROR_SUCCESS) {
            RegCloseKey(hKey);
            continue;
        }
        RegCloseKey(hKey);
        if ((err = RegOpenKeyExW(HKEY_LOCAL_MACHINE, wsBuf,
                                 0, KEY_READ, &hKey)) != ERROR_SUCCESS) {
            continue;
        }
        wsJhome = __apxGetRegistrySzW(hPool, hKey, JAVAHOME);
        if (wsJhome)
            SetEnvironmentVariableW(JAVA_HOME, wsJhome);
        RegCloseKey(hKey);

        return wsJhome;
    }

    return NULL;
}

LPWSTR apxGetJavaSoftRuntimeLib(APXHANDLE hPool)
{
    LPWSTR  wsRtlib, off;
    DWORD   err, dwLen = SIZ_RESLEN, dwRegKey = 0;
    HKEY    hKey;
    WCHAR   wsBuf[SIZ_BUFLEN];

    while(JRE_REGKEYS[dwRegKey]) {
        lstrcpyW(wsBuf, JRE_REGKEYS[dwRegKey]);
        dwRegKey = dwRegKey++;

        dwLen = lstrlenW(wsBuf);
        off = &wsBuf[dwLen];
        dwLen = SIZ_RESLEN;
        if ((err = RegOpenKeyExW(HKEY_LOCAL_MACHINE, wsBuf,
                                 0, KEY_READ, &hKey)) != ERROR_SUCCESS) {
            continue;
        }
        if ((err = RegQueryValueExW(hKey, JAVA_CURRENT, NULL, NULL,
                                    (LPBYTE)off,
                                    &dwLen)) != ERROR_SUCCESS) {
            RegCloseKey(hKey);
            continue;
        }
        RegCloseKey(hKey);
        if ((err = RegOpenKeyExW(HKEY_LOCAL_MACHINE, wsBuf,
                                 0, KEY_READ, &hKey)) != ERROR_SUCCESS) {
            continue;
        }
        wsRtlib = __apxGetRegistrySzW(hPool, hKey, JAVA_RUNTIME);
        RegCloseKey(hKey);

        return wsRtlib;
    }

    return NULL;
}

BOOL apxGetServiceDescriptionW(LPCWSTR szServiceName, LPWSTR szDescription,
                               DWORD dwDescriptionLength)
{
    HKEY  hKey;
    WCHAR wcName[SIZ_RESLEN];
    DWORD rc, l = dwDescriptionLength * sizeof(WCHAR);
    DWORD t = REG_SZ;
    int iServiceNameLen = lstrlenW(szServiceName);
    if (iServiceNameLen > SIZ_RESMAX) {
        apxLogWrite(APXLOG_MARK_WARN "Can't read service description because registry key '%s' length %d > %d", szServiceName, iServiceNameLen, SIZ_RESMAX);
        return FALSE;
    }
    lstrcpyW(wcName, REGSERVICE_ROOT);
    lstrcatW(wcName, szServiceName);

    rc = RegOpenKeyExW(HKEY_LOCAL_MACHINE, wcName, 0, KEY_READ, &hKey);
    if (rc != ERROR_SUCCESS) {
        apxLogWrite(APXLOG_MARK_WARN "Can't read service description because registry key '%s' cannot be opened (rc = %d)", wcName, rc);
        return FALSE;
    }
    rc = RegQueryValueExW(hKey, REGDESCRIPTION, NULL, &t, (BYTE *)szDescription,
                          &l);
    SAFE_CLOSE_KEY(hKey);
    if (rc == ERROR_SUCCESS && t == REG_SZ)
        return TRUE;
    else {
        apxLogWrite(APXLOG_MARK_WARN "Can't read service description because registry key '%s' cannot query value at '%s' (rc = %d)", wcName, REGDESCRIPTION, rc);
        return FALSE;
    }
}

BOOL apxGetServiceUserW(LPCWSTR szServiceName, LPWSTR szUser,
                        DWORD dwUserLength)
{
    HKEY  hKey;
    WCHAR wcName[SIZ_RESLEN];
    DWORD rc, l = dwUserLength * sizeof(WCHAR);
    DWORD t = REG_SZ;
    if (lstrlenW(szServiceName) > SIZ_RESMAX)
        return FALSE;
    lstrcpyW(wcName, REGSERVICE_ROOT);
    lstrcatW(wcName, szServiceName);

    rc = RegOpenKeyExW(HKEY_LOCAL_MACHINE, wcName, 0, KEY_READ, &hKey);
    if (rc != ERROR_SUCCESS) {
        return FALSE;
    }
    rc = RegQueryValueExW(hKey, REGSERVICE_USER, NULL, &t, (BYTE *)szUser,
                          &l);
    SAFE_CLOSE_KEY(hKey);
    if (rc == ERROR_SUCCESS && t == REG_SZ)
        return TRUE;
    else
        return FALSE;
}

DWORD apxGetMaxServiceTimeout(APXHANDLE hPool)
{
    DWORD   maxTimeout  = 20000;
    LPWSTR  wsMaxTimeout;
    DWORD   err;
    HKEY    hKey;
    WCHAR   wsBuf[SIZ_BUFLEN];

    lstrcpyW(wsBuf, CONTROL_REGKEY);

    if ((err = RegOpenKeyExW(HKEY_LOCAL_MACHINE, wsBuf,
                             0, KEY_READ, &hKey)) != ERROR_SUCCESS) {
        return maxTimeout;
    }
    wsMaxTimeout = __apxGetRegistrySzW(hPool, hKey, REGTIMEOUT);
    RegCloseKey(hKey);

    if (wsMaxTimeout[0]) {
        maxTimeout = (DWORD)apxAtoulW(wsMaxTimeout);
    }
    apxFree(wsMaxTimeout);

    return maxTimeout;
}

redpajama_set_name: RedPajamaGithub


text:
PRESS RELEASE: APC MUST ENSURE FREE AND FAIR PRIMARY ELECTIONS IN EDO AND ONDO STATES
in Nation, Politics
APC MUST ENSURE FREE AND FAIR PRIMARY ELECTIONS IN EDO AND ONDO STATES
I welcome the recent announcement by the Independent National Electoral Commission (INEC), indicating the reopening of their offices in Edo and Ondo States in preparation for the forthcoming governorship elections in both states. This is very heartwarming, moreso giving the ravaging effect of the COVID-19 pandemic. It is also an indication that, whatever the situation during the dates for the said elections, INEC will be prepared for free, fair and crisis-free elections in both states.
I also welcome most warmly the news that Mr President has firmly endorsed the agreement reached to settle the disruptive leadership crisis at the national level that was threatening the very existence of the All Progressives Congress (APC). The immediately relevant part of the agreement was that both the governors; Mr Godwin Nogheghase Obaseki of Edo State and Mr. Oluwarotimi Odunayo Akeredolu, SAN of Ondo State have performed creditably and should be returned unless they do not so wish. This means that the party, in unity, should organise to support the return of both governors.
Our democracy of course has no room for imposition, so the party must accept and also present any member that offer themselves to serve in the positions being occupied by the incumbent governors. It is my hope and prayer that a consensus can be built behind the incumbent governor of Edo State for the following reasons:
1. He has not offended against any aspect of the APC's constitution nor has he, in any way, brought the party to disrepute.
2. He has performed in an exemplary manner. In his time, there has been peace and freedom for the ordinary Edo man and woman from harassment by official thugs. In addition to improving all aspects of infrastructure in the more rural areas of the state, he has significantly impacted on job creation by opening up opportunities for our youths in the rapidly expanding high-tech industry. Also, since the crisis, the Governor's popularity has grown tremendously, for obvious reasons, and across party lines.
3. Through him, Edo State must prove that our democracy can only survive if we do not create a situation where an individual or a small group can make or unmake our Governors or other elected officials at will.
Therefore, given the widely known peculiarities of Edo State, if a consensus cannot be built behind the incumbent, everything must be done to ensure that the persons in the leadership of the party at the centre who are part of the contrived crisis in Edo State must not even remotely be allowed to plan, participate or supervise the primary election. It is of critical importance that the primary be seen even by a blind man, to be free and fair otherwise there would be political consequences. Allowing any member (s) of the national leadership who have been involved in the contrived crisis in Edo State would equate making such person or persons judges in their own case. This is contrary to the principle of natural justice and will be naturally resisted.
Transparency must start with the guidelines as to how the primary elections will be conducted. This is yet to be issued, even though dates have been announced. The nature of the primary election in Edo State will determine the shape and survival of APC as a political party. It will show Nigerians, and indeed the world whether APC is a party of truth, change and progress, driven by the principles of fairness, social justice and equity, or if it has become a party that believes and promotes business as usual!
John E. K. Odigie-Oyegun, CON.
Immediate past National Chairman of APC


Don't we all just want to belong?
The arriving passengers couldn't miss the sign as they exited Helsinki's airport.
It was late November, a couple of years ago.
Many were there for SLUSH, a tech start-up conference in Finland's capital… just as the days turned shorter and darker (3:27 p.m. sunset!?), and the temperatures were dropping.
Images of the sign soon went viral. Some experts called it one of the best travel promotions ever. Praise poured in for the ingenuity and honesty of the message.
What made SLUSH's message especially powerful was how it appealed directly to the psyche of the attendees, their sense of belonging, their community. The message was edgy, aggressive, confident – just like them.
This craving for "belonging" plays out all around us every day – in sports, in education and business, in our faith communities and non-profits, in pretty much anything that fills our lives.
Bell Let's Talk unites millions of Canadians around mental health awareness and openness. It creates belonging.
Harley-Davidson owners belong to a distinct community rooted in freedom and rebellion.
In Canada, the Tragically Hip have built their own tribe for years.
And those start-up badasses visiting Helsinki every November? They belong too.
The best marketers know about our need to belong. They recognize it… and even appeal to it.
Marketing used to be all about us… and what we sell.
That approach doesn't work any longer. If anything, it tunes people out.
It needs to be about them, not us.
In the run-up to Christmas a few years ago, Patagonia (the outdoor clothing and gear company) ran a campaign that explicitly told customers "Don't buy this jacket." Wait a minute, WHAT?
The message was about belonging.
We can do this with our own communities too, if we're up to it.
Knowing and appreciating what matters to them. What they care and worry about. The problems they want to solve.
Showing (and proving) that we hear and understand them.
Appealing to the traits that make them unique. And then enabling them to feel included with others who share those traits, see the same opportunities and experience similar challenges. To connect.
This isn't always easy to pull off.
You'd think it is, but it's not. It requires discipline and intention – and a pronounced mindset – to focus on them, not us.
So, as you craft your marketing message – in any form, any medium – remember that it's not really about you.
And inviting them to belong.
Are you enabling people to belong?
Are you focused on them, not you?


EndoVenous Laser Treatment (EVLT) treats varicose veins by directing laser energy inside and along the length of the veins being treated. This minimally invasive procedure requires a probe to be inserted into your vein. It doesn't require any downtime, though you might need to wear bandages and compression stockings for up to three weeks post-treatment.


Deleting Employees after they leave.
At present, because of the need to preserve sales data it is not possible to entirely delete an employee when they cease working for a retailer using AirPOS.
What you can do is unassign them from any and all locations that you have setup. If you do that their name will no longer appear on the employee login screen and their PIN will not work.
In our example we have setup a temporary employee called 'Team EAS' for a one off function to allow temporary staff to use the POS and now we want to remove that employee.
In order to do that you'll need to access the backoffice and click or tap on 'POS' from the top left margin as shown below.
In the new screen select 'Employees'.
Click or tap on the 'Modify User' button for the employee you want to remove. In this instance 'Team EAS'.
Scroll down to the 'Employee Location' section and you'll see the locations that the employee was assigned to, in this case 'Van Shop, Belfast' and '3 - 5, Belfast' as shown below.
Deselect both locations and press the 'Update Employee' button.
When next you open the POS application you'll see at the top a message that there are 'Employee updates available'. with a refresh button.
If you tap on that button the screen will refresh and the updated POS screen will be shown to reflect the changes you made in the backoffice.
Notes: Employee names appear on the login screen if you use the same PIN for more than one employee otherwise employees will just need to use their PIN to login without tapping on their name first.
We do intend to provide an easier way to do this.


In this episode we interview Shanta Maxey aka "Loveable Curves Maxey". She talks about her successes and trials in losing 100lbs, and also shares her motivation to continue on with her journey.
She explains how a twitter follower motivated her to start her weight loss journey!