text:
/* INTRODUCTION
/* This variant is the standard, light, Elkarte default theme.
/* This is eye candy only. All the layout code is in index.css.
/*
/* All theme variants depend on the layout code for stability.
/* It is better to copy code to a variant CSS file for testing.
/* ------------------------------------------------------- */
/* $CONTENTS - still a bit WIP. @todo
/*
/*		$GENERAL.............Global resets, clearfixes, etc.
/*		$COMMON..............Common classes to drive you bonkers.
/*		$BBC.................Quotes, code blocks, BBC styles.
/*		$AJAX................The "loading" bar (quick edit, etc).
/*
/*		$MAIN................Forum header, wrapper, and footer.
/*		$MENUS...............Main and secondary menus.
/*		$breadcrumbs............The breadcrumbs.
/*		$BUTTONS.............Most button strips.
/*		$PAGELINKS...........Page navigation links.
/*
/*		$TABLES..............Generic tables (memberlist, error log, etc).
/*		$SETTINGS............Generic lists for settings pages.
/*		$BOARDS..............Board index, sub-boards, and message index.
/*
/*		$TOPICS..............The display template (topic view), including send.
/*		$EDITOR..............Main editor (posts, events, polls) and topic summary.
/*		$MODERATE............Move topic, split topic, merge topic.
/*
/*		$PROFILE.............The profile areas.
/*		$PERSONAL............The personal messages (PM) areas.
/*		$CALENDAR............The calendar.
/*		$STATISTICS..........The statistics centre.
/*
/*		$HELP................Help pages, help icons and pop-ups, tooltips.
/*		$SEARCH..............Search pages, including memberlist search.
/*		$MEMBERLIST..........The memberlist table.
/*		$LOGIN...............Login and registration, maintenance mode.
/*
/*		$BOXES...............Message boxes (error, warning, info, etc).
/*		$PROGRESS............Nifty progress bars.
/*		$MEDIA...............Experimental media queries.

/* ------------------------------------------------------- */
/*	$GENERAL	                                           */
/* ------------------------------------------------------- */
/* Normal, standard links. */
a, a:link, a:visited,
	/* Links that open in a new window. */
a.new_win:link, a.new_win:visited {
	color: #49643D;
}

/* Cursor declared here.Should not be required anywhere else. */
a:hover, a.new_win:hover {

}

/* Stop white band under footer on short pages. */
/* This color should match $FOOTER background. */
html {
	background: #222222;
}

body {
	background: #585858 linear-gradient(to right, #333333 0%, #888888 50%, #333333 100%);
	color: #585858;
}

fieldset {
	background: transparent;
	border-color: #CCCCCC;
	box-shadow: inset -1px -1px 3px #FEFEFE;
}

legend {
	background: url(../../images/selected_open.png) 0 50% no-repeat;
	color: #333333;
}

.collapsed legend {
	background: url(../../images/selected.png) 0 50% no-repeat;
}

input, button, select, textarea, .editor {
	border-color: #CCCCCC;
	background: #FAFAFA;
	color: #585858;
}

input:hover, textarea:hover, button:hover, select:hover {
	border-color: #999999;
	background: #FEFEFE;
}

textarea:hover, .editor:hover {
	background: #FEFEFE;
	color: #444444;
}

input:focus, textarea:focus, button:focus, select:focus, .editor:focus {
	border-color: #999999;
}

/* Give disabled text input elements a different background color. */
input[disabled].input_text, input[disabled].input_password {
	background: #EEEEEE;
}

/* The OpenID login form */
.openid_login {
	background: white url(../../images/openid.png) no-repeat 2% 50%;
}

/* Common button styling. */
input[type="submit"], .drop_area_fileselect_text, button[type="submit"], input[type="button"],
	/* Anchors styled to look like buttons. */
	/* These have standard body text size. Can be chained with smalltext class. */
.linkbutton:link, .linkbutton_right:link, .linkbutton_left:link,
.linkbutton:visited, .linkbutton_right:visited, .linkbutton_left:visited {
	border-color: #AFAFAF;
	border-top-color: #CFCFCF;
	border-left-color: #BFBFBF;
	background: #F4F4F4 linear-gradient(to bottom, #FEFEFE, #E4E4E4);
	box-shadow: 1px 1px 2px #E4E4E4, 0 -1px 0 #E4E4E4 inset;
	color: #585858;
}

/* Hover effects. */
input[type="submit"]:hover, button[type="submit"]:hover, input[type="button"]:hover,
.linkbutton:hover, .linkbutton_right:hover, .linkbutton_left:hover {
	border-color: #CCCCCC;
	border-top-color: #AFAFAF;
	border-left-color: #AFAFAF;
	background: #F0F0F0;
	box-shadow: 2px 1px 1px rgba(0, 0, 0, 0.07) inset;
	color: #585858;
}

/* the new "button" */
.new_posts, .new_posts:visited, .new_posts:link {
	background: #27A348;
	color: #FEFEFE;
}

/* approval indicator */
.require_approval {
	background: #27A348;
	color: #FEFEFE;
}

/* Standard horizontal rule.. ([hr], etc.) */
hr {
	border-top-color: #BBBBBB;
	background: #EEEEEE;
}

strong, .bbc_strong {
	color: #686868;
}

/* @todo - Test this everywhere. */
.content {
	background: #FEFEFE;
	box-shadow: 1px 2px 4px #EBEBEB;
	border-color: #CCCCCC;
}

/* Styles for main headers. */
.category_header, .forum_category .category_header {
	border-color: #CCCCCC;
	border-top-color: #DDDDDD;
	border-bottom-color: #BBBBBB;
	background: #EBEBEB;
	background-image: linear-gradient(to bottom, #FAFAFA, #EAEAEA);
	color: #566450;
	text-shadow: 1px 1px 0 #EBEBEB;
}

/* Single ones a bit darker than board index ones. */
.category_header, .content_category .category_header {
	border-top-color: #CFCFCF;
	border-bottom-color: #BBBBBB;
	background: #E9E9E9;
	background-image: linear-gradient(to bottom, #FAFAFA, #E4E4E4);
}

/* Styles for subsection headers. @todo */
.secondary_header {
	border-color: #CCCCCC;
	border-top-color: #DDDDDD;
	background: #FAFAFA;
	background-image: linear-gradient(to bottom, #FAFAFA, #EBEBEB);
	text-shadow: 1px 1px 0 #FEFEFE;
}

.category_header a:link {
	color: #566450;
}

/* Custom highlighted text style for modern browsers. */
/* Nicer than default. Needs two separate rules. */
::-moz-selection {
	background: #D8FFDF;
	color: #444444;
}

::selection {
	background: #D8FFDF;
	color: #444444;
}

/* Other highlighted text, such as search results. */
.highlight {
	color: #FF7200;
}

/* Sometimes there will be an error when you post */
.error {
	color: #FF0000;
}

.border_error {
	border-color: #FF0000 !important;
}

/* Messages that somehow need to attract the attention. */
.alert {
	color: #FF0000;
}

/* Colors for warnings. */
.warn_mute {
	color: #FF0000;
}

.warn_moderate, .softalert {
	color: #FFA500;
}

.warn_watch, .success {
	color: #008000;
}

.moderation_link, .moderation_link:visited {
	color: #FF0000;
	font-weight: bold;
}

/* Used for sections that need somewhat larger corners */
.roundframe, .well {
	border: 1px solid #CCCCCC;
	border-radius: 7px;
	background: #FAFAFA;
}

/* The generic wrapper thingy. */
.generic_list_wrapper {
	margin-top: 4px;
	border: 1px solid #CCCCCC;
	border-radius: 7px;
	box-shadow: 0 -2px 2px rgba(0, 0, 0, 0.1);
}

.generic_list_wrapper .additional_row {
	border-radius: 0;
}

.generic_list_wrapper .title_bar {
	border-bottom: 1px solid #FEFEFE;
	border-radius: 0;
	background: none;
}

.generic_list_wrapper .information {
	border-bottom: 1px solid #FEFEFE;
	background: none;
}

/* Styles used by the auto suggest control. */
.auto_suggest_div {
	border: 1px solid #BBBBBB;
	border-radius: 3px;
}

.auto_suggest_div:focus {
	border: 1px solid #BBBBBB;
}

.auto_suggest_item {
	background: #DDDDDD;
}

.auto_suggest_item_hover {
	background: #888888;
	color: #EEEEEE;
}

/* ------------------------------------------------------- */
/* $BBC                                                    */
/* ------------------------------------------------------- */
/* The "Quote:" and "Code:" header parts... */
.codeheader, .quoteheader {
	border: 1px solid #CCCCCC;
	border-bottom: none;
	background: #FEFEFE;
	color: #585858;
}

.codeheader {
	border-top: 3px solid #AFAFAF;
}

/* [Select] link to copy code. */
.codeoperation {
	font-weight: normal;
}

/* A quote, perhaps from another post. */
.bbc_standard_quote, .bbc_alternate_quote,
	/* A code block - maybe PHP ;) - shared styles. */
.bbc_code {
	border: 1px solid #CCCCCC;
	border-top: none;
	background: #FEFEFE;
}

/* Extra quote styling */
.bbc_standard_quote, .bbc_alternate_quote, .quoteheader {
	box-shadow: 2px 2px 2px #DDDDDD;
}

/* Extra code block styling. */
.bbc_code {
	border-top: 3px solid #AFAFAF;
	border-bottom: 3px solid #AFAFAF;
	background: #FAFAFA;
}

/* Styling for BBC tags */
.bbc_link:link, .bbc_link:visited {
	box-shadow: 0 -1px 0 #CEDCCB inset;
	color: #377828;
}

.bbc_link:hover {
	box-shadow: 0 -1px 0 #5BA048 inset;
	color: #377828;
	text-decoration: none;
}

/* /me uses this a lot. (emote, try typing /me in a post.) */
.meaction {
	color: #50AA3A;
}

.meaction:before {
	content: "\270c";
	font-size: 1.714em;
	line-height: 1em;
}

.spoilerheader {
	font-weight: bold;
	font-size: 0.857em;
	cursor: pointer;
}

.spoiler {
	padding: 0.3em;
	border: 1px solid #CCCCCC;
	background-color: #EEEEEE;
}

div.bbc_footnotes {
	border-top: 1px solid #BFBFBF;
}

.bbc_footnotes .target:target {
	background-color: #D8FFDF;
}

sup.bbc_footnotes, sup.bbc_footnotes a {
	color: #50AA3A;
	font-weight: 700;
}

div.bbc_footnotes .meaction {
	display: inline-block;
}

/* ------------------------------------------------------- */
/*	$AJAX                                                  */
/* ------------------------------------------------------- */
/* The "Loading" bar for quick edit, etc. */
#ajax_in_progress {
	border-bottom: 4px solid #3D6E32;
	background: #FEFEFE;
	color: #3D6E32;
}

#ajax_in_progress a {
	color: #FFA500;
	text-decoration: underline;
}

/* ------------------------------------------------------- */
/*	$MAIN.                                                 */
/* ------------------------------------------------------- */
/* The top bar. */
#top_section {
	border-top: 4px solid #5BA048;
	border-bottom: 4px solid #3D6E32;
	background: #F4F4F4;
	background-image: linear-gradient(to bottom, #FEFEFE, #EEEEEE);
	box-shadow: 0 1px 4px rgba(0, 0, 0, 0.3), 0 1px 0 #38642D inset;
}

/* Maintenance mode warning. */
.notice {
	color: #A80000;
	font-weight: 700;
}

#search_form .input_text {
	border-right: none;
	border-radius: 2px 0 0 2px;
}

#search_form input[type="submit"] {
	border-radius: 0 2px 2px 0;
	color: #333333;
}

#search_form select {
	border: 1px solid #AFAFAF;
	border-right: none;
	opacity: 0.8;
}

#search_form select:focus {
	border: 1px solid #999999;
	border-right: none;
	opacity: 1;
}

.forumtitle > a {
	color: #377828;
	text-shadow: 1px 1px 0 #FEFEFE;
}

/* News section. */
#news {
	font-size: 0.929em;
}

#news > h2 {
	float: left;
	margin: -2px 1em 0 0;
	height: 1em;
	color: #4B863C;
	font-weight: 700;
	font-variant: small-caps;
	font-size: 1.286em;
	line-height: 1.286em;
}

#news > h2:after {
	content: "\2026";
}

#news_line, #news {
	overflow: auto;
	padding: 6px 12px;
	min-height: 60px;
	height: 60px;
	/* Longhand style due to JS bug in IE! */
	border: 1px solid #CCCCCC;
	background: #FEFEFE;
	box-shadow: 1px 2px 3px #EEEEEE;
	color: #585858;
	resize: vertical;
}

/* Main forum area. */
/* Box-shadow only on this one. */
#wrapper {
	margin-top: 16px;
	padding-top: 12px;
	border: 3px solid #4B863C;
	border-top: 3px solid #5BA048;
	border-bottom: 3px solid #3D6E32;
	border-radius: 5px;
	background: #FAFAFA;
	box-shadow: 0 2px 4px #111111;
}

/* The footer with copyright links etc. */
#footer_section {
	border-top: 6px solid #3D6E32;
	background: #222222;
	box-shadow: 0 -1px 0 #686868, 0 1px 0 #0E0E0E inset;
	color: #BBBBBB;
}

#footer_section p, #footer_section a {
	color: #BBBBBB;
}

#footer_section .rssfeeds {
	border-radius: 0.3em;
	background-color: white;
	color: #FFA500;
	text-shadow: 1px 1px 0 #000000;
}

.action_viewquery a, .action_viewquery strong,
#debug_logging a, #debug_logging strong {
	color: #FFFF00;
}

#debug_logging {
	margin: 0 auto;
	max-width: 90em;
	width: 90%;
	background: #222222;
	color: #BBBBBB;
}

#debug_logging_wrapper {
	background: #222222;
}

.action_viewquery {
	background: #222222;
	color: #BBBBBB;
}

.action_viewquery a {
	text-decoration: none;
	font-weight: bold;
}

.action_viewquery .explain {
	/*border="1" cellpadding="4" cellspacing="0"*/
	margin-bottom: 1em;
	border-collapse: collapse;
	empty-cells: show;
	font-family: serif;
}

.action_viewquery .explain th,
.action_viewquery .explain td {
	padding: 2px;
	border: 1px solid gray;
}

.action_viewquery .query {
	margin: 1em;
}

/* ------------------------------------------------------- */
/*	$MENUS                                                 */
/* ------------------------------------------------------- */
/* Level 1 Menu bar: link or button. General styling. */
.linklevel1, .linklevel1:link, .linklevel1:visited {
	border: 1px solid #AFAFAF;
	border-top: 1px solid #CFCFCF;
	border-left: 1px solid #BFBFBF;
	border-radius: 2px;
	background: #F4F4F4;
	background-image: linear-gradient(to bottom, #FEFEFE, #E4E4E4);
	box-shadow: 1px 1px 2px #E4E4E4;
	color: #566E4B;
}

/* Level 1 button hover and focus effects. */
.linklevel1:hover, .listlevel1:hover .linklevel1,
.linklevel2:hover, .listlevel2:hover .linklevel2,
.linklevel3:hover, .listlevel3:hover .linklevel3,
#menu_sidebar .linklevel1:hover, #menu_sidebar .listlevel1:hover .linklevel1,
#menu_current_area > strong > .linklevel1 {
	border: 1px solid #CCCCCC;
	border-top: 1px solid #AFAFAF;
	border-left: 1px solid #AFAFAF;
	background: #F0F0F0;
	box-shadow: 2px 1px 1px rgba(0, 0, 0, 0.07) inset;
	color: #686868;
	text-decoration: none;
}

.poster li.listlevel1:hover {
	border: none;
	background: transparent;
	box-shadow: none;
}

.poster li.poster_online:hover .linklevel1 {
	border: 1px solid #CCCCCC;
	border-top: 1px solid #AFAFAF;
	border-left: 1px solid #AFAFAF;
	background: #F0F0F0;
	box-shadow: 2px 1px 1px rgba(0, 0, 0, 0.07) inset;
	color: #585858;
}

.poster li.poster_online .nolink {
	position: relative;
	display: block;
	margin: 3px 1.5em;
	border: 1px solid #AFAFAF;
	border-top: 1px solid #CFCFCF;
	border-left: 1px solid #BFBFBF;
	background: #F4F4F4;
	background-image: linear-gradient(to bottom, #FEFEFE, #E4E4E4);
	box-shadow: 1px 1px 2px #E4E4E4;
	color: #566E4B;
	line-height: 2em;
}

.poster li.poster_online .nolink img {
	vertical-align: middle;
}

.poster li.subsections.listlevel1:hover .linklevel1 {
	border: none;
	background: transparent;
	box-shadow: none;
}

/* Level 1 active buttons. */
.linklevel1.active, .listlevel1:hover .active,
#collapse_button .linklevel1, .pm_indicator, .likes_indicator {
	border: 1px solid #3D6E32;
	border-top: 1px solid #4B863C;
	border-left: 1px solid #38642D;
	background: #4B863C;
	background-image: linear-gradient(to bottom, #5BA048, #3D6E32);
	box-shadow: 1px 1px 2px #BBBBBB;
	color: #FEFEFE;
	font-weight: bold;
}

/* Hover effects for those buttons. */
.linklevel1.active:hover, .listlevel1:hover .linklevel1.active,
#collapse_button .linklevel1:hover, .linklevel1:hover .pm_indicator {
	border: 1px solid #5BA048;
	border-top: 1px solid #2D5024;
	border-left: 1px solid #2D5024;
	background: #3D6E32;
	box-shadow: 1px 1px 1px rgba(0, 0, 0, 0.3) inset;
}

.linklevel1:hover .pm_indicator {
	box-shadow: 0 -1px 0 #3D6E32 inset;
}

.linklevel1.active:hover .pm_indicator {
	border-bottom: 1px solid #2D5024;
}

/* Top level subsection indicators. */
/* Comment these out if you don't want them. */
.subsections:hover .linklevel1:after {
	position: absolute;
	right: 0.4em;
	content: " \25bc";
}

#main_menu .subsections:hover .linklevel1:after {
	top: 88%;
	color: #EEEEEE;
	text-shadow: 0 4px 0 #3D6E32;
	font-size: 1.429em;
}

.admin_menu .subsections:hover .linklevel1:after {
	top: 72%;
	color: #3D6E32;
	font-size: 1.214em;
}

/* Corrections for other menus. */
.quickbuttons .subsections:hover .linklevel1:after {
	top: 1.9em;
	font-size: 1em;
}

.subsections:hover .name.linklevel1:after {
	top: 1.6em;
	color: #5BA048;
	font-size: 1em;
}

.poster2 .subsections:hover .name.linklevel1:after {
	top: 1em;
}

/* Do one override here for .poster. Still saves code all round. */
.poster_avatar .linklevel1, .poster_avatar:hover .linklevel1,
.poster_avatar .linklevel1:focus,
.name.linklevel1, .name.linklevel1:hover, .name.linklevel1:focus {
	border: none;
	background: none;
	box-shadow: none;
	color: #4B863C;
}

.name.linklevel1:hover {
	text-decoration: underline;
}

/* Levels 2 and 3: drop menu wrapper. */
.menulevel2, .menulevel3 {
	border: 1px solid #AFAFAF;
	border-top: 1px solid #CFCFCF;
	border-left: 1px solid #BFBFBF;
	border-radius: 2px;
	background: #FEFEFE;
	box-shadow: 3px 3px 3px rgba(0, 0, 0, 0.2);
}

/* Tricky PM indicator. Define it carefully,
/* just in case someone tries to use this class elsewhere. */
.pm_indicator, .likes_indicator {
	position: absolute;
	top: -1.45em;
	right: -0.4em;
	z-index: 2;
	float: left;
	padding: 0 0.7em;
	border-radius: 8px 8px 8px 0;
	box-shadow: 2px 2px 3px rgba(0, 0, 0, 0.25), 0 -1px 0 #3D6E32 inset;
	font-weight: 700;
	font-size: 0.929em;
	line-height: 1.7em;
}

.poster .pm_indicator {
	font-size: 1em;
}

#dropdown_menu_1 .pm_indicator {
	margin-top: 5px;
	margin-right: 2px;
}

.likes_indicator {
	top: -1.2em;
	border-radius: 6px 6px 6px 0;
	box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.25);
	font-size: .857em;
	line-height: 1.5em;
}

/* Levels 2 and 3 drop menus: link or button. */
.linklevel2:link, .linklevel2:visited, .linklevel3:link, .linklevel3:visited {
	border: 1px solid transparent;
	color: #585858;
}

/* Admin menu icons. */
.linklevel2 > img {
	margin: 0 0 0 -4px;
	vertical-align: middle;
}

/* Level 2: subsection indicators. */
.listlevel2.subsections .linklevel2:after,
#menu_sidebar .subsections .linklevel1:after,
#menu_sidebar .subsections:hover .linklevel1:after {
	position: absolute;
	top: 0;
	right: 6px;
	color: #686868;
	content: "\2192";
	font-size: 1.286em;
}

/* Level 2: dividers between admin/moderation, and pm/profile links. */
#button_admin .listlevel2.subsections, #button_pm .listlevel2.subsections {
	margin-top: 7px;
	padding-top: 4px;
	border-top: 1px solid #DDDDDD;
	box-shadow: 0 -1px 0 #BBBBBB;
}

/* Levels 2 and 3: highlighting of current section */
/* @todo - Should probably be applied to main menu as well, for consistency. */
.linklevel2.chosen, .linklevel3.chosen,
#menu_current_area .linklevel1 {
	font-weight: 700;
}

/* Styles for sidebar menus.
/* Cancel default backgrounds for sidebar. */
#menu_sidebar .linklevel1 {
	border: 1px solid transparent;
	background: none;
	box-shadow: none;
	color: #585858;
}

/*End sidebar flyout coding. */

/* ------------------------------------------------------- */
/*	$BOARDICONS	                                           */
/* ------------------------------------------------------- */
.board_icon {
	display: block;
	float: left;
	width: 48px;
	height: 48px;
}

.board_key:before {
	display: block;
	float: left;
	width: 26px;
	height: 24px;
	content: "";
}

.category_boards .board_icon, .board_key:before {
	background-image: url(../../images/_light/board_icons.png);
	background-repeat: no-repeat;
}

.on_board {
	background-position: 0 0;
}

.on2_board {
	background-position: -72px 0;
}

.off_board {
	background-position: -144px 0;
}

.redirect_board {
	background-position: -216px 0;
}

.new_some_board:before {
	background-position: -300px -14px;
}

.new_none_board:before {
	background-position: -372px -14px;
}

.new_redirect_board:before {
	background-position: -444px -14px;
}

/* ------------------------------------------------------- */
/*	$breadcrumbs	                                           */
/* ------------------------------------------------------- */
/* The navigation list (i.e. breadcrumbs) */
/* Wrapper/background. */
.navigate_section {
	border: 1px solid #CCCCCC;
	border-radius: 2px;
	background: #FEFEFE;
	box-shadow: 1px 2px 3px #EEEEEE;
}

/* Color for breadcrumbs items. */
.breadcrumbs a {
	color: #585858;
}

.breadcrumbs {
	border-bottom: 1px solid #CCCCCC;
	box-shadow: 0 -2px 0 -1px #CCCCCC, 3px -2px 0 -1px #CCCCCC, 3px 1px 0 -1px #CCCCCC;
}

.breadcrumbs:hover a, .breadcrumbs > a:hover,
.breadcrumbs:last-child, .breadcrumbs:last-child > span > a,
.breadcrumbs:last-child > span > a:hover, .breadcrumbs:last-child strong {
	color: #FEFEFE;
	text-decoration: none;
}

.breadcrumbs:after {
	background: #FEFEFE;
	box-shadow: 2px -2px 0 1px rgba(200, 204, 204, 0.9);
}

.breadcrumbs:hover, .breadcrumbs:last-child {
	background: #5BA048;
	background-image: linear-gradient(0deg, #4B863C, #5BA048);
}

.breadcrumbs:hover:after, .breadcrumbs:last-child:after {
	background: #5BA048;
	background-image: linear-gradient(315deg, #4B863C, #5BA048);
}

.breadcrumbs:last-child:hover, .breadcrumbs:last-child:hover:after {
	background: #4B863C;
}

/* ------------------------------------------------------- */
/* $BUTTONS	                                               */
/* This section contains code for the quickbuttons (quote, quick edit, etc)
/* and for the buttonlist class (reply, add poll, notify, etc).
/* These classes share some styling.
/* Declarations are amalgamated where styling is shared.
/* ------------------------------------------------------- */
/* Styles for the standard button lists.
/* ------------------------------------------------------- */
/* @todo - Save code by amalgamating common button background declarations. */
.buttonlist li a.linklevel1 {
	box-shadow: 1px 1px 2px #E4E4E4, 0 -1px 0 #E4E4E4 inset;
	text-transform: uppercase;
}

/* The active one */
.buttonlist li a.active {
	box-shadow: 1px 1px 2px #E4E4E4, 0 -1px 0 #3D6E32 inset;
}

/* The quick buttons. */
/* ------------------------------------------------------- */
.quickbuttons .modified {
	color: #686868;
}

/* Cancel generic border-radius. */
.quickbuttons .linklevel1 {
	border-radius: 0;
	color: #585858;
}

.quickbuttons .inline_mod_check {
	margin-left: 0;
}

/* Radius left end of the first (Quote) button. */
.linklevel1.quote_button {
	border-radius: 2px 0 0 2px;
}

/* Radius right end of the last button. */
.linklevel1.post_options, .linklevel1.remove_button {
	border-radius: 0 2px 2px 0;
}

/* Single buttons get all corners rounded. */
.follow_ups .linklevel1, #topic_summary .linklevel1 {
	border-radius: 2px;
}

/* ------------------------------------------------------- */
/*	$PAGELINKS	                                           */
/* ------------------------------------------------------- */
.selectbox, .pagelinks {
	color: #585858;
}

.pagelinks .navPages {
	border: 1px solid #AFAFAF;
	border-top: 1px solid #BBBBBB;
	background-image: linear-gradient(to bottom, #FEFEFE 0%, #E4E4E4 100%);
	color: #585858;
}

.pagelinks .navPages:hover, .pagelinks .current_page {
	border: 1px solid #CCCCCC;
	border-top: 1px solid #AFAFAF;
	border-left: 1px solid #AFAFAF;
	background: #F0F0F0;
	box-shadow: 2px 1px 1px rgba(0, 0, 0, 0.07) inset;
	/* @todo - Simplify. */
	color: #585858;
	text-decoration: none;
}

.pagelinks :first-child {
	border-radius: 2px 0 0 2px;
}

.pagelinks :last-child {
	border-radius: 0 2px 2px 0;
}

/* our buddies « » */
.small_pagelinks:before {
	float: left;
	content: '\00AB';
	font-size: 1.286em;
}

.small_pagelinks:after {
	float: left;
	content: '\00BB';
	font-size: 1.286em;
}

/* Globally accessible top/bottom links. */
#gotop, #gobottom {
	border: 1px solid #222222;
	border-bottom: none;
	border-radius: 0 20px 0 0;
	background: #EEEEEE;
	color: #EEEEEE;
	opacity: 0.2;
}

#gobottom {
	border-top: none;
	border-radius: 0 0 20px 0;
}

#gotop:hover, #gobottom:hover {
	color: #444444;
	text-decoration: none;
	opacity: 1;
}

/* Skip navigation link. */
#top {
	border: 4px solid #5BA048;
	border-radius: 0 0 6px 6px;
	background: #FEFEFE;
}

/* ------------------------------------------------------- */
/*	$TABLES		                                           */
/* ------------------------------------------------------- */

/* @todo */
/* A general table class. */
.table_grid {
	border: 1px solid #DDDDDD;
	border-top: none;
}

.table_head > th {
	border-top: 2px solid #DDDDDD;
	border-bottom: 2px solid #DDDDDD;
	background: #FEFEFE;
	color: #686868;
}

/* Basic cells. */
.table_grid td {
	border-bottom: 1px solid #CCCCCC;
}

/* Subtle zebra striping for rows. */
.table_grid .standard_row:nth-child(even) {
	background: #FAFAFA;
}

.table_grid .standard_row:nth-child(odd) {
	background: #FEFEFE;
}

/* Legacy highlight color, for selected membergroups etc. */
/* Used by JS to show a selected item. Still used in manage languages */
.table_grid .standard_row.highlight2 {
	background: #E4E4E4;
	color: #585858;
}

/* For Errors.template.php. */
#errorfile_table .current {
	border: 1px solid #444444;
	background: #FFF5CD;
}

/* ------------------------------------------------------- */
/* $SETTINGS                                               */
/* ------------------------------------------------------- */
/* Lists - settings use these a lot.                       */
.settings label {
	color: #585858;
}

/* ------------------------------------------------------- */
/* $BOARDS                                                 */
/* ------------------------------------------------------- */
/* Set up some general framing classes. @todo */
/*    .forum_category for board index/sub-boards. */
/*    .forumposts for thread pages and recent posts, etc. */
/*    .content_category for general divisions around the place. */
/* All styled the same in default variant, but available for fun and games. */

/* The board categories and newsfader - some shared styling. */
.forum_category, .content_category {
	border-radius: 4px 4px 0 0;
	background: #DEEDDA;
	box-shadow: 1px 2px 3px #EEEEEE;
}

.board_row,
.childboard_row,
.forumposts > li,
.content_category > div,
.content_category > li {
	border: 1px solid #CFCFCF;
	background: #FEFEFE;
}

.board_row.parent_board {
	border-bottom: none;
}

.childboard_row {
	border-top: none;
}

.board_latest {
	border-left: 1px solid #CCCCCC;
}

.board_name > a {
	color: #377828;
}

.board_stats {
	color: #686868;
}

.lastpost_link > a {
	color: #377828;
}

.board_latest strong {
	color: #686868;
}

.childboards {
	border-top: 1px solid #CCCCCC;
}

.childboard_row h4, .board_new_posts {
	color: #686868;
	font-weight: 700;
}

/* Styles for the info center on the board index. */
.ic_section_header {
	border-bottom: 1px solid #DDDDDD;
}

.ic_section_header > a {
	color: #585858;
}

#ic_recentposts td, #ps_recentposts td, #ps_recenttopics td {
	border-top: 1px solid #DDDDDD;
}

.recentpost > strong > a, .inline > strong > a {
	color: #4B863C;
}

#expanded_pages_container a {
	background: #FEFEFE;
}

/* The board description and who-is-viewing stuff. */
#description_board {
	border-radius: 4px 4px 0 0;
	background: #E4E4E4;
	box-shadow: 1px 2px 4px #EEEEEE;
}

#description_board .generalinfo, #forumposts .generalinfo {
	border: 1px solid #DDDDDD;
	border-bottom: 1px solid #CCCCCC;
	background: #FEFEFE;
}

.topic_listing {
	background: #E4E4E4;
	box-shadow: 1px 2px 4px #EEEEEE;
}

.topic_listing > li {
	border: 1px solid #DDDDDD;
	border-bottom: 1px solid #CCCCCC;
}

.basic_row {
	background: #FEFEFE;
}

.topic_sorting_row {
	background: transparent;
}

#sort_by {
	border: 2px solid #D1D1D1;
	border-bottom: none;
	border-radius: 5px 5px 0 0;
}

#sort_by.topic_sorting_recent {
	border: 1px solid #D1D1D1;
	border-bottom: none;
}

.sort_by_container {
	border: 1px solid #CCCCCC;
	border-radius: 2px;
}

.topic_name h4 a {
	color: #3D6E32;
}

.sticky_row .topic_name h4 a, .locked_row.sticky_row .topic_name h4 a {
	color: #585858;
}

.locked_row .topic_name h4 a {
	color: #686868;
}

.sticky_row .topic_name h4 a.new_posts, .locked_row.sticky_row .topic_name h4 a.new_posts, .locked_row .topic_name h4 a.new_posts {
	color: #FEFEFE;
}

.topic_stats {
	color: #686868;
}

.qaction_row {
	background: #FEFEFE;
}

.approvetopic_row, .approve_row {
	background: #FFF5CD;
}

.sticky_row, .locked_row.sticky_row {
	background: #FFFFE0;
}

.locked_row {
	background: #F4F4F4;
}

#topic_icons {
	border: 1px solid #DDDDDD;
	border-radius: 3px;
}

.jump_to_header {
	background: #EBEBEB;
	background-image: linear-gradient(to bottom, #FAFAFA, #EAEAEA);
	box-shadow: 2px 1px rgba(1, 1, 1, 0.07) inset;
	color: #566450;
}

.jump_to_header:hover {
	background: #F0F0F0;
	color: #585858;
}

/* --------------------------------------------------------------------- */
/* The following are alternative layout orders for the board index rows. */
/* They are basic demonstrations only. Extra custom styling can be done.
/* These demos can be commented and un-commented to see them in action.
/* Note: similar tricks can be performed with the new message index too.
/* --------------------------------------------------------------------- */
/* This one simply puts the board stats back in the old SMF location. */
/*
.board_stats {
	text-align: left;
	padding: 1px 6px 1px 0;
	float: left;
}
*/
/* This one flips the row left to right, and sets the lastpost text to LTR. */
/*
.board_row {
	direction: rtl;
}
.board_latest {
	direction: ltr;
	border: none;
}
*/
/* This one does the LTR flip, and puts the board icon at far right. */
/*
.board_row {
	direction: rtl;
}
.icon_anchor {
	float: right;
	padding: 2px 0 0 6px;
}
.board_latest {
	direction: ltr;
	border: none;
}
*/
/* ------------------------------------------------------ */
/* This is where the fun starts. Absolute positioning. :D */
/* ------------------------------------------------------ */
/* This one takes the previous example, and puts the board icon back to far left. */
/*
.board_row {
	direction: rtl;
	position: relative;
}
.icon_anchor {
	position: absolute;
	left: 8px;
}
.board_latest {
	direction: ltr;
	border: none;
	padding-left: 66px;
}
*/
/* You want more? Ok. This one does the above, but also puts board stats over
/* at far right, and sets board name and description back to left aligned. */
/*
.board_row {
	direction: rtl;
	position: relative;
}
.board_info {
	direction: ltr;
	padding-right: 8.4em;
}
.icon_anchor {
	position: absolute;
	left: 8px;
}
.board_description, .moderators {
	margin: 0;
}
.board_latest {
	direction: ltr;
	border: none;
	padding-left: 66px;
}
.board_stats {
	position: absolute;
	right: 8px;
}
*/
/* There are more options, but those should be enough to give the general idea. */

/* ------------------------------------------------------- */
/*	$TOPICS		                                           */
/* ------------------------------------------------------- */
/* The display template (topic view).

/* Poll vote options */
#poll_options .options {
	border-top: 1px solid #DDDDDD;
}

/* Poll results */
#poll_options .options .percentage {
	background: #FEFEFE;
}

/* On to the posts */
#quickreplybox, #forumposts, #searchform, #recentposts, #pmFolder, #topic_summary, #preview_section {
	background: #E5E5E5;
	box-shadow: 1px 2px 4px #EEEEEE;
	border-radius: 4px 4px 0 0;
}

/* Poster and postarea + moderation area underneath */
.forumposts {
	margin-top: 2px;
	border: 1px solid #DDDDDD;
	border-bottom: 1px solid #CCCCCC;
	background: #FEFEFE;
}

/* Colors for background of posts requiring approval */
.approvebg {
	background: #FFF5CD;
}

.poster .name {
	color: #3D6E32;
}

/* Drop menu for the poster info. */
.poster .listlevel1.sfhover .menulevel2, .poster .listlevel1:hover .menulevel2 {
	background: #FEFEFE;
}

.report_seperator {
	max-width: 14em;
	border-bottom: 1px solid #EEEEEE;
	background: #BBBBBB;
}

/* @todo - Save code by amalgamating common button background declarations. */
.poster_online .linklevel1 {
	border: 1px solid #AFAFAF;
	border-top: 1px solid #CFCFCF;
	border-left: 1px solid #BFBFBF;
	border-radius: 2px;
	background: #F4F4F4;
	background-image: linear-gradient(to bottom, #FEFEFE 0%, #E4E4E4 100%);
	box-shadow: 1px 1px 2px #EEEEEE;
}

.poster_online .linklevel1:hover {
	border: 1px solid #CCCCCC;
	border-top: 1px solid #AFAFAF;
	border-left: 1px solid #BBBBBB;
	background: #F0F0F0;
	box-shadow: 1px 1px 1px rgba(0, 0, 0, 0.07) inset;
	text-decoration: none;
}

.post_subject {
	color: #585858;
}

.keyinfo h5 a, .keyinfo h5 a strong {
	color: #3D6E32;
}

.inner {
	border-top: 1px solid #BFBFBF;
}

/* All the signatures used in the forum. */
.signature, .attachments, .custom_fields_above_signature {
	border-top: 1px solid #BFBFBF;
}

/* Used by video embed JS when autolinking video links */
.elk_video {
	border: #27A348 1px solid;
	border-top: 0;
}

.elk_videoheader {
	border: #27A348 1px solid;
}

.requiredfield:before {
	border: 10px solid transparent;
	border-bottom-color: #3D6E32;
	content: ' ';
}

.requiredfield {
	border: 1px solid #2D5024;
	border-right-color: #5BA048;
	border-bottom-color: #5BA048;
	background: #3D6E32;
	color: #FEFEFE;
}

/* ------------------------------------------------------- */
/*	$EDITOR		                                           */
/* ------------------------------------------------------- */

/* The main post editor section. */
#preview_body {
	border: 1px solid #DDDDDD;
	border-bottom: 1px solid #CCCCCC;
	background: #FEFEFE;
}

#postAdditionalOptionsHeader, #postDraftOptionsHeader {
	background: #FAFAFA;
	background-image: linear-gradient(to bottom, #FAFAFA 0%, #EBEBEB 100%);
}

#postAdditionalOptions, #postDraftOptions {
	border: 1px solid #CCCCCC;
	border-top: none;
	border-radius: 0 0 4px 4px;
	background: #FEFEFE;
}

#postAdditionalOptionsNC {
	border: 1px solid #CCCCCC;
	border-radius: 4px;
	background: #FEFEFE;
}

.drop_area {
	border: dashed 1px #CCCCCC;
	background-color: #E4E4E4;
	color: #444444;
	-webkit-font-smoothing: antialiased;
}

.statusbar {
	border-top: 1px solid #A9CCD1;
	border-bottom: 1px solid #A9CCD1;
	background: #F0F0F0;
}

.progressBar {
	border: 1px solid #DDDDDD;
}

.progressBar div {
	background-color: #008000;
	color: #FEFEFE;
}

.abort, .remove, .share {
	border-radius: 5px;
	background-color: #A80000;
	color: #FEFEFE;
}

.share {
	background-color: #008000;
}

.drop_attachments_error {
	color: #A80000;
}

#postMoreOptions {
	border-top: 1px solid #CCCCCC;
}

#postDraftOptions .settings dd, #postDraftOptions .settings dt {
	border-top: 1px solid #E4E4E4;
}

/* ------------------------------------------------------- */
/*	$MODERATE	                                           */
/* ------------------------------------------------------- */

.split_messages .post {
	border-top: 1px solid #FEFEFE;
}

/* ------------------------------------------------------- */
/* $TABS                                                   */
/* We can't control what jqueryui pollutes the DOM with, so deal with it */
/* Styles for the profile summary tabs, or any jquery ui tabs */
/* ------------------------------------------------------- */

.ui-tabs .ui-tabs-nav li {
	border: 1px #CCCCCC solid;
	border-radius: 2px 2px 0 0;
	color: #FEFEFE;
}

.ui-tabs .ui-tabs-nav li a {
	outline: none;
	border-bottom-color: #CCCCCC;
	border-radius: 2px 2px 0 0;
	background: #F0F0F0;
}

.ui-tabs .ui-tabs-nav .ui-state-default a {
	background: #F0F0F0;
	background: linear-gradient(to bottom, #FEFEFE, #E4E4E4) repeat scroll 0 0 #F4F4F4;
}

.ui-tabs .ui-tabs-nav .ui-state-active a, .ui-tabs .ui-tabs-nav .ui-state-active {
	border-radius: 2px 2px 0 0;
	background: #3D6E32;
	background: linear-gradient(to bottom, #5BA048, #3D6E32) repeat scroll 0 0 #4B863C;
	color: #FEFEFE;
}

.ui-tabs .ui-state-hover {
	border: 1px solid #CCCCCC;
	border-top: 1px solid #AFAFAF;
	border-left: 1px solid #AFAFAF;
	background: #F0F0F0;
	color: #585858;
	text-decoration: none;
}

/* ------------------------------------------------------- */
/* $PROFILE	                                               */
/* ------------------------------------------------------- */
/* Profile colors */

.ui-tabs .ui-tabs-panel {
	border: 1px solid #DDDDDD;
	border-top: 1px #CCCCCC solid;
	background: none repeat scroll 0 0 #FEFEFE;
}

#profile_attachments {
	border: 1px solid #CCCCCC;
	border-radius: 7px;
	background: #EEEFEE;
	box-shadow: 0 -2px 2px rgba(0, 0, 0, 0.1);
}

#profile_attachments .content {
	border: none;
	background: #FEFEFE;
}

.content_noframe {
	border: none;
	box-shadow: none;
}

.profileblock {
	background: none repeat scroll 0 0 #FEFEFE;
}

.profileblock ul li:not(:first-child):before {
	content: "\20\7C\20";
}

#detailedinfo dt, #tracking dt, .profileblock dt {
	color: #585858;
}

.activity_stats li span {
	border: 1px solid #585858;
	border-right-style: none;
	border-left-style: none;
	background: #EEEEEE;
}

.activity_stats li .bar {
	border: 1px solid #CCCCCC;
	border-bottom: none;
	background: #FEFEFE;
}

.activity_stats li .bar div {
	background: #60BC78;
	background-image: linear-gradient(to bottom, #60BC78 0%, #27A348 100%);
}

.profile_pie {
	background: url(../../images/_light/stats_pie.png);
}

.topic_details {
	border-bottom: 1px solid #999999;
}

.ignoreboards a {
	border-bottom: 1px solid #CCCCCC;
}

.ignoreboards a:hover {
	border-bottom: 1px solid #585858;
	text-decoration: none;
}

.generic_border {
	border: 1px solid #CCCCCC;
	border-radius: 6px;
}

.attachment_title {
	border-bottom: 1px solid #CCCCCC;
}

#warndiv .ui-widget-header {
	background: transparent;
}

#warndiv .watched .ui-widget-header {
	background: #008000;
}

#warndiv .moderated .ui-widget-header {
	background: #FFA500;
}

#warndiv .muted .ui-widget-header {
	background: red;
}

#creator dt strong {
	color: #585858;
}

/* ------------------------------------------------------- */
/* $PERSONAL                                               */
/* ------------------------------------------------------- */

#personal_messages .capacity_bar {
	border: 1px solid #AFAFAF;
}

#personal_messages .capacity_bar span {
	border-right: 1px solid #AFAFAF;
}

#personal_messages .capacity_bar .empty {
	background: #60BC78;
}

#personal_messages .capacity_bar .filled {
	background: #FFA500;
}

#personal_messages .capacity_bar .full {
	background: #A80000;
}

.addrules dt.floatleft {
	color: #585858;
}

/* ------------------------------------------------------- */
/* $CALENDAR                                               */
/* ------------------------------------------------------- */
/* Calendar colors for birthdays, events and holidays */
.birthday {
	color: #920AC4;
}

.event {
	color: #008000;
}

.holiday {
	color: #555080;
}

.calendar_table {
	border-top: 1px solid #DDDDDD;
	background: #DDDDDD;
}

.calendar_table th, .calendar_table td {
	background: #FEFEFE;
}

/* Used to indicate the current day. */
#main_grid .calendar_today, #month_grid .calendar_today {
	border: 1px solid #AFAFAF;
	background: #EBFFD8;
}

#main_grid .weeks {
	font-weight: normal;
	font-size: 1em;
}

#main_grid .weeks a:hover {
	text-decoration: none;
}

#main_grid .days {
	vertical-align: top;
}

.weeklist {
	background: #E4E4E4;
}

.weeklist > li {
	border: 1px solid #DDDDDD;
	background: #FEFEFE;
}

.weeklist h4 a:hover {
	text-decoration: none;
}

.modify_event {
	color: #A80000;
}

.hidelink {
	font-style: italic;
}

/* Add a background that fits with the calendar. */
#calendar_navigation {
	border: 1px solid #DDDDDD;
	border-top: none;
}

/* ------------------------------------------------------- */
/*	$HELP                                                  */
/* ------------------------------------------------------- */

#helpmain {
	border: 1px solid #CCCCCC;
	border-radius: 7px;
	box-shadow: 0 -2px 2px rgba(0, 0, 0, 0.1);
}

/* Styles for the tooltips. */
.tooltip {
	border: 1px solid #AFAFAF;
	border-radius: 4px;
	background: #FEFEFE;
	box-shadow: 3px 3px 3px rgba(0, 0, 0, 0.3);
}

/* The darkened background for help pop-ups. */
.popup_container {
	background: rgba(0, 0, 0, 0.4);
}

/* The actual pop-up wrapper. */
.popup_window {
	margin: 0 auto;
	width: 600px;
	border: 1px solid #686868;
	border-radius: 5px;
	background-color: #FAFAFA;
	background-clip: padding-box;
	box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5);
}

.popup_window.in.content {
	transition-duration: .5s;
	transform: translate(0, 30px);
}

/* The text content, hopefully helpful. */
.popup_content {
	border: 1px solid #BBBBBB;
	border-bottom: 1px solid #CCCCCC;
	border-radius: 5px;
	background: #FAFAFA;
	box-shadow: 0 -2px 2px rgba(0, 0, 0, 0.1);
}

/* ------------------------------------------------------- */
/*	$SEARCH                                                */
/* ------------------------------------------------------- */

#mlsearch_options {
	border: 1px solid #DDDDDD;
	border-radius: 5px;
	background: #FAFAFA;
}

.search_results_posts {
	background: #FEFEFE;
}

.search_results_posts .topic_body {
	border-top: 1px solid #CCCCCC;
	box-shadow: 0 1px 0 #FEFEFE inset;
}

.search_results_posts > li:not(:last-child) {
	border-bottom: 4px solid #DDDDDD;
}

/* ------------------------------------------------------- */
/*	$MEMBERLIST                                            */
/* ------------------------------------------------------- */
.mlist .mlist_header div {
	border-top: none;
}

.mlist li div, .whos_online dt div, .whos_online dd:nth-child(odd) div {
	border-top: 1px solid #CCCCCC;
	border-bottom: 1px solid #CCCCCC;
	background-color: #FEFEFE;
}

.mlist li.alternate_row div, .whos_online dd:nth-child(even) div {
	border-top: 1px solid #CCCCCC;
	border-bottom: 1px solid #CCCCCC;
	background-color: #FAFAFA;
}

.mlist li div:first-child {
	border-left: 1px solid #CCCCCC;
}

.mlist li div:last-child {
	border-right: 1px solid #CCCCCC;
}

.letter_row h3 {
	border: 1px solid #CCCCCC;
	border-radius: 6px 6px 0 0;
	background: #EBEBEB;
	background-image: linear-gradient(to bottom, #FAFAFA, #EAEAEA);
}

/* ------------------------------------------------------- */
/*	$LOGIN                                                 */
/* ------------------------------------------------------- */

.coppa_contact {
	border: 1px solid #585858;
	background: #FEFEFE;
	color: #585858;
}

.valid_input {
	background: #EBFFD8;
}

.invalid_input {
	background: #FFEEEE;
}

/* ------------------------------------------------------- */
/*	$BOXES		                                           */
/* ------------------------------------------------------- */

/* Lotsa boxes. */
.description, .information, .warningbox, .successbox, .infobox, .errorbox {
	border: 1px solid #CCCCCC;
	background: #FEFEFE;
}

/* Information boxes. */
.information {
	background: #F0F6F0;
}

.warningbox {
	border-top: 1px solid #FFA500;
	border-bottom: 1px solid #FFA500;
	background: #FFF5CD url(../../images/profile/warning_moderate.png) 10px 50% no-repeat;
}

.successbox {
	border-top: 1px solid #008000;
	border-bottom: 1px solid #008000;
	background: #EEFFEE url(../../images/icons/field_valid.png) 10px 50% no-repeat;
}

.infobox {
	border-top: 1px solid #3A87AD;
	border-bottom: 1px solid #3A87AD;
	background: #D9EDF7 url(../../images/icons/quick_sticky.png) 10px 50% no-repeat;
}

.errorbox {
	border-top: 1px solid #A80000;
	border-bottom: 1px solid #A80000;
	background: #FFEEEE url(../../images/profile/warning_mute.png) 10px 50% no-repeat;
}

/* ------------------------------------------------------- */
/*	$PROGRESS                                              */
/* ------------------------------------------------------- */
/* Styles for the progress bar */
.progress_bar {
	border: 1px solid black;
	border-radius: 5px;
	background: white;
	box-shadow: inset 0 2px 5px rgba(0, 0, 0, 0.05);
}

.progress_bar .full_bar {
	border-radius: 3px;
	color: black;
}

.progress_bar .green_percent {
	background-color: #008000;
}

.progress_bar .blue_percent {
	background-color: #0000FF;
}

/* ------------------------------------------------------- */
/* $STATISTICS                                             */
/* ------------------------------------------------------- */
.statistics .category_header {
	border: none;
	border-bottom: 2px solid #CCCCCC;
	background: none;
	text-shadow: none;
}

.statistics .flow_hidden, #forum_history .flow_hidden {
	border: 1px solid #DDDDDD;
	background: #FEFEFE;
}

.stats.floatleft {
	border-right: 1px solid #CCCCCC;
}

#top_row .stats dd, .statsbar {
	border: 1px solid #AFAFAF;
	background: #FEFEFE;
	text-shadow: 0 -1px 0 rgba(234, 234, 234, 0.2);
}

/* Methinks topic links, etc need a little more oomph next to the orange bars. */
#top_row .stats dd {
	border: 1px solid transparent;
	background: none;
}

/* Status Bar Green */
.statsbar .bar {
	background: #5BA048;
	background-image: linear-gradient(to bottom, #60BC78 0%, #27A348 100%);
}

/* Absolute positioning stops these breaking the bars on narrow screens. */
.statsbar .righttext {
	background: #FEFEFE;
}

#stats {
	border: none;
}

/* Test code - an attempt to make recent posts less overwhelming. */
#recentposts .inner {
	position: relative;
	overflow: auto;
	max-height: 20em;
}

/* floating error box */
/* currently used by like functionality */
.floating_error {
	border: solid 1px #E4E4E4;
	border-radius: 10px;
	background: #FEFEFE;
	color: #444444;
	font-size: 15px;
}

.floating_error .error_heading {
	font-weight: bold;
}

.floating_error .error_msg {
	color: #333333;
}

.floating_error .error_btn {
	border-top: solid 1px #D1D1D1;
	color: #0000FF;
	font-weight: bold;
	font-size: 16px;
}

.floating_error .error_btn:hover {
	cursor: pointer;
}

/* ------------------------------------------------------- */
/*	$MEDIA		                                           */
/* ------------------------------------------------------- */
/* Experimental media queries.
/* NOTE:
/* When setting break points for media queries, don't set them in pixels.
/* Use em instead.
/* Why? Because the point of re-stacking/dropping content is to fit it all
/* in the available space. This is dependent not just on width in pixels,
/* but also on the user-selected text size that is set in the browser.
/*
/* If, for whatever reason (eyesight, pixel pitch, workstation arrangement, etc)
/* a user requires text 50% larger than theme default, then their screen is
/* effectively a lot smaller than its nominal resolution would indicate.
/* If the break points are set in em, suddenly the media queries become equally
/* responsive for all users, without any extra code being required.
/*
/* Testing em break points is just as easy as testing pixels,
/* and it will make more people happier. This is cool. :)
/*
/* Of course, having comments to map em to px for each query is a good idea too.

/* Smartphones (portrait & landscape) drop the stats (views/replys) and last post from the screen */

/* This one does 800 screens at default font size. */
@media screen and (max-width: 50em) {
	#menu_sidebar {
		border: 1px solid #AFAFAF;
		border-radius: 4px;
		background: #FEFEFE;
		box-shadow: 3px 3px 3px rgba(0, 0, 0, 0.3);
	}

	[data-icon]:before {
		display: inline-block;
		margin: 2px;
		padding: 1px;
		width: 1.15em;
		height: 1.15em;
		border: 3px solid #585858;
		border-radius: 4px;
		color: #585858;
		content: attr(data-icon);
		text-align: center;
		font-size: 2em;
		font-family: 'FontAwesome';
		line-height: 1.2em;
	}

	.indicator[data-icon]:before {
		color: #5BA048;
	}

	#main_menu .linklevel1 {
		margin-right: 2px;
	}

	#main_menu .linklevel1.active, #main_menu .linklevel1.active:hover {
		border: 1px solid transparent;
		background: transparent;
	}

	.listlevel1#button_profile .linklevel1 {
		min-width: 0.5em;
	}

	.mlist li div.posts {
		border-right: 1px solid #CCCCCC;
	}
}

/* This one does up to 540 screens. */
@media screen and (max-width: 33.750em) {
	#gotop, #gobottom {
		border: 1px solid #222222;
	}

	#gobottom {
		border-radius: 0;
	}

	#gotop {
		border-radius: 0 8px 0 0;
	}

	#gotop:hover, #gobottom:hover {
		color: #444444;
		text-decoration: none;
		opacity: 1;
	}

	.board_latest {
		border-left: 0;
	}

	.frame {
		border-radius: 0;
	}

	.board_lastpost {
		border-top: 1px solid #CCCCCC;
	}

	.topic_listing > li {
		border: 1px solid #AFAFAF;
		box-shadow: 3px 3px 6px #E4E4E4;
	}

	.poster:after, .posterarea:before {
		border-bottom: 1px solid #BFBFBF;
	}

	.board_icon {
		width: 20px;
		height: 20px;
	}

	.on_board, .on2_board {
		background-position: -300px -14px;
	}

	.off_board {
		background-position: -372px -14px;
	}

	.redirect_board {
		background-position: -444px -14px;
	}

	.forumposts {
		margin-top: 8px;
		border: 1px solid #BFBFBF;
		border-radius: 3px;
		background-color: #FAFAFA;
	}

	.forum_category, .forumposts, .content_category {
		border: none;
		background: #FEFEFE;
	}

	.listlevel2.subsections .linklevel2::after {
		content: '';
	}

	.stats.floatleft {
		border: none;
	}

	.subsections:hover .linklevel1:after {
		content: "";
	}

	.whos_online dd div {
		border-top: none !important;
		border-bottom: none !important;
	}

	.whos_online dd:nth-child(even), .whos_online dd:nth-child(odd) {
		margin-top: 1px;
		border-top: 1px solid #CCCCCC;
	}

	.online_member {
		font-size: 1.6em;
	}

	.track_ip {
		float: right;
		font-size: 0.7em;
	}

	.track_ip:before {
		content: "";
	}

	.track_ip:after {
		content: "";
	}
}

@media screen and (max-width: 30em) {
	.mlist li .group {
		border-right: 1px solid #CCCCCC;
	}
}


text:
#if !defined(__COREFOUNDATION_CFMACHPORT_LIFETIME__)
#define __COREFOUNDATION_CFMACHPORT_LIFETIME__ 1

CF_EXTERN_C_BEGIN

#include <mach/mach_port.h>
#include <os/lock.h>

typedef CF_ENUM(uint8_t, _CFMPLifetimeClient) {
    _CFMPLifetimeClientCFMachPort = 0,
    _CFMPLifetimeClientCFMessagePort = 1,
    // NOTE: We current support MAX_CLIENTS more clients (currently 2)
};

/// Records that that a given mach_port has been deallocated.
CF_PRIVATE void _cfmp_record_deallocation(_CFMPLifetimeClient const client, mach_port_t const port, Boolean const doSend, Boolean const doReceive);

/// Records that we have called dispatch_source_cancel.
CF_PRIVATE void _cfmp_record_intent_to_invalidate(_CFMPLifetimeClient const client, mach_port_t const port);

/// Records when the cancel-handler for a given dispatch_port is called.
CF_PRIVATE void _cfmp_source_invalidated(_CFMPLifetimeClient const client, mach_port_t const port);

/// For Foundation Only
/// Records when an nsmach port is going to be interested in a bridges CFMachPort
CF_EXPORT void _cfmp_record_nsmachport_is_interested(_CFMPLifetimeClient const client, mach_port_t const port);

/// For Foundation Only
/// Records when an nsmachport deallocates its context
CF_EXPORT void _cfmp_record_nsmachport_deallocation(_CFMPLifetimeClient const client, mach_port_t const port, Boolean const doSend, Boolean const doReceive);

CF_EXTERN_C_END
#endif // __COREFOUNDATION_CFMACHPORT_LIFETIME__

redpajama_set_name: RedPajamaGithub


text:
<?xml version="1.0" encoding="UTF-8"?>
<!--
 ~ Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
 ~
 ~ WSO2 Inc. licenses this file to you under the Apache License,
 ~ Version 2.0 (the "License"); you may not use this file except
 ~ in compliance with the License.
 ~ You may obtain a copy of the License at
 ~
 ~    http://www.apache.org/licenses/LICENSE-2.0
 ~
 ~ Unless required by applicable law or agreed to in writing,
 ~ software distributed under the License is distributed on an
 ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 ~ KIND, either express or implied.  See the License for the
 ~ specific language governing permissions and limitations
 ~ under the License.
 -->
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:jaxrs="http://cxf.apache.org/jaxrs"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://cxf.apache.org/jaxrs
http://cxf.apache.org/schemas/jaxrs.xsd">

    <import resource="classpath:META-INF/cxf/cxf.xml"/>
    <import resource="classpath:META-INF/cxf/cxf-servlet.xml"/>
    <context:property-placeholder/>
    <context:annotation-config/>
    <bean class="org.springframework.web.context.support.ServletContextPropertyPlaceholderConfigurer"/>
    <bean class="org.springframework.beans.factory.config.PreferencesPlaceholderConfigurer"/>

    <jaxrs:server id="services" address="/">
        <jaxrs:serviceBeans>
        	<bean class="org.wso2.carbon.ml.rest.api.LoginLogoutApiV10"/>
            <bean class="org.wso2.carbon.ml.rest.api.ProjectApiV10"/>
            <bean class="org.wso2.carbon.ml.rest.api.AnalysisApiV10"/>
            <bean class="org.wso2.carbon.ml.rest.api.DatasetApiV10"/>
            <bean class="org.wso2.carbon.ml.rest.api.ModelApiV10"/>
            <bean class="org.wso2.carbon.ml.rest.api.ConfigurationApiV10"/>
            <bean class="org.wso2.carbon.ml.rest.api.WranglerApiV10"/>
        </jaxrs:serviceBeans>
        <jaxrs:providers>
            <bean class="org.codehaus.jackson.jaxrs.JacksonJsonProvider"/>
            <ref bean="basicAuthenticationFilter"/>
            <ref bean="sessionAuthenticationFilter"/>
        </jaxrs:providers>
    </jaxrs:server>

    <bean id="basicAuthenticationFilter" class="org.wso2.carbon.ml.rest.api.handler.MLBasicAuthenticationHandler"/>
    <bean id="sessionAuthenticationFilter" class="org.wso2.carbon.ml.rest.api.handler.SessionBasedAuthenticationHandler"/>
</beans>


text:
#ifndef QUICKSTEP_EXPRESSIONS_SCALAR_SCALAR_LITERAL_HPP_
#define QUICKSTEP_EXPRESSIONS_SCALAR_SCALAR_LITERAL_HPP_

#include <utility>
#include <vector>

#include "catalog/CatalogTypedefs.hpp"
#include "expressions/Expressions.pb.h"
#include "expressions/scalar/Scalar.hpp"
#include "storage/StorageBlockInfo.hpp"
#include "types/TypedValue.hpp"
#include "utility/Macros.hpp"

namespace quickstep {

class ColumnVector;
class Type;
class ValueAccessor;

struct SubBlocksReference;

/** \addtogroup Expressions
 *  @{
 */

/**
 * @brief Scalars which are literal values from a SQL statement.
 **/
class ScalarLiteral : public Scalar {
 public:
  /**
   * @brief Constructor.
   *
   * @param lit A TypedValue to wrap.
   * @param lit_type The Type that lit belongs to.
   **/
  ScalarLiteral(const TypedValue &lit,
                const Type &lit_type)
      : Scalar(lit_type),
        internal_literal_(lit) {
    internal_literal_.ensureNotReference();
  }

  ScalarLiteral(TypedValue &&lit,
                const Type &lit_type)
      : Scalar(lit_type),
        internal_literal_(lit) {
    internal_literal_.ensureNotReference();
  }

  ~ScalarLiteral() override {
  }

  serialization::Scalar getProto() const override;

  Scalar* clone() const override;

  ScalarDataSource getDataSource() const override {
    return kLiteral;
  }

  TypedValue getValueForSingleTuple(const ValueAccessor &accessor,
                                    const tuple_id tuple) const override {
    return internal_literal_.makeReferenceToThis();
  }

  TypedValue getValueForJoinedTuples(
      const ValueAccessor &left_accessor,
      const relation_id left_relation_id,
      const tuple_id left_tuple_id,
      const ValueAccessor &right_accessor,
      const relation_id right_relation_id,
      const tuple_id right_tuple_id) const override {
    return internal_literal_.makeReferenceToThis();
  }

  bool hasStaticValue() const override {
    return true;
  }

  const TypedValue& getStaticValue() const override {
    return internal_literal_;
  }

  ColumnVector* getAllValues(ValueAccessor *accessor,
                             const SubBlocksReference *sub_blocks_ref) const override;

  ColumnVector* getAllValuesForJoin(
      const relation_id left_relation_id,
      ValueAccessor *left_accessor,
      const relation_id right_relation_id,
      ValueAccessor *right_accessor,
      const std::vector<std::pair<tuple_id, tuple_id>> &joined_tuple_ids) const override;

 private:
  TypedValue internal_literal_;

  DISALLOW_COPY_AND_ASSIGN(ScalarLiteral);
};

/** @} */

}  // namespace quickstep

#endif  // QUICKSTEP_EXPRESSIONS_SCALAR_SCALAR_LITERAL_HPP_


text:
export {
  MatLegacyCheckboxChange,
  MAT_LEGACY_CHECKBOX_CONTROL_VALUE_ACCESSOR,
  MatLegacyCheckbox,
} from './checkbox';
export {MatLegacyCheckboxModule} from './checkbox-module';

export {
  /**
   * @deprecated Use `MAT_CHECKBOX_REQUIRED_VALIDATOR` from `@angular/material/checkbox` instead. See https://material.angular.io/guide/mdc-migration for information about migrating.
   * @breaking-change 17.0.0
   */
  MAT_CHECKBOX_REQUIRED_VALIDATOR as MAT_LEGACY_CHECKBOX_REQUIRED_VALIDATOR,

  /**
   * @deprecated Use `MatCheckboxClickAction` from `@angular/material/checkbox` instead. See https://material.angular.io/guide/mdc-migration for information about migrating.
   * @breaking-change 17.0.0
   */
  MatCheckboxClickAction as MatLegacyCheckboxClickAction,

  /**
   * @deprecated Use `MatCheckboxRequiredValidator` from `@angular/material/checkbox` instead. See https://material.angular.io/guide/mdc-migration for information about migrating.
   * @breaking-change 17.0.0
   */
  MatCheckboxRequiredValidator as MatLegacyCheckboxRequiredValidator,

  /**
   * @deprecated Use `_MatCheckboxRequiredValidatorModule` from `@angular/material/checkbox` instead. See https://material.angular.io/guide/mdc-migration for information about migrating.
   * @breaking-change 17.0.0
   */
  _MatCheckboxRequiredValidatorModule as _MatLegacyCheckboxRequiredValidatorModule,

  /**
   * @deprecated Use `TransitionCheckState` from `@angular/material/checkbox` instead. See https://material.angular.io/guide/mdc-migration for information about migrating.
   * @breaking-change 17.0.0
   */
  TransitionCheckState as LegacyTransitionCheckState,

  /**
   * @deprecated Use `MAT_CHECKBOX_DEFAULT_OPTIONS_FACTORY` from `@angular/material/checkbox` instead. See https://material.angular.io/guide/mdc-migration for information about migrating.
   * @breaking-change 17.0.0
   */
  MAT_CHECKBOX_DEFAULT_OPTIONS_FACTORY as MAT_LEGACY_CHECKBOX_DEFAULT_OPTIONS_FACTORY,

  /**
   * @deprecated Use `MatCheckboxDefaultOptions` from `@angular/material/checkbox` instead. See https://material.angular.io/guide/mdc-migration for information about migrating.
   * @breaking-change 17.0.0
   */
  MatCheckboxDefaultOptions as MatLegacyCheckboxDefaultOptions,

  /**
   * @deprecated Use `MAT_CHECKBOX_DEFAULT_OPTIONS` from `@angular/material/checkbox` instead. See https://material.angular.io/guide/mdc-migration for information about migrating.
   * @breaking-change 17.0.0
   */
  MAT_CHECKBOX_DEFAULT_OPTIONS as MAT_LEGACY_CHECKBOX_DEFAULT_OPTIONS,
} from '@angular/material/checkbox';


text:
namespace Klever {

template<class IDX,class ARGIDX,class DATA>
class CLRUCache : public CObject {
public:
	struct	CacheEntry	{
		enum	cacheState	{
			cacheClean, cacheDirty, cacheEmpty
		};
		cacheState	m_State;
		UINT m_hits;

		IDX m_idx;
		DATA* m_pData;

		CacheEntry() { m_State=cacheEmpty; VERIFY(m_pData=new DATA); m_hits=0; }
		virtual ~CacheEntry() { delete m_pData; }
	};
	typedef CMap<IDX,ARGIDX,CacheEntry*,CacheEntry*> CCacheMap;
	typedef CList<CacheEntry*,CacheEntry*> CCacheList;

	CCacheList m_Cache;
	CCacheMap m_Map;

	CLRUCache(UINT cacheSize)	{
		for(int tmp=0;tmp<cacheSize;tmp++){
		CacheEntry* p = new CacheEntry;
			m_Cache.AddTail(p);
		}
	}
	virtual ~CLRUCache()	{
		Flush();
	POSITION p = m_Cache.GetHeadPosition();
		while(p){
		CacheEntry* c = m_Cache.GetNext(p);
			delete c;
		}
	}

	DATA* GetCached(ARGIDX idx,BOOL bLoad=TRUE) {
	CacheEntry* rv;
		if(m_Map.Lookup(idx,rv)){
			rv->m_hits++;
			PopUp(rv);
			return rv->m_pData;
		}
		if(!bLoad)
			return NULL;
		rv = m_Cache.GetTail();
		ASSERT(rv);
		switch(rv->m_State){
		case CacheEntry::cacheDirty:
			FlushEntry(rv);
		case CacheEntry::cacheClean:
			m_Map.RemoveKey(rv->m_idx);
			rv->m_State=CacheEntry::cacheEmpty;
		case CacheEntry::cacheEmpty:
			break;
		default:
			ASSERT(FALSE);
		}
		if(!_ReadIn(idx,rv->m_pData))
			return NULL;
		rv->m_hits=1;
		rv->m_State=CacheEntry::cacheClean;
		rv->m_idx=idx;
		m_Map[idx]=rv;
		PopUp(rv);
		return rv->m_pData;
	}
	BOOL MakeDirty(ARGIDX idx) {
	CacheEntry* pEntry;
		if(m_Map.Lookup(idx,pEntry)){
			ASSERT(pEntry->m_State==CacheEntry::cacheClean || pEntry->m_State==CacheEntry::cacheDirty);
			pEntry->m_State=CacheEntry::cacheDirty;
			return TRUE;
		}
		return FALSE;
	}
	BOOL Flush() {
	POSITION p = m_Cache.GetHeadPosition();
		while(p){
		CacheEntry* pEntry = m_Cache.GetNext(p);
			ASSERT(pEntry);
			FlushEntry(pEntry);
		}
		return TRUE;
	}
	BOOL FlushEntry(CacheEntry* pEntry) {
		if(pEntry->m_State==CacheEntry::cacheDirty){
		BOOL rv = _WriteOut(pEntry->m_idx,pEntry->m_pData);
			if(rv)
				pEntry->m_State=CacheEntry::cacheClean;
		}
		return FALSE;
	}
	void PopUp(CacheEntry* pEntry) {
	POSITION p = m_Cache.Find(pEntry);
		ASSERT(p);
		m_Cache.RemoveAt(p);
		VERIFY(m_Cache.AddHead(pEntry));
	}

	virtual	BOOL _ReadIn(ARGIDX idx,DATA* data) = 0;
	virtual BOOL _WriteOut(ARGIDX idx,DATA* data) = 0;
};

};

#endif	// __LRUCACHE_H


text:
#nullable enable
using System;
using System.IO;
using Core2D.Model;
using Core2D.Model.Renderer;
using Core2D.Modules.Renderer.SkiaSharp;
using Core2D.ViewModels;
using Core2D.ViewModels.Containers;
using Core2D.ViewModels.Data;
using Core2D.ViewModels.Renderer.Presenters;

namespace Core2D.Modules.FileWriter.SkiaSharp;

public sealed class PngSkiaSharpWriter : IFileWriter
{
    private readonly IServiceProvider? _serviceProvider;

    public PngSkiaSharpWriter(IServiceProvider? serviceProvider)
    {
        _serviceProvider = serviceProvider;
    }

    public string Name { get; } = "Png (SkiaSharp)";

    public string Extension { get; } = "png";

    public void Save(Stream stream, object? item, object? options)
    {
        if (item is null)
        {
            return;
        }

        var ic = options as IImageCache;
        if (options is null)
        {
            return;
        }

        var renderer = new SkiaSharpRendererViewModel(_serviceProvider);
        if (renderer.State is { })
        {
            renderer.State.DrawShapeState = ShapeStateFlags.Printable;
            renderer.State.ImageCache = ic;
        }

        var presenter = new ExportPresenter();

        IProjectExporter exporter = new PngSkiaSharpExporter(renderer, presenter);

        if (item is PageContainerViewModel page)
        {
            var dataFlow = _serviceProvider.GetService<DataFlow>();
            var db = (object)page.Properties;
            var record = (object?)page.Record;

            if (dataFlow is { })
            {
                dataFlow.Bind(page.Template, db, record);
                dataFlow.Bind(page, db, record);
            }

            exporter.Save(stream, page);
        }
        else if (item is DocumentContainerViewModel _)
        {
            throw new NotSupportedException("Saving documents as png drawing is not supported.");
        }
        else if (item is ProjectContainerViewModel _)
        {
            throw new NotSupportedException("Saving projects as png drawing is not supported.");
        }
    }
}


text:
#ifndef CLOCKWORK_FLAT_SHADING_SHADER_PROGRAM_HH
#define CLOCKWORK_FLAT_SHADING_SHADER_PROGRAM_HH

#include "ShaderProgram.hh"

#endif // CLOCKWORK_FLAT_SHADING_SHADER_PROGRAM_HH


text:
package org.apache.flink.runtime.state.filesystem;

import org.apache.flink.core.fs.FileSystem;
import org.apache.flink.core.fs.Path;
import org.apache.flink.runtime.state.CompletedCheckpointStorageLocation;

import java.io.IOException;

/**
 * A {@link CompletedCheckpointStorageLocation} that resides on a file system.
 * This location is internally represented through the checkpoint directory plus the metadata file.
 */
public class FsCompletedCheckpointStorageLocation implements CompletedCheckpointStorageLocation {

	private static final long serialVersionUID = 1L;

	private final Path exclusiveCheckpointDir;

	private final FileStateHandle metadataFileHandle;

	private final String externalPointer;

	private transient FileSystem fs;

	public FsCompletedCheckpointStorageLocation(
			FileSystem fs,
			Path exclusiveCheckpointDir,
			FileStateHandle metadataFileHandle,
			String externalPointer) {

		this.fs = fs;
		this.exclusiveCheckpointDir = exclusiveCheckpointDir;
		this.metadataFileHandle = metadataFileHandle;
		this.externalPointer = externalPointer;
	}

	@Override
	public String getExternalPointer() {
		return externalPointer;
	}

	public Path getExclusiveCheckpointDir() {
		return exclusiveCheckpointDir;
	}

	@Override
	public FileStateHandle getMetadataHandle() {
		return metadataFileHandle;
	}

	@Override
	public void disposeStorageLocation() throws IOException {
		if (fs == null) {
			fs = exclusiveCheckpointDir.getFileSystem();
		}
		fs.delete(exclusiveCheckpointDir, false);
	}
}


text:
<?xml version="1.0" ?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">

<link rel="stylesheet" type="text/css" href="../../../../scineplex.css">
<title></title>
<link rel="stylesheet" href="../../../../Active.css" type="text/css" />
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<link rev="made" href="mailto:" />

NAME

VERSION

DESCRIPTION

INHERITANCE

METHODS

BUGS

AUTHOR

COPYRIGHT AND LICENSE

NAME

Moose::Meta::TypeConstraint::Parameterizable - Type constraints which can take a parameter (ArrayRef)

VERSION

version 2.0604

DESCRIPTION

This class represents a parameterizable type constraint. This is a type constraint like ArrayRef or HashRef, that can be parameterized and made more specific by specifying a contained type. For example, instead of just an ArrayRef of anything, you can specify that is an ArrayRef[Int].

A parameterizable constraint should not be used as an attribute type constraint. Instead, when parameterized it creates a Moose::Meta::TypeConstraint::Parameterized which should be used.

INHERITANCE

Moose::Meta::TypeConstraint::Parameterizable is a subclass of Moose::Meta::TypeConstraint.

METHODS

This class is intentionally not documented because the API is confusing and needs some work.

BUGS

See "BUGS" in Moose for details on reporting bugs.

AUTHOR

Moose is maintained by the Moose Cabal, along with the help of many contributors. See "CABAL" in Moose and "CONTRIBUTORS" in Moose for details.

COPYRIGHT AND LICENSE

This software is copyright (c) 2012 by Infinity Interactive, Inc..

This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.


text:
package com.google.gerrit.acceptance.rest.revision;

import static com.google.common.truth.Truth.assertThat;
import static com.google.gerrit.acceptance.PushOneCommit.FILE_CONTENT;
import static com.google.gerrit.acceptance.PushOneCommit.FILE_NAME;
import static java.nio.charset.StandardCharsets.UTF_8;

import com.google.gerrit.acceptance.AbstractDaemonTest;
import com.google.gerrit.acceptance.PushOneCommit;
import com.google.gerrit.acceptance.RestResponse;
import com.google.gerrit.extensions.api.changes.ReviewInput;
import com.google.gerrit.extensions.common.ChangeInfo;
import org.eclipse.jgit.lib.ObjectId;
import org.eclipse.jgit.util.Base64;
import org.junit.Test;

public class RevisionIT extends AbstractDaemonTest {
  @Test
  public void contentOfParent() throws Exception {
    String parentContent = "parent content";
    PushOneCommit.Result parent = createChange("Parent change", FILE_NAME, parentContent);
    parent.assertOkStatus();

    gApi.changes().id(parent.getChangeId()).current().review(ReviewInput.approve());
    gApi.changes().id(parent.getChangeId()).current().submit();

    PushOneCommit.Result child = createChange("Child change", FILE_NAME, FILE_CONTENT);
    child.assertOkStatus();
    assertContent(child, FILE_NAME, FILE_CONTENT);

    RestResponse response =
        adminRestSession.get(
            "/changes/"
                + child.getChangeId()
                + "/revisions/current/files/"
                + FILE_NAME
                + "/content?parent=1");
    response.assertOK();
    assertThat(new String(Base64.decode(response.getEntityContent()), UTF_8))
        .isEqualTo(parentContent);
  }

  @Test
  public void contentOfInvalidParent() throws Exception {
    String parentContent = "parent content";
    PushOneCommit.Result parent = createChange("Parent change", FILE_NAME, parentContent);
    parent.assertOkStatus();

    gApi.changes().id(parent.getChangeId()).current().review(ReviewInput.approve());
    gApi.changes().id(parent.getChangeId()).current().submit();

    PushOneCommit.Result child = createChange("Child change", FILE_NAME, FILE_CONTENT);
    child.assertOkStatus();
    assertContent(child, FILE_NAME, FILE_CONTENT);

    RestResponse response =
        adminRestSession.get(
            "/changes/"
                + child.getChangeId()
                + "/revisions/current/files/"
                + FILE_NAME
                + "/content?parent=10");
    response.assertBadRequest();
    assertThat(response.getEntityContent()).isEqualTo("invalid parent");
  }

  @Test
  public void getReview() throws Exception {
    PushOneCommit.Result r = createChange();
    ObjectId ps1Commit = r.getCommit();
    r = amendChange(r.getChangeId());
    ObjectId ps2Commit = r.getCommit();

    ChangeInfo info1 = checkRevisionReview(r, 1, ps1Commit);
    assertThat(info1.currentRevision).isNull();

    ChangeInfo info2 = checkRevisionReview(r, 2, ps2Commit);
    assertThat(info2.currentRevision).isEqualTo(ps2Commit.name());
  }

  private ChangeInfo checkRevisionReview(
      PushOneCommit.Result r, int psNum, ObjectId expectedRevision) throws Exception {
    gApi.changes().id(r.getChangeId()).current().review(ReviewInput.approve());

    RestResponse response =
        adminRestSession.get("/changes/" + r.getChangeId() + "/revisions/" + psNum + "/review");
    response.assertOK();
    ChangeInfo info = newGson().fromJson(response.getReader(), ChangeInfo.class);

    // Check for DETAILED_ACCOUNTS, DETAILED_LABELS, and specified revision.
    assertThat(info.owner.name).isNotNull();
    assertThat(info.labels.get("Code-Review").all).hasSize(1);
    assertThat(info.revisions.keySet()).containsExactly(expectedRevision.name());
    return info;
  }
}


text:
try {
    var now = new Date();
    var dbname = "databasesync" + now.getTime();
    var db = self.openDatabaseSync(dbname, '1.0', 'database', 1024);
    if (db) {
        if (db.version == "1.0") {
            postMessage("PASS");
        } else {
            postMessage("The database's version is error");
        }
    } else {
        postMessage("Fail to open database");
    }
} catch (ex) {
    postMessage("Throw exception " + ex);
}


text:
package de.djuelg.neuronizer.presentation.ui.custom;

/**
 * This interface must be implemented by activities that contain a
 * fragment to allow an interaction in the fragment to be communicated
 * to the activity and potentially other fragments contained in that
 * activity.
 */
public interface FragmentInteractionListener {

    // called from PreviewFragment
    void onTodoListSelected(String uuid, String title);

    void onNoteSelected(String uuid, String title);

    // called from TodoListFragment

    void onAddItem(String todoListUuid);

    void onAddAnotherItem(String todoListUuid);

    void onEditItem(String todoListUuid, String itemUuid);

    void onSettingsSelected();

    void onImprintSelected();

    void onAboutSelected();

    void onUpdateAllWidgets(int delayMillis);
}


text:
void terminate(void);
#endif


text:
package sbt

import java.nio.file._
import utest._

object JniLibraryTest extends TestSuite {
  val tests = Tests {
    'load - {
      'native - {
        System.loadLibrary("sbt-jni-library-test0")
        new JniLibrary().getIntegerValue ==> 2
      }
    }
  }
}


text:
Changes
=======

beta 1.0 (released)
----------------
- homepage database search and variant search
- cosmetics
- Annotation variant search: 1. Peaks that intersect - coordinates, state and value 2. Files that created those peaks (bed) 3. Annotations with facets that those files belong to
- cluster deployment
- rest api
- UI for Single cell


text:
'use strict';

var padding = require('./padding.js');
var parsers = require('../parsers.js');

module.exports.definition = {
    set: parsers.subImplicitSetter('padding', 'bottom', padding.isValid, padding.parser),
    get: function () {
        return this.getPropertyValue('padding-bottom');
    },
    enumerable: true,
    configurable: true
};


text:
package il.technion.ewolf.kbr.openkad.msg;

import il.technion.ewolf.kbr.Key;
import il.technion.ewolf.kbr.Node;

import com.google.inject.Inject;
import com.google.inject.name.Named;

/**
 * A findNode request as defined in the kademlia protocol
 *
 * @author eyal.kibbar@gmail.com
 *
 */
public class ShadesFindNodeRequest extends KadRequest {

	private static final long serialVersionUID = -2437918697668927600L;
	private Key key;
	private boolean searchCache;
	private int requiredColor;
	private boolean isOnlyClosestToKey;

	@Inject
	ShadesFindNodeRequest(
			@Named("openkad.rnd.id") long id,
			@Named("openkad.local.node") Node src) {
		super(id, src);
	}
	/**
	 *
	 * @return the key we are searching
	 */
	public Key getKey() {
		return key;
	}

	public ShadesFindNodeRequest setKey(Key key) {
		this.key = key;
		return this;
	}

	@Override
	public ShadesFindNodeResponse generateResponse(@Named("openkad.local.node") Node localNode) {
		return new ShadesFindNodeResponse(getId(), localNode);
	}

	public ShadesFindNodeRequest setSearchCache(boolean searchCache) {
		this.searchCache = searchCache;
		return this;
	}

	public boolean shouldSearchCache() {
		return searchCache;
	}

	public ShadesFindNodeRequest setRequiredColor(int requiredColor) {
		this.requiredColor = requiredColor;
		return this;
	}

	public int getRequiredColor() {
		return requiredColor;
	}

	public boolean getOnlyClosestToKey() {
		return isOnlyClosestToKey;
	}

	public ShadesFindNodeRequest setOnlyClosestToKey(boolean isOnlyClosestToKey) {
		this.isOnlyClosestToKey = isOnlyClosestToKey;
		return this;
	}

}


text: This test passes if the div below contains 9 evenly spaced delete buttons, and if the high resolution resource is used when the deviceScaleFactor is 2.


text:
<!DOCTYPE HTML>

    <title>Offline Application Cache - API_status_OBSOLETE</title>

Remove the manifest file (manifest/clock.manifest) from the server.

Refresh the page.


text:
using namespace eeros::control;
using namespace eeros::safety;
using namespace eeros::sockets;
using namespace eeros::logger;
using namespace eeros::math;
using namespace eeros::task;
using namespace eeros;

class ControlSystem {
 public:
  ControlSystem(double dt) :
    c1({0.2, 0.3, 0.4, 0.5, 0.6, -0.7}),
    c2(56.5),
    c3(-28),
    c4({-5,8,-321}),
    socketA("127.0.0.1", 9876, 0.1),  // client
    log(Logger::getLogger('C')),
    timedomain("Main time domain", dt, true) {

    socketA.getOut().getSignal().setName("socketRead");
    socketA.getIn().connect(c1.getOut());
//     socketA.getIn().connect(c2.getOut());
//     socketA.getIn().connect(c3.getOut());
//     socketA.getIn().connect(c4.getOut());
    timedomain.addBlock(c1);
    timedomain.addBlock(c2);
    timedomain.addBlock(c3);
    timedomain.addBlock(c4);
    timedomain.addBlock(socketA);

    Executor::instance().add(timedomain);
  }

  Constant<Matrix<6,1,double>> c1;
  Constant<double> c2;
  Constant<int> c3;
  Constant<Matrix<3,1,int>> c4;
  SocketData<Matrix<6,1,double>, Vector4> socketA;	// send Matrix<6,1,double>, receive Vector4, connect to c1
//   SocketData<Matrix<3,1,int>, Vector4> socketA;		// send Matrix<3,1,int>, receive Vector4, connect to c4
//   SocketData<double, Vector4> socketA;			// send double, receive Vector4, connect to c2
//   SocketData<int, Vector4> socketA;			// send int, receive Vector4, connect to c3
//   SocketData<std::nullptr_t, Vector4> socketA;		// send nothing, receive Vector4, no connection
//   SocketData<Matrix<6,1,double>, double> socketA;		// send Matrix<6,1,double>, receive double, connect to c1
//   SocketData<Matrix<6,1,double>, int> socketA;		// send Matrix<6,1,double>, receive int, connect to c1
//   SocketData<Matrix<6,1,double>, std::nullptr_t> socketA;	// send Matrix<6,1,double>, receive nothing, connect to c1
//   SocketData<int, std::nullptr_t> socketA;		// send int, receive nothing, connect to c3

 private:
  Logger log;
  TimeDomain timedomain;
};

class SocketClientSafetyProperties : public SafetyProperties {
public:
  SocketClientSafetyProperties() : off("System off") {
    addLevel(off);
    setEntryLevel(off);
  }
  SafetyLevel off;
};

void signalHandler(int signum) {
  Executor::instance().stop();
}

int main(int argc, char **argv) {
  signal(SIGINT, signalHandler);
  double dt = 0.01;
  Logger::setDefaultStreamLogger(std::cout);
  Logger log = Logger::getLogger();

  log.info() << "EEROS started, socket client";

  ControlSystem cs(dt);
  SocketClientSafetyProperties sp;
  SafetySystem ss(sp, dt);

  Lambda l1;
  Periodic periodic("per1", 1.0, l1);
  periodic.monitors.push_back([&](PeriodicCounter &pc, Logger &log){
    log.info() << cs.socketA.getOut().getSignal();
    cs.c1.setValue(cs.c1.getOut().getSignal().getValue() + 3);
  });

  auto& executor = Executor::instance();
  executor.setMainTask(ss);
  executor.add(periodic);
  executor.run();

  log.info() << "Client program end";
  return 0;
}


text:
<!DOCTYPE html>

<html>

 <head>

  <meta charset="UTF-8">

  <link rel="author" title="Koji Ishii" href="mailto:kojiishi@gmail.com">
  <link rel="reviewer" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/"> <!-- 2015-05-01 -->

  <title>Embedded HTML document for background-size-document-root-vrl-002</title>

  <style>
    html
      {
        background-image: url("swatch-green.png");
        background-repeat: no-repeat;
        background-size: 100% 100%;
        writing-mode: vertical-rl;

        width: 100px;
      }
  </style>

 </head>

</html>


text:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!--
Licensed to the Apache Software Foundation (ASF) under one
or more contributor license agreements.  See the NOTICE file
distributed with this work for additional information
regarding copyright ownership.  The ASF licenses this file
to you under the Apache License, Version 2.0 (the
"License"); you may not use this file except in compliance
with the License.  You may obtain a copy of the License at

  http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing,
software distributed under the License is distributed on an
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
KIND, either express or implied.  See the License for the
specific language governing permissions and limitations
under the License.
-->
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties>
  <comment>Additional indexes (in respect to JPA's)</comment>

  <entry key="SyncopeUser_plainAttrs_idx">CREATE INDEX SyncopeUser_plainAttrs_idx ON SyncopeUser USING gin ((plainAttrs) jsonb_path_ops)</entry>
  <entry key="SyncopeGroup_plainAttrs_idx">CREATE INDEX SyncopeGroup_plainAttrs_idx ON SyncopeGroup USING gin ((plainAttrs) jsonb_path_ops)</entry>
  <entry key="AnyObject_plainAttrs_idx">CREATE INDEX AnyObject_plainAttrs_idx ON AnyObject USING gin ((plainAttrs) jsonb_path_ops)</entry>

  <entry key="UDynGroupMembers_any_id">CREATE INDEX UDynGroupMembers_any_id ON UDynGroupMembers(any_id)</entry>
  <entry key="UDynGroupMembers_group_id">CREATE INDEX UDynGroupMembers_group_id ON UDynGroupMembers(group_id)</entry>
  <entry key="ADynGroupMembers_any_id">CREATE INDEX ADynGroupMembers_any_id ON ADynGroupMembers(any_id)</entry>
  <entry key="ADynGroupMembers_group_id">CREATE INDEX ADynGroupMembers_group_id ON ADynGroupMembers(group_id)</entry>

  <entry key="DynRoleMembers_any_id">CREATE INDEX DynRoleMembers_any_id ON DynRoleMembers(any_id)</entry>
  <entry key="DynRoleMembers_role_id">CREATE INDEX DynRoleMembers_role_id ON DynRoleMembers(role_id)</entry>

  <entry key="DynRealmMembers_any_id">CREATE INDEX DynRealmMembers_any_id ON DynRealmMembers(any_id)</entry>
  <entry key="DynRealmMembers_realm_id">CREATE INDEX DynRealmMembers_dynRealm_id ON DynRealmMembers(dynRealm_id)</entry>

  <entry key="UMembership_GroupIndex">CREATE INDEX UMembership_GroupIndex ON UMembership(group_id)</entry>
  <entry key="UMembership_UserIndex">CREATE INDEX UMembership_UserIndex ON UMembership(user_id)</entry>
  <entry key="AMembership_GroupIndex">CREATE INDEX AMembership_GroupIndex ON AMembership(group_id)</entry>
  <entry key="AMembership_AnyObjectIndex">CREATE INDEX AMembership_AnyObjectIndex ON AMembership(anyObject_id)</entry>

  <entry key="URelationship_RightIndex">CREATE INDEX URelationship_RightIndex ON URelationship(anyObject_id)</entry>
  <entry key="URelationship_LeftIndex">CREATE INDEX URelationship_LeftIndex ON URelationship(user_id)</entry>
  <entry key="ARelationship_RightIndex">CREATE INDEX ARelationship_RightIndex ON ARelationship(right_anyObject_id)</entry>
  <entry key="ARelationship_AnyObjectIndex">CREATE INDEX ARelationship_AnyObjectIndex ON ARelationship(left_anyObject_id)</entry>

  <entry key="Task_executedIndex">CREATE INDEX Task_executedIndex ON NotificationTask(executed)</entry>
  <entry key="TaskExec1_TaskIdIndex">CREATE INDEX TaskExec1_TaskIdIndex ON PropagationTaskExec(task_id)</entry>
  <entry key="TaskExec2_TaskIdIndex">CREATE INDEX TaskExec2_TaskIdIndex ON PullTaskExec(task_id)</entry>
  <entry key="TaskExec3_TaskIdIndex">CREATE INDEX TaskExec3_TaskIdIndex ON PushTaskExec(task_id)</entry>
  <entry key="TaskExec4_TaskIdIndex">CREATE INDEX TaskExec4_TaskIdIndex ON NotificationTaskExec(task_id)</entry>
  <entry key="TaskExec5_TaskIdIndex">CREATE INDEX TaskExec5_TaskIdIndex ON SchedTaskExec(task_id)</entry>
  <entry key="ATPullTask_PullTaskIndex">CREATE INDEX ATPullTask_PullTaskIndex ON AnyTemplatePullTask(pullTask_id)</entry>
</properties>


text:
import argparse
import sys

from rocketsled import (
    load_assets, process_assets, generate_manifest_json, __version__,
)
from rocketsled.s3 import upload_assets

def main():
    parser = argparse.ArgumentParser(
        description='Upload static assets immutably to the cloud.'
    )
    parser.add_argument(
        'region', help='The S3 region of the bucket.',
    )
    parser.add_argument(
        'bucketname', help='The name of the bucket in S3 to upload to.',
    )
    parser.add_argument(
        '--prefix', help='The prefix for the S3 keys.  e.g., "static/"',
    )
    parser.add_argument(
        '--outfile', default='manifest.json',
        help='The file to output the manifest to.',
    )
    parser.add_argument(
        '--stdout', action='store_true',
        help='Output the manifest to stdout.',
    )
    parser.add_argument(
        '--version', action='version',
        version='%(prog)s {}'.format(__version__),
    )
    parser.add_argument(
        'path', nargs='+',
        help='Path to static files to upload.',
    )
    args = parser.parse_args()

    def output(text):
        if not args.stdout:
            sys.stdout.write(text)
            sys.stdout.flush()

    output('Collecting files... ')
    manifest = load_assets(*args.path)
    output('{}\n'.format(len(manifest)))
    output('Processing files... ')
    process_assets(manifest)
    output('Done.\n')
    upload_assets(manifest, args.region, args.bucketname, args.prefix,
                  progress=output)
    output = generate_manifest_json(args.path, manifest)
    if args.stdout:
        sys.stdout.write(output)
        sys.stdout.flush()
    else:
        with open(args.outfile, 'w') as fh:
            fh.write(output)

if __name__ == '__main__':
    main()


text:
package com.google.gerrit.acceptance.rest.change;

import static com.google.common.collect.Iterables.getOnlyElement;
import static com.google.common.truth.Truth.assertThat;
import static com.google.common.truth.Truth.assert_;
import static com.google.common.truth.TruthJUnit.assume;
import static com.google.gerrit.extensions.client.ListChangesOption.CURRENT_REVISION;
import static com.google.gerrit.extensions.client.ListChangesOption.DETAILED_LABELS;

import com.google.common.collect.Iterables;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.google.gerrit.acceptance.AbstractDaemonTest;
import com.google.gerrit.acceptance.PushOneCommit;
import com.google.gerrit.acceptance.RestResponse;
import com.google.gerrit.acceptance.TestProjectInput;
import com.google.gerrit.common.EventListener;
import com.google.gerrit.common.EventSource;
import com.google.gerrit.extensions.api.changes.SubmitInput;
import com.google.gerrit.extensions.api.projects.BranchInfo;
import com.google.gerrit.extensions.api.projects.ProjectInput;
import com.google.gerrit.extensions.client.ChangeStatus;
import com.google.gerrit.extensions.client.InheritableBoolean;
import com.google.gerrit.extensions.client.ListChangesOption;
import com.google.gerrit.extensions.client.SubmitType;
import com.google.gerrit.extensions.common.ChangeInfo;
import com.google.gerrit.extensions.common.LabelInfo;
import com.google.gerrit.reviewdb.client.Account;
import com.google.gerrit.reviewdb.client.Change;
import com.google.gerrit.reviewdb.client.LabelId;
import com.google.gerrit.reviewdb.client.PatchSet;
import com.google.gerrit.reviewdb.client.PatchSetApproval;
import com.google.gerrit.reviewdb.client.Project;
import com.google.gerrit.server.ApprovalsUtil;
import com.google.gerrit.server.CurrentUser;
import com.google.gerrit.server.IdentifiedUser;
import com.google.gerrit.server.events.ChangeMergedEvent;
import com.google.gerrit.server.events.Event;
import com.google.gerrit.server.notedb.ChangeNotes;
import com.google.gerrit.testutil.ConfigSuite;
import com.google.gson.reflect.TypeToken;
import com.google.gwtorm.server.OrmException;
import com.google.inject.Inject;

import org.apache.http.HttpStatus;
import org.eclipse.jgit.diff.DiffFormatter;
import org.eclipse.jgit.junit.TestRepository;
import org.eclipse.jgit.lib.Config;
import org.eclipse.jgit.lib.ObjectId;
import org.eclipse.jgit.lib.Ref;
import org.eclipse.jgit.lib.Repository;
import org.eclipse.jgit.revwalk.RevCommit;
import org.eclipse.jgit.revwalk.RevWalk;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.sql.Timestamp;
import java.util.Collections;
import java.util.List;
import java.util.Map;

public abstract class AbstractSubmit extends AbstractDaemonTest {
  @ConfigSuite.Config
  public static Config submitWholeTopicEnabled() {
    return submitWholeTopicEnabledConfig();
  }

  private Map<String, String> mergeResults;

  @Inject
  private ChangeNotes.Factory notesFactory;

  @Inject
  private ApprovalsUtil approvalsUtil;

  @Inject
  private IdentifiedUser.GenericFactory factory;

  @Inject
  EventSource source;

  @Before
  public void setUp() throws Exception {
    mergeResults = Maps.newHashMap();
    CurrentUser listenerUser = factory.create(user.id);
    source.addEventListener(new EventListener() {

      @Override
      public void onEvent(Event event) {
        if (event instanceof ChangeMergedEvent) {
          ChangeMergedEvent changeMergedEvent = (ChangeMergedEvent) event;
          mergeResults.put(changeMergedEvent.change.number,
              changeMergedEvent.newRev);
        }
      }

    }, listenerUser);
  }

  @After
  public void cleanup() {
    db.close();
  }

  protected abstract SubmitType getSubmitType();

  @Test
  @TestProjectInput(createEmptyCommit = false)
  public void submitToEmptyRepo() throws Exception {
    PushOneCommit.Result change = createChange();
    submit(change.getChangeId());
    assertThat(getRemoteHead().getId()).isEqualTo(change.getCommitId());
  }

  @Test
  public void submitWholeTopic() throws Exception {
    assume().that(isSubmitWholeTopicEnabled()).isTrue();
    PushOneCommit.Result change1 =
        createChange("Change 1", "a.txt", "content", "test-topic");
    PushOneCommit.Result change2 =
        createChange("Change 2", "b.txt", "content", "test-topic");
    PushOneCommit.Result change3 =
        createChange("Change 3", "c.txt", "content", "test-topic");
    approve(change1.getChangeId());
    approve(change2.getChangeId());
    approve(change3.getChangeId());
    submit(change3.getChangeId());
    change1.assertChange(Change.Status.MERGED, "test-topic", admin);
    change2.assertChange(Change.Status.MERGED, "test-topic", admin);
    change3.assertChange(Change.Status.MERGED, "test-topic", admin);
    assertSubmitter(change1);
    assertSubmitter(change2);
    assertSubmitter(change3);
  }

  private void assertSubmitter(PushOneCommit.Result change) throws Exception {
    ChangeInfo info = get(change.getChangeId(), ListChangesOption.MESSAGES);
    assertThat(info.messages).isNotNull();
    assertThat(info.messages).hasSize(3);
    if (getSubmitType() == SubmitType.CHERRY_PICK) {
      assertThat(Iterables.getLast(info.messages).message).startsWith(
          "Change has been successfully cherry-picked as ");
    } else {
      assertThat(Iterables.getLast(info.messages).message).isEqualTo(
          "Change has been successfully merged into the git repository by Administrator");
    }
  }

  @Override
  protected void updateProjectInput(ProjectInput in) {
    in.submitType = getSubmitType();
    if (in.useContentMerge == InheritableBoolean.INHERIT) {
      in.useContentMerge = InheritableBoolean.FALSE;
    }
  }

  protected PushOneCommit.Result createChange(String subject,
      String fileName, String content) throws Exception {
    PushOneCommit push =
        pushFactory.create(db, admin.getIdent(), testRepo, subject, fileName, content);
    return push.to("refs/for/master");
  }

  protected PushOneCommit.Result createChange(String subject,
      String fileName, String content, String topic)
          throws Exception {
    PushOneCommit push =
        pushFactory.create(db, admin.getIdent(), testRepo, subject, fileName, content);
    return push.to("refs/for/master/" + topic);
  }

  protected void submit(String changeId) throws Exception {
    submit(changeId, HttpStatus.SC_OK);
  }

  protected void submitWithConflict(String changeId) throws Exception {
    submit(changeId, HttpStatus.SC_CONFLICT);
  }

  protected void submitStatusOnly(String changeId) throws Exception {
    approve(changeId);
    Change c = queryProvider.get().byKeyPrefix(changeId).get(0).change();
    c.setStatus(Change.Status.SUBMITTED);
    db.changes().update(Collections.singleton(c));
    db.patchSetApprovals().insert(Collections.singleton(
        new PatchSetApproval(
            new PatchSetApproval.Key(
                c.currentPatchSetId(),
                admin.id,
                LabelId.SUBMIT),
            (short) 1,
            new Timestamp(System.currentTimeMillis()))));
    indexer.index(db, c);
  }

  private void submit(String changeId, int expectedStatus) throws Exception {
    approve(changeId);
    SubmitInput subm = new SubmitInput();
    subm.waitForMerge = true;
    RestResponse r =
        adminSession.post("/changes/" + changeId + "/submit", subm);
    assertThat(r.getStatusCode()).isEqualTo(expectedStatus);
    if (expectedStatus == HttpStatus.SC_OK) {
      ChangeInfo change =
          newGson().fromJson(r.getReader(),
              new TypeToken<ChangeInfo>() {}.getType());
      assertThat(change.status).isEqualTo(ChangeStatus.MERGED);

      checkMergeResult(change);
    }
    r.consume();
  }

  private void checkMergeResult(ChangeInfo change) throws IOException {
    // Get the revision of the branch after the submit to compare with the
    // newRev of the ChangeMergedEvent.
    RestResponse b =
        adminSession.get("/projects/" + project.get() + "/branches/"
            + change.branch);
    if (b.getStatusCode() == HttpStatus.SC_OK) {
      BranchInfo branch =
          newGson().fromJson(b.getReader(),
              new TypeToken<BranchInfo>() {}.getType());
      assertThat(branch.revision).isEqualTo(
          mergeResults.get(Integer.toString(change._number)));
    }
    b.consume();
  }

  protected void assertCurrentRevision(String changeId, int expectedNum,
      ObjectId expectedId) throws Exception {
    ChangeInfo c = get(changeId, CURRENT_REVISION);
    assertThat(c.currentRevision).isEqualTo(expectedId.name());
    assertThat(c.revisions.get(expectedId.name())._number).isEqualTo(expectedNum);
    Repository repo =
        repoManager.openRepository(new Project.NameKey(c.project));
    try {
      Ref ref = repo.getRef(
          new PatchSet.Id(new Change.Id(c._number), expectedNum).toRefName());
      assertThat(ref).isNotNull();
      assertThat(ref.getObjectId()).isEqualTo(expectedId);
    } finally {
      repo.close();
    }
  }

  protected void assertApproved(String changeId) throws Exception {
    ChangeInfo c = get(changeId, DETAILED_LABELS);
    LabelInfo cr = c.labels.get("Code-Review");
    assertThat(cr.all).hasSize(1);
    assertThat(cr.all.get(0).value).isEqualTo(2);
    assertThat(new Account.Id(cr.all.get(0)._accountId)).isEqualTo(admin.getId());
  }

  protected void assertSubmitter(String changeId, int psId)
      throws OrmException {
    ChangeNotes cn = notesFactory.create(
        getOnlyElement(queryProvider.get().byKeyPrefix(changeId)).change());
    PatchSetApproval submitter = approvalsUtil.getSubmitter(
        db, cn, new PatchSet.Id(cn.getChangeId(), psId));
    assertThat(submitter.isSubmit()).isTrue();
    assertThat(submitter.getAccountId()).isEqualTo(admin.getId());
  }

  protected void assertCherryPick(TestRepository<?> testRepo,
      boolean contentMerge) throws IOException {
    assertRebase(testRepo, contentMerge);
    RevCommit remoteHead = getRemoteHead();
    assertThat(remoteHead.getFooterLines("Reviewed-On")).isNotEmpty();
    assertThat(remoteHead.getFooterLines("Reviewed-By")).isNotEmpty();
  }

  protected void assertRebase(TestRepository<?> testRepo, boolean contentMerge)
      throws IOException {
    Repository repo = testRepo.getRepository();
    RevCommit localHead = getHead(repo);
    RevCommit remoteHead = getRemoteHead();
    assert_().withFailureMessage(
        String.format("%s not equal %s", localHead.name(), remoteHead.name()))
          .that(localHead.getId()).isNotEqualTo(remoteHead.getId());
    assertThat(remoteHead.getParentCount()).isEqualTo(1);
    if (!contentMerge) {
      assertThat(getLatestRemoteDiff()).isEqualTo(getLatestDiff(repo));
    }
    assertThat(remoteHead.getShortMessage()).isEqualTo(localHead.getShortMessage());
  }

  private RevCommit getHead(Repository repo) throws IOException {
    return getHead(repo, "HEAD");
  }

  protected RevCommit getRemoteHead() throws IOException {
    try (Repository repo = repoManager.openRepository(project)) {
      return getHead(repo, "refs/heads/master");
    }
  }

  protected List<RevCommit> getRemoteLog() throws IOException {
    try (Repository repo = repoManager.openRepository(project);
        RevWalk rw = new RevWalk(repo)) {
      rw.markStart(rw.parseCommit(
          repo.getRef("refs/heads/master").getObjectId()));
      return Lists.newArrayList(rw);
    }
  }

  private RevCommit getHead(Repository repo, String name) throws IOException {
    try (RevWalk rw = new RevWalk(repo)) {
      return rw.parseCommit(repo.getRef(name).getObjectId());
    }
  }

  private String getLatestDiff(Repository repo) throws IOException {
    ObjectId oldTreeId = repo.resolve("HEAD~1^{tree}");
    ObjectId newTreeId = repo.resolve("HEAD^{tree}");
    return getLatestDiff(repo, oldTreeId, newTreeId);
  }

  private String getLatestRemoteDiff() throws IOException {
    try (Repository repo = repoManager.openRepository(project);
        RevWalk rw = new RevWalk(repo)) {
      ObjectId oldTreeId = repo.resolve("refs/heads/master~1^{tree}");
      ObjectId newTreeId = repo.resolve("refs/heads/master^{tree}");
      return getLatestDiff(repo, oldTreeId, newTreeId);
    }
  }

  private String getLatestDiff(Repository repo, ObjectId oldTreeId,
      ObjectId newTreeId) throws IOException {
    ByteArrayOutputStream out = new ByteArrayOutputStream();
    try (DiffFormatter fmt = new DiffFormatter(out)) {
      fmt.setRepository(repo);
      fmt.format(oldTreeId, newTreeId);
      fmt.flush();
      return out.toString();
    }
  }
}