text:
Health benefits measure vetoed / Governor calls bill aimed at big firms a 'job killer'
2006-09-14 04:00:00 PDT Sacramento -- Gov. Arnold Schwarzenegger vetoed a bill Wednesday aimed at mega-retailer Wal-Mart that would have required employers with more than 10,000 workers to spend at least 8 percent of total wages on health benefits.
Business groups opposed the measure -- SB1414 by state Sen. Carole Migden, D-San Francisco -- as an unfair tax on the state's 69 largest employers who would either pay out the 8 percent or pay an equivalent amount to the state.
Schwarzenegger called the bill a "job killer."
"(This bill) does nothing to address the health care challenges we face," the GOP governor said in his veto message. "Singling out large employers and requiring them to spend an arbitrary amount on health care does nothing to lower costs or guarantee that even one more person has health care coverage."
Migden said the bill was designed not to solve the health care crisis but to ensure better health benefits for workers.
"The governor's logic is faulty in saying the bill accomplishes nothing. Try telling that to the 40,000 Wal-Mart employees that would have received real health care benefits," said Migden.
Greenwich man charged in Stamford fatal hit-and-run has history of driving offenses, records show
By the time Migden introduced her bill in February, measures imposing some form of health care mandate on employers had been introduced in 21 other states.
Her bill was modeled after a similar measure that became law in Maryland where the only private sector employer of more than 10,000 was Wal-Mart. A federal court struck down the Maryland law in July.


text:
The Transcona Rangers change their name to the Winnipeg Rangers.

Regular season

Playoffs
Semi-Finals
Brandon defeated Braves 3-games-to-1
St. Boniface lost to Rangers 3-games-to-2
Turnbull Cup Championship
Brandon defeated Rangers 3-games-to-2 with 2 games tied
Western Memorial Cup Semi-Final
Brandon defeated Fort William Hurricanes (TBJHL) 4-games-to-none
Western Memorial Cup Final (Abbott Cup)
Brandon lost to Edmonton Oil Kings (CAHL) 4-games-to-3

Awards

All-Star Teams

References
Manitoba Junior Hockey League
Manitoba Hockey Hall of Fame
Hockey Hall of Fame
Winnipeg Free Press Archives
Brandon Sun Archives

MJHL
Manitoba Junior Hockey League seasons

redpajama_set_name: RedPajamaWikipedia


text:
National Endowment for the Humanities, Public Scholar Program, Division of Research Programs, Individuals.
Posted on April 20th, 2019	. Full article
National Endowment for the Humanities, Public Scholar Program, Division of Research Programs, Individuals. $5,000/mo. 6-12 mos. Output: Book. Average applications: 324; funding ratio: 9%; awards per competition: 29; due February 5, 2020. https://www.neh.gov/grants/research/public-scholar-program
National Endowment for the Humanities, Collaborative Research Grants, Individuals, Organizations.
National Endowment for the Humanities, Collaborative Research Grants, Individuals, Organizations. Convening Grants: $50,000; Publication Grants: $250,000 (no more than $100,000 per year). 1-3 yrs. Output: Book, Digital Material & Publications, Other Scholarly Resource, Themed issue of peer-reviewed journal, Conference, Workshop. Average applications: 114; funding ratio: 9%; awards per competition: 10; due December 4, 2019. https://www.neh.gov/grants/research/collaborative-research-grants
National Endowment for the Humanities, Scholarly Editions and Translations Grants, Division of Research Programs, Individuals, Organizations.
National Endowment for the Humanities, Scholarly Editions and Translations Grants, Division of Research Programs, Individuals, Organizations.Max. $300,000. 1-3 yrs. Output: Book; Translation; Edition; Music edition. Average applications: 108; funding ratio: 22%; awards per competition: 24; due December 4, 2019. https://www.neh.gov/grants/research/scholarly-editions-and-translations-grants
National Endowment for the Humanities, Summer Stipends, Individual.
National Endowment for the Humanities, Summer Stipends, Individual. $6,000/mo. 2 months. Output: Book, Article; Digital Material & Publications; Archaeological Report; Translation; Edition; Other Scholarly Resource, Division of Research Programs, 2 months, Average applications: 834; funding ratio: 9%; awards per competition: 77; due September 25, 2019. https://www.neh.gov/grants/research/summer-stipends
National Endowment for the Humanities, Media Projects: Production Grants
National Endowment for the Humanities, Media Projects: Production Grants, Division of Public Programs. Organizations. Max. $1M. 12-36 mos. Output: Film/TV/Video Broadcast or Recording; Podcast; Online Video. Average applications: 36; funding ratio: 16%; awards per competition: 6; due August 14, 2019. https://www.neh.gov/grants/public/media-projects-production-grants
National Endowment for the Humanities, Media Projects: Development Grants
National Endowment for the Humanities, Media Projects: Development Grants, Division of Public Programs. Organizations. Max. $75,000. 6-12 mos. Output: Film/TV/Video Broadcast or Recording; Podcast; Online Video. Average applications: 30; funding ratio: 10%; awards per competition: 3; due August 14, 2019. https://www.neh.gov/grants/public/media-projects-production-grants
National Endowment for the Humanities, Digital Humanities Advancement Grants.
National Endowment for the Humanities, Digital Humanities Advancement Grants. Organizations. Max. $320,000 in outright, $50,000 in match. 12-36 mos. Output: Curricular Materials; Course; Book; Article; Report; Computer Program; Database/Archive/Digital Edition. Average applications: 126; funding ratio: 14%; awards per competition: 18; due June 19. https://www.neh.gov/grants/public/digital-projects-the-public
National Endowment for the Humanities, Digital Projects for the Public, Production Grant.
National Endowment for the Humanities, Digital Projects for the Public, Production Grant. Organizations. Output: Game/Simulation; Mobile App; Virtual/Augmented Reality. Max. $30,000 (Discovery grants); 100,000 (Prototyping grants); $400,000 (Production grants). Max. $400,000. 1-3 yrs. Average applications: 78; funding ratio: 9%; awards per competition: 7; due June 19. https://www.neh.gov/grants/public/digital-projects-the-public
National Endowment for the Humanities, Infrastructure and Capacity Building Challenge Grants
National Endowment for the Humanities, Infrastructure and Capacity Building Challenge Grants, Organizations. Max. $750,000. 5-6 yrs. Output: Buildings; Equipment; Digital Infrastructure. Average applications: 146; funding ratio: 20%; awards per competition: 29; due May 15, 2019. https://www.neh.gov/grants/preservation/infrastructure-and-capacity-building-challenge-grants

redpajama_set_name: RedPajamaCommonCrawl


Every day starts with the sun. And for me virtually every weekday starts with a new program of music to consider. For that to happen much of my week is spent in listening and relistening. It is worth it for the joy of following what is new. Today we have something slightly unexpected in the music of Andrew Rosciszewski, specifically a CD called Sonic Real Estate (self released CD). He recorded and mastered this album up in Bayonne, NJ, so he is perhaps one of my home boys.
And the music? It is a rather nicely unusual kind of Post-Minimalism, a Radical Tonality kind of Modern. Not especially repeat-oriented, but poetic and expressive.
We get a great start with his four-movement "Trio No. 1 for Violin, Cello and Piano." There is a good deal of contrast between the movements. The 3rd section, "Doloroso" stands out as a cycle of chorale-like phrasings. The second movement comes out very brio and lively. The first and fourth movements have the kind of dramatic impact that warrants their positions as opener and closer. The somewhat grotesque waltz motif that opens the final movement gives way to contrapuntality and then a expansion of a kind of goblinesque romp well suited for this time of year, Halloween. The movement returns to the slow clock chime motif of the opening and leaves us in a state of wonder, nicely so.
A brief "Piesn Wdowy" for cello and piano follows. It is solemn and reflective, lyrical and expressive. And in the end lively.
"Music for Three Instruments:" clarinet, flute, and cello for the recording. There is some relation to Avant Improv in the level and manner of expression and also a High Modern aspect in terms of the harmonic-melodic panorama it gives to our ears.`.
A fairly brief "Impromptu" for piano sounds a bit more rhapsodic than the rest of this. It is in a genre surely yet not entirely predictable.
And then finally we get the title work, a Fusion-Prog sojourn for electric and acoustic instruments with a nice feeling of contrapuntal movement and a fine sense of syntactical dramatics. It is the surprise of the program but then you can see how it comes out of Rosciszewski's sense of melodic-harmonic form. It is in seven and it excels as a Prog compositional showcase. It is worth the price of admission alone if you are so inclined in such stylistic directions.
In the end the music holds its own and makes a dent surely in the sort of tonal melodic worlds possible today. Nice work!


Earlier this month, I wrote about the impact of the tort system on flu vaccine availability in the United States. Interestingly, travel companies are now bundling flu vaccination with vacation opportunities in Canada. Fodor's has an interesting story about the "Flu-Shot Ferry", a round trip between Seattle and British Columbia selling for $105 with the flu shot included. The same story also links to an interesting Boston Globe article entitled "Business brisk as Americans stream to Canada for flu shots" which talks about the Flu-Shot Ferry as well as other flu vaccination/vacation opportunities available throughout Canada, such as a weekend plane trip from New York to Montreal.
Today's Wall Street Journal article entitled "For Math Whizzes, The Election Means A Quadrillion Options" provides an overview of the various quantitative techniques being employed by geeks all over the country who typically are tenured college professors who probably have too much time on their hands. Notwithstanding the barrage of criticism which has been leveled at the prediction markets (e.g., one commentator has described the Iowa Electronic Exchange Market as "college students playing with their lunch money", and others have offered even more unflattering comments which will not be repeated here), I remain a fan and am looking forward to how the realized election results line up with these markets' predictions.
If Bush holds onto the states with contract prices exceeding $60, a win in Ohio would put him over the top. If Bush does not win Ohio, he can still be reelected by taking Wisconsin, New Mexico, and New Hampshire. Kerry on the other hand, will not likely win the election without taking Ohio. Of course, various other permutations are possible. The prediction markets data suggest the possibility of a 269-269 tie in the electoral college, which would happen if Kerry wins Ohio, New Hampshire and Minnesota, while losing Wisconsin and New Mexico to Bush.
Certainly the quantitative models are interesting, and as indicated by the Wall Street Journal article referenced above, suggest that the election may very well be somewhat of a toss-up. However, there is probably no predictive indicator which has been as consistently accurate as the Weekly Reader poll. Since 1956, Weekly Reader students in grades 1-12 have correctly picked the president. As noted on the Weekly Reader website, "President Bush was a strong winner in the student poll; the only state Senator Kerry won was Maryland. Senator Kerry was also in a statistical dead heat with President Bush in New York, Massachusetts, Washington, D.C. and Vermont. President Bush won most grades, although Senator Kerry did win among tenth-graders." Also, results by grade are shown on the Weekly Reader website, in case if you are interested.
Today, the Tradesports website made high, low, and closing daily price data available for the PRESIDENT.GWBUSH2004 and PRESIDENT.KERRY2004 futures contracts. Below, I provide the graph of daily closing prices for the period August 11, 2004 (which is the first day that the Kerry contract started trading) through October 20, 2004.
In today's Wall Street Journal, there is a very interesting and insightful article entitled "Infectious Politics" that explains why flu vaccines in particular and vaccines for infectious diseases generally are in such short supply in the United States. The contributing factors appear to involve a combination of price controls, regulation and tort lawyers. Of course, I made the latter point (concerning tort) the other day in my blog entry entitled "Impact of the tort system on flu vaccine availability in the United States".


One of the main advantages of social media is that it allows businesses to have a more personal connection with their consumers. That, of course, is just in theory. Unfortunately, far too many companies squander this opportunity. The result of this is lacklustre engagement and perhaps, even followers leaving the account after a while.
If you are like most companies, then you have a posting schedule all figured out. Thus, you know when it is time to create content and when you need to post it. What many businesses fail to do, though, is to set aside time for interacting with their followers. As a result, any communication that you do have with your consumers tends to be rushed or unplanned.
This is why the first thing that you need to do is to actually make time for comments and queries. If there is just a single person running the account, for instance, you may need to do this at the beginning of every work day. If you have a slightly larger team at your disposal, you may be able to respond to your followers immediately.
A more subtle way to connect with your followers is to figure out what they want and give it to them – at least in the form of posts and tweets. The trick, of course, is figuring out just what it is that kind of content your followers are into. The easiest way to do this is to hire social media experts.
Understand, there are individuals at companies like Shout Social Media Agency whose sole purpose is to determine what your followers like. They do this by auditing your current online presence and identifying what works. Furthermore, they look at various trends and determine just how compatible these are with your brand. As such, they are much better equipped to tell you how you should proceed in the future.
In case you are wondering why you should be making all of this effort, the answer is simple. The social media landscape is large and at any given moment, your followers are looking at content from dozens or more other accounts. Therefore, if you aren't producing content that they like, you can guarantee that they will not be engaging with your account.
Since you run a business, you may be tempted to stick with formal posts and very stiff text. Now, while your posts should always be professional, you may want to take a more laidback approach with the language you are using. These days, people are a lot more used to including pop culture elements in their wording and posts.
This is something that you should certainly think about doing, particularly when you are commenting or responding to followers. You will then be able to approach your followers with a more relaxed air, encouraging them to start or continue a dialogue with your account.
So, what are the elements that you can rely on? Well, emojis, GIFs, and memes tend to be rather popular and are simple to use. Just remember to make sure that anything that you are using is appropriate both for the situation as well as in terms of content.
One of the best ways to make people feel more comfortable with your business account is to hand a little bit of the power over to them. Don't worry, this doesn't mean that you actually have to relinquish control over your account. Rather, it is about requesting user-generated content from the people that follow you.
If you want to connect with your followers, you need to make it seem that your brand is genuine. So, rather than posting images of models with your products, why not let your customers do the advertising for you? Not only is it cost-effective, but when your followers see "real" people using their products, they will be more trusting in your brand. This will automatically lead to better engagement, especially through more user-generated content.
Although connecting with your followers as a business may seem improbable, it actually isn't. All of the strategies here will make it a great deal easier for you to truly engage with your audience.


Can I Remote Start My Manual Transmission Vehicle?
You are here: Home / Remote Car Starters / Can I Remote Start My Manual Transmission Vehicle?
One of the common questions we get at Sweet Sounds in Mankato is, "Will a remote starter work on my manual transmission vehicle?" The short answer is yes. Follow along as we explore how this technology works on our systems, as well as the safety features integrated into it.
For starters, we exclusively use Compustar remote starters, which have been designed to work safely with a manual transmission since day one of their existence.
Compustar uses logic to confirm that your vehicle is left in a safe manner to allow it to remote start later. When you pull into a parking spot, you simply place the transmission in neutral and, while your foot is on the brake, simply set the emergency brake. Then you wait a few seconds before you turn off the ignition. What you will notice is the engine will keep running. After the last person gets out of the vehicle and shuts the door, the engine shuts off 15 seconds later and locks the doors. Your vehicle is now in what is called reservation mode. As long as no one opens any of the doors, the vehicle will remote start because it knows you got out while it was running, so it must be in neutral.
Please note: Manual transmission cars with push-to-start buttons operate slightly differently. If you call us or stop by at your convenience, we will be glad to explain.
For an extra step in security, all of our manual transmission remote starters come with DAS sensors. This sensor can detect as little as 3 inches of movement, so, in the super-rare chance the vehicle could be in gear and start, the sensor will detect the movement instantly and shut down the engine.
If your vehicle's engine is turbocharged, we can integrate our remote start as a turbo timer along with the manual transmission interface, giving the bearings in the turbo time to cool down and extending its life expectancy.
The only systems that won't work with a manual transmission are our entry-level systems. Any of our highly trained team members will be glad to show you the systems that will work on your vehicle.
Finally, the shop you choose to do your installation is as important as the product itself. All of our technicians are factory-trained and undergo continuous education to stay current with modern vehicle networks. Leaving your manual transmission remote start to anybody other than an absolute expert is asking for trouble. Our systems will provide you with years of comfortable and reliable service.
We invite you to stop by Sweet Sounds or contact us HERE for more information.


text:
NewsMusic News
Record Store Day 2020 has been postponed due to the coronavirus outbreak
"This decision comes at a time of unprecedented uncertainty"
By Damian Jones
Record Store Day 2020 has been postponed in the UK as a result of the continuing coronavirus crisis.
This year's annual event – due to be held on Saturday April 18 – was set to see hundreds of vinyl and cassette releases sold exclusively through independent record shops for one day only.
Read more: Coronavirus – every cancelled gig, festival and tour – and how to get your ticket refund
Up to 230 independent record shops from every corner of the UK, as well as thousands around the world, were set to take part in the celebrations with live in-store performances, mini street festivals and entertainment.
But with the ongoing coronavirus crisis continuing to hit the UK music industry, organisers have been forced to postpone this year's event until June 20.
We are sad to announce that following a decision made by the organisers of Record Store Day, the event will be postponed to June 20th. #RSD20 Full statement on our website here: https://t.co/h6G3dADTmG pic.twitter.com/EEqzToc5SN
— Record Store Day UK (@RSDUK) March 13, 2020
In a statement shared on Twitter, the organisers wrote: "We are sad to announce that following a decision made by the organisers of Record Store Day, the event will be postponed to June 20.
"This decision comes at a time of unprecedented uncertainty and the health and safety of the general public must come first. This was absolutely not an easy decision to make as hundreds of independent shops and labels have been working hard towards this year's celebrations."
You can read the full statement above.
The full list of special releases for Record Store Day 2020 included the likes of My Chemical Romance, Robyn, Gorillaz, New Order, Eminem, The Cure, Christine & The Queens, Biffy Clyro, U2, David Bowie and Manic Street Preachers, in aid of War Child.
Many concerts have been cancelled in the wake of the coronavirus outbreak. You can view a full list here.
NewJeans: "We want to show the industry that music shouldn't be divided by language"
Jake Shears: "I'm always the last one standing – this album is dedicated to those who remain"
Royel Otis are bringing a radically positive vision to Australia's guitar scene


text:
NWC Response to Article Documenting Illegal FDA Surveillance
Washington, D.C. July 14, 2012. Today, the New York Times released a groundbreaking story on the government's secret spying program on a group of whistleblowers employed by the Food and Drug Administration (FDA).
Stephen M. Kohn, the Executive Director of the National Whistleblower Center and the lead attorney for the FDA whistleblowers, issued the following statement:
We hope that the revelations in today's New York Times will mark a turning point in the battle to stop the retaliatory surveillance of whistleblowers who risk their careers to report misconduct.
The spying program revealed in today's New York Times article was illegal. The story demonstrated how government mangers used a covert spying program to interfere with the ability of federal employees to lawfully report significant threats to the public safety to Congress, law enforcement officials and the American people. We hope that these public disclosures will mark the beginning of the end of government spying on employees who report misconduct to the appropriate authorities.
It is well established that American citizens do not forgo their First or Fourth Amendment Constitutional rights when they work for the government. The opposite is true. The U.S. Supreme Court and numerous lower courts have recognized the importance of protecting government workers who expose wrongdoing. These protections are vital to a democratic society. Government whistleblowers are often the most important source of information exposing government misconduct, corruption and the waste of taxpayer money.
The conduct by FDA managers, designed to undermine a group of doctors and scientists who reported significant health and safety violations, is deplorable. Those involved must be held accountable.
New York Times Story (Sunday, July 15, 2012)(available now on-line)
NWC Action Alert
Additional Information on the FDA's Misconduct


text:
package com.rozdoum.socialcomponents.main.main;

import android.view.View;

import com.rozdoum.socialcomponents.main.base.BaseView;
import com.rozdoum.socialcomponents.model.Post;

/**
 * Created by Alexey on 03.05.18.
 */

public interface MainView extends BaseView {
    void openCreatePostActivity();
    void hideCounterView();
    void openPostDetailsActivity(Post post, View v);
    void showFloatButtonRelatedSnackBar(int messageId);
    void openProfileActivity(String userId, View view);
    void refreshPostList();
    void removePost();
    void updatePost();
    void showCounterView(int count);
}

redpajama_set_name: RedPajamaGithub


text:
N. Korea most urgent threat to peace, security: Pentagon chief
SEOUL, June 13 (Yonhap) -- North Korea is the most urgent threat to peace and security in the world, U.S. Defense Secretary Jim Mattis was quoted as saying in Washington on Monday (local time), citing the fast pace of development of Pyongyang's nuclear weapons program.
The Pentagon chief also told a hearing of the House Armed Services Committee that North Korea's weapons of mass destruction programs are a "clear and present danger to all," according to multiple news reports.
His remarks come as North Korea has threatened to test-fire an intercontinental ballistic missile capable of striking the mainland United States.
"The regime's provocative actions, manifestly illegal under international law, have not abated despite United Nations' censure and sanctions," Mattis reportedly said in written testimony ahead of the hearing.
Pyongyang has instead continued to pursue nuclear weapons and their delivery vehicles with increased pace and scope, the secretary added.
The Pentagon has requested a more than US$50 billion increase in defense funding this year for a total of $639 billion. Mattis attended the hearing to testify on the proposal.


Can you give a slower rise in the fridge. I imagine bakers or at least French bakers to be working most of the night, serving customers in the morning and knocking soon after 10 a.m., just leaving the staff to sell the rest by which point there vast ovens would have cooled and the thick stone walls of their building along with the tiled floors would become cool. Perhaps their last job would be to mix the dough and they would start again probably at midnight and work through the night. I think we need to start interviewing proper bakers, I noticed during my job search for a summer job this week that Davis's in Kenilworth are looking for a baker and that they bake through the night.
Another thought – you might need to buy French flour, to get that truly authentic crust and taste. I remember reading somewhere that we don't have enough gluten in our flour, so we import American flour to mix with our flour so that we are able to make good bread. The French have different flour again – something to do with the gluten.
That sounds like a possibility – the bakery in Leamington sells a specific French Bread flour so I might have to give it a whirl. The village baker at home used to bake through the night too; sadly retired when I was still quite little and there was no one to take over so there isn't anyone to ask. Perhaps I need a fact finding mission to Paris …!


text:
Genealogy of Branches of Aldrich, Bould, Lawrence, Osborne and Tyer Families
Many years ago my mother pieced together the family trees of the Bould and Tyer families that came to New Zealand from England. From there I have added to and started the family trees for the other branches of our family - the Aldrich, Lawrence and Osborne.
The Aldrich tree goes back to John Aldrich born c1700. Our branch is from Robert John Frost Aldrich who came to New Zealand via South Africa and Portuguese East Africa sometime between 1907 and 1911 .His wife, Florence Osborne, and two older sons followed in 1916.
BOULD
The Bould tree goes back to Thomas Bould who was born in c1600 in England. Our branch is from Robert Bould and Ann Slater who came to New Zealand in 1841 on the ship, the Lord William Bentinck. Their daughter, Martha Charlotte Bould, married Henry George (Harry) Tyer in 1877.
The Lawrence tree goes back to James Lawrence who was born in Frensham, Surrey c 1760. Our branch is from James Lawrence who was born in1849 at Shepherd's Bush in Surrey and who came to New Zealand with his wife, Elizabeth Amelia Fake, on the ship the Jessie Readman in 1871. Their son, John Ernest Lawrence, married Lilian Mary Tyer, daughter of Henry George (Harry) Tyer and Martha Charlotte Bould.
The Osborne tree goes back to John Osborne who was born in 1735. Our branch is from Florence Osborne who came to New Zealand with her two older sons in 1916, to join her husband, Robert John Frost Aldrich, who arrived in New Zealand sometime between 1907 and 1911.
TYER
The Tyer tree goes back to John Tyer of Thurlow in 1672. Our branch is from Henry George (Harry) Tyer who came to New Zealand between 1871 and 1874 following his brother Alfred who arrived in 1860 on board the Robert Small. He married Martha Charlotte Bould, daughter of Robert Bould and Ann Slater.


I'll be honest: I'm mad. I don't know where to start.
In the days since Ariana Kukors publicly revealed not only the brutal manipulation and abuse that Sean Hutchison inflicted on her, but the insidious grooming process he used to achieve it, the other characters in this story have been far too silent.
It's time to hold some feet to the fire. This blog is directed specifically at the media covering this story.
It is not an attack. It is a request. Hold their feet to the fire.
Schubert, who played a huge role in enabling Sean among many, many other things, is out in the media trying to cast himself as some sort of whistleblower that was ignored back in 2010.
Nothing could be farther from the truth. Schubert took his knowledge of Sean and used it as leverage to his own gain. He gladly accepted $625,000 to keep his mouth shut and went his way.
Oh, and he hired the man, Bill Jewell, who oversaw Hutchison day to day at FAST, Jewell was another enabler who fashioned himself as a whistleblower. He was quoted in the original Washington Post article in 2010 saying that he had looked into the "rumors" and addressed them with Sean.
Jewell would go on to be banned for three years from coaching by USA Swimming after a real whistleblower, Dia Rianda, actually held some feet to the fire.
As Craig Lord aptly put in a facebook comment underneath Schubert's latest distortion, there is some basic journalism that anyone that talks to Schubert should engage in. Spend 5 minutes googling Mark Schubert and Sean Hutchison and catch up on some of the above. Ask some follow up questions.
Mark Schubert is not a hero in this story. He is one of the villains.
USA Swimming cannot be allowed to put out statements like the one they did for Kukors without strong pushback.
"During the USA Swimming investigation, both Ariana and Hutchison, as well as Ariana's sister, Emily, unequivocally denied the existence of a romantic or sexual relationship"
USA Swimming loves to be cagey with revealing details about their "investigations", but here they are changing the rules and burning Kukors to defend themselves.
Kukors own story provides so many questions USA Swimming needs to answer. Why did their investigation consist of one brief phone call to Kukors? Why were they in such a rush to consider this "case closed" and move on?
Why did they have to pay Mark Schubert $625,000 dollars for his silence if nothing happened?
Most importantly, where do they get off throwing a sexual abuse victim under the bus? How do they justify that their organization is somehow more important than the welfare of a human being?
So again, my request goes out. Craig Lord, Swimswam, Deadspin, Scott Reid at the OC Register and anyone else that has shown a modicum of interest in this story. Hold their feet to the fire, keep asking questions, and don't let up until we get the answers we deserve.


The final Class III milk price of 2009 was announced New Year's Eve by USDA at $14.98 per hundredweight (cwt.) for December, up 90 cents from November but 30 cents below December 2008. That put the year's average at $11.36, down from $17.44 in 2008, and $18.04 in 2007. CME futures had the January contract settling Thursday at $14.22, February $13.89, March $14.49 and April at $14.77, with a peak of $16.11 in September. The December Class IV price is $15.01, up $1.76 from November and $4.66 above a year ago.
The NASS-surveyed cheese price averaged $1.5969 per pound, up 8 cents from November. Butter averaged $1.4459, up 6.4 cents. Nonfat dry milk averaged $1.2858, up 17.4 cents, and dry whey averaged 36.68 cents, up 2 cents.
California's December 4b cheese milk price is $15.04, up $1.28 from November, $1.09 above a year ago, and 6 cents above the comparable Federal order Class III price. The 4b averaged $11.05 in 2009, down from $16.85 in 2008 and $17.46 in 2007. The Golden State's 4a butter-powder price is $10.15, down $2.05 from November, and 4.61 below a year ago.
Cash cheese prices at the Chicago Mercantile Exchange ended the year on a down note and corrected the unusually large price spread but are sharply above those a year ago. The block price closed New Year's Eve at $1.45 per pound, down 11-3/4 cents on the holiday shortened week, but a whopping 31-3/4 cents above that week a year ago when they tumbled almost 14 cents, to $1.1325. This week's loss was in addition to the previous week's 13-1/3 cent decline.
Barrels closed at $1.43, down a penny on the week but 30 cents above a year ago. Sixteen cars of block traded hands on the week and three of barrel. The NASS surveyed U.S. average block price hit $1.6917, up 1.7 cents. Barrel averaged $1.4994, down 1.5 cents.
Butter held all week at $1.3275, 19-3/4 cents above a year ago. Nothing sold. NASS butter averaged $1.3556, down 8 cents. NASS nonfat dry milk averaged $1.3327, up 4.3 cents and dry whey averaged 37.25 cents, up 0.3 cent.
The cash cheese market answered a key question regarding the huge price spread, according to Dr. Brian Gould, Associate Professor at the University of Wisconsin. Everyone was wondering if the blocks would come down or would the barrels come up as it had been a concern, considering the record number of trading days it was so large.
Reading between "the cheese slices" in Tuesday's DairyLine, Gould pointed to American cheese stocks, which increased in November for the first time in five years so the downward price movement is not a surprise. He suggested that listeners log on to the University's Web site, "Understanding Dairy Markets," at http://future.aae.wisc.edu, where the values of cheddar cheese are imputed, based on the current daily Class III, butter and dry whey futures prices.
When asked if cheese demand is down or pizza sales lagging, Gould admitted he did not have current commercial disappearance numbers due to the lag in reporting, but production data from January through November of this year showed Cheddar output was up 2.4 percent from a year ago.
Given current whey prices, Kurzawski said that a $1.50 cheese price would equate to a Class III milk price of about $13.85-$13.90 per cwt.
Recent reports show that milk production in Oceania is not as strong as anticipated and may only be up 1 to 1.5 percent from the previous season in New Zealand. It was down 5 percent in Australia in the July to October period.
Oceania Cheddar is running around $2 per pound so some expect U.S. prices to rebound soon. And, Super Bowl demand is also on the horizon.
"Producers need to have a worst case scenario floor price on the table for discussion," he concluded.


I had some issues today with the Windows 8 WiFi connection on my Dell XPS 12. Short story (the long one is tedious): I was using the machine at my local Acura dealer while waiting for the service on my wife's car to be completed. I closed the lid once I could pay and get the car, yet when I opened it again at home, all Windows 8 wanted to do was to reconnect to the Acura dealers WiFi. It wouldn't show my home WiFi at all. Even funnier (in hindsight), running the Troubleshooter resulted in a request to activate a 'manual' WiFi profile for an older wireless network for somewhere else.
Fine, I thought, let's just remove it from the list of wireless profiles. On Windows 7, it's a piece of cake: open Network and Sharing Center (right click on the Network icon in the notification tray), and then select Manage wireless networks. At that point you can remove ones you don't use, rearrange the others, etc, and generally play at being a Network Systems Admin.
On Windows 8, it's gone. The UI is no more. You can download a freebie third-party app if you want (here's one), but bloody hell.
And there you have it. A little more tedious to be sure. Oh, and I had to reboot the laptop anyway: Windows 8 resolutely wouldn't show any other wireless networks (including the one three feet away) apart from my dealer's one.
@Nadeem: Really? Seriously? That page you linked to uses exactly the same method as I showed here. It cannot be easier, it cannot be clearer, since it's the same "open a command window, execute these commands." D'oh! I'll admit though that page has way more annoying ads, interspersed in the middle of the article.
What was easy to do via the GUI under Win7 suddenly requires use of the Command Prompt in Win8 !!!! - what are the Windows development team smoking?
Also that 3rd party utility looks like it has problems from the user feedback - so use with caution.
Check out this other tool: it is very good and cover all your needs for profile management, without requiring using command line methods: http://main.kerkia.com/Products/WinFi/description.aspx.


SAN DIEGO (KUSI)- In just its first 6 months, a county program to help Alzheimer patients is getting statewide attention. County leaders and first responders met at the Grossmont Healthcare District's headquarters to recognize the pilot program. The program created the Alzheimer's Response Team.
The program pairs specially trained first responders with a social worker within an hour of a dementia-related incident, so the person with Alzheimer's doesn't end up in an emergency room or something worse.
Social worker Lashaunda Gaines pointed to the success of one of 50 such cases already, including help for the patient's family and caregiver.


text:
'AGT Extreme' Not Scheduled, but NBC 'Planning' to Air Show in Midseason
Investigation into scary on-set accident is still ongoing
Tony Maglio and Jennifer Maas | November 12, 2021 @ 11:30 AM
AMERICA'S GOT TALENT: EXTREME -- "First Look" -- Pictured: (l-r) Simon Cowell, Terry Crews, Nikki Bella, Travis Pastrana -- (Photo by: Eliza Morris/NBC)
"America's Got Talent: Extreme" is not on the midseason schedule NBC released Friday, but the network is still "planning" to air it then, Frances Berwick told TheWrap. This, despite the "America's Got Talent" spinoff's ongoing production hiatus and pending investigation into a scary on-set accident during a stunt gone wrong.
"We are still planning to have it on the schedule. We haven't set a date for it," Berwick said. "We've certainly paused production and as you know, we have an investigation ongoing into what actually happened. But we do anticipate the show coming back in midseason."
Asked if there are new or changed safety protocols for when the show returns from its production hiatus, Berwick said, "Obviously, we had a lot of safety protocols in place. We have to conclude the investigation, but we've certainly paused production for the time being."
'LA Brea' Renewed by NBC for Season 2
One of the logical places for "AGT: Extreme" to air would be the vacant Sunday time slots following the conclusion of the NFL season, Super Bowl LVI (which NBC also has) and the 2022 Winter Olympics.
That could happen, Berwick acknowledged. But she was pretty cagey about the whole thing.
Last month, stunt performer Jonathan Goodwin was horribly injured on the set of "AGT: Extreme," to the point that paramedics initially thought he was dead.
Here Are Broadcast TV's Winter 2021-2022 Premiere Dates
Goodwin, who appeared on the flagship version of "America's Got Talent" last year, was performing a truly insane stunt in which he attempted to escape from a straitjacket while hoisted 70 feet in the air and suspended between two swaying cars. Goodwin got loose from the jacket but then became wedged in between the two cars as he fell (there was an air mattress on the ground to catch him). The impact caused the cars to explode, and when Goodwin finally landed, he hit his head.
On Oct. 20, Goodwin shared a status update from his hospital bed, his face badly injured and his arm in a cast, but making a funny face.
"A couple of days ago my life took a complete left turn… and the outpouring of love from all the corners of the world; from people I didn't even think would know or remember me… has just been astonishing. Truly incredible," Goodwin wrote.
No Peacock Signups Update as NBCU Execs Sidestep Streaming Performance on Comcast Earnings Call
Later in the post, he added: "To death I say nananana boo boo… and to the rest of you… watch this space. There is a long road to recovery and that won't look like what it did…I may leave the daft shit alone for a while, but I have a lot left to do in this world."
"AGT: Extreme" is judged by WWE superstar Nikki Bella, motocross rider Travis Pastrana and "America's Got Talent" mastermind Simon Cowell and is hosted by Terry Crews.
Per NBC's logline, "Each week contestants will go head-to-head in the most wild, intense and often times beautiful performances to vie for a $500,000 prize and the ultimate title, the champion of 'America's Got Talent: Extreme.'"
Injured 'AGT: Extreme' Stuntman Posts Update From Hospital: 'There Is a Long Road to Recovery'
Along with "AGT: Extreme," previously ordered NBC shows that have not yet received a premiere date include "The Wheel" "L.A. Fire and Rescue" and "Night Court."
New shows that did make the cut for midseason are comedies "American Auto" and "Grand Crew," drama "The Endgame," the revival of "Law & Order," limited series "The Thing About Pam" and unscripted shows "American Song Contest" and "That's My Jam."


text:
The Government Polytechnic College, Nagercoil, Tamil Nadu is one of the two polytechnics founded in 1959 under the second five-year plan. It was initially functioning in the South Travancore Hindu College Premises with 120 students. At that time, there were three branches, Civil Engineering, Mechanical Engineering and Electrical & Electronics Engineering. It was then shifted to the present campus spreading over 20 hectares in September 1963. The technical High school was then part of the Government Polytechnic College, Nagercoil institution till the year 1986. At present, the curriculum has expanded into five diploma courses namely Civil, Mechanical, Electrical & Electronics And Electronics and Communication Engineering and Computer Engineering, with an intake of 60 students in each branch together with 20 per cent of students through lateral entry. Besides, part-time diploma courses are part of the institution since the academic year 1978-79.

The institution is approved by AICTE.

Number of students in full-time - 1020
Number of students in part-time - 227

External links
 Officoial website of the college

References

Engineering colleges in Tamil Nadu
Universities and colleges in Kanyakumari district
Education in Nagercoil
Educational institutions established in 1959
1959 establishments in Madras State


text:
AD Williams Scholarship fund receives donation from MHS Classes of 1952 and 1953
(Above) Members of the Classes of 1952 and 1953 presented their donation to the Arland D. Williams, Jr. Scholarship during a class assembly at Williams Elementary School. (Pictured, L-R) Denise Titus (Assistant Principal, Williams Elementary School), Jack Collinsworth (classmate), Ed Dowling (classmate), Helen Dowling (classmate), Gayla McDaniel (scholarship distribution committee member), Kris Maleske (Principal, Williams Elementary School)
During their final class reunion, the Mattoon High School Classes of 1952 and 1953 recently made the decision to distribute the remaining funds in their reunion account to the Arland D. Williams, Jr. Scholarship Fund. The gift of $1,000 was presented to scholarship committee member Gayla McDaniel during an assembly at Williams Elementary School in May. Upon receiving the gift, Gayla expressed her gratitude to the classes for their continual support of the scholarship fund: "The Classes of 1952-1953 have been incredibly loyal to the legacy of Arland D. Williams, Jr. Throughout the years at each class reunion they would 'pass the hat' for donations to the scholarship fund, always making sizable contributions in their fellow classmate's memory. This major donation to the scholarship fund marks the end of an era; not only of continual tributes by these classmates, but the end of an era of recognizing what a true hero is in our country. Our world today doesn't show loyalty in this manner."
The Arland D. Williams, Jr. Scholarship provides financial assistance for Mattoon High School graduates majoring in the field of finance, banking, accounting, economics or computer sciences. The scholarship honors the memory of the late Arland D. Williams, Jr. who graduated from Mattoon High School and became a well-known example of extraordinary heroism when his actions saved five people after a 1982 airplane crash in Washington D.C. His selfless actions cost him his life but his heroism lives on.
Arland D. Williams Jr. Scholarship


text:
Third application to build on Brockham green belt land submitted
Plans to build 35 homes submitted after previous applications for larger estates off Kiln Lane were rejected
A developer is hoping for third time lucky as he submits another planning application to build on green belt land in Brockham.
Paul Hunt, who lives within view of the five-acre site off Kiln Lane, this time wants to build 35 homes there.
Mr Hunt, the managing director of Paul Hunt Developments, has already seen applications for 45 and 44 homes for the site refused, with some objectors claiming the houses could affect views from Box Hill.
He maintains the latest scheme answers the points made by government planning inspector John Papworth when he threw out earlier plans.
Mr Papworth had noted in his decision ruling: "It is clear from the topography of the site, being more 'domed' than 'depressed', that the development would have a profound and serious adverse effect on openness.
"Essential characteristics of green belts are their openness and their permanence".
Mr Hunt said: "The planning inspector referred a number of times to the raised land on the site. He is right that two-and-a-half acres rises quite steeply, but the other half is quite flat.
"Our proposal is to build on the flat area, so that from the North Downs you'll hardly be able to see the new development at all."
The 34-home plan includes proposals for 12 flats and 22 houses, 15 of which would be classed as affordable.
"We're hoping 11 will be available for social rent on a 'Brockham lettings first' scheme," Mr Hunt said, arguing that this would help provide needed affordable homes.
"We tried to put new homes on the site and we accept we were wrong but we've listened and we still want to provide much-needed housing in the area," he said.
Roger Abbot, chairman of the Nutwood Action Group that has led opposition to the plans, said Mr Papworth had not mentioned any flat area of land on the site which might be suitable for development.
"The whole area of land is dome-shaped and important," he said. "This application has totally ignored the planning inspector's decision.
"It's for 34 homes this time, on half of the land.
"It was high-density before, when it was 45 homes. The density has now been increased by more than 30%.
"I can't see how this is going to be allowed. The people of Brockham don't want a development there and he has not respected them."
But Mr Hunt is not about to go away, and Mole Valley development control councillors will make a decision on his latest application in the autumn.
"We won't give up," Mr Hunt insisted. "The committee will see that we've listened to the inspector."
The success of the application may depend on the outcome of a Mole Valley District Council review into green belt sites.
It has been accepted by some councillors at Pippbrook that building on the green belt may be necessary to meet the need for new homes in Mole Valley.
But the results of its review are unlikely to be known until December.
Mole Valley District Council


text:
using MultiMiner.Engine.Installers;
using MultiMiner.TUI.Data;
using MultiMiner.Utility.Async;
using MultiMiner.UX.Data;
using MultiMiner.UX.Extensions;
using MultiMiner.UX.IO;
using MultiMiner.UX.OS;
using MultiMiner.UX.ViewModels;
using MultiMiner.Xgminer.Data;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Reflection;
using System.Timers;

namespace MultiMiner.TUI
{
    class MinerApplication : ConsoleApplication
    {
        enum CredentialsPhase
        {
            None,
            Username,
            Password
        }

        private readonly ApplicationViewModel app = new ApplicationViewModel();
        private readonly ISynchronizeInvoke threadContext = new SimpleSyncObject();
        private readonly List<NotificationEventArgs> notifications = new List<NotificationEventArgs>();
        private readonly List<string> replBuffer = new List<string>();
        private readonly Timer mineOnStartTimer = new Timer(2000);
        private readonly CommandProcessor commandProcessor;
        private readonly CommandProcessor settingsProcessor;
        private readonly ScreenManager screenManager = new ScreenManager();

        private readonly bool isWindows = Utility.OS.OSVersionPlatform.GetGenericPlatform() != PlatformID.Unix;
        private readonly bool isLinux = Utility.OS.OSVersionPlatform.GetConcretePlatform() == PlatformID.Unix;
        private readonly bool isMac = Utility.OS.OSVersionPlatform.GetConcretePlatform() == PlatformID.MacOSX;

        private string currentProgress = String.Empty;
        private PromptEventArgs currentPrompt;
        private DateTime promptTime;
        private string incomeSummaryText = String.Empty;
        private int replOffset = 0;
        private int mainOffset = 0;
        private int screenNameWidth = 0;

        private CredentialsPhase credentialsPhase;
        private DeviceViewModel credentialsTarget;
        private string credentialsUsername;

        public MinerApplication()
        {
            commandProcessor = new CommandProcessor(AddNotification, (s) =>
            {
                replBuffer.Add(s);
            });

            var setCommand = CommandNames.Set.ToLower();
            settingsProcessor = new CommandProcessor((s) =>
            {
                AddNotification(String.Format("{0} {1}", setCommand, s));
            },
            (s) =>
            {
                if (s.StartsWith("\t"))
                    replBuffer.Add(s);
                else
                    replBuffer.Add(String.Format("{0} {1}", setCommand, s));
            });
        }

        protected override void SetupApplication()
        {
            RenderSplashScreen();

            app.SetupMiningEngineEvents();
            app.LoadPreviousHistory();

            app.DataModified += (object sender, EventArgs e) =>
            {
                ScreenDirty = true;
            };

            app.ConfigurationModified += (object sender, EventArgs e) =>
            {
                ScreenDirty = true;
            };

            app.ProgressStarted += (object sender, ProgressEventArgs e) =>
            {
                currentProgress = e.Text;
                RenderScreen();
            };

            app.ProgressCompleted += (object sender, EventArgs e) =>
            {
                currentProgress = String.Empty;
                RenderScreen();
            };

            app.NotificationReceived += (object sender, NotificationEventArgs e) =>
            {
                notifications.Add(e);
                ScreenDirty = true;
            };

            app.NotificationDismissed += (object sender, NotificationEventArgs e) =>
            {
                notifications.RemoveAll(n => !String.IsNullOrEmpty(n.Id) && n.Id.Equals(e.Id));
                ScreenDirty = true;
            };

            app.PromptReceived += (object sender, PromptEventArgs e) =>
            {
                currentPrompt = e;
                promptTime = DateTime.Now;
                RenderScreen();
            };

            app.CredentialsRequested += (object sender, CredentialsEventArgs e) =>
            {
                e.CredentialsProvided = false;
                credentialsPhase = CredentialsPhase.Username;
                credentialsTarget = app.LocalViewModel.GetNetworkDeviceByFriendlyName(e.ProtectedResource);
                RenderScreen();
            };

            app.Context = threadContext;

            mineOnStartTimer.Elapsed += (object sender, ElapsedEventArgs e) =>
            {
                if (app.StartupMiningCountdownSeconds > 0)
                    currentProgress = string.Format("Mining will start automatically in {0} seconds...", app.StartupMiningCountdownSeconds);
                else
                {
                    currentProgress = String.Empty;
                    mineOnStartTimer.Enabled = false;
                }
                RenderScreen();
            };

            RegisterCommands();
            RegisterScreens();
            RegisterSettings();
        }

        private void RenderSplashScreen()
        {
            Console.CursorVisible = false;
            Console.Clear();

            OutputAboutInfo();
        }

        private const int SplashInfoHeight = 6;
        private void OutputAboutInfo()
        {
            var compileDate = Assembly.GetExecutingAssembly().GetCompileDate();
            var minerVersion = MultiMinerInstaller.GetInstalledMinerVersion();

            var row = 0;

            if (SetCursorPosition(0, row++))
                WriteText("  _____     _ _   _ _____ _".PadRight(Console.WindowWidth), ConsoleColor.Cyan);
            if (SetCursorPosition(0, row++))
                WriteText(" |     |_ _| | |_|_|     |_|___ ___ ___".PadRight(Console.WindowWidth), ConsoleColor.Cyan);
            if (SetCursorPosition(0, row++))
                WriteText(" | | | | | | |  _| | | | | |   | -_|  _|".PadRight(Console.WindowWidth), ConsoleColor.Cyan);
            if (SetCursorPosition(0, row++))
                WriteText(" |_|_|_|___|_|_| |_|_|_|_|_|_|_|___|_|  ".PadRight(Console.WindowWidth), ConsoleColor.Cyan);

            ClearRow(row);
            row++;

            var col = 0;
            if (SetCursorPosition(col, row))
            {
                var versionText = String.Format(" {0}", minerVersion);
                var copyrightText = String.Format("(C) 2013-{0} - {1}", compileDate.Year, "http://multiminerapp.com");
                WriteText(versionText.PadRight(8), ConsoleColor.White);

                col = versionText.Length + 2;
                if (SetCursorPosition(col, row))
                    WriteText("[", ConsoleColor.DarkGray);

                col++;
                if (SetCursorPosition(col, row))
                    WriteText(copyrightText, ConsoleColor.Gray);

                col += copyrightText.Length;
                if (SetCursorPosition(col, row))
                    WriteText("]".PadRight(Console.WindowWidth - col), ConsoleColor.DarkGray);
            }
        }

        private void RegisterScreens()
        {
            screenManager.RegisterScreen(ScreenNames.Main, () =>
            {
                RenderMainScreen();
            });

            screenManager.RegisterScreen(ScreenNames.Repl, () =>
            {
                RenderReplScreen();
            });

            screenManager.RegisterScreen(ScreenNames.History, () =>
            {
                RenderHistoryScreen();
            });

            screenManager.RegisterScreen(ScreenNames.ApiLog, () =>
            {
                RenderApiLogScreen();
            });

            screenManager.RegisterScreen(ScreenNames.ProcLog, () =>
            {
                RenderProcLogScreen();
            });
        }

        private void RegisterSettings()
        {
            settingsProcessor.RegisterCommand(
                SettingNames.MobileMiner,
                string.Empty,
                "on|off|email|appkey [address|key]",
                new string[]
                {
                    "set mobileminer on",
                    "set mobileminer off",
                    "set mobileminer email user@example.org",
                    "set mobileminer appkey mr8q-lp67-bvt1"
                },
                new Commands.Settings.MobileMinerCommand(app, AddNotification).HandleCommand);

            settingsProcessor.RegisterCommand(
                CommandNames.Help,
                CommandAliases.Help,
                "[setting]",
                new string[]
                {
                    "help",
                    "h mobileminer"
                },
                (input) =>
                {
                    if (input.Count() <= 2)
                    {
                        OutputCommandHelp(settingsProcessor, input);
                        return true;
                    }
                    return false;
                });

            settingsProcessor.RegisterCommand(
                SettingNames.CoinApi,
                string.Empty,
                "coinchoose|coinwarz|whatmine|whattomine",
                new string[]
                {
                    "set coinapi coinwarz",
                    "set coinapi whattomine"
                },
                new Commands.Settings.CoinApiCommand(app, AddNotification).HandleCommand);

            settingsProcessor.RegisterCommand(
                SettingNames.CoinWarz,
                string.Empty,
                "apikey key",
                new string[]
                {
                    "set coinwarz apikey 9602a70905884c4e9609d20b90163408"
                },
                new Commands.Settings.CoinWarzCommand(app, AddNotification).HandleCommand);

            settingsProcessor.RegisterCommand(
                SettingNames.WhatMine,
                string.Empty,
                "apikey key",
                new string[]
                {
                    "set coinwarz whatmine 9602a70905884c4e9609d20b90163408"
                },
                new Commands.Settings.WhatMineCommand(app, AddNotification).HandleCommand);

            settingsProcessor.RegisterCommand(
                SettingNames.Perks,
                string.Empty,
                "on|off|percent [percent]",
                new string[]
                {
                    "set perks on",
                    "set perks percent 2"
                },
                new Commands.Settings.PerksCommand(app, AddNotification).HandleCommand);
        }

        private void RegisterCommands()
        {
            commandProcessor.RegisterCommand(
                CommandNames.Quit,
                CommandAliases.Quit,
                String.Empty,
                new string[] { },
                (input) =>
            {
                Quit();
                return true;
            });

            commandProcessor.RegisterCommand(
                CommandNames.Start,
                String.Empty,
                String.Empty,
                new string[] { },
                (input) =>
            {
                app.StartMining();
                return true;
            });

            commandProcessor.RegisterCommand(
                CommandNames.Stop,
                String.Empty,
                String.Empty,
                new string[] { },
                (input) =>
            {
                app.StopMining();
                return true;
            });

            commandProcessor.RegisterCommand(
                CommandNames.Restart,
                String.Empty,
                String.Empty,
                new string[] { },
                (input) =>
            {
                app.RestartMining();
                return true;
            });

            commandProcessor.RegisterCommand(
                CommandNames.Scan,
                String.Empty,
                String.Empty,
                new string[] { },
                (input) =>
            {
                app.ScanHardwareLocally();
                return true;
            });

            commandProcessor.RegisterCommand(
                CommandNames.SwitchAll,
                CommandAliases.SwitchAll,
                "symbol",
                new string[]
                {
                    "switchall btc",
                    "sa ltc"
                },
                new Commands.SwitchAllCommand(app).HandleCommand);

            commandProcessor.RegisterCommand(
                CommandNames.Pools,
                CommandAliases.Pools,
                "add|remove|edit|list [symbol|pool#] [url] [user] [pass]",
                new string[]
                {
                    "pools list",
                    "p add btc stratum+tcp://some.pool.com:3333 my.worker pass",
                    "p remove btc some.pool.com:3333",
                    "p remove 3",
                    "p edit 3 stratum+tcp://other.pool.com:3334 my.worker pass"
                },
                new Commands.PoolCommand(app, screenManager, AddNotification, replBuffer).HandleCommand);

            commandProcessor.RegisterCommand(
                CommandNames.Screen,
                CommandAliases.Screen,
                "[main|repl|history|apilog|proclog]",
                new string[]
                {
                    "screen main",
                    "sc repl",
                    "sc apilog",
                    "sc"
                },
                new Commands.ScreenCommand(app, screenManager, AddNotification).HandleCommand);

            commandProcessor.RegisterCommand(
                CommandNames.ClearScreen,
                CommandAliases.ClearScreen,
                String.Empty,
                new string[] { },
                (input) =>
            {
                replBuffer.Clear();
                RenderScreen();
                return true;
            });

            commandProcessor.RegisterCommand(
                CommandNames.Strategies,
                String.Empty,
                "on|off|set [profit|diff|price]",
                new string[]
                {
                    "strats on",
                    "strats off",
                    "strats set proffit"
                },
                new Commands.StrategiesCommand(app, AddNotification).HandleCommand);

            commandProcessor.RegisterCommand(
                CommandNames.Notifications,
                String.Empty,
                "act|remove|clear [note#]",
                new string[]
                {
                    "notes remove 1",
                    "notes clear",
                    "notes act 2"
                },
                new Commands.NotificationsCommand(notifications).HandleCommand);

            commandProcessor.RegisterCommand(
                CommandNames.Network,
                CommandAliases.Network,
                "start|stop|restart|reboot|switch|hide|pin|name ip[:port]|id [pool#|name]",
                new string[]
                {
                    "net start 192.168.0.99",
                    "n stop 192.168.0.199:4029",
                    "n restart n3",
                    "n switch n3 2",
                    "n hide 192.168.0.99",
                    "n name 192.168.0.99 My Network Miner"
                },
                new Commands.NetworkCommand(app, AddNotification).HandleCommand);

            commandProcessor.RegisterCommand(
                CommandNames.Help,
                CommandAliases.Help,
                "[command]",
                new string[]
                {
                    "help",
                    "h pool"
                },
                (input) =>
            {
                if (input.Count() <= 2)
                {
                    OutputCommandHelp(commandProcessor, input);
                    return true;
                }
                return false;
            });

            commandProcessor.RegisterCommand(
                CommandNames.Device,
                CommandAliases.Device,
                "enable|switch|name dev_id [symbol|name]",
                new string[]
                {
                    "dev enable u1",
                    "d switch g1 ltc",
                    "d name u2 My USB Miner"
                },
                new Commands.DeviceCommand(app, AddNotification).HandleCommand);
        }

        private void OutputCommandHelp(CommandProcessor processor, string[] input)
        {
            replBuffer.Add(String.Empty);

            if (input.Count() == 1)
                processor.OutputHelp();
            else
                processor.OutputComamndHelp(input[1]);

            screenManager.SetCurrentScreen(ScreenNames.Repl);
        }

        protected override void LoadSettings()
        {
            app.ApplicationConfiguration.LoadApplicationConfiguration(app.PathConfiguration.SharedConfigPath);
            app.EngineConfiguration.LoadStrategyConfiguration(app.PathConfiguration.SharedConfigPath); //needed before refreshing coins
            app.EngineConfiguration.LoadCoinConfigurations(app.PathConfiguration.SharedConfigPath); //needed before refreshing coins
            app.LoadSettings();
        }

        protected override void StartupApplication()
        {
            //kill known owned processes to release inherited socket handles
            if (ApplicationViewModel.KillOwnedProcesses())
                //otherwise may still be prompted below by check for disowned miners
                System.Threading.Thread.Sleep(500);

            //check for disowned miners before refreshing devices
            if (app.ApplicationConfiguration.DetectDisownedMiners)
                app.CheckForDisownedMiners();

            app.SetupCoinApi(); //so we target the correct API
            app.RefreshCoinStats();

            app.SetupCoalescedTimers();
            app.UpdateBackendMinerAvailability();
            app.CheckAndDownloadMiners();
            app.SetupRemoting();
            app.SetupNetworkDeviceDetection();
            app.CheckForUpdates();
            app.SetupMiningOnStartup();
            //app.SubmitMultiMinerStatistics();

            mineOnStartTimer.Enabled = true;
        }

        protected override void TearDownApplication()
        {
            app.StopMiningLocally();
            app.DisableRemoting();
            app.Context = null;
        }

        protected override void SaveSettings()
        {
            app.EngineConfiguration.SaveAllConfigurations();
            app.ApplicationConfiguration.SaveApplicationConfiguration();
        }

        protected override void RenderScreen()
        {
            screenManager.RenderScreen();
        }

        protected override void RenderInput()
        {
            if (screenManager.CurrentScreen.Equals(ScreenNames.Main.ToLower()))
                OutputInput(Console.WindowWidth - (incomeSummaryText.Length > 0 ? incomeSummaryText.Length : screenNameWidth));
            else
                OutputInput(Console.WindowWidth - screenNameWidth);
        }

        private void RenderProcLogScreen()
        {
            OutputProcLog();

            screenNameWidth = OutputScreenName();

            OutputInput(Console.WindowWidth - screenNameWidth);
        }

        private void OutputProcLog()
        {
            var printableHeight = Console.WindowHeight - 1;
            List<Xgminer.LogLaunchArgs> logEntries = GetVisibleLogLaunchEntries(printableHeight);
            var offset = printableHeight - logEntries.Count;

            for (int i = 0; i < offset; i++)
                ClearRow(i);

            for (int i = 0; i < logEntries.Count; i++)
            {
                var logEntry = logEntries[i];

                if (SetCursorPosition(0, i + offset))
                    WriteText(logEntry.DateTime.ToReallyShortDateTimeString().PadFitRight(14), ConsoleColor.DarkGray);

                if (SetCursorPosition(14, i + offset))
                    WriteText(logEntry.CoinName.PadFitRight(9), ConsoleColor.White);

                if (SetCursorPosition(23, i + offset))
                    WriteText(System.IO.Path.GetFileName(logEntry.ExecutablePath).PadFitRight(13));

                var lastColWidth = 16;
                var col = 36;
                if (SetCursorPosition(col, i + offset))
                    WriteText(logEntry.Arguments.PadFitRight(Console.BufferWidth - col - lastColWidth), ConsoleColor.DarkGray);

                if (SetCursorPosition(Console.BufferWidth - lastColWidth, i + offset))
                    WriteText(logEntry.Reason.PadFitRight(lastColWidth));
            }
        }

        private void RenderApiLogScreen()
        {
            OutputApiLog();

            screenNameWidth = OutputScreenName();

            OutputInput(Console.WindowWidth - screenNameWidth);
        }

        private void RenderHistoryScreen()
        {
            OutputHistory();

            screenNameWidth = OutputScreenName();

            OutputInput(Console.WindowWidth - screenNameWidth);
        }

        private void OutputHistory()
        {
            var printableHeight = Console.WindowHeight - 1;
            List<Engine.LogProcessCloseArgs> logEntries = GetVisibleLogCloseEntries(printableHeight);
            var offset = printableHeight - logEntries.Count;

            for (int i = 0; i < offset; i++)
                ClearRow(i);

            for (int i = 0; i < logEntries.Count; i++)
            {
                var logEntry = logEntries[i];

                if (SetCursorPosition(0, i + offset))
                    WriteText(logEntry.EndDate.ToReallyShortDateTimeString().PadFitRight(14), ConsoleColor.DarkGray);

                if (SetCursorPosition(14, i + offset))
                    WriteText(logEntry.CoinSymbol.ShortCoinSymbol().PadFitRight(8), ConsoleColor.White);

                if (SetCursorPosition(22, i + offset))
                    WriteText(logEntry.StartPrice.ToFriendlyString().PadFitLeft(9) + " ");

                TimeSpan timeSpan = logEntry.EndDate - logEntry.StartDate;
                var duration = String.Format("{0:0.##} min", timeSpan.TotalMinutes);

                if (SetCursorPosition(32, i + offset))
                    WriteText(duration.PadFitRight(11));

                var devicesString = String.Empty;
                if (logEntry.DeviceDescriptors != null)
                    devicesString = GetFormattedDevicesString(logEntry.DeviceDescriptors);

                var col = 43;
                if (SetCursorPosition(col, i + offset))
                    WriteText(devicesString.PadFitRight(Console.WindowWidth - col));
            }
        }

        private static string GetFormattedDevicesString(List<DeviceDescriptor> deviceDescriptors)
        {
            return String.Join(" ", deviceDescriptors.Select(d => d.ToString()).ToArray());
        }

        private void OutputApiLog()
        {
            var printableHeight = Console.WindowHeight - 1;
            List<ApiLogEntry> logEntries = GetVisibleApiLogEntries(printableHeight);
            var offset = printableHeight - logEntries.Count;

            for (int i = 0; i < offset; i++)
                ClearRow(i);

            for (int i = 0; i < logEntries.Count; i++)
            {
                var logEntry = logEntries[i];

                if (SetCursorPosition(0, i + offset))
                    WriteText(logEntry.Machine.PadFitRight(20), ConsoleColor.White);

                if (SetCursorPosition(20, i + offset))
                    WriteText(logEntry.Request.PadFitRight(10), ConsoleColor.DarkGray);

                var col = 30;
                if (SetCursorPosition(col, i + offset))
                    WriteText(logEntry.Response.PadFitRight(Console.WindowWidth - col + 2));
            }
        }

        private void RenderReplScreen()
        {
            OutputReplBuffer();

            screenNameWidth = OutputScreenName();

            OutputInput(Console.WindowWidth - screenNameWidth);
        }

        private void OutputReplBuffer()
        {
            var printableHeight = Console.WindowHeight - 1;
            List<string> lines = GetVisibleReplLines(printableHeight);
            var offset = printableHeight - lines.Count;
            var start = 0;

            if (offset >= SplashInfoHeight)
            {
                OutputAboutInfo();
                start = SplashInfoHeight;
            }

            for (int i = start; i < offset; i++)
                ClearRow(i);

            for (int i = 0; i < lines.Count; i++)
            {
                var line = lines[i];

                if (String.IsNullOrEmpty(line))
                {
                    ClearRow(i + offset);
                    continue;
                }

                if (SetCursorPosition(0, i + offset))
                    WriteText(":", ConsoleColor.White);
                if (SetCursorPosition(1, i + offset))
                    WriteText(": ", ConsoleColor.DarkGray);

                if (SetCursorPosition(3, i + offset))
                    WriteText(line.PadFitRight(Console.WindowWidth));
            }
        }

        private List<string> GetVisibleReplLines(int printableHeight)
        {
            var lines = replBuffer.ToList();
            lines.Reverse();
            lines.RemoveRange(0, replOffset);
            lines = lines.Take(printableHeight).ToList();
            lines.Reverse();
            return lines;
        }

        private List<Engine.LogProcessCloseArgs> GetVisibleLogCloseEntries(int printableHeight)
        {
            var entries = app.LogCloseEntries.ToList();
            entries.Reverse();
            entries = entries.Take(printableHeight).ToList();
            entries.Reverse();
            return entries;
        }

        private List<Xgminer.LogLaunchArgs> GetVisibleLogLaunchEntries(int printableHeight)
        {
            var entries = app.LogLaunchEntries.ToList();
            entries.Reverse();
            entries = entries.Take(printableHeight).ToList();
            entries.Reverse();
            return entries;
        }

        private List<ApiLogEntry> GetVisibleApiLogEntries(int printableHeight)
        {
            var entries = app.ApiLogEntries.ToList();
            entries.Reverse();
            entries = entries.Take(printableHeight).ToList();
            entries.Reverse();
            return entries;
        }

        private void RenderMainScreen()
        {
            OutputDevices();

            OutputSpecial();

            OutputNotifications();

            OutputStatus();

            incomeSummaryText = OutputIncome();
            var widthOffset = incomeSummaryText.Length;
            if (widthOffset == 0)
            {
                screenNameWidth = OutputScreenName();
                widthOffset = screenNameWidth;
            }

            //[ERROR] FATAL UNHANDLED EXCEPTION: System.NotImplementedException: The requested feature is not implemented.
            if (isWindows) FillLastCell();
            OutputInput(Console.WindowWidth - widthOffset);
        }

        protected override void HandleScreenNavigation(bool pageUp)
        {
            if (screenManager.CurrentScreen.Equals(ScreenNames.Main.ToLower())) HandleMainScreenNavigation(pageUp);
            if (screenManager.CurrentScreen.Equals(ScreenNames.Repl.ToLower())) HandleReplScreenNavigation(pageUp);
        }

        private void HandleMainScreenNavigation(bool pageUp)
        {
            var printableHeight = GetSpecialRow() - GetVisibleNotifications().Count;
            var visibleDeviceCount = app.GetVisibleDevices().Count;

            if (pageUp)
                mainOffset = mainOffset - printableHeight;
            else
                mainOffset = Math.Min(visibleDeviceCount - printableHeight, mainOffset + printableHeight);

            mainOffset = Math.Max(0, mainOffset);

            RenderMainScreen();
        }

        private void HandleReplScreenNavigation(bool pageUp)
        {
            var printableHeight = Console.WindowHeight - 1;

            if (pageUp)
                replOffset = Math.Min(replBuffer.Count - printableHeight, replOffset + printableHeight);
            else
                replOffset = Math.Max(0, replOffset - printableHeight);

            OutputReplBuffer();
        }

        protected override void HandleInputCanceled()
        {
            credentialsPhase = CredentialsPhase.None;
            RenderScreen();
        }

        protected override bool HandleCommandInput(string input)
        {
            if (credentialsPhase != CredentialsPhase.None)
            {
                HandleCredentialsInput(input);
                return true;
            }

            var firstWord = input.Split(' ').First();
            if (firstWord.Equals(CommandNames.Set, StringComparison.OrdinalIgnoreCase))
            {
                var setInput = input.Remove(0, CommandNames.Set.Length).Trim();
                if (String.IsNullOrEmpty(setInput))
                    OutputCommandHelp(settingsProcessor, input.Split(' '));
                else
                {
                    firstWord = setInput.Split(' ').First();
                    if (!settingsProcessor.ProcessCommand(setInput))
                    {
                        AddNotification(string.Format("Unknown setting: {0}", firstWord));
                        return false; //exit early
                    }
                }
                return true;
            }

            if (!commandProcessor.ProcessCommand(input))
            {
                AddNotification(string.Format("Unknown command: {0}", firstWord));
                return false; //exit early
            }

            RenderScreen();

            //successful command
            return true;
        }

        private void HandleCredentialsInput(string input)
        {
            if (credentialsPhase == CredentialsPhase.Username)
            {
                credentialsUsername = input;
                credentialsPhase = CredentialsPhase.Password;
                RenderScreen();
            }
            else
            {
                var networkDevice = app.GetNetworkDeviceByPath(credentialsTarget.Path);

                networkDevice.Username = credentialsUsername;
                networkDevice.Password = input;

                //clear prompt & render before rebooting - rebooting currently blocks
                credentialsPhase = CredentialsPhase.None;
                RenderScreen();

                var success = app.RebootNetworkDevice(credentialsTarget);

                if (success)
                {
                    AddNotification(String.Format("Rebooting {0}", credentialsTarget.Path));
                    app.NetworkDevicesConfiguration.SaveNetworkDevicesConfiguration();
                }
                else
                {
                    AddNotification(String.Format("Unable to reboot {0}", credentialsTarget.Path));
                    networkDevice.Username = String.Empty;
                    networkDevice.Password = String.Empty;
                }
            }
        }

        private void OutputNotifications()
        {
            List<NotificationEventArgs> recentNotifications = GetVisibleNotifications();
            for (int i = 0; i < recentNotifications.Count; i++)
            {
                var row = GetSpecialRow() - (recentNotifications.Count - i);
                if (SetCursorPosition(0, row))
                    WriteText(recentNotifications[i].Text.FitLeft(Console.WindowWidth));
            }
        }

        private List<NotificationEventArgs> GetVisibleNotifications()
        {
            const int NotificationCount = 5;

            var recentNotifications = notifications.ToList();
            recentNotifications.Reverse();
            recentNotifications = recentNotifications.Take(NotificationCount).ToList();
            recentNotifications.Reverse();
            return recentNotifications;
        }

        private bool SetCursorPosition(int left, int top)
        {
            if ((left < 0) || (left >= Console.WindowWidth) || (top < 0) || (top >= Console.WindowHeight)) return false;

            Console.SetCursorPosition(left, top);

            return true;
        }

        private int OutputScreenName()
        {
            var screenName = screenManager.CurrentScreen;
            var offset = isWindows ? 1 : 0;
            var printableWidth = Console.WindowHeight - 1;

            if (SetCursorPosition(Console.WindowWidth - offset - screenName.Length - 2, printableWidth))
                WriteText("[", ConsoleColor.Gray, ConsoleColor.DarkGray);

            if (SetCursorPosition(Console.WindowWidth - offset - screenName.Length - 1, printableWidth))
                WriteText(screenName, ConsoleColor.White, ConsoleColor.DarkGray);

            if (SetCursorPosition(Console.WindowWidth - offset - 1, printableWidth))
                WriteText("]", ConsoleColor.Gray, ConsoleColor.DarkGray);

            //return width of printed characters
            return screenName.Length + 2;
        }

        private string OutputIncome()
        {
            var incomeSummary = app.GetIncomeSummaryText();
            if (SetCursorPosition(Console.WindowWidth - (isWindows ? 1 : 0) - incomeSummary.Length, Console.WindowHeight - 1))
            {
                WriteText(incomeSummary, ConsoleColor.White, ConsoleColor.DarkGray);
                return incomeSummary;
            }
            return String.Empty;
        }

        private void WriteText(string text, ConsoleColor foreground = ConsoleColor.Gray, ConsoleColor background = ConsoleColor.Black)
        {
            ConsoleColor oldForeground = Console.ForegroundColor;
            ConsoleColor oldBackground = Console.BackgroundColor;
            Console.ForegroundColor = foreground;
            Console.BackgroundColor = background;
            Console.Write(text);
            Console.ForegroundColor = oldForeground;
            Console.BackgroundColor = oldBackground;
            SetCursorPosition(0, 0);
        }

        private void FillLastCell()
        {
            var row = Console.WindowHeight - 1;
            if (SetCursorPosition(0, row))
            {
                //http://stackoverflow.com/questions/25084384/filling-last-line-in-console
                WriteText(" ", ConsoleColor.Gray, ConsoleColor.DarkGray);
                Console.MoveBufferArea(0, row, 1, 1, Console.WindowWidth - 1, row);
            }
        }

        private void OutputInput(int totalWidth)
        {
            const string Prefix = "> ";
            var row = Console.WindowHeight - 1;
            if (SetCursorPosition(0, row))
            {
                WriteText(Prefix, ConsoleColor.Gray, ConsoleColor.DarkGray);
                if (SetCursorPosition(Prefix.Length, row))
                {
                    var width = totalWidth - Prefix.Length - (isWindows ? 1 : 0);
                    var text = CurrentInput.TrimStart().FitRight(width);
                    WriteText(text, ConsoleColor.White, ConsoleColor.DarkGray);
                }
            }
        }

        private void OutputStatus()
        {
            const int Part1Width = 16;
            var deviceStatus = String.Format("{0} device(s)", app.GetVisibleDeviceCount()).FitRight(Part1Width);
            var hashrateStatus = app.GetHashRateStatusText().Replace("   ", " ").FitLeft(Console.WindowWidth - deviceStatus.Length);
            if (SetCursorPosition(0, Console.WindowHeight - 2))
            {
                var text = String.Format("{0}{1}", deviceStatus, hashrateStatus);
                WriteText(text, ConsoleColor.White, ConsoleColor.DarkGray);
            }
        }

        private void OutputSpecial()
        {
            if (credentialsPhase != CredentialsPhase.None)
            {
                OutputCredentialsPrompt();
                return; //early exit, prompt rendered
            }

            if (currentPrompt != null)
            {
                if ((DateTime.Now - promptTime).TotalSeconds > 30)
                    currentPrompt = null;
                else
                {
                    OutputCurrentPrompt();
                    return; //early exit, prompt rendered
                }
            }

            OutputCurrentProgress();
        }

        private void OutputCurrentProgress()
        {
            var output = currentProgress.FitRight(Console.WindowWidth);
            if (SetCursorPosition(0, GetSpecialRow()))
                WriteText(output, ConsoleColor.White, String.IsNullOrEmpty(currentProgress) ? ConsoleColor.Black : ConsoleColor.DarkBlue);
        }

        private void OutputCredentialsPrompt()
        {
            var prompt = String.Format(credentialsPhase == CredentialsPhase.Username ?
                "SSH username for {0} (ESC to cancel):" :
                "SSH password for {0} (ESC to cancel):",
                credentialsTarget.Path);
            var output = prompt.FitRight(Console.WindowWidth);
            if (SetCursorPosition(0, GetSpecialRow()))
                WriteText(output, ConsoleColor.White, ConsoleColor.DarkBlue);
        }

        private void OutputCurrentPrompt()
        {
            var text = String.Format("{0}: {1}", currentPrompt.Caption, currentPrompt.Text);
            var output = text.FitRight(Console.WindowWidth);
            if (SetCursorPosition(0, GetSpecialRow()))
                WriteText(output, ConsoleColor.White,
                    currentPrompt.Icon == PromptIcon.Error
                    ? ConsoleColor.DarkRed
                    : currentPrompt.Icon == PromptIcon.Warning
                    ? ConsoleColor.DarkYellow : ConsoleColor.DarkBlue);
        }

        private static int GetSpecialRow()
        {
            return Console.WindowHeight - 3;
        }

        private void AddNotification(string text)
        {
            notifications.Add(new NotificationEventArgs { Text = text });
            replBuffer.Add(text); //so TUI-specific notes show on both screens
            RenderScreen();
        }

        private void OutputDevices()
        {
            List<DeviceViewModel> devices = app.GetVisibleDevices();

            var kindCounts = new Dictionary<char, int>();

            var firstIndex = 0 + mainOffset;
            var row = 0;

            for (int i = firstIndex; (i < devices.Count) && (row < GetSpecialRow() - GetVisibleNotifications().Count); i++)
            {
                var device = devices[i];
                var name = String.IsNullOrEmpty(device.FriendlyName) ? device.Name : device.FriendlyName;
                var averageHashrate = device.AverageHashrate > 0 ? device.AverageHashrate.ToHashrateString().Replace(" ", "") : String.Empty;
                var effectiveHashrate = device.WorkUtility > 0 ? app.WorkUtilityToHashrate(device.WorkUtility).ToHashrateString().Replace(" ", "") : String.Empty;
                var coinSymbol = device.Coin == null ? String.Empty : device.Coin.Id.ShortCoinSymbol();
                var exchange = app.GetExchangeRate(device);
                var pool = device.Pool.DomainFromHost();
                var kind = device.Kind.ToString().First();
                if (kindCounts.ContainsKey(kind))
                    kindCounts[kind]++;
                else
                    kindCounts[kind] = 1;
                var deviceId = kind + (kindCounts[kind] + firstIndex).ToString();
                var difficulty = device.Difficulty > 0 ? device.Difficulty.ToDifficultyString().Replace(" ", "") : String.Empty;
                var temperature = device.Temperature > 0 ? (int)device.Temperature + "°" : String.Empty;

                if (SetCursorPosition(0, row))
                    WriteText(deviceId.ToString().PadRight(4), device.Enabled ? ConsoleColor.Gray : ConsoleColor.DarkGray);

                if (SetCursorPosition(4, row))
                    WriteText(name.PadFitRight(12), device.Enabled ? device.Kind == Xgminer.Data.DeviceKind.NET || app.MiningEngine.Mining ? ConsoleColor.White : ConsoleColor.Gray : ConsoleColor.DarkGray);

                if (SetCursorPosition(16, row))
                    WriteText(coinSymbol.PadFitRight(8), device.Enabled ? ConsoleColor.Gray : ConsoleColor.DarkGray);

                if (SetCursorPosition(23, row))
                    WriteText(difficulty.PadFitLeft(8), ConsoleColor.DarkGray);

                if (SetCursorPosition(31, row))
                    WriteText(exchange.FitCurrency(9).PadLeft(10).PadRight(11), device.Enabled ? ConsoleColor.Gray : ConsoleColor.DarkGray);

                if (SetCursorPosition(42, row))
                    WriteText(pool.PadFitRight(10), ConsoleColor.DarkGray);

                if (SetCursorPosition(51, row))
                    WriteText(averageHashrate.PadFitLeft(11), device.Enabled ? ConsoleColor.Gray : ConsoleColor.DarkGray);

                if (SetCursorPosition(62, row))
                    WriteText(effectiveHashrate.FitLeft(11), device.Enabled ? ConsoleColor.Gray : ConsoleColor.DarkGray);

                var left = 73;
                if (SetCursorPosition(left, row))
                    WriteText(temperature.FitLeft(5).PadRight(Console.WindowWidth - left), device.Enabled ? ConsoleColor.DarkGray : ConsoleColor.DarkGray);

                row++;
            }

            for (int i = devices.Count; i < GetSpecialRow(); i++)
                ClearRow(i);
        }

        private void ClearRow(int row)
        {
            if (SetCursorPosition(0, row))
                WriteText(new string(' ', Console.WindowWidth));
        }
    }
}